@routstr/sdk 0.3.10 → 0.3.11

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 (63) hide show
  1. package/dist/browser.d.mts +2 -2
  2. package/dist/browser.d.ts +2 -2
  3. package/dist/browser.js +201 -66
  4. package/dist/browser.js.map +1 -1
  5. package/dist/browser.mjs +198 -67
  6. package/dist/browser.mjs.map +1 -1
  7. package/dist/bun.d.mts +5 -5
  8. package/dist/bun.d.ts +5 -5
  9. package/dist/bun.js +271 -66
  10. package/dist/bun.js.map +1 -1
  11. package/dist/bun.mjs +268 -67
  12. package/dist/bun.mjs.map +1 -1
  13. package/dist/{bunSqlite-BMTseLIz.d.ts → bunSqlite-BmXWNc25.d.ts} +1 -1
  14. package/dist/{bunSqlite-D6AreVE2.d.mts → bunSqlite-Bro9efsl.d.mts} +1 -1
  15. package/dist/client/index.d.mts +31 -10
  16. package/dist/client/index.d.ts +31 -10
  17. package/dist/client/index.js +185 -36
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/index.mjs +182 -37
  20. package/dist/client/index.mjs.map +1 -1
  21. package/dist/discovery/index.d.mts +3 -3
  22. package/dist/discovery/index.d.ts +3 -3
  23. package/dist/discovery/index.js +12 -20
  24. package/dist/discovery/index.js.map +1 -1
  25. package/dist/discovery/index.mjs +12 -20
  26. package/dist/discovery/index.mjs.map +1 -1
  27. package/dist/index.d.mts +8 -6
  28. package/dist/index.d.ts +8 -6
  29. package/dist/index.js +201 -66
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +198 -67
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/node.d.mts +2 -2
  34. package/dist/node.d.ts +2 -2
  35. package/dist/node.js +272 -66
  36. package/dist/node.js.map +1 -1
  37. package/dist/node.mjs +269 -67
  38. package/dist/node.mjs.map +1 -1
  39. package/dist/storage/bun.d.mts +4 -4
  40. package/dist/storage/bun.d.ts +4 -4
  41. package/dist/storage/bun.js +169 -0
  42. package/dist/storage/bun.js.map +1 -1
  43. package/dist/storage/bun.mjs +169 -0
  44. package/dist/storage/bun.mjs.map +1 -1
  45. package/dist/storage/index.d.mts +2 -2
  46. package/dist/storage/index.d.ts +2 -2
  47. package/dist/storage/index.js +99 -0
  48. package/dist/storage/index.js.map +1 -1
  49. package/dist/storage/index.mjs +99 -0
  50. package/dist/storage/index.mjs.map +1 -1
  51. package/dist/storage/node.d.mts +2 -2
  52. package/dist/storage/node.d.ts +2 -2
  53. package/dist/storage/node.js +170 -0
  54. package/dist/storage/node.js.map +1 -1
  55. package/dist/storage/node.mjs +170 -0
  56. package/dist/storage/node.mjs.map +1 -1
  57. package/dist/{store-C8MZlfuz.d.ts → store-CAQLSbEj.d.ts} +38 -1
  58. package/dist/{store-BiuM2V9N.d.mts → store-CuXwe5Rg.d.mts} +38 -1
  59. package/dist/wallet/index.js +38 -24
  60. package/dist/wallet/index.js.map +1 -1
  61. package/dist/wallet/index.mjs +38 -24
  62. package/dist/wallet/index.mjs.map +1 -1
  63. package/package.json +1 -1
@@ -242,6 +242,91 @@ var SDK_STORAGE_KEYS = {
242
242
  PROVIDERS_ON_COOLDOWN: "providers_on_cooldown"
243
243
  };
244
244
 
