@routstr/sdk 0.1.8 → 0.2.0

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/index.js CHANGED
@@ -15,9 +15,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
15
15
 
16
16
  // core/errors.ts
17
17
  var InsufficientBalanceError = class extends Error {
18
- constructor(required, available, maxMintBalance = 0, maxMintUrl = "") {
18
+ constructor(required, available, maxMintBalance = 0, maxMintUrl = "", customMessage) {
19
19
  super(
20
- `Insufficient balance: need ${required} sats, have ${available} sats available. ` + (maxMintBalance > 0 ? `Largest mint balance: ${maxMintBalance} sats from ${maxMintUrl}` : "")
20
+ customMessage ?? `Insufficient balance: need ${required} sats, have ${available} sats available. ` + (maxMintBalance > 0 ? `Largest mint balance: ${maxMintBalance} sats from ${maxMintUrl}` : "")
21
21
  );
22
22
  this.required = required;
23
23
  this.available = available;
@@ -301,9 +301,10 @@ var ModelManager = class _ModelManager {
301
301
  * Uses cache if available and not expired
302
302
  * @param baseUrls List of provider base URLs to fetch from
303
303
  * @param forceRefresh Ignore cache and fetch fresh data
304
+ * @param onProgress Callback fired after each provider completes with current combined models
304
305
  * @returns Array of unique models with best prices selected
305
306
  */
306
- async fetchModels(baseUrls, forceRefresh = false) {
307
+ async fetchModels(baseUrls, forceRefresh = false, onProgress) {
307
308
  if (baseUrls.length === 0) {
308
309
  throw new NoProvidersAvailableError();
309
310
  }
@@ -313,6 +314,12 @@ var ModelManager = class _ModelManager {
313
314
  const estimateMinCost = (m) => {
314
315
  return m?.sats_pricing?.completion ?? 0;
315
316
  };
317
+ const emitProgress = () => {
318
+ if (onProgress) {
319
+ const currentModels = Array.from(bestById.values()).map((v) => v.model);
320
+ onProgress(currentModels);
321
+ }
322
+ };
316
323
  const fetchPromises = baseUrls.map(async (url) => {
317
324
  const base = url.endsWith("/") ? url : `${url}/`;
318
325
  try {
@@ -347,6 +354,7 @@ var ModelManager = class _ModelManager {
347
354
  }
348
355
  }
349
356
  }
357
+ emitProgress();
350
358
  return { success: true, base, list };
351
359
  } catch (error) {
352
360
  if (this.isProviderDownError(error)) {
@@ -1468,6 +1476,10 @@ var BalanceManager = class {
1468
1476
  requestId
1469
1477
  };
1470
1478
  } catch (error) {
1479
+ console.log(
1480
+ "DEBUG",
1481
+ `[TopuPU] topup: Topup result for ${baseUrl}: error=${error}`
1482
+ );
1471
1483
  if (cashuToken) {
1472
1484
  await this._recoverFailedTopUp(cashuToken);
1473
1485
  }
@@ -1494,16 +1506,35 @@ var BalanceManager = class {
1494
1506
  (sum, value) => sum + value,
1495
1507
  0
1496
1508
  );
1509
+ const targetProviderBalance = balanceState.providerBalances[baseUrl] || 0;
1497
1510
  const refundableProviderBalance = Object.entries(
1498
1511
  balanceState.providerBalances
1499
1512
  ).filter(([providerBaseUrl]) => providerBaseUrl !== baseUrl).reduce((sum, [, value]) => sum + value, 0);
1500
- if (totalMintBalance < adjustedAmount && totalMintBalance + refundableProviderBalance >= adjustedAmount && retryCount < 1) {
1513
+ if (totalMintBalance + targetProviderBalance < adjustedAmount && totalMintBalance + targetProviderBalance + refundableProviderBalance >= adjustedAmount && retryCount < 1) {
1501
1514
  await this._refundOtherProvidersForTopUp(baseUrl, mintUrl);
1502
1515
  return this.createProviderToken({
1503
1516
  ...options,
1504
1517
  retryCount: retryCount + 1
1505
1518
  });
1506
1519
  }
1520
+ if (totalMintBalance + targetProviderBalance < adjustedAmount) {
1521
+ const error = new InsufficientBalanceError(
1522
+ adjustedAmount,
1523
+ totalMintBalance + targetProviderBalance,
1524
+ totalMintBalance,
1525
+ Object.entries(balanceState.mintBalances).reduce(
1526
+ (max, [url, balance]) => balance > max.balance ? { url, balance } : max,
1527
+ { url: "", balance: 0 }
1528
+ ).url
1529
+ );
1530
+ return { success: false, error: error.message };
1531
+ }
1532
+ if (targetProviderBalance >= adjustedAmount) {
1533
+ return {
1534
+ success: true,
1535
+ amountSpent: 0
1536
+ };
1537
+ }
1507
1538
  const providerMints = baseUrl && this.providerRegistry ? this.providerRegistry.getProviderMints(baseUrl) : [];
1508
1539
  let requiredAmount = adjustedAmount;
1509
1540
  const supportedMintsOnly = providerMints.length > 0;
@@ -2965,7 +2996,7 @@ var RoutstrClient = class {
2965
2996
  "DEBUG",
2966
2997
  `[RoutstrClient] _handleErrorResponse: Insufficient balance, need=${required}, have=${available}`
2967
2998
  );
2968
- throw new InsufficientBalanceError(required, available);
2999
+ throw new InsufficientBalanceError(required, available, 0, "", message);
2969
3000
  } else {
2970
3001
  this._log(
2971
3002
  "DEBUG",
@@ -3701,7 +3732,11 @@ var createSqliteDriver = (options = {}) => {
3701
3732
  };
3702
3733
 
3703
3734
  // storage/drivers/indexedDB.ts
3735
+ var isBrowser = typeof indexedDB !== "undefined";
3704
3736
  var openDatabase = (dbName, storeName) => {
3737
+ if (!isBrowser) {
3738
+ return Promise.reject(new Error("IndexedDB is not available"));
3739
+ }
3705
3740
  return new Promise((resolve, reject) => {
3706
3741
  const request = indexedDB.open(dbName, 1);
3707
3742
  request.onupgradeneeded = () => {
@@ -3806,7 +3841,8 @@ var SDK_STORAGE_KEYS = {
3806
3841
  ROUTSTR21_MODELS: "routstr21Models",
3807
3842
  LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
3808
3843
  CACHED_RECEIVE_TOKENS: "cached_receive_tokens",
3809
- USAGE_TRACKING: "usage_tracking"
3844
+ USAGE_TRACKING: "usage_tracking",
3845
+ CLIENT_IDS: "client_ids"
3810
3846
  };
3811
3847
 
3812
3848
  // storage/store.ts
@@ -3824,9 +3860,159 @@ var getCashuTokenBalance = (token) => {
3824
3860
  return 0;
3825
3861
  }
3826
3862
  };
3827
- var createSdkStore = async ({
3828
- driver
3829
- }) => {
3863
+ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
3864
+ modelsFromAllProviders: {},
3865
+ lastUsedModel: null,
3866
+ baseUrlsList: [],
3867
+ lastBaseUrlsUpdate: null,
3868
+ disabledProviders: [],
3869
+ mintsFromAllProviders: {},
3870
+ infoFromAllProviders: {},
3871
+ lastModelsUpdate: {},
3872
+ cachedTokens: [],
3873
+ apiKeys: [],
3874
+ childKeys: [],
3875
+ routstr21Models: [],
3876
+ lastRoutstr21ModelsUpdate: null,
3877
+ cachedReceiveTokens: [],
3878
+ usageTracking: [],
3879
+ clientIds: [],
3880
+ setModelsFromAllProviders: (value) => {
3881
+ const normalized = {};
3882
+ for (const [baseUrl, models] of Object.entries(value)) {
3883
+ normalized[normalizeBaseUrl(baseUrl)] = models;
3884
+ }
3885
+ void driver.setItem(
3886
+ SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
3887
+ normalized
3888
+ );
3889
+ set({ modelsFromAllProviders: normalized });
3890
+ },
3891
+ setLastUsedModel: (value) => {
3892
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
3893
+ set({ lastUsedModel: value });
3894
+ },
3895
+ setBaseUrlsList: (value) => {
3896
+ const normalized = value.map((url) => normalizeBaseUrl(url));
3897
+ void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
3898
+ set({ baseUrlsList: normalized });
3899
+ },
3900
+ setBaseUrlsLastUpdate: (value) => {
3901
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
3902
+ set({ lastBaseUrlsUpdate: value });
3903
+ },
3904
+ setDisabledProviders: (value) => {
3905
+ const normalized = value.map((url) => normalizeBaseUrl(url));
3906
+ void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
3907
+ set({ disabledProviders: normalized });
3908
+ },
3909
+ setMintsFromAllProviders: (value) => {
3910
+ const normalized = {};
3911
+ for (const [baseUrl, mints] of Object.entries(value)) {
3912
+ normalized[normalizeBaseUrl(baseUrl)] = mints.map(
3913
+ (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
3914
+ );
3915
+ }
3916
+ void driver.setItem(
3917
+ SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
3918
+ normalized
3919
+ );
3920
+ set({ mintsFromAllProviders: normalized });
3921
+ },
3922
+ setInfoFromAllProviders: (value) => {
3923
+ const normalized = {};
3924
+ for (const [baseUrl, info] of Object.entries(value)) {
3925
+ normalized[normalizeBaseUrl(baseUrl)] = info;
3926
+ }
3927
+ void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
3928
+ set({ infoFromAllProviders: normalized });
3929
+ },
3930
+ setLastModelsUpdate: (value) => {
3931
+ const normalized = {};
3932
+ for (const [baseUrl, timestamp] of Object.entries(value)) {
3933
+ normalized[normalizeBaseUrl(baseUrl)] = timestamp;
3934
+ }
3935
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
3936
+ set({ lastModelsUpdate: normalized });
3937
+ },
3938
+ setCachedTokens: (value) => {
3939
+ set((state) => {
3940
+ const updates = typeof value === "function" ? value(state.cachedTokens) : value;
3941
+ const normalized = updates.map((entry) => ({
3942
+ ...entry,
3943
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
3944
+ balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
3945
+ lastUsed: entry.lastUsed ?? null
3946
+ }));
3947
+ void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
3948
+ return { cachedTokens: normalized };
3949
+ });
3950
+ },
3951
+ setApiKeys: (value) => {
3952
+ set((state) => {
3953
+ const updates = typeof value === "function" ? value(state.apiKeys) : value;
3954
+ const normalized = updates.map((entry) => ({
3955
+ ...entry,
3956
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
3957
+ balance: entry.balance ?? 0,
3958
+ lastUsed: entry.lastUsed ?? null
3959
+ }));
3960
+ void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
3961
+ return { apiKeys: normalized };
3962
+ });
3963
+ },
3964
+ setChildKeys: (value) => {
3965
+ set((state) => {
3966
+ const updates = typeof value === "function" ? value(state.childKeys) : value;
3967
+ const normalized = updates.map((entry) => ({
3968
+ parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
3969
+ childKey: entry.childKey,
3970
+ balance: entry.balance ?? 0,
3971
+ balanceLimit: entry.balanceLimit,
3972
+ validityDate: entry.validityDate,
3973
+ createdAt: entry.createdAt ?? Date.now()
3974
+ }));
3975
+ void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
3976
+ return { childKeys: normalized };
3977
+ });
3978
+ },
3979
+ setRoutstr21Models: (value) => {
3980
+ void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
3981
+ set({ routstr21Models: value });
3982
+ },
3983
+ setRoutstr21ModelsLastUpdate: (value) => {
3984
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
3985
+ set({ lastRoutstr21ModelsUpdate: value });
3986
+ },
3987
+ setCachedReceiveTokens: (value) => {
3988
+ const normalized = value.map((entry) => ({
3989
+ token: entry.token,
3990
+ amount: entry.amount,
3991
+ unit: entry.unit || "sat",
3992
+ createdAt: entry.createdAt ?? Date.now()
3993
+ }));
3994
+ void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
3995
+ set({ cachedReceiveTokens: normalized });
3996
+ },
3997
+ setUsageTracking: (value) => {
3998
+ void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
3999
+ set({ usageTracking: value });
4000
+ },
4001
+ setClientIds: (value) => {
4002
+ set((state) => {
4003
+ const updates = typeof value === "function" ? value(state.clientIds) : value;
4004
+ const normalized = updates.map((entry) => ({
4005
+ ...entry,
4006
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
4007
+ createdAt: entry.createdAt ?? Date.now(),
4008
+ lastUsed: entry.lastUsed ?? null
4009
+ }));
4010
+ void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
4011
+ return { clientIds: normalized };
4012
+ });
4013
+ }
4014
+ }));
4015
+ var hydrateStoreFromDriver = async (store, driver) => {
3830
4016
  const [
3831
4017
  rawModels,
3832
4018
  lastUsedModel,
@@ -3842,7 +4028,8 @@ var createSdkStore = async ({
3842
4028
  rawRoutstr21Models,
3843
4029
  rawLastRoutstr21ModelsUpdate,
3844
4030
  rawCachedReceiveTokens,
3845
- rawUsageTracking
4031
+ rawUsageTracking,
4032
+ rawClientIds
3846
4033
  ] = await Promise.all([
3847
4034
  driver.getItem(
3848
4035
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -3873,7 +4060,8 @@ var createSdkStore = async ({
3873
4060
  null
3874
4061
  ),
3875
4062
  driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
3876
- driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, [])
4063
+ driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, []),
4064
+ driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
3877
4065
  ]);
3878
4066
  const modelsFromAllProviders = Object.fromEntries(
3879
4067
  Object.entries(rawModels).map(([baseUrl, models]) => [
@@ -3932,7 +4120,13 @@ var createSdkStore = async ({
3932
4120
  createdAt: entry.createdAt ?? Date.now()
3933
4121
  }));
3934
4122
  const usageTracking = rawUsageTracking;
3935
- return vanilla.createStore((set, get) => ({
4123
+ const clientIds = rawClientIds.map((entry) => ({
4124
+ ...entry,
4125
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
4126
+ createdAt: entry.createdAt ?? Date.now(),
4127
+ lastUsed: entry.lastUsed ?? null
4128
+ }));
4129
+ store.setState({
3936
4130
  modelsFromAllProviders,
3937
4131
  lastUsedModel,
3938
4132
  baseUrlsList,
@@ -3948,128 +4142,17 @@ var createSdkStore = async ({
3948
4142
  lastRoutstr21ModelsUpdate,
3949
4143
  cachedReceiveTokens,
3950
4144
  usageTracking,
3951
- setModelsFromAllProviders: (value) => {
3952
- const normalized = {};
3953
- for (const [baseUrl, models] of Object.entries(value)) {
3954
- normalized[normalizeBaseUrl(baseUrl)] = models;
3955
- }
3956
- void driver.setItem(
3957
- SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
3958
- normalized
3959
- );
3960
- set({ modelsFromAllProviders: normalized });
3961
- },
3962
- setLastUsedModel: (value) => {
3963
- void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
3964
- set({ lastUsedModel: value });
3965
- },
3966
- setBaseUrlsList: (value) => {
3967
- const normalized = value.map((url) => normalizeBaseUrl(url));
3968
- void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
3969
- set({ baseUrlsList: normalized });
3970
- },
3971
- setBaseUrlsLastUpdate: (value) => {
3972
- void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
3973
- set({ lastBaseUrlsUpdate: value });
3974
- },
3975
- setDisabledProviders: (value) => {
3976
- const normalized = value.map((url) => normalizeBaseUrl(url));
3977
- void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
3978
- set({ disabledProviders: normalized });
3979
- },
3980
- setMintsFromAllProviders: (value) => {
3981
- const normalized = {};
3982
- for (const [baseUrl, mints] of Object.entries(value)) {
3983
- normalized[normalizeBaseUrl(baseUrl)] = mints.map(
3984
- (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
3985
- );
3986
- }
3987
- void driver.setItem(
3988
- SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
3989
- normalized
3990
- );
3991
- set({ mintsFromAllProviders: normalized });
3992
- },
3993
- setInfoFromAllProviders: (value) => {
3994
- const normalized = {};
3995
- for (const [baseUrl, info] of Object.entries(value)) {
3996
- normalized[normalizeBaseUrl(baseUrl)] = info;
3997
- }
3998
- void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
3999
- set({ infoFromAllProviders: normalized });
4000
- },
4001
- setLastModelsUpdate: (value) => {
4002
- const normalized = {};
4003
- for (const [baseUrl, timestamp] of Object.entries(value)) {
4004
- normalized[normalizeBaseUrl(baseUrl)] = timestamp;
4005
- }
4006
- void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
4007
- set({ lastModelsUpdate: normalized });
4008
- },
4009
- setCachedTokens: (value) => {
4010
- set((state) => {
4011
- const updates = typeof value === "function" ? value(state.cachedTokens) : value;
4012
- const normalized = updates.map((entry) => ({
4013
- ...entry,
4014
- baseUrl: normalizeBaseUrl(entry.baseUrl),
4015
- balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
4016
- lastUsed: entry.lastUsed ?? null
4017
- }));
4018
- void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
4019
- return { cachedTokens: normalized };
4020
- });
4021
- },
4022
- setApiKeys: (value) => {
4023
- set((state) => {
4024
- const updates = typeof value === "function" ? value(state.apiKeys) : value;
4025
- const normalized = updates.map((entry) => ({
4026
- ...entry,
4027
- baseUrl: normalizeBaseUrl(entry.baseUrl),
4028
- balance: entry.balance ?? 0,
4029
- lastUsed: entry.lastUsed ?? null
4030
- }));
4031
- void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
4032
- return { apiKeys: normalized };
4033
- });
4034
- },
4035
- setChildKeys: (value) => {
4036
- set((state) => {
4037
- const updates = typeof value === "function" ? value(state.childKeys) : value;
4038
- const normalized = updates.map((entry) => ({
4039
- parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
4040
- childKey: entry.childKey,
4041
- balance: entry.balance ?? 0,
4042
- balanceLimit: entry.balanceLimit,
4043
- validityDate: entry.validityDate,
4044
- createdAt: entry.createdAt ?? Date.now()
4045
- }));
4046
- void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
4047
- return { childKeys: normalized };
4048
- });
4049
- },
4050
- setRoutstr21Models: (value) => {
4051
- void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
4052
- set({ routstr21Models: value });
4053
- },
4054
- setRoutstr21ModelsLastUpdate: (value) => {
4055
- void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
4056
- set({ lastRoutstr21ModelsUpdate: value });
4057
- },
4058
- setCachedReceiveTokens: (value) => {
4059
- const normalized = value.map((entry) => ({
4060
- token: entry.token,
4061
- amount: entry.amount,
4062
- unit: entry.unit || "sat",
4063
- createdAt: entry.createdAt ?? Date.now()
4064
- }));
4065
- void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
4066
- set({ cachedReceiveTokens: normalized });
4067
- },
4068
- setUsageTracking: (value) => {
4069
- void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
4070
- set({ usageTracking: value });
4071
- }
4072
- }));
4145
+ clientIds
4146
+ });
4147
+ };
4148
+ var createSdkStore = ({
4149
+ driver
4150
+ }) => {
4151
+ const store = createEmptyStore(driver);
4152
+ return {
4153
+ store,
4154
+ hydrate: hydrateStoreFromDriver(store, driver)
4155
+ };
4073
4156
  };
4074
4157
  var createDiscoveryAdapterFromStore = (store) => ({
4075
4158
  getCachedModels: () => store.getState().modelsFromAllProviders,
@@ -4334,7 +4417,7 @@ var createProviderRegistryFromStore = (store) => ({
4334
4417
  });
4335
4418
 
4336
4419
  // storage/index.ts
4337
- var isBrowser = () => {
4420
+ var isBrowser2 = () => {
4338
4421
  try {
4339
4422
  return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
4340
4423
  } catch {
@@ -4354,7 +4437,7 @@ var isBun2 = () => {
4354
4437
  };
4355
4438
  var getDefaultSdkDriver = () => {
4356
4439
  if (defaultDriver) return defaultDriver;
4357
- if (isBrowser()) {
4440
+ if (isBrowser2()) {
4358
4441
  defaultDriver = localStorageDriver;
4359
4442
  return defaultDriver;
4360
4443
  }
@@ -4369,12 +4452,12 @@ var getDefaultSdkDriver = () => {
4369
4452
  defaultDriver = createMemoryDriver();
4370
4453
  return defaultDriver;
4371
4454
  };
4372
- var defaultStorePromise = null;
4455
+ var defaultStore = null;
4373
4456
  var getDefaultSdkStore = () => {
4374
- if (!defaultStorePromise) {
4375
- defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });
4457
+ if (!defaultStore) {
4458
+ defaultStore = createSdkStore({ driver: getDefaultSdkDriver() });
4376
4459
  }
4377
- return defaultStorePromise;
4460
+ return defaultStore.hydrate.then(() => defaultStore.store);
4378
4461
  };
4379
4462
  var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
4380
4463
  var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());
@@ -4395,7 +4478,8 @@ async function routeRequests(options) {
4395
4478
  torMode = false,
4396
4479
  forceRefresh = false,
4397
4480
  modelManager: providedModelManager,
4398
- debugLevel
4481
+ debugLevel,
4482
+ mode = "apikeys"
4399
4483
  } = options;
4400
4484
  let modelManager;
4401
4485
  let providers;
@@ -4460,7 +4544,7 @@ async function routeRequests(options) {
4460
4544
  storageAdapter,
4461
4545
  providerRegistry,
4462
4546
  alertLevel,
4463
- "apikeys"
4547
+ mode
4464
4548
  );
4465
4549
  if (debugLevel) {
4466
4550
  client.setDebugLevel(debugLevel);