@matter/protocol 0.16.7 → 0.16.8-alpha.0-20260125-38e62bc3e

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 (84) hide show
  1. package/dist/cjs/action/client/ClientInteraction.d.ts +4 -4
  2. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  3. package/dist/cjs/action/client/ClientInteraction.js +48 -6
  4. package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
  5. package/dist/cjs/action/client/QueuedClientInteraction.d.ts +0 -1
  6. package/dist/cjs/action/client/QueuedClientInteraction.d.ts.map +1 -1
  7. package/dist/cjs/action/client/QueuedClientInteraction.js +0 -1
  8. package/dist/cjs/action/client/QueuedClientInteraction.js.map +1 -1
  9. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
  10. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +5 -2
  11. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  12. package/dist/cjs/action/server/AttributeWriteResponse.d.ts +1 -1
  13. package/dist/cjs/action/server/AttributeWriteResponse.d.ts.map +1 -1
  14. package/dist/cjs/action/server/AttributeWriteResponse.js +0 -6
  15. package/dist/cjs/action/server/AttributeWriteResponse.js.map +1 -1
  16. package/dist/cjs/action/server/DataResponse.d.ts +5 -0
  17. package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
  18. package/dist/cjs/action/server/DataResponse.js +7 -0
  19. package/dist/cjs/action/server/DataResponse.js.map +1 -1
  20. package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
  21. package/dist/cjs/interaction/InteractionMessenger.d.ts +30 -30
  22. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  23. package/dist/cjs/interaction/InteractionMessenger.js +81 -12
  24. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  25. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  26. package/dist/cjs/mdns/MdnsClient.js +157 -100
  27. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  28. package/dist/cjs/mdns/MdnsServer.d.ts +2 -0
  29. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  30. package/dist/cjs/mdns/MdnsServer.js +45 -5
  31. package/dist/cjs/mdns/MdnsServer.js.map +1 -1
  32. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  33. package/dist/cjs/peer/ControllerCommissioningFlow.js +3 -1
  34. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  35. package/dist/cjs/protocol/MessageExchange.js +1 -1
  36. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  37. package/dist/esm/action/client/ClientInteraction.d.ts +4 -4
  38. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  39. package/dist/esm/action/client/ClientInteraction.js +49 -6
  40. package/dist/esm/action/client/ClientInteraction.js.map +1 -1
  41. package/dist/esm/action/client/QueuedClientInteraction.d.ts +0 -1
  42. package/dist/esm/action/client/QueuedClientInteraction.d.ts.map +1 -1
  43. package/dist/esm/action/client/QueuedClientInteraction.js +0 -1
  44. package/dist/esm/action/client/QueuedClientInteraction.js.map +1 -1
  45. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
  46. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +5 -2
  47. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  48. package/dist/esm/action/server/AttributeWriteResponse.d.ts +1 -1
  49. package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
  50. package/dist/esm/action/server/AttributeWriteResponse.js +0 -6
  51. package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
  52. package/dist/esm/action/server/DataResponse.d.ts +5 -0
  53. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  54. package/dist/esm/action/server/DataResponse.js +7 -0
  55. package/dist/esm/action/server/DataResponse.js.map +1 -1
  56. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  57. package/dist/esm/interaction/InteractionMessenger.d.ts +30 -30
  58. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  59. package/dist/esm/interaction/InteractionMessenger.js +82 -12
  60. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  61. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  62. package/dist/esm/mdns/MdnsClient.js +157 -100
  63. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  64. package/dist/esm/mdns/MdnsServer.d.ts +2 -0
  65. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  66. package/dist/esm/mdns/MdnsServer.js +45 -5
  67. package/dist/esm/mdns/MdnsServer.js.map +1 -1
  68. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  69. package/dist/esm/peer/ControllerCommissioningFlow.js +3 -1
  70. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  71. package/dist/esm/protocol/MessageExchange.js +1 -1
  72. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  73. package/package.json +6 -6
  74. package/src/action/client/ClientInteraction.ts +62 -6
  75. package/src/action/client/QueuedClientInteraction.ts +0 -1
  76. package/src/action/client/subscription/ClientSubscriptionHandler.ts +5 -2
  77. package/src/action/server/AttributeWriteResponse.ts +4 -16
  78. package/src/action/server/DataResponse.ts +8 -0
  79. package/src/action/server/ServerInteraction.ts +2 -2
  80. package/src/interaction/InteractionMessenger.ts +113 -15
  81. package/src/mdns/MdnsClient.ts +207 -102
  82. package/src/mdns/MdnsServer.ts +79 -6
  83. package/src/peer/ControllerCommissioningFlow.ts +5 -1
  84. package/src/protocol/MessageExchange.ts +1 -1
@@ -26,6 +26,7 @@ import {
26
26
  TlvDataVersionFilter,
27
27
  TlvInvokeRequest,
28
28
  TlvInvokeResponse,
29
+ TlvInvokeResponseForSend,
29
30
  TlvReadRequest,
30
31
  TlvStatusResponse,
31
32
  TlvSubscribeRequest,
@@ -162,11 +163,7 @@ class InteractionServerMessenger extends InteractionMessenger {
162
163
  }
163
164
  case 6 /* WriteRequest */: {
164
165
  const writeRequest = TlvWriteRequest.decode(message.payload);
165
- const { suppressResponse } = writeRequest;
166
- const writeResponse = await recipient.handleWriteRequest(this.exchange, writeRequest, message);
167
- if (!suppressResponse && !isGroupSession) {
168
- await this.send(7 /* WriteResponse */, TlvWriteResponse.encode(writeResponse));
169
- }
166
+ await recipient.handleWriteRequest(this.exchange, writeRequest, this, message);
170
167
  break;
171
168
  }
172
169
  case 3 /* SubscribeRequest */: {
@@ -574,6 +571,53 @@ class InteractionServerMessenger extends InteractionMessenger {
574
571
  }
575
572
  }
576
573
  }
574
+ /**
575
+ * Send a WriteResponse message.
576
+ */
577
+ async sendWriteResponse(response, options) {
578
+ await this.send(7 /* WriteResponse */, TlvWriteResponse.encode(response), {
579
+ logContext: options?.logContext ? { for: options.logContext } : void 0
580
+ });
581
+ }
582
+ /**
583
+ * Wait for and decode the next WriteRequest message (for chunked writes).
584
+ */
585
+ async readNextWriteRequest() {
586
+ const message = await this.nextMessage(6 /* WriteRequest */, void 0, "WriteRequest-chunk");
587
+ return {
588
+ writeRequest: TlvWriteRequest.decode(message.payload),
589
+ message
590
+ };
591
+ }
592
+ /**
593
+ * Send an intermediate InvokeResponse chunk with moreChunkedMessages=true and wait for Status.Success.
594
+ * Returns true if a client acknowledged, and we should continue, false if a client terminated the chunked series.
595
+ */
596
+ async sendInvokeResponseChunk(response) {
597
+ await this.send(
598
+ 9 /* InvokeResponse */,
599
+ TlvInvokeResponseForSend.encode({
600
+ ...response,
601
+ moreChunkedMessages: true
602
+ }),
603
+ {
604
+ logContext: { for: "InvokeResponse-chunk" }
605
+ }
606
+ );
607
+ try {
608
+ await this.waitForSuccess("InvokeResponse-chunk");
609
+ return true;
610
+ } catch (error) {
611
+ logger.debug("Chunked invoke response terminated by client", error);
612
+ return false;
613
+ }
614
+ }
615
+ /**
616
+ * Send the final InvokeResponse (without moreChunkedMessages flag).
617
+ */
618
+ async sendInvokeResponse(response) {
619
+ await this.send(9 /* InvokeResponse */, TlvInvokeResponseForSend.encode(response));
620
+ }
577
621
  }
