lego-front-web-sdk 0.0.0-stage → 0.1.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -2
  3. package/dist/constants.d.ts +46 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/devices/base.d.ts +63 -0
  6. package/dist/devices/base.d.ts.map +1 -0
  7. package/dist/devices/color-sensor.d.ts +23 -0
  8. package/dist/devices/color-sensor.d.ts.map +1 -0
  9. package/dist/devices/controller.d.ts +20 -0
  10. package/dist/devices/controller.d.ts.map +1 -0
  11. package/dist/devices/double-motor.d.ts +131 -0
  12. package/dist/devices/double-motor.d.ts.map +1 -0
  13. package/dist/devices/index.d.ts +11 -0
  14. package/dist/devices/index.d.ts.map +1 -0
  15. package/dist/devices/single-motor.d.ts +73 -0
  16. package/dist/devices/single-motor.d.ts.map +1 -0
  17. package/dist/index.d.ts +11 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +1781 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/protocol/codec.d.ts +54 -0
  22. package/dist/protocol/codec.d.ts.map +1 -0
  23. package/dist/protocol/colors.d.ts +20 -0
  24. package/dist/protocol/colors.d.ts.map +1 -0
  25. package/dist/protocol/frames.d.ts +6 -0
  26. package/dist/protocol/frames.d.ts.map +1 -0
  27. package/dist/protocol/index.d.ts +7 -0
  28. package/dist/protocol/index.d.ts.map +1 -0
  29. package/dist/protocol/notifications.d.ts +58 -0
  30. package/dist/protocol/notifications.d.ts.map +1 -0
  31. package/dist/protocol/opcodes.d.ts +78 -0
  32. package/dist/protocol/opcodes.d.ts.map +1 -0
  33. package/dist/protocol/uuids.d.ts +18 -0
  34. package/dist/protocol/uuids.d.ts.map +1 -0
  35. package/dist/transport/index.d.ts +7 -0
  36. package/dist/transport/index.d.ts.map +1 -0
  37. package/dist/transport/mock.d.ts +41 -0
  38. package/dist/transport/mock.d.ts.map +1 -0
  39. package/dist/transport/types.d.ts +55 -0
  40. package/dist/transport/types.d.ts.map +1 -0
  41. package/dist/transport/web-bluetooth.d.ts +47 -0
  42. package/dist/transport/web-bluetooth.d.ts.map +1 -0
  43. package/package.json +58 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 lego-front-web-sdk contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,110 @@
