@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
package/README.md CHANGED
@@ -25,10 +25,19 @@ This SDK lives under `sdk/` and exposes a framework-agnostic surface for Routstr
25
25
  - `sdk/storage/index.ts` exposes:
26
26
  - `getDefaultSdkDriver()` (localStorage -> sqlite -> memory)
27
27
  - `getDefaultSdkStore()`
28
+ - `getDefaultUsageTrackingDriver()`
28
29
  - `getDefaultDiscoveryAdapter()`
29
30
  - `getDefaultStorageAdapter()`
30
31
  - `getDefaultProviderRegistry()`
31
32
 
33
+ Usage tracking is now stored separately from the Zustand-backed SDK state:
34
+
35
+ - browser: IndexedDB usage-tracking object store
36
+ - node: SQLite usage-tracking table
37
+ - bun/ephemeral: in-memory usage-tracking driver
38
+
39
+ The usage tracking driver also exposes `migrate()` so apps can proactively move legacy blob data into the new backend during startup instead of waiting for the first append/read operation.
40
+
32
41
  ## Minimal Usage
33
42
 
34
43
  ```ts
@@ -61,10 +70,9 @@ await client.fetchAIResponse(fetchOptions, streamingCallbacks);
61
70
 
62
71
  ## Client Modes
63
72
 
64
- The `RoutstrClient` supports three modes via the constructor `mode` parameter (defaults to `"xcashu"` if unspecified):
73
+ The `RoutstrClient` supports two modes via the constructor `mode` parameter (defaults to `"xcashu"` if unspecified):
65
74
 
66
75
  - `"xcashu"` — Default mode. Uses standard Cashu token spending with refunds.
67
- - `"lazyrefund"` — Defers refund processing to reduce mint load; may retain tokens longer before refunding.
68
76
  - `"apikeys"` — Uses API key authentication instead of Cashu tokens; no token spending or refund flow.
69
77
 
70
78
  ```ts
@@ -1,6 +1,11 @@
1
- import { M as Model, a as Message, T as TransactionHistory, l as StreamingResult } from '../types-BlHjmWRK.mjs';
2
- import { P as ProviderRegistry, W as WalletAdapter, S as StorageAdapter, a as StreamingCallbacks } from '../interfaces-B85Wx7ni.mjs';
1
+ import { M as Model, a as Message, T as TransactionHistory, l as StreamingResult } from '../types-BYj_8c5c.mjs';
2
+ import { P as ProviderRegistry, W as WalletAdapter, S as StorageAdapter, a as StreamingCallbacks } from '../interfaces-C5fLD3jB.mjs';
3
+ import { U as UsageTrackingDriver, S as SdkStore } from '../store-C5lnyX8k.mjs';
4
+ import { ServerResponse } from 'http';
3
5
  import { CashuSpender, BalanceManager } from '../wallet/index.mjs';
6
+ import { Transform } from 'stream';
7
+ import 'zustand/vanilla';
8
+ import '../interfaces-BWJJTCXO.mjs';
4
9
 
5
10
  /**
6
11
  * ProviderManager - Handles provider selection and failover logic
@@ -161,7 +166,7 @@ interface FetchOptions {
161
166
  * RoutstrClient is the main SDK entry point
162
167
  */
163
168
  type AlertLevel = "max" | "min";
164
- type RoutstrClientMode = "xcashu" | "lazyrefund" | "apikeys";
169
+ type RoutstrClientMode = "xcashu" | "apikeys";
165
170
  type DebugLevel = "DEBUG" | "WARN" | "ERROR";
