@openpalm/ui 0.13.0-beta.2 → 0.13.0-beta.4

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 (410) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/{11.BF9IcRAW.css → 11.D7iX4s2y.css} +1 -1
  3. package/build/client/_app/immutable/assets/11.D7iX4s2y.css.br +0 -0
  4. package/build/client/_app/immutable/assets/11.D7iX4s2y.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css +1 -0
  6. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.br +0 -0
  7. package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/{9.vqGkbIg9.css → 9.DeeTO7Ju.css} +1 -1
  9. package/build/client/_app/immutable/assets/9.DeeTO7Ju.css.br +0 -0
  10. package/build/client/_app/immutable/assets/{9.vqGkbIg9.css.gz → 9.DeeTO7Ju.css.gz} +0 -0
  11. package/build/client/_app/immutable/chunks/{BoOBAdGl.js → BKLMDjUE.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BKLMDjUE.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BKLMDjUE.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BNJvGRjX.js +3 -0
  15. package/build/client/_app/immutable/chunks/BNJvGRjX.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BNJvGRjX.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{9mRSvTWj.js → C5iiO0W9.js} +1 -1
  18. package/build/client/_app/immutable/chunks/C5iiO0W9.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/C5iiO0W9.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/C718MJXm.js +5 -0
  21. package/build/client/_app/immutable/chunks/C718MJXm.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/C718MJXm.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{DSs95sLz.js → CBV2kBE1.js} +1 -1
  24. package/build/client/_app/immutable/chunks/CBV2kBE1.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/CBV2kBE1.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/DD22UF1L.js +1 -0
  27. package/build/client/_app/immutable/chunks/DD22UF1L.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/DD22UF1L.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{BApqEZP1.js → DWtm_qwJ.js} +1 -1
  30. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/DWtm_qwJ.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/ccncQf9O.js +1 -0
  33. package/build/client/_app/immutable/chunks/ccncQf9O.js.br +2 -0
  34. package/build/client/_app/immutable/chunks/ccncQf9O.js.gz +0 -0
  35. package/build/client/_app/immutable/entry/{app.DZwy1Y3W.js → app.DAzfwrA7.js} +2 -2
  36. package/build/client/_app/immutable/entry/app.DAzfwrA7.js.br +0 -0
  37. package/build/client/_app/immutable/entry/app.DAzfwrA7.js.gz +0 -0
  38. package/build/client/_app/immutable/entry/start.7FiodlpO.js +1 -0
  39. package/build/client/_app/immutable/entry/start.7FiodlpO.js.br +1 -0
  40. package/build/client/_app/immutable/entry/start.7FiodlpO.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{1.Bxihn5f1.js → 1.BYTQ4CJf.js} +1 -1
  42. package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.br +2 -0
  43. package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{10.BZ76_WLP.js → 10.CHYaVWP2.js} +1 -1
  45. package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js +8 -0
  48. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{4.D-CwW2PH.js → 4.n8OmCUUb.js} +1 -1
  51. package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/{5.BbStivMI.js → 5.DgnQcqeL.js} +1 -1
  54. package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/{6.BKVgKxKO.js → 6.RedvZarw.js} +1 -1
  57. package/build/client/_app/immutable/nodes/6.RedvZarw.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/6.RedvZarw.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/7.BqgE43w1.js +14 -0
  60. package/build/client/_app/immutable/nodes/7.BqgE43w1.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/7.BqgE43w1.js.gz +0 -0
  62. package/build/client/_app/immutable/nodes/{9.BdeFVi2a.js → 9.CQfpYNnj.js} +65 -65
  63. package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.br +0 -0
  64. package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.gz +0 -0
  65. package/build/client/_app/version.json +1 -1
  66. package/build/client/_app/version.json.br +1 -1
  67. package/build/client/_app/version.json.gz +0 -0
  68. package/build/server/chunks/{0-C7zzjezl.js → 0-CxqNryz-.js} +5 -5
  69. package/build/server/chunks/{0-C7zzjezl.js.map → 0-CxqNryz-.js.map} +1 -1
  70. package/build/server/chunks/1-Dxk_eEPL.js +9 -0
  71. package/build/server/chunks/{1-Ceq9WsUZ.js.map → 1-Dxk_eEPL.js.map} +1 -1
  72. package/build/server/chunks/{10-DbLLQ-Uy.js → 10-DcTjX0aZ.js} +3 -3
  73. package/build/server/chunks/{10-DbLLQ-Uy.js.map → 10-DcTjX0aZ.js.map} +1 -1
  74. package/build/server/chunks/11-Ddav4pvQ.js +9 -0
  75. package/build/server/chunks/11-Ddav4pvQ.js.map +1 -0
  76. package/build/server/chunks/{3-CAH3EmhU.js → 3-xtalXCwW.js} +8 -8
  77. package/build/server/chunks/{3-CAH3EmhU.js.map → 3-xtalXCwW.js.map} +1 -1
  78. package/build/server/chunks/4-CEASlyNx.js +9 -0
  79. package/build/server/chunks/{4-DxmFWVQJ.js.map → 4-CEASlyNx.js.map} +1 -1
  80. package/build/server/chunks/{5-CQ9cELI7.js → 5-3gkFDIAU.js} +3 -3
  81. package/build/server/chunks/{5-CQ9cELI7.js.map → 5-3gkFDIAU.js.map} +1 -1
  82. package/build/server/chunks/{6-B-hnmc7F.js → 6-BSR29JnK.js} +3 -3
  83. package/build/server/chunks/{6-B-hnmc7F.js.map → 6-BSR29JnK.js.map} +1 -1
  84. package/build/server/chunks/7-gx5m5R1u.js +9 -0
  85. package/build/server/chunks/{7-BE6BzHsh.js.map → 7-gx5m5R1u.js.map} +1 -1
  86. package/build/server/chunks/{9-BWzd_hmh.js → 9-BKXk6mfI.js} +7 -7
  87. package/build/server/chunks/9-BKXk6mfI.js.map +1 -0
  88. package/build/server/chunks/{ChatNavbar-BonHVqfi.js → ChatNavbar-D2J3UbpW.js} +5 -5
  89. package/build/server/chunks/{ChatNavbar-BonHVqfi.js.map → ChatNavbar-D2J3UbpW.js.map} +1 -1
  90. package/build/server/chunks/{IconActivity-BVrMC8FH.js → IconActivity-DrgUhxxi.js} +2 -2
  91. package/build/server/chunks/{IconActivity-BVrMC8FH.js.map → IconActivity-DrgUhxxi.js.map} +1 -1
  92. package/build/server/chunks/{IconServer-fOHYHe-O.js → IconServer-jRvjNs7I.js} +2 -2
  93. package/build/server/chunks/{IconServer-fOHYHe-O.js.map → IconServer-jRvjNs7I.js.map} +1 -1
  94. package/build/server/chunks/{_page.svelte-BWNjxN63.js → _page.svelte--qXsMm-T.js} +23 -10
  95. package/build/server/chunks/_page.svelte--qXsMm-T.js.map +1 -0
  96. package/build/server/chunks/{_page.svelte-Bovrn7AQ.js → _page.svelte-BgzOKhmH.js} +4 -4
  97. package/build/server/chunks/{_page.svelte-Bovrn7AQ.js.map → _page.svelte-BgzOKhmH.js.map} +1 -1
  98. package/build/server/chunks/{_page.svelte-LsoJ7E5M.js → _page.svelte-BnZ0Fgkw.js} +13 -10
  99. package/build/server/chunks/_page.svelte-BnZ0Fgkw.js.map +1 -0
  100. package/build/server/chunks/{_page.svelte-BXeh8wzh.js → _page.svelte-C36XsgXY.js} +146 -13
  101. package/build/server/chunks/_page.svelte-C36XsgXY.js.map +1 -0
  102. package/build/server/chunks/{_page.svelte-COf36oAu.js → _page.svelte-Cc-OjlMF.js} +8 -8
  103. package/build/server/chunks/{_page.svelte-COf36oAu.js.map → _page.svelte-Cc-OjlMF.js.map} +1 -1
  104. package/build/server/chunks/{_page.svelte-DkZsmNYc.js → _page.svelte-DGQP3UIP.js} +3 -3
  105. package/build/server/chunks/{_page.svelte-DkZsmNYc.js.map → _page.svelte-DGQP3UIP.js.map} +1 -1
  106. package/build/server/chunks/{_page.svelte-0Rf024eH.js → _page.svelte-DGsMxwfZ.js} +6 -6
  107. package/build/server/chunks/{_page.svelte-0Rf024eH.js.map → _page.svelte-DGsMxwfZ.js.map} +1 -1
  108. package/build/server/chunks/{_server.ts-DTQe-U35.js → _server.ts-0T6OWJc0.js} +8 -8
  109. package/build/server/chunks/{_server.ts-DTQe-U35.js.map → _server.ts-0T6OWJc0.js.map} +1 -1
  110. package/build/server/chunks/{_server.ts-BeP_sHqj.js → _server.ts-4NsYfdU1.js} +4 -4
  111. package/build/server/chunks/{_server.ts-BeP_sHqj.js.map → _server.ts-4NsYfdU1.js.map} +1 -1
  112. package/build/server/chunks/{_server.ts-D-6mgHZB.js → _server.ts-B-9mLZog.js} +8 -8
  113. package/build/server/chunks/{_server.ts-D-6mgHZB.js.map → _server.ts-B-9mLZog.js.map} +1 -1
  114. package/build/server/chunks/{_server.ts-DdocuErM.js → _server.ts-B3MvWwzq.js} +9 -9
  115. package/build/server/chunks/{_server.ts-DdocuErM.js.map → _server.ts-B3MvWwzq.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-CjPhaG_g.js → _server.ts-B64JQevs.js} +13 -9
  117. package/build/server/chunks/_server.ts-B64JQevs.js.map +1 -0
  118. package/build/server/chunks/{_server.ts-C83FzZfP.js → _server.ts-BEhHNijd.js} +8 -8
  119. package/build/server/chunks/{_server.ts-C83FzZfP.js.map → _server.ts-BEhHNijd.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-Bi0rRbcw.js → _server.ts-BJqxSP1B.js} +4 -4
  121. package/build/server/chunks/{_server.ts-Bi0rRbcw.js.map → _server.ts-BJqxSP1B.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-DE-c3Y5D.js → _server.ts-BK4NRqMj.js} +9 -9
  123. package/build/server/chunks/{_server.ts-DE-c3Y5D.js.map → _server.ts-BK4NRqMj.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-CQHkw9ni.js → _server.ts-BN6ghyoO.js} +8 -8
  125. package/build/server/chunks/{_server.ts-CQHkw9ni.js.map → _server.ts-BN6ghyoO.js.map} +1 -1
  126. package/build/server/chunks/{_server.ts-Dy9l5NMO.js → _server.ts-BNoq5yoF.js} +8 -8
  127. package/build/server/chunks/{_server.ts-Dy9l5NMO.js.map → _server.ts-BNoq5yoF.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-C8eCqXP6.js → _server.ts-BRvNe0fS.js} +8 -8
  129. package/build/server/chunks/{_server.ts-C8eCqXP6.js.map → _server.ts-BRvNe0fS.js.map} +1 -1
  130. package/build/server/chunks/{_server.ts-BVMpHE3G.js → _server.ts-BWcxJLLV.js} +8 -8
  131. package/build/server/chunks/{_server.ts-BVMpHE3G.js.map → _server.ts-BWcxJLLV.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-xPuEhFJO.js → _server.ts-B_c9x_NC.js} +9 -9
  133. package/build/server/chunks/{_server.ts-xPuEhFJO.js.map → _server.ts-B_c9x_NC.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-D7X0LmkL.js → _server.ts-BbyfVT-W.js} +8 -8
  135. package/build/server/chunks/{_server.ts-D7X0LmkL.js.map → _server.ts-BbyfVT-W.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-DH3Uc_0m.js → _server.ts-Bl1EtTKF.js} +8 -8
  137. package/build/server/chunks/{_server.ts-DH3Uc_0m.js.map → _server.ts-Bl1EtTKF.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-CcoaYeM8.js → _server.ts-Bm2nv-W4.js} +8 -8
  139. package/build/server/chunks/{_server.ts-CcoaYeM8.js.map → _server.ts-Bm2nv-W4.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-C9F005zM.js → _server.ts-BrwSj7L5.js} +8 -8
  141. package/build/server/chunks/{_server.ts-C9F005zM.js.map → _server.ts-BrwSj7L5.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-BARmSEZ2.js → _server.ts-BuGFzejC.js} +8 -8
  143. package/build/server/chunks/{_server.ts-BARmSEZ2.js.map → _server.ts-BuGFzejC.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-2-50j5S8.js → _server.ts-BvOQbLFG.js} +8 -8
  145. package/build/server/chunks/{_server.ts-2-50j5S8.js.map → _server.ts-BvOQbLFG.js.map} +1 -1
  146. package/build/server/chunks/{_server.ts-DdoJFQaX.js → _server.ts-Bvb6lo7O.js} +10 -10
  147. package/build/server/chunks/{_server.ts-DdoJFQaX.js.map → _server.ts-Bvb6lo7O.js.map} +1 -1
  148. package/build/server/chunks/{_server.ts-JO0zy17P.js → _server.ts-C0rcwOPL.js} +19 -12
  149. package/build/server/chunks/_server.ts-C0rcwOPL.js.map +1 -0
  150. package/build/server/chunks/{_server.ts-COcv1puW.js → _server.ts-C2qIUpva.js} +9 -9
  151. package/build/server/chunks/{_server.ts-COcv1puW.js.map → _server.ts-C2qIUpva.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-Dl-Rn5Ku.js → _server.ts-C31rtz7B.js} +8 -8
  153. package/build/server/chunks/{_server.ts-Dl-Rn5Ku.js.map → _server.ts-C31rtz7B.js.map} +1 -1
  154. package/build/server/chunks/{_server.ts-BsPu8Fny.js → _server.ts-C6GZY_v3.js} +8 -8
  155. package/build/server/chunks/{_server.ts-BsPu8Fny.js.map → _server.ts-C6GZY_v3.js.map} +1 -1
  156. package/build/server/chunks/{_server.ts-2Z0JYuCr.js → _server.ts-C6r0d7SR.js} +8 -8
  157. package/build/server/chunks/{_server.ts-2Z0JYuCr.js.map → _server.ts-C6r0d7SR.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-6EuPIrt7.js → _server.ts-C900vqOm.js} +8 -8
  159. package/build/server/chunks/{_server.ts-6EuPIrt7.js.map → _server.ts-C900vqOm.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-Ddqhnr_7.js → _server.ts-CCdP5Eqx.js} +8 -8
  161. package/build/server/chunks/{_server.ts-Ddqhnr_7.js.map → _server.ts-CCdP5Eqx.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-BEaiuN8Q.js → _server.ts-CDJ7WouZ.js} +8 -8
  163. package/build/server/chunks/{_server.ts-BEaiuN8Q.js.map → _server.ts-CDJ7WouZ.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-LokXM9hH.js → _server.ts-CFNNoZVF.js} +8 -8
  165. package/build/server/chunks/{_server.ts-LokXM9hH.js.map → _server.ts-CFNNoZVF.js.map} +1 -1
  166. package/build/server/chunks/{_server.ts-BjjicBDy.js → _server.ts-CGE7AyDg.js} +8 -8
  167. package/build/server/chunks/{_server.ts-BjjicBDy.js.map → _server.ts-CGE7AyDg.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-C-tvKaFE.js → _server.ts-CGggA6h4.js} +8 -8
  169. package/build/server/chunks/{_server.ts-C-tvKaFE.js.map → _server.ts-CGggA6h4.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-CCmsGl_u.js → _server.ts-CIReEz3d.js} +8 -8
  171. package/build/server/chunks/{_server.ts-CCmsGl_u.js.map → _server.ts-CIReEz3d.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-DJqSQny9.js → _server.ts-CMO7LL0e.js} +4 -4
  173. package/build/server/chunks/{_server.ts-DJqSQny9.js.map → _server.ts-CMO7LL0e.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-D6wuFDe4.js → _server.ts-CPYtZ7sE.js} +16 -10
  175. package/build/server/chunks/_server.ts-CPYtZ7sE.js.map +1 -0
  176. package/build/server/chunks/{_server.ts-DdHx6Xig.js → _server.ts-CR85H0KR.js} +8 -8
  177. package/build/server/chunks/{_server.ts-DdHx6Xig.js.map → _server.ts-CR85H0KR.js.map} +1 -1
  178. package/build/server/chunks/{_server.ts-DsVbuYhj.js → _server.ts-CRvbt_Ny.js} +9 -9
  179. package/build/server/chunks/{_server.ts-DsVbuYhj.js.map → _server.ts-CRvbt_Ny.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-BTPbwN92.js → _server.ts-CS8n28qm.js} +8 -8
  181. package/build/server/chunks/{_server.ts-BTPbwN92.js.map → _server.ts-CS8n28qm.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-BA11l9Z1.js → _server.ts-CWYonOeQ.js} +8 -8
  183. package/build/server/chunks/{_server.ts-BA11l9Z1.js.map → _server.ts-CWYonOeQ.js.map} +1 -1
  184. package/build/server/chunks/{_server.ts-CfuLncMW.js → _server.ts-CZ83fA4I.js} +8 -8
  185. package/build/server/chunks/{_server.ts-CfuLncMW.js.map → _server.ts-CZ83fA4I.js.map} +1 -1
  186. package/build/server/chunks/{_server.ts-BUDMOZOz.js → _server.ts-Cfm_KDhO.js} +9 -9
  187. package/build/server/chunks/{_server.ts-BUDMOZOz.js.map → _server.ts-Cfm_KDhO.js.map} +1 -1
  188. package/build/server/chunks/{_server.ts-42ZGRWhn.js → _server.ts-CiBxLSg4.js} +8 -8
  189. package/build/server/chunks/{_server.ts-42ZGRWhn.js.map → _server.ts-CiBxLSg4.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-D9yQyMbZ.js → _server.ts-ClrrzZI6.js} +8 -8
  191. package/build/server/chunks/{_server.ts-D9yQyMbZ.js.map → _server.ts-ClrrzZI6.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-BKWx8K8U.js → _server.ts-Cm3uzCwu.js} +16 -10
  193. package/build/server/chunks/_server.ts-Cm3uzCwu.js.map +1 -0
  194. package/build/server/chunks/{_server.ts-Dcf84tjG.js → _server.ts-Co4yATq8.js} +4 -4
  195. package/build/server/chunks/{_server.ts-Dcf84tjG.js.map → _server.ts-Co4yATq8.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-pRYFJihh.js → _server.ts-CqX61boo.js} +9 -9
  197. package/build/server/chunks/{_server.ts-pRYFJihh.js.map → _server.ts-CqX61boo.js.map} +1 -1
  198. package/build/server/chunks/{_server.ts-DKYXeaKr.js → _server.ts-CsP1RzbQ.js} +8 -8
  199. package/build/server/chunks/{_server.ts-DKYXeaKr.js.map → _server.ts-CsP1RzbQ.js.map} +1 -1
  200. package/build/server/chunks/{_server.ts-Dy65kWxL.js → _server.ts-CtcAZ3lM.js} +9 -9
  201. package/build/server/chunks/{_server.ts-Dy65kWxL.js.map → _server.ts-CtcAZ3lM.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-CGZizh2V.js → _server.ts-D-Vv5Qkp.js} +8 -8
  203. package/build/server/chunks/{_server.ts-CGZizh2V.js.map → _server.ts-D-Vv5Qkp.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-BLn_cTkK.js → _server.ts-D0EyuOqv.js} +8 -8
  205. package/build/server/chunks/{_server.ts-BLn_cTkK.js.map → _server.ts-D0EyuOqv.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-BR24J2uB.js → _server.ts-D2-CHx_d.js} +9 -9
  207. package/build/server/chunks/{_server.ts-BR24J2uB.js.map → _server.ts-D2-CHx_d.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-DH343hlx.js → _server.ts-D3skirMd.js} +9 -9
  209. package/build/server/chunks/{_server.ts-DH343hlx.js.map → _server.ts-D3skirMd.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-BjD0Uf0U.js → _server.ts-D5Xa36tp.js} +8 -8
  211. package/build/server/chunks/{_server.ts-BjD0Uf0U.js.map → _server.ts-D5Xa36tp.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-DnczK3Pw.js → _server.ts-D8iJaYan.js} +6 -6
  213. package/build/server/chunks/{_server.ts-DnczK3Pw.js.map → _server.ts-D8iJaYan.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-D5F-pzp2.js → _server.ts-DD4ouya8.js} +8 -8
  215. package/build/server/chunks/{_server.ts-D5F-pzp2.js.map → _server.ts-DD4ouya8.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-CIv0zM75.js → _server.ts-DHjMyNwJ.js} +9 -9
  217. package/build/server/chunks/{_server.ts-CIv0zM75.js.map → _server.ts-DHjMyNwJ.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-BhAp0vvt.js → _server.ts-DM8N7von.js} +8 -8
  219. package/build/server/chunks/{_server.ts-BhAp0vvt.js.map → _server.ts-DM8N7von.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-BJv74_DI.js → _server.ts-DNVQMHzn.js} +8 -8
  221. package/build/server/chunks/{_server.ts-BJv74_DI.js.map → _server.ts-DNVQMHzn.js.map} +1 -1
  222. package/build/server/chunks/{_server.ts-CX_CwTW0.js → _server.ts-DObIzyoT.js} +5 -5
  223. package/build/server/chunks/{_server.ts-CX_CwTW0.js.map → _server.ts-DObIzyoT.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-CMAepV0J.js → _server.ts-DPfGAMG4.js} +8 -8
  225. package/build/server/chunks/{_server.ts-CMAepV0J.js.map → _server.ts-DPfGAMG4.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-Ds62LEMU.js → _server.ts-D_93w1gb.js} +10 -10
  227. package/build/server/chunks/{_server.ts-Ds62LEMU.js.map → _server.ts-D_93w1gb.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-CmUo0zla.js → _server.ts-DebCCwjH.js} +9 -9
  229. package/build/server/chunks/_server.ts-DebCCwjH.js.map +1 -0
  230. package/build/server/chunks/_server.ts-DjAGbGD-.js +964 -0
  231. package/build/server/chunks/_server.ts-DjAGbGD-.js.map +1 -0
  232. package/build/server/chunks/{_server.ts-DrGzrygC.js → _server.ts-DmNziNap.js} +9 -9
  233. package/build/server/chunks/{_server.ts-DrGzrygC.js.map → _server.ts-DmNziNap.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-CJVwtNhA.js → _server.ts-DrxBKPKB.js} +4 -4
  235. package/build/server/chunks/{_server.ts-CJVwtNhA.js.map → _server.ts-DrxBKPKB.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-BJrYBXpY.js → _server.ts-DuOVzmV5.js} +8 -8
  237. package/build/server/chunks/{_server.ts-BJrYBXpY.js.map → _server.ts-DuOVzmV5.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-6muCM4Nz.js → _server.ts-Ey4BEvRd.js} +9 -9
  239. package/build/server/chunks/{_server.ts-6muCM4Nz.js.map → _server.ts-Ey4BEvRd.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-Dj6nwJgl.js → _server.ts-KHK30kUK.js} +11 -11
  241. package/build/server/chunks/{_server.ts-Dj6nwJgl.js.map → _server.ts-KHK30kUK.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-CnQ4hgIT.js → _server.ts-Kp3wrrbF.js} +9 -9
  243. package/build/server/chunks/{_server.ts-CnQ4hgIT.js.map → _server.ts-Kp3wrrbF.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-D-Rf8If2.js → _server.ts-LHKCcBS1.js} +12 -10
  245. package/build/server/chunks/_server.ts-LHKCcBS1.js.map +1 -0
  246. package/build/server/chunks/{_server.ts-DQozxLn6.js → _server.ts-MZYYoM8z.js} +8 -8
  247. package/build/server/chunks/{_server.ts-DQozxLn6.js.map → _server.ts-MZYYoM8z.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-CnrWBkQ7.js → _server.ts-QSEYZqU0.js} +11 -9
  249. package/build/server/chunks/_server.ts-QSEYZqU0.js.map +1 -0
  250. package/build/server/chunks/{_server.ts-CspCDw2x.js → _server.ts-Sx6mXrwK.js} +8 -8
  251. package/build/server/chunks/{_server.ts-CspCDw2x.js.map → _server.ts-Sx6mXrwK.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-CS2LQKMb.js → _server.ts-SxcH-cms.js} +9 -9
  253. package/build/server/chunks/{_server.ts-CS2LQKMb.js.map → _server.ts-SxcH-cms.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-Dq4RvC5F.js → _server.ts-TTSjZaYY.js} +8 -8
  255. package/build/server/chunks/{_server.ts-Dq4RvC5F.js.map → _server.ts-TTSjZaYY.js.map} +1 -1
  256. package/build/server/chunks/{_server.ts-DHeSwA7p.js → _server.ts-V6a8P9IB.js} +8 -8
  257. package/build/server/chunks/{_server.ts-DHeSwA7p.js.map → _server.ts-V6a8P9IB.js.map} +1 -1
  258. package/build/server/chunks/{_server.ts-B28SfXaZ.js → _server.ts-XEVuthfs.js} +8 -8
  259. package/build/server/chunks/{_server.ts-B28SfXaZ.js.map → _server.ts-XEVuthfs.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-BRdjsMSd.js → _server.ts-eF4CAfpP.js} +8 -8
  261. package/build/server/chunks/{_server.ts-BRdjsMSd.js.map → _server.ts-eF4CAfpP.js.map} +1 -1
  262. package/build/server/chunks/{_server.ts-CG60Cdqf.js → _server.ts-eov7yZvT.js} +10 -10
  263. package/build/server/chunks/{_server.ts-CG60Cdqf.js.map → _server.ts-eov7yZvT.js.map} +1 -1
  264. package/build/server/chunks/{_server.ts-D7VWMcNm.js → _server.ts-jB_3zRrF.js} +9 -9
  265. package/build/server/chunks/{_server.ts-D7VWMcNm.js.map → _server.ts-jB_3zRrF.js.map} +1 -1
  266. package/build/server/chunks/{_server.ts-Ba8xSIQn.js → _server.ts-p16c9Uzl.js} +8 -8
  267. package/build/server/chunks/{_server.ts-Ba8xSIQn.js.map → _server.ts-p16c9Uzl.js.map} +1 -1
  268. package/build/server/chunks/{_server.ts-DJCIu42O.js → _server.ts-p4v6noBK.js} +6 -6
  269. package/build/server/chunks/{_server.ts-DJCIu42O.js.map → _server.ts-p4v6noBK.js.map} +1 -1
  270. package/build/server/chunks/{_server.ts-BWO1Eoro.js → _server.ts-qgPpNGL8.js} +8 -8
  271. package/build/server/chunks/{_server.ts-BWO1Eoro.js.map → _server.ts-qgPpNGL8.js.map} +1 -1
  272. package/build/server/chunks/{_server.ts-DM9EsKQc.js → _server.ts-sdkTYy6A.js} +8 -8
  273. package/build/server/chunks/{_server.ts-DM9EsKQc.js.map → _server.ts-sdkTYy6A.js.map} +1 -1
  274. package/build/server/chunks/{_server.ts-BBewn2kP.js → _server.ts-st_pTUHI.js} +8 -8
  275. package/build/server/chunks/{_server.ts-BBewn2kP.js.map → _server.ts-st_pTUHI.js.map} +1 -1
  276. package/build/server/chunks/{_server.ts-BA7wxHYg.js → _server.ts-yWyCj-R5.js} +8 -8
  277. package/build/server/chunks/{_server.ts-BA7wxHYg.js.map → _server.ts-yWyCj-R5.js.map} +1 -1
  278. package/build/server/chunks/{_server.ts-CncBUb14.js → _server.ts-zDEENUSw.js} +8 -8
  279. package/build/server/chunks/{_server.ts-CncBUb14.js.map → _server.ts-zDEENUSw.js.map} +1 -1
  280. package/build/server/chunks/{addon-helpers-Cgg8lPxe.js → addon-helpers-TpOYibOg.js} +3 -3
  281. package/build/server/chunks/{addon-helpers-Cgg8lPxe.js.map → addon-helpers-TpOYibOg.js.map} +1 -1
  282. package/build/server/chunks/{akm-5HN45xWY.js → akm-Bvt9WaTk.js} +3 -3
  283. package/build/server/chunks/{akm-5HN45xWY.js.map → akm-Bvt9WaTk.js.map} +1 -1
  284. package/build/server/chunks/{catalog-7z8dgrJF.js → catalog-w0L1ZRPK.js} +5 -5
  285. package/build/server/chunks/{catalog-7z8dgrJF.js.map → catalog-w0L1ZRPK.js.map} +1 -1
  286. package/build/server/chunks/chunk-DOvWTNp_.js +37 -0
  287. package/build/server/chunks/chunk-DOvWTNp_.js.map +1 -0
  288. package/build/server/chunks/{client-D2lMniPd.js → client-ClRLlB_c.js} +3 -3
  289. package/build/server/chunks/{client-D2lMniPd.js.map → client-ClRLlB_c.js.map} +1 -1
  290. package/build/server/chunks/{compose-args2-BFdWixAZ.js → compose-args2-DiDeQtPu.js} +4 -4
  291. package/build/server/chunks/compose-args2-DiDeQtPu.js.map +1 -0
  292. package/build/server/chunks/{config-I5hb-W80.js → config-Jiy06DlE.js} +2 -2
  293. package/build/server/chunks/{config-I5hb-W80.js.map → config-Jiy06DlE.js.map} +1 -1
  294. package/build/server/chunks/{connections-api-NkotVLIl.js → connections-api-J-nrQ1KK.js} +2 -2
  295. package/build/server/chunks/{connections-api-NkotVLIl.js.map → connections-api-J-nrQ1KK.js.map} +1 -1
  296. package/build/server/chunks/{constants-B7J5DDaI.js → constants-1vPYIIwP.js} +2 -2
  297. package/build/server/chunks/{constants-B7J5DDaI.js.map → constants-1vPYIIwP.js.map} +1 -1
  298. package/build/server/chunks/{docker2-HZnACjh6.js → docker2-oBEn_Si9.js} +4 -4
  299. package/build/server/chunks/docker2-oBEn_Si9.js.map +1 -0
  300. package/build/server/chunks/{docker3-Dj9Pc_Pt.js → docker3-Dn-Mm2cT.js} +2 -2
  301. package/build/server/chunks/{docker3-Dj9Pc_Pt.js.map → docker3-Dn-Mm2cT.js.map} +1 -1
  302. package/build/server/chunks/{endpoints-B9ePqrMw.js → endpoints-WTxemTcn.js} +87 -12
  303. package/build/server/chunks/endpoints-WTxemTcn.js.map +1 -0
  304. package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
  305. package/build/server/chunks/{error.svelte-DGngrZ2V.js → error.svelte-C2CWdm9K.js} +5 -5
  306. package/build/server/chunks/{error.svelte-DGngrZ2V.js.map → error.svelte-C2CWdm9K.js.map} +1 -1
  307. package/build/server/chunks/{features-0lgyQreD.js → features-BE2x1a_a.js} +5 -3
  308. package/build/server/chunks/features-BE2x1a_a.js.map +1 -0
  309. package/build/server/chunks/{helpers-q4Ng8QTq.js → helpers-CfpNg3il.js} +15 -10
  310. package/build/server/chunks/helpers-CfpNg3il.js.map +1 -0
  311. package/build/server/chunks/{hooks.server-BTXqUhpH.js → hooks.server-DEVjSu3V.js} +18 -22
  312. package/build/server/chunks/hooks.server-DEVjSu3V.js.map +1 -0
  313. package/build/server/chunks/{http-jBNJXVHg.js → http-WP5cji9-.js} +3 -6
  314. package/build/server/chunks/http-WP5cji9-.js.map +1 -0
  315. package/build/server/chunks/{internal-G-Uk-kCA.js → internal-D9Kp0SbJ.js} +3 -3
  316. package/build/server/chunks/{internal-G-Uk-kCA.js.map → internal-D9Kp0SbJ.js.map} +1 -1
  317. package/build/server/chunks/{landing-BR5KUuDz.js → landing-DKXNel0Q.js} +5 -5
  318. package/build/server/chunks/{landing-BR5KUuDz.js.map → landing-DKXNel0Q.js.map} +1 -1
  319. package/build/server/chunks/network-preset-CJ1RRnki.js +431 -0
  320. package/build/server/chunks/network-preset-CJ1RRnki.js.map +1 -0
  321. package/build/server/chunks/{paths-tzRSDsKc.js → paths-DRVrMQrI.js} +2 -2
  322. package/build/server/chunks/{paths-tzRSDsKc.js.map → paths-DRVrMQrI.js.map} +1 -1
  323. package/build/server/chunks/{session-cookie-qHDuQboc.js → session-cookie-CDynAOx3.js} +2 -2
  324. package/build/server/chunks/{session-cookie-qHDuQboc.js.map → session-cookie-CDynAOx3.js.map} +1 -1
  325. package/build/server/chunks/{setup-deploy-DleJTifu.js → setup-deploy-CRW2KpZR.js} +2 -2
  326. package/build/server/chunks/{setup-deploy-DleJTifu.js.map → setup-deploy-CRW2KpZR.js.map} +1 -1
  327. package/build/server/chunks/{src-BwQUi60U.js → src-CQ2F7hgb.js} +2621 -157
  328. package/build/server/chunks/src-CQ2F7hgb.js.map +1 -0
  329. package/build/server/chunks/{state-Dm7U51xT.js → state-CsIDHNPN.js} +2 -2
  330. package/build/server/chunks/{state-Dm7U51xT.js.map → state-CsIDHNPN.js.map} +1 -1
  331. package/build/server/chunks/{state2-BhKHITEo.js → state2-jnbE3tAu.js} +2 -2
  332. package/build/server/chunks/{state2-BhKHITEo.js.map → state2-jnbE3tAu.js.map} +1 -1
  333. package/build/server/index.js +2 -2
  334. package/build/server/manifest.js +103 -96
  335. package/build/server/manifest.js.map +1 -1
  336. package/package.json +4 -3
  337. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
  338. package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
  339. package/build/client/_app/immutable/assets/7.CEu3B1cr.css +0 -1
  340. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
  341. package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
  342. package/build/client/_app/immutable/assets/9.vqGkbIg9.css.br +0 -0
  343. package/build/client/_app/immutable/chunks/9mRSvTWj.js.br +0 -0
  344. package/build/client/_app/immutable/chunks/9mRSvTWj.js.gz +0 -0
  345. package/build/client/_app/immutable/chunks/BApqEZP1.js.br +0 -0
  346. package/build/client/_app/immutable/chunks/BApqEZP1.js.gz +0 -0
  347. package/build/client/_app/immutable/chunks/B_Sgy7qx.js +0 -1
  348. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.br +0 -2
  349. package/build/client/_app/immutable/chunks/B_Sgy7qx.js.gz +0 -0
  350. package/build/client/_app/immutable/chunks/B_jhBV5Z.js +0 -5
  351. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.br +0 -0
  352. package/build/client/_app/immutable/chunks/B_jhBV5Z.js.gz +0 -0
  353. package/build/client/_app/immutable/chunks/Be7qat4r.js +0 -3
  354. package/build/client/_app/immutable/chunks/Be7qat4r.js.br +0 -0
  355. package/build/client/_app/immutable/chunks/Be7qat4r.js.gz +0 -0
  356. package/build/client/_app/immutable/chunks/BoOBAdGl.js.br +0 -0
  357. package/build/client/_app/immutable/chunks/BoOBAdGl.js.gz +0 -0
  358. package/build/client/_app/immutable/chunks/DSs95sLz.js.br +0 -0
  359. package/build/client/_app/immutable/chunks/DSs95sLz.js.gz +0 -0
  360. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.br +0 -0
  361. package/build/client/_app/immutable/entry/app.DZwy1Y3W.js.gz +0 -0
  362. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js +0 -1
  363. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.br +0 -1
  364. package/build/client/_app/immutable/entry/start.C0ic7Ewp.js.gz +0 -0
  365. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.br +0 -0
  366. package/build/client/_app/immutable/nodes/1.Bxihn5f1.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.br +0 -0
  368. package/build/client/_app/immutable/nodes/10.BZ76_WLP.js.gz +0 -0
  369. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js +0 -6
  370. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.br +0 -0
  371. package/build/client/_app/immutable/nodes/11.Bzf3G5G0.js.gz +0 -0
  372. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.br +0 -0
  373. package/build/client/_app/immutable/nodes/4.D-CwW2PH.js.gz +0 -0
  374. package/build/client/_app/immutable/nodes/5.BbStivMI.js.br +0 -0
  375. package/build/client/_app/immutable/nodes/5.BbStivMI.js.gz +0 -0
  376. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.br +0 -0
  377. package/build/client/_app/immutable/nodes/6.BKVgKxKO.js.gz +0 -0
  378. package/build/client/_app/immutable/nodes/7.DuXt155R.js +0 -4
  379. package/build/client/_app/immutable/nodes/7.DuXt155R.js.br +0 -0
  380. package/build/client/_app/immutable/nodes/7.DuXt155R.js.gz +0 -0
  381. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.br +0 -0
  382. package/build/client/_app/immutable/nodes/9.BdeFVi2a.js.gz +0 -0
  383. package/build/server/chunks/1-Ceq9WsUZ.js +0 -9
  384. package/build/server/chunks/11-Dryt5Piv.js +0 -9
  385. package/build/server/chunks/11-Dryt5Piv.js.map +0 -1
  386. package/build/server/chunks/4-DxmFWVQJ.js +0 -9
  387. package/build/server/chunks/7-BE6BzHsh.js +0 -9
  388. package/build/server/chunks/9-BWzd_hmh.js.map +0 -1
  389. package/build/server/chunks/_page.svelte-BWNjxN63.js.map +0 -1
  390. package/build/server/chunks/_page.svelte-BXeh8wzh.js.map +0 -1
  391. package/build/server/chunks/_page.svelte-LsoJ7E5M.js.map +0 -1
  392. package/build/server/chunks/_server.ts-BKWx8K8U.js.map +0 -1
  393. package/build/server/chunks/_server.ts-CjPhaG_g.js.map +0 -1
  394. package/build/server/chunks/_server.ts-CmUo0zla.js.map +0 -1
  395. package/build/server/chunks/_server.ts-CnrWBkQ7.js.map +0 -1
  396. package/build/server/chunks/_server.ts-D-Rf8If2.js.map +0 -1
  397. package/build/server/chunks/_server.ts-D6wuFDe4.js.map +0 -1
  398. package/build/server/chunks/_server.ts-JO0zy17P.js.map +0 -1
  399. package/build/server/chunks/chunk-CLZ62Ad-.js +0 -18
  400. package/build/server/chunks/chunk-CLZ62Ad-.js.map +0 -1
  401. package/build/server/chunks/compose-args2-BFdWixAZ.js.map +0 -1
  402. package/build/server/chunks/docker2-HZnACjh6.js.map +0 -1
  403. package/build/server/chunks/endpoints-B9ePqrMw.js.map +0 -1
  404. package/build/server/chunks/features-0lgyQreD.js.map +0 -1
  405. package/build/server/chunks/helpers-q4Ng8QTq.js.map +0 -1
  406. package/build/server/chunks/hooks.server-BTXqUhpH.js.map +0 -1
  407. package/build/server/chunks/http-jBNJXVHg.js.map +0 -1
  408. package/build/server/chunks/provider-constants-1s1k8kbj.js +0 -68
  409. package/build/server/chunks/provider-constants-1s1k8kbj.js.map +0 -1
  410. package/build/server/chunks/src-BwQUi60U.js.map +0 -1
@@ -1,12 +1,12 @@
1
- import { P as PROVIDER_DEFAULT_URLS, a as PROVIDER_KEY_MAP } from './provider-constants-1s1k8kbj.js';
2
- import { _ as __commonJSMin, b as __require } from './chunk-CLZ62Ad-.js';
1
+ import { _ as __commonJSMin, b as __require, c as __toESM } from './chunk-DOvWTNp_.js';
2
+ import { G as GUARDIAN_INGRESS_ADDON_IDS, B as BUILTIN_ADDON_IDS, P as PORTAL_SECRET_ADDON_IDS, v as validateNetworkPresetEnv, r as resolveNetworkPreset, b as PROVIDER_DEFAULT_URLS, i as isLoopback, c as PROVIDER_KEY_MAP, g as isNetworkAccessPreset } from './network-preset-CJ1RRnki.js';
3
3
  import Vt, { existsSync, readFileSync, copyFileSync, writeFileSync, chmodSync, mkdirSync, readdirSync, renameSync, statSync, rmSync, openSync, constants, writeSync, closeSync, lstatSync, chownSync } from 'node:fs';
4
4
  import { execFile, execFileSync } from 'node:child_process';
5
5
  import { createRequire } from 'node:module';
6
6
  import or, { resolve, join, dirname, win32, basename, posix, relative } from 'node:path';
7
7
  import { Buffer as Buffer$1 } from 'buffer';
8
8
  import { fileURLToPath } from 'node:url';
9
- import { homedir, tmpdir, hostname } from 'node:os';
9
+ import { homedir, tmpdir, hostname, networkInterfaces } from 'node:os';
10
10
  import { createHash, randomBytes } from 'node:crypto';
11
11
  import Vr, { EventEmitter } from 'events';
12
12
  import I from 'fs';
@@ -7901,60 +7901,6 @@ function pruneBackupDirs(homeDir, keep) {
7901
7901
  return toDelete;
7902
7902
  }
7903
7903
  //#endregion
7904
- //#region ../lib/src/control-plane/addon-ids.ts
7905
- /**
7906
- * Canonical list of built-in addon IDs.
7907
- *
7908
- * Single source of truth — imported by both addons.ts and migrations.ts.
7909
- * Update THIS file (and only this file) when adding or removing a built-in addon.
7910
- *
7911
- * Intentionally a pure-constants file with no imports so it can be safely
7912
- * imported from anywhere without risk of circular dependencies.
7913
- */
7914
- var BUILTIN_ADDON_IDS = [
7915
- "api",
7916
- "chat",
7917
- "discord",
7918
- "gateway",
7919
- "ollama",
7920
- "slack",
7921
- "voice"
7922
- ];
7923
- /**
7924
- * Addons whose ingress is served by the guardian container.
7925
- *
7926
- * Single source of truth for guardian deploy gating. Must mirror the Compose
7927
- * profile gate on the guardian service in
7928
- * `packages/skeleton/system/stack/portals.compose.yml`
7929
- * (`profiles: [addon.chat, addon.api, addon.discord, addon.slack, addon.gateway]`):
7930
- * enabling any of these requires the guardian, so the deploy set, the
7931
- * expected-service seed, and the activation loop all deploy/health-wait on it.
7932
- *
7933
- * NOTE: broader than PORTAL_SECRET_ADDON_IDS — `gateway` uses the guardian but
7934
- * has no portal secret of its own (see below). Keep the two lists distinct.
7935
- */
7936
- var GUARDIAN_INGRESS_ADDON_IDS = [
7937
- "api",
7938
- "chat",
7939
- "discord",
7940
- "gateway",
7941
- "slack"
7942
- ];
7943
- /**
7944
- * First-party portals that own a dedicated `portal_<id>_secret`.
7945
- *
7946
- * Single source of truth for portal-secret provisioning (`ensurePortalSecret`).
7947
- * Must mirror the `portal_*_secret` set the guardian mounts in
7948
- * `portals.compose.yml` (chat, api, discord, slack). Excludes `gateway`, which
7949
- * is guardian ingress but has no portal secret of its own.
7950
- */
7951
- var PORTAL_SECRET_ADDON_IDS = [
7952
- "api",
7953
- "chat",
7954
- "discord",
7955
- "slack"
7956
- ];
7957
- //#endregion
7958
7904
  //#region ../lib/src/control-plane/compose-services.ts
7959
7905
  var import_dist$1 = require_dist();
7960
7906
  /**
@@ -8126,7 +8072,7 @@ function ensureHomeDirs() {
8126
8072
  for (const file of [`${home}/data/assistant/.local/share/opencode/auth.json`, `${home}/data/guardian/.local/share/opencode/auth.json`]) if (!existsSync(file)) writeFileSync(file, "");
8127
8073
  }
8128
8074
  var package_default = {
8129
- version: "0.13.0-beta.2"};
8075
+ version: "0.13.0-beta.4"};
8130
8076
  //#endregion
8131
8077
  //#region ../lib/src/control-plane/versioning.ts
8132
8078
  var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
@@ -8248,7 +8194,7 @@ function sha256(content) {
8248
8194
  return createHash("sha256").update(content).digest("hex");
8249
8195
  }
8250
8196
  /** Generate a hex string using Node's crypto.randomBytes (CSPRNG). */
8251
- function randomHex(bytes) {
8197
+ function randomHex$1(bytes) {
8252
8198
  return randomBytes(bytes).toString("hex");
8253
8199
  }
8254
8200
  //#endregion
@@ -8265,7 +8211,7 @@ function randomHex(bytes) {
8265
8211
  * Env validation has moved to `akm vault` + the in-house redactor — the
8266
8212
  * historical `.env.schema` files (varlock format) were retired in #391.
8267
8213
  */
8268
- var logger$8 = createLogger("core-assets");
8214
+ var logger$8$1 = createLogger("core-assets");
8269
8215
  var _require$1 = createRequire(import.meta.url);
8270
8216
  function bundledAssetPath(relPath) {
8271
8217
  try {
@@ -8289,7 +8235,7 @@ function readBundledStackAsset(name) {
8289
8235
  try {
8290
8236
  return readFileSync(bundledAssetPath(`system/stack/${name}`), "utf-8");
8291
8237
  } catch (err) {
8292
- logger$8.warn("bundled stack asset unavailable (returning empty)", {
8238
+ logger$8$1.warn("bundled stack asset unavailable (returning empty)", {
8293
8239
  name,
8294
8240
  error: errMessage(err)
8295
8241
  });
@@ -8305,7 +8251,7 @@ function readBundledCustomCompose() {
8305
8251
  try {
8306
8252
  return readFileSync(bundledAssetPath("config/stack/custom.compose.yml"), "utf-8");
8307
8253
  } catch (err) {
8308
- logger$8.warn("bundled custom.compose.yml unavailable (returning empty)", { error: errMessage(err) });
8254
+ logger$8$1.warn("bundled custom.compose.yml unavailable (returning empty)", { error: errMessage(err) });
8309
8255
  return "";
8310
8256
  }
8311
8257
  }
@@ -11954,6 +11900,7 @@ function ensureSecrets(state) {
11954
11900
  ensureSecret(state.homeDir, "op_guardian_admin_token", () => crypto.randomUUID().replace(/-/g, ""));
11955
11901
  ensureSecret(state.homeDir, "op_guardian_mcp_token", () => crypto.randomUUID().replace(/-/g, ""));
11956
11902
  ensureSecret(state.homeDir, "op_api_key", () => crypto.randomUUID().replace(/-/g, ""));
11903
+ ensureSecret(state.homeDir, "op_opencode_password", () => crypto.randomUUID().replace(/-/g, ""));
11957
11904
  }
11958
11905
  function ensureAuthJson(state) {
11959
11906
  const authJsonPath$1 = authJsonPath(state);
@@ -12627,7 +12574,7 @@ function portalSecretName(addon) {
12627
12574
  return `portal_${addon.replace(/-/g, "_")}_secret`;
12628
12575
  }
12629
12576
  function ensurePortalSecret(homeDir, addon) {
12630
- return ensureSecret(homeDir, portalSecretName(addon), () => randomHex(16));
12577
+ return ensureSecret(homeDir, portalSecretName(addon), () => randomHex$1(16));
12631
12578
  }
12632
12579
  /**
12633
12580
  * Parse enabled compose files and pre-create host-side volume mount
@@ -12978,6 +12925,14 @@ SLACK_ALLOWED_USERS=
12978
12925
  # Comma-separated blocked user IDs.
12979
12926
  SLACK_BLOCKED_USERS=
12980
12927
 
12928
+ # ---
12929
+ # Appearance
12930
+ # ---
12931
+
12932
+ # Display name used in Slack modal titles and the App Home tab.
12933
+ # Default: OpenPalm
12934
+ SLACK_BOT_NAME=
12935
+
12981
12936
  `,
12982
12937
  gateway: "",
12983
12938
  ollama: "",
@@ -13191,6 +13146,8 @@ function disableAddonByName(homeDir, name) {
13191
13146
  try {
13192
13147
  if (!VALID_NAME_RE.test(name)) throw new Error(`Invalid addon name: ${name}`);
13193
13148
  setEnabledAddonState(homeDir, name, false);
13149
+ const profileKey = profileEnvKey(name);
13150
+ if (PROFILE_ONLY_ENV_KEYS.includes(profileKey)) for (const path of [stateEnvFile(homeDir), legacyStackEnvFile(homeDir)]) removeEnvKeyFromFile(path, profileKey);
13194
13151
  return { ok: true };
13195
13152
  } catch (error) {
13196
13153
  return {
@@ -13790,8 +13747,8 @@ async function teardownRenamedProject(state, deps) {
13790
13747
  warning: null,
13791
13748
  blocked: false
13792
13749
  };
13793
- const docker = await import('./docker2-HZnACjh6.js');
13794
- const { buildComposeOptions } = await import('./compose-args2-BFdWixAZ.js');
13750
+ const docker = await import('./docker2-oBEn_Si9.js');
13751
+ const { buildComposeOptions } = await import('./compose-args2-DiDeQtPu.js');
13795
13752
  const resolvedDeps = {
13796
13753
  detectExistingProject: docker.detectExistingProject,
13797
13754
  composeDownProject: docker.composeDownProject
@@ -13841,6 +13798,87 @@ async function teardownRenamedProject(state, deps) {
13841
13798
  };
13842
13799
  }
13843
13800
  //#endregion
13801
+ //#region ../lib/src/control-plane/overlay-deprecations.ts
13802
+ /**
13803
+ * Deprecation scan for the removed `channel_lan` Docker network (#490).
13804
+ *
13805
+ * `channel_lan` was renamed to `portal_net` in 0.12.0 and retained one
13806
+ * release as an empty compatibility bridge; it is fully removed from the
13807
+ * skeleton in 0.13.0. A user overlay (`config/stack/custom.compose.yml`)
13808
+ * that still attaches a service to `channel_lan` without defining that
13809
+ * network itself would produce an invalid merged compose config the moment
13810
+ * the skeleton refresh lands. This module is a read-only, advisory scan run
13811
+ * BEFORE any lifecycle mutation so the failure is caught early with an
13812
+ * actionable message instead of a later, worse Docker error.
13813
+ */
13814
+ var DEPRECATED_NETWORK = "channel_lan";
13815
+ var REPLACEMENT_NETWORK = "portal_net";
13816
+ /**
13817
+ * Pure: parse compose YAML content; report services whose `networks` include
13818
+ * channel_lan (list or map form) and whether top-level networks defines it.
13819
+ * Unparseable/non-object input -> empty scan (advisory scan, fail-open by
13820
+ * design: compose preflight still hard-fails genuinely broken YAML).
13821
+ */
13822
+ function scanComposeForChannelLan(content) {
13823
+ const empty = {
13824
+ referencedBy: [],
13825
+ definesNetwork: false
13826
+ };
13827
+ try {
13828
+ const doc = (0, import_dist$1.parse)(content);
13829
+ if (typeof doc !== "object" || doc === null) return empty;
13830
+ const referencedBy = [];
13831
+ const services = doc.services;
13832
+ if (typeof services === "object" && services !== null) for (const [svcName, svcDef] of Object.entries(services)) {
13833
+ if (typeof svcDef !== "object" || svcDef === null) continue;
13834
+ const networks = svcDef.networks;
13835
+ if (Array.isArray(networks)) {
13836
+ if (networks.some((n) => n === DEPRECATED_NETWORK)) referencedBy.push(svcName);
13837
+ } else if (typeof networks === "object" && networks !== null) {
13838
+ if (DEPRECATED_NETWORK in networks) referencedBy.push(svcName);
13839
+ }
13840
+ }
13841
+ let definesNetwork = false;
13842
+ const topNetworks = doc.networks;
13843
+ if (typeof topNetworks === "object" && topNetworks !== null) definesNetwork = DEPRECATED_NETWORK in topNetworks;
13844
+ return {
13845
+ referencedBy,
13846
+ definesNetwork
13847
+ };
13848
+ } catch {
13849
+ return empty;
13850
+ }
13851
+ }
13852
+ /**
13853
+ * Read-only check of the user overlay (customComposeFilePath(homeDir)).
13854
+ * Missing file -> both null.
13855
+ * referencedBy.length > 0 && !definesNetwork -> blockError (merged config
13856
+ * would fail `docker compose config`): names the services, the file path,
13857
+ * instructs renaming to portal_net, and states nothing was changed.
13858
+ * definesNetwork -> warning (self-defined network still validates but is
13859
+ * deprecated; suggest renaming to portal_net).
13860
+ */
13861
+ function checkCustomComposeChannelLan(homeDir) {
13862
+ const path = customComposeFilePath(homeDir);
13863
+ if (!existsSync(path)) return {
13864
+ blockError: null,
13865
+ warning: null
13866
+ };
13867
+ const scan = scanComposeForChannelLan(readFileSync(path, "utf-8"));
13868
+ if (scan.referencedBy.length > 0 && !scan.definesNetwork) return {
13869
+ blockError: `Service(s) ${scan.referencedBy.join(", ")} in ${path} reference the removed "${DEPRECATED_NETWORK}" Docker network. Rename to "${REPLACEMENT_NETWORK}" in ${path}; nothing was changed.`,
13870
+ warning: null
13871
+ };
13872
+ if (scan.definesNetwork) return {
13873
+ blockError: null,
13874
+ warning: `${path} defines a deprecated "${DEPRECATED_NETWORK}" network. It still validates, but you should rename it to "${REPLACEMENT_NETWORK}".`
13875
+ };
13876
+ return {
13877
+ blockError: null,
13878
+ warning: null
13879
+ };
13880
+ }
13881
+ //#endregion
13844
13882
  //#region ../lib/src/control-plane/install-lock.ts
13845
13883
  /**
13846
13884
  * Self-healing install lock for the setup wizard phase.
@@ -14197,6 +14235,9 @@ function reconcileStack(state, op) {
14197
14235
  const activate = op.kind === "install" || op.kind === "upgrade";
14198
14236
  const deactivate = op.kind === "uninstall";
14199
14237
  const composes = op.kind === "upgrade";
14238
+ const overlayCheck = checkCustomComposeChannelLan(state.homeDir);
14239
+ if (overlayCheck.blockError && !deactivate) throw new Error(overlayCheck.blockError);
14240
+ if (overlayCheck.warning) lifecycleLogger.warn(overlayCheck.warning);
14200
14241
  return withStackEnvRollback(state, async () => {
14201
14242
  const activating = !deactivate;
14202
14243
  const home = await applyHome(state);
@@ -14217,7 +14258,8 @@ function reconcileStack(state, op) {
14217
14258
  return {
14218
14259
  active,
14219
14260
  assetsUpdated: home.assetsUpdated,
14220
- backupDir: home.backupDir
14261
+ backupDir: home.backupDir,
14262
+ warnings: overlayCheck.warning ? [overlayCheck.warning] : []
14221
14263
  };
14222
14264
  });
14223
14265
  }
@@ -14650,6 +14692,114 @@ function createOpenCodeClient(opts) {
14650
14692
  };
14651
14693
  }
14652
14694
  //#endregion
14695
+ //#region ../lib/src/control-plane/pairing.ts
14696
+ /**
14697
+ * Pairing code codec + guardian principal minting (#511 D3/D4).
14698
+ *
14699
+ * Portable control-plane logic: encoding/decoding the one-time pairing code
14700
+ * and orchestrating the guardian admin-API mint both live here so a future
14701
+ * `openpalm pair` CLI command never has to duplicate them (core-principles
14702
+ * §Shared control-plane library). `packages/ui`'s pairing route is a thin
14703
+ * transport wrapper over `mintDirectPrincipalPairingCode`; `packages/client`
14704
+ * carries a hand-maintained twin decoder (`parsePairingCode`) because the
14705
+ * client artifact never imports `@openpalm/lib` (purity gate).
14706
+ *
14707
+ * The pairing code itself is a self-contained, signed-nothing payload (D3):
14708
+ * `openpalm-pair:` + base64url(JSON). It is never persisted host-side — the
14709
+ * durable artifact is the minted guardian principal, individually revocable
14710
+ * via the guardian admin listener's principal-delete endpoint (#433,
14711
+ * `packages/guardian/src/admin.ts`).
14712
+ */
14713
+ var PAIRING_CODE_PREFIX = "openpalm-pair:";
14714
+ var DEFAULT_GUARDIAN_ADMIN_URL = "http://127.0.0.1:3831";
14715
+ /** Bound on the guardian admin mint call (PR #564 second retest) — a listener
14716
+ * that accepts but never responds must not hang the mint. */
14717
+ var PAIRING_ADMIN_TIMEOUT_MS = 5e3;
14718
+ /** Encode a pairing payload as `openpalm-pair:` + base64url(JSON). */
14719
+ function encodePairingCode(payload) {
14720
+ const json = JSON.stringify(payload);
14721
+ return `${PAIRING_CODE_PREFIX}${Buffer.from(json, "utf-8").toString("base64url")}`;
14722
+ }
14723
+ /** `slug(label) + '-' + 4 hex chars` — never the bare slug, so a mint never
14724
+ * clobbers an existing principal via a bare-label upsert. */
14725
+ function slugifyLabel(label) {
14726
+ return label.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 24).replace(/-+$/g, "") || "device";
14727
+ }
14728
+ function randomHex(byteLength) {
14729
+ const bytes = new Uint8Array(byteLength);
14730
+ crypto.getRandomValues(bytes);
14731
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
14732
+ }
14733
+ /**
14734
+ * Mint a `direct` guardian principal via the guardian's existing loopback-
14735
+ * only, Bearer-gated admin API and return a one-time pairing code carrying
14736
+ * its credential (D3). Fails closed: a missing admin-token secret or an
14737
+ * unreachable/non-2xx admin API is a structured `{ ok: false }`, never a
14738
+ * thrown error and never a fetch attempt without a token in hand.
14739
+ */
14740
+ async function mintDirectPrincipalPairingCode(options) {
14741
+ const { homeDir, label, url, guardianAdminUrl = DEFAULT_GUARDIAN_ADMIN_URL, fetchImpl = fetch } = options;
14742
+ let parsedUrl;
14743
+ try {
14744
+ parsedUrl = new URL(url);
14745
+ } catch {
14746
+ return {
14747
+ ok: false,
14748
+ error: "Pairing target url must be a valid http(s) URL."
14749
+ };
14750
+ }
14751
+ if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") return {
14752
+ ok: false,
14753
+ error: "Pairing target url must be a valid http(s) URL."
14754
+ };
14755
+ const rawToken = readSecret(homeDir, "op_guardian_admin_token");
14756
+ if (!rawToken) return {
14757
+ ok: false,
14758
+ error: "op_guardian_admin_token secret is missing — mint the guardian admin token first."
14759
+ };
14760
+ const adminToken = rawToken.trim();
14761
+ const principalId = `${slugifyLabel(label)}-${randomHex(8)}`;
14762
+ const principalToken = randomHex(32);
14763
+ let response;
14764
+ try {
14765
+ response = await fetchImpl(`${guardianAdminUrl}/admin/principals`, {
14766
+ method: "POST",
14767
+ headers: {
14768
+ authorization: `Bearer ${adminToken}`,
14769
+ "content-type": "application/json"
14770
+ },
14771
+ body: JSON.stringify({
14772
+ id: principalId,
14773
+ kind: "direct",
14774
+ token: principalToken,
14775
+ label
14776
+ }),
14777
+ signal: AbortSignal.timeout(PAIRING_ADMIN_TIMEOUT_MS)
14778
+ });
14779
+ } catch {
14780
+ return {
14781
+ ok: false,
14782
+ error: "guardian admin listener unreachable — is the stack running with a guardian-ingress addon enabled?"
14783
+ };
14784
+ }
14785
+ if (!response.ok) return {
14786
+ ok: false,
14787
+ error: `guardian admin API responded with HTTP ${response.status}`
14788
+ };
14789
+ return {
14790
+ ok: true,
14791
+ code: encodePairingCode({
14792
+ v: 1,
14793
+ kind: "openpalm-client-api",
14794
+ url,
14795
+ label,
14796
+ username: principalId,
14797
+ secret: principalToken
14798
+ }),
14799
+ principalId
14800
+ };
14801
+ }
14802
+ //#endregion
14653
14803
  //#region ../lib/src/control-plane/task-files.ts
14654
14804
  /**
14655
14805
  * Raw file access for the Automations admin tab — a plain editor for the akm
@@ -14738,7 +14888,7 @@ function allowedSecretForService(serviceName, service, secretName) {
14738
14888
  const serviceId = normalizedSecretName(serviceName.replace(/^portal[-_]/i, ""));
14739
14889
  const secretId = normalizedSecretName(secretName);
14740
14890
  if (serviceName === "assistant") return /^(assistant|opencode|provider|llm|embedding|akm|user)_/.test(secretId);
14741
- if (serviceName === "guardian") return secretId.startsWith("guardian_") || secretId.startsWith("portal_") || secretId.startsWith("op_guardian_") || secretId === "op_api_key";
14891
+ if (serviceName === "guardian") return secretId.startsWith("guardian_") || secretId.startsWith("portal_") || secretId.startsWith("op_guardian_") || secretId === "op_api_key" || secretId === "opencode_server_password";
14742
14892
  if (serviceName === "admin") return /^(admin|ui|openpalm)_/.test(secretId);
14743
14893
  if (isPortalService(serviceName, service)) return secretId.startsWith(`portal_${serviceId}_`) || secretId.startsWith(`${serviceId}_`);
14744
14894
  return secretId.startsWith(`${serviceId}_`);
@@ -15121,6 +15271,20 @@ function emitProgress(options, state) {
15121
15271
  function projectNameForState(state) {
15122
15272
  return resolveComposeProjectName(parseEnvFile(stackEnvPath(state)));
15123
15273
  }
15274
+ /**
15275
+ * Choose compose's `--pull` mode for a deploy from the version-of-record tag
15276
+ * (PR #564 second retest R8). `--pull missing` never refreshes a MOVING registry
15277
+ * tag (`latest`, channel names) once the image is present locally, so a
15278
+ * moving-tag rerun can recreate the OLD digest. Force `--pull always` for a
15279
+ * moving tag; keep `--pull missing` for an immutable pinned semver (correct AND
15280
+ * avoids a needless network pull) and for a locally-built `dev` image (which
15281
+ * must never hit the network). An unset tag is treated as moving (safe: refresh).
15282
+ */
15283
+ function resolvePullMode(imageTag) {
15284
+ const isDevTag = imageTag.startsWith("dev");
15285
+ const isPinnedVersion = /^v?\d+\./.test(imageTag);
15286
+ return !isDevTag && !isPinnedVersion ? "always" : "missing";
15287
+ }
15124
15288
  function resolveImageTag(state) {
15125
15289
  const env = parseEnvFile(stackEnvPath(state));
15126
15290
  return env.OP_ASSISTANT_VERSION ?? env.OP_IMAGE_TAG ?? "";
@@ -15305,7 +15469,7 @@ async function runDeploy(state, options = {}) {
15305
15469
  const imageTag = resolveImageTag(state);
15306
15470
  const isDevTag = imageTag.startsWith("dev");
15307
15471
  const stackResult = await applyStack({ kind: "all" }, composeOpts, void 0, {
15308
- pull: "missing",
15472
+ pull: resolvePullMode(imageTag),
15309
15473
  healthTimeoutMs: 5 * 6e4
15310
15474
  });
15311
15475
  if (!stackResult.ok) {
@@ -15532,7 +15696,7 @@ function buildAkmEndpoint(provider, baseUrl, suffix) {
15532
15696
  * - Atomic 0600 writes.
15533
15697
  * - The OpenPalm config is parse-tolerant (we own it: corrupt → start from {}).
15534
15698
  */
15535
- var logger$7 = createLogger("akm-sources");
15699
+ var logger$8 = createLogger("akm-sources");
15536
15700
  /** Source entry name added to the OpenPalm/container config (points at /host-stash). */
15537
15701
  var HOST_SOURCE_NAME = "host-akm";
15538
15702
  function readConfigTolerant(configPath) {
@@ -15550,7 +15714,7 @@ function readHostConfigBestEffort(configPath) {
15550
15714
  const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
15551
15715
  return parsed && typeof parsed === "object" ? parsed : null;
15552
15716
  } catch {
15553
- logger$7.warn("host akm config is not valid JSON — skipping profile import", { configPath });
15717
+ logger$8.warn("host akm config is not valid JSON — skipping profile import", { configPath });
15554
15718
  return null;
15555
15719
  }
15556
15720
  }
@@ -15676,7 +15840,7 @@ function importHostProfiles(state, hostConfigPath) {
15676
15840
  * If no host akm config exists the import is silently skipped — it is never
15677
15841
  * a blocking condition.
15678
15842
  */
15679
- var logger$6 = createLogger("host-akm-sharing");
15843
+ var logger$7 = createLogger("host-akm-sharing");
15680
15844
  var ENV_KEY = "OP_HOST_AKM_STASH";
15681
15845
  function userHome() {
15682
15846
  return process.env.HOME ?? process.env.USERPROFILE ?? homedir();
@@ -15704,7 +15868,7 @@ function enableHostAkmSharing(state) {
15704
15868
  const envPath = stackEnvPath(state);
15705
15869
  writeFileAtomic(envPath, mergeEnvContent(existsSync(envPath) ? readFileSync(envPath, "utf-8") : "", { [ENV_KEY]: hostAkmStashPath() }), 384);
15706
15870
  const { imported: profilesImported } = importHostProfiles(state, hostAkmConfigPath());
15707
- logger$6.info("host akm sharing enabled", {
15871
+ logger$7.info("host akm sharing enabled", {
15708
15872
  hostStashPath: hostAkmStashPath(),
15709
15873
  profilesImported
15710
15874
  });
@@ -15718,7 +15882,7 @@ function enableHostAkmSharing(state) {
15718
15882
  function disableHostAkmSharing(state) {
15719
15883
  const envPath = stackEnvPath(state);
15720
15884
  writeFileAtomic(envPath, removeEnvKey(existsSync(envPath) ? readFileSync(envPath, "utf-8") : "", ENV_KEY), 384);
15721
- logger$6.info("host akm sharing disabled");
15885
+ logger$7.info("host akm sharing disabled");
15722
15886
  }
15723
15887
  //#endregion
15724
15888
  //#region ../lib/src/control-plane/markdown-task.ts
@@ -15730,14 +15894,14 @@ function disableHostAkmSharing(state) {
15730
15894
  * prompt — `prompt: <text>` inline prompt text
15731
15895
  * workflow — `workflow: workflow:<ref>` + optional `params` map
15732
15896
  */
15733
- var logger$5 = createLogger("task-file");
15897
+ var logger$6 = createLogger("task-file");
15734
15898
  function parseMarkdownTask(filePath) {
15735
15899
  const id = basename(filePath).replace(/\.(?:ya?ml|md)$/, "");
15736
15900
  let raw;
15737
15901
  try {
15738
15902
  raw = readFileSync(filePath, "utf-8");
15739
15903
  } catch (err) {
15740
- logger$5.warn("failed to read task file", {
15904
+ logger$6.warn("failed to read task file", {
15741
15905
  filePath,
15742
15906
  error: String(err)
15743
15907
  });
@@ -15748,12 +15912,12 @@ function parseMarkdownTask(filePath) {
15748
15912
  try {
15749
15913
  const parsed = (0, import_dist.parse)(frontmatter);
15750
15914
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
15751
- logger$5.warn("task YAML is not an object", { filePath });
15915
+ logger$6.warn("task YAML is not an object", { filePath });
15752
15916
  return null;
15753
15917
  }
15754
15918
  fm = parsed;
15755
15919
  } catch (err) {
15756
- logger$5.warn("failed to parse task YAML", {
15920
+ logger$6.warn("failed to parse task YAML", {
15757
15921
  filePath,
15758
15922
  error: String(err)
15759
15923
  });
@@ -15761,14 +15925,14 @@ function parseMarkdownTask(filePath) {
15761
15925
  }
15762
15926
  const schedule = fm.schedule;
15763
15927
  if (typeof schedule !== "string" || !schedule.trim()) {
15764
- logger$5.warn("task missing or empty 'schedule'", { filePath });
15928
+ logger$6.warn("task missing or empty 'schedule'", { filePath });
15765
15929
  return null;
15766
15930
  }
15767
15931
  let target;
15768
15932
  if (fm.command !== void 0) {
15769
15933
  const cmd = Array.isArray(fm.command) ? fm.command.map(String) : typeof fm.command === "string" ? [fm.command] : null;
15770
15934
  if (!cmd || cmd.length === 0) {
15771
- logger$5.warn("task 'command' must be a non-empty array", { filePath });
15935
+ logger$6.warn("task 'command' must be a non-empty array", { filePath });
15772
15936
  return null;
15773
15937
  }
15774
15938
  target = {
@@ -15777,12 +15941,12 @@ function parseMarkdownTask(filePath) {
15777
15941
  };
15778
15942
  } else if (fm.prompt !== void 0) {
15779
15943
  if (typeof fm.prompt !== "string" || !fm.prompt.trim()) {
15780
- logger$5.warn("task 'prompt' must be a non-empty string", { filePath });
15944
+ logger$6.warn("task 'prompt' must be a non-empty string", { filePath });
15781
15945
  return null;
15782
15946
  }
15783
15947
  const promptBody = fm.prompt.trim() === "inline" ? body.trim() : fm.prompt.trim();
15784
15948
  if (!promptBody) {
15785
- logger$5.warn("task prompt body is empty", { filePath });
15949
+ logger$6.warn("task prompt body is empty", { filePath });
15786
15950
  return null;
15787
15951
  }
15788
15952
  target = {
@@ -15792,7 +15956,7 @@ function parseMarkdownTask(filePath) {
15792
15956
  };
15793
15957
  } else if (fm.workflow !== void 0) {
15794
15958
  if (typeof fm.workflow !== "string") {
15795
- logger$5.warn("task 'workflow' must be a string ref", { filePath });
15959
+ logger$6.warn("task 'workflow' must be a string ref", { filePath });
15796
15960
  return null;
15797
15961
  }
15798
15962
  target = {
@@ -15801,7 +15965,7 @@ function parseMarkdownTask(filePath) {
15801
15965
  params: fm.params && typeof fm.params === "object" && !Array.isArray(fm.params) ? fm.params : {}
15802
15966
  };
15803
15967
  } else {
15804
- logger$5.warn("task must have one of: command, prompt, workflow", { filePath });
15968
+ logger$6.warn("task must have one of: command, prompt, workflow", { filePath });
15805
15969
  return null;
15806
15970
  }
15807
15971
  return {
@@ -16018,7 +16182,7 @@ function readUserEnvFile(envPath) {
16018
16182
  * Scheduling is handled by the OS cron daemon (via `akm tasks sync`).
16019
16183
  * Execution is handled by `akm tasks run <id>`.
16020
16184
  */
16021
- var logger$4 = createLogger("scheduler");
16185
+ var logger$5 = createLogger("scheduler");
16022
16186
  function loadAutomations(stashDir) {
16023
16187
  return loadMarkdownTasks(stashDir).map(taskToAutomationConfig);
16024
16188
  }
@@ -16036,7 +16200,7 @@ async function executeAutomation(id, akmEnv) {
16036
16200
  } }, (error, _stdout, stderr) => {
16037
16201
  if (error) {
16038
16202
  const msg = stderr?.trim() || error.message;
16039
- logger$4.warn("akm tasks run failed", {
16203
+ logger$5.warn("akm tasks run failed", {
16040
16204
  id: taskId,
16041
16205
  error: msg
16042
16206
  });
@@ -16076,7 +16240,7 @@ function readAutomationLogs(id, dataDir, limit = 50) {
16076
16240
  *
16077
16241
  * Probes well-known endpoints for Docker Model Runner, Ollama, and LM Studio.
16078
16242
  */
16079
- var logger$3 = createLogger("local-providers");
16243
+ var logger$4 = createLogger("local-providers");
16080
16244
  /** Ollama's root endpoint returns "Ollama is running" — use this to distinguish from other services on :11434. */
16081
16245
  async function validateOllamaResponse(res) {
16082
16246
  try {
@@ -16254,7 +16418,7 @@ async function detectLocalProviders() {
16254
16418
  try {
16255
16419
  bodySnippet = (await resForValidate.text()).slice(0, 500);
16256
16420
  } catch {}
16257
- logger$3.debug("provider probe response failed validation", {
16421
+ logger$4.debug("provider probe response failed validation", {
16258
16422
  provider,
16259
16423
  url: probeUrl,
16260
16424
  bodySnippet
@@ -16262,7 +16426,7 @@ async function detectLocalProviders() {
16262
16426
  continue;
16263
16427
  }
16264
16428
  }
16265
- logger$3.debug("detected local provider", {
16429
+ logger$4.debug("detected local provider", {
16266
16430
  provider,
16267
16431
  url: baseUrl
16268
16432
  });
@@ -16282,7 +16446,7 @@ async function detectLocalProviders() {
16282
16446
  }
16283
16447
  //#endregion
16284
16448
  //#region ../lib/src/control-plane/hardware-detect.ts
16285
- var logger$2 = createLogger("hardware-detect");
16449
+ var logger$3 = createLogger("hardware-detect");
16286
16450
  /** Parse `nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits`. */
16287
16451
  function parseNvidiaSmi(stdout) {
16288
16452
  return stdout.split("\n").map((line) => line.trim()).filter(Boolean).map((line) => {
@@ -16389,7 +16553,7 @@ async function detectGpu() {
16389
16553
  try {
16390
16554
  found.push(...probe.parse(stdout));
16391
16555
  } catch (error) {
16392
- logger$2.debug("gpu probe parse failed", {
16556
+ logger$3.debug("gpu probe parse failed", {
16393
16557
  vendor: probe.vendor,
16394
16558
  error: String(error)
16395
16559
  });
@@ -16535,15 +16699,30 @@ function validateSetupSpec(input) {
16535
16699
  validateLlm(body, errors);
16536
16700
  validateEmbedding(body, errors);
16537
16701
  if (body.portalCredentials !== void 0 && (typeof body.portalCredentials !== "object" || body.portalCredentials === null)) errors.push("portalCredentials must be an object if provided");
16702
+ validateNetwork(body, errors);
16538
16703
  return {
16539
16704
  valid: errors.length === 0,
16540
16705
  errors
16541
16706
  };
16542
16707
  }
16708
+ function validateNetwork(body, errors) {
16709
+ if (body.network === void 0) return;
16710
+ const network = requireObj(body.network, "network must be an object if provided", errors);
16711
+ if (!network) return;
16712
+ if (!isNetworkAccessPreset(network.preset)) {
16713
+ errors.push(`network.preset must be one of: this-pc, home-password, home-open, shared-guardian`);
16714
+ return;
16715
+ }
16716
+ const password = network.opencodePassword;
16717
+ if (network.preset === "home-password") {
16718
+ if (typeof password !== "string" || password.length < 8) errors.push("network.opencodePassword is required for the home-password preset and must be at least 8 characters");
16719
+ } else if (password !== void 0) errors.push(`network.opencodePassword must not be supplied for the "${network.preset}" preset`);
16720
+ }
16543
16721
  function validateSecurity(body, errors) {
16544
16722
  const security = requireObj(body.security, "security object is required", errors);
16545
16723
  if (!security) return;
16546
- if (!requireStr(security, "uiLoginPassword", "security.uiLoginPassword is required and must be a non-empty string", errors)) return;
16724
+ if (security.uiLoginPassword === void 0) return;
16725
+ if (!requireStr(security, "uiLoginPassword", "security.uiLoginPassword must be a non-empty string when provided", errors)) return;
16547
16726
  if (security.uiLoginPassword.length < 8) errors.push("security.uiLoginPassword must be at least 8 characters");
16548
16727
  }
16549
16728
  function validateOwner(body, errors) {
@@ -16601,7 +16780,7 @@ function validateConnectionsArray(connections, errors) {
16601
16780
  * This module does NOT include Docker operations (compose up, image pull, etc.)
16602
16781
  * — those happen separately in the caller after setup completes.
16603
16782
  */
16604
- var logger$1 = createLogger("setup");
16783
+ var logger$2 = createLogger("setup");
16605
16784
  /**
16606
16785
  * Build the non-secret stack.env update payload from a setup spec.
16607
16786
  * Extracts owner name/email into OP_OWNER_* env vars.
@@ -16714,15 +16893,15 @@ function persistAkmConfig(state, opts) {
16714
16893
  }
16715
16894
  /**
16716
16895
  * Persist portal (discord/slack/…) credentials into the vault secrets env.
16717
- * Credential values come from the setup spec first, falling back to the host
16718
- * process environment for any canonical env var not supplied in the spec.
16719
- * updateSecretsEnv routes secret-classified keys to their own files and the
16720
- * rest to stack.env.
16896
+ * Credential values come ONLY from the setup spec. PR #564 second retest P1-3:
16897
+ * the previous host-process-env fallback silently consumed ambient variables
16898
+ * (e.g. a leftover `DISCORD_BOT_TOKEN` in the operator's shell) as operator
16899
+ * input, overwriting an existing secret BEFORE keep-existing semantics could
16900
+ * preserve it. Omitting a credential now leaves the persisted secret untouched
16901
+ * — updateSecretsEnv only writes the keys explicitly supplied.
16721
16902
  */
16722
16903
  function persistPortalCredentials(state, portalCredentials) {
16723
- const portalSecretUpdates = portalCredentials ? buildPortalCredentialEnvVars(portalCredentials) : {};
16724
- for (const mapping of Object.values(PORTAL_CREDENTIAL_ENV_MAP)) for (const envKey of Object.values(mapping)) if (!portalSecretUpdates[envKey] && process.env[envKey]) portalSecretUpdates[envKey] = process.env[envKey];
16725
- updateSecretsEnv(state, portalSecretUpdates);
16904
+ updateSecretsEnv(state, portalCredentials ? buildPortalCredentialEnvVars(portalCredentials) : {});
16726
16905
  }
16727
16906
  /**
16728
16907
  * Seed the default automation (akm-improve) into the AKM stash. Idempotent —
@@ -16738,8 +16917,8 @@ function seedDefaultAutomation(state) {
16738
16917
  const akmImproveTask = getRegistryAutomation("akm-improve");
16739
16918
  if (akmImproveTask) {
16740
16919
  writeFileSync(akmImproveDest, akmImproveTask);
16741
- logger$1.info("seeded default automation", { name: "akm-improve" });
16742
- } else logger$1.warn("default automation missing from registry; skipping seed", { name: "akm-improve" });
16920
+ logger$2.info("seeded default automation", { name: "akm-improve" });
16921
+ } else logger$2.warn("default automation missing from registry; skipping seed", { name: "akm-improve" });
16743
16922
  }
16744
16923
  async function performSetup(input, opts) {
16745
16924
  const validation = validateSetupSpec(input);
@@ -16747,7 +16926,14 @@ async function performSetup(input, opts) {
16747
16926
  ok: false,
16748
16927
  error: validation.errors.join("; ")
16749
16928
  };
16750
- const { llm, embedding, tts, stt, security, owner, connections, portalCredentials, addons, voiceProfile, ollamaProfile, imageTag, hostAkm } = input;
16929
+ if (input.network) {
16930
+ const envCheck = validateNetworkPresetEnv(input.network.preset, process.env);
16931
+ if (!envCheck.valid) return {
16932
+ ok: false,
16933
+ error: envCheck.errors.join("; ")
16934
+ };
16935
+ }
16936
+ const { llm, embedding, tts, stt, security, owner, connections, portalCredentials, addons, voiceProfile, ollamaProfile, imageTag, hostAkm, network } = input;
16751
16937
  const state = createState();
16752
16938
  initializeStateSecrets(state);
16753
16939
  const lockHandle = acquireInstallLock(state.dataDir);
@@ -16755,7 +16941,7 @@ async function performSetup(input, opts) {
16755
16941
  ok: false,
16756
16942
  error: "install_in_progress: Another install is in progress. Wait for it to finish (the lock clears itself automatically after 30 minutes). If you're sure nothing is running, run 'openpalm unlock' to clear a stale lock."
16757
16943
  };
16758
- logger$1.info("performing setup", { connectionCount: connections.length });
16944
+ logger$2.info("performing setup", { connectionCount: connections.length });
16759
16945
  const updates = buildOwnerEnvFromSetup(owner);
16760
16946
  const providerKeys = buildAuthJsonFromSetup(connections);
16761
16947
  try {
@@ -16764,11 +16950,19 @@ async function performSetup(input, opts) {
16764
16950
  ensureSecrets(state);
16765
16951
  updateSecretsEnv(state, updates);
16766
16952
  persistPortalCredentials(state, portalCredentials);
16767
- patchSecretsEnvFile(state.homeDir, { OP_UI_LOGIN_PASSWORD: security.uiLoginPassword });
16953
+ if (security.uiLoginPassword) patchSecretsEnvFile(state.homeDir, { OP_UI_LOGIN_PASSWORD: security.uiLoginPassword });
16954
+ else if (!readSecret(state.homeDir, "op_ui_login_password")?.trim()) throw new Error("security.uiLoginPassword is required — no existing UI login password to preserve.");
16955
+ if (network) {
16956
+ const resolution = resolveNetworkPreset(network.preset, { opencodePassword: network.opencodePassword });
16957
+ patchSecretsEnvFile(state.homeDir, {
16958
+ ...resolution.env,
16959
+ ...resolution.opencodePassword ? { OP_OPENCODE_PASSWORD: resolution.opencodePassword } : {}
16960
+ });
16961
+ }
16768
16962
  writeAuthJsonProviderKeys(state, providerKeys);
16769
16963
  } catch (err) {
16770
16964
  const message = errMessage(err);
16771
- logger$1.error("failed to persist setup outputs", { error: message });
16965
+ logger$2.error("failed to persist setup outputs", { error: message });
16772
16966
  return {
16773
16967
  ok: false,
16774
16968
  error: `Failed to persist setup outputs: ${message}`
@@ -16786,14 +16980,18 @@ async function performSetup(input, opts) {
16786
16980
  addHostStashToOpenpalmConfig(state);
16787
16981
  if (hostAkm !== false) {
16788
16982
  const { profilesImported } = enableHostAkmSharing(state);
16789
- logger$1.info("host akm sharing enabled during setup", { profilesImported });
16983
+ logger$2.info("host akm sharing enabled during setup", { profilesImported });
16790
16984
  } else disableHostAkmSharing(state);
16791
16985
  if (tts || stt) writeVoiceVars({
16792
16986
  tts,
16793
16987
  stt
16794
16988
  }, state.homeDir);
16795
- if (addons) {
16796
- for (const [name, enabled] of Object.entries(addons)) if (enabled) setAddonEnabled(state.homeDir, name, true, state);
16989
+ if (addons) for (const [name, enabled] of Object.entries(addons)) setAddonEnabled(state.homeDir, name, enabled === true, state);
16990
+ if (network?.preset === "shared-guardian") {
16991
+ if (![...Object.entries(addons ?? {}).filter(([, on]) => on).map(([name]) => name), ...listEnabledAddonIds(state.homeDir)].some((a) => GUARDIAN_INGRESS_ADDON_IDS.includes(a))) {
16992
+ setAddonEnabled(state.homeDir, "chat", true, state);
16993
+ logger$2.info("shared-guardian preset auto-enabled the chat portal", { reason: "guardian ingress required for the protected front door" });
16994
+ }
16797
16995
  }
16798
16996
  if (voiceProfile?.trim()) setAddonProfileSelection(state.homeDir, "voice", voiceProfile.trim());
16799
16997
  if (ollamaProfile?.trim()) setAddonProfileSelection(state.homeDir, "ollama", ollamaProfile.trim());
@@ -16801,13 +16999,13 @@ async function performSetup(input, opts) {
16801
16999
  seedDefaultAutomation(state);
16802
17000
  } catch (err) {
16803
17001
  const message = errMessage(err);
16804
- logger$1.error("failed to complete setup persistence", { error: message });
17002
+ logger$2.error("failed to complete setup persistence", { error: message });
16805
17003
  return {
16806
17004
  ok: false,
16807
17005
  error: `Setup persistence failed: ${message}`
16808
17006
  };
16809
17007
  }
16810
- logger$1.info("setup complete", { connectionCount: connections.length });
17008
+ logger$2.info("setup complete", { connectionCount: connections.length });
16811
17009
  return { ok: true };
16812
17010
  } finally {
16813
17011
  releaseInstallLock(lockHandle);
@@ -17147,60 +17345,2326 @@ async function getAkmStats(state) {
17147
17345
  return parseAkmStats(healthResult.stdout, infoResult.stdout, proposalsResult.stdout);
17148
17346
  }
17149
17347
  //#endregion
17150
- //#region ../lib/src/control-plane/bind-warning.ts
17348
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/types.js
17349
+ var require_types = /* @__PURE__ */ __commonJSMin(((exports) => {
17350
+ exports.toString = function(type) {
17351
+ switch (type) {
17352
+ case 1: return "A";
17353
+ case 10: return "NULL";
17354
+ case 28: return "AAAA";
17355
+ case 18: return "AFSDB";
17356
+ case 42: return "APL";
17357
+ case 257: return "CAA";
17358
+ case 60: return "CDNSKEY";
17359
+ case 59: return "CDS";
17360
+ case 37: return "CERT";
17361
+ case 5: return "CNAME";
17362
+ case 49: return "DHCID";
17363
+ case 32769: return "DLV";
17364
+ case 39: return "DNAME";
17365
+ case 48: return "DNSKEY";
17366
+ case 43: return "DS";
17367
+ case 55: return "HIP";
17368
+ case 13: return "HINFO";
17369
+ case 45: return "IPSECKEY";
17370
+ case 25: return "KEY";
17371
+ case 36: return "KX";
17372
+ case 29: return "LOC";
17373
+ case 15: return "MX";
17374
+ case 35: return "NAPTR";
17375
+ case 2: return "NS";
17376
+ case 47: return "NSEC";
17377
+ case 50: return "NSEC3";
17378
+ case 51: return "NSEC3PARAM";
17379
+ case 12: return "PTR";
17380
+ case 46: return "RRSIG";
17381
+ case 17: return "RP";
17382
+ case 24: return "SIG";
17383
+ case 6: return "SOA";
17384
+ case 99: return "SPF";
17385
+ case 33: return "SRV";
17386
+ case 44: return "SSHFP";
17387
+ case 32768: return "TA";
17388
+ case 249: return "TKEY";
17389
+ case 52: return "TLSA";
17390
+ case 250: return "TSIG";
17391
+ case 16: return "TXT";
17392
+ case 252: return "AXFR";
17393
+ case 251: return "IXFR";
17394
+ case 41: return "OPT";
17395
+ case 255: return "ANY";
17396
+ }
17397
+ return "UNKNOWN_" + type;
17398
+ };
17399
+ exports.toType = function(name) {
17400
+ switch (name.toUpperCase()) {
17401
+ case "A": return 1;
17402
+ case "NULL": return 10;
17403
+ case "AAAA": return 28;
17404
+ case "AFSDB": return 18;
17405
+ case "APL": return 42;
17406
+ case "CAA": return 257;
17407
+ case "CDNSKEY": return 60;
17408
+ case "CDS": return 59;
17409
+ case "CERT": return 37;
17410
+ case "CNAME": return 5;
17411
+ case "DHCID": return 49;
17412
+ case "DLV": return 32769;
17413
+ case "DNAME": return 39;
17414
+ case "DNSKEY": return 48;
17415
+ case "DS": return 43;
17416
+ case "HIP": return 55;
17417
+ case "HINFO": return 13;
17418
+ case "IPSECKEY": return 45;
17419
+ case "KEY": return 25;
17420
+ case "KX": return 36;
17421
+ case "LOC": return 29;
17422
+ case "MX": return 15;
17423
+ case "NAPTR": return 35;
17424
+ case "NS": return 2;
17425
+ case "NSEC": return 47;
17426
+ case "NSEC3": return 50;
17427
+ case "NSEC3PARAM": return 51;
17428
+ case "PTR": return 12;
17429
+ case "RRSIG": return 46;
17430
+ case "RP": return 17;
17431
+ case "SIG": return 24;
17432
+ case "SOA": return 6;
17433
+ case "SPF": return 99;
17434
+ case "SRV": return 33;
17435
+ case "SSHFP": return 44;
17436
+ case "TA": return 32768;
17437
+ case "TKEY": return 249;
17438
+ case "TLSA": return 52;
17439
+ case "TSIG": return 250;
17440
+ case "TXT": return 16;
17441
+ case "AXFR": return 252;
17442
+ case "IXFR": return 251;
17443
+ case "OPT": return 41;
17444
+ case "ANY": return 255;
17445
+ case "*": return 255;
17446
+ }
17447
+ if (name.toUpperCase().startsWith("UNKNOWN_")) return parseInt(name.slice(8));
17448
+ return 0;
17449
+ };
17450
+ }));
17451
+ //#endregion
17452
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/rcodes.js
17453
+ var require_rcodes = /* @__PURE__ */ __commonJSMin(((exports) => {
17454
+ exports.toString = function(rcode) {
17455
+ switch (rcode) {
17456
+ case 0: return "NOERROR";
17457
+ case 1: return "FORMERR";
17458
+ case 2: return "SERVFAIL";
17459
+ case 3: return "NXDOMAIN";
17460
+ case 4: return "NOTIMP";
17461
+ case 5: return "REFUSED";
17462
+ case 6: return "YXDOMAIN";
17463
+ case 7: return "YXRRSET";
17464
+ case 8: return "NXRRSET";
17465
+ case 9: return "NOTAUTH";
17466
+ case 10: return "NOTZONE";
17467
+ case 11: return "RCODE_11";
17468
+ case 12: return "RCODE_12";
17469
+ case 13: return "RCODE_13";
17470
+ case 14: return "RCODE_14";
17471
+ case 15: return "RCODE_15";
17472
+ }
17473
+ return "RCODE_" + rcode;
17474
+ };
17475
+ exports.toRcode = function(code) {
17476
+ switch (code.toUpperCase()) {
17477
+ case "NOERROR": return 0;
17478
+ case "FORMERR": return 1;
17479
+ case "SERVFAIL": return 2;
17480
+ case "NXDOMAIN": return 3;
17481
+ case "NOTIMP": return 4;
17482
+ case "REFUSED": return 5;
17483
+ case "YXDOMAIN": return 6;
17484
+ case "YXRRSET": return 7;
17485
+ case "NXRRSET": return 8;
17486
+ case "NOTAUTH": return 9;
17487
+ case "NOTZONE": return 10;
17488
+ case "RCODE_11": return 11;
17489
+ case "RCODE_12": return 12;
17490
+ case "RCODE_13": return 13;
17491
+ case "RCODE_14": return 14;
17492
+ case "RCODE_15": return 15;
17493
+ }
17494
+ return 0;
17495
+ };
17496
+ }));
17497
+ //#endregion
17498
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/opcodes.js
17499
+ var require_opcodes = /* @__PURE__ */ __commonJSMin(((exports) => {
17500
+ exports.toString = function(opcode) {
17501
+ switch (opcode) {
17502
+ case 0: return "QUERY";
17503
+ case 1: return "IQUERY";
17504
+ case 2: return "STATUS";
17505
+ case 3: return "OPCODE_3";
17506
+ case 4: return "NOTIFY";
17507
+ case 5: return "UPDATE";
17508
+ case 6: return "OPCODE_6";
17509
+ case 7: return "OPCODE_7";
17510
+ case 8: return "OPCODE_8";
17511
+ case 9: return "OPCODE_9";
17512
+ case 10: return "OPCODE_10";
17513
+ case 11: return "OPCODE_11";
17514
+ case 12: return "OPCODE_12";
17515
+ case 13: return "OPCODE_13";
17516
+ case 14: return "OPCODE_14";
17517
+ case 15: return "OPCODE_15";
17518
+ }
17519
+ return "OPCODE_" + opcode;
17520
+ };
17521
+ exports.toOpcode = function(code) {
17522
+ switch (code.toUpperCase()) {
17523
+ case "QUERY": return 0;
17524
+ case "IQUERY": return 1;
17525
+ case "STATUS": return 2;
17526
+ case "OPCODE_3": return 3;
17527
+ case "NOTIFY": return 4;
17528
+ case "UPDATE": return 5;
17529
+ case "OPCODE_6": return 6;
17530
+ case "OPCODE_7": return 7;
17531
+ case "OPCODE_8": return 8;
17532
+ case "OPCODE_9": return 9;
17533
+ case "OPCODE_10": return 10;
17534
+ case "OPCODE_11": return 11;
17535
+ case "OPCODE_12": return 12;
17536
+ case "OPCODE_13": return 13;
17537
+ case "OPCODE_14": return 14;
17538
+ case "OPCODE_15": return 15;
17539
+ }
17540
+ return 0;
17541
+ };
17542
+ }));
17543
+ //#endregion
17544
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/classes.js
17545
+ var require_classes = /* @__PURE__ */ __commonJSMin(((exports) => {
17546
+ exports.toString = function(klass) {
17547
+ switch (klass) {
17548
+ case 1: return "IN";
17549
+ case 2: return "CS";
17550
+ case 3: return "CH";
17551
+ case 4: return "HS";
17552
+ case 255: return "ANY";
17553
+ }
17554
+ return "UNKNOWN_" + klass;
17555
+ };
17556
+ exports.toClass = function(name) {
17557
+ switch (name.toUpperCase()) {
17558
+ case "IN": return 1;
17559
+ case "CS": return 2;
17560
+ case "CH": return 3;
17561
+ case "HS": return 4;
17562
+ case "ANY": return 255;
17563
+ }
17564
+ return 0;
17565
+ };
17566
+ }));
17567
+ //#endregion
17568
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/optioncodes.js
17569
+ var require_optioncodes = /* @__PURE__ */ __commonJSMin(((exports) => {
17570
+ exports.toString = function(type) {
17571
+ switch (type) {
17572
+ case 1: return "LLQ";
17573
+ case 2: return "UL";
17574
+ case 3: return "NSID";
17575
+ case 5: return "DAU";
17576
+ case 6: return "DHU";
17577
+ case 7: return "N3U";
17578
+ case 8: return "CLIENT_SUBNET";
17579
+ case 9: return "EXPIRE";
17580
+ case 10: return "COOKIE";
17581
+ case 11: return "TCP_KEEPALIVE";
17582
+ case 12: return "PADDING";
17583
+ case 13: return "CHAIN";
17584
+ case 14: return "KEY_TAG";
17585
+ case 26946: return "DEVICEID";
17586
+ }
17587
+ if (type < 0) return null;
17588
+ return `OPTION_${type}`;
17589
+ };
17590
+ exports.toCode = function(name) {
17591
+ if (typeof name === "number") return name;
17592
+ if (!name) return -1;
17593
+ switch (name.toUpperCase()) {
17594
+ case "OPTION_0": return 0;
17595
+ case "LLQ": return 1;
17596
+ case "UL": return 2;
17597
+ case "NSID": return 3;
17598
+ case "OPTION_4": return 4;
17599
+ case "DAU": return 5;
17600
+ case "DHU": return 6;
17601
+ case "N3U": return 7;
17602
+ case "CLIENT_SUBNET": return 8;
17603
+ case "EXPIRE": return 9;
17604
+ case "COOKIE": return 10;
17605
+ case "TCP_KEEPALIVE": return 11;
17606
+ case "PADDING": return 12;
17607
+ case "CHAIN": return 13;
17608
+ case "KEY_TAG": return 14;
17609
+ case "DEVICEID": return 26946;
17610
+ case "OPTION_65535": return 65535;
17611
+ }
17612
+ const m = name.match(/_(\d+)$/);
17613
+ if (m) return parseInt(m[1], 10);
17614
+ return -1;
17615
+ };
17616
+ }));
17617
+ //#endregion
17618
+ //#region ../../node_modules/.bun/@leichtgewicht+ip-codec@2.0.5/node_modules/@leichtgewicht/ip-codec/index.cjs
17619
+ var require_ip_codec = /* @__PURE__ */ __commonJSMin(((exports, module) => {
17620
+ var ipCodec = (function(exports$1) {
17621
+ Object.defineProperty(exports$1, "__esModule", { value: true });
17622
+ exports$1.decode = decode;
17623
+ exports$1.encode = encode;
17624
+ exports$1.familyOf = familyOf;
17625
+ exports$1.name = void 0;
17626
+ exports$1.sizeOf = sizeOf;
17627
+ exports$1.v6 = exports$1.v4 = void 0;
17628
+ const v4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/;
17629
+ const v4Size = 4;
17630
+ const v6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;
17631
+ const v6Size = 16;
17632
+ const v4 = {
17633
+ name: "v4",
17634
+ size: v4Size,
17635
+ isFormat: (ip) => v4Regex.test(ip),
17636
+ encode(ip, buff, offset) {
17637
+ offset = ~~offset;
17638
+ buff = buff || new Uint8Array(offset + v4Size);
17639
+ const max = ip.length;
17640
+ let n = 0;
17641
+ for (let i = 0; i < max;) {
17642
+ const c = ip.charCodeAt(i++);
17643
+ if (c === 46) {
17644
+ buff[offset++] = n;
17645
+ n = 0;
17646
+ } else n = n * 10 + (c - 48);
17647
+ }
17648
+ buff[offset] = n;
17649
+ return buff;
17650
+ },
17651
+ decode(buff, offset) {
17652
+ offset = ~~offset;
17653
+ return `${buff[offset++]}.${buff[offset++]}.${buff[offset++]}.${buff[offset]}`;
17654
+ }
17655
+ };
17656
+ exports$1.v4 = v4;
17657
+ const v6 = {
17658
+ name: "v6",
17659
+ size: v6Size,
17660
+ isFormat: (ip) => ip.length > 0 && v6Regex.test(ip),
17661
+ encode(ip, buff, offset) {
17662
+ offset = ~~offset;
17663
+ let end = offset + v6Size;
17664
+ let fill = -1;
17665
+ let hexN = 0;
17666
+ let decN = 0;
17667
+ let prevColon = true;
17668
+ let useDec = false;
17669
+ buff = buff || new Uint8Array(offset + v6Size);
17670
+ for (let i = 0; i < ip.length; i++) {
17671
+ let c = ip.charCodeAt(i);
17672
+ if (c === 58) {
17673
+ if (prevColon) {
17674
+ if (fill !== -1) {
17675
+ if (offset < end) buff[offset] = 0;
17676
+ if (offset < end - 1) buff[offset + 1] = 0;
17677
+ offset += 2;
17678
+ } else if (offset < end) fill = offset;
17679
+ } else {
17680
+ if (useDec === true) {
17681
+ if (offset < end) buff[offset] = decN;
17682
+ offset++;
17683
+ } else {
17684
+ if (offset < end) buff[offset] = hexN >> 8;
17685
+ if (offset < end - 1) buff[offset + 1] = hexN & 255;
17686
+ offset += 2;
17687
+ }
17688
+ hexN = 0;
17689
+ decN = 0;
17690
+ }
17691
+ prevColon = true;
17692
+ useDec = false;
17693
+ } else if (c === 46) {
17694
+ if (offset < end) buff[offset] = decN;
17695
+ offset++;
17696
+ decN = 0;
17697
+ hexN = 0;
17698
+ prevColon = false;
17699
+ useDec = true;
17700
+ } else {
17701
+ prevColon = false;
17702
+ if (c >= 97) c -= 87;
17703
+ else if (c >= 65) c -= 55;
17704
+ else {
17705
+ c -= 48;
17706
+ decN = decN * 10 + c;
17707
+ }
17708
+ hexN = (hexN << 4) + c;
17709
+ }
17710
+ }
17711
+ if (prevColon === false) if (useDec === true) {
17712
+ if (offset < end) buff[offset] = decN;
17713
+ offset++;
17714
+ } else {
17715
+ if (offset < end) buff[offset] = hexN >> 8;
17716
+ if (offset < end - 1) buff[offset + 1] = hexN & 255;
17717
+ offset += 2;
17718
+ }
17719
+ else if (fill === 0) {
17720
+ if (offset < end) buff[offset] = 0;
17721
+ if (offset < end - 1) buff[offset + 1] = 0;
17722
+ offset += 2;
17723
+ } else if (fill !== -1) {
17724
+ offset += 2;
17725
+ for (let i = Math.min(offset - 1, end - 1); i >= fill + 2; i--) buff[i] = buff[i - 2];
17726
+ buff[fill] = 0;
17727
+ buff[fill + 1] = 0;
17728
+ fill = offset;
17729
+ }
17730
+ if (fill !== offset && fill !== -1) {
17731
+ if (offset > end - 2) offset = end - 2;
17732
+ while (end > fill) buff[--end] = offset < end && offset > fill ? buff[--offset] : 0;
17733
+ } else while (offset < end) buff[offset++] = 0;
17734
+ return buff;
17735
+ },
17736
+ decode(buff, offset) {
17737
+ offset = ~~offset;
17738
+ let result = "";
17739
+ for (let i = 0; i < v6Size; i += 2) {
17740
+ if (i !== 0) result += ":";
17741
+ result += (buff[offset + i] << 8 | buff[offset + i + 1]).toString(16);
17742
+ }
17743
+ return result.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3").replace(/:{3,4}/, "::");
17744
+ }
17745
+ };
17746
+ exports$1.v6 = v6;
17747
+ exports$1.name = "ip";
17748
+ function sizeOf(ip) {
17749
+ if (v4.isFormat(ip)) return v4.size;
17750
+ if (v6.isFormat(ip)) return v6.size;
17751
+ throw Error(`Invalid ip address: ${ip}`);
17752
+ }
17753
+ function familyOf(string) {
17754
+ return sizeOf(string) === v4.size ? 1 : 2;
17755
+ }
17756
+ function encode(ip, buff, offset) {
17757
+ offset = ~~offset;
17758
+ const size = sizeOf(ip);
17759
+ if (typeof buff === "function") buff = buff(offset + size);
17760
+ if (size === v4.size) return v4.encode(ip, buff, offset);
17761
+ return v6.encode(ip, buff, offset);
17762
+ }
17763
+ function decode(buff, offset, length) {
17764
+ offset = ~~offset;
17765
+ length = length || buff.length - offset;
17766
+ if (length === v4.size) return v4.decode(buff, offset, length);
17767
+ if (length === v6.size) return v6.decode(buff, offset, length);
17768
+ throw Error(`Invalid buffer size needs to be ${v4.size} for v4 or ${v6.size} for v6.`);
17769
+ }
17770
+ return "default" in exports$1 ? exports$1.default : exports$1;
17771
+ })({});
17772
+ if (typeof define === "function" && define.amd) define([], function() {
17773
+ return ipCodec;
17774
+ });
17775
+ else if (typeof module === "object" && typeof exports === "object") module.exports = ipCodec;
17776
+ }));
17777
+ //#endregion
17778
+ //#region ../../node_modules/.bun/dns-packet@5.6.1/node_modules/dns-packet/index.js
17779
+ var require_dns_packet = /* @__PURE__ */ __commonJSMin(((exports) => {
17780
+ var Buffer$1 = __require("buffer").Buffer;
17781
+ var types = require_types();
17782
+ var rcodes = require_rcodes();
17783
+ var opcodes = require_opcodes();
17784
+ var classes = require_classes();
17785
+ var optioncodes = require_optioncodes();
17786
+ var ip = require_ip_codec();
17787
+ var QUERY_FLAG = 0;
17788
+ var RESPONSE_FLAG = 32768;
17789
+ var FLUSH_MASK = 32768;
17790
+ var NOT_FLUSH_MASK = -32769;
17791
+ var QU_MASK = 32768;
17792
+ var NOT_QU_MASK = -32769;
17793
+ var name = exports.name = {};
17794
+ name.encode = function(str, buf, offset, { mail = false } = {}) {
17795
+ if (!buf) buf = Buffer$1.alloc(name.encodingLength(str));
17796
+ if (!offset) offset = 0;
17797
+ const oldOffset = offset;
17798
+ const n = str.replace(/^\.|\.$/gm, "");
17799
+ if (n.length) {
17800
+ let list = [];
17801
+ if (mail) {
17802
+ let localPart = "";
17803
+ n.split(".").forEach((label) => {
17804
+ if (label.endsWith("\\")) localPart += (localPart.length ? "." : "") + label.slice(0, -1);
17805
+ else if (list.length === 0 && localPart.length) list.push(localPart + "." + label);
17806
+ else list.push(label);
17807
+ });
17808
+ } else list = n.split(".");
17809
+ for (let i = 0; i < list.length; i++) {
17810
+ const len = buf.write(list[i], offset + 1);
17811
+ buf[offset] = len;
17812
+ offset += len + 1;
17813
+ }
17814
+ }
17815
+ buf[offset++] = 0;
17816
+ name.encode.bytes = offset - oldOffset;
17817
+ return buf;
17818
+ };
17819
+ name.encode.bytes = 0;
17820
+ name.decode = function(buf, offset, { mail = false } = {}) {
17821
+ if (!offset) offset = 0;
17822
+ const list = [];
17823
+ let oldOffset = offset;
17824
+ let totalLength = 0;
17825
+ let consumedBytes = 0;
17826
+ let jumped = false;
17827
+ while (true) {
17828
+ if (offset >= buf.length) throw new Error("Cannot decode name (buffer overflow)");
17829
+ const len = buf[offset++];
17830
+ consumedBytes += jumped ? 0 : 1;
17831
+ if (len === 0) break;
17832
+ else if ((len & 192) === 0) {
17833
+ if (offset + len > buf.length) throw new Error("Cannot decode name (buffer overflow)");
17834
+ totalLength += len + 1;
17835
+ if (totalLength > 254) throw new Error("Cannot decode name (name too long)");
17836
+ let label = buf.toString("utf-8", offset, offset + len);
17837
+ if (mail) label = label.replace(/\./g, "\\.");
17838
+ list.push(label);
17839
+ offset += len;
17840
+ consumedBytes += jumped ? 0 : len;
17841
+ } else if ((len & 192) === 192) {
17842
+ if (offset + 1 > buf.length) throw new Error("Cannot decode name (buffer overflow)");
17843
+ const jumpOffset = buf.readUInt16BE(offset - 1) - 49152;
17844
+ if (jumpOffset >= oldOffset) throw new Error("Cannot decode name (bad pointer)");
17845
+ offset = jumpOffset;
17846
+ oldOffset = jumpOffset;
17847
+ consumedBytes += jumped ? 0 : 1;
17848
+ jumped = true;
17849
+ } else throw new Error("Cannot decode name (bad label)");
17850
+ }
17851
+ name.decode.bytes = consumedBytes;
17852
+ return list.length === 0 ? "." : list.join(".");
17853
+ };
17854
+ name.decode.bytes = 0;
17855
+ name.encodingLength = function(n) {
17856
+ if (n === "." || n === "..") return 1;
17857
+ return Buffer$1.byteLength(n.replace(/^\.|\.$/gm, "")) + 2;
17858
+ };
17859
+ var string = {};
17860
+ string.encode = function(s, buf, offset) {
17861
+ if (!buf) buf = Buffer$1.alloc(string.encodingLength(s));
17862
+ if (!offset) offset = 0;
17863
+ const len = buf.write(s, offset + 1);
17864
+ buf[offset] = len;
17865
+ string.encode.bytes = len + 1;
17866
+ return buf;
17867
+ };
17868
+ string.encode.bytes = 0;
17869
+ string.decode = function(buf, offset) {
17870
+ if (!offset) offset = 0;
17871
+ const len = buf[offset];
17872
+ const s = buf.toString("utf-8", offset + 1, offset + 1 + len);
17873
+ string.decode.bytes = len + 1;
17874
+ return s;
17875
+ };
17876
+ string.decode.bytes = 0;
17877
+ string.encodingLength = function(s) {
17878
+ return Buffer$1.byteLength(s) + 1;
17879
+ };
17880
+ var header = {};
17881
+ header.encode = function(h, buf, offset) {
17882
+ if (!buf) buf = header.encodingLength(h);
17883
+ if (!offset) offset = 0;
17884
+ const flags = (h.flags || 0) & 32767;
17885
+ const type = h.type === "response" ? RESPONSE_FLAG : QUERY_FLAG;
17886
+ buf.writeUInt16BE(h.id || 0, offset);
17887
+ buf.writeUInt16BE(flags | type, offset + 2);
17888
+ buf.writeUInt16BE(h.questions.length, offset + 4);
17889
+ buf.writeUInt16BE(h.answers.length, offset + 6);
17890
+ buf.writeUInt16BE(h.authorities.length, offset + 8);
17891
+ buf.writeUInt16BE(h.additionals.length, offset + 10);
17892
+ return buf;
17893
+ };
17894
+ header.encode.bytes = 12;
17895
+ header.decode = function(buf, offset) {
17896
+ if (!offset) offset = 0;
17897
+ if (buf.length < 12) throw new Error("Header must be 12 bytes");
17898
+ const flags = buf.readUInt16BE(offset + 2);
17899
+ return {
17900
+ id: buf.readUInt16BE(offset),
17901
+ type: flags & RESPONSE_FLAG ? "response" : "query",
17902
+ flags: flags & 32767,
17903
+ flag_qr: (flags >> 15 & 1) === 1,
17904
+ opcode: opcodes.toString(flags >> 11 & 15),
17905
+ flag_aa: (flags >> 10 & 1) === 1,
17906
+ flag_tc: (flags >> 9 & 1) === 1,
17907
+ flag_rd: (flags >> 8 & 1) === 1,
17908
+ flag_ra: (flags >> 7 & 1) === 1,
17909
+ flag_z: (flags >> 6 & 1) === 1,
17910
+ flag_ad: (flags >> 5 & 1) === 1,
17911
+ flag_cd: (flags >> 4 & 1) === 1,
17912
+ rcode: rcodes.toString(flags & 15),
17913
+ questions: new Array(buf.readUInt16BE(offset + 4)),
17914
+ answers: new Array(buf.readUInt16BE(offset + 6)),
17915
+ authorities: new Array(buf.readUInt16BE(offset + 8)),
17916
+ additionals: new Array(buf.readUInt16BE(offset + 10))
17917
+ };
17918
+ };
17919
+ header.decode.bytes = 12;
17920
+ header.encodingLength = function() {
17921
+ return 12;
17922
+ };
17923
+ var runknown = exports.unknown = {};
17924
+ runknown.encode = function(data, buf, offset) {
17925
+ if (!buf) buf = Buffer$1.alloc(runknown.encodingLength(data));
17926
+ if (!offset) offset = 0;
17927
+ buf.writeUInt16BE(data.length, offset);
17928
+ data.copy(buf, offset + 2);
17929
+ runknown.encode.bytes = data.length + 2;
17930
+ return buf;
17931
+ };
17932
+ runknown.encode.bytes = 0;
17933
+ runknown.decode = function(buf, offset) {
17934
+ if (!offset) offset = 0;
17935
+ const len = buf.readUInt16BE(offset);
17936
+ const data = buf.slice(offset + 2, offset + 2 + len);
17937
+ runknown.decode.bytes = len + 2;
17938
+ return data;
17939
+ };
17940
+ runknown.decode.bytes = 0;
17941
+ runknown.encodingLength = function(data) {
17942
+ return data.length + 2;
17943
+ };
17944
+ var rns = exports.ns = {};
17945
+ rns.encode = function(data, buf, offset) {
17946
+ if (!buf) buf = Buffer$1.alloc(rns.encodingLength(data));
17947
+ if (!offset) offset = 0;
17948
+ name.encode(data, buf, offset + 2);
17949
+ buf.writeUInt16BE(name.encode.bytes, offset);
17950
+ rns.encode.bytes = name.encode.bytes + 2;
17951
+ return buf;
17952
+ };
17953
+ rns.encode.bytes = 0;
17954
+ rns.decode = function(buf, offset) {
17955
+ if (!offset) offset = 0;
17956
+ const len = buf.readUInt16BE(offset);
17957
+ const dd = name.decode(buf, offset + 2);
17958
+ rns.decode.bytes = len + 2;
17959
+ return dd;
17960
+ };
17961
+ rns.decode.bytes = 0;
17962
+ rns.encodingLength = function(data) {
17963
+ return name.encodingLength(data) + 2;
17964
+ };
17965
+ var rsoa = exports.soa = {};
17966
+ rsoa.encode = function(data, buf, offset) {
17967
+ if (!buf) buf = Buffer$1.alloc(rsoa.encodingLength(data));
17968
+ if (!offset) offset = 0;
17969
+ const oldOffset = offset;
17970
+ offset += 2;
17971
+ name.encode(data.mname, buf, offset);
17972
+ offset += name.encode.bytes;
17973
+ name.encode(data.rname, buf, offset, { mail: true });
17974
+ offset += name.encode.bytes;
17975
+ buf.writeUInt32BE(data.serial || 0, offset);
17976
+ offset += 4;
17977
+ buf.writeUInt32BE(data.refresh || 0, offset);
17978
+ offset += 4;
17979
+ buf.writeUInt32BE(data.retry || 0, offset);
17980
+ offset += 4;
17981
+ buf.writeUInt32BE(data.expire || 0, offset);
17982
+ offset += 4;
17983
+ buf.writeUInt32BE(data.minimum || 0, offset);
17984
+ offset += 4;
17985
+ buf.writeUInt16BE(offset - oldOffset - 2, oldOffset);
17986
+ rsoa.encode.bytes = offset - oldOffset;
17987
+ return buf;
17988
+ };
17989
+ rsoa.encode.bytes = 0;
17990
+ rsoa.decode = function(buf, offset) {
17991
+ if (!offset) offset = 0;
17992
+ const oldOffset = offset;
17993
+ const data = {};
17994
+ offset += 2;
17995
+ data.mname = name.decode(buf, offset);
17996
+ offset += name.decode.bytes;
17997
+ data.rname = name.decode(buf, offset, { mail: true });
17998
+ offset += name.decode.bytes;
17999
+ data.serial = buf.readUInt32BE(offset);
18000
+ offset += 4;
18001
+ data.refresh = buf.readUInt32BE(offset);
18002
+ offset += 4;
18003
+ data.retry = buf.readUInt32BE(offset);
18004
+ offset += 4;
18005
+ data.expire = buf.readUInt32BE(offset);
18006
+ offset += 4;
18007
+ data.minimum = buf.readUInt32BE(offset);
18008
+ offset += 4;
18009
+ rsoa.decode.bytes = offset - oldOffset;
18010
+ return data;
18011
+ };
18012
+ rsoa.decode.bytes = 0;
18013
+ rsoa.encodingLength = function(data) {
18014
+ return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname);
18015
+ };
18016
+ var rtxt = exports.txt = {};
18017
+ rtxt.encode = function(data, buf, offset) {
18018
+ if (!Array.isArray(data)) data = [data];
18019
+ for (let i = 0; i < data.length; i++) {
18020
+ if (typeof data[i] === "string") data[i] = Buffer$1.from(data[i]);
18021
+ if (!Buffer$1.isBuffer(data[i])) throw new Error("Must be a Buffer");
18022
+ }
18023
+ if (!buf) buf = Buffer$1.alloc(rtxt.encodingLength(data));
18024
+ if (!offset) offset = 0;
18025
+ const oldOffset = offset;
18026
+ offset += 2;
18027
+ data.forEach(function(d) {
18028
+ buf[offset++] = d.length;
18029
+ d.copy(buf, offset, 0, d.length);
18030
+ offset += d.length;
18031
+ });
18032
+ buf.writeUInt16BE(offset - oldOffset - 2, oldOffset);
18033
+ rtxt.encode.bytes = offset - oldOffset;
18034
+ return buf;
18035
+ };
18036
+ rtxt.encode.bytes = 0;
18037
+ rtxt.decode = function(buf, offset) {
18038
+ if (!offset) offset = 0;
18039
+ const oldOffset = offset;
18040
+ let remaining = buf.readUInt16BE(offset);
18041
+ offset += 2;
18042
+ let data = [];
18043
+ while (remaining > 0) {
18044
+ const len = buf[offset++];
18045
+ --remaining;
18046
+ if (remaining < len) throw new Error("Buffer overflow");
18047
+ data.push(buf.slice(offset, offset + len));
18048
+ offset += len;
18049
+ remaining -= len;
18050
+ }
18051
+ rtxt.decode.bytes = offset - oldOffset;
18052
+ return data;
18053
+ };
18054
+ rtxt.decode.bytes = 0;
18055
+ rtxt.encodingLength = function(data) {
18056
+ if (!Array.isArray(data)) data = [data];
18057
+ let length = 2;
18058
+ data.forEach(function(buf) {
18059
+ if (typeof buf === "string") length += Buffer$1.byteLength(buf) + 1;
18060
+ else length += buf.length + 1;
18061
+ });
18062
+ return length;
18063
+ };
18064
+ var rnull = exports.null = {};
18065
+ rnull.encode = function(data, buf, offset) {
18066
+ if (!buf) buf = Buffer$1.alloc(rnull.encodingLength(data));
18067
+ if (!offset) offset = 0;
18068
+ if (typeof data === "string") data = Buffer$1.from(data);
18069
+ if (!data) data = Buffer$1.alloc(0);
18070
+ const oldOffset = offset;
18071
+ offset += 2;
18072
+ const len = data.length;
18073
+ data.copy(buf, offset, 0, len);
18074
+ offset += len;
18075
+ buf.writeUInt16BE(offset - oldOffset - 2, oldOffset);
18076
+ rnull.encode.bytes = offset - oldOffset;
18077
+ return buf;
18078
+ };
18079
+ rnull.encode.bytes = 0;
18080
+ rnull.decode = function(buf, offset) {
18081
+ if (!offset) offset = 0;
18082
+ const oldOffset = offset;
18083
+ const len = buf.readUInt16BE(offset);
18084
+ offset += 2;
18085
+ const data = buf.slice(offset, offset + len);
18086
+ offset += len;
18087
+ rnull.decode.bytes = offset - oldOffset;
18088
+ return data;
18089
+ };
18090
+ rnull.decode.bytes = 0;
18091
+ rnull.encodingLength = function(data) {
18092
+ if (!data) return 2;
18093
+ return (Buffer$1.isBuffer(data) ? data.length : Buffer$1.byteLength(data)) + 2;
18094
+ };
18095
+ var rhinfo = exports.hinfo = {};
18096
+ rhinfo.encode = function(data, buf, offset) {
18097
+ if (!buf) buf = Buffer$1.alloc(rhinfo.encodingLength(data));
18098
+ if (!offset) offset = 0;
18099
+ const oldOffset = offset;
18100
+ offset += 2;
18101
+ string.encode(data.cpu, buf, offset);
18102
+ offset += string.encode.bytes;
18103
+ string.encode(data.os, buf, offset);
18104
+ offset += string.encode.bytes;
18105
+ buf.writeUInt16BE(offset - oldOffset - 2, oldOffset);
18106
+ rhinfo.encode.bytes = offset - oldOffset;
18107
+ return buf;
18108
+ };
18109
+ rhinfo.encode.bytes = 0;
18110
+ rhinfo.decode = function(buf, offset) {
18111
+ if (!offset) offset = 0;
18112
+ const oldOffset = offset;
18113
+ const data = {};
18114
+ offset += 2;
18115
+ data.cpu = string.decode(buf, offset);
18116
+ offset += string.decode.bytes;
18117
+ data.os = string.decode(buf, offset);
18118
+ offset += string.decode.bytes;
18119
+ rhinfo.decode.bytes = offset - oldOffset;
18120
+ return data;
18121
+ };
18122
+ rhinfo.decode.bytes = 0;
18123
+ rhinfo.encodingLength = function(data) {
18124
+ return string.encodingLength(data.cpu) + string.encodingLength(data.os) + 2;
18125
+ };
18126
+ var rptr = exports.ptr = {};
18127
+ var rcname = exports.cname = rptr;
18128
+ var rdname = exports.dname = rptr;
18129
+ rptr.encode = function(data, buf, offset) {
18130
+ if (!buf) buf = Buffer$1.alloc(rptr.encodingLength(data));
18131
+ if (!offset) offset = 0;
18132
+ name.encode(data, buf, offset + 2);
18133
+ buf.writeUInt16BE(name.encode.bytes, offset);
18134
+ rptr.encode.bytes = name.encode.bytes + 2;
18135
+ return buf;
18136
+ };
18137
+ rptr.encode.bytes = 0;
18138
+ rptr.decode = function(buf, offset) {
18139
+ if (!offset) offset = 0;
18140
+ const data = name.decode(buf, offset + 2);
18141
+ rptr.decode.bytes = name.decode.bytes + 2;
18142
+ return data;
18143
+ };
18144
+ rptr.decode.bytes = 0;
18145
+ rptr.encodingLength = function(data) {
18146
+ return name.encodingLength(data) + 2;
18147
+ };
18148
+ var rsrv = exports.srv = {};
18149
+ rsrv.encode = function(data, buf, offset) {
18150
+ if (!buf) buf = Buffer$1.alloc(rsrv.encodingLength(data));
18151
+ if (!offset) offset = 0;
18152
+ buf.writeUInt16BE(data.priority || 0, offset + 2);
18153
+ buf.writeUInt16BE(data.weight || 0, offset + 4);
18154
+ buf.writeUInt16BE(data.port || 0, offset + 6);
18155
+ name.encode(data.target, buf, offset + 8);
18156
+ const len = name.encode.bytes + 6;
18157
+ buf.writeUInt16BE(len, offset);
18158
+ rsrv.encode.bytes = len + 2;
18159
+ return buf;
18160
+ };
18161
+ rsrv.encode.bytes = 0;
18162
+ rsrv.decode = function(buf, offset) {
18163
+ if (!offset) offset = 0;
18164
+ const len = buf.readUInt16BE(offset);
18165
+ const data = {};
18166
+ data.priority = buf.readUInt16BE(offset + 2);
18167
+ data.weight = buf.readUInt16BE(offset + 4);
18168
+ data.port = buf.readUInt16BE(offset + 6);
18169
+ data.target = name.decode(buf, offset + 8);
18170
+ rsrv.decode.bytes = len + 2;
18171
+ return data;
18172
+ };
18173
+ rsrv.decode.bytes = 0;
18174
+ rsrv.encodingLength = function(data) {
18175
+ return 8 + name.encodingLength(data.target);
18176
+ };
18177
+ var rcaa = exports.caa = {};
18178
+ rcaa.ISSUER_CRITICAL = 128;
18179
+ rcaa.encode = function(data, buf, offset) {
18180
+ const len = rcaa.encodingLength(data);
18181
+ if (!buf) buf = Buffer$1.alloc(rcaa.encodingLength(data));
18182
+ if (!offset) offset = 0;
18183
+ if (data.issuerCritical) data.flags = rcaa.ISSUER_CRITICAL;
18184
+ buf.writeUInt16BE(len - 2, offset);
18185
+ offset += 2;
18186
+ buf.writeUInt8(data.flags || 0, offset);
18187
+ offset += 1;
18188
+ string.encode(data.tag, buf, offset);
18189
+ offset += string.encode.bytes;
18190
+ buf.write(data.value, offset);
18191
+ offset += Buffer$1.byteLength(data.value);
18192
+ rcaa.encode.bytes = len;
18193
+ return buf;
18194
+ };
18195
+ rcaa.encode.bytes = 0;
18196
+ rcaa.decode = function(buf, offset) {
18197
+ if (!offset) offset = 0;
18198
+ const len = buf.readUInt16BE(offset);
18199
+ offset += 2;
18200
+ const oldOffset = offset;
18201
+ const data = {};
18202
+ data.flags = buf.readUInt8(offset);
18203
+ offset += 1;
18204
+ data.tag = string.decode(buf, offset);
18205
+ offset += string.decode.bytes;
18206
+ data.value = buf.toString("utf-8", offset, oldOffset + len);
18207
+ data.issuerCritical = !!(data.flags & rcaa.ISSUER_CRITICAL);
18208
+ rcaa.decode.bytes = len + 2;
18209
+ return data;
18210
+ };
18211
+ rcaa.decode.bytes = 0;
18212
+ rcaa.encodingLength = function(data) {
18213
+ return string.encodingLength(data.tag) + string.encodingLength(data.value) + 2;
18214
+ };
18215
+ var rmx = exports.mx = {};
18216
+ rmx.encode = function(data, buf, offset) {
18217
+ if (!buf) buf = Buffer$1.alloc(rmx.encodingLength(data));
18218
+ if (!offset) offset = 0;
18219
+ const oldOffset = offset;
18220
+ offset += 2;
18221
+ buf.writeUInt16BE(data.preference || 0, offset);
18222
+ offset += 2;
18223
+ name.encode(data.exchange, buf, offset);
18224
+ offset += name.encode.bytes;
18225
+ buf.writeUInt16BE(offset - oldOffset - 2, oldOffset);
18226
+ rmx.encode.bytes = offset - oldOffset;
18227
+ return buf;
18228
+ };
18229
+ rmx.encode.bytes = 0;
18230
+ rmx.decode = function(buf, offset) {
18231
+ if (!offset) offset = 0;
18232
+ const oldOffset = offset;
18233
+ const data = {};
18234
+ offset += 2;
18235
+ data.preference = buf.readUInt16BE(offset);
18236
+ offset += 2;
18237
+ data.exchange = name.decode(buf, offset);
18238
+ offset += name.decode.bytes;
18239
+ rmx.decode.bytes = offset - oldOffset;
18240
+ return data;
18241
+ };
18242
+ rmx.encodingLength = function(data) {
18243
+ return 4 + name.encodingLength(data.exchange);
18244
+ };
18245
+ var ra = exports.a = {};
18246
+ ra.encode = function(host, buf, offset) {
18247
+ if (!buf) buf = Buffer$1.alloc(ra.encodingLength(host));
18248
+ if (!offset) offset = 0;
18249
+ buf.writeUInt16BE(4, offset);
18250
+ offset += 2;
18251
+ ip.v4.encode(host, buf, offset);
18252
+ ra.encode.bytes = 6;
18253
+ return buf;
18254
+ };
18255
+ ra.encode.bytes = 0;
18256
+ ra.decode = function(buf, offset) {
18257
+ if (!offset) offset = 0;
18258
+ offset += 2;
18259
+ const host = ip.v4.decode(buf, offset);
18260
+ ra.decode.bytes = 6;
18261
+ return host;
18262
+ };
18263
+ ra.decode.bytes = 0;
18264
+ ra.encodingLength = function() {
18265
+ return 6;
18266
+ };
18267
+ var raaaa = exports.aaaa = {};
18268
+ raaaa.encode = function(host, buf, offset) {
18269
+ if (!buf) buf = Buffer$1.alloc(raaaa.encodingLength(host));
18270
+ if (!offset) offset = 0;
18271
+ buf.writeUInt16BE(16, offset);
18272
+ offset += 2;
18273
+ ip.v6.encode(host, buf, offset);
18274
+ raaaa.encode.bytes = 18;
18275
+ return buf;
18276
+ };
18277
+ raaaa.encode.bytes = 0;
18278
+ raaaa.decode = function(buf, offset) {
18279
+ if (!offset) offset = 0;
18280
+ offset += 2;
18281
+ const host = ip.v6.decode(buf, offset);
18282
+ raaaa.decode.bytes = 18;
18283
+ return host;
18284
+ };
18285
+ raaaa.decode.bytes = 0;
18286
+ raaaa.encodingLength = function() {
18287
+ return 18;
18288
+ };
18289
+ var roption = exports.option = {};
18290
+ roption.encode = function(option, buf, offset) {
18291
+ if (!buf) buf = Buffer$1.alloc(roption.encodingLength(option));
18292
+ if (!offset) offset = 0;
18293
+ const oldOffset = offset;
18294
+ const code = optioncodes.toCode(option.code);
18295
+ buf.writeUInt16BE(code, offset);
18296
+ offset += 2;
18297
+ if (option.data) {
18298
+ buf.writeUInt16BE(option.data.length, offset);
18299
+ offset += 2;
18300
+ option.data.copy(buf, offset);
18301
+ offset += option.data.length;
18302
+ } else switch (code) {
18303
+ case 8:
18304
+ const spl = option.sourcePrefixLength || 0;
18305
+ const fam = option.family || ip.familyOf(option.ip);
18306
+ const ipBuf = ip.encode(option.ip, Buffer$1.alloc);
18307
+ const ipLen = Math.ceil(spl / 8);
18308
+ buf.writeUInt16BE(ipLen + 4, offset);
18309
+ offset += 2;
18310
+ buf.writeUInt16BE(fam, offset);
18311
+ offset += 2;
18312
+ buf.writeUInt8(spl, offset++);
18313
+ buf.writeUInt8(option.scopePrefixLength || 0, offset++);
18314
+ ipBuf.copy(buf, offset, 0, ipLen);
18315
+ offset += ipLen;
18316
+ break;
18317
+ case 11:
18318
+ if (option.timeout) {
18319
+ buf.writeUInt16BE(2, offset);
18320
+ offset += 2;
18321
+ buf.writeUInt16BE(option.timeout, offset);
18322
+ offset += 2;
18323
+ } else {
18324
+ buf.writeUInt16BE(0, offset);
18325
+ offset += 2;
18326
+ }
18327
+ break;
18328
+ case 12:
18329
+ const len = option.length || 0;
18330
+ buf.writeUInt16BE(len, offset);
18331
+ offset += 2;
18332
+ buf.fill(0, offset, offset + len);
18333
+ offset += len;
18334
+ break;
18335
+ case 14:
18336
+ const tagsLen = option.tags.length * 2;
18337
+ buf.writeUInt16BE(tagsLen, offset);
18338
+ offset += 2;
18339
+ for (const tag of option.tags) {
18340
+ buf.writeUInt16BE(tag, offset);
18341
+ offset += 2;
18342
+ }
18343
+ break;
18344
+ default: throw new Error(`Unknown roption code: ${option.code}`);
18345
+ }
18346
+ roption.encode.bytes = offset - oldOffset;
18347
+ return buf;
18348
+ };
18349
+ roption.encode.bytes = 0;
18350
+ roption.decode = function(buf, offset) {
18351
+ if (!offset) offset = 0;
18352
+ const option = {};
18353
+ option.code = buf.readUInt16BE(offset);
18354
+ option.type = optioncodes.toString(option.code);
18355
+ offset += 2;
18356
+ const len = buf.readUInt16BE(offset);
18357
+ offset += 2;
18358
+ option.data = buf.slice(offset, offset + len);
18359
+ switch (option.code) {
18360
+ case 8:
18361
+ option.family = buf.readUInt16BE(offset);
18362
+ offset += 2;
18363
+ option.sourcePrefixLength = buf.readUInt8(offset++);
18364
+ option.scopePrefixLength = buf.readUInt8(offset++);
18365
+ const padded = Buffer$1.alloc(option.family === 1 ? 4 : 16);
18366
+ buf.copy(padded, 0, offset, offset + len - 4);
18367
+ option.ip = ip.decode(padded);
18368
+ break;
18369
+ case 11:
18370
+ if (len > 0) {
18371
+ option.timeout = buf.readUInt16BE(offset);
18372
+ offset += 2;
18373
+ }
18374
+ break;
18375
+ case 14:
18376
+ option.tags = [];
18377
+ for (let i = 0; i < len; i += 2) {
18378
+ option.tags.push(buf.readUInt16BE(offset));
18379
+ offset += 2;
18380
+ }
18381
+ }
18382
+ roption.decode.bytes = len + 4;
18383
+ return option;
18384
+ };
18385
+ roption.decode.bytes = 0;
18386
+ roption.encodingLength = function(option) {
18387
+ if (option.data) return option.data.length + 4;
18388
+ switch (optioncodes.toCode(option.code)) {
18389
+ case 8:
18390
+ const spl = option.sourcePrefixLength || 0;
18391
+ return Math.ceil(spl / 8) + 8;
18392
+ case 11: return typeof option.timeout === "number" ? 6 : 4;
18393
+ case 12: return option.length + 4;
18394
+ case 14: return 4 + option.tags.length * 2;
18395
+ }
18396
+ throw new Error(`Unknown roption code: ${option.code}`);
18397
+ };
18398
+ var ropt = exports.opt = {};
18399
+ ropt.encode = function(options, buf, offset) {
18400
+ if (!buf) buf = Buffer$1.alloc(ropt.encodingLength(options));
18401
+ if (!offset) offset = 0;
18402
+ const oldOffset = offset;
18403
+ const rdlen = encodingLengthList(options, roption);
18404
+ buf.writeUInt16BE(rdlen, offset);
18405
+ offset = encodeList(options, roption, buf, offset + 2);
18406
+ ropt.encode.bytes = offset - oldOffset;
18407
+ return buf;
18408
+ };
18409
+ ropt.encode.bytes = 0;
18410
+ ropt.decode = function(buf, offset) {
18411
+ if (!offset) offset = 0;
18412
+ const oldOffset = offset;
18413
+ const options = [];
18414
+ let rdlen = buf.readUInt16BE(offset);
18415
+ offset += 2;
18416
+ let o = 0;
18417
+ while (rdlen > 0) {
18418
+ options[o++] = roption.decode(buf, offset);
18419
+ offset += roption.decode.bytes;
18420
+ rdlen -= roption.decode.bytes;
18421
+ }
18422
+ ropt.decode.bytes = offset - oldOffset;
18423
+ return options;
18424
+ };
18425
+ ropt.decode.bytes = 0;
18426
+ ropt.encodingLength = function(options) {
18427
+ return 2 + encodingLengthList(options || [], roption);
18428
+ };
18429
+ var rdnskey = exports.dnskey = {};
18430
+ rdnskey.PROTOCOL_DNSSEC = 3;
18431
+ rdnskey.ZONE_KEY = 128;
18432
+ rdnskey.SECURE_ENTRYPOINT = 32768;
18433
+ rdnskey.encode = function(key, buf, offset) {
18434
+ if (!buf) buf = Buffer$1.alloc(rdnskey.encodingLength(key));
18435
+ if (!offset) offset = 0;
18436
+ const oldOffset = offset;
18437
+ const keydata = key.key;
18438
+ if (!Buffer$1.isBuffer(keydata)) throw new Error("Key must be a Buffer");
18439
+ offset += 2;
18440
+ buf.writeUInt16BE(key.flags, offset);
18441
+ offset += 2;
18442
+ buf.writeUInt8(rdnskey.PROTOCOL_DNSSEC, offset);
18443
+ offset += 1;
18444
+ buf.writeUInt8(key.algorithm, offset);
18445
+ offset += 1;
18446
+ keydata.copy(buf, offset, 0, keydata.length);
18447
+ offset += keydata.length;
18448
+ rdnskey.encode.bytes = offset - oldOffset;
18449
+ buf.writeUInt16BE(rdnskey.encode.bytes - 2, oldOffset);
18450
+ return buf;
18451
+ };
18452
+ rdnskey.encode.bytes = 0;
18453
+ rdnskey.decode = function(buf, offset) {
18454
+ if (!offset) offset = 0;
18455
+ const oldOffset = offset;
18456
+ var key = {};
18457
+ var length = buf.readUInt16BE(offset);
18458
+ offset += 2;
18459
+ key.flags = buf.readUInt16BE(offset);
18460
+ offset += 2;
18461
+ if (buf.readUInt8(offset) !== rdnskey.PROTOCOL_DNSSEC) throw new Error("Protocol must be 3");
18462
+ offset += 1;
18463
+ key.algorithm = buf.readUInt8(offset);
18464
+ offset += 1;
18465
+ key.key = buf.slice(offset, oldOffset + length + 2);
18466
+ offset += key.key.length;
18467
+ rdnskey.decode.bytes = offset - oldOffset;
18468
+ return key;
18469
+ };
18470
+ rdnskey.decode.bytes = 0;
18471
+ rdnskey.encodingLength = function(key) {
18472
+ return 6 + Buffer$1.byteLength(key.key);
18473
+ };
18474
+ var rrrsig = exports.rrsig = {};
18475
+ rrrsig.encode = function(sig, buf, offset) {
18476
+ if (!buf) buf = Buffer$1.alloc(rrrsig.encodingLength(sig));
18477
+ if (!offset) offset = 0;
18478
+ const oldOffset = offset;
18479
+ const signature = sig.signature;
18480
+ if (!Buffer$1.isBuffer(signature)) throw new Error("Signature must be a Buffer");
18481
+ offset += 2;
18482
+ buf.writeUInt16BE(types.toType(sig.typeCovered), offset);
18483
+ offset += 2;
18484
+ buf.writeUInt8(sig.algorithm, offset);
18485
+ offset += 1;
18486
+ buf.writeUInt8(sig.labels, offset);
18487
+ offset += 1;
18488
+ buf.writeUInt32BE(sig.originalTTL, offset);
18489
+ offset += 4;
18490
+ buf.writeUInt32BE(sig.expiration, offset);
18491
+ offset += 4;
18492
+ buf.writeUInt32BE(sig.inception, offset);
18493
+ offset += 4;
18494
+ buf.writeUInt16BE(sig.keyTag, offset);
18495
+ offset += 2;
18496
+ name.encode(sig.signersName, buf, offset);
18497
+ offset += name.encode.bytes;
18498
+ signature.copy(buf, offset, 0, signature.length);
18499
+ offset += signature.length;
18500
+ rrrsig.encode.bytes = offset - oldOffset;
18501
+ buf.writeUInt16BE(rrrsig.encode.bytes - 2, oldOffset);
18502
+ return buf;
18503
+ };
18504
+ rrrsig.encode.bytes = 0;
18505
+ rrrsig.decode = function(buf, offset) {
18506
+ if (!offset) offset = 0;
18507
+ const oldOffset = offset;
18508
+ var sig = {};
18509
+ var length = buf.readUInt16BE(offset);
18510
+ offset += 2;
18511
+ sig.typeCovered = types.toString(buf.readUInt16BE(offset));
18512
+ offset += 2;
18513
+ sig.algorithm = buf.readUInt8(offset);
18514
+ offset += 1;
18515
+ sig.labels = buf.readUInt8(offset);
18516
+ offset += 1;
18517
+ sig.originalTTL = buf.readUInt32BE(offset);
18518
+ offset += 4;
18519
+ sig.expiration = buf.readUInt32BE(offset);
18520
+ offset += 4;
18521
+ sig.inception = buf.readUInt32BE(offset);
18522
+ offset += 4;
18523
+ sig.keyTag = buf.readUInt16BE(offset);
18524
+ offset += 2;
18525
+ sig.signersName = name.decode(buf, offset);
18526
+ offset += name.decode.bytes;
18527
+ sig.signature = buf.slice(offset, oldOffset + length + 2);
18528
+ offset += sig.signature.length;
18529
+ rrrsig.decode.bytes = offset - oldOffset;
18530
+ return sig;
18531
+ };
18532
+ rrrsig.decode.bytes = 0;
18533
+ rrrsig.encodingLength = function(sig) {
18534
+ return 20 + name.encodingLength(sig.signersName) + Buffer$1.byteLength(sig.signature);
18535
+ };
18536
+ var rrp = exports.rp = {};
18537
+ rrp.encode = function(data, buf, offset) {
18538
+ if (!buf) buf = Buffer$1.alloc(rrp.encodingLength(data));
18539
+ if (!offset) offset = 0;
18540
+ const oldOffset = offset;
18541
+ offset += 2;
18542
+ name.encode(data.mbox || ".", buf, offset, { mail: true });
18543
+ offset += name.encode.bytes;
18544
+ name.encode(data.txt || ".", buf, offset);
18545
+ offset += name.encode.bytes;
18546
+ rrp.encode.bytes = offset - oldOffset;
18547
+ buf.writeUInt16BE(rrp.encode.bytes - 2, oldOffset);
18548
+ return buf;
18549
+ };
18550
+ rrp.encode.bytes = 0;
18551
+ rrp.decode = function(buf, offset) {
18552
+ if (!offset) offset = 0;
18553
+ const oldOffset = offset;
18554
+ const data = {};
18555
+ offset += 2;
18556
+ data.mbox = name.decode(buf, offset, { mail: true }) || ".";
18557
+ offset += name.decode.bytes;
18558
+ data.txt = name.decode(buf, offset) || ".";
18559
+ offset += name.decode.bytes;
18560
+ rrp.decode.bytes = offset - oldOffset;
18561
+ return data;
18562
+ };
18563
+ rrp.decode.bytes = 0;
18564
+ rrp.encodingLength = function(data) {
18565
+ return 2 + name.encodingLength(data.mbox || ".") + name.encodingLength(data.txt || ".");
18566
+ };
18567
+ var typebitmap = {};
18568
+ typebitmap.encode = function(typelist, buf, offset) {
18569
+ if (!buf) buf = Buffer$1.alloc(typebitmap.encodingLength(typelist));
18570
+ if (!offset) offset = 0;
18571
+ const oldOffset = offset;
18572
+ var typesByWindow = [];
18573
+ for (var i = 0; i < typelist.length; i++) {
18574
+ var typeid = types.toType(typelist[i]);
18575
+ if (typesByWindow[typeid >> 8] === void 0) typesByWindow[typeid >> 8] = [];
18576
+ typesByWindow[typeid >> 8][typeid >> 3 & 31] |= 1 << 7 - (typeid & 7);
18577
+ }
18578
+ for (i = 0; i < typesByWindow.length; i++) if (typesByWindow[i] !== void 0) {
18579
+ var windowBuf = Buffer$1.from(typesByWindow[i]);
18580
+ buf.writeUInt8(i, offset);
18581
+ offset += 1;
18582
+ buf.writeUInt8(windowBuf.length, offset);
18583
+ offset += 1;
18584
+ windowBuf.copy(buf, offset);
18585
+ offset += windowBuf.length;
18586
+ }
18587
+ typebitmap.encode.bytes = offset - oldOffset;
18588
+ return buf;
18589
+ };
18590
+ typebitmap.encode.bytes = 0;
18591
+ typebitmap.decode = function(buf, offset, length) {
18592
+ if (!offset) offset = 0;
18593
+ const oldOffset = offset;
18594
+ var typelist = [];
18595
+ while (offset - oldOffset < length) {
18596
+ var window = buf.readUInt8(offset);
18597
+ offset += 1;
18598
+ var windowLength = buf.readUInt8(offset);
18599
+ offset += 1;
18600
+ for (var i = 0; i < windowLength; i++) {
18601
+ var b = buf.readUInt8(offset + i);
18602
+ for (var j = 0; j < 8; j++) if (b & 1 << 7 - j) {
18603
+ var typeid = types.toString(window << 8 | i << 3 | j);
18604
+ typelist.push(typeid);
18605
+ }
18606
+ }
18607
+ offset += windowLength;
18608
+ }
18609
+ typebitmap.decode.bytes = offset - oldOffset;
18610
+ return typelist;
18611
+ };
18612
+ typebitmap.decode.bytes = 0;
18613
+ typebitmap.encodingLength = function(typelist) {
18614
+ var extents = [];
18615
+ for (var i = 0; i < typelist.length; i++) {
18616
+ var typeid = types.toType(typelist[i]);
18617
+ extents[typeid >> 8] = Math.max(extents[typeid >> 8] || 0, typeid & 255);
18618
+ }
18619
+ var len = 0;
18620
+ for (i = 0; i < extents.length; i++) if (extents[i] !== void 0) len += 2 + Math.ceil((extents[i] + 1) / 8);
18621
+ return len;
18622
+ };
18623
+ var rnsec = exports.nsec = {};
18624
+ rnsec.encode = function(record, buf, offset) {
18625
+ if (!buf) buf = Buffer$1.alloc(rnsec.encodingLength(record));
18626
+ if (!offset) offset = 0;
18627
+ const oldOffset = offset;
18628
+ offset += 2;
18629
+ name.encode(record.nextDomain, buf, offset);
18630
+ offset += name.encode.bytes;
18631
+ typebitmap.encode(record.rrtypes, buf, offset);
18632
+ offset += typebitmap.encode.bytes;
18633
+ rnsec.encode.bytes = offset - oldOffset;
18634
+ buf.writeUInt16BE(rnsec.encode.bytes - 2, oldOffset);
18635
+ return buf;
18636
+ };
18637
+ rnsec.encode.bytes = 0;
18638
+ rnsec.decode = function(buf, offset) {
18639
+ if (!offset) offset = 0;
18640
+ const oldOffset = offset;
18641
+ var record = {};
18642
+ var length = buf.readUInt16BE(offset);
18643
+ offset += 2;
18644
+ record.nextDomain = name.decode(buf, offset);
18645
+ offset += name.decode.bytes;
18646
+ record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset));
18647
+ offset += typebitmap.decode.bytes;
18648
+ rnsec.decode.bytes = offset - oldOffset;
18649
+ return record;
18650
+ };
18651
+ rnsec.decode.bytes = 0;
18652
+ rnsec.encodingLength = function(record) {
18653
+ return 2 + name.encodingLength(record.nextDomain) + typebitmap.encodingLength(record.rrtypes);
18654
+ };
18655
+ var rnsec3 = exports.nsec3 = {};
18656
+ rnsec3.encode = function(record, buf, offset) {
18657
+ if (!buf) buf = Buffer$1.alloc(rnsec3.encodingLength(record));
18658
+ if (!offset) offset = 0;
18659
+ const oldOffset = offset;
18660
+ const salt = record.salt;
18661
+ if (!Buffer$1.isBuffer(salt)) throw new Error("salt must be a Buffer");
18662
+ const nextDomain = record.nextDomain;
18663
+ if (!Buffer$1.isBuffer(nextDomain)) throw new Error("nextDomain must be a Buffer");
18664
+ offset += 2;
18665
+ buf.writeUInt8(record.algorithm, offset);
18666
+ offset += 1;
18667
+ buf.writeUInt8(record.flags, offset);
18668
+ offset += 1;
18669
+ buf.writeUInt16BE(record.iterations, offset);
18670
+ offset += 2;
18671
+ buf.writeUInt8(salt.length, offset);
18672
+ offset += 1;
18673
+ salt.copy(buf, offset, 0, salt.length);
18674
+ offset += salt.length;
18675
+ buf.writeUInt8(nextDomain.length, offset);
18676
+ offset += 1;
18677
+ nextDomain.copy(buf, offset, 0, nextDomain.length);
18678
+ offset += nextDomain.length;
18679
+ typebitmap.encode(record.rrtypes, buf, offset);
18680
+ offset += typebitmap.encode.bytes;
18681
+ rnsec3.encode.bytes = offset - oldOffset;
18682
+ buf.writeUInt16BE(rnsec3.encode.bytes - 2, oldOffset);
18683
+ return buf;
18684
+ };
18685
+ rnsec3.encode.bytes = 0;
18686
+ rnsec3.decode = function(buf, offset) {
18687
+ if (!offset) offset = 0;
18688
+ const oldOffset = offset;
18689
+ var record = {};
18690
+ var length = buf.readUInt16BE(offset);
18691
+ offset += 2;
18692
+ record.algorithm = buf.readUInt8(offset);
18693
+ offset += 1;
18694
+ record.flags = buf.readUInt8(offset);
18695
+ offset += 1;
18696
+ record.iterations = buf.readUInt16BE(offset);
18697
+ offset += 2;
18698
+ const saltLength = buf.readUInt8(offset);
18699
+ offset += 1;
18700
+ record.salt = buf.slice(offset, offset + saltLength);
18701
+ offset += saltLength;
18702
+ const hashLength = buf.readUInt8(offset);
18703
+ offset += 1;
18704
+ record.nextDomain = buf.slice(offset, offset + hashLength);
18705
+ offset += hashLength;
18706
+ record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset));
18707
+ offset += typebitmap.decode.bytes;
18708
+ rnsec3.decode.bytes = offset - oldOffset;
18709
+ return record;
18710
+ };
18711
+ rnsec3.decode.bytes = 0;
18712
+ rnsec3.encodingLength = function(record) {
18713
+ return 8 + record.salt.length + record.nextDomain.length + typebitmap.encodingLength(record.rrtypes);
18714
+ };
18715
+ var rds = exports.ds = {};
18716
+ rds.encode = function(digest, buf, offset) {
18717
+ if (!buf) buf = Buffer$1.alloc(rds.encodingLength(digest));
18718
+ if (!offset) offset = 0;
18719
+ const oldOffset = offset;
18720
+ const digestdata = digest.digest;
18721
+ if (!Buffer$1.isBuffer(digestdata)) throw new Error("Digest must be a Buffer");
18722
+ offset += 2;
18723
+ buf.writeUInt16BE(digest.keyTag, offset);
18724
+ offset += 2;
18725
+ buf.writeUInt8(digest.algorithm, offset);
18726
+ offset += 1;
18727
+ buf.writeUInt8(digest.digestType, offset);
18728
+ offset += 1;
18729
+ digestdata.copy(buf, offset, 0, digestdata.length);
18730
+ offset += digestdata.length;
18731
+ rds.encode.bytes = offset - oldOffset;
18732
+ buf.writeUInt16BE(rds.encode.bytes - 2, oldOffset);
18733
+ return buf;
18734
+ };
18735
+ rds.encode.bytes = 0;
18736
+ rds.decode = function(buf, offset) {
18737
+ if (!offset) offset = 0;
18738
+ const oldOffset = offset;
18739
+ var digest = {};
18740
+ var length = buf.readUInt16BE(offset);
18741
+ offset += 2;
18742
+ digest.keyTag = buf.readUInt16BE(offset);
18743
+ offset += 2;
18744
+ digest.algorithm = buf.readUInt8(offset);
18745
+ offset += 1;
18746
+ digest.digestType = buf.readUInt8(offset);
18747
+ offset += 1;
18748
+ digest.digest = buf.slice(offset, oldOffset + length + 2);
18749
+ offset += digest.digest.length;
18750
+ rds.decode.bytes = offset - oldOffset;
18751
+ return digest;
18752
+ };
18753
+ rds.decode.bytes = 0;
18754
+ rds.encodingLength = function(digest) {
18755
+ return 6 + Buffer$1.byteLength(digest.digest);
18756
+ };
18757
+ var rsshfp = exports.sshfp = {};
18758
+ rsshfp.getFingerprintLengthForHashType = function getFingerprintLengthForHashType(hashType) {
18759
+ switch (hashType) {
18760
+ case 1: return 20;
18761
+ case 2: return 32;
18762
+ }
18763
+ };
18764
+ rsshfp.encode = function encode(record, buf, offset) {
18765
+ if (!buf) buf = Buffer$1.alloc(rsshfp.encodingLength(record));
18766
+ if (!offset) offset = 0;
18767
+ const oldOffset = offset;
18768
+ offset += 2;
18769
+ buf[offset] = record.algorithm;
18770
+ offset += 1;
18771
+ buf[offset] = record.hash;
18772
+ offset += 1;
18773
+ const fingerprintBuf = Buffer$1.from(record.fingerprint.toUpperCase(), "hex");
18774
+ if (fingerprintBuf.length !== rsshfp.getFingerprintLengthForHashType(record.hash)) throw new Error("Invalid fingerprint length");
18775
+ fingerprintBuf.copy(buf, offset);
18776
+ offset += fingerprintBuf.byteLength;
18777
+ rsshfp.encode.bytes = offset - oldOffset;
18778
+ buf.writeUInt16BE(rsshfp.encode.bytes - 2, oldOffset);
18779
+ return buf;
18780
+ };
18781
+ rsshfp.encode.bytes = 0;
18782
+ rsshfp.decode = function decode(buf, offset) {
18783
+ if (!offset) offset = 0;
18784
+ const oldOffset = offset;
18785
+ const record = {};
18786
+ offset += 2;
18787
+ record.algorithm = buf[offset];
18788
+ offset += 1;
18789
+ record.hash = buf[offset];
18790
+ offset += 1;
18791
+ const fingerprintLength = rsshfp.getFingerprintLengthForHashType(record.hash);
18792
+ record.fingerprint = buf.slice(offset, offset + fingerprintLength).toString("hex").toUpperCase();
18793
+ offset += fingerprintLength;
18794
+ rsshfp.decode.bytes = offset - oldOffset;
18795
+ return record;
18796
+ };
18797
+ rsshfp.decode.bytes = 0;
18798
+ rsshfp.encodingLength = function(record) {
18799
+ return 4 + Buffer$1.from(record.fingerprint, "hex").byteLength;
18800
+ };
18801
+ var rnaptr = exports.naptr = {};
18802
+ rnaptr.encode = function(data, buf, offset) {
18803
+ if (!buf) buf = Buffer$1.alloc(rnaptr.encodingLength(data));
18804
+ if (!offset) offset = 0;
18805
+ const oldOffset = offset;
18806
+ offset += 2;
18807
+ buf.writeUInt16BE(data.order || 0, offset);
18808
+ offset += 2;
18809
+ buf.writeUInt16BE(data.preference || 0, offset);
18810
+ offset += 2;
18811
+ string.encode(data.flags, buf, offset);
18812
+ offset += string.encode.bytes;
18813
+ string.encode(data.services, buf, offset);
18814
+ offset += string.encode.bytes;
18815
+ string.encode(data.regexp, buf, offset);
18816
+ offset += string.encode.bytes;
18817
+ name.encode(data.replacement, buf, offset);
18818
+ offset += name.encode.bytes;
18819
+ rnaptr.encode.bytes = offset - oldOffset;
18820
+ buf.writeUInt16BE(rnaptr.encode.bytes - 2, oldOffset);
18821
+ return buf;
18822
+ };
18823
+ rnaptr.encode.bytes = 0;
18824
+ rnaptr.decode = function(buf, offset) {
18825
+ if (!offset) offset = 0;
18826
+ const oldOffset = offset;
18827
+ const data = {};
18828
+ offset += 2;
18829
+ data.order = buf.readUInt16BE(offset);
18830
+ offset += 2;
18831
+ data.preference = buf.readUInt16BE(offset);
18832
+ offset += 2;
18833
+ data.flags = string.decode(buf, offset);
18834
+ offset += string.decode.bytes;
18835
+ data.services = string.decode(buf, offset);
18836
+ offset += string.decode.bytes;
18837
+ data.regexp = string.decode(buf, offset);
18838
+ offset += string.decode.bytes;
18839
+ data.replacement = name.decode(buf, offset);
18840
+ offset += name.decode.bytes;
18841
+ rnaptr.decode.bytes = offset - oldOffset;
18842
+ return data;
18843
+ };
18844
+ rnaptr.decode.bytes = 0;
18845
+ rnaptr.encodingLength = function(data) {
18846
+ return string.encodingLength(data.flags) + string.encodingLength(data.services) + string.encodingLength(data.regexp) + name.encodingLength(data.replacement) + 6;
18847
+ };
18848
+ var rtlsa = exports.tlsa = {};
18849
+ rtlsa.encode = function(cert, buf, offset) {
18850
+ if (!buf) buf = Buffer$1.alloc(rtlsa.encodingLength(cert));
18851
+ if (!offset) offset = 0;
18852
+ const oldOffset = offset;
18853
+ const certdata = cert.certificate;
18854
+ if (!Buffer$1.isBuffer(certdata)) throw new Error("Certificate must be a Buffer");
18855
+ offset += 2;
18856
+ buf.writeUInt8(cert.usage, offset);
18857
+ offset += 1;
18858
+ buf.writeUInt8(cert.selector, offset);
18859
+ offset += 1;
18860
+ buf.writeUInt8(cert.matchingType, offset);
18861
+ offset += 1;
18862
+ certdata.copy(buf, offset, 0, certdata.length);
18863
+ offset += certdata.length;
18864
+ rtlsa.encode.bytes = offset - oldOffset;
18865
+ buf.writeUInt16BE(rtlsa.encode.bytes - 2, oldOffset);
18866
+ return buf;
18867
+ };
18868
+ rtlsa.encode.bytes = 0;
18869
+ rtlsa.decode = function(buf, offset) {
18870
+ if (!offset) offset = 0;
18871
+ const oldOffset = offset;
18872
+ const cert = {};
18873
+ const length = buf.readUInt16BE(offset);
18874
+ offset += 2;
18875
+ cert.usage = buf.readUInt8(offset);
18876
+ offset += 1;
18877
+ cert.selector = buf.readUInt8(offset);
18878
+ offset += 1;
18879
+ cert.matchingType = buf.readUInt8(offset);
18880
+ offset += 1;
18881
+ cert.certificate = buf.slice(offset, oldOffset + length + 2);
18882
+ offset += cert.certificate.length;
18883
+ rtlsa.decode.bytes = offset - oldOffset;
18884
+ return cert;
18885
+ };
18886
+ rtlsa.decode.bytes = 0;
18887
+ rtlsa.encodingLength = function(cert) {
18888
+ return 5 + Buffer$1.byteLength(cert.certificate);
18889
+ };
18890
+ var renc = exports.record = function(type) {
18891
+ switch (type.toUpperCase()) {
18892
+ case "A": return ra;
18893
+ case "PTR": return rptr;
18894
+ case "CNAME": return rcname;
18895
+ case "DNAME": return rdname;
18896
+ case "TXT": return rtxt;
18897
+ case "NULL": return rnull;
18898
+ case "AAAA": return raaaa;
18899
+ case "SRV": return rsrv;
18900
+ case "HINFO": return rhinfo;
18901
+ case "CAA": return rcaa;
18902
+ case "NS": return rns;
18903
+ case "SOA": return rsoa;
18904
+ case "MX": return rmx;
18905
+ case "OPT": return ropt;
18906
+ case "DNSKEY": return rdnskey;
18907
+ case "RRSIG": return rrrsig;
18908
+ case "RP": return rrp;
18909
+ case "NSEC": return rnsec;
18910
+ case "NSEC3": return rnsec3;
18911
+ case "SSHFP": return rsshfp;
18912
+ case "DS": return rds;
18913
+ case "NAPTR": return rnaptr;
18914
+ case "TLSA": return rtlsa;
18915
+ }
18916
+ return runknown;
18917
+ };
18918
+ var answer = exports.answer = {};
18919
+ answer.encode = function(a, buf, offset) {
18920
+ if (!buf) buf = Buffer$1.alloc(answer.encodingLength(a));
18921
+ if (!offset) offset = 0;
18922
+ const oldOffset = offset;
18923
+ name.encode(a.name, buf, offset);
18924
+ offset += name.encode.bytes;
18925
+ buf.writeUInt16BE(types.toType(a.type), offset);
18926
+ if (a.type.toUpperCase() === "OPT") {
18927
+ if (a.name !== ".") throw new Error("OPT name must be root.");
18928
+ buf.writeUInt16BE(a.udpPayloadSize || 4096, offset + 2);
18929
+ buf.writeUInt8(a.extendedRcode || 0, offset + 4);
18930
+ buf.writeUInt8(a.ednsVersion || 0, offset + 5);
18931
+ buf.writeUInt16BE(a.flags || 0, offset + 6);
18932
+ offset += 8;
18933
+ ropt.encode(a.options || [], buf, offset);
18934
+ offset += ropt.encode.bytes;
18935
+ } else {
18936
+ let klass = classes.toClass(a.class === void 0 ? "IN" : a.class);
18937
+ if (a.flush) klass |= FLUSH_MASK;
18938
+ buf.writeUInt16BE(klass, offset + 2);
18939
+ buf.writeUInt32BE(a.ttl || 0, offset + 4);
18940
+ offset += 8;
18941
+ const enc = renc(a.type);
18942
+ enc.encode(a.data, buf, offset);
18943
+ offset += enc.encode.bytes;
18944
+ }
18945
+ answer.encode.bytes = offset - oldOffset;
18946
+ return buf;
18947
+ };
18948
+ answer.encode.bytes = 0;
18949
+ answer.decode = function(buf, offset) {
18950
+ if (!offset) offset = 0;
18951
+ const a = {};
18952
+ const oldOffset = offset;
18953
+ a.name = name.decode(buf, offset);
18954
+ offset += name.decode.bytes;
18955
+ a.type = types.toString(buf.readUInt16BE(offset));
18956
+ if (a.type === "OPT") {
18957
+ a.udpPayloadSize = buf.readUInt16BE(offset + 2);
18958
+ a.extendedRcode = buf.readUInt8(offset + 4);
18959
+ a.ednsVersion = buf.readUInt8(offset + 5);
18960
+ a.flags = buf.readUInt16BE(offset + 6);
18961
+ a.flag_do = (a.flags >> 15 & 1) === 1;
18962
+ a.options = ropt.decode(buf, offset + 8);
18963
+ offset += 8 + ropt.decode.bytes;
18964
+ } else {
18965
+ const klass = buf.readUInt16BE(offset + 2);
18966
+ a.ttl = buf.readUInt32BE(offset + 4);
18967
+ a.class = classes.toString(klass & NOT_FLUSH_MASK);
18968
+ a.flush = !!(klass & FLUSH_MASK);
18969
+ const enc = renc(a.type);
18970
+ a.data = enc.decode(buf, offset + 8);
18971
+ offset += 8 + enc.decode.bytes;
18972
+ }
18973
+ answer.decode.bytes = offset - oldOffset;
18974
+ return a;
18975
+ };
18976
+ answer.decode.bytes = 0;
18977
+ answer.encodingLength = function(a) {
18978
+ const data = a.data !== null && a.data !== void 0 ? a.data : a.options;
18979
+ return name.encodingLength(a.name) + 8 + renc(a.type).encodingLength(data);
18980
+ };
18981
+ var question = exports.question = {};
18982
+ question.encode = function(q, buf, offset) {
18983
+ if (!buf) buf = Buffer$1.alloc(question.encodingLength(q));
18984
+ if (!offset) offset = 0;
18985
+ const oldOffset = offset;
18986
+ name.encode(q.name, buf, offset);
18987
+ offset += name.encode.bytes;
18988
+ buf.writeUInt16BE(types.toType(q.type), offset);
18989
+ offset += 2;
18990
+ buf.writeUInt16BE(classes.toClass(q.class === void 0 ? "IN" : q.class), offset);
18991
+ offset += 2;
18992
+ question.encode.bytes = offset - oldOffset;
18993
+ return q;
18994
+ };
18995
+ question.encode.bytes = 0;
18996
+ question.decode = function(buf, offset) {
18997
+ if (!offset) offset = 0;
18998
+ const oldOffset = offset;
18999
+ const q = {};
19000
+ q.name = name.decode(buf, offset);
19001
+ offset += name.decode.bytes;
19002
+ q.type = types.toString(buf.readUInt16BE(offset));
19003
+ offset += 2;
19004
+ q.class = classes.toString(buf.readUInt16BE(offset));
19005
+ offset += 2;
19006
+ if (!!(q.class & QU_MASK)) q.class &= NOT_QU_MASK;
19007
+ question.decode.bytes = offset - oldOffset;
19008
+ return q;
19009
+ };
19010
+ question.decode.bytes = 0;
19011
+ question.encodingLength = function(q) {
19012
+ return name.encodingLength(q.name) + 4;
19013
+ };
19014
+ exports.AUTHORITATIVE_ANSWER = 1024;
19015
+ exports.TRUNCATED_RESPONSE = 512;
19016
+ exports.RECURSION_DESIRED = 256;
19017
+ exports.RECURSION_AVAILABLE = 128;
19018
+ exports.AUTHENTIC_DATA = 32;
19019
+ exports.CHECKING_DISABLED = 16;
19020
+ exports.DNSSEC_OK = 32768;
19021
+ exports.encode = function(result, buf, offset) {
19022
+ const allocing = !buf;
19023
+ if (allocing) buf = Buffer$1.alloc(exports.encodingLength(result));
19024
+ if (!offset) offset = 0;
19025
+ const oldOffset = offset;
19026
+ if (!result.questions) result.questions = [];
19027
+ if (!result.answers) result.answers = [];
19028
+ if (!result.authorities) result.authorities = [];
19029
+ if (!result.additionals) result.additionals = [];
19030
+ header.encode(result, buf, offset);
19031
+ offset += header.encode.bytes;
19032
+ offset = encodeList(result.questions, question, buf, offset);
19033
+ offset = encodeList(result.answers, answer, buf, offset);
19034
+ offset = encodeList(result.authorities, answer, buf, offset);
19035
+ offset = encodeList(result.additionals, answer, buf, offset);
19036
+ exports.encode.bytes = offset - oldOffset;
19037
+ if (allocing && exports.encode.bytes !== buf.length) return buf.slice(0, exports.encode.bytes);
19038
+ return buf;
19039
+ };
19040
+ exports.encode.bytes = 0;
19041
+ exports.decode = function(buf, offset) {
19042
+ if (!offset) offset = 0;
19043
+ const oldOffset = offset;
19044
+ const result = header.decode(buf, offset);
19045
+ offset += header.decode.bytes;
19046
+ offset = decodeList(result.questions, question, buf, offset);
19047
+ offset = decodeList(result.answers, answer, buf, offset);
19048
+ offset = decodeList(result.authorities, answer, buf, offset);
19049
+ offset = decodeList(result.additionals, answer, buf, offset);
19050
+ exports.decode.bytes = offset - oldOffset;
19051
+ return result;
19052
+ };
19053
+ exports.decode.bytes = 0;
19054
+ exports.encodingLength = function(result) {
19055
+ return header.encodingLength(result) + encodingLengthList(result.questions || [], question) + encodingLengthList(result.answers || [], answer) + encodingLengthList(result.authorities || [], answer) + encodingLengthList(result.additionals || [], answer);
19056
+ };
19057
+ exports.streamEncode = function(result) {
19058
+ const buf = exports.encode(result);
19059
+ const sbuf = Buffer$1.alloc(2);
19060
+ sbuf.writeUInt16BE(buf.byteLength);
19061
+ const combine = Buffer$1.concat([sbuf, buf]);
19062
+ exports.streamEncode.bytes = combine.byteLength;
19063
+ return combine;
19064
+ };
19065
+ exports.streamEncode.bytes = 0;
19066
+ exports.streamDecode = function(sbuf) {
19067
+ const len = sbuf.readUInt16BE(0);
19068
+ if (sbuf.byteLength < len + 2) return null;
19069
+ const result = exports.decode(sbuf.slice(2));
19070
+ exports.streamDecode.bytes = exports.decode.bytes;
19071
+ return result;
19072
+ };
19073
+ exports.streamDecode.bytes = 0;
19074
+ function encodingLengthList(list, enc) {
19075
+ let len = 0;
19076
+ for (let i = 0; i < list.length; i++) len += enc.encodingLength(list[i]);
19077
+ return len;
19078
+ }
19079
+ function encodeList(list, enc, buf, offset) {
19080
+ for (let i = 0; i < list.length; i++) {
19081
+ enc.encode(list[i], buf, offset);
19082
+ offset += enc.encode.bytes;
19083
+ }
19084
+ return offset;
19085
+ }
19086
+ function decodeList(list, enc, buf, offset) {
19087
+ for (let i = 0; i < list.length; i++) {
19088
+ list[i] = enc.decode(buf, offset);
19089
+ offset += enc.decode.bytes;
19090
+ }
19091
+ return offset;
19092
+ }
19093
+ }));
19094
+ //#endregion
19095
+ //#region ../../node_modules/.bun/thunky@1.1.0/node_modules/thunky/index.js
19096
+ var require_thunky = /* @__PURE__ */ __commonJSMin(((exports, module) => {
19097
+ var nextTick = nextTickArgs;
19098
+ process.nextTick(upgrade, 42);
19099
+ module.exports = thunky;
19100
+ function thunky(fn) {
19101
+ var state = run;
19102
+ return thunk;
19103
+ function thunk(callback) {
19104
+ state(callback || noop);
19105
+ }
19106
+ function run(callback) {
19107
+ var stack = [callback];
19108
+ state = wait;
19109
+ fn(done);
19110
+ function wait(callback) {
19111
+ stack.push(callback);
19112
+ }
19113
+ function done(err) {
19114
+ var args = arguments;
19115
+ state = isError(err) ? run : finished;
19116
+ while (stack.length) finished(stack.shift());
19117
+ function finished(callback) {
19118
+ nextTick(apply, callback, args);
19119
+ }
19120
+ }
19121
+ }
19122
+ }
19123
+ function isError(err) {
19124
+ return Object.prototype.toString.call(err) === "[object Error]";
19125
+ }
19126
+ function noop() {}
19127
+ function apply(callback, args) {
19128
+ callback.apply(null, args);
19129
+ }
19130
+ function upgrade(val) {
19131
+ if (val === 42) nextTick = process.nextTick;
19132
+ }
19133
+ function nextTickArgs(fn, a, b) {
19134
+ process.nextTick(function() {
19135
+ fn(a, b);
19136
+ });
19137
+ }
19138
+ }));
19139
+ //#endregion
19140
+ //#region ../lib/src/control-plane/mdns-responder.ts
19141
+ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
19142
+ var packet = require_dns_packet();
19143
+ var dgram = __require("dgram");
19144
+ var thunky = require_thunky();
19145
+ var events = __require("events");
19146
+ var os = __require("os");
19147
+ var noop = function() {};
19148
+ module.exports = function(opts) {
19149
+ if (!opts) opts = {};
19150
+ var that = new events.EventEmitter();
19151
+ var port = typeof opts.port === "number" ? opts.port : 5353;
19152
+ var type = opts.type || "udp4";
19153
+ var ip = opts.ip || opts.host || (type === "udp4" ? "224.0.0.251" : null);
19154
+ var me = {
19155
+ address: ip,
19156
+ port
19157
+ };
19158
+ var memberships = {};
19159
+ var destroyed = false;
19160
+ var interval = null;
19161
+ if (type === "udp6" && (!ip || !opts.interface)) throw new Error("For IPv6 multicast you must specify `ip` and `interface`");
19162
+ var socket = opts.socket || dgram.createSocket({
19163
+ type,
19164
+ reuseAddr: opts.reuseAddr !== false,
19165
+ toString: function() {
19166
+ return type;
19167
+ }
19168
+ });
19169
+ socket.on("error", function(err) {
19170
+ if (err.code === "EACCES" || err.code === "EADDRINUSE") that.emit("error", err);
19171
+ else that.emit("warning", err);
19172
+ });
19173
+ socket.on("message", function(message, rinfo) {
19174
+ try {
19175
+ message = packet.decode(message);
19176
+ } catch (err) {
19177
+ that.emit("warning", err);
19178
+ return;
19179
+ }
19180
+ that.emit("packet", message, rinfo);
19181
+ if (message.type === "query") that.emit("query", message, rinfo);
19182
+ if (message.type === "response") that.emit("response", message, rinfo);
19183
+ });
19184
+ socket.on("listening", function() {
19185
+ if (!port) port = me.port = socket.address().port;
19186
+ if (opts.multicast !== false) {
19187
+ that.update();
19188
+ interval = setInterval(that.update, 5e3);
19189
+ socket.setMulticastTTL(opts.ttl || 255);
19190
+ socket.setMulticastLoopback(opts.loopback !== false);
19191
+ }
19192
+ });
19193
+ var bind = thunky(function(cb) {
19194
+ if (!port || opts.bind === false) return cb(null);
19195
+ socket.once("error", cb);
19196
+ socket.bind(port, opts.bind || opts.interface, function() {
19197
+ socket.removeListener("error", cb);
19198
+ cb(null);
19199
+ });
19200
+ });
19201
+ bind(function(err) {
19202
+ if (err) return that.emit("error", err);
19203
+ that.emit("ready");
19204
+ });
19205
+ that.send = function(value, rinfo, cb) {
19206
+ if (typeof rinfo === "function") return that.send(value, null, rinfo);
19207
+ if (!cb) cb = noop;
19208
+ if (!rinfo) rinfo = me;
19209
+ else if (!rinfo.host && !rinfo.address) rinfo.address = me.address;
19210
+ bind(onbind);
19211
+ function onbind(err) {
19212
+ if (destroyed) return cb();
19213
+ if (err) return cb(err);
19214
+ var message = packet.encode(value);
19215
+ socket.send(message, 0, message.length, rinfo.port, rinfo.address || rinfo.host, cb);
19216
+ }
19217
+ };
19218
+ that.response = that.respond = function(res, rinfo, cb) {
19219
+ if (Array.isArray(res)) res = { answers: res };
19220
+ res.type = "response";
19221
+ res.flags = (res.flags || 0) | packet.AUTHORITATIVE_ANSWER;
19222
+ that.send(res, rinfo, cb);
19223
+ };
19224
+ that.query = function(q, type, rinfo, cb) {
19225
+ if (typeof type === "function") return that.query(q, null, null, type);
19226
+ if (typeof type === "object" && type && type.port) return that.query(q, null, type, rinfo);
19227
+ if (typeof rinfo === "function") return that.query(q, type, null, rinfo);
19228
+ if (!cb) cb = noop;
19229
+ if (typeof q === "string") q = [{
19230
+ name: q,
19231
+ type: type || "ANY"
19232
+ }];
19233
+ if (Array.isArray(q)) q = {
19234
+ type: "query",
19235
+ questions: q
19236
+ };
19237
+ q.type = "query";
19238
+ that.send(q, rinfo, cb);
19239
+ };
19240
+ that.destroy = function(cb) {
19241
+ if (!cb) cb = noop;
19242
+ if (destroyed) return process.nextTick(cb);
19243
+ destroyed = true;
19244
+ clearInterval(interval);
19245
+ for (var iface in memberships) try {
19246
+ socket.dropMembership(ip, iface);
19247
+ } catch (e) {}
19248
+ memberships = {};
19249
+ socket.close(cb);
19250
+ };
19251
+ that.update = function() {
19252
+ var ifaces = opts.interface ? [].concat(opts.interface) : allInterfaces();
19253
+ var updated = false;
19254
+ for (var i = 0; i < ifaces.length; i++) {
19255
+ var addr = ifaces[i];
19256
+ if (memberships[addr]) continue;
19257
+ try {
19258
+ socket.addMembership(ip, addr);
19259
+ memberships[addr] = true;
19260
+ updated = true;
19261
+ } catch (err) {
19262
+ that.emit("warning", err);
19263
+ }
19264
+ }
19265
+ if (updated) {
19266
+ if (socket.setMulticastInterface) try {
19267
+ socket.setMulticastInterface(opts.interface || defaultInterface());
19268
+ } catch (err) {
19269
+ that.emit("warning", err);
19270
+ }
19271
+ that.emit("networkInterface");
19272
+ }
19273
+ };
19274
+ return that;
19275
+ };
19276
+ function defaultInterface() {
19277
+ var networks = os.networkInterfaces();
19278
+ var names = Object.keys(networks);
19279
+ for (var i = 0; i < names.length; i++) {
19280
+ var net = networks[names[i]];
19281
+ for (var j = 0; j < net.length; j++) {
19282
+ var iface = net[j];
19283
+ if (isIPv4(iface.family) && !iface.internal) {
19284
+ if (os.platform() === "darwin" && names[i] === "en0") return iface.address;
19285
+ return "0.0.0.0";
19286
+ }
19287
+ }
19288
+ }
19289
+ return "127.0.0.1";
19290
+ }
19291
+ function allInterfaces() {
19292
+ var networks = os.networkInterfaces();
19293
+ var names = Object.keys(networks);
19294
+ var res = [];
19295
+ for (var i = 0; i < names.length; i++) {
19296
+ var net = networks[names[i]];
19297
+ for (var j = 0; j < net.length; j++) {
19298
+ var iface = net[j];
19299
+ if (isIPv4(iface.family)) {
19300
+ res.push(iface.address);
19301
+ break;
19302
+ }
19303
+ }
19304
+ }
19305
+ return res;
19306
+ }
19307
+ function isIPv4(family) {
19308
+ return family === 4 || family === "IPv4";
19309
+ }
19310
+ })))());
19311
+ var logger$1 = createLogger("mdns");
19312
+ var MDNS_PORT = 5353;
19313
+ var TTL = 120;
19314
+ var HTTP_SERVICE = "_http._tcp.local";
19315
+ var DEFAULT_GUARDIAN_PORT = 3830;
19316
+ var DEFAULT_ASSISTANT_PORT = 3800;
17151
19317
  /**
17152
- * Startup warning for non-loopback bind addresses.
17153
- *
17154
- * When OP_BIND_ADDRESS is set to a non-loopback value (anything other than
17155
- * 127.0.0.1, localhost, or ::1), services are exposed on the host network
17156
- * interface. This helper produces a structured list of warning lines that
17157
- * callers should log at WARN level so operators are aware.
17158
- *
17159
- * Per-service overrides (e.g. OP_CHAT_BIND_ADDRESS, OP_VOICE_BIND_ADDRESS)
17160
- * are also checked and reported individually.
19318
+ * Sanitize an arbitrary string into a DNS label: lowercase, map every
19319
+ * character outside `[a-z0-9-]` (including `_`) to `-`, collapse `-` runs,
19320
+ * strip leading/trailing `-`, truncate to `maxLength`, and fall back to
19321
+ * `"openpalm"` if nothing survives. `maxLength` defaults to 54 so the
19322
+ * guardian variant (`<label>-guardian`, +9 chars) still fits the 63-char
19323
+ * DNS label limit.
17161
19324
  */
17162
- /** Known per-service bind address env var names (mirrors compose files). */
17163
- var PER_SERVICE_BIND_VARS = [
17164
- "OP_ASSISTANT_BIND_ADDRESS",
17165
- "OP_CLIENT_BIND_ADDRESS",
17166
- "OP_CHAT_BIND_ADDRESS",
17167
- "OP_API_BIND_ADDRESS",
17168
- "OP_VOICE_BIND_ADDRESS"
17169
- ];
17170
- function isLoopback(value) {
17171
- const v = value.trim();
17172
- return v === "127.0.0.1" || v === "localhost" || v === "::1";
19325
+ function sanitizeDnsLabel(raw, maxLength = 54) {
19326
+ return raw.trim().toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "").slice(0, maxLength).replace(/-+$/g, "") || "openpalm";
17173
19327
  }
17174
19328
  /**
17175
- * Opt-in: allow the web UI (including the first-run setup wizard) to be reached
17176
- * from a remote machine. When set, the UI server binds all interfaces and the
17177
- * Host/Origin allowlist + the setup-localhost-only gate are relaxed.
17178
- *
17179
- * This deliberately reopens the owner-race the setup gate normally prevents, so
17180
- * it is OFF by default and must be explicitly enabled by the operator. Reach the
17181
- * UI over an SSH tunnel or a reverse proxy instead when you can.
19329
+ * Derive the base label and full `.local` names from `OP_PROJECT_NAME`
19330
+ * (there is no structured "assistant name" persona is free-text
19331
+ * markdown). Defaults to `openpalm`.
17182
19332
  */
17183
- function isRemoteSetupAllowed(env = process.env) {
17184
- const v = env.OP_ALLOW_REMOTE_SETUP?.trim().toLowerCase();
17185
- return v === "1" || v === "true" || v === "yes";
19333
+ function deriveMdnsNames(env) {
19334
+ const base = sanitizeDnsLabel(env.OP_PROJECT_NAME ?? "openpalm");
19335
+ return {
19336
+ base,
19337
+ assistantName: `${base}.local`,
19338
+ guardianName: `${base}-guardian.local`
19339
+ };
19340
+ }
19341
+ function isMdnsOffToken(value) {
19342
+ if (value === void 0) return false;
19343
+ const v = value.trim().toLowerCase();
19344
+ return v === "0" || v === "false" || v === "off" || v === "no";
19345
+ }
19346
+ function isGuardianGated(env) {
19347
+ if (isMdnsOffToken(env.OP_MDNS)) return false;
19348
+ if (env.GUARDIAN_DIRECT_INGRESS !== "true") return false;
19349
+ const bind = env.OP_BIND_ADDRESS;
19350
+ return !!bind && !isLoopback(bind);
19351
+ }
19352
+ function isAssistantGated(env) {
19353
+ if (isMdnsOffToken(env.OP_MDNS)) return false;
19354
+ const bind = env.OP_ASSISTANT_BIND_ADDRESS;
19355
+ return !!bind && !isLoopback(bind);
19356
+ }
19357
+ function parsePort(value, fallback) {
19358
+ if (!value) return fallback;
19359
+ const n = Number.parseInt(value, 10);
19360
+ return Number.isFinite(n) && n > 0 ? n : fallback;
19361
+ }
19362
+ function defaultHostIpv4() {
19363
+ const interfaces = networkInterfaces();
19364
+ const addresses = [];
19365
+ for (const entries of Object.values(interfaces)) {
19366
+ if (!entries) continue;
19367
+ for (const entry of entries) {
19368
+ const family = entry.family;
19369
+ if ((family === "IPv4" || family === 4) && !entry.internal) addresses.push(entry.address);
19370
+ }
19371
+ }
19372
+ return addresses;
19373
+ }
19374
+ /** True only for a dotted-quad IPv4 literal (4 octets, each 0-255). */
19375
+ function isIpv4(address) {
19376
+ const parts = address.trim().split(".");
19377
+ if (parts.length !== 4) return false;
19378
+ return parts.every((p) => /^\d{1,3}$/.test(p) && Number(p) <= 255);
19379
+ }
19380
+ /** A specific bind IP narrows the addresses; a wildcard bind uses the host interface list. */
19381
+ function resolveAdvertAddresses(bind, hostIpv4) {
19382
+ const v = bind.trim();
19383
+ return (v !== "" && v !== "0.0.0.0" && v !== "::" ? [v] : hostIpv4).filter(isIpv4);
17186
19384
  }
17187
19385
  /**
17188
- * Inspect `env` for non-loopback bind address settings and return one warning
17189
- * line per problematic variable. Returns an empty array when everything is
17190
- * loopback (or unset, since the compose default is 127.0.0.1).
17191
- *
17192
- * @param env - The environment to inspect; typically `process.env`.
19386
+ * Resolve which names should be advertised right now, given non-secret env
19387
+ * (typically `readStackEnv(homeDir)`). Disabled entirely when `OP_MDNS`
19388
+ * trims/lowercases to "0"/"false"/"off"/"no". Guardian advert iff
19389
+ * `OP_BIND_ADDRESS` is set and non-loopback; assistant advert iff
19390
+ * `OP_ASSISTANT_BIND_ADDRESS` is set and non-loopback. An advert with zero
19391
+ * resolved addresses is dropped.
17193
19392
  */
17194
- function collectBindAddressWarnings(env) {
17195
- const warnings = [];
17196
- const globalBind = env.OP_BIND_ADDRESS;
17197
- if (globalBind && !isLoopback(globalBind)) warnings.push(`OP_BIND_ADDRESS is set to "${globalBind}" — services will be exposed on the host network interface, not just loopback. Ensure a firewall is in place if this host is reachable from untrusted networks.`);
17198
- for (const key of PER_SERVICE_BIND_VARS) {
17199
- const val = env[key];
17200
- if (val && !isLoopback(val)) warnings.push(`${key} is set to "${val}" — this service will be exposed on the host network interface.`);
19393
+ function resolveMdnsAdvertisements(env, hostIpv4 = defaultHostIpv4()) {
19394
+ const names = deriveMdnsNames(env);
19395
+ const adverts = [];
19396
+ if (isGuardianGated(env)) {
19397
+ const bind = env.OP_BIND_ADDRESS;
19398
+ const addresses = resolveAdvertAddresses(bind, hostIpv4);
19399
+ if (addresses.length > 0) adverts.push({
19400
+ service: "guardian",
19401
+ name: names.guardianName,
19402
+ port: parsePort(env.OP_GUARDIAN_PORT, DEFAULT_GUARDIAN_PORT),
19403
+ addresses
19404
+ });
19405
+ }
19406
+ if (isAssistantGated(env)) {
19407
+ const bind = env.OP_ASSISTANT_BIND_ADDRESS;
19408
+ const addresses = resolveAdvertAddresses(bind, hostIpv4);
19409
+ if (addresses.length > 0) adverts.push({
19410
+ service: "assistant",
19411
+ name: names.assistantName,
19412
+ port: parsePort(env.OP_ASSISTANT_PORT, DEFAULT_ASSISTANT_PORT),
19413
+ addresses
19414
+ });
19415
+ }
19416
+ return adverts;
19417
+ }
19418
+ /**
19419
+ * Names/ports/advertised-state for the admin UI, independent of whether any
19420
+ * host IPv4 address can actually be resolved right now — `advertised`
19421
+ * reflects the bind-address gate only (D6: gating is bind-address-only), so
19422
+ * this never needs a `hostIpv4` param.
19423
+ */
19424
+ function resolveMdnsStatus(env) {
19425
+ const names = deriveMdnsNames(env);
19426
+ return {
19427
+ assistant: {
19428
+ name: names.assistantName,
19429
+ port: parsePort(env.OP_ASSISTANT_PORT, DEFAULT_ASSISTANT_PORT),
19430
+ advertised: isAssistantGated(env)
19431
+ },
19432
+ guardian: {
19433
+ name: names.guardianName,
19434
+ port: parsePort(env.OP_GUARDIAN_PORT, DEFAULT_GUARDIAN_PORT),
19435
+ advertised: isGuardianGated(env)
19436
+ }
19437
+ };
19438
+ }
19439
+ /** The `<name>._http._tcp.local` service instance for a `<name>.local` host. */
19440
+ function mdnsInstanceName(name) {
19441
+ return `${name.toLowerCase().endsWith(".local") ? name.slice(0, -6) : name}.${HTTP_SERVICE}`;
19442
+ }
19443
+ /**
19444
+ * Build the answer + additional records for `questions` against the currently
19445
+ * advertised `adverts`. `A`/`ANY` queries match a `.local` name exactly; `PTR`/
19446
+ * `ANY` queries for `_http._tcp.local` list one service instance per advert
19447
+ * with SRV/TXT/A in the additional section. Returns `null` when nothing matches.
19448
+ */
19449
+ function buildResponse(questions, adverts) {
19450
+ const answers = [];
19451
+ const additionals = [];
19452
+ const aRecord = (name, address) => ({
19453
+ name,
19454
+ type: "A",
19455
+ ttl: TTL,
19456
+ flush: true,
19457
+ data: address
19458
+ });
19459
+ for (const q of questions) {
19460
+ const qName = (q.name ?? "").toLowerCase();
19461
+ const qType = q.type;
19462
+ if (qType === "A" || qType === "ANY") {
19463
+ const advert = adverts.find((a) => a.name.toLowerCase() === qName);
19464
+ if (advert) for (const address of advert.addresses) answers.push(aRecord(advert.name, address));
19465
+ }
19466
+ if ((qType === "PTR" || qType === "ANY") && qName === HTTP_SERVICE) for (const advert of adverts) {
19467
+ const instance = mdnsInstanceName(advert.name);
19468
+ answers.push({
19469
+ name: HTTP_SERVICE,
19470
+ type: "PTR",
19471
+ ttl: TTL,
19472
+ data: instance
19473
+ });
19474
+ additionals.push({
19475
+ name: instance,
19476
+ type: "SRV",
19477
+ ttl: TTL,
19478
+ data: {
19479
+ port: advert.port,
19480
+ target: advert.name
19481
+ }
19482
+ });
19483
+ additionals.push({
19484
+ name: instance,
19485
+ type: "TXT",
19486
+ ttl: TTL,
19487
+ data: ["path=/"]
19488
+ });
19489
+ for (const address of advert.addresses) additionals.push(aRecord(advert.name, address));
19490
+ }
19491
+ }
19492
+ if (answers.length === 0) return null;
19493
+ return {
19494
+ answers,
19495
+ additionals
19496
+ };
19497
+ }
19498
+ /** Gratuitous announcement (one A answer per advert address). */
19499
+ function announcementAnswers(adverts) {
19500
+ return adverts.flatMap((a) => a.addresses.map((address) => ({
19501
+ name: a.name,
19502
+ type: "A",
19503
+ ttl: TTL,
19504
+ flush: true,
19505
+ data: address
19506
+ })));
19507
+ }
19508
+ /** TTL-0 goodbye records for every advert address, sent best-effort on stop(). */
19509
+ function goodbyeAnswers(adverts) {
19510
+ return adverts.flatMap((a) => a.addresses.map((address) => ({
19511
+ name: a.name,
19512
+ type: "A",
19513
+ ttl: 0,
19514
+ flush: true,
19515
+ data: address
19516
+ })));
19517
+ }
19518
+ /** Test-only override consulted whenever a caller doesn't pass `deps.makeMdns`. */
19519
+ var testMdnsFactory = null;
19520
+ function defaultMdnsFactory() {
19521
+ return (0, import_multicast_dns.default)({ loopback: false });
19522
+ }
19523
+ /**
19524
+ * Build a live responder for `adverts`. Returns the public handle (`stop()` —
19525
+ * goodbye + destroy) plus an internal `silentClose` (destroy with no goodbye,
19526
+ * used only by `_resetMdnsResponderForTests`). All failures are logged `warn`
19527
+ * and swallowed — advertisement is a convenience and must never take the UI
19528
+ * server down.
19529
+ */
19530
+ function createResponder(adverts, deps = {}) {
19531
+ if (adverts.length === 0) return null;
19532
+ const factory = deps.makeMdns ?? testMdnsFactory ?? defaultMdnsFactory;
19533
+ const names = adverts.map((a) => a.name);
19534
+ let mdns;
19535
+ try {
19536
+ mdns = factory();
19537
+ } catch (err) {
19538
+ logger$1.warn("mdns: failed to create socket", {
19539
+ error: String(err),
19540
+ names
19541
+ });
19542
+ return null;
19543
+ }
19544
+ let stopped = false;
19545
+ let announceTimer = null;
19546
+ function announce() {
19547
+ const answers = announcementAnswers(adverts);
19548
+ if (answers.length === 0) return;
19549
+ try {
19550
+ mdns.respond({ answers });
19551
+ } catch (err) {
19552
+ logger$1.warn("mdns: send failed", {
19553
+ error: String(err),
19554
+ names
19555
+ });
19556
+ }
19557
+ }
19558
+ try {
19559
+ mdns.on("query", (message, rinfo) => {
19560
+ if (stopped) return;
19561
+ try {
19562
+ const res = buildResponse(message.questions ?? [], adverts);
19563
+ if (!res) return;
19564
+ const legacy = rinfo.port !== MDNS_PORT;
19565
+ mdns.respond(res, legacy ? rinfo : void 0);
19566
+ } catch (err) {
19567
+ logger$1.warn("mdns: message handling failed", {
19568
+ error: String(err),
19569
+ names
19570
+ });
19571
+ }
19572
+ });
19573
+ mdns.on("error", (err) => logger$1.warn("mdns: socket error", {
19574
+ error: err.message,
19575
+ names
19576
+ }));
19577
+ mdns.on("warning", (err) => logger$1.warn("mdns: warning", {
19578
+ error: err.message,
19579
+ names
19580
+ }));
19581
+ } catch (err) {
19582
+ logger$1.warn("mdns: listener setup failed", {
19583
+ error: String(err),
19584
+ names
19585
+ });
19586
+ }
19587
+ announce();
19588
+ announceTimer = setTimeout(() => announce(), 1e3);
19589
+ announceTimer.unref?.();
19590
+ function destroy() {
19591
+ if (announceTimer) clearTimeout(announceTimer);
19592
+ try {
19593
+ mdns.destroy();
19594
+ } catch (err) {
19595
+ logger$1.warn("mdns: close failed", {
19596
+ error: String(err),
19597
+ names
19598
+ });
19599
+ }
19600
+ }
19601
+ function silentClose() {
19602
+ if (stopped) return;
19603
+ stopped = true;
19604
+ destroy();
19605
+ }
19606
+ return {
19607
+ handle: { stop() {
19608
+ if (stopped) return;
19609
+ stopped = true;
19610
+ try {
19611
+ const answers = goodbyeAnswers(adverts);
19612
+ if (answers.length > 0) mdns.respond({ answers });
19613
+ } catch (err) {
19614
+ logger$1.warn("mdns: goodbye failed", {
19615
+ error: String(err),
19616
+ names
19617
+ });
19618
+ }
19619
+ destroy();
19620
+ } },
19621
+ silentClose
19622
+ };
19623
+ }
19624
+ var active = null;
19625
+ /**
19626
+ * Reconcile the live responder against the current stack.env (read fresh on
19627
+ * every call — never process.env for the gate vars, since hooks.server.ts's
19628
+ * startup promotion is only-if-unset and would go stale after a PUT). The
19629
+ * single process-env exception: `OP_MDNS` in `processEnv` force-disables
19630
+ * (operator/test kill switch), checked alongside the stack.env value. Never
19631
+ * throws. Returns the effective `MdnsStatus` so route handlers can echo it.
19632
+ */
19633
+ function reconcileMdnsResponder(homeDir, deps = {}) {
19634
+ let env;
19635
+ try {
19636
+ env = deps.env ?? readStackEnv(homeDir);
19637
+ } catch (err) {
19638
+ logger$1.warn("mdns: reading stack.env failed", { error: String(err) });
19639
+ env = {};
19640
+ }
19641
+ const effectiveEnv = isMdnsOffToken((deps.processEnv ?? process.env).OP_MDNS) ? {
19642
+ ...env,
19643
+ OP_MDNS: "off"
19644
+ } : env;
19645
+ try {
19646
+ const adverts = resolveMdnsAdvertisements(effectiveEnv, deps.hostIpv4);
19647
+ const key = JSON.stringify(adverts);
19648
+ if (active && active.key === key) return resolveMdnsStatus(effectiveEnv);
19649
+ if (active) {
19650
+ try {
19651
+ active.handle.stop();
19652
+ } catch (err) {
19653
+ logger$1.warn("mdns: stop failed during reconcile", { error: String(err) });
19654
+ }
19655
+ active = null;
19656
+ }
19657
+ if (adverts.length > 0) {
19658
+ const created = createResponder(adverts, { makeMdns: deps.makeMdns });
19659
+ if (created) active = {
19660
+ key,
19661
+ ...created
19662
+ };
19663
+ }
19664
+ } catch (err) {
19665
+ logger$1.warn("mdns: reconcile failed", { error: String(err) });
17201
19666
  }
17202
- if (isRemoteSetupAllowed(env)) warnings.push("OP_ALLOW_REMOTE_SETUP is enabled — the web UI is reachable from remote machines and the setup wizard is no longer restricted to the host. Only use this on a trusted network behind a firewall.");
17203
- return warnings;
19667
+ return resolveMdnsStatus(effectiveEnv);
17204
19668
  }
17205
19669
  function resolveClientAppPort(env = process.env) {
17206
19670
  return Number(env.OP_HOST_CLIENT_PORT) || 3890;
@@ -17209,5 +19673,5 @@ function resolveClientAppUrl(env = process.env) {
17209
19673
  return `http://127.0.0.1:${resolveClientAppPort(env)}/chat`;
17210
19674
  }
17211
19675
 
17212
- export { execFileNoThrow as $, AKM_USER_ENV_REF as A, composeStart as B, composeStats as C, DOCKER_IMAGE_NAMES as D, ELECTRON_ASSET_PATTERN as E, composeStop as F, createLogger as G, HostSwapBlockedError as H, INSTALL_LOCK_STALE_AFTER_MS as I, createOpenCodeClient as J, createState as K, deleteUserEnvKey as L, deriveLaunchStatus as M, deriveLocalStackState as N, detectExistingProject as O, PLATFORM_VERSION as P, detectGpu as Q, detectHostOpenCode as R, SERVICE_VERSION_KEYS as S, detectLocalProviders as T, detectRootlessDocker as U, detectRuntime as V, disableHostAkmSharing as W, dismissSecretStripNotice as X, dockerHasNvidiaRuntime as Y, enableHostAkmSharing as Z, ensureAkmUserEnv as _, acquireInstallLock as a, stackDirFor as a$, executeAutomation as a0, fetchProviderModels as a1, formatForDisplay as a2, getAddonProfileAvailability as a3, getAddonProfileSelection as a4, getAddonProfiles as a5, getAddonServiceNames as a6, getAkmStats as a7, getDockerEvents as a8, getHostAkmSharingStatus as a9, readPinnedVersions as aA, readSecret as aB, readSecretFile as aC, readSecretStripNotice as aD, readStackEnv as aE, readStackRuntimeEnv as aF, readStackSecretEnv as aG, readTaskFile as aH, readUserEnvFile as aI, readVersions as aJ, recommendSetup as aK, reconcileHostOwnership as aL, recordProjectRename as aM, releaseInstallLock as aN, removeSecretFile as aO, removeTaskFile as aP, require_dist as aQ, resolveClientAppUrl as aR, resolveComposeProjectName as aS, resolveDataDir as aT, resolveDeployJournalPath as aU, resolveOpenPalmHome as aV, runAssistantAkmCommand as aW, runDeploy as aX, seedUiBuild as aY, setAddonEnabled as aZ, setAddonProfileSelection as a_, getRegistryAddonConfig as aa, getRunningImages as ab, hostAkmStashPath as ac, importHostOpenCode as ad, inspectInstallLock as ae, isAllowedService as af, isRemoteSetupAllowed as ag, isSetupComplete as ah, isVersionKey as ai, listAssistantCliTools as aj, listAvailableAddonIds as ak, listBackupDirs as al, listEnabledAddonIds as am, listSecretFiles as an, loadAutomations as ao, mapDockerError as ap, markSetupComplete as aq, mergeEnvContent as ar, normalizeVersion as as, parseEnvFile as at, patchSecretsEnvFile as au, performSetup as av, pruneBackupDirs as aw, readAutomationLogs as ax, readChannelPreference as ay, readDeployJournal as az, addonProfileId as b, stripVoiceVariantSuffix as b0, summarizeBackups as b1, unlockInstallLock as b2, useExistingProviderForAssistantCli as b3, validateProposedState as b4, writeChannelPreference as b5, writeFileAtomic as b6, writeSecretFile as b7, writeStackSecretEnv as b8, writeTaskFile as b9, writeUserEnvKey as ba, writeVersions as bb, writeVoiceVars as bc, annotateAddonProfileAvailability as c, applyInstall as d, applyStack as e, applyUninstall as f, applyUpdate as g, assertSafeSecretFilename as h, assertSafeTaskFilename as i, authJsonPath as j, backupSetupInputs as k, buildAkmEndpoint as l, buildAkmEnv as m, buildComposeOptions as n, buildManagedServices as o, checkDocker as p, checkDockerCompose as q, classifyLocalInstall as r, collectBindAddressWarnings as s, compareComparableVersions as t, composeDown as u, composeDownProject as v, composeLogs as w, composePreflight as x, composePs as y, composeRestart as z };
17213
- //# sourceMappingURL=src-BwQUi60U.js.map
19676
+ export { executeAutomation as $, AKM_USER_ENV_REF as A, composeStats as B, composeStop as C, DOCKER_IMAGE_NAMES as D, ELECTRON_ASSET_PATTERN as E, createLogger as F, createOpenCodeClient as G, HostSwapBlockedError as H, INSTALL_LOCK_STALE_AFTER_MS as I, createState as J, deleteUserEnvKey as K, deriveLaunchStatus as L, deriveLocalStackState as M, detectExistingProject as N, detectGpu as O, PLATFORM_VERSION as P, detectHostOpenCode as Q, detectLocalProviders as R, SERVICE_VERSION_KEYS as S, detectRootlessDocker as T, detectRuntime as U, disableHostAkmSharing as V, dismissSecretStripNotice as W, dockerHasNvidiaRuntime as X, enableHostAkmSharing as Y, ensureAkmUserEnv as Z, execFileNoThrow as _, acquireInstallLock as a, setAddonEnabled as a$, fetchProviderModels as a0, formatForDisplay as a1, getAddonProfileAvailability as a2, getAddonProfileSelection as a3, getAddonProfiles as a4, getAddonServiceNames as a5, getAkmStats as a6, getDockerEvents as a7, getHostAkmSharingStatus as a8, getRegistryAddonConfig as a9, readSecret as aA, readSecretFile as aB, readSecretStripNotice as aC, readStackEnv as aD, readStackRuntimeEnv as aE, readStackSecretEnv as aF, readTaskFile as aG, readUserEnvFile as aH, readVersions as aI, recommendSetup as aJ, reconcileHostOwnership as aK, reconcileMdnsResponder as aL, recordProjectRename as aM, releaseInstallLock as aN, removeSecretFile as aO, removeTaskFile as aP, require_dist as aQ, resolveClientAppPort as aR, resolveClientAppUrl as aS, resolveComposeProjectName as aT, resolveDataDir as aU, resolveDeployJournalPath as aV, resolveMdnsStatus as aW, resolveOpenPalmHome as aX, runAssistantAkmCommand as aY, runDeploy as aZ, seedUiBuild as a_, getRunningImages as aa, hostAkmStashPath as ab, importHostOpenCode as ac, inspectInstallLock as ad, isAllowedService as ae, isSetupComplete as af, isVersionKey as ag, listAssistantCliTools as ah, listAvailableAddonIds as ai, listBackupDirs as aj, listEnabledAddonIds as ak, listSecretFiles as al, loadAutomations as am, mapDockerError as an, markSetupComplete as ao, mergeEnvContent as ap, mintDirectPrincipalPairingCode as aq, normalizeVersion as ar, parseEnvFile as as, patchSecretsEnvFile as at, performSetup as au, pruneBackupDirs as av, readAutomationLogs as aw, readChannelPreference as ax, readDeployJournal as ay, readPinnedVersions as az, addonProfileId as b, setAddonProfileSelection as b0, stackDirFor as b1, stripVoiceVariantSuffix as b2, summarizeBackups as b3, unlockInstallLock as b4, useExistingProviderForAssistantCli as b5, validateProposedState as b6, writeChannelPreference as b7, writeFileAtomic as b8, writeSecretFile as b9, writeStackSecretEnv as ba, writeTaskFile as bb, writeUserEnvKey as bc, writeVersions as bd, writeVoiceVars as be, annotateAddonProfileAvailability as c, applyInstall as d, applyStack as e, applyUninstall as f, applyUpdate as g, assertSafeSecretFilename as h, assertSafeTaskFilename as i, authJsonPath as j, backupSetupInputs as k, buildAkmEndpoint as l, buildAkmEnv as m, buildComposeOptions as n, buildManagedServices as o, checkDocker as p, checkDockerCompose as q, classifyLocalInstall as r, compareComparableVersions as s, composeDown as t, composeDownProject as u, composeLogs as v, composePreflight as w, composePs as x, composeRestart as y, composeStart as z };
19677
+ //# sourceMappingURL=src-CQ2F7hgb.js.map