@routstr/sdk 0.3.9 → 0.3.10

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 (59) hide show
  1. package/dist/browser.d.mts +12 -0
  2. package/dist/browser.d.ts +12 -0
  3. package/dist/browser.js +6278 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/browser.mjs +6230 -0
  6. package/dist/browser.mjs.map +1 -0
  7. package/dist/bun.d.mts +29 -0
  8. package/dist/bun.d.ts +29 -0
  9. package/dist/bun.js +6586 -0
  10. package/dist/bun.js.map +1 -0
  11. package/dist/bun.mjs +6532 -0
  12. package/dist/bun.mjs.map +1 -0
  13. package/dist/bunSqlite-BMTseLIz.d.ts +18 -0
  14. package/dist/bunSqlite-D6AreVE2.d.mts +18 -0
  15. package/dist/client/index.d.mts +63 -41
  16. package/dist/client/index.d.ts +63 -41
  17. package/dist/client/index.js +801 -1291
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/index.mjs +801 -1292
  20. package/dist/client/index.mjs.map +1 -1
  21. package/dist/discovery/index.d.mts +33 -3
  22. package/dist/discovery/index.d.ts +33 -3
  23. package/dist/discovery/index.js +28 -21
  24. package/dist/discovery/index.js.map +1 -1
  25. package/dist/discovery/index.mjs +28 -21
  26. package/dist/discovery/index.mjs.map +1 -1
  27. package/dist/index.d.mts +4 -4
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.js +1045 -1564
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +1045 -1561
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/node.d.mts +22 -0
  34. package/dist/node.d.ts +22 -0
  35. package/dist/node.js +6651 -0
  36. package/dist/node.js.map +1 -0
  37. package/dist/node.mjs +6599 -0
  38. package/dist/node.mjs.map +1 -0
  39. package/dist/storage/bun.d.mts +16 -0
  40. package/dist/storage/bun.d.ts +16 -0
  41. package/dist/storage/bun.js +1801 -0
  42. package/dist/storage/bun.js.map +1 -0
  43. package/dist/storage/bun.mjs +1777 -0
  44. package/dist/storage/bun.mjs.map +1 -0
  45. package/dist/storage/index.d.mts +4 -30
  46. package/dist/storage/index.d.ts +4 -30
  47. package/dist/storage/index.js +139 -650
  48. package/dist/storage/index.js.map +1 -1
  49. package/dist/storage/index.mjs +140 -647
  50. package/dist/storage/index.mjs.map +1 -1
  51. package/dist/storage/node.d.mts +22 -0
  52. package/dist/storage/node.d.ts +22 -0
  53. package/dist/storage/node.js +1864 -0
  54. package/dist/storage/node.js.map +1 -0
  55. package/dist/storage/node.mjs +1842 -0
  56. package/dist/storage/node.mjs.map +1 -0
  57. package/dist/{store-C6dfj1cc.d.mts → store-BiuM2V9N.d.mts} +14 -0
  58. package/dist/{store-58VcEUoA.d.ts → store-C8MZlfuz.d.ts} +14 -0
  59. package/package.json +26 -1
@@ -110,154 +110,6 @@ var createMemoryDriver = (seed) => {
110
110
  };
111
111
  };
112
112
 
113
- // core/types.ts
114
- function makeConsoleLogger(prefix) {
115
- const fmt = (args) => prefix ? [prefix, ...args] : args;
116
- return {
117
- log: (...args) => console.log(...fmt(args)),
118
- warn: (...args) => console.warn(...fmt(args)),
119
- error: (...args) => console.error(...fmt(args)),
120
- debug: (...args) => console.log(...fmt(args)),
121
- child: (p) => makeConsoleLogger(prefix ? `${prefix}:${p}` : p)
122
- };
123
- }
124
- var consoleLogger = makeConsoleLogger();
125
-
126
- // storage/drivers/sqlite.ts
127
- var isBun = () => {
128
- return typeof process.versions.bun !== "undefined";
129
- };
130
- var cachedDbModule = null;
131
- var loadDatabase = async (dbPath) => {
132
- if (isBun()) {
133
- throw new Error(
134
- "SQLite driver not supported in Bun. Use createBunSqliteDriver() instead."
135
- );
136
- }
137
- try {
138
- if (!cachedDbModule) {
139
- cachedDbModule = (await import('better-sqlite3')).default;
140
- }
141
- return new cachedDbModule(dbPath);
142
- } catch (error) {
143
- throw new Error(
144
- `better-sqlite3 is required for sqlite storage. Install it to use sqlite storage. (${error})`
145
- );
146
- }
147
- };
148
- var createSqliteDriver = (options = {}) => {
149
- const dbPath = options.dbPath || "routstr.sqlite";
150
- const tableName = options.tableName || "sdk_storage";
151
- let db;
152
- let selectStmt;
153
- let upsertStmt;
154
- let deleteStmt;
155
- const initDb = async () => {
156
- if (!db) {
157
- db = await loadDatabase(dbPath);
158
- db.exec(
159
- `CREATE TABLE IF NOT EXISTS ${tableName} (key TEXT PRIMARY KEY, value TEXT NOT NULL)`
160
- );
161
- selectStmt = db.prepare(`SELECT value FROM ${tableName} WHERE key = ?`);
162
- upsertStmt = db.prepare(
163
- `INSERT INTO ${tableName} (key, value) VALUES (?, ?)
164
- ON CONFLICT(key) DO UPDATE SET value = excluded.value`
165
- );
166
- deleteStmt = db.prepare(`DELETE FROM ${tableName} WHERE key = ?`);
167
- }
168
- };
169
- const ensureInit = async () => {
170
- if (!db) {
171
- await initDb();
172
- }
173
- };
174
- return {
175
- async getItem(key, defaultValue) {
176
- try {
177
- await ensureInit();
178
- const row = selectStmt.get(key);
179
- if (!row || typeof row.value !== "string") return defaultValue;
180
- try {
181
- return JSON.parse(row.value);
182
- } catch (parseError) {
183
- if (typeof defaultValue === "string") {
184
- return row.value;
185
- }
186
- throw parseError;
187
- }
188
- } catch (error) {
189
- console.error(`SQLite getItem failed for key "${key}":`, error);
190
- return defaultValue;
191
- }
192
- },
193
- async setItem(key, value) {
194
- try {
195
- await ensureInit();
196
- upsertStmt.run(key, JSON.stringify(value));
197
- } catch (error) {
198
- console.error(`SQLite setItem failed for key "${key}":`, error);
199
- }
200
- },
201
- async removeItem(key) {
202
- try {
203
- await ensureInit();
204
- deleteStmt.run(key);
205
- } catch (error) {
206
- console.error(`SQLite removeItem failed for key "${key}":`, error);
207
- }
208
- }
209
- };
210
- };
211
- async function createBunSqliteDriver(dbPath, options) {
212
- const logger = (options?.logger ?? consoleLogger).child("BunSqliteDriver");
213
- const SQLite = (await import(
214
- /* webpackIgnore: true */
215
- 'bun:sqlite'
216
- )).default;
217
- const db = new SQLite(dbPath);
218
- db.run(`
219
- CREATE TABLE IF NOT EXISTS sdk_storage (
220
- key TEXT PRIMARY KEY,
221
- value TEXT NOT NULL
222
- )
223
- `);
224
- return {
225
- async getItem(key, defaultValue) {
226
- try {
227
- const row = db.query("SELECT value FROM sdk_storage WHERE key = ?").get(key);
228
- if (!row || typeof row.value !== "string") return defaultValue;
229
- try {
230
- return JSON.parse(row.value);
231
- } catch (parseError) {
232
- if (typeof defaultValue === "string") {
233
- return row.value;
234
- }
235
- throw parseError;
236
- }
237
- } catch (error) {
238
- logger.error(`getItem failed for key "${key}":`, error);
239
- return defaultValue;
240
- }
241
- },
242
- async setItem(key, value) {
243
- try {
244
- db.query(
245
- "INSERT INTO sdk_storage (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value"
246
- ).run(key, JSON.stringify(value));
247
- } catch (error) {
248
- logger.error(`setItem failed for key "${key}":`, error);
249
- }
250
- },
251
- async removeItem(key) {
252
- try {
253
- db.query("DELETE FROM sdk_storage WHERE key = ?").run(key);
254
- } catch (error) {
255
- logger.error(`removeItem failed for key "${key}":`, error);
256
- }
257
- }
258
- };
259
- }
260
-
261
113
  // storage/drivers/indexedDB.ts
