@matter/nodejs-ble 0.17.0-alpha.0-20260507-059f7763b → 0.17.0-alpha.0-20260508-29ff5ae9e

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 (51) hide show
  1. package/package.json +4 -4
  2. package/dist/cjs/BleScanner.d.ts +0 -19
  3. package/dist/cjs/BleScanner.d.ts.map +0 -1
  4. package/dist/cjs/BleScanner.js +0 -43
  5. package/dist/cjs/BleScanner.js.map +0 -6
  6. package/dist/cjs/BlenoBleServer.d.ts +0 -74
  7. package/dist/cjs/BlenoBleServer.d.ts.map +0 -1
  8. package/dist/cjs/BlenoBleServer.js +0 -415
  9. package/dist/cjs/BlenoBleServer.js.map +0 -6
  10. package/dist/cjs/BlenoPeripheralInterface.d.ts +0 -19
  11. package/dist/cjs/BlenoPeripheralInterface.d.ts.map +0 -1
  12. package/dist/cjs/BlenoPeripheralInterface.js +0 -63
  13. package/dist/cjs/BlenoPeripheralInterface.js.map +0 -6
  14. package/dist/cjs/NobleBleChannel.d.ts +0 -38
  15. package/dist/cjs/NobleBleChannel.d.ts.map +0 -1
  16. package/dist/cjs/NobleBleChannel.js +0 -601
  17. package/dist/cjs/NobleBleChannel.js.map +0 -6
  18. package/dist/cjs/NobleBleClient.d.ts +0 -24
  19. package/dist/cjs/NobleBleClient.d.ts.map +0 -1
  20. package/dist/cjs/NobleBleClient.js +0 -153
  21. package/dist/cjs/NobleBleClient.js.map +0 -6
  22. package/dist/cjs/NodeJsBle.d.ts +0 -20
  23. package/dist/cjs/NodeJsBle.d.ts.map +0 -1
  24. package/dist/cjs/NodeJsBle.js +0 -86
  25. package/dist/cjs/NodeJsBle.js.map +0 -6
  26. package/dist/cjs/index.d.ts +0 -9
  27. package/dist/cjs/index.d.ts.map +0 -1
  28. package/dist/cjs/index.js +0 -26
  29. package/dist/cjs/index.js.map +0 -6
  30. package/dist/cjs/install.d.ts +0 -7
  31. package/dist/cjs/install.d.ts.map +0 -1
  32. package/dist/cjs/install.js +0 -29
  33. package/dist/cjs/install.js.map +0 -6
  34. package/dist/cjs/package.json +0 -3
  35. package/dist/esm/BleScanner.js +0 -23
  36. package/dist/esm/BleScanner.js.map +0 -6
  37. package/dist/esm/BlenoBleServer.js +0 -403
  38. package/dist/esm/BlenoBleServer.js.map +0 -6
  39. package/dist/esm/BlenoPeripheralInterface.js +0 -43
  40. package/dist/esm/BlenoPeripheralInterface.js.map +0 -6
  41. package/dist/esm/NobleBleChannel.js +0 -601
  42. package/dist/esm/NobleBleChannel.js.map +0 -6
  43. package/dist/esm/NobleBleClient.js +0 -133
  44. package/dist/esm/NobleBleClient.js.map +0 -6
  45. package/dist/esm/NodeJsBle.js +0 -66
  46. package/dist/esm/NodeJsBle.js.map +0 -6
  47. package/dist/esm/index.js +0 -9
  48. package/dist/esm/index.js.map +0 -6
  49. package/dist/esm/install.js +0 -28
  50. package/dist/esm/install.js.map +0 -6
  51. package/dist/esm/package.json +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/nodejs-ble",
3
- "version": "0.17.0-alpha.0-20260507-059f7763b",
3
+ "version": "0.17.0-alpha.0-20260508-29ff5ae9e",
4
4
  "description": "Matter BLE support for node.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -28,9 +28,9 @@
28
28
  "build-clean": "nacho-build --clean"
29
29
  },
30
30
  "dependencies": {
31
- "@matter/general": "0.17.0-alpha.0-20260507-059f7763b",
32
- "@matter/protocol": "0.17.0-alpha.0-20260507-059f7763b",
33
- "@matter/types": "0.17.0-alpha.0-20260507-059f7763b"
31
+ "@matter/general": "0.17.0-alpha.0-20260508-29ff5ae9e",
32
+ "@matter/protocol": "0.17.0-alpha.0-20260508-29ff5ae9e",
33
+ "@matter/types": "0.17.0-alpha.0-20260508-29ff5ae9e"
34
34
  },
