@matter/protocol 0.17.6-alpha.0-20260715-312da87ed → 0.17.6

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 (65) hide show
  1. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
  2. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +1 -0
  3. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  4. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +6 -1
  5. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  6. package/dist/cjs/action/client/subscription/ClientSubscriptions.js +20 -1
  7. package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
  8. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +2 -0
  9. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  10. package/dist/cjs/action/client/subscription/PeerSubscription.js +2 -0
  11. package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
  12. package/dist/cjs/peer/Peer.d.ts.map +1 -1
  13. package/dist/cjs/peer/Peer.js +1 -1
  14. package/dist/cjs/peer/Peer.js.map +1 -1
  15. package/dist/cjs/peer/RebootResubscribeArmer.d.ts +24 -0
  16. package/dist/cjs/peer/RebootResubscribeArmer.d.ts.map +1 -0
  17. package/dist/cjs/peer/RebootResubscribeArmer.js +144 -0
  18. package/dist/cjs/peer/RebootResubscribeArmer.js.map +6 -0
  19. package/dist/cjs/peer/index.d.ts +1 -0
  20. package/dist/cjs/peer/index.d.ts.map +1 -1
  21. package/dist/cjs/peer/index.js +1 -0
  22. package/dist/cjs/peer/index.js.map +1 -1
  23. package/dist/cjs/protocol/MessageReceptionState.d.ts +11 -0
  24. package/dist/cjs/protocol/MessageReceptionState.d.ts.map +1 -1
  25. package/dist/cjs/protocol/MessageReceptionState.js +17 -3
  26. package/dist/cjs/protocol/MessageReceptionState.js.map +1 -1
  27. package/dist/cjs/session/SessionManager.js +1 -1
  28. package/dist/cjs/session/SessionManager.js.map +1 -1
  29. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
  30. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -1
  31. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  32. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +6 -1
  33. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  34. package/dist/esm/action/client/subscription/ClientSubscriptions.js +20 -1
  35. package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
  36. package/dist/esm/action/client/subscription/PeerSubscription.d.ts +2 -0
  37. package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  38. package/dist/esm/action/client/subscription/PeerSubscription.js +2 -0
  39. package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
  40. package/dist/esm/peer/Peer.d.ts.map +1 -1
  41. package/dist/esm/peer/Peer.js +1 -1
  42. package/dist/esm/peer/Peer.js.map +1 -1
  43. package/dist/esm/peer/RebootResubscribeArmer.d.ts +24 -0
  44. package/dist/esm/peer/RebootResubscribeArmer.d.ts.map +1 -0
  45. package/dist/esm/peer/RebootResubscribeArmer.js +124 -0
  46. package/dist/esm/peer/RebootResubscribeArmer.js.map +6 -0
  47. package/dist/esm/peer/index.d.ts +1 -0
  48. package/dist/esm/peer/index.d.ts.map +1 -1
  49. package/dist/esm/peer/index.js +1 -0
  50. package/dist/esm/peer/index.js.map +1 -1
  51. package/dist/esm/protocol/MessageReceptionState.d.ts +11 -0
  52. package/dist/esm/protocol/MessageReceptionState.d.ts.map +1 -1
  53. package/dist/esm/protocol/MessageReceptionState.js +17 -3
  54. package/dist/esm/protocol/MessageReceptionState.js.map +1 -1
  55. package/dist/esm/session/SessionManager.js +1 -1
  56. package/dist/esm/session/SessionManager.js.map +1 -1
  57. package/package.json +5 -5
  58. package/src/action/client/subscription/ClientSubscriptionHandler.ts +5 -1
  59. package/src/action/client/subscription/ClientSubscriptions.ts +21 -2
  60. package/src/action/client/subscription/PeerSubscription.ts +3 -0
  61. package/src/peer/Peer.ts +3 -2
  62. package/src/peer/RebootResubscribeArmer.ts +174 -0
  63. package/src/peer/index.ts +1 -0
  64. package/src/protocol/MessageReceptionState.ts +19 -2
  65. package/src/session/SessionManager.ts +1 -1