262
114
  var isBrowser = typeof indexedDB !== "undefined";
263
115
  var openDatabase = (dbName, storeName) => {
@@ -265,15 +117,32 @@ var openDatabase = (dbName, storeName) => {
265
117
  return Promise.reject(new Error("IndexedDB is not available"));
266
118
  }
267
119
  return new Promise((resolve, reject) => {
268
- const request = indexedDB.open(dbName, 1);
120
+ const request = indexedDB.open(dbName, 2);
269
121
  request.onupgradeneeded = () => {
270
122
  const db = request.result;
271
123
  if (!db.objectStoreNames.contains(storeName)) {
272
124
  db.createObjectStore(storeName);
273
125
  }
126
+ if (storeName !== "usage_tracking" && !db.objectStoreNames.contains("usage_tracking")) {
127
+ const utStore = db.createObjectStore("usage_tracking", { keyPath: "id" });
128
+ utStore.createIndex("timestamp", "timestamp", { unique: false });
129
+ utStore.createIndex("modelId", "modelId", { unique: false });
130
+ utStore.createIndex("baseUrl", "baseUrl", { unique: false });
131
+ utStore.createIndex("sessionId", "sessionId", { unique: false });
132
+ utStore.createIndex("client", "client", { unique: false });
133
+ }
134
+ if (storeName !== "sdk_storage" && !db.objectStoreNames.contains("sdk_storage")) {
135
+ db.createObjectStore("sdk_storage");
136
+ }
274
137
  };
275
138
  request.onsuccess = () => resolve(request.result);
276
139
  request.onerror = () => reject(request.error);
140
+ request.onblocked = () => {
141
+ console.warn(
142
+ `[IndexedDB driver] open blocked for "${dbName}" (store: "${storeName}") \u2014 close other tabs using this DB`
143
+ );
144
+ reject(new Error(`IndexedDB "${dbName}" blocked by another connection`));
145
+ };
277
146
  });
278
147
  };
