@routstr/sdk 0.3.3 → 0.3.5

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.
Files changed (39) hide show
  1. package/dist/client/index.d.mts +9 -5
  2. package/dist/client/index.d.ts +9 -5
  3. package/dist/client/index.js +107 -136
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/client/index.mjs +107 -136
  6. package/dist/client/index.mjs.map +1 -1
  7. package/dist/discovery/index.d.mts +8 -2
  8. package/dist/discovery/index.d.ts +8 -2
  9. package/dist/discovery/index.js +27 -16
  10. package/dist/discovery/index.js.map +1 -1
  11. package/dist/discovery/index.mjs +27 -16
  12. package/dist/discovery/index.mjs.map +1 -1
  13. package/dist/index.d.mts +10 -8
  14. package/dist/index.d.ts +10 -8
  15. package/dist/index.js +179 -193
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.mjs +178 -194
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/{interfaces-C5fLD3jB.d.mts → interfaces-Bp0Ngmqv.d.mts} +1 -1
  20. package/dist/{interfaces-BxDEka72.d.ts → interfaces-CIfd_phZ.d.ts} +1 -1
  21. package/dist/{interfaces-BWJJTCXO.d.mts → interfaces-Cxi8R4TT.d.mts} +1 -1
  22. package/dist/{interfaces-B62Rw-dd.d.ts → interfaces-D2FDCLyP.d.ts} +1 -1
  23. package/dist/storage/index.d.mts +9 -7
  24. package/dist/storage/index.d.ts +9 -7
  25. package/dist/storage/index.js +52 -37
  26. package/dist/storage/index.js.map +1 -1
  27. package/dist/storage/index.mjs +52 -37
  28. package/dist/storage/index.mjs.map +1 -1
  29. package/dist/{store-h7m23ffq.d.ts → store-BD5zF9Hp.d.ts} +4 -4
  30. package/dist/{store-DGeLPv9E.d.mts → store-CBSyK2qg.d.mts} +4 -4
  31. package/dist/{types-BYj_8c5c.d.mts → types-DPQM6tIG.d.mts} +10 -1
  32. package/dist/{types-BYj_8c5c.d.ts → types-DPQM6tIG.d.ts} +10 -1
  33. package/dist/wallet/index.d.mts +8 -6
  34. package/dist/wallet/index.d.ts +8 -6
  35. package/dist/wallet/index.js +80 -57
  36. package/dist/wallet/index.js.map +1 -1
  37. package/dist/wallet/index.mjs +80 -57
  38. package/dist/wallet/index.mjs.map +1 -1
  39. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -6,6 +6,30 @@ import { createStore } from 'zustand/vanilla';
6
6
  import { Transform } from 'stream';
7
7
  import { StringDecoder } from 'string_decoder';
8
8
 
9
+ // core/types.ts
10
+ function makeConsoleLogger(prefix) {
11
+ const fmt = (args) => prefix ? [prefix, ...args] : args;
12
+ return {
13
+ log: (...args) => console.log(...fmt(args)),
14
+ warn: (...args) => console.warn(...fmt(args)),
15
+ error: (...args) => console.error(...fmt(args)),
16
+ debug: (...args) => console.log(...fmt(args)),
17
+ child: (p) => makeConsoleLogger(prefix ? `${prefix}:${p}` : p)
18
+ };
19
+ }
20
+ var consoleLogger = makeConsoleLogger();
21
+ var noopLogger = {
22
+ log: () => {
23
+ },
24
+ warn: () => {
25
+ },
26
+ error: () => {
27
+ },
28
+ debug: () => {
29
+ },
30
+ child: () => noopLogger
31
+ };
32
+
9
33
  // core/errors.ts
