@routstr/sdk 0.2.4 → 0.2.6

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 (40) hide show
  1. package/README.md +10 -2
  2. package/dist/client/index.d.mts +38 -11
  3. package/dist/client/index.d.ts +38 -11
  4. package/dist/client/index.js +1771 -391
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/index.mjs +1771 -392
  7. package/dist/client/index.mjs.map +1 -1
  8. package/dist/discovery/index.d.mts +2 -2
  9. package/dist/discovery/index.d.ts +2 -2
  10. package/dist/discovery/index.js +1 -4
  11. package/dist/discovery/index.js.map +1 -1
  12. package/dist/discovery/index.mjs +1 -4
  13. package/dist/discovery/index.mjs.map +1 -1
  14. package/dist/index.d.mts +26 -22
  15. package/dist/index.d.ts +26 -22
  16. package/dist/index.js +3005 -2107
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +2997 -2108
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/{interfaces-B85Wx7ni.d.mts → interfaces-B62Rw-dd.d.ts} +20 -15
  21. package/dist/{interfaces-DGdP8fQp.d.mts → interfaces-BWJJTCXO.d.mts} +1 -1
  22. package/dist/{interfaces-CC0LT9p9.d.ts → interfaces-BxDEka72.d.ts} +1 -1
  23. package/dist/{interfaces-BVNyAmKu.d.ts → interfaces-C5fLD3jB.d.mts} +20 -15
  24. package/dist/storage/index.d.mts +38 -142
  25. package/dist/storage/index.d.ts +38 -142
  26. package/dist/storage/index.js +852 -158
  27. package/dist/storage/index.js.map +1 -1
  28. package/dist/storage/index.mjs +846 -159
  29. package/dist/storage/index.mjs.map +1 -1
  30. package/dist/store-BJlwiDX5.d.ts +151 -0
  31. package/dist/store-C5lnyX8k.d.mts +151 -0
  32. package/dist/{types-BlHjmWRK.d.mts → types-BYj_8c5c.d.mts} +3 -0
  33. package/dist/{types-BlHjmWRK.d.ts → types-BYj_8c5c.d.ts} +3 -0
  34. package/dist/wallet/index.d.mts +24 -26
  35. package/dist/wallet/index.d.ts +24 -26
  36. package/dist/wallet/index.js +130 -259
  37. package/dist/wallet/index.js.map +1 -1
  38. package/dist/wallet/index.mjs +130 -259
  39. package/dist/wallet/index.mjs.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,151 @@
