@adonis-agora/telescope 0.13.0 → 0.14.0

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 (79) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/providers/telescope_provider.d.ts.map +1 -1
  3. package/dist/providers/telescope_provider.js +5 -1
  4. package/dist/providers/telescope_provider.js.map +1 -1
  5. package/dist/providers/telescope_ui_provider.d.ts.map +1 -1
  6. package/dist/providers/telescope_ui_provider.js +7 -0
  7. package/dist/providers/telescope_ui_provider.js.map +1 -1
  8. package/dist/providers/telescope_watchers_provider.d.ts +25 -0
  9. package/dist/providers/telescope_watchers_provider.d.ts.map +1 -1
  10. package/dist/providers/telescope_watchers_provider.js +66 -5
  11. package/dist/providers/telescope_watchers_provider.js.map +1 -1
  12. package/dist/src/ai/index.d.ts +1 -1
  13. package/dist/src/ai/index.js +1 -1
  14. package/dist/src/alerts/index.d.ts +1 -1
  15. package/dist/src/alerts/index.js +1 -1
  16. package/dist/src/extension/registry.d.ts +14 -1
  17. package/dist/src/extension/registry.d.ts.map +1 -1
  18. package/dist/src/extension/registry.js +38 -0
  19. package/dist/src/extension/registry.js.map +1 -1
  20. package/dist/src/extension/types.d.ts +22 -0
  21. package/dist/src/extension/types.d.ts.map +1 -1
  22. package/dist/src/extension/types.js.map +1 -1
  23. package/dist/src/index.d.ts +6 -4
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +3 -2
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/mcp/index.d.ts +1 -1
  28. package/dist/src/mcp/index.js +1 -1
  29. package/dist/src/metrics/metrics_service.d.ts +36 -2
  30. package/dist/src/metrics/metrics_service.d.ts.map +1 -1
  31. package/dist/src/metrics/metrics_service.js +47 -5
  32. package/dist/src/metrics/metrics_service.js.map +1 -1
  33. package/dist/src/metrics/screens.d.ts +41 -0
  34. package/dist/src/metrics/screens.d.ts.map +1 -0
  35. package/dist/src/metrics/screens.js +70 -0
  36. package/dist/src/metrics/screens.js.map +1 -0
  37. package/dist/src/profiling/index.d.ts +1 -1
  38. package/dist/src/profiling/index.js +1 -1
  39. package/dist/src/registry.d.ts +2 -0
  40. package/dist/src/registry.d.ts.map +1 -1
  41. package/dist/src/registry.js +4 -0
  42. package/dist/src/registry.js.map +1 -1
  43. package/dist/src/request_watcher.d.ts +39 -0
  44. package/dist/src/request_watcher.d.ts.map +1 -1
  45. package/dist/src/request_watcher.js +45 -0
  46. package/dist/src/request_watcher.js.map +1 -1
  47. package/dist/src/store.d.ts +46 -0
  48. package/dist/src/store.d.ts.map +1 -1
  49. package/dist/src/stores/lucid.d.ts +18 -1
  50. package/dist/src/stores/lucid.d.ts.map +1 -1
  51. package/dist/src/stores/lucid.js +40 -0
  52. package/dist/src/stores/lucid.js.map +1 -1
  53. package/dist/src/stores/memory.d.ts +7 -1
  54. package/dist/src/stores/memory.d.ts.map +1 -1
  55. package/dist/src/stores/memory.js +35 -0
  56. package/dist/src/stores/memory.js.map +1 -1
  57. package/dist/src/ui/api.d.ts +16 -1
  58. package/dist/src/ui/api.d.ts.map +1 -1
  59. package/dist/src/ui/api.js +53 -5
  60. package/dist/src/ui/api.js.map +1 -1
  61. package/dist/src/ui/index.d.ts +1 -1
  62. package/dist/src/ui/index.js +1 -1
  63. package/dist/src/watchers/define_config.d.ts +28 -0
  64. package/dist/src/watchers/define_config.d.ts.map +1 -1
  65. package/dist/src/watchers/define_config.js +10 -0
  66. package/dist/src/watchers/define_config.js.map +1 -1
  67. package/dist/src/watchers/index.d.ts +4 -4
  68. package/dist/src/watchers/index.d.ts.map +1 -1
  69. package/dist/src/watchers/index.js +2 -3
  70. package/dist/src/watchers/index.js.map +1 -1
  71. package/dist/src/watchers/logs_watcher.d.ts +0 -19
  72. package/dist/src/watchers/logs_watcher.d.ts.map +1 -1
  73. package/dist/src/watchers/logs_watcher.js +22 -0
  74. package/dist/src/watchers/logs_watcher.js.map +1 -1
  75. package/dist/src/watchers/redis_watcher.d.ts +78 -1
  76. package/dist/src/watchers/redis_watcher.d.ts.map +1 -1
  77. package/dist/src/watchers/redis_watcher.js +124 -1
  78. package/dist/src/watchers/redis_watcher.js.map +1 -1
  79. package/package.json +1 -1