10
34
  var InsufficientBalanceError = class extends Error {
11
35
  constructor(required, available, maxMintBalance = 0, maxMintUrl = "", customMessage) {
@@ -102,11 +126,13 @@ var ModelManager = class _ModelManager {
102
126
  this.cacheTTL = config.cacheTTL || 210 * 60 * 1e3;
103
127
  this.includeProviderUrls = config.includeProviderUrls || [];
104
128
  this.excludeProviderUrls = config.excludeProviderUrls || [];
129
+ this.logger = (config.logger ?? consoleLogger).child("ModelManager");
105
130
  }
106
131
  cacheTTL;
107
132
  providerDirectoryUrl;
108
133
  includeProviderUrls;
109
134
  excludeProviderUrls;
135
+ logger;
110
136
  /**
111
137
  * Get the list of bootstrapped provider base URLs
112
138
  * @returns Array of provider base URLs
@@ -152,7 +178,7 @@ var ModelManager = class _ModelManager {
152
178
  return filtered;
153
179
  }
154
180
  } catch (e) {
155
- console.warn("Nostr bootstrap failed, falling back to HTTP:", e);
181
+ this.logger.warn("Nostr bootstrap failed, falling back to HTTP:", e);
156
182
  }
157
183
  return this.bootstrapFromHttp(torMode, forceRefresh);
158
184
  }
@@ -228,10 +254,7 @@ var ModelManager = class _ModelManager {
228
254
  }
229
255
  }
230
256
  } catch {
231
- console.warn(
232
- "[NostrBootstrap] Failed to parse Nostr event content:",
233
- event.id
234
- );
257
+ this.logger.warn("NostrBootstrap: failed to parse event content:", event.id);
235
258
  }
236
259
  }
237
260
  }
@@ -285,7 +308,7 @@ var ModelManager = class _ModelManager {
285
308
  }
286
309
  return list;
287
310
  } catch (e) {
288
- console.error("Failed to bootstrap providers", e);
311
+ this.logger.error("Failed to bootstrap providers", e);
289
312
  throw new ProviderBootstrapError([], `Provider bootstrap failed: ${e}`);
290
313
  }
291
314
  }
@@ -351,9 +374,9 @@ var ModelManager = class _ModelManager {
351
374
  return { success: true, base, list };
352
375
  } catch (error) {
353
376
  if (this.isProviderDownError(error)) {
354
- console.warn(`Provider ${base} is down right now.`);
377
+ this.logger.warn(`Provider ${base} is down right now.`);
355
378
  } else {
356
- console.warn(`Failed to fetch models from ${base}:`, error);
379
+ this.logger.warn(`Failed to fetch models from ${base}:`, error);
357
380
  }
358
381
  this.adapter.setProviderLastUpdate(base, Date.now());
359
382
  return { success: false, base };
@@ -510,10 +533,7 @@ var ModelManager = class _ModelManager {
510
533
  this.adapter.setRoutstr21ModelsLastUpdate(Date.now());
511
534
  return models;
512
535
  } catch {
513
- console.warn(
514
- "[Routstr21Models] Failed to parse Nostr event content:",
515
- event.id
516
- );
536
+ this.logger.warn("Routstr21Models: failed to parse Nostr event content:", event.id);
517
537
  return cachedModels.length > 0 ? cachedModels : [];
518
538
  }
519
539
  }
@@ -524,8 +544,10 @@ var MintDiscovery = class {
524
544
  constructor(adapter, config = {}) {
525
545
  this.adapter = adapter;
526
546
  this.cacheTTL = config.cacheTTL || 21 * 60 * 1e3;
547
+ this.logger = (config.logger ?? consoleLogger).child("MintDiscovery");
527
548
  }
528
549
  cacheTTL;
550
+ logger;
529
551
  /**
530
552
  * Fetch mints from all providers via their /v1/info endpoints
531
553
  * Caches mints and full provider info for later access
@@ -576,9 +598,9 @@ var MintDiscovery = class {
576
598
  } catch (error) {
577
599
  this.adapter.setProviderLastUpdate(base, Date.now());
578
600
  if (this.isProviderDownError(error)) {
579
- console.warn(`Provider ${base} is down right now.`);
601
+ this.logger.warn(`Provider ${base} is down right now.`);
580
602
  } else {
581
- console.warn(`Failed to fetch mints from ${base}:`, error);
603
+ this.logger.warn(`Failed to fetch mints from ${base}:`, error);
582
604
  }
583
605
  return { success: false, base, mints: [], info: null };
584
606
  }
@@ -592,14 +614,14 @@ var MintDiscovery = class {
592
614
  infoFromAllProviders[base] = info;
593
615
  }
594
616
  } else {
595
- console.error("Mint discovery error:", result.reason);
617
+ this.logger.error("Mint discovery error:", result.reason);
596
618
  }
597
619
  }
598
620
  try {
599
621
  this.adapter.setCachedMints(mintsFromAllProviders);
600
622
  this.adapter.setCachedProviderInfo(infoFromAllProviders);
601
623
  } catch (error) {
602
- console.error("Error caching mint discovery results:", error);
624
+ this.logger.error("Error caching mint discovery results:", error);
603
625
  }
604
626
  return {
605
627
  mintsFromProviders: mintsFromAllProviders,
@@ -738,14 +760,16 @@ function selectMintWithBalance(balances, units, amount, excludeMints = []) {
738
760
  return { selectedMintUrl: null, selectedMintBalance: 0 };
739
761
  }
740
762
  var CashuSpender = class {
741
- constructor(walletAdapter, storageAdapter, _providerRegistry, balanceManager) {
763
+ constructor(walletAdapter, storageAdapter, _providerRegistry, balanceManager, logger) {
742
764
  this.walletAdapter = walletAdapter;
743
765
  this.storageAdapter = storageAdapter;
744
766
  this._providerRegistry = _providerRegistry;
745
767
  this.balanceManager = balanceManager;
768
+ this.logger = (logger ?? consoleLogger).child("CashuSpender");
746
769
  }
747
770
  _isBusy = false;
748
771
  debugLevel = "WARN";
772
+ logger;
749
773
  async receiveToken(token) {
750
774
  try {
751
775
  const result = await this.walletAdapter.receiveToken(token);
@@ -841,13 +865,13 @@ var CashuSpender = class {
841
865
  if (levelPriority[level] >= levelPriority[this.debugLevel]) {
842
866
  switch (level) {
843
867
  case "DEBUG":
844
- console.log(...args);
868
+ this.logger.log(...args);
845
869
  break;
846
870
  case "WARN":
847
- console.warn(...args);
871
+ this.logger.warn(...args);
848
872
  break;
849
873
  case "ERROR":
850
- console.error(...args);
874
+ this.logger.error(...args);
851
875
  break;
852
876
  }
853
877
  }
@@ -1195,19 +1219,50 @@ var CashuSpender = class {
1195
1219
  apiKeyEntry.baseUrl
1196
1220
  );
1197
1221
  if (apiKeyEntryFull && this.balanceManager) {
1222
+ try {
1223
+ const balanceResult = await this.balanceManager.getTokenBalance(
1224
+ apiKeyEntryFull.key,
1225
+ apiKeyEntry.baseUrl
1226
+ );
1227
+ if (balanceResult.isInvalidApiKey) {
1228
+ this.storageAdapter.removeApiKey(apiKeyEntry.baseUrl);
1229
+ results.push({
1230
+ baseUrl: apiKeyEntry.baseUrl,
1231
+ success: true
1232
+ });
1233
+ continue;
1234
+ }
1235
+ if (balanceResult.amount >= 0) {
1236
+ const balanceSat = balanceResult.unit === "msat" ? Math.floor(balanceResult.amount / 1e3) : balanceResult.amount;
1237
+ this.storageAdapter.updateApiKeyBalance(
1238
+ apiKeyEntry.baseUrl,
1239
+ balanceSat
1240
+ );
1241
+ }
1242
+ } catch {
1243
+ }
1244
+ const refreshedEntry = this.storageAdapter.getApiKey(
1245
+ apiKeyEntry.baseUrl
1246
+ );
1247
+ if (!refreshedEntry) continue;
1198
1248
  const refundResult = await this.balanceManager.refundApiKey({
1199
1249
  mintUrl,
1200
1250
  baseUrl: apiKeyEntry.baseUrl,
1201
- apiKey: apiKeyEntryFull.key,
1251
+ apiKey: refreshedEntry.key,
1202
1252
  forceRefund
1203
1253
  });
1204
1254
  if (refundResult.success) {
1205
1255
  this.storageAdapter.removeApiKey(apiKeyEntry.baseUrl);
1206
1256
  } else {
1207
- this.storageAdapter.updateApiKeyBalance(
1208
- apiKeyEntry.baseUrl,
1209
- apiKeyEntry.amount
1257
+ const currentEntry = this.storageAdapter.getApiKey(
1258
+ apiKeyEntry.baseUrl
1210
1259
  );
1260
+ if (currentEntry) {
1261
+ this.storageAdapter.updateApiKeyBalance(
1262
+ apiKeyEntry.baseUrl,
1263
+ currentEntry.balance
1264
+ );
1265
+ }
1211
1266
  }
1212
1267
  results.push({
1213
1268
  baseUrl: apiKeyEntry.baseUrl,
@@ -1274,10 +1329,11 @@ var CashuSpender = class {
1274
1329
 
1275
1330
  // wallet/BalanceManager.ts
1276
1331
  var BalanceManager = class _BalanceManager {
1277
- constructor(walletAdapter, storageAdapter, providerRegistry, cashuSpender) {
1332
+ constructor(walletAdapter, storageAdapter, providerRegistry, cashuSpender, logger) {
1278
1333
  this.walletAdapter = walletAdapter;
1279
1334
  this.storageAdapter = storageAdapter;
1280
1335
  this.providerRegistry = providerRegistry;
1336
+ this.logger = (logger ?? consoleLogger).child("BalanceManager");
1281
1337
  if (cashuSpender) {
1282
1338
  this.cashuSpender = cashuSpender;
1283
1339
  } else {
@@ -1294,6 +1350,7 @@ var BalanceManager = class _BalanceManager {
1294
1350
  providerWalletOps = /* @__PURE__ */ new Map();
1295
1351
  /** Cooldown (ms) between opposite operations on the same provider */
1296
1352
  static PROVIDER_WALLET_COOLDOWN_MS = 1e4;
1353
+ logger;
1297
1354
  /**
1298
1355
  * Check whether a wallet operation (topup/refund) may run for a provider.
1299
1356
  * Returns the reason when blocked.
@@ -1368,7 +1425,7 @@ var BalanceManager = class _BalanceManager {
1368
1425
  const { mintUrl, baseUrl, apiKey, forceRefund } = options;
1369
1426
  const guard = this._canRunProviderWalletOperation(baseUrl, "refund");
1370
1427
  if (!guard.allowed) {
1371
- console.log(`[BalanceManager] Skipping refund for ${baseUrl} - ${guard.reason}`);
1428
+ this.logger.log(`Skipping refund for ${baseUrl} - ${guard.reason}`);
1372
1429
  return { success: false, message: guard.reason };
1373
1430
  }
1374
1431
  this._beginProviderWalletOperation(baseUrl, "refund");
@@ -1388,9 +1445,7 @@ var BalanceManager = class _BalanceManager {
1388
1445
  if (apiKeyEntry?.lastUsed) {
1389
1446
  const fiveMinutesAgo = Date.now() - 5 * 60 * 1e3;
1390
1447
  if (apiKeyEntry.lastUsed > fiveMinutesAgo) {
1391
- console.log(
1392
- `[BalanceManager] Skipping refund for ${baseUrl} - used ${Math.round((Date.now() - apiKeyEntry.lastUsed) / 1e3)}s ago`
1393
- );
1448
+ this.logger.log(`Skipping refund for ${baseUrl} - used ${Math.round((Date.now() - apiKeyEntry.lastUsed) / 1e3)}s ago`);
1394
1449
  return {
1395
1450
  success: false,
1396
1451
  message: "API key was used recently, skipping refund"
@@ -1416,7 +1471,8 @@ var BalanceManager = class _BalanceManager {
1416
1471
  };
1417
1472
  }
1418
1473
  if (fetchResult.error === "No balance to refund") {
1419
- return { success: false, message: "No balance to refund" };
1474
+ this.storageAdapter.removeApiKey(baseUrl);
1475
+ return { success: true, message: "No balance to refund, key cleaned up" };
1420
1476
  }
1421
1477
  const receiveResult = await this.cashuSpender.receiveToken(
1422
1478
  fetchResult.token
@@ -1432,7 +1488,7 @@ var BalanceManager = class _BalanceManager {
1432
1488
  requestId: fetchResult.requestId
1433
1489
  };
1434
1490
  } catch (error) {
1435
- console.error("[BalanceManager] API key refund error", error);
1491
+ this.logger.error("API key refund error", error);
1436
1492
  return this._handleRefundError(error, mintUrl, fetchResult?.requestId);
1437
1493
  }
1438
1494
  }
@@ -1484,7 +1540,7 @@ var BalanceManager = class _BalanceManager {
1484
1540
  };
1485
1541
  } catch (error) {
1486
1542
  clearTimeout(timeoutId);
1487
- console.error("[BalanceManager.fetchRefundToken] Fetch error", error);
1543
+ this.logger.error("fetchRefundToken fetch error", error);
1488
1544
  if (error instanceof Error) {
1489
1545
  if (error.name === "AbortError") {
1490
1546
  return {
@@ -1510,7 +1566,7 @@ var BalanceManager = class _BalanceManager {
1510
1566
  const { mintUrl, baseUrl, amount, token: providedToken } = options;
1511
1567
  const guard = this._canRunProviderWalletOperation(baseUrl, "topup");
1512
1568
  if (!guard.allowed) {
1513
- console.log(`[BalanceManager] Skipping topup for ${baseUrl} - ${guard.reason}`);
1569
+ this.logger.log(`Skipping topup for ${baseUrl} - ${guard.reason}`);
1514
1570
  return { success: false, message: guard.reason };
1515
1571
  }
1516
1572
  this._beginProviderWalletOperation(baseUrl, "topup");
@@ -1547,7 +1603,7 @@ var BalanceManager = class _BalanceManager {
1547
1603
  cashuToken = tokenResult.token;
1548
1604
  const topUpResult = await this._postTopUp(baseUrl, apiKey, cashuToken);
1549
1605
  requestId = topUpResult.requestId;
1550
- console.log(topUpResult);
1606
+ this.logger.log("topUpResult:", topUpResult);
1551
1607
  if (!topUpResult.success) {
1552
1608
  await this._recoverFailedTopUp(cashuToken);
1553
1609
  return {
@@ -1563,10 +1619,7 @@ var BalanceManager = class _BalanceManager {
1563
1619
  requestId
1564
1620
  };
1565
1621
  } catch (error) {
1566
- console.log(
1567
- "DEBUG",
1568
- `[TopuPU] topup: Topup result for ${baseUrl}: error=${error}`
1569
- );
1622
+ this.logger.log(`topup error for ${baseUrl}: ${error}`);
1570
1623
  if (cashuToken) {
1571
1624
  await this._recoverFailedTopUp(cashuToken);
1572
1625
  }
@@ -1583,13 +1636,9 @@ var BalanceManager = class _BalanceManager {
1583
1636
  p2pkPubkey
1584
1637
  } = options;
1585
1638
  const adjustedAmount = Math.ceil(amount);
1586
- console.log(
1587
- `[BalanceManager.createProviderToken] Starting: baseUrl=${baseUrl}, mintUrl=${mintUrl}, amount=${amount}, adjustedAmount=${adjustedAmount}, retryCount=${retryCount}`
1588
- );
1639
+ this.logger.log(`createProviderToken: baseUrl=${baseUrl} mintUrl=${mintUrl} amount=${amount} adjustedAmount=${adjustedAmount} retryCount=${retryCount}`);
1589
1640
  if (!adjustedAmount || isNaN(adjustedAmount)) {
1590
- console.error(
1591
- `[BalanceManager.createProviderToken] FAILURE: Invalid amount - amount=${amount}, adjustedAmount=${adjustedAmount}`
1592
- );
1641
+ this.logger.error(`createProviderToken: invalid amount=${amount}`);
1593
1642
  return { success: false, error: "Invalid top up amount" };
1594
1643
  }
1595
1644
  const balanceState = await this.getBalanceState();
@@ -1620,9 +1669,7 @@ var BalanceManager = class _BalanceManager {
1620
1669
  { url: "", balance: 0 }
1621
1670
  ).url
1622
1671
  );
1623
- console.error(
1624
- `[BalanceManager.createProviderToken] FAILURE: Insufficient balance - required=${adjustedAmount}, available=${totalMintBalance + targetProviderBalance}, totalMintBalance=${totalMintBalance}, targetProviderBalance=${targetProviderBalance}, refundableProviderBalance=${refundableProviderBalance}`
1625
- );
1672
+ this.logger.error(`createProviderToken: insufficient balance required=${adjustedAmount} available=${totalMintBalance + targetProviderBalance} totalMint=${totalMintBalance} targetProvider=${targetProviderBalance}`);
1626
1673
  return { success: false, error: error.message };
1627
1674
  }
1628
1675
  const providerMints = baseUrl && this.providerRegistry ? this.providerRegistry.getProviderMints(baseUrl) : [];
@@ -1658,9 +1705,7 @@ var BalanceManager = class _BalanceManager {
1658
1705
  maxMintUrl = mintUrl2;
1659
1706
  }
1660
1707
  }
1661
- console.error(
1662
- `[BalanceManager.createProviderToken] FAILURE: No candidate mints found - requiredAmount=${requiredAmount}, totalMintBalance=${totalMintBalance}, maxBalance=${maxBalance}, maxMintUrl=${maxMintUrl}, providerMints=${JSON.stringify(providerMints)}`
1663
- );
1708
+ this.logger.error(`createProviderToken: no candidate mints required=${requiredAmount} totalMint=${totalMintBalance} maxBalance=${maxBalance} maxMint=${maxMintUrl}`);
1664
1709
  const error = new InsufficientBalanceError(
1665
1710
  adjustedAmount,
1666
1711
  totalMintBalance,
@@ -1672,17 +1717,13 @@ var BalanceManager = class _BalanceManager {
1672
1717
  let lastError;
1673
1718
  for (const candidateMint of candidates) {
1674
1719
  try {
1675
- console.log(
1676
- `[BalanceManager.createProviderToken] Attempting mint: ${candidateMint}, amount: ${requiredAmount}`
1677
- );
1720
+ this.logger.log(`createProviderToken: attempting mint=${candidateMint} amount=${requiredAmount}`);
1678
1721
  const token = await this.walletAdapter.sendToken(
1679
1722
  candidateMint,
1680
1723
  requiredAmount,
1681
1724
  p2pkPubkey
1682
1725
  );
1683
- console.log(
1684
- `[BalanceManager.createProviderToken] SUCCESS: Token created from mint ${candidateMint}, all mint balances: ${JSON.stringify(Object.fromEntries(Object.entries(balances).map(([mint, balance]) => [mint, getBalanceInSats(balance, units[mint])])))}`
1685
- );
1726
+ this.logger.log(`createProviderToken: success from mint=${candidateMint}`);
1686
1727
  return {
1687
1728
  success: true,
1688
1729
  token,
@@ -1691,15 +1732,11 @@ var BalanceManager = class _BalanceManager {
1691
1732
  };
1692
1733
  } catch (error) {
1693
1734
  const errorMsg = error instanceof Error ? error.message : String(error);
1694
- console.error(
1695
- `[BalanceManager.createProviderToken] FAILURE: Mint ${candidateMint} failed with error: ${errorMsg}`
1696
- );
1735
+ this.logger.error(`createProviderToken: mint=${candidateMint} failed: ${errorMsg}`);
1697
1736
  if (error instanceof Error) {
1698
1737
  lastError = errorMsg;
1699
1738
  if (isNetworkErrorMessage(error.message)) {
1700
- console.warn(
1701
- `[BalanceManager.createProviderToken] Network error from ${candidateMint}, trying next mint...`
1702
- );
1739
+ this.logger.warn(`createProviderToken: network error from ${candidateMint}, trying next mint...`);
1703
1740
  continue;
1704
1741
  }
1705
1742
  }
@@ -1709,9 +1746,7 @@ var BalanceManager = class _BalanceManager {
1709
1746
  };
1710
1747
  }
1711
1748
  }
1712
- console.error(
1713
- `[BalanceManager.createProviderToken] FAILURE: All candidate mints exhausted - lastError=${lastError}, candidates=${JSON.stringify(candidates)}`
1714
- );
1749
+ this.logger.error(`createProviderToken: all candidate mints exhausted lastError=${lastError}`);
1715
1750
  return {
1716
1751
  success: false,
1717
1752
  error: lastError || "All candidate mints failed while creating top up token"
@@ -1826,7 +1861,7 @@ var BalanceManager = class _BalanceManager {
1826
1861
  return { success: true, requestId };
1827
1862
  } catch (error) {
1828
1863
  clearTimeout(timeoutId);
1829
- console.error("[BalanceManager._postTopUp] Fetch error", error);
1864
+ this.logger.error("_postTopUp fetch error", error);
1830
1865
  if (error instanceof Error) {
1831
1866
  if (error.name === "AbortError") {
1832
1867
  return {
@@ -1852,10 +1887,7 @@ var BalanceManager = class _BalanceManager {
1852
1887
  try {
1853
1888
  await this.cashuSpender.receiveToken(cashuToken);
1854
1889
  } catch (error) {
1855
- console.error(
1856
- "[BalanceManager._recoverFailedTopUp] Failed to recover token",
1857
- error
1858
- );
1890
+ this.logger.error("_recoverFailedTopUp: failed to recover token", error);
1859
1891
  }
1860
1892
  }
1861
1893
  /**
@@ -1908,9 +1940,9 @@ var BalanceManager = class _BalanceManager {
1908
1940
  apiKey: data.api_key
1909
1941
  };
1910
1942
  } else {
1911
- console.log(response.status);
1943
+ this.logger.warn(`getTokenBalance: status=${response.status}`);
1912
1944
  const data = await response.json();
1913
- console.log("FAILED ", data);
1945
+ this.logger.warn("getTokenBalance: FAILED", data);
1914
1946
  const isInvalidApiKey = response.status === 401 && data?.detail?.error?.code === "invalid_api_key" && data?.detail?.error?.message?.includes("proofs already spent");
1915
1947
  return {
1916
1948
  amount: -1,
@@ -1921,7 +1953,7 @@ var BalanceManager = class _BalanceManager {
1921
1953
  };
1922
1954
  }
1923
1955
  } catch (error) {
1924
- console.error("ERRORR IN RESTPONSE", error);
1956
+ this.logger.error("getTokenBalance error", error);
1925
1957
  }
1926
1958
  return { amount: -1, reserved: 0, unit: "sat", apiKey: "" };
1927
1959
  }
@@ -2443,9 +2475,10 @@ function isInsecureHttpUrl(url) {
2443
2475
  return url.startsWith("http://");
2444
2476
  }
2445
2477
  var ProviderManager = class _ProviderManager {
2446
- constructor(providerRegistry, store) {
2478
+ constructor(providerRegistry, store, logger) {
2447
2479
  this.providerRegistry = providerRegistry;
2448
2480
  this.instanceId = `pm_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
2481
+ this.logger = (logger ?? consoleLogger).child(`ProviderManager:${this.instanceId}`);
2449
2482
  if (store) {
2450
2483
  this.store = store;
2451
2484
  this.hydrateFromStore();
@@ -2462,6 +2495,7 @@ var ProviderManager = class _ProviderManager {
2462
2495
  store = null;
2463
2496
  /** Instance ID for debugging */
2464
2497
  instanceId;
2498
+ logger;
2465
2499
  /**
2466
2500
  * Hydrate in-memory state from persistent store
2467
2501
  */
@@ -2474,10 +2508,7 @@ var ProviderManager = class _ProviderManager {
2474
2508
  this.providersOnCoolDown = state.providersOnCooldown.filter(
2475
2509
  (entry) => now - entry.timestamp < _ProviderManager.COOLDOWN_DURATION_MS
2476
2510
  ).map((entry) => [entry.baseUrl, entry.timestamp]);
2477
- console.log(`[ProviderManager:${this.instanceId}] Hydrated from store:`);
2478
- console.log(` failedProviders: ${this.failedProviders.size}`);
2479
- console.log(` lastFailed: ${this.lastFailed.size}`);
2480
- console.log(` providersOnCooldown: ${this.providersOnCoolDown.length}`);
2511
+ this.logger.log(`Hydrated from store: failedProviders=${this.failedProviders.size} lastFailed=${this.lastFailed.size} providersOnCooldown=${this.providersOnCoolDown.length}`);
2481
2512
  }
2482
2513
  /**
2483
2514
  * Get instance ID for debugging
@@ -2497,9 +2528,7 @@ var ProviderManager = class _ProviderManager {
2497
2528
  const age = now - timestamp;
2498
2529
  const isExpired = age >= _ProviderManager.COOLDOWN_DURATION_MS;
2499
2530
  if (isExpired) {
2500
- console.log(
2501
- `[cleanupExpiredCooldowns:${this.instanceId}] Removing expired cooldown for ${url} (age: ${age}ms, cooldown: ${_ProviderManager.COOLDOWN_DURATION_MS}ms)`
2502
- );
2531
+ this.logger.log(`Removing expired cooldown for ${url} (age: ${age}ms)`);
2503
2532
  this.failedProviders.delete(url);
2504
2533
  if (this.store) {
2505
2534
  this.store.getState().removeFailedProvider(url);
@@ -2510,9 +2539,7 @@ var ProviderManager = class _ProviderManager {
2510
2539
  );
2511
2540
  const after = this.providersOnCoolDown.length;
2512
2541
  if (before !== after) {
2513
- console.log(
2514
- `[cleanupExpiredCooldowns:${this.instanceId}] Cleaned up ${before - after} expired cooldown(s), ${after} remaining`
2515
- );
2542
+ this.logger.log(`Cleaned up ${before - after} expired cooldown(s), ${after} remaining`);
2516
2543
  }
2517
2544
  }
2518
2545
  /**
@@ -2564,24 +2591,10 @@ var ProviderManager = class _ProviderManager {
2564
2591
  markFailed(baseUrl) {
2565
2592
  const now = Date.now();
2566
2593
  const lastFailure = this.lastFailed.get(baseUrl);
2567
- console.log(`[markFailed:${this.instanceId}] baseUrl: ${baseUrl}`);
2568
- console.log(
2569
- `[markFailed:${this.instanceId}] lastFailure from map: ${lastFailure}`
2570
- );
2571
- console.log(
2572
- `[markFailed:${this.instanceId}] current timestamp (now): ${now}`
2573
- );
2574
- console.log(
2575
- `[markFailed:${this.instanceId}] COOLDOWN_DURATION_MS: ${_ProviderManager.COOLDOWN_DURATION_MS}`
2576
- );
2594
+ this.logger.log(`markFailed: ${baseUrl} lastFailure=${lastFailure} now=${now}`);
2577
2595
  if (lastFailure !== void 0) {
2578
2596
  const timeSinceLastFailure = now - lastFailure;
2579
- console.log(
2580
- `[markFailed:${this.instanceId}] timeSinceLastFailure: ${timeSinceLastFailure}ms`
2581
- );
2582
- console.log(
2583
- `[markFailed:${this.instanceId}] isWithinCooldownWindow: ${timeSinceLastFailure < _ProviderManager.COOLDOWN_DURATION_MS}`
2584
- );
2597
+ this.logger.log(`markFailed: timeSinceLastFailure=${timeSinceLastFailure}ms withinCooldown=${timeSinceLastFailure < _ProviderManager.COOLDOWN_DURATION_MS}`);
2585
2598
  }
2586
2599
  this.lastFailed.set(baseUrl, now);
2587
2600
  this.failedProviders.add(baseUrl);
@@ -2589,38 +2602,23 @@ var ProviderManager = class _ProviderManager {
2589
2602
  this.store.getState().setLastFailedTimestamp(baseUrl, now);
2590
2603
  this.store.getState().addFailedProvider(baseUrl);
2591
2604
  }
2592
- console.log(
2593
- `[markFailed:${this.instanceId}] Updated lastFailed map for ${baseUrl} to ${now}`
2594
- );
2595
- console.log(
2596
- `[markFailed:${this.instanceId}] failedProviders set size: ${this.failedProviders.size}`
2597
- );
2605
+ this.logger.log(`markFailed: updated ${baseUrl} to ${now}, failedProviders=${this.failedProviders.size}`);
2598
2606
  if (lastFailure !== void 0 && now - lastFailure < _ProviderManager.COOLDOWN_DURATION_MS) {
2599
- console.log(
2600
- `[markFailed:${this.instanceId}] Second failure detected within cooldown window for ${baseUrl}`
2601
- );
2607
+ this.logger.log(`markFailed: second failure within cooldown window for ${baseUrl}`);
2602
2608
  if (!this.isOnCooldown(baseUrl)) {
2603
2609
  this.providersOnCoolDown.push([baseUrl, now]);
2604
2610
  if (this.store) {
2605
2611
  this.store.getState().addProviderOnCooldown(baseUrl, now);
2606
2612
  }
2607
- console.log(
2608
- `[markFailed:${this.instanceId}] Provider ${baseUrl} added to cooldown after second failure within 5 minutes`
2609
- );
2613
+ this.logger.log(`markFailed: ${baseUrl} added to cooldown`);
2610
2614
  } else {
2611
- console.log(
2612
- `[markFailed:${this.instanceId}] Provider ${baseUrl} is already on cooldown`
2613
- );
2615
+ this.logger.log(`markFailed: ${baseUrl} already on cooldown`);
2614
2616
  }
2615
2617
  } else {
2616
2618
  if (lastFailure === void 0) {
2617
- console.log(
2618
- `[markFailed:${this.instanceId}] First failure for ${baseUrl} - not adding to cooldown yet`
2619
- );
2619
+ this.logger.log(`markFailed: first failure for ${baseUrl}`);
2620
2620
  } else {
2621
- console.log(
2622
- `[markFailed:${this.instanceId}] Failure outside cooldown window for ${baseUrl} (timeSinceLastFailure: ${now - lastFailure}ms)`
2623
- );
2621
+ this.logger.log(`markFailed: failure outside cooldown window for ${baseUrl} (${now - lastFailure}ms ago)`);
2624
2622
  }
2625
2623
  }
2626
2624
  }
@@ -2677,25 +2675,12 @@ var ProviderManager = class _ProviderManager {
2677
2675
  const disabledProviders = new Set(
2678
2676
  this.providerRegistry.getDisabledProviders()
2679
2677
  );
2680
- console.log(
2681
- `[findNextBestProvider:${this.instanceId}] Starting search for model: ${modelId}`
2682
- );
2683
- console.log(
2684
- `[findNextBestProvider:${this.instanceId}] disabledProviders: ${[...disabledProviders]}`
2685
- );
2686
- console.log(
2687
- `[findNextBestProvider:${this.instanceId}] providersOnCooldown: ${this.providersOnCoolDown.map(([url]) => url)}`
2688
- );
2678
+ this.logger.log(`findNextBestProvider: model=${modelId} disabled=${[...disabledProviders].length} onCooldown=${this.providersOnCoolDown.length}`);
2689
2679
  const allProviders = this.providerRegistry.getAllProvidersModels();
2690
- console.log(
2691
- `[findNextBestProvider:${this.instanceId}] Total providers in registry: ${Object.keys(allProviders).length}`
2692
- );
2680
+ this.logger.log(`findNextBestProvider: total providers=${Object.keys(allProviders).length}`);
2693
2681
  const candidates = [];
2694
2682
  for (const [baseUrl, models] of Object.entries(allProviders)) {
2695
2683
  if (baseUrl === currentBaseUrl) {
2696
- console.log(
2697
- `[findNextBestProvider:${this.instanceId}] SKIP (current): ${baseUrl}`
2698
- );
2699
2684
  continue;
2700
2685
  }
2701
2686
  if (disabledProviders.has(baseUrl)) {
@@ -2721,7 +2706,7 @@ var ProviderManager = class _ProviderManager {
2721
2706
  return null;
2722
2707
  }
2723
2708
  } catch (error) {
2724
- console.error("Error finding next best provider:", error);
2709
+ this.logger.error("findNextBestProvider error:", error);
2725
2710
  return null;
2726
2711
  }
2727
2712
  }
@@ -2848,16 +2833,9 @@ var ProviderManager = class _ProviderManager {
2848
2833
  res.height
2849
2834
  );
2850
2835
  imageTokens += tokensFromImage;
2851
- console.log("IMAGE INPUT RESOLUTION", {
2852
- width: res.width,
2853
- height: res.height,
2854
- tokensFromImage
2855
- });
2836
+ this.logger.log(`IMAGE INPUT RESOLUTION width=${res.width} height=${res.height} tokens=${tokensFromImage}`);
2856
2837
  } else {
2857
- console.log(
2858
- "IMAGE INPUT RESOLUTION",
2859
- "unknown (unsupported format or parse failure)"
2860
- );
2838
+ this.logger.log("IMAGE INPUT RESOLUTION: unknown format");
2861
2839
  }
2862
2840
  }
2863
2841
  }
@@ -2890,7 +2868,7 @@ var ProviderManager = class _ProviderManager {
2890
2868
  const totalEstimatedCosts = (promptCosts + completionCost) * 1.05;
2891
2869
  return totalEstimatedCosts;
2892
2870
  } catch (e) {
2893
- console.error(e);
2871
+ this.logger.error("getRequiredSatsForModel error:", e);
2894
2872
  return 0;
2895
2873
  }
2896
2874
  }
@@ -3089,7 +3067,8 @@ var createSqliteDriver = (options = {}) => {
3089
3067
  }
3090
3068
  };
3091
3069
  };
3092
- async function createBunSqliteDriver(dbPath) {
3070
+ async function createBunSqliteDriver(dbPath, options) {
3071
+ const logger = (options?.logger ?? consoleLogger).child("BunSqliteDriver");
3093
3072
  const SQLite = (await import(
3094
3073
  /* webpackIgnore: true */
3095
3074
  'bun:sqlite'
@@ -3115,7 +3094,7 @@ async function createBunSqliteDriver(dbPath) {
3115
3094
  throw parseError;
3116
3095
  }
3117
3096
  } catch (error) {
3118
- console.error(`SQLite getItem failed for key "${key}":`, error);
3097
+ logger.error(`getItem failed for key "${key}":`, error);
3119
3098
  return defaultValue;
3120
3099
  }
3121
3100
  },
