@matter/general 0.16.8-alpha.0-20260125-38e62bc3e → 0.16.8-alpha.0-20260127-65e1b40e2

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 (76) hide show
  1. package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
  2. package/dist/cjs/net/ServerAddress.js +2 -1
  3. package/dist/cjs/net/ServerAddress.js.map +1 -1
  4. package/dist/cjs/net/dns-sd/DnssdName.d.ts +56 -0
  5. package/dist/cjs/net/dns-sd/DnssdName.d.ts.map +1 -0
  6. package/dist/cjs/net/dns-sd/DnssdName.js +193 -0
  7. package/dist/cjs/net/dns-sd/DnssdName.js.map +6 -0
  8. package/dist/cjs/net/dns-sd/DnssdNames.d.ts +77 -0
  9. package/dist/cjs/net/dns-sd/DnssdNames.d.ts.map +1 -0
  10. package/dist/cjs/net/dns-sd/DnssdNames.js +238 -0
  11. package/dist/cjs/net/dns-sd/DnssdNames.js.map +6 -0
  12. package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts +80 -0
  13. package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
  14. package/dist/cjs/net/dns-sd/DnssdSolicitor.js +212 -0
  15. package/dist/cjs/net/dns-sd/DnssdSolicitor.js.map +6 -0
  16. package/dist/cjs/net/dns-sd/IpService.d.ts +73 -0
  17. package/dist/cjs/net/dns-sd/IpService.d.ts.map +1 -0
  18. package/dist/cjs/net/dns-sd/IpService.js +329 -0
  19. package/dist/cjs/net/dns-sd/IpService.js.map +6 -0
  20. package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts +16 -0
  21. package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
  22. package/dist/cjs/net/dns-sd/IpServiceResolution.js +162 -0
  23. package/dist/cjs/net/dns-sd/IpServiceResolution.js.map +6 -0
  24. package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts +58 -0
  25. package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
  26. package/dist/cjs/net/dns-sd/IpServiceStatus.js +191 -0
  27. package/dist/cjs/net/dns-sd/IpServiceStatus.js.map +6 -0
  28. package/dist/cjs/net/dns-sd/index.d.ts +6 -0
  29. package/dist/cjs/net/dns-sd/index.d.ts.map +1 -1
  30. package/dist/cjs/net/dns-sd/index.js +6 -0
  31. package/dist/cjs/net/dns-sd/index.js.map +1 -1
  32. package/dist/cjs/net/udp/UdpInterface.js +1 -1
  33. package/dist/cjs/net/udp/UdpInterface.js.map +1 -1
  34. package/dist/esm/net/ServerAddress.d.ts.map +1 -1
  35. package/dist/esm/net/ServerAddress.js +2 -1
  36. package/dist/esm/net/ServerAddress.js.map +1 -1
  37. package/dist/esm/net/dns-sd/DnssdName.d.ts +56 -0
  38. package/dist/esm/net/dns-sd/DnssdName.d.ts.map +1 -0
  39. package/dist/esm/net/dns-sd/DnssdName.js +173 -0
  40. package/dist/esm/net/dns-sd/DnssdName.js.map +6 -0
  41. package/dist/esm/net/dns-sd/DnssdNames.d.ts +77 -0
  42. package/dist/esm/net/dns-sd/DnssdNames.d.ts.map +1 -0
  43. package/dist/esm/net/dns-sd/DnssdNames.js +218 -0
  44. package/dist/esm/net/dns-sd/DnssdNames.js.map +6 -0
  45. package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts +80 -0
  46. package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
  47. package/dist/esm/net/dns-sd/DnssdSolicitor.js +192 -0
  48. package/dist/esm/net/dns-sd/DnssdSolicitor.js.map +6 -0
  49. package/dist/esm/net/dns-sd/IpService.d.ts +73 -0
  50. package/dist/esm/net/dns-sd/IpService.d.ts.map +1 -0
  51. package/dist/esm/net/dns-sd/IpService.js +309 -0
  52. package/dist/esm/net/dns-sd/IpService.js.map +6 -0
  53. package/dist/esm/net/dns-sd/IpServiceResolution.d.ts +16 -0
  54. package/dist/esm/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
  55. package/dist/esm/net/dns-sd/IpServiceResolution.js +142 -0
  56. package/dist/esm/net/dns-sd/IpServiceResolution.js.map +6 -0
  57. package/dist/esm/net/dns-sd/IpServiceStatus.d.ts +58 -0
  58. package/dist/esm/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
  59. package/dist/esm/net/dns-sd/IpServiceStatus.js +171 -0
  60. package/dist/esm/net/dns-sd/IpServiceStatus.js.map +6 -0
  61. package/dist/esm/net/dns-sd/index.d.ts +6 -0
  62. package/dist/esm/net/dns-sd/index.d.ts.map +1 -1
  63. package/dist/esm/net/dns-sd/index.js +6 -0
  64. package/dist/esm/net/dns-sd/index.js.map +1 -1
  65. package/dist/esm/net/udp/UdpInterface.js +1 -1
  66. package/dist/esm/net/udp/UdpInterface.js.map +1 -1
  67. package/package.json +2 -2
  68. package/src/net/ServerAddress.ts +2 -1
  69. package/src/net/dns-sd/DnssdName.ts +252 -0
  70. package/src/net/dns-sd/DnssdNames.ts +208 -0
  71. package/src/net/dns-sd/DnssdSolicitor.ts +231 -0
  72. package/src/net/dns-sd/IpService.ts +346 -0
  73. package/src/net/dns-sd/IpServiceResolution.ts +134 -0
  74. package/src/net/dns-sd/IpServiceStatus.ts +212 -0
  75. package/src/net/dns-sd/index.ts +6 -0
  76. package/src/net/udp/UdpInterface.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;CAC7B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAS9C,aAAa,CACrB;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAYrD;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,cAuBnD;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAcnE;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAY7D;IAED;;;;OAIG;IACH,KAAY,mBAAmB;QAC3B,QAAQ,IAAA;QACR,eAAe,IAAA;QACf,IAAI,IAAA;QACJ,IAAI,IAAA;QACJ,MAAM,IAAI;KACb;IAED,SAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,uBAkB3D;CACJ"}
