@matter/nodejs-ble 0.11.0-alpha.0-20241005-e3e4e4a7a

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 (84) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +55 -0
  3. package/dist/cjs/BleBroadcaster.d.ts +20 -0
  4. package/dist/cjs/BleBroadcaster.d.ts.map +1 -0
  5. package/dist/cjs/BleBroadcaster.js +121 -0
  6. package/dist/cjs/BleBroadcaster.js.map +6 -0
  7. package/dist/cjs/BlePeripheralInterface.d.ts +15 -0
  8. package/dist/cjs/BlePeripheralInterface.d.ts.map +1 -0
  9. package/dist/cjs/BlePeripheralInterface.js +54 -0
  10. package/dist/cjs/BlePeripheralInterface.js.map +6 -0
  11. package/dist/cjs/BleScanner.d.ts +52 -0
  12. package/dist/cjs/BleScanner.d.ts.map +1 -0
  13. package/dist/cjs/BleScanner.js +240 -0
  14. package/dist/cjs/BleScanner.js.map +6 -0
  15. package/dist/cjs/BlenoBleServer.d.ts +70 -0
  16. package/dist/cjs/BlenoBleServer.d.ts.map +1 -0
  17. package/dist/cjs/BlenoBleServer.js +337 -0
  18. package/dist/cjs/BlenoBleServer.js.map +6 -0
  19. package/dist/cjs/NobleBleChannel.d.ts +32 -0
  20. package/dist/cjs/NobleBleChannel.d.ts.map +1 -0
  21. package/dist/cjs/NobleBleChannel.js +266 -0
  22. package/dist/cjs/NobleBleChannel.js.map +6 -0
  23. package/dist/cjs/NobleBleClient.d.ts +20 -0
  24. package/dist/cjs/NobleBleClient.d.ts.map +1 -0
  25. package/dist/cjs/NobleBleClient.js +108 -0
  26. package/dist/cjs/NobleBleClient.js.map +6 -0
  27. package/dist/cjs/NodeJsBle.d.ts +22 -0
  28. package/dist/cjs/NodeJsBle.d.ts.map +1 -0
  29. package/dist/cjs/NodeJsBle.js +68 -0
  30. package/dist/cjs/NodeJsBle.js.map +6 -0
  31. package/dist/cjs/index.d.ts +9 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +26 -0
  34. package/dist/cjs/index.js.map +6 -0
  35. package/dist/cjs/package.json +3 -0
  36. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  37. package/dist/esm/BleBroadcaster.d.ts +20 -0
  38. package/dist/esm/BleBroadcaster.d.ts.map +1 -0
  39. package/dist/esm/BleBroadcaster.js +101 -0
  40. package/dist/esm/BleBroadcaster.js.map +6 -0
  41. package/dist/esm/BlePeripheralInterface.d.ts +15 -0
  42. package/dist/esm/BlePeripheralInterface.d.ts.map +1 -0
  43. package/dist/esm/BlePeripheralInterface.js +34 -0
  44. package/dist/esm/BlePeripheralInterface.js.map +6 -0
  45. package/dist/esm/BleScanner.d.ts +52 -0
  46. package/dist/esm/BleScanner.d.ts.map +1 -0
  47. package/dist/esm/BleScanner.js +220 -0
  48. package/dist/esm/BleScanner.js.map +6 -0
  49. package/dist/esm/BlenoBleServer.d.ts +70 -0
  50. package/dist/esm/BlenoBleServer.d.ts.map +1 -0
  51. package/dist/esm/BlenoBleServer.js +327 -0
  52. package/dist/esm/BlenoBleServer.js.map +6 -0
  53. package/dist/esm/NobleBleChannel.d.ts +32 -0
  54. package/dist/esm/NobleBleChannel.d.ts.map +1 -0
  55. package/dist/esm/NobleBleChannel.js +266 -0
  56. package/dist/esm/NobleBleChannel.js.map +6 -0
  57. package/dist/esm/NobleBleClient.d.ts +20 -0
  58. package/dist/esm/NobleBleClient.d.ts.map +1 -0
  59. package/dist/esm/NobleBleClient.js +88 -0
  60. package/dist/esm/NobleBleClient.js.map +6 -0
  61. package/dist/esm/NodeJsBle.d.ts +22 -0
  62. package/dist/esm/NodeJsBle.d.ts.map +1 -0
  63. package/dist/esm/NodeJsBle.js +48 -0
  64. package/dist/esm/NodeJsBle.js.map +6 -0
  65. package/dist/esm/index.d.ts +9 -0
  66. package/dist/esm/index.d.ts.map +1 -0
  67. package/dist/esm/index.js +9 -0
  68. package/dist/esm/index.js.map +6 -0
  69. package/dist/esm/package.json +3 -0
  70. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +83 -0
  72. package/require/package.json +4 -0
  73. package/require/require.cjs +1 -0
  74. package/require/require.d.ts +1 -0
  75. package/require/require.mjs +3 -0
  76. package/src/BleBroadcaster.ts +126 -0
  77. package/src/BlePeripheralInterface.ts +36 -0
  78. package/src/BleScanner.ts +279 -0
  79. package/src/BlenoBleServer.ts +403 -0
  80. package/src/NobleBleChannel.ts +337 -0
  81. package/src/NobleBleClient.ts +117 -0
  82. package/src/NodeJsBle.ts +56 -0
  83. package/src/index.ts +9 -0
  84. package/src/tsconfig.json +16 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Channel, ChannelType, NetInterface, ServerAddress, TransportInterface } from "@matter/general";