1
- # Temporary Holding Version
1
+ # lego-front-web-sdk
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ TypeScript Web SDK for **LEGO Education CS&AI** hardware over **Web Bluetooth** (Chrome / Edge).
4
+
5
+ Public API shape aligns with the Python [`legoeducation`](https://pypi.org/project/legoeducation/) package (`SingleMotor`, `DoubleMotor`, `ColorSensor`, `Controller`).
6
+
7
+ > Not an official LEGO product. LEGO® is a trademark of the LEGO Group.
8
+ > Protocol details are for interoperability; do not redistribute LEGO’s BUSL-licensed Python package source.
9
+
10
+ ## Install
11
+
12
+ ### From GitHub
13
+
14
+ ```bash
15
+ npm install "github:fyx0730/lego-web-sdk#main:sdk"
16
+ ```
17
+
18
+ Equivalent forms:
19
+
20
+ ```bash
21
+ # git+https
22
+ npm install "git+https://github.com/fyx0730/lego-web-sdk.git#main:sdk"
23
+
24
+ # package.json
25
+ "lego-front-web-sdk": "github:fyx0730/lego-web-sdk#main:sdk"
26
+ ```
27
+
28
+ `prepare` runs `tsc` on install, so consumers get a built `dist/` even though it is not committed.
29
+
30
+ ### From npm (after `npm publish`)
31
+
32
+ ```bash
33
+ npm install lego-front-web-sdk
34
+ ```
35
+
36
+ ### Local path (monorepo / sibling checkout)
37
+
38
+ ```bash
39
+ npm install file:../lego-web-sdk/sdk
40
+ ```
41
+
42
+ ## Devices
43
+
44
+ | Class | Capabilities |
45
+ |-------|----------------|
46
+ | `SingleMotor` | `motor_*`, light / beep, position / speed notifications |
47
+ | `DoubleMotor` | `motor_*` + `movement_*` + IMU |
48
+ | `ColorSensor` | color / RGB / HSV / reflection via notifications |
49
+ | `Controller` | left / right stick percent & angle |
50
+
51
+ ## Quick start
52
+
53
+ ```ts
54
+ import {
55
+ WebBluetoothTransport,
56
+ SingleMotor,
57
+ DoubleMotor,
58
+ ColorSensor,
59
+ Controller,
60
+ setDefaultTransport,
61
+ LEGO_COLOR_RED,
62
+ MOVEMENT_TURN_DIRECTION_LEFT,
63
+ } from "lego-front-web-sdk";
64
+
65
+ // Must run inside a user gesture (button click)
66
+ setDefaultTransport(new WebBluetoothTransport());
67
+
68
+ const motor = new SingleMotor();
69
+ await motor.connect();
70
+ await motor.motorRunForDegrees(180, { speed: 40 });
71
+ await motor.lightColor(LEGO_COLOR_RED);
72
+ console.log(motor.motor.position);
73
+ await motor.disconnect();
74
+ ```
75
+
76
+ Requirements:
77
+
78
+ - Chromium browser (Chrome / Edge)
79
+ - Secure context: `https://` or `http://localhost`
80
+ - Firmware RPC ≈ **1.0.73** (update via [Coding Canvas](https://code.legoeducation.com))
81
+
82
+ ## Develop this package
83
+
84
+ ```bash
85
+ cd sdk
86
+ npm install
87
+ npm run build
88
+ npm run demo:chrome
89
+ # http://localhost:5173/examples/chrome-lab.html
90
+ ```
91
+
92
+ | Script | Purpose |
93
+ |--------|---------|
94
+ | `npm run build` | Compile `src/` → `dist/` |
95
+ | `npm run prepare` | Auto-build on `npm install` (for git consumers) |
96
+ | `npm run demo:chrome` | Local lab page for all 4 devices |
97
+ | `npm run example:mock` | Mock transport smoke test |
98
+
99
+ ## Transports
100
+
101
+ | Transport | Use |
102
+ |-----------|-----|
103
+ | `WebBluetoothTransport` | Real hardware in the browser |
104
+ | `MockTransport` | UI / unit tests without BLE |
105
+
106
+ ## Notes
107
+
108
+ - Color constants match the Python **App** scheme (`LEGO_COLOR_RED = 1`); the SDK maps to firmware ids on the wire.
109
+ - `connect()` sends `programFlow Start` so light / beep RPCs work.
110
+ - See repo root `README.md` for repository layout and publishing checklist.
@@ -0,0 +1,46 @@
1
+ /** Constants aligned with the LEGO Education Python public API. */
2
+ export declare const UNCHANGED = -1;
3
+ export declare const DEFAULT_MOTOR = 0;
4
+ export declare const DEFAULT_DEVICE_NOTIFICATION_DELAY = 100;
5
+ export { LEGO_COLOR_NOCOLOR, LEGO_COLOR_NONE, LEGO_COLOR_RED, LEGO_COLOR_YELLOW, LEGO_COLOR_BLUE, LEGO_COLOR_TEAL, LEGO_COLOR_GREEN, LEGO_COLOR_PURPLE, LEGO_COLOR_WHITE, LEGO_COLOR_MAGENTA, LEGO_COLOR_ORANGE, LEGO_COLOR_AZURE, appColorToFirmware, firmwareColorToApp, } from "./protocol/colors.js";
6
+ export declare const MOTOR_END_STATE_DEFAULT = -1;
7
+ export declare const MOTOR_END_STATE_COAST = 0;
8
+ export declare const MOTOR_END_STATE_BRAKE = 1;
9
+ export declare const MOTOR_END_STATE_HOLD = 2;
10
+ export declare const MOTOR_END_STATE_CONTINUE = 3;
11
+ export declare const MOTOR_END_STATE_SMART_COAST = 4;
12
+ export declare const MOTOR_END_STATE_SMART_BRAKE = 5;
13
+ export declare const MOTOR_MOVE_DIRECTION_CLOCKWISE = 0;
14
+ export declare const MOTOR_MOVE_DIRECTION_COUNTERCLOCKWISE = 1;
15
+ export declare const MOTOR_MOVE_DIRECTION_SHORTEST = 2;
16
+ export declare const MOTOR_MOVE_DIRECTION_LONGEST = 3;
17
+ export declare const MOTOR_LEFT = 0;
18
+ export declare const MOTOR_RIGHT = 1;
19
+ export declare const MOTOR_BOTH = 2;
20
+ export declare const MOVEMENT_DIRECTION_FORWARD = 0;
21
+ export declare const MOVEMENT_DIRECTION_BACKWARD = 1;
22
+ export declare const MOVEMENT_DIRECTION_LEFT = 2;
23
+ export declare const MOVEMENT_DIRECTION_RIGHT = 3;
24
+ export declare const MOVEMENT_MOVE_DIRECTION_FORWARD = 0;
25
+ export declare const MOVEMENT_MOVE_DIRECTION_BACKWARD = 1;
26
+ export declare const MOVEMENT_TURN_DIRECTION_LEFT = 2;
27
+ export declare const MOVEMENT_TURN_DIRECTION_RIGHT = 3;
28
+ export declare const DEVICE_FACE_TOP = 0;
29
+ export declare const DEVICE_FACE_FRONT = 1;
30
+ export declare const DEVICE_FACE_RIGHT = 2;
31
+ export declare const DEVICE_FACE_BOTTOM = 3;
32
+ export declare const DEVICE_FACE_BACK = 4;
33
+ export declare const DEVICE_FACE_LEFT = 5;
34
+ export declare const SOUND_PATTERN_BEEP_SINGLE = 0;
35
+ export declare const SOUND_PATTERN_BEEP_DOUBLE = 1;
36
+ export declare const SOUND_PATTERN_BEEP_TRIPLE = 2;
37
+ export declare const SOUND_PATTERN_BEEP_UP_MIDDLE_DOWN = 3;
38
+ export declare const LIGHT_PATTERN_SOLID = 0;
39
+ export declare const LIGHT_PATTERN_BREATHE = 1;
40
+ export declare const LIGHT_PATTERN_PULSE = 2;
41
+ export declare const LIGHT_PATTERN_SHORT_BLINK = 3;
42
+ export declare const LIGHT_PATTERN_LONG_BLINK = 4;
43
+ export declare const LIGHT_PATTERN_DOUBLE_BLINK = 5;
44
+ export declare const PROGRAM_ACTION_START = 0;
45
+ export declare const PROGRAM_ACTION_STOP = 1;
46
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,qCAAqC,IAAI,CAAC;AACvD,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,mBAAmB,IAAI,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { ConnectFilters, DeviceKind, Transport, TransportConnection } from "../transport/types.js";
2
+ export type DeviceNotificationCallback = (data: Uint8Array) => void;
3
+ export interface DeviceOptions {
4
+ transport?: Transport;
5
+ }
6
+ export declare function setDefaultTransport(transport: Transport): void;
7
+ export declare function getDefaultTransport(): Transport | undefined;
8
+ /**
9
+ * Shared connect / disconnect / send plumbing for all hardware classes.
10
+ */
11
+ export declare abstract class DeviceBase {
12
+ abstract readonly kind: DeviceKind;
13
+ protected transport: Transport;
14
+ protected connection: TransportConnection | null;
15
+ protected notificationCallback: DeviceNotificationCallback | null;
16
+ private batchBuffer;
17
+ get connected(): boolean;
18
+ get deviceId(): string | null;
19
+ constructor(options?: DeviceOptions);
20
+ connect(filters?: ConnectFilters, _options?: {
21
+ deviceNotificationDelay?: number;
22
+ onDisconnect?: (() => void);
23
+ }): Promise<void>;
24
+ protected applyNotification(_payload: Uint8Array): void;
25
+ disconnect(): Promise<void>;
26
+ setNotificationCallback(callback: DeviceNotificationCallback | null): void;
27
+ search(filters?: ConnectFilters, timeoutMs?: number): Promise<Awaited<ReturnType<Transport["scan"]>>>;
28
+ /** Python: `light_color(color, ...)` */
29
+ lightColor(color: number, options?: {
30
+ pattern?: number;
31
+ intensity?: number;
32
+ blocking?: boolean;
33
+ }): Promise<void>;
34
+ /** Python: `beep(...)` */
35
+ beep(options?: {
36
+ pattern?: number;
37
+ frequency?: number;
38
+ count?: number;
39
+ blocking?: boolean;
40
+ }): Promise<void>;
41
+ /** Python: `stop_beep(...)` */
42
+ stopBeep(options?: {
43
+ blocking?: boolean;
44
+ }): Promise<void>;
45
+ /** Python: `program_flow_notification(action, ...)` */
46
+ programFlowNotification(action: number, options?: {
47
+ blocking?: boolean;
48
+ }): Promise<void>;
49
+ /** Python: `device_notification_request(delay_ms, ...)` */
50
+ deviceNotificationRequest(delayMs: number, options?: {
51
+ blocking?: boolean;
52
+ }): Promise<void>;
53
+ /** Python: `begin_batch()` — client-side queue (motor commands only). */
54
+ beginBatch(): void;
55
+ /** Python: `end_batch()` — flush queued frames in one BLE write. */
56
+ endBatch(options?: {
57
+ blocking?: boolean;
58
+ }): Promise<void>;
59
+ /** Python: `cancel_batch()` */
60
+ cancelBatch(): number;
61
+ protected sendCommand(method: string, args?: Record<string, unknown>): Promise<void>;
62
+ }
63
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/devices/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { DeviceKind } from "../transport/types.js";
2
+ import { DeviceBase, type DeviceOptions } from "./base.js";
3
+ /** Python: `colorsensor.sensor` */
4
+ export interface ColorSensorReading {
5
+ color: number;
6
+ rawRed: number;
7
+ rawGreen: number;
8
+ rawBlue: number;
9
+ reflection: number;
10
+ hue?: number;
11
+ saturation?: number;
12
+ value?: number;
13
+ }
14
+ /** Python: `le.ColorSensor()` */
15
+ export declare class ColorSensor extends DeviceBase {
16
+ readonly kind: DeviceKind;
17
+ readonly sensor: ColorSensorReading;
18
+ constructor(options?: DeviceOptions);
19
+ protected applyNotification(payload: Uint8Array): void;
20
+ /** Demo helper for MockTransport. */
21
+ mockSetColor(partial: Partial<ColorSensorReading>): void;
22
+ }
23
+ //# sourceMappingURL=color-sensor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-sensor.d.ts","sourceRoot":"","sources":["../../src/devices/color-sensor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iCAAiC;AACjC,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAkB;IAE3C,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAMjC;gBAEU,OAAO,GAAE,aAAkB;IAKvC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAatD,qCAAqC;IACrC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;CAGzD"}
@@ -0,0 +1,20 @@
1
+ import type { DeviceKind } from "../transport/types.js";
2
+ import { DeviceBase, type DeviceOptions } from "./base.js";
3
+ /** Python: `controller.sensor` */
4
+ export interface ControllerReading {
5
+ leftPercent: number;
6
+ rightPercent: number;
7
+ leftAngle: number;
8
+ rightAngle: number;
9
+ }
10
+ /** Python: `le.Controller()` */
11
+ export declare class Controller extends DeviceBase {
12
+ readonly kind: DeviceKind;
13
+ readonly sensor: ControllerReading;
14
+ buttonState: number;
15
+ constructor(options?: DeviceOptions);
16
+ protected applyNotification(payload: Uint8Array): void;
17
+ /** Demo helper for MockTransport. */
18
+ mockSetLevers(partial: Partial<ControllerReading>): void;
19
+ }
20
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/devices/controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,kCAAkC;AAClC,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAgB;IAEzC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAKhC;IAEF,WAAW,SAAK;gBAEJ,OAAO,GAAE,aAAkB;IAIvC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IActD,qCAAqC;IACrC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;CAGzD"}
@@ -0,0 +1,131 @@
1
+ import type { DeviceKind } from "../transport/types.js";
2
+ import { DeviceBase, type DeviceOptions } from "./base.js";
3
+ import type { MotorReading } from "./single-motor.js";
4
+ export interface ImuReading {
5
+ orientation: number;
6
+ yawFace: number;
7
+ yaw: number;
8
+ pitch: number;
9
+ roll: number;
10
+ accelerometerX: number;
11
+ accelerometerY: number;
12
+ accelerometerZ: number;
13
+ gyroscopeX: number;
14
+ gyroscopeY: number;
15
+ gyroscopeZ: number;
16
+ gesture?: number;
17
+ }
18
+ /** Python: `le.DoubleMotor()` */
19
+ export declare class DoubleMotor extends DeviceBase {
20
+ readonly kind: DeviceKind;
21
+ readonly motor: Record<number, MotorReading>;
22
+ readonly imu: ImuReading;
23
+ constructor(options?: DeviceOptions);
24
+ protected applyNotification(payload: Uint8Array): void;
25
+ private get useCommandSideEstimates();
26
+ motorSetSpeed(speed: number, options?: {
27
+ motor?: number;
28
+ blocking?: boolean;
29
+ }): Promise<void>;
30
+ motorRun(options?: {
31
+ direction?: number;
32
+ motor?: number;
33
+ speed?: number;
34
+ blocking?: boolean;
35
+ }): Promise<void>;
36
+ motorRunForTime(timeMs: number, options?: {
37
+ direction?: number;
38
+ motor?: number;
39
+ speed?: number;
40
+ blocking?: boolean;
41
+ }): Promise<void>;
42
+ motorRunForDegrees(degrees: number, options?: {
43
+ direction?: number;
44
+ motor?: number;
45
+ speed?: number;
46
+ blocking?: boolean;
47
+ }): Promise<void>;
48
+ motorResetRelativePosition(options?: {
49
+ motor?: number;
50
+ position?: number;
51
+ blocking?: boolean;
52
+ }): Promise<void>;
53
+ motorRunToRelativePosition(position: number, options?: {
54
+ motor?: number;
55
+ speed?: number;
56
+ blocking?: boolean;
57
+ }): Promise<void>;
58
+ motorRunToAbsolutePosition(position: number, options?: {
59
+ direction?: number;
60
+ motor?: number;
61
+ speed?: number;
62
+ blocking?: boolean;
63
+ }): Promise<void>;
64
+ motorSetDutyCycle(dutyCycle: number, options?: {
65
+ motor?: number;
66
+ blocking?: boolean;
67
+ }): Promise<void>;
68
+ motorStop(options?: {
69
+ motor?: number;
70
+ blocking?: boolean;
71
+ }): Promise<void>;
72
+ motorSetEndState(endState: number, options?: {
73
+ motor?: number;
74
+ blocking?: boolean;
75
+ }): Promise<void>;
76
+ motorSetAcceleration(acceleration: number, deceleration: number, options?: {
77
+ motor?: number;
78
+ blocking?: boolean;
79
+ }): Promise<void>;
80
+ movementMove(options?: {
81
+ direction?: number;
82
+ speed?: number;
83
+ blocking?: boolean;
84
+ }): Promise<void>;
85
+ movementMoveForTime(timeMs: number, options?: {
86
+ direction?: number;
87
+ speed?: number;
88
+ blocking?: boolean;
89
+ }): Promise<void>;
90
+ movementMoveForDegrees(degrees: number, options?: {
91
+ direction?: number;
92
+ speed?: number;
93
+ blocking?: boolean;
94
+ }): Promise<void>;
95
+ movementMoveTank(speedLeft: number, speedRight: number, options?: {
96
+ blocking?: boolean;
97
+ }): Promise<void>;
98
+ movementMoveTankForDegrees(degrees: number, options?: {
99
+ speedLeft?: number;
100
+ speedRight?: number;
101
+ blocking?: boolean;
102
+ }): Promise<void>;
103
+ movementTurnForDegrees(degrees: number, options?: {
104
+ direction?: number;
105
+ speed?: number;
106
+ blocking?: boolean;
107
+ }): Promise<void>;
108
+ movementStop(options?: {
109
+ blocking?: boolean;
110
+ }): Promise<void>;
111
+ movementSetSpeed(speed: number, options?: {
112
+ blocking?: boolean;
113
+ }): Promise<void>;
114
+ movementSetEndState(endState: number, options?: {
115
+ blocking?: boolean;
116
+ }): Promise<void>;
117
+ movementSetAcceleration(acceleration: number, deceleration: number, options?: {
118
+ blocking?: boolean;
119
+ }): Promise<void>;
120
+ movementSetTurnSteering(steering: number, options?: {
121
+ blocking?: boolean;
122
+ }): Promise<void>;
123
+ imuSetYawFace(yawFace: number, options?: {
124
+ blocking?: boolean;
125
+ }): Promise<void>;
126
+ imuResetYawAxis(value?: number, options?: {
127
+ blocking?: boolean;
128
+ }): Promise<void>;
129
+ private touchMotor;
130
+ }
131
+ //# sourceMappingURL=double-motor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-motor.d.ts","sourceRoot":"","sources":["../../src/devices/double-motor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { DeviceBase, setDefaultTransport, getDefaultTransport } from "./base.js";
2
+ export type { DeviceOptions, DeviceNotificationCallback } from "./base.js";
3
+ export { SingleMotor } from "./single-motor.js";
4
+ export type { MotorReading } from "./single-motor.js";
5
+ export { DoubleMotor } from "./double-motor.js";
6
+ export type { ImuReading } from "./double-motor.js";
7
+ export { ColorSensor } from "./color-sensor.js";
8
+ export type { ColorSensorReading } from "./color-sensor.js";
9
+ export { Controller } from "./controller.js";
10
+ export type { ControllerReading } from "./controller.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { DeviceKind } from "../transport/types.js";
2
+ import { DeviceBase, type DeviceOptions } from "./base.js";
3
+ export interface MotorReading {
4
+ position: number;
5
+ speed: number;
6
+ absolutePosition?: number;
7
+ motorState?: number;
8
+ power?: number;
9
+ gesture?: number;
10
+ }
11
+ /** Python: `le.SingleMotor()` */
12
+ export declare class SingleMotor extends DeviceBase {
13
+ readonly kind: DeviceKind;
14
+ readonly motor: MotorReading;
15
+ constructor(options?: DeviceOptions);
16
+ protected applyNotification(payload: Uint8Array): void;
17
+ private get useCommandSideEstimates();
18
+ motorSetSpeed(speed: number, options?: {
19
+ motor?: number;
20
+ blocking?: boolean;
21
+ }): Promise<void>;
22
+ motorRun(options?: {
23
+ direction?: number;
24
+ motor?: number;
25
+ speed?: number;
26
+ blocking?: boolean;
27
+ }): Promise<void>;
28
+ motorRunForTime(timeMs: number, options?: {
29
+ direction?: number;
30
+ motor?: number;
31
+ speed?: number;
32
+ blocking?: boolean;
33
+ }): Promise<void>;
34
+ motorRunForDegrees(degrees: number, options?: {
35
+ direction?: number;
36
+ motor?: number;
37
+ speed?: number;
38
+ blocking?: boolean;
39
+ }): Promise<void>;
40
+ motorResetRelativePosition(options?: {
41
+ motor?: number;
42
+ position?: number;
43
+ blocking?: boolean;
44
+ }): Promise<void>;
45
+ motorRunToRelativePosition(position: number, options?: {
46
+ motor?: number;
47
+ speed?: number;
48
+ blocking?: boolean;
49
+ }): Promise<void>;
50
+ motorRunToAbsolutePosition(position: number, options?: {
51
+ direction?: number;
52
+ motor?: number;
53
+ speed?: number;
54
+ blocking?: boolean;
55
+ }): Promise<void>;
56
+ motorSetDutyCycle(dutyCycle: number, options?: {
57
+ motor?: number;
58
+ blocking?: boolean;
59
+ }): Promise<void>;
60
+ motorStop(options?: {
61
+ motor?: number;
62
+ blocking?: boolean;
63
+ }): Promise<void>;
64
+ motorSetEndState(endState: number, options?: {
65
+ motor?: number;
66
+ blocking?: boolean;
67
+ }): Promise<void>;
68
+ motorSetAcceleration(acceleration: number, deceleration: number, options?: {
69
+ motor?: number;
70
+ blocking?: boolean;
71
+ }): Promise<void>;
72
+ }
73
+ //# sourceMappingURL=single-motor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-motor.d.ts","sourceRoot":"","sources":["../../src/devices/single-motor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * lego-front-web-sdk
3
+ *
4
+ * TypeScript skeleton aligned with the LEGO Education Python API.
5
+ * Use MockTransport for local demos; WebBluetoothTransport for Chrome + real hubs.
6
+ */
7
+ export * from "./constants.js";
8
+ export * from "./protocol/index.js";
9
+ export * from "./transport/index.js";
10
+ export * from "./devices/index.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}