@owine/unifi-protect-mcp 2.8.3 → 2.10.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/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # UniFi Protect MCP Server
2
2
 
3
- An MCP (Model Context Protocol) server that exposes UniFi Protect's Integration REST API as tools for Claude Code and other MCP clients. Aligned with UniFi Protect API **7.1.60** — 73 tools covering cameras, lights, sensors, chimes, viewers, sirens, fobs, relays, speakers, bridges, link stations, alarm hubs, arm profiles, live views, files, users, NVR status, and WebSocket subscriptions.
3
+ An MCP (Model Context Protocol) server that exposes UniFi Protect's Integration REST API as tools for Claude Code and other MCP clients. Aligned with UniFi Protect API **7.1.83** — 73 tools covering cameras, lights, sensors, chimes, viewers, sirens, fobs, relays, speakers, bridges, link stations, alarm hubs, arm profiles, live views, files, users, NVR status, and WebSocket subscriptions.
4
4
 
5
5
  ## Prerequisites
6
6
 
7
- - Node.js 20+
7
+ - Node.js 22.x (22.13 or newer) or 24.x — see `engines` in `package.json`
8
8
  - A UniFi Protect system with the Integration API enabled
9
9
  - An API key generated from your UniFi Protect console
10
10
 
@@ -27,10 +27,13 @@ If you prefer to build locally:
27
27
  ```bash
28
28
  git clone https://github.com/owine/unifi-protect-mcp.git
29
29
  cd unifi-protect-mcp
30
- npm install
31
- npm run build
30
+ corepack enable # provides pnpm at the version pinned in package.json
31
+ pnpm install
32
+ pnpm run build
32
33
  ```
33
34
 
35
+ This project uses pnpm — `npm install` ignores `pnpm-lock.yaml` and may resolve different dependency versions than CI.
36
+
34
37
  Then add to Claude Code:
35
38
 
36
39
  ```bash
@@ -224,14 +227,21 @@ This server provides layered safety controls for responsible operation:
224
227
 
225
228
  ## Development
226
229
 
230
+ The Node version used for development is pinned in `.nvmrc`. With [fnm](https://github.com/Schniz/fnm) installed, `fnm use` reads it automatically on `cd`.
231
+
227
232
  ```bash
