@matter/protocol 0.16.0-alpha.0-20251107-6bcb5baf4 → 0.16.0-alpha.0-20251110-c4c70a41b

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.
Files changed (121) hide show
  1. package/dist/cjs/action/client/ClientInteraction.d.ts +7 -0
  2. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  3. package/dist/cjs/action/client/ClientInteraction.js +17 -5
  4. package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
  5. package/dist/cjs/action/server/AccessControl.d.ts +5 -0
  6. package/dist/cjs/action/server/AccessControl.d.ts.map +1 -1
  7. package/dist/cjs/action/server/AccessControl.js +1 -0
  8. package/dist/cjs/action/server/AccessControl.js.map +1 -1
  9. package/dist/cjs/action/server/CommandInvokeResponse.d.ts.map +1 -1
  10. package/dist/cjs/action/server/CommandInvokeResponse.js +12 -1
  11. package/dist/cjs/action/server/CommandInvokeResponse.js.map +1 -1
  12. package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
  13. package/dist/cjs/action/server/DataResponse.js +1 -0
  14. package/dist/cjs/action/server/DataResponse.js.map +1 -1
  15. package/dist/cjs/ble/Ble.d.ts +1 -0
  16. package/dist/cjs/ble/Ble.d.ts.map +1 -1
  17. package/dist/cjs/ble/Ble.js +1 -0
  18. package/dist/cjs/ble/Ble.js.map +1 -1
  19. package/dist/cjs/common/FailsafeContext.js +1 -1
  20. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  21. package/dist/cjs/fabric/Fabric.d.ts +8 -1
  22. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  23. package/dist/cjs/fabric/Fabric.js +11 -2
  24. package/dist/cjs/fabric/Fabric.js.map +1 -1
  25. package/dist/cjs/fabric/FabricManager.d.ts +5 -1
  26. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  27. package/dist/cjs/fabric/FabricManager.js +7 -1
  28. package/dist/cjs/fabric/FabricManager.js.map +1 -1
  29. package/dist/cjs/interaction/FabricAccessControl.d.ts.map +1 -1
  30. package/dist/cjs/interaction/FabricAccessControl.js +4 -1
  31. package/dist/cjs/interaction/FabricAccessControl.js.map +1 -1
  32. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  33. package/dist/cjs/protocol/ExchangeManager.js +7 -1
  34. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  35. package/dist/cjs/protocol/MessageChannel.d.ts +5 -0
  36. package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
  37. package/dist/cjs/protocol/MessageChannel.js +7 -0
  38. package/dist/cjs/protocol/MessageChannel.js.map +1 -1
  39. package/dist/cjs/session/NodeSession.d.ts +1 -1
  40. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  41. package/dist/cjs/session/NodeSession.js +2 -2
  42. package/dist/cjs/session/NodeSession.js.map +1 -1
  43. package/dist/cjs/session/Session.d.ts +1 -1
  44. package/dist/cjs/session/Session.d.ts.map +1 -1
  45. package/dist/cjs/session/Session.js.map +1 -1
  46. package/dist/cjs/session/SessionManager.d.ts +1 -1
  47. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  48. package/dist/cjs/session/case/CaseServer.js +1 -1
  49. package/dist/cjs/session/case/CaseServer.js.map +1 -1
  50. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
  51. package/dist/cjs/session/pase/PaseServer.js +29 -26
  52. package/dist/cjs/session/pase/PaseServer.js.map +1 -1
  53. package/dist/esm/action/client/ClientInteraction.d.ts +7 -0
  54. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  55. package/dist/esm/action/client/ClientInteraction.js +18 -5
  56. package/dist/esm/action/client/ClientInteraction.js.map +1 -1
  57. package/dist/esm/action/server/AccessControl.d.ts +5 -0
  58. package/dist/esm/action/server/AccessControl.d.ts.map +1 -1
  59. package/dist/esm/action/server/AccessControl.js +1 -0
  60. package/dist/esm/action/server/AccessControl.js.map +1 -1
  61. package/dist/esm/action/server/CommandInvokeResponse.d.ts.map +1 -1
  62. package/dist/esm/action/server/CommandInvokeResponse.js +12 -1
  63. package/dist/esm/action/server/CommandInvokeResponse.js.map +1 -1
  64. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  65. package/dist/esm/action/server/DataResponse.js +1 -0
  66. package/dist/esm/action/server/DataResponse.js.map +1 -1
  67. package/dist/esm/ble/Ble.d.ts +1 -0
  68. package/dist/esm/ble/Ble.d.ts.map +1 -1
  69. package/dist/esm/ble/Ble.js +1 -0
  70. package/dist/esm/ble/Ble.js.map +1 -1
  71. package/dist/esm/common/FailsafeContext.js +1 -1
  72. package/dist/esm/common/FailsafeContext.js.map +1 -1
  73. package/dist/esm/fabric/Fabric.d.ts +8 -1
  74. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  75. package/dist/esm/fabric/Fabric.js +11 -2
  76. package/dist/esm/fabric/Fabric.js.map +1 -1
  77. package/dist/esm/fabric/FabricManager.d.ts +5 -1
  78. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  79. package/dist/esm/fabric/FabricManager.js +7 -1
  80. package/dist/esm/fabric/FabricManager.js.map +1 -1
  81. package/dist/esm/interaction/FabricAccessControl.d.ts.map +1 -1
  82. package/dist/esm/interaction/FabricAccessControl.js +4 -1
  83. package/dist/esm/interaction/FabricAccessControl.js.map +1 -1
  84. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  85. package/dist/esm/protocol/ExchangeManager.js +7 -1
  86. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  87. package/dist/esm/protocol/MessageChannel.d.ts +5 -0
  88. package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
  89. package/dist/esm/protocol/MessageChannel.js +7 -0
  90. package/dist/esm/protocol/MessageChannel.js.map +1 -1
  91. package/dist/esm/session/NodeSession.d.ts +1 -1
  92. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  93. package/dist/esm/session/NodeSession.js +2 -2
  94. package/dist/esm/session/NodeSession.js.map +1 -1
  95. package/dist/esm/session/Session.d.ts +1 -1
  96. package/dist/esm/session/Session.d.ts.map +1 -1
  97. package/dist/esm/session/Session.js.map +1 -1
  98. package/dist/esm/session/SessionManager.d.ts +1 -1
  99. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  100. package/dist/esm/session/case/CaseServer.js +1 -1
  101. package/dist/esm/session/case/CaseServer.js.map +1 -1
  102. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
  103. package/dist/esm/session/pase/PaseServer.js +29 -26
  104. package/dist/esm/session/pase/PaseServer.js.map +1 -1
  105. package/package.json +6 -6
  106. package/src/action/client/ClientInteraction.ts +25 -3
  107. package/src/action/server/AccessControl.ts +8 -0
  108. package/src/action/server/CommandInvokeResponse.ts +15 -1
  109. package/src/action/server/DataResponse.ts +1 -0
  110. package/src/ble/Ble.ts +1 -0
  111. package/src/common/FailsafeContext.ts +1 -1
  112. package/src/fabric/Fabric.ts +12 -2
  113. package/src/fabric/FabricManager.ts +12 -2
  114. package/src/interaction/FabricAccessControl.ts +4 -1
  115. package/src/protocol/ExchangeManager.ts +7 -1
  116. package/src/protocol/MessageChannel.ts +8 -0
  117. package/src/session/NodeSession.ts +2 -2
  118. package/src/session/Session.ts +5 -1
  119. package/src/session/SessionManager.ts +1 -1
  120. package/src/session/case/CaseServer.ts +1 -1
  121. package/src/session/pase/PaseServer.ts +41 -34
