@matter/protocol 0.12.0-alpha.0-20250108-7ae2a767d → 0.12.0-alpha.0-20250112-2972cf298
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/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/interaction/ServerSubscription.js +7 -3
- package/dist/cjs/interaction/ServerSubscription.js.map +1 -1
- package/dist/cjs/mdns/MdnsBroadcaster.d.ts +3 -3
- package/dist/cjs/mdns/MdnsBroadcaster.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsBroadcaster.js +55 -31
- package/dist/cjs/mdns/MdnsBroadcaster.js.map +1 -1
- package/dist/cjs/mdns/MdnsScanner.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsScanner.js +226 -28
- package/dist/cjs/mdns/MdnsScanner.js.map +1 -1
- package/dist/cjs/mdns/MdnsServer.d.ts +5 -1
- package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsServer.js +12 -7
- package/dist/cjs/mdns/MdnsServer.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +35 -2
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.js +6 -1
- package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js +5 -1
- package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +1 -1
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/interaction/ServerSubscription.js +7 -3
- package/dist/esm/interaction/ServerSubscription.js.map +1 -1
- package/dist/esm/mdns/MdnsBroadcaster.d.ts +3 -3
- package/dist/esm/mdns/MdnsBroadcaster.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsBroadcaster.js +56 -31
- package/dist/esm/mdns/MdnsBroadcaster.js.map +1 -1
- package/dist/esm/mdns/MdnsScanner.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsScanner.js +226 -28
- package/dist/esm/mdns/MdnsScanner.js.map +1 -1
- package/dist/esm/mdns/MdnsServer.d.ts +5 -1
- package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsServer.js +12 -7
- package/dist/esm/mdns/MdnsServer.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +36 -3
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.js +6 -1
- package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js +5 -1
- package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +1 -1
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/package.json +6 -6
- package/src/interaction/ServerSubscription.ts +7 -3
- package/src/mdns/MdnsBroadcaster.ts +63 -35
- package/src/mdns/MdnsScanner.ts +264 -43
- package/src/mdns/MdnsServer.ts +20 -7
- package/src/peer/ControllerCommissioningFlow.ts +48 -3
- package/src/protocol/DeviceAdvertiser.ts +7 -1
- package/src/protocol/DeviceCommissioner.ts +11 -2
- package/src/protocol/ExchangeManager.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/protocol",
|
|
3
|
-
"version": "0.12.0-alpha.0-
|
|
3
|
+
"version": "0.12.0-alpha.0-20250112-2972cf298",
|
|
4
4
|
"description": "Low-level APIs for Matter interaction",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -40,14 +40,14 @@
|
|
|
40
40
|
"#*": "./src/*"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@matter/general": "0.12.0-alpha.0-
|
|
44
|
-
"@matter/model": "0.12.0-alpha.0-
|
|
45
|
-
"@matter/types": "0.12.0-alpha.0-
|
|
43
|
+
"@matter/general": "0.12.0-alpha.0-20250112-2972cf298",
|
|
44
|
+
"@matter/model": "0.12.0-alpha.0-20250112-2972cf298",
|
|
45
|
+
"@matter/types": "0.12.0-alpha.0-20250112-2972cf298",
|
|
46
46
|
"@noble/curves": "^1.8.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@matter/tools": "0.12.0-alpha.0-
|
|
50
|
-
"@matter/testing": "0.12.0-alpha.0-
|
|
49
|
+
"@matter/tools": "0.12.0-alpha.0-20250112-2972cf298",
|
|
50
|
+
"@matter/testing": "0.12.0-alpha.0-20250112-2972cf298"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"dist/**/*",
|
|
@@ -676,9 +676,9 @@ export class ServerSubscription extends Subscription {
|
|
|
676
676
|
attributes.push({ path, value, version, schema: attribute.schema, attribute });
|
|
677
677
|
} catch (error) {
|
|
678
678
|
if (StatusResponseError.is(error, StatusCode.UnsupportedAccess)) {
|
|
679
|
-
logger.
|
|
679
|
+
logger.warn(`Permission denied reading attribute ${this.#structure.resolveAttributeName(path)}`);
|
|
680
680
|
} else {
|
|
681
|
-
logger.
|
|
681
|
+
logger.warn(`Error reading attribute ${this.#structure.resolveAttributeName(path)}:`, error);
|
|
682
682
|
}
|
|
683
683
|
}
|
|
684
684
|
}
|
|
@@ -726,7 +726,11 @@ export class ServerSubscription extends Subscription {
|
|
|
726
726
|
});
|
|
727
727
|
}
|
|
728
728
|
} catch (error) {
|
|
729
|
-
|
|
729
|
+
if (StatusResponseError.is(error, StatusCode.UnsupportedAccess)) {
|
|
730
|
+
logger.warn(`Permission denied reading event ${this.#structure.resolveEventName(path)}`);
|
|
731
|
+
} else {
|
|
732
|
+
logger.warn(`Error reading event ${this.#structure.resolveEventName(path)}:`, error);
|
|
733
|
+
}
|
|
730
734
|
}
|
|
731
735
|
}
|
|
732
736
|
eventReportsPayload.sort((a, b) => {
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
DnsRecord,
|
|
15
15
|
ImplementationError,
|
|
16
16
|
Logger,
|
|
17
|
+
MatterAggregateError,
|
|
17
18
|
Network,
|
|
18
19
|
PtrRecord,
|
|
19
20
|
SrvRecord,
|
|
@@ -66,7 +67,7 @@ const DEFAULT_PAIRING_HINT = {
|
|
|
66
67
|
*/
|
|
67
68
|
export class MdnsBroadcaster {
|
|
68
69
|
readonly #activeCommissioningAnnouncements = new Set<number>();
|
|
69
|
-
readonly #activeOperationalAnnouncements = new Map<number, FabricIndex[]>();
|
|
70
|
+
readonly #activeOperationalAnnouncements = new Map<number, { fabricIndex: FabricIndex; forInstance: string }[]>();
|
|
70
71
|
readonly #network: Network;
|
|
71
72
|
readonly #mdnsServer: MdnsServer;
|
|
72
73
|
readonly #enableIpv4?: boolean;
|
|
@@ -255,20 +256,37 @@ export class MdnsBroadcaster {
|
|
|
255
256
|
}: OperationalInstanceData = {},
|
|
256
257
|
) {
|
|
257
258
|
const currentOperationalFabrics = this.#activeOperationalAnnouncements.get(announcedNetPort);
|
|
259
|
+
|
|
260
|
+
this.#activeOperationalAnnouncements.set(
|
|
261
|
+
announcedNetPort,
|
|
262
|
+
fabrics.map(f => ({
|
|
263
|
+
fabricIndex: f.fabricIndex,
|
|
264
|
+
forInstance: getDeviceMatterQname(
|
|
265
|
+
Bytes.toHex(f.operationalId).toUpperCase(),
|
|
266
|
+
NodeId.toHexString(f.nodeId),
|
|
267
|
+
),
|
|
268
|
+
})),
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
const expires = new Array<Promise<void>>();
|
|
272
|
+
|
|
258
273
|
if (currentOperationalFabrics !== undefined) {
|
|
259
274
|
const fabricIndexesSet = new Set(fabrics.map(f => f.fabricIndex));
|
|
260
275
|
|
|
261
|
-
// Expire Fabric announcements
|
|
262
|
-
|
|
263
|
-
|
|
276
|
+
// Expire Fabric announcements for instances that got removed
|
|
277
|
+
for (const { fabricIndex, forInstance } of currentOperationalFabrics) {
|
|
278
|
+
if (!fabricIndexesSet.has(fabricIndex)) {
|
|
279
|
+
expires.push(
|
|
280
|
+
this.#mdnsServer.expireAnnouncements({
|
|
281
|
+
announcedNetPort,
|
|
282
|
+
type: AnnouncementType.Operative,
|
|
283
|
+
forInstance,
|
|
284
|
+
}),
|
|
285
|
+
);
|
|
286
|
+
}
|
|
264
287
|
}
|
|
265
288
|
}
|
|
266
289
|
|
|
267
|
-
this.#activeOperationalAnnouncements.set(
|
|
268
|
-
announcedNetPort,
|
|
269
|
-
fabrics.map(f => f.fabricIndex),
|
|
270
|
-
);
|
|
271
|
-
|
|
272
290
|
await this.#mdnsServer.setRecordsGenerator(announcedNetPort, AnnouncementType.Operative, async netInterface => {
|
|
273
291
|
const ipMac = await this.#network.getIpMac(netInterface);
|
|
274
292
|
if (ipMac === undefined) return [];
|
|
@@ -285,30 +303,40 @@ export class MdnsBroadcaster {
|
|
|
285
303
|
logger.debug(
|
|
286
304
|
"Announcement Generator: Fabric",
|
|
287
305
|
Diagnostic.dict({
|
|
288
|
-
id: `${
|
|
306
|
+
id: `${operationalIdString}-${NodeId.toHexString(nodeId)}`,
|
|
289
307
|
qname: deviceMatterQname,
|
|
290
308
|
port: announcedNetPort,
|
|
291
309
|
interface: netInterface,
|
|
292
310
|
}),
|
|
293
311
|
);
|
|
294
312
|
const fabricRecords = [
|
|
295
|
-
PtrRecord(SERVICE_DISCOVERY_QNAME, fabricQname),
|
|
296
|
-
PtrRecord(MATTER_SERVICE_QNAME, deviceMatterQname),
|
|
297
|
-
PtrRecord(fabricQname, deviceMatterQname),
|
|
298
|
-
SrvRecord(
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
313
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, fabricQname, deviceMatterQname),
|
|
314
|
+
PtrRecord(MATTER_SERVICE_QNAME, deviceMatterQname, deviceMatterQname),
|
|
315
|
+
PtrRecord(fabricQname, deviceMatterQname, deviceMatterQname),
|
|
316
|
+
SrvRecord(
|
|
317
|
+
deviceMatterQname,
|
|
318
|
+
{ priority: 0, weight: 0, port: announcedNetPort, target: hostname },
|
|
319
|
+
deviceMatterQname,
|
|
320
|
+
),
|
|
321
|
+
TxtRecord(
|
|
322
|
+
deviceMatterQname,
|
|
323
|
+
[
|
|
324
|
+
`SII=${sessionIdleInterval}` /* Session Idle Interval */,
|
|
325
|
+
`SAI=${sessionActiveInterval}` /* Session Active Interval */,
|
|
326
|
+
`SAT=${sessionActiveThreshold}` /* Session Active Threshold */,
|
|
327
|
+
//`T=${TCP_SUPPORTED}` /* TCP not supported */,
|
|
328
|
+
//`ICD=${ICD_SUPPORTED}` /* ICD not supported */,
|
|
329
|
+
],
|
|
330
|
+
deviceMatterQname,
|
|
331
|
+
),
|
|
306
332
|
];
|
|
307
333
|
records.push(...fabricRecords);
|
|
308
334
|
});
|
|
309
335
|
records.push(...this.#getIpRecords(hostname, [...ipV6, ...ipV4]));
|
|
310
336
|
return records;
|
|
311
337
|
});
|
|
338
|
+
|
|
339
|
+
await MatterAggregateError.allSettled(expires);
|
|
312
340
|
}
|
|
313
341
|
|
|
314
342
|
/** Set the Broadcaster data to announce a Commissioner (aka Commissioner discovery) */
|
|
@@ -378,29 +406,29 @@ export class MdnsBroadcaster {
|
|
|
378
406
|
this.#mdnsServer.announce(announcementPort).catch(error => logger.error(error));
|
|
379
407
|
}
|
|
380
408
|
|
|
381
|
-
async expireFabricAnnouncement(
|
|
382
|
-
if (this.#activeOperationalAnnouncements.has(
|
|
383
|
-
await this.#mdnsServer.expireAnnouncements(
|
|
384
|
-
this.#activeOperationalAnnouncements.delete(
|
|
409
|
+
async expireFabricAnnouncement(announcedNetPort: number) {
|
|
410
|
+
if (this.#activeOperationalAnnouncements.has(announcedNetPort)) {
|
|
411
|
+
await this.#mdnsServer.expireAnnouncements({ announcedNetPort, type: AnnouncementType.Operative });
|
|
412
|
+
this.#activeOperationalAnnouncements.delete(announcedNetPort);
|
|
385
413
|
}
|
|
386
414
|
}
|
|
387
415
|
|
|
388
|
-
async expireCommissioningAnnouncement(
|
|
389
|
-
if (this.#activeCommissioningAnnouncements.has(
|
|
390
|
-
await this.#mdnsServer.expireAnnouncements(
|
|
391
|
-
this.#activeCommissioningAnnouncements.delete(
|
|
416
|
+
async expireCommissioningAnnouncement(announcedNetPort: number) {
|
|
417
|
+
if (this.#activeCommissioningAnnouncements.has(announcedNetPort)) {
|
|
418
|
+
await this.#mdnsServer.expireAnnouncements({ announcedNetPort, type: AnnouncementType.Commissionable });
|
|
419
|
+
this.#activeCommissioningAnnouncements.delete(announcedNetPort);
|
|
392
420
|
}
|
|
393
421
|
}
|
|
394
422
|
|
|
395
|
-
async expireAllAnnouncements(
|
|
423
|
+
async expireAllAnnouncements(announcedNetPort: number) {
|
|
396
424
|
if (
|
|
397
|
-
!this.#activeCommissioningAnnouncements.has(
|
|
398
|
-
!this.#activeOperationalAnnouncements.has(
|
|
425
|
+
!this.#activeCommissioningAnnouncements.has(announcedNetPort) &&
|
|
426
|
+
!this.#activeOperationalAnnouncements.has(announcedNetPort)
|
|
399
427
|
)
|
|
400
428
|
return;
|
|
401
|
-
await this.#mdnsServer.expireAnnouncements(
|
|
402
|
-
this.#activeCommissioningAnnouncements.delete(
|
|
403
|
-
this.#activeOperationalAnnouncements.delete(
|
|
429
|
+
await this.#mdnsServer.expireAnnouncements({ announcedNetPort });
|
|
430
|
+
this.#activeCommissioningAnnouncements.delete(announcedNetPort);
|
|
431
|
+
this.#activeOperationalAnnouncements.delete(announcedNetPort);
|
|
404
432
|
}
|
|
405
433
|
|
|
406
434
|
async close() {
|