@coffeerunhobby/mcp-ha-connect 1.2.0 → 1.3.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 (97) hide show
  1. package/.env.example +52 -16
  2. package/CLAUDE.md +75 -0
  3. package/Dockerfile +5 -0
  4. package/dist/config.d.ts +10 -0
  5. package/dist/config.js +59 -3
  6. package/dist/config.js.map +1 -1
  7. package/dist/haClient/automations.js +2 -2
  8. package/dist/haClient/automations.js.map +1 -1
  9. package/dist/haClient/calendars.js +1 -1
  10. package/dist/haClient/calendars.js.map +1 -1
  11. package/dist/haClient/request.d.ts +2 -1
  12. package/dist/haClient/request.js +20 -11
  13. package/dist/haClient/request.js.map +1 -1
  14. package/dist/haClient/services.js +1 -1
  15. package/dist/haClient/services.js.map +1 -1
  16. package/dist/haClient/states.js +1 -1
  17. package/dist/haClient/states.js.map +1 -1
  18. package/dist/omadaClient/auth.d.ts +2 -1
  19. package/dist/omadaClient/auth.js +19 -30
  20. package/dist/omadaClient/auth.js.map +1 -1
  21. package/dist/omadaClient/request.d.ts +2 -1
  22. package/dist/omadaClient/request.js +18 -27
  23. package/dist/omadaClient/request.js.map +1 -1
  24. package/dist/server/auth.d.ts +6 -0
  25. package/dist/server/auth.js +22 -10
  26. package/dist/server/auth.js.map +1 -1
  27. package/dist/server/eventSubscription.d.ts +8 -0
  28. package/dist/server/eventSubscription.js +27 -5
  29. package/dist/server/eventSubscription.js.map +1 -1
  30. package/dist/server/http.d.ts +46 -0
  31. package/dist/server/http.js +143 -28
  32. package/dist/server/http.js.map +1 -1
  33. package/dist/server/rateLimiter.d.ts +16 -1
  34. package/dist/server/rateLimiter.js +32 -11
  35. package/dist/server/rateLimiter.js.map +1 -1
  36. package/dist/server/stdio.js +5 -0
  37. package/dist/server/stdio.js.map +1 -1
  38. package/dist/server/stream.d.ts +25 -0
  39. package/dist/server/stream.js +53 -2
  40. package/dist/server/stream.js.map +1 -1
  41. package/dist/tools/common.d.ts +11 -10
  42. package/dist/tools/common.js +20 -2
  43. package/dist/tools/common.js.map +1 -1
  44. package/dist/utils/config-validations.d.ts +7 -0
  45. package/dist/utils/config-validations.js +17 -0
  46. package/dist/utils/config-validations.js.map +1 -1
  47. package/dist/utils/jwt.d.ts +15 -1
  48. package/dist/utils/jwt.js +29 -4
  49. package/dist/utils/jwt.js.map +1 -1
  50. package/dist/utils/sanitizeError.d.ts +1 -0
  51. package/dist/utils/sanitizeError.js +18 -0
  52. package/dist/utils/sanitizeError.js.map +1 -0
  53. package/dist/utils/tlsDispatcher.d.ts +34 -0
  54. package/dist/utils/tlsDispatcher.js +33 -0
  55. package/dist/utils/tlsDispatcher.js.map +1 -0
  56. package/dist/version.d.ts +1 -1
  57. package/dist/version.js +1 -1
  58. package/docker-compose.yml +4 -1
  59. package/docs/CHANGELOG.md +58 -0
  60. package/openapi.json +1 -1
  61. package/package.json +4 -3
  62. package/src/config.ts +83 -3
  63. package/src/haClient/automations.ts +2 -2
  64. package/src/haClient/calendars.ts +1 -1
  65. package/src/haClient/request.ts +23 -11
  66. package/src/haClient/services.ts +1 -1
  67. package/src/haClient/states.ts +1 -1
  68. package/src/omadaClient/auth.ts +20 -28
  69. package/src/omadaClient/request.ts +19 -25
  70. package/src/server/auth.ts +41 -7
  71. package/src/server/eventSubscription.ts +30 -5
  72. package/src/server/http.ts +165 -29
  73. package/src/server/rateLimiter.ts +43 -11
  74. package/src/server/stdio.ts +6 -0
  75. package/src/server/stream.ts +65 -2
  76. package/src/tools/common.ts +23 -2
  77. package/src/utils/config-validations.ts +15 -0
  78. package/src/utils/jwt.ts +47 -4
  79. package/src/utils/sanitizeError.ts +18 -0
  80. package/src/utils/tlsDispatcher.ts +40 -0
  81. package/src/version.ts +1 -1
  82. package/tests/bdd/configuration.spec.ts +3 -0
  83. package/tests/config.test.ts +3 -0
  84. package/tests/resources/index.test.ts +3 -3
  85. package/tests/security/accessControl.test.ts +223 -0
  86. package/tests/security/authentication.test.ts +117 -0
  87. package/tests/security/configuration.test.ts +170 -0
  88. package/tests/security/cryptoTransport.test.ts +136 -0
  89. package/tests/security/dependencies.test.ts +152 -0
  90. package/tests/security/injection.test.ts +117 -0
  91. package/tests/security/insecureDesign.test.ts +122 -0
  92. package/tests/security/logging.test.ts +131 -0
  93. package/tests/security/resourceConsumption.test.ts +133 -0
  94. package/tests/tools/ai/analyzeSensors.test.ts +3 -3
  95. package/tests/tools/common.test.ts +5 -4
  96. package/tests/tools/homeassistant/handlers.test.ts +2 -2
  97. package/tests/tools/omada/handlers.test.ts +3 -3