@@ -1,5 +1,40 @@
1
1
  import { currentUserRef } from './context_accessor.js';
2
2
  import { EntryType } from './entry.js';
3
+ /** File extensions treated as static assets. */
4
+ const ASSET_EXTENSIONS = /\.(?:js|mjs|cjs|css|map|png|jpe?g|gif|svg|webp|avif|ico|woff2?|ttf|eot|mp4|webm|txt|xml|wasm)$/i;
5
+ /**
6
+ * Classify a request as a screen visit, an API call, or a static asset.
7
+ *
8
+ * Order matters and encodes what is most reliable:
9
+ *
10
+ * 1. Assets go by URL, before anything else — a `.css` fetched with `Accept: * / *`
11
+ * would otherwise land in `api` and drown the endpoint list.
12
+ * 2. `x-inertia` is decisive for `page`. An Inertia visit asks for JSON and IS a
13
+ * screen navigation; going by `Accept` alone would file every one of them as
14
+ * `api`, which is exactly backwards for an Inertia app.
15
+ * 3. Then the response content-type, which describes what was actually served
16
+ * rather than what the client hoped for.
17
+ * 4. Then `Accept: text/html` — a plain browser navigation to a server-rendered
18
+ * page (an Edge template, a redirect landing).
19
+ *
20
+ * Anything left is `api`.
21
+ */
22
+ export function classifyRequest(request, responseContentType) {
23
+ const url = stripQuery(String(request.url()));
24
+ if (ASSET_EXTENSIONS.test(url))
25
+ return 'asset';
26
+ // An Inertia visit sets this and asks for JSON, but it is a screen navigation.
27
+ if (headerString(request, 'x-inertia') !== undefined)
28
+ return 'page';
29
+ if (responseContentType !== undefined && responseContentType.includes('text/html'))
30
+ return 'page';
31
+ const accept = headerString(request, 'accept') ?? '';
32
+ // `text/html` before any `application/json` in the list: browsers send both, and
33
+ // the FIRST one is what they actually prefer.
34
+ if (accept.includes('text/html'))
35
+ return 'page';
36
+ return 'api';
37
+ }
3
38
  /**
4
39
  * Default `requestCapture.maxBodyBytes`: bodies over 128 KiB are not captured.
5
40
  * ON by default — the safe-by-default guard so a synchronous redaction walk over
@@ -222,6 +257,7 @@ export async function recordRequest(store, ctx, startedAt, options = {}) {
222
257
  : enrichment.user !== undefined
223
258
  ? enrichment.user
224
259
  : resolveRequestUser(ctx);
260
+ const kind = classifyRequest(ctx.request, responseContentType(ctx));
225
261
  // Body capture (gated). Only when the caller opted in AND the request exposes a
226
262
  // body accessor. The gate runs HERE — before the store's synchronous redaction
227
263
  // walk — so a huge/binary body is replaced by a marker and never walked; a body
@@ -237,6 +273,7 @@ export async function recordRequest(store, ctx, startedAt, options = {}) {
237
273
  status,
238
274
  durationMs,
239
275
  traceId: options.traceId ?? null,
276
+ kind,
240
277
  user,
241
278
  ...(enrichment.context !== undefined ? { context: enrichment.context } : {}),
242
279
  ...(captureBody !== undefined ? { body: captureBody } : {}),
@@ -245,6 +282,7 @@ export async function recordRequest(store, ctx, startedAt, options = {}) {
245
282
  origin: 'http',
246
283
  tags: [
247
284
  `method:${method}`,
285
+ `kind:${kind}`,
248
286
  ...(status !== null ? [`status:${status}`] : []),
249
287
  ...(user?.id ? [`user:${user.id}`] : []),
250
288
  ...enrichment.tags,
@@ -256,6 +294,13 @@ export async function recordRequest(store, ctx, startedAt, options = {}) {
256
294
  recorded.content.traceId = recorded.traceId;
257
295
  return recorded;
258
296
  }
297
+ /** The response's content-type, when the host exposes a header accessor. */
298
+ function responseContentType(ctx) {
299
+ const value = ctx.response.getHeader?.('content-type');
300
+ if (typeof value === 'string')
301
+ return value;
302
+ return Array.isArray(value) && typeof value[0] === 'string' ? value[0] : undefined;
303
+ }
259
304
  /** Drop a `?query=string` suffix from a url. */
