@uptimizr/collector-server 0.7.0 → 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 +4 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -4
- package/dist/config.js.map +1 -1
- package/package.json +11 -11
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
|
-
*
|
|
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 |
|
|
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`. */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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
|
|
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,
|
|
8
|
-
*
|
|
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
|
-
|
|
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) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DpC,SAAS,IAAI,CAAC,KAAyB;IACrC,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,6DAA6D,OAAO,MAAM;YACxE,0EAA0E;YAC1E,4EAA4E;YAC5E,kEAAkE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAW,OAAO,CAAC,GAAG;IAC/C,MAAM,iBAAiB,GAAG,GAAG,CAAC,mBAAmB,CAAC;IAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAElE,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;QACrC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC;QACxC,WAAW,EAAE,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;aAC5C,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QAClB,iBAAiB;QACjB,yBAAyB,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACjE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC;QAClD,eAAe,EAAE,GAAG,CAAC,iBAAiB,IAAI,iBAAiB;QAC3D,0BAA0B;QAC1B,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC;QACxD,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC;QAC3D,sBAAsB,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,KAAK,CAAC;QACtE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC;QACzD,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,8BAA8B,IAAI,MAAM,CAAC;QACvE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,+BAA+B,IAAI,GAAG,CAAC;QACtE,uBAAuB,EAAE,MAAM,CAAC,GAAG,CAAC,qCAAqC,IAAI,MAAM,CAAC;QACpF,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAC;QACxD,OAAO,EAAE,GAAG,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACvD,YAAY,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,SAAS;KAC7F,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uptimizr/collector-server",
|
|
3
|
-
"version": "0.
|
|
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.
|
|
42
|
+
"@fastify/helmet": "^13.1.1",
|
|
43
43
|
"@fastify/rate-limit": "^11.2.0",
|
|
44
|
-
"@fastify/static": "^10.1.
|
|
45
|
-
"fastify": "^5.
|
|
44
|
+
"@fastify/static": "^10.1.3",
|
|
45
|
+
"fastify": "^5.12.1",
|
|
46
46
|
"fastify-type-provider-zod": "^7.0.0",
|
|
47
|
-
"zod": "^4.4
|
|
48
|
-
"@uptimizr/db": "0.8
|
|
49
|
-
"@uptimizr/schema": "0.6.
|
|
50
|
-
"@uptimizr/db
|
|
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.
|
|
54
|
-
"tsx": "^4.23.
|
|
55
|
-
"vitest": "^4.1.
|
|
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",
|