@openpalm/ui 0.13.0-beta.3 → 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.
- package/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/{11.BF9IcRAW.css → 11.D7iX4s2y.css} +1 -1
- package/build/client/_app/immutable/assets/11.D7iX4s2y.css.br +0 -0
- package/build/client/_app/immutable/assets/11.D7iX4s2y.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CNzyzDDZ.css +1 -0
- package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.br +0 -0
- package/build/client/_app/immutable/assets/7.CNzyzDDZ.css.gz +0 -0
- package/build/client/_app/immutable/assets/{9.vqGkbIg9.css → 9.DeeTO7Ju.css} +1 -1
- package/build/client/_app/immutable/assets/9.DeeTO7Ju.css.br +0 -0
- package/build/client/_app/immutable/assets/{9.vqGkbIg9.css.gz → 9.DeeTO7Ju.css.gz} +0 -0
- package/build/client/_app/immutable/chunks/{Gis7OmMK.js → BKLMDjUE.js} +1 -1
- package/build/client/_app/immutable/chunks/BKLMDjUE.js.br +0 -0
- package/build/client/_app/immutable/chunks/BKLMDjUE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BNJvGRjX.js +3 -0
- package/build/client/_app/immutable/chunks/BNJvGRjX.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNJvGRjX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DuFsBiCS.js → C5iiO0W9.js} +1 -1
- package/build/client/_app/immutable/chunks/C5iiO0W9.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5iiO0W9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C718MJXm.js +5 -0
- package/build/client/_app/immutable/chunks/C718MJXm.js.br +0 -0
- package/build/client/_app/immutable/chunks/C718MJXm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{S17SDfo_.js → CBV2kBE1.js} +1 -1
- package/build/client/_app/immutable/chunks/CBV2kBE1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CBV2kBE1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DD22UF1L.js +1 -0
- package/build/client/_app/immutable/chunks/DD22UF1L.js.br +0 -0
- package/build/client/_app/immutable/chunks/DD22UF1L.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BApqEZP1.js → DWtm_qwJ.js} +1 -1
- package/build/client/_app/immutable/chunks/DWtm_qwJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWtm_qwJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ccncQf9O.js +1 -0
- package/build/client/_app/immutable/chunks/ccncQf9O.js.br +2 -0
- package/build/client/_app/immutable/chunks/ccncQf9O.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.C4X372ym.js → app.DAzfwrA7.js} +2 -2
- package/build/client/_app/immutable/entry/app.DAzfwrA7.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DAzfwrA7.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.7FiodlpO.js +1 -0
- package/build/client/_app/immutable/entry/start.7FiodlpO.js.br +1 -0
- package/build/client/_app/immutable/entry/start.7FiodlpO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.CAn1ptt2.js → 1.BYTQ4CJf.js} +1 -1
- package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.BYTQ4CJf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.3GZpnfRU.js → 10.CHYaVWP2.js} +1 -1
- package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.CHYaVWP2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.DXwuRFxA.js +8 -0
- package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DXwuRFxA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.6EwsExLl.js → 4.n8OmCUUb.js} +1 -1
- package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.n8OmCUUb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.DLFettGd.js → 5.DgnQcqeL.js} +1 -1
- package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DgnQcqeL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.inuW_1g7.js → 6.RedvZarw.js} +1 -1
- package/build/client/_app/immutable/nodes/6.RedvZarw.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.RedvZarw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.BqgE43w1.js +14 -0
- package/build/client/_app/immutable/nodes/7.BqgE43w1.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.BqgE43w1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.CJ5rBqR8.js → 9.CQfpYNnj.js} +65 -65
- package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CQfpYNnj.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +1 -1
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-C44Ua1bY.js → 0-CxqNryz-.js} +5 -5
- package/build/server/chunks/{0-C44Ua1bY.js.map → 0-CxqNryz-.js.map} +1 -1
- package/build/server/chunks/1-Dxk_eEPL.js +9 -0
- package/build/server/chunks/{1-DPdXHBBi.js.map → 1-Dxk_eEPL.js.map} +1 -1
- package/build/server/chunks/{10-B6ZAGGzR.js → 10-DcTjX0aZ.js} +3 -3
- package/build/server/chunks/{10-B6ZAGGzR.js.map → 10-DcTjX0aZ.js.map} +1 -1
- package/build/server/chunks/11-Ddav4pvQ.js +9 -0
- package/build/server/chunks/11-Ddav4pvQ.js.map +1 -0
- package/build/server/chunks/{3-DqhvOSLm.js → 3-xtalXCwW.js} +8 -8
- package/build/server/chunks/{3-DqhvOSLm.js.map → 3-xtalXCwW.js.map} +1 -1
- package/build/server/chunks/4-CEASlyNx.js +9 -0
- package/build/server/chunks/{4-bICPXf8d.js.map → 4-CEASlyNx.js.map} +1 -1
- package/build/server/chunks/{5-pYxB3IGQ.js → 5-3gkFDIAU.js} +3 -3
- package/build/server/chunks/{5-pYxB3IGQ.js.map → 5-3gkFDIAU.js.map} +1 -1
- package/build/server/chunks/{6-2tNBfccH.js → 6-BSR29JnK.js} +3 -3
- package/build/server/chunks/{6-2tNBfccH.js.map → 6-BSR29JnK.js.map} +1 -1
- package/build/server/chunks/7-gx5m5R1u.js +9 -0
- package/build/server/chunks/{7-IbStFnJM.js.map → 7-gx5m5R1u.js.map} +1 -1
- package/build/server/chunks/{9-PfezrnbG.js → 9-BKXk6mfI.js} +7 -7
- package/build/server/chunks/9-BKXk6mfI.js.map +1 -0
- package/build/server/chunks/{ChatNavbar-f5OrMEL5.js → ChatNavbar-D2J3UbpW.js} +5 -5
- package/build/server/chunks/{ChatNavbar-f5OrMEL5.js.map → ChatNavbar-D2J3UbpW.js.map} +1 -1
- package/build/server/chunks/{IconActivity-BVrMC8FH.js → IconActivity-DrgUhxxi.js} +2 -2
- package/build/server/chunks/{IconActivity-BVrMC8FH.js.map → IconActivity-DrgUhxxi.js.map} +1 -1
- package/build/server/chunks/{IconServer-C0heXLme.js → IconServer-jRvjNs7I.js} +2 -2
- package/build/server/chunks/{IconServer-C0heXLme.js.map → IconServer-jRvjNs7I.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Cqsoa84V.js → _page.svelte--qXsMm-T.js} +23 -10
- package/build/server/chunks/_page.svelte--qXsMm-T.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BgKDQB1v.js → _page.svelte-BgzOKhmH.js} +4 -4
- package/build/server/chunks/{_page.svelte-BgKDQB1v.js.map → _page.svelte-BgzOKhmH.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DpFvF_2S.js → _page.svelte-BnZ0Fgkw.js} +13 -10
- package/build/server/chunks/_page.svelte-BnZ0Fgkw.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BXLl2Q4a.js → _page.svelte-C36XsgXY.js} +146 -13
- package/build/server/chunks/_page.svelte-C36XsgXY.js.map +1 -0
- package/build/server/chunks/{_page.svelte-fk6X6VPw.js → _page.svelte-Cc-OjlMF.js} +8 -8
- package/build/server/chunks/{_page.svelte-fk6X6VPw.js.map → _page.svelte-Cc-OjlMF.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DV50Zgo7.js → _page.svelte-DGQP3UIP.js} +3 -3
- package/build/server/chunks/{_page.svelte-DV50Zgo7.js.map → _page.svelte-DGQP3UIP.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-MAzX_A0b.js → _page.svelte-DGsMxwfZ.js} +6 -6
- package/build/server/chunks/{_page.svelte-MAzX_A0b.js.map → _page.svelte-DGsMxwfZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bsxn3ZEt.js → _server.ts-0T6OWJc0.js} +8 -8
- package/build/server/chunks/{_server.ts-Bsxn3ZEt.js.map → _server.ts-0T6OWJc0.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DdWIcyaa.js → _server.ts-4NsYfdU1.js} +4 -4
- package/build/server/chunks/{_server.ts-DdWIcyaa.js.map → _server.ts-4NsYfdU1.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bd15KCCI.js → _server.ts-B-9mLZog.js} +8 -8
- package/build/server/chunks/{_server.ts-Bd15KCCI.js.map → _server.ts-B-9mLZog.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CPolXmaB.js → _server.ts-B3MvWwzq.js} +9 -9
- package/build/server/chunks/{_server.ts-CPolXmaB.js.map → _server.ts-B3MvWwzq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CEgqNbg2.js → _server.ts-B64JQevs.js} +13 -9
- package/build/server/chunks/_server.ts-B64JQevs.js.map +1 -0
- package/build/server/chunks/{_server.ts-CtNaQ39q.js → _server.ts-BEhHNijd.js} +8 -8
- package/build/server/chunks/{_server.ts-CtNaQ39q.js.map → _server.ts-BEhHNijd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C8Tvzew7.js → _server.ts-BJqxSP1B.js} +4 -4
- package/build/server/chunks/{_server.ts-C8Tvzew7.js.map → _server.ts-BJqxSP1B.js.map} +1 -1
- package/build/server/chunks/{_server.ts-2o4Kzn8i.js → _server.ts-BK4NRqMj.js} +9 -9
- package/build/server/chunks/{_server.ts-2o4Kzn8i.js.map → _server.ts-BK4NRqMj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DPJJQkZp.js → _server.ts-BN6ghyoO.js} +8 -8
- package/build/server/chunks/{_server.ts-DPJJQkZp.js.map → _server.ts-BN6ghyoO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cu39Y3ON.js → _server.ts-BNoq5yoF.js} +8 -8
- package/build/server/chunks/{_server.ts-Cu39Y3ON.js.map → _server.ts-BNoq5yoF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DtY45qj6.js → _server.ts-BRvNe0fS.js} +8 -8
- package/build/server/chunks/{_server.ts-DtY45qj6.js.map → _server.ts-BRvNe0fS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C24KcaLY.js → _server.ts-BWcxJLLV.js} +8 -8
- package/build/server/chunks/{_server.ts-C24KcaLY.js.map → _server.ts-BWcxJLLV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BNnRODmS.js → _server.ts-B_c9x_NC.js} +9 -9
- package/build/server/chunks/{_server.ts-BNnRODmS.js.map → _server.ts-B_c9x_NC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CyHlj4Xc.js → _server.ts-BbyfVT-W.js} +8 -8
- package/build/server/chunks/{_server.ts-CyHlj4Xc.js.map → _server.ts-BbyfVT-W.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CpwGXL04.js → _server.ts-Bl1EtTKF.js} +8 -8
- package/build/server/chunks/{_server.ts-CpwGXL04.js.map → _server.ts-Bl1EtTKF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BlCDDGQe.js → _server.ts-Bm2nv-W4.js} +8 -8
- package/build/server/chunks/{_server.ts-BlCDDGQe.js.map → _server.ts-Bm2nv-W4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-WTL-RZDk.js → _server.ts-BrwSj7L5.js} +8 -8
- package/build/server/chunks/{_server.ts-WTL-RZDk.js.map → _server.ts-BrwSj7L5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C17zuPHB.js → _server.ts-BuGFzejC.js} +8 -8
- package/build/server/chunks/{_server.ts-C17zuPHB.js.map → _server.ts-BuGFzejC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-RjE7mkg4.js → _server.ts-BvOQbLFG.js} +8 -8
- package/build/server/chunks/{_server.ts-RjE7mkg4.js.map → _server.ts-BvOQbLFG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BiGuckTs.js → _server.ts-Bvb6lo7O.js} +10 -10
- package/build/server/chunks/{_server.ts-BiGuckTs.js.map → _server.ts-Bvb6lo7O.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CA37rdjz.js → _server.ts-C0rcwOPL.js} +19 -12
- package/build/server/chunks/_server.ts-C0rcwOPL.js.map +1 -0
- package/build/server/chunks/{_server.ts-BageNPqU.js → _server.ts-C2qIUpva.js} +9 -9
- package/build/server/chunks/{_server.ts-BageNPqU.js.map → _server.ts-C2qIUpva.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DsRKY-Kc.js → _server.ts-C31rtz7B.js} +8 -8
- package/build/server/chunks/{_server.ts-DsRKY-Kc.js.map → _server.ts-C31rtz7B.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ukIYk-_Z.js → _server.ts-C6GZY_v3.js} +8 -8
- package/build/server/chunks/{_server.ts-ukIYk-_Z.js.map → _server.ts-C6GZY_v3.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DxbCMYot.js → _server.ts-C6r0d7SR.js} +8 -8
- package/build/server/chunks/{_server.ts-DxbCMYot.js.map → _server.ts-C6r0d7SR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ByVaX_Hp.js → _server.ts-C900vqOm.js} +8 -8
- package/build/server/chunks/{_server.ts-ByVaX_Hp.js.map → _server.ts-C900vqOm.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BunhH3W1.js → _server.ts-CCdP5Eqx.js} +8 -8
- package/build/server/chunks/{_server.ts-BunhH3W1.js.map → _server.ts-CCdP5Eqx.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CZ-P41xW.js → _server.ts-CDJ7WouZ.js} +8 -8
- package/build/server/chunks/{_server.ts-CZ-P41xW.js.map → _server.ts-CDJ7WouZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C-VVdGFH.js → _server.ts-CFNNoZVF.js} +8 -8
- package/build/server/chunks/{_server.ts-C-VVdGFH.js.map → _server.ts-CFNNoZVF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BM6hefLc.js → _server.ts-CGE7AyDg.js} +8 -8
- package/build/server/chunks/{_server.ts-BM6hefLc.js.map → _server.ts-CGE7AyDg.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DcZIXa7_.js → _server.ts-CGggA6h4.js} +8 -8
- package/build/server/chunks/{_server.ts-DcZIXa7_.js.map → _server.ts-CGggA6h4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DQFO2xa9.js → _server.ts-CIReEz3d.js} +8 -8
- package/build/server/chunks/{_server.ts-DQFO2xa9.js.map → _server.ts-CIReEz3d.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BQzhAVgc.js → _server.ts-CMO7LL0e.js} +4 -4
- package/build/server/chunks/{_server.ts-BQzhAVgc.js.map → _server.ts-CMO7LL0e.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CcFK2dxk.js → _server.ts-CPYtZ7sE.js} +16 -10
- package/build/server/chunks/_server.ts-CPYtZ7sE.js.map +1 -0
- package/build/server/chunks/{_server.ts-G80g1-Vi.js → _server.ts-CR85H0KR.js} +8 -8
- package/build/server/chunks/{_server.ts-G80g1-Vi.js.map → _server.ts-CR85H0KR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dr7DPWfx.js → _server.ts-CRvbt_Ny.js} +9 -9
- package/build/server/chunks/{_server.ts-Dr7DPWfx.js.map → _server.ts-CRvbt_Ny.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BNQHTPJK.js → _server.ts-CS8n28qm.js} +8 -8
- package/build/server/chunks/{_server.ts-BNQHTPJK.js.map → _server.ts-CS8n28qm.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CydVYzX1.js → _server.ts-CWYonOeQ.js} +8 -8
- package/build/server/chunks/{_server.ts-CydVYzX1.js.map → _server.ts-CWYonOeQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DkWPvbVT.js → _server.ts-CZ83fA4I.js} +8 -8
- package/build/server/chunks/{_server.ts-DkWPvbVT.js.map → _server.ts-CZ83fA4I.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B-6OFzv-.js → _server.ts-Cfm_KDhO.js} +9 -9
- package/build/server/chunks/{_server.ts-B-6OFzv-.js.map → _server.ts-Cfm_KDhO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DzO2o8u_.js → _server.ts-CiBxLSg4.js} +8 -8
- package/build/server/chunks/{_server.ts-DzO2o8u_.js.map → _server.ts-CiBxLSg4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CrUHXfa7.js → _server.ts-ClrrzZI6.js} +8 -8
- package/build/server/chunks/{_server.ts-CrUHXfa7.js.map → _server.ts-ClrrzZI6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-6-piDAMf.js → _server.ts-Cm3uzCwu.js} +16 -10
- package/build/server/chunks/_server.ts-Cm3uzCwu.js.map +1 -0
- package/build/server/chunks/{_server.ts-DiY7qGzB.js → _server.ts-Co4yATq8.js} +4 -4
- package/build/server/chunks/{_server.ts-DiY7qGzB.js.map → _server.ts-Co4yATq8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-YQAFFkYo.js → _server.ts-CqX61boo.js} +9 -9
- package/build/server/chunks/{_server.ts-YQAFFkYo.js.map → _server.ts-CqX61boo.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DprY8V8n.js → _server.ts-CsP1RzbQ.js} +8 -8
- package/build/server/chunks/{_server.ts-DprY8V8n.js.map → _server.ts-CsP1RzbQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BBxdJ3b2.js → _server.ts-CtcAZ3lM.js} +9 -9
- package/build/server/chunks/{_server.ts-BBxdJ3b2.js.map → _server.ts-CtcAZ3lM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ChK8wuma.js → _server.ts-D-Vv5Qkp.js} +8 -8
- package/build/server/chunks/{_server.ts-ChK8wuma.js.map → _server.ts-D-Vv5Qkp.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BQyuBKbf.js → _server.ts-D0EyuOqv.js} +8 -8
- package/build/server/chunks/{_server.ts-BQyuBKbf.js.map → _server.ts-D0EyuOqv.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BwMkzx-i.js → _server.ts-D2-CHx_d.js} +9 -9
- package/build/server/chunks/{_server.ts-BwMkzx-i.js.map → _server.ts-D2-CHx_d.js.map} +1 -1
- package/build/server/chunks/{_server.ts-TecIejZG.js → _server.ts-D3skirMd.js} +9 -9
- package/build/server/chunks/{_server.ts-TecIejZG.js.map → _server.ts-D3skirMd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BTey3b5e.js → _server.ts-D5Xa36tp.js} +8 -8
- package/build/server/chunks/{_server.ts-BTey3b5e.js.map → _server.ts-D5Xa36tp.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DmuQV3XR.js → _server.ts-D8iJaYan.js} +6 -6
- package/build/server/chunks/{_server.ts-DmuQV3XR.js.map → _server.ts-D8iJaYan.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DDweV2eg.js → _server.ts-DD4ouya8.js} +8 -8
- package/build/server/chunks/{_server.ts-DDweV2eg.js.map → _server.ts-DD4ouya8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DhZ0i-VZ.js → _server.ts-DHjMyNwJ.js} +9 -9
- package/build/server/chunks/{_server.ts-DhZ0i-VZ.js.map → _server.ts-DHjMyNwJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BJ27moeF.js → _server.ts-DM8N7von.js} +8 -8
- package/build/server/chunks/{_server.ts-BJ27moeF.js.map → _server.ts-DM8N7von.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cc6blM9a.js → _server.ts-DNVQMHzn.js} +8 -8
- package/build/server/chunks/{_server.ts-Cc6blM9a.js.map → _server.ts-DNVQMHzn.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BtlVh8sp.js → _server.ts-DObIzyoT.js} +5 -5
- package/build/server/chunks/{_server.ts-BtlVh8sp.js.map → _server.ts-DObIzyoT.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BB6y3ZlT.js → _server.ts-DPfGAMG4.js} +8 -8
- package/build/server/chunks/{_server.ts-BB6y3ZlT.js.map → _server.ts-DPfGAMG4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CpMO1w5D.js → _server.ts-D_93w1gb.js} +10 -10
- package/build/server/chunks/{_server.ts-CpMO1w5D.js.map → _server.ts-D_93w1gb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DFq2AVjG.js → _server.ts-DebCCwjH.js} +9 -9
- package/build/server/chunks/_server.ts-DebCCwjH.js.map +1 -0
- package/build/server/chunks/_server.ts-DjAGbGD-.js +964 -0
- package/build/server/chunks/_server.ts-DjAGbGD-.js.map +1 -0
- package/build/server/chunks/{_server.ts-CF6j3bbg.js → _server.ts-DmNziNap.js} +9 -9
- package/build/server/chunks/{_server.ts-CF6j3bbg.js.map → _server.ts-DmNziNap.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ClJrWUgt.js → _server.ts-DrxBKPKB.js} +4 -4
- package/build/server/chunks/{_server.ts-ClJrWUgt.js.map → _server.ts-DrxBKPKB.js.map} +1 -1
- package/build/server/chunks/{_server.ts-s_DZwJLK.js → _server.ts-DuOVzmV5.js} +8 -8
- package/build/server/chunks/{_server.ts-s_DZwJLK.js.map → _server.ts-DuOVzmV5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CMi1odxU.js → _server.ts-Ey4BEvRd.js} +9 -9
- package/build/server/chunks/{_server.ts-CMi1odxU.js.map → _server.ts-Ey4BEvRd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CyiErd_B.js → _server.ts-KHK30kUK.js} +11 -11
- package/build/server/chunks/{_server.ts-CyiErd_B.js.map → _server.ts-KHK30kUK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CfB1cDLU.js → _server.ts-Kp3wrrbF.js} +9 -9
- package/build/server/chunks/{_server.ts-CfB1cDLU.js.map → _server.ts-Kp3wrrbF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DcBrsY-a.js → _server.ts-LHKCcBS1.js} +12 -10
- package/build/server/chunks/_server.ts-LHKCcBS1.js.map +1 -0
- package/build/server/chunks/{_server.ts-6BViNoJ6.js → _server.ts-MZYYoM8z.js} +8 -8
- package/build/server/chunks/{_server.ts-6BViNoJ6.js.map → _server.ts-MZYYoM8z.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bx0tx6Hd.js → _server.ts-QSEYZqU0.js} +11 -9
- package/build/server/chunks/_server.ts-QSEYZqU0.js.map +1 -0
- package/build/server/chunks/{_server.ts-Czl57SUr.js → _server.ts-Sx6mXrwK.js} +8 -8
- package/build/server/chunks/{_server.ts-Czl57SUr.js.map → _server.ts-Sx6mXrwK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CBv61dGN.js → _server.ts-SxcH-cms.js} +9 -9
- package/build/server/chunks/{_server.ts-CBv61dGN.js.map → _server.ts-SxcH-cms.js.map} +1 -1
- package/build/server/chunks/{_server.ts-opJkoWRS.js → _server.ts-TTSjZaYY.js} +8 -8
- package/build/server/chunks/{_server.ts-opJkoWRS.js.map → _server.ts-TTSjZaYY.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BcsSKsVE.js → _server.ts-V6a8P9IB.js} +8 -8
- package/build/server/chunks/{_server.ts-BcsSKsVE.js.map → _server.ts-V6a8P9IB.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CFlF9O0n.js → _server.ts-XEVuthfs.js} +8 -8
- package/build/server/chunks/{_server.ts-CFlF9O0n.js.map → _server.ts-XEVuthfs.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DYS4PknE.js → _server.ts-eF4CAfpP.js} +8 -8
- package/build/server/chunks/{_server.ts-DYS4PknE.js.map → _server.ts-eF4CAfpP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B2iTN8SC.js → _server.ts-eov7yZvT.js} +10 -10
- package/build/server/chunks/{_server.ts-B2iTN8SC.js.map → _server.ts-eov7yZvT.js.map} +1 -1
- package/build/server/chunks/{_server.ts-vXf4p_i0.js → _server.ts-jB_3zRrF.js} +9 -9
- package/build/server/chunks/{_server.ts-vXf4p_i0.js.map → _server.ts-jB_3zRrF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-SqpxZ5hM.js → _server.ts-p16c9Uzl.js} +8 -8
- package/build/server/chunks/{_server.ts-SqpxZ5hM.js.map → _server.ts-p16c9Uzl.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CyMs8VXZ.js → _server.ts-p4v6noBK.js} +6 -6
- package/build/server/chunks/{_server.ts-CyMs8VXZ.js.map → _server.ts-p4v6noBK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BWeAmxEz.js → _server.ts-qgPpNGL8.js} +8 -8
- package/build/server/chunks/{_server.ts-BWeAmxEz.js.map → _server.ts-qgPpNGL8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D7I9KZ4H.js → _server.ts-sdkTYy6A.js} +8 -8
- package/build/server/chunks/{_server.ts-D7I9KZ4H.js.map → _server.ts-sdkTYy6A.js.map} +1 -1
- package/build/server/chunks/{_server.ts-UMlNzGum.js → _server.ts-st_pTUHI.js} +8 -8
- package/build/server/chunks/{_server.ts-UMlNzGum.js.map → _server.ts-st_pTUHI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CM8lR2Jk.js → _server.ts-yWyCj-R5.js} +8 -8
- package/build/server/chunks/{_server.ts-CM8lR2Jk.js.map → _server.ts-yWyCj-R5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ZkptKFXP.js → _server.ts-zDEENUSw.js} +8 -8
- package/build/server/chunks/{_server.ts-ZkptKFXP.js.map → _server.ts-zDEENUSw.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-CEjIrSBN.js → addon-helpers-TpOYibOg.js} +3 -3
- package/build/server/chunks/{addon-helpers-CEjIrSBN.js.map → addon-helpers-TpOYibOg.js.map} +1 -1
- package/build/server/chunks/{akm-rRfSaKvH.js → akm-Bvt9WaTk.js} +3 -3
- package/build/server/chunks/{akm-rRfSaKvH.js.map → akm-Bvt9WaTk.js.map} +1 -1
- package/build/server/chunks/{catalog-DMG_Bwji.js → catalog-w0L1ZRPK.js} +5 -5
- package/build/server/chunks/{catalog-DMG_Bwji.js.map → catalog-w0L1ZRPK.js.map} +1 -1
- package/build/server/chunks/chunk-DOvWTNp_.js +37 -0
- package/build/server/chunks/chunk-DOvWTNp_.js.map +1 -0
- package/build/server/chunks/{client-BvFq2PRx.js → client-ClRLlB_c.js} +3 -3
- package/build/server/chunks/{client-BvFq2PRx.js.map → client-ClRLlB_c.js.map} +1 -1
- package/build/server/chunks/{compose-args2-C39WGM9r.js → compose-args2-DiDeQtPu.js} +4 -4
- package/build/server/chunks/compose-args2-DiDeQtPu.js.map +1 -0
- package/build/server/chunks/{config-BndRz7Yl.js → config-Jiy06DlE.js} +2 -2
- package/build/server/chunks/{config-BndRz7Yl.js.map → config-Jiy06DlE.js.map} +1 -1
- package/build/server/chunks/{connections-api-BvJpsZBj.js → connections-api-J-nrQ1KK.js} +2 -2
- package/build/server/chunks/{connections-api-BvJpsZBj.js.map → connections-api-J-nrQ1KK.js.map} +1 -1
- package/build/server/chunks/{constants-B7J5DDaI.js → constants-1vPYIIwP.js} +2 -2
- package/build/server/chunks/{constants-B7J5DDaI.js.map → constants-1vPYIIwP.js.map} +1 -1
- package/build/server/chunks/{docker2-Ba2Whd9Y.js → docker2-oBEn_Si9.js} +4 -4
- package/build/server/chunks/docker2-oBEn_Si9.js.map +1 -0
- package/build/server/chunks/{docker3-DhaO_Pxj.js → docker3-Dn-Mm2cT.js} +2 -2
- package/build/server/chunks/{docker3-DhaO_Pxj.js.map → docker3-Dn-Mm2cT.js.map} +1 -1
- package/build/server/chunks/{endpoints-CuL8lAcu.js → endpoints-WTxemTcn.js} +87 -12
- package/build/server/chunks/endpoints-WTxemTcn.js.map +1 -0
- package/build/server/chunks/environment-BYp8JQYM.js.map +1 -1
- package/build/server/chunks/{error.svelte-C8Qx6FF6.js → error.svelte-C2CWdm9K.js} +5 -5
- package/build/server/chunks/{error.svelte-C8Qx6FF6.js.map → error.svelte-C2CWdm9K.js.map} +1 -1
- package/build/server/chunks/{features-WsEodW5F.js → features-BE2x1a_a.js} +5 -3
- package/build/server/chunks/features-BE2x1a_a.js.map +1 -0
- package/build/server/chunks/{helpers-XmKveZFr.js → helpers-CfpNg3il.js} +15 -10
- package/build/server/chunks/helpers-CfpNg3il.js.map +1 -0
- package/build/server/chunks/{hooks.server-o4bkPFRD.js → hooks.server-DEVjSu3V.js} +18 -22
- package/build/server/chunks/hooks.server-DEVjSu3V.js.map +1 -0
- package/build/server/chunks/{http-CL5QncYd.js → http-WP5cji9-.js} +3 -6
- package/build/server/chunks/http-WP5cji9-.js.map +1 -0
- package/build/server/chunks/{internal-D66tKQSe.js → internal-D9Kp0SbJ.js} +3 -3
- package/build/server/chunks/{internal-D66tKQSe.js.map → internal-D9Kp0SbJ.js.map} +1 -1
- package/build/server/chunks/{landing-DvVXSE_x.js → landing-DKXNel0Q.js} +5 -5
- package/build/server/chunks/{landing-DvVXSE_x.js.map → landing-DKXNel0Q.js.map} +1 -1
- package/build/server/chunks/network-preset-CJ1RRnki.js +431 -0
- package/build/server/chunks/network-preset-CJ1RRnki.js.map +1 -0
- package/build/server/chunks/{paths-BpdOajoE.js → paths-DRVrMQrI.js} +2 -2
- package/build/server/chunks/{paths-BpdOajoE.js.map → paths-DRVrMQrI.js.map} +1 -1
- package/build/server/chunks/{session-cookie-B0Fc-L8S.js → session-cookie-CDynAOx3.js} +2 -2
- package/build/server/chunks/{session-cookie-B0Fc-L8S.js.map → session-cookie-CDynAOx3.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-BjJIt1Gf.js → setup-deploy-CRW2KpZR.js} +2 -2
- package/build/server/chunks/{setup-deploy-BjJIt1Gf.js.map → setup-deploy-CRW2KpZR.js.map} +1 -1
- package/build/server/chunks/{src-i2v6xhSC.js → src-CQ2F7hgb.js} +2621 -157
- package/build/server/chunks/src-CQ2F7hgb.js.map +1 -0
- package/build/server/chunks/{state-fVG29xFj.js → state-CsIDHNPN.js} +2 -2
- package/build/server/chunks/{state-fVG29xFj.js.map → state-CsIDHNPN.js.map} +1 -1
- package/build/server/chunks/{state2-Dl7-d1h_.js → state2-jnbE3tAu.js} +2 -2
- package/build/server/chunks/{state2-Dl7-d1h_.js.map → state2-jnbE3tAu.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/build/server/manifest.js +103 -96
- package/build/server/manifest.js.map +1 -1
- package/package.json +4 -3
- package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
- package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css +0 -1
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.vqGkbIg9.css.br +0 -0
- package/build/client/_app/immutable/chunks/BApqEZP1.js.br +0 -0
- package/build/client/_app/immutable/chunks/BApqEZP1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_jhBV5Z.js +0 -5
- package/build/client/_app/immutable/chunks/B_jhBV5Z.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_jhBV5Z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C3ad4Ajc.js +0 -1
- package/build/client/_app/immutable/chunks/C3ad4Ajc.js.br +0 -2
- package/build/client/_app/immutable/chunks/C3ad4Ajc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CItB5oU8.js +0 -3
- package/build/client/_app/immutable/chunks/CItB5oU8.js.br +0 -0
- package/build/client/_app/immutable/chunks/CItB5oU8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DuFsBiCS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DuFsBiCS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Gis7OmMK.js.br +0 -0
- package/build/client/_app/immutable/chunks/Gis7OmMK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/S17SDfo_.js.br +0 -0
- package/build/client/_app/immutable/chunks/S17SDfo_.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.C4X372ym.js.br +0 -0
- package/build/client/_app/immutable/entry/app.C4X372ym.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.ggMsTuLf.js +0 -1
- package/build/client/_app/immutable/entry/start.ggMsTuLf.js.br +0 -0
- package/build/client/_app/immutable/entry/start.ggMsTuLf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CAn1ptt2.js.br +0 -1
- package/build/client/_app/immutable/nodes/1.CAn1ptt2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.3GZpnfRU.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.3GZpnfRU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.D1-UoUiI.js +0 -6
- package/build/client/_app/immutable/nodes/11.D1-UoUiI.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D1-UoUiI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.6EwsExLl.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.6EwsExLl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DLFettGd.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DLFettGd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.inuW_1g7.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.inuW_1g7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js +0 -4
- package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Dc4BVu5u.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CJ5rBqR8.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CJ5rBqR8.js.gz +0 -0
- package/build/server/chunks/1-DPdXHBBi.js +0 -9
- package/build/server/chunks/11-Bi4ih8mU.js +0 -9
- package/build/server/chunks/11-Bi4ih8mU.js.map +0 -1
- package/build/server/chunks/4-bICPXf8d.js +0 -9
- package/build/server/chunks/7-IbStFnJM.js +0 -9
- package/build/server/chunks/9-PfezrnbG.js.map +0 -1
- package/build/server/chunks/_page.svelte-BXLl2Q4a.js.map +0 -1
- package/build/server/chunks/_page.svelte-Cqsoa84V.js.map +0 -1
- package/build/server/chunks/_page.svelte-DpFvF_2S.js.map +0 -1
- package/build/server/chunks/_server.ts-6-piDAMf.js.map +0 -1
- package/build/server/chunks/_server.ts-Bx0tx6Hd.js.map +0 -1
- package/build/server/chunks/_server.ts-CA37rdjz.js.map +0 -1
- package/build/server/chunks/_server.ts-CEgqNbg2.js.map +0 -1
- package/build/server/chunks/_server.ts-CcFK2dxk.js.map +0 -1
- package/build/server/chunks/_server.ts-DFq2AVjG.js.map +0 -1
- package/build/server/chunks/_server.ts-DcBrsY-a.js.map +0 -1
- package/build/server/chunks/chunk-CLZ62Ad-.js +0 -18
- package/build/server/chunks/chunk-CLZ62Ad-.js.map +0 -1
- package/build/server/chunks/compose-args2-C39WGM9r.js.map +0 -1
- package/build/server/chunks/docker2-Ba2Whd9Y.js.map +0 -1
- package/build/server/chunks/endpoints-CuL8lAcu.js.map +0 -1
- package/build/server/chunks/features-WsEodW5F.js.map +0 -1
- package/build/server/chunks/helpers-XmKveZFr.js.map +0 -1
- package/build/server/chunks/hooks.server-o4bkPFRD.js.map +0 -1
- package/build/server/chunks/http-CL5QncYd.js.map +0 -1
- package/build/server/chunks/provider-constants-1s1k8kbj.js +0 -68
- package/build/server/chunks/provider-constants-1s1k8kbj.js.map +0 -1
- package/build/server/chunks/src-i2v6xhSC.js.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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.
|
|
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-
|
|
13794
|
-
const { buildComposeOptions } = await import('./compose-args2-
|
|
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:
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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 (
|
|
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$
|
|
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
|
|
16718
|
-
*
|
|
16719
|
-
*
|
|
16720
|
-
*
|
|
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
|
-
|
|
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$
|
|
16742
|
-
} else logger$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
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
|
|
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
|
-
*
|
|
17153
|
-
*
|
|
17154
|
-
*
|
|
17155
|
-
*
|
|
17156
|
-
*
|
|
17157
|
-
*
|
|
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
|
-
|
|
17163
|
-
|
|
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
|
-
*
|
|
17176
|
-
*
|
|
17177
|
-
*
|
|
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
|
|
17184
|
-
const
|
|
17185
|
-
return
|
|
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
|
-
*
|
|
17189
|
-
*
|
|
17190
|
-
*
|
|
17191
|
-
*
|
|
17192
|
-
*
|
|
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
|
|
17195
|
-
const
|
|
17196
|
-
const
|
|
17197
|
-
if (
|
|
17198
|
-
|
|
17199
|
-
const
|
|
17200
|
-
if (
|
|
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
|
-
|
|
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 {
|
|
17213
|
-
//# sourceMappingURL=src-
|
|
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
|