228
- npm run build # Compile TypeScript
229
- npm start # Run the server
230
- npm run typecheck # Type-check without emitting
231
- npm run lint # ESLint
232
- npm test # Run all tests (vitest)
233
+ pnpm run build # Compile TypeScript
234
+ pnpm start # Run the server
235
+ pnpm run typecheck # Type-check without emitting
236
+ pnpm run lint # ESLint
237
+ pnpm run lint:fix # ESLint with auto-fix
238
+ pnpm test # Run all tests (vitest)
239
+ pnpm run test:watch # Run tests in watch mode
240
+ pnpm run test:coverage # Run tests with coverage
233
241
  ```
234
242
 
243
+ Git hooks are managed by [lefthook](https://github.com/evilmartians/lefthook) — `pnpm exec lefthook install` enables them. Pre-commit runs ESLint on staged files and a full typecheck, so fnm and pnpm both need to be on your PATH.
244
+
235
245
  ### Commit conventions
236
246
 
237
247
  This project uses [conventional commits](https://www.conventionalcommits.org/) and [release-please](https://github.com/googleapis/release-please) for automated releases:
@@ -1,4 +1,9 @@
1
1
  export declare const lightSchema: import("zod").ZodObject<{
2
+ id: import("zod").ZodOptional<import("zod").ZodString>;
3
+ modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
4
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
5
+ mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
6
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
2
7
  lightModeSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
3
8
  lightDeviceSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
4
9
  isDark: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -7,13 +12,13 @@ export declare const lightSchema: import("zod").ZodObject<{
7
12
  lastMotion: import("zod").ZodOptional<import("zod").ZodUnknown>;
8
13
  isPirMotionDetected: import("zod").ZodOptional<import("zod").ZodUnknown>;
9
14
  camera: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
15
+ }, import("zod/v4/core").$loose>;
16
+ export declare const sensorSchema: import("zod").ZodObject<{
10
17
  id: import("zod").ZodOptional<import("zod").ZodString>;
11
18
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
12
19
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
13
20
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
14
21
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
15
- }, import("zod/v4/core").$loose>;
16
- export declare const sensorSchema: import("zod").ZodObject<{
17
22
  mountType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
18
23
  batteryStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
19
24
  stats: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -36,110 +41,110 @@ export declare const sensorSchema: import("zod").ZodObject<{
36
41
  leakSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
37
42
  tamperingDetectedAt: import("zod").ZodOptional<import("zod").ZodUnknown>;
38
43
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
44
+ }, import("zod/v4/core").$loose>;
45
+ export declare const chimeSchema: import("zod").ZodObject<{
39
46
  id: import("zod").ZodOptional<import("zod").ZodString>;
40
47
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
41
48
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
42
49
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
43
50
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
44
- }, import("zod/v4/core").$loose>;
45
- export declare const chimeSchema: import("zod").ZodObject<{
46
51
  cameraIds: import("zod").ZodOptional<import("zod").ZodUnknown>;
47
52
  ringSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
53
+ }, import("zod/v4/core").$loose>;
54
+ export declare const viewerSchema: import("zod").ZodObject<{
48
55
  id: import("zod").ZodOptional<import("zod").ZodString>;
49
56
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
50
57
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
51
58
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
52
59
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
53
- }, import("zod/v4/core").$loose>;
54
- export declare const viewerSchema: import("zod").ZodObject<{
55
60
  liveview: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
56
61
  streamLimit: import("zod").ZodOptional<import("zod").ZodUnknown>;
62
+ }, import("zod/v4/core").$loose>;
63
+ export declare const sirenSchema: import("zod").ZodObject<{
57
64
  id: import("zod").ZodOptional<import("zod").ZodString>;
58
65
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
59
66
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
60
67
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
61
68
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
62
- }, import("zod/v4/core").$loose>;
63
- export declare const sirenSchema: import("zod").ZodObject<{
64
69
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
65
70
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
66
71
  sirenStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
67
72
  connectionType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
68
73
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
74
+ }, import("zod/v4/core").$loose>;
75
+ export declare const fobSchema: import("zod").ZodObject<{
69
76
  id: import("zod").ZodOptional<import("zod").ZodString>;
70
77
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
71
78
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
72
79
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
73
80
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
74
- }, import("zod/v4/core").$loose>;
75
- export declare const fobSchema: import("zod").ZodObject<{
76
81
  awayState: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
77
82
  buttonLabels: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
78
83
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
79
84
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
85
+ }, import("zod/v4/core").$loose>;
86
+ export declare const relaySchema: import("zod").ZodObject<{
80
87
  id: import("zod").ZodOptional<import("zod").ZodString>;
81
88
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
82
89
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
83
90
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
84
91
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
85
- }, import("zod/v4/core").$loose>;
86
- export declare const relaySchema: import("zod").ZodObject<{
87
92
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
88
93
  outputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
89
94
  inputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
90
95
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
96
+ }, import("zod/v4/core").$loose>;
97
+ export declare const speakerSchema: import("zod").ZodObject<{
91
98
  id: import("zod").ZodOptional<import("zod").ZodString>;
92
99
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
93
100
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
94
101
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
95
102
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
96
- }, import("zod/v4/core").$loose>;
97
- export declare const speakerSchema: import("zod").ZodObject<{
98
103
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
99
104
  micVolume: import("zod").ZodOptional<import("zod").ZodUnknown>;
100
105
  isMicEnabled: import("zod").ZodOptional<import("zod").ZodUnknown>;
101
106
  speakerState: import("zod").ZodOptional<import("zod").ZodUnknown>;
102
107
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
108
+ }, import("zod/v4/core").$loose>;
109
+ export declare const bridgeSchema: import("zod").ZodObject<{
103
110
  id: import("zod").ZodOptional<import("zod").ZodString>;
104
111
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
105
112
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
106
113
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
107
114
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
108
- }, import("zod/v4/core").$loose>;
109
- export declare const bridgeSchema: import("zod").ZodObject<{
110
115
  platform: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
111
116
  clients: import("zod").ZodOptional<import("zod").ZodUnknown>;
112
117
  maxClients: import("zod").ZodOptional<import("zod").ZodUnknown>;
118
+ }, import("zod/v4/core").$loose>;
119
+ export declare const linkStationSchema: import("zod").ZodObject<{
113
120
  id: import("zod").ZodOptional<import("zod").ZodString>;
114
121
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
115
122
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
116
123
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
117
124
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
118
- }, import("zod/v4/core").$loose>;
119
- export declare const linkStationSchema: import("zod").ZodObject<{
120
125
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
121
126
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
122
127
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
123
128
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
129
+ }, import("zod/v4/core").$loose>;
130
+ export declare const alarmHubSchema: import("zod").ZodObject<{
124
131
  id: import("zod").ZodOptional<import("zod").ZodString>;
125
132
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
126
133
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
127
134
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
128
135
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
129
- }, import("zod/v4/core").$loose>;
130
- export declare const alarmHubSchema: import("zod").ZodObject<{
131
136
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
132
137
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
133
138
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
134
139
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
135
- id: import("zod").ZodOptional<import("zod").ZodString>;
136
- modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
137
- name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
138
- mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
139
- state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
140
140
  }, import("zod/v4/core").$loose>;
141
141
  export declare const DEVICE_SCHEMAS: {
142
142
  readonly light: import("zod").ZodObject<{
143
+ id: import("zod").ZodOptional<import("zod").ZodString>;
144
+ modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
145
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
146
+ mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
147
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
143
148
  lightModeSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
144
149
  lightDeviceSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
145
150
  isDark: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -148,13 +153,13 @@ export declare const DEVICE_SCHEMAS: {
148
153
  lastMotion: import("zod").ZodOptional<import("zod").ZodUnknown>;
149
154
  isPirMotionDetected: import("zod").ZodOptional<import("zod").ZodUnknown>;
150
155
  camera: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
156
+ }, import("zod/v4/core").$loose>;
157
+ readonly sensor: import("zod").ZodObject<{
151
158
  id: import("zod").ZodOptional<import("zod").ZodString>;
152
159
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
153
160
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
154
161
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
155
162
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
156
- }, import("zod/v4/core").$loose>;
157
- readonly sensor: import("zod").ZodObject<{
158
163
  mountType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
159
164
  batteryStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
160
165
  stats: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -177,110 +182,110 @@ export declare const DEVICE_SCHEMAS: {
177
182
  leakSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
178
183
  tamperingDetectedAt: import("zod").ZodOptional<import("zod").ZodUnknown>;
179
184
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
185
+ }, import("zod/v4/core").$loose>;
186
+ readonly chime: import("zod").ZodObject<{
180
187
  id: import("zod").ZodOptional<import("zod").ZodString>;
181
188
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
182
189
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
183
190
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
184
191
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
185
- }, import("zod/v4/core").$loose>;
186
- readonly chime: import("zod").ZodObject<{
187
192
  cameraIds: import("zod").ZodOptional<import("zod").ZodUnknown>;
188
193
  ringSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
194
+ }, import("zod/v4/core").$loose>;
195
+ readonly viewer: import("zod").ZodObject<{
189
196
  id: import("zod").ZodOptional<import("zod").ZodString>;
190
197
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
191
198
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
192
199
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
193
200
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
194
- }, import("zod/v4/core").$loose>;
195
- readonly viewer: import("zod").ZodObject<{
196
201
  liveview: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
197
202
  streamLimit: import("zod").ZodOptional<import("zod").ZodUnknown>;
203
+ }, import("zod/v4/core").$loose>;
204
+ readonly siren: import("zod").ZodObject<{
198
205
  id: import("zod").ZodOptional<import("zod").ZodString>;
199
206
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
200
207
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
201
208
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
202
209
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
203
- }, import("zod/v4/core").$loose>;
204
- readonly siren: import("zod").ZodObject<{
205
210
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
206
211
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
207
212
  sirenStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
208
213
  connectionType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
209
214
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
215
+ }, import("zod/v4/core").$loose>;
216
+ readonly fob: import("zod").ZodObject<{
210
217
  id: import("zod").ZodOptional<import("zod").ZodString>;
211
218
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
212
219
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
213
220
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
214
221
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
215
- }, import("zod/v4/core").$loose>;
216
- readonly fob: import("zod").ZodObject<{
217
222
  awayState: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
218
223
  buttonLabels: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
219
224
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
220
225
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
226
+ }, import("zod/v4/core").$loose>;
227
+ readonly relay: import("zod").ZodObject<{
221
228
  id: import("zod").ZodOptional<import("zod").ZodString>;
222
229
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
223
230
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
224
231
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
225
232
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
226
- }, import("zod/v4/core").$loose>;
227
- readonly relay: import("zod").ZodObject<{
228
233
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
229
234
  outputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
230
235
  inputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
231
236
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
237
+ }, import("zod/v4/core").$loose>;
238
+ readonly speaker: import("zod").ZodObject<{
232
239
  id: import("zod").ZodOptional<import("zod").ZodString>;
233
240
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
234
241
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
235
242
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
236
243
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
237
- }, import("zod/v4/core").$loose>;
238
- readonly speaker: import("zod").ZodObject<{
239
244
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
240
245
  micVolume: import("zod").ZodOptional<import("zod").ZodUnknown>;
241
246
  isMicEnabled: import("zod").ZodOptional<import("zod").ZodUnknown>;
242
247
  speakerState: import("zod").ZodOptional<import("zod").ZodUnknown>;
243
248
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
249
+ }, import("zod/v4/core").$loose>;
250
+ readonly bridge: import("zod").ZodObject<{
244
251
  id: import("zod").ZodOptional<import("zod").ZodString>;
245
252
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
246
253
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
247
254
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
248
255
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
249
- }, import("zod/v4/core").$loose>;
250
- readonly bridge: import("zod").ZodObject<{
251
256
  platform: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
252
257
  clients: import("zod").ZodOptional<import("zod").ZodUnknown>;
253
258
  maxClients: import("zod").ZodOptional<import("zod").ZodUnknown>;
259
+ }, import("zod/v4/core").$loose>;
260
+ readonly link_station: import("zod").ZodObject<{
254
261
  id: import("zod").ZodOptional<import("zod").ZodString>;
255
262
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
256
263
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
257
264
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
258
265
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
259
- }, import("zod/v4/core").$loose>;
260
- readonly link_station: import("zod").ZodObject<{
261
266
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
262
267
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
263
268
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
264
269
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
270
+ }, import("zod/v4/core").$loose>;
271
+ readonly alarm_hub: import("zod").ZodObject<{
265
272
  id: import("zod").ZodOptional<import("zod").ZodString>;
266
273
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
267
274
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
268
275
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
269
276
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
270
- }, import("zod/v4/core").$loose>;
271
- readonly alarm_hub: import("zod").ZodObject<{
272
277
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
273
278
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
274
279
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
275
280
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
276
- id: import("zod").ZodOptional<import("zod").ZodString>;
277
- modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
278
- name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
279
- mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
280
- state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
281
281
  }, import("zod/v4/core").$loose>;
282
282
  };
283
283
  export declare function itemOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
284
+ id: import("zod").ZodOptional<import("zod").ZodString>;
285
+ modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
286
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
287
+ mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
288
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
284
289
  lightModeSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
285
290
  lightDeviceSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
286
291
  isDark: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -289,12 +294,12 @@ export declare function itemOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
289
294
  lastMotion: import("zod").ZodOptional<import("zod").ZodUnknown>;
290
295
  isPirMotionDetected: import("zod").ZodOptional<import("zod").ZodUnknown>;
291
296
  camera: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
297
+ } | {
292
298
  id: import("zod").ZodOptional<import("zod").ZodString>;
293
299
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
294
300
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
295
301
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
296
302
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
297
- } | {
298
303
  mountType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
299
304
  batteryStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
300
305
  stats: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -317,91 +322,91 @@ export declare function itemOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
317
322
  leakSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
318
323
  tamperingDetectedAt: import("zod").ZodOptional<import("zod").ZodUnknown>;
319
324
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
325
+ } | {
320
326
  id: import("zod").ZodOptional<import("zod").ZodString>;
321
327
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
322
328
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
323
329
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
324
330
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
325
- } | {
326
331
  cameraIds: import("zod").ZodOptional<import("zod").ZodUnknown>;
327
332
  ringSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
333
+ } | {
328
334
  id: import("zod").ZodOptional<import("zod").ZodString>;
329
335
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
330
336
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
331
337
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
332
338
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
333
- } | {
334
339
  liveview: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
335
340
  streamLimit: import("zod").ZodOptional<import("zod").ZodUnknown>;
341
+ } | {
336
342
  id: import("zod").ZodOptional<import("zod").ZodString>;
337
343
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
338
344
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
339
345
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
340
346
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
341
- } | {
342
347
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
343
348
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
344
349
  sirenStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
345
350
  connectionType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
346
351
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
352
+ } | {
347
353
  id: import("zod").ZodOptional<import("zod").ZodString>;
348
354
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
349
355
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
350
356
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
351
357
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
352
- } | {
353
358
  awayState: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
354
359
  buttonLabels: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
355
360
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
356
361
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
362
+ } | {
357
363
  id: import("zod").ZodOptional<import("zod").ZodString>;
358
364
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
359
365
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
360
366
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
361
367
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
362
- } | {
363
368
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
364
369
  outputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
365
370
  inputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
366
371
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
372
+ } | {
367
373
  id: import("zod").ZodOptional<import("zod").ZodString>;
368
374
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
369
375
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
370
376
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
371
377
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
372
- } | {
373
378
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
374
379
  micVolume: import("zod").ZodOptional<import("zod").ZodUnknown>;
375
380
  isMicEnabled: import("zod").ZodOptional<import("zod").ZodUnknown>;
376
381
  speakerState: import("zod").ZodOptional<import("zod").ZodUnknown>;
377
382
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
383
+ } | {
378
384
  id: import("zod").ZodOptional<import("zod").ZodString>;
379
385
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
380
386
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
381
387
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
382
388
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
383
- } | {
384
389
  platform: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
385
390
  clients: import("zod").ZodOptional<import("zod").ZodUnknown>;
386
391
  maxClients: import("zod").ZodOptional<import("zod").ZodUnknown>;
392
+ } | {
387
393
  id: import("zod").ZodOptional<import("zod").ZodString>;
388
394
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
389
395
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
390
396
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
391
397
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
392
- } | {
393
398
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
394
399
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
395
400
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
396
401
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
397
- id: import("zod").ZodOptional<import("zod").ZodString>;
398
- modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
399
- name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
400
- mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
401
- state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
402
402
  };
403
403
  export declare function listOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
404
404
  result: import("zod").ZodArray<import("zod").ZodObject<{
405
+ id: import("zod").ZodOptional<import("zod").ZodString>;
406
+ modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
407
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
408
+ mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
409
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
405
410
  lightModeSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
406
411
  lightDeviceSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
407
412
  isDark: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -410,12 +415,12 @@ export declare function listOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
410
415
  lastMotion: import("zod").ZodOptional<import("zod").ZodUnknown>;
411
416
  isPirMotionDetected: import("zod").ZodOptional<import("zod").ZodUnknown>;
412
417
  camera: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
418
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
413
419
  id: import("zod").ZodOptional<import("zod").ZodString>;
414
420
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
415
421
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
416
422
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
417
423
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
418
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
419
424
  mountType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
420
425
  batteryStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
421
426
  stats: import("zod").ZodOptional<import("zod").ZodUnknown>;
@@ -438,87 +443,82 @@ export declare function listOutputShape(key: keyof typeof DEVICE_SCHEMAS): {
438
443
  leakSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
439
444
  tamperingDetectedAt: import("zod").ZodOptional<import("zod").ZodUnknown>;
440
445
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
446
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
441
447
  id: import("zod").ZodOptional<import("zod").ZodString>;
442
448
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
443
449
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
444
450
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
445
451
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
446
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
447
452
  cameraIds: import("zod").ZodOptional<import("zod").ZodUnknown>;
448
453
  ringSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
454
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
449
455
  id: import("zod").ZodOptional<import("zod").ZodString>;
450
456
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
451
457
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
452
458
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
453
459
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
454
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
455
460
  liveview: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
456
461
  streamLimit: import("zod").ZodOptional<import("zod").ZodUnknown>;
462
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
457
463
  id: import("zod").ZodOptional<import("zod").ZodString>;
458
464
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
459
465
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
460
466
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
461
467
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
462
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
463
468
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
464
469
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
465
470
  sirenStatus: import("zod").ZodOptional<import("zod").ZodUnknown>;
466
471
  connectionType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
467
472
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
473
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
468
474
  id: import("zod").ZodOptional<import("zod").ZodString>;
469
475
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
470
476
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
471
477
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
472
478
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
473
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
474
479
  awayState: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
475
480
  buttonLabels: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
476
481
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
477
482
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
483
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
478
484
  id: import("zod").ZodOptional<import("zod").ZodString>;
479
485
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
480
486
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
481
487
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
482
488
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
483
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
484
489
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
485
490
  outputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
486
491
  inputs: import("zod").ZodOptional<import("zod").ZodUnknown>;
487
492
  wirelessConnectionState: import("zod").ZodOptional<import("zod").ZodUnknown>;
493
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
488
494
  id: import("zod").ZodOptional<import("zod").ZodString>;
489
495
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
490
496
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
491
497
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
492
498
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
493
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
494
499
  volume: import("zod").ZodOptional<import("zod").ZodUnknown>;
495
500
  micVolume: import("zod").ZodOptional<import("zod").ZodUnknown>;
496
501
  isMicEnabled: import("zod").ZodOptional<import("zod").ZodUnknown>;
497
502
  speakerState: import("zod").ZodOptional<import("zod").ZodUnknown>;
498
503
  featureFlags: import("zod").ZodOptional<import("zod").ZodUnknown>;
504
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
499
505
  id: import("zod").ZodOptional<import("zod").ZodString>;
500
506
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
501
507
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
502
508
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
503
509
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
504
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
505
510
  platform: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
506
511
  clients: import("zod").ZodOptional<import("zod").ZodUnknown>;
507
512
  maxClients: import("zod").ZodOptional<import("zod").ZodUnknown>;
513
+ }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
508
514
  id: import("zod").ZodOptional<import("zod").ZodString>;
509
515
  modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
510
516
  name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
511
517
  mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
512
518
  state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
513
- }, import("zod/v4/core").$loose> | import("zod").ZodObject<{
514
519
  isAlarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
515
520
  ledSettings: import("zod").ZodOptional<import("zod").ZodUnknown>;
516
521
  lastEvent: import("zod").ZodOptional<import("zod").ZodUnknown>;
517
522
  alarmHub: import("zod").ZodOptional<import("zod").ZodUnknown>;
518
- id: import("zod").ZodOptional<import("zod").ZodString>;
519
- modelKey: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
520
- name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
521
- mac: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
522
- state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
523
523
  }, import("zod/v4/core").$loose>>;
524
524
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owine/unifi-protect-mcp",
3
- "version": "2.8.3",
3
+ "version": "2.10.0",
4
4
  "description": "MCP server for UniFi Protect Integration API",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  "engines": {
23
23
  "node": "^22.13.0 || ^24.0.0"
24
24
  },
25
- "packageManager": "pnpm@11.11.0",
25
+ "packageManager": "pnpm@11.17.0",
26
26
  "repository": {
27
27
  "type": "git",
28
28
  "url": "https://github.com/owine/unifi-protect-mcp.git"
@@ -38,18 +38,19 @@
38
38
  "license": "MIT",
39
39
  "dependencies": {
40
40
  "@modelcontextprotocol/sdk": "1.29.0",
41
- "ws": "8.21.0",
41
+ "ws": "8.21.1",
42
42
  "zod": "4.4.3"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@eslint/js": "10.0.1",
46
46
  "@types/node": "24.13.3",
47
47
  "@types/ws": "8.18.1",
48
+ "@typescript/native": "npm:typescript@7.0.2",
48
49
  "@vitest/coverage-v8": "4.1.10",
49
- "eslint": "10.7.0",
50
+ "eslint": "10.8.0",
50
51
  "lefthook": "2.1.10",
51
- "typescript": "6.0.3",
52
- "typescript-eslint": "8.63.0",
52
+ "typescript": "npm:@typescript/typescript6@6.0.2",
53
+ "typescript-eslint": "8.65.0",
53
54
  "vitest": "4.1.10"
54
55
  }
55
56
  }