@hasna/logs 0.3.23 → 0.3.24

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 (47) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +3 -22
  3. package/bun.lock +7 -14
  4. package/dist/cli/index.js +2 -2
  5. package/dist/{index-t97ttm0a.js → index-75dwghvv.js} +88 -6
  6. package/dist/{index-1f2ghyhm.js → index-g8f8kep6.js} +93 -8
  7. package/dist/{index-zmayq5kj.js → index-pf8hpweg.js} +2 -2
  8. package/dist/{index-2sbhn1ye.js → index-w24zm361.js} +2 -2
  9. package/dist/mcp/index.js +23801 -8266
  10. package/dist/server/index.js +2 -2
  11. package/package.json +4 -3
  12. package/sdk/package.json +4 -9
  13. package/src/cli/entrypoints.test.ts +1 -1
  14. package/src/db/index.ts +1 -1
  15. package/src/lib/cloud-sync.ts +167 -0
  16. package/src/lib/ingest.ts +3 -3
  17. package/src/lib/remote-storage.ts +45 -0
  18. package/src/mcp/index.ts +30 -34
  19. package/dist/export-yjaar93b.js +0 -10
  20. package/dist/health-9792c1rc.js +0 -8
  21. package/dist/health-egdb00st.js +0 -8
  22. package/dist/http-0wsh40x1.js +0 -1240
  23. package/dist/index-14dvwcf1.js +0 -45
  24. package/dist/index-4ba0sabv.js +0 -1241
  25. package/dist/index-4hj4sakk.js +0 -1241
  26. package/dist/index-5cj74qka.js +0 -10803
  27. package/dist/index-5qwba140.js +0 -1241
  28. package/dist/index-5tvnhvgr.js +0 -536
  29. package/dist/index-6y8pmes4.js +0 -45
  30. package/dist/index-6zrkek5y.js +0 -9454
  31. package/dist/index-7qhh666n.js +0 -1241
  32. package/dist/index-86j0hn03.js +0 -540
  33. package/dist/index-exeq2gs6.js +0 -79
  34. package/dist/index-fzmz9aqs.js +0 -1241
  35. package/dist/index-g8dczzvv.js +0 -30
  36. package/dist/index-hjzbctgt.js +0 -5868
  37. package/dist/index-rbrsvsyh.js +0 -88
  38. package/dist/index-vmr85wa1.js +0 -9579
  39. package/dist/index-wbsq8qjd.js +0 -1241
  40. package/dist/index-xjn8gam3.js +0 -39
  41. package/dist/index-yb8yd4j6.js +0 -39
  42. package/dist/jobs-02z4fzsn.js +0 -22
  43. package/dist/query-6s5gqkck.js +0 -15
  44. package/dist/query-shjjj67k.js +0 -14
  45. package/dist/query-tcg3bm9s.js +0 -14
  46. package/src/mcp/http.test.ts +0 -92
  47. package/src/mcp/http.ts +0 -135
@@ -1,88 +0,0 @@
1
- // @bun
2
- // src/lib/parse-time.ts
3
- function parseTime(val) {
4
- if (!val)
5
- return;
6
- const m = val.match(/^(\d+(?:\.\d+)?)(m|h|d|w)$/);
7
- if (!m)
8
- return val;
9
- const n = parseFloat(m[1]);
10
- const unit = m[2];
11
- const ms = n * { m: 60, h: 3600, d: 86400, w: 604800 }[unit] * 1000;
12
- return new Date(Date.now() - ms).toISOString();
13
- }
14
-
15
- // src/lib/query.ts
16
- function searchLogs(db, q) {
17
- const conditions = [];
18
- const params = {};
19
- if (q.project_id) {
20
- conditions.push("l.project_id = $project_id");
21
- params.$project_id = q.project_id;
22
- }
23
- if (q.page_id) {
24
- conditions.push("l.page_id = $page_id");
25
- params.$page_id = q.page_id;
26
- }
27
- if (q.service) {
28
- conditions.push("l.service = $service");
29
- params.$service = q.service;
30
- }
31
- if (q.trace_id) {
32
- conditions.push("l.trace_id = $trace_id");
33
- params.$trace_id = q.trace_id;
34
- }
35
- if (q.since) {
36
- conditions.push("l.timestamp >= $since");
37
- params.$since = parseTime(q.since) ?? q.since;
38
- }
39
- if (q.until) {
40
- conditions.push("l.timestamp <= $until");
41
- params.$until = parseTime(q.until) ?? q.until;
42
- }
43
- if (q.level) {
44
- const levels = Array.isArray(q.level) ? q.level : [q.level];
45
- const placeholders = levels.map((_, i) => `$level${i}`).join(",");
46
- levels.forEach((lv, i) => {
47
- params[`$level${i}`] = lv;
48
- });
49
- conditions.push(`l.level IN (${placeholders})`);
50
- }
51
- const limit = q.limit ?? 100;
52
- const offset = q.offset ?? 0;
53
- params.$limit = limit;
54
- params.$offset = offset;
55
- if (q.text) {
56
- params.$text = q.text;
57
- const where2 = conditions.length ? `WHERE ${conditions.join(" AND ")} AND` : "WHERE";
58
- const sql2 = `
59
- SELECT l.* FROM logs l
60
- ${where2} l.rowid IN (SELECT rowid FROM logs_fts WHERE logs_fts MATCH $text)
61
- ORDER BY l.timestamp DESC
62
- LIMIT $limit OFFSET $offset
63
- `;
64
- return db.prepare(sql2).all(params);
65
- }
66
- const where = conditions.length ? `WHERE ${conditions.join(" AND ")}` : "";
67
- const sql = `SELECT * FROM logs l ${where} ORDER BY l.timestamp DESC LIMIT $limit OFFSET $offset`;
68
- return db.prepare(sql).all(params);
69
- }
70
- function tailLogs(db, projectId, n = 50) {
71
- if (projectId) {
72
- return db.prepare("SELECT * FROM logs WHERE project_id = $p ORDER BY timestamp DESC LIMIT $n").all({ $p: projectId, $n: n });
73
- }
74
- return db.prepare("SELECT * FROM logs ORDER BY timestamp DESC LIMIT $n").all({ $n: n });
75
- }
76
- function getLogContext(db, traceId) {
77
- return db.prepare("SELECT * FROM logs WHERE trace_id = $t ORDER BY timestamp ASC").all({ $t: traceId });
78
- }
79
- function getLogContextFromId(db, logId) {
80
- const log = db.prepare("SELECT * FROM logs WHERE id = $id").get({ $id: logId });
81
- if (!log)
82
- return [];
83
- if (log.trace_id)
84
- return getLogContext(db, log.trace_id);
85
- return [log];
86
- }
87
-
88
- export { parseTime, searchLogs, tailLogs, getLogContext, getLogContextFromId };