@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
@@ -1,133 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes, Diagnostic, Instant, Logger, Time } from "@matter/general";
7
- import { require as require2 } from "@matter/nodejs-ble/require";
8
- import { MatterBle } from "@matter/protocol";
9
- import { platform } from "node:process";
10
- const logger = Logger.get("NobleBleClient");
11
- let noble;
12
- function loadNoble(hciId) {
13
- if (hciId !== void 0) {
14
- process.env.NOBLE_HCI_DEVICE_ID = hciId.toString();
15
- }
16
- noble = require2("@stoprocent/noble");
17
- if (typeof noble.on !== "function") {
18
- noble = noble({ extended: false });
19
- }
20
- }
21
- class NobleBleClient {
22
- discoveredPeripherals = /* @__PURE__ */ new Map();
23
- shouldScan = false;
24
- isScanning = false;
25
- nobleState = "unknown";
26
- deviceDiscoveredCallback;
27
- #closing = false;
28
- constructor(options) {
29
- const { environment } = options ?? {};
30
- environment?.runtime.add(this);
31
- loadNoble(options?.hciId);
32
- noble.on("stateChange", (state) => {
33
- this.nobleState = state;
34
- logger.debug(`Noble state changed to ${state}`);
35
- if (state === "poweredOn") {
36
- if (this.shouldScan) {
37
- void this.startScanning();
38
- }
39
- } else {
40
- void this.stopScanning();
41
- }
42
- });
43
- noble.on("discover", (peripheral) => this.handleDiscoveredDevice(peripheral));
44
- noble.on("scanStart", () => {
45
- if (!this.shouldScan) {
46
- return;
47
- }
48
- this.isScanning = true;
49
- });
50
- noble.on("scanStop", () => this.isScanning = false);
51
- }
52
- setDiscoveryCallback(callback) {
53
- this.deviceDiscoveredCallback = callback;
54
- for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
55
- this.deviceDiscoveredCallback(peripheral, matterServiceData);
56
- }
57
- }
58
- async startScanning() {
59
- if (this.isScanning) {
60
- return;
61
- }
62
- this.shouldScan = true;
63
- if (this.nobleState === "poweredOn") {
64
- logger.debug("Start BLE scanning for Matter Services ...");
65
- await noble.startScanningAsync([MatterBle.SERVICE_UUID_SHORT], true);
66
- } else {
67
- logger.debug("noble state is not poweredOn ... delay scanning till poweredOn");
68
- }
69
- }
70
- async stopScanning() {
71
- if (this.#closing) return;
72
- this.shouldScan = false;
73
- if (this.isScanning) {
74
- logger.debug("Stop BLE scanning for Matter Services ...");
75
- await noble.stopScanningAsync();
76
- }
77
- }
78
- handleDiscoveredDevice(peripheral) {
79
- if (process.platform === "win32" && !peripheral.advertisement.serviceData.some(({ uuid }) => MatterBle.isServiceUuid(uuid))) {
80
- return;
81
- }
82
- const address = peripheral.address;
83
- logger.debug(
84
- `Found peripheral ${address} (${peripheral.advertisement.localName}): ${Diagnostic.json(
85
- peripheral.advertisement
86
- )}`
87
- );
88
- if (!peripheral.connectable) {
89
- logger.debug(`Peripheral ${address} is not connectable ... ignoring`);
90
- return;
91
- }
92
- const matterServiceData = peripheral.advertisement.serviceData.find(
93
- ({ uuid }) => MatterBle.isServiceUuid(uuid)
94
- );
95
- if (matterServiceData === void 0 || matterServiceData.data.length !== 8) {
96
- logger.info(`Peripheral ${address} does not advertise Matter Service ... ignoring`);
97
- return;
98
- }
99
- const serviceDataBytes = Bytes.of(matterServiceData.data);
100
- this.discoveredPeripherals.set(address, { peripheral, matterServiceData: serviceDataBytes });
101
- this.deviceDiscoveredCallback?.(peripheral, serviceDataBytes);
102
- }
103
- close() {
104
- if (this.#closing) {
105
- return;
106
- }
107
- this.#closing = true;
108
- logger.debug("Stopping Noble");
109
- if (this.nobleState === "poweredOn") {
110
- try {
111
- if (platform !== "win32" && platform !== "darwin") {
112
- noble.startScanning();
113
- }
114
- } catch (error) {
115
- logger.info("Error starting scan during close, proceeding to stop:", error);
116
- }
117
- try {
118
- noble.stop();
119
- } catch (error) {
120
- logger.info("Error stopping Noble:", error);
121
- }
122
- Time.getTimer("noble-cleanup", Instant, () => noble.removeAllListeners()).start();
123
- } else {
124
- logger.debug(`Skipping noble.stop() because state is "${this.nobleState}"`);
125
- noble.removeAllListeners();
126
- }
127
- }
128
- [Diagnostic.name] = "BLE client";
129
- }
130
- export {
131
- NobleBleClient
132
- };
133
- //# sourceMappingURL=NobleBleClient.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/NobleBleClient.ts"],
4
- "mappings": "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",
5
- "names": ["require"]
6
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Ble } from "@matter/protocol";
7
- import { BlenoBleServer } from "./BlenoBleServer.js";
8
- import { BlenoPeripheralInterface } from "./BlenoPeripheralInterface.js";
9
- import { BleScanner } from "./BleScanner.js";
10
- import { NobleBleCentralInterface } from "./NobleBleChannel.js";
11
- import { NobleBleClient } from "./NobleBleClient.js";
12
- class NodeJsBle extends Ble {
13
- #options;
14
- #blePeripheralInstance;
15
- #bleCentralInstance;
16
- #bleScanner;
17
- #bleCentralInterface;
18
- #blePeripheralInterface;
19
- constructor(options) {
20
- super();
21
- this.#options = options;
22
- if (options?.environment && options.hciId === void 0) {
23
- const hciId = options.environment.vars.number("ble.hci.id");
24
- if (hciId !== void 0) {
25
- this.#options = {
26
- ...options,
27
- hciId
28
- };
29
- }
30
- }
31
- }
32
- get #blePeripheralServer() {
33
- if (this.#blePeripheralInstance === void 0) {
34
- this.#blePeripheralInstance = new BlenoBleServer(this.#options);
35
- }
36
- return this.#blePeripheralInstance;
37
- }
38
- get #bleCentralClient() {
39
- if (this.#bleCentralInstance === void 0) {
40
- this.#bleCentralInstance = new NobleBleClient(this.#options);
41
- }
42
- return this.#bleCentralInstance;
43
- }
44
- get peripheralInterface() {
45
- if (this.#blePeripheralInterface === void 0) {
46
- this.#blePeripheralInterface = new BlenoPeripheralInterface(this.#blePeripheralServer);
47
- }
48
- return this.#blePeripheralInterface;
49
- }
50
- get centralInterface() {
51
- if (this.#bleCentralInterface === void 0) {
52
- this.#bleCentralInterface = new NobleBleCentralInterface(this.scanner);
53
- }
54
- return this.#bleCentralInterface;
55
- }
56
- get scanner() {
57
- if (this.#bleScanner === void 0) {
58
- this.#bleScanner = new BleScanner(this.#bleCentralClient);
59
- }
60
- return this.#bleScanner;
61
- }
62
- }
63
- export {
64
- NodeJsBle
65
- };
66
- //# sourceMappingURL=NodeJsBle.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/NodeJsBle.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,WAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,kBAAkB;AAC3B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAOxB,MAAM,kBAAkB,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAAsB;AAC9B,UAAM;AACN,SAAK,WAAW;AAChB,QAAI,SAAS,eAAe,QAAQ,UAAU,QAAW;AACrD,YAAM,QAAQ,QAAQ,YAAY,KAAK,OAAO,YAAY;AAC1D,UAAI,UAAU,QAAW;AACrB,aAAK,WAAW;AAAA,UACZ,GAAG;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,uBAAuB;AACvB,QAAI,KAAK,2BAA2B,QAAW;AAC3C,WAAK,yBAAyB,IAAI,eAAe,KAAK,QAAQ;AAAA,IAClE;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,oBAAoB;AACpB,QAAI,KAAK,wBAAwB,QAAW;AACxC,WAAK,sBAAsB,IAAI,eAAe,KAAK,QAAQ;AAAA,IAC/D;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,sBAAgD;AAChD,QAAI,KAAK,4BAA4B,QAAW;AAC5C,WAAK,0BAA0B,IAAI,yBAAyB,KAAK,oBAAoB;AAAA,IACzF;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,mBAA8B;AAC9B,QAAI,KAAK,yBAAyB,QAAW;AACzC,WAAK,uBAAuB,IAAI,yBAAyB,KAAK,OAAqB;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAmB;AACnB,QAAI,KAAK,gBAAgB,QAAW;AAChC,WAAK,cAAc,IAAI,WAAW,KAAK,iBAAiB;AAAA,IAC5D;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;",
5
- "names": []
6
- }
package/dist/esm/index.js DELETED
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export * from "./BleScanner.js";
7
- export * from "./NodeJsBle.js";
8
- import "./install.js";
9
- //# sourceMappingURL=index.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AAEd,OAAO;",
5
- "names": []
6
- }
@@ -1,28 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { ServiceBundle } from "@matter/general";
7
- import { Ble } from "@matter/protocol";
8
- import { NodeJsBle } from "./NodeJsBle.js";
9
- function nodejsBle(env) {
10
- let installed = false;
11
- let instance = void 0;
12
- env.vars.use(() => {
13
- const shouldInstall = env.vars.boolean("ble.enable");
14
- if (shouldInstall === installed) {
15
- return;
16
- }
17
- if (shouldInstall) {
18
- instance = new NodeJsBle({ environment: env });
19
- env.set(Ble, instance);
20
- } else {
21
- env.delete(Ble, instance);
22
- instance = void 0;
23
- }
24
- installed = shouldInstall;
25
- });
26
- }
27
- ServiceBundle.default.add(nodejsBle);
28
- //# sourceMappingURL=install.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/install.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAsB,qBAAqB;AAC3C,SAAS,WAAW;AACpB,SAAS,iBAAiB;AAE1B,SAAS,UAAU,KAAkB;AACjC,MAAI,YAAY;AAChB,MAAI,WAAW;AAEf,MAAI,KAAK,IAAI,MAAM;AACf,UAAM,gBAAgB,IAAI,KAAK,QAAQ,YAAY;AACnD,QAAI,kBAAkB,WAAW;AAC7B;AAAA,IACJ;AAEA,QAAI,eAAe;AACf,iBAAW,IAAI,UAAU,EAAE,aAAa,IAAI,CAAC;AAC7C,UAAI,IAAI,KAAK,QAAQ;AAAA,IACzB,OAAO;AACH,UAAI,OAAO,KAAK,QAAQ;AACxB,iBAAW;AAAA,IACf;AAEA,gBAAY;AAAA,EAChB,CAAC;AACL;AAEA,cAAc,QAAQ,IAAI,SAAS;",
5
- "names": []
6
- }
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }