@coffeerunhobby/mcp-ha-connect 0.7.0 → 0.9.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/.env.example +15 -39
- package/Dockerfile +4 -4
- package/README.md +22 -107
- package/dist/autonomic/index.d.ts +6 -0
- package/dist/autonomic/index.js +7 -0
- package/dist/autonomic/index.js.map +1 -0
- package/dist/autonomic/priority.d.ts +60 -0
- package/dist/autonomic/priority.js +97 -0
- package/dist/autonomic/priority.js.map +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.js +21 -6
- package/dist/config.js.map +1 -1
- package/dist/haClient/config.d.ts +1 -0
- package/dist/haClient/config.js +11 -1
- package/dist/haClient/config.js.map +1 -1
- package/dist/haClient/history.d.ts +1 -0
- package/dist/haClient/history.js +7 -4
- package/dist/haClient/history.js.map +1 -1
- package/dist/haClient/index.d.ts +1 -0
- package/dist/haClient/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/organism/index.d.ts +5 -0
- package/dist/organism/index.js +6 -0
- package/dist/organism/index.js.map +1 -0
- package/dist/organism/priority.d.ts +60 -0
- package/dist/organism/priority.js +97 -0
- package/dist/organism/priority.js.map +1 -0
- package/dist/server/auth.d.ts +20 -0
- package/dist/server/auth.js +74 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/common.js +2 -1
- package/dist/server/common.js.map +1 -1
- package/dist/server/http.d.ts +1 -1
- package/dist/server/http.js +133 -55
- package/dist/server/http.js.map +1 -1
- package/dist/server/sse.js +1 -1
- package/dist/server/sse.js.map +1 -1
- package/dist/server/stream.js +6 -0
- package/dist/server/stream.js.map +1 -1
- package/dist/tools/common.d.ts +4 -0
- package/dist/tools/common.js +4 -2
- package/dist/tools/common.js.map +1 -1
- package/dist/tools/systemTools.js +4 -4
- package/dist/tools/systemTools.js.map +1 -1
- package/dist/types/config.d.ts +1 -1
- package/dist/types/config.js +1 -0
- package/dist/types/config.js.map +1 -1
- package/dist/utils/config-validations.d.ts +9 -1
- package/dist/utils/config-validations.js +29 -20
- package/dist/utils/config-validations.js.map +1 -1
- package/dist/utils/sanitize.d.ts +25 -0
- package/dist/utils/sanitize.js +92 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/docs/CHANGELOG.md +30 -7
- package/docs/Quick_Start.md +215 -0
- package/docs/SSE_API.md +1 -1
- package/openapi.json +1 -1
- package/package.json +1 -1
- package/src/autonomic/index.ts +16 -0
- package/src/autonomic/priority.ts +109 -0
- package/src/config.ts +31 -7
- package/src/haClient/config.ts +13 -2
- package/src/haClient/history.ts +9 -4
- package/src/haClient/index.ts +1 -0
- package/src/index.ts +1 -2
- package/src/server/auth.ts +103 -0
- package/src/server/common.ts +2 -1
- package/src/server/http.ts +151 -61
- package/src/server/stream.ts +7 -0
- package/src/tools/common.ts +4 -2
- package/src/tools/systemTools.ts +4 -4
- package/src/types/config.ts +4 -1
- package/src/utils/config-validations.ts +29 -22
- package/src/version.ts +5 -0
- package/tests/autonomic/priority.test.ts +171 -0
- package/tests/bdd/configuration.spec.ts +0 -5
- package/tests/config.test.ts +6 -32
- package/tests/features/configuration.feature +0 -1
- package/tests/haClient/config.test.ts +33 -12
- package/tests/haClient/history.test.ts +58 -0
- package/tests/haClient/index.test.ts +1 -1
- package/tests/index.test.ts +5 -9
- package/tests/localAI/index.test.ts +1 -1
- package/tests/server/auth.test.ts +206 -0
- package/tests/server/common.test.ts +1 -1
- package/tests/server/http.test.ts +122 -35
- package/tests/server/stdio.test.ts +1 -1
- package/tests/server/stream.test.ts +1 -2
- package/tests/tools/registry.test.ts +1 -1
- package/tests/utils/config-validations.test.ts +69 -6
- package/src/server/sse.ts +0 -120
- package/tests/server/sse.test.ts +0 -240
package/.env.example
CHANGED
|
@@ -73,12 +73,6 @@ MCP_SERVER_STATEFUL=false
|
|
|
73
73
|
# Default: 3000
|
|
74
74
|
MCP_HTTP_PORT=3000
|
|
75
75
|
|
|
76
|
-
# Transport protocol: stream or sse
|
|
77
|
-
# - stream: Modern MCP protocol (recommended)
|
|
78
|
-
# - sse: Legacy MCP protocol with Server-Sent Events
|
|
79
|
-
# Default: stream
|
|
80
|
-
MCP_HTTP_TRANSPORT=stream
|
|
81
|
-
|
|
82
76
|
# Bind address (use 0.0.0.0 to listen on all interfaces)
|
|
83
77
|
# Default: 127.0.0.1 (localhost only)
|
|
84
78
|
MCP_HTTP_BIND_ADDR=127.0.0.1
|
|
@@ -104,40 +98,20 @@ MCP_HTTP_ALLOW_CORS=true
|
|
|
104
98
|
# Default: 127.0.0.1,localhost
|
|
105
99
|
MCP_HTTP_ALLOWED_ORIGINS=127.0.0.1,localhost,http://mcpserver.10.0.0.18.nip.io:3000
|
|
106
100
|
|
|
107
|
-
#
|
|
108
|
-
#
|
|
109
|
-
#
|
|
101
|
+
# -----------------------------------------------------------------------------
|
|
102
|
+
# Authentication Configuration (only when MCP_SERVER_USE_HTTP=true)
|
|
103
|
+
# -----------------------------------------------------------------------------
|
|
104
|
+
|
|
105
|
+
# 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
110
|
|
|
111
|
-
#
|
|
112
|
-
#
|
|
113
|
-
#
|
|
114
|
-
#
|
|
115
|
-
# Then configure claude_desktop_config.json to run: node dist/index.js
|
|
116
|
-
|
|
117
|
-
# Example 2: HTTP Server with Stream Transport (Recommended)
|
|
118
|
-
# -----------------------------------------------------------
|
|
119
|
-
# MCP_SERVER_USE_HTTP=true
|
|
120
|
-
# MCP_HTTP_TRANSPORT=stream
|
|
121
|
-
# MCP_HTTP_PORT=3000
|
|
122
|
-
# MCP_HTTP_BIND_ADDR=127.0.0.1
|
|
123
|
-
# Access at: http://mcpserver.10.0.0.18.nip.io:3000/mcp
|
|
124
|
-
|
|
125
|
-
# Example 3: HTTP Server with SSE (Legacy Clients)
|
|
126
|
-
# -------------------------------------------------
|
|
127
|
-
# MCP_SERVER_USE_HTTP=true
|
|
128
|
-
# MCP_HTTP_TRANSPORT=sse
|
|
129
|
-
# MCP_HTTP_PORT=3000
|
|
130
|
-
# Access at: http://mcpserver.10.0.0.18.nip.io:3000/sse
|
|
131
|
-
|
|
132
|
-
# Example 4: Production HTTP Server
|
|
133
|
-
# ----------------------------------
|
|
134
|
-
# MCP_SERVER_USE_HTTP=true
|
|
135
|
-
# MCP_SERVER_LOG_FORMAT=json
|
|
136
|
-
# MCP_HTTP_TRANSPORT=stream
|
|
137
|
-
# MCP_HTTP_PORT=3000
|
|
138
|
-
# MCP_HTTP_BIND_ADDR=0.0.0.0
|
|
139
|
-
# MCP_HTTP_ALLOWED_ORIGINS=https://your-app.com
|
|
140
|
-
# MCP_SERVER_STATEFUL=true
|
|
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
|
|
141
115
|
|
|
142
116
|
# =============================================================================
|
|
143
117
|
# Security Notes
|
|
@@ -147,3 +121,5 @@ MCP_HTTP_ALLOWED_ORIGINS=127.0.0.1,localhost,http://mcpserver.10.0.0.18.nip.io:3
|
|
|
147
121
|
# - Restrict MCP_HTTP_ALLOWED_ORIGINS to trusted domains
|
|
148
122
|
# - Use MCP_HTTP_BIND_ADDR=127.0.0.1 for local-only access
|
|
149
123
|
# - 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
|
package/Dockerfile
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# syntax=docker/dockerfile:1.7
|
|
2
2
|
|
|
3
|
-
FROM node:
|
|
3
|
+
FROM node:25-bookworm-slim AS deps
|
|
4
4
|
WORKDIR /app
|
|
5
5
|
COPY package*.json ./
|
|
6
6
|
RUN npm install
|
|
7
7
|
|
|
8
|
-
FROM node:
|
|
8
|
+
FROM node:25-bookworm-slim AS build
|
|
9
9
|
WORKDIR /app
|
|
10
10
|
COPY --from=deps /app/node_modules ./node_modules
|
|
11
11
|
COPY . .
|
|
12
12
|
RUN npm run build
|
|
13
13
|
|
|
14
|
-
FROM node:
|
|
14
|
+
FROM node:25-bookworm-slim AS runtime
|
|
15
15
|
|
|
16
16
|
# OCI metadata labels
|
|
17
17
|
LABEL org.opencontainers.image.title="Smart HomeAssistant MCP Server"
|
|
@@ -30,4 +30,4 @@ RUN apt-get update \
|
|
|
30
30
|
COPY package*.json ./
|
|
31
31
|
RUN npm install --omit=dev
|
|
32
32
|
COPY --from=build /app/dist ./dist
|
|
33
|
-
CMD ["node", "dist/index.js"]
|
|
33
|
+
CMD ["node", "--experimental-quic", "dist/index.js"]
|
package/README.md
CHANGED
|
@@ -5,96 +5,6 @@ A production-ready Model Context Protocol (MCP) server for Home Assistant integr
|
|
|
5
5
|
[](https://www.npmjs.com/package/@coffeerunhobby/mcp-ha-connect)
|
|
6
6
|
[](https://github.com/coffeerunhobby/mcp-ha-connect/pkgs/container/mcp-ha-connect)
|
|
7
7
|
|
|
8
|
-
## Quick Start
|
|
9
|
-
|
|
10
|
-
Choose your preferred installation method:
|
|
11
|
-
|
|
12
|
-
### Option 1: npx (Recommended - No Installation Required)
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"mcpServers": {
|
|
17
|
-
"homeassistant": {
|
|
18
|
-
"command": "npx",
|
|
19
|
-
"args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
|
|
20
|
-
"env": {
|
|
21
|
-
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
22
|
-
"HA_TOKEN": "your_long_lived_access_token"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Option 2: Global npm Install
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npm install -g @coffeerunhobby/mcp-ha-connect
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
{
|
|
37
|
-
"mcpServers": {
|
|
38
|
-
"homeassistant": {
|
|
39
|
-
"command": "mcp-ha-connect",
|
|
40
|
-
"env": {
|
|
41
|
-
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
42
|
-
"HA_TOKEN": "your_token"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Option 3: Docker
|
|
50
|
-
|
|
51
|
-
```json
|
|
52
|
-
{
|
|
53
|
-
"mcpServers": {
|
|
54
|
-
"homeassistant": {
|
|
55
|
-
"command": "docker",
|
|
56
|
-
"args": [
|
|
57
|
-
"run",
|
|
58
|
-
"--rm",
|
|
59
|
-
"-i",
|
|
60
|
-
"-e", "HA_URL=http://host.docker.internal:8123",
|
|
61
|
-
"-e", "HA_TOKEN=your_token",
|
|
62
|
-
"ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Option 4: Local Development
|
|
70
|
-
|
|
71
|
-
```json
|
|
72
|
-
{
|
|
73
|
-
"mcpServers": {
|
|
74
|
-
"homeassistant": {
|
|
75
|
-
"command": "node",
|
|
76
|
-
"args": ["C:\\workspace\\mcp-homeassistant\\dist\\index.js"],
|
|
77
|
-
"env": {
|
|
78
|
-
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
79
|
-
"HA_TOKEN": "your_token"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Configuration Locations
|
|
87
|
-
|
|
88
|
-
### Claude Desktop
|
|
89
|
-
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
90
|
-
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
91
|
-
- **Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
92
|
-
|
|
93
|
-
### LM Studio
|
|
94
|
-
- **Windows:** `%USERPROFILE%\.lmstudio\config.json`
|
|
95
|
-
- **macOS:** `~/Library/Application Support/LM Studio/config.json`
|
|
96
|
-
- **Linux:** `~/.config/lmstudio/config.json`
|
|
97
|
-
|
|
98
8
|
## Autonomous Safety Monitoring System
|
|
99
9
|
|
|
100
10
|
1. **JS Pre-filter**: Tier A triggers + basic anomaly detection
|
|
@@ -106,21 +16,23 @@ npm install -g @coffeerunhobby/mcp-ha-connect
|
|
|
106
16
|
|
|
107
17
|
See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE system.
|
|
108
18
|
|
|
19
|
+
See [docs/QUICK_START.md](docs/QUICK_START.md) for Docker, HTTP server mode, n8n integration, and more installation options.
|
|
20
|
+
|
|
109
21
|
## Key Features
|
|
110
22
|
|
|
111
23
|
### Core Functionality
|
|
112
24
|
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
25
|
+
- Smart Device Control
|
|
26
|
+
- Lights: Brightness, color temperature, RGB color, transitions
|
|
27
|
+
- Climate: Temperature, HVAC modes, fan modes, humidity
|
|
28
|
+
- Covers: Position and tilt control
|
|
29
|
+
- Switches: On/off control
|
|
30
|
+
- Sensors & Contacts: State monitoring
|
|
31
|
+
- Media Players: Playback control, volume, source selection
|
|
32
|
+
- Fans: Speed, oscillation, direction
|
|
33
|
+
- Locks: Lock/unlock control
|
|
34
|
+
- Vacuums: Start, stop, return to base
|
|
35
|
+
- Cameras: Motion detection, snapshots
|
|
124
36
|
|
|
125
37
|
### Automation Management
|
|
126
38
|
|
|
@@ -140,7 +52,7 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
140
52
|
- Service call support
|
|
141
53
|
- Advanced entity search
|
|
142
54
|
- AI-powered sensor analysis with Ollama
|
|
143
|
-
- Multiple transport modes (stdio,
|
|
55
|
+
- Multiple transport modes (stdio, Streamable HTTP)
|
|
144
56
|
- HTTP server with health checks
|
|
145
57
|
- CORS support for browser-based clients
|
|
146
58
|
- Structured logging with pino (plain, JSON, GCP-JSON formats)
|
|
@@ -274,7 +186,6 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
274
186
|
| Variable | Default | Description |
|
|
275
187
|
|----------|---------|-------------|
|
|
276
188
|
| `MCP_HTTP_PORT` | `3000` | HTTP server port |
|
|
277
|
-
| `MCP_HTTP_TRANSPORT` | `stream` | Transport: `stream` or `sse` |
|
|
278
189
|
| `MCP_HTTP_BIND_ADDR` | `127.0.0.1` | Bind address |
|
|
279
190
|
| `MCP_HTTP_PATH` | `/mcp` | MCP endpoint path |
|
|
280
191
|
| `MCP_HTTP_ENABLE_HEALTHCHECK` | `true` | Enable health check endpoint |
|
|
@@ -297,6 +208,13 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
297
208
|
| `MCP_RATE_LIMIT_WINDOW_MS` | `60000` | Rate limit window (ms) |
|
|
298
209
|
| `MCP_RATE_LIMIT_MAX_REQUESTS` | `100` | Max requests per window |
|
|
299
210
|
|
|
211
|
+
### Optional - Authentication
|
|
212
|
+
|
|
213
|
+
| Variable | Default | Description |
|
|
214
|
+
|----------|---------|-------------|
|
|
215
|
+
| `MCP_AUTH_METHOD` | `none` | Auth method: `none` or `bearer` |
|
|
216
|
+
| `MCP_AUTH_TOKEN` | - | Bearer token(s), can be comma-separated for multiple clients |
|
|
217
|
+
|
|
300
218
|
### Optional - AI Provider
|
|
301
219
|
|
|
302
220
|
| Variable | Default | Description |
|
|
@@ -657,10 +575,6 @@ MIT
|
|
|
657
575
|
|
|
658
576
|
Coffee Run Hobby ([github.com/coffeerunhobby](https://github.com/coffeerunhobby))
|
|
659
577
|
|
|
660
|
-
## Version
|
|
661
|
-
|
|
662
|
-
0.7.0
|
|
663
|
-
|
|
664
578
|
## Links
|
|
665
579
|
|
|
666
580
|
- **GitHub**: [https://github.com/coffeerunhobby/mcp-ha-connect](https://github.com/coffeerunhobby/mcp-ha-connect)
|
|
@@ -669,6 +583,7 @@ Coffee Run Hobby ([github.com/coffeerunhobby](https://github.com/coffeerunhobby)
|
|
|
669
583
|
|
|
670
584
|
## Documentation
|
|
671
585
|
|
|
586
|
+
- [Quick Start Guide](docs/QUICK_START.md)
|
|
672
587
|
- [Changelog](docs/CHANGELOG.md)
|
|
673
588
|
- [Local Client Configuration](docs/LOCAL_CLIENT.md)
|
|
674
589
|
- [SSE Event API](docs/SSE_API.md)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autonomic Module
|
|
3
|
+
* Implements the autonomic nervous system architecture for home automation
|
|
4
|
+
* with tiered response system (reflex, supervised, informational)
|
|
5
|
+
*/
|
|
6
|
+
export { Priority, PriorityMask, matchesPriority, getPriorityName, getPriorityTier, bypassesQuietHours, requiresImmediateAction, requiresApproval, } from './priority.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autonomic Module
|
|
3
|
+
* Implements the autonomic nervous system architecture for home automation
|
|
4
|
+
* with tiered response system (reflex, supervised, informational)
|
|
5
|
+
*/
|
|
6
|
+
export { Priority, PriorityMask, matchesPriority, getPriorityName, getPriorityTier, bypassesQuietHours, requiresImmediateAction, requiresApproval, } from './priority.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autonomic/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autonomic Priority System
|
|
3
|
+
* Uses powers of 2 for bitwise operations - can combine with OR, check with AND
|
|
4
|
+
*
|
|
5
|
+
* Based on MOQT priority model adapted for home automation tiers:
|
|
6
|
+
* - REFLEX (Tier 0): Immediate autonomous response, no AI delay
|
|
7
|
+
* - SUPERVISED (Tier 1): Quick decision with timeout + default action
|
|
8
|
+
* - INFORMATIONAL (Tier 2): Passive awareness, respects quiet hours
|
|
9
|
+
* - LOG: Debug/metrics, lowest priority
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Priority levels as powers of 2 for bitwise operations
|
|
13
|
+
*/
|
|
14
|
+
export declare enum Priority {
|
|
15
|
+
/** Tier 0: Immediate reflex - smoke, gas, intrusion. No confirmation needed. */
|
|
16
|
+
REFLEX = 1,
|
|
17
|
+
/** Tier 1: Supervised action - requires approval within timeout window */
|
|
18
|
+
SUPERVISED = 32,
|
|
19
|
+
/** Tier 2: Informational alert - passive, respects quiet hours */
|
|
20
|
+
INFORMATIONAL = 64,
|
|
21
|
+
/** Logging/metrics - lowest priority */
|
|
22
|
+
LOG = 128
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Priority masks for filtering
|
|
26
|
+
*/
|
|
27
|
+
export declare const PriorityMask: {
|
|
28
|
+
/** All critical priorities (REFLEX only) */
|
|
29
|
+
readonly CRITICAL: Priority.REFLEX;
|
|
30
|
+
/** Action priorities (REFLEX + SUPERVISED) */
|
|
31
|
+
readonly ACTIONABLE: number;
|
|
32
|
+
/** User-facing priorities (everything except LOG) */
|
|
33
|
+
readonly USER_FACING: number;
|
|
34
|
+
/** All priorities */
|
|
35
|
+
readonly ALL: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Check if a priority matches a mask
|
|
39
|
+
*/
|
|
40
|
+
export declare function matchesPriority(priority: Priority, mask: number): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get human-readable priority name
|
|
43
|
+
*/
|
|
44
|
+
export declare function getPriorityName(priority: Priority): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get tier number from priority
|
|
47
|
+
*/
|
|
48
|
+
export declare function getPriorityTier(priority: Priority): 0 | 1 | 2 | 3;
|
|
49
|
+
/**
|
|
50
|
+
* Check if priority should bypass quiet hours
|
|
51
|
+
*/
|
|
52
|
+
export declare function bypassesQuietHours(priority: Priority): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Check if priority requires immediate action (no AI delay)
|
|
55
|
+
*/
|
|
56
|
+
export declare function requiresImmediateAction(priority: Priority): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Check if priority requires user approval
|
|
59
|
+
*/
|
|
60
|
+
export declare function requiresApproval(priority: Priority): boolean;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autonomic Priority System
|
|
3
|
+
* Uses powers of 2 for bitwise operations - can combine with OR, check with AND
|
|
4
|
+
*
|
|
5
|
+
* Based on MOQT priority model adapted for home automation tiers:
|
|
6
|
+
* - REFLEX (Tier 0): Immediate autonomous response, no AI delay
|
|
7
|
+
* - SUPERVISED (Tier 1): Quick decision with timeout + default action
|
|
8
|
+
* - INFORMATIONAL (Tier 2): Passive awareness, respects quiet hours
|
|
9
|
+
* - LOG: Debug/metrics, lowest priority
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Priority levels as powers of 2 for bitwise operations
|
|
13
|
+
*/
|
|
14
|
+
export var Priority;
|
|
15
|
+
(function (Priority) {
|
|
16
|
+
/** Tier 0: Immediate reflex - smoke, gas, intrusion. No confirmation needed. */
|
|
17
|
+
Priority[Priority["REFLEX"] = 1] = "REFLEX";
|
|
18
|
+
/** Tier 1: Supervised action - requires approval within timeout window */
|
|
19
|
+
Priority[Priority["SUPERVISED"] = 32] = "SUPERVISED";
|
|
20
|
+
/** Tier 2: Informational alert - passive, respects quiet hours */
|
|
21
|
+
Priority[Priority["INFORMATIONAL"] = 64] = "INFORMATIONAL";
|
|
22
|
+
/** Logging/metrics - lowest priority */
|
|
23
|
+
Priority[Priority["LOG"] = 128] = "LOG";
|
|
24
|
+
})(Priority || (Priority = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Priority masks for filtering
|
|
27
|
+
*/
|
|
28
|
+
export const PriorityMask = {
|
|
29
|
+
/** All critical priorities (REFLEX only) */
|
|
30
|
+
CRITICAL: Priority.REFLEX,
|
|
31
|
+
/** Action priorities (REFLEX + SUPERVISED) */
|
|
32
|
+
ACTIONABLE: Priority.REFLEX | Priority.SUPERVISED,
|
|
33
|
+
/** User-facing priorities (everything except LOG) */
|
|
34
|
+
USER_FACING: Priority.REFLEX | Priority.SUPERVISED | Priority.INFORMATIONAL,
|
|
35
|
+
/** All priorities */
|
|
36
|
+
ALL: Priority.REFLEX | Priority.SUPERVISED | Priority.INFORMATIONAL | Priority.LOG,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Check if a priority matches a mask
|
|
40
|
+
*/
|
|
41
|
+
export function matchesPriority(priority, mask) {
|
|
42
|
+
return (priority & mask) !== 0;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get human-readable priority name
|
|
46
|
+
*/
|
|
47
|
+
export function getPriorityName(priority) {
|
|
48
|
+
switch (priority) {
|
|
49
|
+
case Priority.REFLEX:
|
|
50
|
+
return 'reflex';
|
|
51
|
+
case Priority.SUPERVISED:
|
|
52
|
+
return 'supervised';
|
|
53
|
+
case Priority.INFORMATIONAL:
|
|
54
|
+
return 'informational';
|
|
55
|
+
case Priority.LOG:
|
|
56
|
+
return 'log';
|
|
57
|
+
default:
|
|
58
|
+
return 'unknown';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get tier number from priority
|
|
63
|
+
*/
|
|
64
|
+
export function getPriorityTier(priority) {
|
|
65
|
+
switch (priority) {
|
|
66
|
+
case Priority.REFLEX:
|
|
67
|
+
return 0;
|
|
68
|
+
case Priority.SUPERVISED:
|
|
69
|
+
return 1;
|
|
70
|
+
case Priority.INFORMATIONAL:
|
|
71
|
+
return 2;
|
|
72
|
+
case Priority.LOG:
|
|
73
|
+
return 3;
|
|
74
|
+
default:
|
|
75
|
+
return 3;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if priority should bypass quiet hours
|
|
80
|
+
*/
|
|
81
|
+
export function bypassesQuietHours(priority) {
|
|
82
|
+
// Only REFLEX bypasses quiet hours
|
|
83
|
+
return priority === Priority.REFLEX;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if priority requires immediate action (no AI delay)
|
|
87
|
+
*/
|
|
88
|
+
export function requiresImmediateAction(priority) {
|
|
89
|
+
return priority === Priority.REFLEX;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if priority requires user approval
|
|
93
|
+
*/
|
|
94
|
+
export function requiresApproval(priority) {
|
|
95
|
+
return priority === Priority.SUPERVISED;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=priority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.js","sourceRoot":"","sources":["../../src/autonomic/priority.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,QAYX;AAZD,WAAY,QAAQ;IAClB,gFAAgF;IAChF,2CAAU,CAAA;IAEV,0EAA0E;IAC1E,oDAAe,CAAA;IAEf,kEAAkE;IAClE,0DAAkB,CAAA;IAElB,wCAAwC;IACxC,uCAAS,CAAA;AACX,CAAC,EAZW,QAAQ,KAAR,QAAQ,QAYnB;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,4CAA4C;IAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM;IAEzB,8CAA8C;IAC9C,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU;IAEjD,qDAAqD;IACrD,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa;IAE3E,qBAAqB;IACrB,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG;CAC1E,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,IAAY;IAC9D,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ,CAAC,UAAU;YACtB,OAAO,YAAY,CAAC;QACtB,KAAK,QAAQ,CAAC,aAAa;YACzB,OAAO,eAAe,CAAC;QACzB,KAAK,QAAQ,CAAC,GAAG;YACf,OAAO,KAAK,CAAC;QACf;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC,UAAU;YACtB,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC,aAAa;YACzB,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC,GAAG;YACf,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACnD,mCAAmC;IACnC,OAAO,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,OAAO,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,OAAO,QAAQ,KAAK,QAAQ,CAAC,UAAU,CAAC;AAC1C,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ export interface EnvironmentConfig {
|
|
|
14
14
|
useHttp: boolean;
|
|
15
15
|
stateful: boolean;
|
|
16
16
|
httpPort?: number;
|
|
17
|
-
httpTransport: 'stream' | 'sse';
|
|
18
17
|
httpBindAddr?: string;
|
|
19
18
|
httpPath?: string;
|
|
20
19
|
httpEnableHealthcheck: boolean;
|
|
@@ -26,6 +25,8 @@ export interface EnvironmentConfig {
|
|
|
26
25
|
rateLimitEnabled: boolean;
|
|
27
26
|
rateLimitWindowMs: number;
|
|
28
27
|
rateLimitMaxRequests: number;
|
|
28
|
+
authMethod: 'none' | 'bearer';
|
|
29
|
+
authToken?: Set<string>;
|
|
29
30
|
}
|
|
30
31
|
export declare function loadConfig(env?: NodeJS.ProcessEnv): EnvironmentConfig;
|
|
31
32
|
export declare function validateConfig(config: EnvironmentConfig): void;
|
package/dist/config.js
CHANGED
|
@@ -43,7 +43,6 @@ const envSchema = z
|
|
|
43
43
|
stateful: createBooleanStringSchema(false),
|
|
44
44
|
// MCP Server HTTP Configuration
|
|
45
45
|
httpPort: numericStringSchema,
|
|
46
|
-
httpTransport: z.enum(['stream', 'sse']).optional().default('stream'),
|
|
47
46
|
httpBindAddr: z.string().optional(),
|
|
48
47
|
httpPath: z.string().optional(),
|
|
49
48
|
httpEnableHealthcheck: createBooleanStringSchema(true),
|
|
@@ -57,6 +56,9 @@ const envSchema = z
|
|
|
57
56
|
rateLimitEnabled: createBooleanStringSchema(true),
|
|
58
57
|
rateLimitWindowMs: numericStringSchema,
|
|
59
58
|
rateLimitMaxRequests: numericStringSchema,
|
|
59
|
+
// Authentication Configuration
|
|
60
|
+
authMethod: z.enum(['none', 'bearer']).optional().default('none'),
|
|
61
|
+
authToken: listStringSchema,
|
|
60
62
|
})
|
|
61
63
|
.refine((data) => {
|
|
62
64
|
// Validate httpBindAddr if provided
|
|
@@ -84,6 +86,16 @@ const envSchema = z
|
|
|
84
86
|
message: `MCP_HTTP_ALLOWED_ORIGINS contains invalid origin: ${invalidOrigin}`,
|
|
85
87
|
path: ['httpAllowedOrigins'],
|
|
86
88
|
};
|
|
89
|
+
})
|
|
90
|
+
.refine((data) => {
|
|
91
|
+
// If bearer auth is enabled, token must be provided
|
|
92
|
+
if (data.authMethod === 'bearer' && !data.authToken) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}, {
|
|
97
|
+
message: 'MCP_AUTH_TOKEN is required when MCP_AUTH_METHOD is "bearer"',
|
|
98
|
+
path: ['authToken'],
|
|
87
99
|
});
|
|
88
100
|
export function loadConfig(env = process.env) {
|
|
89
101
|
const parsed = envSchema.safeParse({
|
|
@@ -105,7 +117,6 @@ export function loadConfig(env = process.env) {
|
|
|
105
117
|
stateful: env.MCP_SERVER_STATEFUL,
|
|
106
118
|
// MCP Server HTTP Configuration
|
|
107
119
|
httpPort: env.MCP_HTTP_PORT,
|
|
108
|
-
httpTransport: env.MCP_HTTP_TRANSPORT,
|
|
109
120
|
httpBindAddr: env.MCP_HTTP_BIND_ADDR,
|
|
110
121
|
httpPath: env.MCP_HTTP_PATH,
|
|
111
122
|
httpEnableHealthcheck: env.MCP_HTTP_ENABLE_HEALTHCHECK,
|
|
@@ -119,14 +130,16 @@ export function loadConfig(env = process.env) {
|
|
|
119
130
|
rateLimitEnabled: env.MCP_RATE_LIMIT_ENABLED,
|
|
120
131
|
rateLimitWindowMs: env.MCP_RATE_LIMIT_WINDOW_MS,
|
|
121
132
|
rateLimitMaxRequests: env.MCP_RATE_LIMIT_MAX_REQUESTS,
|
|
133
|
+
// Authentication Configuration
|
|
134
|
+
authMethod: env.MCP_AUTH_METHOD,
|
|
135
|
+
authToken: env.MCP_AUTH_TOKEN,
|
|
122
136
|
});
|
|
123
137
|
if (!parsed.success) {
|
|
124
138
|
const messages = parsed.error.issues.map((issue) => issue.message);
|
|
125
139
|
throw new Error(`Invalid environment configuration:\n${messages.join('\n')}`);
|
|
126
140
|
}
|
|
127
|
-
//
|
|
128
|
-
const
|
|
129
|
-
const httpPath = parsed.data.httpPath ?? defaultPath;
|
|
141
|
+
// Default MCP endpoint path
|
|
142
|
+
const httpPath = parsed.data.httpPath ?? '/mcp';
|
|
130
143
|
// Set default bind address and allowed origins for security
|
|
131
144
|
const httpBindAddr = parsed.data.httpBindAddr ?? '127.0.0.1';
|
|
132
145
|
let httpAllowedOrigins = parsed.data.httpAllowedOrigins ?? ['127.0.0.1', 'localhost'];
|
|
@@ -154,7 +167,6 @@ export function loadConfig(env = process.env) {
|
|
|
154
167
|
stateful: parsed.data.stateful,
|
|
155
168
|
// MCP Server HTTP Configuration
|
|
156
169
|
httpPort: parsed.data.httpPort,
|
|
157
|
-
httpTransport: parsed.data.httpTransport,
|
|
158
170
|
httpBindAddr,
|
|
159
171
|
httpPath,
|
|
160
172
|
httpEnableHealthcheck: parsed.data.httpEnableHealthcheck,
|
|
@@ -168,6 +180,9 @@ export function loadConfig(env = process.env) {
|
|
|
168
180
|
rateLimitEnabled: parsed.data.rateLimitEnabled,
|
|
169
181
|
rateLimitWindowMs: parsed.data.rateLimitWindowMs ?? 60000,
|
|
170
182
|
rateLimitMaxRequests: parsed.data.rateLimitMaxRequests ?? 100,
|
|
183
|
+
// Authentication Configuration
|
|
184
|
+
authMethod: parsed.data.authMethod,
|
|
185
|
+
authToken: parsed.data.authToken ? new Set(parsed.data.authToken) : undefined,
|
|
171
186
|
};
|
|
172
187
|
}
|
|
173
188
|
// Legacy compatibility functions
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,yBAAyB,GAAG,CAChC,YAAqB,EAC0G,EAAE,CACjI,CAAC;KACE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9C,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAmC,EAAE,EAAE;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEP,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAyB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;KAC1F,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE1C,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAyB,EAAE,EAAE,CACvC,KAAK;IACH,CAAC,CAAC,KAAK;SACF,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC;IACpB,CAAC,CAAC,SAAS,CACd,CAAC;AAEJ,MAAM,SAAS,GAAG,CAAC;KAChB,MAAM,CAAC;IACN,sCAAsC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,WAAW,EAAE,yBAAyB,CAAC,IAAI,CAAC;IAC5C,SAAS,EAAE,mBAAmB;IAE9B,gEAAgE;IAChE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,mCAAmC;IACnC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5E,OAAO,EAAE,yBAAyB,CAAC,KAAK,CAAC;IACzC,QAAQ,EAAE,yBAAyB,CAAC,KAAK,CAAC;IAE1C,gCAAgC;IAChC,QAAQ,EAAE,mBAAmB;IAC7B,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/haClient/config.js
CHANGED
|
@@ -27,12 +27,22 @@ export class ConfigOperations {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Get Home Assistant version and configuration info
|
|
30
|
+
* Returns only safe, public information (filters out internal config details)
|
|
30
31
|
*/
|
|
31
32
|
async getVersion() {
|
|
32
33
|
logger.debug('Fetching Home Assistant version');
|
|
33
34
|
const config = await this.request.get('/config');
|
|
34
35
|
logger.info('Fetched version', { version: config.version });
|
|
35
|
-
|
|
36
|
+
// Return only safe, public information
|
|
37
|
+
// Excludes: components, allowlist_external_dirs, allowlist_external_urls,
|
|
38
|
+
// config_dir, whitelist_external_dirs, safe_mode, state, external_url, internal_url,
|
|
39
|
+
// currency, country, language, latitude, longitude, elevation
|
|
40
|
+
return {
|
|
41
|
+
version: config.version,
|
|
42
|
+
location_name: config.location_name,
|
|
43
|
+
time_zone: config.time_zone,
|
|
44
|
+
unit_system: config.unit_system,
|
|
45
|
+
};
|
|
36
46
|
}
|
|
37
47
|
}
|
|
38
48
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/haClient/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/haClient/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5D,uCAAuC;QACvC,0EAA0E;QAC1E,qFAAqF;QACrF,8DAA8D;QAC9D,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAiB;YACjC,aAAa,EAAE,MAAM,CAAC,aAAmC;YACzD,SAAS,EAAE,MAAM,CAAC,SAA+B;YACjD,WAAW,EAAE,MAAM,CAAC,WAAiD;SACtE,CAAC;IACJ,CAAC;CACF"}
|