@routstr/sdk 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.d.mts +7 -2
- package/dist/client/index.d.ts +7 -2
- package/dist/client/index.js +204 -68
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +204 -68
- package/dist/client/index.mjs.map +1 -1
- package/dist/discovery/index.d.mts +7 -1
- package/dist/discovery/index.d.ts +7 -1
- package/dist/discovery/index.js +66 -0
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +66 -0
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +325 -72
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +325 -72
- package/dist/index.mjs.map +1 -1
- package/dist/{interfaces-BOfiz3Tt.d.mts → interfaces-B85Wx7ni.d.mts} +15 -0
- package/dist/{interfaces-BbAtkq7z.d.ts → interfaces-BVNyAmKu.d.ts} +15 -0
- package/dist/{interfaces-CW773NQv.d.ts → interfaces-CC0LT9p9.d.ts} +20 -0
- package/dist/{interfaces-CEOwpdG0.d.mts → interfaces-DGdP8fQp.d.mts} +20 -0
- package/dist/storage/index.d.mts +23 -4
- package/dist/storage/index.d.ts +23 -4
- package/dist/storage/index.js +55 -4
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +55 -4
- package/dist/storage/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +15 -3
- package/dist/wallet/index.d.ts +15 -3
- package/dist/wallet/index.js +84 -17
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +84 -17
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../storage/drivers/localStorage.ts","../../storage/drivers/memory.ts","../../storage/drivers/sqlite.ts","../../storage/drivers/indexedDB.ts","../../storage/keys.ts","../../storage/store.ts","../../storage/index.ts"],"names":["isBun"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { StorageDriver } from \"../types\";\n\nconst canUseLocalStorage = (): boolean => {\n return (\n typeof window !== \"undefined\" && typeof window.localStorage !== \"undefined\"\n );\n};\n\nconst isQuotaExceeded = (error: unknown): boolean => {\n const e = error as { name?: string; code?: number } | null;\n return (\n !!e &&\n (e?.name === \"QuotaExceededError\" || e?.code === 22 || e?.code === 1014)\n );\n};\n\nconst NON_CRITICAL_KEYS = new Set<string>([\"modelsFromAllProviders\"]);\n\nexport const localStorageDriver: StorageDriver = {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n if (!canUseLocalStorage()) return defaultValue;\n try {\n const item = window.localStorage.getItem(key);\n if (item === null) return defaultValue;\n try {\n return JSON.parse(item) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return item as T;\n }\n throw parseError;\n }\n } catch (error) {\n console.error(`Error retrieving item with key \"${key}\":`, error);\n if (canUseLocalStorage()) {\n try {\n window.localStorage.removeItem(key);\n } catch (removeError) {\n console.error(\n `Error removing corrupted item with key \"${key}\":`,\n removeError\n );\n }\n }\n return defaultValue;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n if (!canUseLocalStorage()) return;\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n if (isQuotaExceeded(error)) {\n if (NON_CRITICAL_KEYS.has(key)) {\n console.warn(\n `Storage quota exceeded; skipping non-critical key \"${key}\".`\n );\n return;\n }\n try {\n window.localStorage.removeItem(\"modelsFromAllProviders\");\n } catch {}\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n return;\n } catch (retryError) {\n console.warn(\n `Storage quota exceeded; unable to persist key \"${key}\" after cleanup attempt.`,\n retryError\n );\n return;\n }\n }\n console.error(`Error storing item with key \"${key}\":`, error);\n }\n },\n async removeItem(key: string): Promise<void> {\n if (!canUseLocalStorage()) return;\n try {\n window.localStorage.removeItem(key);\n } catch (error) {\n console.error(`Error removing item with key \"${key}\":`, error);\n }\n },\n};\n","import type { StorageDriver } from \"../types\";\n\nexport const createMemoryDriver = (\n seed?: Record<string, string>\n): StorageDriver => {\n const store = new Map<string, string>();\n\n if (seed) {\n for (const [key, value] of Object.entries(seed)) {\n store.set(key, value);\n }\n }\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n const item = store.get(key);\n if (item === undefined) return defaultValue;\n try {\n return JSON.parse(item) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return item as T;\n }\n throw parseError;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n store.set(key, JSON.stringify(value));\n },\n async removeItem(key: string): Promise<void> {\n store.delete(key);\n },\n };\n};\n","import type { StorageDriver } from \"../types\";\n\ntype BetterSqlite3Database = {\n prepare: (sql: string) => {\n run: (...params: any[]) => { changes: number };\n get: (...params: any[]) => any;\n };\n exec: (sql: string) => void;\n close?: () => void;\n};\n\nexport interface SqliteDriverOptions {\n dbPath?: string;\n tableName?: string;\n}\n\nconst isBun = (): boolean => {\n return typeof process.versions.bun !== \"undefined\";\n};\n\nconst createDatabase = (dbPath: string): BetterSqlite3Database => {\n if (isBun()) {\n throw new Error(\n \"SQLite driver not supported in Bun. Use createMemoryDriver() instead.\"\n );\n }\n\n let Database: any = null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n Database = require(\"better-sqlite3\");\n } catch (error) {\n throw new Error(\n `better-sqlite3 is required for sqlite storage. Install it to use sqlite storage. (${error})`\n );\n }\n return new Database(dbPath);\n};\n\nexport const createSqliteDriver = (\n options: SqliteDriverOptions = {}\n): StorageDriver => {\n const dbPath = options.dbPath || \"routstr.sqlite\";\n const tableName = options.tableName || \"sdk_storage\";\n\n const db = createDatabase(dbPath);\n db.exec(\n `CREATE TABLE IF NOT EXISTS ${tableName} (key TEXT PRIMARY KEY, value TEXT NOT NULL)`\n );\n\n const selectStmt = db.prepare(`SELECT value FROM ${tableName} WHERE key = ?`);\n const upsertStmt = db.prepare(\n `INSERT INTO ${tableName} (key, value) VALUES (?, ?)\n ON CONFLICT(key) DO UPDATE SET value = excluded.value`\n );\n const deleteStmt = db.prepare(`DELETE FROM ${tableName} WHERE key = ?`);\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n try {\n const row = selectStmt.get(key);\n if (!row || typeof row.value !== \"string\") return defaultValue;\n try {\n return JSON.parse(row.value) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return row.value as T;\n }\n throw parseError;\n }\n } catch (error) {\n console.error(`SQLite getItem failed for key \"${key}\":`, error);\n return defaultValue;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n try {\n upsertStmt.run(key, JSON.stringify(value));\n } catch (error) {\n console.error(`SQLite setItem failed for key \"${key}\":`, error);\n }\n },\n async removeItem(key: string): Promise<void> {\n try {\n deleteStmt.run(key);\n } catch (error) {\n console.error(`SQLite removeItem failed for key \"${key}\":`, error);\n }\n },\n };\n};\n","import type { StorageDriver } from \"../types\";\n\nexport interface IndexedDBDriverOptions {\n dbName?: string;\n storeName?: string;\n}\n\nconst openDatabase = (\n dbName: string,\n storeName: string\n): Promise<IDBDatabase> => {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n};\n\nexport const createIndexedDBDriver = (\n options: IndexedDBDriverOptions = {}\n): StorageDriver => {\n const dbName = options.dbName || \"routstr-sdk\";\n const storeName = options.storeName || \"sdk_storage\";\n\n let dbPromise: Promise<IDBDatabase> | null = null;\n\n const getDb = (): Promise<IDBDatabase> => {\n if (!dbPromise) {\n dbPromise = openDatabase(dbName, storeName);\n }\n return dbPromise;\n };\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n try {\n const db = await getDb();\n return new Promise<T>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readonly\");\n const store = tx.objectStore(storeName);\n const request = store.get(key);\n\n request.onsuccess = () => {\n const raw = request.result;\n if (raw === undefined) {\n resolve(defaultValue);\n return;\n }\n // Values are stored as raw JSON strings\n if (typeof raw === \"string\") {\n try {\n resolve(JSON.parse(raw) as T);\n } catch {\n if (typeof defaultValue === \"string\") {\n resolve(raw as T);\n } else {\n resolve(defaultValue);\n }\n }\n } else {\n // If stored as a native JS value (e.g. from a previous driver)\n resolve(raw as T);\n }\n };\n request.onerror = () => reject(request.error);\n });\n } catch (error) {\n console.error(`IndexedDB getItem failed for key \"${key}\":`, error);\n return defaultValue;\n }\n },\n\n async setItem<T>(key: string, value: T): Promise<void> {\n try {\n const db = await getDb();\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readwrite\");\n const store = tx.objectStore(storeName);\n store.put(JSON.stringify(value), key);\n\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } catch (error) {\n console.error(`IndexedDB setItem failed for key \"${key}\":`, error);\n }\n },\n\n async removeItem(key: string): Promise<void> {\n try {\n const db = await getDb();\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readwrite\");\n const store = tx.objectStore(storeName);\n store.delete(key);\n\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } catch (error) {\n console.error(`IndexedDB removeItem failed for key \"${key}\":`, error);\n }\n },\n };\n};\n","export const SDK_STORAGE_KEYS = {\n MODELS_FROM_ALL_PROVIDERS: \"modelsFromAllProviders\",\n LAST_USED_MODEL: \"lastUsedModel\",\n BASE_URLS_LIST: \"base_urls_list\",\n DISABLED_PROVIDERS: \"disabled_providers\",\n MINTS_FROM_ALL_PROVIDERS: \"mints_from_all_providers\",\n INFO_FROM_ALL_PROVIDERS: \"info_from_all_providers\",\n LAST_MODELS_UPDATE: \"lastModelsUpdate\",\n LAST_BASE_URLS_UPDATE: \"lastBaseUrlsUpdate\",\n LOCAL_CASHU_TOKENS: \"local_cashu_tokens\",\n API_KEYS: \"api_keys\",\n CHILD_KEYS: \"child_keys\",\n} as const;\n\nexport type SdkStorageKey =\n (typeof SDK_STORAGE_KEYS)[keyof typeof SDK_STORAGE_KEYS];\n","import { createStore, type StoreApi } from \"zustand/vanilla\";\nimport type { DiscoveryAdapter } from \"../discovery/interfaces\";\nimport type { StorageAdapter, ProviderRegistry } from \"../wallet/interfaces\";\nimport type { ProviderInfo, Model } from \"../core\";\nimport { getDecodedToken } from \"@cashu/cashu-ts\";\nimport { SDK_STORAGE_KEYS } from \"./keys\";\nimport type { StorageDriver, SdkStorageState } from \"./types\";\n\nconst normalizeBaseUrl = (baseUrl: string): string =>\n baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`;\n\nconst getTokenBalance = (token: string): number => {\n try {\n const decoded = getDecodedToken(token);\n const unitDivisor = decoded.unit === \"msat\" ? 1000 : 1;\n let sum = 0;\n for (const proof of decoded.proofs) {\n sum += proof.amount / unitDivisor;\n }\n return sum;\n } catch {\n return 0;\n }\n};\n\nexport interface SdkStoreOptions {\n driver: StorageDriver;\n}\n\nexport interface SdkStorageStore extends SdkStorageState {\n setModelsFromAllProviders: (value: Record<string, Model[]>) => void;\n setLastUsedModel: (value: string | null) => void;\n setBaseUrlsList: (value: string[]) => void;\n setBaseUrlsLastUpdate: (value: number | null) => void;\n setDisabledProviders: (value: string[]) => void;\n setMintsFromAllProviders: (value: Record<string, string[]>) => void;\n setInfoFromAllProviders: (value: Record<string, ProviderInfo>) => void;\n setLastModelsUpdate: (value: Record<string, number>) => void;\n setCachedTokens: (\n value:\n | Array<{\n baseUrl: string;\n token: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n | ((\n current: SdkStorageStore[\"cachedTokens\"]\n ) => SdkStorageStore[\"cachedTokens\"])\n ) => void;\n setApiKeys: (\n value:\n | Array<{\n baseUrl: string;\n key: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n | ((current: SdkStorageStore[\"apiKeys\"]) => SdkStorageStore[\"apiKeys\"])\n ) => void;\n setChildKeys: (\n value: Array<{\n parentBaseUrl: string;\n childKey: string;\n balance: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt: number;\n }>\n ) => void;\n}\n\n/** Store type returned after async initialization */\nexport type SdkStore = StoreApi<SdkStorageStore>;\n\nexport const createSdkStore = async ({\n driver,\n}: SdkStoreOptions): Promise<SdkStore> => {\n // Hydrate all initial state from the async driver in parallel\n const [\n rawModels,\n lastUsedModel,\n rawBaseUrls,\n lastBaseUrlsUpdate,\n rawDisabledProviders,\n rawMints,\n rawInfo,\n rawLastModelsUpdate,\n rawCachedTokens,\n rawApiKeys,\n rawChildKeys,\n ] = await Promise.all([\n driver.getItem<Record<string, Model[]>>(\n SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<string | null>(SDK_STORAGE_KEYS.LAST_USED_MODEL, null),\n driver.getItem<string[]>(SDK_STORAGE_KEYS.BASE_URLS_LIST, []),\n driver.getItem<number | null>(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, null),\n driver.getItem<string[]>(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, []),\n driver.getItem<Record<string, string[]>>(\n SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<Record<string, ProviderInfo>>(\n SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<Record<string, number>>(\n SDK_STORAGE_KEYS.LAST_MODELS_UPDATE,\n {}\n ),\n driver.getItem<\n Array<{\n baseUrl: string;\n token: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n >(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, []),\n driver.getItem<\n Array<{\n baseUrl: string;\n key: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n >(SDK_STORAGE_KEYS.API_KEYS, []),\n driver.getItem<\n Array<{\n parentBaseUrl: string;\n childKey: string;\n balance?: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt?: number;\n }>\n >(SDK_STORAGE_KEYS.CHILD_KEYS, []),\n ]);\n\n // Normalize all hydrated state\n const modelsFromAllProviders = Object.fromEntries(\n Object.entries(rawModels).map(([baseUrl, models]) => [\n normalizeBaseUrl(baseUrl),\n models,\n ])\n );\n\n const baseUrlsList = rawBaseUrls.map((url) => normalizeBaseUrl(url));\n\n const disabledProviders = rawDisabledProviders.map((url) =>\n normalizeBaseUrl(url)\n );\n\n const mintsFromAllProviders = Object.fromEntries(\n Object.entries(rawMints).map(([baseUrl, mints]) => [\n normalizeBaseUrl(baseUrl),\n mints.map((mint) => (mint.endsWith(\"/\") ? mint.slice(0, -1) : mint)),\n ])\n );\n\n const infoFromAllProviders = Object.fromEntries(\n Object.entries(rawInfo).map(([baseUrl, info]) => [\n normalizeBaseUrl(baseUrl),\n info,\n ])\n );\n\n const lastModelsUpdate = Object.fromEntries(\n Object.entries(rawLastModelsUpdate).map(([baseUrl, timestamp]) => [\n normalizeBaseUrl(baseUrl),\n timestamp,\n ])\n );\n\n const cachedTokens = rawCachedTokens.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance:\n typeof entry.balance === \"number\"\n ? entry.balance\n : getTokenBalance(entry.token),\n lastUsed: entry.lastUsed ?? null,\n }));\n\n const apiKeys = rawApiKeys.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance: entry.balance ?? 0,\n lastUsed: entry.lastUsed ?? null,\n }));\n\n const childKeys = rawChildKeys.map((entry) => ({\n parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),\n childKey: entry.childKey,\n balance: entry.balance ?? 0,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt ?? Date.now(),\n }));\n\n // Create the store with hydrated state.\n // All setters update in-memory state synchronously and persist to driver\n // as fire-and-forget (no await on setItem).\n return createStore<SdkStorageStore>((set, get) => ({\n modelsFromAllProviders,\n lastUsedModel,\n baseUrlsList,\n lastBaseUrlsUpdate,\n disabledProviders,\n mintsFromAllProviders,\n infoFromAllProviders,\n lastModelsUpdate,\n cachedTokens,\n apiKeys,\n childKeys,\n setModelsFromAllProviders: (value) => {\n const normalized: Record<string, Model[]> = {};\n for (const [baseUrl, models] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = models;\n }\n void driver.setItem(\n SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,\n normalized\n );\n set({ modelsFromAllProviders: normalized });\n },\n setLastUsedModel: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);\n set({ lastUsedModel: value });\n },\n setBaseUrlsList: (value) => {\n const normalized = value.map((url) => normalizeBaseUrl(url));\n void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);\n set({ baseUrlsList: normalized });\n },\n setBaseUrlsLastUpdate: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);\n set({ lastBaseUrlsUpdate: value });\n },\n setDisabledProviders: (value) => {\n const normalized = value.map((url) => normalizeBaseUrl(url));\n void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);\n set({ disabledProviders: normalized });\n },\n setMintsFromAllProviders: (value) => {\n const normalized: Record<string, string[]> = {};\n for (const [baseUrl, mints] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = mints.map((mint) =>\n mint.endsWith(\"/\") ? mint.slice(0, -1) : mint\n );\n }\n void driver.setItem(\n SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,\n normalized\n );\n set({ mintsFromAllProviders: normalized });\n },\n setInfoFromAllProviders: (value) => {\n const normalized: Record<string, ProviderInfo> = {};\n for (const [baseUrl, info] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = info;\n }\n void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);\n set({ infoFromAllProviders: normalized });\n },\n setLastModelsUpdate: (value) => {\n const normalized: Record<string, number> = {};\n for (const [baseUrl, timestamp] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = timestamp;\n }\n void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);\n set({ lastModelsUpdate: normalized });\n },\n setCachedTokens: (value) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.cachedTokens) : value;\n const normalized = updates.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance:\n typeof entry.balance === \"number\"\n ? entry.balance\n : getTokenBalance(entry.token),\n lastUsed: entry.lastUsed ?? null,\n }));\n void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);\n return { cachedTokens: normalized };\n });\n },\n setApiKeys: (value) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.apiKeys) : value;\n const normalized = updates.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance: entry.balance ?? 0,\n lastUsed: entry.lastUsed ?? null,\n }));\n void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);\n return { apiKeys: normalized };\n });\n },\n setChildKeys: (\n value:\n | Array<{\n parentBaseUrl: string;\n childKey: string;\n balance?: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt?: number;\n }>\n | ((\n current: SdkStorageStore[\"childKeys\"]\n ) => SdkStorageStore[\"childKeys\"])\n ) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.childKeys) : value;\n const normalized = updates.map((entry) => ({\n parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),\n childKey: entry.childKey,\n balance: entry.balance ?? 0,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt ?? Date.now(),\n }));\n void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);\n return { childKeys: normalized };\n });\n },\n }));\n};\n\nexport const createDiscoveryAdapterFromStore = (\n store: SdkStore\n): DiscoveryAdapter => ({\n getCachedModels: () => store.getState().modelsFromAllProviders,\n setCachedModels: (models) =>\n store.getState().setModelsFromAllProviders(models),\n getCachedMints: () => store.getState().mintsFromAllProviders,\n setCachedMints: (mints) => store.getState().setMintsFromAllProviders(mints),\n getCachedProviderInfo: () => store.getState().infoFromAllProviders,\n setCachedProviderInfo: (info) =>\n store.getState().setInfoFromAllProviders(info),\n getProviderLastUpdate: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const timestamps = store.getState().lastModelsUpdate;\n return timestamps[normalized] || null;\n },\n setProviderLastUpdate: (baseUrl, timestamp) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const timestamps = { ...store.getState().lastModelsUpdate };\n timestamps[normalized] = timestamp;\n store.getState().setLastModelsUpdate(timestamps);\n },\n getLastUsedModel: () => store.getState().lastUsedModel,\n setLastUsedModel: (modelId) => store.getState().setLastUsedModel(modelId),\n getDisabledProviders: () => store.getState().disabledProviders,\n getBaseUrlsList: () => store.getState().baseUrlsList,\n setBaseUrlsList: (urls) => store.getState().setBaseUrlsList(urls),\n getBaseUrlsLastUpdate: () => store.getState().lastBaseUrlsUpdate,\n setBaseUrlsLastUpdate: (timestamp) =>\n store.getState().setBaseUrlsLastUpdate(timestamp),\n});\n\nexport const createStorageAdapterFromStore = (\n store: SdkStore\n): StorageAdapter => ({\n getToken: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const entry = store\n .getState()\n .cachedTokens.find((token) => token.baseUrl === normalized);\n if (!entry) return null;\n const next = store\n .getState()\n .cachedTokens.map((token) =>\n token.baseUrl === normalized\n ? { ...token, lastUsed: Date.now() }\n : token\n );\n store.getState().setCachedTokens(next);\n return entry.token;\n },\n setToken: (baseUrl, token) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const tokens = store.getState().cachedTokens;\n const balance = getTokenBalance(token);\n const existingIndex = tokens.findIndex(\n (entry) => entry.baseUrl === normalized\n );\n if (existingIndex !== -1) {\n throw new Error(`Token already exists for baseUrl: ${normalized}`);\n }\n const next = [...tokens];\n next.push({\n baseUrl: normalized,\n token,\n balance,\n lastUsed: Date.now(),\n });\n store.getState().setCachedTokens(next);\n },\n removeToken: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = store\n .getState()\n .cachedTokens.filter((entry) => entry.baseUrl !== normalized);\n store.getState().setCachedTokens(next);\n },\n updateTokenBalance: (baseUrl, balance) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const tokens = store.getState().cachedTokens;\n const next = tokens.map((entry) =>\n entry.baseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setCachedTokens(next);\n },\n getCachedTokenDistribution: () => {\n const cachedTokens = store.getState().cachedTokens;\n const distributionMap: Record<string, number> = {};\n\n for (const entry of cachedTokens) {\n const sum = entry.balance || 0;\n if (sum > 0) {\n distributionMap[entry.baseUrl] =\n (distributionMap[entry.baseUrl] || 0) + sum;\n }\n }\n\n return Object.entries(distributionMap)\n .map(([baseUrl, amt]) => ({ baseUrl, amount: amt }))\n .sort((a, b) => b.amount - a.amount);\n },\n getApiKeyDistribution: () => {\n const apiKeys = store.getState().apiKeys;\n const distributionMap: Record<string, number> = {};\n\n for (const entry of apiKeys) {\n const sum = entry.balance || 0;\n if (sum > 0) {\n distributionMap[entry.baseUrl] =\n (distributionMap[entry.baseUrl] || 0) + sum;\n }\n }\n\n return Object.entries(distributionMap)\n .map(([baseUrl, amt]) => ({ baseUrl, amount: amt }))\n .sort((a, b) => b.amount - a.amount);\n },\n saveProviderInfo: (baseUrl, info) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = { ...store.getState().infoFromAllProviders };\n next[normalized] = info;\n store.getState().setInfoFromAllProviders(next);\n },\n getProviderInfo: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().infoFromAllProviders[normalized] || null;\n },\n\n // ========== API Keys (for apikeys mode) ==========\n\n getApiKey: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const entry = store\n .getState()\n .apiKeys.find((key) => key.baseUrl === normalized);\n if (!entry) return null;\n // Update lastUsed timestamp\n const next = store\n .getState()\n .apiKeys.map((key) =>\n key.baseUrl === normalized ? { ...key, lastUsed: Date.now() } : key\n );\n store.getState().setApiKeys(next);\n return entry;\n },\n\n setApiKey: (baseUrl, key) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const keys = store.getState().apiKeys;\n const existingIndex = keys.findIndex(\n (entry) => entry.baseUrl === normalized\n );\n if (existingIndex !== -1) {\n throw new Error(`ApiKey already exists for baseUrl: ${normalized}`);\n }\n const next = [...keys];\n next.push({\n baseUrl: normalized,\n key,\n balance: 0,\n lastUsed: Date.now(),\n });\n store.getState().setApiKeys(next);\n },\n\n updateApiKeyBalance: (baseUrl, balance) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const keys = store.getState().apiKeys;\n const next = keys.map((entry) =>\n entry.baseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setApiKeys(next);\n },\n\n removeApiKey: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = store\n .getState()\n .apiKeys.filter((entry) => entry.baseUrl !== normalized);\n store.getState().setApiKeys(next);\n },\n\n getAllApiKeys: () => {\n return store.getState().apiKeys.map((entry) => ({\n baseUrl: entry.baseUrl,\n key: entry.key,\n balance: entry.balance,\n lastUsed: entry.lastUsed,\n }));\n },\n\n // ========== Child Keys ==========\n\n getChildKey: (parentBaseUrl) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const entry = store\n .getState()\n .childKeys.find((key) => key.parentBaseUrl === normalized);\n if (!entry) return null;\n return {\n parentBaseUrl: entry.parentBaseUrl,\n childKey: entry.childKey,\n balance: entry.balance,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt,\n };\n },\n\n setChildKey: (\n parentBaseUrl,\n childKey,\n balance,\n validityDate,\n balanceLimit\n ) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const keys = store.getState().childKeys;\n const existingIndex = keys.findIndex(\n (entry) => entry.parentBaseUrl === normalized\n );\n if (existingIndex !== -1) {\n // Update existing child key\n const next = keys.map((entry) =>\n entry.parentBaseUrl === normalized\n ? {\n ...entry,\n childKey,\n balance: balance ?? 0,\n validityDate,\n balanceLimit,\n createdAt: Date.now(),\n }\n : entry\n );\n store.getState().setChildKeys(next);\n } else {\n // Add new child key\n const next = [...keys];\n next.push({\n parentBaseUrl: normalized,\n childKey,\n balance: balance ?? 0,\n validityDate,\n balanceLimit,\n createdAt: Date.now(),\n });\n store.getState().setChildKeys(next);\n }\n },\n\n updateChildKeyBalance: (parentBaseUrl, balance) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const keys = store.getState().childKeys;\n const next = keys.map((entry) =>\n entry.parentBaseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setChildKeys(next);\n },\n\n removeChildKey: (parentBaseUrl) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const next = store\n .getState()\n .childKeys.filter((entry) => entry.parentBaseUrl !== normalized);\n store.getState().setChildKeys(next);\n },\n\n getAllChildKeys: () => {\n return store.getState().childKeys.map((entry) => ({\n parentBaseUrl: entry.parentBaseUrl,\n childKey: entry.childKey,\n balance: entry.balance,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt,\n }));\n },\n});\n\nexport const createProviderRegistryFromStore = (\n store: SdkStore\n): ProviderRegistry => ({\n getModelsForProvider: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().modelsFromAllProviders[normalized] || [];\n },\n getDisabledProviders: () => store.getState().disabledProviders,\n getProviderMints: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().mintsFromAllProviders[normalized] || [];\n },\n getProviderInfo: async (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const cached = store.getState().infoFromAllProviders[normalized];\n if (cached) return cached;\n try {\n const response = await fetch(`${normalized}v1/info`);\n if (!response.ok) {\n throw new Error(`Failed ${response.status}`);\n }\n const info = (await response.json()) as ProviderInfo;\n const next = { ...store.getState().infoFromAllProviders };\n next[normalized] = info;\n store.getState().setInfoFromAllProviders(next);\n return info;\n } catch (error) {\n console.warn(`Failed to fetch provider info from ${normalized}:`, error);\n return null;\n }\n },\n getAllProvidersModels: () => store.getState().modelsFromAllProviders,\n});\n","import { localStorageDriver } from \"./drivers/localStorage\";\nimport { createMemoryDriver } from \"./drivers/memory\";\nimport { createSqliteDriver } from \"./drivers/sqlite\";\nimport { createIndexedDBDriver } from \"./drivers/indexedDB\";\nimport type { StorageDriver } from \"./types\";\nimport {\n createSdkStore,\n createDiscoveryAdapterFromStore,\n createProviderRegistryFromStore,\n createStorageAdapterFromStore,\n type SdkStore,\n} from \"./store\";\n\nexport type { StorageDriver } from \"./types\";\nexport type { SdkStore } from \"./store\";\nexport type { DiscoveryAdapter } from \"../discovery/interfaces\";\nexport type { StorageAdapter, ProviderRegistry } from \"../wallet/interfaces\";\nexport { SDK_STORAGE_KEYS } from \"./keys\";\nexport {\n createSdkStore,\n createDiscoveryAdapterFromStore,\n createProviderRegistryFromStore,\n createStorageAdapterFromStore,\n} from \"./store\";\nexport {\n localStorageDriver,\n createMemoryDriver,\n createSqliteDriver,\n createIndexedDBDriver,\n};\n\nconst isBrowser = (): boolean => {\n try {\n return (\n typeof window !== \"undefined\" &&\n typeof window.localStorage !== \"undefined\"\n );\n } catch {\n return false;\n }\n};\n\nconst isNode = (): boolean => {\n try {\n return (\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null\n );\n } catch {\n return false;\n }\n};\n\nlet defaultDriver: StorageDriver | null = null;\n\nconst isBun = (): boolean => {\n return typeof process.versions.bun !== \"undefined\";\n};\n\nexport const getDefaultSdkDriver = (): StorageDriver => {\n if (defaultDriver) return defaultDriver;\n if (isBrowser()) {\n defaultDriver = localStorageDriver;\n return defaultDriver;\n }\n if (isBun()) {\n defaultDriver = createMemoryDriver();\n return defaultDriver;\n }\n if (isNode()) {\n defaultDriver = createSqliteDriver();\n return defaultDriver;\n }\n defaultDriver = createMemoryDriver();\n return defaultDriver;\n};\n\nlet defaultStorePromise: Promise<SdkStore> | null = null;\n\nexport const getDefaultSdkStore = (): Promise<SdkStore> => {\n if (!defaultStorePromise) {\n defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });\n }\n return defaultStorePromise;\n};\n\nexport const getDefaultDiscoveryAdapter = async () =>\n createDiscoveryAdapterFromStore(await getDefaultSdkStore());\n\nexport const getDefaultStorageAdapter = async () =>\n createStorageAdapterFromStore(await getDefaultSdkStore());\n\nexport const getDefaultProviderRegistry = async () =>\n createProviderRegistryFromStore(await getDefaultSdkStore());\n"]}
|
|
1
|
+
{"version":3,"sources":["../../storage/drivers/localStorage.ts","../../storage/drivers/memory.ts","../../storage/drivers/sqlite.ts","../../storage/drivers/indexedDB.ts","../../storage/keys.ts","../../storage/store.ts","../../storage/index.ts"],"names":["isBun"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { StorageDriver } from \"../types\";\n\nconst canUseLocalStorage = (): boolean => {\n return (\n typeof window !== \"undefined\" && typeof window.localStorage !== \"undefined\"\n );\n};\n\nconst isQuotaExceeded = (error: unknown): boolean => {\n const e = error as { name?: string; code?: number } | null;\n return (\n !!e &&\n (e?.name === \"QuotaExceededError\" || e?.code === 22 || e?.code === 1014)\n );\n};\n\nconst NON_CRITICAL_KEYS = new Set<string>([\"modelsFromAllProviders\"]);\n\nexport const localStorageDriver: StorageDriver = {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n if (!canUseLocalStorage()) return defaultValue;\n try {\n const item = window.localStorage.getItem(key);\n if (item === null) return defaultValue;\n try {\n return JSON.parse(item) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return item as T;\n }\n throw parseError;\n }\n } catch (error) {\n console.error(`Error retrieving item with key \"${key}\":`, error);\n if (canUseLocalStorage()) {\n try {\n window.localStorage.removeItem(key);\n } catch (removeError) {\n console.error(\n `Error removing corrupted item with key \"${key}\":`,\n removeError\n );\n }\n }\n return defaultValue;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n if (!canUseLocalStorage()) return;\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n if (isQuotaExceeded(error)) {\n if (NON_CRITICAL_KEYS.has(key)) {\n console.warn(\n `Storage quota exceeded; skipping non-critical key \"${key}\".`\n );\n return;\n }\n try {\n window.localStorage.removeItem(\"modelsFromAllProviders\");\n } catch {}\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n return;\n } catch (retryError) {\n console.warn(\n `Storage quota exceeded; unable to persist key \"${key}\" after cleanup attempt.`,\n retryError\n );\n return;\n }\n }\n console.error(`Error storing item with key \"${key}\":`, error);\n }\n },\n async removeItem(key: string): Promise<void> {\n if (!canUseLocalStorage()) return;\n try {\n window.localStorage.removeItem(key);\n } catch (error) {\n console.error(`Error removing item with key \"${key}\":`, error);\n }\n },\n};\n","import type { StorageDriver } from \"../types\";\n\nexport const createMemoryDriver = (\n seed?: Record<string, string>\n): StorageDriver => {\n const store = new Map<string, string>();\n\n if (seed) {\n for (const [key, value] of Object.entries(seed)) {\n store.set(key, value);\n }\n }\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n const item = store.get(key);\n if (item === undefined) return defaultValue;\n try {\n return JSON.parse(item) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return item as T;\n }\n throw parseError;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n store.set(key, JSON.stringify(value));\n },\n async removeItem(key: string): Promise<void> {\n store.delete(key);\n },\n };\n};\n","import type { StorageDriver } from \"../types\";\n\ntype BetterSqlite3Database = {\n prepare: (sql: string) => {\n run: (...params: any[]) => { changes: number };\n get: (...params: any[]) => any;\n };\n exec: (sql: string) => void;\n close?: () => void;\n};\n\nexport interface SqliteDriverOptions {\n dbPath?: string;\n tableName?: string;\n}\n\nconst isBun = (): boolean => {\n return typeof process.versions.bun !== \"undefined\";\n};\n\nconst createDatabase = (dbPath: string): BetterSqlite3Database => {\n if (isBun()) {\n throw new Error(\n \"SQLite driver not supported in Bun. Use createMemoryDriver() instead.\"\n );\n }\n\n let Database: any = null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n Database = require(\"better-sqlite3\");\n } catch (error) {\n throw new Error(\n `better-sqlite3 is required for sqlite storage. Install it to use sqlite storage. (${error})`\n );\n }\n return new Database(dbPath);\n};\n\nexport const createSqliteDriver = (\n options: SqliteDriverOptions = {}\n): StorageDriver => {\n const dbPath = options.dbPath || \"routstr.sqlite\";\n const tableName = options.tableName || \"sdk_storage\";\n\n const db = createDatabase(dbPath);\n db.exec(\n `CREATE TABLE IF NOT EXISTS ${tableName} (key TEXT PRIMARY KEY, value TEXT NOT NULL)`\n );\n\n const selectStmt = db.prepare(`SELECT value FROM ${tableName} WHERE key = ?`);\n const upsertStmt = db.prepare(\n `INSERT INTO ${tableName} (key, value) VALUES (?, ?)\n ON CONFLICT(key) DO UPDATE SET value = excluded.value`\n );\n const deleteStmt = db.prepare(`DELETE FROM ${tableName} WHERE key = ?`);\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n try {\n const row = selectStmt.get(key);\n if (!row || typeof row.value !== \"string\") return defaultValue;\n try {\n return JSON.parse(row.value) as T;\n } catch (parseError) {\n if (typeof defaultValue === \"string\") {\n return row.value as T;\n }\n throw parseError;\n }\n } catch (error) {\n console.error(`SQLite getItem failed for key \"${key}\":`, error);\n return defaultValue;\n }\n },\n async setItem<T>(key: string, value: T): Promise<void> {\n try {\n upsertStmt.run(key, JSON.stringify(value));\n } catch (error) {\n console.error(`SQLite setItem failed for key \"${key}\":`, error);\n }\n },\n async removeItem(key: string): Promise<void> {\n try {\n deleteStmt.run(key);\n } catch (error) {\n console.error(`SQLite removeItem failed for key \"${key}\":`, error);\n }\n },\n };\n};\n","import type { StorageDriver } from \"../types\";\n\nexport interface IndexedDBDriverOptions {\n dbName?: string;\n storeName?: string;\n}\n\nconst openDatabase = (\n dbName: string,\n storeName: string\n): Promise<IDBDatabase> => {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n};\n\nexport const createIndexedDBDriver = (\n options: IndexedDBDriverOptions = {}\n): StorageDriver => {\n const dbName = options.dbName || \"routstr-sdk\";\n const storeName = options.storeName || \"sdk_storage\";\n\n let dbPromise: Promise<IDBDatabase> | null = null;\n\n const getDb = (): Promise<IDBDatabase> => {\n if (!dbPromise) {\n dbPromise = openDatabase(dbName, storeName);\n }\n return dbPromise;\n };\n\n return {\n async getItem<T>(key: string, defaultValue: T): Promise<T> {\n try {\n const db = await getDb();\n return new Promise<T>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readonly\");\n const store = tx.objectStore(storeName);\n const request = store.get(key);\n\n request.onsuccess = () => {\n const raw = request.result;\n if (raw === undefined) {\n resolve(defaultValue);\n return;\n }\n // Values are stored as raw JSON strings\n if (typeof raw === \"string\") {\n try {\n resolve(JSON.parse(raw) as T);\n } catch {\n if (typeof defaultValue === \"string\") {\n resolve(raw as T);\n } else {\n resolve(defaultValue);\n }\n }\n } else {\n // If stored as a native JS value (e.g. from a previous driver)\n resolve(raw as T);\n }\n };\n request.onerror = () => reject(request.error);\n });\n } catch (error) {\n console.error(`IndexedDB getItem failed for key \"${key}\":`, error);\n return defaultValue;\n }\n },\n\n async setItem<T>(key: string, value: T): Promise<void> {\n try {\n const db = await getDb();\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readwrite\");\n const store = tx.objectStore(storeName);\n store.put(JSON.stringify(value), key);\n\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } catch (error) {\n console.error(`IndexedDB setItem failed for key \"${key}\":`, error);\n }\n },\n\n async removeItem(key: string): Promise<void> {\n try {\n const db = await getDb();\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readwrite\");\n const store = tx.objectStore(storeName);\n store.delete(key);\n\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } catch (error) {\n console.error(`IndexedDB removeItem failed for key \"${key}\":`, error);\n }\n },\n };\n};\n","export const SDK_STORAGE_KEYS = {\n MODELS_FROM_ALL_PROVIDERS: \"modelsFromAllProviders\",\n LAST_USED_MODEL: \"lastUsedModel\",\n BASE_URLS_LIST: \"base_urls_list\",\n DISABLED_PROVIDERS: \"disabled_providers\",\n MINTS_FROM_ALL_PROVIDERS: \"mints_from_all_providers\",\n INFO_FROM_ALL_PROVIDERS: \"info_from_all_providers\",\n LAST_MODELS_UPDATE: \"lastModelsUpdate\",\n LAST_BASE_URLS_UPDATE: \"lastBaseUrlsUpdate\",\n LOCAL_CASHU_TOKENS: \"local_cashu_tokens\",\n API_KEYS: \"api_keys\",\n CHILD_KEYS: \"child_keys\",\n ROUTSTR21_MODELS: \"routstr21Models\",\n LAST_ROUTSTR21_MODELS_UPDATE: \"lastRoutstr21ModelsUpdate\",\n CACHED_RECEIVE_TOKENS: \"cached_receive_tokens\",\n} as const;\n\nexport type SdkStorageKey =\n (typeof SDK_STORAGE_KEYS)[keyof typeof SDK_STORAGE_KEYS];\n","import { createStore, type StoreApi } from \"zustand/vanilla\";\nimport type { DiscoveryAdapter } from \"../discovery/interfaces\";\nimport type { StorageAdapter, ProviderRegistry } from \"../wallet/interfaces\";\nimport type { ProviderInfo, Model } from \"../core\";\nimport { getDecodedToken } from \"@cashu/cashu-ts\";\nimport { SDK_STORAGE_KEYS } from \"./keys\";\nimport type { StorageDriver, SdkStorageState } from \"./types\";\n\nconst normalizeBaseUrl = (baseUrl: string): string =>\n baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`;\n\nconst getTokenBalance = (token: string): number => {\n try {\n const decoded = getDecodedToken(token);\n const unitDivisor = decoded.unit === \"msat\" ? 1000 : 1;\n let sum = 0;\n for (const proof of decoded.proofs) {\n sum += proof.amount / unitDivisor;\n }\n return sum;\n } catch {\n return 0;\n }\n};\n\nexport interface SdkStoreOptions {\n driver: StorageDriver;\n}\n\nexport interface SdkStorageStore extends SdkStorageState {\n setModelsFromAllProviders: (value: Record<string, Model[]>) => void;\n setLastUsedModel: (value: string | null) => void;\n setBaseUrlsList: (value: string[]) => void;\n setBaseUrlsLastUpdate: (value: number | null) => void;\n setDisabledProviders: (value: string[]) => void;\n setMintsFromAllProviders: (value: Record<string, string[]>) => void;\n setInfoFromAllProviders: (value: Record<string, ProviderInfo>) => void;\n setLastModelsUpdate: (value: Record<string, number>) => void;\n setCachedTokens: (\n value:\n | Array<{\n baseUrl: string;\n token: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n | ((\n current: SdkStorageStore[\"cachedTokens\"]\n ) => SdkStorageStore[\"cachedTokens\"])\n ) => void;\n setApiKeys: (\n value:\n | Array<{\n baseUrl: string;\n key: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n | ((current: SdkStorageStore[\"apiKeys\"]) => SdkStorageStore[\"apiKeys\"])\n ) => void;\n setChildKeys: (\n value: Array<{\n parentBaseUrl: string;\n childKey: string;\n balance?: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt?: number;\n }>\n ) => void;\n setRoutstr21Models: (value: string[]) => void;\n setRoutstr21ModelsLastUpdate: (value: number | null) => void;\n setCachedReceiveTokens: (\n value: Array<{\n token: string;\n amount: number;\n unit: \"sat\" | \"msat\";\n createdAt?: number;\n }>\n ) => void;\n}\n\n/** Store type returned after async initialization */\nexport type SdkStore = StoreApi<SdkStorageStore>;\n\nexport const createSdkStore = async ({\n driver,\n}: SdkStoreOptions): Promise<SdkStore> => {\n // Hydrate all initial state from the async driver in parallel\n const [\n rawModels,\n lastUsedModel,\n rawBaseUrls,\n lastBaseUrlsUpdate,\n rawDisabledProviders,\n rawMints,\n rawInfo,\n rawLastModelsUpdate,\n rawCachedTokens,\n rawApiKeys,\n rawChildKeys,\n rawRoutstr21Models,\n rawLastRoutstr21ModelsUpdate,\n rawCachedReceiveTokens,\n ] = await Promise.all([\n driver.getItem<Record<string, Model[]>>(\n SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<string | null>(SDK_STORAGE_KEYS.LAST_USED_MODEL, null),\n driver.getItem<string[]>(SDK_STORAGE_KEYS.BASE_URLS_LIST, []),\n driver.getItem<number | null>(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, null),\n driver.getItem<string[]>(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, []),\n driver.getItem<Record<string, string[]>>(\n SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<Record<string, ProviderInfo>>(\n SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS,\n {}\n ),\n driver.getItem<Record<string, number>>(\n SDK_STORAGE_KEYS.LAST_MODELS_UPDATE,\n {}\n ),\n driver.getItem<\n Array<{\n baseUrl: string;\n token: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n >(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, []),\n driver.getItem<\n Array<{\n baseUrl: string;\n key: string;\n balance?: number;\n lastUsed?: number | null;\n }>\n >(SDK_STORAGE_KEYS.API_KEYS, []),\n driver.getItem<\n Array<{\n parentBaseUrl: string;\n childKey: string;\n balance?: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt?: number;\n }>\n >(SDK_STORAGE_KEYS.CHILD_KEYS, []),\n driver.getItem<string[]>(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, []),\n driver.getItem<number | null>(\n SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,\n null\n ),\n driver.getItem<\n Array<{\n token: string;\n amount: number;\n unit: \"sat\" | \"msat\";\n createdAt?: number;\n }>\n >(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),\n ]);\n\n // Normalize all hydrated state\n const modelsFromAllProviders = Object.fromEntries(\n Object.entries(rawModels).map(([baseUrl, models]) => [\n normalizeBaseUrl(baseUrl),\n models,\n ])\n );\n\n const baseUrlsList = rawBaseUrls.map((url) => normalizeBaseUrl(url));\n\n const disabledProviders = rawDisabledProviders.map((url) =>\n normalizeBaseUrl(url)\n );\n\n const mintsFromAllProviders = Object.fromEntries(\n Object.entries(rawMints).map(([baseUrl, mints]) => [\n normalizeBaseUrl(baseUrl),\n mints.map((mint) => (mint.endsWith(\"/\") ? mint.slice(0, -1) : mint)),\n ])\n );\n\n const infoFromAllProviders = Object.fromEntries(\n Object.entries(rawInfo).map(([baseUrl, info]) => [\n normalizeBaseUrl(baseUrl),\n info,\n ])\n );\n\n const lastModelsUpdate = Object.fromEntries(\n Object.entries(rawLastModelsUpdate).map(([baseUrl, timestamp]) => [\n normalizeBaseUrl(baseUrl),\n timestamp,\n ])\n );\n\n const cachedTokens = rawCachedTokens.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance:\n typeof entry.balance === \"number\"\n ? entry.balance\n : getTokenBalance(entry.token),\n lastUsed: entry.lastUsed ?? null,\n }));\n\n const apiKeys = rawApiKeys.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance: entry.balance ?? 0,\n lastUsed: entry.lastUsed ?? null,\n }));\n\n const childKeys = rawChildKeys.map((entry) => ({\n parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),\n childKey: entry.childKey,\n balance: entry.balance ?? 0,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt ?? Date.now(),\n }));\n\n const routstr21Models = rawRoutstr21Models;\n const lastRoutstr21ModelsUpdate = rawLastRoutstr21ModelsUpdate;\n\n const cachedReceiveTokens = rawCachedReceiveTokens?.map((entry) => ({\n token: entry.token,\n amount: entry.amount,\n unit: entry.unit || \"sat\",\n createdAt: entry.createdAt ?? Date.now(),\n }));\n\n // Create the store with hydrated state.\n // All setters update in-memory state synchronously and persist to driver\n // as fire-and-forget (no await on setItem).\n return createStore<SdkStorageStore>((set, get) => ({\n modelsFromAllProviders,\n lastUsedModel,\n baseUrlsList,\n lastBaseUrlsUpdate,\n disabledProviders,\n mintsFromAllProviders,\n infoFromAllProviders,\n lastModelsUpdate,\n cachedTokens,\n apiKeys,\n childKeys,\n routstr21Models,\n lastRoutstr21ModelsUpdate,\n cachedReceiveTokens,\n setModelsFromAllProviders: (value) => {\n const normalized: Record<string, Model[]> = {};\n for (const [baseUrl, models] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = models;\n }\n void driver.setItem(\n SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,\n normalized\n );\n set({ modelsFromAllProviders: normalized });\n },\n setLastUsedModel: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);\n set({ lastUsedModel: value });\n },\n setBaseUrlsList: (value) => {\n const normalized = value.map((url) => normalizeBaseUrl(url));\n void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);\n set({ baseUrlsList: normalized });\n },\n setBaseUrlsLastUpdate: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);\n set({ lastBaseUrlsUpdate: value });\n },\n setDisabledProviders: (value) => {\n const normalized = value.map((url) => normalizeBaseUrl(url));\n void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);\n set({ disabledProviders: normalized });\n },\n setMintsFromAllProviders: (value) => {\n const normalized: Record<string, string[]> = {};\n for (const [baseUrl, mints] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = mints.map((mint) =>\n mint.endsWith(\"/\") ? mint.slice(0, -1) : mint\n );\n }\n void driver.setItem(\n SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,\n normalized\n );\n set({ mintsFromAllProviders: normalized });\n },\n setInfoFromAllProviders: (value) => {\n const normalized: Record<string, ProviderInfo> = {};\n for (const [baseUrl, info] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = info;\n }\n void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);\n set({ infoFromAllProviders: normalized });\n },\n setLastModelsUpdate: (value) => {\n const normalized: Record<string, number> = {};\n for (const [baseUrl, timestamp] of Object.entries(value)) {\n normalized[normalizeBaseUrl(baseUrl)] = timestamp;\n }\n void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);\n set({ lastModelsUpdate: normalized });\n },\n setCachedTokens: (value) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.cachedTokens) : value;\n const normalized = updates.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance:\n typeof entry.balance === \"number\"\n ? entry.balance\n : getTokenBalance(entry.token),\n lastUsed: entry.lastUsed ?? null,\n }));\n void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);\n return { cachedTokens: normalized };\n });\n },\n setApiKeys: (value) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.apiKeys) : value;\n const normalized = updates.map((entry) => ({\n ...entry,\n baseUrl: normalizeBaseUrl(entry.baseUrl),\n balance: entry.balance ?? 0,\n lastUsed: entry.lastUsed ?? null,\n }));\n void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);\n return { apiKeys: normalized };\n });\n },\n setChildKeys: (\n value:\n | Array<{\n parentBaseUrl: string;\n childKey: string;\n balance?: number;\n balanceLimit?: number;\n validityDate?: number;\n createdAt?: number;\n }>\n | ((\n current: SdkStorageStore[\"childKeys\"]\n ) => SdkStorageStore[\"childKeys\"])\n ) => {\n set((state) => {\n const updates =\n typeof value === \"function\" ? value(state.childKeys) : value;\n const normalized = updates.map((entry) => ({\n parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),\n childKey: entry.childKey,\n balance: entry.balance ?? 0,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt ?? Date.now(),\n }));\n void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);\n return { childKeys: normalized };\n });\n },\n setRoutstr21Models: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);\n set({ routstr21Models: value });\n },\n setRoutstr21ModelsLastUpdate: (value) => {\n void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);\n set({ lastRoutstr21ModelsUpdate: value });\n },\n setCachedReceiveTokens: (value) => {\n const normalized = value.map((entry) => ({\n token: entry.token,\n amount: entry.amount,\n unit: entry.unit || \"sat\",\n createdAt: entry.createdAt ?? Date.now(),\n }));\n void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);\n set({ cachedReceiveTokens: normalized });\n },\n }));\n};\n\nexport const createDiscoveryAdapterFromStore = (\n store: SdkStore\n): DiscoveryAdapter => ({\n getCachedModels: () => store.getState().modelsFromAllProviders,\n setCachedModels: (models) =>\n store.getState().setModelsFromAllProviders(models),\n getCachedMints: () => store.getState().mintsFromAllProviders,\n setCachedMints: (mints) => store.getState().setMintsFromAllProviders(mints),\n getCachedProviderInfo: () => store.getState().infoFromAllProviders,\n setCachedProviderInfo: (info) =>\n store.getState().setInfoFromAllProviders(info),\n getProviderLastUpdate: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const timestamps = store.getState().lastModelsUpdate;\n return timestamps[normalized] || null;\n },\n setProviderLastUpdate: (baseUrl, timestamp) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const timestamps = { ...store.getState().lastModelsUpdate };\n timestamps[normalized] = timestamp;\n store.getState().setLastModelsUpdate(timestamps);\n },\n getLastUsedModel: () => store.getState().lastUsedModel,\n setLastUsedModel: (modelId) => store.getState().setLastUsedModel(modelId),\n getDisabledProviders: () => store.getState().disabledProviders,\n getBaseUrlsList: () => store.getState().baseUrlsList,\n setBaseUrlsList: (urls) => store.getState().setBaseUrlsList(urls),\n getBaseUrlsLastUpdate: () => store.getState().lastBaseUrlsUpdate,\n setBaseUrlsLastUpdate: (timestamp) =>\n store.getState().setBaseUrlsLastUpdate(timestamp),\n getRoutstr21Models: () => store.getState().routstr21Models,\n setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models),\n getRoutstr21ModelsLastUpdate: () =>\n store.getState().lastRoutstr21ModelsUpdate,\n setRoutstr21ModelsLastUpdate: (timestamp) =>\n store.getState().setRoutstr21ModelsLastUpdate(timestamp),\n});\n\nexport const createStorageAdapterFromStore = (\n store: SdkStore\n): StorageAdapter => ({\n getToken: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const entry = store\n .getState()\n .cachedTokens.find((token) => token.baseUrl === normalized);\n if (!entry) return null;\n const next = store\n .getState()\n .cachedTokens.map((token) =>\n token.baseUrl === normalized\n ? { ...token, lastUsed: Date.now() }\n : token\n );\n store.getState().setCachedTokens(next);\n return entry.token;\n },\n setToken: (baseUrl, token) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const tokens = store.getState().cachedTokens;\n const balance = getTokenBalance(token);\n const existingIndex = tokens.findIndex(\n (entry) => entry.baseUrl === normalized\n );\n if (existingIndex !== -1) {\n throw new Error(`Token already exists for baseUrl: ${normalized}`);\n }\n const next = [...tokens];\n next.push({\n baseUrl: normalized,\n token,\n balance,\n lastUsed: Date.now(),\n });\n store.getState().setCachedTokens(next);\n },\n removeToken: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = store\n .getState()\n .cachedTokens.filter((entry) => entry.baseUrl !== normalized);\n store.getState().setCachedTokens(next);\n },\n updateTokenBalance: (baseUrl, balance) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const tokens = store.getState().cachedTokens;\n const next = tokens.map((entry) =>\n entry.baseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setCachedTokens(next);\n },\n getCachedTokenDistribution: () => {\n const cachedTokens = store.getState().cachedTokens;\n const distributionMap: Record<string, number> = {};\n\n for (const entry of cachedTokens) {\n const sum = entry.balance || 0;\n if (sum > 0) {\n distributionMap[entry.baseUrl] =\n (distributionMap[entry.baseUrl] || 0) + sum;\n }\n }\n\n return Object.entries(distributionMap)\n .map(([baseUrl, amt]) => ({ baseUrl, amount: amt }))\n .sort((a, b) => b.amount - a.amount);\n },\n getApiKeyDistribution: () => {\n const apiKeys = store.getState().apiKeys;\n const distributionMap: Record<string, number> = {};\n\n for (const entry of apiKeys) {\n const sum = entry.balance || 0;\n if (sum > 0) {\n distributionMap[entry.baseUrl] =\n (distributionMap[entry.baseUrl] || 0) + sum;\n }\n }\n\n return Object.entries(distributionMap)\n .map(([baseUrl, amt]) => ({ baseUrl, amount: amt }))\n .sort((a, b) => b.amount - a.amount);\n },\n saveProviderInfo: (baseUrl, info) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = { ...store.getState().infoFromAllProviders };\n next[normalized] = info;\n store.getState().setInfoFromAllProviders(next);\n },\n getProviderInfo: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().infoFromAllProviders[normalized] || null;\n },\n\n // ========== API Keys (for apikeys mode) ==========\n\n getApiKey: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const entry = store\n .getState()\n .apiKeys.find((key) => key.baseUrl === normalized);\n if (!entry) return null;\n // Update lastUsed timestamp\n const next = store\n .getState()\n .apiKeys.map((key) =>\n key.baseUrl === normalized ? { ...key, lastUsed: Date.now() } : key\n );\n store.getState().setApiKeys(next);\n return entry;\n },\n\n setApiKey: (baseUrl, key) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const keys = store.getState().apiKeys;\n const existingIndex = keys.findIndex(\n (entry) => entry.baseUrl === normalized\n );\n if (existingIndex !== -1) {\n throw new Error(`ApiKey already exists for baseUrl: ${normalized}`);\n }\n const next = [...keys];\n next.push({\n baseUrl: normalized,\n key,\n balance: 0,\n lastUsed: Date.now(),\n });\n store.getState().setApiKeys(next);\n },\n\n updateApiKeyBalance: (baseUrl, balance) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const keys = store.getState().apiKeys;\n const next = keys.map((entry) =>\n entry.baseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setApiKeys(next);\n },\n\n removeApiKey: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const next = store\n .getState()\n .apiKeys.filter((entry) => entry.baseUrl !== normalized);\n store.getState().setApiKeys(next);\n },\n\n getAllApiKeys: () => {\n return store.getState().apiKeys.map((entry) => ({\n baseUrl: entry.baseUrl,\n key: entry.key,\n balance: entry.balance,\n lastUsed: entry.lastUsed,\n }));\n },\n\n // ========== Child Keys ==========\n\n getChildKey: (parentBaseUrl) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const entry = store\n .getState()\n .childKeys.find((key) => key.parentBaseUrl === normalized);\n if (!entry) return null;\n return {\n parentBaseUrl: entry.parentBaseUrl,\n childKey: entry.childKey,\n balance: entry.balance,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt,\n };\n },\n\n setChildKey: (\n parentBaseUrl,\n childKey,\n balance,\n validityDate,\n balanceLimit\n ) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const keys = store.getState().childKeys;\n const existingIndex = keys.findIndex(\n (entry) => entry.parentBaseUrl === normalized\n );\n if (existingIndex !== -1) {\n // Update existing child key\n const next = keys.map((entry) =>\n entry.parentBaseUrl === normalized\n ? {\n ...entry,\n childKey,\n balance: balance ?? 0,\n validityDate,\n balanceLimit,\n createdAt: Date.now(),\n }\n : entry\n );\n store.getState().setChildKeys(next);\n } else {\n // Add new child key\n const next = [...keys];\n next.push({\n parentBaseUrl: normalized,\n childKey,\n balance: balance ?? 0,\n validityDate,\n balanceLimit,\n createdAt: Date.now(),\n });\n store.getState().setChildKeys(next);\n }\n },\n\n updateChildKeyBalance: (parentBaseUrl, balance) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const keys = store.getState().childKeys;\n const next = keys.map((entry) =>\n entry.parentBaseUrl === normalized ? { ...entry, balance } : entry\n );\n store.getState().setChildKeys(next);\n },\n\n removeChildKey: (parentBaseUrl) => {\n const normalized = normalizeBaseUrl(parentBaseUrl);\n const next = store\n .getState()\n .childKeys.filter((entry) => entry.parentBaseUrl !== normalized);\n store.getState().setChildKeys(next);\n },\n\n getAllChildKeys: () => {\n return store.getState().childKeys.map((entry) => ({\n parentBaseUrl: entry.parentBaseUrl,\n childKey: entry.childKey,\n balance: entry.balance,\n balanceLimit: entry.balanceLimit,\n validityDate: entry.validityDate,\n createdAt: entry.createdAt,\n }));\n },\n\n getCachedReceiveTokens: () => {\n return store.getState().cachedReceiveTokens;\n },\n\n setCachedReceiveTokens: (tokens) => {\n store.getState().setCachedReceiveTokens(tokens);\n },\n});\n\nexport const createProviderRegistryFromStore = (\n store: SdkStore\n): ProviderRegistry => ({\n getModelsForProvider: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().modelsFromAllProviders[normalized] || [];\n },\n getDisabledProviders: () => store.getState().disabledProviders,\n getProviderMints: (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n return store.getState().mintsFromAllProviders[normalized] || [];\n },\n getProviderInfo: async (baseUrl) => {\n const normalized = normalizeBaseUrl(baseUrl);\n const cached = store.getState().infoFromAllProviders[normalized];\n if (cached) return cached;\n try {\n const response = await fetch(`${normalized}v1/info`);\n if (!response.ok) {\n throw new Error(`Failed ${response.status}`);\n }\n const info = (await response.json()) as ProviderInfo;\n const next = { ...store.getState().infoFromAllProviders };\n next[normalized] = info;\n store.getState().setInfoFromAllProviders(next);\n return info;\n } catch (error) {\n console.warn(`Failed to fetch provider info from ${normalized}:`, error);\n return null;\n }\n },\n getAllProvidersModels: () => store.getState().modelsFromAllProviders,\n});\n","import { localStorageDriver } from \"./drivers/localStorage\";\nimport { createMemoryDriver } from \"./drivers/memory\";\nimport { createSqliteDriver } from \"./drivers/sqlite\";\nimport { createIndexedDBDriver } from \"./drivers/indexedDB\";\nimport type { StorageDriver } from \"./types\";\nimport {\n createSdkStore,\n createDiscoveryAdapterFromStore,\n createProviderRegistryFromStore,\n createStorageAdapterFromStore,\n type SdkStore,\n} from \"./store\";\n\nexport type { StorageDriver } from \"./types\";\nexport type { SdkStore } from \"./store\";\nexport type { DiscoveryAdapter } from \"../discovery/interfaces\";\nexport type { StorageAdapter, ProviderRegistry } from \"../wallet/interfaces\";\nexport { SDK_STORAGE_KEYS } from \"./keys\";\nexport {\n createSdkStore,\n createDiscoveryAdapterFromStore,\n createProviderRegistryFromStore,\n createStorageAdapterFromStore,\n} from \"./store\";\nexport {\n localStorageDriver,\n createMemoryDriver,\n createSqliteDriver,\n createIndexedDBDriver,\n};\n\nconst isBrowser = (): boolean => {\n try {\n return (\n typeof window !== \"undefined\" &&\n typeof window.localStorage !== \"undefined\"\n );\n } catch {\n return false;\n }\n};\n\nconst isNode = (): boolean => {\n try {\n return (\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null\n );\n } catch {\n return false;\n }\n};\n\nlet defaultDriver: StorageDriver | null = null;\n\nconst isBun = (): boolean => {\n return typeof process.versions.bun !== \"undefined\";\n};\n\nexport const getDefaultSdkDriver = (): StorageDriver => {\n if (defaultDriver) return defaultDriver;\n if (isBrowser()) {\n defaultDriver = localStorageDriver;\n return defaultDriver;\n }\n if (isBun()) {\n defaultDriver = createMemoryDriver();\n return defaultDriver;\n }\n if (isNode()) {\n defaultDriver = createSqliteDriver();\n return defaultDriver;\n }\n defaultDriver = createMemoryDriver();\n return defaultDriver;\n};\n\nlet defaultStorePromise: Promise<SdkStore> | null = null;\n\nexport const getDefaultSdkStore = (): Promise<SdkStore> => {\n if (!defaultStorePromise) {\n defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });\n }\n return defaultStorePromise;\n};\n\nexport const getDefaultDiscoveryAdapter = async () =>\n createDiscoveryAdapterFromStore(await getDefaultSdkStore());\n\nexport const getDefaultStorageAdapter = async () =>\n createStorageAdapterFromStore(await getDefaultSdkStore());\n\nexport const getDefaultProviderRegistry = async () =>\n createProviderRegistryFromStore(await getDefaultSdkStore());\n"]}
|
package/dist/wallet/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-
|
|
2
|
-
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-
|
|
1
|
+
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-B85Wx7ni.mjs';
|
|
2
|
+
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-B85Wx7ni.mjs';
|
|
3
3
|
import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BlHjmWRK.mjs';
|
|
4
4
|
export { P as ProviderInfo } from '../types-BlHjmWRK.mjs';
|
|
5
5
|
|
|
@@ -72,7 +72,8 @@ declare class BalanceManager {
|
|
|
72
72
|
private walletAdapter;
|
|
73
73
|
private storageAdapter;
|
|
74
74
|
private providerRegistry?;
|
|
75
|
-
|
|
75
|
+
private cashuSpender;
|
|
76
|
+
constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry?: ProviderRegistry | undefined, cashuSpender?: CashuSpender);
|
|
76
77
|
/**
|
|
77
78
|
* Unified refund - handles both NIP-60 and legacy wallet refunds
|
|
78
79
|
*/
|
|
@@ -156,6 +157,7 @@ interface SpendOptions {
|
|
|
156
157
|
/** Specific provider baseUrls to refund (if not provided, refunds all except current) */
|
|
157
158
|
refundBaseUrls?: string[];
|
|
158
159
|
}
|
|
160
|
+
type DebugLevel = "DEBUG" | "WARN" | "ERROR";
|
|
159
161
|
/**
|
|
160
162
|
* CashuSpender manages the spending of Cashu tokens
|
|
161
163
|
*/
|
|
@@ -165,13 +167,23 @@ declare class CashuSpender {
|
|
|
165
167
|
private _providerRegistry?;
|
|
166
168
|
private balanceManager?;
|
|
167
169
|
private _isBusy;
|
|
170
|
+
private debugLevel;
|
|
168
171
|
constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, _providerRegistry?: unknown | undefined, balanceManager?: BalanceManager | undefined);
|
|
172
|
+
receiveToken(token: string): Promise<{
|
|
173
|
+
success: boolean;
|
|
174
|
+
amount: number;
|
|
175
|
+
unit: "sat" | "msat";
|
|
176
|
+
message?: string;
|
|
177
|
+
}>;
|
|
169
178
|
private _getBalanceState;
|
|
170
179
|
private _logTransaction;
|
|
171
180
|
/**
|
|
172
181
|
* Check if the spender is currently in a critical operation
|
|
173
182
|
*/
|
|
174
183
|
get isBusy(): boolean;
|
|
184
|
+
getDebugLevel(): DebugLevel;
|
|
185
|
+
setDebugLevel(level: DebugLevel): void;
|
|
186
|
+
private _log;
|
|
175
187
|
/**
|
|
176
188
|
* Spend Cashu tokens with automatic mint selection and retry logic
|
|
177
189
|
* Throws errors on failure instead of returning failed SpendResult
|
package/dist/wallet/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-
|
|
2
|
-
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-
|
|
1
|
+
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-BVNyAmKu.js';
|
|
2
|
+
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-BVNyAmKu.js';
|
|
3
3
|
import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BlHjmWRK.js';
|
|
4
4
|
export { P as ProviderInfo } from '../types-BlHjmWRK.js';
|
|
5
5
|
|
|
@@ -72,7 +72,8 @@ declare class BalanceManager {
|
|
|
72
72
|
private walletAdapter;
|
|
73
73
|
private storageAdapter;
|
|
74
74
|
private providerRegistry?;
|
|
75
|
-
|
|
75
|
+
private cashuSpender;
|
|
76
|
+
constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry?: ProviderRegistry | undefined, cashuSpender?: CashuSpender);
|
|
76
77
|
/**
|
|
77
78
|
* Unified refund - handles both NIP-60 and legacy wallet refunds
|
|
78
79
|
*/
|
|
@@ -156,6 +157,7 @@ interface SpendOptions {
|
|
|
156
157
|
/** Specific provider baseUrls to refund (if not provided, refunds all except current) */
|
|
157
158
|
refundBaseUrls?: string[];
|
|
158
159
|
}
|
|
160
|
+
type DebugLevel = "DEBUG" | "WARN" | "ERROR";
|
|
159
161
|
/**
|
|
160
162
|
* CashuSpender manages the spending of Cashu tokens
|
|
161
163
|
*/
|
|
@@ -165,13 +167,23 @@ declare class CashuSpender {
|
|
|
165
167
|
private _providerRegistry?;
|
|
166
168
|
private balanceManager?;
|
|
167
169
|
private _isBusy;
|
|
170
|
+
private debugLevel;
|
|
168
171
|
constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, _providerRegistry?: unknown | undefined, balanceManager?: BalanceManager | undefined);
|
|
172
|
+
receiveToken(token: string): Promise<{
|
|
173
|
+
success: boolean;
|
|
174
|
+
amount: number;
|
|
175
|
+
unit: "sat" | "msat";
|
|
176
|
+
message?: string;
|
|
177
|
+
}>;
|
|
169
178
|
private _getBalanceState;
|
|
170
179
|
private _logTransaction;
|
|
171
180
|
/**
|
|
172
181
|
* Check if the spender is currently in a critical operation
|
|
173
182
|
*/
|
|
174
183
|
get isBusy(): boolean;
|
|
184
|
+
getDebugLevel(): DebugLevel;
|
|
185
|
+
setDebugLevel(level: DebugLevel): void;
|
|
186
|
+
private _log;
|
|
175
187
|
/**
|
|
176
188
|
* Spend Cashu tokens with automatic mint selection and retry logic
|
|
177
189
|
* Throws errors on failure instead of returning failed SpendResult
|
package/dist/wallet/index.js
CHANGED
|
@@ -87,6 +87,26 @@ var CashuSpender = class {
|
|
|
87
87
|
this.balanceManager = balanceManager;
|
|
88
88
|
}
|
|
89
89
|
_isBusy = false;
|
|
90
|
+
debugLevel = "WARN";
|
|
91
|
+
async receiveToken(token) {
|
|
92
|
+
const result = await this.walletAdapter.receiveToken(token);
|
|
93
|
+
if (!result.success && result.message?.includes("Failed to fetch mint")) {
|
|
94
|
+
const cachedTokens = this.storageAdapter.getCachedReceiveTokens();
|
|
95
|
+
const existingIndex = cachedTokens.findIndex((t) => t.token === token);
|
|
96
|
+
if (existingIndex === -1) {
|
|
97
|
+
this.storageAdapter.setCachedReceiveTokens([
|
|
98
|
+
...cachedTokens,
|
|
99
|
+
{
|
|
100
|
+
token,
|
|
101
|
+
amount: result.amount,
|
|
102
|
+
unit: result.unit,
|
|
103
|
+
createdAt: Date.now()
|
|
104
|
+
}
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
90
110
|
async _getBalanceState() {
|
|
91
111
|
const mintBalances = await this.walletAdapter.getBalances();
|
|
92
112
|
const units = this.walletAdapter.getMintUnits();
|
|
@@ -129,6 +149,32 @@ var CashuSpender = class {
|
|
|
129
149
|
get isBusy() {
|
|
130
150
|
return this._isBusy;
|
|
131
151
|
}
|
|
152
|
+
getDebugLevel() {
|
|
153
|
+
return this.debugLevel;
|
|
154
|
+
}
|
|
155
|
+
setDebugLevel(level) {
|
|
156
|
+
this.debugLevel = level;
|
|
157
|
+
}
|
|
158
|
+
_log(level, ...args) {
|
|
159
|
+
const levelPriority = {
|
|
160
|
+
DEBUG: 0,
|
|
161
|
+
WARN: 1,
|
|
162
|
+
ERROR: 2
|
|
163
|
+
};
|
|
164
|
+
if (levelPriority[level] >= levelPriority[this.debugLevel]) {
|
|
165
|
+
switch (level) {
|
|
166
|
+
case "DEBUG":
|
|
167
|
+
console.log(...args);
|
|
168
|
+
break;
|
|
169
|
+
case "WARN":
|
|
170
|
+
console.warn(...args);
|
|
171
|
+
break;
|
|
172
|
+
case "ERROR":
|
|
173
|
+
console.error(...args);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
132
178
|
/**
|
|
133
179
|
* Spend Cashu tokens with automatic mint selection and retry logic
|
|
134
180
|
* Throws errors on failure instead of returning failed SpendResult
|
|
@@ -195,12 +241,16 @@ var CashuSpender = class {
|
|
|
195
241
|
excludeMints,
|
|
196
242
|
retryCount
|
|
197
243
|
} = options;
|
|
198
|
-
|
|
244
|
+
this._log(
|
|
245
|
+
"DEBUG",
|
|
199
246
|
`[CashuSpender] _spendInternal: amount=${amount}, mintUrl=${mintUrl}, baseUrl=${baseUrl}, reuseToken=${reuseToken}`
|
|
200
247
|
);
|
|
201
248
|
let adjustedAmount = Math.ceil(amount);
|
|
202
249
|
if (!adjustedAmount || isNaN(adjustedAmount)) {
|
|
203
|
-
|
|
250
|
+
this._log(
|
|
251
|
+
"ERROR",
|
|
252
|
+
`[CashuSpender] _spendInternal: Invalid amount: ${amount}`
|
|
253
|
+
);
|
|
204
254
|
return {
|
|
205
255
|
token: null,
|
|
206
256
|
status: "failed",
|
|
@@ -209,7 +259,8 @@ var CashuSpender = class {
|
|
|
209
259
|
};
|
|
210
260
|
}
|
|
211
261
|
if (reuseToken && baseUrl) {
|
|
212
|
-
|
|
262
|
+
this._log(
|
|
263
|
+
"DEBUG",
|
|
213
264
|
`[CashuSpender] _spendInternal: Attempting to reuse token for ${baseUrl}`
|
|
214
265
|
);
|
|
215
266
|
const existingResult = await this._tryReuseToken(
|
|
@@ -218,12 +269,14 @@ var CashuSpender = class {
|
|
|
218
269
|
mintUrl
|
|
219
270
|
);
|
|
220
271
|
if (existingResult) {
|
|
221
|
-
|
|
272
|
+
this._log(
|
|
273
|
+
"DEBUG",
|
|
222
274
|
`[CashuSpender] _spendInternal: Successfully reused token, balance: ${existingResult.balance}`
|
|
223
275
|
);
|
|
224
276
|
return existingResult;
|
|
225
277
|
}
|
|
226
|
-
|
|
278
|
+
this._log(
|
|
279
|
+
"DEBUG",
|
|
227
280
|
`[CashuSpender] _spendInternal: Could not reuse token, will create new token`
|
|
228
281
|
);
|
|
229
282
|
}
|
|
@@ -241,12 +294,14 @@ var CashuSpender = class {
|
|
|
241
294
|
(sum, item) => sum + item.amount,
|
|
242
295
|
0
|
|
243
296
|
);
|
|
244
|
-
|
|
297
|
+
this._log(
|
|
298
|
+
"DEBUG",
|
|
245
299
|
`[CashuSpender] _spendInternal: totalBalance=${totalBalance}, totalPending=${totalPending}, adjustedAmount=${adjustedAmount}`
|
|
246
300
|
);
|
|
247
301
|
const totalAvailableBalance = totalBalance + totalPending;
|
|
248
302
|
if (totalAvailableBalance < adjustedAmount) {
|
|
249
|
-
|
|
303
|
+
this._log(
|
|
304
|
+
"ERROR",
|
|
250
305
|
`[CashuSpender] _spendInternal: Insufficient balance, have=${totalAvailableBalance}, need=${adjustedAmount}`
|
|
251
306
|
);
|
|
252
307
|
return this._createInsufficientBalanceError(
|
|
@@ -314,7 +369,8 @@ var CashuSpender = class {
|
|
|
314
369
|
baseUrl,
|
|
315
370
|
status: "success"
|
|
316
371
|
});
|
|
317
|
-
|
|
372
|
+
this._log(
|
|
373
|
+
"DEBUG",
|
|
318
374
|
`[CashuSpender] _spendInternal: Successfully spent ${spentAmount}, returning token with balance=${spentAmount}`
|
|
319
375
|
);
|
|
320
376
|
return {
|
|
@@ -332,7 +388,7 @@ var CashuSpender = class {
|
|
|
332
388
|
if (!storedToken) return null;
|
|
333
389
|
const pendingDistribution = this.storageAdapter.getCachedTokenDistribution();
|
|
334
390
|
const balanceForBaseUrl = pendingDistribution.find((b) => b.baseUrl === baseUrl)?.amount || 0;
|
|
335
|
-
|
|
391
|
+
this._log("DEBUG", "RESUINGDSR GSODGNSD", balanceForBaseUrl, amount);
|
|
336
392
|
if (balanceForBaseUrl > amount) {
|
|
337
393
|
const units = this.walletAdapter.getMintUnits();
|
|
338
394
|
const unit = units[mintUrl] || "sat";
|
|
@@ -350,7 +406,7 @@ var CashuSpender = class {
|
|
|
350
406
|
baseUrl,
|
|
351
407
|
amount: topUpAmount
|
|
352
408
|
});
|
|
353
|
-
|
|
409
|
+
this._log("DEBUG", "TOPUP ", topUpResult);
|
|
354
410
|
if (topUpResult.success && topUpResult.toppedUpAmount) {
|
|
355
411
|
const newBalance = balanceForBaseUrl + topUpResult.toppedUpAmount;
|
|
356
412
|
const units = this.walletAdapter.getMintUnits();
|
|
@@ -372,7 +428,7 @@ var CashuSpender = class {
|
|
|
372
428
|
baseUrl,
|
|
373
429
|
storedToken
|
|
374
430
|
);
|
|
375
|
-
|
|
431
|
+
this._log("DEBUG", providerBalance);
|
|
376
432
|
if (providerBalance <= 0) {
|
|
377
433
|
this.storageAdapter.removeToken(baseUrl);
|
|
378
434
|
}
|
|
@@ -391,7 +447,7 @@ var CashuSpender = class {
|
|
|
391
447
|
const refundResults = await Promise.allSettled(
|
|
392
448
|
toRefund.map(async (pending) => {
|
|
393
449
|
const token = this.storageAdapter.getToken(pending.baseUrl);
|
|
394
|
-
|
|
450
|
+
this._log("DEBUG", token, this.balanceManager);
|
|
395
451
|
if (!token || !this.balanceManager) {
|
|
396
452
|
return { baseUrl: pending.baseUrl, success: false };
|
|
397
453
|
}
|
|
@@ -407,7 +463,7 @@ var CashuSpender = class {
|
|
|
407
463
|
baseUrl: pending.baseUrl,
|
|
408
464
|
token
|
|
409
465
|
});
|
|
410
|
-
|
|
466
|
+
this._log("DEBUG", result);
|
|
411
467
|
if (result.success) {
|
|
412
468
|
this.storageAdapter.removeToken(pending.baseUrl);
|
|
413
469
|
}
|
|
@@ -505,11 +561,22 @@ var CashuSpender = class {
|
|
|
505
561
|
|
|
506
562
|
// wallet/BalanceManager.ts
|
|
507
563
|
var BalanceManager = class {
|
|
508
|
-
constructor(walletAdapter, storageAdapter, providerRegistry) {
|
|
564
|
+
constructor(walletAdapter, storageAdapter, providerRegistry, cashuSpender) {
|
|
509
565
|
this.walletAdapter = walletAdapter;
|
|
510
566
|
this.storageAdapter = storageAdapter;
|
|
511
567
|
this.providerRegistry = providerRegistry;
|
|
568
|
+
if (cashuSpender) {
|
|
569
|
+
this.cashuSpender = cashuSpender;
|
|
570
|
+
} else {
|
|
571
|
+
this.cashuSpender = new CashuSpender(
|
|
572
|
+
walletAdapter,
|
|
573
|
+
storageAdapter,
|
|
574
|
+
providerRegistry,
|
|
575
|
+
this
|
|
576
|
+
);
|
|
577
|
+
}
|
|
512
578
|
}
|
|
579
|
+
cashuSpender;
|
|
513
580
|
/**
|
|
514
581
|
* Unified refund - handles both NIP-60 and legacy wallet refunds
|
|
515
582
|
*/
|
|
@@ -544,7 +611,7 @@ var BalanceManager = class {
|
|
|
544
611
|
this.storageAdapter.removeToken(baseUrl);
|
|
545
612
|
return { success: true, message: "No balance to refund" };
|
|
546
613
|
}
|
|
547
|
-
const receiveResult = await this.
|
|
614
|
+
const receiveResult = await this.cashuSpender.receiveToken(
|
|
548
615
|
fetchResult.token
|
|
549
616
|
);
|
|
550
617
|
const totalAmountMsat = receiveResult.unit === "msat" ? receiveResult.amount : receiveResult.amount * 1e3;
|
|
@@ -589,7 +656,7 @@ var BalanceManager = class {
|
|
|
589
656
|
if (fetchResult.error === "No balance to refund") {
|
|
590
657
|
return { success: false, message: "No balance to refund" };
|
|
591
658
|
}
|
|
592
|
-
const receiveResult = await this.
|
|
659
|
+
const receiveResult = await this.cashuSpender.receiveToken(
|
|
593
660
|
fetchResult.token
|
|
594
661
|
);
|
|
595
662
|
const totalAmountMsat = receiveResult.unit === "msat" ? receiveResult.amount : receiveResult.amount * 1e3;
|
|
@@ -1030,7 +1097,7 @@ var BalanceManager = class {
|
|
|
1030
1097
|
*/
|
|
1031
1098
|
async _recoverFailedTopUp(cashuToken) {
|
|
1032
1099
|
try {
|
|
1033
|
-
await this.
|
|
1100
|
+
await this.cashuSpender.receiveToken(cashuToken);
|
|
1034
1101
|
} catch (error) {
|
|
1035
1102
|
console.error(
|
|
1036
1103
|
"[BalanceManager._recoverFailedTopUp] Failed to recover token",
|