package/.env.example CHANGED
@@ -13,9 +13,9 @@ HA_URL=http://homeassistant.10.0.0.19.nip.io:8123
13
13
  # Get from: Profile -> Long-Lived Access Tokens
14
14
  HA_TOKEN=your_long_lived_access_token_here
15
15
 
16
- # Validate SSL certificates (set to false for self-signed certs or HTTP)
17
- # Default: true
18
- HA_STRICT_SSL=false
16
+ # Validate SSL certificates (set to false ONLY for self-signed certs or plain HTTP)
17
+ # Default: true — keep true in production.
18
+ HA_STRICT_SSL=true
19
19
 
20
20
  # Request timeout in milliseconds
21
21
  # Default: 30000 (30 seconds)
@@ -93,33 +93,69 @@ MCP_HTTP_HEALTHCHECK_PATH=/health
93
93
  # Default: true
94
94
  MCP_HTTP_ALLOW_CORS=true
95
95
 
96
- # Allowed origins (comma-separated)
96
+ # Allowed origins (comma-separated) — used for CORS / Origin validation.
97
97
  # Use * for all origins (development only!)
98
98
  # Default: 127.0.0.1,localhost
99
99
  MCP_HTTP_ALLOWED_ORIGINS=127.0.0.1,localhost,http://mcpserver.10.0.0.18.nip.io:3000
100
100
 
101
+ # Allowed Host headers (comma-separated host[:port]) — OPT-IN DNS-rebinding
102
+ # protection. Leave UNSET (default) and Host validation is OFF — the server
103
+ # accepts any Host header and works everywhere, which is the safe choice for
104
+ # most deployments since the bearer token is the real boundary.
105
+ # Set it ONLY if you want to pin the exact hostnames the server is reached by.
106
+ # IMPORTANT: list the address CLIENTS DIAL to reach THIS server (its own LAN
107
+ # IP:port and/or its public/Cloudflare domain) — NOT your CORS origins, which are
108
+ # usually different addresses. Loopback/bind host:port is always added for you.
109
+ # Any Host header not listed here is rejected with 403.
110
+ # Example (LAN IP + public domain):
111
+ # MCP_HTTP_ALLOWED_HOSTS=192.168.0.18:3000,mcp.example.com
112
+
113
+ # -----------------------------------------------------------------------------
114
+ # Rate Limiting (only when MCP_SERVER_USE_HTTP=true)
115
+ # -----------------------------------------------------------------------------
116
+
117
+ # Enable per-client rate limiting. Default: true
118
+ MCP_RATE_LIMIT_ENABLED=true
119
+ # Window (ms) and max requests per window. Defaults: 60000 / 100
120
+ # MCP_RATE_LIMIT_WINDOW_MS=60000
121
+ # MCP_RATE_LIMIT_MAX_REQUESTS=100
122
+
123
+ # Trusted proxy IPs (comma-separated). Forwarding headers (CF-Connecting-IP,
124
+ # X-Forwarded-For, X-Real-IP) are honored ONLY when the immediate peer is listed
125
+ # here; otherwise the socket address is used so forged headers cannot evade limits.
126
+ # Behind Cloudflare/Docker, set this to the gateway/proxy address that connects to
127
+ # the server (e.g. the Docker bridge gateway). Leave empty to key purely on socket.
128
+ # MCP_RATE_LIMIT_TRUSTED_PROXIES=172.17.0.1
129
+
101
130
  # -----------------------------------------------------------------------------
