@routstr/sdk 0.1.8 → 0.2.1

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