@routstr/sdk 0.3.8 → 0.3.9

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.
@@ -1640,6 +1640,277 @@ var createProviderRegistryFromStore = (store, logger) => {
1640
1640
  };
1641
1641
  };
1642
1642
 
1643
+ // storage/shardedDiscoveryAdapter.ts
1644
+ var MODEL_KEY_PREFIX = "models:provider:";
1645
+ var MODEL_TS_KEY_PREFIX = "models:provider_timestamp:";
1646
+ var PROVIDER_INDEX_KEY = "models:provider_index";
1647
+ var MIGRATION_MARKER_KEY4 = "models_sharded_migration_v1";
1648
+ var encodeBaseUrl = (baseUrl) => encodeURIComponent(baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`);
1649
+ var modelKey = (baseUrl) => `${MODEL_KEY_PREFIX}${encodeBaseUrl(baseUrl)}`;
1650
+ var modelTsKey = (baseUrl) => `${MODEL_TS_KEY_PREFIX}${encodeBaseUrl(baseUrl)}`;
1651
+ var normalizeBaseUrl6 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1652
+ var createShardedDiscoveryAdapter = async (options) => {
1653
+ const { driver } = options;
1654
+ const legacyModels = await driver.getItem(SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS, {});
1655
+ const legacyTimestamps = await driver.getItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, {});
1656
+ if (Object.keys(legacyModels).length > 0) {
1657
+ const migratedProviders = [];
1658
+ for (const [baseUrl, models] of Object.entries(legacyModels)) {
1659
+ const normalized = normalizeBaseUrl6(baseUrl);
1660
+ await driver.setItem(modelKey(normalized), models);
1661
+ const ts = legacyTimestamps[normalized] ?? Date.now();
1662
+ await driver.setItem(modelTsKey(normalized), ts);
1663
+ migratedProviders.push(normalized);
1664
+ }
1665
+ const existingIndex = await driver.getItem(
1666
+ PROVIDER_INDEX_KEY,
1667
+ []
1668
+ );
1669
+ const merged = [.../* @__PURE__ */ new Set([...existingIndex, ...migratedProviders])];
1670
+ await driver.setItem(PROVIDER_INDEX_KEY, merged);
1671
+ await driver.removeItem(SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS);
1672
+ await driver.removeItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE);
1673
+ }
1674
+ await driver.setItem(MIGRATION_MARKER_KEY4, true);
1675
+ const [
1676
+ rawMints,
1677
+ rawInfo,
1678
+ lastUsedModel,
1679
+ rawDisabled,
1680
+ rawBaseUrls,
1681
+ lastBaseUrlsUpdate,
1682
+ rawRoutstr21Models,
1683
+ lastRoutstr21ModelsUpdate
1684
+ ] = await Promise.all([
1685
+ driver.getItem(
1686
+ SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
1687
+ {}
1688
+ ),
1689
+ driver.getItem(
1690
+ SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS,
1691
+ {}
1692
+ ),
1693
+ driver.getItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, null),
1694
+ driver.getItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, []),
1695
+ driver.getItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, []),
1696
+ driver.getItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, null),
1697
+ driver.getItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, []),
1698
+ driver.getItem(
1699
+ SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,
1700
+ null
1701
+ )
1702
+ ]);
1703
+ const modelsByBaseUrl = /* @__PURE__ */ new Map();
1704
+ const timestampsByBaseUrl = /* @__PURE__ */ new Map();
1705
+ const providerIndex = /* @__PURE__ */ new Set();
1706
+ const knownProviders = /* @__PURE__ */ new Set();
1707
+ for (const baseUrl of Object.keys(rawInfo)) {
1708
+ knownProviders.add(normalizeBaseUrl6(baseUrl));
1709
+ }
1710
+ for (const baseUrl of Object.keys(rawMints)) {
1711
+ knownProviders.add(normalizeBaseUrl6(baseUrl));
1712
+ }
1713
+ for (const baseUrl of rawBaseUrls) {
1714
+ knownProviders.add(normalizeBaseUrl6(baseUrl));
1715
+ }
1716
+ for (const baseUrl of rawDisabled) {
1717
+ knownProviders.add(normalizeBaseUrl6(baseUrl));
1718
+ }
1719
+ for (const baseUrl of Object.keys(legacyModels)) {
1720
+ knownProviders.add(normalizeBaseUrl6(baseUrl));
1721
+ }
1722
+ const indexProviders = await driver.getItem(
1723
+ PROVIDER_INDEX_KEY,
1724
+ []
1725
+ );
1726
+ for (const baseUrl of indexProviders) {
1727
+ const normalized = normalizeBaseUrl6(baseUrl);
1728
+ providerIndex.add(normalized);
1729
+ knownProviders.add(normalized);
1730
+ }
1731
+ for (const baseUrl of knownProviders) {
1732
+ const normalized = normalizeBaseUrl6(baseUrl);
1733
+ const models = await driver.getItem(
1734
+ modelKey(normalized),
1735
+ null
1736
+ );
1737
+ const ts = await driver.getItem(
1738
+ modelTsKey(normalized),
1739
+ null
1740
+ );
1741
+ if (models !== null) {
1742
+ modelsByBaseUrl.set(normalized, models);
1743
+ }
1744
+ if (ts !== null) {
1745
+ timestampsByBaseUrl.set(normalized, ts);
1746
+ }
1747
+ if (models !== null || ts !== null) {
1748
+ providerIndex.add(normalized);
1749
+ }
1750
+ }
1751
+ let mints = Object.fromEntries(
1752
+ Object.entries(rawMints).map(([baseUrl, mintList]) => [
1753
+ normalizeBaseUrl6(baseUrl),
1754
+ mintList.map((mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint)
1755
+ ])
1756
+ );
1757
+ let info = Object.fromEntries(
1758
+ Object.entries(rawInfo).map(([baseUrl, entry]) => [
1759
+ normalizeBaseUrl6(baseUrl),
1760
+ entry
1761
+ ])
1762
+ );
1763
+ let _lastUsedModel = lastUsedModel;
1764
+ let _disabledProviders = rawDisabled.map(normalizeBaseUrl6);
1765
+ let _baseUrlsList = rawBaseUrls.map(normalizeBaseUrl6);
1766
+ let _lastBaseUrlsUpdate = lastBaseUrlsUpdate;
1767
+ let _routstr21Models = rawRoutstr21Models;
1768
+ let _lastRoutstr21ModelsUpdate = lastRoutstr21ModelsUpdate;
1769
+ const persistProviderIndex = () => {
1770
+ void driver.setItem(PROVIDER_INDEX_KEY, [...providerIndex]);
1771
+ };
1772
+ return {
1773
+ // -- Models (sharded kv) --
1774
+ getCachedModels: () => {
1775
+ const result = {};
1776
+ for (const [baseUrl, models] of modelsByBaseUrl.entries()) {
1777
+ result[baseUrl] = models;
1778
+ }
1779
+ return result;
1780
+ },
1781
+ setCachedModels: (models) => {
1782
+ const nextKeys = new Set(
1783
+ Object.keys(models).map((baseUrl) => normalizeBaseUrl6(baseUrl))
1784
+ );
1785
+ for (const baseUrl of [...modelsByBaseUrl.keys()]) {
1786
+ if (!nextKeys.has(normalizeBaseUrl6(baseUrl))) {
1787
+ providerIndex.delete(baseUrl);
1788
+ modelsByBaseUrl.delete(baseUrl);
1789
+ timestampsByBaseUrl.delete(baseUrl);
1790
+ void driver.removeItem(modelKey(baseUrl));
1791
+ void driver.removeItem(modelTsKey(baseUrl));
1792
+ }
1793
+ }
1794
+ for (const [baseUrl, modelList] of Object.entries(models)) {
1795
+ const normalized = normalizeBaseUrl6(baseUrl);
1796
+ providerIndex.add(normalized);
1797
+ modelsByBaseUrl.set(normalized, modelList);
1798
+ const ts = timestampsByBaseUrl.get(normalized) ?? Date.now();
1799
+ timestampsByBaseUrl.set(normalized, ts);
1800
+ void driver.setItem(modelKey(normalized), modelList);
1801
+ void driver.setItem(modelTsKey(normalized), ts);
1802
+ }
1803
+ persistProviderIndex();
1804
+ },
1805
+ getProviderLastUpdate: (baseUrl) => {
1806
+ return timestampsByBaseUrl.get(normalizeBaseUrl6(baseUrl)) ?? null;
1807
+ },
1808
+ setProviderLastUpdate: (baseUrl, timestamp) => {
1809
+ const normalized = normalizeBaseUrl6(baseUrl);
1810
+ providerIndex.add(normalized);
1811
+ timestampsByBaseUrl.set(normalized, timestamp);
1812
+ void driver.setItem(modelTsKey(normalized), timestamp);
1813
+ persistProviderIndex();
1814
+ },
1815
+ // -- Mints (kv) --
1816
+ getCachedMints: () => mints,
1817
+ setCachedMints: (value) => {
1818
+ const normalized = {};
1819
+ for (const [baseUrl, mintList] of Object.entries(value)) {
1820
+ normalized[normalizeBaseUrl6(baseUrl)] = mintList.map(
1821
+ (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
1822
+ );
1823
+ }
1824
+ mints = normalized;
1825
+ void driver.setItem(SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS, normalized);
1826
+ },
1827
+ // -- Provider info (kv) --
1828
+ getCachedProviderInfo: () => info,
1829
+ setCachedProviderInfo: (value) => {
1830
+ const normalized = {};
1831
+ for (const [baseUrl, entry] of Object.entries(value)) {
1832
+ normalized[normalizeBaseUrl6(baseUrl)] = entry;
1833
+ }
1834
+ info = normalized;
1835
+ void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
1836
+ },
1837
+ // -- Last used model (kv) --
1838
+ getLastUsedModel: () => _lastUsedModel,
1839
+ setLastUsedModel: (modelId) => {
1840
+ _lastUsedModel = modelId;
1841
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, modelId);
1842
+ },
1843
+ // -- Disabled providers (kv) --
1844
+ getDisabledProviders: () => _disabledProviders,
1845
+ setDisabledProviders: (urls) => {
1846
+ const normalized = urls.map(normalizeBaseUrl6);
1847
+ _disabledProviders = normalized;
1848
+ void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
1849
+ },
1850
+ // -- Base URLs (kv) --
1851
+ getBaseUrlsList: () => _baseUrlsList,
1852
+ getBaseUrlsLastUpdate: () => _lastBaseUrlsUpdate,
1853
+ setBaseUrlsList: (urls) => {
1854
+ const normalized = urls.map(normalizeBaseUrl6);
1855
+ _baseUrlsList = normalized;
1856
+ void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
1857
+ },
1858
+ setBaseUrlsLastUpdate: (timestamp) => {
1859
+ _lastBaseUrlsUpdate = timestamp;
1860
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, timestamp);
1861
+ },
1862
+ // -- Routstr21 models (kv) --
1863
+ getRoutstr21Models: () => _routstr21Models,
1864
+ setRoutstr21Models: (models) => {
1865
+ _routstr21Models = models;
1866
+ void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, models);
1867
+ },
1868
+ getRoutstr21ModelsLastUpdate: () => _lastRoutstr21ModelsUpdate,
1869
+ setRoutstr21ModelsLastUpdate: (timestamp) => {
1870
+ _lastRoutstr21ModelsUpdate = timestamp;
1871
+ void driver.setItem(
1872
+ SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,
1873
+ timestamp
1874
+ );
1875
+ }
1876
+ };
1877
+ };
1878
+ var createProviderRegistryFromDiscoveryAdapter = (adapter, logger) => {
1879
+ const log = (logger ?? consoleLogger).child("ProviderRegistry");
1880
+ return {
1881
+ getModelsForProvider: (baseUrl) => {
1882
+ const normalized = normalizeBaseUrl6(baseUrl);
1883
+ return adapter.getCachedModels()[normalized] || [];
1884
+ },
1885
+ getDisabledProviders: () => adapter.getDisabledProviders(),
1886
+ getProviderMints: (baseUrl) => {
1887
+ const normalized = normalizeBaseUrl6(baseUrl);
1888
+ return adapter.getCachedMints()[normalized] || [];
1889
+ },
1890
+ getProviderInfo: async (baseUrl) => {
1891
+ const normalized = normalizeBaseUrl6(baseUrl);
1892
+ const cached = adapter.getCachedProviderInfo()[normalized];
1893
+ if (cached) return cached;
1894
+ try {
1895
+ const response = await fetch(`${normalized}v1/info`);
1896
+ if (!response.ok) {
1897
+ throw new Error(`Failed ${response.status}`);
1898
+ }
1899
+ const info = await response.json();
1900
+ adapter.setCachedProviderInfo({
1901
+ ...adapter.getCachedProviderInfo(),
1902
+ [normalized]: info
1903
+ });
1904
+ return info;
1905
+ } catch (error) {
1906
+ log.warn(`Failed to fetch provider info from ${normalized}:`, error);
1907
+ return null;
1908
+ }
1909
+ },
1910
+ getAllProvidersModels: () => adapter.getCachedModels()
1911
+ };
1912
+ };
1913
+
1643
1914
  // storage/index.ts
1644
1915
  var isBrowser3 = () => {
1645
1916
  try {
@@ -1709,10 +1980,16 @@ var getDefaultUsageTrackingDriver = () => {
1709
1980
  var setDefaultUsageTrackingDriver = (driver) => {
1710
1981
  defaultUsageTrackingDriver = driver;
1711
1982
  };
1712
- var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
1983
+ var defaultDiscoveryAdapter = null;
1984
+ var getDefaultDiscoveryAdapter = async () => {
1985
+ if (defaultDiscoveryAdapter) return defaultDiscoveryAdapter;
1986
+ const driver = getDefaultSdkDriver();
1987
+ defaultDiscoveryAdapter = await createShardedDiscoveryAdapter({ driver });
1988
+ return defaultDiscoveryAdapter;
1989
+ };
1713
1990
  var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());
1714
- var getDefaultProviderRegistry = async () => createProviderRegistryFromStore(await getDefaultSdkStore());
1991
+ var getDefaultProviderRegistry = async () => createProviderRegistryFromDiscoveryAdapter(await getDefaultDiscoveryAdapter());
1715
1992
 
1716
- export { SDK_STORAGE_KEYS, createBunSqliteDriver, createBunSqliteUsageTrackingDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromStore, createSdkStore, createSqliteDriver, createSqliteUsageTrackingDriver, createStorageAdapterFromStore, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, localStorageDriver, setDefaultUsageTrackingDriver };
1993
+ export { SDK_STORAGE_KEYS, createBunSqliteDriver, createBunSqliteUsageTrackingDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromDiscoveryAdapter, createProviderRegistryFromStore, createSdkStore, createShardedDiscoveryAdapter, createSqliteDriver, createSqliteUsageTrackingDriver, createStorageAdapterFromStore, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, localStorageDriver, setDefaultUsageTrackingDriver };
1717
1994
  //# sourceMappingURL=index.mjs.map
1718
1995
  //# sourceMappingURL=index.mjs.map