@@ -3125,14 +3104,14 @@ async function createBunSqliteDriver(dbPath) {
3125
3104
  "INSERT INTO sdk_storage (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value"
3126
3105
  ).run(key, JSON.stringify(value));
3127
3106
  } catch (error) {
3128
- console.error(`SQLite setItem failed for key "${key}":`, error);
3107
+ logger.error(`setItem failed for key "${key}":`, error);
3129
3108
  }
3130
3109
  },
3131
3110
  async removeItem(key) {
3132
3111
  try {
3133
3112
  db.query("DELETE FROM sdk_storage WHERE key = ?").run(key);
3134
3113
  } catch (error) {
3135
- console.error(`SQLite removeItem failed for key "${key}":`, error);
3114
+ logger.error(`removeItem failed for key "${key}":`, error);
3136
3115
  }
3137
3116
  }
3138
3117
  };
@@ -4306,9 +4285,7 @@ var createStorageAdapterFromStore = (store) => ({
4306
4285
  const distributionMap = {};
4307
4286
  for (const entry of apiKeys) {
4308
4287
  const sum = entry.balance || 0;
4309
- if (sum > 0) {
4310
- distributionMap[entry.baseUrl] = (distributionMap[entry.baseUrl] || 0) + sum;
4311
- }
4288
+ distributionMap[entry.baseUrl] = (distributionMap[entry.baseUrl] || 0) + sum;
4312
4289
  }
4313
4290
  return Object.entries(distributionMap).map(([baseUrl, amt]) => ({ baseUrl, amount: amt })).sort((a, b) => b.amount - a.amount);
4314
4291
  },
@@ -4483,37 +4460,40 @@ var createStorageAdapterFromStore = (store) => ({
4483
4460
  store.getState().updateXcashuTokenTryCount(token, tryCount);
4484
4461
  }
4485
4462
  });
