@digital-alchemy/hass 25.10.26 → 25.10.27-beta.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.
Files changed (37) hide show
  1. package/dist/hass.module.d.mts +2 -1
  2. package/dist/hass.module.mjs +2 -1
  3. package/dist/hass.module.mjs.map +1 -1
  4. package/dist/helpers/addon.d.mts +20 -0
  5. package/dist/helpers/addon.mjs +2 -0
  6. package/dist/helpers/addon.mjs.map +1 -0
  7. package/dist/helpers/countries.d.mts +2 -0
  8. package/dist/helpers/countries.mjs +254 -0
  9. package/dist/helpers/countries.mjs.map +1 -0
  10. package/dist/helpers/index.d.mts +3 -0
  11. package/dist/helpers/index.mjs +3 -0
  12. package/dist/helpers/index.mjs.map +1 -1
  13. package/dist/helpers/interfaces.d.mts +4 -0
  14. package/dist/helpers/interfaces.mjs.map +1 -1
  15. package/dist/helpers/languages.d.mts +2 -0
  16. package/dist/helpers/languages.mjs +67 -0
  17. package/dist/helpers/languages.mjs.map +1 -0
  18. package/dist/mock_assistant/mock-assistant.module.d.mts +2 -0
  19. package/dist/services/addon.service.d.mts +3 -0
  20. package/dist/services/addon.service.mjs +14 -0
  21. package/dist/services/addon.service.mjs.map +1 -0
  22. package/dist/services/index.d.mts +1 -0
  23. package/dist/services/index.mjs +1 -0
  24. package/dist/services/index.mjs.map +1 -1
  25. package/dist/testing/addon.spec.d.mts +1 -0
  26. package/dist/testing/addon.spec.mjs +57 -0
  27. package/dist/testing/addon.spec.mjs.map +1 -0
  28. package/package.json +1 -1
  29. package/src/hass.module.mts +3 -0
  30. package/src/helpers/addon.mts +20 -0
  31. package/src/helpers/countries.mts +255 -0
  32. package/src/helpers/index.mts +3 -0
  33. package/src/helpers/interfaces.mts +5 -0
  34. package/src/helpers/languages.mts +67 -0
  35. package/src/services/addon.service.mts +18 -0
  36. package/src/services/index.mts +1 -0
  37. package/src/testing/addon.spec.mts +63 -0
