@digital-alchemy/hass 24.9.3 → 24.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +4 -1
  2. package/dist/dynamic.d.ts +1 -1
  3. package/dist/dynamic.js +7 -2
  4. package/dist/dynamic.js.map +1 -1
  5. package/dist/extensions/area.extension.d.ts +2 -12
  6. package/dist/extensions/area.extension.js +20 -26
  7. package/dist/extensions/area.extension.js.map +1 -1
  8. package/dist/extensions/backup.extension.d.ts +2 -7
  9. package/dist/extensions/backup.extension.js +5 -8
  10. package/dist/extensions/backup.extension.js.map +1 -1
  11. package/dist/extensions/call-proxy.extension.d.ts +1 -1
  12. package/dist/extensions/call-proxy.extension.js +3 -22
  13. package/dist/extensions/call-proxy.extension.js.map +1 -1
  14. package/dist/extensions/config.extension.d.ts +2 -6
  15. package/dist/extensions/config.extension.js +21 -25
  16. package/dist/extensions/config.extension.js.map +1 -1
  17. package/dist/extensions/conversation.extension.d.ts +2 -6
  18. package/dist/extensions/conversation.extension.js +5 -8
  19. package/dist/extensions/conversation.extension.js.map +1 -1
  20. package/dist/extensions/device.extension.d.ts +2 -5
  21. package/dist/extensions/device.extension.js +16 -22
  22. package/dist/extensions/device.extension.js.map +1 -1
  23. package/dist/extensions/entity.extension.d.ts +2 -61
  24. package/dist/extensions/entity.extension.js +42 -83
  25. package/dist/extensions/entity.extension.js.map +1 -1
  26. package/dist/extensions/events.extension.d.ts +3 -11
  27. package/dist/extensions/events.extension.js +8 -11
  28. package/dist/extensions/events.extension.js.map +1 -1
  29. package/dist/extensions/fetch-api.extension.d.ts +12 -4
  30. package/dist/extensions/fetch-api.extension.js +23 -35
  31. package/dist/extensions/fetch-api.extension.js.map +1 -1
  32. package/dist/extensions/floor.extension.d.ts +2 -9
  33. package/dist/extensions/floor.extension.js +17 -23
  34. package/dist/extensions/floor.extension.js.map +1 -1
  35. package/dist/extensions/id-by.extension.js +15 -20
  36. package/dist/extensions/id-by.extension.js.map +1 -1
  37. package/dist/extensions/index.d.ts +1 -0
  38. package/dist/extensions/index.js +16 -18
  39. package/dist/extensions/index.js.map +1 -1
  40. package/dist/extensions/internal.extension.d.ts +18 -0
  41. package/dist/extensions/internal.extension.js +102 -0
  42. package/dist/extensions/internal.extension.js.map +1 -0
  43. package/dist/extensions/label.extension.d.ts +2 -9
  44. package/dist/extensions/label.extension.js +17 -23
  45. package/dist/extensions/label.extension.js.map +1 -1
  46. package/dist/extensions/reference.extension.d.ts +2 -12
  47. package/dist/extensions/reference.extension.js +19 -25
  48. package/dist/extensions/reference.extension.js.map +1 -1
  49. package/dist/extensions/registry.extension.d.ts +2 -7
  50. package/dist/extensions/registry.extension.js +1 -4
  51. package/dist/extensions/registry.extension.js.map +1 -1
  52. package/dist/extensions/websocket-api.extension.d.ts +3 -78
  53. package/dist/extensions/websocket-api.extension.js +82 -165
  54. package/dist/extensions/websocket-api.extension.js.map +1 -1
  55. package/dist/extensions/zone.extension.d.ts +2 -7
  56. package/dist/extensions/zone.extension.js +15 -21
  57. package/dist/extensions/zone.extension.js.map +1 -1
  58. package/dist/hass.module.d.ts +47 -36
  59. package/dist/hass.module.js +70 -70
  60. package/dist/hass.module.js.map +1 -1
  61. package/dist/helpers/backup.helper.js +1 -2
  62. package/dist/helpers/constants.helper.js +15 -18
  63. package/dist/helpers/constants.helper.js.map +1 -1
  64. package/dist/helpers/device.helper.js +2 -5
  65. package/dist/helpers/device.helper.js.map +1 -1
  66. package/dist/helpers/entity-state.helper.d.ts +3 -8
  67. package/dist/helpers/entity-state.helper.js +1 -8
  68. package/dist/helpers/entity-state.helper.js.map +1 -1
  69. package/dist/helpers/features.helper.js +79 -85
  70. package/dist/helpers/features.helper.js.map +1 -1
  71. package/dist/helpers/fetch/calendar.js +1 -2
  72. package/dist/helpers/fetch/configuration.js +2 -5
  73. package/dist/helpers/fetch/configuration.js.map +1 -1
  74. package/dist/helpers/fetch/index.js +5 -8
  75. package/dist/helpers/fetch/index.js.map +1 -1
  76. package/dist/helpers/fetch/server-log.js +1 -2
  77. package/dist/helpers/fetch/server-log.js.map +1 -1
  78. package/dist/helpers/fetch/service-list.js +1 -2
  79. package/dist/helpers/fetch/weather-forecasts.js +1 -2
  80. package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
  81. package/dist/helpers/fetch.helper.d.ts +162 -0
  82. package/dist/helpers/fetch.helper.js +161 -0
  83. package/dist/helpers/fetch.helper.js.map +1 -0
  84. package/dist/helpers/id-by.helper.js +1 -2
  85. package/dist/helpers/index.d.ts +2 -1
  86. package/dist/helpers/index.js +13 -15
  87. package/dist/helpers/index.js.map +1 -1
  88. package/dist/helpers/interfaces.helper.d.ts +228 -0
  89. package/dist/helpers/interfaces.helper.js +10 -0
  90. package/dist/helpers/interfaces.helper.js.map +1 -0
  91. package/dist/helpers/manifest.helper.d.ts +0 -1
  92. package/dist/helpers/manifest.helper.js +0 -1
  93. package/dist/helpers/notify.helper.d.ts +11 -3
  94. package/dist/helpers/notify.helper.js +1 -2
  95. package/dist/helpers/registry.js +7 -10
  96. package/dist/helpers/registry.js.map +1 -1
  97. package/dist/helpers/utility.helper.d.ts +6 -1
  98. package/dist/helpers/utility.helper.js +9 -13
  99. package/dist/helpers/utility.helper.js.map +1 -1
  100. package/dist/helpers/websocket.helper.d.ts +1 -2
  101. package/dist/helpers/websocket.helper.js +1 -2
  102. package/dist/index.js +5 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
  105. package/dist/mock_assistant/extensions/area.extension.js +51 -0
  106. package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
  107. package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
  108. package/dist/mock_assistant/extensions/config.extension.js +29 -0
  109. package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
  110. package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
  111. package/dist/mock_assistant/extensions/device.extension.js +33 -0
  112. package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
  113. package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
  114. package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
  115. package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
  116. package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
  117. package/dist/mock_assistant/extensions/entity.extension.js +77 -0
  118. package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
  119. package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
  120. package/dist/mock_assistant/extensions/events.extension.js +3 -6
  121. package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
  122. package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
  123. package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
  124. package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
  125. package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
  126. package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
  127. package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
  128. package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
  129. package/dist/mock_assistant/extensions/floor.extension.js +51 -0
  130. package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
  131. package/dist/mock_assistant/extensions/index.d.ts +10 -0
  132. package/dist/mock_assistant/extensions/index.js +12 -5
  133. package/dist/mock_assistant/extensions/index.js.map +1 -1
  134. package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
  135. package/dist/mock_assistant/extensions/label.extension.js +51 -0
  136. package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
  137. package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
  138. package/dist/mock_assistant/extensions/services.extension.js +20 -0
  139. package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
  140. package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
  141. package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
  142. package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
  143. package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
  144. package/dist/mock_assistant/extensions/zone.extension.js +51 -0
  145. package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
  146. package/dist/mock_assistant/helpers/fixtures.js +1 -2
  147. package/dist/mock_assistant/helpers/index.d.ts +0 -1
  148. package/dist/mock_assistant/helpers/index.js +1 -5
  149. package/dist/mock_assistant/helpers/index.js.map +1 -1
  150. package/dist/mock_assistant/index.js +3 -6
  151. package/dist/mock_assistant/index.js.map +1 -1
  152. package/dist/mock_assistant/main.js +11 -15
  153. package/dist/mock_assistant/main.js.map +1 -1
  154. package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
  155. package/dist/mock_assistant/mock-assistant.module.js +56 -11
  156. package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
  157. package/dist/quickboot.module.js +5 -8
  158. package/dist/quickboot.module.js.map +1 -1
  159. package/dist/testing/area.spec.js +106 -194
  160. package/dist/testing/area.spec.js.map +1 -1
  161. package/dist/testing/backup.spec.js +97 -139
  162. package/dist/testing/backup.spec.js.map +1 -1
  163. package/dist/testing/config.spec.js +79 -153
  164. package/dist/testing/config.spec.js.map +1 -1
  165. package/dist/testing/device.spec.js +35 -69
  166. package/dist/testing/device.spec.js.map +1 -1
  167. package/dist/testing/entity.spec.js +94 -149
  168. package/dist/testing/entity.spec.js.map +1 -1
  169. package/dist/testing/events.spec.js +33 -57
  170. package/dist/testing/events.spec.js.map +1 -1
  171. package/dist/testing/fetch-api.spec.js +242 -427
  172. package/dist/testing/fetch-api.spec.js.map +1 -1
  173. package/dist/testing/fixtures.spec.d.ts +1 -0
  174. package/dist/testing/fixtures.spec.js +150 -0
  175. package/dist/testing/fixtures.spec.js.map +1 -0
  176. package/dist/testing/floor.spec.js +106 -194
  177. package/dist/testing/floor.spec.js.map +1 -1
  178. package/dist/testing/id-by.spec.js +68 -107
  179. package/dist/testing/id-by.spec.js.map +1 -1
  180. package/dist/testing/label.spec.js +106 -194
  181. package/dist/testing/label.spec.js.map +1 -1
  182. package/dist/testing/ref-by.spec.js +155 -219
  183. package/dist/testing/ref-by.spec.js.map +1 -1
  184. package/dist/testing/websocket.spec.d.ts +1 -8
  185. package/dist/testing/websocket.spec.js +35 -50
  186. package/dist/testing/websocket.spec.js.map +1 -1
  187. package/dist/testing/workflow.spec.js +82 -81
  188. package/dist/testing/workflow.spec.js.map +1 -1
  189. package/dist/testing/zone.spec.js +61 -113
  190. package/dist/testing/zone.spec.js.map +1 -1
  191. package/package.json +56 -40
  192. package/dist/helpers/metrics.helper.d.ts +0 -29
  193. package/dist/helpers/metrics.helper.js +0 -62
  194. package/dist/helpers/metrics.helper.js.map +0 -1
  195. package/dist/mock_assistant/helpers/utils.d.ts +0 -4
  196. package/dist/mock_assistant/helpers/utils.js +0 -57
  197. package/dist/mock_assistant/helpers/utils.js.map +0 -1
