@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 @@
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,88 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Logger } from "@matter/general";
7
+ import { require as require2 } from "@matter/nodejs-ble/require";
8
+ import { BLE_MATTER_SERVICE_UUID } from "@project-chip/matter.js/ble";
9
+ const logger = Logger.get("NobleBleClient");
10
+ let noble;
11
+ function loadNoble(hciId) {
12
+ if (hciId !== void 0) {
13
+ process.env.NOBLE_HCI_DEVICE_ID = hciId.toString();
14
+ }
15
+ noble = require2("@stoprocent/noble");
16
+ if (typeof noble.on !== "function") {
17
+ noble = noble({ extended: false });
18
+ }
19
+ }
20
+ class NobleBleClient {
21
+ discoveredPeripherals = /* @__PURE__ */ new Map();
22
+ shouldScan = false;
23
+ isScanning = false;
24
+ nobleState = "unknown";
25
+ deviceDiscoveredCallback;
26
+ constructor(options) {
27
+ loadNoble(options?.hciId);
28
+ noble.on("stateChange", (state) => {
29
+ this.nobleState = state;
30
+ logger.debug(`Noble state changed to ${state}`);
31
+ if (state === "poweredOn") {
32
+ if (this.shouldScan) {
33
+ void this.startScanning();
34
+ }
35
+ } else {
36
+ void this.stopScanning();
37
+ }
38
+ });
39
+ noble.on("discover", (peripheral) => this.handleDiscoveredDevice(peripheral));
40
+ noble.on("scanStart", () => this.isScanning = true);
41
+ noble.on("scanStop", () => this.isScanning = false);
42
+ }
43
+ setDiscoveryCallback(callback) {
44
+ this.deviceDiscoveredCallback = callback;
45
+ for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
46
+ this.deviceDiscoveredCallback(peripheral, matterServiceData);
47
+ }
48
+ }
49
+ async startScanning() {
50
+ if (this.isScanning) return;
51
+ this.shouldScan = true;
52
+ if (this.nobleState === "poweredOn") {
53
+ logger.debug("Start BLE scanning for Matter Services ...");
54
+ await noble.startScanningAsync([BLE_MATTER_SERVICE_UUID], false);
55
+ } else {
56
+ logger.debug("noble state is not poweredOn ... delay scanning till poweredOn");
57
+ }
58
+ }
59
+ async stopScanning() {
60
+ this.shouldScan = false;
61
+ logger.debug("Stop BLE scanning for Matter Services ...");
62
+ await noble.stopScanningAsync();
63
+ }
64
+ handleDiscoveredDevice(peripheral) {
65
+ logger.debug(
66
+ `Found peripheral ${peripheral.address} (${peripheral.advertisement.localName}): ${Logger.toJSON(
67
+ peripheral.advertisement
68
+ )}`
69
+ );
70
+ if (!peripheral.connectable) {
71
+ logger.info(`Peripheral ${peripheral.address} is not connectable ... ignoring`);
72
+ return;
73
+ }
74
+ const matterServiceData = peripheral.advertisement.serviceData.find(
75
+ (serviceData) => serviceData.uuid === BLE_MATTER_SERVICE_UUID
76
+ );
77
+ if (matterServiceData === void 0 || matterServiceData.data.length !== 8) {
78
+ logger.info(`Peripheral ${peripheral.address} does not advertise Matter Service ... ignoring`);
79
+ return;
80
+ }
81
+ this.discoveredPeripherals.set(peripheral.address, { peripheral, matterServiceData: matterServiceData.data });
82
+ this.deviceDiscoveredCallback?.(peripheral, matterServiceData.data);
83
+ }
84
+ }
85
+ export {
86
+ NobleBleClient
87
+ };
88
+ //# 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,SAAS,cAAc;AACvB,SAAS,WAAAA,gBAAe;AACxB,SAAS,+BAA+B;AAIxC,MAAM,SAAS,OAAO,IAAI,gBAAgB;AAC1C,IAAI;AAEJ,SAAS,UAAU,OAAgB;AAE/B,MAAI,UAAU,QAAW;AACrB,YAAQ,IAAI,sBAAsB,MAAM,SAAS;AAAA,EACrD;AACA,UAAQA,SAAQ,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,uBAAuB,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,OAAO;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": ["require"]
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,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Ble } from "@project-chip/matter.js/ble";
7
+ import { BleBroadcaster } from "./BleBroadcaster.js";
8
+ import { BlePeripheralInterface } from "./BlePeripheralInterface.js";
9
+ import { BleScanner } from "./BleScanner.js";
10
+ import { BlenoBleServer } from "./BlenoBleServer.js";
11
+ import { NobleBleCentralInterface } from "./NobleBleChannel.js";
12
+ import { NobleBleClient } from "./NobleBleClient.js";
13
+ class NodeJsBle extends Ble {
14
+ constructor(options) {
15
+ super();
16
+ this.options = options;
17
+ }
18
+ blePeripheral;
19
+ bleCentral;
20
+ getBlePeripheralInterface() {
21
+ if (this.blePeripheral === void 0) {
22
+ this.blePeripheral = new BlenoBleServer(this.options);
23
+ }
24
+ return new BlePeripheralInterface(this.blePeripheral);
25
+ }
26
+ getBleCentralInterface() {
27
+ if (this.bleCentral === void 0) {
28
+ this.bleCentral = new NobleBleClient(this.options);
29
+ }
30
+ return new NobleBleCentralInterface();
31
+ }
32
+ getBleBroadcaster(additionalAdvertisementData) {
33
+ if (this.blePeripheral === void 0) {
34
+ this.blePeripheral = new BlenoBleServer(this.options);
35
+ }
36
+ return new BleBroadcaster(this.blePeripheral, additionalAdvertisementData);
37
+ }
38
+ getBleScanner() {
39
+ if (this.bleCentral === void 0) {
40
+ this.bleCentral = new NobleBleClient(this.options);
41
+ }
42
+ return new BleScanner(this.bleCentral);
43
+ }
44
+ }
45
+ export {
46
+ NodeJsBle
47
+ };
48
+ //# 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,SAAS,WAAW;AAEpB,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAMxB,MAAM,kBAAkB,IAAI;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,eAAe,KAAK,OAAO;AAAA,IACxD;AACA,WAAO,IAAI,uBAAuB,KAAK,aAAa;AAAA,EACxD;AAAA,EAEA,yBAAuC;AACnC,QAAI,KAAK,eAAe,QAAW;AAC/B,WAAK,aAAa,IAAI,eAAe,KAAK,OAAO;AAAA,IACrD;AACA,WAAO,IAAI,yBAAyB;AAAA,EACxC;AAAA,EAEA,kBAAkB,6BAA+D;AAC7E,QAAI,KAAK,kBAAkB,QAAW;AAClC,WAAK,gBAAgB,IAAI,eAAe,KAAK,OAAO;AAAA,IACxD;AACA,WAAO,IAAI,eAAe,KAAK,eAAe,2BAA2B;AAAA,EAC7E;AAAA,EAEA,gBAAyB;AACrB,QAAI,KAAK,eAAe,QAAW;AAC/B,WAAK,aAAa,IAAI,eAAe,KAAK,OAAO;AAAA,IACrD;AACA,WAAO,IAAI,WAAW,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,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.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }