@matter/nodejs-ble 0.12.0-alpha.0-20250103-ba0c01a01 → 0.12.0-alpha.0-20250108-7ae2a767d
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/dist/cjs/BleScanner.d.ts +2 -2
- package/dist/cjs/BleScanner.d.ts.map +1 -1
- package/dist/cjs/BleScanner.js +19 -13
- package/dist/cjs/BleScanner.js.map +1 -1
- package/dist/cjs/BlenoBleServer.d.ts.map +1 -1
- package/dist/cjs/BlenoBleServer.js +4 -4
- package/dist/cjs/BlenoBleServer.js.map +1 -1
- package/dist/cjs/NobleBleChannel.d.ts +3 -2
- package/dist/cjs/NobleBleChannel.d.ts.map +1 -1
- package/dist/cjs/NobleBleChannel.js +252 -101
- package/dist/cjs/NobleBleChannel.js.map +2 -2
- package/dist/cjs/NobleBleClient.d.ts.map +1 -1
- package/dist/cjs/NobleBleClient.js +15 -7
- package/dist/cjs/NobleBleClient.js.map +1 -1
- package/dist/cjs/NodeJsBle.d.ts +1 -2
- package/dist/cjs/NodeJsBle.d.ts.map +1 -1
- package/dist/cjs/NodeJsBle.js +30 -14
- package/dist/cjs/NodeJsBle.js.map +1 -1
- package/dist/esm/BleScanner.d.ts +2 -2
- package/dist/esm/BleScanner.d.ts.map +1 -1
- package/dist/esm/BleScanner.js +19 -13
- package/dist/esm/BleScanner.js.map +1 -1
- package/dist/esm/BlenoBleServer.d.ts.map +1 -1
- package/dist/esm/BlenoBleServer.js +4 -4
- package/dist/esm/BlenoBleServer.js.map +1 -1
- package/dist/esm/NobleBleChannel.d.ts +3 -2
- package/dist/esm/NobleBleChannel.d.ts.map +1 -1
- package/dist/esm/NobleBleChannel.js +253 -102
- package/dist/esm/NobleBleChannel.js.map +2 -2
- package/dist/esm/NobleBleClient.d.ts.map +1 -1
- package/dist/esm/NobleBleClient.js +15 -7
- package/dist/esm/NobleBleClient.js.map +1 -1
- package/dist/esm/NodeJsBle.d.ts +1 -2
- package/dist/esm/NodeJsBle.d.ts.map +1 -1
- package/dist/esm/NodeJsBle.js +30 -14
- package/dist/esm/NodeJsBle.js.map +1 -1
- package/package.json +5 -5
- package/src/BleScanner.ts +23 -13
- package/src/BlenoBleServer.ts +6 -4
- package/src/NobleBleChannel.ts +316 -126
- package/src/NobleBleClient.ts +17 -7
- package/src/NodeJsBle.ts +32 -14
package/dist/esm/NodeJsBle.js
CHANGED
|
@@ -15,31 +15,47 @@ class NodeJsBle extends Ble {
|
|
|
15
15
|
super();
|
|
16
16
|
this.options = options;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
#blePeripheralInstance;
|
|
19
|
+
#bleCentralInstance;
|
|
20
|
+
#bleScanner;
|
|
21
|
+
#bleBroadcaster;
|
|
22
|
+
#bleCentralInterface;
|
|
23
|
+
#blePeripheralInterface;
|
|
24
|
+
get #blePeripheralServer() {
|
|
25
|
+
if (this.#blePeripheralInstance === void 0) {
|
|
26
|
+
this.#blePeripheralInstance = new BlenoBleServer(this.options);
|
|
27
|
+
}
|
|
28
|
+
return this.#blePeripheralInstance;
|
|
29
|
+
}
|
|
30
|
+
get #bleCentralClient() {
|
|
31
|
+
if (this.#bleCentralInstance === void 0) {
|
|
32
|
+
this.#bleCentralInstance = new NobleBleClient(this.options);
|
|
33
|
+
}
|
|
34
|
+
return this.#bleCentralInstance;
|
|
35
|
+
}
|
|
20
36
|
getBlePeripheralInterface() {
|
|
21
|
-
if (this
|
|
22
|
-
this
|
|
37
|
+
if (this.#blePeripheralInterface === void 0) {
|
|
38
|
+
this.#blePeripheralInterface = new BlePeripheralInterface(this.#blePeripheralServer);
|
|
23
39
|
}
|
|
24
|
-
return
|
|
40
|
+
return this.#blePeripheralInterface;
|
|
25
41
|
}
|
|
26
42
|
getBleCentralInterface() {
|
|
27
|
-
if (this
|
|
28
|
-
this
|
|
43
|
+
if (this.#bleCentralInterface === void 0) {
|
|
44
|
+
this.#bleCentralInterface = new NobleBleCentralInterface(this.getBleScanner());
|
|
29
45
|
}
|
|
30
|
-
return
|
|
46
|
+
return this.#bleCentralInterface;
|
|
31
47
|
}
|
|
32
48
|
getBleBroadcaster(additionalAdvertisementData) {
|
|
33
|
-
if (this
|
|
34
|
-
this
|
|
49
|
+
if (this.#bleBroadcaster === void 0) {
|
|
50
|
+
this.#bleBroadcaster = new BleBroadcaster(this.#blePeripheralServer, additionalAdvertisementData);
|
|
35
51
|
}
|
|
36
|
-
return
|
|
52
|
+
return this.#bleBroadcaster;
|
|
37
53
|
}
|
|
38
54
|
getBleScanner() {
|
|
39
|
-
if (this
|
|
40
|
-
this
|
|
55
|
+
if (this.#bleScanner === void 0) {
|
|
56
|
+
this.#bleScanner = new BleScanner(this.#bleCentralClient);
|
|
41
57
|
}
|
|
42
|
-
return
|
|
58
|
+
return this.#bleScanner;
|
|
43
59
|
}
|
|
44
60
|
}
|
|
45
61
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NodeJsBle.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,WAAyC;AAClD,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAMxB,MAAM,kBAAkB,IAAI;AAAA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,WAAyC;AAClD,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAMxB,MAAM,kBAAkB,IAAI;AAAA,EAQ/B,YAA6B,SAAsB;AAC/C,UAAM;AADmB;AAAA,EAE7B;AAAA,EATA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA,IAAI,uBAAuB;AACvB,QAAI,KAAK,2BAA2B,QAAW;AAC3C,WAAK,yBAAyB,IAAI,eAAe,KAAK,OAAO;AAAA,IACjE;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,oBAAoB;AACpB,QAAI,KAAK,wBAAwB,QAAW;AACxC,WAAK,sBAAsB,IAAI,eAAe,KAAK,OAAO;AAAA,IAC9D;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,4BAAgD;AAC5C,QAAI,KAAK,4BAA4B,QAAW;AAC5C,WAAK,0BAA0B,IAAI,uBAAuB,KAAK,oBAAoB;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,yBAAuC;AACnC,QAAI,KAAK,yBAAyB,QAAW;AACzC,WAAK,uBAAuB,IAAI,yBAAyB,KAAK,cAAc,CAAe;AAAA,IAC/F;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,kBAAkB,6BAA+D;AAC7E,QAAI,KAAK,oBAAoB,QAAW;AACpC,WAAK,kBAAkB,IAAI,eAAe,KAAK,sBAAsB,2BAA2B;AAAA,IACpG;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,gBAAyB;AACrB,QAAI,KAAK,gBAAgB,QAAW;AAChC,WAAK,cAAc,IAAI,WAAW,KAAK,iBAAiB;AAAA,IAC5D;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/nodejs-ble",
|
|
3
|
-
"version": "0.12.0-alpha.0-
|
|
3
|
+
"version": "0.12.0-alpha.0-20250108-7ae2a767d",
|
|
4
4
|
"description": "Matter BLE support for node.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"build-clean": "matter-build --clean"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@matter/general": "0.12.0-alpha.0-
|
|
32
|
-
"@matter/types": "0.12.0-alpha.0-
|
|
33
|
-
"@matter/protocol": "0.12.0-alpha.0-
|
|
31
|
+
"@matter/general": "0.12.0-alpha.0-20250108-7ae2a767d",
|
|
32
|
+
"@matter/types": "0.12.0-alpha.0-20250108-7ae2a767d",
|
|
33
|
+
"@matter/protocol": "0.12.0-alpha.0-20250108-7ae2a767d"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@matter/tools": "0.12.0-alpha.0-
|
|
36
|
+
"@matter/tools": "0.12.0-alpha.0-20250108-7ae2a767d"
|
|
37
37
|
},
|
|
38
38
|
"optionalDependencies": {
|
|
39
39
|
"@stoprocent/bleno": "^0.8.1",
|
package/src/BleScanner.ts
CHANGED
|
@@ -95,33 +95,42 @@ export class BleScanner implements Scanner {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
private handleDiscoveredDevice(peripheral: Peripheral, manufacturerServiceData: Uint8Array) {
|
|
98
|
+
const address = peripheral.address;
|
|
98
99
|
logger.debug(
|
|
99
|
-
`Discovered device ${
|
|
100
|
+
`Discovered device ${address} ${manufacturerServiceData === undefined ? undefined : Bytes.toHex(manufacturerServiceData)}`,
|
|
100
101
|
);
|
|
101
102
|
|
|
102
103
|
try {
|
|
103
104
|
const { discriminator, vendorId, productId, hasAdditionalAdvertisementData } =
|
|
104
105
|
BtpCodec.decodeBleAdvertisementServiceData(manufacturerServiceData);
|
|
105
106
|
|
|
106
|
-
const
|
|
107
|
-
deviceIdentifier:
|
|
107
|
+
const deviceData: CommissionableDeviceData = {
|
|
108
|
+
deviceIdentifier: address,
|
|
108
109
|
D: discriminator,
|
|
109
110
|
SD: (discriminator >> 8) & 0x0f,
|
|
110
111
|
VP: `${vendorId}+${productId}`,
|
|
111
112
|
CM: 1, // Can be no other mode,
|
|
112
|
-
addresses: [{ type: "ble", peripheralAddress:
|
|
113
|
+
addresses: [{ type: "ble", peripheralAddress: address }],
|
|
113
114
|
};
|
|
114
|
-
|
|
115
|
+
const deviceExisting = this.discoveredMatterDevices.has(address);
|
|
115
116
|
|
|
116
|
-
|
|
117
|
+
logger.debug(
|
|
118
|
+
`${deviceExisting ? "Re-" : ""}Discovered device ${address} data: ${Logger.toJSON(deviceData)}`,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
if (deviceExisting) {
|
|
122
|
+
// Device got rediscovered, so clear the state
|
|
123
|
+
// TODO: Remove once noble does that by itself
|
|
124
|
+
peripheral.state = "disconnected";
|
|
125
|
+
}
|
|
117
126
|
|
|
118
|
-
this.discoveredMatterDevices.set(
|
|
119
|
-
deviceData
|
|
120
|
-
peripheral
|
|
127
|
+
this.discoveredMatterDevices.set(address, {
|
|
128
|
+
deviceData,
|
|
129
|
+
peripheral,
|
|
121
130
|
hasAdditionalAdvertisementData,
|
|
122
131
|
});
|
|
123
132
|
|
|
124
|
-
const queryKey = this.findCommissionableQueryIdentifier(
|
|
133
|
+
const queryKey = this.findCommissionableQueryIdentifier(deviceData);
|
|
125
134
|
if (queryKey !== undefined) {
|
|
126
135
|
this.finishWaiter(queryKey, true, deviceExisting);
|
|
127
136
|
}
|
|
@@ -223,8 +232,9 @@ export class BleScanner implements Scanner {
|
|
|
223
232
|
async findCommissionableDevices(
|
|
224
233
|
identifier: CommissionableDeviceIdentifiers,
|
|
225
234
|
timeoutSeconds = 10,
|
|
235
|
+
ignoreExistingRecords = false,
|
|
226
236
|
): Promise<CommissionableDevice[]> {
|
|
227
|
-
let storedRecords = this.getCommissionableDevices(identifier);
|
|
237
|
+
let storedRecords = ignoreExistingRecords ? [] : this.getCommissionableDevices(identifier);
|
|
228
238
|
if (storedRecords.length === 0) {
|
|
229
239
|
const queryKey = this.buildCommissionableQueryIdentifier(identifier);
|
|
230
240
|
|
|
@@ -288,8 +298,8 @@ export class BleScanner implements Scanner {
|
|
|
288
298
|
return this.getCommissionableDevices(identifier).map(({ deviceData }) => deviceData);
|
|
289
299
|
}
|
|
290
300
|
|
|
291
|
-
close()
|
|
292
|
-
|
|
301
|
+
async close() {
|
|
302
|
+
await this.nobleClient.stopScanning();
|
|
293
303
|
[...this.recordWaiters.keys()].forEach(queryId =>
|
|
294
304
|
this.finishWaiter(queryId, !!this.recordWaiters.get(queryId)?.timer),
|
|
295
305
|
);
|
package/src/BlenoBleServer.ts
CHANGED
|
@@ -64,15 +64,17 @@ function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
override
|
|
67
|
+
override onSubscribe(maxValueSize: number, updateValueCallback: (data: Buffer) => void) {
|
|
68
68
|
logger.debug(`C2 subscribe ${maxValueSize}`);
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
server
|
|
71
|
+
.handleC2SubscribeRequest(maxValueSize, updateValueCallback)
|
|
72
|
+
.catch(e => logger.warn("Error happened in when handling C2 subscribe", e));
|
|
71
73
|
}
|
|
72
74
|
|
|
73
|
-
override
|
|
75
|
+
override onUnsubscribe() {
|
|
74
76
|
logger.debug("C2 unsubscribe");
|
|
75
|
-
|
|
77
|
+
server.close().catch(e => logger.warn("Error happened when closing server for C2 unsubscribe", e));
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
override onIndicate() {
|