279
148
  var createIndexedDBDriver = (options = {}) => {
@@ -386,9 +255,10 @@ var openDatabase2 = (dbName, storeName) => {
386
255
  return Promise.reject(new Error("IndexedDB is not available"));
387
256
  }
388
257
  return new Promise((resolve, reject) => {
389
- const request = indexedDB.open(dbName, 1);
258
+ const request = indexedDB.open(dbName, 3);
390
259
  request.onupgradeneeded = () => {
391
260
  const db = request.result;
261
+ const tx = request.transaction;
392
262
  if (!db.objectStoreNames.contains(storeName)) {
393
263
  const store = db.createObjectStore(storeName, { keyPath: "id" });
394
264
  store.createIndex("timestamp", "timestamp", { unique: false });
@@ -396,10 +266,25 @@ var openDatabase2 = (dbName, storeName) => {
396
266
  store.createIndex("baseUrl", "baseUrl", { unique: false });
397
267
  store.createIndex("sessionId", "sessionId", { unique: false });
398
268
  store.createIndex("client", "client", { unique: false });
269
+ store.createIndex("provider", "provider", { unique: false });
270
+ } else if (tx) {
271
+ const store = tx.objectStore(storeName);
272
+ if (!store.indexNames.contains("provider")) {
273
+ store.createIndex("provider", "provider", { unique: false });
274
+ }
275
+ }
276
+ if (storeName !== "sdk_storage" && !db.objectStoreNames.contains("sdk_storage")) {
277
+ db.createObjectStore("sdk_storage");
399
278
  }
400
279
  };
401
280
  request.onsuccess = () => resolve(request.result);
402
281
  request.onerror = () => reject(request.error);
282
+ request.onblocked = () => {
283
+ console.warn(
284
+ `[usageTracking IndexedDB] open blocked for "${dbName}" \u2014 close other tabs using this DB`
285
+ );
286
+ reject(new Error(`IndexedDB "${dbName}" blocked by another connection`));
287
+ };
403
288
  });
404
289
  };
405
290
  var matchesFilters = (entry, options = {}) => {
@@ -421,6 +306,9 @@ var matchesFilters = (entry, options = {}) => {
421
306
  if (options.client && entry.client !== options.client) {
422
307
  return false;
423
308
  }
309
+ if (options.provider && entry.provider !== options.provider) {
310
+ return false;
311
+ }
424
312
  return true;
425
313
  };
426
314
  var createIndexedDBUsageTrackingDriver = (options = {}) => {
@@ -552,393 +440,8 @@ var createIndexedDBUsageTrackingDriver = (options = {}) => {
552
440
  };
553
441
  };
554
442
 
555
- // storage/usageTracking/sqlite.ts
556
- var MIGRATION_MARKER_KEY2 = "usage_tracking_migration_v1";
557
- var normalizeBaseUrl2 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
558
- var isBun2 = () => {
559
- return typeof process.versions.bun !== "undefined";
560
- };
561
- var cachedDbModule2 = null;
562
- var loadDatabase2 = async (dbPath) => {
563
- if (isBun2()) {
564
- throw new Error(
565
- "SQLite driver not supported in Bun. Use createMemoryDriver() instead."
566
- );
567
- }
568
- try {
569
- if (!cachedDbModule2) {
570
- cachedDbModule2 = (await import('better-sqlite3')).default;
571
- }
572
- return new cachedDbModule2(dbPath);
573
- } catch (error) {
574
- throw new Error(
575
- `better-sqlite3 is required for sqlite usage tracking. Install it to use sqlite storage. (${error})`
576
- );
577
- }
578
- };
579
- var buildWhereClause = (options = {}) => {
580
- const clauses = [];
581
- const params = [];
582
- if (typeof options.before === "number") {
583
- clauses.push("timestamp < ?");
584
- params.push(options.before);
585
- }
586
- if (typeof options.after === "number") {
587
- clauses.push("timestamp > ?");
588
- params.push(options.after);
589
- }
590
- if (options.modelId) {
591
- clauses.push("model_id = ?");
592
- params.push(options.modelId);
593
- }
594
- if (options.baseUrl) {
595
- clauses.push("base_url = ?");
596
- params.push(normalizeBaseUrl2(options.baseUrl));
597
- }
598
- if (options.sessionId) {
599
- clauses.push("session_id = ?");
600
- params.push(options.sessionId);
601
- }
602
- if (options.client) {
603
- clauses.push("client = ?");
604
- params.push(options.client);
605
- }
606
- return {
607
- sql: clauses.length > 0 ? `WHERE ${clauses.join(" AND ")}` : "",
608
- params
609
- };
610
- };
611
- var createSqliteUsageTrackingDriver = (options = {}) => {
612
- const dbPath = options.dbPath || "routstr.sqlite";
613
- const tableName = options.tableName || "usage_tracking";
614
- const legacyStorageDriver = options.legacyStorageDriver;
615
- let db;
616
- let insertStmt;
617
- let migrationComplete = false;
618
- const initDb = async () => {
619
- if (!db) {
620
- db = await loadDatabase2(dbPath);
621
- db.exec(`
622
- CREATE TABLE IF NOT EXISTS ${tableName} (
623
- id TEXT PRIMARY KEY,
624
- timestamp INTEGER NOT NULL,
625
- model_id TEXT NOT NULL,
626
- base_url TEXT NOT NULL,
627
- request_id TEXT NOT NULL,
628
- cost REAL NOT NULL,
629
- sats_cost REAL NOT NULL,
630
- prompt_tokens INTEGER NOT NULL,
631
- completion_tokens INTEGER NOT NULL,
632
- total_tokens INTEGER NOT NULL,
633
- client TEXT,
634
- session_id TEXT,
635
- tags TEXT
636
- );
637
- CREATE INDEX IF NOT EXISTS idx_${tableName}_timestamp ON ${tableName}(timestamp);
638
- CREATE INDEX IF NOT EXISTS idx_${tableName}_model_id ON ${tableName}(model_id);
639
- CREATE INDEX IF NOT EXISTS idx_${tableName}_base_url ON ${tableName}(base_url);
640
- CREATE INDEX IF NOT EXISTS idx_${tableName}_session_id ON ${tableName}(session_id);
641
- CREATE INDEX IF NOT EXISTS idx_${tableName}_client ON ${tableName}(client);
642
- `);
643
- insertStmt = db.prepare(`
644
- INSERT OR REPLACE INTO ${tableName} (
645
- id, timestamp, model_id, base_url, request_id,
646
- cost, sats_cost, prompt_tokens, completion_tokens, total_tokens,
647
- client, session_id, tags
648
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
649
- `);
650
- }
651
- };
652
- const ensureInit = async () => {
653
- if (!db) {
654
- await initDb();
655
- }
656
- };
657
- const appendOne = (entry) => {
658
- insertStmt.run(
659
- entry.id,
660
- entry.timestamp,
661
- entry.modelId,
662
- normalizeBaseUrl2(entry.baseUrl),
663
- entry.requestId,
664
- entry.cost,
665
- entry.satsCost,
666
- entry.promptTokens,
667
- entry.completionTokens,
668
- entry.totalTokens,
669
- entry.client ?? null,
670
- entry.sessionId ?? null,
671
- JSON.stringify(entry.tags ?? [])
672
- );
673
- };
674
- const ensureMigrated = async () => {
675
- if (!legacyStorageDriver || migrationComplete) return;
676
- const migrated = await legacyStorageDriver.getItem(
677
- MIGRATION_MARKER_KEY2,
678
- false
679
- );
680
- if (migrated) {
681
- migrationComplete = true;
682
- return;
683
- }
684
- const legacyEntries = await legacyStorageDriver.getItem(
685
- SDK_STORAGE_KEYS.USAGE_TRACKING,
686
- []
687
- );
688
- for (const entry of legacyEntries) {
689
- appendOne(entry);
690
- }
691
- if (legacyEntries.length > 0) {
692
- await legacyStorageDriver.removeItem(SDK_STORAGE_KEYS.USAGE_TRACKING);
693
- }
694
- await legacyStorageDriver.setItem(MIGRATION_MARKER_KEY2, true);
695
- migrationComplete = true;
696
- };
697
- const mapRow = (row) => ({
698
- id: row.id,
699
- timestamp: row.timestamp,
700
- modelId: row.model_id,
701
- baseUrl: row.base_url,
702
- requestId: row.request_id,
703
- cost: row.cost,
704
- satsCost: row.sats_cost,
705
- promptTokens: row.prompt_tokens,
706
- completionTokens: row.completion_tokens,
707
- totalTokens: row.total_tokens,
708
- client: row.client ?? void 0,
709
- sessionId: row.session_id ?? void 0,
710
- tags: typeof row.tags === "string" ? JSON.parse(row.tags) : void 0
711
- });
712
- return {
713
- async migrate() {
714
- await ensureInit();
715
- await ensureMigrated();
716
- },
717
- async append(entry) {
718
- await ensureInit();
719
- await ensureMigrated();
720
- appendOne(entry);
721
- },
722
- async appendMany(entries) {
723
- await ensureInit();
724
- await ensureMigrated();
725
- for (const entry of entries) {
726
- appendOne(entry);
727
- }
728
- },
729
- async list(options2 = {}) {
730
- await ensureInit();
731
- await ensureMigrated();
732
- const { sql, params } = buildWhereClause(options2);
733
- const limitSql = typeof options2.limit === "number" ? " LIMIT ?" : "";
734
- const stmt = db.prepare(
735
- `SELECT * FROM ${tableName} ${sql} ORDER BY timestamp DESC${limitSql}`
736
- );
737
- const rows = stmt.all(
738
- ...typeof options2.limit === "number" ? [...params, options2.limit] : params
739
- );
740
- return rows.map(mapRow);
741
- },
742
- async count(options2 = {}) {
743
- await ensureInit();
744
- await ensureMigrated();
745
- const { sql, params } = buildWhereClause(options2);
746
- const stmt = db.prepare(`SELECT COUNT(*) as count FROM ${tableName} ${sql}`);
747
- const row = stmt.get(...params);
748
- return Number(row?.count ?? 0);
749
- },
750
- async deleteOlderThan(timestamp) {
751
- await ensureInit();
752
- await ensureMigrated();
753
- const stmt = db.prepare(`DELETE FROM ${tableName} WHERE timestamp < ?`);
754
- const result = stmt.run(timestamp);
755
- return result.changes;
756
- },
757
- async clear() {
758
- await ensureInit();
759
- await ensureMigrated();
760
- db.prepare(`DELETE FROM ${tableName}`).run();
761
- }
762
- };
763
- };
764
-
765
- // storage/usageTracking/bunSqlite.ts
766
- var MIGRATION_MARKER_KEY3 = "usage_tracking_migration_v1";
767
- var normalizeBaseUrl3 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
768
- var buildWhereClause2 = (options = {}) => {
769
- const clauses = [];
770
- const params = [];
771
- if (typeof options.before === "number") {
772
- clauses.push("timestamp < ?");
773
- params.push(options.before);
774
- }
775
- if (typeof options.after === "number") {
776
- clauses.push("timestamp > ?");
777
- params.push(options.after);
778
- }
779
- if (options.modelId) {
780
- clauses.push("model_id = ?");
781
- params.push(options.modelId);
782
- }
783
- if (options.baseUrl) {
784
- clauses.push("base_url = ?");
785
- params.push(normalizeBaseUrl3(options.baseUrl));
786
- }
787
- if (options.sessionId) {
788
- clauses.push("session_id = ?");
789
- params.push(options.sessionId);
790
- }
791
- if (options.client) {
792
- clauses.push("client = ?");
793
- params.push(options.client);
794
- }
795
- return {
796
- sql: clauses.length > 0 ? `WHERE ${clauses.join(" AND ")}` : "",
797
- params
798
- };
799
- };
800
- var createBunSqliteUsageTrackingDriver = (options = {}) => {
801
- const dbPath = options.dbPath || "routstr.sqlite";
802
- const tableName = options.tableName || "usage_tracking";
803
- const legacyStorageDriver = options.legacyStorageDriver;
804
- const SQLiteDatabase = options.sqlite?.Database;
805
- let migrationPromise = null;
806
- if (!SQLiteDatabase) {
807
- throw new Error(
808
- "Bun SQLite Database constructor is required. Pass { sqlite: { Database } } when creating the driver."
809
- );
810
- }
811
- const db = new SQLiteDatabase(dbPath);
812
- db.run(`
813
- CREATE TABLE IF NOT EXISTS ${tableName} (
814
- id TEXT PRIMARY KEY,
815
- timestamp INTEGER NOT NULL,
816
- model_id TEXT NOT NULL,
817
- base_url TEXT NOT NULL,
818
- request_id TEXT NOT NULL,
819
- cost REAL NOT NULL,
820
- sats_cost REAL NOT NULL,
821
- prompt_tokens INTEGER NOT NULL,
822
- completion_tokens INTEGER NOT NULL,
823
- total_tokens INTEGER NOT NULL,
824
- client TEXT,
825
- session_id TEXT,
826
- tags TEXT
827
- )
828
- `);
829
- db.run(`CREATE INDEX IF NOT EXISTS idx_${tableName}_timestamp ON ${tableName}(timestamp)`);
830
- db.run(`CREATE INDEX IF NOT EXISTS idx_${tableName}_model_id ON ${tableName}(model_id)`);
831
- db.run(`CREATE INDEX IF NOT EXISTS idx_${tableName}_base_url ON ${tableName}(base_url)`);
832
- const appendOne = (entry) => {
833
- db.query(`
834
- INSERT OR REPLACE INTO ${tableName} (
835
- id, timestamp, model_id, base_url, request_id,
836
- cost, sats_cost, prompt_tokens, completion_tokens, total_tokens,
837
- client, session_id, tags
838
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
839
- `).run(
840
- entry.id,
841
- entry.timestamp,
842
- entry.modelId,
843
- normalizeBaseUrl3(entry.baseUrl),
844
- entry.requestId,
845
- entry.cost,
846
- entry.satsCost,
847
- entry.promptTokens,
848
- entry.completionTokens,
849
- entry.totalTokens,
850
- entry.client ?? null,
851
- entry.sessionId ?? null,
852
- JSON.stringify(entry.tags ?? [])
853
- );
854
- };
855
- const mapRow = (row) => ({
856
- id: row.id,
857
- timestamp: row.timestamp,
858
- modelId: row.model_id,
859
- baseUrl: row.base_url,
860
- requestId: row.request_id,
861
- cost: row.cost,
862
- satsCost: row.sats_cost,
863
- promptTokens: row.prompt_tokens,
864
- completionTokens: row.completion_tokens,
865
- totalTokens: row.total_tokens,
866
- client: row.client ?? void 0,
867
- sessionId: row.session_id ?? void 0,
868
- tags: typeof row.tags === "string" ? JSON.parse(row.tags) : void 0
869
- });
870
- const ensureMigrated = async () => {
871
- if (!legacyStorageDriver) return;
872
- if (!migrationPromise) {
873
- migrationPromise = (async () => {
874
- const migrated = await legacyStorageDriver.getItem(
875
- MIGRATION_MARKER_KEY3,
876
- false
877
- );
878
- if (migrated) return;
879
- const legacyEntries = await legacyStorageDriver.getItem(
880
- SDK_STORAGE_KEYS.USAGE_TRACKING,
881
- []
882
- );
883
- if (legacyEntries.length > 0) {
884
- for (const entry of legacyEntries) {
885
- appendOne(entry);
886
- }
887
- await legacyStorageDriver.removeItem(SDK_STORAGE_KEYS.USAGE_TRACKING);
888
- }
889
- await legacyStorageDriver.setItem(MIGRATION_MARKER_KEY3, true);
890
- })();
891
- }
892
- await migrationPromise;
893
- };
894
- return {
895
- async migrate() {
896
- await ensureMigrated();
897
- },
898
- async append(entry) {
899
- await ensureMigrated();
900
- appendOne(entry);
901
- },
902
- async appendMany(entries) {
903
- await ensureMigrated();
904
- for (const entry of entries) {
905
- appendOne(entry);
906
- }
907
- },
908
- async list(options2 = {}) {
909
- await ensureMigrated();
910
- const { sql, params } = buildWhereClause2(options2);
911
- const limitSql = typeof options2.limit === "number" ? " LIMIT ?" : "";
912
- const query = `SELECT * FROM ${tableName} ${sql} ORDER BY timestamp DESC${limitSql}`;
913
- let rows;
914
- if (typeof options2.limit === "number") {
915
- rows = db.query(query).all(...params, options2.limit);
916
- } else {
917
- rows = db.query(query).all(...params);
918
- }
919
- return rows.map(mapRow);
920
- },
921
- async count(options2 = {}) {
922
- const { sql, params } = buildWhereClause2(options2);
923
- const query = `SELECT COUNT(*) as count FROM ${tableName} ${sql}`;
924
- const row = db.query(query).get(...params);
925
- return Number(row?.count ?? 0);
926
- },
927
- async deleteOlderThan(timestamp) {
928
- await ensureMigrated();
929
- const before = timestamp;
930
- const result = db.query(`DELETE FROM ${tableName} WHERE timestamp < ?`).run(before);
931
- return result.changes ?? 0;
932
- },
933
- async clear() {
934
- await ensureMigrated();
935
- db.query(`DELETE FROM ${tableName}`).run();
936
- }
937
- };
938
- };
939
-
940
443
  // storage/usageTracking/memory.ts
941
- var normalizeBaseUrl4 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
444
+ var normalizeBaseUrl2 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
942
445
  var matchesFilters2 = (entry, options = {}) => {
943
446
  if (typeof options.before === "number" && entry.timestamp >= options.before) {
944
447
  return false;
@@ -949,7 +452,7 @@ var matchesFilters2 = (entry, options = {}) => {
949
452
  if (options.modelId && entry.modelId !== options.modelId) {
950
453
  return false;
951
454
  }
952
- if (options.baseUrl && normalizeBaseUrl4(entry.baseUrl) !== normalizeBaseUrl4(options.baseUrl)) {
455
+ if (options.baseUrl && normalizeBaseUrl2(entry.baseUrl) !== normalizeBaseUrl2(options.baseUrl)) {
953
456
  return false;
954
457
  }
955
458
  if (options.sessionId && entry.sessionId !== options.sessionId) {
@@ -958,23 +461,26 @@ var matchesFilters2 = (entry, options = {}) => {
958
461
  if (options.client && entry.client !== options.client) {
959
462
  return false;
960
463
  }
464
+ if (options.provider && entry.provider !== options.provider) {
465
+ return false;
466
+ }
961
467
  return true;
962
468
  };
963
469
  var createMemoryUsageTrackingDriver = (seed = []) => {
964
470
  const store = /* @__PURE__ */ new Map();
965
471
  for (const entry of seed) {
966
- store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl4(entry.baseUrl) });
472
+ store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl2(entry.baseUrl) });
967
473
  }
968
474
  return {
969
475
  async migrate() {
970
476
  return;
971
477
  },
972
478
  async append(entry) {
973
- store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl4(entry.baseUrl) });
479
+ store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl2(entry.baseUrl) });
974
480
  },
975
481
  async appendMany(entries) {
976
482
  for (const entry of entries) {
977
- store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl4(entry.baseUrl) });
483
+ store.set(entry.id, { ...entry, baseUrl: normalizeBaseUrl2(entry.baseUrl) });
978
484
  }