245
+ // storage/usageTracking/aggregate.ts
246
+ var pad2 = (n) => String(n).padStart(2, "0");
247
+ var jsGroupKey = (entry, groupBy, tzOffsetMinutes) => {
248
+ switch (groupBy) {
249
+ case "modelId":
250
+ return entry.modelId ?? null;
251
+ case "baseUrl":
252
+ return entry.baseUrl ?? null;
253
+ case "client":
254
+ return entry.client ?? null;
255
+ case "sessionId":
256
+ return entry.sessionId ?? null;
257
+ case "provider":
258
+ return entry.provider ?? null;
259
+ case "day": {
260
+ const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
261
+ return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}`;
262
+ }
263
+ case "hour": {
264
+ const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
265
+ return pad2(d.getUTCHours());
266
+ }
267
+ }
268
+ };
269
+ var reduceAggregate = (entries, options = {}) => {
270
+ const emptyRow = (group) => ({
271
+ group,
272
+ requests: 0,
273
+ promptTokens: 0,
274
+ completionTokens: 0,
275
+ totalTokens: 0,
276
+ cost: 0,
277
+ satsCost: 0,
278
+ baseMsats: 0,
279
+ inputMsats: 0,
280
+ outputMsats: 0,
281
+ totalMsats: 0,
282
+ totalUsd: 0,
283
+ cacheReadInputTokens: 0,
284
+ cacheCreationInputTokens: 0,
285
+ cacheReadMsats: 0,
286
+ cacheCreationMsats: 0
287
+ });
288
+ const accumulate = (row, entry) => {
289
+ row.requests += 1;
290
+ row.promptTokens += entry.promptTokens;
291
+ row.completionTokens += entry.completionTokens;
292
+ row.totalTokens += entry.totalTokens;
293
+ row.cost += entry.cost;
294
+ row.satsCost += entry.satsCost;
295
+ row.baseMsats += entry.baseMsats ?? 0;
296
+ row.inputMsats += entry.inputMsats ?? 0;
297
+ row.outputMsats += entry.outputMsats ?? 0;
298
+ row.totalMsats += entry.totalMsats ?? 0;
299
+ row.totalUsd += entry.totalUsd ?? 0;
300
+ row.cacheReadInputTokens += entry.cacheReadInputTokens ?? 0;
301
+ row.cacheCreationInputTokens += entry.cacheCreationInputTokens ?? 0;
302
+ row.cacheReadMsats += entry.cacheReadMsats ?? 0;
303
+ row.cacheCreationMsats += entry.cacheCreationMsats ?? 0;
304
+ };
305
+ if (!options.groupBy) {
306
+ const total = emptyRow(null);
307
+ for (const entry of entries) accumulate(total, entry);
308
+ return [total];
309
+ }
310
+ const tz = options.tzOffsetMinutes ?? 0;
311
+ const groups = /* @__PURE__ */ new Map();
312
+ for (const entry of entries) {
313
+ const key = jsGroupKey(entry, options.groupBy, tz);
314
+ let row = groups.get(key);
315
+ if (!row) {
316
+ row = emptyRow(key);
317
+ groups.set(key, row);
318
+ }
319
+ accumulate(row, entry);
320
+ }
321
+ const rows = [...groups.values()];
322
+ if (options.groupBy === "day" || options.groupBy === "hour") {
323
+ rows.sort((a, b) => (a.group ?? "").localeCompare(b.group ?? ""));
324
+ } else {
325
+ rows.sort((a, b) => b.satsCost - a.satsCost);
326
+ }
327
+ return rows;
328
+ };
329
+
245
330
  // storage/usageTracking/indexedDB.ts
246
331
  var DEFAULT_DB_NAME = "routstr-sdk";
247
332
  var DEFAULT_STORE_NAME = "usage_tracking";
@@ -304,6 +389,9 @@ var matchesFilters = (entry, options = {}) => {
304
389
  if (options.client && entry.client !== options.client) {
305
390
  return false;
306
391
  }
392
+ if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
393
+ return false;
394
+ }
307
395
  if (options.provider && entry.provider !== options.provider) {
308
396
  return false;
309
397
  }
@@ -402,6 +490,10 @@ var createIndexedDBUsageTrackingDriver = (options = {}) => {
402
490
  const results = await this.list(options2);
403
491
  return results.length;
404
492
  },
493
+ async aggregate(options2 = {}) {
494
+ const entries = await this.list(options2);
495
+ return reduceAggregate(entries, options2);
496
+ },
405
497
  async deleteOlderThan(timestamp) {
406
498
  await ensureMigrated();
407
499
  const db = await getDb();
@@ -459,6 +551,9 @@ var matchesFilters2 = (entry, options = {}) => {
459
551
  if (options.client && entry.client !== options.client) {
460
552
  return false;
461
553
  }
554
+ if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
555
+ return false;
556
+ }
462
557
  if (options.provider && entry.provider !== options.provider) {
463
558
  return false;
464
559
  }
@@ -491,6 +586,10 @@ var createMemoryUsageTrackingDriver = (seed = []) => {
491
586
  async count(options = {}) {
492
587
  return (await this.list(options)).length;
493
588
  },
589
+ async aggregate(options = {}) {
590
+ const entries = [...store.values()].filter((entry) => matchesFilters2(entry, options));
591
+ return reduceAggregate(entries, options);
592
+ },
494
593
  async deleteOlderThan(timestamp) {
495
594
  let deleted = 0;
496
595
  for (const [id, entry] of store.entries()) {