1
+ {"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;CAC7B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAS9C,aAAa,CACrB;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAarD;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,cAuBnD;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAcnE;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAY7D;IAED;;;;OAIG;IACH,KAAY,mBAAmB;QAC3B,QAAQ,IAAA;QACR,eAAe,IAAA;QACf,IAAI,IAAA;QACJ,IAAI,IAAA;QACJ,MAAM,IAAI;KACb;IAED,SAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,uBAkB3D;CACJ"}
@@ -44,7 +44,8 @@ function ServerAddress(definition) {
44
44
  switch (address.type) {
45
45
  case "udp":
46
46
  case "tcp":
47
- return `${address.type}://${address.ip}:${address.port}`;
47
+ const ip = address.ip;
48
+ return `${address.type}://${ip.includes(":") ? `[${ip}]` : ip}:${address.port}`;
48
49
  case "ble":
49
50
  return `ble://${address.peripheralAddress}`;
50
51
  default:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/ServerAddress.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,wBAA2B;AAC3B,sBAAyB;AAPzB;AAAA;AAAA;AAAA;AAAA;AA+DO,SAAS,cAAc,YAA2B;AACrD,SAAO;AAAA,IACH,KAAK;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,GAAG;AAAA,EACP;AACJ;AAAA,CAEO,CAAUA,mBAAV;AACI,WAAS,OAAO,SAAgC;AACnD,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,eAAO,GAAG,QAAQ,IAAI,MAAM,QAAQ,EAAE,IAAI,QAAQ,IAAI;AAAA,MAE1D,KAAK;AACD,eAAO,SAAS,QAAQ,iBAAiB;AAAA,MAE7C;AACI,eAAO,GAAI,QAAgB,IAAI;AAAA,IACvC;AAAA,EACJ;AAZO,EAAAA,eAAS;AAcT,WAAS,cAAc,SAAwB;AAClD,UAAM,aAAa,MAAe;AAElC,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,mBAAW,KAAK,GAAG,QAAQ,IAAI,OAAO,6BAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtF;AAAA,MAEJ,KAAK;AACD,mBAAW,KAAK,UAAU,6BAAW,OAAO,QAAQ,iBAAiB,CAAC;AACtE;AAAA,MAEJ;AACI,mBAAW,KAAK,GAAI,QAAgB,IAAI,KAAK;AAC7C;AAAA,IACR;AAEA,QAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,UAAU;AACrD,iBAAW,KAAK,SAAS,yBAAS,OAAO,QAAQ,GAAG,CAAC;AAAA,IACzD;AAEA,WAAO,6BAAW,OAAO,GAAG,UAAU;AAAA,EAC1C;AAvBO,EAAAA,eAAS;AAyBT,WAAS,QAAQ,GAAkB,GAA2B;AACjE,QAAI,EAAE,SAAS,EAAE,MAAM;AACnB,aAAO;AAAA,IACX;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AAAA,IACzC;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,sBAAsB,EAAE;AAAA,IACrC;AAEA,WAAO;AAAA,EACX;AAdO,EAAAA,eAAS;AAsBT,WAAS,SAAS,QAAsC;AAC3D,QAAI,OAAO,gBAAgB,QAAW;AAClC,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,cAAc,UAAa,OAAO,YAAY,OAAO,aAAa;AACzE,aAAO;AAAA,QACH,WAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAZO,EAAAA,eAAS;AAmBT,MAAK;AAAL,IAAKC,yBAAL;AACH,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA,YAAS,KAAT;AAAA,KALQ,sBAAAD,eAAA,wBAAAA,eAAA;AAQL,WAAS,sBAAsB,SAAwB;AAC1D,QAAI,EAAE,QAAQ,UAAU;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,IAAI,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,SAAS,GAAG,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAlBO,EAAAA,eAAS;AAAA,GAzFH;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,wBAA2B;AAC3B,sBAAyB;AAPzB;AAAA;AAAA;AAAA;AAAA;AA+DO,SAAS,cAAc,YAA2B;AACrD,SAAO;AAAA,IACH,KAAK;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,GAAG;AAAA,EACP;AACJ;AAAA,CAEO,CAAUA,mBAAV;AACI,WAAS,OAAO,SAAgC;AACnD,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,cAAM,KAAK,QAAQ;AACnB,eAAO,GAAG,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,QAAQ,IAAI;AAAA,MAEjF,KAAK;AACD,eAAO,SAAS,QAAQ,iBAAiB;AAAA,MAE7C;AACI,eAAO,GAAI,QAAgB,IAAI;AAAA,IACvC;AAAA,EACJ;AAbO,EAAAA,eAAS;AAeT,WAAS,cAAc,SAAwB;AAClD,UAAM,aAAa,MAAe;AAElC,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,mBAAW,KAAK,GAAG,QAAQ,IAAI,OAAO,6BAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtF;AAAA,MAEJ,KAAK;AACD,mBAAW,KAAK,UAAU,6BAAW,OAAO,QAAQ,iBAAiB,CAAC;AACtE;AAAA,MAEJ;AACI,mBAAW,KAAK,GAAI,QAAgB,IAAI,KAAK;AAC7C;AAAA,IACR;AAEA,QAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,UAAU;AACrD,iBAAW,KAAK,SAAS,yBAAS,OAAO,QAAQ,GAAG,CAAC;AAAA,IACzD;AAEA,WAAO,6BAAW,OAAO,GAAG,UAAU;AAAA,EAC1C;AAvBO,EAAAA,eAAS;AAyBT,WAAS,QAAQ,GAAkB,GAA2B;AACjE,QAAI,EAAE,SAAS,EAAE,MAAM;AACnB,aAAO;AAAA,IACX;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AAAA,IACzC;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,sBAAsB,EAAE;AAAA,IACrC;AAEA,WAAO;AAAA,EACX;AAdO,EAAAA,eAAS;AAsBT,WAAS,SAAS,QAAsC;AAC3D,QAAI,OAAO,gBAAgB,QAAW;AAClC,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,cAAc,UAAa,OAAO,YAAY,OAAO,aAAa;AACzE,aAAO;AAAA,QACH,WAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAZO,EAAAA,eAAS;AAmBT,MAAK;AAAL,IAAKC,yBAAL;AACH,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA,YAAS,KAAT;AAAA,KALQ,sBAAAD,eAAA,wBAAAA,eAAA;AAQL,WAAS,sBAAsB,SAAwB;AAC1D,QAAI,EAAE,QAAQ,UAAU;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,IAAI,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,SAAS,GAAG,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAlBO,EAAAA,eAAS;AAAA,GA1FH;",
5
5
  "names": ["ServerAddress", "SelectionPreference"]
6
6
  }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DnsRecord, DnsRecordType, SrvRecordValue } from "#codec/DnsCodec.js";
