@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.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,158 @@ 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
+ createdAt: entry.createdAt ?? Date.now(),
4007
+ lastUsed: entry.lastUsed ?? null
4008
+ }));
4009
+ void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
4010
+ return { clientIds: normalized };
4011
+ });
4012
+ }
4013
+ }));
4014
+ var hydrateStoreFromDriver = async (store, driver) => {
3830
4015
  const [
3831
4016
  rawModels,
3832
4017
  lastUsedModel,
@@ -3842,7 +4027,8 @@ var createSdkStore = async ({
3842
4027
  rawRoutstr21Models,
3843
4028
  rawLastRoutstr21ModelsUpdate,
3844
4029
  rawCachedReceiveTokens,
3845
- rawUsageTracking
4030
+ rawUsageTracking,
4031
+ rawClientIds
3846
4032
  ] = await Promise.all([
3847
4033
  driver.getItem(
3848
4034
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -3873,7 +4059,8 @@ var createSdkStore = async ({
3873
4059
  null
3874
4060
  ),
3875
4061
  driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
3876
- driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, [])
4062
+ driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, []),
4063
+ driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
3877
4064
  ]);
3878
4065
  const modelsFromAllProviders = Object.fromEntries(
3879
4066
  Object.entries(rawModels).map(([baseUrl, models]) => [
@@ -3932,7 +4119,12 @@ var createSdkStore = async ({
3932
4119
  createdAt: entry.createdAt ?? Date.now()
3933
4120
  }));
3934
4121
  const usageTracking = rawUsageTracking;
3935
- return vanilla.createStore((set, get) => ({
4122
+ const clientIds = rawClientIds.map((entry) => ({
4123
+ ...entry,
4124
+ createdAt: entry.createdAt ?? Date.now(),
4125
+ lastUsed: entry.lastUsed ?? null
4126
+ }));
4127
+ store.setState({
3936
4128
  modelsFromAllProviders,
3937
4129
  lastUsedModel,
3938
4130
  baseUrlsList,
@@ -3948,128 +4140,17 @@ var createSdkStore = async ({
3948
4140
  lastRoutstr21ModelsUpdate,
3949
4141
  cachedReceiveTokens,
3950
4142
  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
- }));
4143
+ clientIds
4144
+ });
4145
+ };
4146
+ var createSdkStore = ({
4147
+ driver
4148
+ }) => {
4149
+ const store = createEmptyStore(driver);
4150
+ return {
4151
+ store,
4152
+ hydrate: hydrateStoreFromDriver(store, driver)
4153
+ };
4073
4154
  };
4074
4155
  var createDiscoveryAdapterFromStore = (store) => ({
4075
4156
  getCachedModels: () => store.getState().modelsFromAllProviders,
@@ -4334,7 +4415,7 @@ var createProviderRegistryFromStore = (store) => ({
4334
4415
  });
4335
4416
 
4336
4417
  // storage/index.ts
4337
- var isBrowser = () => {
4418
+ var isBrowser2 = () => {
4338
4419
  try {
4339
4420
  return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
4340
4421
  } catch {
@@ -4354,7 +4435,7 @@ var isBun2 = () => {
4354
4435
  };
4355
4436
  var getDefaultSdkDriver = () => {
4356
4437
  if (defaultDriver) return defaultDriver;
4357
- if (isBrowser()) {
4438
+ if (isBrowser2()) {
4358
4439
  defaultDriver = localStorageDriver;
4359
4440
  return defaultDriver;
4360
4441
  }
@@ -4369,12 +4450,12 @@ var getDefaultSdkDriver = () => {
4369
4450
  defaultDriver = createMemoryDriver();
4370
4451
  return defaultDriver;
4371
4452
  };
4372
- var defaultStorePromise = null;
4453
+ var defaultStore = null;
4373
4454
  var getDefaultSdkStore = () => {
4374
- if (!defaultStorePromise) {
4375
- defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });
4455
+ if (!defaultStore) {
4456
+ defaultStore = createSdkStore({ driver: getDefaultSdkDriver() });
4376
4457
  }
4377
- return defaultStorePromise;
4458
+ return defaultStore.hydrate.then(() => defaultStore.store);
4378
4459
  };
4379
4460
  var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
4380
4461
  var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());
@@ -4395,7 +4476,8 @@ async function routeRequests(options) {
4395
4476
  torMode = false,
4396
4477
  forceRefresh = false,
4397
4478
  modelManager: providedModelManager,
4398
- debugLevel
4479
+ debugLevel,
4480
+ mode = "apikeys"
4399
4481
  } = options;
4400
4482
  let modelManager;
4401
4483
  let providers;
@@ -4460,7 +4542,7 @@ async function routeRequests(options) {
4460
4542
  storageAdapter,
4461
4543
  providerRegistry,
4462
4544
  alertLevel,
4463
- "apikeys"
4545
+ mode
4464
4546
  );
4465
4547
  if (debugLevel) {
4466
4548
  client.setDebugLevel(debugLevel);