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