@@ -0,0 +1,162 @@
1
+ import { TContext } from "@digital-alchemy/core";
2
+ import { MergeExclusive } from "type-fest";
3
+ /**
4
+ * Defines the types of parameters that can be used in fetch requests.
5
+ */
6
+ export type FetchParameterTypes = string | boolean | Date | number | Array<string | Date | number>;
7
+ /**
8
+ * Enumerates HTTP methods used in fetch requests.
9
+ */
10
+ export declare enum HTTP_METHODS {
11
+ get = "get",
12
+ delete = "delete",
13
+ put = "put",
14
+ patch = "patch",
15
+ post = "post"
16
+ }
17
+ type NoBodyMethods = "get" | "delete";
18
+ type BodyMethods = "put" | "patch" | "post";
19
+ /**
20
+ * Represents a fetch request with additional properties and body content.
21
+ */
22
+ export type FetchWith<EXTRA extends Record<never, string> = Record<never, string>, BODY extends TFetchBody = undefined> = Partial<FetchArguments<BODY>> & EXTRA;
23
+ export type FetchProcessTypes = boolean | "text" | "json" | "raw" | undefined;
24
+ type BaseFetchArguments = {
25
+ /**
26
+ * Headers to append
27
+ */
28
+ headers?: Record<string, string>;
29
+ /**
30
+ * Query params to send
31
+ */
32
+ params?: Record<string, FetchParameterTypes>;
33
+ /**
34
+ * Built in post-processing
35
+ *
36
+ * - true / "json" = attempt to decode as json
37
+ * - false / "raw" = return the node-fetch response object without processing
38
+ * - "text" = return result as text, no additional processing
39
+ *
40
+ * ? boolean values are deprecated
41
+ */
42
+ process?: FetchProcessTypes;
43
+ };
44
+ export type MaybeHttpError = {
45
+ error: string;
46
+ message: string;
47
+ statusCode: number;
48
+ };
49
+ type BaseFetchUrl = {
50
+ /**
51
+ * URL to send request to
52
+ */
53
+ url: string;
54
+ } & MergeExclusive<{
55
+ /**
56
+ * Frequently filled in by wrapper services
57
+ */
58
+ baseUrl?: string;
59
+ }, {
60
+ /**
61
+ * URL is the full path (includes http://...)
62
+ *
63
+ * Ignores baseUrl if set
64
+ */
65
+ rawUrl?: boolean;
66
+ }>;
67
+ type BaseFetchBody<BODY extends TFetchBody = undefined> = MergeExclusive<{
68
+ /**
69
+ * POSTDATA
70
+ */
71
+ body?: BODY;
72
+ /**
73
+ * HTTP method
74
+ */
75
+ method: BodyMethods;
76
+ }, {
77
+ /**
78
+ * HTTP method
79
+ */
80
+ method?: NoBodyMethods;
81
+ }>;
82
+ /**
83
+ * Defines the structure and types for arguments passed to fetch requests.
84
+ */
85
+ export type FetchArguments<BODY extends TFetchBody = undefined> = BaseFetchUrl & BaseFetchArguments & BaseFetchBody<BODY>;
86
+ /**
87
+ * Represents a subset of FetchArguments for specific use cases.
88
+ */
89
+ export type FilteredFetchArguments<BODY extends TFetchBody = undefined> = BaseFetchBody<BODY> & Pick<BaseFetchUrl, "url"> & Pick<BaseFetchArguments, "process" | "params">;
90
+ /**
91
+ * Same thing as FetchWith, but the function doesn't need any args
92
+ *
93
+ * This is a work around, for some reason the default value approach isn't work as I had hoped
94
+ */
95
+ export type BaseFetch = Partial<FetchArguments>;
96
+ /**
97
+ * Defines the types of values that can be used in filter operations.
98
+ */
99
+ export type FilterValueType = string | boolean | number | Date | RegExp | Record<string, string>;
100
+ /**
101
+ * Enumerates the types of operations available for data filtering.
102
+ */
103
+ export declare enum FILTER_OPERATIONS {
104
+ elem = "elem",
105
+ regex = "regex",
106
+ in = "in",
107
+ nin = "nin",
108
+ lt = "lt",
109
+ lte = "lte",
110
+ gt = "gt",
111
+ gte = "gte",
112
+ exists = "exists",
113
+ empty = "empty",
114
+ ne = "ne",
115
+ eq = "eq"
116
+ }
117
+ export interface ComparisonDTO {
118
+ operation?: FILTER_OPERATIONS | `${FILTER_OPERATIONS}`;
119
+ value?: FilterValueType | FilterValueType[];
120
+ }
121
+ export interface Filter<FIELDS = string> extends ComparisonDTO {
122
+ empty?: boolean;
123
+ exists?: boolean;
124
+ field?: FIELDS;
125
+ }
126
+ export interface ResultControl {
127
+ filters?: Set<Filter>;
128
+ limit?: number;
129
+ select?: string[];
130
+ skip?: number;
131
+ sort?: string[];
132
+ }
133
+ export declare function controlToQuery(value: Readonly<ResultControl>): Record<string, string>;
134
+ export declare function buildFilter(key: string, value: FilterValueType | FilterValueType[]): Filter;
135
+ export declare function queryToControl(value: Readonly<Record<string, string>>): ResultControl;
136
+ /**
137
+ * Properties that alter the way that fetcher works.
138
+ */
139
+ export type FetcherOptions = {
140
+ /**
141
+ * typically domain names with scheme, added to the front of urls if the individual request doesn't override
142
+ */
143
+ baseUrl?: string;
144
+ /**
145
+ * merged into every request
146
+ */
147
+ headers?: Record<string, string>;
148
+ /**
149
+ * Alter the context attached to the log statements emitted from the fetcher
150
+ */
151
+ context?: TContext;
152
+ };
153
+ export type DownloadOptions<BODY extends TFetchBody = undefined> = Partial<FetchArguments<BODY>> & {
154
+ destination: string;
155
+ };
156
+ export declare function fetchCast(item: FetchParameterTypes): string;
157
+ export type TFetchBody = object | undefined;
158
+ export declare function buildFilterString(fetchWith: FetchWith<{
159
+ filters?: Readonly<ResultControl>;
160
+ params?: Record<string, FetchParameterTypes>;
161
+ }>): string;
162
+ export {};
@@ -0,0 +1,161 @@
1
+ import { is } from "@digital-alchemy/core";
2
+ /**
3
+ * Enumerates HTTP methods used in fetch requests.
4
+ */
5
+ export var HTTP_METHODS;
6
+ (function (HTTP_METHODS) {
7
+ HTTP_METHODS["get"] = "get";
8
+ HTTP_METHODS["delete"] = "delete";
9
+ HTTP_METHODS["put"] = "put";
10
+ HTTP_METHODS["patch"] = "patch";
11
+ HTTP_METHODS["post"] = "post";
12
+ })(HTTP_METHODS || (HTTP_METHODS = {}));
13
+ /**
14
+ * Enumerates the types of operations available for data filtering.
15
+ */
16
+ export var FILTER_OPERATIONS;
17
+ (function (FILTER_OPERATIONS) {
18
+ // "elemMatch" functionality in mongo
19
+ // eslint-disable-next-line unicorn/prevent-abbreviations
20
+ FILTER_OPERATIONS["elem"] = "elem";
21
+ FILTER_OPERATIONS["regex"] = "regex";
22
+ FILTER_OPERATIONS["in"] = "in";
23
+ FILTER_OPERATIONS["nin"] = "nin";
24
+ FILTER_OPERATIONS["lt"] = "lt";
25
+ FILTER_OPERATIONS["lte"] = "lte";
26
+ FILTER_OPERATIONS["gt"] = "gt";
27
+ FILTER_OPERATIONS["gte"] = "gte";
28
+ FILTER_OPERATIONS["exists"] = "exists";
29
+ FILTER_OPERATIONS["empty"] = "empty";
30
+ FILTER_OPERATIONS["ne"] = "ne";
31
+ FILTER_OPERATIONS["eq"] = "eq";
32
+ })(FILTER_OPERATIONS || (FILTER_OPERATIONS = {}));
33
+ export function controlToQuery(value) {
34
+ const out = new Map();
35
+ if (value?.limit) {
36
+ out.set("limit", value.limit.toString());
37
+ }
38
+ if (value?.skip) {
39
+ out.set("skip", value.skip.toString());
40
+ }
41
+ if (value?.sort) {
42
+ out.set("sort", value.sort.join(","));
43
+ }
44
+ if (value?.select) {
45
+ out.set("select", value.select.join(","));
46
+ }
47
+ value?.filters?.forEach(f => {
48
+ let field = f.field;
49
+ if (f.operation && f.operation !== FILTER_OPERATIONS.eq) {
50
+ field = `${field}__${f.operation}`;
51
+ }
52
+ let value = f.value;
53
+ if (is.array(value)) {
54
+ value = value.join(",");
55
+ }
56
+ if (value instanceof Date) {
57
+ value = value.toISOString();
58
+ }
59
+ if (value === null) {
60
+ value = "null";
61
+ }
62
+ if (field) {
63
+ out.set(field, String(value) ?? "");
64
+ }
65
+ });
66
+ return Object.fromEntries(out.entries());
67
+ }
68
+ export function buildFilter(key, value) {
69
+ const [name, operation] = key.split("__");
70
+ switch (operation) {
71
+ case "in":
72
+ case "nin":
73
+ if (!is.array(value)) {
74
+ value = is.string(value) ? value.split(",") : [value];
75
+ }
76
+ return {
77
+ field: name,
78
+ operation,
79
+ value: value,
80
+ };
81
+ case "elem":
82
+ return {
83
+ field: name,
84
+ operation,
85
+ value: is.string(value) ? JSON.parse(value) : value,
86
+ };
87
+ default:
88
+ return {
89
+ field: name,
90
+ operation,
91
+ value,
92
+ };
93
+ }
94
+ }
95
+ export function queryToControl(value) {
96
+ const filters = new Set();
97
+ const out = { filters };
98
+ const parameters = new Map(Object.entries(value));
99
+ parameters.forEach((value, key) => {
100
+ const [name, operation] = key.split("__");
101
+ switch (key) {
102
+ case "select":
103
+ out.select = value.split(",");
104
+ return;
105
+ case "sort":
106
+ out.sort = value.split(",");
107
+ return;
108
+ case "limit":
109
+ out.limit = Number(value);
110
+ return;
111
+ case "skip":
112
+ out.skip = Number(value);
113
+ return;
114
+ }
115
+ switch (operation) {
116
+ case "in":
117
+ case "nin":
118
+ filters.add({
119
+ field: name,
120
+ operation,
121
+ value: value.split(","),
122
+ });
123
+ return;
124
+ case "elem":
125
+ filters.add({
126
+ field: name,
127
+ operation,
128
+ value: JSON.parse(value),
129
+ });
130
+ return;
131
+ default:
132
+ filters.add({
133
+ field: name,
134
+ operation,
135
+ value,
136
+ });
137
+ }
138
+ });
139
+ return out;
140
+ }
141
+ export function fetchCast(item) {
142
+ if (is.array(item)) {
143
+ return item.map(i => fetchCast(i)).join(",");
144
+ }
145
+ if (item instanceof Date) {
146
+ return item.toISOString();
147
+ }
148
+ if (is.number(item)) {
149
+ return item.toString();
150
+ }
151
+ if (is.boolean(item)) {
152
+ return item ? "true" : "false";
153
+ }
154
+ return item;
155
+ }
156
+ export function buildFilterString(fetchWith) {
157
+ return new URLSearchParams({
158
+ ...Object.fromEntries(Object.entries(fetchWith.params ?? {}).map(([label, value]) => [label, fetchCast(value)])),
159
+ }).toString();
160
+ }
161
+ //# sourceMappingURL=fetch.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.helper.js","sourceRoot":"","sources":["../../src/helpers/fetch.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAY,MAAM,uBAAuB,CAAC;AAQrD;;GAEG;AACH,MAAM,CAAN,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,iCAAiB,CAAA;IACjB,2BAAW,CAAA;IACX,+BAAe,CAAA;IACf,6BAAa,CAAA;AACf,CAAC,EANW,YAAY,KAAZ,YAAY,QAMvB;AA6GD;;GAEG;AACH,MAAM,CAAN,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IAC3B,qCAAqC;IACrC,yDAAyD;IACzD,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,8BAAS,CAAA;IACT,gCAAW,CAAA;IACX,8BAAS,CAAA;IACT,gCAAW,CAAA;IACX,8BAAS,CAAA;IACT,gCAAW,CAAA;IACX,sCAAiB,CAAA;IACjB,oCAAe,CAAA;IACf,8BAAS,CAAA;IACT,8BAAS,CAAA;AACX,CAAC,EAfW,iBAAiB,KAAjB,iBAAiB,QAe5B;AAqBD,MAAM,UAAU,cAAc,CAAC,KAA8B;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QACjB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACxD,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACpB,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,KAA0C;IACjF,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAC;IACzE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,SAAS;gBACT,KAAK,EAAE,KAAK;aACb,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,SAAS;gBACT,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;aACpD,CAAC;QACJ;YACE,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,SAAS;gBACT,KAAK;aACN,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAuC;IACpE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,GAAG,GAAkB,EAAE,OAAO,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAChC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAC;QACzE,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,QAAQ;gBACX,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9B,OAAO;YACT,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO;YACT,KAAK,OAAO;gBACV,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,OAAO;YACT,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,OAAO;QACX,CAAC;QACD,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC;YACV,KAAK,KAAK;gBACR,OAAO,CAAC,GAAG,CAAC;oBACV,KAAK,EAAE,IAAI;oBACX,SAAS;oBACT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;iBACxB,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC;oBACV,KAAK,EAAE,IAAI;oBACX,SAAS;oBACT,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;iBACzB,CAAC,CAAC;gBACH,OAAO;YACT;gBACE,OAAO,CAAC,GAAG,CAAC;oBACV,KAAK,EAAE,IAAI;oBACX,SAAS;oBACT,KAAK;iBACN,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAwBD,MAAM,UAAU,SAAS,CAAC,IAAyB;IACjD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID,MAAM,UAAU,iBAAiB,CAC/B,SAGE;IAEF,OAAO,IAAI,eAAe,CAAC;QACzB,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1F;KACF,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChB,CAAC"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=id-by.helper.js.map
@@ -4,8 +4,9 @@ export * from "./device.helper";
4
4
  export * from "./entity-state.helper";
