@matter/nodejs-ble 0.13.1-alpha.0-20250504-87f265a2e → 0.13.1-alpha.0-20250508-047aa0277
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/NobleBleChannel.d.ts.map +1 -1
- package/dist/cjs/NobleBleChannel.js +33 -14
- package/dist/cjs/NobleBleChannel.js.map +1 -1
- package/dist/esm/NobleBleChannel.d.ts.map +1 -1
- package/dist/esm/NobleBleChannel.js +34 -14
- package/dist/esm/NobleBleChannel.js.map +1 -1
- package/package.json +5 -5
- package/src/NobleBleChannel.ts +36 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NobleBleChannel.d.ts","sourceRoot":"","sources":["../../src/NobleBleChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EACP,WAAW,EAIX,YAAY,EAEZ,aAAa,EAGb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"NobleBleChannel.d.ts","sourceRoot":"","sources":["../../src/NobleBleChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EACP,WAAW,EAIX,YAAY,EAEZ,aAAa,EAGb,kBAAkB,EAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EASH,UAAU,EAIV,iBAAiB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkC7C,qBAAa,wBAAyB,YAAW,YAAY;;gBAQ7C,UAAU,EAAE,UAAU;IAIlC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IA6S/E,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,kBAAkB,CAAC,QAAQ;IAOhG,KAAK;IAaX,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM;CAMhD;AAED,qBAAa,eAAgB,SAAQ,UAAU,CAAC,UAAU,CAAC;;IAkHnD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;WAlHlB,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;gBA2GN,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,iBAAiB;IAUlD,IAAI,SAAS,YAEZ;IAED;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU;IAgB3B,IAAI,IAAI,WAEP;IAEK,KAAK;CAUd"}
|
|
@@ -59,22 +59,41 @@ class NobleBleCentralInterface {
|
|
|
59
59
|
throw new import_general.NetworkError("Network interface is closed");
|
|
60
60
|
}
|
|
61
61
|
return new Promise((resolve, reject) => {
|
|
62
|
+
let resolvedOrRejected = false;
|
|
63
|
+
function rejectOnce(error) {
|
|
64
|
+
if (!resolvedOrRejected) {
|
|
65
|
+
resolvedOrRejected = true;
|
|
66
|
+
reject((0, import_general.asError)(error));
|
|
67
|
+
} else {
|
|
68
|
+
logger.debug(`Already resolved or rejected, ignore error:`, error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function resolveOnce(value) {
|
|
72
|
+
if (!resolvedOrRejected) {
|
|
73
|
+
resolvedOrRejected = true;
|
|
74
|
+
resolve(value);
|
|
75
|
+
} else {
|
|
76
|
+
logger.debug(`Already resolved or rejected, ignore success`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
62
79
|
if (this.#onMatterMessageListener === void 0) {
|
|
63
|
-
|
|
80
|
+
rejectOnce(
|
|
81
|
+
new import_general.InternalError(`Network Interface was not added to the system yet, so can not connect it.`)
|
|
82
|
+
);
|
|
64
83
|
return;
|
|
65
84
|
}
|
|
66
85
|
if (address.type !== "ble") {
|
|
67
|
-
|
|
86
|
+
rejectOnce(new import_general.InternalError(`Unsupported address type ${address.type}.`));
|
|
68
87
|
return;
|
|
69
88
|
}
|
|
70
89
|
const { peripheralAddress } = address;
|
|
71
90
|
if (tryCount > 3) {
|
|
72
|
-
|
|
91
|
+
rejectOnce(new import_protocol.BleError(`Failed to connect to peripheral ${peripheralAddress}`));
|
|
73
92
|
return;
|
|
74
93
|
}
|
|
75
94
|
const { peripheral, hasAdditionalAdvertisementData } = this.#bleScanner.getDiscoveredDevice(peripheralAddress);
|
|
76
95
|
if (this.#openChannels.has(address)) {
|
|
77
|
-
|
|
96
|
+
rejectOnce(
|
|
78
97
|
new import_protocol.BleError(
|
|
79
98
|
`Peripheral ${peripheralAddress} is already connected. Only one connection supported right now.`
|
|
80
99
|
)
|
|
@@ -86,7 +105,7 @@ class NobleBleCentralInterface {
|
|
|
86
105
|
return;
|
|
87
106
|
}
|
|
88
107
|
if (peripheral.state === "error") {
|
|
89
|
-
|
|
108
|
+
rejectOnce(
|
|
90
109
|
new import_protocol.BleError(
|
|
91
110
|
`Can not connect to peripheral "${peripheralAddress}" because unexpected state "${peripheral.state}"`
|
|
92
111
|
)
|
|
@@ -97,18 +116,18 @@ class NobleBleCentralInterface {
|
|
|
97
116
|
// Timeout when trying to connect to the device because sometimes connect fails and noble does
|
|
98
117
|
// not emit an event. If device does not connect we do not try any longer and reject the promise
|
|
99
118
|
// because a re-discovery is the best option to get teh device into a good state again
|
|
100
|
-
connectTimeout: import_general.Time.getTimer("BLE connect timeout",
|
|
119
|
+
connectTimeout: import_general.Time.getTimer("BLE connect timeout", 12e4, () => {
|
|
101
120
|
logger.debug(`Timeout while connecting to peripheral ${peripheralAddress}`);
|
|
102
121
|
peripheral.removeListener("connect", connectHandler);
|
|
103
122
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
104
123
|
clearConnectionGuard();
|
|
105
|
-
|
|
124
|
+
rejectOnce(new import_protocol.BleError(`Timeout while connecting to peripheral ${peripheralAddress}`));
|
|
106
125
|
}),
|
|
107
126
|
disconnectTimeout: import_general.Time.getTimer("BLE disconnect timeout", 6e4, () => {
|
|
108
127
|
logger.debug(`Timeout while disconnecting to peripheral ${peripheralAddress}`);
|
|
109
128
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
110
129
|
clearConnectionGuard();
|
|
111
|
-
|
|
130
|
+
rejectOnce(new import_protocol.BleError(`Timeout while disconnecting to peripheral ${peripheralAddress}`));
|
|
112
131
|
}),
|
|
113
132
|
// Timeout when trying to interview the device because sometimes when no response from device
|
|
114
133
|
// comes noble does not resolve promises
|
|
@@ -119,7 +138,7 @@ class NobleBleCentralInterface {
|
|
|
119
138
|
if (peripheral.state === "connected") {
|
|
120
139
|
peripheral.disconnectAsync().catch((error) => logger.error(`Ignored error while disconnecting`, error));
|
|
121
140
|
}
|
|
122
|
-
|
|
141
|
+
rejectOnce(new import_protocol.BleError(`Timeout while interviewing peripheral ${peripheralAddress}`));
|
|
123
142
|
})
|
|
124
143
|
};
|
|
125
144
|
this.#connectionGuards.add(connectionGuard);
|
|
@@ -143,7 +162,7 @@ class NobleBleCentralInterface {
|
|
|
143
162
|
} else {
|
|
144
163
|
logger.info(`Peripheral ${peripheralAddress} disconnected while trying to connect, try again`);
|
|
145
164
|
}
|
|
146
|
-
this.openChannel(address, tryCount + 1).then(
|
|
165
|
+
this.openChannel(address, tryCount + 1).then(resolveOnce).catch(rejectOnce);
|
|
147
166
|
};
|
|
148
167
|
const connectHandler = async (error) => {
|
|
149
168
|
connectionGuard.connectTimeout.stop();
|
|
@@ -152,12 +171,12 @@ class NobleBleCentralInterface {
|
|
|
152
171
|
}
|
|
153
172
|
if (error) {
|
|
154
173
|
clearConnectionGuard();
|
|
155
|
-
|
|
174
|
+
rejectOnce(new import_protocol.BleError(`Error while connecting to peripheral ${peripheralAddress}`, error));
|
|
156
175
|
return;
|
|
157
176
|
}
|
|
158
177
|
if (this.#onMatterMessageListener === void 0) {
|
|
159
178
|
clearConnectionGuard();
|
|
160
|
-
|
|
179
|
+
rejectOnce(new import_general.InternalError(`Network Interface was not added to the system yet or was cleared.`));
|
|
161
180
|
return;
|
|
162
181
|
}
|
|
163
182
|
if (this.#connectionsInProgress.has(address)) {
|
|
@@ -223,7 +242,7 @@ class NobleBleCentralInterface {
|
|
|
223
242
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
224
243
|
this.#openChannels.set(address, peripheral);
|
|
225
244
|
try {
|
|
226
|
-
|
|
245
|
+
resolveOnce(
|
|
227
246
|
await NobleBleChannel.create(
|
|
228
247
|
peripheral,
|
|
229
248
|
characteristicC1ForWrite,
|
|
@@ -255,7 +274,7 @@ class NobleBleCentralInterface {
|
|
|
255
274
|
clearConnectionGuard();
|
|
256
275
|
}
|
|
257
276
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
258
|
-
|
|
277
|
+
rejectOnce(
|
|
259
278
|
new import_protocol.BleError(`Peripheral ${peripheralAddress} does not have the required Matter characteristics`)
|
|
260
279
|
);
|
|
261
280
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NobleBleChannel.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["error"]
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NobleBleChannel.d.ts","sourceRoot":"","sources":["../../src/NobleBleChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EACP,WAAW,EAIX,YAAY,EAEZ,aAAa,EAGb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"NobleBleChannel.d.ts","sourceRoot":"","sources":["../../src/NobleBleChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EACP,WAAW,EAIX,YAAY,EAEZ,aAAa,EAGb,kBAAkB,EAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EASH,UAAU,EAIV,iBAAiB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkC7C,qBAAa,wBAAyB,YAAW,YAAY;;gBAQ7C,UAAU,EAAE,UAAU;IAIlC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IA6S/E,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,kBAAkB,CAAC,QAAQ;IAOhG,KAAK;IAaX,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM;CAMhD;AAED,qBAAa,eAAgB,SAAQ,UAAU,CAAC,UAAU,CAAC;;IAkHnD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;WAlHlB,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;gBA2GN,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,iBAAiB;IAUlD,IAAI,SAAS,YAEZ;IAED;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU;IAgB3B,IAAI,IAAI,WAEP;IAEK,KAAK;CAUd"}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
Logger,
|
|
11
11
|
NetworkError,
|
|
12
12
|
Time,
|
|
13
|
+
asError,
|
|
13
14
|
createPromise
|
|
14
15
|
} from "@matter/general";
|
|
15
16
|
import {
|
|
@@ -57,22 +58,41 @@ class NobleBleCentralInterface {
|
|
|
57
58
|
throw new NetworkError("Network interface is closed");
|
|
58
59
|
}
|
|
59
60
|
return new Promise((resolve, reject) => {
|
|
61
|
+
let resolvedOrRejected = false;
|
|
62
|
+
function rejectOnce(error) {
|
|
63
|
+
if (!resolvedOrRejected) {
|
|
64
|
+
resolvedOrRejected = true;
|
|
65
|
+
reject(asError(error));
|
|
66
|
+
} else {
|
|
67
|
+
logger.debug(`Already resolved or rejected, ignore error:`, error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function resolveOnce(value) {
|
|
71
|
+
if (!resolvedOrRejected) {
|
|
72
|
+
resolvedOrRejected = true;
|
|
73
|
+
resolve(value);
|
|
74
|
+
} else {
|
|
75
|
+
logger.debug(`Already resolved or rejected, ignore success`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
60
78
|
if (this.#onMatterMessageListener === void 0) {
|
|
61
|
-
|
|
79
|
+
rejectOnce(
|
|
80
|
+
new InternalError(`Network Interface was not added to the system yet, so can not connect it.`)
|
|
81
|
+
);
|
|
62
82
|
return;
|
|
63
83
|
}
|
|
64
84
|
if (address.type !== "ble") {
|
|
65
|
-
|
|
85
|
+
rejectOnce(new InternalError(`Unsupported address type ${address.type}.`));
|
|
66
86
|
return;
|
|
67
87
|
}
|
|
68
88
|
const { peripheralAddress } = address;
|
|
69
89
|
if (tryCount > 3) {
|
|
70
|
-
|
|
90
|
+
rejectOnce(new BleError(`Failed to connect to peripheral ${peripheralAddress}`));
|
|
71
91
|
return;
|
|
72
92
|
}
|
|
73
93
|
const { peripheral, hasAdditionalAdvertisementData } = this.#bleScanner.getDiscoveredDevice(peripheralAddress);
|
|
74
94
|
if (this.#openChannels.has(address)) {
|
|
75
|
-
|
|
95
|
+
rejectOnce(
|
|
76
96
|
new BleError(
|
|
77
97
|
`Peripheral ${peripheralAddress} is already connected. Only one connection supported right now.`
|
|
78
98
|
)
|
|
@@ -84,7 +104,7 @@ class NobleBleCentralInterface {
|
|
|
84
104
|
return;
|
|
85
105
|
}
|
|
86
106
|
if (peripheral.state === "error") {
|
|
87
|
-
|
|
107
|
+
rejectOnce(
|
|
88
108
|
new BleError(
|
|
89
109
|
`Can not connect to peripheral "${peripheralAddress}" because unexpected state "${peripheral.state}"`
|
|
90
110
|
)
|
|
@@ -95,18 +115,18 @@ class NobleBleCentralInterface {
|
|
|
95
115
|
// Timeout when trying to connect to the device because sometimes connect fails and noble does
|
|
96
116
|
// not emit an event. If device does not connect we do not try any longer and reject the promise
|
|
97
117
|
// because a re-discovery is the best option to get teh device into a good state again
|
|
98
|
-
connectTimeout: Time.getTimer("BLE connect timeout",
|
|
118
|
+
connectTimeout: Time.getTimer("BLE connect timeout", 12e4, () => {
|
|
99
119
|
logger.debug(`Timeout while connecting to peripheral ${peripheralAddress}`);
|
|
100
120
|
peripheral.removeListener("connect", connectHandler);
|
|
101
121
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
102
122
|
clearConnectionGuard();
|
|
103
|
-
|
|
123
|
+
rejectOnce(new BleError(`Timeout while connecting to peripheral ${peripheralAddress}`));
|
|
104
124
|
}),
|
|
105
125
|
disconnectTimeout: Time.getTimer("BLE disconnect timeout", 6e4, () => {
|
|
106
126
|
logger.debug(`Timeout while disconnecting to peripheral ${peripheralAddress}`);
|
|
107
127
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
108
128
|
clearConnectionGuard();
|
|
109
|
-
|
|
129
|
+
rejectOnce(new BleError(`Timeout while disconnecting to peripheral ${peripheralAddress}`));
|
|
110
130
|
}),
|
|
111
131
|
// Timeout when trying to interview the device because sometimes when no response from device
|
|
112
132
|
// comes noble does not resolve promises
|
|
@@ -117,7 +137,7 @@ class NobleBleCentralInterface {
|
|
|
117
137
|
if (peripheral.state === "connected") {
|
|
118
138
|
peripheral.disconnectAsync().catch((error) => logger.error(`Ignored error while disconnecting`, error));
|
|
119
139
|
}
|
|
120
|
-
|
|
140
|
+
rejectOnce(new BleError(`Timeout while interviewing peripheral ${peripheralAddress}`));
|
|
121
141
|
})
|
|
122
142
|
};
|
|
123
143
|
this.#connectionGuards.add(connectionGuard);
|
|
@@ -141,7 +161,7 @@ class NobleBleCentralInterface {
|
|
|
141
161
|
} else {
|
|
142
162
|
logger.info(`Peripheral ${peripheralAddress} disconnected while trying to connect, try again`);
|
|
143
163
|
}
|
|
144
|
-
this.openChannel(address, tryCount + 1).then(
|
|
164
|
+
this.openChannel(address, tryCount + 1).then(resolveOnce).catch(rejectOnce);
|
|
145
165
|
};
|
|
146
166
|
const connectHandler = async (error) => {
|
|
147
167
|
connectionGuard.connectTimeout.stop();
|
|
@@ -150,12 +170,12 @@ class NobleBleCentralInterface {
|
|
|
150
170
|
}
|
|
151
171
|
if (error) {
|
|
152
172
|
clearConnectionGuard();
|
|
153
|
-
|
|
173
|
+
rejectOnce(new BleError(`Error while connecting to peripheral ${peripheralAddress}`, error));
|
|
154
174
|
return;
|
|
155
175
|
}
|
|
156
176
|
if (this.#onMatterMessageListener === void 0) {
|
|
157
177
|
clearConnectionGuard();
|
|
158
|
-
|
|
178
|
+
rejectOnce(new InternalError(`Network Interface was not added to the system yet or was cleared.`));
|
|
159
179
|
return;
|
|
160
180
|
}
|
|
161
181
|
if (this.#connectionsInProgress.has(address)) {
|
|
@@ -221,7 +241,7 @@ class NobleBleCentralInterface {
|
|
|
221
241
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
222
242
|
this.#openChannels.set(address, peripheral);
|
|
223
243
|
try {
|
|
224
|
-
|
|
244
|
+
resolveOnce(
|
|
225
245
|
await NobleBleChannel.create(
|
|
226
246
|
peripheral,
|
|
227
247
|
characteristicC1ForWrite,
|
|
@@ -253,7 +273,7 @@ class NobleBleCentralInterface {
|
|
|
253
273
|
clearConnectionGuard();
|
|
254
274
|
}
|
|
255
275
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
256
|
-
|
|
276
|
+
rejectOnce(
|
|
257
277
|
new BleError(`Peripheral ${peripheralAddress} does not have the required Matter characteristics`)
|
|
258
278
|
);
|
|
259
279
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NobleBleChannel.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EAEI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EAGA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAIP,MAAM,SAAS,OAAO,IAAI,YAAY;AAQtC,SAAS,gBAAgB,MAAsB;AAC3C,SAAO,KAAK,YAAY;AAExB,MAAI,KAAK,WAAW,IAAI;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,QAAQ;AAAA,IACV,KAAK,UAAU,GAAG,CAAC;AAAA,IACnB,KAAK,UAAU,GAAG,EAAE;AAAA,IACpB,KAAK,UAAU,IAAI,EAAE;AAAA,IACrB,KAAK,UAAU,IAAI,EAAE;AAAA,IACrB,KAAK,UAAU,IAAI,EAAE;AAAA,EACzB;AAEA,SAAO,MAAM,KAAK,GAAG;AACzB;AAQO,MAAM,yBAAiD;AAAA,EAC1D;AAAA,EACA,yBAAyB,oBAAI,IAAmB;AAAA,EAChD,oBAAoB,oBAAI,IAAwB;AAAA,EAChD,gBAAgB,oBAAI,IAA+B;AAAA,EACnD;AAAA,EACA,UAAU;AAAA,EAEV,YAAY,YAAwB;AAChC,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,YAAY,SAAwB,WAAW,GAAiC;AAC5E,QAAI,KAAK,SAAS;AACd,YAAM,IAAI,aAAa,6BAA6B;AAAA,IACxD;AACA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,UAAI,KAAK,6BAA6B,QAAW;AAC7C,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["error"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/nodejs-ble",
|
|
3
|
-
"version": "0.13.1-alpha.0-
|
|
3
|
+
"version": "0.13.1-alpha.0-20250508-047aa0277",
|
|
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.13.1-alpha.0-
|
|
32
|
-
"@matter/types": "0.13.1-alpha.0-
|
|
33
|
-
"@matter/protocol": "0.13.1-alpha.0-
|
|
31
|
+
"@matter/general": "0.13.1-alpha.0-20250508-047aa0277",
|
|
32
|
+
"@matter/types": "0.13.1-alpha.0-20250508-047aa0277",
|
|
33
|
+
"@matter/protocol": "0.13.1-alpha.0-20250508-047aa0277"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@matter/tools": "0.13.1-alpha.0-
|
|
36
|
+
"@matter/tools": "0.13.1-alpha.0-20250508-047aa0277"
|
|
37
37
|
},
|
|
38
38
|
"optionalDependencies": {
|
|
39
39
|
"@stoprocent/bleno": "^0.11.3",
|
package/src/NobleBleChannel.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
Time,
|
|
17
17
|
Timer,
|
|
18
18
|
TransportInterface,
|
|
19
|
+
asError,
|
|
19
20
|
createPromise,
|
|
20
21
|
} from "@matter/general";
|
|
21
22
|
import {
|
|
@@ -85,17 +86,37 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
85
86
|
throw new NetworkError("Network interface is closed");
|
|
86
87
|
}
|
|
87
88
|
return new Promise((resolve, reject) => {
|
|
89
|
+
let resolvedOrRejected = false;
|
|
90
|
+
function rejectOnce(error: unknown) {
|
|
91
|
+
if (!resolvedOrRejected) {
|
|
92
|
+
resolvedOrRejected = true;
|
|
93
|
+
reject(asError(error));
|
|
94
|
+
} else {
|
|
95
|
+
logger.debug(`Already resolved or rejected, ignore error:`, error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function resolveOnce(value: Channel<Uint8Array>) {
|
|
99
|
+
if (!resolvedOrRejected) {
|
|
100
|
+
resolvedOrRejected = true;
|
|
101
|
+
resolve(value);
|
|
102
|
+
} else {
|
|
103
|
+
logger.debug(`Already resolved or rejected, ignore success`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
88
107
|
if (this.#onMatterMessageListener === undefined) {
|
|
89
|
-
|
|
108
|
+
rejectOnce(
|
|
109
|
+
new InternalError(`Network Interface was not added to the system yet, so can not connect it.`),
|
|
110
|
+
);
|
|
90
111
|
return;
|
|
91
112
|
}
|
|
92
113
|
if (address.type !== "ble") {
|
|
93
|
-
|
|
114
|
+
rejectOnce(new InternalError(`Unsupported address type ${address.type}.`));
|
|
94
115
|
return;
|
|
95
116
|
}
|
|
96
117
|
const { peripheralAddress } = address;
|
|
97
118
|
if (tryCount > 3) {
|
|
98
|
-
|
|
119
|
+
rejectOnce(new BleError(`Failed to connect to peripheral ${peripheralAddress}`));
|
|
99
120
|
return;
|
|
100
121
|
}
|
|
101
122
|
|
|
@@ -104,7 +125,7 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
104
125
|
this.#bleScanner.getDiscoveredDevice(peripheralAddress);
|
|
105
126
|
|
|
106
127
|
if (this.#openChannels.has(address)) {
|
|
107
|
-
|
|
128
|
+
rejectOnce(
|
|
108
129
|
new BleError(
|
|
109
130
|
`Peripheral ${peripheralAddress} is already connected. Only one connection supported right now.`,
|
|
110
131
|
),
|
|
@@ -118,7 +139,7 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
118
139
|
|
|
119
140
|
if (peripheral.state === "error") {
|
|
120
141
|
// Weired state, so better cancel here and try a re-discovery
|
|
121
|
-
|
|
142
|
+
rejectOnce(
|
|
122
143
|
new BleError(
|
|
123
144
|
`Can not connect to peripheral "${peripheralAddress}" because unexpected state "${peripheral.state}"`,
|
|
124
145
|
),
|
|
@@ -132,19 +153,19 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
132
153
|
// Timeout when trying to connect to the device because sometimes connect fails and noble does
|
|
133
154
|
// not emit an event. If device does not connect we do not try any longer and reject the promise
|
|
134
155
|
// because a re-discovery is the best option to get teh device into a good state again
|
|
135
|
-
connectTimeout: Time.getTimer("BLE connect timeout",
|
|
156
|
+
connectTimeout: Time.getTimer("BLE connect timeout", 120_000, () => {
|
|
136
157
|
logger.debug(`Timeout while connecting to peripheral ${peripheralAddress}`);
|
|
137
158
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
138
159
|
peripheral.removeListener("connect", connectHandler);
|
|
139
160
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
140
161
|
clearConnectionGuard();
|
|
141
|
-
|
|
162
|
+
rejectOnce(new BleError(`Timeout while connecting to peripheral ${peripheralAddress}`));
|
|
142
163
|
}),
|
|
143
164
|
disconnectTimeout: Time.getTimer("BLE disconnect timeout", 60_000, () => {
|
|
144
165
|
logger.debug(`Timeout while disconnecting to peripheral ${peripheralAddress}`);
|
|
145
166
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
146
167
|
clearConnectionGuard();
|
|
147
|
-
|
|
168
|
+
rejectOnce(new BleError(`Timeout while disconnecting to peripheral ${peripheralAddress}`));
|
|
148
169
|
}),
|
|
149
170
|
// Timeout when trying to interview the device because sometimes when no response from device
|
|
150
171
|
// comes noble does not resolve promises
|
|
@@ -159,7 +180,7 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
159
180
|
.disconnectAsync()
|
|
160
181
|
.catch(error => logger.error(`Ignored error while disconnecting`, error));
|
|
161
182
|
}
|
|
162
|
-
|
|
183
|
+
rejectOnce(new BleError(`Timeout while interviewing peripheral ${peripheralAddress}`));
|
|
163
184
|
}),
|
|
164
185
|
};
|
|
165
186
|
this.#connectionGuards.add(connectionGuard);
|
|
@@ -192,8 +213,8 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
192
213
|
|
|
193
214
|
// Try again and chain promises
|
|
194
215
|
this.openChannel(address, tryCount + 1)
|
|
195
|
-
.then(
|
|
196
|
-
.catch(
|
|
216
|
+
.then(resolveOnce)
|
|
217
|
+
.catch(rejectOnce);
|
|
197
218
|
};
|
|
198
219
|
|
|
199
220
|
const connectHandler = async (error?: any) => {
|
|
@@ -204,12 +225,12 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
204
225
|
}
|
|
205
226
|
if (error) {
|
|
206
227
|
clearConnectionGuard();
|
|
207
|
-
|
|
228
|
+
rejectOnce(new BleError(`Error while connecting to peripheral ${peripheralAddress}`, error));
|
|
208
229
|
return;
|
|
209
230
|
}
|
|
210
231
|
if (this.#onMatterMessageListener === undefined) {
|
|
211
232
|
clearConnectionGuard();
|
|
212
|
-
|
|
233
|
+
rejectOnce(new InternalError(`Network Interface was not added to the system yet or was cleared.`));
|
|
213
234
|
return;
|
|
214
235
|
}
|
|
215
236
|
|
|
@@ -291,7 +312,7 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
291
312
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
292
313
|
this.#openChannels.set(address, peripheral);
|
|
293
314
|
try {
|
|
294
|
-
|
|
315
|
+
resolveOnce(
|
|
295
316
|
await NobleBleChannel.create(
|
|
296
317
|
peripheral,
|
|
297
318
|
characteristicC1ForWrite,
|
|
@@ -326,7 +347,7 @@ export class NobleBleCentralInterface implements NetInterface {
|
|
|
326
347
|
}
|
|
327
348
|
|
|
328
349
|
peripheral.removeListener("disconnect", reTryHandler);
|
|
329
|
-
|
|
350
|
+
rejectOnce(
|
|
330
351
|
new BleError(`Peripheral ${peripheralAddress} does not have the required Matter characteristics`),
|
|
331
352
|
);
|
|
332
353
|
};
|