@matter/protocol 0.12.3-alpha.0-20250203-34ba45cae → 0.12.3-alpha.0-20250205-ad3416ca3
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/certificate/CertificateManager.d.ts +1 -1
- package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateManager.js +24 -17
- package/dist/cjs/certificate/CertificateManager.js.map +1 -1
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +12 -30
- package/dist/cjs/fabric/Fabric.js.map +1 -1
- package/dist/cjs/interaction/ServerSubscription.d.ts +4 -0
- package/dist/cjs/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/interaction/ServerSubscription.js +13 -4
- package/dist/cjs/interaction/ServerSubscription.js.map +1 -1
- package/dist/cjs/interaction/Subscription.d.ts +6 -7
- package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
- package/dist/cjs/interaction/Subscription.js +3 -6
- package/dist/cjs/interaction/Subscription.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +5 -0
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/certificate/CertificateManager.d.ts +1 -1
- package/dist/esm/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateManager.js +24 -17
- package/dist/esm/certificate/CertificateManager.js.map +1 -1
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +12 -30
- package/dist/esm/fabric/Fabric.js.map +1 -1
- package/dist/esm/interaction/ServerSubscription.d.ts +4 -0
- package/dist/esm/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/interaction/ServerSubscription.js +13 -4
- package/dist/esm/interaction/ServerSubscription.js.map +1 -1
- package/dist/esm/interaction/Subscription.d.ts +6 -7
- package/dist/esm/interaction/Subscription.d.ts.map +1 -1
- package/dist/esm/interaction/Subscription.js +3 -6
- package/dist/esm/interaction/Subscription.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +5 -0
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/package.json +6 -6
- package/src/certificate/CertificateManager.ts +44 -27
- package/src/fabric/Fabric.ts +15 -33
- package/src/interaction/ServerSubscription.ts +15 -5
- package/src/interaction/Subscription.ts +7 -7
- package/src/protocol/ExchangeManager.ts +5 -0
|
@@ -16,7 +16,7 @@ export interface SubscriptionCriteria {
|
|
|
16
16
|
/**
|
|
17
17
|
* A single active subscription.
|
|
18
18
|
*/
|
|
19
|
-
export declare class Subscription {
|
|
19
|
+
export declare abstract class Subscription {
|
|
20
20
|
#private;
|
|
21
21
|
constructor(session: SecureSession, id: SubscriptionId, criteria: SubscriptionCriteria);
|
|
22
22
|
get id(): number;
|
|
@@ -25,7 +25,7 @@ export declare class Subscription {
|
|
|
25
25
|
get isCanceledByPeer(): boolean;
|
|
26
26
|
get session(): SecureSession;
|
|
27
27
|
/**
|
|
28
|
-
* Update session state. This probably is
|
|
28
|
+
* Update session state. This probably is meaningless except in a server context.
|
|
29
29
|
*/
|
|
30
30
|
update(): Promise<void>;
|
|
31
31
|
/**
|
|
@@ -33,12 +33,11 @@ export declare class Subscription {
|
|
|
33
33
|
*/
|
|
34
34
|
protected set isCanceledByPeer(value: boolean);
|
|
35
35
|
protected set isClosed(value: boolean);
|
|
36
|
+
/** Close the subscription with the option to gracefully flush outstanding data. */
|
|
37
|
+
abstract close(graceful: boolean): Promise<void>;
|
|
36
38
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @param _graceful in a server context this means flush pending updates. Not sure if applies to client
|
|
40
|
-
* subscriptions
|
|
39
|
+
* Destroy the subscription. Unsubscribe from all attributes and events and stop all timers.
|
|
41
40
|
*/
|
|
42
|
-
|
|
41
|
+
protected destroy(): Promise<void>;
|
|
43
42
|
}
|
|
44
43
|
//# sourceMappingURL=Subscription.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Subscription.d.ts","sourceRoot":"","sources":["../../../src/interaction/Subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAI9G,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACjC,iBAAiB,CAAC,EAAE,cAAc,CAAC,OAAO,gBAAgB,CAAC,EAAE,CAAC;IAC9D,kBAAkB,CAAC,EAAE,cAAc,CAAC,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACnE,aAAa,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC;IACtD,YAAY,CAAC,EAAE,cAAc,CAAC,OAAO,cAAc,CAAC,EAAE,CAAC;IACvD,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"Subscription.d.ts","sourceRoot":"","sources":["../../../src/interaction/Subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAI9G,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACjC,iBAAiB,CAAC,EAAE,cAAc,CAAC,OAAO,gBAAgB,CAAC,EAAE,CAAC;IAC9D,kBAAkB,CAAC,EAAE,cAAc,CAAC,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACnE,aAAa,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC;IACtD,YAAY,CAAC,EAAE,cAAc,CAAC,OAAO,cAAc,CAAC,EAAE,CAAC;IACvD,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,8BAAsB,YAAY;;gBAOlB,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,oBAAoB;IAUtF,IAAI,EAAE,WAEL;IAED,IAAI,QAAQ,yBAEX;IAED,IAAI,QAAQ,IAwBkB,OAAO,CAtBpC;IAED,IAAI,gBAAgB,IAgBkB,OAAO,CAd5C;IAED,IAAI,OAAO,kBAEV;IAED;;OAEG;IACG,MAAM;IAEZ;;OAEG;IACH,SAAS,KAAK,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAE5C;IAED,SAAS,KAAK,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEpC;IAED,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhD;;OAEG;cACa,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3C"}
|
|
@@ -34,7 +34,7 @@ class Subscription {
|
|
|
34
34
|
return this.#session;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Update session state. This probably is
|
|
37
|
+
* Update session state. This probably is meaningless except in a server context.
|
|
38
38
|
*/
|
|
39
39
|
async update() {
|
|
40
40
|
}
|
|
@@ -48,12 +48,9 @@ class Subscription {
|
|
|
48
48
|
this.#isClosed = value;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* @param _graceful in a server context this means flush pending updates. Not sure if applies to client
|
|
54
|
-
* subscriptions
|
|
51
|
+
* Destroy the subscription. Unsubscribe from all attributes and events and stop all timers.
|
|
55
52
|
*/
|
|
56
|
-
async
|
|
53
|
+
async destroy() {
|
|
57
54
|
this.#isClosed = true;
|
|
58
55
|
this.#session.subscriptions.delete(this);
|
|
59
56
|
logger.debug(`Removed subscription ${this.id} from ${this.#session.name}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/interaction/Subscription.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AAIvB,MAAM,SAAS,OAAO,IAAI,cAAc;AAejC,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AAIvB,MAAM,SAAS,OAAO,IAAI,cAAc;AAejC,MAAe,aAAa;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAAwB,IAAoB,UAAgC;AACpF,SAAK,WAAW;AAChB,SAAK,MAAM;AACX,SAAK,YAAY;AAGjB,SAAK,SAAS,cAAc,IAAI,IAAI;AACpC,WAAO,MAAM,sBAAsB,KAAK,GAAG,OAAO,KAAK,SAAS,IAAI,EAAE;AAAA,EAC1E;AAAA,EAEA,IAAI,KAAK;AACL,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EAEA,IAAI,mBAAmB;AACnB,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA,EAKhB,IAAc,iBAAiB,OAAgB;AAC3C,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEA,IAAc,SAAS,OAAgB;AACnC,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,UAAyB;AACrC,SAAK,YAAY;AACjB,SAAK,SAAS,cAAc,OAAO,IAAI;AACvC,WAAO,MAAM,wBAAwB,KAAK,EAAE,SAAS,KAAK,SAAS,IAAI,EAAE;AAAA,EAC7E;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExchangeManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EAEP,WAAW,EACX,aAAa,EAIb,WAAW,EAKX,qBAAqB,EAExB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAA6B,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA+B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAA0B,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,qBAAa,wBAAyB,SAAQ,WAAW;CAAG;AAE5D,qBAAa,cAAe,YAAW,OAAO,CAAC,OAAO,CAAC;;IAK/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO;IALtB,MAAM,UAAS;gBAIT,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAC5B,OAAO,EAAE,OAAO,EACzB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAKvC,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAE9C;IAED,4CAA4C;IAC5C,IAAI,UAAU,YAEb;IAED,IAAI,IAAI,mCAEP;IAED;;;OAGG;IACH,IAAI,cAAc,WAEjB;IAED,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,IAAI,IAAI,WAEP;IAEK,KAAK;CAQd;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED,qBAAa,eAAe;;
|
|
1
|
+
{"version":3,"file":"ExchangeManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,OAAO,EAEP,WAAW,EACX,aAAa,EAIb,WAAW,EAKX,qBAAqB,EAExB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAA6B,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA+B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAA0B,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,qBAAa,wBAAyB,SAAQ,WAAW;CAAG;AAE5D,qBAAa,cAAe,YAAW,OAAO,CAAC,OAAO,CAAC;;IAK/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO;IALtB,MAAM,UAAS;gBAIT,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAC5B,OAAO,EAAE,OAAO,EACzB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAKvC,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAE9C;IAED,4CAA4C;IAC5C,IAAI,UAAU,YAEb;IAED,IAAI,IAAI,mCAEP;IAED;;;OAGG;IACH,IAAI,cAAc,WAEjB;IAED,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,IAAI,IAAI,WAEP;IAEK,KAAK;CAQd;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED,qBAAa,eAAe;;gBAYZ,OAAO,EAAE,sBAAsB;IAoB3C,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAU9C,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,QAAQ,EAAE,eAAe;IAO5C,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAIzD,2BAA2B,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM;IAQjE,KAAK;YAkBG,SAAS;IA2HjB,cAAc,CAAC,aAAa,EAAE,MAAM;CAyI7C;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAA4B;IAEnD,qBAAqB;CAOxB"}
|
|
@@ -85,6 +85,7 @@ class ExchangeManager {
|
|
|
85
85
|
#listeners = /* @__PURE__ */ new Map();
|
|
86
86
|
#closers = /* @__PURE__ */ new Set();
|
|
87
87
|
#observers = new ObserverGroup(this);
|
|
88
|
+
#closing = false;
|
|
88
89
|
constructor(context) {
|
|
89
90
|
this.#transportInterfaces = context.transportInterfaces;
|
|
90
91
|
this.#sessionManager = context.sessionManager;
|
|
@@ -132,6 +133,7 @@ class ExchangeManager {
|
|
|
132
133
|
return exchange;
|
|
133
134
|
}
|
|
134
135
|
async close() {
|
|
136
|
+
this.#closing = true;
|
|
135
137
|
for (const protocol of this.#protocols.values()) {
|
|
136
138
|
await protocol.close();
|
|
137
139
|
}
|
|
@@ -154,6 +156,7 @@ class ExchangeManager {
|
|
|
154
156
|
let session;
|
|
155
157
|
if (packet.header.sessionType === SessionType.Unicast) {
|
|
156
158
|
if (packet.header.sessionId === UNICAST_UNSECURE_SESSION_ID) {
|
|
159
|
+
if (this.#closing) return;
|
|
157
160
|
const initiatorNodeId = packet.header.sourceNodeId ?? NodeId.UNSPECIFIED_NODE_ID;
|
|
158
161
|
session = this.#sessionManager.getUnsecureSession(initiatorNodeId) ?? this.#sessionManager.createInsecureSession({
|
|
159
162
|
initiatorNodeId
|
|
@@ -162,6 +165,7 @@ class ExchangeManager {
|
|
|
162
165
|
session = this.#sessionManager.getSession(packet.header.sessionId);
|
|
163
166
|
}
|
|
164
167
|
} else if (packet.header.sessionType === SessionType.Group) {
|
|
168
|
+
if (this.#closing) return;
|
|
165
169
|
if (packet.header.sourceNodeId !== void 0) {
|
|
166
170
|
}
|
|
167
171
|
}
|
|
@@ -189,6 +193,7 @@ class ExchangeManager {
|
|
|
189
193
|
if (exchange !== void 0) {
|
|
190
194
|
await exchange.onMessageReceived(message, isDuplicate);
|
|
191
195
|
} else {
|
|
196
|
+
if (this.#closing) return;
|
|
192
197
|
if (session.closingAfterExchangeFinished) {
|
|
193
198
|
throw new MatterFlowError(
|
|
194
199
|
`Session with ID ${packet.header.sessionId} marked for closure, decline new exchange creation.`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ExchangeManager.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EAEI;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACG;AAEP,SAAS,QAAQ,4BAA4B,yBAAyB;AACtE,SAAkB,cAAc,mBAAmB;AACnD,SAAS,8BAA8B;AAGvC,SAAS,gBAAgB,mCAAmC;AAC5D,SAAS,sBAAsB;AAC/B,SAA6B,uBAA+C;AAC5E,SAAS,6BAA6B;AAGtC,MAAM,SAAS,OAAO,IAAI,iBAAiB;AAE3C,MAAM,2CAA2C;AAE1C,MAAM,iCAAiC,YAAY;AAAC;AAEpD,MAAM,eAA2C;AAAA,EAIpD,YACa,SACA,SACT,eACF;AAHW;AACA;AAGT,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EATO,SAAS;AAAA,EAChB;AAAA,EAUA,IAAI,cAAc,UAA+B;AAC7C,SAAK,iBAAiB;AAAA,EAC1B;AAAA;AAAA,EAGA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AACjB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,KAAK,SAAkB,YAAgD;AACnE,WAAO,MAAM,gBAAa,aAAa,mBAAmB,SAAS,UAAU,CAAC;AAC9E,UAAM,SAAS,KAAK,QAAQ,OAAO,OAAO;AAC1C,UAAM,QAAQ,aAAa,aAAa,MAAM;AAC9C,QAAI,MAAM,SAAS,KAAK,gBAAgB;AACpC,aAAO;AAAA,QACH,6BAA6B,KAAK,IAAI,OAAO,MAAM,MAAM,gEAAgE,KAAK,cAAc;AAAA,MAChJ;AAAA,IACJ;AAEA,WAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,EAClC;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,GAAG,KAAK,QAAQ,IAAI,eAAe,KAAK,QAAQ,IAAI;AAAA,EAC/D;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,mBAAmB,KAAK;AAC9B,SAAK,SAAS;AACd,UAAM,KAAK,QAAQ,MAAM;AACzB,QAAI,CAAC,kBAAkB;AACnB,YAAM,KAAK,iBAAiB;AAAA,IAChC;AAAA,EACJ;AACJ;AAWO,MAAM,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB,IAAI,gBAAgB;AAAA,EACvC,aAAa,oBAAI,IAA6B;AAAA,EAC9C,aAAa,oBAAI,IAA6B;AAAA,EAC9C,aAAa,oBAAI,IAAqD;AAAA,EACtE,WAAW,oBAAI,IAAmB;AAAA,EAClC,aAAa,IAAI,cAAc,IAAI;AAAA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["exchange"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/protocol",
|
|
3
|
-
"version": "0.12.3-alpha.0-
|
|
3
|
+
"version": "0.12.3-alpha.0-20250205-ad3416ca3",
|
|
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.3-alpha.0-
|
|
44
|
-
"@matter/model": "0.12.3-alpha.0-
|
|
45
|
-
"@matter/types": "0.12.3-alpha.0-
|
|
43
|
+
"@matter/general": "0.12.3-alpha.0-20250205-ad3416ca3",
|
|
44
|
+
"@matter/model": "0.12.3-alpha.0-20250205-ad3416ca3",
|
|
45
|
+
"@matter/types": "0.12.3-alpha.0-20250205-ad3416ca3",
|
|
46
46
|
"@noble/curves": "^1.8.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@matter/tools": "0.12.3-alpha.0-
|
|
50
|
-
"@matter/testing": "0.12.3-alpha.0-
|
|
49
|
+
"@matter/tools": "0.12.3-alpha.0-20250205-ad3416ca3",
|
|
50
|
+
"@matter/testing": "0.12.3-alpha.0-20250205-ad3416ca3"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"dist/**/*",
|
|
@@ -819,12 +819,15 @@ export namespace CertificateManager {
|
|
|
819
819
|
throw new CertificateError(`Root certificate must have isCa set to true.`);
|
|
820
820
|
}
|
|
821
821
|
|
|
822
|
-
// The key usage extension SHALL be encoded with
|
|
823
|
-
//
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
822
|
+
// The key usage extension SHALL be encoded with at least two flags: keyCertSign (0x0020) and CRLSign (0x0040)
|
|
823
|
+
// and optionally with digitalSignature (0x0001).
|
|
824
|
+
if (
|
|
825
|
+
ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 0x0060 &&
|
|
826
|
+
ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 0x0061
|
|
827
|
+
) {
|
|
828
|
+
throw new CertificateError(
|
|
829
|
+
`Root certificate keyUsage must have keyCertSign and CRLSign and optionally digitalSignature set.`,
|
|
830
|
+
);
|
|
828
831
|
}
|
|
829
832
|
|
|
830
833
|
// The extended key usage extension SHALL NOT be present.
|
|
@@ -863,8 +866,9 @@ export namespace CertificateManager {
|
|
|
863
866
|
* Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
|
|
864
867
|
*/
|
|
865
868
|
export function verifyNodeOperationalCertificate(
|
|
866
|
-
rootOrIcaCert: RootCertificate | IntermediateCertificate,
|
|
867
869
|
nocCert: OperationalCertificate,
|
|
870
|
+
rootCert: RootCertificate,
|
|
871
|
+
icaCert?: IntermediateCertificate,
|
|
868
872
|
) {
|
|
869
873
|
CertificateManager.validateGeneralCertificateFields(nocCert);
|
|
870
874
|
|
|
@@ -908,13 +912,21 @@ export namespace CertificateManager {
|
|
|
908
912
|
// When any matter-fabric-id attributes are present in either the Matter Root CA Certificate or the Matter ICA
|
|
909
913
|
// Certificate, the value SHALL match the one present in the Matter Node Operational Certificate (NOC) within
|
|
910
914
|
// the same certificate chain.
|
|
915
|
+
if (rootCert.subject.fabricId !== undefined && rootCert.subject.fabricId !== nocCert.subject.fabricId) {
|
|
916
|
+
throw new CertificateError(
|
|
917
|
+
`FabricId in NoC certificate does not match the fabricId in the parent certificate. ${Logger.toJSON(
|
|
918
|
+
rootCert.subject.fabricId,
|
|
919
|
+
)} !== ${Logger.toJSON(nocCert.subject.fabricId)}`,
|
|
920
|
+
);
|
|
921
|
+
}
|
|
911
922
|
if (
|
|
912
|
-
|
|
913
|
-
|
|
923
|
+
icaCert !== undefined &&
|
|
924
|
+
icaCert.subject.fabricId !== undefined &&
|
|
925
|
+
icaCert.subject.fabricId !== nocCert.subject.fabricId
|
|
914
926
|
) {
|
|
915
927
|
throw new CertificateError(
|
|
916
928
|
`FabricId in NoC certificate does not match the fabricId in the parent certificate. ${Logger.toJSON(
|
|
917
|
-
|
|
929
|
+
icaCert.subject.fabricId,
|
|
918
930
|
)} !== ${Logger.toJSON(nocCert.subject.fabricId)}`,
|
|
919
931
|
);
|
|
920
932
|
}
|
|
@@ -959,14 +971,19 @@ export namespace CertificateManager {
|
|
|
959
971
|
}
|
|
960
972
|
|
|
961
973
|
// Validate authority key identifier against subject key identifier
|
|
962
|
-
if (
|
|
974
|
+
if (
|
|
975
|
+
!Bytes.areEqual(
|
|
976
|
+
nocCert.extensions.authorityKeyIdentifier,
|
|
977
|
+
(icaCert ?? rootCert).extensions.subjectKeyIdentifier,
|
|
978
|
+
)
|
|
979
|
+
) {
|
|
963
980
|
throw new CertificateError(
|
|
964
981
|
`Noc certificate authorityKeyIdentifier must be equal to Root/Ica subjectKeyIdentifier.`,
|
|
965
982
|
);
|
|
966
983
|
}
|
|
967
984
|
|
|
968
985
|
Crypto.verify(
|
|
969
|
-
PublicKey(
|
|
986
|
+
PublicKey((icaCert ?? rootCert).ellipticCurvePublicKey),
|
|
970
987
|
nodeOperationalCertToAsn1(nocCert),
|
|
971
988
|
nocCert.signature,
|
|
972
989
|
);
|
|
@@ -997,14 +1014,6 @@ export namespace CertificateManager {
|
|
|
997
1014
|
`Invalid fabricId in NoC certificate: ${Logger.toJSON(icaCert.subject.fabricId)}`,
|
|
998
1015
|
);
|
|
999
1016
|
}
|
|
1000
|
-
// If present on root certificate fabric-id needs to match with Ica fabric Id
|
|
1001
|
-
if (rootCert.subject.fabricId !== icaCert.subject.fabricId) {
|
|
1002
|
-
throw new CertificateError(
|
|
1003
|
-
`FabricId in Ica certificate does not match the fabricId in the parent certificate. ${Logger.toJSON(
|
|
1004
|
-
rootCert.subject.fabricId,
|
|
1005
|
-
)} !== ${Logger.toJSON(icaCert.subject.fabricId)}`,
|
|
1006
|
-
);
|
|
1007
|
-
}
|
|
1008
1017
|
}
|
|
1009
1018
|
|
|
1010
1019
|
// The subject DN SHALL encode exactly one matter-icac-id attribute.
|
|
@@ -1025,7 +1034,12 @@ export namespace CertificateManager {
|
|
|
1025
1034
|
// When any matter-fabric-id attributes are present in either the Matter Root CA Certificate or the Matter ICA
|
|
1026
1035
|
// Certificate, the value SHALL match the one present in the Matter Node Operational Certificate (NOC) within
|
|
1027
1036
|
// the same certificate chain.
|
|
1028
|
-
|
|
1037
|
+
// Here means: When both are set, they must match
|
|
1038
|
+
if (
|
|
1039
|
+
rootCert.subject.fabricId !== undefined &&
|
|
1040
|
+
icaCert.subject.fabricId !== undefined &&
|
|
1041
|
+
rootCert.subject.fabricId !== icaCert.subject.fabricId
|
|
1042
|
+
) {
|
|
1029
1043
|
throw new CertificateError(
|
|
1030
1044
|
`FabricId in Ica certificate does not match the fabricId in the parent certificate. ${Logger.toJSON(
|
|
1031
1045
|
rootCert.subject.fabricId,
|
|
@@ -1047,12 +1061,15 @@ export namespace CertificateManager {
|
|
|
1047
1061
|
throw new CertificateError(`Ica certificate must have isCa set to true.`);
|
|
1048
1062
|
}
|
|
1049
1063
|
|
|
1050
|
-
// The key usage extension SHALL be encoded with
|
|
1051
|
-
//
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1064
|
+
// The key usage extension SHALL be encoded with at least two flags: keyCertSign (0x0020) and CRLSign (0x0040)
|
|
1065
|
+
// and optionally with digitalSignature (0x0001).
|
|
1066
|
+
if (
|
|
1067
|
+
ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 0x0060 &&
|
|
1068
|
+
ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 0x0061
|
|
1069
|
+
) {
|
|
1070
|
+
throw new CertificateError(
|
|
1071
|
+
`Ica certificate keyUsage must have keyCertSign and CRLSign and optionally digitalSignature set.`,
|
|
1072
|
+
);
|
|
1056
1073
|
}
|
|
1057
1074
|
|
|
1058
1075
|
// The extended key usage extension SHALL NOT be present.
|
package/src/fabric/Fabric.ts
CHANGED
|
@@ -172,26 +172,16 @@ export class Fabric {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
verifyCredentials(operationalCert: Uint8Array, intermediateCACert?: Uint8Array) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
);
|
|
181
|
-
} else {
|
|
182
|
-
const decodedIcaCert = TlvIntermediateCertificate.decode(intermediateCACert);
|
|
183
|
-
// Validate NOC Certificate against ICA Certificate
|
|
184
|
-
CertificateManager.verifyNodeOperationalCertificate(
|
|
185
|
-
decodedIcaCert,
|
|
186
|
-
TlvOperationalCertificate.decode(operationalCert),
|
|
187
|
-
);
|
|
188
|
-
|
|
175
|
+
const rootCert = TlvRootCertificate.decode(this.rootCert);
|
|
176
|
+
const nocCert = TlvOperationalCertificate.decode(operationalCert);
|
|
177
|
+
const icaCert =
|
|
178
|
+
intermediateCACert !== undefined ? TlvIntermediateCertificate.decode(intermediateCACert) : undefined;
|
|
179
|
+
if (icaCert !== undefined) {
|
|
189
180
|
// Validate ICACertificate against Root Certificate
|
|
190
|
-
CertificateManager.verifyIntermediateCaCertificate(
|
|
191
|
-
TlvRootCertificate.decode(this.rootCert),
|
|
192
|
-
decodedIcaCert,
|
|
193
|
-
);
|
|
181
|
+
CertificateManager.verifyIntermediateCaCertificate(rootCert, icaCert);
|
|
194
182
|
}
|
|
183
|
+
// Validate NOC Certificate against ICA Certificate
|
|
184
|
+
CertificateManager.verifyNodeOperationalCertificate(nocCert, rootCert, icaCert);
|
|
195
185
|
}
|
|
196
186
|
|
|
197
187
|
matchesFabricIdAndRootPublicKey(fabricId: FabricId, rootPublicKey: Uint8Array) {
|
|
@@ -402,22 +392,14 @@ export class FabricBuilder {
|
|
|
402
392
|
throw new MatterFlowError("Root Certificate needs to be set first.");
|
|
403
393
|
}
|
|
404
394
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
);
|
|
411
|
-
CertificateManager.verifyNodeOperationalCertificate(
|
|
412
|
-
decodedIntermediateCACert,
|
|
413
|
-
TlvOperationalCertificate.decode(operationalCert),
|
|
414
|
-
);
|
|
415
|
-
} else {
|
|
416
|
-
CertificateManager.verifyNodeOperationalCertificate(
|
|
417
|
-
TlvRootCertificate.decode(this.#rootCert),
|
|
418
|
-
TlvOperationalCertificate.decode(operationalCert),
|
|
419
|
-
);
|
|
395
|
+
const rootCert = TlvRootCertificate.decode(this.#rootCert);
|
|
396
|
+
const nocCert = TlvOperationalCertificate.decode(operationalCert);
|
|
397
|
+
const icaCert =
|
|
398
|
+
intermediateCACert !== undefined ? TlvIntermediateCertificate.decode(intermediateCACert) : undefined;
|
|
399
|
+
if (icaCert !== undefined) {
|
|
400
|
+
CertificateManager.verifyIntermediateCaCertificate(rootCert, icaCert);
|
|
420
401
|
}
|
|
402
|
+
CertificateManager.verifyNodeOperationalCertificate(nocCert, rootCert, icaCert);
|
|
421
403
|
|
|
422
404
|
this.#operationalCert = operationalCert;
|
|
423
405
|
this.#intermediateCACert = intermediateCACert;
|
|
@@ -629,8 +629,9 @@ export class ServerSubscription extends Subscription {
|
|
|
629
629
|
error instanceof NetworkError ||
|
|
630
630
|
error instanceof NoChannelError
|
|
631
631
|
) {
|
|
632
|
-
//
|
|
633
|
-
await this.
|
|
632
|
+
// Let's consider this subscription as dead and wait for a reconnect
|
|
633
|
+
await this.destroy();
|
|
634
|
+
return;
|
|
634
635
|
} else {
|
|
635
636
|
throw error;
|
|
636
637
|
}
|
|
@@ -891,8 +892,7 @@ export class ServerSubscription extends Subscription {
|
|
|
891
892
|
}
|
|
892
893
|
}
|
|
893
894
|
|
|
894
|
-
override async
|
|
895
|
-
this.isClosed = true;
|
|
895
|
+
protected override async destroy() {
|
|
896
896
|
this.#sendUpdatesActivated = false;
|
|
897
897
|
this.unregisterAttributeListeners(Array.from(this.#attributeListeners.keys()));
|
|
898
898
|
this.unregisterEventListeners(Array.from(this.#eventListeners.keys()));
|
|
@@ -905,13 +905,23 @@ export class ServerSubscription extends Subscription {
|
|
|
905
905
|
}
|
|
906
906
|
this.#updateTimer.stop();
|
|
907
907
|
this.#sendDelayTimer.stop();
|
|
908
|
+
await super.destroy();
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Closes the subscription and flushes all outstanding data updates if requested.
|
|
913
|
+
*/
|
|
914
|
+
override async close(graceful = false) {
|
|
915
|
+
if (this.isClosed) {
|
|
916
|
+
return;
|
|
917
|
+
}
|
|
918
|
+
await this.destroy();
|
|
908
919
|
if (graceful) {
|
|
909
920
|
await this.flush();
|
|
910
921
|
}
|
|
911
922
|
if (this.currentUpdatePromise) {
|
|
912
923
|
await this.currentUpdatePromise;
|
|
913
924
|
}
|
|
914
|
-
await super.close();
|
|
915
925
|
}
|
|
916
926
|
|
|
917
927
|
/**
|
|
@@ -23,7 +23,7 @@ export interface SubscriptionCriteria {
|
|
|
23
23
|
/**
|
|
24
24
|
* A single active subscription.
|
|
25
25
|
*/
|
|
26
|
-
export class Subscription {
|
|
26
|
+
export abstract class Subscription {
|
|
27
27
|
#session: SecureSession;
|
|
28
28
|
#id: SubscriptionId;
|
|
29
29
|
#isClosed?: boolean;
|
|
@@ -61,7 +61,7 @@ export class Subscription {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
|
-
* Update session state. This probably is
|
|
64
|
+
* Update session state. This probably is meaningless except in a server context.
|
|
65
65
|
*/
|
|
66
66
|
async update() {}
|
|
67
67
|
|
|
@@ -76,13 +76,13 @@ export class Subscription {
|
|
|
76
76
|
this.#isClosed = value;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
/** Close the subscription with the option to gracefully flush outstanding data. */
|
|
80
|
+
abstract close(graceful: boolean): Promise<void>;
|
|
81
|
+
|
|
79
82
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @param _graceful in a server context this means flush pending updates. Not sure if applies to client
|
|
83
|
-
* subscriptions
|
|
83
|
+
* Destroy the subscription. Unsubscribe from all attributes and events and stop all timers.
|
|
84
84
|
*/
|
|
85
|
-
async
|
|
85
|
+
protected async destroy(): Promise<void> {
|
|
86
86
|
this.#isClosed = true;
|
|
87
87
|
this.#session.subscriptions.delete(this);
|
|
88
88
|
logger.debug(`Removed subscription ${this.id} from ${this.#session.name}`);
|
|
@@ -117,6 +117,7 @@ export class ExchangeManager {
|
|
|
117
117
|
readonly #listeners = new Map<TransportInterface, TransportInterface.Listener>();
|
|
118
118
|
readonly #closers = new Set<Promise<void>>();
|
|
119
119
|
readonly #observers = new ObserverGroup(this);
|
|
120
|
+
#closing = false;
|
|
120
121
|
|
|
121
122
|
constructor(context: ExchangeManagerContext) {
|
|
122
123
|
this.#transportInterfaces = context.transportInterfaces;
|
|
@@ -176,6 +177,7 @@ export class ExchangeManager {
|
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
async close() {
|
|
180
|
+
this.#closing = true;
|
|
179
181
|
for (const protocol of this.#protocols.values()) {
|
|
180
182
|
await protocol.close();
|
|
181
183
|
}
|
|
@@ -201,6 +203,7 @@ export class ExchangeManager {
|
|
|
201
203
|
let session: Session | undefined;
|
|
202
204
|
if (packet.header.sessionType === SessionType.Unicast) {
|
|
203
205
|
if (packet.header.sessionId === UNICAST_UNSECURE_SESSION_ID) {
|
|
206
|
+
if (this.#closing) return;
|
|
204
207
|
const initiatorNodeId = packet.header.sourceNodeId ?? NodeId.UNSPECIFIED_NODE_ID;
|
|
205
208
|
session =
|
|
206
209
|
this.#sessionManager.getUnsecureSession(initiatorNodeId) ??
|
|
@@ -211,6 +214,7 @@ export class ExchangeManager {
|
|
|
211
214
|
session = this.#sessionManager.getSession(packet.header.sessionId);
|
|
212
215
|
}
|
|
213
216
|
} else if (packet.header.sessionType === SessionType.Group) {
|
|
217
|
+
if (this.#closing) return;
|
|
214
218
|
if (packet.header.sourceNodeId !== undefined) {
|
|
215
219
|
//session = this.sessionManager.findGroupSession(packet.header.destGroupId, packet.header.sessionId);
|
|
216
220
|
}
|
|
@@ -253,6 +257,7 @@ export class ExchangeManager {
|
|
|
253
257
|
if (exchange !== undefined) {
|
|
254
258
|
await exchange.onMessageReceived(message, isDuplicate);
|
|
255
259
|
} else {
|
|
260
|
+
if (this.#closing) return;
|
|
256
261
|
if (session.closingAfterExchangeFinished) {
|
|
257
262
|
throw new MatterFlowError(
|
|
258
263
|
`Session with ID ${packet.header.sessionId} marked for closure, decline new exchange creation.`,
|