@matter/protocol 0.16.8-alpha.0-20260123-dff2cae52 → 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 (79) 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/esm/action/client/ClientInteraction.d.ts +4 -4
  36. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  37. package/dist/esm/action/client/ClientInteraction.js +49 -6
  38. package/dist/esm/action/client/ClientInteraction.js.map +1 -1
  39. package/dist/esm/action/client/QueuedClientInteraction.d.ts +0 -1
  40. package/dist/esm/action/client/QueuedClientInteraction.d.ts.map +1 -1
  41. package/dist/esm/action/client/QueuedClientInteraction.js +0 -1
  42. package/dist/esm/action/client/QueuedClientInteraction.js.map +1 -1
  43. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
  44. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +5 -2
  45. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  46. package/dist/esm/action/server/AttributeWriteResponse.d.ts +1 -1
  47. package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
  48. package/dist/esm/action/server/AttributeWriteResponse.js +0 -6
  49. package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
  50. package/dist/esm/action/server/DataResponse.d.ts +5 -0
  51. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  52. package/dist/esm/action/server/DataResponse.js +7 -0
  53. package/dist/esm/action/server/DataResponse.js.map +1 -1
  54. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  55. package/dist/esm/interaction/InteractionMessenger.d.ts +30 -30
  56. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  57. package/dist/esm/interaction/InteractionMessenger.js +82 -12
  58. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  59. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  60. package/dist/esm/mdns/MdnsClient.js +157 -100
  61. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  62. package/dist/esm/mdns/MdnsServer.d.ts +2 -0
  63. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  64. package/dist/esm/mdns/MdnsServer.js +45 -5
  65. package/dist/esm/mdns/MdnsServer.js.map +1 -1
  66. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  67. package/dist/esm/peer/ControllerCommissioningFlow.js +3 -1
  68. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  69. package/package.json +6 -6
  70. package/src/action/client/ClientInteraction.ts +62 -6
  71. package/src/action/client/QueuedClientInteraction.ts +0 -1
  72. package/src/action/client/subscription/ClientSubscriptionHandler.ts +5 -2
  73. package/src/action/server/AttributeWriteResponse.ts +4 -16
  74. package/src/action/server/DataResponse.ts +8 -0
  75. package/src/action/server/ServerInteraction.ts +2 -2
  76. package/src/interaction/InteractionMessenger.ts +113 -15
  77. package/src/mdns/MdnsClient.ts +207 -102
  78. package/src/mdns/MdnsServer.ts +79 -6
  79. package/src/peer/ControllerCommissioningFlow.ts +5 -1
@@ -157,11 +157,7 @@ class InteractionServerMessenger extends InteractionMessenger {
157
157
  }
158
158
  case 6 /* WriteRequest */: {
159
159
  const writeRequest = import_types.TlvWriteRequest.decode(message.payload);
160
- const { suppressResponse } = writeRequest;
161
- const writeResponse = await recipient.handleWriteRequest(this.exchange, writeRequest, message);
162
- if (!suppressResponse && !isGroupSession) {
163
- await this.send(7 /* WriteResponse */, import_types.TlvWriteResponse.encode(writeResponse));
164
- }
160
+ await recipient.handleWriteRequest(this.exchange, writeRequest, this, message);
165
161
  break;
166
162
  }
167
163
  case 3 /* SubscribeRequest */: {
@@ -569,6 +565,53 @@ class InteractionServerMessenger extends InteractionMessenger {
569
565
  }
570
566
  }
571
567
  }
568
+ /**
569
+ * Send a WriteResponse message.
570
+ */
571
+ async sendWriteResponse(response, options) {
572
+ await this.send(7 /* WriteResponse */, import_types.TlvWriteResponse.encode(response), {
573
+ logContext: options?.logContext ? { for: options.logContext } : void 0
574
+ });
575
+ }
576
+ /**
577
+ * Wait for and decode the next WriteRequest message (for chunked writes).
578
+ */
579
+ async readNextWriteRequest() {
580
+ const message = await this.nextMessage(6 /* WriteRequest */, void 0, "WriteRequest-chunk");
581
+ return {
582
+ writeRequest: import_types.TlvWriteRequest.decode(message.payload),
583
+ message
584
+ };
585
+ }
586
+ /**
587
+ * Send an intermediate InvokeResponse chunk with moreChunkedMessages=true and wait for Status.Success.
588
+ * Returns true if a client acknowledged, and we should continue, false if a client terminated the chunked series.
589
+ */
590
+ async sendInvokeResponseChunk(response) {
591
+ await this.send(
592
+ 9 /* InvokeResponse */,
593
+ import_types.TlvInvokeResponseForSend.encode({
594
+ ...response,
595
+ moreChunkedMessages: true
596
+ }),
597
+ {
598
+ logContext: { for: "InvokeResponse-chunk" }
599
+ }
600
+ );
601
+ try {
602
+ await this.waitForSuccess("InvokeResponse-chunk");
603
+ return true;
604
+ } catch (error) {
605
+ logger.debug("Chunked invoke response terminated by client", error);
606
+ return false;
607
+ }
608
+ }
609
+ /**
610
+ * Send the final InvokeResponse (without moreChunkedMessages flag).
611
+ */
612
+ async sendInvokeResponse(response) {
613
+ await this.send(9 /* InvokeResponse */, import_types.TlvInvokeResponseForSend.encode(response));
614
+ }
572
615
  }