1
+ import { StoreApi } from 'zustand/vanilla';
2
+ import { D as DiscoveryAdapter } from './interfaces-BWJJTCXO.mjs';
3
+ import { P as ProviderRegistry, S as StorageAdapter } from './interfaces-C5fLD3jB.mjs';
4
+ import { M as Model, P as ProviderInfo } from './types-BYj_8c5c.mjs';
5
+
6
+ interface UsageTrackingEntry {
7
+ id: string;
8
+ timestamp: number;
9
+ modelId: string;
10
+ baseUrl: string;
11
+ requestId: string;
12
+ cost: number;
13
+ satsCost: number;
14
+ promptTokens: number;
15
+ completionTokens: number;
16
+ totalTokens: number;
17
+ client?: string;
18
+ sessionId?: string;
19
+ tags?: string[];
20
+ }
21
+
22
+ interface ListUsageTrackingOptions {
23
+ limit?: number;
24
+ before?: number;
25
+ after?: number;
26
+ modelId?: string;
27
+ baseUrl?: string;
28
+ sessionId?: string;
29
+ client?: string;
30
+ }
31
+ interface UsageTrackingDriver {
32
+ migrate(): Promise<void>;
33
+ append(entry: UsageTrackingEntry): Promise<void>;
34
+ appendMany(entries: UsageTrackingEntry[]): Promise<void>;
35
+ list(options?: ListUsageTrackingOptions): Promise<UsageTrackingEntry[]>;
36
+ count(options?: Omit<ListUsageTrackingOptions, "limit">): Promise<number>;
37
+ deleteOlderThan(timestamp: number): Promise<number>;
38
+ clear(): Promise<void>;
39
+ }
40
+
41
+ interface StorageDriver {
42
+ getItem<T>(key: string, defaultValue: T): Promise<T>;
43
+ setItem<T>(key: string, value: T): Promise<void>;
44
+ removeItem(key: string): Promise<void>;
45
+ }
46
+ interface SdkStorageState {
47
+ modelsFromAllProviders: Record<string, Model[]>;
48
+ lastUsedModel: string | null;
49
+ baseUrlsList: string[];
50
+ disabledProviders: string[];
51
+ mintsFromAllProviders: Record<string, string[]>;
52
+ infoFromAllProviders: Record<string, ProviderInfo>;
53
+ lastModelsUpdate: Record<string, number>;
54
+ lastBaseUrlsUpdate: number | null;
55
+ apiKeys: Array<{
56
+ baseUrl: string;
57
+ key: string;
58
+ balance: number;
59
+ lastUsed: number | null;
60
+ }>;
61
+ childKeys: Array<{
62
+ parentBaseUrl: string;
63
+ childKey: string;
64
+ balance: number;
65
+ balanceLimit?: number;
66
+ validityDate?: number;
67
+ createdAt: number;
68
+ }>;
69
+ xcashuTokens: Record<string, Array<{
70
+ baseUrl: string;
71
+ token: string;
72
+ createdAt: number;
73
+ tryCount: number;
74
+ }>>;
75
+ routstr21Models: string[];
76
+ lastRoutstr21ModelsUpdate: number | null;
77
+ cachedReceiveTokens: Array<{
78
+ token: string;
79
+ amount: number;
80
+ unit: "sat" | "msat";
81
+ createdAt: number;
82
+ }>;
83
+ clientIds: Array<{
84
+ clientId: string;
85
+ name: string;
86
+ apiKey: string;
87
+ createdAt: number;
88
+ lastUsed?: number | null;
89
+ }>;
90
+ }
91
+
92
+ interface SdkStoreOptions {
93
+ driver: StorageDriver;
94
+ }
95
+ interface SdkStorageStore extends SdkStorageState {
96
+ setModelsFromAllProviders: (value: Record<string, Model[]>) => void;
97
+ setLastUsedModel: (value: string | null) => void;
98
+ setBaseUrlsList: (value: string[]) => void;
99
+ setBaseUrlsLastUpdate: (value: number | null) => void;
100
+ setDisabledProviders: (value: string[]) => void;
101
+ setMintsFromAllProviders: (value: Record<string, string[]>) => void;
102
+ setInfoFromAllProviders: (value: Record<string, ProviderInfo>) => void;
103
+ setLastModelsUpdate: (value: Record<string, number>) => void;
104
+ setApiKeys: (value: Array<{
105
+ baseUrl: string;
106
+ key: string;
107
+ balance?: number;
108
+ lastUsed?: number | null;
109
+ }> | ((current: SdkStorageStore["apiKeys"]) => SdkStorageStore["apiKeys"])) => void;
110
+ setChildKeys: (value: Array<{
111
+ parentBaseUrl: string;
112
+ childKey: string;
113
+ balance?: number;
114
+ balanceLimit?: number;
115
+ validityDate?: number;
116
+ createdAt?: number;
117
+ }>) => void;
118
+ setXcashuTokens: (value: Record<string, Array<{
119
+ baseUrl: string;
120
+ token: string;
121
+ createdAt?: number;
122
+ tryCount?: number;
123
+ }>>) => void;
124
+ updateXcashuTokenTryCount: (token: string, tryCount: number) => void;
125
+ setRoutstr21Models: (value: string[]) => void;
126
+ setRoutstr21ModelsLastUpdate: (value: number | null) => void;
127
+ setCachedReceiveTokens: (value: Array<{
128
+ token: string;
129
+ amount: number;
130
+ unit: "sat" | "msat";
131
+ createdAt?: number;
132
+ }>) => void;
133
+ setClientIds: (value: Array<{
134
+ clientId: string;
135
+ name: string;
136
+ apiKey: string;
137
+ createdAt?: number;
138
+ lastUsed?: number | null;
139
+ }> | ((current: SdkStorageStore["clientIds"]) => SdkStorageStore["clientIds"])) => void;
140
+ }
141
+ /** Store type returned after async initialization */
142
+ type SdkStore = StoreApi<SdkStorageStore>;
143
+ declare const createSdkStore: ({ driver, }: SdkStoreOptions) => {
144
+ store: SdkStore;
145
+ hydrate: Promise<void>;
146
+ };
147
+ declare const createDiscoveryAdapterFromStore: (store: SdkStore) => DiscoveryAdapter;
148
+ declare const createStorageAdapterFromStore: (store: SdkStore) => StorageAdapter;
149
+ declare const createProviderRegistryFromStore: (store: SdkStore) => ProviderRegistry;
150
+
151
+ export { type ListUsageTrackingOptions as L, type SdkStore as S, type UsageTrackingDriver as U, type StorageDriver as a, type UsageTrackingEntry as b, createDiscoveryAdapterFromStore as c, createProviderRegistryFromStore as d, createSdkStore as e, createStorageAdapterFromStore as f };
@@ -146,6 +146,8 @@ interface UsageStats {
146
146
  total_tokens?: number;
147
147
  prompt_tokens?: number;
148
148
  completion_tokens?: number;
149
+ cost?: number;
150
+ sats_cost?: number;
149
151
  }
