@ikalogic/at1000 0.1.13 → 0.1.25
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.
- package/build/at1000-BWX7kovf.cjs +3 -0
- package/build/{at1000-DBnCRa4B.cjs.map → at1000-BWX7kovf.cjs.map} +1 -1
- package/build/{at1000-BLTMMFOe.d.cts → at1000-DIVuASWg.d.cts} +7 -7
- package/build/at1000-DIVuASWg.d.cts.map +1 -0
- package/build/at1000-TQqJHjwy.mjs +3 -0
- package/build/{at1000-DOi600n-.mjs.map → at1000-TQqJHjwy.mjs.map} +1 -1
- package/build/{at1000-tq5RRNjA.d.mts → at1000-TeP9-fyr.d.mts} +7 -7
- package/build/at1000-TeP9-fyr.d.mts.map +1 -0
- package/build/browser.cjs +1 -1
- package/build/browser.cjs.map +1 -1
- package/build/browser.d.cts +1 -1
- package/build/browser.d.cts.map +1 -1
- package/build/browser.d.mts +2 -8
- package/build/browser.d.mts.map +1 -1
- package/build/browser.mjs +1 -1
- package/build/browser.mjs.map +1 -1
- package/build/com.cjs +2 -1
- package/build/com.cjs.map +1 -0
- package/build/com.d.cts +1155 -2
- package/build/com.d.cts.map +1 -0
- package/build/com.d.mts +1155 -2
- package/build/com.d.mts.map +1 -0
- package/build/com.mjs +2 -1
- package/build/com.mjs.map +1 -0
- package/build/{common-SFHWBeL2.cjs → common-Bbc8Sixu.cjs} +1 -1
- package/build/{common-SFHWBeL2.cjs.map → common-Bbc8Sixu.cjs.map} +1 -1
- package/build/{common-B_zag9Mq.mjs → common-D4tBd_j2.mjs} +1 -1
- package/build/{common-B_zag9Mq.mjs.map → common-D4tBd_j2.mjs.map} +1 -1
- package/build/{common-DAOxX-Zx.d.cts → common-DJ7WSo1p.d.mts} +1 -1
- package/build/common-DJ7WSo1p.d.mts.map +1 -0
- package/build/{common-SiysH9tt.d.mts → common-DWQyDOs5.d.cts} +1 -1
- package/build/common-DWQyDOs5.d.cts.map +1 -0
- package/build/gpio.cjs +2 -1
- package/build/gpio.cjs.map +1 -0
- package/build/gpio.d.cts +358 -3
- package/build/gpio.d.cts.map +1 -0
- package/build/gpio.d.mts +358 -4
- package/build/gpio.d.mts.map +1 -0
- package/build/gpio.mjs +2 -1
- package/build/gpio.mjs.map +1 -0
- package/build/hmi.cjs +2 -1
- package/build/hmi.cjs.map +1 -0
- package/build/hmi.d.cts +135 -2
- package/build/hmi.d.cts.map +1 -0
- package/build/hmi.d.mts +135 -2
- package/build/hmi.d.mts.map +1 -0
- package/build/hmi.mjs +2 -1
- package/build/hmi.mjs.map +1 -0
- package/build/management.cjs +2 -1
- package/build/management.cjs.map +1 -0
- package/build/management.d.cts +283 -2
- package/build/management.d.cts.map +1 -0
- package/build/management.d.mts +283 -2
- package/build/management.d.mts.map +1 -0
- package/build/management.mjs +2 -1
- package/build/management.mjs.map +1 -0
- package/build/node.cjs +1 -1
- package/build/node.cjs.map +1 -1
- package/build/node.d.cts +1 -1
- package/build/node.d.cts.map +1 -1
- package/build/node.d.mts +2 -8
- package/build/node.d.mts.map +1 -1
- package/build/node.mjs +1 -1
- package/build/node.mjs.map +1 -1
- package/build/power.cjs +2 -1
- package/build/power.cjs.map +1 -0
- package/build/power.d.cts +343 -3
- package/build/power.d.cts.map +1 -0
- package/build/power.d.mts +343 -4
- package/build/power.d.mts.map +1 -0
- package/build/power.mjs +2 -1
- package/build/power.mjs.map +1 -0
- package/build/relays.cjs +2 -1
- package/build/relays.cjs.map +1 -0
- package/build/relays.d.cts +80 -2
- package/build/relays.d.cts.map +1 -0
- package/build/relays.d.mts +80 -2
- package/build/relays.d.mts.map +1 -0
- package/build/relays.mjs +2 -1
- package/build/relays.mjs.map +1 -0
- package/package.json +11 -7
- package/build/at1000-BLTMMFOe.d.cts.map +0 -1
- package/build/at1000-DBnCRa4B.cjs +0 -3
- package/build/at1000-DOi600n-.mjs +0 -3
- package/build/at1000-tq5RRNjA.d.mts.map +0 -1
- package/build/com-9S4BYQCi.mjs +0 -2
- package/build/com-9S4BYQCi.mjs.map +0 -1
- package/build/com-C7d5yOIK.cjs +0 -2
- package/build/com-C7d5yOIK.cjs.map +0 -1
- package/build/com-C9-fdGPZ.d.mts +0 -1155
- package/build/com-C9-fdGPZ.d.mts.map +0 -1
- package/build/com-DFB9TPdI.d.cts +0 -1155
- package/build/com-DFB9TPdI.d.cts.map +0 -1
- package/build/common-DAOxX-Zx.d.cts.map +0 -1
- package/build/common-SiysH9tt.d.mts.map +0 -1
- package/build/gpio-BWNwiLs7.cjs +0 -2
- package/build/gpio-BWNwiLs7.cjs.map +0 -1
- package/build/gpio-DQwp2EAk.d.mts +0 -358
- package/build/gpio-DQwp2EAk.d.mts.map +0 -1
- package/build/gpio-DUqCYSA4.d.cts +0 -358
- package/build/gpio-DUqCYSA4.d.cts.map +0 -1
- package/build/gpio-lBesVV2E.mjs +0 -2
- package/build/gpio-lBesVV2E.mjs.map +0 -1
- package/build/hmi-BCMtWRQH.d.mts +0 -135
- package/build/hmi-BCMtWRQH.d.mts.map +0 -1
- package/build/hmi-CGDU48qM.d.cts +0 -135
- package/build/hmi-CGDU48qM.d.cts.map +0 -1
- package/build/hmi-CTx2jfxU.mjs +0 -2
- package/build/hmi-CTx2jfxU.mjs.map +0 -1
- package/build/hmi-CnTa8kMx.cjs +0 -2
- package/build/hmi-CnTa8kMx.cjs.map +0 -1
- package/build/management-BMEMu2Kx.mjs +0 -2
- package/build/management-BMEMu2Kx.mjs.map +0 -1
- package/build/management-CCwBNLm_.d.cts +0 -240
- package/build/management-CCwBNLm_.d.cts.map +0 -1
- package/build/management-Cw05hjbG.d.mts +0 -240
- package/build/management-Cw05hjbG.d.mts.map +0 -1
- package/build/management-Lna6AzGK.cjs +0 -2
- package/build/management-Lna6AzGK.cjs.map +0 -1
- package/build/power-BkJtVbiA.d.cts +0 -343
- package/build/power-BkJtVbiA.d.cts.map +0 -1
- package/build/power-Bz5S5GGr.mjs +0 -2
- package/build/power-Bz5S5GGr.mjs.map +0 -1
- package/build/power-C7KM2zvR.cjs +0 -2
- package/build/power-C7KM2zvR.cjs.map +0 -1
- package/build/power-nWlY0xFN.d.mts +0 -343
- package/build/power-nWlY0xFN.d.mts.map +0 -1
- package/build/relays-BK2uL5i_.cjs +0 -2
- package/build/relays-BK2uL5i_.cjs.map +0 -1
- package/build/relays-Bn8LBgWl.d.cts +0 -79
- package/build/relays-Bn8LBgWl.d.cts.map +0 -1
- package/build/relays-CkBk7SOg.d.mts +0 -79
- package/build/relays-CkBk7SOg.d.mts.map +0 -1
- package/build/relays-CqglfFwF.mjs +0 -2
- package/build/relays-CqglfFwF.mjs.map +0 -1
package/build/hmi.d.mts
CHANGED
|
@@ -1,2 +1,135 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { UpFetch } from "up-fetch";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
|
|
4
|
+
//#region src/api/hmi.d.ts
|
|
5
|
+
declare const screenText: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 1024, undefined>]>;
|
|
6
|
+
type ScreenText = v.InferOutput<typeof screenText>;
|
|
7
|
+
declare const color: v.ObjectSchema<{
|
|
8
|
+
readonly text: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.LengthAction<string, 7, undefined>, v.HexColorAction<string, undefined>]>, undefined>;
|
|
9
|
+
readonly progress: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.LengthAction<string, 7, undefined>, v.HexColorAction<string, undefined>]>, undefined>;
|
|
10
|
+
readonly background: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.LengthAction<string, 7, undefined>, v.HexColorAction<string, undefined>]>, undefined>;
|
|
11
|
+
}, undefined>;
|
|
12
|
+
type Color = v.InferOutput<typeof color>;
|
|
13
|
+
declare const progressValue: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 100, undefined>]>;
|
|
14
|
+
type ProgressValue = v.InferOutput<typeof progressValue>;
|
|
15
|
+
declare const progress: v.ObjectSchema<{
|
|
16
|
+
readonly progress: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 100, undefined>]>;
|
|
17
|
+
}, undefined>;
|
|
18
|
+
type Progress = v.InferOutput<typeof progress>;
|
|
19
|
+
declare const playbackConfiguration: v.ObjectSchema<{
|
|
20
|
+
readonly sound_id: v.PicklistSchema<["success", "warning", "failure", "notification_1", "notification_2", "imperial_march"], undefined>;
|
|
21
|
+
readonly volume: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 100, undefined>]>;
|
|
22
|
+
}, undefined>;
|
|
23
|
+
type PlaybackConfiguration = v.InferOutput<typeof playbackConfiguration>;
|
|
24
|
+
declare const knobEvent: Omit<v.ObjectSchema<{
|
|
25
|
+
readonly button_pressed: v.BooleanSchema<undefined>;
|
|
26
|
+
readonly button_held: v.BooleanSchema<undefined>;
|
|
27
|
+
readonly rotation_delta: v.NumberSchema<undefined>;
|
|
28
|
+
}, undefined>, "~standard" | "~run" | "~types" | "entries"> & {
|
|
29
|
+
readonly entries: Omit<{
|
|
30
|
+
readonly button_pressed: v.BooleanSchema<undefined>;
|
|
31
|
+
readonly button_held: v.BooleanSchema<undefined>;
|
|
32
|
+
readonly rotation_delta: v.NumberSchema<undefined>;
|
|
33
|
+
}, "button_held">;
|
|
34
|
+
readonly "~standard": v.StandardProps<{
|
|
35
|
+
button_pressed: boolean;
|
|
36
|
+
rotation_delta: number;
|
|
37
|
+
}, {
|
|
38
|
+
button_pressed: boolean;
|
|
39
|
+
rotation_delta: number;
|
|
40
|
+
}>;
|
|
41
|
+
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
42
|
+
button_pressed: boolean;
|
|
43
|
+
rotation_delta: number;
|
|
44
|
+
}, v.NumberIssue | v.BooleanIssue | v.ObjectIssue>;
|
|
45
|
+
readonly "~types"?: {
|
|
46
|
+
readonly input: {
|
|
47
|
+
button_pressed: boolean;
|
|
48
|
+
rotation_delta: number;
|
|
49
|
+
};
|
|
50
|
+
readonly output: {
|
|
51
|
+
button_pressed: boolean;
|
|
52
|
+
rotation_delta: number;
|
|
53
|
+
};
|
|
54
|
+
readonly issue: v.NumberIssue | v.BooleanIssue | v.ObjectIssue;
|
|
55
|
+
} | undefined;
|
|
56
|
+
};
|
|
57
|
+
type KnobEvent = v.InferOutput<typeof knobEvent>;
|
|
58
|
+
/** @hideconstructor */
|
|
59
|
+
declare class HmiApi {
|
|
60
|
+
private readonly fetch;
|
|
61
|
+
constructor(fetch: UpFetch);
|
|
62
|
+
/**
|
|
63
|
+
* Resets the HMI.
|
|
64
|
+
*/
|
|
65
|
+
reset(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Access the screen API.
|
|
68
|
+
* @returns The screen instance.
|
|
69
|
+
*/
|
|
70
|
+
screen(): Screen;
|
|
71
|
+
/**
|
|
72
|
+
* Access the audio API.
|
|
73
|
+
* @returns The audio instance.
|
|
74
|
+
*/
|
|
75
|
+
audio(): Audio;
|
|
76
|
+
/**
|
|
77
|
+
* Access the knob API.
|
|
78
|
+
* @returns The knob instance.
|
|
79
|
+
*/
|
|
80
|
+
knob(): Knob;
|
|
81
|
+
}
|
|
82
|
+
/** @hideconstructor */
|
|
83
|
+
declare class Screen {
|
|
84
|
+
private readonly fetch;
|
|
85
|
+
constructor(fetch: UpFetch);
|
|
86
|
+
/**
|
|
87
|
+
* Prints text to the screen.
|
|
88
|
+
* @param data The text to print.
|
|
89
|
+
* @returns The printed text.
|
|
90
|
+
*/
|
|
91
|
+
print(data: ScreenText): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Sets the screen colors.
|
|
94
|
+
* @param colors The colors to set.
|
|
95
|
+
* @returns The updated colors.
|
|
96
|
+
*/
|
|
97
|
+
colors(colors: Color): Promise<Color>;
|
|
98
|
+
/**
|
|
99
|
+
* Sets the screen progress.
|
|
100
|
+
* @param data The progress value to set.
|
|
101
|
+
* @returns The updated progress.
|
|
102
|
+
*/
|
|
103
|
+
progress(data: ProgressValue): Promise<Progress>;
|
|
104
|
+
/**
|
|
105
|
+
* Clears the screen.
|
|
106
|
+
*/
|
|
107
|
+
clear(): Promise<void>;
|
|
108
|
+
}
|
|
109
|
+
/** @hideconstructor */
|
|
110
|
+
declare class Audio {
|
|
111
|
+
private readonly fetch;
|
|
112
|
+
constructor(fetch: UpFetch);
|
|
113
|
+
/**
|
|
114
|
+
* Plays a sound.
|
|
115
|
+
* @param config The configuration (sound_id, volume).
|
|
116
|
+
* @returns The play configuration.
|
|
117
|
+
*/
|
|
118
|
+
play(config: PlaybackConfiguration): Promise<PlaybackConfiguration>;
|
|
119
|
+
}
|
|
120
|
+
/** @hideconstructor */
|
|
121
|
+
declare class Knob {
|
|
122
|
+
private readonly fetch;
|
|
123
|
+
constructor(fetch: UpFetch);
|
|
124
|
+
private get_knob_event;
|
|
125
|
+
is_button_pressed: () => Promise<boolean>;
|
|
126
|
+
/**
|
|
127
|
+
* Waits for a knob event and returns it.
|
|
128
|
+
* @param timeout_ms The timeout in milliseconds.
|
|
129
|
+
* @returns The knob event or null if the timeout was reached.
|
|
130
|
+
*/
|
|
131
|
+
wait_event(timeout_ms: number): Promise<KnobEvent | null>;
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { Audio, Color, HmiApi, Knob, KnobEvent, PlaybackConfiguration, Progress, ProgressValue, Screen, ScreenText };
|
|
135
|
+
//# sourceMappingURL=hmi.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmi.d.mts","names":[],"sources":["../src/api/hmi.ts"],"mappings":";;;;cAGM,UAAA,EAAU,CAAA,CAAA,cAAA,WAAA,CAAA,CAAA,YAAA,aAAA,CAAA,CAAA,eAAA;AAAA,KACJ,UAAA,GAAa,CAAA,CAAE,WAAA,QAAmB,UAAA;AAAA,cAMxC,KAAA,EAAK,CAAA,CAAA,YAAA;EAAA;;;;KAKC,KAAA,GAAQ,CAAA,CAAE,WAAA,QAAmB,KAAA;AAAA,cAEnC,aAAA,EAAa,CAAA,CAAA,cAAA,WAAA,CAAA,CAAA,YAAA,aAAA,CAAA,CAAA,cAAA,wBAAA,CAAA,CAAA,cAAA;AAAA,KACP,aAAA,GAAgB,CAAA,CAAE,WAAA,QAAmB,aAAA;AAAA,cAC3C,QAAA,EAAQ,CAAA,CAAA,YAAA;EAAA;;KACF,QAAA,GAAW,CAAA,CAAE,WAAA,QAAmB,QAAA;AAAA,cAEtC,qBAAA,EAAqB,CAAA,CAAA,YAAA;EAAA;;;KAOf,qBAAA,GAAwB,CAAA,CAAE,WAAA,QAAmB,qBAAA;AAAA,cAOnD,SAAA,EAAS,IAAA,CAAA,CAAA,CAAA,YAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KACH,SAAA,GAAY,CAAA,CAAE,WAAA,QAAmB,SAAA;;cAGhC,MAAA;EAAA,iBACkB,KAAA;cAAA,KAAA,EAAO,OAAA;;;;EAKpC,KAAA,CAAA,GAAS,OAAA;;;;;EAQT,MAAA,CAAA,GAAU,MAAA;;;;;EAQV,KAAA,CAAA,GAAS,KAAA;;;;;EAQT,IAAA,CAAA,GAAQ,IAAA;AAAA;;cAMG,MAAA;EAAA,iBACkB,KAAA;cAAA,KAAA,EAAO,OAAA;;;;;AA9DtC;EAqEQ,KAAA,CAAM,IAAA,EAAM,UAAA,GAAa,OAAA;;;;;;EAc/B,MAAA,CAAO,MAAA,EAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA;EAnFa;AAAE;;;;EAgGxC,QAAA,CAAS,IAAA,EAAM,aAAA,GAAgB,OAAA,CAAQ,QAAA;EA9F5B;;;EAgHjB,KAAA,CAAA,GAAS,OAAA;AAAA;;cAME,KAAA;EAAA,iBACkB,KAAA;cAAA,KAAA,EAAO,OAAA;EAvHnB;;;;;EA8HX,IAAA,CAAK,MAAA,EAAQ,qBAAA,GAAwB,OAAA,CAAQ,qBAAA;AAAA;;cAUxC,IAAA;EAAA,iBACkB,KAAA;cAAA,KAAA,EAAO,OAAA;EAAA,QAE5B,cAAA;EAGR,iBAAA,QAAiB,OAAA;EA7I2C;AAAE;;;;EAoJxD,UAAA,CAAW,UAAA,WAAqB,OAAA,CAAQ,SAAA;AAAA"}
|
package/build/hmi.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{i
|
|
1
|
+
import*as e from"valibot";const t=e.pipe(e.string(),e.maxLength(1024)),n=e.object({text:t}),r=e.optional(e.pipe(e.string(),e.length(7),e.hexColor())),i=e.object({text:r,progress:r,background:r}),a=e.pipe(e.number(),e.minValue(0),e.maxValue(100)),o=e.object({progress:a}),s=e.object({sound_id:e.picklist([`success`,`warning`,`failure`,`notification_1`,`notification_2`,`imperial_march`]),volume:e.pipe(e.number(),e.minValue(0),e.maxValue(100))}),c=e.object({button_pressed:e.boolean(),button_held:e.boolean(),rotation_delta:e.number()});e.omit(c,[`button_held`]);var l=class{constructor(e){this.fetch=e}reset(){return this.fetch(`/hmi/reset`,{method:`POST`,parseResponse:()=>{}})}screen(){return new u(this.fetch)}audio(){return new d(this.fetch)}knob(){return new f(this.fetch)}},u=class{constructor(e){this.fetch=e}async print(t){return(await this.fetch(`/hmi/screen/text`,{method:`POST`,body:e.parse(n,{text:t}),schema:n})).text}colors(t){return this.fetch(`/hmi/screen/colors`,{method:`PATCH`,body:e.parse(i,t),schema:i})}async progress(t){return t==0?await this.fetch(`/hmi/screen/progress`,{method:`DELETE`,parseResponse:()=>({progress:0})}):this.fetch(`/hmi/screen/progress`,{method:`PUT`,body:e.parse(o,{progress:t}),schema:o})}clear(){return this.fetch(`/hmi/screen/clear`,{method:`POST`,parseResponse:()=>{}})}},d=class{constructor(e){this.fetch=e}async play(t){return this.fetch(`/hmi/speaker/play`,{method:`POST`,body:e.parse(s,t),schema:s})}},f=class{constructor(e){this.fetch=e}get_knob_event=()=>this.fetch(`/hmi/knob/get_knob_event`,{schema:c});is_button_pressed=async()=>(await this.get_knob_event()).button_held;async wait_event(e){await this.get_knob_event();let t=0,n=Math.min(50,e/10),r=Date.now();for(;Date.now()-r<e;){let e=await this.get_knob_event();if(t+=e.rotation_delta,e.button_pressed||Math.abs(t)>=4)return{button_pressed:e.button_pressed,rotation_delta:Math.sign(t)};await new Promise(e=>setTimeout(e,n))}return null}};export{d as Audio,l as HmiApi,f as Knob,u as Screen};
|
|
2
|
+
//# sourceMappingURL=hmi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmi.mjs","names":[],"sources":["../src/api/hmi.ts"],"sourcesContent":["import type { UpFetch } from 'up-fetch';\nimport * as v from 'valibot';\n\nconst screenText = v.pipe(v.string(), v.maxLength(1024));\nexport type ScreenText = v.InferOutput<typeof screenText>;\n\nconst text = v.object({ text: screenText });\ntype Text = v.InferOutput<typeof text>;\n\nconst optionalHexColor = v.optional(v.pipe(v.string(), v.length(7), v.hexColor()));\nconst color = v.object({\n text: optionalHexColor,\n progress: optionalHexColor,\n background: optionalHexColor,\n});\nexport type Color = v.InferOutput<typeof color>;\n\nconst progressValue = v.pipe(v.number(), v.minValue(0), v.maxValue(100));\nexport type ProgressValue = v.InferOutput<typeof progressValue>;\nconst progress = v.object({ progress: progressValue });\nexport type Progress = v.InferOutput<typeof progress>;\n\nconst playbackConfiguration = v.object({\n sound_id: v.picklist(\n ['success', 'warning', 'failure', 'notification_1', 'notification_2',\n 'imperial_march'] as const,\n ),\n volume: v.pipe(v.number(), v.minValue(0), v.maxValue(100)),\n});\nexport type PlaybackConfiguration = v.InferOutput<typeof playbackConfiguration>;\n\nconst internalKnobEvent = v.object({\n button_pressed: v.boolean(),\n button_held: v.boolean(),\n rotation_delta: v.number(),\n});\nconst knobEvent = v.omit(internalKnobEvent, ['button_held']);\nexport type KnobEvent = v.InferOutput<typeof knobEvent>;\n\n/** @hideconstructor */\nexport class HmiApi {\n constructor(private readonly fetch: UpFetch) {}\n\n /**\n * Resets the HMI.\n */\n reset(): Promise<void> {\n return this.fetch('/hmi/reset', { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Access the screen API.\n * @returns The screen instance.\n */\n screen(): Screen {\n return new Screen(this.fetch);\n }\n\n /**\n * Access the audio API.\n * @returns The audio instance.\n */\n audio(): Audio {\n return new Audio(this.fetch);\n }\n\n /**\n * Access the knob API.\n * @returns The knob instance.\n */\n knob(): Knob {\n return new Knob(this.fetch);\n }\n}\n\n/** @hideconstructor */\nexport class Screen {\n constructor(private readonly fetch: UpFetch) {}\n\n /**\n * Prints text to the screen.\n * @param data The text to print.\n * @returns The printed text.\n */\n async print(data: ScreenText): Promise<string> {\n return (await this.fetch('/hmi/screen/text', {\n method: 'POST',\n body: v.parse(text, { text: data } satisfies Text),\n schema: text,\n }))\n .text;\n }\n\n /**\n * Sets the screen colors.\n * @param colors The colors to set.\n * @returns The updated colors.\n */\n colors(colors: Color): Promise<Color> {\n return this.fetch('/hmi/screen/colors', {\n method: 'PATCH',\n body: v.parse(color, colors satisfies Color),\n schema: color,\n });\n }\n\n /**\n * Sets the screen progress.\n * @param data The progress value to set.\n * @returns The updated progress.\n */\n async progress(data: ProgressValue): Promise<Progress> {\n if (data == 0) {\n return await this.fetch('/hmi/screen/progress', {\n method: 'DELETE',\n parseResponse: () => ({ progress: 0 }),\n });\n }\n\n return this.fetch('/hmi/screen/progress', {\n method: 'PUT',\n body: v.parse(progress, { progress: data } satisfies Progress),\n schema: progress,\n });\n }\n\n /**\n * Clears the screen.\n */\n clear(): Promise<void> {\n return this.fetch('/hmi/screen/clear', { method: 'POST', parseResponse: () => {} });\n }\n}\n\n/** @hideconstructor */\nexport class Audio {\n constructor(private readonly fetch: UpFetch) {}\n\n /**\n * Plays a sound.\n * @param config The configuration (sound_id, volume).\n * @returns The play configuration.\n */\n async play(config: PlaybackConfiguration): Promise<PlaybackConfiguration> {\n return this.fetch('/hmi/speaker/play', {\n method: 'POST',\n body: v.parse(playbackConfiguration, config),\n schema: playbackConfiguration,\n });\n }\n}\n\n/** @hideconstructor */\nexport class Knob {\n constructor(private readonly fetch: UpFetch) {}\n\n private get_knob_event = () =>\n this.fetch('/hmi/knob/get_knob_event', { schema: internalKnobEvent });\n\n is_button_pressed = async () => (await this.get_knob_event()).button_held;\n\n /**\n * Waits for a knob event and returns it.\n * @param timeout_ms The timeout in milliseconds.\n * @returns The knob event or null if the timeout was reached.\n */\n async wait_event(timeout_ms: number): Promise<KnobEvent | null> {\n await this.get_knob_event(); // Discard any previous events\n let delta = 0;\n\n const interval = Math.min(50, timeout_ms / 10);\n\n const startTime = Date.now();\n while (Date.now() - startTime < timeout_ms) {\n const knobEvent = await this.get_knob_event();\n delta += knobEvent.rotation_delta;\n\n if (knobEvent.button_pressed || Math.abs(delta) >= 4) {\n return { button_pressed: knobEvent.button_pressed, rotation_delta: Math.sign(delta) };\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n\n return null;\n }\n}\n"],"mappings":"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"}
|
package/build/management.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
const e=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`);require(`up-fetch`);let t=require(`valibot`);t=e.t(t);let n=function(e){return e.Can=`can`,e.Rs232=`rs232`,e.Rs485=`rs485`,e.I2c=`i2c`,e.Spi=`spi`,e.Uart=`uart`,e}({});const r=t.enum(n),i=t.object({min:t.pipe(t.number(),t.minValue(-24),t.maxValue(24)),max:t.pipe(t.number(),t.minValue(-24),t.maxValue(24))}),a=t.object({max:t.number()}),o=t.object({count:t.pipe(t.number(),t.minValue(1)),input_voltage:i,output_voltage:i}),s=t.object({count:t.pipe(t.number(),t.minValue(0)),max_current:t.number(),max_voltage:t.number(),on_resistance:t.pipe(t.number(),t.minValue(0))}),c=t.object({type:t.picklist([`3.0`,`2.0`]),count:t.pipe(t.number(),t.minValue(1))}),l=t.object({type:t.picklist([`1000BASE-T`,`100BASE-T`,`10BASE-T`]),count:t.pipe(t.number(),t.minValue(1))}),u=t.object({type:r,count:t.pipe(t.number(),t.minValue(1))}),d=t.object({count:t.pipe(t.number(),t.minValue(1)),output_voltage:i,current:a}),f=t.object({type:t.picklist([`low_precision`,`high_precision`]),source:t.string(),resolution:t.pipe(t.number(),t.minValue(0))}),p=t.object({width:t.pipe(t.number(),t.minValue(1)),height:t.pipe(t.number(),t.minValue(1))}),m=t.object({type:t.string(),size:p}),h=t.object({count:t.pipe(t.number(),t.minValue(0)),type:t.string()}),g=t.object({count:t.pipe(t.number(),t.minValue(0)),type:t.string()}),_=t.object({display:m,input:h,speaker:g}),v=t.object({io:o,relays:s,usb_ports:t.array(c),ethernet:t.array(l),communication:t.array(u),power_supply:d,current_measurement:t.array(f),hmi:_}),y=t.object({model:t.string(),serial_number:t.string(),firmware_version:t.string(),firmware_commit:t.string(),disk_used:t.number(),disk_total:t.number(),docker_used:t.number(),capabilities:v}),b=t.object({name:t.string(),path:t.string(),container_id:t.string(),image:t.string()});t.object({name:t.string(),image:t.string()});const x=t.object({message:t.string(),bundle:t.string()}),S=t.object({state:t.picklist([`idle`,`installing`,`failed`]),progress:t.number(),message:t.string(),error:t.string()}),C=t.object({message:t.string()});var w=class{constructor(e){this.fetch=e}info(){return this.fetch(`/management/info`,{schema:y})}async datetime(){let e=await this.fetch(`/management/time`,{schema:t.object({epoch_seconds:t.number()})});return new Date(e.epoch_seconds*1e3)}setDatetime(e){return this.fetch(`/management/time`,{method:`POST`,body:{epoch_seconds:Math.floor(e.getTime()/1e3)},parseResponse:()=>{}})}getProjects(){return this.fetch(`/management/projects`,{schema:t.array(b)})}createProject(e){return this.fetch(`/management/projects`,{method:`POST`,body:e,schema:b})}updateProject(e,t){return this.fetch(`/management/projects/${e}`,{method:`PATCH`,body:t,schema:b})}runProject(e){return this.fetch(`/management/projects/${e}/run`,{method:`POST`})}stopProject(e){return this.fetch(`/management/projects/${e}/stop`,{method:`POST`})}deleteProject(e){return this.fetch(`/management/projects/${e}`,{method:`DELETE`})}upload_update(e,t=`bundle.raucb`){return this.fetch(`/management/update`,{method:`POST`,body:e,headers:{"Content-Type":`application/octet-stream`,"X-Bundle-Filename":t},serializeBody:e=>e,timeout:6e5,schema:x})}update_status(){return this.fetch(`/management/update/status`,{schema:S})}reboot(){return this.fetch(`/management/reboot`,{method:`POST`,schema:C})}};exports.CommunicationInterfaceType=n,exports.ManagementApi=w;
|
|
2
|
+
//# sourceMappingURL=management.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.cjs","names":["v"],"sources":["../src/api/management.ts"],"sourcesContent":["import { type UpFetch } from 'up-fetch';\nimport * as v from 'valibot';\n\nexport enum CommunicationInterfaceType {\n Can = 'can',\n Rs232 = 'rs232',\n Rs485 = 'rs485',\n I2c = 'i2c',\n Spi = 'spi',\n Uart = 'uart',\n}\nconst communicationInterface = v.enum(CommunicationInterfaceType);\n\nconst voltageRange = v.object({\n min: v.pipe(v.number(), v.minValue(-24), v.maxValue(24)),\n max: v.pipe(v.number(), v.minValue(-24), v.maxValue(24)),\n});\n\nconst currentRange = v.object({ max: v.number() });\n\nconst ioCapabilities = v.object({\n count: v.pipe(v.number(), v.minValue(1)),\n input_voltage: voltageRange,\n output_voltage: voltageRange,\n});\n\nconst relaysCapabilities = v.object({\n count: v.pipe(v.number(), v.minValue(0)),\n max_current: v.number(),\n max_voltage: v.number(),\n on_resistance: v.pipe(v.number(), v.minValue(0)),\n});\n\nconst usbCapability = v.object({\n type: v.picklist(['3.0', '2.0']),\n count: v.pipe(v.number(), v.minValue(1)),\n});\n\nconst ethernetCapability = v.object({\n type: v.picklist(['1000BASE-T', '100BASE-T', '10BASE-T']),\n count: v.pipe(v.number(), v.minValue(1)),\n});\n\nconst communicationCapability = v.object({\n type: communicationInterface,\n count: v.pipe(v.number(), v.minValue(1)),\n});\n\nconst powerSupplyCapabilities = v.object({\n count: v.pipe(v.number(), v.minValue(1)),\n output_voltage: voltageRange,\n current: currentRange,\n});\n\nconst currentMeasurementCapabilities = v.object({\n type: v.picklist(['low_precision', 'high_precision']),\n source: v.string(),\n resolution: v.pipe(v.number(), v.minValue(0)),\n});\n\nconst screenSize = v.object({\n width: v.pipe(v.number(), v.minValue(1)),\n height: v.pipe(v.number(), v.minValue(1)),\n});\n\nconst displayCapabilities = v.object({ type: v.string(), size: screenSize });\n\nconst inputCapabilities = v.object({ count: v.pipe(v.number(), v.minValue(0)), type: v.string() });\n\nconst audioCapabilities = v.object({ count: v.pipe(v.number(), v.minValue(0)), type: v.string() });\n\nconst hmiCapabilities = v.object({\n display: displayCapabilities,\n input: inputCapabilities,\n speaker: audioCapabilities,\n});\n\nconst capabilities = v.object({\n io: ioCapabilities,\n relays: relaysCapabilities,\n usb_ports: v.array(usbCapability),\n ethernet: v.array(ethernetCapability),\n communication: v.array(communicationCapability),\n power_supply: powerSupplyCapabilities,\n current_measurement: v.array(currentMeasurementCapabilities),\n hmi: hmiCapabilities,\n});\n\nconst info = v.object({\n model: v.string(),\n serial_number: v.string(),\n firmware_version: v.string(),\n firmware_commit: v.string(),\n disk_used: v.number(),\n disk_total: v.number(),\n docker_used: v.number(),\n capabilities: capabilities,\n});\nexport type Information = v.InferOutput<typeof info>;\n\nconst project = v.object({\n name: v.string(),\n path: v.string(),\n container_id: v.string(),\n image: v.string(),\n});\ntype Project = v.InferOutput<typeof project>;\n\nconst createProject = v.object({ name: v.string(), image: v.string() });\ntype CreateProject = v.InferOutput<typeof createProject>;\n\nconst updateResponse = v.object({ message: v.string(), bundle: v.string() });\nexport type UpdateResponse = v.InferOutput<typeof updateResponse>;\n\nconst updateStatus = v.object({\n state: v.picklist(['idle', 'installing', 'failed']),\n progress: v.number(),\n message: v.string(),\n error: v.string(),\n});\nexport type UpdateStatus = v.InferOutput<typeof updateStatus>;\n\nconst rebootResponse = v.object({ message: v.string() });\nexport type RebootResponse = v.InferOutput<typeof rebootResponse>;\n\n/** @hideconstructor */\nexport class ManagementApi {\n constructor(private readonly fetch: UpFetch) {}\n\n /**\n * Gets device information and capabilities.\n * @returns The device information.\n */\n info() {\n return this.fetch('/management/info', { schema: info });\n }\n\n /**\n * Gets the current date and time of the device.\n * @returns The current date and time.\n */\n async datetime(): Promise<Date> {\n const time = await this.fetch('/management/time', {\n schema: v.object({ epoch_seconds: v.number() }),\n });\n return new Date(time.epoch_seconds * 1000);\n }\n\n /**\n * Sets the date and time of the device.\n *\n * This will only work if the device is not connected to the internet.\n *\n * @param datetime The date and time to set.\n */\n setDatetime(datetime: Date): Promise<void> {\n return this.fetch('/management/time', {\n method: 'POST',\n body: { epoch_seconds: Math.floor(datetime.getTime() / 1000) },\n parseResponse: () => {},\n });\n }\n\n /**\n * Gets a list of all projects.\n * @returns An array of projects.\n */\n getProjects() {\n return this.fetch('/management/projects', { schema: v.array(project) });\n }\n\n /**\n * Creates a new project.\n * @param data The project creation data.\n */\n createProject(newProject: CreateProject) {\n return this.fetch('/management/projects', {\n method: 'POST',\n body: newProject,\n schema: project,\n });\n }\n\n /**\n * Patches an existing project.\n * @param projectId The ID or name of the project to patch.\n * @param data The data to patch the project with.\n */\n updateProject(projectId: string, data: Project) {\n return this.fetch(`/management/projects/${projectId}`, {\n method: 'PATCH',\n body: data,\n schema: project,\n });\n }\n\n /**\n * Runs a project.\n * @param projectId The ID or name of the project to run.\n */\n runProject(projectId: string) {\n return this.fetch(`/management/projects/${projectId}/run`, { method: 'POST' });\n }\n\n /**\n * Stops a running project.\n * @param projectId The ID or name of the project to stop.\n */\n stopProject(projectId: string) {\n return this.fetch(`/management/projects/${projectId}/stop`, { method: 'POST' });\n }\n\n /**\n * Deletes a project.\n * @param projectId The ID or name of the project to delete.\n */\n deleteProject(projectId: string) {\n return this.fetch(`/management/projects/${projectId}`, { method: 'DELETE' });\n }\n\n /**\n * Uploads a firmware bundle to the device and starts installation.\n * @param file The firmware bundle file (.raucb).\n * @param filename Optional filename for the bundle. Defaults to 'bundle.raucb'.\n * @returns The upload response with message and bundle name.\n */\n upload_update(file: Blob, filename = 'bundle.raucb') {\n return this.fetch('/management/update', {\n method: 'POST',\n body: file,\n headers: { 'Content-Type': 'application/octet-stream', 'X-Bundle-Filename': filename },\n serializeBody: (b) => b as any,\n timeout: 600_000,\n schema: updateResponse,\n });\n }\n\n /**\n * Gets the current firmware update status.\n * @returns The update status including state, progress, message and error.\n */\n update_status() {\n return this.fetch('/management/update/status', { schema: updateStatus });\n }\n\n /**\n * Reboots the device.\n * @returns The reboot response message.\n */\n reboot() {\n return this.fetch('/management/reboot', { method: 'POST', schema: rebootResponse });\n }\n}\n"],"mappings":"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"}
|
package/build/management.d.cts
CHANGED
|
@@ -1,2 +1,283 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { UpFetch } from "up-fetch";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
|
|
4
|
+
//#region src/api/management.d.ts
|
|
5
|
+
declare enum CommunicationInterfaceType {
|
|
6
|
+
Can = "can",
|
|
7
|
+
Rs232 = "rs232",
|
|
8
|
+
Rs485 = "rs485",
|
|
9
|
+
I2c = "i2c",
|
|
10
|
+
Spi = "spi",
|
|
11
|
+
Uart = "uart"
|
|
12
|
+
}
|
|
13
|
+
declare const info: v.ObjectSchema<{
|
|
14
|
+
readonly model: v.StringSchema<undefined>;
|
|
15
|
+
readonly serial_number: v.StringSchema<undefined>;
|
|
16
|
+
readonly firmware_version: v.StringSchema<undefined>;
|
|
17
|
+
readonly firmware_commit: v.StringSchema<undefined>;
|
|
18
|
+
readonly disk_used: v.NumberSchema<undefined>;
|
|
19
|
+
readonly disk_total: v.NumberSchema<undefined>;
|
|
20
|
+
readonly docker_used: v.NumberSchema<undefined>;
|
|
21
|
+
readonly capabilities: v.ObjectSchema<{
|
|
22
|
+
readonly io: v.ObjectSchema<{
|
|
23
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
24
|
+
readonly input_voltage: v.ObjectSchema<{
|
|
25
|
+
readonly min: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
26
|
+
readonly max: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
27
|
+
}, undefined>;
|
|
28
|
+
readonly output_voltage: v.ObjectSchema<{
|
|
29
|
+
readonly min: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
30
|
+
readonly max: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
31
|
+
}, undefined>;
|
|
32
|
+
}, undefined>;
|
|
33
|
+
readonly relays: v.ObjectSchema<{
|
|
34
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
35
|
+
readonly max_current: v.NumberSchema<undefined>;
|
|
36
|
+
readonly max_voltage: v.NumberSchema<undefined>;
|
|
37
|
+
readonly on_resistance: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
38
|
+
}, undefined>;
|
|
39
|
+
readonly usb_ports: v.ArraySchema<v.ObjectSchema<{
|
|
40
|
+
readonly type: v.PicklistSchema<["3.0", "2.0"], undefined>;
|
|
41
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
42
|
+
}, undefined>, undefined>;
|
|
43
|
+
readonly ethernet: v.ArraySchema<v.ObjectSchema<{
|
|
44
|
+
readonly type: v.PicklistSchema<["1000BASE-T", "100BASE-T", "10BASE-T"], undefined>;
|
|
45
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
46
|
+
}, undefined>, undefined>;
|
|
47
|
+
readonly communication: v.ArraySchema<v.ObjectSchema<{
|
|
48
|
+
readonly type: v.EnumSchema<typeof CommunicationInterfaceType, undefined>;
|
|
49
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
50
|
+
}, undefined>, undefined>;
|
|
51
|
+
readonly power_supply: v.ObjectSchema<{
|
|
52
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
53
|
+
readonly output_voltage: v.ObjectSchema<{
|
|
54
|
+
readonly min: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
55
|
+
readonly max: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
56
|
+
}, undefined>;
|
|
57
|
+
readonly current: v.ObjectSchema<{
|
|
58
|
+
readonly max: v.NumberSchema<undefined>;
|
|
59
|
+
}, undefined>;
|
|
60
|
+
}, undefined>;
|
|
61
|
+
readonly current_measurement: v.ArraySchema<v.ObjectSchema<{
|
|
62
|
+
readonly type: v.PicklistSchema<["low_precision", "high_precision"], undefined>;
|
|
63
|
+
readonly source: v.StringSchema<undefined>;
|
|
64
|
+
readonly resolution: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
65
|
+
}, undefined>, undefined>;
|
|
66
|
+
readonly hmi: v.ObjectSchema<{
|
|
67
|
+
readonly display: v.ObjectSchema<{
|
|
68
|
+
readonly type: v.StringSchema<undefined>;
|
|
69
|
+
readonly size: v.ObjectSchema<{
|
|
70
|
+
readonly width: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
71
|
+
readonly height: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
72
|
+
}, undefined>;
|
|
73
|
+
}, undefined>;
|
|
74
|
+
readonly input: v.ObjectSchema<{
|
|
75
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
76
|
+
readonly type: v.StringSchema<undefined>;
|
|
77
|
+
}, undefined>;
|
|
78
|
+
readonly speaker: v.ObjectSchema<{
|
|
79
|
+
readonly count: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
80
|
+
readonly type: v.StringSchema<undefined>;
|
|
81
|
+
}, undefined>;
|
|
82
|
+
}, undefined>;
|
|
83
|
+
}, undefined>;
|
|
84
|
+
}, undefined>;
|
|
85
|
+
type Information = v.InferOutput<typeof info>;
|
|
86
|
+
declare const project: v.ObjectSchema<{
|
|
87
|
+
readonly name: v.StringSchema<undefined>;
|
|
88
|
+
readonly path: v.StringSchema<undefined>;
|
|
89
|
+
readonly container_id: v.StringSchema<undefined>;
|
|
90
|
+
readonly image: v.StringSchema<undefined>;
|
|
91
|
+
}, undefined>;
|
|
92
|
+
type Project = v.InferOutput<typeof project>;
|
|
93
|
+
declare const createProject: v.ObjectSchema<{
|
|
94
|
+
readonly name: v.StringSchema<undefined>;
|
|
95
|
+
readonly image: v.StringSchema<undefined>;
|
|
96
|
+
}, undefined>;
|
|
97
|
+
type CreateProject = v.InferOutput<typeof createProject>;
|
|
98
|
+
declare const updateResponse: v.ObjectSchema<{
|
|
99
|
+
readonly message: v.StringSchema<undefined>;
|
|
100
|
+
readonly bundle: v.StringSchema<undefined>;
|
|
101
|
+
}, undefined>;
|
|
102
|
+
type UpdateResponse = v.InferOutput<typeof updateResponse>;
|
|
103
|
+
declare const updateStatus: v.ObjectSchema<{
|
|
104
|
+
readonly state: v.PicklistSchema<["idle", "installing", "failed"], undefined>;
|
|
105
|
+
readonly progress: v.NumberSchema<undefined>;
|
|
106
|
+
readonly message: v.StringSchema<undefined>;
|
|
107
|
+
readonly error: v.StringSchema<undefined>;
|
|
108
|
+
}, undefined>;
|
|
109
|
+
type UpdateStatus = v.InferOutput<typeof updateStatus>;
|
|
110
|
+
declare const rebootResponse: v.ObjectSchema<{
|
|
111
|
+
readonly message: v.StringSchema<undefined>;
|
|
112
|
+
}, undefined>;
|
|
113
|
+
type RebootResponse = v.InferOutput<typeof rebootResponse>;
|
|
114
|
+
/** @hideconstructor */
|
|
115
|
+
declare class ManagementApi {
|
|
116
|
+
private readonly fetch;
|
|
117
|
+
constructor(fetch: UpFetch);
|
|
118
|
+
/**
|
|
119
|
+
* Gets device information and capabilities.
|
|
120
|
+
* @returns The device information.
|
|
121
|
+
*/
|
|
122
|
+
info(): Promise<{
|
|
123
|
+
model: string;
|
|
124
|
+
serial_number: string;
|
|
125
|
+
firmware_version: string;
|
|
126
|
+
firmware_commit: string;
|
|
127
|
+
disk_used: number;
|
|
128
|
+
disk_total: number;
|
|
129
|
+
docker_used: number;
|
|
130
|
+
capabilities: {
|
|
131
|
+
io: {
|
|
132
|
+
count: number;
|
|
133
|
+
input_voltage: {
|
|
134
|
+
min: number;
|
|
135
|
+
max: number;
|
|
136
|
+
};
|
|
137
|
+
output_voltage: {
|
|
138
|
+
min: number;
|
|
139
|
+
max: number;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
relays: {
|
|
143
|
+
count: number;
|
|
144
|
+
max_current: number;
|
|
145
|
+
max_voltage: number;
|
|
146
|
+
on_resistance: number;
|
|
147
|
+
};
|
|
148
|
+
usb_ports: {
|
|
149
|
+
type: "3.0" | "2.0";
|
|
150
|
+
count: number;
|
|
151
|
+
}[];
|
|
152
|
+
ethernet: {
|
|
153
|
+
type: "1000BASE-T" | "100BASE-T" | "10BASE-T";
|
|
154
|
+
count: number;
|
|
155
|
+
}[];
|
|
156
|
+
communication: {
|
|
157
|
+
type: CommunicationInterfaceType;
|
|
158
|
+
count: number;
|
|
159
|
+
}[];
|
|
160
|
+
power_supply: {
|
|
161
|
+
count: number;
|
|
162
|
+
output_voltage: {
|
|
163
|
+
min: number;
|
|
164
|
+
max: number;
|
|
165
|
+
};
|
|
166
|
+
current: {
|
|
167
|
+
max: number;
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
current_measurement: {
|
|
171
|
+
type: "low_precision" | "high_precision";
|
|
172
|
+
source: string;
|
|
173
|
+
resolution: number;
|
|
174
|
+
}[];
|
|
175
|
+
hmi: {
|
|
176
|
+
display: {
|
|
177
|
+
type: string;
|
|
178
|
+
size: {
|
|
179
|
+
width: number;
|
|
180
|
+
height: number;
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
input: {
|
|
184
|
+
count: number;
|
|
185
|
+
type: string;
|
|
186
|
+
};
|
|
187
|
+
speaker: {
|
|
188
|
+
count: number;
|
|
189
|
+
type: string;
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
}>;
|
|
194
|
+
/**
|
|
195
|
+
* Gets the current date and time of the device.
|
|
196
|
+
* @returns The current date and time.
|
|
197
|
+
*/
|
|
198
|
+
datetime(): Promise<Date>;
|
|
199
|
+
/**
|
|
200
|
+
* Sets the date and time of the device.
|
|
201
|
+
*
|
|
202
|
+
* This will only work if the device is not connected to the internet.
|
|
203
|
+
*
|
|
204
|
+
* @param datetime The date and time to set.
|
|
205
|
+
*/
|
|
206
|
+
setDatetime(datetime: Date): Promise<void>;
|
|
207
|
+
/**
|
|
208
|
+
* Gets a list of all projects.
|
|
209
|
+
* @returns An array of projects.
|
|
210
|
+
*/
|
|
211
|
+
getProjects(): Promise<{
|
|
212
|
+
name: string;
|
|
213
|
+
path: string;
|
|
214
|
+
container_id: string;
|
|
215
|
+
image: string;
|
|
216
|
+
}[]>;
|
|
217
|
+
/**
|
|
218
|
+
* Creates a new project.
|
|
219
|
+
* @param data The project creation data.
|
|
220
|
+
*/
|
|
221
|
+
createProject(newProject: CreateProject): Promise<{
|
|
222
|
+
name: string;
|
|
223
|
+
path: string;
|
|
224
|
+
container_id: string;
|
|
225
|
+
image: string;
|
|
226
|
+
}>;
|
|
227
|
+
/**
|
|
228
|
+
* Patches an existing project.
|
|
229
|
+
* @param projectId The ID or name of the project to patch.
|
|
230
|
+
* @param data The data to patch the project with.
|
|
231
|
+
*/
|
|
232
|
+
updateProject(projectId: string, data: Project): Promise<{
|
|
233
|
+
name: string;
|
|
234
|
+
path: string;
|
|
235
|
+
container_id: string;
|
|
236
|
+
image: string;
|
|
237
|
+
}>;
|
|
238
|
+
/**
|
|
239
|
+
* Runs a project.
|
|
240
|
+
* @param projectId The ID or name of the project to run.
|
|
241
|
+
*/
|
|
242
|
+
runProject(projectId: string): Promise<any>;
|
|
243
|
+
/**
|
|
244
|
+
* Stops a running project.
|
|
245
|
+
* @param projectId The ID or name of the project to stop.
|
|
246
|
+
*/
|
|
247
|
+
stopProject(projectId: string): Promise<any>;
|
|
248
|
+
/**
|
|
249
|
+
* Deletes a project.
|
|
250
|
+
* @param projectId The ID or name of the project to delete.
|
|
251
|
+
*/
|
|
252
|
+
deleteProject(projectId: string): Promise<any>;
|
|
253
|
+
/**
|
|
254
|
+
* Uploads a firmware bundle to the device and starts installation.
|
|
255
|
+
* @param file The firmware bundle file (.raucb).
|
|
256
|
+
* @param filename Optional filename for the bundle. Defaults to 'bundle.raucb'.
|
|
257
|
+
* @returns The upload response with message and bundle name.
|
|
258
|
+
*/
|
|
259
|
+
upload_update(file: Blob, filename?: string): Promise<{
|
|
260
|
+
message: string;
|
|
261
|
+
bundle: string;
|
|
262
|
+
}>;
|
|
263
|
+
/**
|
|
264
|
+
* Gets the current firmware update status.
|
|
265
|
+
* @returns The update status including state, progress, message and error.
|
|
266
|
+
*/
|
|
267
|
+
update_status(): Promise<{
|
|
268
|
+
state: "idle" | "installing" | "failed";
|
|
269
|
+
progress: number;
|
|
270
|
+
message: string;
|
|
271
|
+
error: string;
|
|
272
|
+
}>;
|
|
273
|
+
/**
|
|
274
|
+
* Reboots the device.
|
|
275
|
+
* @returns The reboot response message.
|
|
276
|
+
*/
|
|
277
|
+
reboot(): Promise<{
|
|
278
|
+
message: string;
|
|
279
|
+
}>;
|
|
280
|
+
}
|
|
281
|
+
//#endregion
|
|
282
|
+
export { CommunicationInterfaceType, Information, ManagementApi, RebootResponse, UpdateResponse, UpdateStatus };
|
|
283
|
+
//# sourceMappingURL=management.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.d.cts","names":[],"sources":["../src/api/management.ts"],"mappings":";;;;aAGY,0BAAA;EACV,GAAA;EACA,KAAA;EACA,KAAA;EACA,GAAA;EACA,GAAA;EACA,IAAA;AAAA;AAAA,cA+EI,IAAA,EAAI,CAAA,CAAA,YAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAUE,WAAA,GAAc,CAAA,CAAE,WAAA,QAAmB,IAAA;AAAA,cAEzC,OAAA,EAAO,CAAA,CAAA,YAAA;EAAA;;;;;KAMR,OAAA,GAAU,CAAA,CAAE,WAAA,QAAmB,OAAA;AAAA,cAE9B,aAAA,EAAa,CAAA,CAAA,YAAA;EAAA;;;KACd,aAAA,GAAgB,CAAA,CAAE,WAAA,QAAmB,aAAA;AAAA,cAEpC,cAAA,EAAc,CAAA,CAAA,YAAA;EAAA;;;KACR,cAAA,GAAiB,CAAA,CAAE,WAAA,QAAmB,cAAA;AAAA,cAE5C,YAAA,EAAY,CAAA,CAAA,YAAA;EAAA;;;;;KAMN,YAAA,GAAe,CAAA,CAAE,WAAA,QAAmB,YAAA;AAAA,cAE1C,cAAA,EAAc,CAAA,CAAA,YAAA;EAAA,kBAAoC,CAAA,CAAA,YAAA;AAAA;AAAA,KAC5C,cAAA,GAAiB,CAAA,CAAE,WAAA,QAAmB,cAAA;;cAGrC,aAAA;EAAA,iBACkB,KAAA;cAAA,KAAA,EAAO,OAAA;;;;;EAMpC,IAAA,CAAA,GAAI,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQE,QAAA,CAAA,GAAY,OAAA,CAAQ,IAAA;;;;;;;;EAc1B,WAAA,CAAY,QAAA,EAAU,IAAA,GAAO,OAAA;;;;;EAY7B,WAAA,CAAA,GAAW,OAAA;;;;;;;;;;EAQX,aAAA,CAAc,UAAA,EAAY,aAAA,GAAa,OAAA;;;;;;;;;;;EAavC,aAAA,CAAc,SAAA,UAAmB,IAAA,EAAM,OAAA,GAAO,OAAA;;;;;;;;;;EAY9C,UAAA,CAAW,SAAA,WAAiB,OAAA;;;;;EAQ5B,WAAA,CAAY,SAAA,WAAiB,OAAA;;;;;EAQ7B,aAAA,CAAc,SAAA,WAAiB,OAAA;;;;;;;EAU/B,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,QAAA,YAAyB,OAAA;;;;;;;;EAenD,aAAA,CAAA,GAAa,OAAA;;;;;;;;;;EAQb,MAAA,CAAA,GAAM,OAAA"}
|