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