@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.
- package/LICENSE +201 -0
- package/README.md +55 -0
- package/dist/cjs/BleBroadcaster.d.ts +20 -0
- package/dist/cjs/BleBroadcaster.d.ts.map +1 -0
- package/dist/cjs/BleBroadcaster.js +121 -0
- package/dist/cjs/BleBroadcaster.js.map +6 -0
- package/dist/cjs/BlePeripheralInterface.d.ts +15 -0
- package/dist/cjs/BlePeripheralInterface.d.ts.map +1 -0
- package/dist/cjs/BlePeripheralInterface.js +54 -0
- package/dist/cjs/BlePeripheralInterface.js.map +6 -0
- package/dist/cjs/BleScanner.d.ts +52 -0
- package/dist/cjs/BleScanner.d.ts.map +1 -0
- package/dist/cjs/BleScanner.js +240 -0
- package/dist/cjs/BleScanner.js.map +6 -0
- package/dist/cjs/BlenoBleServer.d.ts +70 -0
- package/dist/cjs/BlenoBleServer.d.ts.map +1 -0
- package/dist/cjs/BlenoBleServer.js +337 -0
- package/dist/cjs/BlenoBleServer.js.map +6 -0
- package/dist/cjs/NobleBleChannel.d.ts +32 -0
- package/dist/cjs/NobleBleChannel.d.ts.map +1 -0
- package/dist/cjs/NobleBleChannel.js +266 -0
- package/dist/cjs/NobleBleChannel.js.map +6 -0
- package/dist/cjs/NobleBleClient.d.ts +20 -0
- package/dist/cjs/NobleBleClient.d.ts.map +1 -0
- package/dist/cjs/NobleBleClient.js +108 -0
- package/dist/cjs/NobleBleClient.js.map +6 -0
- package/dist/cjs/NodeJsBle.d.ts +22 -0
- package/dist/cjs/NodeJsBle.d.ts.map +1 -0
- package/dist/cjs/NodeJsBle.js +68 -0
- package/dist/cjs/NodeJsBle.js.map +6 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +26 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/BleBroadcaster.d.ts +20 -0
- package/dist/esm/BleBroadcaster.d.ts.map +1 -0
- package/dist/esm/BleBroadcaster.js +101 -0
- package/dist/esm/BleBroadcaster.js.map +6 -0
- package/dist/esm/BlePeripheralInterface.d.ts +15 -0
- package/dist/esm/BlePeripheralInterface.d.ts.map +1 -0
- package/dist/esm/BlePeripheralInterface.js +34 -0
- package/dist/esm/BlePeripheralInterface.js.map +6 -0
- package/dist/esm/BleScanner.d.ts +52 -0
- package/dist/esm/BleScanner.d.ts.map +1 -0
- package/dist/esm/BleScanner.js +220 -0
- package/dist/esm/BleScanner.js.map +6 -0
- package/dist/esm/BlenoBleServer.d.ts +70 -0
- package/dist/esm/BlenoBleServer.d.ts.map +1 -0
- package/dist/esm/BlenoBleServer.js +327 -0
- package/dist/esm/BlenoBleServer.js.map +6 -0
- package/dist/esm/NobleBleChannel.d.ts +32 -0
- package/dist/esm/NobleBleChannel.d.ts.map +1 -0
- package/dist/esm/NobleBleChannel.js +266 -0
- package/dist/esm/NobleBleChannel.js.map +6 -0
- package/dist/esm/NobleBleClient.d.ts +20 -0
- package/dist/esm/NobleBleClient.d.ts.map +1 -0
- package/dist/esm/NobleBleClient.js +88 -0
- package/dist/esm/NobleBleClient.js.map +6 -0
- package/dist/esm/NodeJsBle.d.ts +22 -0
- package/dist/esm/NodeJsBle.d.ts.map +1 -0
- package/dist/esm/NodeJsBle.js +48 -0
- package/dist/esm/NodeJsBle.js.map +6 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/package.json +83 -0
- package/require/package.json +4 -0
- package/require/require.cjs +1 -0
- package/require/require.d.ts +1 -0
- package/require/require.mjs +3 -0
- package/src/BleBroadcaster.ts +126 -0
- package/src/BlePeripheralInterface.ts +36 -0
- package/src/BleScanner.ts +279 -0
- package/src/BlenoBleServer.ts +403 -0
- package/src/NobleBleChannel.ts +337 -0
- package/src/NobleBleClient.ts +117 -0
- package/src/NodeJsBle.ts +56 -0
- package/src/index.ts +9 -0
- 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 @@
|
|
|
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"}
|