102
131
  # Authentication Configuration (only when MCP_SERVER_USE_HTTP=true)
103
132
  # -----------------------------------------------------------------------------
104
133
 
105
134
  # Authentication method: none or bearer
106
- # - none: No authentication required
107
- # - bearer: Require Bearer token in Authorization header
108
- # Default: none
109
- MCP_AUTH_METHOD=none
110
-
111
- # Authentication tokens (comma-separated for multiple clients)
112
- # Required when MCP_AUTH_METHOD=bearer
113
- # Example: MCP_AUTH_TOKEN=token1,token2,token3
114
- # MCP_AUTH_TOKEN=your-secret-token-here
135
+ # - none: No authentication. Only permitted on a loopback bind (127.0.0.1/::1).
136
+ # - bearer: Require a JWT Bearer token in the Authorization header.
137
+ # Default: bearer (secure default; the server refuses none on a public bind).
138
+ MCP_AUTH_METHOD=bearer
139
+
140
+ # JWT signing secret (HS256). REQUIRED when MCP_AUTH_METHOD=bearer.
141
+ # Must be at least 32 characters. Generate one with:
142
+ # node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))"
143
+ MCP_AUTH_SECRET=replace-with-a-random-secret-at-least-32-characters
144
+
145
+ # Optional JWT hardening (recommended for production):
146
+ # Require tokens to carry an expiry (exp) claim.
147
+ # MCP_AUTH_REQUIRE_EXP=true
148
+ # Reject tokens whose iss / aud claims do not match.
149
+ # MCP_AUTH_ISSUER=mcp-ha-connect
150
+ # MCP_AUTH_AUDIENCE=mcp-clients
115
151
 
116
152
  # =============================================================================
117
153
  # Security Notes
118
154
  # =============================================================================
119
155
  # - Never commit this file with real credentials
120
156
  # - Use HA_STRICT_SSL=true in production with HTTPS
121
- # - Restrict MCP_HTTP_ALLOWED_ORIGINS to trusted domains
157
+ # - Restrict MCP_HTTP_ALLOWED_ORIGINS to trusted origins (scheme://host:port)
122
158
  # - Use MCP_HTTP_BIND_ADDR=127.0.0.1 for local-only access
123
159
  # - Rotate your Home Assistant tokens periodically
124
- # - Enable MCP_AUTH_METHOD=bearer in production for API security
125
- # - Use unique tokens per client for better access control and audit
160
+ # - Keep MCP_AUTH_METHOD=bearer in production; none is loopback-only
161
+ # - Issue a distinct JWT per client (with scoped RBAC permissions) for audit
package/CLAUDE.md CHANGED
@@ -264,3 +264,78 @@ npm run test:integration
264
264
  no `src/tools/registry.ts` / `metaTools.ts` / `allMetadata.ts`. Setting it in `.env`
265
265
  is a silent no-op; the server always registers every tool eagerly. Either build the
266
266
  feature or drop the var from the NAS `.env`.