979
485
  },
980
486
  async list(options = {}) {
@@ -1002,7 +508,22 @@ var createMemoryUsageTrackingDriver = (seed = []) => {
1002
508
  }
1003
509
  };
1004
510
  };
1005
- var normalizeBaseUrl5 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
511
+
512
+ // core/types.ts
513
+ function makeConsoleLogger(prefix) {
514
+ const fmt = (args) => prefix ? [prefix, ...args] : args;
515
+ return {
516
+ log: (...args) => console.log(...fmt(args)),
517
+ warn: (...args) => console.warn(...fmt(args)),
518
+ error: (...args) => console.error(...fmt(args)),
519
+ debug: (...args) => console.log(...fmt(args)),
520
+ child: (p) => makeConsoleLogger(prefix ? `${prefix}:${p}` : p)
521
+ };
522
+ }
523
+ var consoleLogger = makeConsoleLogger();
524
+
525
+ // storage/store.ts
526
+ var normalizeBaseUrl3 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1006
527
  var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1007
528
  modelsFromAllProviders: {},
1008
529
  lastUsedModel: null,
@@ -1025,7 +546,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1025
546
  setModelsFromAllProviders: (value) => {
1026
547
  const normalized = {};
1027
548
  for (const [baseUrl, models] of Object.entries(value)) {
1028
- normalized[normalizeBaseUrl5(baseUrl)] = models;
549
+ normalized[normalizeBaseUrl3(baseUrl)] = models;
1029
550
  }
1030
551
  void driver.setItem(
1031
552
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -1038,7 +559,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1038
559
  set({ lastUsedModel: value });
1039
560
  },
1040
561
  setBaseUrlsList: (value) => {
1041
- const normalized = value.map((url) => normalizeBaseUrl5(url));
562
+ const normalized = value.map((url) => normalizeBaseUrl3(url));
1042
563
  void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
1043
564
  set({ baseUrlsList: normalized });
1044
565
  },
@@ -1047,14 +568,14 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1047
568
  set({ lastBaseUrlsUpdate: value });
1048
569
  },
1049
570
  setDisabledProviders: (value) => {
1050
- const normalized = value.map((url) => normalizeBaseUrl5(url));
571
+ const normalized = value.map((url) => normalizeBaseUrl3(url));
1051
572
  void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
1052
573
  set({ disabledProviders: normalized });
1053
574
  },
