-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkidde.ts
62 lines (58 loc) · 1.32 KB
/
kidde.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import config from "./config.ts";
interface KiddeAuth {
access_token: string;
}
const key = await fetch("https://api.homesafe.kidde.com/api/v4/auth/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
email: config.KIDDE_EMAIL,
password: config.KIDDE_PASSWORD,
timezone: "America/Chicago",
}),
})
.then<KiddeAuth>((r) => r.json())
.then((body) => body.access_token);
const authHeaders = {
cookie: `session=${key}`,
};
interface Location {
id: number;
label: string;
}
const locations = await fetch(
"https://api.homesafe.kidde.com/api/v4/location",
{
headers: authHeaders,
}
)
.then<Array<Location>>((r) => r.json())
.then((body) => body.map((l) => l.id));
interface Metric {
value: number;
status: string;
Unit: string;
}
interface Device {
id: number;
label: string;
last_seen: string;
serial_number: string;
co_level: number;
iaq_temperature: Metric;
humidity: Metric;
hpa: Metric;
tvoc: Metric;
iaq: Metric;
co2: Metric;
}
export const getDevices: () => Promise<Array<Device>> = () =>
Promise.all(
locations.map((l) =>
fetch(`https://api.homesafe.kidde.com/api/v4/location/${l}/device`, {
headers: authHeaders,
}).then<Array<Device>>((r) => r.json())
)
).then((results) => results.flat());