150
152
  /**
151
153
  * Result from streaming response processing
@@ -156,6 +158,7 @@ interface StreamingResult {
156
158
  images?: ImageData[];
157
159
  usage?: UsageStats;
158
160
  model?: string;
161
+ responseId?: string;
159
162
  finish_reason?: string;
160
163
  citations?: string[];
161
164
  annotations?: AnnotationData[];
@@ -146,6 +146,8 @@ interface UsageStats {
146
146
  total_tokens?: number;
147
147
  prompt_tokens?: number;
148
148
  completion_tokens?: number;
149
+ cost?: number;
150
+ sats_cost?: number;
149
151
  }
150
152
  /**
151
153
  * Result from streaming response processing
@@ -156,6 +158,7 @@ interface StreamingResult {
156
158
  images?: ImageData[];
157
159
  usage?: UsageStats;
158
160
  model?: string;
161
+ responseId?: string;
159
162
  finish_reason?: string;
160
163
  citations?: string[];
161
164
  annotations?: AnnotationData[];
@@ -1,7 +1,7 @@
1
- import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-B85Wx7ni.mjs';
2
- export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-B85Wx7ni.mjs';
3
- import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BlHjmWRK.mjs';
4
- export { P as ProviderInfo } from '../types-BlHjmWRK.mjs';
1
+ import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-C5fLD3jB.mjs';
2
+ export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks, X as XCashuTokenEntry } from '../interfaces-C5fLD3jB.mjs';
3
+ import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BYj_8c5c.mjs';
4
+ export { P as ProviderInfo } from '../types-BYj_8c5c.mjs';
5
5
 
6
6
  /**
7
7
  * BalanceManager - Handles refunding and topping up tokens from providers
@@ -15,17 +15,6 @@ export { P as ProviderInfo } from '../types-BlHjmWRK.mjs';
15
15
  * Extracted from utils/cashuUtils.ts
16
16
  */
17
17
 
18
- /**
19
- * Options for refunding tokens
20
- */
21
- interface RefundOptions {
22
- /** The mint URL (for NIP-60 wallet operations) */
23
- mintUrl: string;
24
- /** The provider base URL */
25
- baseUrl: string;
26
- /** Optional specific token to refund (if not provided, uses stored token) */
27
- token?: string;
28
- }
29
18
  /**
30
19
  * Options for refunding API key balance
31
20
  */
@@ -36,6 +25,8 @@ interface RefundApiKeyOptions {
36
25
  baseUrl: string;
37
26
  /** The API key to use for authentication */
38
27
  apiKey: string;
28
+ /** If true, forces refund even if the API key was used recently */
29
+ forceRefund?: boolean;
39
30
  }