267
+
268
+ ---
269
+
270
+ ## Security
271
+
272
+ This server controls real devices (HA, Omada) and is exposed publicly via Cloudflare, so
273
+ treat it as security-sensitive. A full audit (2026-06-07) with file/line findings is in
274
+ `.claude/NEXT-SESSION.md`; this section is the **durable policy** distilled from it.
275
+
276
+ ### Dependencies — update, don't rewrite
277
+
278
+ - Runtime deps are intentionally tiny: `@modelcontextprotocol/sdk`, `ws`, `zod`.
279
+ **Do not hand-roll replacements** for these (or for transitive libs like `hono`,
280
+ `ajv`, `path-to-regexp`). A homegrown version loses community review and adds more
281
+ bugs than it removes. Zod and the MCP SDK earn their keep.
282
+ - The alarming `npm audit` list (`hono`, `@hono/node-server`, `fast-uri`, `ajv`,
283
+ `path-to-regexp`, `qs`) is **entirely transitive under the SDK**:
284
+ `@modelcontextprotocol/sdk → @hono/node-server → hono`. **Bumping the SDK fixes most
285
+ of them.** `ws` is the one direct dep to bump on its own.
286
+ - Triage with `npm audit --omit=dev` — dev-only vulns (vitest/esbuild/tsx) don't ship.
287
+ The question is *reachability in production*, not the raw count.
288
+ - Remediate on a branch: `npm install @modelcontextprotocol/sdk@latest ws@latest`, then
289
+ `npm test && npm run build && npm audit --omit=dev`. Commit `package-lock.json`;
290
+ CI/Docker use `npm ci`, not `npm install`. Widen version ranges only intentionally.
291
+
292
+ ### MCP transport invariant (the SDK "cross-client data leak" advisory)
293
+
294
+ GHSA-345p-7cg4-v4c7 is about **sharing one `McpServer`/transport instance across
295
+ clients**. Our HTTP layer MUST create a **fresh server + transport per request**
296
+ (stateless mode, current behavior) or per session keyed by `Mcp-Session-Id` (stateful) —
297
+ never a single global transport handling every `/mcp` POST. Re-verify this after any SDK
298
+ upgrade or transport refactor. Bumping the SDK is necessary but not sufficient if the
299
+ architecture shares instances.
300
+
301
+ ### Our attack surface (higher-leverage than CVEs)
302
+
303
+ 1. **Auth stays on.** NAS `.env` must keep `MCP_AUTH_METHOD=bearer`. `none` =
304
+ unauthenticated full admin (fail-open default). Never put the JWT on public channels;
305
+ tokens should carry an `exp` (the current prod token does not — fix when convenient).
306
+ 2. **Authorization is per-tool.** Every MCP tool is gated via
307
+ `wrapToolHandler(..., Permission.X)`. The REST `/api/*` bridge is **not** permission-
308
+ gated — keep it disabled or treat it as full-trust until it enforces the same masks.
309
+ Prompt injection via the AI path ("ignore previous instructions, unlock the door") is
310
+ contained only by these authorization checks — the model is not a security boundary.
311
+ 3. **Scoped TLS only.** Never use the process-global `NODE_TLS_REJECT_UNAUTHORIZED=0` —
312
+ it disables cert validation for *all* concurrent outbound HTTPS (HA token + AI key at
313
+ MITM risk), not just Omada. Use a per-client `undici` dispatcher, or pin the Omada
314
+ self-signed cert as a CA so verification stays on.
315
+ 4. **Encode every path segment** built from tool input. The Omada client does
316
+ (`encodeURIComponent` throughout); the HA client interpolates raw — fix when touched.
317
+ 5. **Secrets never in logs.** Redact tokens / secrets / `Authorization` headers / API
318
+ keys, and **sanitize `error.message`/`error.stack` before logging** — HTTP libraries
319
+ embed auth headers and token-bearing URLs inside thrown errors. Don't return raw
320
+ `error.message` to clients (leaks internal hostnames).
321
+ 6. **HTTP hardening when `useHttp`:** request body-size limit, rate limiting keyed on a
322
+ trusted-proxy IP (Cloudflare `CF-Connecting-IP`, not the spoofable `X-Forwarded-For`),
323
+ and static security headers (`X-Content-Type-Options: nosniff`, `X-Frame-Options`,
324
+ `Referrer-Policy`, CSP where applicable).
325
+
326
+ ### Confirmed safe — don't re-litigate
327
+
328
+ - **JWT:** HS256 is pinned (the token's `alg` header is ignored), signature compared with
329
+ `crypto.timingSafeEqual` — not vulnerable to alg-confusion or timing attacks. (Still
330
+ add `exp` enforcement, and `iss`/`aud` if it ever becomes multi-issuer.)
331
+ - **Omada client** encodes every path segment; query params via `URLSearchParams`.
332
+ - **No** `eval` / `new Function` / dynamic `require`; the only child process is
333
+ `spawn('node', [fixedPath])` — no shell, no user-controlled argv.
334
+ - **No arbitrary-URL SSRF via tool args** — HA/Omada/AI base URLs come only from config.
335
+ - **Git hygiene clean** — `.env` is never tracked; no hardcoded real secrets in src/tests.
336
+
337
+ ### Insecure defaults to flip when next touched
338
+
339
+ `config.ts` defaults `MCP_AUTH_METHOD=none`; `.env.example` ships `none` +
340
+ `HA_STRICT_SSL=false`; `docker-compose.yml` hardcodes `MCP_HTTP_ALLOWED_ORIGINS=*`.
341
+ None of these reflect the (secure) live deployment — make the secure values the defaults.
package/Dockerfile CHANGED
@@ -28,4 +28,9 @@ RUN apk add --no-cache curl
28
28
  COPY package*.json ./
29
29
  RUN npm install --omit=dev
30
30
  COPY --from=build /app/dist ./dist
31
+
32
+ # M10: drop root. The official node image ships a non-root `node` user (uid 1000).
33
+ # Built artifacts under /app are world-readable, so no chown is required; the
34
+ # server listens on 3000 (>1024) which needs no privileged capability.
35
+ USER node
31
36
  CMD ["node", "--experimental-quic", "dist/index.js"]
package/dist/config.d.ts CHANGED
@@ -31,13 +31,23 @@ export interface EnvironmentConfig {
31
31
  httpHealthcheckPath?: string;
32
32
  httpAllowCors: boolean;
33
33
  httpAllowedOrigins?: string[];
34
+ /**
35
+ * Opt-in list of Host-header values (host[:port]) the server is reached by.
36
+ * When set, DNS-rebinding Host validation is enforced at the transport (M3);
37
+ * when unset, Host validation is OFF (origin/CORS is handled separately).
38
+ */
39
+ httpAllowedHosts?: string[];
34
40
  sseEventsEnabled: boolean;
35
41
  sseEventsPath: string;
36
42
  rateLimitEnabled: boolean;
37
43
  rateLimitWindowMs: number;
38
44
  rateLimitMaxRequests: number;
45
+ rateLimitTrustedProxies?: string[];
39
46
  authMethod: 'none' | 'bearer';
40
47
  authSecret?: string;
48
+ authRequireExp: boolean;
49
+ authIssuer?: string;
50
+ authAudience?: string;
41
51
  permissions: PermissionsConfig;
42
52
  }
43
53
  export declare function loadConfig(env?: NodeJS.ProcessEnv): EnvironmentConfig;
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { isValidBindAddress, isValidOrigin } from './utils/config-validations.js';
2
+ import { isValidBindAddress, isValidOrigin, isLoopbackAddress } from './utils/config-validations.js';
3
3
  import { parsePermissionsConfig } from './permissions/index.js';
4
4
  import { logger } from './utils/logger.js';
5
5
  const createBooleanStringSchema = (defaultValue) => z
@@ -53,6 +53,7 @@ const envSchema = z
53
53
  httpHealthcheckPath: z.string().optional(),
54
54
  httpAllowCors: createBooleanStringSchema(true),
55
55
  httpAllowedOrigins: z.string().optional().transform((v) => v?.split(',').map((s) => s.trim()).filter(Boolean)),
56
+ httpAllowedHosts: z.string().optional().transform((v) => v?.split(',').map((s) => s.trim()).filter(Boolean)),
56
57
  // SSE Event Subscription Configuration
57
58
  sseEventsEnabled: createBooleanStringSchema(true),
58
59
  sseEventsPath: z.string().optional(),
@@ -60,9 +61,17 @@ const envSchema = z
60
61
  rateLimitEnabled: createBooleanStringSchema(true),
61
62
  rateLimitWindowMs: numericStringSchema,
62
63
  rateLimitMaxRequests: numericStringSchema,
64
+ // M4: immediate-peer IPs whose forwarding headers may be trusted (CSV).
65
+ rateLimitTrustedProxies: z
66
+ .string()
67
+ .optional()
68
+ .transform((v) => v?.split(',').map((s) => s.trim()).filter(Boolean)),
63
69
  // Authentication Configuration
64
70
  authMethod: z.enum(['none', 'bearer']).optional().default('none'),
65
71
  authSecret: z.string().optional(),
72
+ authRequireExp: createBooleanStringSchema(false),
73
+ authIssuer: z.string().min(1).optional(),
74
+ authAudience: z.string().min(1).optional(),
66
75
  permissionsConfig: z.string().optional(),
67
76
  })
