@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.
@@ -185,7 +185,11 @@ var createSqliteDriver = (options = {}) => {
185
185
  };
186
186
 
187
187
  // storage/drivers/indexedDB.ts
188
+ var isBrowser = typeof indexedDB !== "undefined";
188
189
  var openDatabase = (dbName, storeName) => {
190
+ if (!isBrowser) {
191
+ return Promise.reject(new Error("IndexedDB is not available"));
192
+ }
189
193
  return new Promise((resolve, reject) => {
190
194
  const request = indexedDB.open(dbName, 1);
191
195
  request.onupgradeneeded = () => {
@@ -290,7 +294,8 @@ var SDK_STORAGE_KEYS = {
290
294
  ROUTSTR21_MODELS: "routstr21Models",
291
295
  LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
292
296
  CACHED_RECEIVE_TOKENS: "cached_receive_tokens",
293
- USAGE_TRACKING: "usage_tracking"
297
+ USAGE_TRACKING: "usage_tracking",
298
+ CLIENT_IDS: "client_ids"
294
299
  };
295
300
 
296
301
  // storage/store.ts
@@ -308,9 +313,158 @@ var getCashuTokenBalance = (token) => {
308
313
  return 0;
309
314
  }
310
315
  };
311
- var createSdkStore = async ({
312
- driver
313
- }) => {
316
+ var createEmptyStore = (driver) => createStore((set, get) => ({
317
+ modelsFromAllProviders: {},
318
+ lastUsedModel: null,
319
+ baseUrlsList: [],
320
+ lastBaseUrlsUpdate: null,
321
+ disabledProviders: [],
322
+ mintsFromAllProviders: {},
323
+ infoFromAllProviders: {},
324
+ lastModelsUpdate: {},
325
+ cachedTokens: [],
326
+ apiKeys: [],
327
+ childKeys: [],
328
+ routstr21Models: [],
329
+ lastRoutstr21ModelsUpdate: null,
330
+ cachedReceiveTokens: [],
331
+ usageTracking: [],
332
+ clientIds: [],
333
+ setModelsFromAllProviders: (value) => {
334
+ const normalized = {};
335
+ for (const [baseUrl, models] of Object.entries(value)) {
336
+ normalized[normalizeBaseUrl(baseUrl)] = models;
337
+ }
338
+ void driver.setItem(
339
+ SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
340
+ normalized
341
+ );
342
+ set({ modelsFromAllProviders: normalized });
343
+ },
344
+ setLastUsedModel: (value) => {
345
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
346
+ set({ lastUsedModel: value });
347
+ },
348
+ setBaseUrlsList: (value) => {
349
+ const normalized = value.map((url) => normalizeBaseUrl(url));
350
+ void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
351
+ set({ baseUrlsList: normalized });
352
+ },
353
+ setBaseUrlsLastUpdate: (value) => {
354
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
355
+ set({ lastBaseUrlsUpdate: value });
356
+ },
357
+ setDisabledProviders: (value) => {
358
+ const normalized = value.map((url) => normalizeBaseUrl(url));
359
+ void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
360
+ set({ disabledProviders: normalized });
361
+ },
362
+ setMintsFromAllProviders: (value) => {
363
+ const normalized = {};
364
+ for (const [baseUrl, mints] of Object.entries(value)) {
365
+ normalized[normalizeBaseUrl(baseUrl)] = mints.map(
366
+ (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
367
+ );
368
+ }
369
+ void driver.setItem(
370
+ SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
371
+ normalized
372
+ );
373
+ set({ mintsFromAllProviders: normalized });
374
+ },
375
+ setInfoFromAllProviders: (value) => {
376
+ const normalized = {};
377
+ for (const [baseUrl, info] of Object.entries(value)) {
378
+ normalized[normalizeBaseUrl(baseUrl)] = info;
379
+ }
380
+ void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
381
+ set({ infoFromAllProviders: normalized });
382
+ },
383
+ setLastModelsUpdate: (value) => {
384
+ const normalized = {};
385
+ for (const [baseUrl, timestamp] of Object.entries(value)) {
386
+ normalized[normalizeBaseUrl(baseUrl)] = timestamp;
387
+ }
388
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
389
+ set({ lastModelsUpdate: normalized });
390
+ },
391
+ setCachedTokens: (value) => {
392
+ set((state) => {
393
+ const updates = typeof value === "function" ? value(state.cachedTokens) : value;
394
+ const normalized = updates.map((entry) => ({
395
+ ...entry,
396
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
397
+ balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
398
+ lastUsed: entry.lastUsed ?? null
399
+ }));
400
+ void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
401
+ return { cachedTokens: normalized };
402
+ });
403
+ },
404
+ setApiKeys: (value) => {
405
+ set((state) => {
406
+ const updates = typeof value === "function" ? value(state.apiKeys) : value;
407
+ const normalized = updates.map((entry) => ({
408
+ ...entry,
409
+ baseUrl: normalizeBaseUrl(entry.baseUrl),
410
+ balance: entry.balance ?? 0,
411
+ lastUsed: entry.lastUsed ?? null
412
+ }));
413
+ void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
414
+ return { apiKeys: normalized };
415
+ });
416
+ },
417
+ setChildKeys: (value) => {
418
+ set((state) => {
419
+ const updates = typeof value === "function" ? value(state.childKeys) : value;
420
+ const normalized = updates.map((entry) => ({
421
+ parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
422
+ childKey: entry.childKey,
423
+ balance: entry.balance ?? 0,
424
+ balanceLimit: entry.balanceLimit,
425
+ validityDate: entry.validityDate,
426
+ createdAt: entry.createdAt ?? Date.now()
427
+ }));
428
+ void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
429
+ return { childKeys: normalized };
430
+ });
431
+ },
432
+ setRoutstr21Models: (value) => {
433
+ void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
434
+ set({ routstr21Models: value });
435
+ },
436
+ setRoutstr21ModelsLastUpdate: (value) => {
437
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
438
+ set({ lastRoutstr21ModelsUpdate: value });
439
+ },
440
+ setCachedReceiveTokens: (value) => {
441
+ const normalized = value.map((entry) => ({
442
+ token: entry.token,
443
+ amount: entry.amount,
444
+ unit: entry.unit || "sat",
445
+ createdAt: entry.createdAt ?? Date.now()
446
+ }));
447
+ void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
448
+ set({ cachedReceiveTokens: normalized });
449
+ },
450
+ setUsageTracking: (value) => {
451
+ void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
452
+ set({ usageTracking: value });
453
+ },
454
+ setClientIds: (value) => {
455
+ set((state) => {
456
+ const updates = typeof value === "function" ? value(state.clientIds) : value;
457
+ const normalized = updates.map((entry) => ({
458
+ ...entry,
459
+ createdAt: entry.createdAt ?? Date.now(),
460
+ lastUsed: entry.lastUsed ?? null
461
+ }));
462
+ void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
463
+ return { clientIds: normalized };
464
+ });
465
+ }
466
+ }));
467
+ var hydrateStoreFromDriver = async (store, driver) => {
314
468
  const [
315
469
  rawModels,
316
470
  lastUsedModel,
@@ -326,7 +480,8 @@ var createSdkStore = async ({
326
480
  rawRoutstr21Models,
327
481
  rawLastRoutstr21ModelsUpdate,
328
482
  rawCachedReceiveTokens,
329
- rawUsageTracking
483
+ rawUsageTracking,
484
+ rawClientIds
330
485
  ] = await Promise.all([
331
486
  driver.getItem(
332
487
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -357,7 +512,8 @@ var createSdkStore = async ({
357
512
  null
358
513
  ),
359
514
  driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
360
- driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, [])
515
+ driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, []),
516
+ driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
361
517
  ]);
362
518
  const modelsFromAllProviders = Object.fromEntries(
363
519
  Object.entries(rawModels).map(([baseUrl, models]) => [
@@ -416,7 +572,12 @@ var createSdkStore = async ({
416
572
  createdAt: entry.createdAt ?? Date.now()
417
573
  }));
418
574
  const usageTracking = rawUsageTracking;
419
- return createStore((set, get) => ({
575
+ const clientIds = rawClientIds.map((entry) => ({
576
+ ...entry,
577
+ createdAt: entry.createdAt ?? Date.now(),
578
+ lastUsed: entry.lastUsed ?? null
579
+ }));
580
+ store.setState({
420
581
  modelsFromAllProviders,
421
582
  lastUsedModel,
422
583
  baseUrlsList,
@@ -432,128 +593,17 @@ var createSdkStore = async ({
432
593
  lastRoutstr21ModelsUpdate,
433
594
  cachedReceiveTokens,
434
595
  usageTracking,
435
- setModelsFromAllProviders: (value) => {
436
- const normalized = {};
437
- for (const [baseUrl, models] of Object.entries(value)) {
438
- normalized[normalizeBaseUrl(baseUrl)] = models;
439
- }
440
- void driver.setItem(
441
- SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
442
- normalized
443
- );
444
- set({ modelsFromAllProviders: normalized });
445
- },
446
- setLastUsedModel: (value) => {
447
- void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
448
- set({ lastUsedModel: value });
449
- },
450
- setBaseUrlsList: (value) => {
451
- const normalized = value.map((url) => normalizeBaseUrl(url));
452
- void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
453
- set({ baseUrlsList: normalized });
454
- },
455
- setBaseUrlsLastUpdate: (value) => {
456
- void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
457
- set({ lastBaseUrlsUpdate: value });
458
- },
459
- setDisabledProviders: (value) => {
460
- const normalized = value.map((url) => normalizeBaseUrl(url));
461
- void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
462
- set({ disabledProviders: normalized });
463
- },
464
- setMintsFromAllProviders: (value) => {
465
- const normalized = {};
466
- for (const [baseUrl, mints] of Object.entries(value)) {
467
- normalized[normalizeBaseUrl(baseUrl)] = mints.map(
468
- (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
469
- );
470
- }
471
- void driver.setItem(
472
- SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
473
- normalized
474
- );
475
- set({ mintsFromAllProviders: normalized });
476
- },
477
- setInfoFromAllProviders: (value) => {
478
- const normalized = {};
479
- for (const [baseUrl, info] of Object.entries(value)) {
480
- normalized[normalizeBaseUrl(baseUrl)] = info;
481
- }
482
- void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
483
- set({ infoFromAllProviders: normalized });
484
- },
485
- setLastModelsUpdate: (value) => {
486
- const normalized = {};
487
- for (const [baseUrl, timestamp] of Object.entries(value)) {
488
- normalized[normalizeBaseUrl(baseUrl)] = timestamp;
489
- }
490
- void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
491
- set({ lastModelsUpdate: normalized });
492
- },
493
- setCachedTokens: (value) => {
494
- set((state) => {
495
- const updates = typeof value === "function" ? value(state.cachedTokens) : value;
496
- const normalized = updates.map((entry) => ({
497
- ...entry,
498
- baseUrl: normalizeBaseUrl(entry.baseUrl),
499
- balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
500
- lastUsed: entry.lastUsed ?? null
501
- }));
502
- void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
503
- return { cachedTokens: normalized };
504
- });
505
- },
506
- setApiKeys: (value) => {
507
- set((state) => {
508
- const updates = typeof value === "function" ? value(state.apiKeys) : value;
509
- const normalized = updates.map((entry) => ({
510
- ...entry,
511
- baseUrl: normalizeBaseUrl(entry.baseUrl),
512
- balance: entry.balance ?? 0,
513
- lastUsed: entry.lastUsed ?? null
514
- }));
515
- void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
516
- return { apiKeys: normalized };
517
- });
518
- },
519
- setChildKeys: (value) => {
520
- set((state) => {
521
- const updates = typeof value === "function" ? value(state.childKeys) : value;
522
- const normalized = updates.map((entry) => ({
523
- parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
524
- childKey: entry.childKey,
525
- balance: entry.balance ?? 0,
526
- balanceLimit: entry.balanceLimit,
527
- validityDate: entry.validityDate,
528
- createdAt: entry.createdAt ?? Date.now()
529
- }));
530
- void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
531
- return { childKeys: normalized };
532
- });
533
- },
534
- setRoutstr21Models: (value) => {
535
- void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
536
- set({ routstr21Models: value });
537
- },
538
- setRoutstr21ModelsLastUpdate: (value) => {
539
- void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
540
- set({ lastRoutstr21ModelsUpdate: value });
541
- },
542
- setCachedReceiveTokens: (value) => {
543
- const normalized = value.map((entry) => ({
544
- token: entry.token,
545
- amount: entry.amount,
546
- unit: entry.unit || "sat",
547
- createdAt: entry.createdAt ?? Date.now()
548
- }));
549
- void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
550
- set({ cachedReceiveTokens: normalized });
551
- },
552
- setUsageTracking: (value) => {
553
- void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
554
- set({ usageTracking: value });
555
- }
556
- }));
596
+ clientIds
597
+ });
598
+ };
599
+ var createSdkStore = ({
600
+ driver
601
+ }) => {
602
+ const store = createEmptyStore(driver);
603
+ return {
604
+ store,
605
+ hydrate: hydrateStoreFromDriver(store, driver)
606
+ };
557
607
  };
558
608
  var createDiscoveryAdapterFromStore = (store) => ({
559
609
  getCachedModels: () => store.getState().modelsFromAllProviders,
@@ -818,7 +868,7 @@ var createProviderRegistryFromStore = (store) => ({
818
868
  });
819
869
 
820
870
  // storage/index.ts
821
- var isBrowser = () => {
871
+ var isBrowser2 = () => {
822
872
  try {
823
873
  return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
824
874
  } catch {
@@ -838,7 +888,7 @@ var isBun2 = () => {
838
888
  };
839
889
  var getDefaultSdkDriver = () => {
840
890
  if (defaultDriver) return defaultDriver;
841
- if (isBrowser()) {
891
+ if (isBrowser2()) {
842
892
  defaultDriver = localStorageDriver;
843
893
  return defaultDriver;
844
894
  }
@@ -853,12 +903,12 @@ var getDefaultSdkDriver = () => {
853
903
  defaultDriver = createMemoryDriver();
854
904
  return defaultDriver;
855
905
  };
856
- var defaultStorePromise = null;
906
+ var defaultStore = null;
857
907
  var getDefaultSdkStore = () => {
858
- if (!defaultStorePromise) {
859
- defaultStorePromise = createSdkStore({ driver: getDefaultSdkDriver() });
908
+ if (!defaultStore) {
909
+ defaultStore = createSdkStore({ driver: getDefaultSdkDriver() });
860
910
  }
861
- return defaultStorePromise;
911
+ return defaultStore.hydrate.then(() => defaultStore.store);
862
912
  };
863
913
  var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
864
914
  var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());