40
31
  /**
41
32
  * Options for topping up API key balance
@@ -80,12 +71,10 @@ declare class BalanceManager {
80
71
  private cashuSpender;
81
72
  constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry?: ProviderRegistry | undefined, cashuSpender?: CashuSpender);
82
73
  getBalanceState(): Promise<BalanceState>;
83
- /**
84
- * Unified refund - handles both NIP-60 and legacy wallet refunds
85
- */
86
- refund(options: RefundOptions): Promise<RefundResult>;
87
74
  /**
88
75
  * Refund API key balance - convert remaining API key balance to cashu token
76
+ * @param options - Refund options including forceRefund flag
77
+ * @returns Refund result
89
78
  */
90
79
  refundApiKey(options: RefundApiKeyOptions): Promise<RefundResult>;
91
80
  /**
@@ -99,10 +88,6 @@ declare class BalanceManager {
99
88
  createProviderToken(options: CreateProviderTokenOptions): Promise<ProviderTokenResult>;
100
89
  private _selectCandidateMints;
101
90
  private _refundOtherProvidersForTopUp;
102
- /**
103
- * Fetch refund token from provider API
104
- */
105
- private _fetchRefundToken;
106
91
  /**
107
92
  * Post topup request to provider API
108
93
  */
@@ -205,13 +190,26 @@ declare class CashuSpender {
205
190
  */
206
191
  private _spendInternal;
207
192
  /**
208
- * Try to reuse an existing token
193
+ * Try to reuse an existing API key
209
194
  */
210
195
  private _tryReuseToken;
196
+ /**
197
+ * Refund all xcashu tokens from storage and increment tryCounts on failure.
198
+ * Reuses receiveToken from BalanceManager/CashuSpender for receiving refunds.
199
+ * @param mintUrl - The mint URL for receiving tokens
200
+ * @param excludeBaseUrls - Base URLs to exclude from refund (optional)
201
+ * @returns Results for each xcashu token refund attempt
202
+ */
203
+ refundXcashuTokens(mintUrl: string, excludeBaseUrls?: string[]): Promise<{
204
+ baseUrl: string;
205
+ token: string;
206
+ success: boolean;
207
+ error?: string;
208
+ }[]>;
211
209
  /**
212
210
  * Refund specific providers without retrying spend
213
211
  */
214
- refundProviders(baseUrls: string[], mintUrl: string, refundApiKeys?: boolean): Promise<{
212
+ refundProviders(mintUrl: string, forceRefund?: boolean): Promise<{
215
213
  baseUrl: string;
216
214
  success: boolean;
217
215
  }[]>;
@@ -222,4 +220,4 @@ declare class CashuSpender {
222
220
  private _getProviderTokenBalance;
223
221
  }
224
222
 
225
- export { BalanceManager, type BalanceState, CashuSpender, type CreateProviderTokenOptions, ProviderRegistry, type ProviderTokenResult, type RefundApiKeyOptions, type RefundOptions, type SpendOptions, StorageAdapter, type TopUpOptions, WalletAdapter };
223
+ export { BalanceManager, type BalanceState, CashuSpender, type CreateProviderTokenOptions, ProviderRegistry, type ProviderTokenResult, type RefundApiKeyOptions, type SpendOptions, StorageAdapter, type TopUpOptions, WalletAdapter };
@@ -1,7 +1,7 @@
1
- import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-BVNyAmKu.js';
2
- export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from '../interfaces-BVNyAmKu.js';
3
- import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BlHjmWRK.js';
4
- export { P as ProviderInfo } from '../types-BlHjmWRK.js';
1
+ import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from '../interfaces-B62Rw-dd.js';
2
+ export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks, X as XCashuTokenEntry } from '../interfaces-B62Rw-dd.js';
3
+ import { R as RefundResult, m as TopUpResult, S as SpendResult } from '../types-BYj_8c5c.js';
4
+ export { P as ProviderInfo } from '../types-BYj_8c5c.js';
5
5
 
6
6
  /**
7
7
  * BalanceManager - Handles refunding and topping up tokens from providers
@@ -15,17 +15,6 @@ export { P as ProviderInfo } from '../types-BlHjmWRK.js';
15
15
  * Extracted from utils/cashuUtils.ts
16
16
  */
17
17
 
18
- /**
19
- * Options for refunding tokens
20
- */
21
- interface RefundOptions {
22
- /** The mint URL (for NIP-60 wallet operations) */
23
- mintUrl: string;
24
- /** The provider base URL */
25
- baseUrl: string;
26
- /** Optional specific token to refund (if not provided, uses stored token) */
27
- token?: string;
28
- }
29
18
  /**
30
19
  * Options for refunding API key balance
31
20
  */
@@ -36,6 +25,8 @@ interface RefundApiKeyOptions {
36
25
  baseUrl: string;
37
26
  /** The API key to use for authentication */
38
27
  apiKey: string;
28
+ /** If true, forces refund even if the API key was used recently */
29
+ forceRefund?: boolean;
39
30
  }
40
31
  /**
41
32
  * Options for topping up API key balance
@@ -80,12 +71,10 @@ declare class BalanceManager {
80
71
  private cashuSpender;
81
72
  constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry?: ProviderRegistry | undefined, cashuSpender?: CashuSpender);
82
73
  getBalanceState(): Promise<BalanceState>;
83
- /**
84
- * Unified refund - handles both NIP-60 and legacy wallet refunds
85
- */
86
- refund(options: RefundOptions): Promise<RefundResult>;
87
74
  /**
88
75
  * Refund API key balance - convert remaining API key balance to cashu token
76
+ * @param options - Refund options including forceRefund flag
77
+ * @returns Refund result
89
78
  */
90
79
  refundApiKey(options: RefundApiKeyOptions): Promise<RefundResult>;
91
80
  /**
@@ -99,10 +88,6 @@ declare class BalanceManager {
99
88
  createProviderToken(options: CreateProviderTokenOptions): Promise<ProviderTokenResult>;
100
89
  private _selectCandidateMints;
101
90
  private _refundOtherProvidersForTopUp;
102
- /**
103
- * Fetch refund token from provider API
104
- */
105
- private _fetchRefundToken;
106
91
  /**
107
92
  * Post topup request to provider API
108
93
  */
@@ -205,13 +190,26 @@ declare class CashuSpender {
205
190
  */
206
191
  private _spendInternal;
207
192
  /**
208
- * Try to reuse an existing token
193
+ * Try to reuse an existing API key
209
194
  */
210
195
  private _tryReuseToken;
196
+ /**
197
+ * Refund all xcashu tokens from storage and increment tryCounts on failure.
198
+ * Reuses receiveToken from BalanceManager/CashuSpender for receiving refunds.
199
+ * @param mintUrl - The mint URL for receiving tokens
200
+ * @param excludeBaseUrls - Base URLs to exclude from refund (optional)
201
+ * @returns Results for each xcashu token refund attempt
202
+ */
203
+ refundXcashuTokens(mintUrl: string, excludeBaseUrls?: string[]): Promise<{
204
+ baseUrl: string;
205
+ token: string;
206
+ success: boolean;
207
+ error?: string;
208
+ }[]>;
211
209
  /**
212
210
  * Refund specific providers without retrying spend
213
211
  */
214
- refundProviders(baseUrls: string[], mintUrl: string, refundApiKeys?: boolean): Promise<{
212
+ refundProviders(mintUrl: string, forceRefund?: boolean): Promise<{
215
213
  baseUrl: string;
216
214
  success: boolean;
217
215
  }[]>;
@@ -222,4 +220,4 @@ declare class CashuSpender {
222
220
  private _getProviderTokenBalance;
223
221
  }
224
222
 
225
- export { BalanceManager, type BalanceState, CashuSpender, type CreateProviderTokenOptions, ProviderRegistry, type ProviderTokenResult, type RefundApiKeyOptions, type RefundOptions, type SpendOptions, StorageAdapter, type TopUpOptions, WalletAdapter };
223
+ export { BalanceManager, type BalanceState, CashuSpender, type CreateProviderTokenOptions, ProviderRegistry, type ProviderTokenResult, type RefundApiKeyOptions, type SpendOptions, StorageAdapter, type TopUpOptions, WalletAdapter };