Refactor Home Assistant API and schema validation

- Completely rewrote HassInstance class with fetch-based API methods
- Updated Home Assistant schemas to be more precise and flexible
- Removed deprecated test environment configuration file
- Enhanced WebSocket client implementation
- Improved test coverage for Home Assistant API and schema validation
- Simplified type definitions and error handling
This commit is contained in:
jango-blockchained
2025-01-30 10:51:25 +01:00
parent 732a727d27
commit 8152313f52
8 changed files with 561 additions and 200 deletions

View File

@@ -141,15 +141,7 @@ export const automationSchema: JSONSchemaType<AutomationType> = {
type: 'object',
required: ['condition'],
properties: {
condition: { type: 'string' },
conditions: {
type: 'array',
nullable: true,
items: {
type: 'object',
additionalProperties: true
}
}
condition: { type: 'string' }
},
additionalProperties: true
}
@@ -166,13 +158,8 @@ export const automationSchema: JSONSchemaType<AutomationType> = {
nullable: true,
properties: {
entity_id: {
anyOf: [
{ type: 'string' },
{
type: 'array',
items: { type: 'string' }
}
],
type: 'array',
items: { type: 'string' },
nullable: true
}
},
@@ -228,22 +215,55 @@ export const stateChangedEventSchema: JSONSchemaType<HomeAssistant.StateChangedE
properties: {
entity_id: { type: 'string' },
new_state: {
anyOf: [
entitySchema,
{ type: 'null' }
],
nullable: true
type: 'object',
nullable: true,
properties: {
entity_id: { type: 'string' },
state: { type: 'string' },
attributes: {
type: 'object',
additionalProperties: true
},
last_changed: { type: 'string' },
last_updated: { type: 'string' },
context: {
type: 'object',
properties: {
id: { type: 'string' },
parent_id: { type: 'string', nullable: true },
user_id: { type: 'string', nullable: true }
},
required: ['id']
}
},
required: ['entity_id', 'state', 'attributes', 'last_changed', 'last_updated', 'context']
},
old_state: {
anyOf: [
entitySchema,
{ type: 'null' }
],
nullable: true
type: 'object',
nullable: true,
properties: {
entity_id: { type: 'string' },
state: { type: 'string' },
attributes: {
type: 'object',
additionalProperties: true
},
last_changed: { type: 'string' },
last_updated: { type: 'string' },
context: {
type: 'object',
properties: {
id: { type: 'string' },
parent_id: { type: 'string', nullable: true },
user_id: { type: 'string', nullable: true }
},
required: ['id']
}
},
required: ['entity_id', 'state', 'attributes', 'last_changed', 'last_updated', 'context']
}
},
required: ['entity_id', 'new_state', 'old_state'],
additionalProperties: false
required: ['entity_id', 'new_state']
},
origin: { type: 'string' },
time_fired: { type: 'string' },
@@ -254,12 +274,10 @@ export const stateChangedEventSchema: JSONSchemaType<HomeAssistant.StateChangedE
parent_id: { type: 'string', nullable: true },
user_id: { type: 'string', nullable: true }
},
required: ['id'],
additionalProperties: false
required: ['id']
}
},
required: ['event_type', 'data', 'origin', 'time_fired', 'context'],
additionalProperties: false
required: ['event_type', 'data', 'origin', 'time_fired', 'context']
};
export const configSchema: JSONSchemaType<HomeAssistant.Config> = {