7
+ import type { Timestamp } from "#time/Timestamp.js";
8
+ import { AsyncObserver, BasicObservable } from "#util/Observable.js";
9
+ import { MaybePromise } from "#util/Promises.js";
10
+ /**
11
+ * Manages records associated with a single DNS-SD qname.
12
+ *
13
+ * Every DNS-SD qname of interest has a 1:1 relationship with a single instance of this class in the context of a
14
+ * {@link DnssdNames}. We therefore can use the qname or {@link DnssdName} interchangeably.
15
+ *
16
+ * An {@link DnssdName} is created when a new name is discovered or requested by another component. The name
17
+ * automatically deletes when there are no longer observers or unexpired records.
18
+ */
19
+ export declare class DnssdName extends BasicObservable<[changes: DnssdName.Changes], MaybePromise> {
20
+ #private;
21
+ readonly qname: string;
22
+ constructor(qname: string, context: DnssdName.Context);
23
+ off(observer: AsyncObserver<[]>): void;
24
+ close(): Promise<void>;
25
+ get records(): MapIterator<DnssdName.Record>;
26
+ get parameters(): Map<string, string>;
27
+ get isDiscovered(): boolean;
28
+ installRecord(record: DnsRecord<any>): false | undefined;
29
+ deleteRecord(record: DnsRecord, ifOlderThan?: Timestamp): void;
30
+ }
31
+ export declare namespace DnssdName {
32
+ interface Context {
33
+ delete(name: DnssdName): void;
34
+ registerForExpiration(record: Record): void;
35
+ unregisterForExpiration(record: Record): void;
36
+ }
37
+ interface Expiration {
38
+ expiresAt: Timestamp;
39
+ }
40
+ interface PointerRecord extends DnsRecord<string>, Expiration {
41
+ recordType: DnsRecordType.PTR;
42
+ }
43
+ interface HostRecord extends DnsRecord<string>, Expiration {
44
+ recordType: DnsRecordType.A | DnsRecordType.AAAA;
45
+ }
46
+ interface ServiceRecord extends DnsRecord<SrvRecordValue>, Expiration {
47
+ recordType: DnsRecordType.SRV;
48
+ }
49
+ type Record = PointerRecord | ServiceRecord | HostRecord;
50
+ interface Changes {
51
+ name: DnssdName;
52
+ updated?: Record[];
53
+ deleted?: Record[];
54
+ }
55
+ }
56
+ //# sourceMappingURL=DnssdName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnssdName.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/DnssdName.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,eAAe,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;;IAUlF,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,CAAC,OAAO;IAMrB,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;IAKlC,KAAK;IASX,IAAI,OAAO,kCAEV;IAED,IAAI,UAAU,wBAKb;IAED,IAAI,YAAY,YAEf;IAED,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;IAoCpC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS;CA6F1D;AAqBD,yBAAiB,SAAS,CAAC;IACvB,UAAiB,OAAO;QACpB,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;QAC9B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5C,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACjD;IAED,UAAiB,UAAU;QACvB,SAAS,EAAE,SAAS,CAAC;KACxB;IAED,UAAiB,aAAc,SAAQ,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU;QAChE,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;KACjC;IAED,UAAiB,UAAW,SAAQ,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU;QAC7D,UAAU,EAAE,aAAa,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;KACpD;IAED,UAAiB,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC,EAAE,UAAU;QACxE,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;KACjC;IAED,KAAY,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;IAEhE,UAAiB,OAAO;QACpB,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB;CACJ"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var DnssdName_exports = {};
20
+ __export(DnssdName_exports, {
21
+ DnssdName: () => DnssdName
22
+ });
23
+ module.exports = __toCommonJS(DnssdName_exports);
24
+ var import_DnsCodec = require("#codec/DnsCodec.js");
25
+ var import_Logger = require("#log/Logger.js");
26
+ var import_Time = require("#time/Time.js");
27
+ var import_Observable = require("#util/Observable.js");
28
+ /**
29
+ * @license
30
+ * Copyright 2022-2026 Matter.js Authors
31
+ * SPDX-License-Identifier: Apache-2.0
32
+ */
33
+ const logger = import_Logger.Logger.get("DnssdName");
34
+ class DnssdName extends import_Observable.BasicObservable {
35
+ constructor(qname, context) {
36
+ super((e) => logger.error(`Unhandled error in observer for DNS name "${qname}":`, e));
37
+ this.qname = qname;
38
+ this.#context = context;
39
+ }
40
+ #context;
41
+ #records = /* @__PURE__ */ new Map();
42
+ #recordCount = 0;
43
+ #changes;
44
+ #notified;
45
+ #maybeDeleting;
46
+ #parameters;
47
+ off(observer) {
48
+ super.off(observer);
49
+ this.#deleteIfUnused();
50
+ }
51
+ async close() {
52
+ if (this.#notified) {
53
+ await this.#notified;
54
+ }
55
+ if (this.#maybeDeleting) {
56
+ await this.#maybeDeleting;
57
+ }
58
+ }
59
+ get records() {
60
+ return this.#records.values();
61
+ }
62
+ get parameters() {
63
+ if (this.#parameters === void 0) {
64
+ this.#parameters = /* @__PURE__ */ new Map();
65
+ }
66
+ return this.#parameters;
67
+ }
68
+ get isDiscovered() {
69
+ return !!this.#recordCount;
70
+ }
71
+ installRecord(record) {
72
+ if (record.recordType === import_DnsCodec.DnsRecordType.TXT) {
73
+ const entries = record.value;
74
+ for (const entry of entries) {
75
+ const pos = entry.indexOf("=");
76
+ if (pos === -1) {
77
+ this.parameters.set(entry, "");
78
+ } else {
79
+ this.parameters.set(entry.slice(0, pos), entry.slice(pos + 1));
80
+ }
81
+ }
82
+ }
83
+ const key = keyOf(record);
84
+ if (key === void 0) {
85
+ this.#deleteIfUnused();
86
+ return false;
87
+ }
88
+ const oldRecord = this.#records.get(key);
89
+ if (oldRecord) {
90
+ this.#context.unregisterForExpiration(oldRecord);
91
+ } else {
92
+ this.#recordCount++;
93
+ }
94
+ const recordWithExpire = { ...record, expiresAt: import_Time.Time.nowMs + record.ttl };
95
+ this.#records.set(key, recordWithExpire);
96
+ this.#context.registerForExpiration(recordWithExpire);
97
+ this.#notify("update", key, recordWithExpire);
98
+ }
99
+ deleteRecord(record, ifOlderThan) {
100
+ const key = keyOf(record);
101
+ if (key === void 0) {
102
+ this.#deleteIfUnused();
103
+ return;
104
+ }
105
+ const recordWithExpire = this.#records?.get(key);
106
+ if (!recordWithExpire) {
107
+ this.#deleteIfUnused();
108
+ return;
109
+ }
110
+ if (ifOlderThan !== void 0 && recordWithExpire.expiresAt - recordWithExpire.ttl >= ifOlderThan) {
111
+ return;
112
+ }
113
+ this.#records.delete(key);
114
+ this.#recordCount--;
115
+ this.#context.unregisterForExpiration(recordWithExpire);
116
+ if (this.#deleteIfUnused()) {
117
+ return;
118
+ }
119
+ this.#notify("delete", key, recordWithExpire);
120
+ }
121
+ /**
122
+ * Delete if unused.
123
+ *
124
+ * This is async so we assess whether deletion is appropriate after a batch of updates.
125
+ */
126
+ #deleteIfUnused() {
127
+ if (this.isObserved || this.isDiscovered) {
128
+ return false;
129
+ }
130
+ if (this.#maybeDeleting) {
131
+ return true;
132
+ }
133
+ const maybeDelete = async () => {
134
+ this.#maybeDeleting = void 0;
135
+ if (this.isObserved || this.isDiscovered) {
136
+ return;
137
+ }
138
+ this.#context.delete(this);
139
+ };
140
+ this.#maybeDeleting = maybeDelete();
141
+ return true;
142
+ }
143
+ /**
144
+ * Notification of observers.
145
+ *
146
+ * This is async so we coalesce changes into a single notification.
147
+ */
148
+ #notify(kind, key, record) {
149
+ if (this.#changes === void 0) {
150
+ this.#changes = /* @__PURE__ */ new Map();
151
+ }
152
+ this.#changes.set(key, { kind, record });
153
+ if (this.#notified) {
154
+ return;
155
+ }
156
+ const notify = async () => {
157
+ while (this.#changes?.size) {
158
+ const changes = { name: this };
159
+ for (const { kind: kind2, record: record2 } of this.#changes.values()) {
160
+ const key2 = `${kind2}d`;
161
+ const list = changes[key2];
162
+ if (list === void 0) {
163
+ changes[key2] = [record2];
164
+ } else {
165
+ list.push(record2);
166
+ }
167
+ }
168
+ this.#changes.clear();
169
+ await this.emit(changes);
170
+ }
171
+ this.#notified = void 0;
172
+ };
173
+ this.#notified = notify();
174
+ }
175
+ }
176
+ function keyOf(record) {
177
+ switch (record.recordType) {
178
+ case import_DnsCodec.DnsRecordType.A:
179
+ case import_DnsCodec.DnsRecordType.AAAA:
180
+ case import_DnsCodec.DnsRecordType.PTR:
181
+ if (typeof record.value === "string") {
182
+ return `${record.recordType} ${record.value}`;
183
+ }
184
+ break;
185
+ case import_DnsCodec.DnsRecordType.SRV:
186
+ if (typeof record.value === "object") {
187
+ const srv = record.value;
188
+ return `${record.recordType} ${srv.target}:${srv.port}`;
189
+ }
190
+ break;
191
+ }
192
+ }
193
+ //# sourceMappingURL=DnssdName.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/DnssdName.ts"],
4
+ "mappings": "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",
5
+ "names": ["kind", "record", "key"]
6
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DnsRecord } from "#codec/DnsCodec.js";
7
+ import { Duration } from "#time/Duration.js";
8
+ import { Entropy } from "#util/Entropy.js";
9
+ import { Lifetime } from "#util/Lifetime.js";
10
+ import { Observable } from "#util/Observable.js";
11
+ import { DnssdName } from "./DnssdName.js";
12
+ import { QueryMulticaster } from "./DnssdSolicitor.js";
13
+ import { MdnsSocket } from "./MdnsSocket.js";
14
+ /**
15
+ * Names collected via DNS-SD.
16
+ *
17
+ * TODO - API is designed to support Avahi, Bonjour etc. but current implementation is tied to local MDNS
18
+ */
19
+ export declare class DnssdNames {
20
+ #private;
21
+ constructor({ socket, lifetime, entropy, filter, goodbyeProtectionWindow, minTtl: minTtl, }: DnssdNames.Context);
22
+ /**
23
+ * Test for existence of name.
24
+ */
25
+ has(name: string): boolean;
26
+ /**
27
+ * Retrieve the {@link DnssdName} for {@link name}.
28
+ *
29
+ * This will create the name if it does not exist, and if you do not add an observer then it will not automatically
30
+ * delete if there are no records. So if you may not use the record test for existence with {@link has} first.
31
+ */
32
+ get(qname: string): DnssdName;
33
+ /**
34
+ * Retrieve the {@link DnssdName} if known.
35
+ */
36
+ maybeGet(name: string): DnssdName | undefined;
37
+ /**
38
+ * Wait for all workers and close all names.
39
+ */
40
+ close(): Promise<void>;
41
+ get socket(): MdnsSocket;
42
+ /**
43
+ * Emits when a {@link DnssdName} is first discovered.
44
+ */
45
+ get discovered(): Observable<[name: DnssdName], void>;
46
+ /**
47
+ * Shared solicitor.
48
+ *
49
+ * We offer solicitation in this object so there is not redundant solicitation across interested parties.
50
+ */
51
+ get solicitor(): QueryMulticaster;
52
+ get entropy(): Entropy;
53
+ }
54
+ export declare namespace DnssdNames {
55
+ interface Context {
56
+ socket: MdnsSocket;
57
+ lifetime?: Lifetime.Owner;
58
+ entropy: Entropy;
59
+ filter?: (record: DnsRecord) => boolean;
60
+ /**
61
+ * The interval after discovering a record for which we ignore goodbyes.
62
+ *
63
+ * This serves as protection for out-of-order messages when a device expires then broadcasts the same record
64
+ * in a very short amount of time.
65
+ */
66
+ goodbyeProtectionWindow?: Duration;
67
+ /**
68
+ * Minimum TTL for PTR records.
69
+ */
70
+ minTtl?: Duration;
71
+ }
72
+ const defaults: {
73
+ goodbyeProtectionWindow: Duration;
74
+ minTtl: Duration;
75
+ };
76
+ }
77
+ //# sourceMappingURL=DnssdNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnssdNames.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/DnssdNames.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,UAAU;;gBAaP,EACR,MAAM,EACN,QAA2B,EAC3B,OAAO,EACP,MAAM,EACN,uBAAuB,EACvB,MAAM,EAAE,MAAM,GACjB,EAAE,UAAU,CAAC,OAAO;IAmDrB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAS7B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAKrB;;OAEG;IACG,KAAK;IAWX,IAAI,MAAM,eAET;IAED;;OAEG;IACH,IAAI,UAAU,wCAEb;IAED;;;;OAIG;IACH,IAAI,SAAS,qBAEZ;IAED,IAAI,OAAO,YAEV;CAkBJ;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAO;QACpB,MAAM,EAAE,UAAU,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC;QAExC;;;;;WAKG;QACH,uBAAuB,CAAC,EAAE,QAAQ,CAAC;QAEnC;;WAEG;QACH,MAAM,CAAC,EAAE,QAAQ,CAAC;KACrB;IAEM,MAAM,QAAQ;;;KAGpB,CAAC;CACL"}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var __using = (stack, value, async) => {
24
+ if (value != null) {
25
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
26
+ var dispose, inner;
27
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
28
+ if (dispose === void 0) {
29
+ dispose = value[__knownSymbol("dispose")];
30
+ if (async) inner = dispose;
31
+ }
32
+ if (typeof dispose !== "function") __typeError("Object not disposable");
33
+ if (inner) dispose = function() {
34
+ try {
35
+ inner.call(this);
36
+ } catch (e) {
37
+ return Promise.reject(e);
38
+ }
39
+ };
40
+ stack.push([async, dispose, value]);
41
+ } else if (async) {
42
+ stack.push([async]);
43
+ }
44
+ return value;
45
+ };
46
+ var __callDispose = (stack, error, hasError) => {
47
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
48
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
49
+ };
50
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
51
+ var next = (it) => {
52
+ while (it = stack.pop()) {
53
+ try {
54
+ var result = it[1] && it[1].call(it[2]);
55
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (hasError) throw error;
61
+ };
62
+ return next();
63
+ };
64
+ var DnssdNames_exports = {};
65
+ __export(DnssdNames_exports, {
66
+ DnssdNames: () => DnssdNames
67
+ });
68
+ module.exports = __toCommonJS(DnssdNames_exports);
69
+ var import_Time = require("#time/Time.js");
70
+ var import_Timestamp = require("#time/Timestamp.js");
71
+ var import_TimeUnit = require("#time/TimeUnit.js");
72
+ var import_Lifetime = require("#util/Lifetime.js");
73
+ var import_Observable = require("#util/Observable.js");
74
+ var import_Scheduler = require("#util/Scheduler.js");
75
+ var import_DnssdName = require("./DnssdName.js");
76
+ var import_DnssdSolicitor = require("./DnssdSolicitor.js");
77
+ /**
78
+ * @license
79
+ * Copyright 2022-2026 Matter.js Authors
80
+ * SPDX-License-Identifier: Apache-2.0
81
+ */
82
+ class DnssdNames {
83
+ #socket;
84
+ #lifetime;
85
+ #entropy;
86
+ #filter;
87
+ #solicitor;
88
+ #observers = new import_Observable.ObserverGroup();
89
+ #names = /* @__PURE__ */ new Map();
90
+ #expiration;
91
+ #discovered = new import_Observable.Observable();
92
+ #goodbyeProtectionWindow;
93
+ #minTtl;
94
+ constructor({
95
+ socket,
96
+ lifetime = import_Lifetime.Lifetime.process,
97
+ entropy,
98
+ filter,
99
+ goodbyeProtectionWindow,
100
+ minTtl
101
+ }) {
102
+ this.#socket = socket;
103
+ this.#lifetime = lifetime.join("mdns client");
104
+ this.#entropy = entropy;
105
+ this.#filter = filter;
106
+ this.#solicitor = new import_DnssdSolicitor.QueryMulticaster(this);
107
+ this.#goodbyeProtectionWindow = goodbyeProtectionWindow ?? DnssdNames.defaults.goodbyeProtectionWindow;
108
+ this.#minTtl = minTtl ?? DnssdNames.defaults.minTtl;
109
+ this.#observers.on(this.#socket.receipt, this.#handleMessage.bind(this));
110
+ this.#expiration = new import_Scheduler.Scheduler({
111
+ name: "expiration scheduler",
112
+ lifetime: this.#lifetime,
113
+ timeOf: (a) => {
114
+ return a.expiresAt;
115
+ },
116
+ run: (record) => {
117
+ const discoveryName = this.#names.get(record.name);
118
+ if (discoveryName) {
119
+ discoveryName.deleteRecord(record);
120
+ }
121
+ }
122
+ });
123
+ }
124
+ #handleMessage(message) {
125
+ let goodbyesBefore;
126
+ for (let record of [...message.answers, ...message.additionalRecords]) {
127
+ if (this.#filter && !this.#filter(record)) {
128
+ continue;
129
+ }
130
+ const name = this.get(record.name);
131
+ if (record.ttl) {
132
+ if (record.ttl < this.#minTtl) {
133
+ record = { ...record, ttl: this.#minTtl };
134
+ }
135
+ const wasDiscovered = name.isDiscovered;
136
+ name.installRecord(record);
137
+ if (!wasDiscovered && name.isDiscovered) {
138
+ this.#discovered.emit(name);
139
+ }
140
+ } else {
141
+ if (goodbyesBefore === void 0) {
142
+ goodbyesBefore = (0, import_Timestamp.Timestamp)(import_Time.Time.nowMs - this.#goodbyeProtectionWindow);
143
+ }
144
+ name.deleteRecord(record, goodbyesBefore);
145
+ }
146
+ }
147
+ }
148
+ /**
149
+ * Test for existence of name.
150
+ */
151
+ has(name) {
152
+ name = name.toLowerCase();
153
+ return this.#names.has(name);
154
+ }
155
+ /**
156
+ * Retrieve the {@link DnssdName} for {@link name}.
157
+ *
158
+ * This will create the name if it does not exist, and if you do not add an observer then it will not automatically
159
+ * delete if there are no records. So if you may not use the record test for existence with {@link has} first.
160
+ */
161
+ get(qname) {
162
+ let name = this.maybeGet(qname);
163
+ if (name === void 0) {
164
+ name = new import_DnssdName.DnssdName(qname, this.#nameContext);
165
+ this.#names.set(qname, name);
166
+ }
167
+ return name;
168
+ }
169
+ /**
170
+ * Retrieve the {@link DnssdName} if known.
171
+ */
172
+ maybeGet(name) {
173
+ name = name.toLowerCase();
174
+ return this.#names.get(name);
175
+ }
176
+ /**
177
+ * Wait for all workers and close all names.
178
+ */
179
+ async close() {
180
+ var _stack = [];
181
+ try {
182
+ const _closing = __using(_stack, this.#lifetime.closing());
183
+ this.#observers.close();
184
+ await this.#expiration.close();
185
+ for (const name of this.#names.values()) {
186
+ await name.close();
187
+ this.#names.delete(name.qname);
188
+ }
189
+ await this.#solicitor.close();
190
+ } catch (_) {
191
+ var _error = _, _hasError = true;
192
+ } finally {
193
+ __callDispose(_stack, _error, _hasError);
194
+ }
195
+ }
196
+ get socket() {
197
+ return this.#socket;
198
+ }
199
+ /**
200
+ * Emits when a {@link DnssdName} is first discovered.
201
+ */
202
+ get discovered() {
203
+ return this.#discovered;
204
+ }
205
+ /**
206
+ * Shared solicitor.
207
+ *
208
+ * We offer solicitation in this object so there is not redundant solicitation across interested parties.
209
+ */
210
+ get solicitor() {
211
+ return this.#solicitor;
212
+ }
213
+ get entropy() {
214
+ return this.#entropy;
215
+ }
216
+ #nameContext = {
217
+ delete: (name) => {
218
+ const known = this.#names.get(name.qname);
219
+ if (known === name) {
220
+ this.#names.delete(name.qname);
221
+ }
222
+ },
223
+ registerForExpiration: (record) => {
224
+ this.#expiration.add(record);
225
+ },
226
+ unregisterForExpiration: (record) => {
227
+ this.#expiration.delete(record);
228
+ }
229
+ };
230
+ }
231
+ ((DnssdNames2) => {
232
+ DnssdNames2.defaults = {
233
+ goodbyeProtectionWindow: (0, import_TimeUnit.Seconds)(1),
234
+ minTtl: (0, import_TimeUnit.Seconds)(15)
235
+ // This is the value that Apple uses
236
+ };
237
+ })(DnssdNames || (DnssdNames = {}));
238
+ //# sourceMappingURL=DnssdNames.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/DnssdNames.ts"],
4
+ "mappings": "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",
5
+ "names": ["DnssdNames"]
6
+ }