68
77
  .refine((data) => {
@@ -98,6 +107,32 @@ const envSchema = z
98
107
  }, {
99
108
  message: 'MCP_AUTH_SECRET is required when MCP_AUTH_METHOD is "bearer"',
100
109
  path: ['authSecret'],
110
+ })
111
+ .refine((data) => {
112
+ // M8: a weak signing secret undermines the whole bearer scheme.
113
+ if (data.authMethod === 'bearer' && data.authSecret && data.authSecret.length < 32) {
114
+ return false;
115
+ }
116
+ return true;
117
+ }, {
118
+ message: 'MCP_AUTH_SECRET must be at least 32 characters when MCP_AUTH_METHOD is "bearer"',
119
+ path: ['authSecret'],
120
+ })
121
+ .refine((data) => {
122
+ // H5: an unauthenticated server must never be reachable off-host. Allow
123
+ // method=none only when the (explicit) bind address is loopback. A missing
124
+ // bind address defaults to 127.0.0.1 later, so it is safe.
125
+ if (data.authMethod === 'none' &&
126
+ data.httpBindAddr &&
127
+ !isLoopbackAddress(data.httpBindAddr)) {
128
+ return false;
129
+ }
130
+ return true;
131
+ }, {
132
+ message: 'MCP_AUTH_METHOD=none is only permitted on a loopback bind address ' +
133
+ '(127.0.0.0/8 or ::1). Set MCP_AUTH_METHOD=bearer (with MCP_AUTH_SECRET) ' +
134
+ 'to bind a public interface such as 0.0.0.0.',
135
+ path: ['authMethod'],
101
136
  });
