@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.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,159 @@ 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
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
4005
+ createdAt: entry.createdAt ?? Date.now(),
4006
+ lastUsed: entry.lastUsed ?? null
4007
+ }));
4008
+ void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
4009
+ return { clientIds: normalized };
4010
+ });
4011
+ }
4012
+ }));
4013
+ var hydrateStoreFromDriver = async (store, driver) => {
3828
4014
  const [
3829
4015
  rawModels,
3830
4016
  lastUsedModel,
@@ -3840,7 +4026,8 @@ var createSdkStore = async ({
3840
4026
  rawRoutstr21Models,
3841
4027
  rawLastRoutstr21ModelsUpdate,
3842
4028
  rawCachedReceiveTokens,
3843
- rawUsageTracking
4029
+ rawUsageTracking,
4030
+ rawClientIds
3844
4031
  ] = await Promise.all([
3845
4032
  driver.getItem(
3846
4033
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -3871,7 +4058,8 @@ var createSdkStore = async ({
3871
4058
  null
3872
4059
  ),
3873
4060
  driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
3874
- driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, [])
4061
+ driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, []),
4062
+ driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
3875
4063
  ]);
3876
4064
  const modelsFromAllProviders = Object.fromEntries(
3877
4065
  Object.entries(rawModels).map(([baseUrl, models]) => [
@@ -3930,7 +4118,13 @@ var createSdkStore = async ({
3930
4118
  createdAt: entry.createdAt ?? Date.now()
3931
4119
  }));
3932
4120
  const usageTracking = rawUsageTracking;
3933
- return createStore((set, get) => ({
4121
+ const clientIds = rawClientIds.map((entry) => ({
4122
+ ...entry,
4123
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
4124
+ createdAt: entry.createdAt ?? Date.now(),
4125
+ lastUsed: entry.lastUsed ?? null
4126
+ }));
4127
+ store.setState({
3934
4128
  modelsFromAllProviders,
3935
4129
  lastUsedModel,
3936
4130
  baseUrlsList,
@@ -3946,128 +4140,17 @@ var createSdkStore = async ({
3946
4140
  lastRoutstr21ModelsUpdate,
3947
4141
  cachedReceiveTokens,
3948
4142
  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
- }));
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
+ };
4071
4154
  };
4072
4155
  var createDiscoveryAdapterFromStore = (store) => ({
4073
4156
  getCachedModels: () => store.getState().modelsFromAllProviders,
@@ -4332,7 +4415,7 @@ var createProviderRegistryFromStore = (store) => ({
4332
4415
  });
4333
4416
 
4334
4417
  // storage/index.ts
4335
- var isBrowser = () => {
4418
+ var isBrowser2 = () => {
4336
4419
  try {
4337
4420
  return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
4338
4421
  } catch {
@@ -4352,7 +4435,7 @@ var isBun2 = () => {
4352
4435
  };
4353
4436
  var getDefaultSdkDriver = () => {
4354
4437
  if (defaultDriver) return defaultDriver;
4355
- if (isBrowser()) {
4438
+ if (isBrowser2()) {
4356
4439
  defaultDriver = localStorageDriver;
4357
4440
  return defaultDriver;
4358
4441
  }
@@ -4367,12 +4450,12 @@ var getDefaultSdkDriver = () => {
4367
4450
  defaultDriver = createMemoryDriver();
4368
4451
  return defaultDriver;
4369
4452
  };
4370
- var defaultStorePromise = null;
4453
+ var defaultStore = null;
4371
4454
  var getDefaultSdkStore = () => {
4372
- if (!defaultStorePromise) {
4373
- defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });
4455
+ if (!defaultStore) {
4456
+ defaultStore = createSdkStore({ driver: getDefaultSdkDriver() });
4374
4457
  }
4375
- return defaultStorePromise;
4458
+ return defaultStore.hydrate.then(() => defaultStore.store);
4376
4459
  };
4377
4460
  var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
4378
4461
  var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());
@@ -4393,7 +4476,8 @@ async function routeRequests(options) {
4393
4476
  torMode = false,
4394
4477
  forceRefresh = false,
4395
4478
  modelManager: providedModelManager,
4396
- debugLevel
4479
+ debugLevel,
4480
+ mode = "apikeys"
4397
4481
  } = options;
4398
4482
  let modelManager;
4399
4483
  let providers;
@@ -4458,7 +4542,7 @@ async function routeRequests(options) {
4458
4542
  storageAdapter,
4459
4543
  providerRegistry,
4460
4544
  alertLevel,
4461
- "apikeys"
4545
+ mode
4462
4546
  );
4463
4547
  if (debugLevel) {
4464
4548
  client.setDebugLevel(debugLevel);