578
622
  class IncomingInteractionClientMessenger extends InteractionMessenger {
579
623
  async waitFor(expectedMessageInfo, messageType, timeout) {
@@ -717,6 +761,10 @@ class InteractionClientMessenger extends IncomingInteractionClientMessenger {
717
761
  const request = this.#encodeReadingRequest(TlvSubscribeRequest, subscribeRequest);
718
762
  await this.send(3 /* SubscribeRequest */, request);
719
763
  }
764
+ /**
765
+ * Send an invoke command and handle chunked responses.
766
+ * Returns a combined InvokeResponse with all responses from all chunks, or undefined if suppressResponse
767
+ */
720
768
  async sendInvokeCommand(invokeRequest, expectedProcessingTime) {
721
769
  if (invokeRequest.suppressResponse) {
722
770
  await this.requestWithSuppressedResponse(
@@ -725,16 +773,38 @@ class InteractionClientMessenger extends IncomingInteractionClientMessenger {
725
773
  invokeRequest,
726
774
  expectedProcessingTime
727
775
  );
728
- } else {
729
- return await this.request(
730
- 8 /* InvokeRequest */,
731
- TlvInvokeRequest,
776
+ return void 0;
777
+ }
778
+ await this.send(8 /* InvokeRequest */, TlvInvokeRequest.encode(invokeRequest), {
779
+ expectAckOnly: false,
780
+ expectedProcessingTime
781
+ });
782
+ const allInvokeResponses = [];
783
+ let finalResponse;
784
+ while (true) {
785
+ const responseMessage = await this.nextMessage(
732
786
  9 /* InvokeResponse */,
733
- TlvInvokeResponse,
734
- invokeRequest,
735
- expectedProcessingTime
787
+ { expectedProcessingTime },
788
+ "InvokeResponse"
736
789
  );
790
+ const response = TlvInvokeResponse.decode(responseMessage.payload);
791
+ if (response.invokeResponses) {
792
+ allInvokeResponses.push(...response.invokeResponses);
793
+ }
794
+ if (response.moreChunkedMessages) {
795
+ await this.sendStatus(Status.Success, {
796
+ multipleMessageInteraction: true,
797
+ logContext: { for: "InvokeResponse-chunk" }
798
+ });
799
+ } else {
800
+ finalResponse = {
801
+ ...response,
802
+ invokeResponses: allInvokeResponses
803
+ };
804
+ break;
805
+ }
737
806
  }
807
+ return finalResponse;
738
808
  }
739
809
  async sendWriteCommand(writeRequest) {
740
810
  if (writeRequest.suppressResponse) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/interaction/InteractionMessenger.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["MessageType"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MdnsClient.d.ts","sourceRoot":"","sources":["../../../src/mdns/MdnsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,eAAe,EAEf,QAAQ,EACR,WAAW,EACX,UAAU,EAMV,QAAQ,EAKR,QAAQ,EAER,UAAU,EAMV,gBAAgB,EAOnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC1D,OAAO,EACH,oBAAoB,EACpB,+BAA+B,EAC/B,aAAa,EACb,iBAAiB,EACjB,OAAO,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAkB7C,KAAK,4BAA4B,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAoCvE;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAAyB;IACtC,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IAExB,mCAAmC;IACnC,kBAAkB,EAAE;QAChB,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;CACP;AAED;;;GAGG;AACH,qBAAa,UAAW,YAAW,OAAO;;IAItC,QAAQ,CAAC,IAAI,mBAAmB;gBA0CpB,MAAM,EAAE,UAAU,EAAE,QAAQ,iBAAmB;IAa3D,uDAAuD;IACvD,IAAI,uBAAuB,mEAE1B;IAgVD;;;OAGG;IACG,qBAAqB,CACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,EAClB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IA6BzC,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,UAAO;IAKtF,mCAAmC,CAAC,UAAU,EAAE,+BAA+B,EAAE,cAAc,UAAO;IAQtG,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAoLnE;;;;;;;OAOG;IACG,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAa,EACpB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqBlC;;;OAGG;IACG,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,CAAC,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAoElC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B;mBAzPvD,gBAAgB,EAAE;;;;;;;;;;;;;;;;;oBAjiBzB,MAAM;YACd,MAAM;YACN,MAAM;YACN,MAAM;;IA2xBd;;OAEG;IACG,KAAK;IAutBX,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM;IAiBlE,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAUvF"}
1
+ {"version":3,"file":"MdnsClient.d.ts","sourceRoot":"","sources":["../../../src/mdns/MdnsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,eAAe,EAEf,QAAQ,EACR,WAAW,EACX,UAAU,EAMV,QAAQ,EAKR,QAAQ,EAER,UAAU,EAMV,gBAAgB,EAOnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC1D,OAAO,EACH,oBAAoB,EACpB,+BAA+B,EAC/B,aAAa,EACb,iBAAiB,EACjB,OAAO,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA+B7C,KAAK,4BAA4B,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAoCvE;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAAyB;IACtC,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IAExB,mCAAmC;IACnC,kBAAkB,EAAE;QAChB,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;CACP;AAED;;;GAGG;AACH,qBAAa,UAAW,YAAW,OAAO;;IAItC,QAAQ,CAAC,IAAI,mBAAmB;gBA0CpB,MAAM,EAAE,UAAU,EAAE,QAAQ,iBAAmB;IAa3D,uDAAuD;IACvD,IAAI,uBAAuB,mEAE1B;IAgVD;;;OAGG;IACG,qBAAqB,CACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,EAClB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IA6BzC,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,UAAO;IAKtF,mCAAmC,CAAC,UAAU,EAAE,+BAA+B,EAAE,cAAc,UAAO;IAQtG,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAoLnE;;;;;;;OAOG;IACG,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAa,EACpB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqBlC;;;OAGG;IACG,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,CAAC,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAoElC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B;mBAzPvD,gBAAgB,EAAE;;;;;;;;;;;;;;;;;oBAjiBzB,MAAM;YACd,MAAM;YACN,MAAM;YACN,MAAM;;IA2xBd;;OAEG;IACG,KAAK;IAmzBX,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM;IAiBlE,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAUvF"}
@@ -89,6 +89,8 @@ import {
89
89
  } from "./MdnsConsts.js";
90
90
  const logger = Logger.get("MdnsClient");
91
91
  const MDNS_EXPIRY_GRACE_PERIOD_FACTOR = 1.05;
92
+ const GOODBYE_PROTECTION_WINDOW = Millis(1e3);
93
+ const RECORD_MIN_TTL = Seconds(15);
92
94
  const START_ANNOUNCE_INTERVAL = Seconds(1.5);
93
95
  class MdnsClient {
94
96
  #lifetime;
@@ -747,6 +749,9 @@ class MdnsClient {
747
749
  answersList.forEach(
748
750
  (answers) => answers.forEach((answer) => {
749
751
  const { name, recordType } = answer;
752
+ if (answer.ttl > 0 && answer.ttl < RECORD_MIN_TTL) {
753
+ answer = { ...answer, ttl: RECORD_MIN_TTL };
754
+ }
750
755
  if (name.endsWith(MATTER_SERVICE_QNAME)) {
751
756
  structuredAnswers.operational = structuredAnswers.operational ?? {};
752
757
  structuredAnswers.operational[recordType] = structuredAnswers.operational[recordType] ?? [];
@@ -780,71 +785,81 @@ class MdnsClient {
780
785
  );
781
786
  return structuredAnswers;
782
787
  }
788
+ /**
789
+ * Merge a record into a map with goodbye protection.
790
+ * Returns true if the record was processed (added or deleted), false if skipped due to protection.
791
+ */
792
+ #mergeRecordWithGoodbyeProtection(targetMap, key, record, now) {
793
+ const existingRecord = targetMap.get(key);
794
+ if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
795
+ if (record.ttl === 0) {
796
+ if (existingRecord && now - existingRecord.discoveredAt < GOODBYE_PROTECTION_WINDOW) {
797
+ return;
798
+ }
799
+ targetMap.delete(key);
800
+ } else {
801
+ targetMap.set(key, record);
802
+ }
803
+ }
804
+ }
783
805
  #combineStructuredAnswers(...answersList) {
784
806
  const combinedAnswers = {};
807
+ const now = Time.nowMs;
785
808
  for (const answers of answersList) {
786
809
  if (answers.operational) {
787
810
  combinedAnswers.operational = combinedAnswers.operational ?? {};
788
811
  for (const [recordType, records] of Object.entries(answers.operational)) {
789
812
  combinedAnswers.operational[recordType] = combinedAnswers.operational[recordType] ?? /* @__PURE__ */ new Map();
790
- records.forEach((record) => {
791
- const existingRecord = combinedAnswers.operational[recordType].get(record.name);
792
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
793
- if (record.ttl === 0) {
794
- combinedAnswers.operational[recordType].delete(record.name);
795
- } else {
796
- combinedAnswers.operational[recordType].set(record.name, record);
797
- }
798
- }
799
- });
813
+ for (const record of records) {
814
+ this.#mergeRecordWithGoodbyeProtection(
815
+ combinedAnswers.operational[recordType],
816
+ record.name,
817
+ record,
818
+ now
819
+ );
820
+ }
800
821
  }
801
822
  }
802
823
  if (answers.commissionable) {
803
824
  combinedAnswers.commissionable = combinedAnswers.commissionable ?? {};
804
825
  for (const [recordType, records] of Object.entries(answers.commissionable)) {
805
826
  combinedAnswers.commissionable[recordType] = combinedAnswers.commissionable[recordType] ?? /* @__PURE__ */ new Map();
806
- records.forEach((record) => {
807
- const existingRecord = combinedAnswers.commissionable[recordType].get(record.name);
808
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
809
- if (record.ttl === 0) {
810
- combinedAnswers.commissionable[recordType].delete(record.name);
811
- } else {
812
- combinedAnswers.commissionable[recordType].set(record.name, record);
813
- }
814
- }
815
- });
827
+ for (const record of records) {
828
+ this.#mergeRecordWithGoodbyeProtection(
829
+ combinedAnswers.commissionable[recordType],
830
+ record.name,
831
+ record,
832
+ now
833
+ );
834
+ }
816
835
  }
817
836
  }
818
837
  if (answers.addressesV6) {
819
838
  combinedAnswers.addressesV6 = combinedAnswers.addressesV6 ?? {};
820
839
  for (const [name, records] of Object.entries(answers.addressesV6)) {
821
840
  combinedAnswers.addressesV6[name] = combinedAnswers.addressesV6[name] ?? /* @__PURE__ */ new Map();
822
- records.forEach((record) => {
823
- const existingRecord = combinedAnswers.addressesV6[name].get(record.value);
824
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
825
- if (record.ttl === 0) {
826
- combinedAnswers.addressesV6[name].delete(record.value);
827
- } else {
828
- combinedAnswers.addressesV6[name].set(record.value, record);
829
- }
830
- }
831
- });
841
+ for (const record of records.values()) {
842
+ this.#mergeRecordWithGoodbyeProtection(
843
+ combinedAnswers.addressesV6[name],
844
+ record.value,
845
+ record,
846
+ now
847
+ );
848
+ }
832
849
  }
833
850
  }
834
851
  if (this.#socket.supportsIpv4 && answers.addressesV4) {
835
852
  combinedAnswers.addressesV4 = combinedAnswers.addressesV4 ?? {};
836
853
  for (const [name, records] of Object.entries(answers.addressesV4)) {
837
854
  combinedAnswers.addressesV4[name] = combinedAnswers.addressesV4[name] ?? /* @__PURE__ */ new Map();
838
- records.forEach((record) => {
839
- const existingRecord = combinedAnswers.addressesV4[name].get(record.value);
840
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
841
- if (record.ttl === 0) {
842
- combinedAnswers.addressesV4[name].delete(record.value);
843
- } else {
844
- combinedAnswers.addressesV4[name].set(record.value, record);
845
- }
846
- }
847
- });
855
+ for (const record of records.values()) {
856
+ this.#mergeRecordWithGoodbyeProtection(
857
+ combinedAnswers.addressesV4[name],
858
+ record.value,
859
+ record,
860
+ now
861
+ );
862
+ }
848
863
  }
849
864
  }
850
865
  }
@@ -888,43 +903,50 @@ class MdnsClient {
888
903
  this.#updateIpRecords(answers, message.sourceIntf);
889
904
  }
890
905
  /**
891
- * Update the discovered matter relevant IP records with the new data from the DNS message.
906
+ * Update IP address records in a target map with goodbye protection.
907
+ * Returns true if any records were updated.
892
908
  */
893
- #updateIpRecords(answers, netInterface) {
894
- const interfaceRecords = this.#discoveredIpRecords.get(netInterface);
895
- if (interfaceRecords === void 0) {
896
- return;
909
+ #updateIpAddressRecords(sourceAddresses, targetAddresses, now) {
910
+ if (!sourceAddresses || !targetAddresses) {
911
+ return false;
897
912
  }
898
913
  let updated = false;
899
- if (answers.addressesV6) {
900
- for (const [target, ipAddresses] of Object.entries(answers.addressesV6)) {
901
- if (interfaceRecords.addressesV6?.[target] !== void 0) {
902
- for (const [ip, record] of Object.entries(ipAddresses)) {
903
- if (record.ttl === 0) {
904
- interfaceRecords.addressesV6[target].delete(ip);
905
- } else {
906
- interfaceRecords.addressesV6[target].set(ip, record);
907
- }
908
- updated = true;
909
- }
910
- }
914
+ for (const [target, ipAddresses] of Object.entries(sourceAddresses)) {
915
+ const targetMap = targetAddresses[target];
916
+ if (targetMap === void 0) {
917
+ continue;
911
918
  }
912
- }
913
- if (this.#socket.supportsIpv4 && answers.addressesV4) {
914
- for (const [target, ipAddresses] of Object.entries(answers.addressesV4)) {
915
- if (interfaceRecords.addressesV4?.[target] !== void 0) {
916
- for (const [ip, record] of Object.entries(ipAddresses)) {
917
- if (record.ttl === 0) {
918
- interfaceRecords.addressesV4[target].delete(ip);
919
- } else {
920
- interfaceRecords.addressesV4[target].set(ip, record);
919
+ for (const [ip, record] of Object.entries(ipAddresses)) {
920
+ if (record.ttl === 0) {
921
+ const existingRecord = targetMap.get(ip);
922
+ if (existingRecord) {
923
+ const recordAge = now - existingRecord.discoveredAt;
924
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
925
+ continue;
921
926
  }
927
+ targetMap.delete(ip);
922
928
  updated = true;
923
929
  }
930
+ } else {
931
+ targetMap.set(ip, record);
932
+ updated = true;
924
933
  }
925
934
  }
926
935
  }
927
- if (updated) {
936
+ return updated;
937
+ }
938
+ /**
939
+ * Update the discovered matter relevant IP records with the new data from the DNS message.
940
+ */
941
+ #updateIpRecords(answers, netInterface) {
942
+ const interfaceRecords = this.#discoveredIpRecords.get(netInterface);
943
+ if (interfaceRecords === void 0) {
944
+ return;
945
+ }
946
+ const now = Time.nowMs;
947
+ const updatedV6 = this.#updateIpAddressRecords(answers.addressesV6, interfaceRecords.addressesV6, now);
948
+ const updatedV4 = this.#socket.supportsIpv4 && this.#updateIpAddressRecords(answers.addressesV4, interfaceRecords.addressesV4, now);
949
+ if (updatedV6 || updatedV4) {
928
950
  this.#discoveredIpRecords.set(netInterface, interfaceRecords);
929
951
  }
930
952
  }
@@ -996,18 +1018,33 @@ class MdnsClient {
996
1018
  const nodeId = nameParts[2];
997
1019
  return this.#operationalScanTargets.has(operationalId) || this.#operationalScanTargets.has(`${operationalId}-${nodeId}`);
998
1020
  }
1021
+ /**
1022
+ * Handle goodbye (TTL=0) for an operational device record with protection against out-of-order packets.
1023
+ * Returns true if the goodbye was processed (record deleted or protected), false if no action needed.
1024
+ */
1025
+ #handleOperationalDeviceGoodbye(matterName, netInterface, now) {
1026
+ const existingRecord = this.#operationalDeviceRecords.get(matterName);
1027
+ if (!existingRecord) {
1028
+ return false;
1029
+ }
1030
+ const recordAge = now - existingRecord.discoveredAt;
1031
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
1032
+ return true;
1033
+ }
1034
+ logger.debug(
1035
+ `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1036
+ );
1037
+ this.#operationalDeviceRecords.delete(matterName);
1038
+ return true;
1039
+ }
999
1040
  #handleOperationalTxtRecord(record, netInterface) {
1000
1041
  const { name: matterName, value, ttl } = record;
1001
- const discoveredAt = Time.nowMs;
1042
+ const now = Time.nowMs;
1002
1043
  if (ttl === 0) {
1003
- if (this.#operationalDeviceRecords.has(matterName)) {
1004
- logger.debug(
1005
- `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1006
- );
1007
- this.#operationalDeviceRecords.delete(matterName);
1008
- }
1044
+ this.#handleOperationalDeviceGoodbye(matterName, netInterface, now);
1009
1045
  return;
1010
1046
  }
1047
+ const discoveredAt = now;
1011
1048
  if (!Array.isArray(value)) return;
1012
1049
  if (!this.#operationalDeviceRecords.has(matterName) && !this.#matchesOperationalCriteria(matterName)) {
1013
1050
  return;
@@ -1040,13 +1077,9 @@ class MdnsClient {
1040
1077
  ttl,
1041
1078
  value: { target, port }
1042
1079
  } = record;
1080
+ const now = Time.nowMs;
1043
1081
  if (ttl === 0) {
1044
- if (this.#operationalDeviceRecords.has(matterName)) {
1045
- logger.debug(
1046
- `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1047
- );
1048
- this.#operationalDeviceRecords.delete(matterName);
1049
- }
1082
+ this.#handleOperationalDeviceGoodbye(matterName, netInterface, now);
1050
1083
  return;
1051
1084
  }
1052
1085
  const ips = this.#handleIpRecords([formerAnswers, answers], target, netInterface);
@@ -1054,7 +1087,7 @@ class MdnsClient {
1054
1087
  if (!deviceExisted && !this.#matchesOperationalCriteria(matterName)) {
1055
1088
  return;
1056
1089
  }
1057
- const discoveredAt = Time.nowMs;
1090
+ const discoveredAt = now;
1058
1091
  const device = this.#operationalDeviceRecords.get(matterName) ?? {
1059
1092
  deviceIdentifier: matterName,
1060
1093
  addresses: /* @__PURE__ */ new Map(),
@@ -1066,10 +1099,17 @@ class MdnsClient {
1066
1099
  if (ips.length > 0) {
1067
1100
  for (const { value: ip, ttl: ttl2 } of ips) {
1068
1101
  if (ttl2 === 0) {
1069
- logger.debug(
1070
- `Removing IP ${ip} for operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1071
- );
1072
- addresses.delete(ip);
1102
+ const existingAddress = addresses.get(ip);
1103
+ if (existingAddress) {
1104
+ const addressAge = now - existingAddress.discoveredAt;
1105
+ if (addressAge < GOODBYE_PROTECTION_WINDOW) {
1106
+ continue;
1107
+ }
1108
+ logger.debug(
1109
+ `Removing IP ${ip} for operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1110
+ );
1111
+ addresses.delete(ip);
1112
+ }
1073
1113
  continue;
1074
1114
  }
1075
1115
  const address = addresses.get(ip) ?? { ip, port, type: "udp" };
@@ -1095,6 +1135,23 @@ class MdnsClient {
1095
1135
  }
1096
1136
  return;
1097
1137
  }
1138
+ /**
1139
+ * Handle goodbye (TTL=0) for a commissionable device record with protection against out-of-order packets.
1140
+ * Returns true if the goodbye should be skipped (record is protected), false if processed or no record exists.
1141
+ */
1142
+ #handleCommissionableDeviceGoodbye(name, netInterface, now) {
1143
+ const existingRecord = this.#commissionableDeviceRecords.get(name);
1144
+ if (!existingRecord) {
1145
+ return false;
1146
+ }
1147
+ const recordAge = now - existingRecord.discoveredAt;
1148
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
1149
+ return true;
1150
+ }
1151
+ logger.debug(`Removing commissionable device ${name} from cache (interface ${netInterface}) because of ttl=0`);
1152
+ this.#commissionableDeviceRecords.delete(name);
1153
+ return false;
1154
+ }
1098
1155
  #handleCommissionableRecords(answers, formerAnswers, netInterface) {
1099
1156
  if (!this.#scanForCommissionableDevices && !this.#hasCommissionableWaiters) {
1100
1157
  return;
@@ -1106,16 +1163,12 @@ class MdnsClient {
1106
1163
  return;
1107
1164
  }
1108
1165
  const queryMissingDataForInstances = /* @__PURE__ */ new Set();
1166
+ const now = Time.nowMs;
1109
1167
  const txtRecords = commissionableRecords[DnsRecordType.TXT] ?? [];
1110
1168
  for (const record of txtRecords) {
1111
1169
  const { name, ttl } = record;
1112
1170
  if (ttl === 0) {
1113
- if (this.#commissionableDeviceRecords.has(name)) {
1114
- logger.debug(
1115
- `Removing commissionable device ${name} from cache (interface ${netInterface}) because of ttl=0`
1116
- );
1117
- this.#commissionableDeviceRecords.delete(name);
1118
- }
1171
+ this.#handleCommissionableDeviceGoodbye(name, netInterface, now);
1119
1172
  continue;
1120
1173
  }
1121
1174
  const txtRecord = this.#parseCommissionableTxtRecord(record);
@@ -1152,10 +1205,7 @@ class MdnsClient {
1152
1205
  ttl
1153
1206
  } = record;
1154
1207
  if (ttl === 0) {
1155
- logger.debug(
1156
- `Removing commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1157
- );
1158
- this.#commissionableDeviceRecords.delete(record.name);
1208
+ this.#handleCommissionableDeviceGoodbye(record.name, netInterface, now);
1159
1209
  continue;
1160
1210
  }
1161
1211
  const recordAddressesKnown = storedRecord.addresses.size > 0;
@@ -1163,14 +1213,21 @@ class MdnsClient {
1163
1213
  if (ips.length > 0) {
1164
1214
  for (const { value: ip, ttl: ttl2 } of ips) {
1165
1215
  if (ttl2 === 0) {
1166
- logger.debug(
1167
- `Removing IP ${ip} for commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1168
- );
1169
- storedRecord.addresses.delete(ip);
1216
+ const existingAddress = storedRecord.addresses.get(ip);
1217
+ if (existingAddress) {
1218
+ const addressAge = now - existingAddress.discoveredAt;
1219
+ if (addressAge < GOODBYE_PROTECTION_WINDOW) {
1220
+ continue;
1221
+ }
1222
+ logger.debug(
1223
+ `Removing IP ${ip} for commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1224
+ );
1225
+ storedRecord.addresses.delete(ip);
1226
+ }
1170
1227
  continue;
1171
1228
  }
1172
1229
  const matterServer = storedRecord.addresses.get(ip) ?? { ip, port, type: "udp" };
1173
- matterServer.discoveredAt = Time.nowMs;
1230
+ matterServer.discoveredAt = now;
1174
1231
  matterServer.ttl = ttl2;
1175
1232
  storedRecord.addresses.set(ip, matterServer);
1176
1233
  }