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