@@ -1,5 +1,6 @@
1
- import { Area, Backup, CallProxy, Configure, Device, EntityManager, EventsService, FetchAPI, FetchInternals, Floor, HassDiagnosticsService, HassFeatureService, IDByExtension, Label, ReferenceService, Registry, WebsocketAPI, Zone } from "./services/index.mts";
1
+ import { AddonService, Area, Backup, CallProxy, Configure, Device, EntityManager, EventsService, FetchAPI, FetchInternals, Floor, HassDiagnosticsService, HassFeatureService, IDByExtension, Label, ReferenceService, Registry, WebsocketAPI, Zone } from "./services/index.mts";
2
2
  export declare const LIB_HASS: import("@digital-alchemy/core").LibraryDefinition<{
3
+ addon: typeof AddonService;
3
4
  /**
4
5
  * home assistant areas
5
6
  */
@@ -1,5 +1,5 @@
1
1
  import { CreateLibrary } from "@digital-alchemy/core";
2
- import { Area, Backup, CallProxy, Configure, Device, EntityManager, EventsService, FetchAPI, FetchInternals, Floor, HassDiagnosticsService, HassFeatureService, IDByExtension, Label, ReferenceService, Registry, WebsocketAPI, Zone, } from "./services/index.mjs";
2
+ import { AddonService, Area, Backup, CallProxy, Configure, Device, EntityManager, EventsService, FetchAPI, FetchInternals, Floor, HassDiagnosticsService, HassFeatureService, IDByExtension, Label, ReferenceService, Registry, WebsocketAPI, Zone, } from "./services/index.mjs";
3
3
  export const LIB_HASS = CreateLibrary({
4
4
  configuration: {
5
5
  /**
@@ -115,6 +115,7 @@ export const LIB_HASS = CreateLibrary({
115
115
  // no internal dependency ones first
116
116
  priorityInit: ["internals", "fetch", "socket"],
117
117
  services: {
118
+ addon: AddonService,
118
119
  /**
119
120
  * home assistant areas
120
121
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hass.module.mjs","sourceRoot":"","sources":["../src/hass.module.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hass.module.mjs","sourceRoot":"","sources":["../src/hass.module.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface AddonDetails {
2
+ name: string;
3
+ slug: string;
4
+ description: string;
5
+ advanced: boolean;
6
+ stage: string;
7
+ version: string;
8
+ version_latest: string;
9
+ update_available: boolean;
10
+ available: boolean;
11
+ detached: boolean;
12
+ homeassistant: string;
13
+ state: "started" | "stopped" | "error";
14
+ repository: string;
15
+ build: boolean;
16
+ url: string;
17
+ icon: boolean;
18
+ logo: boolean;
19
+ system_managed: boolean;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addon.mjs","sourceRoot":"","sources":["../../src/helpers/addon.mts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const SUPPORTED_COUNTRIES: readonly ["AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS", "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", "SX", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM", "ZW"];
2
+ export type SupportedCountries = (typeof SUPPORTED_COUNTRIES)[number];
@@ -0,0 +1,254 @@
1
+ // This is duplicated from a generated file from home assistant core
2
+ // Will only modify this list to match what HA supports
3
+ export const SUPPORTED_COUNTRIES = [
4
+ "AD",
5
+ "AE",
6
+ "AF",
7
+ "AG",
8
+ "AI",
9
+ "AL",
10
+ "AM",
11
+ "AO",
12
+ "AQ",
13
+ "AR",
14
+ "AS",
15
+ "AT",
16
+ "AU",
17
+ "AW",
18
+ "AX",
19
+ "AZ",
20
+ "BA",
21
+ "BB",
22
+ "BD",
23
+ "BE",
24
+ "BF",
25
+ "BG",
26
+ "BH",
27
+ "BI",
28
+ "BJ",
29
+ "BL",
30
+ "BM",
31
+ "BN",
32
+ "BO",
33
+ "BQ",
34
+ "BR",
35
+ "BS",
36
+ "BT",
37
+ "BV",
38
+ "BW",
39
+ "BY",
40
+ "BZ",
41
+ "CA",
42
+ "CC",
43
+ "CD",
44
+ "CF",
45
+ "CG",
46
+ "CH",
47
+ "CI",
48
+ "CK",
49
+ "CL",
50
+ "CM",
51
+ "CN",
52
+ "CO",
53
+ "CR",
54
+ "CU",
55
+ "CV",
56
+ "CW",
57
+ "CX",
58
+ "CY",
59
+ "CZ",
60
+ "DE",
61
+ "DJ",
62
+ "DK",
63
+ "DM",
64
+ "DO",
65
+ "DZ",
66
+ "EC",
67
+ "EE",
68
+ "EG",
69
+ "EH",
70
+ "ER",
71
+ "ES",
72
+ "ET",
73
+ "FI",
74
+ "FJ",
75
+ "FK",
76
+ "FM",
77
+ "FO",
78
+ "FR",
79
+ "GA",
80
+ "GB",
81
+ "GD",
82
+ "GE",
83
+ "GF",
84
+ "GG",
85
+ "GH",
86
+ "GI",
87
+ "GL",
88
+ "GM",
89
+ "GN",
90
+ "GP",
91
+ "GQ",
92
+ "GR",
93
+ "GS",
94
+ "GT",
95
+ "GU",
96
+ "GW",
97
+ "GY",
98
+ "HK",
99
+ "HM",
100
+ "HN",
101
+ "HR",
102
+ "HT",
103
+ "HU",
104
+ "ID",
105
+ "IE",
106
+ "IL",
107
+ "IM",
108
+ "IN",
109
+ "IO",
110
+ "IQ",
111
+ "IR",
112
+ "IS",
113
+ "IT",
114
+ "JE",
115
+ "JM",
116
+ "JO",
117
+ "JP",
118
+ "KE",
119
+ "KG",
120
+ "KH",
121
+ "KI",
122
+ "KM",
123
+ "KN",
124
+ "KP",
125
+ "KR",
126
+ "KW",
127
+ "KY",
128
+ "KZ",
129
+ "LA",
130
+ "LB",
131
+ "LC",
132
+ "LI",
133
+ "LK",
134
+ "LR",
135
+ "LS",
136
+ "LT",
137
+ "LU",
138
+ "LV",
139
+ "LY",
140
+ "MA",
141
+ "MC",
142
+ "MD",
143
+ "ME",
144
+ "MF",
145
+ "MG",
146
+ "MH",
147
+ "MK",
148
+ "ML",
149
+ "MM",
150
+ "MN",
151
+ "MO",
152
+ "MP",
153
+ "MQ",
154
+ "MR",
155
+ "MS",
156
+ "MT",
157
+ "MU",
158
+ "MV",
159
+ "MW",
160
+ "MX",
161
+ "MY",
162
+ "MZ",
163
+ "NA",
164
+ "NC",
165
+ "NE",
166
+ "NF",
167
+ "NG",
168
+ "NI",
169
+ "NL",
170
+ "NO",
171
+ "NP",
172
+ "NR",
173
+ "NU",
174
+ "NZ",
175
+ "OM",
176
+ "PA",
177
+ "PE",
178
+ "PF",
179
+ "PG",
180
+ "PH",
181
+ "PK",
182
+ "PL",
183
+ "PM",
184
+ "PN",
185
+ "PR",
186
+ "PS",
187
+ "PT",
188
+ "PW",
189
+ "PY",
190
+ "QA",
191
+ "RE",
192
+ "RO",
193
+ "RS",
194
+ "RU",
195
+ "RW",
196
+ "SA",
197
+ "SB",
198
+ "SC",
199
+ "SD",
200
+ "SE",
201
+ "SG",
202
+ "SH",
203
+ "SI",
204
+ "SJ",
205
+ "SK",
206
+ "SL",
207
+ "SM",
208
+ "SN",
209
+ "SO",
210
+ "SR",
211
+ "SS",
212
+ "ST",
213
+ "SV",
214
+ "SX",
215
+ "SY",
216
+ "SZ",
217
+ "TC",
218
+ "TD",
219
+ "TF",
220
+ "TG",
221
+ "TH",
222
+ "TJ",
223
+ "TK",
224
+ "TL",
225
+ "TM",
226
+ "TN",
227
+ "TO",
228
+ "TR",
229
+ "TT",
230
+ "TV",
231
+ "TW",
232
+ "TZ",
233
+ "UA",
234
+ "UG",
235
+ "UM",
236
+ "US",
237
+ "UY",
238
+ "UZ",
239
+ "VA",
240
+ "VC",
241
+ "VE",
242
+ "VG",
243
+ "VI",
244
+ "VN",
245
+ "VU",
246
+ "WF",
247
+ "WS",
248
+ "YE",
249
+ "YT",
250
+ "ZA",
251
+ "ZM",
252
+ "ZW",
253
+ ];
254
+ //# sourceMappingURL=countries.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countries.mjs","sourceRoot":"","sources":["../../src/helpers/countries.mts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,uDAAuD;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC"}
@@ -1,5 +1,7 @@
1
+ export * from "./addon.mts";
1
2
  export * from "./backup.mts";
2
3
  export * from "./constants.mts";
4
+ export * from "./countries.mts";
3
5
  export * from "./device.mts";
4
6
  export * from "./entity-state.mts";
5
7
  export * from "./features.mts";
@@ -7,6 +9,7 @@ export * from "./fetch.mts";
7
9
  export * from "./fetch/index.mts";
8
10
  export * from "./id-by.mts";
9
11
  export * from "./interfaces.mts";
12
+ export * from "./languages.mts";
10
13
  export * from "./notify.mts";
11
14
  export * from "./registry.mts";
12
15
  export * from "./supported-features.mts";
@@ -1,5 +1,7 @@
1
+ export * from "./addon.mjs";
1
2
  export * from "./backup.mjs";
2
3
  export * from "./constants.mjs";
4
+ export * from "./countries.mjs";
3
5
  export * from "./device.mjs";
4
6
  export * from "./entity-state.mjs";
5
7
  export * from "./features.mjs";
@@ -7,6 +9,7 @@ export * from "./fetch.mjs";
7
9
  export * from "./fetch/index.mjs";
8
10
  export * from "./id-by.mjs";
9
11
  export * from "./interfaces.mjs";
12
+ export * from "./languages.mjs";
10
13
  export * from "./notify.mjs";
11
14
  export * from "./registry.mjs";
12
15
  export * from "./supported-features.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/helpers/index.mts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/helpers/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -2,6 +2,7 @@ import type { RemoveCallback, TBlackHole } from "@digital-alchemy/core";
2
2
  import type EventEmitter from "events";
3
3
  import type { EmptyObject } from "type-fest";
4
4
  import type WS from "ws";
5
+ import type { AddonDetails } from "../index.mts";
5
6
  import type { ALL_DOMAINS, ANY_ENTITY, HassUniqueIdMapping, iCallService, PICK_ENTITY, PICK_FROM_AREA, PICK_FROM_DEVICE, PICK_FROM_FLOOR, PICK_FROM_LABEL, PICK_FROM_PLATFORM, TAreaId, TDeviceId, TFloorId, TLabelId, TPlatformId, TRawDomains, TRawEntityIds, TUniqueId } from "../user.mts";
6
7
  import type { BackupResponse, HomeAssistantBackup } from "./backup.mts";
7
8
  import type { DeviceDetails } from "./device.mts";
@@ -10,6 +11,9 @@ import type { AreaCreate, AreaDetails, ConfigEntry, HassConfig, HassServiceDTO }
10
11
  import type { EditAliasOptions, EditLabelOptions, EntityRegistryItem, FloorCreate, FloorDetails, LabelDefinition, LabelOptions, ManifestItem, ToggleExpose, UpdateCoreOptions, ZoneDetails, ZoneOptions } from "./registry.mts";
11
12
  import type { ALL_SERVICE_DOMAINS, ENTITY_STATE } from "./utility.mts";
12
13
  import type { EntityHistoryDTO, EntityHistoryResult, OnHassEventOptions, SocketSubscribeOptions } from "./websocket.mts";
14
+ export type HassAddonService = {
15
+ list: () => Promise<AddonDetails[]>;
16
+ };
13
17
  export type HassAreaService = {
14
18
  apply: (area: TAreaId, entities: ANY_ENTITY[]) => Promise<{
15
19
  updated: ANY_ENTITY[];
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.mjs","sourceRoot":"","sources":["../../src/helpers/interfaces.mts"],"names":[],"mappings":"AAmMA,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
+ {"version":3,"file":"interfaces.mjs","sourceRoot":"","sources":["../../src/helpers/interfaces.mts"],"names":[],"mappings":"AAwMA,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"}
@@ -0,0 +1,2 @@
1
+ export declare const SUPPORTED_LANGUAGES: string[];
2
+ export type SupportedLanguages = (typeof SUPPORTED_LANGUAGES)[number];
@@ -0,0 +1,67 @@
1
+ export const SUPPORTED_LANGUAGES = [
2
+ "af",
3
+ "ar",
4
+ "bg",
5
+ "bn",
6
+ "bs",
7
+ "ca",
8
+ "cs",
9
+ "cy",
10
+ "da",
11
+ "de",
12
+ "el",
13
+ "en",
14
+ "en-GB",
15
+ "eo",
16
+ "es",
17
+ "es-419",
18
+ "et",
19
+ "eu",
20
+ "fa",
21
+ "fi",
22
+ "fr",
23
+ "fy",
24
+ "ga",
25
+ "gl",
26
+ "gsw",
27
+ "he",
28
+ "hi",
29
+ "hr",
30
+ "hu",
31
+ "hy",
32
+ "id",
33
+ "is",
34
+ "it",
35
+ "ja",
36
+ "ka",
37
+ "ko",
38
+ "lb",
39
+ "lt",
40
+ "lv",
41
+ "mk",
42
+ "ml",
43
+ "nb",
44
+ "nl",
45
+ "nn",
46
+ "pl",
47
+ "pt",
48
+ "pt-BR",
49
+ "ro",
50
+ "ru",
51
+ "sk",
52
+ "sl",
53
+ "sq",
54
+ "sr",
55
+ "sr-Latn",
56
+ "sv",
57
+ "ta",
58
+ "te",
59
+ "th",
60
+ "tr",
61
+ "uk",
62
+ "ur",
63
+ "vi",
64
+ "zh-Hans",
65
+ "zh-Hant",
66
+ ];
67
+ //# sourceMappingURL=languages.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.mjs","sourceRoot":"","sources":["../../src/helpers/languages.mts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,SAAS;CACV,CAAC"}
@@ -40,6 +40,7 @@ declare module "@digital-alchemy/core" {
40
40
  * Make your own
41
41
  */
42
42
  export declare const createTestRunner: () => import("@digital-alchemy/core").iTestRunner<{
43
+ addon: typeof import("../index.mts").AddonService;
43
44
  area: typeof import("../index.mts").Area;
44
45
  backup: typeof import("../index.mts").Backup;
45
46
  call: typeof import("../index.mts").CallProxy;
@@ -116,6 +117,7 @@ export declare const createTestRunner: () => import("@digital-alchemy/core").iTe
116
117
  };
117
118
  }>;
118
119
  export declare const hassTestRunner: import("@digital-alchemy/core").iTestRunner<{
120
+ addon: typeof import("../index.mts").AddonService;
119
121
  area: typeof import("../index.mts").Area;
120
122
  backup: typeof import("../index.mts").Backup;
121
123
  call: typeof import("../index.mts").CallProxy;
@@ -0,0 +1,3 @@
1
+ import type { TServiceParams } from "@digital-alchemy/core";
2
+ import type { HassAddonService } from "../index.mts";
3
+ export declare function AddonService({ hass, logger }: TServiceParams): HassAddonService;
@@ -0,0 +1,14 @@
1
+ export function AddonService({ hass, logger }) {
2
+ async function list() {
3
+ logger.trace({ name: "list" }, "fetching addon list");
4
+ return await hass.socket.sendMessage({
5
+ endpoint: "/addons",
6
+ method: "get",
7
+ type: "supervisor/api",
8
+ });
9
+ }
10
+ return {
11
+ list,
12
+ };
13
+ }
14
+ //# sourceMappingURL=addon.service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addon.service.mjs","sourceRoot":"","sources":["../../src/services/addon.service.mts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAkB;IAC3D,KAAK,UAAU,IAAI;QACjB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC;QACtD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAiB;YACnD,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./addon.service.mts";
1
2
  export * from "./area.service.mts";
2
3
  export * from "./backup.service.mts";
3
4
  export * from "./call-proxy.service.mts";
@@ -1,3 +1,4 @@
1
+ export * from "./addon.service.mjs";
1
2
  export * from "./area.service.mjs";
2
3
  export * from "./backup.service.mjs";
3
4
  export * from "./call-proxy.service.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/services/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/services/index.mts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,57 @@
1
+ import { hassTestRunner } from "../mock_assistant/index.mjs";
2
+ describe("Addon Service", () => {
3
+ afterEach(async () => {
4
+ await hassTestRunner.teardown();
5
+ vi.restoreAllMocks();
6
+ });
7
+ describe("list", () => {
8
+ it("should fetch addon list via supervisor API", async () => {
9
+ expect.assertions(2);
10
+ const mockAddons = [
11
+ {
12
+ advanced: false,
13
+ available: true,
14
+ build: false,
15
+ description: "A test addon",
16
+ detached: false,
17
+ homeassistant: "2024.1.0",
18
+ icon: true,
19
+ logo: false,
20
+ name: "Test Addon",
21
+ repository: "test",
22
+ slug: "test_addon",
23
+ stage: "stable",
24
+ state: "started",
25
+ system_managed: false,
26
+ update_available: false,
27
+ url: "http://test.local",
28
+ version: "1.0.0",
29
+ version_latest: "1.0.0",
30
+ },
31
+ ];
32
+ await hassTestRunner.run(({ lifecycle, hass }) => {
33
+ const spy = vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => mockAddons);
34
+ lifecycle.onReady(async () => {
35
+ const result = await hass.addon.list();
36
+ expect(spy).toHaveBeenCalledWith({
37
+ endpoint: "/addons",
38
+ method: "get",
39
+ type: "supervisor/api",
40
+ });
41
+ expect(result).toEqual(mockAddons);
42
+ });
43
+ });
44
+ });
45
+ it("should return empty array when no addons are available", async () => {
46
+ expect.assertions(1);
47
+ await hassTestRunner.run(({ lifecycle, hass }) => {
48
+ vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => []);
49
+ lifecycle.onReady(async () => {
50
+ const result = await hass.addon.list();
51
+ expect(result).toEqual([]);
52
+ });
53
+ });
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=addon.spec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addon.spec.mjs","sourceRoot":"","sources":["../../src/testing/addon.spec.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;QAChC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,UAAU,GAAmB;gBACjC;oBACE,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,cAAc;oBAC3B,QAAQ,EAAE,KAAK;oBACf,aAAa,EAAE,UAAU;oBACzB,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,MAAM;oBAClB,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,SAAS;oBAChB,cAAc,EAAE,KAAK;oBACrB,gBAAgB,EAAE,KAAK;oBACvB,GAAG,EAAE,mBAAmB;oBACxB,OAAO,EAAE,OAAO;oBAChB,cAAc,EAAE,OAAO;iBACxB;aACF,CAAC;YAEF,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/C,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;gBAE5F,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;oBAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC;wBAC/B,QAAQ,EAAE,SAAS;wBACnB,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,gBAAgB;qBACvB,CAAC,CAAC;oBACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/C,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBAExE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;oBAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "@digital-alchemy/hass",
4
4
  "repository": "https://github.com/Digital-Alchemy-TS/hass",
5
5
  "homepage": "https://docs.digital-alchemy.app",
6
- "version": "25.10.26",
6
+ "version": "25.10.27-beta.0",
7
7
  "description": "Typescript APIs for Home Assistant. Includes rest & websocket bindings",
8
8
  "scripts": {
9
9
  "build": "rm -rf dist/; tsc",
@@ -1,6 +1,7 @@
1
1
  import { CreateLibrary } from "@digital-alchemy/core";
2
2
 
3
3
  import {
4
+ AddonService,
4
5
  Area,
5
6
  Backup,
6
7
  CallProxy,
@@ -150,6 +151,8 @@ export const LIB_HASS = CreateLibrary({
150
151
  // no internal dependency ones first
151
152
  priorityInit: ["internals", "fetch", "socket"],
152
153
  services: {
154
+ addon: AddonService,
155
+
153
156
  /**
154
157
  * home assistant areas
155
158
  */
@@ -0,0 +1,20 @@
1
+ export interface AddonDetails {
2
+ name: string;
3
+ slug: string;
4
+ description: string;
5
+ advanced: boolean;
6
+ stage: string;
7
+ version: string;
8
+ version_latest: string;
9
+ update_available: boolean;
10
+ available: boolean;
11
+ detached: boolean;
12
+ homeassistant: string;
13
+ state: "started" | "stopped" | "error";
14
+ repository: string;
15
+ build: boolean;
16
+ url: string;
17
+ icon: boolean;
18
+ logo: boolean;
19
+ system_managed: boolean;
20
+ }
@@ -0,0 +1,255 @@
1
+ // This is duplicated from a generated file from home assistant core
2
+ // Will only modify this list to match what HA supports
3
+
4
+ export const SUPPORTED_COUNTRIES = [
5
+ "AD",
6
+ "AE",
7
+ "AF",
8
+ "AG",
9
+ "AI",
10
+ "AL",
11
+ "AM",
12
+ "AO",
13
+ "AQ",
14
+ "AR",
15
+ "AS",
16
+ "AT",
17
+ "AU",
18
+ "AW",
19
+ "AX",
20
+ "AZ",
21
+ "BA",
22
+ "BB",
23
+ "BD",
24
+ "BE",
25
+ "BF",
26
+ "BG",
27
+ "BH",
28
+ "BI",
29
+ "BJ",
30
+ "BL",
31
+ "BM",
32
+ "BN",
33
+ "BO",
34
+ "BQ",
35
+ "BR",
36
+ "BS",
37
+ "BT",
38
+ "BV",
39
+ "BW",
40
+ "BY",
41
+ "BZ",
42
+ "CA",
43
+ "CC",
44
+ "CD",
45
+ "CF",
46
+ "CG",
47
+ "CH",
48
+ "CI",
49
+ "CK",
50
+ "CL",
51
+ "CM",
52
+ "CN",
53
+ "CO",
54
+ "CR",
55
+ "CU",
56
+ "CV",
57
+ "CW",
58
+ "CX",
59
+ "CY",
60
+ "CZ",
61
+ "DE",
62
+ "DJ",
63
+ "DK",
64
+ "DM",
65
+ "DO",
66
+ "DZ",
67
+ "EC",
68
+ "EE",
69
+ "EG",
70
+ "EH",
71
+ "ER",
72
+ "ES",
73
+ "ET",
74
+ "FI",
75
+ "FJ",
76
+ "FK",
77
+ "FM",
78
+ "FO",
79
+ "FR",
80
+ "GA",
81
+ "GB",
82
+ "GD",
83
+ "GE",
84
+ "GF",
85
+ "GG",
86
+ "GH",
87
+ "GI",
88
+ "GL",
89
+ "GM",
90
+ "GN",
91
+ "GP",
92
+ "GQ",
93
+ "GR",
94
+ "GS",
95
+ "GT",
96
+ "GU",
97
+ "GW",
98
+ "GY",
99
+ "HK",
100
+ "HM",
101
+ "HN",
102
+ "HR",
103
+ "HT",
104
+ "HU",
105
+ "ID",
106
+ "IE",
107
+ "IL",
108
+ "IM",
109
+ "IN",
110
+ "IO",
111
+ "IQ",
112
+ "IR",
113
+ "IS",
114
+ "IT",
115
+ "JE",
116
+ "JM",
117
+ "JO",
118
+ "JP",
119
+ "KE",
120
+ "KG",
121
+ "KH",
122
+ "KI",
123
+ "KM",
124
+ "KN",
125
+ "KP",
126
+ "KR",
127
+ "KW",
128
+ "KY",
129
+ "KZ",
130
+ "LA",
131
+ "LB",
132
+ "LC",
133
+ "LI",
134
+ "LK",
135
+ "LR",
136
+ "LS",
137
+ "LT",
138
+ "LU",
139
+ "LV",
140
+ "LY",
141
+ "MA",
142
+ "MC",
143
+ "MD",
144
+ "ME",
145
+ "MF",
146
+ "MG",
147
+ "MH",
148
+ "MK",
149
+ "ML",
150
+ "MM",
151
+ "MN",
152
+ "MO",
153
+ "MP",
154
+ "MQ",
155
+ "MR",
156
+ "MS",
157
+ "MT",
158
+ "MU",
159
+ "MV",
160
+ "MW",
161
+ "MX",
162
+ "MY",
163
+ "MZ",
164
+ "NA",
165
+ "NC",
166
+ "NE",
167
+ "NF",
168
+ "NG",
169
+ "NI",
170
+ "NL",
171
+ "NO",
172
+ "NP",
173
+ "NR",
174
+ "NU",
175
+ "NZ",
176
+ "OM",
177
+ "PA",
178
+ "PE",
179
+ "PF",
180
+ "PG",
181
+ "PH",
182
+ "PK",
183
+ "PL",
184
+ "PM",
185
+ "PN",
186
+ "PR",
187
+ "PS",
188
+ "PT",
189
+ "PW",
190
+ "PY",
191
+ "QA",
192
+ "RE",
193
+ "RO",
194
+ "RS",
195
+ "RU",
196
+ "RW",
197
+ "SA",
198
+ "SB",
199
+ "SC",
200
+ "SD",
201
+ "SE",
202
+ "SG",
203
+ "SH",
204
+ "SI",
205
+ "SJ",
206
+ "SK",
207
+ "SL",
208
+ "SM",
209
+ "SN",
210
+ "SO",
211
+ "SR",
212
+ "SS",
213
+ "ST",
214
+ "SV",
215
+ "SX",
216
+ "SY",
217
+ "SZ",
218
+ "TC",
219
+ "TD",
220
+ "TF",
221
+ "TG",
222
+ "TH",
223
+ "TJ",
224
+ "TK",
225
+ "TL",
226
+ "TM",
227
+ "TN",
228
+ "TO",
229
+ "TR",
230
+ "TT",
231
+ "TV",
232
+ "TW",
233
+ "TZ",
234
+ "UA",
235
+ "UG",
236
+ "UM",
237
+ "US",
238
+ "UY",
239
+ "UZ",
240
+ "VA",
241
+ "VC",
242
+ "VE",
243
+ "VG",
244
+ "VI",
245
+ "VN",
246
+ "VU",
247
+ "WF",
248
+ "WS",
249
+ "YE",
250
+ "YT",
251
+ "ZA",
252
+ "ZM",
253
+ "ZW",
254
+ ] as const;
255
+ export type SupportedCountries = (typeof SUPPORTED_COUNTRIES)[number];
@@ -1,5 +1,7 @@
1
+ export * from "./addon.mts";
1
2
  export * from "./backup.mts";
2
3
  export * from "./constants.mts";
4
+ export * from "./countries.mts";
3
5
  export * from "./device.mts";
4
6
  export * from "./entity-state.mts";
5
7
  export * from "./features.mts";
@@ -7,6 +9,7 @@ export * from "./fetch.mts";
7
9
  export * from "./fetch/index.mts";
8
10
  export * from "./id-by.mts";
9
11
  export * from "./interfaces.mts";
12
+ export * from "./languages.mts";
10
13
  export * from "./notify.mts";
11
14
  export * from "./registry.mts";
12
15
  export * from "./supported-features.mts";
@@ -3,6 +3,7 @@ import type EventEmitter from "events";
3
3
  import type { EmptyObject } from "type-fest";
4
4
  import type WS from "ws";
5
5
 
6
+ import type { AddonDetails } from "../index.mts";
6
7
  import type {
7
8
  ALL_DOMAINS,
8
9
  ANY_ENTITY,
@@ -49,6 +50,10 @@ import type {
49
50
  SocketSubscribeOptions,
50
51
  } from "./websocket.mts";
51
52
 
53
+ export type HassAddonService = {
54
+ list: () => Promise<AddonDetails[]>;
55
+ };
56
+
52
57
  export type HassAreaService = {
53
58
  apply: (
54
59
  area: TAreaId,
@@ -0,0 +1,67 @@
1
+ export const SUPPORTED_LANGUAGES = [
2
+ "af",
3
+ "ar",
4
+ "bg",
5
+ "bn",
6
+ "bs",
7
+ "ca",
8
+ "cs",
9
+ "cy",
10
+ "da",
11
+ "de",
12
+ "el",
13
+ "en",
14
+ "en-GB",
15
+ "eo",
16
+ "es",
17
+ "es-419",
18
+ "et",
19
+ "eu",
20
+ "fa",
21
+ "fi",
22
+ "fr",
23
+ "fy",
24
+ "ga",
25
+ "gl",
26
+ "gsw",
27
+ "he",
28
+ "hi",
29
+ "hr",
30
+ "hu",
31
+ "hy",
32
+ "id",
33
+ "is",
34
+ "it",
35
+ "ja",
36
+ "ka",
37
+ "ko",
38
+ "lb",
39
+ "lt",
40
+ "lv",
41
+ "mk",
42
+ "ml",
43
+ "nb",
44
+ "nl",
45
+ "nn",
46
+ "pl",
47
+ "pt",
48
+ "pt-BR",
49
+ "ro",
50
+ "ru",
51
+ "sk",
52
+ "sl",
53
+ "sq",
54
+ "sr",
55
+ "sr-Latn",
56
+ "sv",
57
+ "ta",
58
+ "te",
59
+ "th",
60
+ "tr",
61
+ "uk",
62
+ "ur",
63
+ "vi",
64
+ "zh-Hans",
65
+ "zh-Hant",
66
+ ];
67
+ export type SupportedLanguages = (typeof SUPPORTED_LANGUAGES)[number];
@@ -0,0 +1,18 @@
1
+ import type { TServiceParams } from "@digital-alchemy/core";
2
+
3
+ import type { AddonDetails, HassAddonService } from "../index.mts";
4
+
5
+ export function AddonService({ hass, logger }: TServiceParams): HassAddonService {
6
+ async function list() {
7
+ logger.trace({ name: "list" }, "fetching addon list");
8
+ return await hass.socket.sendMessage<AddonDetails[]>({
9
+ endpoint: "/addons",
10
+ method: "get",
11
+ type: "supervisor/api",
12
+ });
13
+ }
14
+
15
+ return {
16
+ list,
17
+ };
18
+ }
@@ -1,3 +1,4 @@
1
+ export * from "./addon.service.mts";
1
2
  export * from "./area.service.mts";
2
3
  export * from "./backup.service.mts";
3
4
  export * from "./call-proxy.service.mts";
@@ -0,0 +1,63 @@
1
+ import type { AddonDetails } from "../helpers/index.mts";
2
+ import { hassTestRunner } from "../mock_assistant/index.mts";
3
+
4
+ describe("Addon Service", () => {
5
+ afterEach(async () => {
6
+ await hassTestRunner.teardown();
7
+ vi.restoreAllMocks();
8
+ });
9
+
10
+ describe("list", () => {
11
+ it("should fetch addon list via supervisor API", async () => {
12
+ expect.assertions(2);
13
+ const mockAddons: AddonDetails[] = [
14
+ {
15
+ advanced: false,
16
+ available: true,
17
+ build: false,
18
+ description: "A test addon",
19
+ detached: false,
20
+ homeassistant: "2024.1.0",
21
+ icon: true,
22
+ logo: false,
23
+ name: "Test Addon",
24
+ repository: "test",
25
+ slug: "test_addon",
26
+ stage: "stable",
27
+ state: "started",
28
+ system_managed: false,
29
+ update_available: false,
30
+ url: "http://test.local",
31
+ version: "1.0.0",
32
+ version_latest: "1.0.0",
33
+ },
34
+ ];
35
+
36
+ await hassTestRunner.run(({ lifecycle, hass }) => {
37
+ const spy = vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => mockAddons);
38
+
39
+ lifecycle.onReady(async () => {
40
+ const result = await hass.addon.list();
41
+ expect(spy).toHaveBeenCalledWith({
42
+ endpoint: "/addons",
43
+ method: "get",
44
+ type: "supervisor/api",
45
+ });
46
+ expect(result).toEqual(mockAddons);
47
+ });
48
+ });
49
+ });
50
+
51
+ it("should return empty array when no addons are available", async () => {
52
+ expect.assertions(1);
53
+ await hassTestRunner.run(({ lifecycle, hass }) => {
54
+ vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => []);
55
+
56
+ lifecycle.onReady(async () => {
57
+ const result = await hass.addon.list();
58
+ expect(result).toEqual([]);
59
+ });
60
+ });
61
+ });
62
+ });
63
+ });