@@ -331,7 +331,7 @@ class SessionManager {
331
331
  this.#construction.assert();
332
332
  let found;
333
333
  for (const session of this.#sessions) {
334
- if (!session.peerIs(address) || session.isClosing) {
334
+ if (!session.peerIs(address) || session.isClosing || session.isPeerLost) {
335
335
  continue;
336
336
  }
337
337
  if (!found || found.activeTimestamp < session.activeTimestamp) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/session/SessionManager.ts"],
4
- "mappings": "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",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,iCAAiC;AAC1C,SAAS,qBAAqB;AAE9B,SAAS,aAAa,sBAAsB;AAC5C,SAAS,yBAAyB;AAElC,SAAS,0BAA0B;AACnC,SAAS,cAAc,yBAAyB,8BAA8B;AAC9E;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,OACG;AACP,SAAiF,SAAS,cAAc;AACxG,SAAS,iBAAiB;AAE1B,SAAS,gBAAgB,+BAA+B;AACxD,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAE9B,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AAEjC,MAAM,SAAS,OAAO,IAAI,gBAAgB;AAM1C,SAAS,sBAAsB,iBAA2B;AACtD,MAAI,kBAAkB,iBAAiB,oBAAoB;AACvD,UAAM,IAAI;AAAA,MACN,4BAA4B,eAAe,6BAA6B,iBAAiB,kBAAkB;AAAA,IAC/G;AAAA,EACJ;AACJ;AAyFA,MAAM,uBAAuB;AAG7B,MAAM,yBAAyB;AAO/B,MAAM,6BAA6B;AAK5B,MAAM,sBAAsB,YAAY;AAAA,EAC3C,YAAY,UAAU,uBAAuB,SAAwB;AACjE,UAAM,SAAS,OAAO;AAAA,EAC1B;AACJ;AAKO,MAAM,eAAe;AAAA,EACf;AAAA,EACA,qBAAqB,oBAAI,IAA8B;AAAA,EACvD,YAAY,IAAI,SAAsB;AAAA,EACtC,iBAAiB,oBAAI,IAAoC;AAAA,EAClE;AAAA,EACA,qBAAqB,IAAI,eAAyC;AAAA,EACzD;AAAA,EACT;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,0BAAoC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5C,uBAAiC,OAAO,CAAC;AAAA,EAChC;AAAA,EACA,aAAa,IAAI,cAAc;AAAA,EAC/B,2BAA2B,IAAI,MAAM,IAAI;AAAA,EAClD,gBAAgB;AAAA,EAEP,wBAAwB,WAA+D;AAAA,EACvF,SAAS,WAA+C;AAAA,EACxD,kBAAkB,WAA0C;AAAA,EAErE,YAAY,SAAgC;AACxC,SAAK,WAAW;AAChB,UAAM;AAAA,MACF,SAAS,EAAE,OAAO;AAAA,IACtB,IAAI;AACJ,SAAK,qBAAqB,kBAAkB,EAAE,GAAG,kBAAkB,UAAU,GAAG,QAAQ,WAAW,CAAC;AACpG,0BAAsB,KAAK,mBAAmB,eAAe;AAC7D,SAAK,iBAAiB,OAAO;AAC7B,SAAK,mCAAmC,IAAI,eAAe,MAAM;AAGjE,SAAK,WAAW,GAAG,QAAQ,QAAQ,OAAO,UAAU,OAAM,WAAU;AAChE,YAAM,KAAK,iCAAiC,MAAM;AAAA,IACtD,CAAC;AAGD,SAAK,UAAU,MAAM,GAAG,aAAW;AAC/B,YAAM,uBAAuB,CAAC,iBAA+B;AACzD,YAAI,QAAQ,WAAW;AACnB;AAAA,QACJ;AAEA,aAAK,sBAAsB,KAAK,SAAS,YAAY;AAAA,MACzD;AAEA,cAAQ,cAAc,MAAM,GAAG,oBAAoB;AACnD,cAAQ,cAAc,QAAQ,GAAG,oBAAoB;AAErD,cAAQ,QAAQ,GAAG,MAAM;AACrB,gBAAQ,cAAc,MAAM,IAAI,oBAAoB;AACpD,gBAAQ,cAAc,QAAQ,IAAI,oBAAoB;AAAA,MAC1D,CAAC;AAAA,IACL,CAAC;AAED,SAAK,gBAAgB,aAAa,MAAM,MAAM,KAAK,YAAY,CAAC;AAAA,EACpE;AAAA,EAEA,QAAQ,cAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,eAAe;AAAA,MAChC,SAAS,IAAI,IAAI,cAAc,EAAE,cAAc,UAAU;AAAA,MACzD,SAAS,IAAI,IAAI,aAAa;AAAA,IAClC,CAAC;AACD,QAAI,IAAI,gBAAgB,QAAQ;AAChC,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,SAAS,QAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,0BAA0B;AAC1B,SAAK,cAAc,OAAO;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,oBAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,oBAAuC;AACvC,UAAM,EAAE,qBAAqB,kBAAkB,IAAI,KAAK;AACxD,UAAM,eAAe,oBAAoB,aAAa,oBAAoB;AAC1E,WAAO;AAAA,MACH,GAAG,KAAK;AAAA;AAAA;AAAA,MAGR,mBAAmB,eAAe,oBAAoB;AAAA,IAC1D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,kBAAkB,YAAwC;AAC1D,QAAI,WAAW,oBAAoB,QAAW;AAC1C,4BAAsB,WAAW,eAAe;AAAA,IACpD;AACA,SAAK,qBAAqB;AAAA,MACtB,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,uBAAuB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAAoC;AAC1C,WAAO,KAAK,SAAS,QAAQ,IAAI,OAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAQ;AACR,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EAEA,uBAAuB,SAKpB;AACC,SAAK,cAAc,OAAO;AAE1B,UAAM,EAAE,SAAS,iBAAiB,mBAAmB,YAAY,IAAI;AACrE,QAAI,oBAAoB,QAAW;AAC/B,UAAI,KAAK,mBAAmB,IAAI,eAAe,GAAG;AAC9C,cAAM,IAAI,gBAAgB,gCAAgC,eAAe,iBAAiB;AAAA,MAC9F;AAAA,IACJ;AAEA,QAAI,QAAQ;AACZ,WAAO,MAAM;AACT,YAAM,UAAU,IAAI,iBAAiB;AAAA,QACjC,QAAQ,KAAK,SAAS,QAAQ;AAAA,QAC9B,SAAS;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB;AAAA,QACA;AAAA,QACA,aAAa,eAAe;AAAA,MAChC,CAAC;AAED,YAAM,kBAAkB,QAAQ;AAChC,UAAI,KAAK,mBAAmB,IAAI,eAAe,GAAG;AAC9C,YAAI,EAAE,QAAQ,GAAG;AACb,gBAAM,IAAI,cAAc,uEAAuE;AAAA,QACnG;AAEA;AAAA,MACJ;AAEA,WAAK,mBAAmB,IAAI,iBAAiB,OAAO;AACpD,cAAQ,SAAS;AACjB,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,QAAwE;AAC9F,WAAO,MAAM,YAAY,OAAO;AAAA,MAC5B,QAAQ,KAAK;AAAA,MACb,GAAG;AAAA,MACH,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAuB,SAAsB;AAC/C,UAAM,KAAK;AAEX,UAAM,SAAS,KAAK,mBAAmB,OAAO,OAAO;AACrD,QAAI,QAAQ;AACR,YAAM,KAAK,wBAAwB;AAAA,IACvC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iCAAiC,QAAgB;AACnD,UAAM,KAAK;AAEX,QAAI,eAAe;AACnB,eAAW,WAAW,KAAK,mBAAmB,KAAK,GAAG;AAClD,UAAI,QAAQ,gBAAgB,OAAO,aAAa;AAC5C,YAAI,KAAK,mBAAmB,OAAO,OAAO,GAAG;AACzC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,eAAe,GAAG;AAClB,YAAM,KAAK,wBAAwB;AAAA,IACvC;AACA,WAAO,eAAe;AAAA,EAC1B;AAAA,EAEA,4BAA4B;AACxB,SAAK,cAAc,OAAO;AAE1B,QAAI,gBAAyC;AAC7C,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,iBAAiB,QAAQ,YAAY,cAAc,WAAW;AAC/D,wBAAgB;AAAA,MACpB;AAAA,IACJ;AACA,QAAI,kBAAkB,QAAW;AAC7B,YAAM,IAAI,gBAAgB,0DAA0D;AAAA,IACxF;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,4BAA4B;AAC9B,UAAM,KAAK;AAEX,aAAS,IAAI,GAAG,IAAI,KAAK,eAAe,KAAK;AACzC,YAAM,KAAK,KAAK;AAChB,WAAK,iBAAkB,KAAK,iBAAiB,IAAK,KAAK;AACvD,UAAI,KAAK,mBAAmB,EAAG,MAAK;AAEpC,UAAI,KAAK,WAAW,EAAE,MAAM,QAAW;AACnC,eAAO;AAAA,MACX;AAAA,IACJ;AAGA,UAAM,gBAAgB,KAAK,0BAA0B;AAErD,UAAM,cAAc,cAAc,YAAY;AAC1C,YAAM,cAAc,mBAAmB,IAAI;AAAA,IAC/C,CAAC;AACD,SAAK,iBAAiB,cAAc;AACpC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAW,WAAmB;AAC1B,SAAK,cAAc,OAAO;AAE1B,WAAO,KAAK,UAAU,IAAI,MAAM,SAAS;AAAA,EAC7C;AAAA,EAEA,iBAAiB;AACb,SAAK,cAAc,OAAO;AAE1B,WAAO,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,aAAW,YAAY,GAAG,OAAO,KAAK,QAAQ,UAAU,CAAC,QAAQ,SAAS;AAAA,EAC9G;AAAA,EAEA,UAAU,QAAgB;AACtB,SAAK,cAAc,OAAO;AAE1B,WAAO,CAAC,GAAG,KAAK,SAAS,EAAE;AAAA,MACvB,aACI,YAAY,GAAG,OAAO,KAAK,QAAQ,YAAY,QAAQ,QAAQ,gBAAgB,OAAO;AAAA,IAC9F;AAAA,EACJ;AAAA,EAEA,WAAW,MAAmB;AAC1B,UAAM,UAAU,KAAK,gBAAgB,IAAI;AACzC,QAAI,SAAS;AACT,aAAO;AAAA,IACX;AAEA,UAAM,IAAI,mBAAmB,8BAA8B,YAAY,IAAI,CAAC,EAAE;AAAA,EAClF;AAAA,EAEA,gBAAgB,SAAsB;AAClC,SAAK,cAAc,OAAO;AAI1B,QAAI;AACJ,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,QAAQ,aAAa,QAAQ,YAAY;AACrE;AAAA,MACJ;AAEA,UAAI,CAAC,SAAS,MAAM,kBAAkB,QAAQ,iBAAiB;AAC3D,gBAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,SAAsB;AAC9B,cAAU,YAAY,OAAO;AAC7B,WAAO,KAAK,UAAU,OAAO,aAAW,QAAQ,gBAAgB,WAAW,CAAC,QAAQ,SAAS;AAAA,EACjG;AAAA,EAEA,uBAAuB,aAA0B;AAC7C,WAAO,KAAK,UAAU,OAAO,aAAW,QAAQ,QAAQ,gBAAgB,WAAW;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,SAAsB,MAAkB;AACvD,WAAO,KAAK,gBAAgB;AAAA,MACxB;AAAA,MACA,OAAO,IAAI,kBAAkB;AAAA,MAC7B,MAAM,QAAQ,KAAK;AAAA,MACnB,mBAAmB;AAAA,IACvB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,SAAsB,OAAc,MAAkB;AACvE,WAAO,MAAM,KAAK,gBAAgB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,MAAM,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,gBACF,SAGF;AACE,UAAM,KAAK;AAEX,UAAM,EAAE,SAAS,KAAK,IAAI;AAC1B,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,QAAQ,OAAO,OAAO,GAAG;AAC1B;AAAA,MACJ;AAEA,UAAI,SAAS,UAAa,QAAQ,aAAa,MAAM;AACjD;AAAA,MACJ;AAEA,YAAM,QAAQ,eAAe,OAAO;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,oBAAoB,cAAuB;AACvC,SAAK,cAAc,OAAO;AAE1B,QAAI,iBAAiB,QAAW;AAC5B,aAAO,KAAK,mBAAmB,IAAI,OAAO,mBAAmB;AAAA,IACjE;AACA,WAAO,KAAK,mBAAmB,IAAI,YAAY;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,uBAAuB,SAAsB,YAAgC;AAC/E,SAAK,cAAc,OAAO;AAC1B,UAAM,UAAU,QAAQ,WAAW,QAAQ,MAAM;AACjD,YAAQ,cAAc,OAAO;AAE7B,UAAM,SAAS,KAAK,UAAU,OAAO;AACrC,UAAM,EAAE,KAAK,UAAU,UAAU,IAAI,OAAO,OAAO,mBAAmB,OAAO;AAC7E,QAAI,cAAc,UAAa,QAAQ,QAAW;AAC9C,YAAM,IAAI;AAAA,QACN,yCAAyC,OAAO,cAAc,OAAO,QAAQ;AAAA,MACjF;AAAA,IACJ;AAIA,UAAM,UAAU,KAAK,eAChB,IAAI,QAAQ,MAAM,GACjB,KAAK,OAAK,EAAE,QAAQ,OAAO,aAAa,WAAW,GAAG,CAAC;AAC7D,QAAI,SAAS;AACT,aAAO;AAAA,IACX;AAEA,WAAO,MAAM,aAAa,OAAO;AAAA,MAC7B;AAAA,MACA,SAAS;AAAA,MACT,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA,qBAAqB;AAAA,MACrB,aAAa,QAAQ;AAAA,MACrB,gBAAgB,KAAK;AAAA,IACzB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,QAAuB,KAAY;AACtD,SAAK,cAAc,OAAO;AAC1B,QAAI;AACJ,QAAI;AACA,gBAAU,aAAa,OAAO,KAAK,SAAS,SAAS,QAAQ,GAAG;AAAA,IACpE,SAAS,OAAO;AAGZ,UAAI,SAAS,OAAO,sBAAsB,GAAG;AACzC,aAAK,gBAAgB,KAAK,EAAE,QAAQ,UAAU,oBAAoB,eAAe,CAAC;AAAA,MACtF,WAAW,SAAS,OAAO,uBAAuB,GAAG;AACjD,aAAK,gBAAgB,KAAK,EAAE,QAAQ,UAAU,oBAAoB,WAAW,CAAC;AAAA,MAClF;AACA,YAAM;AAAA,IACV;AAEA,UAAM,EAAE,SAAS,KAAK,YAAY,WAAW,cAAc,UAAU,OAAO,IAAI;AAGhF,UAAM,aAAa,QAAQ,aAAa;AACxC,QAAI,eAAe,QAAW;AAC1B,YAAM,IAAI,oBAAoB,mDAAmD;AAAA,IACrF;AACA,UAAM,UAAU,QAAQ,UAAU;AAClC,YAAQ,cAAc,OAAO;AAE7B,QAAI,UAAU,KAAK,eAAe,IAAI,YAAY,GAAG,KAAK,OAAK,EAAE,QAAQ,OAAO,aAAa,WAAW,GAAG,CAAC;AAC5G,QAAI,YAAY,QAAW;AACvB,gBAAU,IAAI,aAAa;AAAA,QACvB,SAAS;AAAA,QACT,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA,qBAAqB;AAAA,QACrB,uBAAuB;AAAA,QACvB,YAAY;AAAA,QACZ,kBAAkB,OAAO,OAAO,oBAAoB,OAAO;AAAA,QAC3D,gBAAgB,KAAK;AAAA,MACzB,CAAC;AAAA,IACL;AAEA,WAAO,EAAE,SAAS,SAAS,IAAI;AAAA,EACnC;AAAA;AAAA,EAGA,iBAAiB,MAA6B;AAC1C,SAAK,gBAAgB,KAAK,IAAI;AAAA,EAClC;AAAA,EAEA,qBAAqB,SAAuB;AACxC,UAAM,eAAe,QAAQ;AAC7B,UAAM,eAAe,KAAK,eAAe,IAAI,YAAY,KAAK,IAAI,SAAS;AAC3E,iBAAa,IAAI,OAAO;AACxB,SAAK,eAAe,IAAI,cAAc,YAAY;AAAA,EACtD;AAAA,EAEA,mBAAmB,SAAuB;AACtC,UAAM,eAAe,QAAQ;AAC7B,UAAM,eAAe,KAAK,eAAe,IAAI,YAAY;AACzD,QAAI,cAAc;AACd,mBAAa,OAAO,OAAO;AAC3B,UAAI,aAAa,SAAS,GAAG;AACzB,aAAK,eAAe,OAAO,YAAY;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,2BAA2B,QAAoD;AAC3E,WAAO,EAAE,GAAG,QAAQ,QAAQ,KAAK,aAAa,OAAO,UAAU,OAAO,WAAW,EAAE;AAAA,EACvF;AAAA,EAEA,yBAAyB,cAAqB;AAC1C,SAAK,cAAc,OAAO;AAC1B,UAAM,SAAS,CAAC,GAAG,KAAK,mBAAmB,OAAO,CAAC,EAAE;AAAA,MAAK,CAAAA,YACtD,MAAM,SAASA,QAAO,cAAc,YAAY;AAAA,IACpD;AACA,QAAI,WAAW,QAAW;AACtB,aAAO,KAAK,2BAA2B,MAAM;AAAA,IACjD;AAAA,EACJ;AAAA,EAEA,8BAA8B,SAAsB;AAChD,SAAK,cAAc,OAAO;AAC1B,UAAM,SAAS,KAAK,mBAAmB,IAAI,OAAO;AAClD,QAAI,WAAW,QAAW;AACtB,aAAO,KAAK,2BAA2B,MAAM;AAAA,IACjD;AAAA,EACJ;AAAA,EAEA,MAAM,qBAAqB,kBAAoC;AAC3D,UAAM,KAAK;AACX,UAAM,EAAE,QAAQ,GAAG,KAAK,IAAI;AAE5B,UAAM,SAAS;AAAA,MACX,GAAG;AAAA,MACH,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,IACxB;AACA,SAAK,mBAAmB,IAAI,OAAO,UAAU,iBAAiB,UAAU,GAAG,MAAM;AACjF,UAAM,KAAK,wBAAwB;AAAA,EACvC;AAAA,EAEA,MAAM,0BAA0B;AAC5B,UAAM,KAAK;AACX,UAAM,KAAK,SAAS,QAAQ;AAAA,MACxB;AAAA,MACA,CAAC,GAAG,KAAK,kBAAkB,EAAE;AAAA,QACzB,CAAC;AAAA,UACG;AAAA,UACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,OAAgC;AAAA,UAC5B,QAAQ,QAAQ;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,YACf,GAAG;AAAA,YACH,qBAAqB,kBAAkB,sBACjC,0BAA0B,OAAO,kBAAkB,mBAAmB,IACtE;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,kBAAkB,UAAoB,aAA2B;AAC7D,WAAO,KAAK,SAAS,QAAQ;AAAA,MACzB,YACI,OAAO,aAAa;AAAA,OAEnB,gBAAgB,UAAa,OAAO,gBAAgB;AAAA,IAC7D;AAAA,EACJ;AAAA,EAEA,aAAa,UAAoB,aAA2B;AACxD,UAAM,SAAS,KAAK,kBAAkB,UAAU,WAAW;AAC3D,QAAI,WAAW,QAAW;AACtB,YAAM,IAAI,cAAc,2BAA2B,QAAQ,WAAW,WAAW,EAAE;AAAA,IACvF;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,cAAc;AAChB,UAAM,KAAK,SAAS,QAAQ;AAE5B,SAAK,2BAA2B,MAAM,KAAK,+BAA+B;AAE1E,UAAM,0BAA0B,MAAM,KAAK,SAAS,QAAQ;AAAA,MACxD;AAAA,MACA,CAAC;AAAA,IACL;AAEA,4BAAwB;AAAA,MACpB,CAAC;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,MAAM;AACF,cAAM,SAAS,KAAK,kBAAkB,UAAU,WAAW;AAC3D,YAAI,CAAC,QAAQ;AACT,iBAAO;AAAA,YACH,2CAA2C,MAAM,QAAQ,CAAC,cAAc,WAAW;AAAA,UACvF;AACA;AAAA,QACJ;AACA,eAAO;AAAA,UACH;AAAA,UACA,OAAO,UAAU,MAAM,EAAE,SAAS;AAAA,UAClC;AAAA,UACA,OAAO,UAAU,UAAU,EAAE,SAAS;AAAA,UACtC;AAAA,UACA,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,UAC3B,MAAM,MAAM,OAAO,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA,QACvD;AACA,aAAK,mBAAmB,IAAI,OAAO,UAAU,MAAM,GAAG;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa,OAAO;AAAA,UACpB;AAAA;AAAA,UAEA,mBAAmB,kBAAkB,iBAAiB;AAAA,UACtD;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iCAAiC;AACnC,UAAM,UAAU,KAAK,SAAS;AAE9B,UAAM,YAAY,CAAE,MAAM,QAAQ,IAAI,sBAAsB;AAC5D,UAAM,OAAO,YAAY,MAAM,KAAK,SAAS,QAAQ,0BAA0B,IAAI;AAEnF,UAAM,UAAU,MAAM,wBAAwB,OAAO,KAAK,QAAQ,SAAS,wBAAwB;AAAA,MAC/F,SAAS;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,yBAAyB,YAAY;AACjC,eAAO;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,QAAI,WAAW;AACX,YAAM,KAAK,SAAS,QAAQ,6BAA6B;AAAA,IAC7D;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,8BAA0D;AACtD,SAAK,cAAc,OAAO;AAC1B,WAAO,CAAC,GAAG,KAAK,SAAS,EACpB,OAAO,aAAW,QAAQ,YAAY,CAAC,QAAQ,MAAM,EACrD,IAAI,cAAY;AAAA,MACb,MAAM,GAAG,QAAQ,GAAG;AAAA,MACpB,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,QAAQ,mBAAmB,gBAAgB,QAAQ,QAAQ,sBAAsB;AAAA,MACjF,cAAc,QAAQ;AAAA,MACtB,QAAQ,QAAQ;AAAA,MAChB,0BAA0B,mBAAmB,gBAAgB,QAAQ,YAAY;AAAA,MACjF,qBAAqB,mBAAmB,gBAAgB,QAAQ,kBAAkB;AAAA,MAClF,6BAA6B,mBAAmB,gBAAgB,QAAQ,cAAc,OAAO;AAAA,IACjG,EAAE;AAAA,EACV;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,KAAK,cAAc,MAAM,YAAY;AACvC,WAAK,WAAW,MAAM;AACtB,YAAM,KAAK,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,QAAQ;AACV,QAAI,KAAK,cAAc,WAAW,UAAU,OAAO,cAAc;AAC7D,YAAM,KAAK;AAAA,IACf;AAEA,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,SAAS,QAAQ,SAAS;AACrC,SAAK,mBAAmB,MAAM;AAC9B,SAAK,2BAA2B,MAAM,KAAK,+BAA+B;AAAA,EAC9E;AAAA,EAEA,MAAM,mBAAmB;AACrB,QAAI,KAAK,cAAc,WAAW,UAAU,OAAO,cAAc;AAC7D,YAAM,KAAK;AAAA,IACf;AAEA,UAAM,KAAK;AAEX,UAAM,UAA2B,EAAE,OAAO,IAAI,cAAc,iCAAiC,EAAE;AAE/F,UAAM,gBAAgB,KAAK,UAAU,IAAI,OAAM,YAAW;AACtD,YAAM,QAAQ,mBAAmB,IAAI;AAKrC,YAAM,QAAQ,mBAAmB,OAAO;AAExC,WAAK,UAAU,OAAO,OAAO;AAAA,IACjC,CAAC;AAED,eAAW,WAAW,KAAK,mBAAmB,OAAO,GAAG;AACpD,oBAAc,KAAK,QAAQ,mBAAmB,OAAO,CAAC;AAAA,IAC1D;AAEA,eAAW,YAAY,KAAK,eAAe,OAAO,GAAG;AACjD,iBAAW,WAAW,UAAU;AAC5B,sBAAc,KAAK,QAAQ,mBAAmB,OAAO,CAAC;AAAA,MAC1D;AAAA,IACJ;AACA,UAAM,qBAAqB,WAAW,eAAe,wBAAwB,EAAE;AAAA,MAAM,WACjF,OAAO,KAAK,2BAA2B,KAAK;AAAA,IAChD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,YAAoB;AAChC,SAAK,gBAAgB;AACrB,SAAK,iBAAiB,KAAK,SAAS,QAAQ,OAAO,eAAe;AAClE,QAAI,KAAK,mBAAmB,EAAG,MAAK;AAAA,EACxC;AACJ;",
5
5
  "names": ["record"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/protocol",
3
- "version": "0.17.6-alpha.0-20260715-312da87ed",
3
+ "version": "0.17.6",
4
4
  "description": "Low-level APIs for Matter interaction",
5
5
  "keywords": [
6
6
  "iot",
@@ -35,12 +35,12 @@
35
35
  "#*": "./src/*"
36
36
  },
37
37
  "dependencies": {
38
- "@matter/general": "0.17.6-alpha.0-20260715-312da87ed",
39
- "@matter/model": "0.17.6-alpha.0-20260715-312da87ed",
40
- "@matter/types": "0.17.6-alpha.0-20260715-312da87ed"
38
+ "@matter/general": "0.17.6",
39
+ "@matter/model": "0.17.6",
40
+ "@matter/types": "0.17.6"
41
41
  },
42
42
  "devDependencies": {
43
- "@matter/testing": "0.17.6-alpha.0-20260715-312da87ed"
43
+ "@matter/testing": "0.17.6"
44
44
  },
45
45
  "files": [
46
46
  "dist/**/*",
@@ -10,7 +10,7 @@ import { Subscription, SubscriptionId } from "#interaction/Subscription.js";
10
10
  import { MessageExchange } from "#protocol/MessageExchange.js";
11
11
  import { ProtocolHandler } from "#protocol/ProtocolHandler.js";
12
12
  import { SecureSession } from "#session/SecureSession.js";
13
- import { AbortedError, causedBy, Diagnostic, InternalError, Logger } from "@matter/general";
13
+ import { AbortedError, causedBy, Diagnostic, InternalError, Logger, Time } from "@matter/general";
14
14
  import { DataReport, INTERACTION_PROTOCOL_ID, Status, TlvAttributeReport, TypeFromSchema } from "@matter/types";
15
15
  import { InputChunk } from "../InputChunk.js";
16
16
  import { ClientSubscriptions } from "./ClientSubscriptions.js";
@@ -107,6 +107,10 @@ export class ClientSubscriptionHandler implements ProtocolHandler {
107
107
  try {
108
108
  subscription.isReading = true;
109
109
 
110
+ // Stamp when the report (data or keepalive) starts arriving, not on completion — a multi-chunk report
111
+ // may stream for a while, and liveness is proven the moment the peer starts sending on this subscription.
112
+ subscription.lastReportStartedAt = Time.nowMs;
113
+
110
114
  // If this is just a ping, only reset the timeout
111
115
  if (!initialReport.attributeReports?.length && !initialReport.eventReports?.length) {
112
116
  // An empty keepalive never reaches updated() but is still inbound peer activity, so re-arm ICD
@@ -7,7 +7,7 @@
7
7
  import { ReadResult } from "#action/response/ReadResult.js";
8
8
  import type { ActiveSubscription } from "#action/response/SubscribeResult.js";
9
9
  import { SubscriptionId } from "#interaction/Subscription.js";
10
- import { PeerAddress } from "#peer/PeerAddress.js";
10
+ import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
11
11
  import {
12
12
  BasicSet,
13
13
  createPromise,
@@ -29,7 +29,7 @@ import type { PeerSubscription } from "./PeerSubscription.js";
29
29
  export class ClientSubscriptions implements Lifetime.Owner {
30
30
  #lifetime: Lifetime;
31
31
  #active = new BasicSet<ClientSubscription>();
32
- #peers = new Map<PeerAddress, Map<number, PeerSubscription>>();
32
+ #peers = new PeerAddressMap<Map<number, PeerSubscription>>();
33
33
  #timeout?: Timer;
34
34
  #blocked = false;
35
35
  #inFlightCount = 0;
@@ -144,6 +144,25 @@ export class ClientSubscriptions implements Lifetime.Owner {
144
144
  return this.#peers.get(address)?.get(id);
145
145
  }
146
146
 
147
+ /**
148
+ * The most recent {@link PeerSubscription.lastReportStartedAt} across a peer's subscriptions, or `undefined` if
149
+ * the peer has no subscription that has yet started receiving a report.
150
+ */
151
+ lastReportStartedAtFor(address: PeerAddress): Timestamp | undefined {
152
+ const forPeer = this.#peers.get(address);
153
+ if (forPeer === undefined) {
154
+ return undefined;
155
+ }
156
+ let latest: Timestamp | undefined;
157
+ for (const subscription of forPeer.values()) {
158
+ const reportedAt = subscription.lastReportStartedAt;
159
+ if (reportedAt !== undefined && (latest === undefined || reportedAt > latest)) {
160
+ latest = reportedAt;
161
+ }
162
+ }
163
+ return latest;
164
+ }
165
+
147
166
  /**
148
167
  * Close all {@link PeerSubscription}s for a specific peer, triggering re-subscription.
149
168
  */
@@ -20,6 +20,9 @@ export class PeerSubscription extends ClientSubscription {
20
20
 
21
21
  timeoutAt?: Timestamp;
22
22
 
23
+ /** Wall-clock time the most recent inbound report (data or keepalive) started arriving on this subscription. */
24
+ lastReportStartedAt?: Timestamp;
25
+
23
26
  constructor(config: PeerSubscription.Configuration) {
24
27
  const {
25
28
  maxPeerResponseTime,
package/src/peer/Peer.ts CHANGED
@@ -539,7 +539,8 @@ export class Peer {
539
539
  }
540
540
 
541
541
  newestSession(type?: ChannelType) {
542
- // Prefer the most recently used session. Older ones may not work with broken peers (e.g. CHIP test harness)
542
+ // Prefer the session we last heard from the peer on (highest activeTimestamp). A dead session
543
+ // still retransmitting keeps a high `timestamp`, so ordering by that would pick it over a fresh one.
543
544
  let found: NodeSession | undefined;
544
545
 
545
546
  for (const session of this.#sessions) {
@@ -551,7 +552,7 @@ export class Peer {
551
552
  continue;
552
553
  }
553
554
 
554
- if (!found || found.timestamp < session.timestamp) {
555
+ if (!found || found.activeTimestamp < session.activeTimestamp) {
555
556
  found = session;
556
557
  }
557
558
  }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { ClientSubscriptions } from "#action/client/subscription/ClientSubscriptions.js";
8
+ import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
9
+ import { PeerUnresponsiveError } from "#peer/PeerCommunicationError.js";
10
+ import type { NodeSession } from "#session/NodeSession.js";
11
+ import { SessionManager } from "#session/SessionManager.js";
12
+ import { Logger, Minutes, ObserverGroup, Seconds, Time, Timer, Timestamp } from "@matter/general";
13
+
14
+ const logger = Logger.get("RebootResubscribeArmer");
15
+
16
+ /** Grace after the returning device's new session before we force re-subscription. */
17
+ const DEFAULT_REBOOT_RESUBSCRIBE_GRACE = Seconds(30);
18
+
19
+ /**
20
+ * How long we wait for an armed device to re-establish a session before assuming it restarted silently and forcing
21
+ * recovery. A device applying an update has normally rebooted and returned within this window, so it is a backstop
22
+ * rather than the common path; kept short so a silently-restarted device recovers well before the full subscription
23
+ * liveness timeout.
24
+ */
25
+ const EXPECTED_RETURN_TIMEOUT = Minutes(3);
26
+
27
+ interface ArmState {
28
+ newSessionAt?: Timestamp;
29
+ graceTimer?: Timer;
30
+ returnTimer?: Timer;
31
+ }
32
+
33
+ /**
34
+ * Speeds up controller re-subscription after a peer reboot for devices that do NOT persist subscriptions.
35
+ *
36
+ * Callers arm a peer when they know it is about to reboot and return (e.g. OTA reaching its apply phase). When the
37
+ * peer's new session appears we (A) close older sessions and (B) start a grace window: if the existing subscription
38
+ * receives a report within it (a persistent device fed it), we leave the subscription alone; otherwise we force
39
+ * re-subscription.
40
+ */
41
+ export class RebootResubscribeArmer {
42
+ readonly #sessions: SessionManager;
43
+ readonly #subscriptions: ClientSubscriptions;
44
+ readonly #armed = new PeerAddressMap<ArmState>();
45
+ readonly #observers = new ObserverGroup();
46
+
47
+ constructor(sessions: SessionManager, subscriptions: ClientSubscriptions) {
48
+ this.#sessions = sessions;
49
+ this.#subscriptions = subscriptions;
50
+ this.#observers.on(sessions.sessions.added, session => this.#onSessionAdded(session));
51
+ }
52
+
53
+ arm(peerAddress: PeerAddress) {
54
+ peerAddress = PeerAddress(peerAddress);
55
+
56
+ let state = this.#armed.get(peerAddress);
57
+ if (state === undefined) {
58
+ state = {};
59
+ this.#armed.set(peerAddress, state);
60
+ } else {
61
+ // Re-arming starts a fresh cycle; drop any grace timer/target from a previous arm.
62
+ state.graceTimer?.stop();
63
+ state.graceTimer = undefined;
64
+ state.newSessionAt = undefined;
65
+ state.returnTimer?.stop();
66
+ }
67
+
68
+ state.returnTimer = Time.getTimer("Reboot return deadline", EXPECTED_RETURN_TIMEOUT, () =>
69
+ this.#onReturnTimeout(peerAddress),
70
+ );
71
+ state.returnTimer.start();
72
+ }
73
+
74
+ disarm(peerAddress: PeerAddress) {
75
+ peerAddress = PeerAddress(peerAddress);
76
+ const state = this.#armed.get(peerAddress);
77
+ if (state === undefined) {
78
+ return;
79
+ }
80
+ state.graceTimer?.stop();
81
+ state.returnTimer?.stop();
82
+ this.#armed.delete(peerAddress);
83
+ }
84
+
85
+ #onSessionAdded(session: NodeSession) {
86
+ if (session.isInitiator) {
87
+ // Only a device-pushed (incoming) session represents a reboot return; a session we ourselves
88
+ // initiated is our own connect and must not trigger the armer.
89
+ return;
90
+ }
91
+
92
+ const peerAddress = PeerAddress(session.peerAddress);
93
+ const state = this.#armed.get(peerAddress);
94
+ if (state === undefined) {
95
+ return;
96
+ }
97
+
98
+ // The device returned, so the return deadline no longer applies.
99
+ state.returnTimer?.stop();
100
+ state.returnTimer = undefined;
101
+
102
+ // Mechanism A — drop the dead pre-reboot sessions so probe/re-subscribe cannot pick them.
103
+ this.#sessions
104
+ .handlePeerShutdown(peerAddress, session.createdAt)
105
+ .catch(error => logger.warn(peerAddress, "Failed to close older sessions", error));
106
+
107
+ state.newSessionAt = session.createdAt;
108
+ state.graceTimer?.stop();
109
+ state.graceTimer = Time.getTimer("Reboot resubscribe grace", DEFAULT_REBOOT_RESUBSCRIBE_GRACE, () =>
110
+ this.#onGraceExpired(peerAddress),
111
+ );
112
+ state.graceTimer.start();
113
+ }
114
+
115
+ #onGraceExpired(peerAddress: PeerAddress) {
116
+ const state = this.#armed.get(peerAddress);
117
+ if (state === undefined) {
118
+ return;
119
+ }
120
+
121
+ const lastReportStartedAt = this.#subscriptions.lastReportStartedAtFor(peerAddress);
122
+ const fedSinceReturn =
123
+ lastReportStartedAt !== undefined &&
124
+ state.newSessionAt !== undefined &&
125
+ lastReportStartedAt >= state.newSessionAt;
126
+
127
+ if (!fedSinceReturn) {
128
+ this.#subscriptions.closeForPeer(peerAddress);
129
+ }
130
+
131
+ this.disarm(peerAddress);
132
+ }
133
+
134
+ #onReturnTimeout(peerAddress: PeerAddress) {
135
+ const state = this.#armed.get(peerAddress);
136
+ if (state === undefined) {
137
+ return;
138
+ }
139
+
140
+ logger.info(
141
+ peerAddress,
142
+ "did not re-establish a session after the expected reboot; assuming it restarted, reconnecting",
143
+ );
144
+
145
+ this.disarm(peerAddress);
146
+ this.#recoverSilentPeer(peerAddress).catch(error =>
147
+ logger.warn(peerAddress, "Failed to recover peer after apply timeout", error),
148
+ );
149
+ }
150
+
151
+ /**
152
+ * The device was approved to apply and reboot but never re-established a session, so assume it restarted and is
153
+ * silent: drop stale sessions and force re-subscription to recover before the much longer subscription timeout.
154
+ * Re-subscription runs even if session teardown fails — a lingering stale session self-corrects via the
155
+ * re-subscribe probe (which prefers the freshest session), so it cannot be reused.
156
+ */
157
+ async #recoverSilentPeer(peerAddress: PeerAddress) {
158
+ try {
159
+ await this.#sessions.handlePeerLoss(peerAddress, new PeerUnresponsiveError());
160
+ } catch (error) {
161
+ logger.warn(peerAddress, "Failed to close sessions during apply-timeout recovery", error);
162
+ }
163
+ this.#subscriptions.closeForPeer(peerAddress);
164
+ }
165
+
166
+ [Symbol.dispose]() {
167
+ for (const state of this.#armed.values()) {
168
+ state.graceTimer?.stop();
169
+ state.returnTimer?.stop();
170
+ }
171
+ this.#armed.clear();
172
+ this.#observers.close();
173
+ }
174
+ }
package/src/peer/index.ts CHANGED
@@ -17,3 +17,4 @@ export * from "./PeerLossContext.js";
17
17
  export * from "./PeerSet.js";
18
18
  export * from "./PeerTimingParameters.js";
19
19
  export * from "./PhysicalDeviceProperties.js";
20
+ export * from "./RebootResubscribeArmer.js";
@@ -28,7 +28,7 @@ export abstract class MessageReceptionState {
28
28
  */
29
29
  export class MessageReceptionStateEncryptedWithoutRollover extends MessageReceptionState {
30
30
  protected maximumMessageCounter: number | undefined;
31
- private messageCounterBitmap = 0xffffffff; // All bits set to 1
31
+ private messageCounterBitmap = this.initialBitmap;
32
32
 
33
33
  constructor(messageCounter?: number) {
34
34
  super();
@@ -37,10 +37,18 @@ export class MessageReceptionStateEncryptedWithoutRollover extends MessageRecept
37
37
  }
38
38
  }
39
39
 
40
+ /**
41
+ * Bitmap seeded when the window is first anchored to a counter. All-1s for encrypted messages marks every
42
+ * sub-max counter as already-received (replay protection).
43
+ */
44
+ protected get initialBitmap(): number {
45
+ return 0xffffffff;
46
+ }
47
+
40
48
  /** Initialize the message counter state. */
41
49
  private initialize(messageCounter: number) {
42
50
  this.maximumMessageCounter = messageCounter;
43
- this.messageCounterBitmap = 0xffffffff; // All bits set to 1
51
+ this.messageCounterBitmap = this.initialBitmap;
44
52
  }
45
53
 
46
54
  /**
@@ -173,6 +181,15 @@ export class MessageReceptionStateEncryptedWithRollover extends MessageReception
173
181
  * back the window to the current location.
174
182
  */
175
183
  export class MessageReceptionStateUnencryptedWithRollover extends MessageReceptionStateEncryptedWithoutRollover {
184
+ /**
185
+ * Empty window: no sub-max counters have been received yet, so legitimately reordered messages below the first
186
+ * observed counter stay acceptable. Unencrypted duplicate detection is not a security control, so this loses
187
+ * nothing; matches the CHIP reference implementation, which has never seeded a full window.
188
+ */
189
+ protected override get initialBitmap(): number {
190
+ return 0;
191
+ }
192
+
176
193
  protected override calculateDiff(messageCounter: number) {
177
194
  if (this.maximumMessageCounter === undefined) {
178
195
  return 0;
@@ -518,7 +518,7 @@ export class SessionManager {
518
518
  // work with broken peers (e.g. CHIP test harness).
519
519
  let found: NodeSession | undefined;
520
520
  for (const session of this.#sessions) {
521
- if (!session.peerIs(address) || session.isClosing) {
521
+ if (!session.peerIs(address) || session.isClosing || session.isPeerLost) {
522
522
  continue;
523
523
  }
524
524