5
5
  export * from "./features.helper";
6
6
  export * from "./fetch";
7
+ export * from "./fetch.helper";
7
8
  export * from "./id-by.helper";
8
- export * from "./metrics.helper";
9
+ export * from "./interfaces.helper";
9
10
  export * from "./notify.helper";
10
11
  export * from "./registry";
11
12
  export * from "./utility.helper";
@@ -1,16 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./backup.helper"), exports);
5
- tslib_1.__exportStar(require("./constants.helper"), exports);
6
- tslib_1.__exportStar(require("./device.helper"), exports);
7
- tslib_1.__exportStar(require("./entity-state.helper"), exports);
8
- tslib_1.__exportStar(require("./features.helper"), exports);
9
- tslib_1.__exportStar(require("./fetch"), exports);
10
- tslib_1.__exportStar(require("./id-by.helper"), exports);
11
- tslib_1.__exportStar(require("./metrics.helper"), exports);
12
- tslib_1.__exportStar(require("./notify.helper"), exports);
13
- tslib_1.__exportStar(require("./registry"), exports);
14
- tslib_1.__exportStar(require("./utility.helper"), exports);
15
- tslib_1.__exportStar(require("./websocket.helper"), exports);
1
+ export * from "./backup.helper";
2
+ export * from "./constants.helper";
3
+ export * from "./device.helper";
4
+ export * from "./entity-state.helper";
5
+ export * from "./features.helper";
6
+ export * from "./fetch";
7
+ export * from "./fetch.helper";
8
+ export * from "./id-by.helper";
9
+ export * from "./interfaces.helper";
10
+ export * from "./notify.helper";
11
+ export * from "./registry";
12
+ export * from "./utility.helper";
13
+ export * from "./websocket.helper";
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,6DAAmC;AACnC,0DAAgC;AAChC,gEAAsC;AACtC,4DAAkC;AAClC,kDAAwB;AACxB,yDAA+B;AAC/B,2DAAiC;AACjC,0DAAgC;AAChC,qDAA2B;AAC3B,2DAAiC;AACjC,6DAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,228 @@
1
+ import { TBlackHole } from "@digital-alchemy/core";
2
+ import EventEmitter from "events";
3
+ import WS from "ws";
4
+ import { iCallService, TAreaId, TDeviceId, TFloorId, TLabelId, TPlatformId, TRawDomains, TRawEntityIds, TUniqueId, TUniqueIDMapping } from "../dynamic";
5
+ import { BackupResponse, HomeAssistantBackup } from "./backup.helper";
6
+ import { DeviceDetails } from "./device.helper";
7
+ import { ByIdProxy } from "./entity-state.helper";
8
+ import { AreaCreate, AreaDetails, ConfigEntry, HassConfig, HassServiceDTO } from "./fetch";
9
+ import { EditAliasOptions, EditLabelOptions, EntityRegistryItem, FloorCreate, FloorDetails, LabelDefinition, LabelOptions, ManifestItem, ToggleExpose, UpdateCoreOptions, ZoneDetails, ZoneOptions } from "./registry";
10
+ import { ALL_DOMAINS, ALL_SERVICE_DOMAINS, ANY_ENTITY, ENTITY_STATE, PICK_ENTITY, PICK_FROM_AREA, PICK_FROM_DEVICE, PICK_FROM_FLOOR, PICK_FROM_LABEL, PICK_FROM_PLATFORM } from "./utility.helper";
11
+ import { EntityHistoryDTO, EntityHistoryResult, OnHassEventOptions, SocketMessageDTO, SocketSubscribeOptions } from "./websocket.helper";
12
+ export type HassAreaService = {
13
+ apply: (area: TAreaId, entities: ANY_ENTITY[]) => Promise<{
14
+ updated: ANY_ENTITY[];
15
+ }>;
16
+ create: (details: AreaCreate) => Promise<void>;
17
+ current: AreaDetails[];
18
+ delete: (area_id: TAreaId) => Promise<void>;
19
+ list: () => Promise<AreaDetails[]>;
20
+ update: (details: AreaDetails) => Promise<void>;
21
+ };
22
+ export type HassZoneService = {
23
+ create: (options: ZoneOptions) => Promise<void>;
24
+ current: ZoneDetails[];
25
+ list: () => Promise<ZoneDetails[]>;
26
+ update: (zone_id: string, options: ZoneOptions) => Promise<void>;
27
+ };
28
+ export type HassLabelService = {
29
+ create: (details: LabelOptions) => Promise<void>;
30
+ current: LabelDefinition[];
31
+ delete: (label_id: TLabelId) => Promise<void>;
32
+ list: () => Promise<LabelDefinition[]>;
33
+ update: (details: LabelDefinition) => Promise<void>;
34
+ };
35
+ export type HassBackupService = {
36
+ download: (slug: string, destination: string) => Promise<void>;
37
+ generate: () => Promise<HomeAssistantBackup>;
38
+ list: () => Promise<BackupResponse>;
39
+ remove: (slug: string) => Promise<void>;
40
+ };
41
+ export type HassConfigService = {
42
+ getServices: () => HassServiceDTO[];
43
+ isService: <DOMAIN extends ALL_SERVICE_DOMAINS>(domain: DOMAIN, service: string) => service is Extract<keyof iCallService[DOMAIN], string>;
44
+ loadServiceList: (recursion?: number) => Promise<void>;
45
+ };
46
+ export type HassWebsocketAPI = {
47
+ /**
48
+ * @internal
49
+ */
50
+ attachScheduledFunctions: () => void;
51
+ connection: WS;
52
+ /**
53
+ * the current state of the websocket
54
+ */
55
+ connectionState: ConnectionState;
56
+ /**
57
+ * can override as part of unit tests
58
+ */
59
+ createConnection: (url: string) => WS;
60
+ /**
61
+ * Convenient wrapper for sendMessage
62
+ */
63
+ fireEvent: (event_type: string, event_data?: object) => Promise<unknown>;
64
+ /**
65
+ * Set up a new websocket connection to home assistant
66
+ *
67
+ * This doesn't normally need to be called by applications, the extension self manages
68
+ */
69
+ init: () => Promise<void>;
70
+ /**
71
+ * run a callback when the socket finishes (re)connecting
72
+ */
73
+ onConnect: (callback: () => TBlackHole) => void;
74
+ /**
75
+ * Attach to the incoming stream of socket events. Do your own filtering and processing from there
76
+ *
77
+ * Returns removal function
78
+ */
79
+ onEvent: <DATA extends object>({ context, event, once, exec, }: OnHassEventOptions<DATA>) => () => void;
80
+ /**
81
+ * @internal
82
+ *
83
+ * for unit testing
84
+ */
85
+ onMessage: (message: SocketMessageDTO) => Promise<void>;
86
+ /**
87
+ * when true:
88
+ * - outgoing socket messages are blocked
89
+ * - entities don't emit updates
90
+ */
91
+ pauseMessages: boolean;
92
+ /**
93
+ * Send a message to home assistant via the socket connection
94
+ *
95
+ * Applications probably want a higher level function than this
96
+ */
97
+ sendMessage: <RESPONSE_VALUE extends unknown = unknown>(data: {
98
+ type: string;
99
+ id?: number;
100
+ [key: string]: unknown;
101
+ }, waitForResponse?: boolean, subscription?: () => void) => Promise<RESPONSE_VALUE>;
102
+ /**
103
+ * internal
104
+ */
105
+ setConnectionState: (state: ConnectionState) => void;
106
+ /**
107
+ * internal
108
+ */
109
+ socketEvents: EventEmitter;
110
+ /**
111
+ * Subscribe to hass core registry updates.
112
+ *
113
+ * Not the same as `onEvent` (you probably want that)
114
+ */
115
+ subscribe: <EVENT extends string>({ event_type, context, exec, }: SocketSubscribeOptions<EVENT>) => Promise<void>;
116
+ /**
117
+ * remove the current socket connection to home assistant
118
+ *
119
+ * will need to call init() again to start up
120
+ */
121
+ teardown: () => Promise<void>;
122
+ waitForReply: (id: number, data: object, sentAt: Date) => Promise<void>;
123
+ };
124
+ export declare enum WebsocketConnectionState {
125
+ offline = 1,
126
+ connecting = 2,
127
+ connected = 3,
128
+ unknown = 4,
129
+ invalid = 5
130
+ }
131
+ export type ConnectionState = `${keyof typeof WebsocketConnectionState}`;
132
+ export type HassConversationService = {
133
+ addAlias: (options: EditAliasOptions) => Promise<void>;
134
+ removeAlias: (options: EditAliasOptions) => Promise<void>;
135
+ setConversational: (options: ToggleExpose) => Promise<void>;
136
+ };
137
+ export type HassDeviceService = {
138
+ current: DeviceDetails[];
139
+ list: () => Promise<DeviceDetails[]>;
140
+ };
141
+ export type HassEntityManagerRegistry = {
142
+ addLabel: ({ entity, label }: EditLabelOptions) => Promise<void>;
143
+ current: EntityRegistryItem<TRawEntityIds>[];
144
+ get: <ENTITY extends ANY_ENTITY>(entity_id: ENTITY) => Promise<EntityRegistryItem<ENTITY>>;
145
+ list: () => Promise<EntityRegistryItem<TRawEntityIds>[]>;
146
+ registryList: () => Promise<EntityRegistryItem<TRawEntityIds>[]>;
147
+ removeEntity: (entity_id: ANY_ENTITY | ANY_ENTITY[]) => Promise<void>;
148
+ removeLabel: ({ entity, label }: EditLabelOptions) => Promise<void>;
149
+ source: () => Promise<Record<TRawEntityIds, {
150
+ domain: string;
151
+ }>>;
152
+ };
153
+ export type TMasterState = {
154
+ [DOMAIN in ALL_DOMAINS]: Record<string, ENTITY_STATE<PICK_ENTITY<DOMAIN>>>;
155
+ };
156
+ export type HassEntityManager = {
157
+ /**
158
+ * Internal library use only
159
+ */
160
+ _entityUpdateReceiver: <ENTITY extends ANY_ENTITY = TRawEntityIds>(entity_id: ENTITY, new_state: ENTITY_STATE<ENTITY>, old_state: ENTITY_STATE<ENTITY>) => void;
161
+ _masterState: () => Partial<TMasterState>;
162
+ /**
163
+ * Retrieves the current state of a given entity. This method returns
164
+ * raw data, offering a direct view of the entity's state at a given moment.
165
+ */
166
+ getCurrentState: <ENTITY_ID extends ANY_ENTITY>(entity_id: ENTITY_ID) => ENTITY_STATE<ENTITY_ID>;
167
+ /**
168
+ * Retrieves the historical state data of entities over a specified time
169
+ * period. Useful for analysis or tracking changes over time.
170
+ */
171
+ history: <ENTITES extends ANY_ENTITY[]>(payload: Omit<EntityHistoryDTO<ENTITES>, "type">) => Promise<{
172
+ [k: string]: EntityHistoryResult[];
173
+ }>;
174
+ /**
175
+ * Provides a simple listing of all entity IDs. Useful for enumeration
176
+ * and quick reference to all available entities.
177
+ */
178
+ listEntities: <DOMAIN extends ALL_DOMAINS = TRawDomains>(domain?: DOMAIN) => PICK_ENTITY<DOMAIN>[];
179
+ /**
180
+ * Returns the previous entity state (not a proxy)
181
+ */
182
+ previousState: (entity_id: ANY_ENTITY) => ENTITY_STATE<TRawEntityIds>;
183
+ /**
184
+ * Initiates a refresh of the current entity states. Useful for ensuring
185
+ * synchronization with the latest state data from Home Assistant.
186
+ */
187
+ refresh: (recursion?: number) => Promise<void>;
188
+ /**
189
+ * Interact with the entity registry
190
+ */
191
+ registry: HassEntityManagerRegistry;
192
+ /**
193
+ * @internal
194
+ */
195
+ warnEarly: (method: string) => void;
196
+ };
197
+ export type SimpleCallback = () => TBlackHole;
198
+ export type HassEventsService = {
199
+ onAreaRegistryUpdate: (callback: SimpleCallback) => void;
200
+ onDeviceRegistryUpdate: (callback: SimpleCallback) => void;
201
+ onEntityRegistryUpdate: (callback: SimpleCallback) => void;
202
+ onFloorRegistryUpdate: (callback: SimpleCallback) => void;
203
+ onLabelRegistryUpdate: (callback: SimpleCallback) => void;
204
+ onZoneRegistryUpdate: (callback: SimpleCallback) => void;
205
+ };
206
+ export type HassFloorService = {
207
+ create(details: FloorCreate): Promise<void>;
208
+ current: FloorDetails[];
209
+ delete(floor_id: TFloorId): Promise<void>;
210
+ list(): Promise<FloorDetails[]>;
211
+ update(details: FloorDetails): Promise<void>;
212
+ };
213
+ export type HassReferenceService = {
214
+ area: <AREA extends TAreaId, DOMAINS extends TRawDomains = TRawDomains>(area: AREA, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_AREA<AREA, DOMAINS>>[];
215
+ device: <DEVICE extends TDeviceId, DOMAINS extends TRawDomains = TRawDomains>(device: DEVICE, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_DEVICE<DEVICE, DOMAINS>>[];
216
+ domain: <DOMAIN extends TRawDomains = TRawDomains>(domain: DOMAIN) => ByIdProxy<PICK_ENTITY<DOMAIN>>[];
217
+ floor: <FLOOR extends TFloorId, DOMAINS extends TRawDomains = TRawDomains>(floor: FLOOR, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_FLOOR<FLOOR, DOMAINS>>[];
218
+ id: <ENTITY_ID extends ANY_ENTITY>(entity_id: ENTITY_ID) => ByIdProxy<ENTITY_ID>;
219
+ label: <LABEL extends TLabelId, DOMAINS extends TRawDomains = TRawDomains>(label: LABEL, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_LABEL<LABEL, DOMAINS>>[];
220
+ platform: <PLATFORM extends TPlatformId, DOMAINS extends TRawDomains = TRawDomains>(platform: PLATFORM, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_PLATFORM<PLATFORM, DOMAINS>>[];
221
+ unique_id: <UNIQUE_ID extends TUniqueId, ENTITY_ID extends Extract<TUniqueIDMapping[UNIQUE_ID], ANY_ENTITY> = Extract<TUniqueIDMapping[UNIQUE_ID], ANY_ENTITY>>(unique_id: UNIQUE_ID) => ByIdProxy<ENTITY_ID>;
222
+ };
223
+ export type HassRegistryService = {
224
+ getConfig: () => Promise<HassConfig>;
225
+ getConfigEntries: () => Promise<ConfigEntry[]>;
226
+ manifestList: () => Promise<ManifestItem[]>;
227
+ updateCore: (options: UpdateCoreOptions) => Promise<void>;
228
+ };
@@ -0,0 +1,10 @@
1
+ /* eslint-disable @typescript-eslint/no-magic-numbers */
2
+ export var WebsocketConnectionState;
3
+ (function (WebsocketConnectionState) {
4
+ WebsocketConnectionState[WebsocketConnectionState["offline"] = 1] = "offline";
5
+ WebsocketConnectionState[WebsocketConnectionState["connecting"] = 2] = "connecting";
6
+ WebsocketConnectionState[WebsocketConnectionState["connected"] = 3] = "connected";
7
+ WebsocketConnectionState[WebsocketConnectionState["unknown"] = 4] = "unknown";
8
+ WebsocketConnectionState[WebsocketConnectionState["invalid"] = 5] = "invalid";
9
+ })(WebsocketConnectionState || (WebsocketConnectionState = {}));
10
+ //# sourceMappingURL=interfaces.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.helper.js","sourceRoot":"","sources":["../../src/helpers/interfaces.helper.ts"],"names":[],"mappings":"AA+LA,wDAAwD;AACxD,MAAM,CAAN,IAAY,wBAMX;AAND,WAAY,wBAAwB;IAClC,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,iFAAa,CAAA;IACb,6EAAW,CAAA;IACX,6EAAW,CAAA;AACb,CAAC,EANW,wBAAwB,KAAxB,wBAAwB,QAMnC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  //# sourceMappingURL=manifest.helper.js.map
@@ -4,8 +4,10 @@ export type AppleNotificationPush = {
4
4
  *
5
5
  * The sound to play for the notification.
6
6
  * [More info](https://companion.home-assistant.io/docs/notifications/notifications-basic#sounds)
7
+ *
8
+ * > default: "none"
7
9
  */
8
- sound?: "none" | string;
10
+ sound?: string;
9
11
  /**
10
12
  * **iOS | MacOS**
11
13
  *
@@ -31,9 +33,15 @@ export type AppleNotificationPush = {
31
33
  export type NotificationAction = {
32
34
  /**
33
35
  * Key passed back in events.
36
+ *
37
+ * ## REPLY
38
+ *
34
39
  * When set to `REPLY`, you will be prompted for text to send with the event.
40
+ *
41
+ * ## URI
42
+ *
35
43
  */
36
- action: "REPLY" | "URI" | string;
44
+ action: string;
37
45
  /**
38
46
  * Shown on the action button to the user.
39
47
  */
@@ -44,7 +52,7 @@ export type NotificationAction = {
44
52
  */
45
53
  uri?: string;
46
54
  };
47
- export type AndroidNotificationActionOptions = {};
55
+ export type AndroidNotificationActionOptions = Record<string, unknown>;
48
56
  export type AppleNotificationActionOptions = {
49
57
  /**
50
58
  * **iOS | MacOS**