@uptimizr/collector-server 2.0.0 → 2.1.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.
- package/AGENTS.md +196 -0
- package/README.md +22 -7
- package/dist/cli.js +34 -11
- package/dist/cli.js.map +1 -1
- package/dist/cliStore.d.ts +31 -2
- package/dist/cliStore.d.ts.map +1 -1
- package/dist/cliStore.js +34 -0
- package/dist/cliStore.js.map +1 -1
- package/llms.txt +38 -0
- package/package.json +9 -7
package/AGENTS.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# AGENTS.md — @uptimizr/collector-server
|
|
2
|
+
|
|
3
|
+
> Packaged agent guide. For the human reference see [README.md](./README.md); for design
|
|
4
|
+
> rationale see the project ADRs at https://github.com/RaananW/Uptimizr/tree/main/docs/adr.
|
|
5
|
+
|
|
6
|
+
## What this package is
|
|
7
|
+
|
|
8
|
+
The public-facing **ingestion + query API** (Fastify) for the OSS data collector, plus the
|
|
9
|
+
`uptimizr` CLI that self-hosts it. All client input is untrusted and validated against
|
|
10
|
+
`@uptimizr/schema` at the boundary. Route handlers stay thin; storage lives behind a swappable
|
|
11
|
+
`CollectorStore` (ADR 0005).
|
|
12
|
+
|
|
13
|
+
It is the **single gateway** to the data: the dashboard, `@uptimizr/mcp`, the in-browser assistant
|
|
14
|
+
and your own agents all read through this HTTP API, never the database.
|
|
15
|
+
|
|
16
|
+
## Run it
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 1. One-time setup: generate a visitor-hash secret, create + migrate the store,
|
|
20
|
+
# mint a first project + owner API key, write a local .env.
|
|
21
|
+
npx -p @uptimizr/collector-server uptimizr init "My Project"
|
|
22
|
+
|
|
23
|
+
# 2. Start the ingestion + query API (reads the generated .env; 0.0.0.0:4318).
|
|
24
|
+
npx -p @uptimizr/collector-server uptimizr serve
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`init` prints a **`projectId`** (public — give it to your client SDK along with this server's URL)
|
|
28
|
+
and a one-time **API key** (secret — `x-api-key` for the query routes). That key is the operator's
|
|
29
|
+
**owner** key: `query`, `query:raw` and `annotate`, labelled `owner`. Do not hand it to an agent —
|
|
30
|
+
mint one with `uptimizr new-key <projectId> --capabilities query` instead.
|
|
31
|
+
|
|
32
|
+
### CLI (ADR 0029)
|
|
33
|
+
|
|
34
|
+
| Command | What it does |
|
|
35
|
+
| ------------------------------ | -------------------------------------------------------------------- |
|
|
36
|
+
| `uptimizr init [name]` | Secret + store + migrations + first project/owner key + `.env`. |
|
|
37
|
+
| `uptimizr serve` | Run the ingestion + query API. The default when no command is given. |
|
|
38
|
+
| `uptimizr new-project <name>` | Mint an additional project + owner API key. |
|
|
39
|
+
| `uptimizr new-key <projectId>` | Mint an additional key on an existing project (see the flags below). |
|
|
40
|
+
| `uptimizr migrate` | Apply store migrations. |
|
|
41
|
+
| `uptimizr regions set <scene>` | Replace a scene's named regions from `--file <regions.json>`. |
|
|
42
|
+
| `uptimizr regions get <scene>` | Print a scene's named regions as JSON. |
|
|
43
|
+
| `uptimizr help` | Usage. |
|
|
44
|
+
|
|
45
|
+
`new-key` flags: `--capabilities <list>` (comma-separated; default `query`), `--label <name>`,
|
|
46
|
+
and the paired `--rate-limit-max <n>` / `--rate-limit-window-ms <ms>`:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
uptimizr new-key <projectId> --capabilities query,annotate \
|
|
50
|
+
--label "weekly-report-agent" --rate-limit-max 120 --rate-limit-window-ms 60000
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`regions` commands take `--project <projectId>` (or `UPTIMIZR_PROJECT_ID`). They talk to the store
|
|
54
|
+
**directly**, so they need no API key — an operator command, unlike the HTTP equivalent.
|
|
55
|
+
|
|
56
|
+
**Every command targets the store selected by `COLLECTOR_STORE`**, read through the same
|
|
57
|
+
connection variables `serve` uses — so export the store + its settings before `init` and the
|
|
58
|
+
project you mint is the one the running collector resolves.
|
|
59
|
+
|
|
60
|
+
Installed as a dependency, the package exposes the `uptimizr` CLI plus the legacy
|
|
61
|
+
`uptimizr-collector` bin (equivalent to `uptimizr serve`).
|
|
62
|
+
|
|
63
|
+
## API keys and capabilities (ADR 0051 §7)
|
|
64
|
+
|
|
65
|
+
A key carries a **set of capabilities**, not a single role. `new-key` defaults to `query`;
|
|
66
|
+
`init` / `new-project` mint their single key with `query`, `query:raw` and `annotate`.
|
|
67
|
+
|
|
68
|
+
| Capability | Unlocks |
|
|
69
|
+
| ----------- | --------------------------------------------------------------------------------------------------------- |
|
|
70
|
+
| `query` | The aggregate analytics API, the scene registry, the live token exchange, and `GET /api/v1/audit`. |
|
|
71
|
+
| `query:raw` | Raw per-session streams: `GET /api/v1/sessions/:id/events` and `GET /api/v1/live/sessions/:id`. |
|
|
72
|
+
| `annotate` | The project **metadata** write path (annotations, glossary, saved analyses, panel specs). Never events. |
|
|
73
|
+
| `ingest` | Reserved for server-side write paths. Public ingestion is keyless, so issued keys are normally read keys. |
|
|
74
|
+
|
|
75
|
+
The raw endpoints are gated **twice**: the collector must run with `ENABLE_RAW_SESSION_RETENTION`
|
|
76
|
+
**and** the key must hold `query:raw` — otherwise `403`. Retention alone is not enough.
|
|
77
|
+
|
|
78
|
+
`--rate-limit-max` / `--rate-limit-window-ms` give a key its own request budget, bucketed on the
|
|
79
|
+
**key id** rather than the client IP; keys without one fall back to `COLLECTOR_RATE_LIMIT_*`.
|
|
80
|
+
Ingestion keeps its separate `COLLECTOR_INGEST_RATE_LIMIT_*` budget.
|
|
81
|
+
|
|
82
|
+
## Endpoints an agent should know
|
|
83
|
+
|
|
84
|
+
- **`GET /api/v1/openapi.json`** — **unauthenticated** OpenAPI 3.1 for the whole read API,
|
|
85
|
+
generated from the `@uptimizr/metrics` registry (ADR 0051) and this server's route table. One
|
|
86
|
+
path per endpoint, the real validating schema per parameter, a response schema per metric, and
|
|
87
|
+
the semantics OpenAPI cannot express as `x-uptimizr-*` extensions (result `grain`, per-column
|
|
88
|
+
`units`, `caveats`, `interpretation`, source capture channels, row `limits`). **Start here**
|
|
89
|
+
rather than guessing routes; generate a typed client with
|
|
90
|
+
`npx openapi-typescript <collector>/api/v1/openapi.json -o collector.d.ts`.
|
|
91
|
+
- **`GET /api/v1/whoami`** — the calling key's `projectId`, `keyId`, `capabilities`, `label` and
|
|
92
|
+
effective `rateLimit` (plus `rateLimitSource`: `"key"` or `"default"`). It reports the key's
|
|
93
|
+
**id**, never the key. Call it first and register only the tools your capabilities permit,
|
|
94
|
+
instead of probing for `403`s.
|
|
95
|
+
- **`GET /api/v1/audit`** (`since` / `until` / `limit`, any `query` key) — the agent audit log.
|
|
96
|
+
- `POST /api/v1/collect` — batched ingestion. **Keyless by design** (it runs in untrusted
|
|
97
|
+
browsers, where a key is not a secret); protected by schema validation, payload bounds and rate
|
|
98
|
+
limits instead. The server sets the cookieless `visitorId = hash(ip + ua + dailySalt)`; the raw
|
|
99
|
+
IP is never stored (ADR 0003).
|
|
100
|
+
- The read API: sessions, heatmaps (`pointer`, `camera`, `position`, `world`, `gaze`, `mesh-uv`,
|
|
101
|
+
`click-rays`, `flow`, `perf`, `errors`), mesh/interaction insights, performance and diagnostics,
|
|
102
|
+
scene/path/funnel analytics, scene representations and regions, and the live SSE endpoints.
|
|
103
|
+
- `GET /health` — liveness probe, unauthenticated.
|
|
104
|
+
|
|
105
|
+
### Result envelopes: `format=full | table | summary` (ADR 0051 §2)
|
|
106
|
+
|
|
107
|
+
Every aggregate endpoint accepts `format`. It **filters nothing** — it picks the result envelope:
|
|
108
|
+
|
|
109
|
+
- `full` (default) — the bare rows, unchanged. What the dashboard uses.
|
|
110
|
+
- `table` — adds a `meta` envelope: metric, range, applied filters, sample size, row count,
|
|
111
|
+
`truncated`, limits.
|
|
112
|
+
- `summary` — a bounded digest: ranked top rows, a first/last/min/max/trend series, or merged
|
|
113
|
+
spatial clusters, with shares, the metric's caveats and a templated `reading` sentence, capped at
|
|
114
|
+
the registry's `maxSummaryRows`. **This is what makes a 500-bin heatmap affordable for an LLM** —
|
|
115
|
+
prefer it over `full` when feeding a model.
|
|
116
|
+
|
|
117
|
+
### Filters
|
|
118
|
+
|
|
119
|
+
Common query params: `since`, `until` (epoch ms), `bins`, `limit`, `scene`, `session`,
|
|
120
|
+
`cameraMode`, `source`, and spatial `cellSize` / **`region`** where supported. `region=<id>` drills
|
|
121
|
+
a spatial query into one named place from the scene registry — declare regions with
|
|
122
|
+
`uptimizr regions set`, `PUT /api/v1/scenes/:sceneId/regions` (an `annotate` key), or
|
|
123
|
+
`registerRegions` in `@uptimizr/sdk-core`.
|
|
124
|
+
|
|
125
|
+
### Live endpoints
|
|
126
|
+
|
|
127
|
+
`POST /api/v1/live/token` exchanges a query key for a short-lived SSE token; the key's capability
|
|
128
|
+
set is carried **inside the signed token**, so `GET /api/v1/live/sessions/:id` can enforce
|
|
129
|
+
`query:raw` even though `EventSource` cannot send headers. `GET /api/v1/live/presence` and
|
|
130
|
+
`/live/stream` use the same `?token=...`.
|
|
131
|
+
|
|
132
|
+
## Storage (`COLLECTOR_STORE`)
|
|
133
|
+
|
|
134
|
+
| Value | Store |
|
|
135
|
+
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
136
|
+
| `duckdb` **(default)** | Single-file OSS store: events **and** metadata in one file at `DUCKDB_PATH` (default `./data/uptimizr.duckdb`). No external service. **Single-writer** — one collector process per file; back up by copying the file. |
|
|
137
|
+
| `memory` | Dependency-free in-memory store for local dev / E2E only (`COLLECTOR_MEMORY_PROJECT_ID` / `COLLECTOR_MEMORY_API_KEY`). |
|
|
138
|
+
| `postgres` | `@uptimizr/db-postgres` — `POSTGRES_URL` / `DATABASE_URL`, `POSTGRES_SCHEMA`, `POSTGRES_POOL_MAX`. Multi-writer. |
|
|
139
|
+
| `mssql` | `@uptimizr/db-mssql` — `MSSQL_URL` (or `MSSQL_SERVER` / `MSSQL_PORT` / `MSSQL_DATABASE` / `MSSQL_USER` / `MSSQL_PASSWORD`). SQL Server 2022+ / Azure SQL. Multi-writer. |
|
|
140
|
+
| `clickhouse` | `@uptimizr/db-clickhouse` — `CLICKHOUSE_URL` / `CLICKHOUSE_DATABASE` / `CLICKHOUSE_USER` / `CLICKHOUSE_PASSWORD`. Concurrent writers, high-volume ingestion. |
|
|
141
|
+
|
|
142
|
+
All four return **identical analytics** (the cross-engine parity suite). Aggregations are computed
|
|
143
|
+
at **query time** in v1 — no materialized views.
|
|
144
|
+
|
|
145
|
+
## Other configuration
|
|
146
|
+
|
|
147
|
+
- Server / browser access: `COLLECTOR_HOST` (`0.0.0.0`), `COLLECTOR_PORT` (`4318`),
|
|
148
|
+
`COLLECTOR_CORS_ORIGINS`, `COLLECTOR_TRUST_PROXY`, `COLLECTOR_BODY_LIMIT`.
|
|
149
|
+
- Privacy / replay / live: **`VISITOR_HASH_SECRET` (required — the server fails fast without it)**,
|
|
150
|
+
`ENABLE_RAW_SESSION_RETENTION`, `LIVE_TOKEN_SECRET`, `LIVE_TOKEN_TTL_MS`, `LIVE_WINDOW_MS`,
|
|
151
|
+
`LIVE_MAX_CONNECTIONS`, `LIVE_PRESENCE_INTERVAL_MS`.
|
|
152
|
+
- Rate limits: `COLLECTOR_RATE_LIMIT_MAX`, `COLLECTOR_RATE_LIMIT_WINDOW_MS`,
|
|
153
|
+
`COLLECTOR_INGEST_RATE_LIMIT_MAX`, `COLLECTOR_INGEST_RATE_LIMIT_WINDOW_MS`.
|
|
154
|
+
- Agent audit: **`AUDIT_RETENTION_DAYS`** (default `30`; `0` = keep forever),
|
|
155
|
+
`AUDIT_DASHBOARD_REQUESTS` (default off — requests carrying `x-uptimizr-client: dashboard` are
|
|
156
|
+
skipped as a volume filter, **not** a security boundary).
|
|
157
|
+
- All-in-one dashboard: `COLLECTOR_DASHBOARD_DIR` (point it at a static dashboard export and one
|
|
158
|
+
process serves ingestion, queries and the UI), `COLLECTOR_CSP` (`strict` or `off`).
|
|
159
|
+
|
|
160
|
+
## Rules for agents
|
|
161
|
+
|
|
162
|
+
- **Validate at the boundary.** Every request body and querystring is parsed against
|
|
163
|
+
`@uptimizr/schema` / the metric registry. Never trust client input, never skip validation.
|
|
164
|
+
- **Keep handlers thin** (ADR 0005). Aggregation logic belongs in `@uptimizr/db`; the semantics of
|
|
165
|
+
a metric belong in `@uptimizr/metrics`. A new read endpoint is a **registry entry**, not a
|
|
166
|
+
hand-written route — `registryRoutes.test.ts` asserts the endpoint exists and that its
|
|
167
|
+
querystring keys equal the metric's `filters`, and `queryResponseSchemas.test.ts` asserts every
|
|
168
|
+
endpoint's rows parse against the metric's `row` schema on a seeded store, an empty one, and the
|
|
169
|
+
in-memory store.
|
|
170
|
+
- **Never weaken the raw-data gate.** `ENABLE_RAW_SESSION_RETENTION` **and** `query:raw`, both,
|
|
171
|
+
for `/sessions/:id/events` and `/live/sessions/:id` (ADR 0003).
|
|
172
|
+
- **Never log secrets or raw IPs.** The audit log's subject is the key **id**; `params` drops
|
|
173
|
+
credential-shaped fields and is capped at 512 bytes. Audit writes happen after the response is
|
|
174
|
+
flushed, so they can never block or fail a request. Refusals are recorded too.
|
|
175
|
+
- **Ingestion stays keyless.** Do not "fix" it by requiring a key — a key shipped to an untrusted
|
|
176
|
+
browser is not a secret. Harden with validation, payload bounds, rate limits and CORS instead.
|
|
177
|
+
- Events live once in `@uptimizr/schema`. Do not redefine an event shape here.
|
|
178
|
+
- Aggregations are query-time in v1; do not add materialized views without an ADR.
|
|
179
|
+
|
|
180
|
+
## Develop
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
pnpm --filter @uptimizr/collector-server dev # tsx watch
|
|
184
|
+
pnpm --filter @uptimizr/collector-server test # vitest (app.inject() + a fake store)
|
|
185
|
+
pnpm --filter @uptimizr/collector-server build
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Tests run against a fake `CollectorStore` with `app.inject()` — no live database required.
|
|
189
|
+
|
|
190
|
+
## More
|
|
191
|
+
|
|
192
|
+
- Package reference: [README.md](./README.md)
|
|
193
|
+
- HTTP API reference:
|
|
194
|
+
https://github.com/RaananW/Uptimizr/blob/main/docs/integration.md#4-http-api
|
|
195
|
+
- Query API guide: https://uptimizr.com/docs/api/query/
|
|
196
|
+
- Deploy guide: https://uptimizr.com/docs/deploy/collector/
|
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ created and migrated automatically.
|
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
# 1. One-time setup: generates a visitor-hash secret, creates + migrates the
|
|
16
|
-
# store (DuckDB by default), mints a first project + API key, and
|
|
17
|
-
# local .env.
|
|
16
|
+
# store (DuckDB by default), mints a first project + owner API key, and
|
|
17
|
+
# writes a local .env.
|
|
18
18
|
npx -p @uptimizr/collector-server uptimizr init "My Project"
|
|
19
19
|
|
|
20
20
|
# 2. Start the ingestion + query API (reads the generated .env; 0.0.0.0:4318).
|
|
@@ -24,7 +24,10 @@ npx -p @uptimizr/collector-server uptimizr serve
|
|
|
24
24
|
`init` prints a **`projectId`** and a one-time **API key**. Give the `projectId`
|
|
25
25
|
and this server's URL (the **`endpoint`**) to your client SDK (e.g.
|
|
26
26
|
`@uptimizr/babylon`); use the **API key** (`x-api-key`) for the query routes /
|
|
27
|
-
dashboard.
|
|
27
|
+
dashboard. That first key is the operator's **owner** key — `query`, `query:raw`
|
|
28
|
+
and `annotate` — so the dashboard, session replay, the live per-session follow
|
|
29
|
+
and scene regions all work off it; hand agents and MCP clients a narrower key of
|
|
30
|
+
their own with `uptimizr new-key`. Mint more projects later with
|
|
28
31
|
`npx -p @uptimizr/collector-server uptimizr new-project "<name>"`, or add a key
|
|
29
32
|
to an existing project with
|
|
30
33
|
`npx -p @uptimizr/collector-server uptimizr new-key <projectId> [--capabilities …] [--label …]`
|
|
@@ -232,17 +235,29 @@ A key carries a **set of capabilities** (ADR 0051 §7), not a single role:
|
|
|
232
235
|
| `annotate` | The project **metadata** write path (annotations, glossary, saved analyses, panel specs). Never events. |
|
|
233
236
|
| `ingest` | Reserved for server-side write paths. Public ingestion is keyless, so issued keys are normally read keys. |
|
|
234
237
|
|
|
235
|
-
|
|
238
|
+
`uptimizr init` / `uptimizr new-project` mint the operator's **owner** key —
|
|
239
|
+
`query`, `query:raw` and `annotate`, labelled `owner` — because that key drives the dashboard,
|
|
240
|
+
session replay, the live follow and scene regions. `query:raw` is inert on its own: the raw routes
|
|
241
|
+
also need `ENABLE_RAW_SESSION_RETENTION`, so granting it up front turns nothing on and only saves
|
|
242
|
+
re-minting the key when retention is switched on later.
|
|
243
|
+
|
|
244
|
+
`uptimizr new-key` is how every **other** key is issued, and it still defaults to `query` alone —
|
|
245
|
+
what an agent or MCP client should hold:
|
|
236
246
|
|
|
237
247
|
```bash
|
|
238
|
-
|
|
239
|
-
|
|
248
|
+
# An agent's own key: read-only aggregates (the default), labelled and budgeted
|
|
249
|
+
uptimizr new-key <projectId> --capabilities query --label "mcp-agent" \
|
|
250
|
+
--rate-limit-max 120 --rate-limit-window-ms 60000
|
|
251
|
+
|
|
252
|
+
# An agent that may also write metadata
|
|
253
|
+
uptimizr new-key <projectId> --capabilities query,annotate --label "weekly-report-agent"
|
|
240
254
|
```
|
|
241
255
|
|
|
242
256
|
> **Breaking change.** `query:raw` is new, and the raw per-session endpoints now require **both**
|
|
243
257
|
> `ENABLE_RAW_SESSION_RETENTION` **and** `query:raw` — previously retention alone was enough for
|
|
244
258
|
> any `query` key. Existing keys keep working for every aggregate endpoint; a key that drives
|
|
245
|
-
> session replay or live-follow must be re-minted with `--capabilities query,query:raw`.
|
|
259
|
+
> session replay or live-follow must be re-minted with `--capabilities query,query:raw`. Keys minted
|
|
260
|
+
> by `init` / `new-project` already carry it.
|
|
246
261
|
|
|
247
262
|
`--rate-limit-max` / `--rate-limit-window-ms` give a key its own request budget, bucketed on the
|
|
248
263
|
key id rather than the client IP; keys without one fall back to `COLLECTOR_RATE_LIMIT_*`.
|
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs
|
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { parseCapabilityList } from "@uptimizr/db";
|
|
6
6
|
import { sceneIdSchema, sceneRegionsSchema } from "@uptimizr/schema";
|
|
7
|
-
import { openCliStore, renderEnv, resolveCliStoreKind } from "./cliStore.js";
|
|
7
|
+
import { createOwnerApiKey, openCliStore, renderEnv, resolveCliStoreKind, } from "./cliStore.js";
|
|
8
8
|
/**
|
|
9
9
|
* Unified `uptimizr` CLI (ADR 0029) — collapses the multi-step npm self-host
|
|
10
10
|
* (`export VISITOR_HASH_SECRET` → `uptimizr-db-new-project` → `uptimizr-collector`)
|
|
@@ -12,9 +12,10 @@ import { openCliStore, renderEnv, resolveCliStoreKind } from "./cliStore.js";
|
|
|
12
12
|
*
|
|
13
13
|
* Subcommands:
|
|
14
14
|
* - `init` — generate a visitor-hash secret, create + migrate the
|
|
15
|
-
* store, mint a first project + API key, and
|
|
15
|
+
* store, mint a first project + owner API key, and
|
|
16
|
+
* write `.env`.
|
|
16
17
|
* - `serve` (default) — run the ingestion + query API (see {@link serve}).
|
|
17
|
-
* - `new-project <name>` — mint an additional project + API key.
|
|
18
|
+
* - `new-project <name>` — mint an additional project + owner API key.
|
|
18
19
|
* - `new-key <id>` — mint an additional API key on an existing project,
|
|
19
20
|
* with an explicit capability set, label and per-key
|
|
20
21
|
* rate limit (#309, ADR 0051 §7).
|
|
@@ -28,6 +29,12 @@ import { openCliStore, renderEnv, resolveCliStoreKind } from "./cliStore.js";
|
|
|
28
29
|
* collector resolves.
|
|
29
30
|
*/
|
|
30
31
|
const ENV_FILE = resolve(process.cwd(), ".env");
|
|
32
|
+
/**
|
|
33
|
+
* Printed next to every owner key so the narrower key an agent should get is one
|
|
34
|
+
* copy-paste away, rather than the operator's own key being pasted into an MCP
|
|
35
|
+
* client (ADR 0051 §7).
|
|
36
|
+
*/
|
|
37
|
+
const AGENT_KEY_HINT = "Give agents/MCP clients a narrower key: uptimizr new-key <projectId> --capabilities query";
|
|
31
38
|
/** Load a local `.env` (Node 22 built-in) so `serve`/`migrate` see config without a wrapper. */
|
|
32
39
|
function loadLocalEnv() {
|
|
33
40
|
if (existsSync(ENV_FILE)) {
|
|
@@ -115,7 +122,7 @@ async function cmdInit(name) {
|
|
|
115
122
|
const store = resolveCliStoreKind();
|
|
116
123
|
const db = await openCliStore();
|
|
117
124
|
const project = await db.createProject(name);
|
|
118
|
-
const { key } = await db
|
|
125
|
+
const { key, record } = await createOwnerApiKey(db, project.id);
|
|
119
126
|
await db.close();
|
|
120
127
|
ensureSecretPersisted(secret, generated, store);
|
|
121
128
|
const port = Number(process.env.COLLECTOR_PORT ?? 4318);
|
|
@@ -123,18 +130,28 @@ async function cmdInit(name) {
|
|
|
123
130
|
console.error(` Store: ${store}`);
|
|
124
131
|
console.error(` Project: ${project.id} (${project.name})`);
|
|
125
132
|
console.error(` API key: ${key} (shown once — put it in your app config)`);
|
|
133
|
+
console.error(` Grants: ${record.capabilities.join(", ")} (label: ${record.label})`);
|
|
126
134
|
console.error(` Endpoint: http://localhost:${port}/api/v1`);
|
|
135
|
+
console.error(`\n${AGENT_KEY_HINT}`);
|
|
127
136
|
console.error("\nNext: uptimizr serve");
|
|
128
137
|
}
|
|
129
138
|
async function cmdNewProject(name) {
|
|
130
139
|
loadLocalEnv();
|
|
131
140
|
const db = await openCliStore();
|
|
132
141
|
const project = await db.createProject(name);
|
|
133
|
-
const { key } = await db
|
|
142
|
+
const { key, record } = await createOwnerApiKey(db, project.id);
|
|
134
143
|
await db.close();
|
|
135
144
|
console.error(`✓ project created: ${project.id} (${project.name})`);
|
|
136
145
|
console.error(` API key (shown once): ${key}`);
|
|
137
|
-
|
|
146
|
+
console.error(` Grants: ${record.capabilities.join(", ")} (label: ${record.label})`);
|
|
147
|
+
console.error(AGENT_KEY_HINT);
|
|
148
|
+
process.stdout.write(`${JSON.stringify({
|
|
149
|
+
projectId: project.id,
|
|
150
|
+
name: project.name,
|
|
151
|
+
apiKey: key,
|
|
152
|
+
capabilities: record.capabilities,
|
|
153
|
+
label: record.label,
|
|
154
|
+
})}\n`);
|
|
138
155
|
}
|
|
139
156
|
/**
|
|
140
157
|
* Mint an additional API key on an existing project with an explicit capability
|
|
@@ -144,9 +161,11 @@ async function cmdNewProject(name) {
|
|
|
144
161
|
* uptimizr new-key <projectId> --capabilities query,annotate --label "weekly-report-agent"
|
|
145
162
|
* ```
|
|
146
163
|
*
|
|
147
|
-
* Capabilities default to `query` (read-only)
|
|
148
|
-
*
|
|
149
|
-
*
|
|
164
|
+
* Capabilities default to `query` (read-only) — the narrow key an agent or MCP
|
|
165
|
+
* client should hold, and deliberately narrower than the owner key `init` /
|
|
166
|
+
* `new-project` mint. `query:raw` additionally needs
|
|
167
|
+
* `ENABLE_RAW_SESSION_RETENTION` on the collector before it grants anything
|
|
168
|
+
* (ADR 0003).
|
|
150
169
|
*/
|
|
151
170
|
async function cmdNewKey(args) {
|
|
152
171
|
loadLocalEnv();
|
|
@@ -356,9 +375,9 @@ function printUsage() {
|
|
|
356
375
|
"uptimizr — self-host the OSS 3D-analytics collector (DuckDB by default, no Docker).",
|
|
357
376
|
"",
|
|
358
377
|
"Usage:",
|
|
359
|
-
" uptimizr init [name] generate a secret, create the store, mint a project + key, write .env",
|
|
378
|
+
" uptimizr init [name] generate a secret, create the store, mint a project + owner key, write .env",
|
|
360
379
|
" uptimizr serve run the ingestion + query API (default)",
|
|
361
|
-
" uptimizr new-project <name> mint an additional project + API key",
|
|
380
|
+
" uptimizr new-project <name> mint an additional project + owner API key",
|
|
362
381
|
" uptimizr new-key <projectId> mint an additional API key on an existing project",
|
|
363
382
|
" uptimizr migrate apply store migrations",
|
|
364
383
|
" uptimizr regions set <sceneId> --file <regions.json>",
|
|
@@ -367,6 +386,10 @@ function printUsage() {
|
|
|
367
386
|
" print a scene's named regions as JSON",
|
|
368
387
|
" uptimizr help show this help",
|
|
369
388
|
"",
|
|
389
|
+
"`init` / `new-project` mint the operator's own key with query, query:raw and annotate —",
|
|
390
|
+
"the dashboard, session replay, live follow and scene regions. Agents and MCP clients get a",
|
|
391
|
+
"narrower key of their own from `new-key` (default: query).",
|
|
392
|
+
"",
|
|
370
393
|
"new-key options:",
|
|
371
394
|
" --capabilities <list> comma-separated: ingest, query, annotate, query:raw",
|
|
372
395
|
" (default: query). `query:raw` is only honoured when the",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cliStore.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SceneRegion } from "@uptimizr/schema";
|
|
2
|
-
import { type ApiKeyRecord, type CreateApiKeyOptions, type SceneRegionRecord } from "@uptimizr/db";
|
|
2
|
+
import { type ApiKeyCapability, type ApiKeyRecord, type CreateApiKeyOptions, type SceneRegionRecord } from "@uptimizr/db";
|
|
3
3
|
/**
|
|
4
4
|
* The persistent stores the `uptimizr` CLI can bootstrap (`init` / `new-project`
|
|
5
5
|
* / `migrate`). Mirrors the `COLLECTOR_STORE` values `serve` accepts, minus
|
|
@@ -21,7 +21,8 @@ export interface CliStore {
|
|
|
21
21
|
}>;
|
|
22
22
|
/**
|
|
23
23
|
* Issue an API key; the plaintext is returned exactly once. Defaults to the
|
|
24
|
-
* `query` (read-only) capability when no options are given
|
|
24
|
+
* `query` (read-only) capability when no options are given; `init` and
|
|
25
|
+
* `new-project` pass {@link OWNER_KEY_CAPABILITIES} instead.
|
|
25
26
|
*/
|
|
26
27
|
createApiKey(projectId: string, options?: CreateApiKeyOptions): Promise<{
|
|
27
28
|
key: string;
|
|
@@ -41,6 +42,34 @@ export interface CliStore {
|
|
|
41
42
|
getSceneRegions(projectId: string, sceneId: string): Promise<SceneRegionRecord[]>;
|
|
42
43
|
close(): Promise<void>;
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The capability set `init` and `new-project` mint their **first** key with.
|
|
47
|
+
*
|
|
48
|
+
* That key is the operator's own — it goes into the dashboard, not into an
|
|
49
|
+
* agent — so it carries everything the operator's own surfaces need:
|
|
50
|
+
*
|
|
51
|
+
* - `query` — the aggregate analytics API.
|
|
52
|
+
* - `query:raw` — session replay and the live per-session follow. Inert on its
|
|
53
|
+
* own: those routes are gated twice and also need `ENABLE_RAW_SESSION_RETENTION`
|
|
54
|
+
* on the collector (ADR 0003), so granting it here turns nothing on. Without
|
|
55
|
+
* it, switching retention on later made replay answer `403` until a second key
|
|
56
|
+
* was minted and swapped into the dashboard.
|
|
57
|
+
* - `annotate` — the project metadata write path (scene regions today).
|
|
58
|
+
*
|
|
59
|
+
* Narrower keys stay deliberate: `uptimizr new-key` still defaults to `query`
|
|
60
|
+
* alone, which is what an agent or MCP client should be handed (ADR 0051 §7).
|
|
61
|
+
*/
|
|
62
|
+
export declare const OWNER_KEY_CAPABILITIES: readonly ApiKeyCapability[];
|
|
63
|
+
/** Label written on the first key, so `whoami` and the audit log can name it. */
|
|
64
|
+
export declare const OWNER_KEY_LABEL = "owner";
|
|
65
|
+
/**
|
|
66
|
+
* Mint the operator's first key on a freshly created project — the single key
|
|
67
|
+
* `init` and `new-project` issue.
|
|
68
|
+
*/
|
|
69
|
+
export declare function createOwnerApiKey(store: CliStore, projectId: string): Promise<{
|
|
70
|
+
key: string;
|
|
71
|
+
record: ApiKeyRecord;
|
|
72
|
+
}>;
|
|
44
73
|
/**
|
|
45
74
|
* Normalise `COLLECTOR_STORE` for the CLI: unset (or blank) selects the OSS
|
|
46
75
|
* DuckDB default; `memory` and unknown values throw with an actionable message
|
package/dist/cliStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliStore.d.ts","sourceRoot":"","sources":["../src/cliStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EASL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AA+BtB;;;;;GAKG;AACH,eAAO,MAAM,UAAU,wDAAyD,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE
|
|
1
|
+
{"version":3,"file":"cliStore.d.ts","sourceRoot":"","sources":["../src/cliStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AA+BtB;;;;;GAKG;AACH,eAAO,MAAM,UAAU,wDAAyD,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE;;;;OAIG;IACH,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAClD,2EAA2E;IAC3E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC5E;;;OAGG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAChC,wDAAwD;IACxD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAClF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,gBAAgB,EAIpD,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAUtF;AAuBD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4D1F"}
|
package/dist/cliStore.js
CHANGED
|
@@ -9,6 +9,40 @@ import { createApiKey as pgCreateApiKey, createPostgresClient, createProject as
|
|
|
9
9
|
* initialise.
|
|
10
10
|
*/
|
|
11
11
|
export const CLI_STORES = ["duckdb", "postgres", "mssql", "clickhouse"];
|
|
12
|
+
/**
|
|
13
|
+
* The capability set `init` and `new-project` mint their **first** key with.
|
|
14
|
+
*
|
|
15
|
+
* That key is the operator's own — it goes into the dashboard, not into an
|
|
16
|
+
* agent — so it carries everything the operator's own surfaces need:
|
|
17
|
+
*
|
|
18
|
+
* - `query` — the aggregate analytics API.
|
|
19
|
+
* - `query:raw` — session replay and the live per-session follow. Inert on its
|
|
20
|
+
* own: those routes are gated twice and also need `ENABLE_RAW_SESSION_RETENTION`
|
|
21
|
+
* on the collector (ADR 0003), so granting it here turns nothing on. Without
|
|
22
|
+
* it, switching retention on later made replay answer `403` until a second key
|
|
23
|
+
* was minted and swapped into the dashboard.
|
|
24
|
+
* - `annotate` — the project metadata write path (scene regions today).
|
|
25
|
+
*
|
|
26
|
+
* Narrower keys stay deliberate: `uptimizr new-key` still defaults to `query`
|
|
27
|
+
* alone, which is what an agent or MCP client should be handed (ADR 0051 §7).
|
|
28
|
+
*/
|
|
29
|
+
export const OWNER_KEY_CAPABILITIES = [
|
|
30
|
+
"query",
|
|
31
|
+
"query:raw",
|
|
32
|
+
"annotate",
|
|
33
|
+
];
|
|
34
|
+
/** Label written on the first key, so `whoami` and the audit log can name it. */
|
|
35
|
+
export const OWNER_KEY_LABEL = "owner";
|
|
36
|
+
/**
|
|
37
|
+
* Mint the operator's first key on a freshly created project — the single key
|
|
38
|
+
* `init` and `new-project` issue.
|
|
39
|
+
*/
|
|
40
|
+
export function createOwnerApiKey(store, projectId) {
|
|
41
|
+
return store.createApiKey(projectId, {
|
|
42
|
+
capabilities: OWNER_KEY_CAPABILITIES,
|
|
43
|
+
label: OWNER_KEY_LABEL,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
12
46
|
/**
|
|
13
47
|
* Normalise `COLLECTOR_STORE` for the CLI: unset (or blank) selects the OSS
|
|
14
48
|
* DuckDB default; `memory` and unknown values throw with an actionable message
|
package/dist/cliStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliStore.js","sourceRoot":"","sources":["../src/cliStore.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"cliStore.js","sourceRoot":"","sources":["../src/cliStore.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @uptimizr/collector-server
|
|
2
|
+
|
|
3
|
+
> The OSS ingestion + query API (Fastify) for Uptimizr, plus the `uptimizr` CLI that self-hosts
|
|
4
|
+
> it. Keyless, schema-validated ingestion; `x-api-key` read routes scoped to the key's project and
|
|
5
|
+
> capability set. The single gateway to the data — the dashboard, `@uptimizr/mcp` and your own
|
|
6
|
+
> agents all read through this HTTP API, never the database. Storage is swappable
|
|
7
|
+
> (`COLLECTOR_STORE`: DuckDB by default, plus Postgres / SQL Server / ClickHouse).
|
|
8
|
+
|
|
9
|
+
## Docs
|
|
10
|
+
|
|
11
|
+
- [Package reference](./README.md): self-host, all endpoints, security, the full configuration list.
|
|
12
|
+
- [Agent guide](./AGENTS.md): the CLI, capabilities, result envelopes, filters, stores, and the rules an agent must follow.
|
|
13
|
+
- [HTTP API reference](https://github.com/RaananW/Uptimizr/blob/main/docs/integration.md#4-http-api): keys, capabilities, rate limits, the audit log, storage backends.
|
|
14
|
+
- [Query API guide](https://uptimizr.com/docs/api/query/): every read endpoint and the result formats.
|
|
15
|
+
- [Deploy guide](https://uptimizr.com/docs/deploy/collector/): running it in production.
|
|
16
|
+
- [Architecture Decision Records](https://github.com/RaananW/Uptimizr/tree/main/docs/adr): privacy model (0003), thin backends (0005), migrations (0007), consumer-facing agents (0017), open-core storage boundary (0020), distribution & self-host DX (0029), live sessions (0032), AI-first analytics layer (0051).
|
|
17
|
+
|
|
18
|
+
## Self-describe before you call
|
|
19
|
+
|
|
20
|
+
- `GET /api/v1/openapi.json` — unauthenticated OpenAPI 3.1 for the whole read API, generated from
|
|
21
|
+
the `@uptimizr/metrics` registry: one path per endpoint, real parameter schemas, a response
|
|
22
|
+
schema per metric, plus `x-uptimizr-*` extensions carrying grain, column units, caveats,
|
|
23
|
+
interpretation, source capture channels and row limits.
|
|
24
|
+
- `GET /api/v1/whoami` — the calling key's project, key id, capabilities, label and effective rate
|
|
25
|
+
limit.
|
|
26
|
+
- `GET /api/v1/audit?since=&until=&limit=` — the agent audit log (key ids, never keys).
|
|
27
|
+
|
|
28
|
+
## Key facts
|
|
29
|
+
|
|
30
|
+
- **CLI:** `uptimizr init | serve | new-project <name> | new-key <projectId> | migrate | regions set|get <sceneId> | help`. `new-key` takes `--capabilities`, `--label`, `--rate-limit-max`, `--rate-limit-window-ms`. Every command targets `COLLECTOR_STORE`.
|
|
31
|
+
- **Capabilities:** `ingest` (server-side writes), `query` (aggregates, scene registry, live token, audit), `annotate` (project metadata writes), `query:raw` (raw per-session + live-follow streams). `new-key` defaults to `query`; `init` / `new-project` mint one **owner** key (label `owner`) holding `query,query:raw,annotate`.
|
|
32
|
+
- **Raw data is gated twice:** `ENABLE_RAW_SESSION_RETENTION` **and** a `query:raw` key, or `403`.
|
|
33
|
+
- **Result envelopes:** `format=full | table | summary` on every aggregate endpoint (ADR 0051 §2) — `summary` is the bounded, LLM-affordable digest.
|
|
34
|
+
- **Filters:** `since`, `until`, `bins`, `limit`, `scene`, `session`, `cameraMode`, `source`, `cellSize`, and `region=<id>` to drill a spatial query into a named place.
|
|
35
|
+
- **Audit retention:** `AUDIT_RETENTION_DAYS` (default `30`, `0` = forever); `AUDIT_DASHBOARD_REQUESTS` to also record dashboard traffic.
|
|
36
|
+
- **Stores:** `COLLECTOR_STORE=duckdb` (default, single-file, single-writer, `DUCKDB_PATH`) | `memory` | `postgres` | `mssql` | `clickhouse` — identical analytics on all four (parity suite).
|
|
37
|
+
- **Required:** `VISITOR_HASH_SECRET`. The server fails fast without it; the raw IP is never stored.
|
|
38
|
+
- **Bins:** `uptimizr` (`dist/cli.js`) and the legacy `uptimizr-collector` (`dist/server.js`).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uptimizr/collector-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Uptimizr ingestion + query API (Fastify). Self-hostable collector for the OSS data-collector.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uptimizr",
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
"files": [
|
|
36
36
|
"dist",
|
|
37
37
|
"README.md",
|
|
38
|
-
"LICENSE"
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"AGENTS.md",
|
|
40
|
+
"llms.txt"
|
|
39
41
|
],
|
|
40
42
|
"dependencies": {
|
|
41
43
|
"@fastify/cors": "^11.3.0",
|
|
@@ -45,12 +47,12 @@
|
|
|
45
47
|
"fastify": "^5.12.3",
|
|
46
48
|
"fastify-type-provider-zod": "^7.0.0",
|
|
47
49
|
"zod": "^4.5.4",
|
|
48
|
-
"@uptimizr/db-clickhouse": "2.0.
|
|
49
|
-
"@uptimizr/db": "2.0.
|
|
50
|
-
"@uptimizr/db-postgres": "2.0.
|
|
51
|
-
"@uptimizr/db-mssql": "2.0.0",
|
|
50
|
+
"@uptimizr/db-clickhouse": "2.0.2",
|
|
51
|
+
"@uptimizr/db": "2.0.1",
|
|
52
|
+
"@uptimizr/db-postgres": "2.0.2",
|
|
52
53
|
"@uptimizr/metrics": "0.1.0",
|
|
53
|
-
"@uptimizr/schema": "1.1.0"
|
|
54
|
+
"@uptimizr/schema": "1.1.0",
|
|
55
|
+
"@uptimizr/db-mssql": "2.0.2"
|
|
54
56
|
},
|
|
55
57
|
"devDependencies": {
|
|
56
58
|
"@seriousme/openapi-schema-validator": "^2.9.1",
|