@coffeerunhobby/mcp-ha-connect 0.5.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/.dockerignore +8 -0
- package/.env.example +149 -0
- package/.gitattributes +30 -0
- package/Dockerfile +33 -0
- package/LICENSE +21 -0
- package/README.md +394 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +183 -0
- package/dist/config.js.map +1 -0
- package/dist/haClient/automations.d.ts +67 -0
- package/dist/haClient/automations.d.ts.map +1 -0
- package/dist/haClient/automations.js +181 -0
- package/dist/haClient/automations.js.map +1 -0
- package/dist/haClient/config.d.ts +28 -0
- package/dist/haClient/config.d.ts.map +1 -0
- package/dist/haClient/config.js +38 -0
- package/dist/haClient/config.js.map +1 -0
- package/dist/haClient/devices.d.ts +219 -0
- package/dist/haClient/devices.d.ts.map +1 -0
- package/dist/haClient/devices.js +506 -0
- package/dist/haClient/devices.js.map +1 -0
- package/dist/haClient/entities.d.ts +35 -0
- package/dist/haClient/entities.d.ts.map +1 -0
- package/dist/haClient/entities.js +97 -0
- package/dist/haClient/entities.js.map +1 -0
- package/dist/haClient/events.d.ts +138 -0
- package/dist/haClient/events.d.ts.map +1 -0
- package/dist/haClient/events.js +344 -0
- package/dist/haClient/events.js.map +1 -0
- package/dist/haClient/history.d.ts +26 -0
- package/dist/haClient/history.d.ts.map +1 -0
- package/dist/haClient/history.js +54 -0
- package/dist/haClient/history.js.map +1 -0
- package/dist/haClient/index.d.ts +153 -0
- package/dist/haClient/index.d.ts.map +1 -0
- package/dist/haClient/index.js +223 -0
- package/dist/haClient/index.js.map +1 -0
- package/dist/haClient/request.d.ts +34 -0
- package/dist/haClient/request.d.ts.map +1 -0
- package/dist/haClient/request.js +93 -0
- package/dist/haClient/request.js.map +1 -0
- package/dist/haClient/services.d.ts +22 -0
- package/dist/haClient/services.d.ts.map +1 -0
- package/dist/haClient/services.js +39 -0
- package/dist/haClient/services.js.map +1 -0
- package/dist/haClient/states.d.ts +26 -0
- package/dist/haClient/states.d.ts.map +1 -0
- package/dist/haClient/states.js +53 -0
- package/dist/haClient/states.js.map +1 -0
- package/dist/haClient/updates.d.ts +22 -0
- package/dist/haClient/updates.d.ts.map +1 -0
- package/dist/haClient/updates.js +48 -0
- package/dist/haClient/updates.js.map +1 -0
- package/dist/haClient.d.ts +97 -0
- package/dist/haClient.d.ts.map +1 -0
- package/dist/haClient.js +344 -0
- package/dist/haClient.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/localAI/index.d.ts +37 -0
- package/dist/localAI/index.d.ts.map +1 -0
- package/dist/localAI/index.js +73 -0
- package/dist/localAI/index.js.map +1 -0
- package/dist/localAI/prompts.d.ts +20 -0
- package/dist/localAI/prompts.d.ts.map +1 -0
- package/dist/localAI/prompts.js +48 -0
- package/dist/localAI/prompts.js.map +1 -0
- package/dist/localAI/providers/base.d.ts +51 -0
- package/dist/localAI/providers/base.d.ts.map +1 -0
- package/dist/localAI/providers/base.js +80 -0
- package/dist/localAI/providers/base.js.map +1 -0
- package/dist/localAI/providers/ollama.d.ts +22 -0
- package/dist/localAI/providers/ollama.d.ts.map +1 -0
- package/dist/localAI/providers/ollama.js +63 -0
- package/dist/localAI/providers/ollama.js.map +1 -0
- package/dist/localAI/providers/openai.d.ts +23 -0
- package/dist/localAI/providers/openai.d.ts.map +1 -0
- package/dist/localAI/providers/openai.js +63 -0
- package/dist/localAI/providers/openai.js.map +1 -0
- package/dist/localAI/types.d.ts +61 -0
- package/dist/localAI/types.d.ts.map +1 -0
- package/dist/localAI/types.js +6 -0
- package/dist/localAI/types.js.map +1 -0
- package/dist/ollamaClient.d.ts +37 -0
- package/dist/ollamaClient.d.ts.map +1 -0
- package/dist/ollamaClient.js +110 -0
- package/dist/ollamaClient.js.map +1 -0
- package/dist/resources/index.d.ts +11 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +238 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server/common.d.ts +9 -0
- package/dist/server/common.d.ts.map +1 -0
- package/dist/server/common.js +27 -0
- package/dist/server/common.js.map +1 -0
- package/dist/server/eventSubscription.d.ts +53 -0
- package/dist/server/eventSubscription.d.ts.map +1 -0
- package/dist/server/eventSubscription.js +257 -0
- package/dist/server/eventSubscription.js.map +1 -0
- package/dist/server/http.d.ts +12 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +491 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/rateLimiter.d.ts +70 -0
- package/dist/server/rateLimiter.d.ts.map +1 -0
- package/dist/server/rateLimiter.js +156 -0
- package/dist/server/rateLimiter.js.map +1 -0
- package/dist/server/sse.d.ts +32 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +76 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/server/stdio.d.ts +8 -0
- package/dist/server/stdio.d.ts.map +1 -0
- package/dist/server/stdio.js +16 -0
- package/dist/server/stdio.js.map +1 -0
- package/dist/server/stream.d.ts +26 -0
- package/dist/server/stream.d.ts.map +1 -0
- package/dist/server/stream.js +81 -0
- package/dist/server/stream.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +30 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/callService.d.ts +8 -0
- package/dist/tools/callService.d.ts.map +1 -0
- package/dist/tools/callService.js +100 -0
- package/dist/tools/callService.js.map +1 -0
- package/dist/tools/getClient.d.ts +8 -0
- package/dist/tools/getClient.d.ts.map +1 -0
- package/dist/tools/getClient.js +94 -0
- package/dist/tools/getClient.js.map +1 -0
- package/dist/tools/getDevice.d.ts +8 -0
- package/dist/tools/getDevice.d.ts.map +1 -0
- package/dist/tools/getDevice.js +94 -0
- package/dist/tools/getDevice.js.map +1 -0
- package/dist/tools/getEntitiesByDomain.d.ts +8 -0
- package/dist/tools/getEntitiesByDomain.d.ts.map +1 -0
- package/dist/tools/getEntitiesByDomain.js +80 -0
- package/dist/tools/getEntitiesByDomain.js.map +1 -0
- package/dist/tools/getState.d.ts +8 -0
- package/dist/tools/getState.d.ts.map +1 -0
- package/dist/tools/getState.js +90 -0
- package/dist/tools/getState.js.map +1 -0
- package/dist/tools/getStates.d.ts +8 -0
- package/dist/tools/getStates.d.ts.map +1 -0
- package/dist/tools/getStates.js +70 -0
- package/dist/tools/getStates.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/listClients.d.ts +8 -0
- package/dist/tools/listClients.d.ts.map +1 -0
- package/dist/tools/listClients.js +73 -0
- package/dist/tools/listClients.js.map +1 -0
- package/dist/tools/listDevices.d.ts +8 -0
- package/dist/tools/listDevices.d.ts.map +1 -0
- package/dist/tools/listDevices.js +73 -0
- package/dist/tools/listDevices.js.map +1 -0
- package/dist/tools/listSites.d.ts +8 -0
- package/dist/tools/listSites.d.ts.map +1 -0
- package/dist/tools/listSites.js +67 -0
- package/dist/tools/listSites.js.map +1 -0
- package/dist/tools/registry.d.ts +9 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +1382 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/searchDevices.d.ts +8 -0
- package/dist/tools/searchDevices.d.ts.map +1 -0
- package/dist/tools/searchDevices.js +84 -0
- package/dist/tools/searchDevices.js.map +1 -0
- package/dist/tools/searchEntities.d.ts +8 -0
- package/dist/tools/searchEntities.d.ts.map +1 -0
- package/dist/tools/searchEntities.js +80 -0
- package/dist/tools/searchEntities.js.map +1 -0
- package/dist/types/entity.d.ts +98 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +2 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/errors.d.ts +16 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +32 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/haConfig.d.ts +8 -0
- package/dist/types/haConfig.d.ts.map +1 -0
- package/dist/types/haConfig.js +2 -0
- package/dist/types/haConfig.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/request.d.ts +7 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +2 -0
- package/dist/types/request.js.map +1 -0
- package/dist/types/serviceCall.d.ts +18 -0
- package/dist/types/serviceCall.d.ts.map +1 -0
- package/dist/types/serviceCall.js +2 -0
- package/dist/types/serviceCall.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config-validations.d.ts +12 -0
- package/dist/utils/config-validations.d.ts.map +1 -0
- package/dist/utils/config-validations.js +43 -0
- package/dist/utils/config-validations.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +94 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wrapper.d.ts +8 -0
- package/dist/wrapper.d.ts.map +1 -0
- package/dist/wrapper.js +301 -0
- package/dist/wrapper.js.map +1 -0
- package/docker-compose.yml +17 -0
- package/docs/CHANGELOG.md +86 -0
- package/docs/LOCAL_CLIENT.md +268 -0
- package/docs/SSE_API.md +341 -0
- package/eslint.config.js +33 -0
- package/n8n/ai-agent-safety-monitor.json +355 -0
- package/openapi.json +166 -0
- package/package.json +51 -0
- package/src/config.ts +260 -0
- package/src/haClient/automations.ts +217 -0
- package/src/haClient/config.ts +41 -0
- package/src/haClient/devices.ts +653 -0
- package/src/haClient/entities.ts +128 -0
- package/src/haClient/events.ts +456 -0
- package/src/haClient/history.ts +68 -0
- package/src/haClient/index.ts +287 -0
- package/src/haClient/request.ts +127 -0
- package/src/haClient/services.ts +45 -0
- package/src/haClient/states.ts +60 -0
- package/src/haClient/updates.ts +58 -0
- package/src/index.ts +99 -0
- package/src/localAI/index.ts +88 -0
- package/src/localAI/prompts.ts +50 -0
- package/src/localAI/providers/base.ts +120 -0
- package/src/localAI/providers/ollama.ts +78 -0
- package/src/localAI/providers/openai.ts +86 -0
- package/src/localAI/types.ts +67 -0
- package/src/resources/index.ts +266 -0
- package/src/server/common.ts +38 -0
- package/src/server/eventSubscription.ts +318 -0
- package/src/server/http.ts +546 -0
- package/src/server/rateLimiter.ts +195 -0
- package/src/server/sse.ts +120 -0
- package/src/server/stdio.ts +22 -0
- package/src/server/stream.ts +113 -0
- package/src/tools/callService.ts +114 -0
- package/src/tools/getEntitiesByDomain.ts +92 -0
- package/src/tools/getState.ts +103 -0
- package/src/tools/getStates.ts +80 -0
- package/src/tools/index.ts +9 -0
- package/src/tools/registry.ts +1521 -0
- package/src/tools/searchEntities.ts +92 -0
- package/src/types/entity.ts +110 -0
- package/src/types/errors.ts +33 -0
- package/src/types/haConfig.ts +7 -0
- package/src/types/index.ts +5 -0
- package/src/types/request.ts +6 -0
- package/src/types/serviceCall.ts +18 -0
- package/src/types.ts +2 -0
- package/src/utils/config-validations.ts +46 -0
- package/src/utils/logger.ts +114 -0
- package/src/wrapper.ts +340 -0
- package/tests/config.test.ts +332 -0
- package/tests/haClient/automations.test.ts +133 -0
- package/tests/haClient/config.test.ts +96 -0
- package/tests/haClient/entities.test.ts +188 -0
- package/tests/haClient/history.test.ts +170 -0
- package/tests/haClient/index.test.ts +221 -0
- package/tests/haClient/request.test.ts +217 -0
- package/tests/haClient/services.test.ts +120 -0
- package/tests/haClient/states.test.ts +119 -0
- package/tests/haClient/updates.test.ts +193 -0
- package/tests/index.test.ts +164 -0
- package/tests/localAI/index.test.ts +168 -0
- package/tests/localAI/ollama.test.ts +187 -0
- package/tests/localAI/openai.test.ts +257 -0
- package/tests/server/common.test.ts +64 -0
- package/tests/server/http.test.ts +326 -0
- package/tests/server/sse.test.ts +240 -0
- package/tests/server/stdio.test.ts +102 -0
- package/tests/server/stream.test.ts +287 -0
- package/tests/tools/registry.test.ts +355 -0
- package/tests/utils/config-validations.test.ts +289 -0
- package/tests/utils/logger.test.ts +327 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +26 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { isValidBindAddress, isValidOrigin } from './utils/config-validations.js';
|
|
3
|
+
import { logger } from './utils/logger.js';
|
|
4
|
+
const createBooleanStringSchema = (defaultValue) => z
|
|
5
|
+
.union([z.literal('true'), z.literal('false')])
|
|
6
|
+
.optional()
|
|
7
|
+
.transform((value) => {
|
|
8
|
+
if (value === undefined)
|
|
9
|
+
return defaultValue;
|
|
10
|
+
return value === 'true';
|
|
11
|
+
});
|
|
12
|
+
const numericStringSchema = z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.transform((value) => (value ? Number.parseInt(value, 10) : undefined))
|
|
16
|
+
.pipe(z.number().positive().optional());
|
|
17
|
+
const listStringSchema = z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.transform((value) => value
|
|
21
|
+
? value
|
|
22
|
+
.split(',')
|
|
23
|
+
.map((s) => s.trim())
|
|
24
|
+
.filter(Boolean)
|
|
25
|
+
: undefined);
|
|
26
|
+
const envSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
// Home Assistant Client Configuration
|
|
29
|
+
haUrl: z.string().url({ message: 'HA_URL must be a valid URL' }),
|
|
30
|
+
haToken: z.string().min(1, 'HA_TOKEN is required'),
|
|
31
|
+
haStrictSsl: createBooleanStringSchema(true),
|
|
32
|
+
haTimeout: numericStringSchema,
|
|
33
|
+
// AI Provider Configuration (use 'none' to disable AI features)
|
|
34
|
+
aiProvider: z.enum(['ollama', 'openai', 'none']).optional(),
|
|
35
|
+
aiUrl: z.string().url().optional(),
|
|
36
|
+
aiModel: z.string().optional(),
|
|
37
|
+
aiTimeout: numericStringSchema,
|
|
38
|
+
aiApiKey: z.string().optional(),
|
|
39
|
+
// MCP Generic Server Configuration
|
|
40
|
+
logLevel: z.enum(['debug', 'info', 'warn', 'error']).optional().default('info'),
|
|
41
|
+
logFormat: z.enum(['plain', 'json', 'gcp-json']).optional().default('plain'),
|
|
42
|
+
useHttp: createBooleanStringSchema(false),
|
|
43
|
+
stateful: createBooleanStringSchema(false),
|
|
44
|
+
// MCP Server HTTP Configuration
|
|
45
|
+
httpPort: numericStringSchema,
|
|
46
|
+
httpTransport: z.enum(['stream', 'sse']).optional().default('stream'),
|
|
47
|
+
httpBindAddr: z.string().optional(),
|
|
48
|
+
httpPath: z.string().optional(),
|
|
49
|
+
httpEnableHealthcheck: createBooleanStringSchema(true),
|
|
50
|
+
httpHealthcheckPath: z.string().optional(),
|
|
51
|
+
httpAllowCors: createBooleanStringSchema(true),
|
|
52
|
+
httpAllowedOrigins: listStringSchema,
|
|
53
|
+
// SSE Event Subscription Configuration
|
|
54
|
+
sseEventsEnabled: createBooleanStringSchema(true),
|
|
55
|
+
sseEventsPath: z.string().optional(),
|
|
56
|
+
// Rate Limiting Configuration
|
|
57
|
+
rateLimitEnabled: createBooleanStringSchema(true),
|
|
58
|
+
rateLimitWindowMs: numericStringSchema,
|
|
59
|
+
rateLimitMaxRequests: numericStringSchema,
|
|
60
|
+
})
|
|
61
|
+
.refine((data) => {
|
|
62
|
+
// Validate httpBindAddr if provided
|
|
63
|
+
if (data.httpBindAddr && !isValidBindAddress(data.httpBindAddr)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}, {
|
|
68
|
+
message: 'MCP_HTTP_BIND_ADDR must be a valid IPv4 or IPv6 address',
|
|
69
|
+
path: ['httpBindAddr'],
|
|
70
|
+
})
|
|
71
|
+
.refine((data) => {
|
|
72
|
+
// Validate httpAllowedOrigins if provided
|
|
73
|
+
if (data.httpAllowedOrigins) {
|
|
74
|
+
for (const origin of data.httpAllowedOrigins) {
|
|
75
|
+
if (!isValidOrigin(origin)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}, (data) => {
|
|
82
|
+
const invalidOrigin = data.httpAllowedOrigins?.find((origin) => !isValidOrigin(origin));
|
|
83
|
+
return {
|
|
84
|
+
message: `MCP_HTTP_ALLOWED_ORIGINS contains invalid origin: ${invalidOrigin}`,
|
|
85
|
+
path: ['httpAllowedOrigins'],
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
export function loadConfig(env = process.env) {
|
|
89
|
+
const parsed = envSchema.safeParse({
|
|
90
|
+
// Home Assistant Client Configuration
|
|
91
|
+
haUrl: env.HA_URL,
|
|
92
|
+
haToken: env.HA_TOKEN,
|
|
93
|
+
haStrictSsl: env.HA_STRICT_SSL,
|
|
94
|
+
haTimeout: env.HA_TIMEOUT,
|
|
95
|
+
// AI Provider Configuration
|
|
96
|
+
aiProvider: env.AI_PROVIDER,
|
|
97
|
+
aiUrl: env.AI_URL,
|
|
98
|
+
aiModel: env.AI_MODEL,
|
|
99
|
+
aiTimeout: env.AI_TIMEOUT,
|
|
100
|
+
aiApiKey: env.AI_API_KEY,
|
|
101
|
+
// MCP Generic Server Configuration
|
|
102
|
+
logLevel: env.MCP_SERVER_LOG_LEVEL,
|
|
103
|
+
logFormat: env.MCP_SERVER_LOG_FORMAT,
|
|
104
|
+
useHttp: env.MCP_SERVER_USE_HTTP,
|
|
105
|
+
stateful: env.MCP_SERVER_STATEFUL,
|
|
106
|
+
// MCP Server HTTP Configuration
|
|
107
|
+
httpPort: env.MCP_HTTP_PORT,
|
|
108
|
+
httpTransport: env.MCP_HTTP_TRANSPORT,
|
|
109
|
+
httpBindAddr: env.MCP_HTTP_BIND_ADDR,
|
|
110
|
+
httpPath: env.MCP_HTTP_PATH,
|
|
111
|
+
httpEnableHealthcheck: env.MCP_HTTP_ENABLE_HEALTHCHECK,
|
|
112
|
+
httpHealthcheckPath: env.MCP_HTTP_HEALTHCHECK_PATH,
|
|
113
|
+
httpAllowCors: env.MCP_HTTP_ALLOW_CORS,
|
|
114
|
+
httpAllowedOrigins: env.MCP_HTTP_ALLOWED_ORIGINS,
|
|
115
|
+
// SSE Event Subscription Configuration
|
|
116
|
+
sseEventsEnabled: env.MCP_SSE_EVENTS_ENABLED,
|
|
117
|
+
sseEventsPath: env.MCP_SSE_EVENTS_PATH,
|
|
118
|
+
// Rate Limiting Configuration
|
|
119
|
+
rateLimitEnabled: env.MCP_RATE_LIMIT_ENABLED,
|
|
120
|
+
rateLimitWindowMs: env.MCP_RATE_LIMIT_WINDOW_MS,
|
|
121
|
+
rateLimitMaxRequests: env.MCP_RATE_LIMIT_MAX_REQUESTS,
|
|
122
|
+
});
|
|
123
|
+
if (!parsed.success) {
|
|
124
|
+
const messages = parsed.error.issues.map((issue) => issue.message);
|
|
125
|
+
throw new Error(`Invalid environment configuration:\n${messages.join('\n')}`);
|
|
126
|
+
}
|
|
127
|
+
// Determine default httpPath based on transport if not explicitly set
|
|
128
|
+
const defaultPath = parsed.data.httpTransport === 'sse' ? '/sse' : '/mcp';
|
|
129
|
+
const httpPath = parsed.data.httpPath ?? defaultPath;
|
|
130
|
+
// Set default bind address and allowed origins for security
|
|
131
|
+
const httpBindAddr = parsed.data.httpBindAddr ?? '127.0.0.1';
|
|
132
|
+
let httpAllowedOrigins = parsed.data.httpAllowedOrigins ?? ['127.0.0.1', 'localhost'];
|
|
133
|
+
// If wildcard is present, use empty array to disable SDK origin validation
|
|
134
|
+
if (httpAllowedOrigins.includes('*')) {
|
|
135
|
+
logger.warn('Wildcard (*) origin allowed - origin validation is disabled. This should only be used in development.');
|
|
136
|
+
httpAllowedOrigins = [];
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
// Home Assistant Client Configuration
|
|
140
|
+
baseUrl: parsed.data.haUrl.replace(/\/$/, ''),
|
|
141
|
+
token: parsed.data.haToken,
|
|
142
|
+
strictSsl: parsed.data.haStrictSsl,
|
|
143
|
+
timeout: parsed.data.haTimeout ?? 30000,
|
|
144
|
+
// AI Provider Configuration
|
|
145
|
+
aiProvider: (parsed.data.aiProvider ?? 'ollama'),
|
|
146
|
+
aiUrl: parsed.data.aiUrl ?? 'http://localhost:11434',
|
|
147
|
+
aiModel: parsed.data.aiModel ?? 'qwen3:14b',
|
|
148
|
+
aiTimeout: parsed.data.aiTimeout ?? 60000,
|
|
149
|
+
aiApiKey: parsed.data.aiApiKey,
|
|
150
|
+
// MCP Generic Server Configuration
|
|
151
|
+
logLevel: parsed.data.logLevel,
|
|
152
|
+
logFormat: parsed.data.logFormat,
|
|
153
|
+
useHttp: parsed.data.useHttp,
|
|
154
|
+
stateful: parsed.data.stateful,
|
|
155
|
+
// MCP Server HTTP Configuration
|
|
156
|
+
httpPort: parsed.data.httpPort,
|
|
157
|
+
httpTransport: parsed.data.httpTransport,
|
|
158
|
+
httpBindAddr,
|
|
159
|
+
httpPath,
|
|
160
|
+
httpEnableHealthcheck: parsed.data.httpEnableHealthcheck,
|
|
161
|
+
httpHealthcheckPath: parsed.data.httpHealthcheckPath,
|
|
162
|
+
httpAllowCors: parsed.data.httpAllowCors,
|
|
163
|
+
httpAllowedOrigins,
|
|
164
|
+
// SSE Event Subscription Configuration
|
|
165
|
+
sseEventsEnabled: parsed.data.sseEventsEnabled,
|
|
166
|
+
sseEventsPath: parsed.data.sseEventsPath ?? '/subscribe_events',
|
|
167
|
+
// Rate Limiting Configuration
|
|
168
|
+
rateLimitEnabled: parsed.data.rateLimitEnabled,
|
|
169
|
+
rateLimitWindowMs: parsed.data.rateLimitWindowMs ?? 60000,
|
|
170
|
+
rateLimitMaxRequests: parsed.data.rateLimitMaxRequests ?? 100,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// Legacy compatibility functions
|
|
174
|
+
export function validateConfig(config) {
|
|
175
|
+
// Config is already validated by Zod, this is for compatibility
|
|
176
|
+
if (!config.baseUrl || !config.token) {
|
|
177
|
+
throw new Error('Invalid configuration: missing baseUrl or token');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function loadConfigFromEnv() {
|
|
181
|
+
return loadConfig();
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automation Operations for Home Assistant API
|
|
3
|
+
* Handles automation listing and management
|
|
4
|
+
*/
|
|
5
|
+
import type { Automation, AutomationConfig, ServiceCallResponse } from '../types/index.js';
|
|
6
|
+
import type { StateOperations } from './states.js';
|
|
7
|
+
import type { ServiceOperations } from './services.js';
|
|
8
|
+
import type { RequestHandler } from './request.js';
|
|
9
|
+
/**
|
|
10
|
+
* Automation-related operations for the Home Assistant API.
|
|
11
|
+
*/
|
|
12
|
+
export declare class AutomationOperations {
|
|
13
|
+
private readonly stateOps;
|
|
14
|
+
private readonly serviceOps?;
|
|
15
|
+
private readonly request?;
|
|
16
|
+
constructor(stateOps: StateOperations, serviceOps?: ServiceOperations | undefined, request?: RequestHandler | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Get all automations
|
|
19
|
+
*/
|
|
20
|
+
getAutomations(): Promise<Automation[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Get a single automation by entity_id
|
|
23
|
+
*/
|
|
24
|
+
getAutomation(entityId: string): Promise<Automation | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Trigger an automation manually
|
|
27
|
+
*/
|
|
28
|
+
triggerAutomation(entityId: string, variables?: Record<string, unknown>): Promise<ServiceCallResponse>;
|
|
29
|
+
/**
|
|
30
|
+
* Enable an automation
|
|
31
|
+
*/
|
|
32
|
+
enableAutomation(entityId: string): Promise<ServiceCallResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* Disable an automation
|
|
35
|
+
*/
|
|
36
|
+
disableAutomation(entityId: string): Promise<ServiceCallResponse>;
|
|
37
|
+
/**
|
|
38
|
+
* Toggle an automation (enable if disabled, disable if enabled)
|
|
39
|
+
*/
|
|
40
|
+
toggleAutomation(entityId: string): Promise<ServiceCallResponse>;
|
|
41
|
+
/**
|
|
42
|
+
* Reload all automations from configuration
|
|
43
|
+
*/
|
|
44
|
+
reloadAutomations(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Create a new automation via the config API
|
|
47
|
+
* Note: Requires Home Assistant 2023.7+ with config flow support
|
|
48
|
+
*/
|
|
49
|
+
createAutomation(config: AutomationConfig): Promise<{
|
|
50
|
+
id: string;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Update an existing automation
|
|
54
|
+
* Note: Requires the automation's unique_id from the automation registry
|
|
55
|
+
*/
|
|
56
|
+
updateAutomation(automationId: string, config: Partial<AutomationConfig>): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Delete an automation
|
|
59
|
+
* Note: Only works for automations created via the UI/API
|
|
60
|
+
*/
|
|
61
|
+
deleteAutomation(automationId: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get automation trace (execution history)
|
|
64
|
+
*/
|
|
65
|
+
getAutomationTrace(entityId: string): Promise<unknown[]>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=automations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automations.d.ts","sourceRoot":"","sources":["../../src/haClient/automations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;GAEG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,QAAQ,EAAE,eAAe,EACzB,UAAU,CAAC,EAAE,iBAAiB,YAAA,EAC9B,OAAO,CAAC,EAAE,cAAc,YAAA;IAG3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAmB7C;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkBjE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAe5G;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IActE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAcvE;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IActE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBzE;;;OAGG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9F;;;OAGG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAU/D"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automation Operations for Home Assistant API
|
|
3
|
+
* Handles automation listing and management
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Automation-related operations for the Home Assistant API.
|
|
8
|
+
*/
|
|
9
|
+
export class AutomationOperations {
|
|
10
|
+
stateOps;
|
|
11
|
+
serviceOps;
|
|
12
|
+
request;
|
|
13
|
+
constructor(stateOps, serviceOps, request) {
|
|
14
|
+
this.stateOps = stateOps;
|
|
15
|
+
this.serviceOps = serviceOps;
|
|
16
|
+
this.request = request;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get all automations
|
|
20
|
+
*/
|
|
21
|
+
async getAutomations() {
|
|
22
|
+
logger.debug('Fetching automations');
|
|
23
|
+
const allStates = await this.stateOps.getStates();
|
|
24
|
+
const automations = allStates
|
|
25
|
+
.filter(entity => entity.entity_id.startsWith('automation.'))
|
|
26
|
+
.map(entity => ({
|
|
27
|
+
id: entity.entity_id,
|
|
28
|
+
alias: String(entity.attributes.friendly_name || entity.entity_id.replace('automation.', '')),
|
|
29
|
+
state: entity.state,
|
|
30
|
+
last_triggered: entity.attributes.last_triggered,
|
|
31
|
+
description: entity.attributes.description,
|
|
32
|
+
mode: entity.attributes.mode,
|
|
33
|
+
}));
|
|
34
|
+
logger.info('Fetched automations', { count: automations.length });
|
|
35
|
+
return automations;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get a single automation by entity_id
|
|
39
|
+
*/
|
|
40
|
+
async getAutomation(entityId) {
|
|
41
|
+
logger.debug('Fetching automation', { entityId });
|
|
42
|
+
const state = await this.stateOps.getState(entityId);
|
|
43
|
+
if (!state || !entityId.startsWith('automation.')) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
id: state.entity_id,
|
|
48
|
+
alias: String(state.attributes.friendly_name || state.entity_id.replace('automation.', '')),
|
|
49
|
+
state: state.state,
|
|
50
|
+
last_triggered: state.attributes.last_triggered,
|
|
51
|
+
description: state.attributes.description,
|
|
52
|
+
mode: state.attributes.mode,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Trigger an automation manually
|
|
57
|
+
*/
|
|
58
|
+
async triggerAutomation(entityId, variables) {
|
|
59
|
+
if (!this.serviceOps) {
|
|
60
|
+
throw new Error('ServiceOperations not available');
|
|
61
|
+
}
|
|
62
|
+
logger.info('Triggering automation', { entityId, variables });
|
|
63
|
+
return this.serviceOps.callService({
|
|
64
|
+
domain: 'automation',
|
|
65
|
+
service: 'trigger',
|
|
66
|
+
target: { entity_id: entityId },
|
|
67
|
+
service_data: variables ? { variables } : undefined,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Enable an automation
|
|
72
|
+
*/
|
|
73
|
+
async enableAutomation(entityId) {
|
|
74
|
+
if (!this.serviceOps) {
|
|
75
|
+
throw new Error('ServiceOperations not available');
|
|
76
|
+
}
|
|
77
|
+
logger.info('Enabling automation', { entityId });
|
|
78
|
+
return this.serviceOps.callService({
|
|
79
|
+
domain: 'automation',
|
|
80
|
+
service: 'turn_on',
|
|
81
|
+
target: { entity_id: entityId },
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Disable an automation
|
|
86
|
+
*/
|
|
87
|
+
async disableAutomation(entityId) {
|
|
88
|
+
if (!this.serviceOps) {
|
|
89
|
+
throw new Error('ServiceOperations not available');
|
|
90
|
+
}
|
|
91
|
+
logger.info('Disabling automation', { entityId });
|
|
92
|
+
return this.serviceOps.callService({
|
|
93
|
+
domain: 'automation',
|
|
94
|
+
service: 'turn_off',
|
|
95
|
+
target: { entity_id: entityId },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Toggle an automation (enable if disabled, disable if enabled)
|
|
100
|
+
*/
|
|
101
|
+
async toggleAutomation(entityId) {
|
|
102
|
+
if (!this.serviceOps) {
|
|
103
|
+
throw new Error('ServiceOperations not available');
|
|
104
|
+
}
|
|
105
|
+
logger.info('Toggling automation', { entityId });
|
|
106
|
+
return this.serviceOps.callService({
|
|
107
|
+
domain: 'automation',
|
|
108
|
+
service: 'toggle',
|
|
109
|
+
target: { entity_id: entityId },
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Reload all automations from configuration
|
|
114
|
+
*/
|
|
115
|
+
async reloadAutomations() {
|
|
116
|
+
if (!this.serviceOps) {
|
|
117
|
+
throw new Error('ServiceOperations not available');
|
|
118
|
+
}
|
|
119
|
+
logger.info('Reloading automations');
|
|
120
|
+
await this.serviceOps.callService({
|
|
121
|
+
domain: 'automation',
|
|
122
|
+
service: 'reload',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create a new automation via the config API
|
|
127
|
+
* Note: Requires Home Assistant 2023.7+ with config flow support
|
|
128
|
+
*/
|
|
129
|
+
async createAutomation(config) {
|
|
130
|
+
if (!this.request) {
|
|
131
|
+
throw new Error('RequestHandler not available');
|
|
132
|
+
}
|
|
133
|
+
logger.info('Creating automation', { alias: config.alias });
|
|
134
|
+
// Use the config/automation/config endpoint to create automations
|
|
135
|
+
const result = await this.request.post('/config/automation/config', {
|
|
136
|
+
alias: config.alias,
|
|
137
|
+
description: config.description,
|
|
138
|
+
mode: config.mode ?? 'single',
|
|
139
|
+
trigger: config.trigger,
|
|
140
|
+
condition: config.condition,
|
|
141
|
+
action: config.action,
|
|
142
|
+
});
|
|
143
|
+
return { id: result.result };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Update an existing automation
|
|
147
|
+
* Note: Requires the automation's unique_id from the automation registry
|
|
148
|
+
*/
|
|
149
|
+
async updateAutomation(automationId, config) {
|
|
150
|
+
if (!this.request) {
|
|
151
|
+
throw new Error('RequestHandler not available');
|
|
152
|
+
}
|
|
153
|
+
logger.info('Updating automation', { automationId, alias: config.alias });
|
|
154
|
+
await this.request.post(`/config/automation/config/${automationId}`, config);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Delete an automation
|
|
158
|
+
* Note: Only works for automations created via the UI/API
|
|
159
|
+
*/
|
|
160
|
+
async deleteAutomation(automationId) {
|
|
161
|
+
if (!this.request) {
|
|
162
|
+
throw new Error('RequestHandler not available');
|
|
163
|
+
}
|
|
164
|
+
logger.info('Deleting automation', { automationId });
|
|
165
|
+
await this.request.request(`/config/automation/config/${automationId}`, {
|
|
166
|
+
method: 'DELETE',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get automation trace (execution history)
|
|
171
|
+
*/
|
|
172
|
+
async getAutomationTrace(entityId) {
|
|
173
|
+
if (!this.request) {
|
|
174
|
+
throw new Error('RequestHandler not available');
|
|
175
|
+
}
|
|
176
|
+
const automationId = entityId.replace('automation.', '');
|
|
177
|
+
logger.debug('Fetching automation trace', { automationId });
|
|
178
|
+
return this.request.get(`/trace/automation/${automationId}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=automations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automations.js","sourceRoot":"","sources":["../../src/haClient/automations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Operations for Home Assistant API
|
|
3
|
+
* Handles configuration and version information
|
|
4
|
+
*/
|
|
5
|
+
import type { HaVersion } from '../types/index.js';
|
|
6
|
+
import type { RequestHandler } from './request.js';
|
|
7
|
+
/**
|
|
8
|
+
* Config-related operations for the Home Assistant API.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ConfigOperations {
|
|
11
|
+
private readonly request;
|
|
12
|
+
constructor(request: RequestHandler);
|
|
13
|
+
/**
|
|
14
|
+
* Get config
|
|
15
|
+
*/
|
|
16
|
+
getConfig(): Promise<Record<string, unknown>>;
|
|
17
|
+
/**
|
|
18
|
+
* Check API (health check)
|
|
19
|
+
*/
|
|
20
|
+
checkApi(): Promise<{
|
|
21
|
+
message: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Get Home Assistant version and configuration info
|
|
25
|
+
*/
|
|
26
|
+
getVersion(): Promise<HaVersion>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/haClient/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;GAEG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKnD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;CAMvC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Operations for Home Assistant API
|
|
3
|
+
* Handles configuration and version information
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Config-related operations for the Home Assistant API.
|
|
8
|
+
*/
|
|
9
|
+
export class ConfigOperations {
|
|
10
|
+
request;
|
|
11
|
+
constructor(request) {
|
|
12
|
+
this.request = request;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get config
|
|
16
|
+
*/
|
|
17
|
+
async getConfig() {
|
|
18
|
+
logger.debug('Fetching config');
|
|
19
|
+
return await this.request.get('/config');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check API (health check)
|
|
23
|
+
*/
|
|
24
|
+
async checkApi() {
|
|
25
|
+
logger.debug('Checking API health');
|
|
26
|
+
return await this.request.get('/');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get Home Assistant version and configuration info
|
|
30
|
+
*/
|
|
31
|
+
async getVersion() {
|
|
32
|
+
logger.debug('Fetching Home Assistant version');
|
|
33
|
+
const config = await this.request.get('/config');
|
|
34
|
+
logger.info('Fetched version', { version: config.version });
|
|
35
|
+
return config;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +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;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAY,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|