@@ -337,8 +337,8 @@ export class NodeSession extends SecureSession {
337
337
  }
338
338
 
339
339
  /** Destroys a session. Outstanding subscription data will be discarded. */
340
- async destroy(sendClose = false, closeAfterExchangeFinished = true) {
341
- await this.clearSubscriptions(false);
340
+ async destroy(sendClose = false, closeAfterExchangeFinished = true, flushSubscriptions = false) {
341
+ await this.clearSubscriptions(flushSubscriptions);
342
342
  this.#fabric?.removeSession(this);
343
343
  if (!sendClose) {
344
344
  this.#sendCloseMessageWhenClosing = false;
@@ -218,7 +218,11 @@ export abstract class Session {
218
218
  abstract decode(packet: DecodedPacket, aad?: Bytes): DecodedMessage;
219
219
  abstract encode(message: Message): Packet;
220
220
  abstract end(sendClose: boolean): Promise<void>;
221
- abstract destroy(sendClose?: boolean, closeAfterExchangeFinished?: boolean): Promise<void>;
221
+ abstract destroy(
222
+ sendClose?: boolean,
223
+ closeAfterExchangeFinished?: boolean,
224
+ flushSubscriptions?: boolean,
225
+ ): Promise<void>;
222
226
 
223
227
  protected get manager() {
224
228
  return this.#manager;
@@ -421,7 +421,7 @@ export class SessionManager {
421
421
 
422
422
  return [...this.#sessions].find(
423
423
  session => NodeSession.is(session) && session.isPase && !session.closingAfterExchangeFinished,
424
- ) as NodeSession;
424
+ );
425
425
  }
426
426
 
427
427
  forFabric(fabric: Fabric) {
@@ -49,7 +49,7 @@ export class CaseServer implements ProtocolHandler {
49
49
  try {
50
50
  await this.#handleSigma1(messenger);
51
51
  } catch (error) {
52
- logger.error("An error occurred during the commissioning", error);
52
+ logger.error("Error establishing CASE session", error);
53
53
 
54
54
  if (error instanceof FabricNotFoundError) {
55
55
  await messenger.sendError(SecureChannelStatusCode.NoSharedTrustRoots);
@@ -72,46 +72,53 @@ export class PaseServer implements ProtocolHandler {
72
72
  return;
73
73
  }
74
74
  const messenger = new PaseServerMessenger(exchange);
75
- try {
76
- // When a Commissioner is either in the process of establishing a PASE session with the Commissionee or has
77
- // successfully established a session, the Commissionee SHALL NOT accept any more requests for new PASE
78
- // sessions until session establishment fails or the successfully established PASE session is terminated on
79
- // the commissioning channel.
80
- const paseSession = this.sessions.getPaseSession();
81
- if (paseSession !== undefined && !paseSession.isClosing) {
82
- logger.info("Pase server: Pairing already in progress (PASE session exists), ignoring new exchange.");
83
- } else if (this.#pairingTimer?.isRunning) {
84
- logger.info(
85
- "Pase server: Pairing already in progress (PASE establishment Timer running), ignoring new exchange.",
86
- );
87
- } else if (this.#pairingMessenger !== undefined) {
88
- logger.info("Already handling a pairing request, ignoring new exchange.");
89
- } else {
75
+
76
+ // When a Commissioner is either in the process of establishing a PASE session with the Commissionee or has
77
+ // successfully established a session, the Commissionee SHALL NOT accept any more requests for new PASE
78
+ // sessions until session establishment fails or the successfully established PASE session is terminated on
79
+ // the commissioning channel.
80
+ const paseSession = this.sessions.getPaseSession();
81
+ if (paseSession !== undefined && !paseSession.isClosing) {
82
+ logger.info("Pase server: Pairing already in progress (PASE session exists), ignoring new exchange.");
83
+ } else if (this.#pairingTimer?.isRunning) {
84
+ logger.info(
85
+ "Pase server: Pairing already in progress (PASE establishment Timer running), ignoring new exchange.",
86
+ );
87
+ } else if (this.#pairingMessenger !== undefined) {
88
+ logger.info("Already handling a pairing request, ignoring new exchange.");
89
+ } else {
90
+ // All checks done, we handle the pairing request
91
+ try {
90
92
  this.#pairingMessenger = messenger;
91
93
  // Ok new pairing try, handle it
92
94
  await this.handlePairingRequest(this.sessions.crypto);
93
- }
94
- } catch (error) {
95
- this.#pairingErrors++;
96
- logger.error(
97
- `An error occurred during the PASE commissioning (${this.#pairingErrors}/${PASE_COMMISSIONING_MAX_ERRORS}):`,
98
- error,
99
- );
100
-
101
- // If we received a ChannelStatusResponseError we do not need to send one back, so just cancel pairing
102
- const sendError = !(error instanceof ChannelStatusResponseError);
103
- await this.cancelPairing(messenger, sendError);
104
-
105
- if (this.#pairingErrors >= PASE_COMMISSIONING_MAX_ERRORS) {
106
- throw new MaximumPasePairingErrorsReachedError(
107
- `Pase server: Too many errors during PASE commissioning, aborting commissioning window`,
95
+ } catch (error) {
96
+ this.#pairingErrors++;
97
+ logger.error(
98
+ `An error occurred during the PASE commissioning (${this.#pairingErrors}/${PASE_COMMISSIONING_MAX_ERRORS}):`,
99
+ error,
108
100
  );
101
+
102
+ // If we received a ChannelStatusResponseError we do not need to send one back, so just cancel pairing
103
+ const sendError = !(error instanceof ChannelStatusResponseError);
104
+ await this.cancelPairing(messenger, sendError);
105
+
106
+ if (this.#pairingErrors >= PASE_COMMISSIONING_MAX_ERRORS) {
107
+ throw new MaximumPasePairingErrorsReachedError(
108
+ `Pase server: Too many errors during PASE commissioning, aborting commissioning window`,
109
+ );
110
+ }
111
+ } finally {
112
+ this.#pairingMessenger = undefined;
113
+ // Destroy the unsecure session used to establish the Pase session
114
+ await exchange.session.destroy();
109
115
  }
110
- } finally {
111
- this.#pairingMessenger = undefined;
112
- // Destroy the unsecure session used to establish the Pase session
113
- await exchange.session.destroy();
116
+ return;
114
117
  }
118
+
119
+ // We are not handing the pairing request, send error and close messenger
120
+ await messenger.sendError(SecureChannelStatusCode.InvalidParam);
121
+ await messenger.close();
115
122
  }
116
123
 
117
124
  private async handlePairingRequest(crypto: Crypto) {