@uptimizr/collector-server 1.1.1 → 2.0.1

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 (61) hide show
  1. package/AGENTS.md +193 -0
  2. package/README.md +112 -8
  3. package/dist/__tests__/support/registryRequests.d.ts +47 -0
  4. package/dist/__tests__/support/registryRequests.d.ts.map +1 -0
  5. package/dist/__tests__/support/registryRequests.js +93 -0
  6. package/dist/__tests__/support/registryRequests.js.map +1 -0
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +34 -3
  9. package/dist/app.js.map +1 -1
  10. package/dist/audit.d.ts +22 -0
  11. package/dist/audit.d.ts.map +1 -0
  12. package/dist/audit.js +96 -0
  13. package/dist/audit.js.map +1 -0
  14. package/dist/auth.d.ts +64 -0
  15. package/dist/auth.d.ts.map +1 -0
  16. package/dist/auth.js +71 -0
  17. package/dist/auth.js.map +1 -0
  18. package/dist/cli.js +279 -0
  19. package/dist/cli.js.map +1 -1
  20. package/dist/cliStore.d.ts +20 -2
  21. package/dist/cliStore.d.ts.map +1 -1
  22. package/dist/cliStore.js +20 -8
  23. package/dist/cliStore.js.map +1 -1
  24. package/dist/clickhouseStore.d.ts.map +1 -1
  25. package/dist/clickhouseStore.js +7 -1
  26. package/dist/clickhouseStore.js.map +1 -1
  27. package/dist/config.d.ts +13 -0
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +2 -0
  30. package/dist/config.js.map +1 -1
  31. package/dist/duckdbStore.d.ts.map +1 -1
  32. package/dist/duckdbStore.js +7 -1
  33. package/dist/duckdbStore.js.map +1 -1
  34. package/dist/liveToken.d.ts +14 -5
  35. package/dist/liveToken.d.ts.map +1 -1
  36. package/dist/liveToken.js +32 -6
  37. package/dist/liveToken.js.map +1 -1
  38. package/dist/memoryStore.d.ts +8 -3
  39. package/dist/memoryStore.d.ts.map +1 -1
  40. package/dist/memoryStore.js +57 -2
  41. package/dist/memoryStore.js.map +1 -1
  42. package/dist/mssqlStore.d.ts.map +1 -1
  43. package/dist/mssqlStore.js +7 -1
  44. package/dist/mssqlStore.js.map +1 -1
  45. package/dist/postgresStore.d.ts.map +1 -1
  46. package/dist/postgresStore.js +7 -1
  47. package/dist/postgresStore.js.map +1 -1
  48. package/dist/routes/live.d.ts.map +1 -1
  49. package/dist/routes/live.js +31 -26
  50. package/dist/routes/live.js.map +1 -1
  51. package/dist/routes/meta.d.ts +67 -0
  52. package/dist/routes/meta.d.ts.map +1 -0
  53. package/dist/routes/meta.js +436 -0
  54. package/dist/routes/meta.js.map +1 -0
  55. package/dist/routes/query.d.ts.map +1 -1
  56. package/dist/routes/query.js +805 -108
  57. package/dist/routes/query.js.map +1 -1
  58. package/dist/store.d.ts +32 -5
  59. package/dist/store.d.ts.map +1 -1
  60. package/llms.txt +38 -0
  61. package/package.json +11 -7
