@uptimizr/collector-server 0.7.1 → 0.8.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/dist/config.d.ts CHANGED
@@ -39,10 +39,11 @@ export interface CollectorConfig {
39
39
  * Trust `X-Forwarded-*` headers from a reverse proxy / load balancer. Required
40
40
  * when the collector runs behind TLS termination so the per-visitor hash and
41
41
  * the rate-limit bucket key on the real client IP rather than the proxy's.
42
- * `false` (default) trusts only the direct socket peer. Accepts `true`/`false`,
43
- * a hop count, or an IP/subnet/comma-list passed through to Fastify.
42
+ * `false` (default) trusts only the direct socket peer. Accepts `true`/`false`
43
+ * or an IP/subnet/comma-list passed through to Fastify. Hop counts are not
44
+ * accepted — see `parseTrustProxy`.
44
45
  */
45
- trustProxy: boolean | number | string;
46
+ trustProxy: boolean | string;
46
47
  /** Max accepted request body size in bytes (defends against oversized payloads). */
47
48
  bodyLimit: number;
48
49
  /** Content-Security-Policy for the bundled dashboard: `strict` (default) or `off`. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,yBAAyB,EAAE,OAAO,CAAC;IACnC,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,0BAA0B,EAAE,OAAO,CAAC;IACpC,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAsB9C,wBAAgB,UAAU,CAAC,GAAG,GAAE,GAAiB,GAAG,eAAe,CAgClE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,yBAAyB,EAAE,OAAO,CAAC;IACnC,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,0BAA0B,EAAE,OAAO,CAAC;IACpC,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAqC9C,wBAAgB,UAAU,CAAC,GAAG,GAAE,GAAiB,GAAG,eAAe,CAgClE"}
package/dist/config.js CHANGED
@@ -4,8 +4,16 @@ function bool(value) {
4
4
  }
5
5
  /**
6
6
  * Parse `COLLECTOR_TRUST_PROXY` into a value Fastify's `trustProxy` accepts:
7
- * a boolean, a hop count, or an IP/subnet/comma-separated list passed through
8
- * verbatim. Empty/unset means do not trust proxy headers.
7
+ * a boolean, or an IP/subnet/comma-separated list passed through verbatim.
8
+ * Empty/unset means do not trust proxy headers.
9
+ *
10
+ * A bare hop count (`COLLECTOR_TRUST_PROXY=1`) used to be accepted, but Fastify
11
+ * 5.12.1 disabled numeric hop-count trust: it cannot validate the immediate peer,
12
+ * so a direct client could spoof `X-Forwarded-*` by supplying enough hops.
13
+ * Fastify now fails closed on a number and silently ignores the headers — which
14
+ * would quietly bucket the visitor hash and rate limit on the proxy's IP. Reject
15
+ * it here instead, so a stale deployment fails loudly at startup rather than
16
+ * degrading in production.
9
17
  */
10
18
  function parseTrustProxy(value) {
11
19
  if (value == null || value.trim() === "")
@@ -17,8 +25,12 @@ function parseTrustProxy(value) {
17
25
  if (lower === "false")
18
26
  return false;
19
27
  const n = Number(trimmed);
20
- if (Number.isInteger(n) && String(n) === trimmed)
21
- return n;
28
+ if (Number.isInteger(n) && String(n) === trimmed) {
29
+ throw new Error(`COLLECTOR_TRUST_PROXY no longer accepts a hop count (got "${trimmed}"). ` +
30
+ "Fastify disabled numeric hop-count trust because it cannot validate the " +
31
+ "immediate peer. Set the trusted proxy IP/CIDR (or a comma-separated list) " +
32
+ "instead, or `true` when the collector is not directly reachable.");
33
+ }
22
34
  return trimmed;
23
35
  }
24
36
  export function loadConfig(env = process.env) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uptimizr/collector-server",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Uptimizr ingestion + query API (Fastify). Self-hostable collector for the OSS data-collector.",
5
5
  "keywords": [
6
6
  "uptimizr",
@@ -39,20 +39,20 @@
39
39
  ],
40
40
  "dependencies": {
41
41
  "@fastify/cors": "^11.3.0",
42
- "@fastify/helmet": "^13.1.0",
42
+ "@fastify/helmet": "^13.1.1",
43
43
  "@fastify/rate-limit": "^11.2.0",
44
44
  "@fastify/static": "^10.1.3",
45
- "fastify": "^5.12.0",
45
+ "fastify": "^5.12.1",
46
46
  "fastify-type-provider-zod": "^7.0.0",
47
- "zod": "^4.4.3",
48
- "@uptimizr/db": "0.8.1",
49
- "@uptimizr/db-clickhouse": "0.3.7",
50
- "@uptimizr/schema": "0.6.0"
47
+ "zod": "^4.5.4",
48
+ "@uptimizr/db-clickhouse": "0.3.8",
49
+ "@uptimizr/schema": "0.6.1",
50
+ "@uptimizr/db": "0.8.2"
51
51
  },
52
52
  "devDependencies": {
53
- "@types/node": "^26.2.0",
54
- "tsx": "^4.23.12",
55
- "vitest": "^4.1.10"
53
+ "@types/node": "^26.4.0",
54
+ "tsx": "^4.23.13",
55
+ "vitest": "^4.1.11"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsc -p tsconfig.json",