1054
575
  setMintsFromAllProviders: (value) => {
1055
576
  const normalized = {};
1056
577
  for (const [baseUrl, mints] of Object.entries(value)) {
1057
- normalized[normalizeBaseUrl5(baseUrl)] = mints.map(
578
+ normalized[normalizeBaseUrl3(baseUrl)] = mints.map(
1058
579
  (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
1059
580
  );
1060
581
  }
@@ -1067,7 +588,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1067
588
  setInfoFromAllProviders: (value) => {
1068
589
  const normalized = {};
1069
590
  for (const [baseUrl, info] of Object.entries(value)) {
1070
- normalized[normalizeBaseUrl5(baseUrl)] = info;
591
+ normalized[normalizeBaseUrl3(baseUrl)] = info;
1071
592
  }
1072
593
  void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
1073
594
  set({ infoFromAllProviders: normalized });
@@ -1075,7 +596,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1075
596
  setLastModelsUpdate: (value) => {
1076
597
  const normalized = {};
1077
598
  for (const [baseUrl, timestamp] of Object.entries(value)) {
1078
- normalized[normalizeBaseUrl5(baseUrl)] = timestamp;
599
+ normalized[normalizeBaseUrl3(baseUrl)] = timestamp;
1079
600
  }
1080
601
  void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
1081
602
  set({ lastModelsUpdate: normalized });
@@ -1085,7 +606,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1085
606
  const updates = typeof value === "function" ? value(state.apiKeys) : value;
1086
607
  const normalized = updates.map((entry) => ({
1087
608
  ...entry,
1088
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
609
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1089
610
  balance: entry.balance ?? 0,
1090
611
  lastUsed: entry.lastUsed ?? null
1091
612
  }));
@@ -1097,7 +618,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1097
618
  set((state) => {
1098
619
  const updates = typeof value === "function" ? value(state.childKeys) : value;
1099
620
  const normalized = updates.map((entry) => ({
1100
- parentBaseUrl: normalizeBaseUrl5(entry.parentBaseUrl),
621
+ parentBaseUrl: normalizeBaseUrl3(entry.parentBaseUrl),
1101
622
  childKey: entry.childKey,
1102
623
  balance: entry.balance ?? 0,
1103
624
  balanceLimit: entry.balanceLimit,
@@ -1111,9 +632,9 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1111
632
  setXcashuTokens: (value) => {
1112
633
  const normalized = {};
1113
634
  for (const [baseUrl, tokens] of Object.entries(value)) {
1114
- normalized[normalizeBaseUrl5(baseUrl)] = tokens.map((entry) => ({
635
+ normalized[normalizeBaseUrl3(baseUrl)] = tokens.map((entry) => ({
1115
636
  ...entry,
1116
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
637
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1117
638
  createdAt: entry.createdAt ?? Date.now(),
1118
639
  tryCount: entry.tryCount ?? 0
1119
640
  }));
@@ -1164,12 +685,12 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1164
685
  },
1165
686
  // ========== Failure Tracking ==========
1166
687
  setFailedProviders: (value) => {
1167
- const normalized = value.map((url) => normalizeBaseUrl5(url));
688
+ const normalized = value.map((url) => normalizeBaseUrl3(url));
1168
689
  void driver.setItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, normalized);
1169
690
  set({ failedProviders: normalized });
1170
691
  },
1171
692
  addFailedProvider: (baseUrl) => {
1172
- const normalized = normalizeBaseUrl5(baseUrl);
693
+ const normalized = normalizeBaseUrl3(baseUrl);
1173
694
  const current = get().failedProviders;
1174
695
  if (!current.includes(normalized)) {
1175
696
  const updated = [...current, normalized];
@@ -1178,7 +699,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1178
699
  }
1179
700
  },
1180
701
  removeFailedProvider: (baseUrl) => {
1181
- const normalized = normalizeBaseUrl5(baseUrl);
702
+ const normalized = normalizeBaseUrl3(baseUrl);
1182
703
  const current = get().failedProviders;
1183
704
  const updated = current.filter((url) => url !== normalized);
1184
705
  void driver.setItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, updated);
@@ -1187,13 +708,13 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1187
708
  setLastFailed: (value) => {
1188
709
  const normalized = {};
1189
710
  for (const [baseUrl, timestamp] of Object.entries(value)) {
1190
- normalized[normalizeBaseUrl5(baseUrl)] = timestamp;
711
+ normalized[normalizeBaseUrl3(baseUrl)] = timestamp;
1191
712
  }
1192
713
  void driver.setItem(SDK_STORAGE_KEYS.LAST_FAILED, normalized);
1193
714
  set({ lastFailed: normalized });
1194
715
  },
1195
716
  setLastFailedTimestamp: (baseUrl, timestamp) => {
1196
- const normalized = normalizeBaseUrl5(baseUrl);
717
+ const normalized = normalizeBaseUrl3(baseUrl);
1197
718
  const current = get().lastFailed;
1198
719
  const updated = { ...current, [normalized]: timestamp };
1199
720
  void driver.setItem(SDK_STORAGE_KEYS.LAST_FAILED, updated);
@@ -1201,14 +722,14 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1201
722
  },
1202
723
  setProvidersOnCooldown: (value) => {
1203
724
  const normalized = value.map((entry) => ({
1204
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
725
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1205
726
  timestamp: entry.timestamp
1206
727
  }));
1207
728
  void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, normalized);
1208
729
  set({ providersOnCooldown: normalized });
1209
730
  },
1210
731
  addProviderOnCooldown: (baseUrl, timestamp) => {
1211
- const normalized = normalizeBaseUrl5(baseUrl);
732
+ const normalized = normalizeBaseUrl3(baseUrl);
1212
733
  const current = get().providersOnCooldown;
1213
734
  if (!current.some((entry) => entry.baseUrl === normalized)) {
1214
735
  const updated = [...current, { baseUrl: normalized, timestamp }];
@@ -1217,7 +738,7 @@ var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
1217
738
  }
1218
739
  },
1219
740
  removeProviderFromCooldown: (baseUrl) => {
1220
- const normalized = normalizeBaseUrl5(baseUrl);
741
+ const normalized = normalizeBaseUrl3(baseUrl);
1221
742
  const current = get().providersOnCooldown;
1222
743
  const updated = current.filter((entry) => entry.baseUrl !== normalized);
1223
744
  void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, updated);
@@ -1288,40 +809,40 @@ var hydrateStoreFromDriver = async (store, driver) => {
1288
809
  ]);
1289
810
  const modelsFromAllProviders = Object.fromEntries(
1290
811
  Object.entries(rawModels).map(([baseUrl, models]) => [
1291
- normalizeBaseUrl5(baseUrl),
812
+ normalizeBaseUrl3(baseUrl),
1292
813
  models
1293
814
  ])
1294
815
  );
1295
- const baseUrlsList = rawBaseUrls.map((url) => normalizeBaseUrl5(url));
816
+ const baseUrlsList = rawBaseUrls.map((url) => normalizeBaseUrl3(url));
1296
817
  const disabledProviders = rawDisabledProviders.map(
1297
- (url) => normalizeBaseUrl5(url)
818
+ (url) => normalizeBaseUrl3(url)
1298
819
  );
1299
820
  const mintsFromAllProviders = Object.fromEntries(
1300
821
  Object.entries(rawMints).map(([baseUrl, mints]) => [
1301
- normalizeBaseUrl5(baseUrl),
822
+ normalizeBaseUrl3(baseUrl),
1302
823
  mints.map((mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint)
1303
824
  ])
1304
825
  );
1305
826
  const infoFromAllProviders = Object.fromEntries(
1306
827
  Object.entries(rawInfo).map(([baseUrl, info]) => [
1307
- normalizeBaseUrl5(baseUrl),
828
+ normalizeBaseUrl3(baseUrl),
1308
829
  info
1309
830
  ])
1310
831
  );
1311
832
  const lastModelsUpdate = Object.fromEntries(
1312
833
  Object.entries(rawLastModelsUpdate).map(([baseUrl, timestamp]) => [
1313
- normalizeBaseUrl5(baseUrl),
834
+ normalizeBaseUrl3(baseUrl),
1314
835
  timestamp
1315
836
  ])
1316
837
  );
1317
838
  const apiKeys = rawApiKeys.map((entry) => ({
1318
839
  ...entry,
1319
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
840
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1320
841
  balance: entry.balance ?? 0,
1321
842
  lastUsed: entry.lastUsed ?? null
1322
843
  }));
1323
844
  const childKeys = rawChildKeys.map((entry) => ({
1324
- parentBaseUrl: normalizeBaseUrl5(entry.parentBaseUrl),
845
+ parentBaseUrl: normalizeBaseUrl3(entry.parentBaseUrl),
1325
846
  childKey: entry.childKey,
1326
847
  balance: entry.balance ?? 0,
1327
848
  balanceLimit: entry.balanceLimit,
@@ -1330,9 +851,9 @@ var hydrateStoreFromDriver = async (store, driver) => {
1330
851
  }));
1331
852
  const xcashuTokens = Object.fromEntries(
1332
853
  Object.entries(rawXcashuTokens).map(([baseUrl, tokens]) => [
1333
- normalizeBaseUrl5(baseUrl),
854
+ normalizeBaseUrl3(baseUrl),
1334
855
  tokens.map((entry) => ({
1335
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
856
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1336
857
  token: entry.token,
1337
858
  createdAt: entry.createdAt ?? Date.now(),
1338
859
  tryCount: entry.tryCount ?? 0
@@ -1353,16 +874,16 @@ var hydrateStoreFromDriver = async (store, driver) => {
1353
874
  lastUsed: entry.lastUsed ?? null
1354
875
  }));
1355
876
  const failedProviders = rawFailedProviders.map(
1356
- (url) => normalizeBaseUrl5(url)
877
+ (url) => normalizeBaseUrl3(url)
1357
878
  );
1358
879
  const lastFailed = Object.fromEntries(
1359
880
  Object.entries(rawLastFailed).map(([baseUrl, timestamp]) => [
1360
- normalizeBaseUrl5(baseUrl),
881
+ normalizeBaseUrl3(baseUrl),
1361
882
  timestamp
1362
883
  ])
1363
884
  );
1364
885
  const providersOnCooldown = rawProvidersOnCooldown.map((entry) => ({
1365
- baseUrl: normalizeBaseUrl5(entry.baseUrl),
886
+ baseUrl: normalizeBaseUrl3(entry.baseUrl),
1366
887
  timestamp: entry.timestamp
1367
888
  }));
1368
889
  store.setState({
@@ -1403,12 +924,12 @@ var createDiscoveryAdapterFromStore = (store) => ({
1403
924
  getCachedProviderInfo: () => store.getState().infoFromAllProviders,
1404
925
  setCachedProviderInfo: (info) => store.getState().setInfoFromAllProviders(info),
1405
926
  getProviderLastUpdate: (baseUrl) => {
1406
- const normalized = normalizeBaseUrl5(baseUrl);
927
+ const normalized = normalizeBaseUrl3(baseUrl);
1407
928
  const timestamps = store.getState().lastModelsUpdate;
1408
929
  return timestamps[normalized] || null;
1409
930
  },
1410
931
  setProviderLastUpdate: (baseUrl, timestamp) => {
1411
- const normalized = normalizeBaseUrl5(baseUrl);
932
+ const normalized = normalizeBaseUrl3(baseUrl);
1412
933
  const timestamps = { ...store.getState().lastModelsUpdate };
1413
934
  timestamps[normalized] = timestamp;
1414
935
  store.getState().setLastModelsUpdate(timestamps);
@@ -1437,24 +958,24 @@ var createStorageAdapterFromStore = (store) => ({
1437
958
  return Object.entries(distributionMap).map(([baseUrl, amt]) => ({ baseUrl, amount: amt })).sort((a, b) => b.amount - a.amount);
1438
959
  },
1439
960
  saveProviderInfo: (baseUrl, info) => {
1440
- const normalized = normalizeBaseUrl5(baseUrl);
961
+ const normalized = normalizeBaseUrl3(baseUrl);
1441
962
  const next = { ...store.getState().infoFromAllProviders };
1442
963
  next[normalized] = info;
1443
964
  store.getState().setInfoFromAllProviders(next);
1444
965
  },
1445
966
  getProviderInfo: (baseUrl) => {
1446
- const normalized = normalizeBaseUrl5(baseUrl);
967
+ const normalized = normalizeBaseUrl3(baseUrl);
1447
968
  return store.getState().infoFromAllProviders[normalized] || null;
1448
969
  },
1449
970
  // ========== API Keys (for apikeys mode) ==========
1450
971
  getApiKey: (baseUrl) => {
1451
- const normalized = normalizeBaseUrl5(baseUrl);
972
+ const normalized = normalizeBaseUrl3(baseUrl);
1452
973
  const entry = store.getState().apiKeys.find((key) => key.baseUrl === normalized);
1453
974
  if (!entry) return null;
1454
975
  return entry;
1455
976
  },
1456
977
  setApiKey: (baseUrl, key) => {
1457
- const normalized = normalizeBaseUrl5(baseUrl);
978
+ const normalized = normalizeBaseUrl3(baseUrl);
1458
979
  const keys = store.getState().apiKeys;
1459
980
  const existingIndex = keys.findIndex(
1460
981
  (entry) => entry.baseUrl === normalized
@@ -1472,7 +993,7 @@ var createStorageAdapterFromStore = (store) => ({
1472
993
  store.getState().setApiKeys(next);
1473
994
  },
1474
995
  updateApiKeyBalance: (baseUrl, balance) => {
1475
- const normalized = normalizeBaseUrl5(baseUrl);
996
+ const normalized = normalizeBaseUrl3(baseUrl);
1476
997
  const keys = store.getState().apiKeys;
1477
998
  const next = keys.map(
1478
999
  (entry) => entry.baseUrl === normalized ? { ...entry, balance, lastUsed: Date.now() } : entry
@@ -1480,7 +1001,7 @@ var createStorageAdapterFromStore = (store) => ({
1480
1001
  store.getState().setApiKeys(next);
1481
1002
  },
1482
1003
  removeApiKey: (baseUrl) => {
1483
- const normalized = normalizeBaseUrl5(baseUrl);
1004
+ const normalized = normalizeBaseUrl3(baseUrl);
1484
1005
  const next = store.getState().apiKeys.filter((entry) => entry.baseUrl !== normalized);
1485
1006
  store.getState().setApiKeys(next);
1486
1007
  },
@@ -1494,7 +1015,7 @@ var createStorageAdapterFromStore = (store) => ({
1494
1015
  },
1495
1016
  // ========== Child Keys ==========
1496
1017
  getChildKey: (parentBaseUrl) => {
1497
- const normalized = normalizeBaseUrl5(parentBaseUrl);
1018
+ const normalized = normalizeBaseUrl3(parentBaseUrl);
1498
1019
  const entry = store.getState().childKeys.find((key) => key.parentBaseUrl === normalized);
1499
1020
  if (!entry) return null;
1500
1021
  return {
@@ -1507,7 +1028,7 @@ var createStorageAdapterFromStore = (store) => ({
1507
1028
  };
1508
1029
  },
1509
1030
  setChildKey: (parentBaseUrl, childKey, balance, validityDate, balanceLimit) => {
1510
- const normalized = normalizeBaseUrl5(parentBaseUrl);
1031
+ const normalized = normalizeBaseUrl3(parentBaseUrl);
1511
1032
  const keys = store.getState().childKeys;
1512
1033
  const existingIndex = keys.findIndex(
1513
1034
  (entry) => entry.parentBaseUrl === normalized
@@ -1538,7 +1059,7 @@ var createStorageAdapterFromStore = (store) => ({
1538
1059
  }
1539
1060
  },
1540
1061
  updateChildKeyBalance: (parentBaseUrl, balance) => {
1541
- const normalized = normalizeBaseUrl5(parentBaseUrl);
1062
+ const normalized = normalizeBaseUrl3(parentBaseUrl);
1542
1063
  const keys = store.getState().childKeys;
1543
1064
  const next = keys.map(
1544
1065
  (entry) => entry.parentBaseUrl === normalized ? { ...entry, balance } : entry
@@ -1546,7 +1067,7 @@ var createStorageAdapterFromStore = (store) => ({
1546
1067
  store.getState().setChildKeys(next);
1547
1068
  },
1548
1069
  removeChildKey: (parentBaseUrl) => {
1549
- const normalized = normalizeBaseUrl5(parentBaseUrl);
1070
+ const normalized = normalizeBaseUrl3(parentBaseUrl);
1550
1071
  const next = store.getState().childKeys.filter((entry) => entry.parentBaseUrl !== normalized);
1551
1072
  store.getState().setChildKeys(next);
1552
1073
  },
@@ -1571,11 +1092,11 @@ var createStorageAdapterFromStore = (store) => ({
1571
1092
  return store.getState().xcashuTokens;
1572
1093
  },
1573
1094
  getXcashuTokensForBaseUrl: (baseUrl) => {
1574
- const normalized = normalizeBaseUrl5(baseUrl);
1095
+ const normalized = normalizeBaseUrl3(baseUrl);
1575
1096
  return store.getState().xcashuTokens[normalized] || [];
1576
1097
  },
1577
1098
  addXcashuToken: (baseUrl, token) => {
1578
- const normalized = normalizeBaseUrl5(baseUrl);
1099
+ const normalized = normalizeBaseUrl3(baseUrl);
1579
1100
  const tokens = store.getState().xcashuTokens;
1580
1101
  const existing = tokens[normalized] || [];
1581
1102
  const next = { ...tokens };
@@ -1586,7 +1107,7 @@ var createStorageAdapterFromStore = (store) => ({
1586
1107
  store.getState().setXcashuTokens(next);
1587
1108
  },
1588
1109
  removeXcashuToken: (baseUrl, token) => {
1589
- const normalized = normalizeBaseUrl5(baseUrl);
1110
+ const normalized = normalizeBaseUrl3(baseUrl);
1590
1111
  const tokens = store.getState().xcashuTokens;
1591
1112
  const existing = tokens[normalized] || [];
1592
1113
  const next = { ...tokens };
@@ -1597,7 +1118,7 @@ var createStorageAdapterFromStore = (store) => ({
1597
1118
  store.getState().setXcashuTokens(next);
1598
1119
  },
1599
1120
  clearXcashuTokensForBaseUrl: (baseUrl) => {
1600
- const normalized = normalizeBaseUrl5(baseUrl);
1121
+ const normalized = normalizeBaseUrl3(baseUrl);
1601
1122
  const tokens = store.getState().xcashuTokens;
1602
1123
  const next = { ...tokens };
1603
1124
  delete next[normalized];
@@ -1611,16 +1132,16 @@ var createProviderRegistryFromStore = (store, logger) => {
1611
1132
  const log = (logger ?? consoleLogger).child("ProviderRegistry");
1612
1133
  return {
1613
1134
  getModelsForProvider: (baseUrl) => {
1614
- const normalized = normalizeBaseUrl5(baseUrl);
1135
+ const normalized = normalizeBaseUrl3(baseUrl);
1615
1136
  return store.getState().modelsFromAllProviders[normalized] || [];
1616
1137
  },
1617
1138
  getDisabledProviders: () => store.getState().disabledProviders,
1618
1139
  getProviderMints: (baseUrl) => {
1619
- const normalized = normalizeBaseUrl5(baseUrl);
1140
+ const normalized = normalizeBaseUrl3(baseUrl);
1620
1141
  return store.getState().mintsFromAllProviders[normalized] || [];
1621
1142
  },
1622
1143
  getProviderInfo: async (baseUrl) => {
1623
- const normalized = normalizeBaseUrl5(baseUrl);
1144
+ const normalized = normalizeBaseUrl3(baseUrl);
1624
1145
  const cached = store.getState().infoFromAllProviders[normalized];
1625
1146
  if (cached) return cached;
1626
1147
  try {
@@ -1646,11 +1167,11 @@ var createProviderRegistryFromStore = (store, logger) => {
1646
1167
  var MODEL_KEY_PREFIX = "models:provider:";
1647
1168
  var MODEL_TS_KEY_PREFIX = "models:provider_timestamp:";
1648
1169
  var PROVIDER_INDEX_KEY = "models:provider_index";
1649
- var MIGRATION_MARKER_KEY4 = "models_sharded_migration_v1";
1170
+ var MIGRATION_MARKER_KEY2 = "models_sharded_migration_v1";
1650
1171
  var encodeBaseUrl = (baseUrl) => encodeURIComponent(baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`);
1651
1172
  var modelKey = (baseUrl) => `${MODEL_KEY_PREFIX}${encodeBaseUrl(baseUrl)}`;
1652
1173
  var modelTsKey = (baseUrl) => `${MODEL_TS_KEY_PREFIX}${encodeBaseUrl(baseUrl)}`;
1653
- var normalizeBaseUrl6 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1174
+ var normalizeBaseUrl4 = (baseUrl) => baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1654
1175
  var createShardedDiscoveryAdapter = async (options) => {
1655
1176
  const { driver } = options;
1656
1177
  const legacyModels = await driver.getItem(SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS, {});
@@ -1658,7 +1179,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1658
1179
  if (Object.keys(legacyModels).length > 0) {
1659
1180
  const migratedProviders = [];
1660
1181
  for (const [baseUrl, models] of Object.entries(legacyModels)) {
1661
- const normalized = normalizeBaseUrl6(baseUrl);
1182
+ const normalized = normalizeBaseUrl4(baseUrl);
1662
1183
  await driver.setItem(modelKey(normalized), models);
1663
1184
  const ts = legacyTimestamps[normalized] ?? Date.now();
1664
1185
  await driver.setItem(modelTsKey(normalized), ts);
@@ -1673,7 +1194,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1673
1194
  await driver.removeItem(SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS);
1674
1195
  await driver.removeItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE);
1675
1196
  }
1676
- await driver.setItem(MIGRATION_MARKER_KEY4, true);
1197
+ await driver.setItem(MIGRATION_MARKER_KEY2, true);
1677
1198
  const [
1678
1199
  rawMints,
1679
1200
  rawInfo,
@@ -1707,31 +1228,31 @@ var createShardedDiscoveryAdapter = async (options) => {
1707
1228
  const providerIndex = /* @__PURE__ */ new Set();
1708
1229
  const knownProviders = /* @__PURE__ */ new Set();
1709
1230
  for (const baseUrl of Object.keys(rawInfo)) {
1710
- knownProviders.add(normalizeBaseUrl6(baseUrl));
1231
+ knownProviders.add(normalizeBaseUrl4(baseUrl));
1711
1232
  }
1712
1233
  for (const baseUrl of Object.keys(rawMints)) {
1713
- knownProviders.add(normalizeBaseUrl6(baseUrl));
1234
+ knownProviders.add(normalizeBaseUrl4(baseUrl));
1714
1235
  }
1715
1236
  for (const baseUrl of rawBaseUrls) {
1716
- knownProviders.add(normalizeBaseUrl6(baseUrl));
1237
+ knownProviders.add(normalizeBaseUrl4(baseUrl));
1717
1238
  }
1718
1239
  for (const baseUrl of rawDisabled) {
1719
- knownProviders.add(normalizeBaseUrl6(baseUrl));
1240
+ knownProviders.add(normalizeBaseUrl4(baseUrl));
1720
1241
  }
1721
1242
  for (const baseUrl of Object.keys(legacyModels)) {
1722
- knownProviders.add(normalizeBaseUrl6(baseUrl));
1243
+ knownProviders.add(normalizeBaseUrl4(baseUrl));
1723
1244
  }
1724
1245
  const indexProviders = await driver.getItem(
1725
1246
  PROVIDER_INDEX_KEY,
1726
1247
  []
1727
1248
  );
1728
1249
  for (const baseUrl of indexProviders) {
1729
- const normalized = normalizeBaseUrl6(baseUrl);
1250
+ const normalized = normalizeBaseUrl4(baseUrl);
1730
1251
  providerIndex.add(normalized);
1731
1252
  knownProviders.add(normalized);
1732
1253
  }
1733
1254
  for (const baseUrl of knownProviders) {
1734
- const normalized = normalizeBaseUrl6(baseUrl);
1255
+ const normalized = normalizeBaseUrl4(baseUrl);
1735
1256
  const models = await driver.getItem(
1736
1257
  modelKey(normalized),
1737
1258
  null
@@ -1752,19 +1273,19 @@ var createShardedDiscoveryAdapter = async (options) => {
1752
1273
  }
1753
1274
  let mints = Object.fromEntries(
1754
1275
  Object.entries(rawMints).map(([baseUrl, mintList]) => [
1755
- normalizeBaseUrl6(baseUrl),
1276
+ normalizeBaseUrl4(baseUrl),
1756
1277
  mintList.map((mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint)
1757
1278
  ])
1758
1279
  );
1759
1280
  let info = Object.fromEntries(
1760
1281
  Object.entries(rawInfo).map(([baseUrl, entry]) => [
1761
- normalizeBaseUrl6(baseUrl),
1282
+ normalizeBaseUrl4(baseUrl),
1762
1283
  entry
1763
1284
  ])
1764
1285
  );
1765
1286
  let _lastUsedModel = lastUsedModel;
1766
- let _disabledProviders = rawDisabled.map(normalizeBaseUrl6);
1767
- let _baseUrlsList = rawBaseUrls.map(normalizeBaseUrl6);
1287
+ let _disabledProviders = rawDisabled.map(normalizeBaseUrl4);
1288
+ let _baseUrlsList = rawBaseUrls.map(normalizeBaseUrl4);
1768
1289
  let _lastBaseUrlsUpdate = lastBaseUrlsUpdate;
1769
1290
  let _routstr21Models = rawRoutstr21Models;
1770
1291
  let _lastRoutstr21ModelsUpdate = lastRoutstr21ModelsUpdate;
@@ -1782,10 +1303,10 @@ var createShardedDiscoveryAdapter = async (options) => {
1782
1303
  },
1783
1304
  setCachedModels: (models) => {
1784
1305
  const nextKeys = new Set(
1785
- Object.keys(models).map((baseUrl) => normalizeBaseUrl6(baseUrl))
1306
+ Object.keys(models).map((baseUrl) => normalizeBaseUrl4(baseUrl))
1786
1307
  );
1787
1308
  for (const baseUrl of [...modelsByBaseUrl.keys()]) {
1788
- if (!nextKeys.has(normalizeBaseUrl6(baseUrl))) {
1309
+ if (!nextKeys.has(normalizeBaseUrl4(baseUrl))) {
1789
1310
  providerIndex.delete(baseUrl);
1790
1311
  modelsByBaseUrl.delete(baseUrl);
1791
1312
  timestampsByBaseUrl.delete(baseUrl);
@@ -1794,7 +1315,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1794
1315
  }
1795
1316
  }
1796
1317
  for (const [baseUrl, modelList] of Object.entries(models)) {
1797
- const normalized = normalizeBaseUrl6(baseUrl);
1318
+ const normalized = normalizeBaseUrl4(baseUrl);
1798
1319
  providerIndex.add(normalized);
1799
1320
  modelsByBaseUrl.set(normalized, modelList);
1800
1321
  const ts = timestampsByBaseUrl.get(normalized) ?? Date.now();
@@ -1805,10 +1326,10 @@ var createShardedDiscoveryAdapter = async (options) => {
1805
1326
  persistProviderIndex();
1806
1327
  },
1807
1328
  getProviderLastUpdate: (baseUrl) => {
1808
- return timestampsByBaseUrl.get(normalizeBaseUrl6(baseUrl)) ?? null;
1329
+ return timestampsByBaseUrl.get(normalizeBaseUrl4(baseUrl)) ?? null;
1809
1330
  },
1810
1331
  setProviderLastUpdate: (baseUrl, timestamp) => {
1811
- const normalized = normalizeBaseUrl6(baseUrl);
1332
+ const normalized = normalizeBaseUrl4(baseUrl);
1812
1333
  providerIndex.add(normalized);
1813
1334
  timestampsByBaseUrl.set(normalized, timestamp);
1814
1335
  void driver.setItem(modelTsKey(normalized), timestamp);
@@ -1819,7 +1340,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1819
1340
  setCachedMints: (value) => {
1820
1341
  const normalized = {};
1821
1342
  for (const [baseUrl, mintList] of Object.entries(value)) {
1822
- normalized[normalizeBaseUrl6(baseUrl)] = mintList.map(
1343
+ normalized[normalizeBaseUrl4(baseUrl)] = mintList.map(
1823
1344
  (mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
1824
1345
  );
1825
1346
  }
@@ -1831,7 +1352,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1831
1352
  setCachedProviderInfo: (value) => {
1832
1353
  const normalized = {};
1833
1354
  for (const [baseUrl, entry] of Object.entries(value)) {
1834
- normalized[normalizeBaseUrl6(baseUrl)] = entry;
1355
+ normalized[normalizeBaseUrl4(baseUrl)] = entry;
1835
1356
  }
1836
1357
  info = normalized;
1837
1358
  void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
@@ -1845,7 +1366,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1845
1366
  // -- Disabled providers (kv) --
1846
1367
  getDisabledProviders: () => _disabledProviders,
1847
1368
  setDisabledProviders: (urls) => {
1848
- const normalized = urls.map(normalizeBaseUrl6);
1369
+ const normalized = urls.map(normalizeBaseUrl4);
1849
1370
  _disabledProviders = normalized;
1850
1371
  void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
1851
1372
  },
@@ -1853,7 +1374,7 @@ var createShardedDiscoveryAdapter = async (options) => {
1853
1374
  getBaseUrlsList: () => _baseUrlsList,
1854
1375
  getBaseUrlsLastUpdate: () => _lastBaseUrlsUpdate,
1855
1376
  setBaseUrlsList: (urls) => {
1856
- const normalized = urls.map(normalizeBaseUrl6);
1377
+ const normalized = urls.map(normalizeBaseUrl4);
1857
1378
  _baseUrlsList = normalized;
1858
1379
  void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
1859
1380
  },
@@ -1881,16 +1402,16 @@ var createProviderRegistryFromDiscoveryAdapter = (adapter, logger) => {
1881
1402
  const log = (logger ?? consoleLogger).child("ProviderRegistry");
1882
1403
  return {
1883
1404
  getModelsForProvider: (baseUrl) => {
1884
- const normalized = normalizeBaseUrl6(baseUrl);
1405
+ const normalized = normalizeBaseUrl4(baseUrl);
1885
1406
  return adapter.getCachedModels()[normalized] || [];
1886
1407
  },
1887
1408
  getDisabledProviders: () => adapter.getDisabledProviders(),
1888
1409
  getProviderMints: (baseUrl) => {
1889
- const normalized = normalizeBaseUrl6(baseUrl);
1410
+ const normalized = normalizeBaseUrl4(baseUrl);
1890
1411
  return adapter.getCachedMints()[normalized] || [];
1891
1412
  },
1892
1413
  getProviderInfo: async (baseUrl) => {
1893
- const normalized = normalizeBaseUrl6(baseUrl);
1414
+ const normalized = normalizeBaseUrl4(baseUrl);
1894
1415
  const cached = adapter.getCachedProviderInfo()[normalized];
1895
1416
  if (cached) return cached;
1896
1417
  try {
@@ -1921,31 +1442,13 @@ var isBrowser3 = () => {
1921
1442
  return false;
1922
1443
  }
1923
1444
  };
1924
- var isNode = () => {
1925
- try {
1926
- return typeof process !== "undefined" && process.versions != null && process.versions.node != null;
1927
- } catch {
1928
- return false;
1929
- }
1930
- };
1931
1445
  var defaultDriver = null;
1932
- var isBun3 = () => {
1933
- return typeof process.versions.bun !== "undefined";
1934
- };
1935
1446
  var getDefaultSdkDriver = () => {
1936
1447
  if (defaultDriver) return defaultDriver;
1937
1448
  if (isBrowser3()) {
1938
1449
  defaultDriver = localStorageDriver;
1939
1450
  return defaultDriver;
1940
1451
  }
1941
- if (isBun3()) {
1942
- defaultDriver = createMemoryDriver();
1943
- return defaultDriver;
1944
- }
1945
- if (isNode()) {
1946
- defaultDriver = createSqliteDriver();
1947
- return defaultDriver;
1948
- }
1949
1452
  defaultDriver = createMemoryDriver();
1950
1453
  return defaultDriver;
1951
1454
  };
@@ -1966,16 +1469,6 @@ var getDefaultUsageTrackingDriver = () => {
1966
1469
  });
1967
1470
  return defaultUsageTrackingDriver;
1968
1471
  }
1969
- if (isBun3()) {
1970
- defaultUsageTrackingDriver = createBunSqliteUsageTrackingDriver();
1971
- return defaultUsageTrackingDriver;
1972
- }
1973
- if (isNode()) {
1974
- defaultUsageTrackingDriver = createSqliteUsageTrackingDriver({
1975
- legacyStorageDriver: storageDriver
1976
- });
1977
- return defaultUsageTrackingDriver;
1978
- }
1979
1472
  defaultUsageTrackingDriver = createMemoryUsageTrackingDriver();
1980
1473
  return defaultUsageTrackingDriver;
1981
1474
  };
@@ -1993,8 +1486,6 @@ var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await g
1993
1486
  var getDefaultProviderRegistry = async () => createProviderRegistryFromDiscoveryAdapter(await getDefaultDiscoveryAdapter());
1994
1487
 
1995
1488
  exports.SDK_STORAGE_KEYS = SDK_STORAGE_KEYS;
1996
- exports.createBunSqliteDriver = createBunSqliteDriver;
1997
- exports.createBunSqliteUsageTrackingDriver = createBunSqliteUsageTrackingDriver;
1998
1489
  exports.createDiscoveryAdapterFromStore = createDiscoveryAdapterFromStore;
1999
1490
  exports.createIndexedDBDriver = createIndexedDBDriver;
2000
1491
  exports.createIndexedDBUsageTrackingDriver = createIndexedDBUsageTrackingDriver;
@@ -2004,8 +1495,6 @@ exports.createProviderRegistryFromDiscoveryAdapter = createProviderRegistryFromD
2004
1495
  exports.createProviderRegistryFromStore = createProviderRegistryFromStore;
2005
1496
  exports.createSdkStore = createSdkStore;
2006
1497
  exports.createShardedDiscoveryAdapter = createShardedDiscoveryAdapter;
2007
- exports.createSqliteDriver = createSqliteDriver;
2008
- exports.createSqliteUsageTrackingDriver = createSqliteUsageTrackingDriver;
2009
1498
  exports.createStorageAdapterFromStore = createStorageAdapterFromStore;
2010
1499
  exports.getDefaultDiscoveryAdapter = getDefaultDiscoveryAdapter;
2011
1500
  exports.getDefaultProviderRegistry = getDefaultProviderRegistry;