@@ -0,0 +1,436 @@
1
+ /**
2
+ * Self-description routes (ADR 0051 §1, design sketch §A.2).
3
+ *
4
+ * `GET /api/v1/openapi.json` serves an **OpenAPI 3.1** document for the read
5
+ * API, assembled from two sources that are already the truth:
6
+ *
7
+ * 1. the **metric registry** (`@uptimizr/metrics`) — one path per registered
8
+ * `endpoint`, the operation's summary/description/tags, the `200` response
9
+ * schema (the registry `row` converted with `z.toJSONSchema`), per-column
10
+ * units and descriptions, and the semantics OpenAPI has no vocabulary for
11
+ * (result grain, group-by dimensions, caveats, capture channels, row caps,
12
+ * comparison direction) as `x-uptimizr-*` vendor extensions;
13
+ * 2. the **live Fastify route table** — every parameter's JSON Schema is the Zod
14
+ * querystring/params schema that actually validates the request, captured
15
+ * through an `onRoute` hook. Nothing about a parameter's *type* is restated
16
+ * here, so the document cannot drift from the validator; the registry
17
+ * supplies the parameter's *meaning* (`FILTER_TARGETS`).
18
+ *
19
+ * The document is **not authenticated** — it is documentation, it contains no
20
+ * project data, and a client needs it before it has credentials. It is served
21
+ * under the same global rate limit as every other route (`app.register(rateLimit)`
22
+ * in `app.ts`).
23
+ *
24
+ * Routes that are not registry metrics are described only when they are trivial
25
+ * and honest to describe (`/health`, this route, and the scene-representation
26
+ * listing). Ingestion (`POST /api/v1/collect`), the scene-proxy write
27
+ * (`PUT …/representation`), the retention-gated raw event stream and the live
28
+ * SSE surface are deliberately omitted rather than half-described.
29
+ */
30
+ import { z } from "zod";
31
+ import { SCHEMA_VERSION } from "@uptimizr/schema";
32
+ import { FILTER_TARGETS, allMetrics, isResourceMetric, } from "@uptimizr/metrics";
33
+ /**
34
+ * `info.version` of the served document: the major version of the HTTP API
35
+ * (`/api/v1`). It is deliberately *not* the npm package version — the document
36
+ * describes the API contract, not the build that serves it. The event wire
37
+ * format is reported separately as `x-uptimizr-schema-version`.
38
+ */
39
+ const API_DOCUMENT_VERSION = "1.0.0";
40
+ /** Prose for each registry category, used as the OpenAPI tag description. */
41
+ const CATEGORY_DESCRIPTIONS = {
42
+ sessions: "Session and scene orientation: what traffic arrived, and what to drill into.",
43
+ attention: "Where attention went — pointer, world, gaze and view-direction aggregates.",
44
+ interaction: "What was touched: mesh interactions, dead/rage clicks, hover and input actions.",
45
+ navigation: "How people moved through the scene: coverage, travel, backtracking, distance.",
46
+ performance: "Rendering performance, resource footprint and their spatial distribution.",
47
+ errors: "Stability: runtime errors, engine diagnostics and capability fallbacks.",
48
+ xr: "WebXR immersive sessions: comfort, locomotion, tracking and guardian contacts.",
49
+ ar: "WebXR AR placement: how long it took, how often it was redone, and onto what.",
50
+ conversion: "Funnels, retention and variant leaderboards.",
51
+ };
52
+ /**
53
+ * The three `/stats` endpoints echo the **effective** voxel `cellSize` next to
54
+ * the registry row, so the caller can label its own grid when the collector
55
+ * derived the resolution from the scene bounds (ADR 0040 §1). The registry `row`
56
+ * describes the aggregation's output (`cells`, `hits`); this records the extra
57
+ * field the route wraps it in, so the document matches the wire.
58
+ */
59
+ const RESPONSE_ENVELOPE_EXTRAS = {
60
+ world_heatmap_stats: {
61
+ cellSize: {
62
+ type: "number",
63
+ exclusiveMinimum: 0,
64
+ description: "The voxel edge length actually used, in world units — the requested `cellSize`, or the value derived from the scene/region bounds (ADR 0040 §1).",
65
+ "x-uptimizr-unit": "world-units",
66
+ },
67
+ },
68
+ gaze_heatmap_stats: {
69
+ cellSize: {
70
+ type: "number",
71
+ exclusiveMinimum: 0,
72
+ description: "The voxel edge length actually used, in world units — the requested `cellSize`, or the value derived from the scene/region bounds (ADR 0040 §1).",
73
+ "x-uptimizr-unit": "world-units",
74
+ },
75
+ },
76
+ boundary_heatmap_stats: {
77
+ cellSize: {
78
+ type: "number",
79
+ exclusiveMinimum: 0,
80
+ description: "The voxel edge length actually used, in world units — the requested `cellSize`, or the value derived from the scene/region bounds (ADR 0040 §1).",
81
+ "x-uptimizr-unit": "world-units",
82
+ },
83
+ },
84
+ };
85
+ /**
86
+ * Install an `onRoute` hook that records every route registered on `app` (and on
87
+ * any plugin registered into it afterwards) together with its Zod schemas.
88
+ * Returns the array the hook fills in — it is complete once `app.ready()` has
89
+ * resolved, which is always before the first request is served.
90
+ */
91
+ export function collectRouteSchemas(app) {
92
+ const routes = [];
93
+ app.addHook("onRoute", (routeOptions) => {
94
+ const schema = routeOptions.schema;
95
+ const methods = Array.isArray(routeOptions.method)
96
+ ? routeOptions.method
97
+ : [routeOptions.method];
98
+ for (const method of methods) {
99
+ routes.push({
100
+ method,
101
+ path: routeOptions.url,
102
+ querystring: schema?.querystring instanceof z.ZodObject ? schema.querystring : undefined,
103
+ params: schema?.params instanceof z.ZodObject ? schema.params : undefined,
104
+ });
105
+ }
106
+ });
107
+ return routes;
108
+ }
109
+ /** `/api/v1/sessions/:id/meta` → `/api/v1/sessions/{id}/meta`. */
110
+ function toOpenApiPath(fastifyPath) {
111
+ return fastifyPath.replace(/:([A-Za-z0-9_]+)/g, "{$1}");
112
+ }
113
+ /** The `:param` names of a Fastify path, in order. */
114
+ function pathParamNames(fastifyPath) {
115
+ return [...fastifyPath.matchAll(/:([A-Za-z0-9_]+)/g)].map((match) => match[1]);
116
+ }
117
+ /**
118
+ * Convert a Zod schema to JSON Schema and drop the `$schema` dialect marker —
119
+ * OpenAPI 3.1 declares the dialect once on the document (`jsonSchemaDialect`),
120
+ * so repeating it on every subschema is noise.
121
+ */
122
+ function toJsonSchema(schema, io) {
123
+ const json = z.toJSONSchema(schema, { io, unrepresentable: "any" });
124
+ delete json.$schema;
125
+ return json;
126
+ }
127
+ /** The registry row schema, with each property annotated from `columns`. */
128
+ function rowSchema(metric) {
129
+ const json = toJsonSchema(metric.row, "output");
130
+ const properties = json.properties;
131
+ if (properties) {
132
+ for (const [name, column] of Object.entries(metric.columns)) {
133
+ const property = properties[name];
134
+ if (!property)
135
+ continue;
136
+ property.description = column.description;
137
+ if (column.unit)
138
+ property["x-uptimizr-unit"] = column.unit;
139
+ if (column.rateOf)
140
+ property["x-uptimizr-rate-of"] = column.rateOf;
141
+ }
142
+ }
143
+ const extras = RESPONSE_ENVELOPE_EXTRAS[metric.id];
144
+ if (extras && properties) {
145
+ json.properties = { ...extras, ...properties };
146
+ json.required = [...Object.keys(extras), ...(json.required ?? [])];
147
+ }
148
+ json.title = metric.title;
149
+ return json;
150
+ }
151
+ /** The parameters of one operation: path params first, then the querystring. */
152
+ function parametersFor(metric, route) {
153
+ const parameters = [];
154
+ const names = pathParamNames(metric.endpoint.path);
155
+ const declared = metric.endpoint.pathParams ?? [];
156
+ const paramsJson = route?.params ? toJsonSchema(route.params, "input") : undefined;
157
+ const paramsProperties = (paramsJson?.properties ?? {});
158
+ names.forEach((name, index) => {
159
+ const filter = declared[index];
160
+ parameters.push({
161
+ name,
162
+ in: "path",
163
+ required: true,
164
+ description: filter ? FILTER_TARGETS[filter].description : undefined,
165
+ schema: paramsProperties[name] ?? { type: "string" },
166
+ ...(filter ? { "x-uptimizr-filter": filter } : {}),
167
+ });
168
+ });
169
+ if (route?.querystring) {
170
+ const json = toJsonSchema(route.querystring, "input");
171
+ const properties = (json.properties ?? {});
172
+ const required = new Set(json.required ?? []);
173
+ for (const [name, schema] of Object.entries(properties)) {
174
+ const target = FILTER_TARGETS[name];
175
+ parameters.push({
176
+ name,
177
+ in: "query",
178
+ required: required.has(name),
179
+ description: target?.description,
180
+ schema,
181
+ });
182
+ }
183
+ }
184
+ return parameters;
185
+ }
186
+ /** The `x-uptimizr-*` semantics OpenAPI itself has no vocabulary for. */
187
+ function vendorExtensions(metric) {
188
+ const units = {};
189
+ let measure;
190
+ let label;
191
+ for (const [name, column] of Object.entries(metric.columns)) {
192
+ if (column.unit)
193
+ units[name] = column.unit;
194
+ if (column.measure)
195
+ measure = name;
196
+ if (column.label)
197
+ label = name;
198
+ }
199
+ return {
200
+ "x-uptimizr-metric": metric.id,
201
+ "x-uptimizr-grain": metric.grain,
202
+ "x-uptimizr-category": metric.category,
203
+ "x-uptimizr-dimensions": metric.dimensions,
204
+ "x-uptimizr-filters": metric.filters,
205
+ "x-uptimizr-units": units,
206
+ ...(measure ? { "x-uptimizr-measure": measure } : {}),
207
+ ...(label ? { "x-uptimizr-label": label } : {}),
208
+ "x-uptimizr-limits": metric.limits,
209
+ "x-uptimizr-interpretation": metric.interpretation,
210
+ "x-uptimizr-caveats": metric.caveats,
211
+ "x-uptimizr-source-channels": metric.sourceChannels,
212
+ "x-uptimizr-related": metric.related,
213
+ ...(metric.comparable ? { "x-uptimizr-comparable": metric.comparable } : {}),
214
+ };
215
+ }
216
+ /** The shared error responses every authenticated read can answer with. */
217
+ const AUTHENTICATED_ERRORS = {
218
+ "400": { $ref: "#/components/responses/BadRequest" },
219
+ "401": { $ref: "#/components/responses/Unauthorized" },
220
+ "403": { $ref: "#/components/responses/Forbidden" },
221
+ "429": { $ref: "#/components/responses/TooManyRequests" },
222
+ };
223
+ /** The operation object for one registry metric. */
224
+ function operationFor(metric, route) {
225
+ // A builder-less **resource** entry is a store read of one object (a session
226
+ // descriptor, a scene proxy), not an aggregation: its body is that object, and
227
+ // it answers 404 when the id is unknown. Every other metric returns rows.
228
+ const single = isResourceMetric(metric);
229
+ const body = single
230
+ ? { $ref: `#/components/schemas/${metric.id}` }
231
+ : { type: "array", items: { $ref: `#/components/schemas/${metric.id}` } };
232
+ return {
233
+ operationId: metric.id,
234
+ summary: metric.title,
235
+ description: `${metric.description}\n\n**How to read it.** ${metric.interpretation}${metric.caveats.length > 0
236
+ ? `\n\n**Caveats.**\n${metric.caveats.map((caveat) => `- ${caveat}`).join("\n")}`
237
+ : ""}`,
238
+ tags: [metric.category],
239
+ parameters: parametersFor(metric, route),
240
+ responses: {
241
+ "200": {
242
+ description: single
243
+ ? `The ${metric.title.toLowerCase()}.`
244
+ : `${metric.title} rows (one row per ${metric.grain}).`,
245
+ content: { "application/json": { schema: body } },
246
+ },
247
+ ...AUTHENTICATED_ERRORS,
248
+ ...(single ? { "404": { $ref: "#/components/responses/NotFound" } } : {}),
249
+ },
250
+ ...vendorExtensions(metric),
251
+ };
252
+ }
253
+ /** The handful of non-metric routes that are trivial and honest to describe. */
254
+ function staticPaths() {
255
+ return {
256
+ "/health": {
257
+ get: {
258
+ operationId: "health",
259
+ summary: "Liveness probe",
260
+ description: 'Always answers `{ "status": "ok" }` when the process is serving.',
261
+ tags: ["meta"],
262
+ security: [],
263
+ responses: {
264
+ "200": {
265
+ description: "The collector is up.",
266
+ content: {
267
+ "application/json": {
268
+ schema: {
269
+ type: "object",
270
+ properties: { status: { type: "string", const: "ok" } },
271
+ required: ["status"],
272
+ },
273
+ },
274
+ },
275
+ },
276
+ },
277
+ },
278
+ },
279
+ "/api/v1/openapi.json": {
280
+ get: {
281
+ operationId: "openapi",
282
+ summary: "This document",
283
+ description: "The OpenAPI 3.1 description of the read API, generated from the semantic metric registry. Unauthenticated: it is documentation and contains no project data.",
284
+ tags: ["meta"],
285
+ security: [],
286
+ responses: {
287
+ "200": {
288
+ description: "The OpenAPI document.",
289
+ content: { "application/json": { schema: { type: "object" } } },
290
+ },
291
+ },
292
+ },
293
+ },
294
+ "/api/v1/scene-representations": {
295
+ get: {
296
+ operationId: "list_scene_representations",
297
+ summary: "Registered scene representations",
298
+ description: "Summaries of the scene proxies registered for the project (ADR 0014) — the index behind the per-scene `scene_representation` read. The proxy blob itself is not included.",
299
+ tags: ["meta"],
300
+ parameters: [],
301
+ responses: {
302
+ "200": {
303
+ description: "One summary per registered scene.",
304
+ content: {
305
+ "application/json": {
306
+ schema: {
307
+ type: "array",
308
+ items: { $ref: "#/components/schemas/SceneRepresentationSummary" },
309
+ },
310
+ },
311
+ },
312
+ },
313
+ ...AUTHENTICATED_ERRORS,
314
+ },
315
+ },
316
+ },
317
+ };
318
+ }
319
+ /** The reusable components: the API-key scheme, error responses, row schemas. */
320
+ function componentsFor(metrics) {
321
+ const schemas = {
322
+ Error: {
323
+ type: "object",
324
+ title: "Error",
325
+ properties: { error: { type: "string", description: "Human-readable failure reason." } },
326
+ required: ["error"],
327
+ },
328
+ SceneRepresentationSummary: {
329
+ type: "object",
330
+ title: "Scene representation summary",
331
+ properties: {
332
+ sceneId: { type: "string", description: "Developer-assigned scene id (ADR 0010)." },
333
+ label: { type: ["string", "null"], description: "Optional display label." },
334
+ kind: { type: "string", description: "Representation kind (e.g. `proxy`)." },
335
+ bounds: {
336
+ type: ["object", "null"],
337
+ description: "Registered world-space bounds, when the proxy carried them.",
338
+ },
339
+ contentHash: { type: ["string", "null"], description: "Content hash of the proxy blob." },
340
+ capturedAt: {
341
+ type: ["string", "null"],
342
+ description: "When the proxy was scanned client-side.",
343
+ },
344
+ updatedAt: { type: "string", description: "When the representation was last written." },
345
+ },
346
+ required: ["sceneId", "kind", "updatedAt"],
347
+ },
348
+ };
349
+ for (const metric of metrics)
350
+ schemas[metric.id] = rowSchema(metric);
351
+ const errorContent = { "application/json": { schema: { $ref: "#/components/schemas/Error" } } };
352
+ return {
353
+ securitySchemes: {
354
+ apiKey: {
355
+ type: "apiKey",
356
+ in: "header",
357
+ name: "x-api-key",
358
+ description: "A project API key with the `query` capability. Reads are always scoped to the project the key resolves to; a client-supplied project id is ignored.",
359
+ },
360
+ },
361
+ responses: {
362
+ BadRequest: { description: "A parameter failed validation.", content: errorContent },
363
+ Unauthorized: { description: "Missing or unknown API key.", content: errorContent },
364
+ Forbidden: {
365
+ description: "The key is ingest-only and may not read.",
366
+ content: errorContent,
367
+ },
368
+ NotFound: { description: "No such session or scene.", content: errorContent },
369
+ TooManyRequests: { description: "Rate limit exceeded.", content: errorContent },
370
+ },
371
+ schemas,
372
+ };
373
+ }
374
+ /**
375
+ * Build the OpenAPI 3.1 document for the read API from the metric registry and
376
+ * the collector's own route table. Pure: it reads definitions only, never the
377
+ * store, so it can be built once and served as a constant.
378
+ */
379
+ export function buildOpenApiDocument(routeSchemas = []) {
380
+ const byPath = new Map(routeSchemas.filter((route) => route.method === "GET").map((route) => [route.path, route]));
381
+ const metrics = allMetrics();
382
+ const served = metrics.filter((metric) => metric.endpoint != null);
383
+ const paths = staticPaths();
384
+ for (const metric of served) {
385
+ const path = toOpenApiPath(metric.endpoint.path);
386
+ paths[path] ??= {};
387
+ paths[path].get = operationFor(metric, byPath.get(metric.endpoint.path));
388
+ }
389
+ const categories = [...new Set(served.map((metric) => metric.category))];
390
+ return {
391
+ openapi: "3.1.0",
392
+ jsonSchemaDialect: "https://json-schema.org/draft/2020-12/schema",
393
+ info: {
394
+ title: "Uptimizr collector — read API",
395
+ version: API_DOCUMENT_VERSION,
396
+ summary: "Privacy-first, aggregate-only analytics for 3D scenes.",
397
+ description: "Every path below is generated from the Uptimizr **semantic metric registry**, so this " +
398
+ "document lists exactly the aggregations the collector can compute — no more and no " +
399
+ "less. Each operation carries `x-uptimizr-*` extensions describing what one row is " +
400
+ "(`grain`), what its columns mean (`units`), the capture channels that must be enabled " +
401
+ "for it to have data (`source-channels`), how far to trust it (`caveats`) and how to " +
402
+ "read it (`interpretation`).\n\n" +
403
+ "The API is **read-only and aggregate-only**: there is no endpoint here that returns raw " +
404
+ "per-session events or personal data (ADR 0003).",
405
+ license: { name: "Apache-2.0", identifier: "Apache-2.0" },
406
+ contact: { name: "Uptimizr", url: "https://uptimizr.com/docs/" },
407
+ },
408
+ servers: [{ url: "/", description: "This collector." }],
409
+ security: [{ apiKey: [] }],
410
+ tags: [
411
+ ...categories.map((category) => ({
412
+ name: category,
413
+ description: CATEGORY_DESCRIPTIONS[category] ?? category,
414
+ })),
415
+ { name: "meta", description: "Self-description and liveness." },
416
+ ],
417
+ paths,
418
+ components: componentsFor(served),
419
+ "x-uptimizr-schema-version": SCHEMA_VERSION,
420
+ "x-uptimizr-metric-count": served.length,
421
+ };
422
+ }
423
+ /**
424
+ * Meta routes: the generated OpenAPI document. Registered last in `app.ts` so
425
+ * `routeSchemas` is already populated when the document is built.
426
+ */
427
+ export const metaRoutes = async (app, { routeSchemas }) => {
428
+ // Built lazily on the first request: `onRoute` has fired for every plugin by
429
+ // then, which it has not while this plugin is still being registered.
430
+ let document;
431
+ app.get("/api/v1/openapi.json", async (_req, reply) => {
432
+ document ??= buildOpenApiDocument(routeSchemas);
433
+ return reply.type("application/json; charset=utf-8").send(document);
434
+ });
435
+ };
436
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/routes/meta.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/routes/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAMhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,UAAU,OAAO;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;CACzB;AAohBD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAkiCnD,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/routes/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAsBhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,UAAU,OAAO;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;CACzB;AAoyBD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAqhDnD,CAAC"}