166
171
  interface RouteRequestParams {
167
172
  path: string;
@@ -171,6 +176,14 @@ interface RouteRequestParams {
171
176
  baseUrl: string;
172
177
  mintUrl: string;
173
178
  modelId?: string;
179
+ clientApiKey?: string;
180
+ }
181
+ interface RouteRequestToNodeResponseParams extends RouteRequestParams {
182
+ res: ServerResponse;
183
+ }
184
+ interface RoutstrClientConfig {
185
+ usageTrackingDriver?: UsageTrackingDriver;
186
+ sdkStore?: SdkStore;
174
187
  }
175
188
  declare class RoutstrClient {
176
189
  private walletAdapter;
@@ -183,7 +196,9 @@ declare class RoutstrClient {
183
196
  private alertLevel;
184
197
  private mode;
185
198
  private debugLevel;
186
- constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry: ProviderRegistry, alertLevel: AlertLevel, mode?: RoutstrClientMode);
199
+ private usageTrackingDriver?;
200
+ private sdkStore?;
201
+ constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry: ProviderRegistry, alertLevel: AlertLevel, mode?: RoutstrClientMode, options?: RoutstrClientConfig);
187
202
  /**
188
203
  * Get the current client mode
189
204
  */
@@ -216,6 +231,12 @@ declare class RoutstrClient {
216
231
  * requests and get responses back.
217
232
  */
218
233
  routeRequest(params: RouteRequestParams): Promise<Response>;
234
+ routeRequestToNodeResponse(params: RouteRequestToNodeResponseParams): Promise<void>;
235
+ private _prepareRoutedRequest;
236
+ /**
237
+ * Extract clientApiKey from Authorization Bearer token if present
238
+ */
239
+ private _extractClientApiKey;
219
240
  /**
220
241
  * Fetch AI response with streaming
221
242
  */
@@ -232,6 +253,7 @@ declare class RoutstrClient {
232
253
  * Handle post-response balance update for all modes
233
254
  */
234
255
  private _handlePostResponseBalanceUpdate;
256
+ private _trackResponseUsage;
235
257
  /**
236
258
  * Convert messages for API format
237
259
  */
@@ -240,17 +262,12 @@ declare class RoutstrClient {
240
262
  * Create assistant message from streaming result
241
263
  */
242
264
  private _createAssistantMessage;
243
- /**
244
- * Create a child key for a parent API key via the provider's API
245
- * POST /v1/balance/child-key
246
- */
247
- private _createChildKey;
248
265
  /**
249
266
  * Calculate estimated costs from usage
250
267
  */
251
268
  private _getEstimatedCosts;
252
269
  /**
253
- * Get pending cashu token amount
270
+ * Get pending API key amount
254
271
  */
255
272
  private _getPendingCashuTokenAmount;
256
273
  /**
@@ -333,4 +350,14 @@ declare class StreamProcessor {
333
350
  private _mergeImages;
334
351
  }
335
352
 
336
- export { type AlertLevel, type DebugLevel, type FetchOptions, type ModelProviderPrice, ProviderManager, type RouteRequestParams, RoutstrClient, type RoutstrClientMode, type StreamCallbacks, StreamProcessor };
353
+ interface UsageTrackingData {
354
+ promptTokens: number;
355
+ completionTokens: number;
356
+ totalTokens: number;
357
+ cost: number;
358
+ satsCost: number;
359
+ }
360
+
361
+ declare function createSSEParserTransform(onUsage: (usage: UsageTrackingData) => void, onResponseId?: (responseId: string) => void): Transform;
362
+
363
+ export { type AlertLevel, type DebugLevel, type FetchOptions, type ModelProviderPrice, ProviderManager, type RouteRequestParams, type RouteRequestToNodeResponseParams, RoutstrClient, type RoutstrClientConfig, type RoutstrClientMode, type StreamCallbacks, StreamProcessor, createSSEParserTransform };
@@ -1,6 +1,11 @@
1
- import { M as Model, a as Message, T as TransactionHistory, l as StreamingResult } from '../types-BlHjmWRK.js';
2
- import { P as ProviderRegistry, W as WalletAdapter, S as StorageAdapter, a as StreamingCallbacks } from '../interfaces-BVNyAmKu.js';
1
+ import { M as Model, a as Message, T as TransactionHistory, l as StreamingResult } from '../types-BYj_8c5c.js';
2
+ import { P as ProviderRegistry, W as WalletAdapter, S as StorageAdapter, a as StreamingCallbacks } from '../interfaces-B62Rw-dd.js';
3
+ import { U as UsageTrackingDriver, S as SdkStore } from '../store-BJlwiDX5.js';
4
+ import { ServerResponse } from 'http';
3
5
  import { CashuSpender, BalanceManager } from '../wallet/index.js';
6
+ import { Transform } from 'stream';
7
+ import 'zustand/vanilla';
8
+ import '../interfaces-BxDEka72.js';
4
9
 
5
10
  /**
6
11
  * ProviderManager - Handles provider selection and failover logic
@@ -161,7 +166,7 @@ interface FetchOptions {
161
166
  * RoutstrClient is the main SDK entry point
162
167
  */
163
168
  type AlertLevel = "max" | "min";
164
- type RoutstrClientMode = "xcashu" | "lazyrefund" | "apikeys";
169
+ type RoutstrClientMode = "xcashu" | "apikeys";
165
170
  type DebugLevel = "DEBUG" | "WARN" | "ERROR";
166
171
  interface RouteRequestParams {
167
172
  path: string;
@@ -171,6 +176,14 @@ interface RouteRequestParams {
171
176
  baseUrl: string;
172
177
  mintUrl: string;
173
178
  modelId?: string;
179
+ clientApiKey?: string;
180
+ }
181
+ interface RouteRequestToNodeResponseParams extends RouteRequestParams {
182
+ res: ServerResponse;
183
+ }
184
+ interface RoutstrClientConfig {
185
+ usageTrackingDriver?: UsageTrackingDriver;
186
+ sdkStore?: SdkStore;
174
187
  }
175
188
  declare class RoutstrClient {
176
189
  private walletAdapter;
@@ -183,7 +196,9 @@ declare class RoutstrClient {
183
196
  private alertLevel;
184
197
  private mode;
185
198
  private debugLevel;
186
- constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry: ProviderRegistry, alertLevel: AlertLevel, mode?: RoutstrClientMode);
199
+ private usageTrackingDriver?;
200
+ private sdkStore?;
201
+ constructor(walletAdapter: WalletAdapter, storageAdapter: StorageAdapter, providerRegistry: ProviderRegistry, alertLevel: AlertLevel, mode?: RoutstrClientMode, options?: RoutstrClientConfig);
187
202
  /**
188
203
  * Get the current client mode
189
204
  */
@@ -216,6 +231,12 @@ declare class RoutstrClient {
216
231
  * requests and get responses back.
217
232
  */
218
233
  routeRequest(params: RouteRequestParams): Promise<Response>;
234
+ routeRequestToNodeResponse(params: RouteRequestToNodeResponseParams): Promise<void>;
235
+ private _prepareRoutedRequest;
236
+ /**
237
+ * Extract clientApiKey from Authorization Bearer token if present
238
+ */
239
+ private _extractClientApiKey;
219
240
  /**
220
241
  * Fetch AI response with streaming
221
242
  */
@@ -232,6 +253,7 @@ declare class RoutstrClient {
232
253
  * Handle post-response balance update for all modes
233
254
  */
234
255
  private _handlePostResponseBalanceUpdate;
256
+ private _trackResponseUsage;
235
257
  /**
236
258
  * Convert messages for API format
237
259
  */
@@ -240,17 +262,12 @@ declare class RoutstrClient {
240
262
  * Create assistant message from streaming result
241
263
  */
242
264
  private _createAssistantMessage;
243
- /**
244
- * Create a child key for a parent API key via the provider's API
245
- * POST /v1/balance/child-key
246
- */
247
- private _createChildKey;
248
265
  /**
249
266
  * Calculate estimated costs from usage
250
267
  */
251
268
  private _getEstimatedCosts;
252
269
  /**
253
- * Get pending cashu token amount
270
+ * Get pending API key amount
254
271
  */
255
272
  private _getPendingCashuTokenAmount;
256
273
  /**
@@ -333,4 +350,14 @@ declare class StreamProcessor {
333
350
  private _mergeImages;
334
351
  }
335
352
 
336
- export { type AlertLevel, type DebugLevel, type FetchOptions, type ModelProviderPrice, ProviderManager, type RouteRequestParams, RoutstrClient, type RoutstrClientMode, type StreamCallbacks, StreamProcessor };
353
+ interface UsageTrackingData {
354
+ promptTokens: number;
355
+ completionTokens: number;
356
+ totalTokens: number;
357
+ cost: number;
358
+ satsCost: number;
359
+ }
360
+
361
+ declare function createSSEParserTransform(onUsage: (usage: UsageTrackingData) => void, onResponseId?: (responseId: string) => void): Transform;
362
+
363
+ export { type AlertLevel, type DebugLevel, type FetchOptions, type ModelProviderPrice, ProviderManager, type RouteRequestParams, type RouteRequestToNodeResponseParams, RoutstrClient, type RoutstrClientConfig, type RoutstrClientMode, type StreamCallbacks, StreamProcessor, createSSEParserTransform };