35
35
  "optionalDependencies": {
36
36
  "@stoprocent/bleno": "^0.12.4",
@@ -1,19 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { BleScanner as BaseBleScanner, DiscoveredBleDevice } from "@matter/protocol";
7
- import type { Peripheral } from "@stoprocent/noble";
8
- import { NobleBleClient } from "./NobleBleClient.js";
9
- export type { DiscoveredBleDevice } from "@matter/protocol";
10
- export type NobleDiscoveredBleDevice = Omit<DiscoveredBleDevice, "peripheral"> & {
11
- peripheral: Peripheral;
12
- };
13
- export declare class BleScanner extends BaseBleScanner {
14
- #private;
15
- constructor(nobleClient: NobleBleClient);
16
- getDiscoveredDevice(address: string): NobleDiscoveredBleDevice;
17
- protected closeClient(): void;
18
- }
19
- //# sourceMappingURL=BleScanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BleScanner.d.ts","sourceRoot":"","sources":["../../src/BleScanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,GAAG;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE5G,qBAAa,UAAW,SAAQ,cAAc;;IAG1C,YAAY,WAAW,EAAE,cAAc,EAGtC;IAEQ,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAEtE;IAED,UAAmB,WAAW,SAE7B;CACJ"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var BleScanner_exports = {};
20
- __export(BleScanner_exports, {
21
- BleScanner: () => BleScanner
22
- });
23
- module.exports = __toCommonJS(BleScanner_exports);
24
- var import_protocol = require("@matter/protocol");
25
- /**
26
- * @license
27
- * Copyright 2022-2026 Matter.js Authors
28
- * SPDX-License-Identifier: Apache-2.0
29
- */
30
- class BleScanner extends import_protocol.BleScanner {
31
- #nobleClient;
32
- constructor(nobleClient) {
33
- super(nobleClient);
34
- this.#nobleClient = nobleClient;
35
- }
36
- getDiscoveredDevice(address) {
37
- return super.getDiscoveredDevice(address);
38
- }
39
- closeClient() {
40
- this.#nobleClient.close();
41
- }
42
- }
43
- //# sourceMappingURL=BleScanner.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/BleScanner.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,sBAAkE;AANlE;AAAA;AAAA;AAAA;AAAA;AAcO,MAAM,mBAAmB,gBAAAA,WAAe;AAAA,EAClC;AAAA,EAET,YAAY,aAA6B;AACrC,UAAM,WAAW;AACjB,SAAK,eAAe;AAAA,EACxB;AAAA,EAES,oBAAoB,SAA2C;AACpE,WAAO,MAAM,oBAAoB,OAAO;AAAA,EAC5C;AAAA,EAEmB,cAAc;AAC7B,SAAK,aAAa,MAAM;AAAA,EAC5B;AACJ;",
5
- "names": ["BaseBleScanner"]
6
- }
@@ -1,74 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes, Channel, DiagnosticPresentation, Transport } from "@matter/general";
7
- import { BleChannel } from "@matter/protocol";
8
- import { BleOptions } from "./NodeJsBle.js";
9
- /**
10
- * Implements the Matter over BLE server using Bleno as Peripheral.
11
- *
12
- * Note: Bleno is only supporting a single connection at a time right now - mainly because it also only can announce
13
- * one BLE device at a time!
14
- */
15
- export declare class BlenoBleServer extends BleChannel<Bytes> {
16
- #private;
17
- private state;
18
- isAdvertising: boolean;
19
- private additionalAdvertisingData;
20
- private advertisingData;
21
- private latestHandshakePayload;
22
- private btpSession;
23
- private onMatterMessageListener;
24
- private writeConformationResolver;
25
- clientAddress: string | undefined;
26
- private btpHandshakeTimeout;
27
- private readonly matterBleService;
28
- constructor(options?: BleOptions);
29
- /**
30
- * Process a Write request on characteristic C1 from the Matter service.
31
- * The data are checked if it might be a handshake request and stored until the subscribe request comes in.
32
- * Otherwise, the data are forwarded to the BTP session handler to be decoded and processed.
33
- *
34
- * @param data
35
- * @param offset
36
- * @param withoutResponse
37
- */
38
- handleC1WriteRequest(data: Buffer<ArrayBufferLike>, offset: number, withoutResponse: boolean): void;
39
- /**
40
- * Process a Subscribe request on characteristic C2 from the Matter service.
41
- * This is expected directly after a handshake request and initializes the BTP session handler with the stored
42
- * handshake payload.
43
- * The BtpSessionHandler instance is wired with the bleno instance for sending data and disconnecting.
44
- *
45
- * @param maxValueSize
46
- * @param updateValueCallback
47
- */
48
- handleC2SubscribeRequest(maxValueSize: number, updateValueCallback: (data: Buffer) => void): Promise<void>;
49
- handleC2Indicate(): void;
50
- /**
51
- * Process a Read request on characteristic C3 from the Matter service.
52
- * The relevant data needs optionally to be set before advertising, else empty data are used.
53
- *
54
- * @param offset
55
- */
56
- handleC3ReadRequest(offset: number): Buffer<ArrayBufferLike>;
57
- advertise(advertiseData: Bytes, additionalAdvertisementData?: Bytes, interval?: import("@matter/general").Duration): Promise<void>;
58
- stopAdvertising(): Promise<void>;
59
- setMatterMessageListener(listener: (socket: Channel<Bytes>, data: Bytes) => void): void;
60
- btpHandshakeTimeoutTriggered(): Promise<void>;
61
- onClose(listener: () => void): Transport.Listener;
62
- [Symbol.asyncIterator](): AsyncIterator<Bytes>;
63
- close(): Promise<void>;
64
- disconnect(): Promise<void>;
65
- /**
66
- * Send a Matter message to the connected device - need to do BTP assembly first.
67
- *
68
- * @param data
69
- */
70
- send(data: Bytes): Promise<void>;
71
- get name(): string;
72
- [DiagnosticPresentation.name]: string;
73
- }
74
- //# sourceMappingURL=BlenoBleServer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BlenoBleServer.d.ts","sourceRoot":"","sources":["../../src/BlenoBleServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EACL,OAAO,EACP,sBAAsB,EAKtB,SAAS,EAEZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAA4E,MAAM,kBAAkB,CAAC;AAExH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA4G5C;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,UAAU,CAAC,KAAK,CAAC;;IACjD,OAAO,CAAC,KAAK,CAAa;IAC1B,aAAa,UAAS;IACtB,OAAO,CAAC,yBAAyB,CAA2B;IAC5D,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,uBAAuB,CAA8D;IAC7F,OAAO,CAAC,yBAAyB,CAAsC;IAEhE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,mBAAmB,CAEzB;IAQF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAElC,YAAY,OAAO,CAAC,EAAE,UAAU,EA2E/B;IAED;;;;;;;;OAQG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,QA0B3F;IAED;;;;;;;;OAQG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,iBAuC/F;IAED,gBAAgB,SAOf;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,2BAMjC;IAEK,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,2BAA2B,CAAC,EAAE,KAAK,EAAE,QAAQ,qCAAc,iBAyBhG;IAEK,eAAe,kBAUpB;IAED,wBAAwB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,QAK/E;IAEK,4BAA4B,kBAGjC;IAED,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAOhD;IAED,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAc7C;IAoBK,KAAK,kBAcV;IAEK,UAAU,kBAkBf;IAGD;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,KAAK,iBAKrB;IAGD,IAAI,IAAI,WAEP;IAED,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAgB;CAChD"}
@@ -1,415 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var BlenoBleServer_exports = {};
20
- __export(BlenoBleServer_exports, {
21
- BlenoBleServer: () => BlenoBleServer
22
- });
23
- module.exports = __toCommonJS(BlenoBleServer_exports);
24
- var import_general = require("@matter/general");
25
- var import_require = require("@matter/nodejs-ble/require");
26
- var import_protocol = require("@matter/protocol");
27
- /**
28
- * @license
29
- * Copyright 2022-2026 Matter.js Authors
30
- * SPDX-License-Identifier: Apache-2.0
31
- */
32
- const logger = import_general.Logger.get("BlenoBleServer");
33
- let Bleno;
34
- function initializeBleno(server, hciId) {
35
- if (hciId !== void 0) {
36
- process.env.BLENO_HCI_DEVICE_ID = hciId.toString();
37
- }
38
- Bleno = (0, import_require.require)("@stoprocent/bleno");
39
- class BtpWriteCharacteristicC1 extends Bleno.Characteristic {
40
- constructor() {
41
- super({
42
- uuid: import_protocol.MatterBle.C1_CHARACTERISTIC_UUID,
43
- properties: ["write"],
44
- onWriteRequest: (_handle, data, offset, withoutResponse, callback) => this.#onWriteRequest(data, offset, withoutResponse, callback)
45
- });
46
- }
47
- #onWriteRequest(data, offset, withoutResponse, callback) {
48
- logger.debug(`C1 write request: ${data.toString("hex")} ${offset} ${withoutResponse}`);
49
- try {
50
- server.handleC1WriteRequest(data, offset, withoutResponse);
51
- callback(this.RESULT_SUCCESS);
52
- } catch (e) {
53
- logger.error(`C1 write request failed: ${e}`);
54
- callback(this.RESULT_UNLIKELY_ERROR);
55
- }
56
- }
57
- }
58
- class BtpIndicateCharacteristicC2 extends Bleno.Characteristic {
59
- constructor() {
60
- super({
61
- uuid: import_protocol.MatterBle.C2_CHARACTERISTIC_UUID,
62
- properties: ["indicate"],
63
- onSubscribe: (_handle, maxValueSize, updateValueCallback) => this.#onSubscribe(maxValueSize, updateValueCallback),
64
- onUnsubscribe: () => this.#onUnsubscribe(),
65
- onIndicate: () => this.#onIndicate()
66
- });
67
- }
68
- #onSubscribe(maxValueSize, updateValueCallback) {
69
- logger.debug(`C2 subscribe ${maxValueSize}`);
70
- server.handleC2SubscribeRequest(maxValueSize, updateValueCallback).catch((e) => logger.warn("Error happened in when handling C2 subscribe", e));
71
- }
72
- #onUnsubscribe() {
73
- logger.debug("C2 unsubscribe");
74
- server.close().catch((e) => logger.warn("Error happened when closing server for C2 unsubscribe", e));
75
- }
76
- #onIndicate() {
77
- logger.debug("C2 indicate");
78
- server.handleC2Indicate();
79
- }
80
- }
81
- class BtpReadCharacteristicC3 extends Bleno.Characteristic {
82
- constructor() {
83
- super({
84
- uuid: import_protocol.MatterBle.C3_CHARACTERISTIC_UUID,
85
- properties: ["read"],
86
- onReadRequest: (_handle, offset, callback) => this.#onReadRequest(offset, callback)
87
- });
88
- }
89
- #onReadRequest(offset, callback) {
90
- try {
91
- const data = server.handleC3ReadRequest(offset);
92
- logger.debug(`C3 read request: ${data.toString("hex")} ${offset}`);
93
- callback(this.RESULT_SUCCESS, data);
94
- } catch (e) {
95
- logger.debug(`C3 read request failed : ${e} ${offset}`);
96
- callback(this.RESULT_INVALID_OFFSET);
97
- }
98
- }
99
- }
100
- class BtpService extends Bleno.PrimaryService {
101
- constructor() {
102
- super({
103
- uuid: import_protocol.MatterBle.SERVICE_UUID_SHORT,
104
- characteristics: [
105
- new BtpWriteCharacteristicC1(),
106
- new BtpIndicateCharacteristicC2(),
107
- new BtpReadCharacteristicC3()
108
- ]
109
- });
110
- }
111
- }
112
- return new BtpService();
113
- }
114
- class BlenoBleServer extends import_protocol.BleChannel {
115
- state = "unknown";
116
- isAdvertising = false;
117
- additionalAdvertisingData = Buffer.alloc(0);
118
- advertisingData;
119
- latestHandshakePayload;
120
- btpSession;
121
- onMatterMessageListener;
122
- writeConformationResolver;
123
- clientAddress;
124
- btpHandshakeTimeout = import_general.Time.getTimer(
125
- "BTP handshake timeout",
126
- import_protocol.MatterBle.BTP_CONN_RSP_TIMEOUT,
127
- () => this.btpHandshakeTimeoutTriggered()
128
- );
129
- #disconnected = false;
130
- #closing = false;
131
- #closeListeners = /* @__PURE__ */ new Set();
132
- #iteratorQueue = new Array();
133
- #iteratorWaiter;
134
- #iteratorDone = false;
135
- matterBleService;
136
- constructor(options) {
137
- super();
138
- const { environment } = options ?? {};
139
- environment?.runtime.add(this);
140
- this.matterBleService = initializeBleno(this, options?.hciId);
141
- Bleno.on("stateChange", (state) => {
142
- if (state === this.state) return;
143
- this.state = state;
144
- logger.debug(`stateChange: ${state}, address = ${Bleno.address}`);
145
- if (state !== "poweredOn") {
146
- if (this.#disconnected || this.#closing) return;
147
- Bleno.stopAdvertising();
148
- } else if (this.advertisingData) {
149
- Bleno.startAdvertisingWithEIRData(this.advertisingData);
150
- this.isAdvertising = true;
151
- }
152
- });
153
- Bleno.on("accept", (clientAddress) => {
154
- logger.debug(`accept new connection, client: ${clientAddress}`);
155
- this.clientAddress = clientAddress;
156
- Bleno.updateRssi();
157
- });
158
- Bleno.on("disconnect", (clientAddress) => {
159
- logger.debug(`disconnect, client: ${clientAddress}`);
160
- this.isAdvertising = false;
161
- this.#terminateIterator();
162
- for (const listener of this.#closeListeners) {
163
- listener();
164
- }
165
- if (this.btpSession !== void 0) {
166
- this.btpSession.close().then(() => {
167
- this.btpSession = void 0;
168
- }).catch(() => {
169
- this.btpSession = void 0;
170
- });
171
- }
172
- this.emitClosed();
173
- });
174
- Bleno.on("rssiUpdate", (rssi) => {
175
- logger.debug(`rssiUpdate: ${rssi}`);
176
- });
177
- Bleno.on("mtuChange", (mtu) => {
178
- logger.debug(`mtuChange: ${mtu}`);
179
- });
180
- Bleno.on("advertisingStart", (error) => {
181
- logger.debug(`advertisingStart: ${error ? `error ${error}` : "success"}`);
182
- if (!error) {
183
- Bleno.setServices([this.matterBleService]);
184
- }
185
- });
186
- Bleno.on("advertisingStop", () => {
187
- logger.debug("advertisingStop");
188
- });
189
- Bleno.on("servicesSet", (error) => {
190
- logger.debug(`servicesSet: ${error ? `error ${error}` : "success"}`);
191
- });
192
- }
193
- /**
194
- * Process a Write request on characteristic C1 from the Matter service.
195
- * The data are checked if it might be a handshake request and stored until the subscribe request comes in.
196
- * Otherwise, the data are forwarded to the BTP session handler to be decoded and processed.
197
- *
198
- * @param data
199
- * @param offset
200
- * @param withoutResponse
201
- */
202
- handleC1WriteRequest(data, offset, withoutResponse) {
203
- if (offset !== 0 || withoutResponse) {
204
- throw new import_protocol.BleError(`Offset ${offset} or withoutResponse ${withoutResponse} not supported`);
205
- }
206
- if (data[0] === 101 && data[1] === 108 && data.length === 9) {
207
- this.btpHandshakeTimeout.start();
208
- logger.info(
209
- `Received Matter handshake request: ${data.toString("hex")}, store until subscribe request comes in.`
210
- );
211
- this.latestHandshakePayload = data;
212
- } else {
213
- if (this.btpSession !== void 0) {
214
- logger.debug(`Received Matter data for BTP Session: ${data.toString("hex")}`);
215
- this.btpSession.handleIncomingBleData(new Uint8Array(data)).catch((error) => {
216
- logger.info("Error handling incoming BLE data", error);
217
- });
218
- } else {
219
- throw new import_protocol.BtpFlowError(
220
- `Received Matter data but no BTP session was initialized: ${data.toString("hex")}`
221
- );
222
- }
223
- }
224
- }
225
- /**
226
- * Process a Subscribe request on characteristic C2 from the Matter service.
227
- * This is expected directly after a handshake request and initializes the BTP session handler with the stored
228
- * handshake payload.
229
- * The BtpSessionHandler instance is wired with the bleno instance for sending data and disconnecting.
230
- *
231
- * @param maxValueSize
232
- * @param updateValueCallback
233
- */
234
- async handleC2SubscribeRequest(maxValueSize, updateValueCallback) {
235
- if (this.latestHandshakePayload === void 0) {
236
- throw new import_protocol.BtpFlowError(`Subscription request received before handshake Request`);
237
- }
238
- if (this.btpSession !== void 0) {
239
- throw new import_protocol.BtpFlowError(
240
- `Subscription request received but BTP session already initialized. Cannot handle two sessions!`
241
- );
242
- }
243
- this.btpHandshakeTimeout.stop();
244
- this.btpSession = await import_protocol.BtpSessionHandler.createFromHandshakeRequest(
245
- Math.min(Bleno.mtu - 3, maxValueSize),
246
- new Uint8Array(this.latestHandshakePayload),
247
- // callback to write data to characteristic C2
248
- async (data) => {
249
- updateValueCallback(Buffer.from(import_general.Bytes.of(data)));
250
- const { promise, resolver } = (0, import_general.createPromise)();
251
- this.writeConformationResolver = resolver;
252
- return promise;
253
- },
254
- // callback to disconnect the BLE connection
255
- async () => this.close(),
256
- // callback to forward decoded and de-assembled Matter messages
257
- async (data) => {
258
- if (this.onMatterMessageListener === void 0) {
259
- throw new import_general.InternalError(`No listener registered for Matter messages`);
260
- }
261
- this.#pushMessage(data);
262
- this.onMatterMessageListener(this, data);
263
- }
264
- );
265
- this.latestHandshakePayload = void 0;
266
- this.btpSession.closed.on(() => this.emitClosed());
267
- }
268
- handleC2Indicate() {
269
- if (this.writeConformationResolver !== void 0) {
270
- this.writeConformationResolver();
271
- this.writeConformationResolver = void 0;
272
- } else {
273
- logger.warn(`Received C2 indication but no former write expected a confirmation`);
274
- }
275
- }
276
- /**
277
- * Process a Read request on characteristic C3 from the Matter service.
278
- * The relevant data needs optionally to be set before advertising, else empty data are used.
279
- *
280
- * @param offset
281
- */
282
- handleC3ReadRequest(offset) {
283
- if (offset > this.additionalAdvertisingData.length) {
284
- throw new import_protocol.BleError(`Offset ${offset} is larger than data ${this.additionalAdvertisingData.length}`);
285
- } else {
286
- return this.additionalAdvertisingData.subarray(offset);
287
- }
288
- }
289
- async advertise(advertiseData, additionalAdvertisementData, interval = (0, import_general.Millis)(100)) {
290
- process.env["BLENO_ADVERTISING_INTERVAL"] = interval.toString();
291
- this.advertisingData = Buffer.from(import_general.Bytes.of(advertiseData));
292
- if (additionalAdvertisementData) {
293
- this.additionalAdvertisingData = Buffer.from(import_general.Bytes.of(additionalAdvertisementData));
294
- } else {
295
- this.additionalAdvertisingData = Buffer.alloc(0);
296
- }
297
- if (this.isAdvertising) {
298
- await this.stopAdvertising();
299
- this.isAdvertising = false;
300
- }
301
- if (this.state === "poweredOn") {
302
- Bleno.startAdvertisingWithEIRData(this.advertisingData);
303
- this.isAdvertising = true;
304
- } else {
305
- logger.debug(`State is ${this.state}, advertise when powered on`);
306
- }
307
- return new Promise((resolve) => {
308
- Bleno.once("advertisingStart", () => resolve());
309
- });
310
- }
311
- async stopAdvertising() {
312
- if (this.isAdvertising) {
313
- return new Promise((resolve) => {
314
- Bleno.stopAdvertising();
315
- Bleno.once("advertisingStop", () => {
316
- this.isAdvertising = false;
317
- resolve();
318
- });
319
- });
320
- }
321
- }
322
- setMatterMessageListener(listener) {
323
- if (this.onMatterMessageListener !== void 0) {
324
- throw new import_general.InternalError(`onData listener already set`);
325
- }
326
- this.onMatterMessageListener = listener;
327
- }
328
- async btpHandshakeTimeoutTriggered() {
329
- await this.disconnect();
330
- logger.error("Timeout for handshake subscribe request on C2 reached, disconnecting.");
331
- }
332
- onClose(listener) {
333
- this.#closeListeners.add(listener);
334
- return {
335
- close: async () => {
336
- this.#closeListeners.delete(listener);
337
- }
338
- };
339
- }
340
- [Symbol.asyncIterator]() {
341
- return {
342
- next: () => {
343
- if (this.#iteratorQueue.length > 0) {
344
- return Promise.resolve({ value: this.#iteratorQueue.shift(), done: false });
345
- }
346
- if (this.#iteratorDone || this.#disconnected) {
347
- return Promise.resolve({ value: void 0, done: true });
348
- }
349
- return new Promise((resolve) => {
350
- this.#iteratorWaiter = resolve;
351
- });
352
- }
353
- };
354
- }
355
- #pushMessage(message) {
356
- if (this.#iteratorWaiter) {
357
- const resolve = this.#iteratorWaiter;
358
- this.#iteratorWaiter = void 0;
359
- resolve({ value: message, done: false });
360
- } else if (!this.#iteratorDone) {
361
- this.#iteratorQueue.push(message);
362
- }
363
- }
364
- #terminateIterator() {
365
- if (!this.#iteratorDone) {
366
- this.#iteratorDone = true;
367
- this.#iteratorWaiter?.({ value: void 0, done: true });
368
- this.#iteratorWaiter = void 0;
369
- }
370
- }
371
- async close() {
372
- if (this.#closing) {
373
- return;
374
- }
375
- this.#closing = true;
376
- this.#terminateIterator();
377
- this.btpHandshakeTimeout.stop();
378
- await this.disconnect();
379
- if (this.btpSession !== void 0) {
380
- await this.btpSession.close();
381
- this.btpSession = void 0;
382
- }
383
- this.onMatterMessageListener = void 0;
384
- this.emitClosed();
385
- }
386
- async disconnect() {
387
- this.isAdvertising = false;
388
- if (this.#disconnected) {
389
- return;
390
- }
391
- this.#disconnected = true;
392
- logger.debug(`Disconnecting Bleno`);
393
- Bleno.disconnect();
394
- logger.debug(`Stopping Bleno`);
395
- Bleno.stop();
396
- }
397
- // Channel<Bytes>
398
- /**
399
- * Send a Matter message to the connected device - need to do BTP assembly first.
400
- *
401
- * @param data
402
- */
403
- async send(data) {
404
- if (this.btpSession === void 0) {
405
- throw new import_protocol.SessionClosedError(`Cannot send data, no BTP session initialized`);
406
- }
407
- await this.btpSession.sendMatterMessage(data);
408
- }
409
- // Channel<Bytes>
410
- get name() {
411
- return `${this.type}://${this.clientAddress}`;
412
- }
413
- [import_general.DiagnosticPresentation.name] = "BLE server";
414
- }
415
- //# sourceMappingURL=BlenoBleServer.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/BlenoBleServer.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes, Channel, ChannelType, Duration, Transport } from "@matter/general";
7
- import { BlePeripheralInterface } from "@matter/protocol";
8
- import { BlenoBleServer } from "./BlenoBleServer.js";
9
- export declare class BlenoPeripheralInterface implements BlePeripheralInterface {
10
- private readonly blenoServer;
11
- constructor(blenoServer: BlenoBleServer);
12
- onData(listener: (socket: Channel<Bytes>, data: Bytes) => void): Transport.Listener;
13
- openChannel(): never;
14
- close(): Promise<void>;
15
- supports(type: ChannelType, address?: string): boolean;
16
- advertise(advertiseData: Bytes, additionalAdvertisementData?: Bytes, interval?: Duration): Promise<void>;
17
- stopAdvertising(): Promise<void>;
18
- }
19
- //# sourceMappingURL=BlenoPeripheralInterface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BlenoPeripheralInterface.d.ts","sourceRoot":"","sources":["../../src/BlenoPeripheralInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAuB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,wBAAyB,YAAW,sBAAsB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAxC,YAA6B,WAAW,EAAE,cAAc,EAAI;IAE5D,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,SAAS,CAAC,QAAQ,CAKlF;IAED,WAAW,IAAI,KAAK,CAEnB;IAEK,KAAK,kBAEV;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,WAU3C;IAED,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,2BAA2B,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,iBAEvF;IAED,eAAe,kBAEd;CACJ"}