102
137
  export function loadConfig(env = process.env) {
103
138
  const parsed = envSchema.safeParse({
@@ -137,6 +172,7 @@ export function loadConfig(env = process.env) {
137
172
  httpHealthcheckPath: env.MCP_HTTP_HEALTHCHECK_PATH,
138
173
  httpAllowCors: env.MCP_HTTP_ALLOW_CORS,
139
174
  httpAllowedOrigins: env.MCP_HTTP_ALLOWED_ORIGINS,
175
+ httpAllowedHosts: env.MCP_HTTP_ALLOWED_HOSTS,
140
176
  // SSE Event Subscription Configuration
141
177
  sseEventsEnabled: env.MCP_SSE_EVENTS_ENABLED,
142
178
  sseEventsPath: env.MCP_SSE_EVENTS_PATH,
@@ -144,9 +180,13 @@ export function loadConfig(env = process.env) {
144
180
  rateLimitEnabled: env.MCP_RATE_LIMIT_ENABLED,
145
181
  rateLimitWindowMs: env.MCP_RATE_LIMIT_WINDOW_MS,
146
182
  rateLimitMaxRequests: env.MCP_RATE_LIMIT_MAX_REQUESTS,
183
+ rateLimitTrustedProxies: env.MCP_RATE_LIMIT_TRUSTED_PROXIES,
147
184
  // Authentication Configuration
148
185
  authMethod: env.MCP_AUTH_METHOD,
149
186
  authSecret: env.MCP_AUTH_SECRET,
187
+ authRequireExp: env.MCP_AUTH_REQUIRE_EXP,
188
+ authIssuer: env.MCP_AUTH_ISSUER,
189
+ authAudience: env.MCP_AUTH_AUDIENCE,
150
190
  permissionsConfig: env.MCP_PERMISSIONS_CONFIG,
151
191
  });
152
192
  if (!parsed.success) {
@@ -155,11 +195,22 @@ export function loadConfig(env = process.env) {
155
195
  }
156
196
  const httpPath = parsed.data.httpPath ?? '/mcp';
157
197
  const httpBindAddr = parsed.data.httpBindAddr ?? '127.0.0.1';
158
- let httpAllowedOrigins = parsed.data.httpAllowedOrigins ?? ['127.0.0.1', 'localhost'];
198
+ const httpPort = parsed.data.httpPort ?? 3000;
199
+ // M3: default origins must be full scheme://host:port so they actually match a
200
+ // real browser `Origin` header (the SDK compares it by exact string). Bare
201
+ // hostnames like "localhost" never match "http://localhost:3000" and so left
202
+ // DNS-rebinding/CORS protection effectively disabled for the default config.
203
+ let httpAllowedOrigins = parsed.data.httpAllowedOrigins ??
204
+ [`http://localhost:${httpPort}`, `http://127.0.0.1:${httpPort}`];
159
205
  if (httpAllowedOrigins.includes('*')) {
160
206
  logger.warn('Wildcard (*) origin allowed - origin validation disabled');
161
207
  httpAllowedOrigins = [];
162
208
  }
209
+ // H5: make the no-auth posture loud even when the bind is loopback.
210
+ if (parsed.data.authMethod === 'none') {
211
+ logger.warn('MCP_AUTH_METHOD=none: authentication is DISABLED. This is only permitted ' +
212
+ 'on a loopback bind; set MCP_AUTH_METHOD=bearer to expose the server.');
213
+ }
163
214
  return {
164
215
  // Plugin Enable Flags
165
216
  haPluginEnabled: parsed.data.haPluginEnabled,
@@ -190,13 +241,14 @@ export function loadConfig(env = process.env) {
190
241
  useHttp: parsed.data.useHttp,
191
242
  stateful: parsed.data.stateful,
192
243
  // MCP Server HTTP Configuration
193
- httpPort: parsed.data.httpPort,
244
+ httpPort,
194
245
  httpBindAddr,
195
246
  httpPath,
196
247
  httpEnableHealthcheck: parsed.data.httpEnableHealthcheck,
197
248
  httpHealthcheckPath: parsed.data.httpHealthcheckPath,
198
249
  httpAllowCors: parsed.data.httpAllowCors,
199
250
  httpAllowedOrigins,
251
+ httpAllowedHosts: parsed.data.httpAllowedHosts,
200
252
  // SSE Event Subscription Configuration
201
253
  sseEventsEnabled: parsed.data.sseEventsEnabled,
202
254
  sseEventsPath: parsed.data.sseEventsPath ?? '/subscribe_events',
@@ -204,9 +256,13 @@ export function loadConfig(env = process.env) {
204
256
  rateLimitEnabled: parsed.data.rateLimitEnabled,
205
257
  rateLimitWindowMs: parsed.data.rateLimitWindowMs ?? 60000,
206
258
  rateLimitMaxRequests: parsed.data.rateLimitMaxRequests ?? 100,
259
+ rateLimitTrustedProxies: parsed.data.rateLimitTrustedProxies,
207
260
  // Authentication Configuration
208
261
  authMethod: parsed.data.authMethod,
209
262
  authSecret: parsed.data.authSecret,
263
+ authRequireExp: parsed.data.authRequireExp,
264
+ authIssuer: parsed.data.authIssuer,
265
+ authAudience: parsed.data.authAudience,
210
266
  permissions: parsePermissionsConfig(parsed.data.permissionsConfig),
211
267
  };
212
268
  }
@@ -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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"}
@@ -134,7 +134,7 @@ export class AutomationOperations {
134
134
  const automationId = config.id || String(Date.now());
135
135
  logger.info('Creating automation', { alias: config.alias, id: automationId });
136
136
  // POST to /config/automation/config/{id} - the ID must be in the URL path
137
- await this.request.post(`/config/automation/config/${automationId}`, {
137
+ await this.request.post(`/config/automation/config/${encodeURIComponent(automationId)}`, {
138
138
  id: automationId,
139
139
  alias: config.alias,
140
140
  description: config.description || '',
@@ -185,7 +185,7 @@ export class AutomationOperations {
185
185
  }
186
186
  const automationId = entityId.replace('automation.', '');
187
187
  logger.debug('Fetching automation trace', { automationId });
188
- return this.request.get(`/trace/automation/${automationId}`);
188
+ return this.request.get(`/trace/automation/${encodeURIComponent(automationId)}`);
189
189
  }
190
190
  }
191
191
  //# sourceMappingURL=automations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"automations.js","sourceRoot":"","sources":["../../src/haClient/automations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automations.js","sourceRoot":"","sources":["../../src/haClient/automations.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export class CalendarOperations {
37
37
  const end = endDate || new Date(start.getTime() + 30 * 24 * 60 * 60 * 1000);
38
38
  logger.debug('Fetching calendar events', { entityId, start: start.toISOString(), end: end.toISOString() });
39
39
  // Calendar events use a special API endpoint, not the standard services API
40
- const events = await this.request.get(`/calendars/${entityId}`, {
40
+ const events = await this.request.get(`/calendars/${encodeURIComponent(entityId)}`, {
41
41
  start: start.toISOString(),
42
42
  end: end.toISOString(),
43
43
  });
@@ -1 +1 @@
1
- {"version":3,"file":"calendars.js","sourceRoot":"","sources":["../../src/haClient/calendars.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEnC,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,YAAY,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACxD,KAAK,EAAE,IAAI,EAAE,qDAAqD;SACnE,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAgB,EAChB,SAAgB,EAChB,OAAc;QAEd,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE5E,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE3G,4EAA4E;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACnC,cAAc,QAAQ,EAAE,EACxB;YACE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;YAC1B,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE;SACvB,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CACxB,SAAgB,EAChB,OAAc;QAEd,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE5C,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBACpF,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5F,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"calendars.js","sourceRoot":"","sources":["../../src/haClient/calendars.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,8 @@ export interface RequestHandlerConfig {
13
13
  * HTTP request handler for Home Assistant API calls.
14
14
  */
15
15
  export declare class RequestHandler {
16
- private httpsAgent?;
16
+ /** Per-client undici dispatcher; set only when strictSsl is disabled (H2). */
17
+ private dispatcher?;
17
18
  private baseUrl;
18
19
  private token;
19
20
  private timeout;
@@ -2,14 +2,15 @@
2
2
  * HTTP Request Handler for Home Assistant API
3
3
  * Handles authentication and HTTP requests
4
4
  */
5
- import https from 'https';
6
5
  import { AuthenticationError, ApiError } from '../types/index.js';
7
6
  import { logger } from '../utils/logger.js';
7
+ import { createTlsDispatcher } from '../utils/tlsDispatcher.js';
8
8
  /**
9
9
  * HTTP request handler for Home Assistant API calls.
10
10
  */
11
11
  export class RequestHandler {
12
- httpsAgent;
12
+ /** Per-client undici dispatcher; set only when strictSsl is disabled (H2). */
13
+ dispatcher;
13
14
  baseUrl;
14
15
  token;
15
16
  timeout;
@@ -17,11 +18,11 @@ export class RequestHandler {
17
18
  this.baseUrl = config.baseUrl;
18
19
  this.token = config.token;
19
20
  this.timeout = config.timeout;
20
- // Create HTTPS agent with custom SSL settings
21
- if (!config.strictSsl) {
22
- this.httpsAgent = new https.Agent({
23
- rejectUnauthorized: false,
24
- });
21
+ // Relax TLS validation for THIS client only, via a per-instance undici
22
+ // dispatcher. Node's global fetch ignores the legacy `agent` option, so the
23
+ // previous https.Agent was silently a no-op for self-signed HA instances.
24
+ this.dispatcher = createTlsDispatcher(config.strictSsl);
25
+ if (this.dispatcher) {
25
26
  logger.warn('SSL certificate validation is disabled');
26
27
  }
27
28
  }
@@ -30,6 +31,12 @@ export class RequestHandler {
30
31
  */
31
32
  async request(path, options = {}) {
32
33
  const url = new URL(`${this.baseUrl}/api${path}`);
34
+ // H4 defense-in-depth: refuse any path that resolves outside /api/.
35
+ // Call sites encode user-controlled segments, but this guard catches any
36
+ // raw "../" traversal that would otherwise escape the API namespace.
37
+ if (url.pathname !== '/api' && !url.pathname.startsWith('/api/')) {
38
+ throw new ApiError('Invalid API path', 400, { path });
39
+ }
33
40
  // Add query parameters
34
41
  if (options.params) {
35
42
  Object.entries(options.params).forEach(([key, value]) => {
@@ -47,14 +54,16 @@ export class RequestHandler {
47
54
  params: options.params,
48
55
  });
49
56
  try {
50
- const response = await fetch(url.toString(), {
57
+ const init = {
51
58
  method: options.method ?? 'GET',
52
59
  headers,
53
60
  body: options.body ? JSON.stringify(options.body) : undefined,
54
- // @ts-expect-error - agent is valid but not in types
55
- agent: this.httpsAgent,
56
61
  signal: AbortSignal.timeout(this.timeout),
57
- });
62
+ };
63
+ if (this.dispatcher) {
64
+ init.dispatcher = this.dispatcher;
65
+ }
66
+ const response = await fetch(url.toString(), init);
58
67
  if (!response.ok) {
59
68
  const errorText = await response.text();
60
69
  if (response.status === 401) {
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/haClient/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/haClient/request.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export class ServiceOperations {
20
20
  service: data.service,
21
21
  hasTarget: !!data.target,
22
22
  });
23
- const path = `/services/${data.domain}/${data.service}`;
23
+ const path = `/services/${encodeURIComponent(data.domain)}/${encodeURIComponent(data.service)}`;
24
24
  const body = {
25
25
  ...data.service_data,
26
26
  ...data.target,
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/haClient/services.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAqB;QACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,aAAa,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG;YACX,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAsB,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEzC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;CACF"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/haClient/services.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAqB;QACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,aAAa,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,GAAG;YACX,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAsB,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEzC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -27,7 +27,7 @@ export class StateOperations {
27
27
  async getState(entityId) {
28
28
  logger.debug('Fetching state', { entityId });
29
29
  try {
30
- const state = await this.request.get(`/states/${entityId}`);
30
+ const state = await this.request.get(`/states/${encodeURIComponent(entityId)}`);
31
31
  return state;
32
32
  }
33
33
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"states.js","sourceRoot":"","sources":["../../src/haClient/states.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAS,WAAW,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACxC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAC9C,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../../src/haClient/states.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAS,WAAW,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACxC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAC9C,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -18,7 +18,8 @@ export declare class AuthManager {
18
18
  private readonly clientSecret;
19
19
  private readonly omadacId;
20
20
  private readonly timeout;
21
- private readonly strictSsl;
21
+ /** Per-client undici dispatcher; set only when strictSsl is disabled (H2). */
22
+ private readonly dispatcher?;
22
23
  constructor(config: AuthManagerConfig);
23
24
  /**
24
25
  * Get the current access token, refreshing if necessary.