573
616
  class IncomingInteractionClientMessenger extends InteractionMessenger {
574
617
  async waitFor(expectedMessageInfo, messageType, timeout) {
@@ -712,6 +755,10 @@ class InteractionClientMessenger extends IncomingInteractionClientMessenger {
712
755
  const request = this.#encodeReadingRequest(import_types.TlvSubscribeRequest, subscribeRequest);
713
756
  await this.send(3 /* SubscribeRequest */, request);
714
757
  }
758
+ /**
759
+ * Send an invoke command and handle chunked responses.
760
+ * Returns a combined InvokeResponse with all responses from all chunks, or undefined if suppressResponse
761
+ */
715
762
  async sendInvokeCommand(invokeRequest, expectedProcessingTime) {
716
763
  if (invokeRequest.suppressResponse) {
717
764
  await this.requestWithSuppressedResponse(
@@ -720,16 +767,38 @@ class InteractionClientMessenger extends IncomingInteractionClientMessenger {
720
767
  invokeRequest,
721
768
  expectedProcessingTime
722
769
  );
723
- } else {
724
- return await this.request(
725
- 8 /* InvokeRequest */,
726
- import_types.TlvInvokeRequest,
770
+ return void 0;
771
+ }
772
+ await this.send(8 /* InvokeRequest */, import_types.TlvInvokeRequest.encode(invokeRequest), {
773
+ expectAckOnly: false,
774
+ expectedProcessingTime
775
+ });
776
+ const allInvokeResponses = [];
777
+ let finalResponse;
778
+ while (true) {
779
+ const responseMessage = await this.nextMessage(
727
780
  9 /* InvokeResponse */,
728
- import_types.TlvInvokeResponse,
729
- invokeRequest,
730
- expectedProcessingTime
781
+ { expectedProcessingTime },
782
+ "InvokeResponse"
731
783
  );
784
+ const response = import_types.TlvInvokeResponse.decode(responseMessage.payload);
785
+ if (response.invokeResponses) {
786
+ allInvokeResponses.push(...response.invokeResponses);
787
+ }
788
+ if (response.moreChunkedMessages) {
789
+ await this.sendStatus(import_types.Status.Success, {
790
+ multipleMessageInteraction: true,
791
+ logContext: { for: "InvokeResponse-chunk" }
792
+ });
793
+ } else {
794
+ finalResponse = {
795
+ ...response,
796
+ invokeResponses: allInvokeResponses
797
+ };
798
+ break;
799
+ }
732
800
  }
801
+ return finalResponse;
733
802
  }
734
803
  async sendWriteCommand(writeRequest) {
735
804
  if (writeRequest.suppressResponse) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/interaction/InteractionMessenger.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,kBAAqB;AACrB,qBAWO;AACP,mBAA8B;AAC9B,oBAA4F;AAC5F,mBAoBO;AACP,0BAAqC;AAGrC,kCAUO;AACP,0BAA6B;AAzD7B;AAAA;AAAA;AAAA;AAAA;AA2DO,IAAK,cAAL,kBAAKA,iBAAL;AACH,EAAAA,0BAAA,oBAAiB,KAAjB;AACA,EAAAA,0BAAA,iBAAc,KAAd;AACA,EAAAA,0BAAA,sBAAmB,KAAnB;AACA,EAAAA,0BAAA,uBAAoB,KAApB;AACA,EAAAA,0BAAA,gBAAa,KAAb;AACA,EAAAA,0BAAA,kBAAe,KAAf;AACA,EAAAA,0BAAA,mBAAgB,KAAhB;AACA,EAAAA,0BAAA,mBAAgB,KAAhB;AACA,EAAAA,0BAAA,oBAAiB,KAAjB;AACA,EAAAA,0BAAA,kBAAe,MAAf;AAVQ,SAAAA;AAAA,GAAA;AAuBZ,MAAM,SAAS,sBAAO,IAAI,sBAAsB;AAMhD,MAAM,4CAA4C;AAOlD,MAAM,iDAAiD;AAEvD,MAAM,qBAAqB;AAAA,EACvB;AAAA,EAEA,YAAY,UAA2B;AACnC,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,SAAS,OAAwB;AAC3C,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,KAAK,aAAqB,SAAgB,SAA+B;AACrE,WAAO,KAAK,SAAS,KAAK,aAAa,SAAS,OAAO;AAAA,EAC3D;AAAA,EAEA,WAAW,QAAgB,SAA+B;AACtD,WAAO,KAAK;AAAA,MACR;AAAA,MACA,+BAAkB,OAAO,EAAE,QAAQ,0BAA0B,2BAAc,2BAA2B,CAAC;AAAA,MACvG;AAAA,QACI,GAAG;AAAA,QACH,YAAY;AAAA,UACR,KAAK,SAAS,YAAY,MAAM,YAAY,SAAS,YAAY,GAAG,KAAK;AAAA,UACzE,QAAQ,GAAG,oBAAO,MAAM,KAAK,SAAS,IAAI,0BAAW,IAAI,MAAM,CAAC;AAAA,UAChE,GAAG,SAAS;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,eACF,qBACA,SACF;AAEE,UAAM,KAAK,YAAY,wBAA4B,SAAS,WAAW,mBAAmB,EAAE;AAAA,EAChG;AAAA,EAEA,MAAM,YACF,qBACA,SAIA,qBACF;AACE,WAAO,KAAK,aAAa,qBAAqB,SAAS,mBAAmB;AAAA,EAC9E;AAAA,EAEA,MAAM,eACF,qBACA,SAIF;AACE,WAAO,KAAK,aAAa,QAAW,SAAS,mBAAmB;AAAA,EACpE;AAAA,EAEA,MAAM,aACF,qBACA,SAIA,qBACF;AACE,UAAM,EAAE,wBAAwB,QAAQ,IAAI,WAAW,CAAC;AACxD,UAAM,UAAU,MAAM,KAAK,SAAS,YAAY,EAAE,wBAAwB,QAAQ,CAAC;AACnF,UAAM,cAAc,QAAQ,cAAc;AAC1C,QAAI,wBAAwB,UAAa,wBAAwB,QAAW;AACxE,4BAAsB,YAAY,mBAAmB;AAAA,IACzD;AACA,SAAK,0BAA0B,SAAS,mBAAmB;AAC3D,QAAI,wBAAwB,UAAa,gBAAgB,qBAAqB;AAC1E,YAAM,IAAI;AAAA,QACN,mCAAmC,mBAAmB,UAAU,WAAW,eAAe,mBAAmB;AAAA,MACjH;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,KAAK,SAAS,MAAM;AAAA,EAC9B;AAAA,EAEU,0BAA0B,SAAkB,SAAkB;AACpE,UAAM;AAAA,MACF,eAAe,EAAE,YAAY;AAAA,MAC7B;AAAA,IACJ,IAAI;AAEJ,QAAI,gBAAgB,uBAA4B;AAChD,UAAM,EAAE,OAAO,IAAI,+BAAkB,OAAO,OAAO;AACnD,QAAI,WAAW,oBAAO;AAClB,YAAM,IAAI;AAAA,QACN,0BAA0B,MAAM,GAAG,UAAU,KAAK,OAAO,MAAM,EAAE;AAAA,QACjE;AAAA,MACJ;AAAA,EACR;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,SAAS;AAAA,EACzB;AACJ;AAwBO,MAAM,mCAAmC,qBAAqB;AAAA,EACjE,MAAM,cAAc,WAAiC;AACjD,QAAI,mBAAmB;AACvB,QAAI,iBAAiB;AACrB,QAAI;AACA,aAAO,kBAAkB;AACrB,cAAM,UAAU,MAAM,KAAK,SAAS,YAAY;AAChD,yBAAiB,QAAQ,aAAa,gBAAgB,gCAAY;AAClE,2BAAmB;AACnB,gBAAQ,QAAQ,cAAc,aAAa;AAAA,UACvC,KAAK,qBAAyB;AAC1B,gBAAI,gBAAgB;AAChB,oBAAM,IAAI;AAAA,gBACN;AAAA,gBACA,oBAAO;AAAA,cACX;AAAA,YACJ;AACA,kBAAM,cAAc,4BAAe,OAAO,QAAQ,OAAO;AAEzD,kBAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,UAAU;AAAA,cAC5C,KAAK;AAAA,cACL;AAAA,cACA;AAAA,YACJ;AAGA,kBAAM,KAAK,eAAe;AAAA,cACtB,gBAAgB;AAAA,cAChB,uBAAuB,YAAY;AAAA,cACnC;AAAA,YACJ,CAAC;AACD;AAAA,UACJ;AAAA,UACA,KAAK,sBAA0B;AAC3B,kBAAM,eAAe,6BAAgB,OAAO,QAAQ,OAAO;AAC3D,kBAAM,EAAE,iBAAiB,IAAI;AAC7B,kBAAM,gBAAgB,MAAM,UAAU,mBAAmB,KAAK,UAAU,cAAc,OAAO;AAC7F,gBAAI,CAAC,oBAAoB,CAAC,gBAAgB;AACtC,oBAAM,KAAK,KAAK,uBAA2B,8BAAiB,OAAO,aAAa,CAAC;AAAA,YACrF;AACA;AAAA,UACJ;AAAA,UACA,KAAK,0BAA8B;AAC/B,gBAAI,gBAAgB;AAChB,oBAAM,IAAI;AAAA,gBACN;AAAA,gBACA,oBAAO;AAAA,cACX;AAAA,YACJ;AACA,kBAAM,mBAAmB,iCAAoB,OAAO,QAAQ,OAAO;AACnE,kBAAM,UAAU,uBAAuB,KAAK,UAAU,kBAAkB,MAAM,OAAO;AAErF;AAAA,UACJ;AAAA,UACA,KAAK,uBAA2B;AAC5B,kBAAM,gBAAgB,8BAAiB,OAAO,QAAQ,OAAO;AAC7D,kBAAM,UAAU,oBAAoB,KAAK,UAAU,eAAe,MAAM,OAAO;AAE/E;AAAA,UACJ;AAAA,UACA,KAAK,uBAA0B;AAC3B,gBAAI,gBAAgB;AAChB,oBAAM,IAAI;AAAA,gBACN;AAAA,gBACA,oBAAO;AAAA,cACX;AAAA,YACJ;AACA,kBAAM,eAAe,6BAAgB,OAAO,QAAQ,OAAO;AAC3D,sBAAU,mBAAmB,KAAK,UAAU,cAAc,OAAO;AACjE,kBAAM,KAAK,WAAW,oBAAO,SAAS;AAAA,cAClC,YAAY,EAAE,KAAK,eAAe;AAAA,YACtC,CAAC;AACD,+BAAmB;AACnB;AAAA,UACJ;AAAA,UACA;AACI,kBAAM,IAAI;AAAA,cACN,4BAA4B,YAAY,QAAQ,cAAc,WAAW,CAAC,KAAK,QAAQ,cAAc,WAAW;AAAA,cAChH,oBAAO;AAAA,YACX;AAAA,QACR;AACA,YAAI,gBAAgB;AAChB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,SAAS,OAAO;AACZ,UAAI,iBAAiB,uCAAwB;AACzC,eAAO,KAAK,KAAK,SAAS,KAAK,KAAK;AACpC;AAAA,MACJ;AAEA,UAAI,kBAAkB,oBAAO;AAC7B,UAAI,iBAAiB,kCAAqB;AACtC,eAAO;AAAA,UACH,KAAK,SAAS;AAAA,UACd;AAAA,UACA,iBAAK;AAAA,UACL,0BAAW,OAAO,GAAG,oBAAO,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE;AAAA,UACvD;AAAA,UACA,0BAAW,aAAa,KAAK;AAAA,QACjC;AACA,0BAAkB,MAAM;AAAA,MAC5B,OAAO;AACH,eAAO,KAAK,KAAK,SAAS,KAAK,KAAK;AAAA,MACxC;AAEA,UAAI,CAAC,gBAAgB;AACjB,cAAM,KAAK,WAAW,eAAe;AAAA,MACzC;AAAA,IACJ,UAAE;AACE,YAAM,KAAK,SAAS,MAAM;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,SAMlB;AACC,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,sBAAsB;AAAA,IAC1B,IAAI;AACJ,UAAM,EAAE,gBAAgB,kBAAkB,yBAAyB,IAAI;AAEvE,UAAM,aAA0D;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAClB;AAEA,QAAI,YAAY,QAAW;AAGvB,iBAAW,sBAAsB;AAGjC,YAAM,uBAAuB,kCAAqB,OAAO,UAAU;AAGnE,UAAI,kBAAkB;AAGtB,UAAI,oBAAoB;AAGxB,YAAM,qBAAqB,YAAY;AACnC,cAAM,KAAK,sBAAsB,YAAY,UAAU;AAEvD,eAAO,WAAW;AAClB,eAAO,WAAW;AAClB,sBAAc,qBAAqB;AACnC,4BAAoB;AAAA,MACxB;AAGA,UAAI,cAAc,qBAAqB;AAGvC,YAAM,yBAAyB,IAAI,MAUhC;AAGH,YAAM,qBAAqB,IAAI,MAS5B;AAEH,aAAO,MAAM;AAET,YACI,CAAC,oBACC,uBAAuB,WAAW,KAAK,mBAAmB,WAAW,KAClE,uBAAuB,UAAU,6CAC9B,CAAC,qBACD,CAAC,uBAAuB,CAAC,EAAE,eACrC;AACE,gBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,KAAK;AAC3C,cAAI,MAAM;AACN,8BAAkB;AAClB,gBAAI,uBAAuB,WAAW,KAAK,mBAAmB,WAAW,GAAG;AAExE,qBAAO,WAAW;AAClB;AAAA,YACJ,OAAO;AAIH,yBAAW,mBAAmB,wBAAwB;AAClD,gCAAgB,eAAe;AAAA,cACnC;AACA;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,UAAU,QAAW;AAErB;AAAA,UACJ;AAEA,cAAI,mBAAmB,SAAS,qBAAqB,OAAO;AAExD,kBAAM,6CACF,CAAC,yBAAyB,MAAM;AACpC,kBAAM,cAAU,oDAAuB,OAAO;AAAA,cAC1C;AAAA,YACJ,CAAC;AACD,kBAAM,cAAc,oBAAO,qBAAqB,OAAO;AACvD,gBAAI,uBAAuB,WAAW,GAAG;AACrC,qCAAuB,KAAK;AAAA,gBACxB,iBAAiB;AAAA,gBACjB;AAAA,gBACA;AAAA,cACJ,CAAC;AAAA,YACL,OAAO;AAGH,oBAAM,2BAA2B,uBAAuB,CAAC,EAAE,gBAAgB;AAC3E,kBACI,6BAA6B,UAC7B,MAAM,kBAAkB,UACxB,yBAAyB,KAAK,WAAW,MAAM,cAAc,KAAK,UAClE,yBAAyB,KAAK,eAAe,MAAM,cAAc,KAAK,cACtE,yBAAyB,KAAK,cAAc,MAAM,cAAc,KAAK,WACvE;AAEE,uCAAuB,QAAQ;AAAA,kBAC3B,iBAAiB;AAAA,kBACjB;AAAA,kBACA;AAAA,gBACJ,CAAC;AAAA,cACL,OAAO;AAGH,2BAAW,mBAAmB,wBAAwB;AAClD,kCAAgB,eAAe;AAAA,gBACnC;AACA,uCAAuB,KAAK;AAAA,kBACxB,iBAAiB;AAAA,kBACjB;AAAA,kBACA;AAAA,gBACJ,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ,WAAW,eAAe,SAAS,iBAAiB,OAAO;AAEvD,kBAAM,6CACF,CAAC,yBAAyB,MAAM;AAEpC,kBAAM,cAAU,gDAAmB,OAAO,EAAE,2CAA2C,CAAC;AACxF,kBAAM,cAAc,oBAAO,qBAAqB,OAAO;AACvD,+BAAmB,KAAK;AAAA,cACpB,aAAa;AAAA,cACb;AAAA,cACA;AAAA,YACJ,CAAC;AAAA,UACL,OAAO;AACH,kBAAM,IAAI,6BAAc,wBAAwB,KAAK,EAAE;AAAA,UAC3D;AAAA,QACJ;AAGA,YAAI,uBAAuB,SAAS,GAAG;AACnC,gBAAM,kBAAkB,uBAAuB,MAAM;AACrD,cAAI,oBAAoB,QAAW;AAC/B;AAAA,UACJ;AAEA,gBAAM,EAAE,iBAAiB,SAAS,aAAa,aAAa,IAAI;AAGhE,cAAI,iBAAiB,KAAK,SAAS,iBAAiB,cAAc;AAGlE,cAAI,oBAAoB;AACxB,cAAI,cAAc,gBAAgB;AAE9B,iBAAK,mBAAmB,qBAAiB,0DAA6B,eAAe,GAAG;AAGpF,oBAAM,aAAS,mDAAsB,eAAe;AAIpD,oBAAM,eAAe,OAAO,MAAM;AAClC,oBAAM,iBAAiB,OAAO,MAAM;AACpC,kBAAI,iBAAiB,UAAa,mBAAmB,QAAW;AAC5D,sBAAM,IAAI;AAAA,kBACN;AAAA,gBACJ;AAAA,cACJ;AACA,2BAAa,cAAe,QAAQ,KAAK,eAAe,cAAe,OAAO;AAG9E,oBAAM,6CACF,CAAC,yBAAyB,gBAAgB;AAC9C,oBAAM,0BAAsB,oDAAuB,cAAc;AAAA,gBAC7D;AAAA,cACJ,CAAC;AACD,oBAAM,0BAA0B,oBAAO,qBAAqB,mBAAmB;AAC/E,kBAAI,iBAAiB,yBAAyB;AAE1C,kCAAkB;AAClB,+BAAe;AACf,uBAAO,OAAO,SAAS,GAAG;AACtB,wBAAM,YAAY,OAAO,MAAM;AAC/B,sBAAI,cAAc,QAAW;AACzB,0BAAM,IAAI;AAAA,sBACN;AAAA,oBACJ;AAAA,kBACJ;AACA,wBAAM,uBAAmB,wDAA2B,WAAW;AAAA,oBAC3D;AAAA,kBACJ,CAAC;AACD,wBAAM,uBAAuB,oBAAO,qBAAqB,gBAAgB;AACzE,sBAAI,uBAAuB,gBAAgB;AAEvC,2BAAO,QAAQ,SAAS;AACxB,6BAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,4BAAM,QAAQ,OAAO,CAAC;AACtB,4BAAM,mBAAe,oDAAuB,OAAO;AAAA,wBAC/C;AAAA,sBACJ,CAAC;AACD,4BAAM,mBAAmB,oBAAO,qBAAqB,YAAY;AACjE,6CAAuB,QAAQ;AAAA,wBAC3B,iBAAiB;AAAA,wBACjB,SAAS;AAAA,wBACT,aAAa;AAAA,wBACb,cAAc;AAAA,sBAClB,CAAC;AAAA,oBACL;AACA,wBAAI,WAAW,qBAAqB,QAAW;AAC3C,iCAAW,mBAAmB,CAAC;AAAA,oBACnC;AACA,+BAAW,iBAAiB;AAAA,0BACxB,oDAAuB,cAAc;AAAA,wBACjC;AAAA,sBACJ,CAAC;AAAA,oBACL;AACA;AAAA,kBACJ;AACA,oCAAkB;AAClB,iCAAe;AACf,+BAAa,cAAe,QAAQ,KAAK,UAAU,cAAe,OAAO;AAAA,gBAC7E;AACA;AAAA,cACJ,WAAW,cAAc;AAErB,oCAAoB;AAAA,cACxB;AAAA,YACJ,OAAO;AAEH,kBAAI,cAAc;AAEd,oCAAoB;AAAA,cACxB,OAAO;AAEH,oCAAoB;AAAA,cACxB;AAAA,YACJ;AAEA,gBAAI,iBAAiB;AAGrB,gBACI,qBACA,iBAAiB,kDAChB,uBAAuB,SAAS,KAAK,uBAAuB,CAAC,EAAE,gBAChE,uBAAuB,UAAU,2CACnC;AACE,oBAAM,mBAAmB;AACzB,+BAAiB;AAAA,YACrB;AACA,gBAAI,CAAC,gBAAgB;AAGjB,qCAAuB,KAAK,eAAe;AAC3C;AAAA,YACJ;AACA,gBAAI,cAAc,KAAK,SAAS,iBAAiB,qBAAqB,aAAa,GAAG;AAGlF,qCAAuB,QAAQ,eAAe;AAC9C;AAAA,YACJ;AAAA,UACJ;AACA,yBAAe;AACf,cAAI,WAAW,qBAAqB,QAAW;AAC3C,uBAAW,mBAAmB,CAAC;AAAA,UACnC;AACA,qBAAW,iBAAiB,KAAK,OAAO;AAAA,QAC5C,WAAW,mBAAmB,SAAS,GAAG;AACtC,gBAAM,cAAc,mBAAmB,MAAM;AAC7C,cAAI,gBAAgB,QAAW;AAC3B;AAAA,UACJ;AAEA,gBAAM,EAAE,SAAS,YAAY,IAAI;AACjC,cACI,cAAc,KAAK,WAAW,mBAAmB,IAAI,KAAK,cAC1D,KAAK,SAAS,gBAChB;AACE,kBAAM,mBAAmB;AAAA,UAC7B;AACA,yBAAe;AACf,cAAI,WAAW,iBAAiB,QAAW;AACvC,uBAAW,eAAe,CAAC;AAAA,UAC/B;AACA,qBAAW,aAAa,KAAK,OAAO;AAAA,QACxC,WAAW,iBAAiB;AAExB,iBAAO,WAAW;AAClB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,CAAC,uBAAuB,WAAW,kBAAkB,UAAU,WAAW,cAAc,QAAQ;AAChG,YAAM,KAAK,sBAAsB,YAAY,UAAU;AAAA,IAC3D;AAAA,EACJ;AAAA,EAEA,MAAM,sBAAsB,YAAyD,aAAa,MAAM;AACpG,UAAM,mBAAmB;AAAA,MACrB,GAAG;AAAA,MACH,kBAAkB,WAAW,sBAAsB,QAAQ,WAAW;AAAA;AAAA,IAC1E;AACA,UAAM,iBAAiB,kCAAqB,OAAO,gBAAgB;AACnE,QAAI,eAAe,aAAa,KAAK,SAAS,gBAAgB;AAC1D,YAAM,IAAI;AAAA,QACN,mBAAmB,eAAe,UAAU,+CAA+C,KAAK,SAAS,cAAc,yCAAyC,0BAAW;AAAA,UACvK;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,UAAM,aAAa;AAAA,MACf,GAAG,iCAAa,aAAa,gBAAgB;AAAA,MAC7C,kBAAkB,0BAAW,QAAQ;AAAA,QACjC,OAAO,CAAC,iBAAiB,kBAAkB,UAAU,CAAC,iBAAiB,cAAc;AAAA,QACrF,kBAAkB,iBAAiB;AAAA,QACnC,qBAAqB,iBAAiB;AAAA,MAC1C,CAAC;AAAA,MACD,MAAM,iBAAiB,kBAAkB;AAAA,MACzC,IAAI,iBAAiB,cAAc;AAAA,IACvC;AAEA,QAAI,iBAAiB,kBAAkB;AAEnC,UAAI;AACA,cAAM,KAAK,SAAS,KAAK,oBAAwB,gBAAgB;AAAA,UAC7D,eAAe;AAAA,UACf,iBAAiB,CAAC;AAAA,UAClB;AAAA,QACJ,CAAC;AAAA,MACL,SAAS,GAAG;AACR,6CAAuB,OAAO,CAAC;AAE/B,cAAM,EAAE,gBAAgB,IAAI;AAC5B,aAAK,0BAA0B,eAAe;AAAA,MAClD;AAAA,IACJ,OAAO;AACH,YAAM,KAAK,SAAS,KAAK,oBAAwB,gBAAgB;AAAA,QAC7D,iBAAiB,CAAC;AAAA,QAClB;AAAA,MACJ,CAAC;AAED,YAAM,KAAK,eAAe,cAAc,EAAE,SAAS,aAAa,aAAY,uBAAO,GAAG,EAAE,CAAC;AAAA,IAC7F;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,+BAA+B,QAA2B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACjB,KAAK,cAAc;AACf,cAAM,EAAE,MAAM,OAAO,SAAS,SAAS,aAAa,KAAK,OAAO,IAAI;AACpE,YAAI,WAAW,QAAW;AACtB,gBAAM,IAAI,6BAAc,aAAa,KAAK,SAAS,IAAI,KAAK,WAAW,YAAY;AAAA,QACvF;AACA,cAAM,OAA+B;AAAA,UACjC,eAAe;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,UACA,wBAAwB;AAAA;AAAA,QAC5B;AACA,eAAO;AAAA,MACX;AAAA,MACA,KAAK,eAAe;AAChB,cAAM,EAAE,MAAM,QAAQ,cAAc,IAAI;AACxC,cAAM,eAAuC;AAAA,UACzC,iBAAiB;AAAA,YACb;AAAA,YACA,QAAQ,EAAE,OAAO;AAAA,UACrB;AAAA,UACA,wBAAwB;AAAA,QAC5B;AACA,YAAI,kBAAkB,QAAW;AAC7B,uBAAa,gBAAiB,OAAO,gBAAgB;AAAA,QACzD;AACA,eAAO;AAAA,MACX;AAAA,MACA,KAAK,eAAe;AAChB,cAAM;AAAA,UACF;AAAA,UACA,OAAO;AAAA,UACP,QAAQ;AAAA,UACR;AAAA,UACA,WAAW;AAAA,UACX,KAAK;AAAA,QACT,IAAI;AACJ,cAAM,OAA2B;AAAA,UAC7B,WAAW;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,UACA,wBAAwB;AAAA;AAAA,QAC5B;AACA,eAAO;AAAA,MACX;AAAA,MACA,KAAK,gBAAgB;AACjB,cAAM,EAAE,MAAM,QAAQ,cAAc,IAAI;AACxC,cAAM,eAAmC;AAAA,UACrC,aAAa;AAAA,YACT;AAAA,YACA,QAAQ,EAAE,OAAO;AAAA,UACrB;AAAA,UACA,wBAAwB;AAAA,QAC5B;AACA,YAAI,kBAAkB,QAAW;AAC7B,uBAAa,YAAa,OAAO,gBAAgB;AAAA,QACrD;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,MAAM,2CAA2C,qBAAqB;AAAA,EACzE,MAAM,QAAQ,qBAA6B,aAAqB,SAAoB;AAChF,UAAM,UAAU,MAAM,KAAK,eAAe,qBAAqB,EAAE,QAAQ,CAAC;AAC1E,UAAM;AAAA,MACF,eAAe,EAAE,aAAa,oBAAoB;AAAA,IACtD,IAAI;AACJ,QAAI,wBAAwB,aAAa;AACrC,UAAI,wBAAwB,wBAA4B;AACpD,cAAM,aAAa,+BAAkB,OAAO,QAAQ,OAAO,EAAE;AAC7D,cAAM,IAAI,yCAA4B,4BAA4B,UAAU,IAAI,UAAU;AAAA,MAC9F;AACA,YAAM,IAAI;AAAA,QACN,oCAAoC,oBAAoB,SAAS,EAAE,CAAC,cAAc,YAAY;AAAA,UAC1F;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkB;AACrB,WAAO,MAAM;AACT,YAAM,oBAAoB,MAAM,KAAK,QAAQ,cAAc,kBAAsB;AACjF,YAAM,SAAS,2BAAc,OAAO,kBAAkB,OAAO;AAE7D,YAAM;AAEN,UAAI,OAAO,qBAAqB;AAC5B,cAAM,KAAK,WAAW,oBAAO,SAAS;AAAA,UAClC,4BAA4B;AAAA,UAC5B,YAAY,KAAK,cAAc,MAAM;AAAA,QACzC,CAAC;AAAA,MACL,WAAW,CAAC,OAAO,kBAAkB;AAGjC,aAAK,WAAW,oBAAO,SAAS;AAAA,UAC5B,4BAA4B;AAAA,UAC5B,YAAY,KAAK,cAAc,MAAM;AAAA,QACzC,CAAC,EAAE,MAAM,WAAS,OAAO,KAAK,uDAAuD,KAAK,CAAC;AAAA,MAC/F;AAEA,UAAI,CAAC,OAAO,qBAAqB;AAC7B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,cAAc,QAAoB;AAC9B,WAAO;AAAA,MACH,OAAO,OAAO,mBAAmB,SAAY,SAAY,iCAAa,QAAQ,OAAO,cAAc;AAAA,MACnG,iBAAiB,0BAAW,QAAQ;AAAA,QAChC,OAAO,CAAC,OAAO,kBAAkB,UAAU,CAAC,OAAO,cAAc;AAAA,QACjE,kBAAkB,OAAO;AAAA,QACzB,qBAAqB,OAAO;AAAA,MAChC,CAAC;AAAA,MACD,MAAM,OAAO,kBAAkB;AAAA,MAC/B,IAAI,OAAO,cAAc;AAAA,IAC7B;AAAA,EACJ;AACJ;AAEO,MAAM,mCAAmC,mCAAmC;AAAA,EAC/E;AAAA,EAEA,aAAa,OAAO,kBAAoC;AACpD,UAAM,WAAW,MAAM,iBAAiB,iBAAiB;AACzD,WAAO,IAAI,KAAK,UAAU,gBAAgB;AAAA,EAC9C;AAAA,EAEA,YAAY,UAA2B,kBAAoC;AACvE,UAAM,QAAQ;AACd,SAAK,oBAAoB;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAe,KAAK,aAAqB,SAAgB,SAA+B;AACpF,UAAM,MAAM,oBAAK;AACjB,QAAI;AACA,UAAI,KAAK,SAAS,QAAQ,QAAQ;AAC9B,cAAM,IAAI,iCAAmB,kEAAkE;AAAA,MACnG;AAEA,aAAO,MAAM,KAAK,SAAS,KAAK,aAAa,SAAS,OAAO;AAAA,IACjE,SAAS,OAAO;AACZ,UACI,KAAK,kBAAkB,sBACtB,iBAAiB,iDAAmC,iBAAiB,qCACtE,CAAC,SAAS,4BACZ;AAGE,eAAO;AAAA,UACH,GAAG,iBAAiB,gDAAkC,iCAAiC,uBAAuB;AAAA,QAClH;AACA,cAAM,KAAK,SAAS,MAAM;AAC1B,YAAI,MAAM,KAAK,kBAAkB,iBAAiB,EAAE,MAAM,IAAI,CAAC,GAAG;AAC9D,eAAK,WAAW,MAAM,KAAK,kBAAkB,iBAAiB;AAC9D,iBAAO,MAAM,KAAK,SAAS,KAAK,aAAa,SAAS,OAAO;AAAA,QACjE;AAAA,MACJ,OAAO;AACH,cAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,gBAAgB,aAA0B;AAC5C,UAAM,KAAK,KAAK,qBAAyB,KAAK,sBAAsB,6BAAgB,WAAW,CAAC;AAAA,EACpG;AAAA,EAEA,sBAAgD,QAAW,SAA4B;AACnF,UAAM,UAAU,OAAO,OAAO,OAAO;AACrC,QAAI,QAAQ,cAAc,KAAK,SAAS,gBAAgB;AACpD,aAAO;AAAA,IACX;AAEA,UAAM,6BAA6B,CAAC,GAAI,QAAQ,sBAAsB,CAAC,CAAE;AAEzE,UAAM,mCAAmC,OAAO,OAAO;AAAA,MACnD,GAAG;AAAA,MACH,oBAAoB,CAAC;AAAA,IACzB,CAAC;AACD,QAAI,iCAAiC,aAAa,KAAK,SAAS,gBAAgB;AAC5E,YAAM,IAAI;AAAA,QACN,+EAA+E,0BAAW,KAAK,OAAO,CAAC;AAAA,MAC3G;AAAA,IACJ;AAEA,WAAO,OAAO,OAAO;AAAA,MACjB,GAAG;AAAA,MACH,oBAAoB,KAAK;AAAA,QACrB;AAAA,QACA,KAAK,SAAS,iBAAiB,iCAAiC;AAAA,MACpE;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,2BACI,4BACA,gBACF;AACE,UAAM,qBAAqB,IAAI,MAAmD;AAElF,WAAO,iBAAiB,KAAK,2BAA2B,SAAS,GAAG;AAChE,YAAM,oBAAoB,2BAA2B,MAAM;AAC3D,UAAI,sBAAsB,QAAW;AACjC;AAAA,MACJ;AACA,YAAM,2BAA2B,kCAAqB,OAAO,iBAAiB;AAC9E,YAAM,iCAAiC,yBAAyB;AAChE,UAAI,iCAAiC,gBAAgB;AACjD,mCAA2B,QAAQ,iBAAiB;AACpD;AAAA,MACJ;AACA,yBAAmB,KAAK,iBAAiB;AACzC,wBAAkB;AAAA,IACtB;AACA,WAAO;AAAA,MACH,WAAW,2BAA2B,MAAM;AAAA,IAChD;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,qBAAqB,kBAAoC;AAC3D,UAAM,UAAU,KAAK,sBAAsB,kCAAqB,gBAAgB;AAChF,UAAM,KAAK,KAAK,0BAA8B,OAAO;AAAA,EACzD;AAAA,EAEA,MAAM,kBAAkB,eAA8B,wBAAmC;AACrF,QAAI,cAAc,kBAAkB;AAChC,YAAM,KAAK;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,aAAO,MAAM,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,iBAAiB,cAA4B;AAC/C,QAAI,aAAa,kBAAkB;AAC/B,YAAM,KAAK,8BAA8B,sBAA0B,8BAAiB,YAAY;AAAA,IACpG,OAAO;AACH,aAAO,MAAM,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,iBAAiB,SAAmB;AAChC,WAAO,KAAK,QAAQ,uBAA0B,8BAAiB,wBAA4B,gCAAmB;AAAA,MAC1G;AAAA,MACA,0BAA0B,2BAAc;AAAA,IAC5C,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,8BACV,oBACA,eACA,SACA,wBACa;AACb,QAAI;AACA,YAAM,KAAK,KAAK,oBAAoB,cAAc,OAAO,OAAO,GAAG;AAAA,QAC/D,eAAe;AAAA,QACf;AAAA,QACA,YAAY;AAAA,UACR,aAAa,0BAAW,QAAQ;AAAA,YAC5B,kBAAkB;AAAA,UACtB,CAAC;AAAA,QACL;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAG;AAGR,2CAAuB,OAAO,CAAC;AAC/B,YAAM,EAAE,gBAAgB,IAAI;AAC5B,WAAK,0BAA0B,eAAe;AAAA,IAClD;AAAA,EACJ;AAAA,EAEA,MAAc,QACV,oBACA,eACA,qBACA,gBACA,SACA,wBACkB;AAClB,UAAM,KAAK,KAAK,oBAAoB,cAAc,OAAO,OAAO,GAAG;AAAA,MAC/D,eAAe;AAAA,MACf;AAAA,IACJ,CAAC;AACD,UAAM,kBAAkB,MAAM,KAAK;AAAA,MAC/B;AAAA,MACA,EAAE,uBAAuB;AAAA,MACzB,YAAY,mBAAmB,KAAK,YAAY,0BAAW,IAAI,mBAAmB,CAAC;AAAA,IACvF;AACA,WAAO,eAAe,OAAO,gBAAgB,OAAO;AAAA,EACxD;AACJ;",
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"}
@@ -77,6 +77,8 @@ var import_MdnsConsts = require("./MdnsConsts.js");
77
77
  */
78
78
  const logger = import_general.Logger.get("MdnsClient");
79
79
  const MDNS_EXPIRY_GRACE_PERIOD_FACTOR = 1.05;
80
+ const GOODBYE_PROTECTION_WINDOW = (0, import_general.Millis)(1e3);
81
+ const RECORD_MIN_TTL = (0, import_general.Seconds)(15);
80
82
  const START_ANNOUNCE_INTERVAL = (0, import_general.Seconds)(1.5);
81
83
  class MdnsClient {
82
84
  #lifetime;
@@ -735,6 +737,9 @@ class MdnsClient {
735
737
  answersList.forEach(
736
738
  (answers) => answers.forEach((answer) => {
737
739
  const { name, recordType } = answer;
740
+ if (answer.ttl > 0 && answer.ttl < RECORD_MIN_TTL) {
741
+ answer = { ...answer, ttl: RECORD_MIN_TTL };
742
+ }
738
743
  if (name.endsWith(import_MdnsConsts.MATTER_SERVICE_QNAME)) {
739
744
  structuredAnswers.operational = structuredAnswers.operational ?? {};
740
745
  structuredAnswers.operational[recordType] = structuredAnswers.operational[recordType] ?? [];
@@ -768,71 +773,81 @@ class MdnsClient {
768
773
  );
769
774
  return structuredAnswers;
770
775
  }
776
+ /**
777
+ * Merge a record into a map with goodbye protection.
778
+ * Returns true if the record was processed (added or deleted), false if skipped due to protection.
779
+ */
780
+ #mergeRecordWithGoodbyeProtection(targetMap, key, record, now) {
781
+ const existingRecord = targetMap.get(key);
782
+ if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
783
+ if (record.ttl === 0) {
784
+ if (existingRecord && now - existingRecord.discoveredAt < GOODBYE_PROTECTION_WINDOW) {
785
+ return;
786
+ }
787
+ targetMap.delete(key);
788
+ } else {
789
+ targetMap.set(key, record);
790
+ }
791
+ }
792
+ }
771
793
  #combineStructuredAnswers(...answersList) {
772
794
  const combinedAnswers = {};
795
+ const now = import_general.Time.nowMs;
773
796
  for (const answers of answersList) {
774
797
  if (answers.operational) {
775
798
  combinedAnswers.operational = combinedAnswers.operational ?? {};
776
799
  for (const [recordType, records] of Object.entries(answers.operational)) {
777
800
  combinedAnswers.operational[recordType] = combinedAnswers.operational[recordType] ?? /* @__PURE__ */ new Map();
778
- records.forEach((record) => {
779
- const existingRecord = combinedAnswers.operational[recordType].get(record.name);
780
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
781
- if (record.ttl === 0) {
782
- combinedAnswers.operational[recordType].delete(record.name);
783
- } else {
784
- combinedAnswers.operational[recordType].set(record.name, record);
785
- }
786
- }
787
- });
801
+ for (const record of records) {
802
+ this.#mergeRecordWithGoodbyeProtection(
803
+ combinedAnswers.operational[recordType],
804
+ record.name,
805
+ record,
806
+ now
807
+ );
808
+ }
788
809
  }
789
810
  }
790
811
  if (answers.commissionable) {
791
812
  combinedAnswers.commissionable = combinedAnswers.commissionable ?? {};
792
813
  for (const [recordType, records] of Object.entries(answers.commissionable)) {
793
814
  combinedAnswers.commissionable[recordType] = combinedAnswers.commissionable[recordType] ?? /* @__PURE__ */ new Map();
794
- records.forEach((record) => {
795
- const existingRecord = combinedAnswers.commissionable[recordType].get(record.name);
796
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
797
- if (record.ttl === 0) {
798
- combinedAnswers.commissionable[recordType].delete(record.name);
799
- } else {
800
- combinedAnswers.commissionable[recordType].set(record.name, record);
801
- }
802
- }
803
- });
815
+ for (const record of records) {
816
+ this.#mergeRecordWithGoodbyeProtection(
817
+ combinedAnswers.commissionable[recordType],
818
+ record.name,
819
+ record,
820
+ now
821
+ );
822
+ }
804
823
  }
805
824
  }
806
825
  if (answers.addressesV6) {
807
826
  combinedAnswers.addressesV6 = combinedAnswers.addressesV6 ?? {};
808
827
  for (const [name, records] of Object.entries(answers.addressesV6)) {
809
828
  combinedAnswers.addressesV6[name] = combinedAnswers.addressesV6[name] ?? /* @__PURE__ */ new Map();
810
- records.forEach((record) => {
811
- const existingRecord = combinedAnswers.addressesV6[name].get(record.value);
812
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
813
- if (record.ttl === 0) {
814
- combinedAnswers.addressesV6[name].delete(record.value);
815
- } else {
816
- combinedAnswers.addressesV6[name].set(record.value, record);
817
- }
818
- }
819
- });
829
+ for (const record of records.values()) {
830
+ this.#mergeRecordWithGoodbyeProtection(
831
+ combinedAnswers.addressesV6[name],
832
+ record.value,
833
+ record,
834
+ now
835
+ );
836
+ }
820
837
  }
821
838
  }
822
839
  if (this.#socket.supportsIpv4 && answers.addressesV4) {
823
840
  combinedAnswers.addressesV4 = combinedAnswers.addressesV4 ?? {};
824
841
  for (const [name, records] of Object.entries(answers.addressesV4)) {
825
842
  combinedAnswers.addressesV4[name] = combinedAnswers.addressesV4[name] ?? /* @__PURE__ */ new Map();
826
- records.forEach((record) => {
827
- const existingRecord = combinedAnswers.addressesV4[name].get(record.value);
828
- if (!existingRecord || existingRecord.discoveredAt < record.discoveredAt) {
829
- if (record.ttl === 0) {
830
- combinedAnswers.addressesV4[name].delete(record.value);
831
- } else {
832
- combinedAnswers.addressesV4[name].set(record.value, record);
833
- }
834
- }
835
- });
843
+ for (const record of records.values()) {
844
+ this.#mergeRecordWithGoodbyeProtection(
845
+ combinedAnswers.addressesV4[name],
846
+ record.value,
847
+ record,
848
+ now
849
+ );
850
+ }
836
851
  }
837
852
  }
838
853
  }
@@ -876,43 +891,50 @@ class MdnsClient {
876
891
  this.#updateIpRecords(answers, message.sourceIntf);
877
892
  }
878
893
  /**
879
- * Update the discovered matter relevant IP records with the new data from the DNS message.
894
+ * Update IP address records in a target map with goodbye protection.
895
+ * Returns true if any records were updated.
880
896
  */
881
- #updateIpRecords(answers, netInterface) {
882
- const interfaceRecords = this.#discoveredIpRecords.get(netInterface);
883
- if (interfaceRecords === void 0) {
884
- return;
897
+ #updateIpAddressRecords(sourceAddresses, targetAddresses, now) {
898
+ if (!sourceAddresses || !targetAddresses) {
899
+ return false;
885
900
  }
886
901
  let updated = false;
887
- if (answers.addressesV6) {
888
- for (const [target, ipAddresses] of Object.entries(answers.addressesV6)) {
889
- if (interfaceRecords.addressesV6?.[target] !== void 0) {
890
- for (const [ip, record] of Object.entries(ipAddresses)) {
891
- if (record.ttl === 0) {
892
- interfaceRecords.addressesV6[target].delete(ip);
893
- } else {
894
- interfaceRecords.addressesV6[target].set(ip, record);
895
- }
896
- updated = true;
897
- }
898
- }
902
+ for (const [target, ipAddresses] of Object.entries(sourceAddresses)) {
903
+ const targetMap = targetAddresses[target];
904
+ if (targetMap === void 0) {
905
+ continue;
899
906
  }
900
- }
901
- if (this.#socket.supportsIpv4 && answers.addressesV4) {
902
- for (const [target, ipAddresses] of Object.entries(answers.addressesV4)) {
903
- if (interfaceRecords.addressesV4?.[target] !== void 0) {
904
- for (const [ip, record] of Object.entries(ipAddresses)) {
905
- if (record.ttl === 0) {
906
- interfaceRecords.addressesV4[target].delete(ip);
907
- } else {
908
- interfaceRecords.addressesV4[target].set(ip, record);
907
+ for (const [ip, record] of Object.entries(ipAddresses)) {
908
+ if (record.ttl === 0) {
909
+ const existingRecord = targetMap.get(ip);
910
+ if (existingRecord) {
911
+ const recordAge = now - existingRecord.discoveredAt;
912
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
913
+ continue;
909
914
  }
915
+ targetMap.delete(ip);
910
916
  updated = true;
911
917
  }
918
+ } else {
919
+ targetMap.set(ip, record);
920
+ updated = true;
912
921
  }
913
922
  }
914
923
  }
915
- if (updated) {
924
+ return updated;
925
+ }
926
+ /**
927
+ * Update the discovered matter relevant IP records with the new data from the DNS message.
928
+ */
929
+ #updateIpRecords(answers, netInterface) {
930
+ const interfaceRecords = this.#discoveredIpRecords.get(netInterface);
931
+ if (interfaceRecords === void 0) {
932
+ return;
933
+ }
934
+ const now = import_general.Time.nowMs;
935
+ const updatedV6 = this.#updateIpAddressRecords(answers.addressesV6, interfaceRecords.addressesV6, now);
936
+ const updatedV4 = this.#socket.supportsIpv4 && this.#updateIpAddressRecords(answers.addressesV4, interfaceRecords.addressesV4, now);
937
+ if (updatedV6 || updatedV4) {
916
938
  this.#discoveredIpRecords.set(netInterface, interfaceRecords);
917
939
  }
918
940
  }
@@ -984,18 +1006,33 @@ class MdnsClient {
984
1006
  const nodeId = nameParts[2];
985
1007
  return this.#operationalScanTargets.has(operationalId) || this.#operationalScanTargets.has(`${operationalId}-${nodeId}`);
986
1008
  }
1009
+ /**
1010
+ * Handle goodbye (TTL=0) for an operational device record with protection against out-of-order packets.
1011
+ * Returns true if the goodbye was processed (record deleted or protected), false if no action needed.
1012
+ */
1013
+ #handleOperationalDeviceGoodbye(matterName, netInterface, now) {
1014
+ const existingRecord = this.#operationalDeviceRecords.get(matterName);
1015
+ if (!existingRecord) {
1016
+ return false;
1017
+ }
1018
+ const recordAge = now - existingRecord.discoveredAt;
1019
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
1020
+ return true;
1021
+ }
1022
+ logger.debug(
1023
+ `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1024
+ );
1025
+ this.#operationalDeviceRecords.delete(matterName);
1026
+ return true;
1027
+ }
987
1028
  #handleOperationalTxtRecord(record, netInterface) {
988
1029
  const { name: matterName, value, ttl } = record;
989
- const discoveredAt = import_general.Time.nowMs;
1030
+ const now = import_general.Time.nowMs;
990
1031
  if (ttl === 0) {
991
- if (this.#operationalDeviceRecords.has(matterName)) {
992
- logger.debug(
993
- `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
994
- );
995
- this.#operationalDeviceRecords.delete(matterName);
996
- }
1032
+ this.#handleOperationalDeviceGoodbye(matterName, netInterface, now);
997
1033
  return;
998
1034
  }
1035
+ const discoveredAt = now;
999
1036
  if (!Array.isArray(value)) return;
1000
1037
  if (!this.#operationalDeviceRecords.has(matterName) && !this.#matchesOperationalCriteria(matterName)) {
1001
1038
  return;
@@ -1028,13 +1065,9 @@ class MdnsClient {
1028
1065
  ttl,
1029
1066
  value: { target, port }
1030
1067
  } = record;
1068
+ const now = import_general.Time.nowMs;
1031
1069
  if (ttl === 0) {
1032
- if (this.#operationalDeviceRecords.has(matterName)) {
1033
- logger.debug(
1034
- `Removing operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1035
- );
1036
- this.#operationalDeviceRecords.delete(matterName);
1037
- }
1070
+ this.#handleOperationalDeviceGoodbye(matterName, netInterface, now);
1038
1071
  return;
1039
1072
  }
1040
1073
  const ips = this.#handleIpRecords([formerAnswers, answers], target, netInterface);
@@ -1042,7 +1075,7 @@ class MdnsClient {
1042
1075
  if (!deviceExisted && !this.#matchesOperationalCriteria(matterName)) {
1043
1076
  return;
1044
1077
  }
1045
- const discoveredAt = import_general.Time.nowMs;
1078
+ const discoveredAt = now;
1046
1079
  const device = this.#operationalDeviceRecords.get(matterName) ?? {
1047
1080
  deviceIdentifier: matterName,
1048
1081
  addresses: /* @__PURE__ */ new Map(),
@@ -1054,10 +1087,17 @@ class MdnsClient {
1054
1087
  if (ips.length > 0) {
1055
1088
  for (const { value: ip, ttl: ttl2 } of ips) {
1056
1089
  if (ttl2 === 0) {
1057
- logger.debug(
1058
- `Removing IP ${ip} for operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1059
- );
1060
- addresses.delete(ip);
1090
+ const existingAddress = addresses.get(ip);
1091
+ if (existingAddress) {
1092
+ const addressAge = now - existingAddress.discoveredAt;
1093
+ if (addressAge < GOODBYE_PROTECTION_WINDOW) {
1094
+ continue;
1095
+ }
1096
+ logger.debug(
1097
+ `Removing IP ${ip} for operational device ${matterName} from cache (interface ${netInterface}) because of ttl=0`
1098
+ );
1099
+ addresses.delete(ip);
1100
+ }
1061
1101
  continue;
1062
1102
  }
1063
1103
  const address = addresses.get(ip) ?? { ip, port, type: "udp" };
@@ -1083,6 +1123,23 @@ class MdnsClient {
1083
1123
  }
1084
1124
  return;
1085
1125
  }
1126
+ /**
1127
+ * Handle goodbye (TTL=0) for a commissionable device record with protection against out-of-order packets.
1128
+ * Returns true if the goodbye should be skipped (record is protected), false if processed or no record exists.
1129
+ */
1130
+ #handleCommissionableDeviceGoodbye(name, netInterface, now) {
1131
+ const existingRecord = this.#commissionableDeviceRecords.get(name);
1132
+ if (!existingRecord) {
1133
+ return false;
1134
+ }
1135
+ const recordAge = now - existingRecord.discoveredAt;
1136
+ if (recordAge < GOODBYE_PROTECTION_WINDOW) {
1137
+ return true;
1138
+ }
1139
+ logger.debug(`Removing commissionable device ${name} from cache (interface ${netInterface}) because of ttl=0`);
1140
+ this.#commissionableDeviceRecords.delete(name);
1141
+ return false;
1142
+ }
1086
1143
  #handleCommissionableRecords(answers, formerAnswers, netInterface) {
1087
1144
  if (!this.#scanForCommissionableDevices && !this.#hasCommissionableWaiters) {
1088
1145
  return;
@@ -1094,16 +1151,12 @@ class MdnsClient {
1094
1151
  return;
1095
1152
  }
1096
1153
  const queryMissingDataForInstances = /* @__PURE__ */ new Set();
1154
+ const now = import_general.Time.nowMs;
1097
1155
  const txtRecords = commissionableRecords[import_general.DnsRecordType.TXT] ?? [];
1098
1156
  for (const record of txtRecords) {
1099
1157
  const { name, ttl } = record;
1100
1158
  if (ttl === 0) {
1101
- if (this.#commissionableDeviceRecords.has(name)) {
1102
- logger.debug(
1103
- `Removing commissionable device ${name} from cache (interface ${netInterface}) because of ttl=0`
1104
- );
1105
- this.#commissionableDeviceRecords.delete(name);
1106
- }
1159
+ this.#handleCommissionableDeviceGoodbye(name, netInterface, now);
1107
1160
  continue;
1108
1161
  }
1109
1162
  const txtRecord = this.#parseCommissionableTxtRecord(record);
@@ -1140,10 +1193,7 @@ class MdnsClient {
1140
1193
  ttl
1141
1194
  } = record;
1142
1195
  if (ttl === 0) {
1143
- logger.debug(
1144
- `Removing commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1145
- );
1146
- this.#commissionableDeviceRecords.delete(record.name);
1196
+ this.#handleCommissionableDeviceGoodbye(record.name, netInterface, now);
1147
1197
  continue;
1148
1198
  }
1149
1199
  const recordAddressesKnown = storedRecord.addresses.size > 0;
@@ -1151,14 +1201,21 @@ class MdnsClient {
1151
1201
  if (ips.length > 0) {
1152
1202
  for (const { value: ip, ttl: ttl2 } of ips) {
1153
1203
  if (ttl2 === 0) {
1154
- logger.debug(
1155
- `Removing IP ${ip} for commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1156
- );
1157
- storedRecord.addresses.delete(ip);
1204
+ const existingAddress = storedRecord.addresses.get(ip);
1205
+ if (existingAddress) {
1206
+ const addressAge = now - existingAddress.discoveredAt;
1207
+ if (addressAge < GOODBYE_PROTECTION_WINDOW) {
1208
+ continue;
1209
+ }
1210
+ logger.debug(
1211
+ `Removing IP ${ip} for commissionable device ${record.name} from cache (interface ${netInterface}) because of ttl=0`
1212
+ );
1213
+ storedRecord.addresses.delete(ip);
1214
+ }
1158
1215
  continue;
1159
1216
  }
1160
1217
  const matterServer = storedRecord.addresses.get(ip) ?? { ip, port, type: "udp" };
1161
- matterServer.discoveredAt = import_general.Time.nowMs;
1218
+ matterServer.discoveredAt = now;
1162
1219
  matterServer.ttl = ttl2;
1163
1220
  storedRecord.addresses.set(ip, matterServer);
1164
1221
  }