7
+ import { BleChannel, BtpSessionHandler } from "@project-chip/matter.js/ble";
8
+ import type { Characteristic, Peripheral } from "@stoprocent/noble";
9
+ export declare class NobleBleCentralInterface implements NetInterface {
10
+ private openChannels;
11
+ private onMatterMessageListener;
12
+ openChannel(address: ServerAddress, tryCount?: number): Promise<Channel<Uint8Array>>;
13
+ onData(listener: (socket: Channel<Uint8Array>, data: Uint8Array) => void): TransportInterface.Listener;
14
+ close(): Promise<void>;
15
+ supports(type: ChannelType, _address?: string): boolean;
16
+ }
17
+ export declare class NobleBleChannel extends BleChannel<Uint8Array> {
18
+ private readonly peripheral;
19
+ private readonly btpSession;
20
+ static create(peripheral: Peripheral, characteristicC1ForWrite: Characteristic, characteristicC2ForSubscribe: Characteristic, onMatterMessageListener: (socket: Channel<Uint8Array>, data: Uint8Array) => void, _additionalCommissioningRelatedData?: Uint8Array): Promise<NobleBleChannel>;
21
+ private connected;
22
+ constructor(peripheral: Peripheral, btpSession: BtpSessionHandler);
23
+ /**
24
+ * Send a Matter message to the connected device - need to do BTP assembly first.
25
+ *
26
+ * @param data
27
+ */
28
+ send(data: Uint8Array): Promise<void>;
29
+ get name(): string;
30
+ close(): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=NobleBleChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NobleBleChannel.d.ts","sourceRoot":"","sources":["../../src/NobleBleChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EACP,WAAW,EAGX,YAAY,EACZ,aAAa,EAEb,kBAAkB,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAUH,UAAU,EAGV,iBAAiB,EACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA6BpE,qBAAa,wBAAyB,YAAW,YAAY;IACzD,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,uBAAuB,CAAwE;IAEvG,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAwI/E,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,kBAAkB,CAAC,QAAQ;IAOhG,KAAK;IAMX,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM;CAMhD;AAED,qBAAa,eAAgB,SAAQ,UAAU,CAAC,UAAU,CAAC;IA6EnD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;WA7ElB,MAAM,CACf,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,cAAc,EACxC,4BAA4B,EAAE,cAAc,EAC5C,uBAAuB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,EAChF,mCAAmC,CAAC,EAAE,UAAU,GACjD,OAAO,CAAC,eAAe,CAAC;IAmE3B,OAAO,CAAC,SAAS,CAAQ;gBAGJ,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,iBAAiB;IAUlD;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU;IAY3B,IAAI,IAAI,WAEP;IAEK,KAAK;CAId"}
@@ -0,0 +1,266 @@
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 NobleBleChannel_exports = {};
20
+ __export(NobleBleChannel_exports, {
21
+ NobleBleCentralInterface: () => NobleBleCentralInterface,
22
+ NobleBleChannel: () => NobleBleChannel
23
+ });
24
+ module.exports = __toCommonJS(NobleBleChannel_exports);
25
+ var import_general = require("@matter/general");
26
+ var import_ble = require("@project-chip/matter.js/ble");
27
+ var import_codec = require("@project-chip/matter.js/codec");
28
+ /**
29
+ * @license
30
+ * Copyright 2022-2024 Matter.js Authors
31
+ * SPDX-License-Identifier: Apache-2.0
32
+ */
33
+ const logger = import_general.Logger.get("BleChannel");
34
+ function nobleUuidToUuid(uuid) {
35
+ uuid = uuid.toUpperCase();
36
+ if (uuid.length !== 32) {
37
+ return uuid;
38
+ }
39
+ const parts = [
40
+ uuid.substring(0, 8),
41
+ uuid.substring(8, 12),
42
+ uuid.substring(12, 16),
43
+ uuid.substring(16, 20),
44
+ uuid.substring(20, 32)
45
+ ];
46
+ return parts.join("-");
47
+ }
48
+ class NobleBleCentralInterface {
49
+ openChannels = /* @__PURE__ */ new Map();
50
+ onMatterMessageListener;
51
+ openChannel(address, tryCount = 1) {
52
+ return new Promise((resolve, reject) => {
53
+ if (this.onMatterMessageListener === void 0) {
54
+ reject(new import_general.InternalError(`Network Interface was not added to the system yet.`));
55
+ return;
56
+ }
57
+ if (address.type !== "ble") {
58
+ reject(new import_general.InternalError(`Unsupported address type ${address.type}.`));
59
+ return;
60
+ }
61
+ const { peripheral, hasAdditionalAdvertisementData } = import_ble.Ble.get().getBleScanner().getDiscoveredDevice(address.peripheralAddress);
62
+ if (tryCount > 3) {
63
+ reject(new import_ble.BleError(`Failed to connect to peripheral ${peripheral.address}`));
64
+ return;
65
+ }
66
+ logger.debug("BLE peripheral state", peripheral.state);
67
+ if (peripheral.state === "connected" || peripheral.state === "connecting") {
68
+ reject(
69
+ new import_ble.BleError(
70
+ `Peripheral ${address.peripheralAddress} is already connected or connecting. Only one connection supported right now.`
71
+ )
72
+ );
73
+ return;
74
+ }
75
+ if (this.openChannels.has(address)) {
76
+ reject(
77
+ new import_ble.BleError(
78
+ `Peripheral ${address.peripheralAddress} is already connected. Only one connection supported right now.`
79
+ )
80
+ );
81
+ return;
82
+ }
83
+ if (peripheral.state !== "disconnected") {
84
+ peripheral.disconnectAsync().then(() => this.openChannel(address, tryCount), reject);
85
+ return;
86
+ }
87
+ peripheral.once("connect", async () => {
88
+ if (this.onMatterMessageListener === void 0) {
89
+ reject(new import_general.InternalError(`Network Interface was not added to the system yet.`));
90
+ return;
91
+ }
92
+ const services = await peripheral.discoverServicesAsync([import_ble.BLE_MATTER_SERVICE_UUID]);
93
+ logger.debug(`Found services: ${services.map((s) => s.uuid).join(", ")}`);
94
+ for (const service of services) {
95
+ logger.debug(`found service: ${service.uuid}`);
96
+ if (service.uuid !== import_ble.BLE_MATTER_SERVICE_UUID) continue;
97
+ const characteristics = await service.discoverCharacteristicsAsync();
98
+ let characteristicC1ForWrite;
99
+ let characteristicC2ForSubscribe;
100
+ let additionalCommissioningRelatedData;
101
+ for (const characteristic of characteristics) {
102
+ logger.debug("found characteristic:", characteristic.uuid, characteristic.properties);
103
+ switch (nobleUuidToUuid(characteristic.uuid)) {
104
+ case import_ble.BLE_MATTER_C1_CHARACTERISTIC_UUID:
105
+ logger.debug("found C1 characteristic");
106
+ characteristicC1ForWrite = characteristic;
107
+ break;
108
+ case import_ble.BLE_MATTER_C2_CHARACTERISTIC_UUID:
109
+ logger.debug("found C2 characteristic");
110
+ characteristicC2ForSubscribe = characteristic;
111
+ break;
112
+ case import_ble.BLE_MATTER_C3_CHARACTERISTIC_UUID:
113
+ logger.debug("found C3 characteristic");
114
+ if (hasAdditionalAdvertisementData) {
115
+ logger.debug("reading additional commissioning related data");
116
+ const data = await characteristic.readAsync();
117
+ additionalCommissioningRelatedData = new Uint8Array(data);
118
+ logger.debug("additional data", data);
119
+ }
120
+ }
121
+ }
122
+ if (!characteristicC1ForWrite || !characteristicC2ForSubscribe) {
123
+ logger.debug("missing characteristics");
124
+ continue;
125
+ }
126
+ peripheral.removeAllListeners("disconnect");
127
+ this.openChannels.set(address, peripheral);
128
+ resolve(
129
+ await NobleBleChannel.create(
130
+ peripheral,
131
+ characteristicC1ForWrite,
132
+ characteristicC2ForSubscribe,
133
+ this.onMatterMessageListener,
134
+ additionalCommissioningRelatedData
135
+ )
136
+ );
137
+ return;
138
+ }
139
+ peripheral.removeAllListeners("disconnect");
140
+ reject(new import_ble.BleError(`Peripheral ${peripheral.address} does not have the required characteristics`));
141
+ });
142
+ const reTryHandler = async (error) => {
143
+ if (error) {
144
+ logger.error(
145
+ `Peripheral ${peripheral.address} disconnected while trying to connect, try again`,
146
+ error
147
+ );
148
+ } else {
149
+ logger.info(`Peripheral ${peripheral.address} disconnected while trying to connect, try gain`);
150
+ }
151
+ peripheral.removeAllListeners("disconnect");
152
+ peripheral.removeAllListeners("connect");
153
+ this.openChannel(address, tryCount + 1).then(resolve).catch(reject);
154
+ };
155
+ peripheral.once("disconnect", reTryHandler);
156
+ logger.debug(`Connect to Peripheral now (try ${tryCount})`);
157
+ peripheral.connectAsync().catch(reTryHandler);
158
+ });
159
+ }
160
+ onData(listener) {
161
+ this.onMatterMessageListener = listener;
162
+ return {
163
+ close: async () => await this.close()
164
+ };
165
+ }
166
+ async close() {
167
+ for (const peripheral of this.openChannels.values()) {
168
+ await peripheral.disconnectAsync();
169
+ }
170
+ }
171
+ supports(type, _address) {
172
+ if (type !== import_general.ChannelType.BLE) {
173
+ return false;
174
+ }
175
+ return true;
176
+ }
177
+ }
178
+ class NobleBleChannel extends import_ble.BleChannel {
179
+ constructor(peripheral, btpSession) {
180
+ super();
181
+ this.peripheral = peripheral;
182
+ this.btpSession = btpSession;
183
+ peripheral.once("disconnect", () => {
184
+ logger.debug(`Disconnected from peripheral ${peripheral.address}`);
185
+ this.connected = false;
186
+ void this.btpSession.close();
187
+ });
188
+ }
189
+ static async create(peripheral, characteristicC1ForWrite, characteristicC2ForSubscribe, onMatterMessageListener, _additionalCommissioningRelatedData) {
190
+ let mtu = peripheral.mtu ?? 0;
191
+ if (mtu > import_ble.BLE_MAXIMUM_BTP_MTU) {
192
+ mtu = import_ble.BLE_MAXIMUM_BTP_MTU;
193
+ }
194
+ logger.debug(`Using MTU=${mtu} (Peripheral MTU=${peripheral.mtu})`);
195
+ const btpHandshakeRequest = import_codec.BtpCodec.encodeBtpHandshakeRequest({
196
+ versions: import_ble.BTP_SUPPORTED_VERSIONS,
197
+ attMtu: mtu,
198
+ clientWindowSize: import_ble.BTP_MAXIMUM_WINDOW_SIZE
199
+ });
200
+ logger.debug(`sending BTP handshake request: ${import_general.Logger.toJSON(btpHandshakeRequest)}`);
201
+ await characteristicC1ForWrite.writeAsync(Buffer.from(btpHandshakeRequest.buffer), false);
202
+ const btpHandshakeTimeout = import_general.Time.getTimer("BLE handshake timeout", import_ble.BTP_CONN_RSP_TIMEOUT_MS, async () => {
203
+ await peripheral.disconnectAsync();
204
+ logger.debug("Handshake Response not received. Disconnected from peripheral");
205
+ }).start();
206
+ logger.debug("subscribing to C2 characteristic");
207
+ await characteristicC2ForSubscribe.subscribeAsync();
208
+ const { promise: handshakeResponseReceivedPromise, resolver } = (0, import_general.createPromise)();
209
+ characteristicC2ForSubscribe.once("data", (data, isNotification) => {
210
+ logger.debug(`received first data on C2: ${data.toString("hex")} (isNotification: ${isNotification})`);
211
+ if (data[0] === 101 && data[1] === 108 && data.length === 6) {
212
+ logger.info(`Received Matter handshake response: ${data.toString("hex")}.`);
213
+ btpHandshakeTimeout.stop();
214
+ resolver(data);
215
+ }
216
+ });
217
+ const handshakeResponse = await handshakeResponseReceivedPromise;
218
+ const btpSession = await import_ble.BtpSessionHandler.createAsCentral(
219
+ new Uint8Array(handshakeResponse),
220
+ // callback to write data to characteristic C1
221
+ async (data) => {
222
+ return await characteristicC1ForWrite.writeAsync(Buffer.from(data.buffer), false);
223
+ },
224
+ // callback to disconnect the BLE connection
225
+ async () => void characteristicC2ForSubscribe.unsubscribeAsync().then(() => peripheral.disconnectAsync().then(() => logger.debug("disconnected from peripheral"))),
226
+ // callback to forward decoded and de-assembled Matter messages to ExchangeManager
227
+ async (data) => {
228
+ if (onMatterMessageListener === void 0) {
229
+ throw new import_general.InternalError(`No listener registered for Matter messages`);
230
+ }
231
+ onMatterMessageListener(nobleChannel, data);
232
+ }
233
+ );
234
+ characteristicC2ForSubscribe.on("data", (data, isNotification) => {
235
+ logger.debug(`received data on C2: ${data.toString("hex")} (isNotification: ${isNotification})`);
236
+ void btpSession.handleIncomingBleData(new Uint8Array(data));
237
+ });
238
+ const nobleChannel = new NobleBleChannel(peripheral, btpSession);
239
+ return nobleChannel;
240
+ }
241
+ connected = true;
242
+ /**
243
+ * Send a Matter message to the connected device - need to do BTP assembly first.
244
+ *
245
+ * @param data
246
+ */
247
+ async send(data) {
248
+ if (!this.connected) {
249
+ logger.debug("Cannot send data because not connected to peripheral.");
250
+ return;
251
+ }
252
+ if (this.btpSession === void 0) {
253
+ throw new import_ble.BtpFlowError(`Cannot send data, no BTP session initialized`);
254
+ }
255
+ await this.btpSession.sendMatterMessage(data);
256
+ }
257
+ // Channel<Uint8Array>
258
+ get name() {
259
+ return `${this.type}://${this.peripheral.address}`;
260
+ }
261
+ async close() {
262
+ await this.btpSession.close();
263
+ await this.peripheral.disconnectAsync();
264
+ }
265
+ }
266
+ //# sourceMappingURL=NobleBleChannel.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/NobleBleChannel.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { Peripheral } from "@stoprocent/noble";
7
+ import { BleOptions } from "./NodeJsBle.js";
8
+ export declare class NobleBleClient {
9
+ private readonly discoveredPeripherals;
10
+ private shouldScan;
11
+ private isScanning;
12
+ private nobleState;
13
+ private deviceDiscoveredCallback;
14
+ constructor(options?: BleOptions);
15
+ setDiscoveryCallback(callback: (peripheral: Peripheral, manufacturerData: Uint8Array) => void): void;
16
+ startScanning(): Promise<void>;
17
+ stopScanning(): Promise<void>;
18
+ private handleDiscoveredDevice;
19
+ }
20
+ //# sourceMappingURL=NobleBleClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NobleBleClient.d.ts","sourceRoot":"","sources":["../../src/NobleBleClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB5C,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,wBAAwB,CAA+E;gBAEnG,OAAO,CAAC,EAAE,UAAU;IA2BzB,oBAAoB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,KAAK,IAAI;IAOvF,aAAa;IAYb,YAAY;IAMzB,OAAO,CAAC,sBAAsB;CA0BjC"}
@@ -0,0 +1,108 @@
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 NobleBleClient_exports = {};
20
+ __export(NobleBleClient_exports, {
21
+ NobleBleClient: () => NobleBleClient
22
+ });
23
+ module.exports = __toCommonJS(NobleBleClient_exports);
24
+ var import_general = require("@matter/general");
25
+ var import_require = require("@matter/nodejs-ble/require");
26
+ var import_ble = require("@project-chip/matter.js/ble");
27
+ /**
28
+ * @license
29
+ * Copyright 2022-2024 Matter.js Authors
30
+ * SPDX-License-Identifier: Apache-2.0
31
+ */
32
+ const logger = import_general.Logger.get("NobleBleClient");
33
+ let noble;
34
+ function loadNoble(hciId) {
35
+ if (hciId !== void 0) {
36
+ process.env.NOBLE_HCI_DEVICE_ID = hciId.toString();
37
+ }
38
+ noble = (0, import_require.require)("@stoprocent/noble");
39
+ if (typeof noble.on !== "function") {
40
+ noble = noble({ extended: false });
41
+ }
42
+ }
43
+ class NobleBleClient {
44
+ discoveredPeripherals = /* @__PURE__ */ new Map();
45
+ shouldScan = false;
46
+ isScanning = false;
47
+ nobleState = "unknown";
48
+ deviceDiscoveredCallback;
49
+ constructor(options) {
50
+ loadNoble(options?.hciId);
51
+ noble.on("stateChange", (state) => {
52
+ this.nobleState = state;
53
+ logger.debug(`Noble state changed to ${state}`);
54
+ if (state === "poweredOn") {
55
+ if (this.shouldScan) {
56
+ void this.startScanning();
57
+ }
58
+ } else {
59
+ void this.stopScanning();
60
+ }
61
+ });
62
+ noble.on("discover", (peripheral) => this.handleDiscoveredDevice(peripheral));
63
+ noble.on("scanStart", () => this.isScanning = true);
64
+ noble.on("scanStop", () => this.isScanning = false);
65
+ }
66
+ setDiscoveryCallback(callback) {
67
+ this.deviceDiscoveredCallback = callback;
68
+ for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
69
+ this.deviceDiscoveredCallback(peripheral, matterServiceData);
70
+ }
71
+ }
72
+ async startScanning() {
73
+ if (this.isScanning) return;
74
+ this.shouldScan = true;
75
+ if (this.nobleState === "poweredOn") {
76
+ logger.debug("Start BLE scanning for Matter Services ...");
77
+ await noble.startScanningAsync([import_ble.BLE_MATTER_SERVICE_UUID], false);
78
+ } else {
79
+ logger.debug("noble state is not poweredOn ... delay scanning till poweredOn");
80
+ }
81
+ }
82
+ async stopScanning() {
83
+ this.shouldScan = false;
84
+ logger.debug("Stop BLE scanning for Matter Services ...");
85
+ await noble.stopScanningAsync();
86
+ }
87
+ handleDiscoveredDevice(peripheral) {
88
+ logger.debug(
89
+ `Found peripheral ${peripheral.address} (${peripheral.advertisement.localName}): ${import_general.Logger.toJSON(
90
+ peripheral.advertisement
91
+ )}`
92
+ );
93
+ if (!peripheral.connectable) {
94
+ logger.info(`Peripheral ${peripheral.address} is not connectable ... ignoring`);
95
+ return;
96
+ }
97
+ const matterServiceData = peripheral.advertisement.serviceData.find(
98
+ (serviceData) => serviceData.uuid === import_ble.BLE_MATTER_SERVICE_UUID
99
+ );
100
+ if (matterServiceData === void 0 || matterServiceData.data.length !== 8) {
101
+ logger.info(`Peripheral ${peripheral.address} does not advertise Matter Service ... ignoring`);
102
+ return;
103
+ }
104
+ this.discoveredPeripherals.set(peripheral.address, { peripheral, matterServiceData: matterServiceData.data });
105
+ this.deviceDiscoveredCallback?.(peripheral, matterServiceData.data);
106
+ }
107
+ }
108
+ //# sourceMappingURL=NobleBleClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/NobleBleClient.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAuB;AACvB,qBAAwB;AACxB,iBAAwC;AARxC;AAAA;AAAA;AAAA;AAAA;AAYA,MAAM,SAAS,sBAAO,IAAI,gBAAgB;AAC1C,IAAI;AAEJ,SAAS,UAAU,OAAgB;AAE/B,MAAI,UAAU,QAAW;AACrB,YAAQ,IAAI,sBAAsB,MAAM,SAAS;AAAA,EACrD;AACA,cAAQ,wBAAQ,mBAAmB;AACnC,MAAI,OAAO,MAAM,OAAO,YAAY;AAGhC,YAAS,MAAc,EAAE,UAAU,MAAM,CAAC;AAAA,EAC9C;AACJ;AAEO,MAAM,eAAe;AAAA,EACP,wBAAwB,oBAAI,IAG3C;AAAA,EACM,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb;AAAA,EAER,YAAY,SAAsB;AAC9B,cAAU,SAAS,KAAK;AAUxB,UAAM,GAAG,eAAe,WAAS;AAC7B,WAAK,aAAa;AAClB,aAAO,MAAM,0BAA0B,KAAK,EAAE;AAC9C,UAAI,UAAU,aAAa;AACvB,YAAI,KAAK,YAAY;AACjB,eAAK,KAAK,cAAc;AAAA,QAC5B;AAAA,MACJ,OAAO;AACH,aAAK,KAAK,aAAa;AAAA,MAC3B;AAAA,IACJ,CAAC;AACD,UAAM,GAAG,YAAY,gBAAc,KAAK,uBAAuB,UAAU,CAAC;AAC1E,UAAM,GAAG,aAAa,MAAO,KAAK,aAAa,IAAK;AACpD,UAAM,GAAG,YAAY,MAAO,KAAK,aAAa,KAAM;AAAA,EACxD;AAAA,EAEO,qBAAqB,UAA0E;AAClG,SAAK,2BAA2B;AAChC,eAAW,EAAE,YAAY,kBAAkB,KAAK,KAAK,sBAAsB,OAAO,GAAG;AACjF,WAAK,yBAAyB,YAAY,iBAAiB;AAAA,IAC/D;AAAA,EACJ;AAAA,EAEA,MAAa,gBAAgB;AACzB,QAAI,KAAK,WAAY;AAErB,SAAK,aAAa;AAClB,QAAI,KAAK,eAAe,aAAa;AACjC,aAAO,MAAM,4CAA4C;AACzD,YAAM,MAAM,mBAAmB,CAAC,kCAAuB,GAAG,KAAK;AAAA,IACnE,OAAO;AACH,aAAO,MAAM,gEAAgE;AAAA,IACjF;AAAA,EACJ;AAAA,EAEA,MAAa,eAAe;AACxB,SAAK,aAAa;AAClB,WAAO,MAAM,2CAA2C;AACxD,UAAM,MAAM,kBAAkB;AAAA,EAClC;AAAA,EAEQ,uBAAuB,YAAwB;AAInD,WAAO;AAAA,MACH,oBAAoB,WAAW,OAAO,KAAK,WAAW,cAAc,SAAS,MAAM,sBAAO;AAAA,QACtF,WAAW;AAAA,MACf,CAAC;AAAA,IACL;AAEA,QAAI,CAAC,WAAW,aAAa;AACzB,aAAO,KAAK,cAAc,WAAW,OAAO,kCAAkC;AAC9E;AAAA,IACJ;AACA,UAAM,oBAAoB,WAAW,cAAc,YAAY;AAAA,MAC3D,iBAAe,YAAY,SAAS;AAAA,IACxC;AACA,QAAI,sBAAsB,UAAa,kBAAkB,KAAK,WAAW,GAAG;AACxE,aAAO,KAAK,cAAc,WAAW,OAAO,iDAAiD;AAC7F;AAAA,IACJ;AAEA,SAAK,sBAAsB,IAAI,WAAW,SAAS,EAAE,YAAY,mBAAmB,kBAAkB,KAAK,CAAC;AAE5G,SAAK,2BAA2B,YAAY,kBAAkB,IAAI;AAAA,EACtE;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { NetInterface, TransportInterface } from "@matter/general";
7
+ import { Ble } from "@project-chip/matter.js/ble";
8
+ import { InstanceBroadcaster, Scanner } from "@project-chip/matter.js/common";
9
+ export type BleOptions = {
10
+ hciId?: number;
11
+ };
12
+ export declare class NodeJsBle extends Ble {
13
+ private readonly options?;
14
+ private blePeripheral;
15
+ private bleCentral;
16
+ constructor(options?: BleOptions | undefined);
17
+ getBlePeripheralInterface(): TransportInterface;
18
+ getBleCentralInterface(): NetInterface;
19
+ getBleBroadcaster(additionalAdvertisementData?: Uint8Array): InstanceBroadcaster;
20
+ getBleScanner(): Scanner;
21
+ }
22
+ //# sourceMappingURL=NodeJsBle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeJsBle.d.ts","sourceRoot":"","sources":["../../src/NodeJsBle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAQ9E,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,SAAU,SAAQ,GAAG;IAIlB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAHrC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,UAAU,CAA6B;gBAElB,OAAO,CAAC,EAAE,UAAU,YAAA;IAIjD,yBAAyB,IAAI,kBAAkB;IAO/C,sBAAsB,IAAI,YAAY;IAOtC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,mBAAmB;IAOhF,aAAa,IAAI,OAAO;CAM3B"}
@@ -0,0 +1,68 @@
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 NodeJsBle_exports = {};
20
+ __export(NodeJsBle_exports, {
21
+ NodeJsBle: () => NodeJsBle
22
+ });
23
+ module.exports = __toCommonJS(NodeJsBle_exports);
24
+ var import_ble = require("@project-chip/matter.js/ble");
25
+ var import_BleBroadcaster = require("./BleBroadcaster.js");
26
+ var import_BlePeripheralInterface = require("./BlePeripheralInterface.js");
27
+ var import_BleScanner = require("./BleScanner.js");
28
+ var import_BlenoBleServer = require("./BlenoBleServer.js");
29
+ var import_NobleBleChannel = require("./NobleBleChannel.js");
30
+ var import_NobleBleClient = require("./NobleBleClient.js");
31
+ /**
32
+ * @license
33
+ * Copyright 2022-2024 Matter.js Authors
34
+ * SPDX-License-Identifier: Apache-2.0
35
+ */
36
+ class NodeJsBle extends import_ble.Ble {
37
+ constructor(options) {
38
+ super();
39
+ this.options = options;
40
+ }
41
+ blePeripheral;
42
+ bleCentral;
43
+ getBlePeripheralInterface() {
44
+ if (this.blePeripheral === void 0) {
45
+ this.blePeripheral = new import_BlenoBleServer.BlenoBleServer(this.options);
46
+ }
47
+ return new import_BlePeripheralInterface.BlePeripheralInterface(this.blePeripheral);
48
+ }
49
+ getBleCentralInterface() {
50
+ if (this.bleCentral === void 0) {
51
+ this.bleCentral = new import_NobleBleClient.NobleBleClient(this.options);
52
+ }
53
+ return new import_NobleBleChannel.NobleBleCentralInterface();
54
+ }
55
+ getBleBroadcaster(additionalAdvertisementData) {
56
+ if (this.blePeripheral === void 0) {
57
+ this.blePeripheral = new import_BlenoBleServer.BlenoBleServer(this.options);
58
+ }
59
+ return new import_BleBroadcaster.BleBroadcaster(this.blePeripheral, additionalAdvertisementData);
60
+ }
61
+ getBleScanner() {
62
+ if (this.bleCentral === void 0) {
63
+ this.bleCentral = new import_NobleBleClient.NobleBleClient(this.options);
64
+ }
65
+ return new import_BleScanner.BleScanner(this.bleCentral);
66
+ }
67
+ }
68
+ //# sourceMappingURL=NodeJsBle.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/NodeJsBle.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,iBAAoB;AAEpB,4BAA+B;AAC/B,oCAAuC;AACvC,wBAA2B;AAC3B,4BAA+B;AAC/B,6BAAyC;AACzC,4BAA+B;AAd/B;AAAA;AAAA;AAAA;AAAA;AAoBO,MAAM,kBAAkB,eAAI;AAAA,EAI/B,YAA6B,SAAsB;AAC/C,UAAM;AADmB;AAAA,EAE7B;AAAA,EALQ;AAAA,EACA;AAAA,EAMR,4BAAgD;AAC5C,QAAI,KAAK,kBAAkB,QAAW;AAClC,WAAK,gBAAgB,IAAI,qCAAe,KAAK,OAAO;AAAA,IACxD;AACA,WAAO,IAAI,qDAAuB,KAAK,aAAa;AAAA,EACxD;AAAA,EAEA,yBAAuC;AACnC,QAAI,KAAK,eAAe,QAAW;AAC/B,WAAK,aAAa,IAAI,qCAAe,KAAK,OAAO;AAAA,IACrD;AACA,WAAO,IAAI,gDAAyB;AAAA,EACxC;AAAA,EAEA,kBAAkB,6BAA+D;AAC7E,QAAI,KAAK,kBAAkB,QAAW;AAClC,WAAK,gBAAgB,IAAI,qCAAe,KAAK,OAAO;AAAA,IACxD;AACA,WAAO,IAAI,qCAAe,KAAK,eAAe,2BAA2B;AAAA,EAC7E;AAAA,EAEA,gBAAyB;AACrB,QAAI,KAAK,eAAe,QAAW;AAC/B,WAAK,aAAa,IAAI,qCAAe,KAAK,OAAO;AAAA,IACrD;AACA,WAAO,IAAI,6BAAW,KAAK,UAAU;AAAA,EACzC;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./BleBroadcaster.js";
7
+ export * from "./BleScanner.js";
8
+ export * from "./NodeJsBle.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,26 @@
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 __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var src_exports = {};
17
+ module.exports = __toCommonJS(src_exports);
18
+ __reExport(src_exports, require("./BleBroadcaster.js"), module.exports);
19
+ __reExport(src_exports, require("./BleScanner.js"), module.exports);
20
+ __reExport(src_exports, require("./NodeJsBle.js"), module.exports);
21
+ /**
22
+ * @license
23
+ * Copyright 2022-2024 Matter.js Authors
24
+ * SPDX-License-Identifier: Apache-2.0
25
+ */
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,wBAAc,gCANd;AAOA,wBAAc,4BAPd;AAQA,wBAAc,2BARd;AAAA;AAAA;AAAA;AAAA;AAAA;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }