Skip to content

Commit f6945f0

Browse files
committed
Add events to energy API
1 parent 7ed7503 commit f6945f0

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

packages/api/src/TeslemetryEnergyApi.ts

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { EventEmitter } from "events";
12
import { Teslemetry } from "./Teslemetry.js";
23
import {
34
postApi1EnergySitesByIdBackup,
@@ -9,13 +10,55 @@ import {
910
postApi1EnergySitesByIdOperation,
1011
postApi1EnergySitesByIdStormMode,
1112
getApi1EnergySitesByIdTelemetryHistory,
13+
GetApi1EnergySitesByIdSiteInfoResponse,
14+
GetApi1EnergySitesByIdLiveStatusResponse,
1215
} from "./client/index.js";
1316

14-
export class TeslemetryEnergyApi {
17+
// TypeScript interface for event type safety
18+
export declare interface TeslemetryEnergyApi {
19+
on(
20+
event: "siteInfo",
21+
listener: (data: GetApi1EnergySitesByIdSiteInfoResponse) => void,
22+
): this;
23+
on(
24+
event: "liveStatus",
25+
listener: (data: GetApi1EnergySitesByIdLiveStatusResponse) => void,
26+
): this;
27+
28+
off(
29+
event: "siteInfo",
30+
listener: (data: GetApi1EnergySitesByIdSiteInfoResponse) => void,
31+
): this;
32+
off(
33+
event: "liveStatus",
34+
listener: (data: GetApi1EnergySitesByIdLiveStatusResponse) => void,
35+
): this;
36+
37+
once(
38+
event: "siteInfo",
39+
listener: (data: GetApi1EnergySitesByIdSiteInfoResponse) => void,
40+
): this;
41+
once(
42+
event: "liveStatus",
43+
listener: (data: GetApi1EnergySitesByIdLiveStatusResponse) => void,
44+
): this;
45+
46+
emit(
47+
event: "siteInfo",
48+
data: GetApi1EnergySitesByIdSiteInfoResponse,
49+
): boolean;
50+
emit(
51+
event: "liveStatus",
52+
data: GetApi1EnergySitesByIdLiveStatusResponse,
53+
): boolean;
54+
}
55+
56+
export class TeslemetryEnergyApi extends EventEmitter {
1557
private root: Teslemetry;
1658
public siteId: number;
1759

1860
constructor(root: Teslemetry, siteId: number) {
61+
super();
1962
this.root = root;
2063
this.siteId = siteId;
2164
}
@@ -91,6 +134,7 @@ export class TeslemetryEnergyApi {
91134
path: { id: this.siteId },
92135
client: this.root.client,
93136
});
137+
this.emit("liveStatus", data);
94138
return data;
95139
}
96140

@@ -103,6 +147,7 @@ export class TeslemetryEnergyApi {
103147
path: { id: this.siteId },
104148
client: this.root.client,
105149
});
150+
this.emit("siteInfo", data);
106151
return data;
107152
}
108153

@@ -173,4 +218,18 @@ export class TeslemetryEnergyApi {
173218
});
174219
return data;
175220
}
221+
222+
public onSiteInfo(
223+
callback: (data: GetApi1EnergySitesByIdSiteInfoResponse) => void,
224+
): () => void {
225+
this.on("siteInfo", callback);
226+
return () => this.off("siteInfo", callback);
227+
}
228+
229+
public onLiveStatus(
230+
callback: (data: GetApi1EnergySitesByIdLiveStatusResponse) => void,
231+
): () => void {
232+
this.on("liveStatus", callback);
233+
return () => this.off("liveStatus", callback);
234+
}
176235
}

0 commit comments

Comments
 (0)