@routstr/sdk 0.3.10 → 0.3.12
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.
- package/README.md +19 -6
- package/dist/browser.d.mts +2 -2
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +201 -66
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +198 -67
- package/dist/browser.mjs.map +1 -1
- package/dist/bun.d.mts +5 -5
- package/dist/bun.d.ts +5 -5
- package/dist/bun.js +275 -66
- package/dist/bun.js.map +1 -1
- package/dist/bun.mjs +272 -67
- package/dist/bun.mjs.map +1 -1
- package/dist/{bunSqlite-BMTseLIz.d.ts → bunSqlite-BmXWNc25.d.ts} +1 -1
- package/dist/{bunSqlite-D6AreVE2.d.mts → bunSqlite-Bro9efsl.d.mts} +1 -1
- package/dist/client/index.d.mts +31 -10
- package/dist/client/index.d.ts +31 -10
- package/dist/client/index.js +185 -36
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +182 -37
- package/dist/client/index.mjs.map +1 -1
- package/dist/discovery/index.d.mts +3 -3
- package/dist/discovery/index.d.ts +3 -3
- package/dist/discovery/index.js +12 -20
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +12 -20
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/index.d.mts +8 -6
- package/dist/index.d.ts +8 -6
- package/dist/index.js +201 -66
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +198 -67
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +276 -66
- package/dist/node.js.map +1 -1
- package/dist/node.mjs +273 -67
- package/dist/node.mjs.map +1 -1
- package/dist/storage/bun.d.mts +4 -4
- package/dist/storage/bun.d.ts +4 -4
- package/dist/storage/bun.js +173 -0
- package/dist/storage/bun.js.map +1 -1
- package/dist/storage/bun.mjs +173 -0
- package/dist/storage/bun.mjs.map +1 -1
- package/dist/storage/index.d.mts +2 -2
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.js +99 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +99 -0
- package/dist/storage/index.mjs.map +1 -1
- package/dist/storage/node.d.mts +2 -2
- package/dist/storage/node.d.ts +2 -2
- package/dist/storage/node.js +174 -0
- package/dist/storage/node.js.map +1 -1
- package/dist/storage/node.mjs +174 -0
- package/dist/storage/node.mjs.map +1 -1
- package/dist/{store-C8MZlfuz.d.ts → store-CAQLSbEj.d.ts} +38 -1
- package/dist/{store-BiuM2V9N.d.mts → store-CuXwe5Rg.d.mts} +38 -1
- package/dist/wallet/index.js +38 -24
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +38 -24
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +7 -3
package/dist/storage/node.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { SDK_STORAGE_KEYS, ShardedDiscoveryAdapterOptions, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromDiscoveryAdapter, createShardedDiscoveryAdapter, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, localStorageDriver, setDefaultUsageTrackingDriver } from './index.mjs';
|
|
2
|
-
import { a as StorageDriver,
|
|
3
|
-
export { L as ListUsageTrackingOptions, S as SdkStore, b as UsageTrackingEntry,
|
|
2
|
+
import { a as StorageDriver, c as UsageTrackingDriver } from '../store-CuXwe5Rg.mjs';
|
|
3
|
+
export { A as AggregateUsageOptions, L as ListUsageTrackingOptions, S as SdkStore, U as UsageAggregateRow, b as UsageGroupBy, d as UsageTrackingEntry, e as createDiscoveryAdapterFromStore, f as createProviderRegistryFromStore, g as createSdkStore, h as createStorageAdapterFromStore } from '../store-CuXwe5Rg.mjs';
|
|
4
4
|
export { D as DiscoveryAdapter } from '../interfaces-Cv1k2EUK.mjs';
|
|
5
5
|
export { P as ProviderRegistry, S as StorageAdapter, X as XCashuTokenEntry } from '../interfaces-Csn8Uq04.mjs';
|
|
6
6
|
import '../types-_21yYFZG.mjs';
|
package/dist/storage/node.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { SDK_STORAGE_KEYS, ShardedDiscoveryAdapterOptions, createIndexedDBDriver, createIndexedDBUsageTrackingDriver, createMemoryDriver, createMemoryUsageTrackingDriver, createProviderRegistryFromDiscoveryAdapter, createShardedDiscoveryAdapter, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, getDefaultUsageTrackingDriver, localStorageDriver, setDefaultUsageTrackingDriver } from './index.js';
|
|
2
|
-
import { a as StorageDriver,
|
|
3
|
-
export { L as ListUsageTrackingOptions, S as SdkStore, b as UsageTrackingEntry,
|
|
2
|
+
import { a as StorageDriver, c as UsageTrackingDriver } from '../store-CAQLSbEj.js';
|
|
3
|
+
export { A as AggregateUsageOptions, L as ListUsageTrackingOptions, S as SdkStore, U as UsageAggregateRow, b as UsageGroupBy, d as UsageTrackingEntry, e as createDiscoveryAdapterFromStore, f as createProviderRegistryFromStore, g as createSdkStore, h as createStorageAdapterFromStore } from '../store-CAQLSbEj.js';
|
|
4
4
|
export { D as DiscoveryAdapter } from '../interfaces-iL7CWeG5.js';
|
|
5
5
|
export { P as ProviderRegistry, S as StorageAdapter, X as XCashuTokenEntry } from '../interfaces-C-DYd9Jy.js';
|
|
6
6
|
import '../types-_21yYFZG.js';
|
package/dist/storage/node.js
CHANGED
|
@@ -244,6 +244,149 @@ var SDK_STORAGE_KEYS = {
|
|
|
244
244
|
PROVIDERS_ON_COOLDOWN: "providers_on_cooldown"
|
|
245
245
|
};
|
|
246
246
|
|
|
247
|
+
// storage/usageTracking/aggregate.ts
|
|
248
|
+
var pad2 = (n) => String(n).padStart(2, "0");
|
|
249
|
+
var aggregateColumns = "COUNT(*) AS requests, COALESCE(SUM(prompt_tokens), 0) AS promptTokens, COALESCE(SUM(completion_tokens), 0) AS completionTokens, COALESCE(SUM(total_tokens), 0) AS totalTokens, COALESCE(SUM(cost), 0) AS cost, COALESCE(SUM(sats_cost), 0) AS satsCost, COALESCE(SUM(base_msats), 0) AS baseMsats, COALESCE(SUM(input_msats), 0) AS inputMsats, COALESCE(SUM(output_msats), 0) AS outputMsats, COALESCE(SUM(total_msats), 0) AS totalMsats, COALESCE(SUM(total_usd), 0) AS totalUsd, COALESCE(SUM(cache_read_input_tokens), 0) AS cacheReadInputTokens, COALESCE(SUM(cache_creation_input_tokens), 0) AS cacheCreationInputTokens, COALESCE(SUM(cache_read_msats), 0) AS cacheReadMsats, COALESCE(SUM(cache_creation_msats), 0) AS cacheCreationMsats";
|
|
250
|
+
var sqlGroupExpr = (groupBy) => {
|
|
251
|
+
switch (groupBy) {
|
|
252
|
+
case "modelId":
|
|
253
|
+
return { expr: "model_id", usesTz: false };
|
|
254
|
+
case "baseUrl":
|
|
255
|
+
return { expr: "base_url", usesTz: false };
|
|
256
|
+
case "client":
|
|
257
|
+
return { expr: "client", usesTz: false };
|
|
258
|
+
case "sessionId":
|
|
259
|
+
return { expr: "session_id", usesTz: false };
|
|
260
|
+
case "provider":
|
|
261
|
+
return { expr: "provider", usesTz: false };
|
|
262
|
+
case "day":
|
|
263
|
+
return {
|
|
264
|
+
expr: "strftime('%Y-%m-%d', (timestamp - ? * 60000) / 1000, 'unixepoch')",
|
|
265
|
+
usesTz: true
|
|
266
|
+
};
|
|
267
|
+
case "hour":
|
|
268
|
+
return {
|
|
269
|
+
expr: "strftime('%H', (timestamp - ? * 60000) / 1000, 'unixepoch')",
|
|
270
|
+
usesTz: true
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
var buildAggregateSql = (tableName, where, options = {}) => {
|
|
275
|
+
if (!options.groupBy) {
|
|
276
|
+
return {
|
|
277
|
+
sql: `SELECT NULL AS grp, ${aggregateColumns} FROM ${tableName} ${where.sql}`,
|
|
278
|
+
params: where.params
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const { expr, usesTz } = sqlGroupExpr(options.groupBy);
|
|
282
|
+
const tzParams = usesTz ? [options.tzOffsetMinutes ?? 0] : [];
|
|
283
|
+
const orderBy = options.groupBy === "day" || options.groupBy === "hour" ? "ORDER BY grp ASC" : "ORDER BY satsCost DESC";
|
|
284
|
+
return {
|
|
285
|
+
sql: `SELECT ${expr} AS grp, ${aggregateColumns} FROM ${tableName} ${where.sql} GROUP BY grp ${orderBy}`,
|
|
286
|
+
params: [...tzParams, ...where.params]
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
var mapAggregateRow = (row) => ({
|
|
290
|
+
group: row.grp == null ? null : String(row.grp),
|
|
291
|
+
requests: Number(row.requests ?? 0),
|
|
292
|
+
promptTokens: Number(row.promptTokens ?? 0),
|
|
293
|
+
completionTokens: Number(row.completionTokens ?? 0),
|
|
294
|
+
totalTokens: Number(row.totalTokens ?? 0),
|
|
295
|
+
cost: Number(row.cost ?? 0),
|
|
296
|
+
satsCost: Number(row.satsCost ?? 0),
|
|
297
|
+
baseMsats: Number(row.baseMsats ?? 0),
|
|
298
|
+
inputMsats: Number(row.inputMsats ?? 0),
|
|
299
|
+
outputMsats: Number(row.outputMsats ?? 0),
|
|
300
|
+
totalMsats: Number(row.totalMsats ?? 0),
|
|
301
|
+
totalUsd: Number(row.totalUsd ?? 0),
|
|
302
|
+
cacheReadInputTokens: Number(row.cacheReadInputTokens ?? 0),
|
|
303
|
+
cacheCreationInputTokens: Number(row.cacheCreationInputTokens ?? 0),
|
|
304
|
+
cacheReadMsats: Number(row.cacheReadMsats ?? 0),
|
|
305
|
+
cacheCreationMsats: Number(row.cacheCreationMsats ?? 0)
|
|
306
|
+
});
|
|
307
|
+
var jsGroupKey = (entry, groupBy, tzOffsetMinutes) => {
|
|
308
|
+
switch (groupBy) {
|
|
309
|
+
case "modelId":
|
|
310
|
+
return entry.modelId ?? null;
|
|
311
|
+
case "baseUrl":
|
|
312
|
+
return entry.baseUrl ?? null;
|
|
313
|
+
case "client":
|
|
314
|
+
return entry.client ?? null;
|
|
315
|
+
case "sessionId":
|
|
316
|
+
return entry.sessionId ?? null;
|
|
317
|
+
case "provider":
|
|
318
|
+
return entry.provider ?? null;
|
|
319
|
+
case "day": {
|
|
320
|
+
const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
|
|
321
|
+
return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}`;
|
|
322
|
+
}
|
|
323
|
+
case "hour": {
|
|
324
|
+
const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
|
|
325
|
+
return pad2(d.getUTCHours());
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
var reduceAggregate = (entries, options = {}) => {
|
|
330
|
+
const emptyRow = (group) => ({
|
|
331
|
+
group,
|
|
332
|
+
requests: 0,
|
|
333
|
+
promptTokens: 0,
|
|
334
|
+
completionTokens: 0,
|
|
335
|
+
totalTokens: 0,
|
|
336
|
+
cost: 0,
|
|
337
|
+
satsCost: 0,
|
|
338
|
+
baseMsats: 0,
|
|
339
|
+
inputMsats: 0,
|
|
340
|
+
outputMsats: 0,
|
|
341
|
+
totalMsats: 0,
|
|
342
|
+
totalUsd: 0,
|
|
343
|
+
cacheReadInputTokens: 0,
|
|
344
|
+
cacheCreationInputTokens: 0,
|
|
345
|
+
cacheReadMsats: 0,
|
|
346
|
+
cacheCreationMsats: 0
|
|
347
|
+
});
|
|
348
|
+
const accumulate = (row, entry) => {
|
|
349
|
+
row.requests += 1;
|
|
350
|
+
row.promptTokens += entry.promptTokens;
|
|
351
|
+
row.completionTokens += entry.completionTokens;
|
|
352
|
+
row.totalTokens += entry.totalTokens;
|
|
353
|
+
row.cost += entry.cost;
|
|
354
|
+
row.satsCost += entry.satsCost;
|
|
355
|
+
row.baseMsats += entry.baseMsats ?? 0;
|
|
356
|
+
row.inputMsats += entry.inputMsats ?? 0;
|
|
357
|
+
row.outputMsats += entry.outputMsats ?? 0;
|
|
358
|
+
row.totalMsats += entry.totalMsats ?? 0;
|
|
359
|
+
row.totalUsd += entry.totalUsd ?? 0;
|
|
360
|
+
row.cacheReadInputTokens += entry.cacheReadInputTokens ?? 0;
|
|
361
|
+
row.cacheCreationInputTokens += entry.cacheCreationInputTokens ?? 0;
|
|
362
|
+
row.cacheReadMsats += entry.cacheReadMsats ?? 0;
|
|
363
|
+
row.cacheCreationMsats += entry.cacheCreationMsats ?? 0;
|
|
364
|
+
};
|
|
365
|
+
if (!options.groupBy) {
|
|
366
|
+
const total = emptyRow(null);
|
|
367
|
+
for (const entry of entries) accumulate(total, entry);
|
|
368
|
+
return [total];
|
|
369
|
+
}
|
|
370
|
+
const tz = options.tzOffsetMinutes ?? 0;
|
|
371
|
+
const groups = /* @__PURE__ */ new Map();
|
|
372
|
+
for (const entry of entries) {
|
|
373
|
+
const key = jsGroupKey(entry, options.groupBy, tz);
|
|
374
|
+
let row = groups.get(key);
|
|
375
|
+
if (!row) {
|
|
376
|
+
row = emptyRow(key);
|
|
377
|
+
groups.set(key, row);
|
|
378
|
+
}
|
|
379
|
+
accumulate(row, entry);
|
|
380
|
+
}
|
|
381
|
+
const rows = [...groups.values()];
|
|
382
|
+
if (options.groupBy === "day" || options.groupBy === "hour") {
|
|
383
|
+
rows.sort((a, b) => (a.group ?? "").localeCompare(b.group ?? ""));
|
|
384
|
+
} else {
|
|
385
|
+
rows.sort((a, b) => b.satsCost - a.satsCost);
|
|
386
|
+
}
|
|
387
|
+
return rows;
|
|
388
|
+
};
|
|
389
|
+
|
|
247
390
|
// storage/usageTracking/indexedDB.ts
|
|
248
391
|
var DEFAULT_DB_NAME = "routstr-sdk";
|
|
249
392
|
var DEFAULT_STORE_NAME = "usage_tracking";
|
|
@@ -306,6 +449,9 @@ var matchesFilters = (entry, options = {}) => {
|
|
|
306
449
|
if (options.client && entry.client !== options.client) {
|
|
307
450
|
return false;
|
|
308
451
|
}
|
|
452
|
+
if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
309
455
|
if (options.provider && entry.provider !== options.provider) {
|
|
310
456
|
return false;
|
|
311
457
|
}
|
|
@@ -404,6 +550,10 @@ var createIndexedDBUsageTrackingDriver = (options = {}) => {
|
|
|
404
550
|
const results = await this.list(options2);
|
|
405
551
|
return results.length;
|
|
406
552
|
},
|
|
553
|
+
async aggregate(options2 = {}) {
|
|
554
|
+
const entries = await this.list(options2);
|
|
555
|
+
return reduceAggregate(entries, options2);
|
|
556
|
+
},
|
|
407
557
|
async deleteOlderThan(timestamp) {
|
|
408
558
|
await ensureMigrated();
|
|
409
559
|
const db = await getDb();
|
|
@@ -461,6 +611,9 @@ var matchesFilters2 = (entry, options = {}) => {
|
|
|
461
611
|
if (options.client && entry.client !== options.client) {
|
|
462
612
|
return false;
|
|
463
613
|
}
|
|
614
|
+
if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
464
617
|
if (options.provider && entry.provider !== options.provider) {
|
|
465
618
|
return false;
|
|
466
619
|
}
|
|
@@ -493,6 +646,10 @@ var createMemoryUsageTrackingDriver = (seed = []) => {
|
|
|
493
646
|
async count(options = {}) {
|
|
494
647
|
return (await this.list(options)).length;
|
|
495
648
|
},
|
|
649
|
+
async aggregate(options = {}) {
|
|
650
|
+
const entries = [...store.values()].filter((entry) => matchesFilters2(entry, options));
|
|
651
|
+
return reduceAggregate(entries, options);
|
|
652
|
+
},
|
|
496
653
|
async deleteOlderThan(timestamp) {
|
|
497
654
|
let deleted = 0;
|
|
498
655
|
for (const [id, entry] of store.entries()) {
|
|
@@ -1517,6 +1674,8 @@ var createSqliteDriver = (options = {}) => {
|
|
|
1517
1674
|
const initDb = async () => {
|
|
1518
1675
|
if (!db) {
|
|
1519
1676
|
db = await loadDatabase(dbPath);
|
|
1677
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
1678
|
+
db.exec("PRAGMA busy_timeout = 5000");
|
|
1520
1679
|
db.exec(
|
|
1521
1680
|
`CREATE TABLE IF NOT EXISTS ${tableName} (key TEXT PRIMARY KEY, value TEXT NOT NULL)`
|
|
1522
1681
|
);
|
|
@@ -1635,6 +1794,11 @@ var buildWhereClause = (options = {}) => {
|
|
|
1635
1794
|
clauses.push("client = ?");
|
|
1636
1795
|
params.push(options.client);
|
|
1637
1796
|
}
|
|
1797
|
+
if (options.clients && options.clients.length > 0) {
|
|
1798
|
+
const placeholders = options.clients.map(() => "?").join(", ");
|
|
1799
|
+
clauses.push(`client IN (${placeholders})`);
|
|
1800
|
+
params.push(...options.clients);
|
|
1801
|
+
}
|
|
1638
1802
|
if (options.provider) {
|
|
1639
1803
|
clauses.push("provider = ?");
|
|
1640
1804
|
params.push(options.provider);
|
|
@@ -1654,6 +1818,8 @@ var createSqliteUsageTrackingDriver = (options = {}) => {
|
|
|
1654
1818
|
const initDb = async () => {
|
|
1655
1819
|
if (!db) {
|
|
1656
1820
|
db = await loadDatabase2(dbPath);
|
|
1821
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
1822
|
+
db.exec("PRAGMA busy_timeout = 5000");
|
|
1657
1823
|
db.exec(`
|
|
1658
1824
|
CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
1659
1825
|
id TEXT PRIMARY KEY,
|
|
@@ -1824,6 +1990,14 @@ var createSqliteUsageTrackingDriver = (options = {}) => {
|
|
|
1824
1990
|
const row = stmt.get(...params);
|
|
1825
1991
|
return Number(row?.count ?? 0);
|
|
1826
1992
|
},
|
|
1993
|
+
async aggregate(options2 = {}) {
|
|
1994
|
+
await ensureInit();
|
|
1995
|
+
await ensureMigrated();
|
|
1996
|
+
const where = buildWhereClause(options2);
|
|
1997
|
+
const { sql, params } = buildAggregateSql(tableName, where, options2);
|
|
1998
|
+
const rows = db.prepare(sql).all(...params);
|
|
1999
|
+
return rows.map(mapAggregateRow);
|
|
2000
|
+
},
|
|
1827
2001
|
async deleteOlderThan(timestamp) {
|
|
1828
2002
|
await ensureInit();
|
|
1829
2003
|
await ensureMigrated();
|