4486
- var createProviderRegistryFromStore = (store) => ({
4487
- getModelsForProvider: (baseUrl) => {
4488
- const normalized = normalizeBaseUrl5(baseUrl);
4489
- return store.getState().modelsFromAllProviders[normalized] || [];
4490
- },
4491
- getDisabledProviders: () => store.getState().disabledProviders,
4492
- getProviderMints: (baseUrl) => {
4493
- const normalized = normalizeBaseUrl5(baseUrl);
4494
- return store.getState().mintsFromAllProviders[normalized] || [];
4495
- },
4496
- getProviderInfo: async (baseUrl) => {
4497
- const normalized = normalizeBaseUrl5(baseUrl);
4498
- const cached = store.getState().infoFromAllProviders[normalized];
4499
- if (cached) return cached;
4500
- try {
4501
- const response = await fetch(`${normalized}v1/info`);
4502
- if (!response.ok) {
4503
- throw new Error(`Failed ${response.status}`);
4463
+ var createProviderRegistryFromStore = (store, logger) => {
4464
+ const log = (logger ?? consoleLogger).child("ProviderRegistry");
4465
+ return {
4466
+ getModelsForProvider: (baseUrl) => {
4467
+ const normalized = normalizeBaseUrl5(baseUrl);
4468
+ return store.getState().modelsFromAllProviders[normalized] || [];
4469
+ },
4470
+ getDisabledProviders: () => store.getState().disabledProviders,
4471
+ getProviderMints: (baseUrl) => {
4472
+ const normalized = normalizeBaseUrl5(baseUrl);
4473
+ return store.getState().mintsFromAllProviders[normalized] || [];
4474
+ },
4475
+ getProviderInfo: async (baseUrl) => {
4476
+ const normalized = normalizeBaseUrl5(baseUrl);
4477
+ const cached = store.getState().infoFromAllProviders[normalized];
4478
+ if (cached) return cached;
4479
+ try {
4480
+ const response = await fetch(`${normalized}v1/info`);
4481
+ if (!response.ok) {
4482
+ throw new Error(`Failed ${response.status}`);
4483
+ }
4484
+ const info = await response.json();
4485
+ const next = { ...store.getState().infoFromAllProviders };
4486
+ next[normalized] = info;
4487
+ store.getState().setInfoFromAllProviders(next);
4488
+ return info;
4489
+ } catch (error) {
4490
+ log.warn(`Failed to fetch provider info from ${normalized}:`, error);
4491
+ return null;
4504
4492
  }
4505
- const info = await response.json();
4506
- const next = { ...store.getState().infoFromAllProviders };
4507
- next[normalized] = info;
4508
- store.getState().setInfoFromAllProviders(next);
4509
- return info;
4510
- } catch (error) {
4511
- console.warn(`Failed to fetch provider info from ${normalized}:`, error);
4512
- return null;
4513
- }
4514
- },
4515
- getAllProvidersModels: () => store.getState().modelsFromAllProviders
4516
- });
4493
+ },
4494
+ getAllProvidersModels: () => store.getState().modelsFromAllProviders
4495
+ };
4496
+ };
4517
4497
 
4518
4498
  // storage/index.ts
4519
4499
  var isBrowser3 = () => {
@@ -4784,6 +4764,7 @@ var RoutstrClient = class {
4784
4764
  this.walletAdapter = walletAdapter;
4785
4765
  this.storageAdapter = storageAdapter;
4786
4766
  this.providerRegistry = providerRegistry;
4767
+ this.logger = (options.logger ?? consoleLogger).child("RoutstrClient");
4787
4768
  this.balanceManager = new BalanceManager(
4788
4769
  walletAdapter,
4789
4770
  storageAdapter,
@@ -4800,7 +4781,7 @@ var RoutstrClient = class {
4800
4781
  this.mode = mode;
4801
4782
  this.usageTrackingDriver = options.usageTrackingDriver;
4802
4783
  this.sdkStore = options.sdkStore;
4803
- this.providerManager = options.providerManager ?? new ProviderManager(providerRegistry, this.sdkStore);
4784
+ this.providerManager = options.providerManager ?? new ProviderManager(providerRegistry, this.sdkStore, this.logger);
4804
4785
  }
4805
4786
  cashuSpender;
4806
4787
  balanceManager;
@@ -4811,6 +4792,7 @@ var RoutstrClient = class {
4811
4792
  debugLevel = "WARN";
4812
4793
  usageTrackingDriver;
4813
4794
  sdkStore;
4795
+ logger;
4814
4796
  /**
4815
4797
  * Get the current client mode
4816
4798
  */
@@ -4832,13 +4814,13 @@ var RoutstrClient = class {
4832
4814
  if (levelPriority[level] >= levelPriority[this.debugLevel]) {
4833
4815
  switch (level) {
4834
4816
  case "DEBUG":
4835
- console.log(...args);
4817
+ this.logger.log(...args);
4836
4818
  break;
4837
4819
  case "WARN":
4838
- console.warn(...args);
4820
+ this.logger.warn(...args);
4839
4821
  break;
4840
4822
  case "ERROR":
4841
- console.error(...args);
4823
+ this.logger.error(...args);
4842
4824
  break;
4843
4825
  }
4844
4826
  }
@@ -5442,7 +5424,7 @@ var RoutstrClient = class {
5442
5424
  tryNextProvider = true;
5443
5425
  }
5444
5426
  }
5445
- if ((status === 401 || status === 403 || status === 413 || status === 400 || status === 429 || status === 500 || status === 502 || status === 503 || status === 504 || status === 521) && !tryNextProvider) {
5427
+ if ((status === 401 || status === 403 || status === 404 || status === 413 || status === 400 || status === 429 || status === 500 || status === 502 || status === 503 || status === 504 || status === 521) && !tryNextProvider) {
5446
5428
  this._log(
5447
5429
  "DEBUG",
5448
5430
  `[RoutstrClient] _handleErrorResponse: Status ${status} (${status === 429 ? "rate limited" : "auth/server error"}), attempting refund for ${baseUrl}, mode=${this.mode}`
@@ -5946,7 +5928,8 @@ async function resolveRouteRequestContext(options) {
5946
5928
  mode = "apikeys",
5947
5929
  usageTrackingDriver,
5948
5930
  sdkStore,
5949
- providerManager: providedProviderManager
5931
+ providerManager: providedProviderManager,
5932
+ logger
5950
5933
  } = options;
5951
5934
  let modelManager;
5952
5935
  let providers;
@@ -5958,7 +5941,8 @@ async function resolveRouteRequestContext(options) {
5958
5941
  }
5959
5942
  } else {
5960
5943
  modelManager = new ModelManager(discoveryAdapter, {
5961
- includeProviderUrls: forcedProvider ? [forcedProvider, ...includeProviderUrls] : includeProviderUrls
5944
+ includeProviderUrls: forcedProvider ? [forcedProvider, ...includeProviderUrls] : includeProviderUrls,
5945
+ logger
5962
5946
  });
5963
5947
  providers = await modelManager.bootstrapProviders(torMode);
5964
5948
  if (providers.length === 0) {
@@ -5966,7 +5950,7 @@ async function resolveRouteRequestContext(options) {
5966
5950
  }
5967
5951
  await modelManager.fetchModels(providers, forceRefresh);
5968
5952
  }
5969
- const providerManager = providedProviderManager ?? new ProviderManager(providerRegistry, sdkStore);
5953
+ const providerManager = providedProviderManager ?? new ProviderManager(providerRegistry, sdkStore, logger);
5970
5954
  let baseUrl;
5971
5955
  let selectedModel;
5972
5956
  if (forcedProvider) {
@@ -6011,7 +5995,7 @@ async function resolveRouteRequestContext(options) {
6011
5995
  providerRegistry,
6012
5996
  "min",
6013
5997
  mode,
6014
- { usageTrackingDriver, sdkStore, providerManager }
5998
+ { usageTrackingDriver, sdkStore, providerManager, logger }
6015
5999
  );
6016
6000
  if (debugLevel) {
6017
6001
  client.setDebugLevel(debugLevel);
@@ -6076,6 +6060,6 @@ function extractStream(requestBody) {
6076
6060
  return typeof stream === "boolean" ? stream : void 0;
6077
6061
  }
6078
6062
 
6079
- export { BalanceManager, CashuSpender, FailoverError, InsufficientBalanceError, MintDiscovery, MintDiscoveryError, MintUnreachableError, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, ProviderError, ProviderManager, RoutstrClient, SDK_STORAGE_KEYS, StreamProcessor, StreamingError, TokenOperationError, createBunSqliteDriver, createBunSqliteUsageTrackingDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromStore, createSSEParserTransform, createSdkStore, createSqliteDriver, createSqliteUsageTrackingDriver, createStorageAdapterFromStore, filterBaseUrlsForTor, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, getProviderEndpoints, inspectSSEWebStream, isOnionUrl, isTorContext, localStorageDriver, normalizeProviderUrl, routeRequests, setDefaultUsageTrackingDriver };
6063
+ export { BalanceManager, CashuSpender, FailoverError, InsufficientBalanceError, MintDiscovery, MintDiscoveryError, MintUnreachableError, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, ProviderError, ProviderManager, RoutstrClient, SDK_STORAGE_KEYS, StreamProcessor, StreamingError, TokenOperationError, consoleLogger, createBunSqliteDriver, createBunSqliteUsageTrackingDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromStore, createSSEParserTransform, createSdkStore, createSqliteDriver, createSqliteUsageTrackingDriver, createStorageAdapterFromStore, filterBaseUrlsForTor, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, getProviderEndpoints, inspectSSEWebStream, isOnionUrl, isTorContext, localStorageDriver, noopLogger, normalizeProviderUrl, routeRequests, setDefaultUsageTrackingDriver };
6080
6064
  //# sourceMappingURL=index.mjs.map
6081
6065
  //# sourceMappingURL=index.mjs.map