260
305
  function stripQuery(url) {
261
306
  const q = url.indexOf('?');
@@ -1 +1 @@
1
- {"version":3,"file":"request_watcher.js","sourceRoot":"","sources":["../../src/request_watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request_watcher.js","sourceRoot":"","sources":["../../src/request_watcher.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,13 @@ export interface EntryQuery {
12
12
  familyHash?: string;
13
13
  /** Only entries recorded under this trace id. */
14
14
  traceId?: string;
15
+ /**
16
+ * Only entries recorded under ANY of these trace ids. Exists so a page of traces
17
+ * can be hydrated with ONE query instead of one per trace: the traces screen picks
18
+ * its page of ids first (see {@link TelescopeStore.listTraceIds}) and then fetches
19
+ * exactly those entries. Composes with `traceId` as an additional constraint.
20
+ */
21
+ traceIds?: string[];
15
22
  /** Only entries strictly older than this instant (keyset-ish pagination). */
16
23
  before?: Date;
17
24
  /** Only entries newer than this instant. */
@@ -24,6 +31,28 @@ export interface EntryQuery {
24
31
  search?: string;
25
32
  /** Cap the number of returned entries. */
26
33
  limit?: number;
34
+ /**
35
+ * Skip this many entries before returning, for offset pagination. Applied AFTER
36
+ * ordering (newest-first), so `{ limit: 25, offset: 25 }` is the second page.
37
+ */
38
+ offset?: number;
39
+ }
40
+ /** One row of {@link TelescopeStore.listTraceIds} — a trace and when it was last seen. */
41
+ export interface TraceIdRow {
42
+ traceId: string;
43
+ /** The newest `createdAt` among the trace's entries. */
44
+ lastAt: Date;
45
+ }
46
+ /** The window + page for {@link TelescopeStore.listTraceIds}. */
47
+ export interface TraceIdQuery {
48
+ /** How many trace ids to return. */
49
+ limit: number;
50
+ /** How many to skip, for offset pagination. */
51
+ offset?: number;
52
+ /** Only traces with an entry strictly older than this instant. */
53
+ before?: Date;
54
+ /** Only traces with an entry newer than this instant. */
55
+ after?: Date;
27
56
  }
28
57
  /**
29
58
  * The storage abstraction Telescope records through and the headless query API
@@ -52,5 +81,22 @@ export interface TelescopeStore {
52
81
  prune(olderThan: Date, keepLast?: number): Promise<number>;
53
82
  /** Delete every stored entry. */
54
83
  clear(): Promise<void>;
84
+ /**
85
+ * OPTIONAL fast path for the traces screen: the page of distinct trace ids,
86
+ * ordered by most-recently-seen, WITHOUT loading their entries.
87
+ *
88
+ * Why it exists: summarizing traces means grouping entries by `traceId`, and doing
89
+ * that in JS requires loading every candidate entry first. On a real table (500k+
90
+ * rows, dominated by whichever watcher is chattiest) asking for 80 traces meant
91
+ * reading 50k rows and discarding 99% of them. A store backed by SQL can answer
92
+ * this with `GROUP BY trace_id ORDER BY MAX(created_at) DESC LIMIT/OFFSET`, which
93
+ * is an index walk instead of a scan.
94
+ *
95
+ * OPTIONAL, and that is deliberate: it is a capability, not a requirement. A store
96
+ * that does not implement it (including any third-party one written before this
97
+ * existed) keeps working — the metrics service falls back to scan-and-group, which
98
+ * is correct, just slower.
99
+ */
100
+ listTraceIds?(query: TraceIdQuery): Promise<TraceIdRow[]>;
55
101
  }
56
102
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,yDAAyD;IACzD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAEvC,mDAAmD;IACnD,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0FAA0F;AAC1F,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,EAAE,IAAI,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,yDAAyD;IACzD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAEvC,mDAAmD;IACnD,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAC3D"}
@@ -1,5 +1,5 @@
1
1
  import { type Entry, type RecordInput } from '../entry.js';
2
- import type { EntryQuery, TelescopeStore } from '../store.js';
2
+ import type { EntryQuery, TelescopeStore, TraceIdQuery, TraceIdRow } from '../store.js';
3
3
  /**
4
4
  * The table {@link LucidTelescopeStore} reads and writes. Override via
5
5
  * {@link LucidStoreOptions.tableName} when `telescope_entries` collides with an
@@ -66,8 +66,15 @@ export interface LucidQueryBuilderLike {
66
66
  where(column: string, value: unknown): this;
67
67
  where(column: string, operator: string, value: unknown): this;
68
68
  whereRaw(sql: string, bindings?: unknown[]): this;
69
+ whereIn(column: string, values: readonly unknown[]): this;
70
+ whereNotNull(column: string): this;
69
71
  orderBy(column: string, direction: 'asc' | 'desc'): this;
72
+ groupBy(...columns: string[]): this;
70
73
  limit(value: number): this;
74
+ offset(value: number): this;
75
+ /** Aggregate MAX with an alias, e.g. `max('created_at as last_at')`. Chainable so it
76
+ * composes with `select()` in a grouped query. */
77
+ max(expression: string): this;
71
78
  select(...columns: string[]): Promise<Record<string, unknown>[]>;
72
79
  count(column: string, alias: string): Promise<Record<string, unknown>[]>;
73
80
  delete(): Promise<number>;
@@ -127,6 +134,16 @@ export declare class LucidTelescopeStore implements TelescopeStore {
127
134
  record<TContent>(input: RecordInput<TContent>): Promise<Entry<TContent>>;
128
135
  get(id: string): Promise<Entry | null>;
129
136
  list(query?: EntryQuery): Promise<Entry[]>;
137
+ /**
138
+ * The page of distinct trace ids, most-recently-seen first — the SQL fast path
139
+ * described on {@link TelescopeStore.listTraceIds}.
140
+ *
141
+ * `GROUP BY trace_id` with `MAX(created_at)` lets the database do the grouping and
142
+ * the paging, so the traces screen reads ~`limit` rows instead of every entry in
143
+ * the window. Entries with a NULL `trace_id` are excluded: they belong to no trace
144
+ * and would collapse into one meaningless bucket.
145
+ */
146
+ listTraceIds(query: TraceIdQuery): Promise<TraceIdRow[]>;
130
147
  count(): Promise<number>;
131
148
  prune(olderThan: Date, keepLast?: number): Promise<number>;
132
149
  clear(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
@@ -181,6 +181,13 @@ export class LucidTelescopeStore {
181
181
  builder = builder.where('family_hash', query.familyHash);
182
182
  if (query.traceId !== undefined)
183
183
  builder = builder.where('trace_id', query.traceId);
184
+ if (query.traceIds !== undefined) {
185
+ // An empty list means "no traces", not "no filter" — whereIn([]) already yields
186
+ // zero rows, but being explicit keeps a caller's empty page from becoming a scan.
187
+ if (query.traceIds.length === 0)
188
+ return [];
189
+ builder = builder.whereIn('trace_id', query.traceIds);
190
+ }
184
191
  if (query.before !== undefined)
185
192
  builder = builder.where('created_at', '<', query.before.getTime());
186
193
  if (query.after !== undefined)
@@ -200,9 +207,42 @@ export class LucidTelescopeStore {
200
207
  builder = builder.orderBy('created_at', 'desc').orderBy('sequence', 'desc');
201
208
  if (query.limit !== undefined)
202
209
  builder = builder.limit(query.limit);
210
+ if (query.offset !== undefined && query.offset > 0)
211
+ builder = builder.offset(query.offset);
203
212
  const rows = await builder.select('*');
204
213
  return rows.map((r) => hydrate(r));
205
214
  }
215
+ /**
216
+ * The page of distinct trace ids, most-recently-seen first — the SQL fast path
217
+ * described on {@link TelescopeStore.listTraceIds}.
218
+ *
219
+ * `GROUP BY trace_id` with `MAX(created_at)` lets the database do the grouping and
220
+ * the paging, so the traces screen reads ~`limit` rows instead of every entry in
221
+ * the window. Entries with a NULL `trace_id` are excluded: they belong to no trace
222
+ * and would collapse into one meaningless bucket.
223
+ */
224
+ async listTraceIds(query) {
225
+ await this.init();
226
+ let builder = this.db.from(this.tableName);
227
+ if (query.before !== undefined)
228
+ builder = builder.where('created_at', '<', query.before.getTime());
229
+ if (query.after !== undefined)
230
+ builder = builder.where('created_at', '>', query.after.getTime());
231
+ // `select()` resolves the query, so it goes LAST — every chainable clause
232
+ // (including the MAX aggregate) has to be applied before it.
233
+ const rows = await builder
234
+ .whereNotNull('trace_id')
235
+ .groupBy('trace_id')
236
+ .max('created_at as last_at')
237
+ .orderBy('last_at', 'desc')
238
+ .limit(query.limit)
239
+ .offset(query.offset ?? 0)
240
+ .select('trace_id');
241
+ return rows.map((row) => ({
242
+ traceId: row.trace_id,
243
+ lastAt: new Date(toInt(row.last_at)),
244
+ }));
245
+ }
206
246
  async count() {
207
247
  await this.init();
208
248
  const rows = await this.db.from(this.tableName).count('*', 'total');
@@ -1 +1 @@
1
- {"version":3,"file":"lucid.js","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid.js","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAgC,aAAa,EAAoB,MAAM,aAAa,CAAC;AAG5F;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAyBtD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAS,GAAW,kBAAkB;IAC1E,OAAO;QACL,+BAA+B,SAAS;;;;;;;;;;;MAWtC;QACF,+BAA+B,SAAS,wBAAwB,SAAS,kBAAkB;QAC3F,+BAA+B,SAAS,kBAAkB,SAAS,YAAY;QAC/E,+BAA+B,SAAS,sBAAsB,SAAS,gBAAgB;QACvF,+BAA+B,SAAS,yBAAyB,SAAS,mBAAmB;KAC9F,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,kFAAkF;AAClF,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,kFAAkF;AAClF,+EAA+E;AAC/E,kFAAkF;AAElF;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,SAAS,8BAA8B;IACrC,OAAO,+BAA+B,sBAAsB;;;;MAIxD,CAAC;AACP,CAAC;AAED;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,SAAiB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,qBAAqB,CAAC,SAAS,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AA2DD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,mBAAmB;IAiBX,EAAE;IAhBJ,SAAS,CAAS;IAClB,UAAU,CAAgB;IAC1B,eAAe,CAAU;IAC1C,+EAA+E;IACvE,KAAK,GAAyB,IAAI,CAAC;IACnC,QAAQ,GAAG,CAAC,CAAC;IACrB;;;;;;OAMG;IACK,SAAS,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAExD,YACmB,EAAqB,EACtC,OAAO,GAAsB,EAAE;kBADd,EAAE;QAGnB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,UAAU;YACb,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAW,KAA4B;QACjD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAgB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClF,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,2FAA2F;YAC3F,6FAA6F;YAC7F,+FAA+F;YAC/F,8FAA8F;YAC9F,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1E,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,MAAM,GAAG,GAAqB;YAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;SACtC,CAAC;QAEF,uFAAuF;QACvF,mFAAmF;QACnF,2FAA2F;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CACrC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAyC,CAAC,CAChF,CAAC;QACF,yFAAyF;QACzF,gCAAgC;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CACzB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,MAAM,KAAK,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAkC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,GAAe,EAAE;QAC/B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7F,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,gFAAgF;YAChF,kFAAkF;YAClF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAC5B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,2EAA2E;YAC3E,oEAAoE;YACpE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,2BAA2B,EAAE;gBACtD,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC,QAAQ,CACxB,2EAA2E,EAC3E,CAAC,MAAM,EAAE,MAAM,CAAC,CACjB,CAAC;QACJ,CAAC;QACD,8EAA8E;QAC9E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3F,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAgC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,KAAmB;QACpC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAC5B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpE,0EAA0E;QAC1E,6DAA6D;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO;aACvB,YAAY,CAAC,UAAU,CAAC;aACxB,OAAO,CAAC,UAAU,CAAC;aACnB,GAAG,CAAC,uBAAuB,CAAC;aAC5B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;aAClB,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;aACzB,MAAM,CAAC,UAAU,CAAC,CAAC;QAEtB,OAAQ,IAAiE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtF,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACrC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAe,EAAE,QAAiB;QAC5C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAChF,CAAC;QACD,6EAA6E;QAC7E,8EAA8E;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE;aACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aACpB,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC;aAChC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;aAC7B,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,MAAM,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,EAAE;aACX,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aACpB,QAAQ,CAAC,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;aACrE,MAAM,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IAED,mEAAmE;IACnE,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,qEAAqE;IAC7D,IAAI;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;QACD,2EAA2E;QAC3E,0CAA0C;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE;aACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aACpB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,KAAK,CAAC,CAAC,CAAC;aACR,MAAM,CAAC,UAAU,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,eAAe;QAC3B,mDAAmD;QACnD,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,8BAA8B,EAAE,CAAC,CAAC;QACzD,4EAA4E;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,wEAAwE;QACxE,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO;QAChC,uEAAuE;QACvE,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,oFAAoF;IAC5E,KAAK,CAAC,qBAAqB;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,sBAAsB,CAAC,WAAmB;QACtD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;QAChF,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC;YACjD,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,WAAW;YACX,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;CACF;AAQD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAqB,EACrB,OAAO,GAAuB,EAAE;IAEhC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,OAAO,CAAC,GAAqB;IACpC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;QACnC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7B,UAAU,EACR,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3F,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QACzD,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC7B,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,KAAK,CAAC,KAAc;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type Entry, type RecordInput } from '../entry.js';
2
- import type { EntryQuery, TelescopeStore } from '../store.js';
2
+ import type { EntryQuery, TelescopeStore, TraceIdQuery, TraceIdRow } from '../store.js';
3
3
  /** Options for {@link InMemoryTelescopeStore}. */
4
4
  export interface InMemoryStoreOptions {
5
5
  /**
@@ -23,6 +23,12 @@ export declare class InMemoryTelescopeStore implements TelescopeStore {
23
23
  record<TContent>(input: RecordInput<TContent>): Promise<Entry<TContent>>;
24
24
  get(id: string): Promise<Entry | null>;
25
25
  list(query?: EntryQuery): Promise<Entry[]>;
26
+ /**
27
+ * The in-memory counterpart of the SQL fast path. It still walks every entry —
28
+ * there is no index to exploit — but it groups ONCE and hands back only the page,
29
+ * so callers share a single code path with the SQL store instead of branching.
30
+ */
31
+ listTraceIds(query: TraceIdQuery): Promise<TraceIdRow[]>;
26
32
  count(): Promise<number>;
27
33
  prune(olderThan: Date, keepLast?: number): Promise<number>;
28
34
  clear(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/stores/memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,KAAK,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,OAAO,GAAE,oBAAyB,EAG7C;IAEK,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAqB7E;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAE3C;IAEK,IAAI,CAAC,KAAK,GAAE,UAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAgBnD;IAEK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAE7B;IAEK,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB/D;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,OAAO,CAAC,aAAa;CAMtB"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/stores/memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,KAAK,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExF,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,OAAO,GAAE,oBAAyB,EAG7C;IAEK,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAqB7E;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAE3C;IAEK,IAAI,CAAC,KAAK,GAAE,UAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAyBnD;IAED;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAe7D;IAEK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAE7B;IAEK,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB/D;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,OAAO,CAAC,aAAa;CAMtB"}
@@ -42,7 +42,11 @@ export class InMemoryTelescopeStore {
42
42
  }
43
43
  async list(query = {}) {
44
44
  const search = query.search?.toLowerCase();
45
+ const traceIds = query.traceIds === undefined ? null : new Set(query.traceIds);
45
46
  const results = [];
47
+ // Offset is counted over MATCHES, so it must be consumed after the filters and
48
+ // before the limit — the same order the SQL store gets from OFFSET/LIMIT.
49
+ let toSkip = query.offset ?? 0;
46
50
  // `entries` is already newest-first.
47
51
  for (const entry of this.entries) {
48
52
  if (query.type !== undefined && entry.type !== query.type)
@@ -53,18 +57,49 @@ export class InMemoryTelescopeStore {
53
57
  continue;
54
58
  if (query.traceId !== undefined && entry.traceId !== query.traceId)
55
59
  continue;
60
+ if (traceIds !== null && (entry.traceId === null || !traceIds.has(entry.traceId)))
61
+ continue;
56
62
  if (query.before !== undefined && !(entry.createdAt < query.before))
57
63
  continue;
58
64
  if (query.after !== undefined && !(entry.createdAt > query.after))
59
65
  continue;
60
66
  if (search !== undefined && !matchesSearch(entry, search))
61
67
  continue;
68
+ if (toSkip > 0) {
69
+ toSkip--;
70
+ continue;
71
+ }
62
72
  results.push(entry);
63
73
  if (query.limit !== undefined && results.length >= query.limit)
64
74
  break;
65
75
  }
66
76
  return results;
67
77
  }
78
+ /**
79
+ * The in-memory counterpart of the SQL fast path. It still walks every entry —
80
+ * there is no index to exploit — but it groups ONCE and hands back only the page,
81
+ * so callers share a single code path with the SQL store instead of branching.
82
+ */
83
+ async listTraceIds(query) {
84
+ const lastAt = new Map();
85
+ for (const entry of this.entries) {
86
+ if (entry.traceId === null)
87
+ continue;
88
+ if (query.before !== undefined && !(entry.createdAt < query.before))
89
+ continue;
90
+ if (query.after !== undefined && !(entry.createdAt > query.after))
91
+ continue;
92
+ const at = entry.createdAt.getTime();
93
+ const seen = lastAt.get(entry.traceId);
94
+ if (seen === undefined || at > seen)
95
+ lastAt.set(entry.traceId, at);
96
+ }
97
+ const offset = query.offset ?? 0;
98
+ return [...lastAt.entries()]
99
+ .sort((a, b) => b[1] - a[1])
100
+ .slice(offset, offset + query.limit)
101
+ .map(([traceId, at]) => ({ traceId, lastAt: new Date(at) }));
102
+ }
68
103
  async count() {
69
104
  return this.entries.length;
70
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/stores/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAgC,aAAa,EAAoB,MAAM,aAAa,CAAC;AAY5F;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IAChB,UAAU,CAAS;IACnB,OAAO,GAAY,EAAE,CAAC;IACtB,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,QAAQ,GAAG,CAAC,CAAC;IAErB,YAAY,OAAO,GAAyB,EAAE;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAW,KAA4B;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAgB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClF,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,uEAAuE;QACvE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAc,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,GAAe,EAAE;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,qCAAqC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;gBAAE,SAAS;YACpE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;gBAAE,SAAS;YACtF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;gBAAE,SAAS;YAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5E,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,SAAS;YACpE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM;QACxE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAe,EAAE,QAAiB;QAC5C,uEAAuE;QACvE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,sDAAsD;QACtD,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,KAAY,EAAE,MAAc;IACjD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/stores/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAgC,aAAa,EAAoB,MAAM,aAAa,CAAC;AAY5F;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IAChB,UAAU,CAAS;IACnB,OAAO,GAAY,EAAE,CAAC;IACtB,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,QAAQ,GAAG,CAAC,CAAC;IAErB,YAAY,OAAO,GAAyB,EAAE;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAW,KAA4B;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAgB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClF,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,uEAAuE;QACvE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAc,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,GAAe,EAAE;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,+EAA+E;QAC/E,0EAA0E;QAC1E,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/B,qCAAqC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;gBAAE,SAAS;YACpE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;gBAAE,SAAS;YACtF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;gBAAE,SAAS;YAC7E,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAAE,SAAS;YAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5E,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,SAAS;YACpE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM;QACxE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,KAAmB;QACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;gBAAE,SAAS;YACrC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5E,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,GAAG,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAe,EAAE,QAAiB;QAC5C,uEAAuE;QACvE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,sDAAsD;QACtD,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,KAAY,EAAE,MAAc;IACjD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -75,8 +75,23 @@ export declare class TelescopeApi {
75
75
  * over time (total + per-type per bucket).
76
76
  */
77
77
  metricsTimeseries(ctx: UiHttpContext): Promise<unknown>;
78
- /** `GET <path>/api/metrics/traces?limit=` — recent traces, newest-last-seen first. */
78
+ /**
79
+ * `GET <path>/api/metrics/traces?limit=&page=` — recent traces, newest-last-seen
80
+ * first, paginated.
81
+ *
82
+ * `hasMore` instead of a total: counting distinct traces means a `COUNT(DISTINCT
83
+ * trace_id)` over the same table this endpoint exists to stop scanning. One extra
84
+ * row tells the UI whether to enable "next", which is all a Prev/Next pager needs.
85
+ */
79
86
  metricsTraces(ctx: UiHttpContext): Promise<unknown>;
87
+ /**
88
+ * `GET <path>/api/metrics/screens?windowMs=&kind=&limit=` — per-route traffic.
89
+ *
90
+ * `kind` splits page visits from API calls, which the request list could not do:
91
+ * a screen navigation and the dozen XHRs it fires were all `request` entries with
92
+ * a url, so one list had to answer two different questions and answered neither.
93
+ */
94
+ metricsScreens(ctx: UiHttpContext): Promise<unknown>;
80
95
  /** `GET <path>/api/metrics/waterfall/:traceId` — span waterfall for one trace, or 404. */
81
96
  metricsWaterfall(ctx: UiHttpContext, traceId: string): Promise<unknown>;
82
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"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"}
@@ -33,13 +33,20 @@ export class TelescopeApi {
33
33
  */
34
34
  async list(ctx) {
35
35
  const query = buildQuery(ctx.request);
36
- const entries = await this.service.list(query);
36
+ const limit = query.limit ?? DEFAULT_LIMIT;
37
+ // One row past the page tells us whether a next page exists. A COUNT would have
38
+ // to re-run the same filters -- including the `search` LIKE -- over the whole
39
+ // table, which costs more than the page itself.
40
+ const rows = await this.service.list({ ...query, limit: limit + 1 });
41
+ const hasMore = rows.length > limit;
42
+ const entries = hasMore ? rows.slice(0, limit) : rows;
43
+ const page = Math.floor((query.offset ?? 0) / limit) + 1;
37
44
  return ctx.response
38
45
  .status(200)
39
46
  .header('content-type', 'application/json')
40
47
  .send({
41
48
  data: entries.map(toSummary),
42
- meta: { count: entries.length, query: describe(query) },
49
+ meta: { count: entries.length, page, limit, hasMore, query: describe(query) },
43
50
  });
44
51
  }
45
52
  /** `GET <path>/api/entries/:id` — one entry with its full `content`, or 404. */
@@ -89,9 +96,11 @@ export class TelescopeApi {
89
96
  }
90
97
  const windowMs = readNumber(ctx.request, 'windowMs') ?? 3_600_000;
91
98
  const buckets = readNumber(ctx.request, 'buckets');
99
+ const topExceptions = readNumber(ctx.request, 'topExceptions');
92
100
  try {
93
101
  const data = await this.metrics.getStats({
94
102
  type,
103
+ ...(topExceptions !== undefined ? { topExceptions: clampLimit(topExceptions, 200) } : {}),
95
104
  windowMs,
96
105
  ...(buckets !== undefined ? { buckets } : {}),
97
106
  });
@@ -121,14 +130,49 @@ export class TelescopeApi {
121
130
  return ctx.response.status(400).send({ error: asMessage(err) });
122
131
  }
123
132
  }
124
- /** `GET <path>/api/metrics/traces?limit=` — recent traces, newest-last-seen first. */
133
+ /**
134
+ * `GET <path>/api/metrics/traces?limit=&page=` — recent traces, newest-last-seen
135
+ * first, paginated.
136
+ *
137
+ * `hasMore` instead of a total: counting distinct traces means a `COUNT(DISTINCT
138
+ * trace_id)` over the same table this endpoint exists to stop scanning. One extra
139
+ * row tells the UI whether to enable "next", which is all a Prev/Next pager needs.
140
+ */
125
141
  async metricsTraces(ctx) {
126
142
  const limit = clampLimit(readNumber(ctx.request, 'limit') ?? 50);
127
- const data = await this.metrics.getTraces(limit);
143
+ const page = Math.max(1, Math.floor(readNumber(ctx.request, 'page') ?? 1));
144
+ const offset = (page - 1) * limit;
145
+ const rows = await this.metrics.getTraces(limit + 1, offset);
146
+ const hasMore = rows.length > limit;
147
+ const data = hasMore ? rows.slice(0, limit) : rows;
148
+ return ctx.response
149
+ .status(200)
150
+ .header('content-type', 'application/json')
151
+ .send({ data, meta: { count: data.length, page, limit, hasMore } });
152
+ }
153
+ /**
154
+ * `GET <path>/api/metrics/screens?windowMs=&kind=&limit=` — per-route traffic.
155
+ *
156
+ * `kind` splits page visits from API calls, which the request list could not do:
157
+ * a screen navigation and the dozen XHRs it fires were all `request` entries with
158
+ * a url, so one list had to answer two different questions and answered neither.
159
+ */
160
+ async metricsScreens(ctx) {
161
+ const windowMs = readNumber(ctx.request, 'windowMs') ?? 3_600_000;
162
+ const limit = clampLimit(readNumber(ctx.request, 'limit') ?? 50, 200);
163
+ const kind = readString(ctx.request, 'kind');
164
+ if (kind !== undefined && kind !== 'page' && kind !== 'api' && kind !== 'asset') {
165
+ return ctx.response.status(400).send({ error: '`kind` must be page, api or asset' });
166
+ }
167
+ const data = await this.metrics.getScreens({
168
+ windowMs,
169
+ limit,
170
+ ...(kind !== undefined ? { kind } : {}),
171
+ });
128
172
  return ctx.response
129
173
  .status(200)
130
174
  .header('content-type', 'application/json')
131
- .send({ data, meta: { count: data.length } });
175
+ .send({ data, meta: { count: data.length, windowMs, kind: kind ?? null } });
132
176
  }
133
177
  /** `GET <path>/api/metrics/waterfall/:traceId` — span waterfall for one trace, or 404. */
134
178
  async metricsWaterfall(ctx, traceId) {
@@ -303,6 +347,10 @@ export function buildQuery(request) {
303
347
  if (!Number.isNaN(date.getTime()))
304
348
  query.before = date;
305
349
  }
350
+ const page = readNumber(request, 'page');
351
+ if (page !== undefined && page > 1) {
352
+ query.offset = (Math.floor(page) - 1) * (query.limit ?? DEFAULT_LIMIT);
353
+ }
306
354
  return query;
307
355
  }
308
356
  /** A JSON-safe echo of the applied query (Dates → ISO strings) for `meta`. */