termdock 1.4.224 → 1.4.225

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +4 -2
  2. package/dist/client/assets/{App-Cld3O8C2.js → App-IXJ0RBl_.js} +3 -3
  3. package/dist/client/assets/App-IXJ0RBl_.js.br +0 -0
  4. package/dist/client/assets/App-IXJ0RBl_.js.gz +0 -0
  5. package/dist/client/assets/{ChangeWalkthroughPanel-C5RRvTfo.js → ChangeWalkthroughPanel-BaglIr7w.js} +1 -1
  6. package/dist/client/assets/ChangeWalkthroughPanel-BaglIr7w.js.br +0 -0
  7. package/dist/client/assets/ChangeWalkthroughPanel-BaglIr7w.js.gz +0 -0
  8. package/dist/client/assets/{DagPlayground-Cb99juZB.js → DagPlayground-BoPHEC1t.js} +1 -1
  9. package/dist/client/assets/DagPlayground-BoPHEC1t.js.br +0 -0
  10. package/dist/client/assets/DagPlayground-BoPHEC1t.js.gz +0 -0
  11. package/dist/client/assets/{DiffLab-CLftmGmh.js → DiffLab-DhZiVixC.js} +1 -1
  12. package/dist/client/assets/DiffLab-DhZiVixC.js.br +0 -0
  13. package/dist/client/assets/DiffLab-DhZiVixC.js.gz +0 -0
  14. package/dist/client/assets/{DiffReview-DQri2Ybs.js → DiffReview-CIOleICq.js} +1 -1
  15. package/dist/client/assets/DiffReview-CIOleICq.js.br +0 -0
  16. package/dist/client/assets/DiffReview-CIOleICq.js.gz +0 -0
  17. package/dist/client/assets/{DiffReviewLab-DboW5kVe.js → DiffReviewLab-48PH3ITt.js} +1 -1
  18. package/dist/client/assets/DiffReviewLab-48PH3ITt.js.br +0 -0
  19. package/dist/client/assets/DiffReviewLab-48PH3ITt.js.gz +0 -0
  20. package/dist/client/assets/{DiffViewer-DFCeAPLJ.js → DiffViewer-D5eBLwlu.js} +1 -1
  21. package/dist/client/assets/DiffViewer-D5eBLwlu.js.br +0 -0
  22. package/dist/client/assets/DiffViewer-D5eBLwlu.js.gz +0 -0
  23. package/dist/client/assets/{ModelPreview-CCG0pfHi.js → ModelPreview-D0BBzoH0.js} +1 -1
  24. package/dist/client/assets/ModelPreview-D0BBzoH0.js.br +0 -0
  25. package/dist/client/assets/ModelPreview-D0BBzoH0.js.gz +0 -0
  26. package/dist/client/assets/{RightSidebar-g_aBUJMG.js → RightSidebar-pYdczX-v.js} +4 -4
  27. package/dist/client/assets/RightSidebar-pYdczX-v.js.br +0 -0
  28. package/dist/client/assets/RightSidebar-pYdczX-v.js.gz +0 -0
  29. package/dist/client/assets/{abnfDiagram-VCTEODGH-BJpFAXlO.js → abnfDiagram-VCTEODGH-ChvOvN0F.js} +1 -1
  30. package/dist/client/assets/abnfDiagram-VCTEODGH-ChvOvN0F.js.br +0 -0
  31. package/dist/client/assets/abnfDiagram-VCTEODGH-ChvOvN0F.js.gz +0 -0
  32. package/dist/client/assets/{app-C6b0uY52.js → app-DRXvFyk-.js} +3 -3
  33. package/dist/client/assets/app-DRXvFyk-.js.br +0 -0
  34. package/dist/client/assets/app-DRXvFyk-.js.gz +0 -0
  35. package/dist/client/assets/{arc-BdJDW1lu.js → arc-DGhvr9Du.js} +1 -1
  36. package/dist/client/assets/arc-DGhvr9Du.js.br +0 -0
  37. package/dist/client/assets/arc-DGhvr9Du.js.gz +0 -0
  38. package/dist/client/assets/{architectureDiagram-5GKGNRK7-fbj0F3dM.js → architectureDiagram-5GKGNRK7-CuIDz8EE.js} +1 -1
  39. package/dist/client/assets/architectureDiagram-5GKGNRK7-CuIDz8EE.js.br +0 -0
  40. package/dist/client/assets/architectureDiagram-5GKGNRK7-CuIDz8EE.js.gz +0 -0
  41. package/dist/client/assets/{blockDiagram-I7D4REHJ-B7pADDyc.js → blockDiagram-I7D4REHJ-CBwU1S4N.js} +1 -1
  42. package/dist/client/assets/blockDiagram-I7D4REHJ-CBwU1S4N.js.br +0 -0
  43. package/dist/client/assets/blockDiagram-I7D4REHJ-CBwU1S4N.js.gz +0 -0
  44. package/dist/client/assets/{c4Diagram-7LVT6UL2-4QmMGHz9.js → c4Diagram-7LVT6UL2-Cwx2gC54.js} +1 -1
  45. package/dist/client/assets/c4Diagram-7LVT6UL2-Cwx2gC54.js.br +0 -0
  46. package/dist/client/assets/c4Diagram-7LVT6UL2-Cwx2gC54.js.gz +0 -0
  47. package/dist/client/assets/channel-CCinOEIZ.js +1 -0
  48. package/dist/client/assets/{chunk-2Q5K7J3B-DOOBZfu4.js → chunk-2Q5K7J3B-BxMIr20Z.js} +1 -1
  49. package/dist/client/assets/{chunk-5VM5RSS4-B_3rAi5P.js → chunk-5VM5RSS4-mLIgS4d7.js} +1 -1
  50. package/dist/client/assets/{chunk-F27PBJKO-YNbIq50s.js → chunk-F27PBJKO-C-0P7ne-.js} +1 -1
  51. package/dist/client/assets/chunk-F27PBJKO-C-0P7ne-.js.br +0 -0
  52. package/dist/client/assets/chunk-F27PBJKO-C-0P7ne-.js.gz +0 -0
  53. package/dist/client/assets/{chunk-IMKFNOWR-0BVWaDVc.js → chunk-IMKFNOWR-BXYwSzTG.js} +1 -1
  54. package/dist/client/assets/chunk-IMKFNOWR-BXYwSzTG.js.br +0 -0
  55. package/dist/client/assets/chunk-IMKFNOWR-BXYwSzTG.js.gz +0 -0
  56. package/dist/client/assets/{chunk-JWPE2WC7-eSY9TWMP.js → chunk-JWPE2WC7-B4Ae3IIE.js} +1 -1
  57. package/dist/client/assets/{chunk-POPQ4Y6H-D39v1dzx.js → chunk-POPQ4Y6H-BTR7pqem.js} +1 -1
  58. package/dist/client/assets/{chunk-SVP7TREG-BXHTF277.js → chunk-SVP7TREG-CgrftR8g.js} +1 -1
  59. package/dist/client/assets/chunk-SVP7TREG-CgrftR8g.js.br +0 -0
  60. package/dist/client/assets/chunk-SVP7TREG-CgrftR8g.js.gz +0 -0
  61. package/dist/client/assets/{chunk-TICWLB2K-CYJgRp3n.js → chunk-TICWLB2K-C8cDkzTv.js} +1 -1
  62. package/dist/client/assets/chunk-TICWLB2K-C8cDkzTv.js.br +0 -0
  63. package/dist/client/assets/chunk-TICWLB2K-C8cDkzTv.js.gz +0 -0
  64. package/dist/client/assets/{chunk-XXDRQBXY-CbzDQZH7.js → chunk-XXDRQBXY-C10X3d-J.js} +1 -1
  65. package/dist/client/assets/classDiagram-ZZMXUADV-BEGlve5m.js +1 -0
  66. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BEGlve5m.js +1 -0
  67. package/dist/client/assets/{cose-bilkent-JH36ORCC-D8dthIbT.js → cose-bilkent-JH36ORCC-DMV_A8Wm.js} +1 -1
  68. package/dist/client/assets/cose-bilkent-JH36ORCC-DMV_A8Wm.js.br +0 -0
  69. package/dist/client/assets/cose-bilkent-JH36ORCC-DMV_A8Wm.js.gz +0 -0
  70. package/dist/client/assets/{cynefin-OW5HDTMX-PBaLFt2i.js → cynefin-OW5HDTMX-DhacXDx0.js} +1 -1
  71. package/dist/client/assets/cynefin-OW5HDTMX-DhacXDx0.js.br +0 -0
  72. package/dist/client/assets/cynefin-OW5HDTMX-DhacXDx0.js.gz +0 -0
  73. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-4Bv4ySZu.js → cynefinDiagram-5FMLGOSQ-f1eltEyT.js} +1 -1
  74. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-f1eltEyT.js.br +0 -0
  75. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-f1eltEyT.js.gz +0 -0
  76. package/dist/client/assets/{dagre-GXQ25YYZ-DIojN35W.js → dagre-GXQ25YYZ-l3jFXryC.js} +1 -1
  77. package/dist/client/assets/dagre-GXQ25YYZ-l3jFXryC.js.br +0 -0
  78. package/dist/client/assets/dagre-GXQ25YYZ-l3jFXryC.js.gz +0 -0
  79. package/dist/client/assets/{diagram-S7CK7UJ4-DYa3GOaX.js → diagram-S7CK7UJ4-DXViofws.js} +1 -1
  80. package/dist/client/assets/diagram-S7CK7UJ4-DXViofws.js.br +0 -0
  81. package/dist/client/assets/diagram-S7CK7UJ4-DXViofws.js.gz +0 -0
  82. package/dist/client/assets/{diagram-UQ7AKVKN-MZArHUml.js → diagram-UQ7AKVKN-B3MBrbst.js} +1 -1
  83. package/dist/client/assets/diagram-UQ7AKVKN-B3MBrbst.js.br +0 -0
  84. package/dist/client/assets/diagram-UQ7AKVKN-B3MBrbst.js.gz +0 -0
  85. package/dist/client/assets/{diagram-VSXAHHWV-DOg-qopG.js → diagram-VSXAHHWV-DFbrFlRV.js} +1 -1
  86. package/dist/client/assets/diagram-VSXAHHWV-DFbrFlRV.js.br +0 -0
  87. package/dist/client/assets/diagram-VSXAHHWV-DFbrFlRV.js.gz +0 -0
  88. package/dist/client/assets/{diagram-VX7I27RA-Cl1hWkHe.js → diagram-VX7I27RA-C9NARQG4.js} +1 -1
  89. package/dist/client/assets/diagram-VX7I27RA-C9NARQG4.js.br +0 -0
  90. package/dist/client/assets/diagram-VX7I27RA-C9NARQG4.js.gz +0 -0
  91. package/dist/client/assets/{diagram-Z3DM3KII-B_DYMsTz.js → diagram-Z3DM3KII-BtrNY1jj.js} +1 -1
  92. package/dist/client/assets/diagram-Z3DM3KII-BtrNY1jj.js.br +0 -0
  93. package/dist/client/assets/diagram-Z3DM3KII-BtrNY1jj.js.gz +0 -0
  94. package/dist/client/assets/{ebnfDiagram-PWID7BFC-DKkQawMy.js → ebnfDiagram-PWID7BFC-2q4f66SD.js} +1 -1
  95. package/dist/client/assets/ebnfDiagram-PWID7BFC-2q4f66SD.js.br +0 -0
  96. package/dist/client/assets/ebnfDiagram-PWID7BFC-2q4f66SD.js.gz +0 -0
  97. package/dist/client/assets/{erDiagram-RLTQ6QDP-Dn9ywQPh.js → erDiagram-RLTQ6QDP-BeTG4LFu.js} +1 -1
  98. package/dist/client/assets/{erDiagram-RLTQ6QDP-Dn9ywQPh.js.br → erDiagram-RLTQ6QDP-BeTG4LFu.js.br} +0 -0
  99. package/dist/client/assets/erDiagram-RLTQ6QDP-BeTG4LFu.js.gz +0 -0
  100. package/dist/client/assets/{flowDiagram-HODETNUW-fySCe0cE.js → flowDiagram-HODETNUW-AUH7cv7i.js} +1 -1
  101. package/dist/client/assets/flowDiagram-HODETNUW-AUH7cv7i.js.br +0 -0
  102. package/dist/client/assets/flowDiagram-HODETNUW-AUH7cv7i.js.gz +0 -0
  103. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-C03JLSbZ.js → ganttDiagram-EL5Y4UJY-DTCBtKDc.js} +1 -1
  104. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DTCBtKDc.js.br +0 -0
  105. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DTCBtKDc.js.gz +0 -0
  106. package/dist/client/assets/{gestureArbiter-Ca_CSCVo.js → gestureArbiter-B1oSVYS3.js} +1 -1
  107. package/dist/client/assets/gestureArbiter-B1oSVYS3.js.br +0 -0
  108. package/dist/client/assets/gestureArbiter-B1oSVYS3.js.gz +0 -0
  109. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BSAe1f_B.js → gitGraphDiagram-WWUBYQGX-D9QpTdpw.js} +1 -1
  110. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-D9QpTdpw.js.br +0 -0
  111. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-D9QpTdpw.js.gz +0 -0
  112. package/dist/client/assets/{infoDiagram-27XIBGKW-VTsV1pM4.js → infoDiagram-27XIBGKW-Baz1gDIV.js} +1 -1
  113. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-C7DJxPEv.js → ishikawaDiagram-5VMMS53U-BMuuX0ew.js} +1 -1
  114. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BMuuX0ew.js.br +0 -0
  115. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BMuuX0ew.js.gz +0 -0
  116. package/dist/client/assets/{journeyDiagram-3NMN7TZE-DgRhdTHR.js → journeyDiagram-3NMN7TZE-a2ScBjKY.js} +1 -1
  117. package/dist/client/assets/journeyDiagram-3NMN7TZE-a2ScBjKY.js.br +0 -0
  118. package/dist/client/assets/journeyDiagram-3NMN7TZE-a2ScBjKY.js.gz +0 -0
  119. package/dist/client/assets/{kanban-definition-UXKFOSKX-DaWZbETt.js → kanban-definition-UXKFOSKX-U2EGSXCR.js} +1 -1
  120. package/dist/client/assets/kanban-definition-UXKFOSKX-U2EGSXCR.js.br +0 -0
  121. package/dist/client/assets/kanban-definition-UXKFOSKX-U2EGSXCR.js.gz +0 -0
  122. package/dist/client/assets/{layout-DNda62xi.js → layout-B10HxPDL.js} +1 -1
  123. package/dist/client/assets/layout-B10HxPDL.js.br +0 -0
  124. package/dist/client/assets/layout-B10HxPDL.js.gz +0 -0
  125. package/dist/client/assets/{linear-CadrI0GP.js → linear-taB2K9cP.js} +1 -1
  126. package/dist/client/assets/linear-taB2K9cP.js.br +0 -0
  127. package/dist/client/assets/linear-taB2K9cP.js.gz +0 -0
  128. package/dist/client/assets/{mermaid.core-HFssyUb5.js → mermaid.core-BN2FWPqK.js} +5 -5
  129. package/dist/client/assets/mermaid.core-BN2FWPqK.js.br +0 -0
  130. package/dist/client/assets/mermaid.core-BN2FWPqK.js.gz +0 -0
  131. package/dist/client/assets/{mindmap-definition-YA3MSWOX-BLX420et.js → mindmap-definition-YA3MSWOX-DeWGCXAx.js} +1 -1
  132. package/dist/client/assets/mindmap-definition-YA3MSWOX-DeWGCXAx.js.br +0 -0
  133. package/dist/client/assets/mindmap-definition-YA3MSWOX-DeWGCXAx.js.gz +0 -0
  134. package/dist/client/assets/{passwordBootstrap-B4C87XkY.js → passwordBootstrap-C0GT89S0.js} +1 -1
  135. package/dist/client/assets/passwordBootstrap-C0GT89S0.js.br +0 -0
  136. package/dist/client/assets/passwordBootstrap-C0GT89S0.js.gz +0 -0
  137. package/dist/client/assets/{pegDiagram-XKGWAZYB-DMHN3Uz6.js → pegDiagram-XKGWAZYB-DlvrsT3o.js} +1 -1
  138. package/dist/client/assets/pegDiagram-XKGWAZYB-DlvrsT3o.js.br +0 -0
  139. package/dist/client/assets/pegDiagram-XKGWAZYB-DlvrsT3o.js.gz +0 -0
  140. package/dist/client/assets/{pieDiagram-E7YTZNPT-u3MQV9-X.js → pieDiagram-E7YTZNPT-BAPW45J4.js} +1 -1
  141. package/dist/client/assets/pieDiagram-E7YTZNPT-BAPW45J4.js.br +0 -0
  142. package/dist/client/assets/pieDiagram-E7YTZNPT-BAPW45J4.js.gz +0 -0
  143. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-B0iS0MxY.js → quadrantDiagram-AXDQQJYC-BunDSa6d.js} +1 -1
  144. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BunDSa6d.js.br +0 -0
  145. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BunDSa6d.js.gz +0 -0
  146. package/dist/client/assets/{railroadDiagram-O6MQD6OU-Cny1bhbK.js → railroadDiagram-O6MQD6OU-DnQz0YPl.js} +1 -1
  147. package/dist/client/assets/railroadDiagram-O6MQD6OU-DnQz0YPl.js.br +0 -0
  148. package/dist/client/assets/railroadDiagram-O6MQD6OU-DnQz0YPl.js.gz +0 -0
  149. package/dist/client/assets/{referenceLongPress-CRjkeJkj.js → referenceLongPress-J0_Uut_r.js} +1 -1
  150. package/dist/client/assets/referenceLongPress-J0_Uut_r.js.br +0 -0
  151. package/dist/client/assets/referenceLongPress-J0_Uut_r.js.gz +0 -0
  152. package/dist/client/assets/{requirementDiagram-BXWQKSXE-gQqK4Hig.js → requirementDiagram-BXWQKSXE-34oH6W5Q.js} +1 -1
  153. package/dist/client/assets/requirementDiagram-BXWQKSXE-34oH6W5Q.js.br +0 -0
  154. package/dist/client/assets/requirementDiagram-BXWQKSXE-34oH6W5Q.js.gz +0 -0
  155. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-5ZoSBB75.js → sankeyDiagram-P5KCCOFB-BU0mwqgf.js} +1 -1
  156. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BU0mwqgf.js.br +0 -0
  157. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BU0mwqgf.js.gz +0 -0
  158. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-Cq1VlUlL.js → sequenceDiagram-WJ2MYXX4-DJhrdIZ0.js} +1 -1
  159. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DJhrdIZ0.js.br +0 -0
  160. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DJhrdIZ0.js.gz +0 -0
  161. package/dist/client/assets/{sizeCapture-INFHLROL-lLK8eFcJ.js → sizeCapture-INFHLROL-BsOq_6Ma.js} +1 -1
  162. package/dist/client/assets/sizeCapture-INFHLROL-BsOq_6Ma.js.br +0 -0
  163. package/dist/client/assets/sizeCapture-INFHLROL-BsOq_6Ma.js.gz +0 -0
  164. package/dist/client/assets/{sparkles-BNQv3v-n.js → sparkles-CF3bFIsn.js} +1 -1
  165. package/dist/client/assets/{stateDiagram-D77RDMKH-Xtxea1-c.js → stateDiagram-D77RDMKH-D3oPcG-1.js} +1 -1
  166. package/dist/client/assets/stateDiagram-D77RDMKH-D3oPcG-1.js.br +0 -0
  167. package/dist/client/assets/stateDiagram-D77RDMKH-D3oPcG-1.js.gz +0 -0
  168. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DcnFEfyh.js +1 -0
  169. package/dist/client/assets/{swimlanes-42K2YHIH-CpVFOhSV.js → swimlanes-42K2YHIH-CVJmYIbm.js} +1 -1
  170. package/dist/client/assets/swimlanes-42K2YHIH-CVJmYIbm.js.br +0 -0
  171. package/dist/client/assets/{swimlanes-42K2YHIH-CpVFOhSV.js.gz → swimlanes-42K2YHIH-CVJmYIbm.js.gz} +0 -0
  172. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-C2OnFqej.js +8 -0
  173. package/dist/client/assets/{timeline-definition-24CTP7MA-BGM7_COx.js → timeline-definition-24CTP7MA-DAfVQZhO.js} +1 -1
  174. package/dist/client/assets/timeline-definition-24CTP7MA-DAfVQZhO.js.br +0 -0
  175. package/dist/client/assets/timeline-definition-24CTP7MA-DAfVQZhO.js.gz +0 -0
  176. package/dist/client/assets/{triangle-alert-t6xUbEkq.js → triangle-alert-9P6A4GvY.js} +1 -1
  177. package/dist/client/assets/{vennDiagram-4TSXK5OY-DxxWi2bH.js → vennDiagram-4TSXK5OY-DOEt_Lq-.js} +1 -1
  178. package/dist/client/assets/vennDiagram-4TSXK5OY-DOEt_Lq-.js.br +0 -0
  179. package/dist/client/assets/vennDiagram-4TSXK5OY-DOEt_Lq-.js.gz +0 -0
  180. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BIBrAH7x.js → wardleyDiagram-VM6X3IG4-5wDsNQT_.js} +1 -1
  181. package/dist/client/assets/wardleyDiagram-VM6X3IG4-5wDsNQT_.js.br +0 -0
  182. package/dist/client/assets/wardleyDiagram-VM6X3IG4-5wDsNQT_.js.gz +0 -0
  183. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-KxQx_cvI.js → xychartDiagram-S5SC5T6Z-M0hIHXf2.js} +1 -1
  184. package/dist/client/assets/xychartDiagram-S5SC5T6Z-M0hIHXf2.js.br +0 -0
  185. package/dist/client/assets/xychartDiagram-S5SC5T6Z-M0hIHXf2.js.gz +0 -0
  186. package/dist/client/index.html +1 -1
  187. package/dist/client/index.html.br +0 -0
  188. package/dist/client/index.html.gz +0 -0
  189. package/dist/client/sw.js +1 -1
  190. package/dist/client/sw.js.br +0 -0
  191. package/dist/client/sw.js.gz +0 -0
  192. package/dist/server/agent/notifyCli.js +1 -1
  193. package/dist/server/cli.js +1 -2
  194. package/package.json +1 -1
  195. package/runtime-manifest.json +3 -3
  196. package/dist/client/assets/App-Cld3O8C2.js.br +0 -0
  197. package/dist/client/assets/App-Cld3O8C2.js.gz +0 -0
  198. package/dist/client/assets/ChangeWalkthroughPanel-C5RRvTfo.js.br +0 -0
  199. package/dist/client/assets/ChangeWalkthroughPanel-C5RRvTfo.js.gz +0 -0
  200. package/dist/client/assets/DagPlayground-Cb99juZB.js.br +0 -0
  201. package/dist/client/assets/DagPlayground-Cb99juZB.js.gz +0 -0
  202. package/dist/client/assets/DiffLab-CLftmGmh.js.br +0 -0
  203. package/dist/client/assets/DiffLab-CLftmGmh.js.gz +0 -0
  204. package/dist/client/assets/DiffReview-DQri2Ybs.js.br +0 -0
  205. package/dist/client/assets/DiffReview-DQri2Ybs.js.gz +0 -0
  206. package/dist/client/assets/DiffReviewLab-DboW5kVe.js.br +0 -0
  207. package/dist/client/assets/DiffReviewLab-DboW5kVe.js.gz +0 -0
  208. package/dist/client/assets/DiffViewer-DFCeAPLJ.js.br +0 -0
  209. package/dist/client/assets/DiffViewer-DFCeAPLJ.js.gz +0 -0
  210. package/dist/client/assets/ModelPreview-CCG0pfHi.js.br +0 -0
  211. package/dist/client/assets/ModelPreview-CCG0pfHi.js.gz +0 -0
  212. package/dist/client/assets/RightSidebar-g_aBUJMG.js.br +0 -0
  213. package/dist/client/assets/RightSidebar-g_aBUJMG.js.gz +0 -0
  214. package/dist/client/assets/abnfDiagram-VCTEODGH-BJpFAXlO.js.br +0 -0
  215. package/dist/client/assets/abnfDiagram-VCTEODGH-BJpFAXlO.js.gz +0 -0
  216. package/dist/client/assets/app-C6b0uY52.js.br +0 -0
  217. package/dist/client/assets/app-C6b0uY52.js.gz +0 -0
  218. package/dist/client/assets/arc-BdJDW1lu.js.br +0 -0
  219. package/dist/client/assets/arc-BdJDW1lu.js.gz +0 -0
  220. package/dist/client/assets/architectureDiagram-5GKGNRK7-fbj0F3dM.js.br +0 -0
  221. package/dist/client/assets/architectureDiagram-5GKGNRK7-fbj0F3dM.js.gz +0 -0
  222. package/dist/client/assets/blockDiagram-I7D4REHJ-B7pADDyc.js.br +0 -0
  223. package/dist/client/assets/blockDiagram-I7D4REHJ-B7pADDyc.js.gz +0 -0
  224. package/dist/client/assets/c4Diagram-7LVT6UL2-4QmMGHz9.js.br +0 -0
  225. package/dist/client/assets/c4Diagram-7LVT6UL2-4QmMGHz9.js.gz +0 -0
  226. package/dist/client/assets/channel-CVdWcjpf.js +0 -1
  227. package/dist/client/assets/chunk-F27PBJKO-YNbIq50s.js.br +0 -0
  228. package/dist/client/assets/chunk-F27PBJKO-YNbIq50s.js.gz +0 -0
  229. package/dist/client/assets/chunk-IMKFNOWR-0BVWaDVc.js.br +0 -0
  230. package/dist/client/assets/chunk-IMKFNOWR-0BVWaDVc.js.gz +0 -0
  231. package/dist/client/assets/chunk-SVP7TREG-BXHTF277.js.br +0 -0
  232. package/dist/client/assets/chunk-SVP7TREG-BXHTF277.js.gz +0 -0
  233. package/dist/client/assets/chunk-TICWLB2K-CYJgRp3n.js.br +0 -0
  234. package/dist/client/assets/chunk-TICWLB2K-CYJgRp3n.js.gz +0 -0
  235. package/dist/client/assets/classDiagram-ZZMXUADV-Dw2Jkvjn.js +0 -1
  236. package/dist/client/assets/classDiagram-v2-VYDZK3BY-Dw2Jkvjn.js +0 -1
  237. package/dist/client/assets/cose-bilkent-JH36ORCC-D8dthIbT.js.br +0 -0
  238. package/dist/client/assets/cose-bilkent-JH36ORCC-D8dthIbT.js.gz +0 -0
  239. package/dist/client/assets/cynefin-OW5HDTMX-PBaLFt2i.js.br +0 -0
  240. package/dist/client/assets/cynefin-OW5HDTMX-PBaLFt2i.js.gz +0 -0
  241. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-4Bv4ySZu.js.br +0 -0
  242. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-4Bv4ySZu.js.gz +0 -0
  243. package/dist/client/assets/dagre-GXQ25YYZ-DIojN35W.js.br +0 -0
  244. package/dist/client/assets/dagre-GXQ25YYZ-DIojN35W.js.gz +0 -0
  245. package/dist/client/assets/diagram-S7CK7UJ4-DYa3GOaX.js.br +0 -0
  246. package/dist/client/assets/diagram-S7CK7UJ4-DYa3GOaX.js.gz +0 -0
  247. package/dist/client/assets/diagram-UQ7AKVKN-MZArHUml.js.br +0 -0
  248. package/dist/client/assets/diagram-UQ7AKVKN-MZArHUml.js.gz +0 -0
  249. package/dist/client/assets/diagram-VSXAHHWV-DOg-qopG.js.br +0 -0
  250. package/dist/client/assets/diagram-VSXAHHWV-DOg-qopG.js.gz +0 -0
  251. package/dist/client/assets/diagram-VX7I27RA-Cl1hWkHe.js.br +0 -0
  252. package/dist/client/assets/diagram-VX7I27RA-Cl1hWkHe.js.gz +0 -0
  253. package/dist/client/assets/diagram-Z3DM3KII-B_DYMsTz.js.br +0 -0
  254. package/dist/client/assets/diagram-Z3DM3KII-B_DYMsTz.js.gz +0 -0
  255. package/dist/client/assets/ebnfDiagram-PWID7BFC-DKkQawMy.js.br +0 -0
  256. package/dist/client/assets/ebnfDiagram-PWID7BFC-DKkQawMy.js.gz +0 -0
  257. package/dist/client/assets/erDiagram-RLTQ6QDP-Dn9ywQPh.js.gz +0 -0
  258. package/dist/client/assets/flowDiagram-HODETNUW-fySCe0cE.js.br +0 -0
  259. package/dist/client/assets/flowDiagram-HODETNUW-fySCe0cE.js.gz +0 -0
  260. package/dist/client/assets/ganttDiagram-EL5Y4UJY-C03JLSbZ.js.br +0 -0
  261. package/dist/client/assets/ganttDiagram-EL5Y4UJY-C03JLSbZ.js.gz +0 -0
  262. package/dist/client/assets/gestureArbiter-Ca_CSCVo.js.br +0 -0
  263. package/dist/client/assets/gestureArbiter-Ca_CSCVo.js.gz +0 -0
  264. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BSAe1f_B.js.br +0 -0
  265. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BSAe1f_B.js.gz +0 -0
  266. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C7DJxPEv.js.br +0 -0
  267. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C7DJxPEv.js.gz +0 -0
  268. package/dist/client/assets/journeyDiagram-3NMN7TZE-DgRhdTHR.js.br +0 -0
  269. package/dist/client/assets/journeyDiagram-3NMN7TZE-DgRhdTHR.js.gz +0 -0
  270. package/dist/client/assets/kanban-definition-UXKFOSKX-DaWZbETt.js.br +0 -0
  271. package/dist/client/assets/kanban-definition-UXKFOSKX-DaWZbETt.js.gz +0 -0
  272. package/dist/client/assets/layout-DNda62xi.js.br +0 -0
  273. package/dist/client/assets/layout-DNda62xi.js.gz +0 -0
  274. package/dist/client/assets/linear-CadrI0GP.js.br +0 -0
  275. package/dist/client/assets/linear-CadrI0GP.js.gz +0 -0
  276. package/dist/client/assets/mermaid.core-HFssyUb5.js.br +0 -0
  277. package/dist/client/assets/mermaid.core-HFssyUb5.js.gz +0 -0
  278. package/dist/client/assets/mindmap-definition-YA3MSWOX-BLX420et.js.br +0 -0
  279. package/dist/client/assets/mindmap-definition-YA3MSWOX-BLX420et.js.gz +0 -0
  280. package/dist/client/assets/passwordBootstrap-B4C87XkY.js.br +0 -0
  281. package/dist/client/assets/passwordBootstrap-B4C87XkY.js.gz +0 -0
  282. package/dist/client/assets/pegDiagram-XKGWAZYB-DMHN3Uz6.js.br +0 -0
  283. package/dist/client/assets/pegDiagram-XKGWAZYB-DMHN3Uz6.js.gz +0 -0
  284. package/dist/client/assets/pieDiagram-E7YTZNPT-u3MQV9-X.js.br +0 -0
  285. package/dist/client/assets/pieDiagram-E7YTZNPT-u3MQV9-X.js.gz +0 -0
  286. package/dist/client/assets/quadrantDiagram-AXDQQJYC-B0iS0MxY.js.br +0 -0
  287. package/dist/client/assets/quadrantDiagram-AXDQQJYC-B0iS0MxY.js.gz +0 -0
  288. package/dist/client/assets/railroadDiagram-O6MQD6OU-Cny1bhbK.js.br +0 -0
  289. package/dist/client/assets/railroadDiagram-O6MQD6OU-Cny1bhbK.js.gz +0 -0
  290. package/dist/client/assets/referenceLongPress-CRjkeJkj.js.br +0 -0
  291. package/dist/client/assets/referenceLongPress-CRjkeJkj.js.gz +0 -0
  292. package/dist/client/assets/requirementDiagram-BXWQKSXE-gQqK4Hig.js.br +0 -0
  293. package/dist/client/assets/requirementDiagram-BXWQKSXE-gQqK4Hig.js.gz +0 -0
  294. package/dist/client/assets/sankeyDiagram-P5KCCOFB-5ZoSBB75.js.br +0 -0
  295. package/dist/client/assets/sankeyDiagram-P5KCCOFB-5ZoSBB75.js.gz +0 -0
  296. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Cq1VlUlL.js.br +0 -0
  297. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Cq1VlUlL.js.gz +0 -0
  298. package/dist/client/assets/sizeCapture-INFHLROL-lLK8eFcJ.js.br +0 -0
  299. package/dist/client/assets/sizeCapture-INFHLROL-lLK8eFcJ.js.gz +0 -0
  300. package/dist/client/assets/stateDiagram-D77RDMKH-Xtxea1-c.js.br +0 -0
  301. package/dist/client/assets/stateDiagram-D77RDMKH-Xtxea1-c.js.gz +0 -0
  302. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-1BGERJKu.js +0 -1
  303. package/dist/client/assets/swimlanes-42K2YHIH-CpVFOhSV.js.br +0 -0
  304. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-C1U7ALsL.js +0 -8
  305. package/dist/client/assets/timeline-definition-24CTP7MA-BGM7_COx.js.br +0 -0
  306. package/dist/client/assets/timeline-definition-24CTP7MA-BGM7_COx.js.gz +0 -0
  307. package/dist/client/assets/vennDiagram-4TSXK5OY-DxxWi2bH.js.br +0 -0
  308. package/dist/client/assets/vennDiagram-4TSXK5OY-DxxWi2bH.js.gz +0 -0
  309. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BIBrAH7x.js.br +0 -0
  310. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BIBrAH7x.js.gz +0 -0
  311. package/dist/client/assets/xychartDiagram-S5SC5T6Z-KxQx_cvI.js.br +0 -0
  312. package/dist/client/assets/xychartDiagram-S5SC5T6Z-KxQx_cvI.js.gz +0 -0
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/passwordBootstrap-B4C87XkY.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/App-Cld3O8C2.js","assets/gestureArbiter-Ca_CSCVo.js","assets/gestureArbiter-C2J0D0kV.css","assets/triangle-alert-t6xUbEkq.js","assets/referenceLongPress-CRjkeJkj.js","assets/DagPlayground-Cb99juZB.js","assets/ChangeWalkthroughPanel-C5RRvTfo.js","assets/sparkles-BNQv3v-n.js","assets/DiffLab-CLftmGmh.js","assets/DiffViewer-DFCeAPLJ.js","assets/DiffViewer-T3uj2-aP.css","assets/DiffReviewLab-DboW5kVe.js","assets/DiffReview-DQri2Ybs.js"])))=>i.map(i=>d[i]);
2
- import{r as Bc,a as Em,g as Af}from"./react-XDCjal2T.js";import{b as _,r as _c,R as Ke}from"./dnd-BCFAPC0L.js";import{L as Am,l as km}from"./terminal-C7X98Amf.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const Cm="modulepreload",Im=function(t){return"/"+t},Hl={},Yt=function(e,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(l){return Promise.all(l.map(d=>Promise.resolve(d).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),a=i?.nonce||i?.getAttribute("nonce");o=c(n.map(l=>{if(l=Im(l),l in Hl)return;Hl[l]=!0;const d=l.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":Cm,d||(f.as="script"),f.crossOrigin="",f.href=l,a&&f.setAttribute("nonce",a),document.head.appendChild(f),d)return new Promise((h,g)=>{f.addEventListener("load",h),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${l}`)))})}))}function s(i){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i}return o.then(i=>{for(const a of i||[])a.status==="rejected"&&s(a.reason);return e().catch(s)})};var vi={exports:{}},Ar={};var ql;function Rm(){if(ql)return Ar;ql=1;var t=Bc(),e=Symbol.for("react.element"),n=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,o=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function i(a,c,l){var d,u={},f=null,h=null;l!==void 0&&(f=""+l),c.key!==void 0&&(f=""+c.key),c.ref!==void 0&&(h=c.ref);for(d in c)r.call(c,d)&&!s.hasOwnProperty(d)&&(u[d]=c[d]);if(a&&a.defaultProps)for(d in c=a.defaultProps,c)u[d]===void 0&&(u[d]=c[d]);return{$$typeof:e,type:a,key:f,ref:h,props:u,_owner:o.current}}return Ar.Fragment=n,Ar.jsx=i,Ar.jsxs=i,Ar}var Kl;function Tm(){return Kl||(Kl=1,vi.exports=Rm()),vi.exports}var p=Tm();const gn="termdock-secure-target-v1",Oc="termdock-secure-entry-v1",Pm=new Set([gn,Oc,"termdock-color-theme","termdock:locale","termdock.federation.connections.v1"]),Ao=typeof Storage>"u"?void 0:Storage.prototype.getItem,Si=typeof Storage>"u"?void 0:Storage.prototype.setItem,zl="termdock-secure-legacy-owner",qs=typeof window<"u"&&window.parent!==window&&location.pathname==="/workspace.html";function Nm(){if(typeof window>"u")return null;try{if(qs){const e=new URLSearchParams(location.search).get("termdock-workspace"),n=JSON.parse(localStorage.getItem("termdock.federation.connections.v1")||"[]"),r=Array.isArray(n)?n.find(o=>o?.targetPeerId===e):void 0;return r&&typeof r.url=="string"&&typeof r.targetPeerId=="string"?{...r,serviceName:r.label||r.serviceName}:null}const t=JSON.parse(sessionStorage.getItem(gn)??localStorage.getItem(gn)??"null");return t&&typeof t.url=="string"&&typeof t.targetPeerId=="string"?t:null}catch{return null}}let Ks=Nm();const zn=Ks?.targetPeerId??"unpaired";function Wn(){return Ks}function kf(t){if(Ks=t,qs)return;const e=JSON.stringify(t);sessionStorage.setItem(gn,e),localStorage.setItem(gn,e)}function Lm(){Ks=null,!qs&&(localStorage.removeItem(gn),sessionStorage.removeItem(gn),localStorage.removeItem(Oc))}function Vr(t,e=zn){return Pm.has(t)||t.startsWith("termdock-secure-")?t:`termdock-service:${e}:${t}`}function Bm(t){if(!(!Ao||!Si))try{if(Ao.call(localStorage,zl))return;Si.call(localStorage,zl,t);for(const n of[localStorage,sessionStorage]){const r=Array.from({length:n.length},(o,s)=>n.key(s)).filter(o=>!!o);for(const o of r){if(o.startsWith("termdock-service:")||Vr(o,t)===o)continue;const s=Vr(o,t),i=Ao.call(n,o);i!==null&&Ao.call(n,s)===null&&Si.call(n,s,i)}}}catch{}}let Wl=!1;function _m(){if(Wl||typeof Storage>"u")return;Wl=!0;const t=Storage.prototype.getItem,e=Storage.prototype.setItem,n=Storage.prototype.removeItem;Storage.prototype.getItem=function(r){return t.call(this,Vr(String(r)))},Storage.prototype.setItem=function(r,o){e.call(this,Vr(String(r)),o)},Storage.prototype.removeItem=function(r){n.call(this,Vr(String(r)))}}_m();const Gl={pending:0,failed:1,expired:1,delivered:2,read:3},ko=32768,ds="remote:";function tt(t,e){return e.startsWith(ds)?e:`${ds}${encodeURIComponent(t)}:${encodeURIComponent(e)}`}function Ge(t){if(!t.startsWith(ds))return null;const e=t.slice(ds.length).split(":");if(e.length!==2)return null;try{return{origin:decodeURIComponent(e[0]),id:decodeURIComponent(e[1])}}catch{return null}}function xi(t,e){const n=Ge(e);return n?.origin===t?n.id:e}function Co(t,e){return{...t,fromSessionId:t.fromSessionId?e(t.fromSessionId):null,toSessionId:e(t.toSessionId)}}function Ei(t,e){if(!t)return;const n=Object.fromEntries(Object.entries(t).map(([r,o])=>[e(r),o]));return Object.keys(n).length?n:void 0}class Om{constructor(e){this.services=e}services;snapshots=new Map;reachable=new Set;groups=new Map;messages=new Map;sessions=new Map;diagnostics=new Map;serviceErrors=new Map;inFlight=null;catalogInFlight=null;async refresh(){return this.inFlight?this.inFlight:(this.inFlight=this.synchronize().finally(()=>{this.inFlight=null}),this.inFlight)}async refreshCatalog(){return this.catalogInFlight?this.catalogInFlight:(this.catalogInFlight=this.discover().finally(()=>{this.catalogInFlight=null}),this.catalogInFlight)}async discover(){const e=this.services();this.serviceErrors.clear();const n=await Promise.all(e.map(async r=>{let o;try{const s=await Promise.race([Promise.resolve().then(()=>r.request("/collaboration-federation")),new Promise((i,a)=>{o=setTimeout(()=>a(new Error("服务协作目录响应超时")),18e3)})]);if(!Array.isArray(s.groups)||!Array.isArray(s.sessions)||!Array.isArray(s.messages))throw new Error("协作目录响应无效,请更新服务");return{service:r,data:s}}catch(s){return this.serviceErrors.set(r.origin,s instanceof Error?s.message.slice(0,300):"协作目录请求失败"),null}finally{clearTimeout(o)}}));this.reachable.clear();for(const r of n){if(!r)continue;const{service:o,data:s}=r;for(const[i,a]of Object.entries(s.transportDiagnostics??{}))(!this.diagnostics.has(i)||a.checked_at>this.diagnostics.get(i).checked_at)&&this.diagnostics.set(i,a);this.reachable.add(o.origin),this.snapshots.set(o.origin,s);for(const i of s.groups){const a={...i,sessionIds:i.sessionIds.map(l=>tt(o.origin,l)),roles:Ei(i.roles,l=>tt(o.origin,l))},c=this.groups.get(i.id);(!c||a.updatedAt>c.updatedAt)&&this.groups.set(i.id,a)}for(const i of s.messages)this.mergeMessage(Co(i,a=>tt(o.origin,a)))}this.sessions.clear();for(const r of this.groups.values())for(const o of r.remoteSessions??[])this.sessions.set(o.sessionId,{...o,serviceConnected:!1,status:"offline",serviceCheckedAt:Date.now()});for(const[r,o]of this.snapshots){const s=this.reachable.has(r);for(const i of o.sessions){const a=tt(r,i.sessionId);this.sessions.set(a,{...i,sessionId:a,serviceOrigin:r,serviceLabel:e.find(c=>c.origin===r)?.label??r,serviceConnected:s,serviceCheckedAt:Date.now(),status:s?i.status:"offline"})}}}async synchronize(){await this.refreshCatalog();const e=this.services();for(const n of this.messages.values()){const r=Ge(n.toSessionId)?.origin;if(n.status==="pending"&&r&&!this.reachable.has(r)){const o=this.diagnostics.get(n.id);this.diagnostics.set(n.id,{...o,relay_online:!0,peer_reachable:!1,attempt_count:o?.attempt_count??0,next_retry_at:Date.now()+2e3,last_error:"PEER_UNREACHABLE",checked_at:Date.now()})}}await Promise.all(e.filter(n=>this.reachable.has(n.origin)).map(async n=>{for(const r of this.groups.values())if(!(!this.snapshots.get(n.origin)?.groups.some(s=>s.id===r.id)&&!r.sessionIds.some(s=>Ge(s)?.origin===n.origin)))try{await this.push(n,r)}catch{this.reachable.delete(n.origin)}})),await Promise.all(e.filter(n=>this.reachable.has(n.origin)).map(async n=>{if(!((this.snapshots.get(n.origin)?.protocolVersion??1)<2))for(const r of this.groups.values()){if(r.deleted||!r.sessionIds.some(s=>Ge(s)?.origin===n.origin))continue;const o=[...this.diagnostics].filter(([s])=>this.messages.get(s)?.groupId===r.id).map(([s,i])=>({message_id:s,diagnostic:i,...this.messages.get(s)?.status==="failed"?{failure_reason:this.messages.get(s)?.failureReason}:{}}));if(o.length)try{await n.request("/collaboration-federation","POST",{group:this.groupForService(r,n.origin),messages:[],transport:o})}catch{}}}))}mergeMessage(e){const n=this.messages.get(e.id),r=Gl;(!n||r[e.status]>r[n.status])&&this.messages.set(e.id,e);const o=this.messages.get(e.id);if(o&&(n?.shellConfirmed===!0||e.shellConfirmed===!0)&&(o.shellConfirmed=!0),this.messages.size>2e3){const s=[...this.messages.values()].find(i=>i.status!=="pending"&&i.status!=="failed");s&&this.messages.delete(s.id)}}groupForService(e,n){const r=e.sessionIds.filter(o=>Ge(o)?.origin!==n).map(o=>{const s=Ge(o),i=this.sessions.get(o);return{sessionId:o,name:i?.name??s.id,cwd:i?.cwd??"",status:i?.status??"offline",capability:i?.capability??"",currentTask:i?.currentTask??"",updatedAt:i?.updatedAt??0,agent:i?.agent??null,backendSessionId:null,agentNativeSessionId:null,serviceOrigin:s.origin,serviceLabel:i?.serviceLabel??s.origin,serviceConnected:this.reachable.has(s.origin),serviceCheckedAt:Date.now()}});return{...e,sessionIds:e.sessionIds.map(o=>xi(n,o)),remoteSessions:r,roles:Ei(e.roles,o=>xi(n,o))}}async push(e,n){const r=Gl,o=new Map((this.snapshots.get(e.origin)?.messages??[]).map(i=>[i.id,i])),s=[...this.messages.values()].filter(i=>i.groupId===n.id&&(!o.has(i.id)||r[i.status]>r[o.get(i.id).status]||i.shellConfirmed===!0&&o.get(i.id)?.shellConfirmed!==!0)).map(i=>Co(i,a=>xi(e.origin,a)));if(!s.length){await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[]});return}for(const i of s){const a=this.messages.get(i.id),c=Ge(a.toSessionId)?.origin===e.origin,l=this.diagnostics.get(i.id);if(c&&l?.next_retry_at&&l.next_retry_at>Date.now()&&l.last_error!=="PEER_UNREACHABLE")continue;const d={relay_online:!0,peer_reachable:!0,attempt_count:(l?.attempt_count??0)+(c?1:0),next_retry_at:null,last_error:null,checked_at:Date.now(),fragments_sent:0,fragments_total:0},u=this.snapshots.get(e.origin)?.protocolVersion??1;if(u<2&&(String(i.content??"").length>2e4||i.responseKind||i.task||i.metadata||i.expiresAt||i.status==="failed"||i.status==="expired")){c&&(this.messages.set(i.id,{...a,status:"failed",failureReason:"PEER_UPGRADE_REQUIRED"}),this.diagnostics.set(i.id,{...d,last_error:"PEER_UPGRADE_REQUIRED"}));continue}try{const f=new TextEncoder().encode(JSON.stringify(i));if(u>=2&&f.length>ko&&!o.has(i.id)){const h=Math.ceil(f.length/ko),g=Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",f)),m=>m.toString(16).padStart(2,"0")).join("");d.fragments_total=h;for(let m=0;m<h;m++){const b=await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[],fragments:[{message_id:i.id,group_id:n.id,index:m,total:h,sha256:g,data:btoa(String.fromCharCode(...f.subarray(m*ko,(m+1)*ko)))}]}),w=b.fragmentReceipts?.find(I=>I.message_id===i.id);if(!w||m===h-1&&!w.complete)throw new Error("FRAGMENT_ACK_MISSING");d.fragments_sent=w.received;for(const I of b.messages??[])this.mergeMessage(Co(I,y=>tt(e.origin,y)));if(c){this.diagnostics.set(i.id,{...d,checked_at:Date.now()});const I=this.services().find(y=>y.origin===Ge(a.fromSessionId??"")?.origin);I&&I.origin!==e.origin&&(this.snapshots.get(I.origin)?.protocolVersion??1)>=2&&await I.request("/collaboration-federation","POST",{group:this.groupForService(n,I.origin),messages:[],transport:[{message_id:i.id,diagnostic:d}]}).catch(()=>{})}}}else{const h=await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[i]});if(!(h.messages??[]).some(g=>g.id===i.id))throw new Error("PEER_REJECTED_MESSAGE");for(const g of h.messages??[])this.mergeMessage(Co(g,m=>tt(e.origin,m)))}c&&this.diagnostics.set(i.id,{...d,checked_at:Date.now()})}catch(f){c&&this.diagnostics.set(i.id,{...d,checked_at:Date.now(),peer_reachable:null,last_error:f instanceof Error?f.message.slice(0,300):"RELAY_REQUEST_FAILED",next_retry_at:Date.now()+Math.min(3e4,1e3*2**Math.min(d.attempt_count,5))})}}}async peers(e){if(!this.services().some(n=>n.origin===e))throw new Error("当前服务未连接");return await this.refreshCatalog(),{protocolVersion:2,origin:e,sessions:[...this.sessions.values()].filter(n=>Ge(n.sessionId)?.origin!==e),services:[...this.snapshots.keys(),...this.services().map(n=>n.origin)].filter((n,r,o)=>o.indexOf(n)===r).map(n=>({origin:n,label:this.services().find(r=>r.origin===n)?.label??n,connected:this.reachable.has(n),error:this.serviceErrors.get(n)}))}}async list(e){const n=this.services().find(s=>s.origin===e);if(!n)throw new Error("当前服务未连接");const[r,o]=await Promise.all([this.peers(e),n.request("/collaboration-groups")]);return{groups:o.groups,sessions:[...r.sessions,...o.sessions]}}async save(e,n){await this.refreshCatalog();const r=this.services().find(u=>u.origin===e);if(!r)throw new Error("当前服务未连接");const o=await r.request("/collaboration-groups"),s=n.id?o.groups.find(u=>u.id===n.id):void 0;if(n.id&&!s)throw new Error("协作组已删除,请刷新列表");if(s&&n.expectedUpdatedAt!==void 0&&n.expectedUpdatedAt!==s.updatedAt)throw new Error("协作组已被修改,请重新打开成员管理后再保存");for(const u of this.sessions.keys())Ge(u)?.origin===e&&this.sessions.delete(u);for(const u of o.sessions){const f=tt(e,u.sessionId);this.sessions.set(f,{...u,sessionId:f,serviceOrigin:e,serviceLabel:r.label,serviceConnected:!0})}if(!n.id?.startsWith("cross-")&&!n.sessionIds.some(u=>Ge(u)))return r.request("/collaboration-groups","POST",n);if(!this.reachable.has(e))throw new Error("当前服务需要升级 Termdock 后才能跨服务组队");const i=[...new Set(n.sessionIds.map(u=>tt(e,u)))],a=new Set(s?.sessionIds.map(u=>tt(e,u))??[]);if(!n.name?.trim()||i.length<2||i.some(u=>!a.has(u)&&(!this.sessions.has(u)||!this.reachable.has(Ge(u).origin))))throw new Error("所选成员已变化或服务不可达,请刷新后重新选择;尚未保存任何修改");const c=s?.federated?{...s,sessionIds:s.sessionIds.map(u=>tt(e,u))}:void 0,l=Ei(s?.roles,u=>tt(e,u)),d={id:c?.id??`cross-${crypto.randomUUID()}`,name:n.name.trim(),sessionIds:i,...l?{roles:Object.fromEntries(Object.entries(l).filter(([u])=>i.includes(u)))}:{},createdAt:c?.createdAt??Date.now(),updatedAt:Math.max(Date.now(),(c?.updatedAt??0)+1),federated:!0};if(s&&!s.federated){if(o.capabilities?.groupPromotion!==1)throw new Error("当前服务需要升级后才能将已有组转换为跨服务组;原组和记录均未修改");const u=await r.request(`/collaboration-groups/${encodeURIComponent(s.id)}/promote`,"POST",{group:this.groupForService(d,e),expectedUpdatedAt:n.expectedUpdatedAt??s.updatedAt});d.updatedAt=u.group.updatedAt,d.createdAt=u.group.createdAt}else await r.request("/collaboration-federation","POST",{group:this.groupForService(d,e),messages:[],...c?{expectedUpdatedAt:n.expectedUpdatedAt??c.updatedAt}:{}});return this.groups.set(d.id,d),{group:this.groupForService(d,e)}}async remove(e,n){const r=this.services().find(o=>o.origin===e);if(!r)throw new Error("当前服务未连接");await r.request(`/collaboration-groups/${encodeURIComponent(n)}`,"DELETE")}}const zs="termdock.federation.connections.v1",Pa="termdock:services-changed",Dc="termdock-secure-removed-services",us=t=>[t.id,t.targetPeerId,t.serviceOrigin||t.url].filter(e=>!!e);function Fc(){try{const t=JSON.parse(localStorage.getItem(Dc)||"[]");return Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}catch{return[]}}function Oe(t){const e=t.trim();if(!e)throw new Error("请输入服务地址。");const n=new URL(/^[a-z][a-z\d+.-]*:\/\//i.test(e)?e:`https://${e}`);n.protocol==="wss:"&&(n.protocol="https:"),n.protocol==="ws:"&&(n.protocol="http:");const r=["localhost","127.0.0.1","[::1]"].includes(n.hostname);if(!["https:","http:"].includes(n.protocol)||n.protocol==="http:"&&!r)throw new Error("请使用 HTTPS 服务地址。");if(n.username||n.password||n.search||n.hash||!["/","/api/federation/secure"].includes(n.pathname))throw new Error("请输入服务首页地址,不要包含账号或额外参数。");return n.origin}function Ws(t){if(!t||typeof t!="object")return;const e=t;if(typeof e.url=="string")try{const n=Oe(e.url),r=typeof e.targetPeerId=="string"&&e.targetPeerId?e.targetPeerId:void 0,o=(typeof e.label=="string"?e.label:typeof e.serviceName=="string"?e.serviceName:"").trim().slice(0,120)||new URL(n).host;return{id:typeof e.id=="string"&&e.id?e.id:r||n,url:n,label:o,...r?{targetPeerId:r}:{},...typeof e.serviceOrigin=="string"?{serviceOrigin:Oe(e.serviceOrigin)}:{},...typeof e.entryServiceId=="string"&&e.entryServiceId?{entryServiceId:e.entryServiceId}:{},...Array.isArray(e.routes)?{routes:e.routes.slice(0,4).flatMap(s=>{try{return s&&typeof s.targetPeerId=="string"&&s.targetPeerId?[{url:Oe(s.url),targetPeerId:s.targetPeerId}]:[]}catch{return[]}})}:{}}}catch{return}}function Et(t,e){return t.targetPeerId&&e.targetPeerId?t.targetPeerId===e.targetPeerId:(t.serviceOrigin||t.url)===(e.serviceOrigin||e.url)}function Cf(t){const e=[];for(const n of t){const r=e.findIndex(o=>Et(o,n));r<0?e.push(n):e[r]={...e[r],...n,id:e[r].id}}return e}function po(){return typeof window>"u"?void 0:window.termdockDesktop}function Gt(){try{const t=JSON.parse(localStorage.getItem(zs)||"[]");return Array.isArray(t)?Cf(t.map(Ws).filter(e=>!!e)):[]}catch{return[]}}function If(t){localStorage.setItem(zs,JSON.stringify(t.map(e=>({...e,serviceName:e.label})))),window.dispatchEvent(new Event(Pa))}let kr;async function Je(){const t=po();if(!t?.serviceConnections||!t.saveServiceConnection)return Gt();if(kr)return kr;kr=(async()=>{let e=await t.serviceConnections();const n=Gt();for(const r of n)e.some(o=>Et(o,r))||(e=await(t.importServiceConnection||t.saveServiceConnection)(r));return n.length&&localStorage.removeItem(zs),e})();try{return await kr}finally{kr=void 0}}async function Rt(t){const e=Ws(t);if(!e)throw new Error("服务地址无效。");const n=po();if(n?.saveServiceConnection)return n.saveServiceConnection(e);const r=Gt(),o=r.find(a=>a.id===e.id||Et(a,e)),s=new Set([...us(e),...o?us(o):[]]);localStorage.setItem(Dc,JSON.stringify(Fc().filter(a=>!s.has(a))));const i=Cf([...r.filter(a=>a!==o),{...o,...e,id:o?.id||e.id}]);return If(i),i}async function Dm(t){const e=Ws(t);if(!e)throw new Error("服务地址无效。");const n=po();if(n?.importServiceConnection)return n.importServiceConnection(e);if(n?.serviceConnections){const r=await n.serviceConnections();return r.some(o=>Et(o,e))?Rt(e):r}return us(e).some(r=>Fc().includes(r))?Gt():Rt(e)}async function Fm(t){const e=po();if(e?.removeServiceConnection)return e.removeServiceConnection(t);const n=Gt(),r=n.find(s=>s.id===t);r&&localStorage.setItem(Dc,JSON.stringify([...new Set([...Fc(),...us(r)])].slice(-768)));const o=n.filter(s=>s.id!==t);return If(o),o}function Rf(t){const e=r=>{(r.key===zs||r.key===null)&&t()};window.addEventListener(Pa,t),window.addEventListener("storage",e);const n=po()?.onServiceConnections?.(t);return()=>{window.removeEventListener(Pa,t),window.removeEventListener("storage",e),n?.()}}class Mm extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}}let jm=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},it=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}};class Tf extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}}class Pf extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}}class Um extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}}class $m extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}}class Gs extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}}const Nf=Symbol.for("@libp2p/peer-id");function Hm(t){return typeof t?.handleEvent=="function"}function qm(t){return t===!0||t===!1}function Km(t){return qm(t)?t:t?.capture??!1}function Na(t){const e={capture:Km(t),once:!!t?.once};return t?.passive!=null&&(e.passive=t?.passive),t?.signal!=null&&(e.signal=t?.signal),e}function Vl(t,e){return Na(t).capture===Na(e).capture}class zm extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){const n=this.#e.get(e);return n==null?0:n.length}addEventListener(e,n,r){const o=Na(r);if(o?.signal?.aborted===!0)return;const s=l=>{o.once&&this.removeEventListener(e,n,o),Hm(n)?n.handleEvent(l):n(l)};let i=this.#e.get(e);if(i==null&&(i=[],this.#e.set(e,i)),i.some(l=>l.callback!==n?!1:Vl(l.options,o)))return;super.addEventListener(e,s,o);const c=()=>{this.removeEventListener(e,n,o)};o.signal?.addEventListener("abort",c),i.push({callback:n,wrapper:s,options:o,onAbort:c})}removeEventListener(e,n,r){const o=this.#e.get(e);if(o==null){super.removeEventListener(e,n??null,r);return}this.#e.set(e,o.filter(s=>s.callback===n&&Vl(s.options,r)?(super.removeEventListener(e,s.wrapper,r),s.options?.signal?.removeEventListener("abort",s.onAbort),!1):!0))}safeDispatchEvent(e,n={}){return this.dispatchEvent(new CustomEvent(e,n))}}const Wm=Symbol.for("@libp2p/service-capabilities");function Gm(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}function Vs(t){if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")}function Vm(t){return new TextEncoder().encode(t)}function Xm(t){return new TextDecoder().decode(t)}function Ym(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var n=new Uint8Array(256),r=0;r<n.length;r++)n[r]=255;for(var o=0;o<t.length;o++){var s=t.charAt(o),i=s.charCodeAt(0);if(n[i]!==255)throw new TypeError(s+" is ambiguous");n[i]=o}var a=t.length,c=t.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var m=0,b=0,w=0,I=g.length;w!==I&&g[w]===0;)w++,m++;for(var y=(I-w)*d+1>>>0,k=new Uint8Array(y);w!==I;){for(var L=g[w],C=0,T=y-1;(L!==0||C<b)&&T!==-1;T--,C++)L+=256*k[T]>>>0,k[T]=L%a>>>0,L=L/a>>>0;if(L!==0)throw new Error("Non-zero carry");b=C,w++}for(var x=y-b;x!==y&&k[x]===0;)x++;for(var v=c.repeat(m);x<y;++x)v+=t.charAt(k[x]);return v}function f(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var m=0;if(g[m]!==" "){for(var b=0,w=0;g[m]===c;)b++,m++;for(var I=(g.length-m)*l+1>>>0,y=new Uint8Array(I);g[m];){var k=n[g.charCodeAt(m)];if(k===255)return;for(var L=0,C=I-1;(k!==0||L<w)&&C!==-1;C--,L++)k+=a*y[C]>>>0,y[C]=k%256>>>0,k=k/256>>>0;if(k!==0)throw new Error("Non-zero carry");w=L,m++}if(g[m]!==" "){for(var T=I-w;T!==I&&y[T]===0;)T++;for(var x=new Uint8Array(b+(I-T)),v=b;T!==I;)x[v++]=y[T++];return x}}}function h(g){var m=f(g);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Zm=Ym,Jm=Zm;class Qm{name;prefix;baseEncode;constructor(e,n,r){this.name=e,this.prefix=n,this.baseEncode=r}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}}class ew{name;prefix;baseDecode;prefixCodePoint;constructor(e,n,r){this.name=e,this.prefix=n;const o=n.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=r}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return Lf(this,e)}}class tw{decoders;constructor(e){this.decoders=e}or(e){return Lf(this,e)}decode(e){const n=e[0],r=this.decoders[n];if(r!=null)return r.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function Lf(t,e){return new tw({...t.decoders??{[t.prefix]:t},...e.decoders??{[e.prefix]:e}})}class nw{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,n,r,o){this.name=e,this.prefix=n,this.baseEncode=r,this.baseDecode=o,this.encoder=new Qm(e,n,r),this.decoder=new ew(e,n,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}}function Xs({name:t,prefix:e,encode:n,decode:r}){return new nw(t,e,n,r)}function go({name:t,prefix:e,alphabet:n}){const{encode:r,decode:o}=Jm(n,t);return Xs({prefix:e,name:t,encode:r,decode:s=>Vs(o(s))})}function rw(t,e,n,r){let o=t.length;for(;t[o-1]==="=";)--o;const s=new Uint8Array(o*n/8|0);let i=0,a=0,c=0;for(let l=0;l<o;++l){const d=e[t[l]];if(d===void 0)throw new SyntaxError(`Non-${r} character`);a=a<<n|d,i+=n,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=n||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function ow(t,e,n){const r=e[e.length-1]==="=",o=(1<<n)-1;let s="",i=0,a=0;for(let c=0;c<t.length;++c)for(a=a<<8|t[c],i+=8;i>n;)i-=n,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<n-i]),r)for(;(s.length*n&7)!==0;)s+="=";return s}function sw(t){const e={};for(let n=0;n<t.length;++n)e[t[n]]=n;return e}function Ce({name:t,prefix:e,bitsPerChar:n,alphabet:r}){const o=sw(r);return Xs({prefix:e,name:t,encode(s){return ow(s,r,n)},decode(s){return rw(s,o,n,t)}})}const Be=go({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),iw=go({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"}),aw=Object.freeze(Object.defineProperty({__proto__:null,base58btc:Be,base58flickr:iw},Symbol.toStringTag,{value:"Module"})),Xr=Ce({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),cw=Ce({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),lw=Ce({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),dw=Ce({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),uw=Ce({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),fw=Ce({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),hw=Ce({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),pw=Ce({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),gw=Ce({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),mw=Object.freeze(Object.defineProperty({__proto__:null,base32:Xr,base32hex:uw,base32hexpad:hw,base32hexpadupper:pw,base32hexupper:fw,base32pad:lw,base32padupper:dw,base32upper:cw,base32z:gw},Symbol.toStringTag,{value:"Module"})),Zo=go({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),ww=go({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),yw=Object.freeze(Object.defineProperty({__proto__:null,base36:Zo,base36upper:ww},Symbol.toStringTag,{value:"Module"}));var bw=Bf,Xl=128,vw=-128,Sw=Math.pow(2,31);function Bf(t,e,n){e=e||[],n=n||0;for(var r=n;t>=Sw;)e[n++]=t&255|Xl,t/=128;for(;t&vw;)e[n++]=t&255|Xl,t>>>=7;return e[n]=t|0,Bf.bytes=n-r+1,e}var xw=La,Ew=128,Yl=127;function La(t,r){var n=0,r=r||0,o=0,s=r,i,a=t.length;do{if(s>=a)throw La.bytes=0,new RangeError("Could not decode varint");i=t[s++],n+=o<28?(i&Yl)<<o:(i&Yl)*Math.pow(2,o),o+=7}while(i>=Ew);return La.bytes=s-r,n}var Aw=Math.pow(2,7),kw=Math.pow(2,14),Cw=Math.pow(2,21),Iw=Math.pow(2,28),Rw=Math.pow(2,35),Tw=Math.pow(2,42),Pw=Math.pow(2,49),Nw=Math.pow(2,56),Lw=Math.pow(2,63),Bw=function(t){return t<Aw?1:t<kw?2:t<Cw?3:t<Iw?4:t<Rw?5:t<Tw?6:t<Pw?7:t<Nw?8:t<Lw?9:10},_w={encode:bw,decode:xw,encodingLength:Bw},fs=_w;function Ba(t,e=0){return[fs.decode(t,e),fs.decode.bytes]}function hs(t,e,n=0){return fs.encode(t,e,n),e}function ps(t){return fs.encodingLength(t)}function mo(t,e){const n=e.byteLength,r=ps(t),o=r+ps(n),s=new Uint8Array(o+n);return hs(t,s,0),hs(n,s,r),s.set(e,o),new Mc(t,n,e,s)}function _f(t){const e=Vs(t),[n,r]=Ba(e),[o,s]=Ba(e.subarray(r)),i=e.subarray(r+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Mc(n,o,i,e)}function Ow(t,e){if(t===e)return!0;{const n=e;return t.code===n.code&&t.size===n.size&&n.bytes instanceof Uint8Array&&Gm(t.bytes,n.bytes)}}class Mc{code;size;digest;bytes;constructor(e,n,r,o){this.code=e,this.size=n,this.digest=r,this.bytes=o}}function Zl(t,e){const{bytes:n,version:r}=t;return r===0?Fw(n,_a(t),e??Be.encoder):Mw(n,_a(t),e??Xr.encoder)}const Jl=new WeakMap;function _a(t){const e=Jl.get(t);if(e==null){const n=new Map;return Jl.set(t,n),n}return e}class le{code;version;multihash;bytes;"/";constructor(e,n,r,o){this.code=n,this.version=e,this.multihash=r,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{const{code:e,multihash:n}=this;if(e!==Cr)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(n.code!==jw)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return le.createV0(n)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{const{code:e,digest:n}=this.multihash,r=mo(e,n);return le.createV1(this.code,r)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return le.equals(this,e)}static equals(e,n){const r=n;return r!=null&&e.code===r.code&&e.version===r.version&&Ow(e.multihash,r.multihash)}toString(e){return Zl(this,e)}toJSON(){return{"/":Zl(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;const n=e;if(n instanceof le)return n;if(n["/"]!=null&&n["/"]===n.bytes||n.asCID===n){const{version:r,code:o,multihash:s,bytes:i}=n;return new le(r,o,s,i??Ql(r,o,s.bytes))}else if(n[Uw]===!0){const{version:r,multihash:o,code:s}=n,i=_f(o);return le.create(r,s,i)}else return null}static create(e,n,r){if(typeof n!="number")throw new Error("String codecs are no longer supported");if(!(r.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(n!==Cr)throw new Error(`Version 0 CID must use dag-pb (code: ${Cr}) block encoding`);return new le(e,n,r,r.bytes)}case 1:{const o=Ql(e,n,r.bytes);return new le(e,n,r,o)}default:throw new Error("Invalid version")}}static createV0(e){return le.create(0,Cr,e)}static createV1(e,n){return le.create(1,e,n)}static decode(e){const[n,r]=le.decodeFirst(e);if(r.length!==0)throw new Error("Incorrect length");return n}static decodeFirst(e){const n=le.inspectBytes(e),r=n.size-n.multihashSize,o=Vs(e.subarray(r,r+n.multihashSize));if(o.byteLength!==n.multihashSize)throw new Error("Incorrect length");const s=o.subarray(n.multihashSize-n.digestSize),i=new Mc(n.multihashCode,n.digestSize,s,o);return[n.version===0?le.createV0(i):le.createV1(n.codec,i),e.subarray(n.size)]}static inspectBytes(e){let n=0;const r=()=>{const[u,f]=Ba(e.subarray(n));return n+=f,u};let o=r(),s=Cr;if(o===18?(o=0,n=0):s=r(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);const i=n,a=r(),c=r(),l=n+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,n){const[r,o]=Dw(e,n),s=le.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return _a(s).set(r,e),s}}function Dw(t,e){switch(t[0]){case"Q":{const n=e??Be;return[Be.prefix,n.decode(`${Be.prefix}${t}`)]}case Be.prefix:{const n=e??Be;return[Be.prefix,n.decode(t)]}case Xr.prefix:{const n=e??Xr;return[Xr.prefix,n.decode(t)]}case Zo.prefix:{const n=e??Zo;return[Zo.prefix,n.decode(t)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[t[0],e.decode(t)]}}}function Fw(t,e,n){const{prefix:r}=n;if(r!==Be.prefix)throw Error(`Cannot string encode V0 in ${n.name} encoding`);const o=e.get(r);if(o==null){const s=n.encode(t).slice(1);return e.set(r,s),s}else return o}function Mw(t,e,n){const{prefix:r}=n,o=e.get(r);if(o==null){const s=n.encode(t);return e.set(r,s),s}else return o}const Cr=112,jw=18;function Ql(t,e,n){const r=ps(t),o=r+ps(e),s=new Uint8Array(o+n.byteLength);return hs(t,s,0),hs(e,s,r),s.set(n,o),s}const Uw=Symbol.for("@ipld/js-cid/CID"),Of=0,$w="identity",Df=Vs;function Hw(t,e){if(e?.truncate!=null&&e.truncate!==t.byteLength){if(e.truncate<0||e.truncate>t.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${t.byteLength}`);t=t.subarray(0,e.truncate)}return mo(Of,Df(t))}const wo={code:Of,name:$w,encode:Df,digest:Hw};function at(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}function je(t=0){return new Uint8Array(t)}function Tt(t=0){return new Uint8Array(t)}function Oa(t,e){e==null&&(e=t.reduce((o,s)=>o+s.length,0));const n=Tt(e);let r=0;for(const o of t)n.set(o,r),r+=o.length;return n}const Ff=Symbol.for("@achingbrain/uint8arraylist");function ed(t,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let n=0;for(const r of t){const o=n+r.byteLength;if(e<o)return{buf:r,index:e-n};n=o}throw new RangeError("index is out of bounds")}function Io(t){return!!t?.[Ff]}class se{bufs;length;[Ff]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let n=0;for(const r of e)if(r instanceof Uint8Array)n+=r.byteLength,this.bufs.push(r);else if(Io(r)){n+=r.byteLength;for(const o of r.bufs)this.bufs.push(o)}else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=n}prepend(...e){this.prependAll(e)}prependAll(e){let n=0;for(const r of e.reverse())if(r instanceof Uint8Array)n+=r.byteLength,this.bufs.unshift(r);else if(Io(r))n+=r.byteLength,this.bufs.unshift(...r.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=n}get(e){const n=ed(this.bufs,e);return n.buf[n.index]}set(e,n){const r=ed(this.bufs,e);r.buf[r.index]=n}write(e,n=0){if(e instanceof Uint8Array)for(let r=0;r<e.length;r++)this.set(n+r,e[r]);else if(Io(e))for(let r=0;r<e.length;r++)this.set(n+r,e.get(r));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,n){const{bufs:r,length:o}=this._subList(e,n);return Oa(r,o)}subarray(e,n){const{bufs:r,length:o}=this._subList(e,n);return r.length===1?r[0]:Oa(r,o)}sublist(e,n){const{bufs:r,length:o}=this._subList(e,n),s=new se;return s.length=o,s.bufs=r,s}_subList(e,n){if(e=e??0,n=n??this.length,e<0&&(e=this.length+e),n<0&&(n=this.length+n),e<0||n>this.length)throw new RangeError("index is out of bounds");if(e===n)return{bufs:[],length:0};if(e===0&&n===this.length)return{bufs:[...this.bufs],length:this.length};const r=[];let o=0;for(let s=0;s<this.bufs.length;s++){const i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;const l=e>=a&&e<c,d=n>a&&n<=c;if(l&&d){if(e===a&&n===c){r.push(i);break}const u=e-a;r.push(i.subarray(u,u+(n-e)));break}if(l){if(e===0){r.push(i);continue}r.push(i.subarray(e-a));continue}if(d){if(n===c){r.push(i);break}r.push(i.subarray(0,n-a));break}r.push(i)}return{bufs:r,length:n-e}}indexOf(e,n=0){if(!Io(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');const r=e instanceof Uint8Array?e:e.subarray();if(n=Number(n??0),isNaN(n)&&(n=0),n<0&&(n=this.length+n),n<0&&(n=0),e.length===0)return n>this.length?this.length:n;const o=r.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");const s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[r[u]]=u;const a=i,c=this.byteLength-r.byteLength,l=r.byteLength-1;let d;for(let u=n;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){const h=this.get(u+f);if(r[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){const n=this.subarray(e,e+1);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt8(0)}setInt8(e,n){const r=Tt(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt8(0,n),this.write(r,e)}getInt16(e,n){const r=this.subarray(e,e+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt16(0,n)}setInt16(e,n,r){const o=je(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,n,r),this.write(o,e)}getInt32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt32(0,n)}setInt32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,n,r),this.write(o,e)}getBigInt64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigInt64(0,n)}setBigInt64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,n,r),this.write(o,e)}getUint8(e){const n=this.subarray(e,e+1);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint8(0)}setUint8(e,n){const r=Tt(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint8(0,n),this.write(r,e)}getUint16(e,n){const r=this.subarray(e,e+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint16(0,n)}setUint16(e,n,r){const o=je(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,n,r),this.write(o,e)}getUint32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,n)}setUint32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,n,r),this.write(o,e)}getBigUint64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigUint64(0,n)}setBigUint64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,n,r),this.write(o,e)}getFloat32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat32(0,n)}setFloat32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,n,r),this.write(o,e)}getFloat64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat64(0,n)}setFloat64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,n,r),this.write(o,e)}equals(e){if(e==null||!(e instanceof se)||e.bufs.length!==this.bufs.length)return!1;for(let n=0;n<this.bufs.length;n++)if(!at(this.bufs[n],e.bufs[n]))return!1;return!0}static fromUint8Arrays(e,n){const r=new se;return r.bufs=e,n==null&&(n=e.reduce((o,s)=>o+s.byteLength,0)),r.length=n,r}}const qw=go({prefix:"9",name:"base10",alphabet:"0123456789"}),Kw=Object.freeze(Object.defineProperty({__proto__:null,base10:qw},Symbol.toStringTag,{value:"Module"})),zw=Ce({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ww=Ce({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),Gw=Object.freeze(Object.defineProperty({__proto__:null,base16:zw,base16upper:Ww},Symbol.toStringTag,{value:"Module"})),Vw=Ce({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),Xw=Object.freeze(Object.defineProperty({__proto__:null,base2:Vw},Symbol.toStringTag,{value:"Module"})),Mf=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),Yw=Mf.reduce((t,e,n)=>(t[n]=e,t),[]),Zw=Mf.reduce((t,e,n)=>{const r=e.codePointAt(0);if(r==null)throw new Error(`Invalid character: ${e}`);return t[r]=n,t},[]);function Jw(t){return t.reduce((e,n)=>(e+=Yw[n],e),"")}function Qw(t){const e=[];for(const n of t){const r=n.codePointAt(0);if(r==null)throw new Error(`Invalid character: ${n}`);const o=Zw[r];if(o==null)throw new Error(`Non-base256emoji character: ${n}`);e.push(o)}return new Uint8Array(e)}const ey=Xs({prefix:"🚀",name:"base256emoji",encode:Jw,decode:Qw}),ty=Object.freeze(Object.defineProperty({__proto__:null,base256emoji:ey},Symbol.toStringTag,{value:"Module"})),ny=Ce({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ry=Ce({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),oy=Ce({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),sy=Ce({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),iy=Object.freeze(Object.defineProperty({__proto__:null,base64:ny,base64pad:ry,base64url:oy,base64urlpad:sy},Symbol.toStringTag,{value:"Module"})),ay=Ce({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),cy=Object.freeze(Object.defineProperty({__proto__:null,base8:ay},Symbol.toStringTag,{value:"Module"})),ly=Xs({prefix:"\0",name:"identity",encode:t=>Xm(t),decode:t=>Vm(t)}),dy=Object.freeze(Object.defineProperty({__proto__:null,identity:ly},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const uy=20;function fy({name:t,code:e,encode:n,minDigestLength:r,maxDigestLength:o}){return new hy(t,e,n,r,o)}class hy{name;code;encode;minDigestLength;maxDigestLength;constructor(e,n,r,o,s){this.name=e,this.code=n,this.encode=r,this.minDigestLength=o??uy,this.maxDigestLength=s}digest(e,n){if(n?.truncate!=null){if(n.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&n.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){const r=this.encode(e);return r instanceof Uint8Array?td(r,this.code,n?.truncate):r.then(o=>td(o,this.code,n?.truncate))}else throw Error("Unknown type, must be binary type")}}function td(t,e,n){if(n!=null&&n!==t.byteLength){if(n>t.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${t.byteLength}`);t=t.subarray(0,n)}return mo(e,t)}function py(t){return async e=>new Uint8Array(await crypto.subtle.digest(t,e))}const jc=fy({name:"sha2-256",code:18,encode:py("SHA-256")}),nd={...dy,...Xw,...cy,...Kw,...Gw,...mw,...yw,...aw,...iy,...ty};function jf(t,e,n,r){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:n},decoder:{decode:r}}}const rd=jf("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),Ai=jf("ascii","a",t=>{let e="a";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return e},t=>{t=t.substring(1);const e=Tt(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}),Uf={utf8:rd,"utf-8":rd,hex:nd.base16,latin1:Ai,ascii:Ai,binary:Ai,...nd};function ye(t,e="utf8"){const n=Uf[e];if(n==null)throw new Error(`Unsupported encoding "${e}"`);return n.decoder.decode(`${n.prefix}${t}`)}function ee(t,e="utf8"){const n=Uf[e];if(n==null)throw new Error(`Unsupported encoding "${e}"`);return n.encoder.encode(t).substring(1)}const gy=parseInt("11111",2),Da=parseInt("10000000",2),my=parseInt("01111111",2),od={0:Ir,1:Ir,2:wy,3:vy,4:Sy,5:by,6:yy,16:Ir,22:Ir,48:Ir};function wr(t,e={offset:0}){const n=t[e.offset]&gy;if(e.offset++,od[n]!=null)return od[n](t,e);throw new Error("No decoder for tag "+n)}function yo(t,e){let n=0;if((t[e.offset]&Da)===Da){const r=t[e.offset]&my;let o="0x";e.offset++;for(let s=0;s<r;s++,e.offset++)o+=t[e.offset].toString(16).padStart(2,"0");n=parseInt(o,16)}else n=t[e.offset],e.offset++;return n}function Ir(t,e){yo(t,e);const n=[];for(;!(e.offset>=t.byteLength);){const r=wr(t,e);if(r===null)break;n.push(r)}return n}function wy(t,e){const n=yo(t,e),r=e.offset,o=e.offset+n,s=[];for(let i=r;i<o;i++)i===r&&t[i]===0||s.push(t[i]);return e.offset+=n,Uint8Array.from(s)}function yy(t,e){const n=yo(t,e),r=e.offset+n,o=t[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<r;){const l=t[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function by(t,e){return e.offset++,null}function vy(t,e){const n=yo(t,e),r=t[e.offset];e.offset++;const o=t.subarray(e.offset,e.offset+n-1);if(e.offset+=n,r!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function Sy(t,e){const n=yo(t,e),r=t.subarray(e.offset,e.offset+n);return e.offset+=n,r}function xy(t){let e=t.toString(16);e.length%2===1&&(e="0"+e);const n=new se;for(let r=0;r<e.length;r+=2)n.append(Uint8Array.from([parseInt(`${e[r]}${e[r+1]}`,16)]));return n}function Ys(t){if(t.byteLength<128)return Uint8Array.from([t.byteLength]);const e=xy(t.byteLength);return new se(Uint8Array.from([e.byteLength|Da]),e)}function qe(t){const e=new se,n=128;return(t.subarray()[0]&n)===n&&e.append(Uint8Array.from([0])),e.append(t),new se(Uint8Array.from([2]),Ys(e),e)}function Uc(t){const e=Uint8Array.from([0]),n=new se(e,t);return new se(Uint8Array.from([3]),Ys(n),n)}function Ey(t){return new se(Uint8Array.from([4]),Ys(t),t)}function It(t,e=48){const n=new se;for(const r of t)n.append(r);return new se(Uint8Array.from([e]),Ys(n),n)}async function Ay(t,e,n){const r=await crypto.subtle.importKey("jwk",t,{name:"ECDSA",namedCurve:t.crv??"P-256"},!1,["sign"]);n?.signal?.throwIfAborted();const o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},r,e.subarray());return n?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function ky(t,e,n,r){const o=await crypto.subtle.importKey("jwk",t,{name:"ECDSA",namedCurve:t.crv??"P-256"},!1,["verify"]);r?.signal?.throwIfAborted();const s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,n.subarray());return r?.signal?.throwIfAborted(),s}const Cy=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),Iy=Uint8Array.from([6,5,43,129,4,0,34]),Ry=Uint8Array.from([6,5,43,129,4,0,35]),$f={ext:!0,kty:"EC",crv:"P-256"},Hf={ext:!0,kty:"EC",crv:"P-384"},qf={ext:!0,kty:"EC",crv:"P-521"},Gn=32,Vn=48,Xn=66;function Ty(t){const e=wr(t);return Py(e)}function Py(t){const e=t[1],n=ee(e,"base64url"),r=t[2][1][0],o=1;let s,i;if(e.byteLength===Gn)return s=ee(r.subarray(o,o+Gn),"base64url"),i=ee(r.subarray(o+Gn),"base64url"),new ki({...$f,key_ops:["sign"],d:n,x:s,y:i});if(e.byteLength===Vn)return s=ee(r.subarray(o,o+Vn),"base64url"),i=ee(r.subarray(o+Vn),"base64url"),new ki({...Hf,key_ops:["sign"],d:n,x:s,y:i});if(e.byteLength===Xn)return s=ee(r.subarray(o,o+Xn),"base64url"),i=ee(r.subarray(o+Xn),"base64url"),new ki({...qf,key_ops:["sign"],d:n,x:s,y:i});throw new it(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function Kf(t){const e=wr(t);return Ny(e)}function Ny(t){const e=t[1][1][0],n=1;let r,o;if(e.byteLength===Gn*2+1)return r=ee(e.subarray(n,n+Gn),"base64url"),o=ee(e.subarray(n+Gn),"base64url"),new Jo({...$f,key_ops:["verify"],x:r,y:o});if(e.byteLength===Vn*2+1)return r=ee(e.subarray(n,n+Vn),"base64url"),o=ee(e.subarray(n+Vn),"base64url"),new Jo({...Hf,key_ops:["verify"],x:r,y:o});if(e.byteLength===Xn*2+1)return r=ee(e.subarray(n,n+Xn),"base64url"),o=ee(e.subarray(n+Xn),"base64url"),new Jo({...qf,key_ops:["verify"],x:r,y:o});throw new it(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Ly(t){return It([qe(Uint8Array.from([1])),Ey(ye(t.d??"","base64url")),It([zf(t.crv)],160),It([Uc(new se(Uint8Array.from([4]),ye(t.x??"","base64url"),ye(t.y??"","base64url")))],161)]).subarray()}function By(t){return It([qe(Uint8Array.from([1])),It([zf(t.crv)],160),It([Uc(new se(Uint8Array.from([4]),ye(t.x??"","base64url"),ye(t.y??"","base64url")))],161)]).subarray()}function zf(t){if(t==="P-256")return Cy;if(t==="P-384")return Iy;if(t==="P-521")return Ry;throw new it(`Invalid curve ${t}`)}class Jo{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=By(this.jwk)),this._raw}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}async verify(e,n,r){return ky(this.jwk,n,e,r)}}class ki{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new Jo({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=Ly(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}async sign(e,n){return Ay(this.jwk,e,n)}}const Nn=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function bo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Fa(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function Sn(t,...e){if(!bo(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function Wf(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");Fa(t.outputLen),Fa(t.blockLen)}function gs(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function _y(t,e){Sn(t);const n=e.outputLen;if(t.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function cr(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Ci(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function ct(t,e){return t<<32-e|t>>>e}const Gf=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Oy=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function un(t){if(Sn(t),Gf)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=Oy[t[n]];return e}const wt={_0:48,_9:57,A:65,F:70,a:97,f:102};function sd(t){if(t>=wt._0&&t<=wt._9)return t-wt._0;if(t>=wt.A&&t<=wt.F)return t-(wt.A-10);if(t>=wt.a&&t<=wt.f)return t-(wt.a-10)}function ms(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(Gf)return Uint8Array.fromHex(t);const e=t.length,n=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=sd(t.charCodeAt(s)),a=sd(t.charCodeAt(s+1));if(i===void 0||a===void 0){const c=t[s]+t[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function Dy(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function $c(t){return typeof t=="string"&&(t=Dy(t)),Sn(t),t}function ut(...t){let e=0;for(let r=0;r<t.length;r++){const o=t[r];Sn(o),e+=o.length}const n=new Uint8Array(e);for(let r=0,o=0;r<t.length;r++){const s=t[r];n.set(s,o),o+=s.length}return n}class Vf{}function Xf(t){const e=r=>t().update($c(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Hc(t=32){if(Nn&&typeof Nn.getRandomValues=="function")return Nn.getRandomValues(new Uint8Array(t));if(Nn&&typeof Nn.randomBytes=="function")return Uint8Array.from(Nn.randomBytes(t));throw new Error("crypto.getRandomValues must be defined")}function Fy(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),s=BigInt(4294967295),i=Number(n>>o&s),a=Number(n&s),c=r?4:0,l=r?0:4;t.setUint32(e+c,i,r),t.setUint32(e+l,a,r)}function My(t,e,n){return t&e^~t&n}function jy(t,e,n){return t&e^t&n^e&n}let Yf=class extends Vf{constructor(e,n,r,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Ci(this.buffer)}update(e){gs(this),e=$c(e),Sn(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;for(let i=0;i<s;){const a=Math.min(o-this.pos,s-i);if(a===o){const c=Ci(e);for(;o<=s-i;i+=o)this.process(c,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gs(this),_y(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,cr(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;Fy(r,o-8,BigInt(this.length*8),s),this.process(r,0);const a=Ci(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}};const Bt=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Re=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]),Ro=BigInt(2**32-1),id=BigInt(32);function Uy(t,e=!1){return e?{h:Number(t&Ro),l:Number(t>>id&Ro)}:{h:Number(t>>id&Ro)|0,l:Number(t&Ro)|0}}function $y(t,e=!1){const n=t.length;let r=new Uint32Array(n),o=new Uint32Array(n);for(let s=0;s<n;s++){const{h:i,l:a}=Uy(t[s],e);[r[s],o[s]]=[i,a]}return[r,o]}const ad=(t,e,n)=>t>>>n,cd=(t,e,n)=>t<<32-n|e>>>n,Ln=(t,e,n)=>t>>>n|e<<32-n,Bn=(t,e,n)=>t<<32-n|e>>>n,To=(t,e,n)=>t<<64-n|e>>>n-32,Po=(t,e,n)=>t>>>n-32|e<<64-n;function yt(t,e,n,r){const o=(e>>>0)+(r>>>0);return{h:t+n+(o/2**32|0)|0,l:o|0}}const Hy=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),qy=(t,e,n,r)=>e+n+r+(t/2**32|0)|0,Ky=(t,e,n,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0),zy=(t,e,n,r,o)=>e+n+r+o+(t/2**32|0)|0,Wy=(t,e,n,r,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0)+(o>>>0),Gy=(t,e,n,r,o,s)=>e+n+r+o+s+(t/2**32|0)|0,Vy=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_t=new Uint32Array(64);class Xy extends Yf{constructor(e=32){super(64,e,8,!1),this.A=Bt[0]|0,this.B=Bt[1]|0,this.C=Bt[2]|0,this.D=Bt[3]|0,this.E=Bt[4]|0,this.F=Bt[5]|0,this.G=Bt[6]|0,this.H=Bt[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[e,n,r,o,s,i,a,c]}set(e,n,r,o,s,i,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,n){for(let u=0;u<16;u++,n+=4)_t[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const f=_t[u-15],h=_t[u-2],g=ct(f,7)^ct(f,18)^f>>>3,m=ct(h,17)^ct(h,19)^h>>>10;_t[u]=m+_t[u-7]+g+_t[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){const f=ct(a,6)^ct(a,11)^ct(a,25),h=d+f+My(a,c,l)+Vy[u]+_t[u]|0,m=(ct(r,2)^ct(r,13)^ct(r,22))+jy(r,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=r,r=h+m|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,c,l,d)}roundClean(){cr(_t)}destroy(){this.set(0,0,0,0,0,0,0,0),cr(this.buffer)}}const Zf=$y(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),Yy=Zf[0],Zy=Zf[1],Ot=new Uint32Array(80),Dt=new Uint32Array(80);class Jy extends Yf{constructor(e=64){super(128,e,16,!1),this.Ah=Re[0]|0,this.Al=Re[1]|0,this.Bh=Re[2]|0,this.Bl=Re[3]|0,this.Ch=Re[4]|0,this.Cl=Re[5]|0,this.Dh=Re[6]|0,this.Dl=Re[7]|0,this.Eh=Re[8]|0,this.El=Re[9]|0,this.Fh=Re[10]|0,this.Fl=Re[11]|0,this.Gh=Re[12]|0,this.Gl=Re[13]|0,this.Hh=Re[14]|0,this.Hl=Re[15]|0}get(){const{Ah:e,Al:n,Bh:r,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:g,Hh:m,Hl:b}=this;return[e,n,r,o,s,i,a,c,l,d,u,f,h,g,m,b]}set(e,n,r,o,s,i,a,c,l,d,u,f,h,g,m,b){this.Ah=e|0,this.Al=n|0,this.Bh=r|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=g|0,this.Hh=m|0,this.Hl=b|0}process(e,n){for(let y=0;y<16;y++,n+=4)Ot[y]=e.getUint32(n),Dt[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){const k=Ot[y-15]|0,L=Dt[y-15]|0,C=Ln(k,L,1)^Ln(k,L,8)^ad(k,L,7),T=Bn(k,L,1)^Bn(k,L,8)^cd(k,L,7),x=Ot[y-2]|0,v=Dt[y-2]|0,A=Ln(x,v,19)^To(x,v,61)^ad(x,v,6),N=Bn(x,v,19)^Po(x,v,61)^cd(x,v,6),D=Ky(T,N,Dt[y-7],Dt[y-16]),E=zy(D,C,A,Ot[y-7],Ot[y-16]);Ot[y]=E|0,Dt[y]=D|0}let{Ah:r,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:g,Gh:m,Gl:b,Hh:w,Hl:I}=this;for(let y=0;y<80;y++){const k=Ln(u,f,14)^Ln(u,f,18)^To(u,f,41),L=Bn(u,f,14)^Bn(u,f,18)^Po(u,f,41),C=u&h^~u&m,T=f&g^~f&b,x=Wy(I,L,T,Zy[y],Dt[y]),v=Gy(x,w,k,C,Yy[y],Ot[y]),A=x|0,N=Ln(r,o,28)^To(r,o,34)^To(r,o,39),D=Bn(r,o,28)^Po(r,o,34)^Po(r,o,39),E=r&s^r&a^s&a,S=o&i^o&c^i&c;w=m|0,I=b|0,m=h|0,b=g|0,h=u|0,g=f|0,{h:u,l:f}=yt(l|0,d|0,v|0,A|0),l=a|0,d=c|0,a=s|0,c=i|0,s=r|0,i=o|0;const P=Hy(A,D,S);r=qy(P,v,N,E),o=P|0}({h:r,l:o}=yt(this.Ah|0,this.Al|0,r|0,o|0)),{h:s,l:i}=yt(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=yt(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=yt(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=yt(this.Eh|0,this.El|0,u|0,f|0),{h,l:g}=yt(this.Fh|0,this.Fl|0,h|0,g|0),{h:m,l:b}=yt(this.Gh|0,this.Gl|0,m|0,b|0),{h:w,l:I}=yt(this.Hh|0,this.Hl|0,w|0,I|0),this.set(r,o,s,i,a,c,l,d,u,f,h,g,m,b,w,I)}roundClean(){cr(Ot,Dt)}destroy(){cr(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const Jf=Xf(()=>new Xy),Qy=Xf(()=>new Jy);const qc=BigInt(0),Ma=BigInt(1);function mn(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}"`;throw new Error(n+"expected boolean, got type="+typeof t)}return t}function ot(t,e,n=""){const r=bo(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",c=r?`length=${o}`:`type=${typeof t}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return t}function No(t){const e=t.toString(16);return e.length&1?"0"+e:e}function Qf(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?qc:BigInt("0x"+t)}function Zs(t){return Qf(un(t))}function ro(t){return Sn(t),Qf(un(Uint8Array.from(t).reverse()))}function Kc(t,e){return ms(t.toString(16).padStart(e*2,"0"))}function eh(t,e){return Kc(t,e).reverse()}function he(t,e,n){let r;if(typeof e=="string")try{r=ms(e)}catch(s){throw new Error(t+" must be hex string or Uint8Array, cause: "+s)}else if(bo(e))r=Uint8Array.from(e);else throw new Error(t+" must be hex string or Uint8Array");const o=r.length;if(typeof n=="number"&&o!==n)throw new Error(t+" of length "+n+" expected, got "+o);return r}function ld(t){return Uint8Array.from(t)}const Ii=t=>typeof t=="bigint"&&qc<=t;function eb(t,e,n){return Ii(t)&&Ii(e)&&Ii(n)&&e<=t&&t<n}function ja(t,e,n,r){if(!eb(e,n,r))throw new Error("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function th(t){let e;for(e=0;t>qc;t>>=Ma,e+=1);return e}const vo=t=>(Ma<<BigInt(t))-Ma;function tb(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");const r=h=>new Uint8Array(h),o=h=>Uint8Array.of(h);let s=r(t),i=r(t),a=0;const c=()=>{s.fill(1),i.fill(0),a=0},l=(...h)=>n(i,s,...h),d=(h=r(0))=>{i=l(o(0),h),s=l(),h.length!==0&&(i=l(o(1),h),s=l())},u=()=>{if(a++>=1e3)throw new Error("drbg: tried 1000 values");let h=0;const g=[];for(;h<e;){s=l();const m=s.slice();g.push(m),h+=s.length}return ut(...g)};return(h,g)=>{c(),d(h);let m;for(;!(m=g(u()));)d();return c(),m}}function So(t,e,n={}){if(!t||typeof t!="object")throw new Error("expected valid options object");function r(o,s,i){const a=t[o];if(i&&a===void 0)return;const c=typeof a;if(c!==s||a===null)throw new Error(`param "${o}" is invalid: expected ${s}, got ${c}`)}Object.entries(e).forEach(([o,s])=>r(o,s,!1)),Object.entries(n).forEach(([o,s])=>r(o,s,!0))}function ws(t){const e=new WeakMap;return(n,...r)=>{const o=e.get(n);if(o!==void 0)return o;const s=t(n,...r);return e.set(n,s),s}}const Ue=BigInt(0),ke=BigInt(1),sn=BigInt(2),nh=BigInt(3),rh=BigInt(4),oh=BigInt(5),nb=BigInt(7),sh=BigInt(8),rb=BigInt(9),ih=BigInt(16);function be(t,e){const n=t%e;return n>=Ue?n:e+n}function fe(t,e,n){let r=t;for(;e-- >Ue;)r*=r,r%=n;return r}function dd(t,e){if(t===Ue)throw new Error("invert: expected non-zero number");if(e<=Ue)throw new Error("invert: expected positive modulus, got "+e);let n=be(t,e),r=e,o=Ue,s=ke;for(;n!==Ue;){const a=r/n,c=r%n,l=o-s*a;r=n,n=c,o=s,s=l}if(r!==ke)throw new Error("invert: does not exist");return be(o,e)}function zc(t,e,n){if(!t.eql(t.sqr(e),n))throw new Error("Cannot find square root")}function ah(t,e){const n=(t.ORDER+ke)/rh,r=t.pow(e,n);return zc(t,r,e),r}function ob(t,e){const n=(t.ORDER-oh)/sh,r=t.mul(e,sn),o=t.pow(r,n),s=t.mul(e,o),i=t.mul(t.mul(s,sn),o),a=t.mul(s,t.sub(i,t.ONE));return zc(t,a,e),a}function sb(t){const e=xn(t),n=ch(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+nb)/ih;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,r);const u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),g=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,g);const m=a.eql(a.sqr(d),c),b=a.cmov(l,d,m);return zc(a,b,c),b}}function ch(t){if(t<nh)throw new Error("sqrt is not defined for small field");let e=t-ke,n=0;for(;e%sn===Ue;)e/=sn,n++;let r=sn;const o=xn(t);for(;ud(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ah;let s=o.pow(r,e);const i=(e+ke)/sn;return function(c,l){if(c.is0(l))return l;if(ud(c,l)!==1)throw new Error("Cannot find square root");let d=n,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let g=1,m=c.sqr(f);for(;!c.eql(m,c.ONE);)if(g++,m=c.sqr(m),g===d)throw new Error("Cannot find square root");const b=ke<<BigInt(d-g-1),w=c.pow(u,b);d=g,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function ib(t){return t%rh===nh?ah:t%sh===oh?ob:t%ih===rb?sb(t):ch(t)}const ab=(t,e)=>(be(t,e)&ke)===ke,cb=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function lb(t){const e={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},n=cb.reduce((r,o)=>(r[o]="function",r),e);return So(t,n),t}function db(t,e,n){if(n<Ue)throw new Error("invalid exponent, negatives unsupported");if(n===Ue)return t.ONE;if(n===ke)return e;let r=t.ONE,o=e;for(;n>Ue;)n&ke&&(r=t.mul(r,o)),o=t.sqr(o),n>>=ke;return r}function lh(t,e,n=!1){const r=new Array(e.length).fill(n?t.ZERO:void 0),o=e.reduce((i,a,c)=>t.is0(a)?i:(r[c]=i,t.mul(i,a)),t.ONE),s=t.inv(o);return e.reduceRight((i,a,c)=>t.is0(a)?i:(r[c]=t.mul(i,r[c]),t.mul(i,a)),s),r}function ud(t,e){const n=(t.ORDER-ke)/sn,r=t.pow(e,n),o=t.eql(r,t.ONE),s=t.eql(r,t.ZERO),i=t.eql(r,t.neg(t.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function dh(t,e){e!==void 0&&Fa(e);const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function xn(t,e,n=!1,r={}){if(t<=Ue)throw new Error("invalid field: expected ORDER > 0, got "+t);let o,s,i=!1,a;if(typeof e=="object"&&e!=null){if(r.sqrt||n)throw new Error("cannot specify opts in two arguments");const f=e;f.BITS&&(o=f.BITS),f.sqrt&&(s=f.sqrt),typeof f.isLE=="boolean"&&(n=f.isLE),typeof f.modFromBytes=="boolean"&&(i=f.modFromBytes),a=f.allowedLengths}else typeof e=="number"&&(o=e),r.sqrt&&(s=r.sqrt);const{nBitLength:c,nByteLength:l}=dh(t,o);if(l>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let d;const u=Object.freeze({ORDER:t,isLE:n,BITS:c,BYTES:l,MASK:vo(c),ZERO:Ue,ONE:ke,allowedLengths:a,create:f=>be(f,t),isValid:f=>{if(typeof f!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof f);return Ue<=f&&f<t},is0:f=>f===Ue,isValidNot0:f=>!u.is0(f)&&u.isValid(f),isOdd:f=>(f&ke)===ke,neg:f=>be(-f,t),eql:(f,h)=>f===h,sqr:f=>be(f*f,t),add:(f,h)=>be(f+h,t),sub:(f,h)=>be(f-h,t),mul:(f,h)=>be(f*h,t),pow:(f,h)=>db(u,f,h),div:(f,h)=>be(f*dd(h,t),t),sqrN:f=>f*f,addN:(f,h)=>f+h,subN:(f,h)=>f-h,mulN:(f,h)=>f*h,inv:f=>dd(f,t),sqrt:s||(f=>(d||(d=ib(t)),d(u,f))),toBytes:f=>n?eh(f,l):Kc(f,l),fromBytes:(f,h=!0)=>{if(a){if(!a.includes(f.length)||f.length>l)throw new Error("Field.fromBytes: expected "+a+" bytes, got "+f.length);const m=new Uint8Array(l);m.set(f,n?0:m.length-f.length),f=m}if(f.length!==l)throw new Error("Field.fromBytes: expected "+l+" bytes, got "+f.length);let g=n?ro(f):Zs(f);if(i&&(g=be(g,t)),!h&&!u.isValid(g))throw new Error("invalid field element: outside of range 0..ORDER");return g},invertBatch:f=>lh(u,f),cmov:(f,h,g)=>g?h:f});return Object.freeze(u)}function uh(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function fh(t){const e=uh(t);return e+Math.ceil(e/2)}function ub(t,e,n=!1){const r=t.length,o=uh(e),s=fh(e);if(r<16||r<s||r>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+r);const i=n?ro(t):Zs(t),a=be(i,e-ke)+ke;return n?eh(a,o):Kc(a,o)}const lr=BigInt(0),an=BigInt(1);function ys(t,e){const n=e.negate();return t?n:e}function cn(t,e){const n=lh(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function hh(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Ri(t,e){hh(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=vo(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function fd(t,e,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let a=Number(t&o),c=t>>i;a>r&&(a-=s,c+=an);const l=e*r,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}function fb(t,e){if(!Array.isArray(t))throw new Error("array expected");t.forEach((n,r)=>{if(!(n instanceof e))throw new Error("invalid point at index "+r)})}function hb(t,e){if(!Array.isArray(t))throw new Error("array of scalars expected");t.forEach((n,r)=>{if(!e.isValid(n))throw new Error("invalid scalar at index "+r)})}const Ti=new WeakMap,ph=new WeakMap;function Pi(t){return ph.get(t)||1}function hd(t){if(t!==lr)throw new Error("invalid wNAF")}class gh{constructor(e,n){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=n}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>lr;)n&an&&(r=r.add(o)),o=o.double(),n>>=an;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=Ri(n,this.bits),s=[];let i=e,a=i;for(let c=0;c<r;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=Ri(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=fd(r,a,i);r=c,d?s=s.add(ys(f,n[h])):o=o.add(ys(u,n[l]))}return hd(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=Ri(e,this.bits);for(let i=0;i<s.windows&&r!==lr;i++){const{nextN:a,offset:c,isZero:l,isNeg:d}=fd(r,i,s);if(r=a,!l){const u=n[c];o=o.add(d?u.negate():u)}}return hd(r),o}getPrecomputes(e,n,r){let o=Ti.get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),Ti.set(n,o))),o}cached(e,n,r){const o=Pi(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=Pi(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){hh(n,this.bits),ph.set(e,n),Ti.delete(e)}hasCache(e){return Pi(e)!==1}}function pb(t,e,n,r){let o=e,s=t.ZERO,i=t.ZERO;for(;n>lr||r>lr;)n&an&&(s=s.add(o)),r&an&&(i=i.add(o)),o=o.double(),n>>=an,r>>=an;return{p1:s,p2:i}}function mh(t,e,n,r){fb(n,t),hb(r,e);const o=n.length,s=r.length;if(o!==s)throw new Error("arrays of points and scalars must have equal length");const i=t.ZERO,a=th(BigInt(o));let c=1;a>12?c=a-3:a>4?c=a-2:a>0&&(c=2);const l=vo(c),d=new Array(Number(l)+1).fill(i),u=Math.floor((e.BITS-1)/c)*c;let f=i;for(let h=u;h>=0;h-=c){d.fill(i);for(let m=0;m<s;m++){const b=r[m],w=Number(b>>BigInt(h)&l);d[w]=d[w].add(n[m])}let g=i;for(let m=d.length-1,b=i;m>0;m--)b=b.add(d[m]),g=g.add(b);if(f=f.add(g),h!==0)for(let m=0;m<c;m++)f=f.double()}return f}function pd(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return lb(e),e}else return xn(t,{isLE:n})}function wh(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(const c of["p","n","h"]){const l=e[c];if(!(typeof l=="bigint"&&l>lr))throw new Error(`CURVE.${c} must be positive bigint`)}const o=pd(e.p,n.Fp,r),s=pd(e.n,n.Fn,r),a=["Gx","Gy","a",t==="weierstrass"?"b":"d"];for(const c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}const Ft=BigInt(0),ve=BigInt(1),Ni=BigInt(2),gb=BigInt(8);function mb(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function wb(t,e={}){const n=wh("edwards",t,e,e.FpFnLE),{Fp:r,Fn:o}=n;let s=n.CURVE;const{h:i}=s;So(e,{},{uvRatio:"function"});const a=Ni<<BigInt(o.BYTES*8)-ve,c=b=>r.create(b),l=e.uvRatio||((b,w)=>{try{return{isValid:!0,value:r.sqrt(r.div(b,w))}}catch{return{isValid:!1,value:Ft}}});if(!mb(r,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(b,w,I=!1){const y=I?ve:Ft;return ja("coordinate "+b,w,y,a),w}function u(b){if(!(b instanceof g))throw new Error("ExtendedPoint expected")}const f=ws((b,w)=>{const{X:I,Y:y,Z:k}=b,L=b.is0();w==null&&(w=L?gb:r.inv(k));const C=c(I*w),T=c(y*w),x=r.mul(k,w);if(L)return{x:Ft,y:ve};if(x!==ve)throw new Error("invZ was invalid");return{x:C,y:T}}),h=ws(b=>{const{a:w,d:I}=s;if(b.is0())throw new Error("bad point: ZERO");const{X:y,Y:k,Z:L,T:C}=b,T=c(y*y),x=c(k*k),v=c(L*L),A=c(v*v),N=c(T*w),D=c(v*c(N+x)),E=c(A+c(I*c(T*x)));if(D!==E)throw new Error("bad point: equation left != right (1)");const S=c(y*k),P=c(L*C);if(S!==P)throw new Error("bad point: equation left != right (2)");return!0});class g{constructor(w,I,y,k){this.X=d("x",w),this.Y=d("y",I),this.Z=d("z",y,!0),this.T=d("t",k),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof g)throw new Error("extended point not allowed");const{x:I,y}=w||{};return d("x",I),d("y",y),new g(I,y,ve,c(I*y))}static fromBytes(w,I=!1){const y=r.BYTES,{a:k,d:L}=s;w=ld(ot(w,y,"point")),mn(I,"zip215");const C=ld(w),T=w[y-1];C[y-1]=T&-129;const x=ro(C),v=I?a:r.ORDER;ja("point.y",x,Ft,v);const A=c(x*x),N=c(A-ve),D=c(L*A-k);let{isValid:E,value:S}=l(N,D);if(!E)throw new Error("bad point: invalid y coordinate");const P=(S&ve)===ve,R=(T&128)!==0;if(!I&&S===Ft&&R)throw new Error("bad point: x=0 and x_0=1");return R!==P&&(S=c(-S)),g.fromAffine({x:S,y:x})}static fromHex(w,I=!1){return g.fromBytes(he("point",w),I)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,I=!0){return m.createCache(this,w),I||this.multiply(Ni),this}assertValidity(){h(this)}equals(w){u(w);const{X:I,Y:y,Z:k}=this,{X:L,Y:C,Z:T}=w,x=c(I*T),v=c(L*k),A=c(y*T),N=c(C*k);return x===v&&A===N}is0(){return this.equals(g.ZERO)}negate(){return new g(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:w}=s,{X:I,Y:y,Z:k}=this,L=c(I*I),C=c(y*y),T=c(Ni*c(k*k)),x=c(w*L),v=I+y,A=c(c(v*v)-L-C),N=x+C,D=N-T,E=x-C,S=c(A*D),P=c(N*E),R=c(A*E),O=c(D*N);return new g(S,P,O,R)}add(w){u(w);const{a:I,d:y}=s,{X:k,Y:L,Z:C,T}=this,{X:x,Y:v,Z:A,T:N}=w,D=c(k*x),E=c(L*v),S=c(T*y*N),P=c(C*A),R=c((k+L)*(x+v)-D-E),O=P-S,j=P+S,M=c(E-I*D),B=c(R*O),F=c(j*M),U=c(R*M),H=c(O*j);return new g(B,F,H,U)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");const{p:I,f:y}=m.cached(this,w,k=>cn(g,k));return cn(g,[I,y])[0]}multiplyUnsafe(w,I=g.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===Ft?g.ZERO:this.is0()||w===ve?this:m.unsafe(this,w,y=>cn(g,y),I)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return m.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===ve?this:this.multiplyUnsafe(i)}toBytes(){const{x:w,y:I}=this.toAffine(),y=r.toBytes(I);return y[y.length-1]|=w&ve?128:0,y}toHex(){return un(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get ex(){return this.X}get ey(){return this.Y}get ez(){return this.Z}get et(){return this.T}static normalizeZ(w){return cn(g,w)}static msm(w,I){return mh(g,o,w,I)}_setWindowSize(w){this.precompute(w)}toRawBytes(){return this.toBytes()}}g.BASE=new g(s.Gx,s.Gy,ve,c(s.Gx*s.Gy)),g.ZERO=new g(Ft,ve,ve,Ft),g.Fp=r,g.Fn=o;const m=new gh(g,o.BITS);return g.BASE.precompute(8),g}function yb(t,e,n={}){if(typeof e!="function")throw new Error('"hash" function param is required');So(n,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});const{prehash:r}=n,{BASE:o,Fp:s,Fn:i}=t,a=n.randomBytes||Hc,c=n.adjustScalarBytes||(v=>v),l=n.domain||((v,A,N)=>{if(mn(N,"phflag"),A.length||N)throw new Error("Contexts/pre-hash are not supported");return v});function d(v){return i.create(ro(v))}function u(v){const A=y.secretKey;v=he("private key",v,A);const N=he("hashed private key",e(v),2*A),D=c(N.slice(0,A)),E=N.slice(A,2*A),S=d(D);return{head:D,prefix:E,scalar:S}}function f(v){const{head:A,prefix:N,scalar:D}=u(v),E=o.multiply(D),S=E.toBytes();return{head:A,prefix:N,scalar:D,point:E,pointBytes:S}}function h(v){return f(v).pointBytes}function g(v=Uint8Array.of(),...A){const N=ut(...A);return d(e(l(N,he("context",v),!!r)))}function m(v,A,N={}){v=he("message",v),r&&(v=r(v));const{prefix:D,scalar:E,pointBytes:S}=f(A),P=g(N.context,D,v),R=o.multiply(P).toBytes(),O=g(N.context,R,S,v),j=i.create(P+O*E);if(!i.isValid(j))throw new Error("sign failed: invalid s");const M=ut(R,i.toBytes(j));return ot(M,y.signature,"result")}const b={zip215:!0};function w(v,A,N,D=b){const{context:E,zip215:S}=D,P=y.signature;v=he("signature",v,P),A=he("message",A),N=he("publicKey",N,y.publicKey),S!==void 0&&mn(S,"zip215"),r&&(A=r(A));const R=P/2,O=v.subarray(0,R),j=ro(v.subarray(R,P));let M,B,F;try{M=t.fromBytes(N,S),B=t.fromBytes(O,S),F=o.multiplyUnsafe(j)}catch{return!1}if(!S&&M.isSmallOrder())return!1;const U=g(E,B.toBytes(),M.toBytes(),A);return B.add(M.multiplyUnsafe(U)).subtract(F).clearCofactor().is0()}const I=s.BYTES,y={secretKey:I,publicKey:I,signature:2*I,seed:I};function k(v=a(y.seed)){return ot(v,y.seed,"seed")}function L(v){const A=x.randomSecretKey(v);return{secretKey:A,publicKey:h(A)}}function C(v){return bo(v)&&v.length===i.BYTES}function T(v,A){try{return!!t.fromBytes(v,A)}catch{return!1}}const x={getExtendedPublicKey:f,randomSecretKey:k,isValidSecretKey:C,isValidPublicKey:T,toMontgomery(v){const{y:A}=t.fromBytes(v),N=y.publicKey,D=N===32;if(!D&&N!==57)throw new Error("only defined for 25519 and 448");const E=D?s.div(ve+A,ve-A):s.div(A-ve,A+ve);return s.toBytes(E)},toMontgomerySecret(v){const A=y.secretKey;ot(v,A);const N=e(v.subarray(0,A));return c(N).subarray(0,A)},randomPrivateKey:k,precompute(v=8,A=t.BASE){return A.precompute(v,!1)}};return Object.freeze({keygen:L,getPublicKey:h,sign:m,verify:w,utils:x,Point:t,lengths:y})}function bb(t){const e={a:t.a,d:t.d,p:t.Fp.ORDER,n:t.n,h:t.h,Gx:t.Gx,Gy:t.Gy},n=t.Fp,r=xn(e.n,t.nBitLength,!0),o={Fp:n,Fn:r,uvRatio:t.uvRatio},s={randomBytes:t.randomBytes,adjustScalarBytes:t.adjustScalarBytes,domain:t.domain,prehash:t.prehash,mapToCurve:t.mapToCurve};return{CURVE:e,curveOpts:o,hash:t.hash,eddsaOpts:s}}function vb(t,e){const n=e.Point;return Object.assign({},e,{ExtendedPoint:n,CURVE:t,nBitLength:n.Fn.BITS,nByteLength:n.Fn.BYTES})}function Sb(t){const{CURVE:e,curveOpts:n,hash:r,eddsaOpts:o}=bb(t),s=wb(e,n),i=yb(s,r,o);return vb(t,i)}const xb=BigInt(1),gd=BigInt(2);BigInt(3);const Eb=BigInt(5),Ab=BigInt(8),Wc=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),yh={p:Wc,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Ab,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function kb(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Wc,a=t*t%s*t%s,c=fe(a,gd,s)*a%s,l=fe(c,xb,s)*t%s,d=fe(l,Eb,s)*l%s,u=fe(d,e,s)*d%s,f=fe(u,n,s)*u%s,h=fe(f,r,s)*f%s,g=fe(h,o,s)*h%s,m=fe(g,o,s)*h%s,b=fe(m,e,s)*d%s;return{pow_p_5_8:fe(b,gd,s)*t%s,b2:a}}function Cb(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const md=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Ib(t,e){const n=Wc,r=be(e*e*e,n),o=be(r*r*e,n),s=kb(t*o).pow_p_5_8;let i=be(t*r*s,n);const a=be(e*i*i,n),c=i,l=be(i*md,n),d=a===t,u=a===be(-t,n),f=a===be(-t*md,n);return d&&(i=c),(u||f)&&(i=l),ab(i,n)&&(i=be(-i,n)),{isValid:d||u,value:i}}const Rb=xn(yh.p,{isLE:!0}),Tb={...yh,Fp:Rb,hash:Qy,adjustScalarBytes:Cb,uvRatio:Ib},bs=Sb(Tb);class wd extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}}class yd extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}}class Pb extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}}const Pt={get(t=globalThis){const e=t.crypto;if(e?.subtle==null)throw new Pb("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}},vs=32,vt=64,Ua=32;let Yn;const bh=(async()=>{try{return await Pt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function Nb(){const t=bs.utils.randomPrivateKey(),e=bs.getPublicKey(t);return{privateKey:Mb(t,e),publicKey:e}}async function Lb(t,e){let n;t.length===vt?n=t.subarray(0,32):n=t;const r={crv:"Ed25519",kty:"OKP",x:ee(t.subarray(32),"base64url"),d:ee(n,"base64url"),ext:!0,key_ops:["sign"]},o=await Pt.get().subtle.importKey("jwk",r,{name:"Ed25519"},!0,["sign"]),s=await Pt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function Bb(t,e){const n=t.subarray(0,Ua);return bs.sign(e instanceof Uint8Array?e:e.subarray(),n)}async function _b(t,e){return Yn==null&&(Yn=await bh),Yn?Lb(t,e):Bb(t,e)}async function Ob(t,e,n){if(t.buffer instanceof ArrayBuffer){const r=await Pt.get().subtle.importKey("raw",t.buffer,{name:"Ed25519"},!1,["verify"]);return await Pt.get().subtle.verify({name:"Ed25519"},r,e,n instanceof Uint8Array?n:n.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function Db(t,e,n){return bs.verify(e,n instanceof Uint8Array?n:n.subarray(),t)}async function Fb(t,e,n){return Yn==null&&(Yn=await bh),Yn?Ob(t,e,n):Db(t,e,n)}function Mb(t,e){const n=new Uint8Array(vt);for(let r=0;r<Ua;r++)n[r]=t[r],n[Ua+r]=e[r];return n}function Js(t){return t==null?!1:typeof t.then=="function"&&typeof t.catch=="function"&&typeof t.finally=="function"}class vh{type="Ed25519";raw;constructor(e){this.raw=oo(e,vs)}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){r?.signal?.throwIfAborted();const o=Fb(this.raw,n,e);return Js(o)?o.then(s=>(r?.signal?.throwIfAborted(),s)):o}}class $a{type="Ed25519";raw;publicKey;constructor(e,n){this.raw=oo(e,vt),this.publicKey=new vh(n)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){n?.signal?.throwIfAborted();const r=_b(this.raw,e);return Js(r)?r.then(o=>(n?.signal?.throwIfAborted(),o)):(n?.signal?.throwIfAborted(),r)}}function jb(t){if(t.length>vt){t=oo(t,vt+vs);const r=t.subarray(0,vt),o=t.subarray(vt,t.length);return new $a(r,o)}t=oo(t,vt);const e=t.subarray(0,vt),n=t.subarray(vs);return new $a(e,n)}function Sh(t){return t=oo(t,vs),new vh(t)}async function Ub(){const{privateKey:t,publicKey:e}=Nb();return new $a(t,e)}function oo(t,e){if(t=Uint8Array.from(t??[]),t.length!==e)throw new it(`Key must be a Uint8Array of length ${e}, got ${t.length}`);return t}const $b=Math.pow(2,7),Hb=Math.pow(2,14),qb=Math.pow(2,21),Gc=Math.pow(2,28),Vc=Math.pow(2,35),Xc=Math.pow(2,42),Yc=Math.pow(2,49),oe=128,Te=127;function En(t){if(t<$b)return 1;if(t<Hb)return 2;if(t<qb)return 3;if(t<Gc)return 4;if(t<Vc)return 5;if(t<Xc)return 6;if(t<Yc)return 7;if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function xh(t,e,n=0){switch(En(t)){case 8:e[n++]=t&255|oe,t/=128;case 7:e[n++]=t&255|oe,t/=128;case 6:e[n++]=t&255|oe,t/=128;case 5:e[n++]=t&255|oe,t/=128;case 4:e[n++]=t&255|oe,t>>>=7;case 3:e[n++]=t&255|oe,t>>>=7;case 2:e[n++]=t&255|oe,t>>>=7;case 1:{e[n++]=t&255,t>>>=7;break}default:throw new Error("unreachable")}return e}function Kb(t,e,n=0){switch(En(t)){case 8:e.set(n++,t&255|oe),t/=128;case 7:e.set(n++,t&255|oe),t/=128;case 6:e.set(n++,t&255|oe),t/=128;case 5:e.set(n++,t&255|oe),t/=128;case 4:e.set(n++,t&255|oe),t>>>=7;case 3:e.set(n++,t&255|oe),t>>>=7;case 2:e.set(n++,t&255|oe),t>>>=7;case 1:{e.set(n++,t&255),t>>>=7;break}default:throw new Error("unreachable")}return e}function Eh(t,e){let n=t[e],r=0;if(r+=n&Te,n<oe||(n=t[e+1],r+=(n&Te)<<7,n<oe)||(n=t[e+2],r+=(n&Te)<<14,n<oe)||(n=t[e+3],r+=(n&Te)<<21,n<oe)||(n=t[e+4],r+=(n&Te)*Gc,n<oe)||(n=t[e+5],r+=(n&Te)*Vc,n<oe)||(n=t[e+6],r+=(n&Te)*Xc,n<oe)||(n=t[e+7],r+=(n&Te)*Yc,n<oe))return r;throw new RangeError("Could not decode varint")}function zb(t,e){let n=t.get(e),r=0;if(r+=n&Te,n<oe||(n=t.get(e+1),r+=(n&Te)<<7,n<oe)||(n=t.get(e+2),r+=(n&Te)<<14,n<oe)||(n=t.get(e+3),r+=(n&Te)<<21,n<oe)||(n=t.get(e+4),r+=(n&Te)*Gc,n<oe)||(n=t.get(e+5),r+=(n&Te)*Vc,n<oe)||(n=t.get(e+6),r+=(n&Te)*Xc,n<oe)||(n=t.get(e+7),r+=(n&Te)*Yc,n<oe))return r;throw new RangeError("Could not decode varint")}function Wb(t,e,n=0){return e==null&&(e=Tt(En(t))),e instanceof Uint8Array?xh(t,e,n):Kb(t,e,n)}function Ah(t,e=0){return t instanceof Uint8Array?Eh(t,e):zb(t,e)}const Zc=new Float32Array([-0]),zt=new Uint8Array(Zc.buffer);function Gb(t,e,n){Zc[0]=t,e[n]=zt[0],e[n+1]=zt[1],e[n+2]=zt[2],e[n+3]=zt[3]}function Vb(t,e){return zt[0]=t[e],zt[1]=t[e+1],zt[2]=t[e+2],zt[3]=t[e+3],Zc[0]}const Jc=new Float64Array([-0]),Pe=new Uint8Array(Jc.buffer);function Xb(t,e,n){Jc[0]=t,e[n]=Pe[0],e[n+1]=Pe[1],e[n+2]=Pe[2],e[n+3]=Pe[3],e[n+4]=Pe[4],e[n+5]=Pe[5],e[n+6]=Pe[6],e[n+7]=Pe[7]}function Yb(t,e){return Pe[0]=t[e],Pe[1]=t[e+1],Pe[2]=t[e+2],Pe[3]=t[e+3],Pe[4]=t[e+4],Pe[5]=t[e+5],Pe[6]=t[e+6],Pe[7]=t[e+7],Jc[0]}const Zb=BigInt(Number.MAX_SAFE_INTEGER),Jb=BigInt(Number.MIN_SAFE_INTEGER);class Ne{lo;hi;constructor(e,n){this.lo=e|0,this.hi=n|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){const n=~this.lo+1>>>0;let r=~this.hi>>>0;return n===0&&(r=r+1>>>0),-(n+r*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const n=~this.lo+1>>>0;let r=~this.hi>>>0;return n===0&&(r=r+1>>>0),-(BigInt(n)+(BigInt(r)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){const e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){const e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){const e=this.lo,n=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return r===0?n===0?e<16384?e<128?1:2:e<2097152?3:4:n<16384?n<128?5:6:n<2097152?7:8:r<128?9:10}static fromBigInt(e){if(e===0n)return fn;if(e<Zb&&e>Jb)return this.fromNumber(Number(e));const n=e<0n;n&&(e=-e);let r=e>>32n,o=e-(r<<32n);return n&&(r=~r|0n,o=~o|0n,++o>bd&&(o=0n,++r>bd&&(r=0n))),new Ne(Number(o),Number(r))}static fromNumber(e){if(e===0)return fn;const n=e<0;n&&(e=-e);let r=e>>>0,o=(e-r)/4294967296>>>0;return n&&(o=~o>>>0,r=~r>>>0,++r>4294967295&&(r=0,++o>4294967295&&(o=0))),new Ne(r,o)}static from(e){return typeof e=="number"?Ne.fromNumber(e):typeof e=="bigint"?Ne.fromBigInt(e):typeof e=="string"?Ne.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new Ne(e.low>>>0,e.high>>>0):fn}}const fn=new Ne(0,0);fn.toBigInt=function(){return 0n};fn.zzEncode=fn.zzDecode=function(){return this};fn.length=function(){return 1};const bd=4294967296n;function Qb(t){let e=0,n=0;for(let r=0;r<t.length;++r)n=t.charCodeAt(r),n<128?e+=1:n<2048?e+=2:(n&64512)===55296&&(t.charCodeAt(r+1)&64512)===56320?(++r,e+=4):e+=3;return e}function e0(t,e,n){if(n-e<1)return"";let o;const s=[];let i=0,a;for(;e<n;)a=t[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|t[e++]&63:a>239&&a<365?(a=((a&7)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(t[e++]&63)<<6|t[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function kh(t,e,n){const r=n;let o,s;for(let i=0;i<t.length;++i)o=t.charCodeAt(i),o<128?e[n++]=o:o<2048?(e[n++]=o>>6|192,e[n++]=o&63|128):(o&64512)===55296&&((s=t.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[n++]=o>>18|240,e[n++]=o>>12&63|128,e[n++]=o>>6&63|128,e[n++]=o&63|128):(e[n++]=o>>12|224,e[n++]=o>>6&63|128,e[n++]=o&63|128);return n-r}function nt(t,e){return RangeError(`index out of range: ${t.pos} + ${e??1} > ${t.len}`)}function Lo(t,e){return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0}class t0{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,nt(this,10);return e}int32(){return this.uint32()|0}sint32(){const e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw nt(this,4);return Lo(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw nt(this,4);return Lo(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw nt(this,4);const e=Vb(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw nt(this,4);const e=Yb(this.buf,this.pos);return this.pos+=8,e}bytes(){const e=this.uint32(),n=this.pos,r=this.pos+e;if(r>this.len)throw nt(this,e);return this.pos+=e,n===r?new Uint8Array(0):this.buf.subarray(n,r)}string(){const e=this.bytes();return e0(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw nt(this,e);this.pos+=e}else do if(this.pos>=this.len)throw nt(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){const e=new Ne(0,0);let n=0;if(this.len-this.pos>4){for(;n<4;++n)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<n*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;n=0}else{for(;n<3;++n){if(this.pos>=this.len)throw nt(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<n*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<n*7)>>>0,e}if(this.len-this.pos>4){for(;n<5;++n)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<n*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;n<5;++n){if(this.pos>=this.len)throw nt(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<n*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw nt(this,8);const e=Lo(this.buf,this.pos+=4),n=Lo(this.buf,this.pos+=4);return new Ne(e,n)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const e=Eh(this.buf,this.pos);return this.pos+=En(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function n0(t){return new t0(t instanceof Uint8Array?t:t.subarray())}function Qs(t,e,n){const r=n0(t);return e.decode(r,void 0,n)}function r0(t){let r,o=8192;return function(i){if(i<1||i>4096)return Tt(i);o+i>8192&&(r=Tt(8192),o=0);const a=r.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}class qr{fn;len;next;val;constructor(e,n,r){this.fn=e,this.len=n,this.next=void 0,this.val=r}}function Li(){}class o0{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}}const s0=r0();function i0(t){return globalThis.Buffer!=null?Tt(t):s0(t)}class Ha{len;head;tail;states;constructor(){this.len=0,this.head=new qr(Li,0,0),this.tail=this.head,this.states=null}_push(e,n,r){return this.tail=this.tail.next=new qr(e,n,r),this.len+=n,this}uint32(e){return this.len+=(this.tail=this.tail.next=new c0((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Bo,10,Ne.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){const n=Ne.fromBigInt(e);return this._push(Bo,n.length(),n)}uint64Number(e){return this._push(xh,En(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){const n=Ne.fromBigInt(e).zzEncode();return this._push(Bo,n.length(),n)}sint64Number(e){const n=Ne.fromNumber(e).zzEncode();return this._push(Bo,n.length(),n)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(Bi,1,e?1:0)}fixed32(e){return this._push(Rr,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){const n=Ne.fromBigInt(e);return this._push(Rr,4,n.lo)._push(Rr,4,n.hi)}fixed64Number(e){const n=Ne.fromNumber(e);return this._push(Rr,4,n.lo)._push(Rr,4,n.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(Gb,4,e)}double(e){return this._push(Xb,8,e)}bytes(e){const n=e.length>>>0;return n===0?this._push(Bi,1,0):this.uint32(n)._push(l0,n,e)}string(e){const n=Qb(e);return n!==0?this.uint32(n)._push(kh,n,e):this._push(Bi,1,0)}fork(){return this.states=new o0(this),this.head=this.tail=new qr(Li,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new qr(Li,0,0),this.len=0),this}ldelim(){const e=this.head,n=this.tail,r=this.len;return this.reset().uint32(r),r!==0&&(this.tail.next=e.next,this.tail=n,this.len+=r),this}finish(){let e=this.head.next;const n=i0(this.len);let r=0;for(;e!=null;)e.fn(e.val,n,r),r+=e.len,e=e.next;return n}}function Bi(t,e,n){e[n]=t&255}function a0(t,e,n){for(;t>127;)e[n++]=t&127|128,t>>>=7;e[n]=t}class c0 extends qr{next;constructor(e,n){super(a0,e,n),this.next=void 0}}function Bo(t,e,n){for(;t.hi!==0;)e[n++]=t.lo&127|128,t.lo=(t.lo>>>7|t.hi<<25)>>>0,t.hi>>>=7;for(;t.lo>127;)e[n++]=t.lo&127|128,t.lo=t.lo>>>7;e[n++]=t.lo}function Rr(t,e,n){e[n]=t&255,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24}function l0(t,e,n){e.set(t,n)}globalThis.Buffer!=null&&(Ha.prototype.bytes=function(t){const e=t.length>>>0;return this.uint32(e),e>0&&this._push(d0,e,t),this},Ha.prototype.string=function(t){const e=globalThis.Buffer.byteLength(t);return this.uint32(e),e>0&&this._push(u0,e,t),this});function d0(t,e,n){e.set(t,n)}function u0(t,e,n){t.length<40?kh(t,e,n):e.utf8Write!=null?e.utf8Write(t,n):e.set(ye(t),n)}function f0(){return new Ha}function ei(t,e){const n=f0();return e.encode(t,n,{lengthDelimited:!1}),n.finish()}var Ss;(function(t){t[t.VARINT=0]="VARINT",t[t.BIT64=1]="BIT64",t[t.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",t[t.START_GROUP=3]="START_GROUP",t[t.END_GROUP=4]="END_GROUP",t[t.BIT32=5]="BIT32"})(Ss||(Ss={}));function Ch(t,e,n,r){return{name:t,type:e,encode:n,decode:r}}function h0(t){function e(o){if(t[o.toString()]==null)throw new Error("Invalid enum value");return t[o]}const n=function(s,i){const a=e(s);i.int32(a)},r=function(s){const i=s.int32();return e(i)};return Ch("enum",Ss.VARINT,n,r)}function ti(t,e){return Ch("message",Ss.LENGTH_DELIMITED,t,e)}class vd extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"}var de;(function(t){t.RSA="RSA",t.Ed25519="Ed25519",t.secp256k1="secp256k1",t.ECDSA="ECDSA"})(de||(de={}));var qa;(function(t){t[t.RSA=0]="RSA",t[t.Ed25519=1]="Ed25519",t[t.secp256k1=2]="secp256k1",t[t.ECDSA=3]="ECDSA"})(qa||(qa={}));(function(t){t.codec=()=>h0(qa)})(de||(de={}));var wn;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.Type!=null&&(r.uint32(8),de.codec().encode(n.Type,r)),n.Data!=null&&(r.uint32(18),r.bytes(n.Data)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.Type=de.codec().decode(n);break}case 2:{s.Data=n.bytes();break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(wn||(wn={}));var xs;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.Type!=null&&(r.uint32(8),de.codec().encode(n.Type,r)),n.Data!=null&&(r.uint32(18),r.bytes(n.Data)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.Type=de.codec().decode(n);break}case 2:{s.Data=n.bytes();break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(xs||(xs={}));const Ih=Jf;class Rh{type="RSA";jwk;_raw;_multihash;constructor(e,n){this.jwk=e,this._multihash=n}get raw(){return this._raw==null&&(this._raw=Ph(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return le.createV1(114,this._multihash)}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){return R0(this.jwk,n,e,r)}}class p0{type="RSA";jwk;_raw;publicKey;constructor(e,n){this.jwk=e,this.publicKey=n}get raw(){return this._raw==null&&(this._raw=b0(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){return I0(this.jwk,e,n)}}const g0=8192,Th=18,m0=1062,w0=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function y0(t){return{n:ee(t[1],"base64url"),e:ee(t[2],"base64url"),d:ee(t[3],"base64url"),p:ee(t[4],"base64url"),q:ee(t[5],"base64url"),dp:ee(t[6],"base64url"),dq:ee(t[7],"base64url"),qi:ee(t[8],"base64url"),kty:"RSA"}}function b0(t){if(t.n==null||t.e==null||t.d==null||t.p==null||t.q==null||t.dp==null||t.dq==null||t.qi==null)throw new it("JWK was missing components");return It([qe(Uint8Array.from([0])),qe(ye(t.n,"base64url")),qe(ye(t.e,"base64url")),qe(ye(t.d,"base64url")),qe(ye(t.p,"base64url")),qe(ye(t.q,"base64url")),qe(ye(t.dp,"base64url")),qe(ye(t.dq,"base64url")),qe(ye(t.qi,"base64url"))]).subarray()}function v0(t){const e=wr(t[1],{offset:0});return{kty:"RSA",n:ee(e[0],"base64url"),e:ee(e[1],"base64url")}}function Ph(t){if(t.n==null||t.e==null)throw new it("JWK was missing components");return It([w0,Uc(It([qe(ye(t.n,"base64url")),qe(ye(t.e,"base64url"))]))]).subarray()}function S0(t){const e=wr(t);return x0(e)}function x0(t){const e=y0(t);return k0(e)}function E0(t,e){if(t.byteLength>=m0)throw new Tf("Key size is too large");const n=wr(t,{offset:0});return A0(n,t,e)}function A0(t,e,n){const r=v0(t);if(n==null){const o=Ih(wn.encode({Type:de.RSA,Data:e}));n=mo(Th,o)}return new Rh(r,n)}function k0(t){if(T0(t)>g0)throw new it("Key size is too large");const e=C0(t),n=Ih(wn.encode({Type:de.RSA,Data:Ph(e.publicKey)})),r=mo(Th,n);return new p0(e.privateKey,new Rh(e.publicKey,r))}function C0(t){if(t==null)throw new it("Missing key parameter");return{privateKey:t,publicKey:{kty:t.kty,n:t.n,e:t.e}}}async function I0(t,e,n){const r=await Pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);n?.signal?.throwIfAborted();const o=await Pt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,e instanceof Uint8Array?e:e.subarray());return n?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function R0(t,e,n,r){const o=await Pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);r?.signal?.throwIfAborted();const s=await Pt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,n instanceof Uint8Array?n:n.subarray());return r?.signal?.throwIfAborted(),s}function T0(t){if(t.kty!=="RSA")throw new it("invalid key type");if(t.n==null)throw new it("invalid key modulus");return ye(t.n,"base64url").length*8}class Nh extends Vf{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,Wf(e);const r=$c(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const o=this.blockLen,s=new Uint8Array(o);s.set(r.length>o?e.create().update(r).digest():r);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),cr(s)}update(e){return gs(this),this.iHash.update(e),this}digestInto(e){gs(this),Sn(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Lh=(t,e,n)=>new Nh(t,e).update(n).digest();Lh.create=(t,e)=>new Nh(t,e);const Sd=(t,e)=>(t+(t>=0?e:-e)/Bh)/e;function P0(t,e,n){const[[r,o],[s,i]]=e,a=Sd(i*t,n),c=Sd(-o*t,n);let l=t-a*r-c*s,d=-a*o-c*i;const u=l<At,f=d<At;u&&(l=-l),f&&(d=-d);const h=vo(Math.ceil(th(n)/2))+Zn;if(l<At||l>=h||d<At||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Ka(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function _i(t,e){const n={};for(let r of Object.keys(e))n[r]=t[r]===void 0?e[r]:t[r];return mn(n.lowS,"lowS"),mn(n.prehash,"prehash"),n.format!==void 0&&Ka(n.format),n}class N0 extends Error{constructor(e=""){super(e)}}const St={Err:N0,_tlv:{encode:(t,e)=>{const{Err:n}=St;if(t<0||t>256)throw new n("tlv.encode: wrong tag");if(e.length&1)throw new n("tlv.encode: unpadded data");const r=e.length/2,o=No(r);if(o.length/2&128)throw new n("tlv.encode: long form length too big");const s=r>127?No(o.length/2|128):"";return No(t)+s+o+e},decode(t,e){const{Err:n}=St;let r=0;if(t<0||t>256)throw new n("tlv.encode: wrong tag");if(e.length<2||e[r++]!==t)throw new n("tlv.decode: wrong tlv");const o=e[r++],s=!!(o&128);let i=0;if(!s)i=o;else{const c=o&127;if(!c)throw new n("tlv.decode(long): indefinite length not supported");if(c>4)throw new n("tlv.decode(long): byte length is too big");const l=e.subarray(r,r+c);if(l.length!==c)throw new n("tlv.decode: length bytes not complete");if(l[0]===0)throw new n("tlv.decode(long): zero leftmost byte");for(const d of l)i=i<<8|d;if(r+=c,i<128)throw new n("tlv.decode(long): not minimal encoding")}const a=e.subarray(r,r+i);if(a.length!==i)throw new n("tlv.decode: wrong value length");return{v:a,l:e.subarray(r+i)}}},_int:{encode(t){const{Err:e}=St;if(t<At)throw new e("integer: negative integers are not allowed");let n=No(t);if(Number.parseInt(n[0],16)&8&&(n="00"+n),n.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return n},decode(t){const{Err:e}=St;if(t[0]&128)throw new e("invalid signature integer: negative");if(t[0]===0&&!(t[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return Zs(t)}},toSig(t){const{Err:e,_int:n,_tlv:r}=St,o=he("signature",t),{v:s,l:i}=r.decode(48,o);if(i.length)throw new e("invalid signature: left bytes after parsing");const{v:a,l:c}=r.decode(2,s),{v:l,l:d}=r.decode(2,c);if(d.length)throw new e("invalid signature: left bytes after parsing");return{r:n.decode(a),s:n.decode(l)}},hexFromSig(t){const{_tlv:e,_int:n}=St,r=e.encode(2,n.encode(t.r)),o=e.encode(2,n.encode(t.s)),s=r+o;return e.encode(48,s)}},At=BigInt(0),Zn=BigInt(1),Bh=BigInt(2),_o=BigInt(3),L0=BigInt(4);function $n(t,e){const{BYTES:n}=t;let r;if(typeof e=="bigint")r=e;else{let o=he("private key",e);try{r=t.fromBytes(o)}catch{throw new Error(`invalid private key: expected ui8a of size ${n}, got ${typeof e}`)}}if(!t.isValidNot0(r))throw new Error("invalid private key: out of range [1..N-1]");return r}function B0(t,e={}){const n=wh("weierstrass",t,e),{Fp:r,Fn:o}=n;let s=n.CURVE;const{h:i,n:a}=s;So(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});const{endo:c}=e;if(c&&(!r.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');const l=Oh(r,o);function d(){if(!r.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(D,E,S){const{x:P,y:R}=E.toAffine(),O=r.toBytes(P);if(mn(S,"isCompressed"),S){d();const j=!r.isOdd(R);return ut(_h(j),O)}else return ut(Uint8Array.of(4),O,r.toBytes(R))}function f(D){ot(D,void 0,"Point");const{publicKey:E,publicKeyUncompressed:S}=l,P=D.length,R=D[0],O=D.subarray(1);if(P===E&&(R===2||R===3)){const j=r.fromBytes(O);if(!r.isValid(j))throw new Error("bad point: is not on curve, wrong x");const M=m(j);let B;try{B=r.sqrt(M)}catch(H){const q=H instanceof Error?": "+H.message:"";throw new Error("bad point: is not on curve, sqrt error"+q)}d();const F=r.isOdd(B);return(R&1)===1!==F&&(B=r.neg(B)),{x:j,y:B}}else if(P===S&&R===4){const j=r.BYTES,M=r.fromBytes(O.subarray(0,j)),B=r.fromBytes(O.subarray(j,j*2));if(!b(M,B))throw new Error("bad point: is not on curve");return{x:M,y:B}}else throw new Error(`bad point: got length ${P}, expected compressed=${E} or uncompressed=${S}`)}const h=e.toBytes||u,g=e.fromBytes||f;function m(D){const E=r.sqr(D),S=r.mul(E,D);return r.add(r.add(S,r.mul(D,s.a)),s.b)}function b(D,E){const S=r.sqr(E),P=m(D);return r.eql(S,P)}if(!b(s.Gx,s.Gy))throw new Error("bad curve params: generator point");const w=r.mul(r.pow(s.a,_o),L0),I=r.mul(r.sqr(s.b),BigInt(27));if(r.is0(r.add(w,I)))throw new Error("bad curve params: a or b");function y(D,E,S=!1){if(!r.isValid(E)||S&&r.is0(E))throw new Error(`bad point coordinate ${D}`);return E}function k(D){if(!(D instanceof v))throw new Error("ProjectivePoint expected")}function L(D){if(!c||!c.basises)throw new Error("no endo");return P0(D,c.basises,o.ORDER)}const C=ws((D,E)=>{const{X:S,Y:P,Z:R}=D;if(r.eql(R,r.ONE))return{x:S,y:P};const O=D.is0();E==null&&(E=O?r.ONE:r.inv(R));const j=r.mul(S,E),M=r.mul(P,E),B=r.mul(R,E);if(O)return{x:r.ZERO,y:r.ZERO};if(!r.eql(B,r.ONE))throw new Error("invZ was invalid");return{x:j,y:M}}),T=ws(D=>{if(D.is0()){if(e.allowInfinityPoint&&!r.is0(D.Y))return;throw new Error("bad point: ZERO")}const{x:E,y:S}=D.toAffine();if(!r.isValid(E)||!r.isValid(S))throw new Error("bad point: x or y not field elements");if(!b(E,S))throw new Error("bad point: equation left != right");if(!D.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function x(D,E,S,P,R){return S=new v(r.mul(S.X,D),S.Y,S.Z),E=ys(P,E),S=ys(R,S),E.add(S)}class v{constructor(E,S,P){this.X=y("x",E),this.Y=y("y",S,!0),this.Z=y("z",P),Object.freeze(this)}static CURVE(){return s}static fromAffine(E){const{x:S,y:P}=E||{};if(!E||!r.isValid(S)||!r.isValid(P))throw new Error("invalid affine point");if(E instanceof v)throw new Error("projective point not allowed");return r.is0(S)&&r.is0(P)?v.ZERO:new v(S,P,r.ONE)}static fromBytes(E){const S=v.fromAffine(g(ot(E,void 0,"point")));return S.assertValidity(),S}static fromHex(E){return v.fromBytes(he("pointHex",E))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(E=8,S=!0){return N.createCache(this,E),S||this.multiply(_o),this}assertValidity(){T(this)}hasEvenY(){const{y:E}=this.toAffine();if(!r.isOdd)throw new Error("Field doesn't support isOdd");return!r.isOdd(E)}equals(E){k(E);const{X:S,Y:P,Z:R}=this,{X:O,Y:j,Z:M}=E,B=r.eql(r.mul(S,M),r.mul(O,R)),F=r.eql(r.mul(P,M),r.mul(j,R));return B&&F}negate(){return new v(this.X,r.neg(this.Y),this.Z)}double(){const{a:E,b:S}=s,P=r.mul(S,_o),{X:R,Y:O,Z:j}=this;let M=r.ZERO,B=r.ZERO,F=r.ZERO,U=r.mul(R,R),H=r.mul(O,O),q=r.mul(j,j),K=r.mul(R,O);return K=r.add(K,K),F=r.mul(R,j),F=r.add(F,F),M=r.mul(E,F),B=r.mul(P,q),B=r.add(M,B),M=r.sub(H,B),B=r.add(H,B),B=r.mul(M,B),M=r.mul(K,M),F=r.mul(P,F),q=r.mul(E,q),K=r.sub(U,q),K=r.mul(E,K),K=r.add(K,F),F=r.add(U,U),U=r.add(F,U),U=r.add(U,q),U=r.mul(U,K),B=r.add(B,U),q=r.mul(O,j),q=r.add(q,q),U=r.mul(q,K),M=r.sub(M,U),F=r.mul(q,H),F=r.add(F,F),F=r.add(F,F),new v(M,B,F)}add(E){k(E);const{X:S,Y:P,Z:R}=this,{X:O,Y:j,Z:M}=E;let B=r.ZERO,F=r.ZERO,U=r.ZERO;const H=s.a,q=r.mul(s.b,_o);let K=r.mul(S,O),W=r.mul(P,j),G=r.mul(R,M),V=r.add(S,P),X=r.add(O,j);V=r.mul(V,X),X=r.add(K,W),V=r.sub(V,X),X=r.add(S,R);let Z=r.add(O,M);return X=r.mul(X,Z),Z=r.add(K,G),X=r.sub(X,Z),Z=r.add(P,R),B=r.add(j,M),Z=r.mul(Z,B),B=r.add(W,G),Z=r.sub(Z,B),U=r.mul(H,X),B=r.mul(q,G),U=r.add(B,U),B=r.sub(W,U),U=r.add(W,U),F=r.mul(B,U),W=r.add(K,K),W=r.add(W,K),G=r.mul(H,G),X=r.mul(q,X),W=r.add(W,G),G=r.sub(K,G),G=r.mul(H,G),X=r.add(X,G),K=r.mul(W,X),F=r.add(F,K),K=r.mul(Z,X),B=r.mul(V,B),B=r.sub(B,K),K=r.mul(V,W),U=r.mul(Z,U),U=r.add(U,K),new v(B,F,U)}subtract(E){return this.add(E.negate())}is0(){return this.equals(v.ZERO)}multiply(E){const{endo:S}=e;if(!o.isValidNot0(E))throw new Error("invalid scalar: out of range");let P,R;const O=j=>N.cached(this,j,M=>cn(v,M));if(S){const{k1neg:j,k1:M,k2neg:B,k2:F}=L(E),{p:U,f:H}=O(M),{p:q,f:K}=O(F);R=H.add(K),P=x(S.beta,U,q,j,B)}else{const{p:j,f:M}=O(E);P=j,R=M}return cn(v,[P,R])[0]}multiplyUnsafe(E){const{endo:S}=e,P=this;if(!o.isValid(E))throw new Error("invalid scalar: out of range");if(E===At||P.is0())return v.ZERO;if(E===Zn)return P;if(N.hasCache(this))return this.multiply(E);if(S){const{k1neg:R,k1:O,k2neg:j,k2:M}=L(E),{p1:B,p2:F}=pb(v,P,O,M);return x(S.beta,B,F,R,j)}else return N.unsafe(P,E)}multiplyAndAddUnsafe(E,S,P){const R=this.multiplyUnsafe(S).add(E.multiplyUnsafe(P));return R.is0()?void 0:R}toAffine(E){return C(this,E)}isTorsionFree(){const{isTorsionFree:E}=e;return i===Zn?!0:E?E(v,this):N.unsafe(this,a).is0()}clearCofactor(){const{clearCofactor:E}=e;return i===Zn?this:E?E(v,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(E=!0){return mn(E,"isCompressed"),this.assertValidity(),h(v,this,E)}toHex(E=!0){return un(this.toBytes(E))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(E=!0){return this.toBytes(E)}_setWindowSize(E){this.precompute(E)}static normalizeZ(E){return cn(v,E)}static msm(E,S){return mh(v,o,E,S)}static fromPrivateKey(E){return v.BASE.multiply($n(o,E))}}v.BASE=new v(s.Gx,s.Gy,r.ONE),v.ZERO=new v(r.ZERO,r.ONE,r.ZERO),v.Fp=r,v.Fn=o;const A=o.BITS,N=new gh(v,e.endo?Math.ceil(A/2):A);return v.BASE.precompute(8),v}function _h(t){return Uint8Array.of(t?2:3)}function Oh(t,e){return{secretKey:e.BYTES,publicKey:1+t.BYTES,publicKeyUncompressed:1+2*t.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function _0(t,e={}){const{Fn:n}=t,r=e.randomBytes||Hc,o=Object.assign(Oh(t.Fp,n),{seed:fh(n.ORDER)});function s(h){try{return!!$n(n,h)}catch{return!1}}function i(h,g){const{publicKey:m,publicKeyUncompressed:b}=o;try{const w=h.length;return g===!0&&w!==m||g===!1&&w!==b?!1:!!t.fromBytes(h)}catch{return!1}}function a(h=r(o.seed)){return ub(ot(h,o.seed,"seed"),n.ORDER)}function c(h,g=!0){return t.BASE.multiply($n(n,h)).toBytes(g)}function l(h){const g=a(h);return{secretKey:g,publicKey:c(g)}}function d(h){if(typeof h=="bigint")return!1;if(h instanceof t)return!0;const{secretKey:g,publicKey:m,publicKeyUncompressed:b}=o;if(n.allowedLengths||g===m)return;const w=he("key",h).length;return w===m||w===b}function u(h,g,m=!0){if(d(h)===!0)throw new Error("first arg must be private key");if(d(g)===!1)throw new Error("second arg must be public key");const b=$n(n,h);return t.fromHex(g).multiply(b).toBytes(m)}return Object.freeze({getPublicKey:c,getSharedSecret:u,keygen:l,Point:t,utils:{isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a,isValidPrivateKey:s,randomPrivateKey:a,normPrivateKeyToScalar:h=>$n(n,h),precompute(h=8,g=t.BASE){return g.precompute(h,!1)}},lengths:o})}function O0(t,e,n={}){Wf(e),So(n,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});const r=n.randomBytes||Hc,o=n.hmac||((S,...P)=>Lh(e,S,ut(...P))),{Fp:s,Fn:i}=t,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=_0(t,n),g={prehash:!1,lowS:typeof n.lowS=="boolean"?n.lowS:!1,format:void 0,extraEntropy:!1},m="compact";function b(S){const P=a>>Zn;return S>P}function w(S,P){if(!i.isValidNot0(P))throw new Error(`invalid signature ${S}: out of range 1..Point.Fn.ORDER`);return P}function I(S,P){Ka(P);const R=h.signature,O=P==="compact"?R:P==="recovered"?R+1:void 0;return ot(S,O,`${P} signature`)}class y{constructor(P,R,O){this.r=w("r",P),this.s=w("s",R),O!=null&&(this.recovery=O),Object.freeze(this)}static fromBytes(P,R=m){I(P,R);let O;if(R==="der"){const{r:F,s:U}=St.toSig(ot(P));return new y(F,U)}R==="recovered"&&(O=P[0],R="compact",P=P.subarray(1));const j=i.BYTES,M=P.subarray(0,j),B=P.subarray(j,j*2);return new y(i.fromBytes(M),i.fromBytes(B),O)}static fromHex(P,R){return this.fromBytes(ms(P),R)}addRecoveryBit(P){return new y(this.r,this.s,P)}recoverPublicKey(P){const R=s.ORDER,{r:O,s:j,recovery:M}=this;if(M==null||![0,1,2,3].includes(M))throw new Error("recovery id invalid");if(a*Bh<R&&M>1)throw new Error("recovery id is ambiguous for h>1 curve");const F=M===2||M===3?O+a:O;if(!s.isValid(F))throw new Error("recovery id 2 or 3 invalid");const U=s.toBytes(F),H=t.fromBytes(ut(_h((M&1)===0),U)),q=i.inv(F),K=L(he("msgHash",P)),W=i.create(-K*q),G=i.create(j*q),V=t.BASE.multiplyUnsafe(W).add(H.multiplyUnsafe(G));if(V.is0())throw new Error("point at infinify");return V.assertValidity(),V}hasHighS(){return b(this.s)}toBytes(P=m){if(Ka(P),P==="der")return ms(St.hexFromSig(this));const R=i.toBytes(this.r),O=i.toBytes(this.s);if(P==="recovered"){if(this.recovery==null)throw new Error("recovery bit must be present");return ut(Uint8Array.of(this.recovery),R,O)}return ut(R,O)}toHex(P){return un(this.toBytes(P))}assertValidity(){}static fromCompact(P){return y.fromBytes(he("sig",P),"compact")}static fromDER(P){return y.fromBytes(he("sig",P),"der")}normalizeS(){return this.hasHighS()?new y(this.r,i.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return un(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return un(this.toBytes("compact"))}}const k=n.bits2int||function(P){if(P.length>8192)throw new Error("input is too large");const R=Zs(P),O=P.length*8-c;return O>0?R>>BigInt(O):R},L=n.bits2int_modN||function(P){return i.create(k(P))},C=vo(c);function T(S){return ja("num < 2^"+c,S,At,C),i.toBytes(S)}function x(S,P){return ot(S,void 0,"message"),P?ot(e(S),void 0,"prehashed message"):S}function v(S,P,R){if(["recovered","canonical"].some(W=>W in R))throw new Error("sign() legacy options not supported");const{lowS:O,prehash:j,extraEntropy:M}=_i(R,g);S=x(S,j);const B=L(S),F=$n(i,P),U=[T(F),T(B)];if(M!=null&&M!==!1){const W=M===!0?r(h.secretKey):M;U.push(he("extraEntropy",W))}const H=ut(...U),q=B;function K(W){const G=k(W);if(!i.isValidNot0(G))return;const V=i.inv(G),X=t.BASE.multiply(G).toAffine(),Z=i.create(X.x);if(Z===At)return;const ce=i.create(V*i.create(q+Z*F));if(ce===At)return;let Ie=(X.x===Z?0:2)|Number(X.y&Zn),Fe=ce;return O&&b(ce)&&(Fe=i.neg(ce),Ie^=1),new y(Z,Fe,Ie)}return{seed:H,k2sig:K}}function A(S,P,R={}){S=he("message",S);const{seed:O,k2sig:j}=v(S,P,R);return tb(e.outputLen,i.BYTES,o)(O,j)}function N(S){let P;const R=typeof S=="string"||bo(S),O=!R&&S!==null&&typeof S=="object"&&typeof S.r=="bigint"&&typeof S.s=="bigint";if(!R&&!O)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(O)P=new y(S.r,S.s);else if(R){try{P=y.fromBytes(he("sig",S),"der")}catch(j){if(!(j instanceof St.Err))throw j}if(!P)try{P=y.fromBytes(he("sig",S),"compact")}catch{return!1}}return P||!1}function D(S,P,R,O={}){const{lowS:j,prehash:M,format:B}=_i(O,g);if(R=he("publicKey",R),P=x(he("message",P),M),"strict"in O)throw new Error("options.strict was renamed to lowS");const F=B===void 0?N(S):y.fromBytes(he("sig",S),B);if(F===!1)return!1;try{const U=t.fromBytes(R);if(j&&F.hasHighS())return!1;const{r:H,s:q}=F,K=L(P),W=i.inv(q),G=i.create(K*W),V=i.create(H*W),X=t.BASE.multiplyUnsafe(G).add(U.multiplyUnsafe(V));return X.is0()?!1:i.create(X.x)===H}catch{return!1}}function E(S,P,R={}){const{prehash:O}=_i(R,g);return P=x(P,O),y.fromBytes(S,"recovered").recoverPublicKey(P).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:t,sign:A,verify:D,recoverPublicKey:E,Signature:y,hash:e})}function D0(t){const e={a:t.a,b:t.b,p:t.Fp.ORDER,n:t.n,h:t.h,Gx:t.Gx,Gy:t.Gy},n=t.Fp;let r=t.allowedPrivateKeyLengths?Array.from(new Set(t.allowedPrivateKeyLengths.map(i=>Math.ceil(i/2)))):void 0;const o=xn(e.n,{BITS:t.nBitLength,allowedLengths:r,modFromBytes:t.wrapPrivateKey}),s={Fp:n,Fn:o,allowInfinityPoint:t.allowInfinityPoint,endo:t.endo,isTorsionFree:t.isTorsionFree,clearCofactor:t.clearCofactor,fromBytes:t.fromBytes,toBytes:t.toBytes};return{CURVE:e,curveOpts:s}}function F0(t){const{CURVE:e,curveOpts:n}=D0(t),r={hmac:t.hmac,randomBytes:t.randomBytes,lowS:t.lowS,bits2int:t.bits2int,bits2int_modN:t.bits2int_modN};return{CURVE:e,curveOpts:n,hash:t.hash,ecdsaOpts:r}}function M0(t,e){const n=e.Point;return Object.assign({},e,{ProjectivePoint:n,CURVE:Object.assign({},t,dh(n.Fn.ORDER,n.Fn.BITS))})}function j0(t){const{CURVE:e,curveOpts:n,hash:r,ecdsaOpts:o}=F0(t),s=B0(e,n),i=O0(s,r,o);return M0(t,i)}function U0(t,e){const n=r=>j0({...t,hash:r});return{...n(e),create:n}}const Qc={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},$0={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},xd=BigInt(2);function H0(t){const e=Qc.p,n=BigInt(3),r=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=t*t*t%e,d=l*l*t%e,u=fe(d,n,e)*d%e,f=fe(u,n,e)*d%e,h=fe(f,xd,e)*l%e,g=fe(h,o,e)*h%e,m=fe(g,s,e)*g%e,b=fe(m,a,e)*m%e,w=fe(b,c,e)*b%e,I=fe(w,a,e)*m%e,y=fe(I,n,e)*d%e,k=fe(y,i,e)*g%e,L=fe(k,r,e)*l%e,C=fe(L,xd,e);if(!za.eql(za.sqr(C),t))throw new Error("Cannot find square root");return C}const za=xn(Qc.p,{sqrt:H0}),Vt=U0({...Qc,Fp:za,lowS:!0,endo:$0},Jf);function q0(t,e,n){const r=jc.digest(e instanceof Uint8Array?e:e.subarray());if(Js(r))return r.then(({digest:o})=>(n?.signal?.throwIfAborted(),Vt.sign(o,t).toDERRawBytes())).catch(o=>{throw o.name==="AbortError"?o:new wd(String(o))});try{return Vt.sign(r.digest,t).toDERRawBytes()}catch(o){throw new wd(String(o))}}function K0(t,e,n,r){const o=jc.digest(n instanceof Uint8Array?n:n.subarray());if(Js(o))return o.then(({digest:s})=>(r?.signal?.throwIfAborted(),Vt.verify(e,s,t))).catch(s=>{throw s.name==="AbortError"?s:new yd(String(s))});try{return r?.signal?.throwIfAborted(),Vt.verify(e,o.digest,t)}catch(s){throw new yd(String(s))}}class Dh{type="secp256k1";raw;_key;constructor(e){this._key=X0(e),this.raw=G0(this._key)}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){return K0(this._key,n,e,r)}}class z0{type="secp256k1";raw;publicKey;constructor(e,n){this.raw=V0(e),this.publicKey=new Dh(n??Y0(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){return q0(this.raw,e,n)}}function W0(t){return new z0(t)}function Fh(t){return new Dh(t)}function G0(t){return Vt.ProjectivePoint.fromHex(t).toRawBytes(!0)}function V0(t){try{return Vt.getPublicKey(t,!0),t}catch(e){throw new Pf(String(e))}}function X0(t){try{return Vt.ProjectivePoint.fromHex(t),t}catch(e){throw new Tf(String(e))}}function Y0(t){try{return Vt.getPublicKey(t,!0)}catch(e){throw new Pf(String(e))}}async function Z0(t,e){return Ub()}function Wa(t,e){const{Type:n,Data:r}=wn.decode(t),o=r??new Uint8Array;switch(n){case de.RSA:return E0(o,e);case de.Ed25519:return Sh(o);case de.secp256k1:return Fh(o);case de.ECDSA:return Kf(o);default:throw new Gs}}function J0(t){const{Type:e,Data:n}=wn.decode(t.digest),r=n??new Uint8Array;switch(e){case de.Ed25519:return Sh(r);case de.secp256k1:return Fh(r);case de.ECDSA:return Kf(r);default:throw new Gs}}function ni(t){return wn.encode({Type:de[t.type],Data:t.raw})}function Q0(t){const e=xs.decode(t),n=e.Data??new Uint8Array;switch(e.Type){case de.RSA:return S0(n);case de.Ed25519:return jb(n);case de.secp256k1:return W0(n);case de.ECDSA:return Ty(n);default:throw new Gs}}function ev(t){return xs.encode({Type:de[t.type],Data:t.raw})}const Mh=Symbol.for("nodejs.util.inspect.custom"),tv=114;class el{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Nf]=!0;toString(){return this.string==null&&(this.string=Be.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return le.createV1(tv,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return at(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return at(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Mh](){return`PeerId(${this.toString()})`}}class jh extends el{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}}class Uh extends el{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}}class $h extends el{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}}const nv=2336;class Hh{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=wo.digest(ye(this.url))}[Mh](){return`PeerId(${this.url})`}[Nf]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return le.createV1(nv,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=ee(e)),e.toString()===this.toString())}}const rv=114,Ed=2336;function ov(t,e){let n;if(t.charAt(0)==="1"||t.charAt(0)==="Q")n=_f(Be.decode(`z${t}`));else{if(t.startsWith("k51qzi5uqu5")||t.startsWith("kzwfwjn5ji4")||t.startsWith("k2k4r8")||t.startsWith("bafz"))return sv(le.parse(t));throw new it('Please pass a multibase decoder for strings that do not start with "1" or "Q"')}return qh(n)}function dr(t){if(t.type==="Ed25519")return new Uh({multihash:t.toCID().multihash,publicKey:t});if(t.type==="secp256k1")return new $h({multihash:t.toCID().multihash,publicKey:t});if(t.type==="RSA")return new jh({multihash:t.toCID().multihash,publicKey:t});throw new Gs}function qh(t){if(av(t))return new jh({multihash:t});if(iv(t))try{const e=J0(t);if(e.type==="Ed25519")return new Uh({multihash:t,publicKey:e});if(e.type==="secp256k1")return new $h({multihash:t,publicKey:e})}catch{const n=ee(t.digest);return new Hh(new URL(n))}throw new $m("Supplied PeerID Multihash is invalid")}function sv(t){if(t?.multihash==null||t.version==null||t.version===1&&t.code!==rv&&t.code!==Ed)throw new Um("Supplied PeerID CID is invalid");if(t.code===Ed){const e=ee(t.multihash.digest);return new Hh(new URL(e))}return qh(t.multihash)}function iv(t){return t.code===wo.code}function av(t){return t.code===jc.code}class Kh extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}}class cv extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}}class Tr extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}}class Ad extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}}class lv extends Event{data;constructor(e,n){super("message",n),this.data=e}}class tl extends Event{error;local;constructor(e,n,r){super("close",r),this.error=n,this.local=e}}class dv extends tl{constructor(e,n){super(!0,e,n)}}class uv extends tl{constructor(e,n){super(!1,e,n)}}const fv=t=>t/2**32|0,hv=t=>t>>>0;function pv(t,e,n,r){const o=fv(n),s=hv(n);t.setUint32(e,r?s:o,r),t.setUint32(e+4,r?o:s,r)}function Ga(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}const Va=t=>t?`"${t}" `:"";function Nt(t,e=""){if(typeof t!="number")throw new TypeError(Va(e)+"expected number, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError(Va(e)+"expected integer >= 0, got "+t);return t}function Lt(t,e,n=""){if(Ga(t)&&(e===void 0||t.length===e))return t;e!==void 0&&Nt(e,"length");const r=Ga(t),o=e!==void 0?` of length ${e}`:"",s=r?`length=${t.length}`:`type=${typeof t}`,i=Va(n)+"expected Uint8Array"+o+", got "+s;throw r?new RangeError(i):new TypeError(i)}function nl(t){if(typeof t!="function"||typeof t.create!="function")throw new TypeError("expected hash wrapped by utils.createHasher");if(Nt(t.outputLen),Nt(t.blockLen),t.outputLen<1||t.blockLen<1)throw new Error("hash blockLen / outputLen must be >= 1")}const gv=(t,e)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError((e==="object"?"":`"${e}" `)+"expected object, got type="+typeof t)},kd=(t,e)=>{gv(t,e);const n=Object.getPrototypeOf(t);if(n!==Object.prototype&&n!==null)throw new TypeError(`"${e}" expected plain object`);if(Object.hasOwn(t,"__proto__"))throw new TypeError(`"${e}.__proto__" is not allowed`)};function Es(t,e=!0){if(t.destroyed)throw new Error("hash was destroyed");if(e&&t.finished)throw new Error("digest() was already called")}function zh(t,e){Lt(t,void 0,"output");const n=e.outputLen;if(!(t.length>=n))throw new RangeError('"output" expected length >= '+n)}function VI(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function hn(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Oi(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function lt(t,e){return t<<32-e|t>>>e}function XI(t,e){return t<<e|t>>>32-e>>>0}const mv=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function wv(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function yv(t){for(let e=0;e<t.length;e++)t[e]=wv(t[e]);return t}const YI=mv?t=>t:yv,Wh=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",bv=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function rl(t){if(Lt(t),Wh)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=bv[t[n]];return e}function Cd(t){return t>=48&&t<=57?t-48:t>=65&&t<=70?t-55:t>=97&&t<=102?t-87:void 0}function Gh(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(Wh)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=Cd(t.charCodeAt(s)),a=Cd(t.charCodeAt(s+1));if(i===void 0||a===void 0){const c=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function vv(t){const e=globalThis;if(typeof e.scheduler?.yield=="function"){const n=e.scheduler.yield();return t&&n.catch(t),n}return new Promise(n=>e.setTimeout(n,0))}async function ZI(t,e,n,r){if(Nt(t,"iters"),Nt(e,"tick"),typeof n!="function")throw new TypeError("callback must be a function");let o=Date.now();for(let s=0;s<t;s++){n(s);const i=Date.now()-o;i>=0&&i<e||(await vv(r),o=Date.now())}}function Sv(t){if(typeof t!="string")throw new TypeError("string expected");const e=new TextEncoder().encode(t);try{return new Uint8Array(e)}finally{hn(e)}}function JI(t,e=""){return typeof t=="string"?Sv(t):Lt(t,void 0,e)}function xv(t,e,n="opts"){return kd(t,"defaults"),e!==void 0&&kd(e,n),Object.assign(Object.create(null),t,e)}function Ev(t,e={}){if(typeof t!="function")throw new TypeError('"hashCons" expected function, got type='+typeof t);e=xv({},e,"info");const n=(o,s)=>t(s).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Av(t=32){Nt(t,"bytesLength");const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}const kv=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Cv(t,e,n){return t&e^~t&n}function Iv(t,e,n){return t&e^t&n^e&n}class Rv{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Oi(this.buffer)}update(e){Es(this),Lt(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;let i=!1;for(let a=0;a<s;){const c=Math.min(o-this.pos,s-a);if(c===o){const l=Oi(e);for(;o<=s-a;a+=o)this.process(l,a);i=!0;continue}r.set(a===0&&c===s?e:e.subarray(a,a+c),this.pos),this.pos+=c,a+=c,this.pos===o&&(this.process(n,0),this.pos=0,i=!0)}return this.length+=e.length,i&&this.roundClean(),this}digestInto(e){Es(this),zh(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,n.fill(0,i),this.padOffset>o-i&&(this.process(r,0),n.fill(0)),pv(r,o-8,this.length*8,s),this.process(r,0),this.roundClean();const a=e===n?r:Oi(e),c=this.outputLen,l=c/4,d=this.get();if(c%4||l>d.length)throw new Error("invalid outputLen");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneIntoMeta(e){const{buffer:n,length:r,finished:o,destroyed:s,pos:i}=this;return e.destroyed=s,e.finished=o,e.length=r,e.pos=i,i&&e.buffer.set(n),e}clone(){return this._cloneInto()}}const Tv=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Pv=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Mt=new Uint32Array(64);class Nv extends Rv{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(e,n){super(64,e,8,!1),this.A=n[0]|0,this.B=n[1]|0,this.C=n[2]|0,this.D=n[3]|0,this.E=n[4]|0,this.F=n[5]|0,this.G=n[6]|0,this.H=n[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[e,n,r,o,s,i,a,c]}set(e,n,r,o,s,i,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}_cloneInto(e){return(e||=new this.constructor).set(...this.get()),this._cloneIntoMeta(e)}process(e,n){for(let u=0;u<16;u++,n+=4)Mt[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const f=Mt[u-15],h=Mt[u-2],g=lt(f,7)^lt(f,18)^f>>>3,m=lt(h,17)^lt(h,19)^h>>>10;Mt[u]=m+Mt[u-7]+g+Mt[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){const f=lt(a,6)^lt(a,11)^lt(a,25),h=d+f+Cv(a,c,l)+Pv[u]+Mt[u]|0,m=(lt(r,2)^lt(r,13)^lt(r,22))+Iv(r,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=r,r=h+m|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,c,l,d)}roundClean(){hn(Mt)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),hn(this.buffer)}}class Lv extends Nv{constructor(){super(32,Tv)}}const Di=Ev(()=>new Lv,kv(1));function Vh(t,e,n=()=>{}){if(!Array.isArray(t))throw new TypeError(`"${e}" expected array, got type=${typeof t}`);for(let r=0;r<t.length;r++)n(t[r],`${e}[${r}]`);return t}const Jn=(t,e,n)=>Lt(t,e,n),Xh=Nt;function Qn(t,e="object"){if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(e==="object"?"expected valid options object":`"${e}" expected object, got type=${typeof t}`);return t}function Yr(t,e){if(typeof t!="function")throw new TypeError(`"${e}" is invalid: expected function, got ${typeof t}`);return t}const Bv=rl,_v=t=>Gh(t),Yh=Ga,Zh=t=>Av(t),As=BigInt(0),Id=BigInt(1),Ov=t=>t?`"${t}" `:"";function ri(t,e=""){if(typeof t!="boolean")throw new TypeError(Ov(e)+"expected boolean, got type="+typeof t);return t}function Dv(t){if(typeof t=="bigint"){if(!pn(t))throw new RangeError("positive bigint expected, got "+t)}else Xh(t);return t}function Xa(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){const n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function Jh(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?As:BigInt("0x"+t)}function Qh(t){return Jh(rl(t))}function ks(t){return Jh(rl(so(Lt(t)).reverse()))}function ep(t,e){if(Nt(e),e===0)throw new Error("zero output length is invalid");t=Dv(t);const n=e*2,r=t.toString(16);if(r.length>n)throw new RangeError("number is too large");return Gh(r.padStart(n,"0"))}function tp(t,e){return ep(t,e).reverse()}function so(t){return Uint8Array.from(Jn(t))}function pn(t){return typeof t=="bigint"&&As<=t}function np(t,e,n){return pn(t)&&pn(e)&&pn(n)&&e<=t&&t<n}function Zr(t,e,n,r){if(!np(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Fv(t){if(t<As)throw new Error("expected non-negative bigint, got "+t);return t===As?0:t.toString(2).length}const Mv=t=>(Xa(t,"n"),(Id<<BigInt(t))-Id);function Cs(t,e={},n={},r="object"){Qn(t,r),Qn(e,"fields"),Qn(n,"optFields");function o(i,a,c){const l=r==="object"?`param "${String(i)}"`:`"${r}.${String(i)}"`,d=t[i];if(!Object.hasOwn(t,i)&&(c?d!==void 0:a!=="function"))throw new TypeError(`${l} is invalid: expected own property`);if(c&&d===void 0)return;const u=typeof d;if(u!==a||d===null)throw new TypeError(`${l} is invalid: expected ${a}, got ${u}`)}const s=(i,a)=>Object.entries(i).forEach(([c,l])=>o(c,l,a));s(e,!1),s(n,!0)}const xe=BigInt(0),ae=BigInt(1),ln=BigInt(2),rp=BigInt(3),ol=BigInt(4),op=BigInt(5),jv=BigInt(7),sp=BigInt(8),Uv=BigInt(9),$v=BigInt(15),ip=BigInt(16),Hv=BigInt("0x10000000000000000");function ie(t,e){if(e<=xe)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=xe?n:e+n}function qv(t,e,n){if(n<=ae)throw new Error("pow: expected modulus > 1, got "+n);if(typeof e!="bigint")throw new TypeError("invalid exponent: expected bigint, got "+typeof e);if(e<xe)throw new Error("invalid exponent, negatives unsupported");if(e===xe)return ae;if(e===ae)return t;let r=t%n;if(r<xe&&(r+=n),e<Hv){let a=ae;for(;e>xe;)e&ae&&(a=a*r%n),r=r*r%n,e>>=ae;return a}const o=[];for(;e>xe;)o.push(Number(e&$v)),e>>=ol;const s=new Array(16);s[0]=ae,s[1]=r;for(let a=2;a<16;a++)s[a]=s[a-1]*r%n;let i=s[o[o.length-1]];for(let a=o.length-2;a>=0;a--){i=i*i%n,i=i*i%n,i=i*i%n,i=i*i%n;const c=o[a];c!==0&&(i=i*s[c]%n)}return i}function rt(t,e,n){if(n<=ae)throw new Error("pow2: expected modulus > 1, got "+n);if(e<xe)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >xe;)r*=r,r%=n;return r}function Rd(t,e){if(t===xe)throw new Error("invert: expected non-zero number");if(e<=ae)throw new Error("invert: expected modulus > 1, got "+e);let n=ie(t,e),r=e,o=xe,s=ae;for(;n!==xe;){const a=r/n,c=r-n*a,l=o-s*a;r=n,n=c,o=s,s=l}if(r!==ae)throw new Error("invert: does not exist");return ie(o,e)}function sl(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function il(t,e){if((t&ae)===xe)throw new Error(e+": expected odd modulus, got "+t)}function ap(t,e){const n=t,r=(n.ORDER+ae)/ol,o=n.pow(e,r);return sl(n,o,e),o}function Kv(t,e){const n=t,r=(n.ORDER-op)/sp,o=n.mul(e,ln),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,ln),s),c=n.mul(i,n.sub(a,n.ONE));return sl(n,c,e),c}function zv(t){const e=al(t),n=cp(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+jv)/ip;return((a,c)=>{const l=a;let d=l.pow(c,i),u=l.mul(d,r);const f=l.mul(d,o),h=l.mul(d,s),g=l.eql(l.sqr(u),c),m=l.eql(l.sqr(f),c);d=l.cmov(d,u,g),u=l.cmov(h,f,m);const b=l.eql(l.sqr(u),c),w=l.cmov(d,u,b);return sl(l,w,c),w})}function cp(t){if(t<rp)throw new Error("sqrt is not defined for small field");il(t,"tonelliShanks");let e=t-ae,n=0;for(;e%ln===xe;)e/=ln,n++;let r=ln;const o=al(t);for(;Is(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ap;let s=o.pow(r,e);const i=(e+ae)/ln;return function(c,l){const d=c;if(d.is0(l))return l;if(Is(d,l)!==1)throw new Error("Cannot find square root");let u=n,f=d.mul(d.ONE,s),h=d.pow(l,e),g=d.pow(l,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))throw new Error("Cannot find square root: probably non-prime P");let m=1,b=d.sqr(h);for(;!d.eql(b,d.ONE);)if(m++,b=d.sqr(b),m===u)throw new Error("Cannot find square root");const w=ae<<BigInt(u-m-1),I=d.pow(f,w);u=m,f=d.sqr(I),h=d.mul(h,f),g=d.mul(g,I)}return g}}function Wv(t){return il(t,"Fp.sqrt"),t%ol===rp?ap:t%sp===op?Kv:t%ip===Uv?zv(t):cp(t)}const Gv=(t,e)=>(ie(t,e)&ae)===ae,Vv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function io(t){if(Qn(t,"field"),typeof t.ORDER!="bigint")throw new TypeError('param "ORDER" is invalid: expected bigint, got '+typeof t.ORDER);Xa(t.BYTES,"BYTES"),Xa(t.BITS,"BITS");for(const e of Vv)Yr(t[e],"field."+e);if(t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=ae)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function lp(t,e,n=!1){io(t),Vh(e,"nums"),ri(n,"passZero");const r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),s=e.reduce((a,c,l)=>r.is0(c)?a:(o[l]=a,r.mul(a,c)),r.ONE),i=r.inv(s);return e.reduceRight((a,c,l)=>r.is0(c)?a:(o[l]=r.mul(a,o[l]),r.mul(a,c)),i),o}function Is(t,e){io(t);const n=t;il(n.ORDER,"FpLegendre");const r=(n.ORDER-ae)/ln,o=n.pow(e,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function Xv(t,e){if(e!==void 0&&Xh(e),t<=xe)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);const n=Fv(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected nBitLength (${e}) >= bitLen(n) (${n})`);const r=e!==void 0?e:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const Td=new WeakMap;class Pd{ORDER;BITS;BYTES;isLE;ZERO=xe;ONE=ae;_lengths;_mod;constructor(e,n={}){if(e<=ae)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));const{nBitLength:o,nByteLength:s}=Xv(e,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(e){return ie(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return xe<=e&&e<this.ORDER}is0(e){return e===xe}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&ae)===ae}neg(e){return ie(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return ie(e*e,this.ORDER)}add(e,n){return ie(e+n,this.ORDER)}sub(e,n){return ie(e-n,this.ORDER)}mul(e,n){return ie(e*n,this.ORDER)}pow(e,n){return qv(e,n,this.ORDER)}div(e,n){return ie(e*Rd(n,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return Rd(e,this.ORDER)}sqrt(e){let n=Td.get(this);return n||Td.set(this,n=Wv(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?tp(e,this.BYTES):ep(e,this.BYTES)}fromBytes(e,n=!1){Jn(e);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);const l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?ks(e):Qh(e);if(a&&(c=ie(c,i)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return lp(this,e,!0)}cmov(e,n,r){return ri(r,"condition"),r?n:e}}function al(t,e={}){return Object.freeze(Pd.prototype),new Pd(t,e)}const cl=BigInt(0),ao=BigInt(1),Yv=BigInt(4),Fi=16,Nd=128,Zv=5,Ld=2**31;function ll(t){const e=t;if(typeof e!="function")throw new TypeError('"Point" expected constructor, got type='+typeof t);Yr(e.fromAffine,"Point.fromAffine"),Yr(e.fromBytes,"Point.fromBytes"),Yr(e.fromHex,"Point.fromHex"),Qn(e.BASE,"Point.BASE"),Qn(e.ZERO,"Point.ZERO"),io(e.Fp),io(e.Fn)}function Jv(t,e){ll(t),dp(e,t);const n=lp(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Qv(t,e,n=1){if(!Number.isSafeInteger(t)||t<n||t>e)throw new Error("invalid window size, expected ["+n+".."+e+"], got W="+t)}function eS(t,e){const n=t*(4*e+128);if(n>Ld)throw new Error("invalid window size: table would need ~"+Math.ceil(n/2**20)+" MiB, max "+Ld/2**20+" MiB")}function tS(t,e){if(t!==void 0){Yr(t,"randomBytes");try{const n=t(e);if(!Yh(n)||n.length!==e)return}catch{return}return t}}function dp(t,e){Vh(t,"points"),t.forEach((n,r)=>{if(!(n instanceof e))throw new Error("invalid point at index "+r)})}function nS(t,e,n){if(!Array.isArray(t))throw new Error("array of scalars expected");t.forEach((r,o)=>{if(!(n===void 0?e.isValid(r):pn(r)&&r<n))throw new Error("invalid scalar at index "+o)})}const up=new WeakMap;function Mi(t){return up.get(t)||1}function rS(t,e){const n=t.double(),r=[t];for(let o=1;o<e;o++)r.push(r[o-1].add(n));return r}function oS(t,e){const n=2**e,r=n/2,o=BigInt(n-1),s=[];for(;t>cl;){let i=0;t&ao&&(i=Number(t&o),i>=r&&(i-=n),t-=BigInt(i)),s.push(i),t>>=ao}return s}function sS(t,e,n){const r=2**e,o=r/2,s=BigInt(r-1),i=BigInt(e),a=[];for(let c=0;c<n;c++){let l=Number(t&s);t>>=i,l>o&&(l-=r,t+=ao),a.push(l)}if(t!==cl)throw new Error("invalid wnaf");return a}function iS(t,e,n){let r=0;for(const s of n)r=Math.max(r,s.length);let o=t;for(let s=r-1;s>=0;s--){s!==r-1&&(o=o.double());for(let i=0;i<n.length;i++){const a=n[i][s];if(a){const c=e[i][Math.abs(a)-1>>1];o=o.add(a<0?c.negate():c)}}}return o}class aS{Point;BASE;ZERO;randomBytes;wnafPrecomputes=new WeakMap;baseCanBeBlinded;bits;constructor(e,n){ll(e),this.randomBytes=tS(n,Fi),this.Point=e,this.BASE=e.BASE,this.ZERO=e.ZERO,this.bits=e.Fn.BITS}buildWnafTable(e,n,r){const o=Math.ceil(r/n)+1,s=2**(n-1),i=[];let a=e;for(let c=0;c<o;c++){let l=a;for(let d=0;d<s;d++)i.push(l),l=l.add(a);a=i[i.length-1].double()}return{W:n,bits:r,windows:o,comp:i}}wnafCachedCT(e,n){const{W:r,windows:o,comp:s}=e,i=2**(r-1),a=sS(n,r,o);let c=this.ZERO,l=this.BASE;for(let d=0;d<o;d++){const u=a[d],f=d*i,h=Math.abs(u)-1;let g=s[f];for(let b=1;b<i;b++)g=b===h?s[f+b]:g;const m=g.negate();u===0?l=l.add(s[f]):c=c.add(u<0?m:g)}return{p:c,f:l}}getWnafPrecomputes(e,n,r,o){let s=this.wnafPrecomputes.get(n),i=s?.find(a=>a.W===e&&a.bits===r);return i||(i=this.buildWnafTable(n,e,r),typeof o=="function"&&(i={...i,comp:o(i.comp)}),s||(s=[],this.wnafPrecomputes.set(n,s)),s.push(i)),i}assertPoint(e){if(!(e instanceof this.Point))throw new TypeError('"point" expected Point instance, got type='+typeof e)}validateMulInput(e,n){if(this.assertPoint(e),!np(n,ao,this.Point.Fn.ORDER))throw new Error("invalid scalar")}runCT(e,n,r,o){const s=Mi(e);return s===1?this.fixedWindowCT(e,n,r):this.wnafCachedCT(this.getWnafPrecomputes(s,e,r,o),n)}mulCT(e,n,r){return this.validateMulInput(e,n),this.runCT(e,n,this.bits,r)}mulCTBlinded(e,n,r){if(this.validateMulInput(e,n),this.randomBytes===void 0)throw new Error("randomBytes is required for scalar blinding");const o=this.Point.Fn.BITS+Nd,s=this.randomBytes(Fi);if(!Yh(s)||s.length!==Fi)throw new Error("randomBytes returned invalid byte array");s[0]=s[0]&63|128;const i=n+Qh(s)*this.Point.Fn.ORDER;return this.runCT(e,i,o,r)}fixedWindowCT(e,n,r){const o=Zv,s=1<<o,i=Mv(o),a=new Array(s);a[0]=this.ZERO;for(let d=1;d<s;d++)a[d]=a[d-1].add(e);const c=Math.ceil(r/o);let l=this.ZERO;for(let d=c-1;d>=0;d--){if(d!==c-1)for(let h=0;h<o;h++)l=l.double();const u=Number(n>>BigInt(d*o)&i);let f=a[0];for(let h=1;h<s;h++)f=h===u?a[h]:f;l=l.add(f)}return{p:l,f:l}}shouldBlind(e,n){return this.randomBytes===void 0?!1:n===ao?!0:e!==this.BASE?!1:(this.baseCanBeBlinded===void 0&&(this.baseCanBeBlinded=this.mulUnsafe(this.BASE,this.Point.Fn.ORDER).is0()),this.baseCanBeBlinded)}mulSecret(e,n,r,o){return this.shouldBlind(e,r)?this.mulCTBlinded(e,n,o):this.mulCT(e,n,o)}mulUnsafe(e,n,r){if(this.assertPoint(e),!pn(n))throw new Error("invalid scalar");const o=Mi(e);if(o===1||n>=this.Point.Fn.ORDER)return cS(this.Point,[e],[n],!0);const s=this.getWnafPrecomputes(o,e,this.bits,r);return this.wnafCachedCT(s,n).p}setWindowSize(e,n){this.assertPoint(e),Qv(n,this.bits);const r=Math.ceil((this.bits+Nd)/n)+1;eS(r*2**(n-1),this.Point.Fp.BYTES),up.set(e,n),this.wnafPrecomputes.delete(e)}hasWindowSize(e){return Mi(e)!==1}}function cS(t,e,n,r=!1){if(ll(t),dp(e,t),ri(r,"allowOversized"),nS(n,t.Fn,r?t.Fn.ORDER**Yv:void 0),e.length!==n.length)throw new Error("arrays of points and scalars must have equal length");const o=e.map(i=>rS(i,4)),s=n.map(i=>oS(i,4));return iS(t.ZERO,o,s)}function Bd(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return io(e),e}else return al(t,{isLE:n})}function lS(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);Cs(n);for(const c of["p","n","h"]){const l=e[c];if(!(pn(l)&&l!==cl))throw new Error(`CURVE.${c} must be positive bigint`)}const o=Bd(e.p,n.Fp,r),s=Bd(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(const c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function dS(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const Oo=BigInt(0),Do=BigInt(1),Fo=BigInt(2),uS=BigInt(4),_d=BigInt(8);function fS(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function hS(t,e={}){Cs(e,{},{},"extraOpts");const n=e,r=lS("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;if(Is(o,i.a)!==1)throw new Error("edwards: CURVE.a must be a square in Fp for complete addition formulas");if(Is(o,i.d)!==-1)throw new Error("edwards: CURVE.d must be a non-square in Fp for complete addition formulas");Cs(n,{},{uvRatio:"function",randomBytes:"function"});const c=n.randomBytes===void 0?Zh:n.randomBytes,l=Fo<<BigInt(o.BYTES*8)-Do;function d(I){if(!o.isOdd)throw new Error("Field does not have .isOdd()");return o.isOdd(I)}const u=n.uvRatio===void 0?(I,y)=>{try{return{isValid:!0,value:o.sqrt(o.div(I,y))}}catch{return{isValid:!1,value:Oo}}}:n.uvRatio;if(!fS(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");const f=o.eql(i.a,o.neg(o.ONE))?I=>o.neg(I):o.eql(i.a,o.ONE)?I=>I:I=>o.mul(i.a,I);function h(I,y,k=!1){const L=k?Do:Oo;return Zr("coordinate "+I,y,L,l),y}function g(I){if(!(I instanceof m))throw new Error("EdwardsPoint expected")}class m{static BASE=new m(i.Gx,i.Gy,o.ONE,o.mul(i.Gx,i.Gy));static ZERO=new m(o.ZERO,o.ONE,o.ONE,o.ZERO);static Fp=o;static Fn=s;X;Y;Z;T;constructor(y,k,L,C){this.X=h("x",y),this.Y=h("y",k),this.Z=h("z",L,!0),this.T=h("t",C),Object.freeze(this)}static CURVE(){return i}static fromAffine(y){if(y instanceof m)throw new Error("extended point not allowed");const{x:k,y:L}=y||{};return h("x",k),h("y",L),new m(k,L,o.ONE,o.mul(k,L))}static fromBytes(y,k=!1){const L=o.BYTES,{a:C,d:T}=i;y=so(Jn(y,L,"point")),ri(k,"zip215");const x=so(y),v=y[L-1];x[L-1]=v&-129;const A=ks(x),N=k?l:o.ORDER;Zr("point.y",A,Oo,N);const D=o.sqr(A),E=o.sub(D,o.ONE),S=o.sub(o.mulN(T,D),C);let{isValid:P,value:R}=u(E,S);if(!P)throw new Error("bad point: invalid y coordinate");const O=d(R),j=(v&128)!==0;if(!k&&o.is0(R)&&j)throw new Error("bad point: x=0 and x_0=1");return j!==O&&(R=o.neg(R)),m.fromAffine({x:R,y:A})}static fromHex(y,k=!1){return m.fromBytes(_v(y),k)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(y=6,k=!0){return w.setWindowSize(this,y),k||this.multiply(Fo),this}assertValidity(){const y=this,{a:k,d:L}=i;if(y.is0())throw new Error("bad point: ZERO");const{X:C,Y:T,Z:x,T:v}=y,A=o.sqr(C),N=o.sqr(T),D=o.sqr(x),E=o.sqr(D),S=o.mul(A,k),P=o.mul(o.add(S,N),D),R=o.add(E,o.mul(L,o.mul(A,N)));if(!o.eql(P,R))throw new Error("bad point: equation left != right (1)");const O=o.mul(C,T),j=o.mul(x,v);if(!o.eql(O,j))throw new Error("bad point: equation left != right (2)")}equals(y){g(y);const{X:k,Y:L,Z:C}=this,{X:T,Y:x,Z:v}=y,A=o.mul(k,v),N=o.mul(T,C),D=o.mul(L,v),E=o.mul(x,C);return o.eql(A,N)&&o.eql(D,E)}is0(){return this.equals(m.ZERO)}negate(){return new m(o.neg(this.X),this.Y,this.Z,o.neg(this.T))}double(){const{X:y,Y:k,Z:L}=this,C=o.sqr(y),T=o.sqr(k),x=o.mul(o.sqr(L),Fo),v=f(C),A=o.addN(y,k),N=o.sub(o.subN(o.sqr(A),C),T),D=o.addN(v,T),E=o.subN(D,x),S=o.subN(v,T),P=o.mul(N,E),R=o.mul(D,S),O=o.mul(N,S),j=o.mul(E,D);return new m(P,R,j,O)}add(y){g(y);const{d:k}=i,{X:L,Y:C,Z:T,T:x}=this,{X:v,Y:A,Z:N,T:D}=y,E=o.mul(L,v),S=o.mul(C,A),P=o.mul(o.mulN(x,k),D),R=o.mul(T,N),O=o.sub(o.subN(o.mulN(o.addN(L,C),o.addN(v,A)),E),S),j=o.subN(R,P),M=o.addN(R,P),B=o.sub(S,f(E)),F=o.mul(O,j),U=o.mul(M,B),H=o.mul(O,B),q=o.mul(j,M);return new m(F,U,q,H)}subtract(y){return g(y),this.add(y.negate())}multiply(y){if(!s.isValidNot0(y))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:k,f:L}=w.mulSecret(this,y,a,b);return b([k,L])[0]}multiplyUnsafe(y){if(!s.isValid(y))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return y===Oo?m.ZERO:this.is0()||y===Do?this:w.mulUnsafe(this,y,b)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return w.mulUnsafe(this,i.n).is0()}toAffine(y){const k=this;let L=y;if(L!=null&&typeof L!="bigint")throw new TypeError('"invertedZ" expected bigint, got type='+typeof L);const{X:C,Y:T,Z:x}=k,v=k.is0();L==null&&(L=v?o.create(_d):o.inv(x));const A=o.mul(C,L),N=o.mul(T,L),D=o.mul(x,L);if(v)return{x:o.ZERO,y:o.ONE};if(!o.eql(D,o.ONE))throw new Error("invZ was invalid");return{x:A,y:N}}clearCofactor(){return a===Do?this:a===Fo?this.double():a===uS?this.double().double():a===_d?this.double().double().double():this.multiplyUnsafe(a)}toBytes(){const{x:y,y:k}=this.toAffine(),L=o.toBytes(k);return L[L.length-1]|=d(y)?128:0,L}toHex(){return Bv(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const b=I=>Jv(m,I),w=new aS(m,c);return w.bits>=6&&m.BASE.precompute(6),Object.freeze(m.prototype),Object.freeze(m),m}const nn=BigInt(0),Xe=BigInt(1),Mo=BigInt(2);function Od(t,e){return t+e-(e>>Xe<<Xe)}function pS(t){const e=BigInt(6)*t;return(n,r,o)=>{const s=r+o,a=((e+o-r)*n+r)%t;return{x_2:a,x_3:s-a}}}function gS(t){return Cs(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function",scalarMultBase:"function"}),Object.freeze({...t})}function mS(t){const e=gS(t),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=e.scalarMultBase,c=r==="x25519";if(!c&&r!=="x448")throw new Error("invalid type");const l=i===void 0?Zh:i,d=c?255:448,u=pS(n),f=c?32:56,h=BigInt(c?9:5),g=BigInt(c?121665:39081),m=c?Mo**BigInt(254):Mo**BigInt(447),b=c?BigInt(8)*(Mo**BigInt(251)-Xe):BigInt(4)*(Mo**BigInt(445)-Xe),w=m+b+Xe,I=R=>ie(R,n),y=k(h);function k(R){return tp(I(R),f)}function L(R){const O=so(Jn(R,f,"uCoordinate"));return c&&(O[31]&=127),I(ks(O))}function C(R){return ks(o(so(Jn(R,f,"scalar"))))}const T=new Set(c?[nn,Xe,n-Xe,BigInt("325606250916557431795983626356110631294008115727848805560023387167927233504"),BigInt("39382357235489614581723060781553021112529911719440698176882885853963445705823")]:[nn,Xe,n-Xe]);function x(R,O){const j=L(O);if(T.has(j))throw new Error("invalid private or public key received");const M=D(j,C(R));if(M===nn)throw new Error("invalid private or public key received");return k(M)}function v(R){if(a===void 0)return x(R,y);const O=C(R);Zr("scalar",O,m,w);const j=I(a(O));if(j===nn)throw new Error("invalid private or public key received");return k(j)}const A=v,N=x;function D(R,O){Zr("u",R,nn,n),Zr("scalar",O,m,w);const j=O,M=R;let B=Xe,F=nn,U=R,H=Xe;const q=j^j>>Xe;for(let G=BigInt(d-1);G>=nn;G--){const V=Od(n,q>>G);({x_2:B,x_3:U}=u(V,B,U)),{x_2:F,x_3:H}=u(V,F,H);const X=B+F,Z=I(X*X),ce=B-F,Ie=I(ce*ce),Fe=Z-Ie,re=U+H,We=U-H,Jt=I(We*X),Qt=I(re*ce),Me=Jt+Qt,en=Jt-Qt;U=I(Me*Me),H=I(M*I(en*en)),B=I(Z*Ie),F=I(Fe*(Z+I(g*Fe)))}const K=Od(n,j);({x_2:B,x_3:U}=u(K,B,U)),{x_2:F,x_3:H}=u(K,F,H);const W=s(F);return I(B*W)}const E={secretKey:f,publicKey:f,seed:f},S=R=>(R=R===void 0?l(f):R,Jn(R,E.seed,"seed"),R),P={randomSecretKey:S};return Object.freeze(E),Object.freeze(P),Object.freeze({keygen:dS(S,A),getSharedSecret:N,getPublicKey:A,scalarMult:x,scalarMultBase:v,utils:P,GuBytes:y.slice(),lengths:E})}const Dd=BigInt(0),wS=BigInt(1),Fd=BigInt(2),yS=BigInt(3),bS=BigInt(5),vS=BigInt(8),oi=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),SS={p:oi,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:vS,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function fp(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=oi,a=t*t%s*t%s,c=rt(a,Fd,s)*a%s,l=rt(c,wS,s)*t%s,d=rt(l,bS,s)*l%s,u=rt(d,e,s)*d%s,f=rt(u,n,s)*u%s,h=rt(f,r,s)*f%s,g=rt(h,o,s)*h%s,m=rt(g,o,s)*h%s,b=rt(m,e,s)*d%s;return{pow_p_5_8:rt(b,Fd,s)*t%s,b2:a}}function xS(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Md=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function ES(t,e){const n=oi,r=ie(e*e*e,n),o=ie(r*r*e,n),s=fp(t*o).pow_p_5_8;let i=ie(t*r*s,n);const a=ie(e*i*i,n),c=i,l=ie(i*Md,n),d=a===t,u=a===ie(-t,n),f=a===ie(-t*Md,n);return d&&(i=c),(u||f)&&(i=l),Gv(i,n)&&(i=ie(-i,n)),{isValid:d||u,value:i}}const jd=hS(SS,{uvRatio:ES}),jo=(()=>{const t=oi,e=n=>{const{pow_p_5_8:r,b2:o}=fp(n);return ie(rt(r,yS,t)*o,t)};return mS({P:t,type:"x25519",powPminus2:e,adjustScalarBytes:xS,scalarMultBase:n=>{const r=ie(n,jd.Fn.ORDER);if(r===Dd)return Dd;const o=jd.BASE.multiply(r);return ie((o.Z+o.Y)*e(ie(o.Z-o.Y,t)),t)}})})();class Ud{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(nl(e),Lt(n,void 0,"key"),this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("expected Hash instance");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?e.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),hn(o)}update(e){return Es(this),this.iHash.update(e),this}digestInto(e){Es(this),zh(e,this),this.finished=!0;const n=e.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a,canXOF:c}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.canXOF=c,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const hp=(()=>{const t=((e,n,r)=>new Ud(e,n).update(r).digest());return t.create=(e,n)=>new Ud(e,n),t})();function $d(){const t={};return t.promise=new Promise((e,n)=>{t.resolve=e,t.reject=n}),t}class Hd{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){const e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}}class ji{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Hd(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){const n=this.head;this.head=n.next=new Hd(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){const n=this.tail.next;this.tail.next=null,this.tail=n,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}}class AS extends Error{type;code;constructor(e,n){super(e??"The operation was aborted"),this.type="aborted",this.code=n??"ABORT_ERR"}}function kS(t={}){return CS(n=>{const r=n.shift();if(r==null)return{done:!0};if(r.error!=null)throw r.error;return{done:r.done===!0,value:r.value}},t)}function CS(t,e){e=e??{};let n=e.onEnd,r=new ji,o,s,i,a=$d();const c=async()=>{try{return r.isEmpty()?i?{done:!0}:await new Promise((b,w)=>{s=I=>{s=null,r.push(I);try{b(t(r))}catch(y){w(y)}return o}}):t(r)}finally{r.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=$d()})}},l=b=>s!=null?s(b):(r.push(b),o),d=b=>(r=new ji,s!=null?s({error:b}):(r.push({error:b}),o)),u=b=>{if(i)return o;if(e?.objectMode!==!0&&b?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:b})},f=b=>i?o:(i=!0,b!=null?d(b):l({done:!0})),h=()=>(r=new ji,f(),{done:!0}),g=b=>(f(b),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:g,push:u,end:f,get readableLength(){return r.size},onEmpty:async b=>{const w=b?.signal;if(w?.throwIfAborted(),r.isEmpty())return;let I,y;w!=null&&(I=new Promise((k,L)=>{y=()=>{L(new AS)},w.addEventListener("abort",y)}));try{await Promise.race([a.promise,I])}finally{y!=null&&w!=null&&w?.removeEventListener("abort",y)}}},n==null)return o;const m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(b){return m.throw(b),n!=null&&(n(b),n=void 0),{done:!0}},return(){return m.return(),n!=null&&(n(),n=void 0),{done:!0}},push:u,end(b){return m.end(b),n!=null&&(n(b),n=void 0),o},get readableLength(){return m.readableLength},onEmpty:b=>m.onEmpty(b)},o}class dl extends Error{name="TimeoutError";constructor(e,n){super(e,n),Error.captureStackTrace?.(this,dl)}}const qd=t=>t.reason??new DOMException("This operation was aborted.","AbortError");function IS(t,e){const{milliseconds:n,fallback:r,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e;let a,c;const d=new Promise((u,f)=>{if(typeof n!="number"||Math.sign(n)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${n}\``);if(i?.aborted){f(qd(i));return}if(i&&(c=()=>{f(qd(i))},i.addEventListener("abort",c,{once:!0})),t.then(u,f),n===Number.POSITIVE_INFINITY)return;const h=new dl;a=s.setTimeout.call(void 0,()=>{if(r){try{u(r())}catch(g){f(g)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${n} milliseconds`,f(h))},n)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}const RS=t=>{const e=t.addEventListener||t.on||t.addListener,n=t.removeEventListener||t.off||t.removeListener;if(!e||!n)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(t),removeListener:n.bind(t)}};function TS(t,e,n){let r;const o=new Promise((s,i)=>{if(n={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...n},!(n.count>=0&&(n.count===Number.POSITIVE_INFINITY||Number.isInteger(n.count))))throw new TypeError("The `count` option should be at least 0 or more");n.signal?.throwIfAborted();const a=[e].flat(),c=[],{addListener:l,removeListener:d}=RS(t),u=async(...h)=>{const g=n.multiArgs?h:h[0];if(n.filter)try{if(!await n.filter(g))return}catch(m){r(),i(m);return}c.push(g),n.count===c.length&&(r(),s(c))},f=(...h)=>{r(),i(n.rejectionMultiArgs?h:h[0])};r=()=>{for(const h of a)d(h,u);for(const h of n.rejectionEvents)a.includes(h)||d(h,f)};for(const h of a)l(h,u);for(const h of n.rejectionEvents)a.includes(h)||l(h,f);n.signal&&n.signal.addEventListener("abort",()=>{f(n.signal.reason)},{once:!0}),n.resolveImmediately&&s(c)});if(o.cancel=r,typeof n.timeout=="number"){const s=IS(o,{milliseconds:n.timeout});return s.cancel=()=>{r(),s.clear()},s}return o}function PS(t,e,n){typeof n=="function"&&(n={filter:n}),n={...n,count:1,resolveImmediately:!1};const r=TS(t,e,n),o=r.then(s=>s[0]);return o.cancel=r.cancel,o}class Rs extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"}class NS extends Error{static name="StreamClosedError";name="StreamClosedError"}function LS(t){return t.reason}function pp(t,e,n){if(e==null||t==null)return t;const r=LS;if(e.aborted)return t.catch(()=>{}),Promise.reject(r(e));let o;return Promise.race([t,new Promise((s,i)=>{o=()=>{i(r(e))},e.addEventListener("abort",o)})]).finally(()=>{o!=null&&e.removeEventListener("abort",o)})}const BS=Math.pow(2,20)*4;class gp extends zm{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??BS,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new se,this.writeBuffer=new se,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);const n=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",n);const r=o=>{this.onDrainPromise?.reject(o.error??new NS)};this.addEventListener("close",r)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),pp(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;const e=kS(),n=s=>{e.push(s.data)};this.addEventListener("message",n);const r=s=>{e.end(s.error)};this.addEventListener("close",r);const o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",n),this.removeEventListener("close",r),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new Tr(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(n){this.log("failed to send reset to remote - %e",n)}this.dispatchEvent(new dv(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");const e=new cv;this.dispatchEvent(new uv(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new tl))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0;const n=this.writeBuffer.byteLength;let r=0;for(;this.writeBuffer.byteLength>0;){const o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}const s=this.writeBuffer.sublist(0,o),i=new se(s);this.writeBuffer.consume(s.byteLength);const a=this.sendData(s);if(e=a.canSendMore,r+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",r,n,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}const e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new lv(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new Ad(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new Ad(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}}const _S=4194304;class Kd extends Error{static name="UnwrappedError";name="UnwrappedError"}class mp extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"}class OS extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"}class DS extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"}function FS(t){return typeof t?.closeRead=="function"}function MS(t){return typeof t?.close=="function"}function Ui(t){return FS(t)?t.remoteWriteStatus!=="writable"&&t.readBufferLength===0:MS(t)?t.status!=="open":!1}function jS(t){return t?.addEventListener!=null&&t?.removeEventListener!=null&&t?.send!=null&&t?.push!=null&&t?.log!=null}function US(t,e){const n=e?.maxBufferSize??_S,r=new se;let o,s=!1;if(!jS(t))throw new Kh("Argument should be a Stream or a Multiaddr");const i=d=>{if(r.append(d.data),r.byteLength>n){const u=r.byteLength;r.consume(r.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${n}`))}o?.resolve()};t.addEventListener("message",i);const a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};t.addEventListener("close",a);const c=()=>{o?.resolve()};t.addEventListener("remoteCloseWrite",c);const l={readBuffer:r,async read(d){if(s===!0)throw new Kd("Stream was unwrapped");if(Ui(t)){if(d?.bytes==null)return null;if(r.byteLength<d.bytes)throw t.log.error("closed after reading %d/%d bytes",r.byteLength,d.bytes),new Rs(`Unexpected EOF - stream closed after reading ${r.byteLength}/${d.bytes} bytes`)}const u=d?.bytes??1;for(o=Promise.withResolvers();;){if(r.byteLength>=u){o.resolve();break}if(await pp(o.promise,d?.signal),Ui(t)){if(r.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}const f=d?.bytes??r.byteLength;if(r.byteLength<f){if(Ui(t))throw t.log.error("closed while reading %d/%d bytes",r.byteLength,f),new Rs(`Unexpected EOF - stream closed while reading ${r.byteLength}/${f} bytes`);return l.read(d)}const h=r.sublist(0,f);return r.consume(f),h},async write(d,u){if(s===!0)throw new Kd("Stream was unwrapped");t.send(d)||await PS(t,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,t.removeEventListener("message",i),t.removeEventListener("close",a),t.removeEventListener("remoteCloseWrite",c),r.byteLength>0&&(t.log("stream unwrapped with %d unread bytes",r.byteLength),t.push(r))),t}};return l}function zd(t,e={}){const n=US(t,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=En(e.maxDataLength));const r=e?.lengthDecoder??Ah,o=e?.lengthEncoder??Wb;return{async read(i){let a=-1;const c=new se;for(;;){const d=await n.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=r(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new mp("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new DS(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new OS(`Message length too long - ${a} > ${e.maxDataLength}`);const l=await n.read({...i,bytes:a});if(l==null)throw t.log.error("tried to read %d bytes but the stream closed",a),new Rs(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw t.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Rs(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await n.write(new se(o(i.byteLength),i),a)},async writeV(i,a){const c=new se(...i.flatMap(l=>[o(l.byteLength),l]));await n.write(c,a)},unwrap(){return n.unwrap()}}}const $S=1024*1024*4,HS=1024*1024*4;class qS{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new se,this.maxBufferSize=e.maxBufferSize??$S,this.maxDataLength=e.maxDataLength??HS,this.lengthDecoder=e.lengthDecoder??Ah,this.encodingLength=e.encodingLength??En}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new Kh(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let n;try{n=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(n<0||n>this.maxDataLength)throw new mp("Invalid message length");const r=this.encodingLength(n),o=r+n;if(this.buffer.byteLength>=o){const s=this.buffer.sublist(r,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}}var KS={};const co=65535,Wd=co-16,xo=!!KS?.DUMP_SESSION_KEYS,Gd=16;function Ya(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}const Ts=t=>t?`"${t}" `:"";function Za(t,e=""){if(typeof t!="boolean")throw new TypeError(Ts(e)+"expected boolean, got type="+typeof t);return t}function er(t,e=""){if(typeof t!="number")throw new TypeError(Ts(e)+"expected number, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError(Ts(e)+"expected integer >= 0, got "+t);return t}function Se(t,e,n=""){if(Ya(t)&&(e===void 0||t.length===e))return t;e!==void 0&&er(e,"length");const r=Ya(t),o=e!==void 0?` of length ${e}`:"",s=r?`length=${t.length}`:`type=${typeof t}`,i=Ts(n)+"expected Uint8Array"+o+", got "+s;throw r?new RangeError(i):new TypeError(i)}const Vd=(t,e)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(e==="object"?"expected valid options object":`"${e}" expected object, got type=${typeof t}`)};function Xd(t,e=!0){if(t.destroyed)throw new Error("hash was destroyed");if(e&&t.finished)throw new Error("digest() was already called")}function zS(t,e){Se(t,void 0,"output");const n=e.outputLen;if(!(t.length>=n))throw new RangeError('"output" expected length >= '+n)}function kt(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Wt(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function WS(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const tr=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function GS(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function VS(t){for(let e=0;e<t.length;e++)t[e]=GS(t[e]);return t}const dn=tr?t=>t:VS;function XS(t,e){return!t.byteLength||!e.byteLength?!1:t.buffer===e.buffer&&t.byteOffset<e.byteOffset+e.byteLength&&e.byteOffset<t.byteOffset+t.byteLength}function YS(t,e){if(XS(t,e)&&t.byteOffset<e.byteOffset)throw new Error("complex overlap of input and output is not supported")}function ZS(t,e){return Vd(t,"defaults"),Vd(e,"opts"),Object.assign(t,e)}function JS(t,e){if(t=Se(t),e=Se(e),t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function QS(t,e,n){const r=e,o=(()=>[]),s=(a,c)=>r(c,...o(a)).update(a).digest(),i=r(new Uint8Array(t),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...c)=>r(a,...c),s}const ex=(t,e)=>{function n(r,...o){if(Se(r,void 0,"key"),t.nonceLength!==void 0){const u=o[0];Se(u,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength,i=t.nonceLength!==void 0?1:0;if(!t.withAAD){for(let u=i;u<o.length;u++)if(Ya(o[u]))throw new Error("AAD not supported")}t.withAAD&&o[i]!==void 0&&Se(o[i],void 0,"AAD");const a=e(r,...o),c=(u,f)=>{if(f!==void 0){if(u!==2)throw new Error("cipher output not supported");Se(f,void 0,"output")}};let l=!1;return{encrypt(u,f){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,Se(u,void 0,"data"),c(a.encrypt.length,f),a.encrypt(u,f)},decrypt(u,f){if(Se(u,void 0,"data"),s&&u.length<s)throw new Error('"ciphertext" expected length >= tagLength='+s);return c(a.decrypt.length,f),a.decrypt(u,f)}}}return Object.assign(n,t),n};function Ja(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(Se(e,t,"output"),n&&!Ps(e))throw new Error("invalid output, must be aligned");return e}function tx(t,e,n){er(t),er(e),Za(n);const r=new Uint8Array(16),o=WS(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function Ps(t){return t.byteOffset%4===0}function Ns(t){return Uint8Array.from(Se(t))}const wp=t=>Uint8Array.from(t.split(""),e=>e.charCodeAt(0)),nx=dn(kt(wp("expand 16-byte k"))),rx=dn(kt(wp("expand 32-byte k")));function te(t,e){return t<<e|t>>>32-e}const Pr=64,ox=16,Qa=2**32-1,Yd=Uint32Array.of();function sx(t,e,n,r,o,s,i,a){const c=o.length,l=new Uint8Array(Pr),d=kt(l),u=tr&&Ps(o)&&Ps(s),f=u?kt(o):Yd,h=u?kt(s):Yd;if(!tr){for(let g=0;g<c;i++){if(t(e,n,r,d,i,a),dn(d),i>=Qa)throw new Error("arx: counter overflow");const m=Math.min(Pr,c-g);for(let b=0,w;b<m;b++)w=g+b,s[w]=o[w]^l[b];g+=m}return}for(let g=0;g<c;i++){if(t(e,n,r,d,i,a),i>=Qa)throw new Error("arx: counter overflow");const m=Math.min(Pr,c-g);if(u&&m===Pr){const b=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let w=0,I;w<ox;w++)I=b+w,h[I]=f[I]^d[w];g+=Pr;continue}for(let b=0,w;b<m;b++)w=g+b,s[w]=o[w]^l[b];g+=m}}function ix(t,e){const{allowShortKeys:n,extendNonceFn:r,counterLength:o,counterRight:s,rounds:i}=ZS({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof t!="function")throw new Error("core must be a function");return er(o),er(i),Za(s),Za(n),(a,c,l,d,u=0)=>{Se(a,void 0,"key"),Se(c,void 0,"nonce"),Se(l,void 0,"data");const f=l.length,h=d!==void 0;if(d=Ja(f,d,!1),h&&YS(l,d),er(u),u<0||u>=Qa)throw new Error("arx: counter overflow");const g=[];let m=a.length,b,w;if(m===32)g.push(b=Ns(a)),w=rx;else if(m===16&&n)b=new Uint8Array(32),b.set(a),b.set(a,16),w=nx,g.push(b);else throw Se(a,32,"arx key"),new Error("invalid key size");(!tr||!Ps(c))&&g.push(c=Ns(c));let I=kt(b);if(r){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");const L=c.subarray(0,16);if(tr)r(w,I,kt(L),I);else{const C=dn(Uint32Array.from(w));r(C,I,kt(L),I),Wt(C),dn(I)}c=c.subarray(16)}else tr||dn(I);const y=16-o;if(y!==c.length)throw new Error(`arx: nonce must be ${y} or 16 bytes`);if(y!==12){const L=new Uint8Array(12);L.set(c,s?0:12-c.length),c=L,g.push(c)}const k=dn(kt(c));try{return sx(t,w,I,k,l,d,u,i),d}finally{Wt(...g)}}}function Ae(t,e){return t[e++]&255|(t[e++]&255)<<8}class ax{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;destroyed=!1;constructor(e){e=Ns(Se(e,32,"key"));const n=Ae(e,0),r=Ae(e,2),o=Ae(e,4),s=Ae(e,6),i=Ae(e,8),a=Ae(e,10),c=Ae(e,12),l=Ae(e,14);this.r[0]=n&8191,this.r[1]=(n>>>13|r<<3)&8191,this.r[2]=(r>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=Ae(e,16+2*d)}process(e,n,r=!1){const o=r?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],g=i[7],m=i[8],b=i[9],w=Ae(e,n+0),I=Ae(e,n+2),y=Ae(e,n+4),k=Ae(e,n+6),L=Ae(e,n+8),C=Ae(e,n+10),T=Ae(e,n+12),x=Ae(e,n+14);let v=s[0]+(w&8191),A=s[1]+((w>>>13|I<<3)&8191),N=s[2]+((I>>>10|y<<6)&8191),D=s[3]+((y>>>7|k<<9)&8191),E=s[4]+((k>>>4|L<<12)&8191),S=s[5]+(L>>>1&8191),P=s[6]+((L>>>14|C<<2)&8191),R=s[7]+((C>>>11|T<<5)&8191),O=s[8]+((T>>>8|x<<8)&8191),j=s[9]+(x>>>5|o),M=0,B=M+v*a+A*(5*b)+N*(5*m)+D*(5*g)+E*(5*h);M=B>>>13,B&=8191,B+=S*(5*f)+P*(5*u)+R*(5*d)+O*(5*l)+j*(5*c),M+=B>>>13,B&=8191;let F=M+v*c+A*a+N*(5*b)+D*(5*m)+E*(5*g);M=F>>>13,F&=8191,F+=S*(5*h)+P*(5*f)+R*(5*u)+O*(5*d)+j*(5*l),M+=F>>>13,F&=8191;let U=M+v*l+A*c+N*a+D*(5*b)+E*(5*m);M=U>>>13,U&=8191,U+=S*(5*g)+P*(5*h)+R*(5*f)+O*(5*u)+j*(5*d),M+=U>>>13,U&=8191;let H=M+v*d+A*l+N*c+D*a+E*(5*b);M=H>>>13,H&=8191,H+=S*(5*m)+P*(5*g)+R*(5*h)+O*(5*f)+j*(5*u),M+=H>>>13,H&=8191;let q=M+v*u+A*d+N*l+D*c+E*a;M=q>>>13,q&=8191,q+=S*(5*b)+P*(5*m)+R*(5*g)+O*(5*h)+j*(5*f),M+=q>>>13,q&=8191;let K=M+v*f+A*u+N*d+D*l+E*c;M=K>>>13,K&=8191,K+=S*a+P*(5*b)+R*(5*m)+O*(5*g)+j*(5*h),M+=K>>>13,K&=8191;let W=M+v*h+A*f+N*u+D*d+E*l;M=W>>>13,W&=8191,W+=S*c+P*a+R*(5*b)+O*(5*m)+j*(5*g),M+=W>>>13,W&=8191;let G=M+v*g+A*h+N*f+D*u+E*d;M=G>>>13,G&=8191,G+=S*l+P*c+R*a+O*(5*b)+j*(5*m),M+=G>>>13,G&=8191;let V=M+v*m+A*g+N*h+D*f+E*u;M=V>>>13,V&=8191,V+=S*d+P*l+R*c+O*a+j*(5*b),M+=V>>>13,V&=8191;let X=M+v*b+A*m+N*g+D*h+E*f;M=X>>>13,X&=8191,X+=S*u+P*d+R*l+O*c+j*a,M+=X>>>13,X&=8191,M=(M<<2)+M|0,M=M+B|0,B=M&8191,M=M>>>13,F+=M,s[0]=B,s[1]=F,s[2]=U,s[3]=H,s[4]=q,s[5]=K,s[6]=W,s[7]=G,s[8]=V,s[9]=X}finalize(){const{h:e,pad:n}=this,r=new Uint16Array(10);let o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,r[0]=e[0]+5,o=r[0]>>>13,r[0]&=8191;for(let a=1;a<10;a++)r[a]=e[a]+o,o=r[a]>>>13,r[a]&=8191;r[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)r[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|r[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+n[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+n[a]|0)+(i>>>16)|0,e[a]=i&65535;Wt(r)}update(e){Xd(this),Se(e),e=Ns(e);const{buffer:n,blockLen:r}=this,o=e.length;for(let s=0;s<o;){const i=Math.min(r-this.pos,o-s);if(i===r){for(;r<=o-s;s+=r)this.process(e,s);continue}n.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===r&&(this.process(n,0,!1),this.pos=0)}return this}destroy(){this.destroyed=!0,Wt(this.h,this.r,this.buffer,this.pad)}digestInto(e){Xd(this),zS(e,this),this.finished=!0;const{buffer:n,h:r}=this;let{pos:o}=this;if(o){for(n[o++]=1;o<16;o++)n[o]=0;this.process(n,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=r[i]>>>0,e[s++]=r[i]>>>8}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}}const cx=QS(32,t=>new ax(t));function lx(t,e,n,r,o,s=20){let i=t[0],a=t[1],c=t[2],l=t[3],d=e[0],u=e[1],f=e[2],h=e[3],g=e[4],m=e[5],b=e[6],w=e[7],I=o,y=n[0],k=n[1],L=n[2],C=i,T=a,x=c,v=l,A=d,N=u,D=f,E=h,S=g,P=m,R=b,O=w,j=I,M=y,B=k,F=L;for(let H=0;H<s;H+=2)C=C+A|0,j=te(j^C,16),S=S+j|0,A=te(A^S,12),C=C+A|0,j=te(j^C,8),S=S+j|0,A=te(A^S,7),T=T+N|0,M=te(M^T,16),P=P+M|0,N=te(N^P,12),T=T+N|0,M=te(M^T,8),P=P+M|0,N=te(N^P,7),x=x+D|0,B=te(B^x,16),R=R+B|0,D=te(D^R,12),x=x+D|0,B=te(B^x,8),R=R+B|0,D=te(D^R,7),v=v+E|0,F=te(F^v,16),O=O+F|0,E=te(E^O,12),v=v+E|0,F=te(F^v,8),O=O+F|0,E=te(E^O,7),C=C+N|0,F=te(F^C,16),R=R+F|0,N=te(N^R,12),C=C+N|0,F=te(F^C,8),R=R+F|0,N=te(N^R,7),T=T+D|0,j=te(j^T,16),O=O+j|0,D=te(D^O,12),T=T+D|0,j=te(j^T,8),O=O+j|0,D=te(D^O,7),x=x+E|0,M=te(M^x,16),S=S+M|0,E=te(E^S,12),x=x+E|0,M=te(M^x,8),S=S+M|0,E=te(E^S,7),v=v+A|0,B=te(B^v,16),P=P+B|0,A=te(A^P,12),v=v+A|0,B=te(B^v,8),P=P+B|0,A=te(A^P,7);let U=0;r[U++]=i+C|0,r[U++]=a+T|0,r[U++]=c+x|0,r[U++]=l+v|0,r[U++]=d+A|0,r[U++]=u+N|0,r[U++]=f+D|0,r[U++]=h+E|0,r[U++]=g+S|0,r[U++]=m+P|0,r[U++]=b+R|0,r[U++]=w+O|0,r[U++]=I+j|0,r[U++]=y+M|0,r[U++]=k+B|0,r[U++]=L+F|0}const dx=ix(lx,{counterRight:!1,counterLength:4,allowShortKeys:!1}),ux=new Uint8Array(16),Zd=(t,e)=>{t.update(e);const n=e.length%16;n&&t.update(ux.subarray(n))},fx=new Uint8Array(32);function Jd(t,e,n,r,o){o!==void 0&&Se(o,void 0,"AAD");const s=t(e,n,fx),i=tx(r.length,o?o.length:0,!0),a=cx.create(s);o&&Zd(a,o),Zd(a,r),a.update(i);const c=a.digest();return Wt(s,i),c}const hx=t=>(e,n,r)=>({encrypt(s,i){const a=s.length;i=Ja(a+16,i,!1),i.set(s);const c=i.subarray(0,-16);t(e,n,c,c,1);const l=Jd(t,e,n,c,r);return i.set(l,a),Wt(l),i},decrypt(s,i){i=Ja(s.length-16,i,!1);const a=s.subarray(0,-16),c=s.subarray(-16),l=Jd(t,e,n,a,r);if(!JS(c,l))throw Wt(l),new Error("invalid tag");return i.set(s.subarray(0,-16)),t(e,n,i,i,1),Wt(l),i}}),Qd=ex({blockSize:64,nonceLength:12,tagLength:16,withAAD:!0},hx(dx));function px(t,e,n){return nl(t),n===void 0&&(n=new Uint8Array(t.outputLen)),hp(t,n,e)}const Nr=Uint8Array.of(0),gx=Uint8Array.of();function mx(t,e,n,r=32,o){nl(t),Nt(r,"length"),Lt(e,void 0,"prk");const s=t.outputLen;if(e.length<s)throw new Error('"prk" must be at least HashLen octets');if(r>255*s)throw new Error("Length must be <= 255*HashLen");const i=Math.ceil(r/s);if(n===void 0?n=gx:Lt(n,void 0,"info"),!i)return new Uint8Array;const a=new Uint8Array(i*s),{iHash:c,oHash:l}=hp.create(t,e),d=new Uint8Array(s),u=i>1?t.create():void 0;for(let h=0;h<i-1;h++){Nr[0]=h+1;const g=c._cloneInto(u);h&&g.update(d),g.update(n).update(Nr).digestInto(d),l._cloneInto(u).update(d).digestInto(d),a.set(d,s*h)}if(Nr[0]=i,i>1&&c.update(d),c.update(n).update(Nr).digestInto(d),l.update(d).digestInto(d),a.set(d,s*(i-1)),c.destroy(),l.destroy(),u?.destroy(),d!==a&&hn(d),hn(Nr),r===a.length)return a;const f=a.slice(0,r);return hn(a),f}const yp={hashSHA256(t){return Di(t.subarray())},getHKDF(t,e){const n=px(Di,e,t),o=mx(Di,n,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){const t=jo.utils.randomSecretKey();return{publicKey:jo.getPublicKey(t),privateKey:t}},generateX25519KeyPairFromSeed(t){return{publicKey:jo.getPublicKey(t),privateKey:t}},generateX25519SharedKey(t,e){return jo.getSharedSecret(t.subarray(),e.subarray())},chaCha20Poly1305Encrypt(t,e,n,r){return Qd(r,e,n).encrypt(t.subarray())},chaCha20Poly1305Decrypt(t,e,n,r,o){return Qd(r,e,n).decrypt(t.subarray(),o)}},wx=yp;function yx(t){return{generateKeypair:t.generateX25519KeyPair,dh:(e,n)=>t.generateX25519SharedKey(e.privateKey,n).subarray(0,32),encrypt:t.chaCha20Poly1305Encrypt,decrypt:t.chaCha20Poly1305Decrypt,hash:t.hashSHA256,hkdf:t.getHKDF}}const Ls=t=>{const e=Tt(2);return e[0]=t>>8,e[1]=t,e};Ls.bytes=2;const Bs=t=>{if(t.length<2)throw RangeError("Could not decode int16BE");if(t instanceof Uint8Array){let e=0;return e+=t[0]<<8,e+=t[1],e}return t.getUint16(0)};Bs.bytes=2;function bx(t){return{xxHandshakeSuccesses:t.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:t.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:t.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:t.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:t.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function bp(t,e){!e.enabled||!xo||(t?(e(`LOCAL_STATIC_PUBLIC_KEY ${ee(t.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${ee(t.privateKey,"hex")}`)):e("Missing local static keys."))}function vp(t,e){!e.enabled||!xo||(t?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${ee(t.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${ee(t.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function vx(t,e){!e.enabled||!xo||e(t?`REMOTE_STATIC_PUBLIC_KEY ${ee(t.subarray(),"hex")}`:"Missing remote static public key.")}function Sp(t,e){!e.enabled||!xo||e(t?`REMOTE_EPHEMERAL_PUBLIC_KEY ${ee(t.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function xp(t,e,n){!n.enabled||!xo||(n(`CIPHER_STATE_1 ${t.n.getUint64()} ${t.k&&ee(t.k,"hex")}`),n(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&ee(e.k,"hex")}`))}class Jr extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=Jr.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"}const Sx=0,xx=4294967295,Ex="Cipherstate has reached maximum n, a new handshake must be performed";class Ax{n;bytes;view;constructor(e=Sx){this.n=e,this.bytes=je(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>xx)throw new Error(Ex)}}const nr=je(0);class Uo{k;n;crypto;constructor(e,n=void 0,r=0){this.crypto=e,this.k=n,this.n=new Ax(r)}hasKey(){return!!this.k}encryptWithAd(e,n){if(!this.hasKey())return n;this.n.assertValue();const r=this.crypto.encrypt(n,this.n.getBytes(),e,this.k);return this.n.increment(),r}decryptWithAd(e,n,r){if(!this.hasKey())return n;this.n.assertValue();const o=this.crypto.decrypt(n,this.n.getBytes(),e,this.k,r);return this.n.increment(),o}}class kx{cs;ck;h;crypto;constructor(e,n){this.crypto=e;const r=ye(n,"utf-8");this.h=Ix(e,r),this.ck=this.h,this.cs=new Uo(e)}mixKey(e){const[n,r]=this.crypto.hkdf(this.ck,e);this.ck=n,this.cs=new Uo(this.crypto,r)}mixHash(e){this.h=this.crypto.hash(new se(this.h,e))}encryptAndHash(e){const n=this.cs.encryptWithAd(this.h,e);return this.mixHash(n),n}decryptAndHash(e){const n=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),n}split(){const[e,n]=this.crypto.hkdf(this.ck,nr);return[new Uo(this.crypto,e),new Uo(this.crypto,n)]}}class Cx{ss;s;e;rs;re;initiator;crypto;constructor(e){const{crypto:n,protocolName:r,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=n,this.ss=new kx(n,r),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");const e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,n=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<n+32)throw new Error("message is not long enough");this.re=e.sublist(n,n+32),this.ss.mixHash(this.re)}readS(e,n=0){if(this.rs)throw new Error("remote static public key is already set");const r=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<n+r)throw new Error("message is not long enough");const o=e.sublist(n,n+r);return this.rs=this.ss.decryptAndHash(o),r}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}}class Ep extends Cx{writeMessageA(e){return new se(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){const n=this.writeE();this.writeEE();const r=this.writeS();return this.writeES(),new se(n,r,this.ss.encryptAndHash(e))}writeMessageC(e){const n=this.writeS();return this.writeSE(),new se(n,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(n){throw new Jr(`handshake stage 0 validation fail: ${n.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();const n=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+n))}catch(n){throw new Jr(`handshake stage 1 validation fail: ${n.message}`)}}readMessageC(e){try{const n=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(n))}catch(n){throw new Jr(`handshake stage 2 validation fail: ${n.message}`)}}}function Ix(t,e){if(e.length<=32){const n=je(32);return n.set(e),n}else return t.hash(e)}var _s;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{if(o.lengthDelimited!==!1&&r.fork(),n.webtransportCerthashes!=null)for(const s of n.webtransportCerthashes)r.uint32(10),r.bytes(s);if(n.streamMuxers!=null)for(const s of n.streamMuxers)r.uint32(18),r.string(s);o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={webtransportCerthashes:[],streamMuxers:[]},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new vd('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(n.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new vd('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(n.string());break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(_s||(_s={}));var Os;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.identityKey!=null&&n.identityKey.byteLength>0&&(r.uint32(10),r.bytes(n.identityKey)),n.identitySig!=null&&n.identitySig.byteLength>0&&(r.uint32(18),r.bytes(n.identitySig)),n.extensions!=null&&(r.uint32(34),_s.codec().encode(n.extensions,r)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={identityKey:je(0),identitySig:je(0)},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.identityKey=n.bytes();break}case 2:{s.identitySig=n.bytes();break}case 4:{s.extensions=_s.codec().decode(n,n.uint32(),{limits:o.limits?.extensions});break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(Os||(Os={}));async function Ap(t,e,n){const r=await t.sign(Cp(e));return Os.encode({identityKey:ni(t.publicKey),identitySig:r,extensions:n})}async function kp(t,e,n){try{const r=Os.decode(t),o=Wa(r.identityKey);if(n?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${n}`);if(!e)throw new Error("Remote static does not exist");const s=Cp(e);if(!await o.verify(s,r.identitySig))throw new Error("Invalid payload signature");return r}catch(r){throw new Mm(r.message)}}function Cp(t){const e=ye("noise-libp2p-static-key:");return t instanceof Uint8Array?Oa([e,t],e.length+t.length):(t.prepend(e),t)}class Rx extends gp{stream;handshake;metrics;decoder;constructor(e,n,r){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=n,this.metrics=r,this.decoder=new qS({lengthDecoder:Bs,maxBufferSize:16*1024*1024,encodingLength:()=>2});const o=c=>{try{for(const l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);const s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);const i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);const a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){const n=new se;for(let r=0;r<e.byteLength;r+=Wd){let o=r+Wd;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(r,o)):s=this.handshake.encrypt(e.sublist(r,o)),this.metrics?.encryptedPackets.increment(),n.append(Ls(s.byteLength)),n.append(s)}return n}decrypt(e){const n=new se;for(let r=0;r<e.byteLength;r+=co){let o=r+co;if(o>e.byteLength&&(o=e.byteLength),o-Gd<r)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(r,o):s=e.sublist(r,o);const i=e.subarray(r,o-Gd);try{const a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),n.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return n}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}}function eu(t,e,n){return new Rx(t,e,n)}async function Tx(t,e){const{log:n,connection:r,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=t,d=await Ap(s,a.publicKey,l),u=new Ep({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});bp(u.s,n),n.trace("Stage 0 - Initiator starting to send first message."),await r.write(u.writeMessageA(nr),e),n.trace("Stage 0 - Initiator finished sending first message."),vp(u.e,n),n.trace("Stage 1 - Initiator waiting to receive first message from responder...");const f=u.readMessageB(await r.read(e));n.trace("Stage 1 - Initiator received the message."),Sp(u.re,n),vx(u.rs,n),n.trace("Initiator going to check remote's signature...");const h=await kp(f,u.rs,c);n.trace("All good with the signature!"),n.trace("Stage 2 - Initiator sending third handshake message."),await r.write(u.writeMessageC(d),e),n.trace("Stage 2 - Initiator sent message with signed payload.");const[g,m]=u.ss.split();return xp(g,m,n),{payload:h,encrypt:b=>g.encryptWithAd(nr,b),decrypt:(b,w)=>m.decryptWithAd(nr,b,w)}}async function Px(t,e){const{log:n,connection:r,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=t,d=await Ap(s,a.publicKey,l),u=new Ep({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});bp(u.s,n),n.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await r.read(e)),n.trace("Stage 0 - Responder received first message."),Sp(u.re,n),n.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await r.write(u.writeMessageB(d),e),n.trace("Stage 1 - Responder sent the second handshake message with signed payload."),vp(u.e,n),n.trace("Stage 2 - Responder waiting for third handshake message...");const f=u.readMessageC(await r.read(e));n.trace("Stage 2 - Responder received the message, finished handshake.");const h=await kp(f,u.rs,c),[g,m]=u.ss.split();return xp(g,m,n),{payload:h,encrypt:b=>m.encryptWithAd(nr,b),decrypt:(b,w)=>g.decryptWithAd(nr,b,w)}}class Nx{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,n={}){const{staticNoiseKey:r,extensions:o,crypto:s,prologueBytes:i}=n,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");const c=s??wx;this.crypto=yx(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?bx(a):void 0,r?this.staticKey=c.generateX25519KeyPairFromSeed(r):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??je(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Wm]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,n){const r=e.log?.newScope("noise")??this.log,o=zd(e,{lengthEncoder:Ls,lengthDecoder:Bs,maxDataLength:co}),s=await this.performHandshakeInitiator(o,this.components.privateKey,r,n?.remotePeer?.publicKey,n),i=Wa(s.payload.identityKey);return{connection:eu(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:dr(i),streamMuxer:n?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;const n=this.components.upgrader.getStreamMuxers();if(n!=null)for(const r of e){const o=n.get(r);if(o!=null)return o}if(e.length)throw new jm("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,n){const r=e.log?.newScope("noise")??this.log,o=zd(e,{lengthEncoder:Ls,lengthDecoder:Bs,maxDataLength:co}),s=await this.performHandshakeResponder(o,this.components.privateKey,r,n?.remotePeer?.publicKey,n),i=Wa(s.payload.identityKey);return{connection:eu(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:dr(i),streamMuxer:n?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,n,r,o,s){let i;const a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await Tx({connection:e,privateKey:n,remoteIdentityKey:o,log:r.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,n,r,o,s){let i;const a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await Px({connection:e,privateKey:n,remoteIdentityKey:o,log:r.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}}function Lx(t={}){return e=>new Nx(e,t)}const Bx="termdock-e2ee-v1",ec=3600*1e3,tu=512*1024*1024,tc=4*1024*1024,Qo=()=>{},si=Object.assign(Qo,{enabled:!1,error:Qo,trace:Qo,newScope:()=>si});Object.freeze(si);async function Ip(){const t=await Z0();return{privateKey:t,peerId:dr(t.publicKey).toString()}}function _x(t){return btoa(String.fromCharCode(...ev(t.privateKey)))}function nu(t){if(t.length>512||!/^[A-Za-z0-9+/]+={0,2}$/.test(t))throw new Error("Invalid identity encoding");const e=Q0(Uint8Array.from(atob(t),n=>n.charCodeAt(0)));if(e.type!=="Ed25519")throw new Error("Only Ed25519 device identities are supported");return{privateKey:e,peerId:dr(e.publicKey).toString()}}class Rp{constructor(e=Qo){this.consumed=e}consumed;chunks=[];size=0;ended=!1;error;wake;push(e){if(this.ended)throw this.error??new Error("Byte stream closed");if(this.size+e.byteLength>tc)throw new Error("Secure stream buffer limit exceeded");this.chunks.push(e.slice()),this.size+=e.byteLength,this.wake?.()}end(e){this.ended=!0,this.error??=e,this.wake?.()}async*[Symbol.asyncIterator](){for(;;){if(this.error)throw this.error;const e=this.chunks.shift();if(e)this.size-=e.byteLength,yield e,this.consumed();else{if(this.ended)return;await new Promise(n=>{this.wake=n})}}}}class Ox extends gp{constructor(e,n){super({log:si,direction:n?"outbound":"inbound",maxReadBufferLength:tc,maxWriteBufferLength:tc}),this.duplex=e,this.finished=e.sink(this.outgoing).catch(r=>{this.abort(ur(r))}),this.readTransport()}duplex;outgoing=new Rp(()=>this.onMuxerDrain());finished;async readTransport(){try{for await(const e of this.duplex.source)this.onData(e.slice());this.onTransportClosed()}catch(e){this.onTransportClosed(ur(e))}}sendData(e){return this.outgoing.push(e.subarray()),{sentBytes:e.byteLength,canSendMore:!1}}sendReset(e){this.outgoing.end(e),this.duplex.close?.(e)}sendPause(){}sendResume(){}async close(){this.outgoing.end(),this.duplex.close?.(),this.onTransportClosed(),await this.finished}}function ur(t){return t instanceof Error?t:new Error("Secure transport failed")}class Dx extends Error{code="E2EE_REHANDSHAKE_REQUIRED";constructor(){super("Encrypted connection lifetime reached; establish a new handshake without replaying pending input")}}function Fx(t){const e=t?.maxAgeMs??ec,n=t?.maxBytesPerDirection??tu;if(!Number.isSafeInteger(e)||e<=0||e>ec||!Number.isSafeInteger(n)||n<=0||n>tu)throw new Error("Encrypted connection limits cannot exceed the production maximum");return{maxAgeMs:e,maxBytesPerDirection:n}}async function Mx(t){const{identity:e,duplex:n,initiator:r,targetPinnedPeerId:o,signal:s}=t,i=Fx(t.limits);if(typeof Reflect.get(Promise,"withResolvers")!="function"||typeof globalThis.crypto?.getRandomValues!="function")throw new Error("End-to-end encryption requires Node.js 22+ or a modern browser with Promise.withResolvers and secure random support");if(r&&!o)throw new Error("A pinned target identity is required");const a=o?ov(o):void 0;if(a&&a.type!=="Ed25519")throw new Error("Only Ed25519 target identities are supported");if(e.peerId!==dr(e.privateKey.publicKey).toString())throw new Error("Local identity mismatch");if(s?.aborted)throw s.reason??new Error("Connection aborted");const c=new Ox(n,r),l=new AbortController,d=setTimeout(()=>{const h=new Error("Encrypted handshake timed out");l.abort(h),c.abort(h)},15e3),u=()=>{l.abort(s?.reason),c.abort(ur(s?.reason))};s?.addEventListener("abort",u,{once:!0}),c.addEventListener("close",()=>s?.removeEventListener("abort",u),{once:!0});const f=Lx({crypto:yp,prologueBytes:new TextEncoder().encode(Bx)})({privateKey:e.privateKey,peerId:dr(e.privateKey.publicKey),logger:{forComponent:()=>si},upgrader:{getStreamMuxers:()=>new Map}});try{const h=await(r?f.secureOutbound(c,{remotePeer:a,signal:l.signal,skipStreamMuxerNegotiation:!0}):f.secureInbound(c,{remotePeer:a,signal:l.signal,skipStreamMuxerNegotiation:!0}));if(h.remotePeer.type!=="Ed25519")throw new Error("Unsupported remote identity");return{authenticatedPeerId:h.remotePeer.toString(),duplex:jx(h.connection,i)}}catch(h){throw c.abort(ur(h)),h}finally{clearTimeout(d),s?.removeEventListener("abort",u)}}function jx(t,e){const n=new Rp,r=performance.now(),o=Date.now();let s=0,i=0,a;const c=()=>(a??=new Dx,n.end(a),t.abort(a),a),l=setTimeout(c,e.maxAgeMs);typeof l=="object"&&l.unref?.();const d=(f,h)=>{if(a)throw a;if(Math.max(performance.now()-r,Date.now()-o)>=e.maxAgeMs||f+h>=e.maxBytesPerDirection)throw c()};t.addEventListener("message",f=>{try{d(i,f.data.byteLength),i+=f.data.byteLength,n.push(f.data.subarray())}catch(h){t.abort(ur(h))}}),t.addEventListener("close",f=>{clearTimeout(l),n.end(f.error)},{once:!0});let u=!1;return{source:n,async sink(f){if(u)throw new Error("Secure sink already consumed");u=!0;try{for await(const h of f)d(s,h.byteLength),s+=h.byteLength,t.send(h)||await t.onDrain()}catch(h){throw t.abort(ur(h)),h}},close(f){f?t.abort(f):t.close()}}}const Tp=1012,Pp="Encrypted transport renewed";class ul{constructor(e=64){this.limit=e}limit;items=[];wake;ended=!1;error;push(e){if(this.ended)throw new Error("Channel closed");if(this.items.length>=this.limit)throw this.end(new Error("Channel queue exceeded")),this.error;this.items.push(e),this.wake?.()}end(e){this.ended=!0,this.error??=e,this.wake?.()}async*[Symbol.asyncIterator](){for(;;){if(this.error)throw this.error;const e=this.items.shift();if(e!==void 0){yield e;continue}if(this.ended)return;await new Promise(n=>{this.wake=n}),this.wake=void 0}}}const $i=2*1024*1024,Ux=new TextEncoder,$x=new TextDecoder("utf-8",{fatal:!0});class Hx{constructor(e){this.duplex=e;const n=this;this.done=e.sink((async function*(){for await(const r of n.outgoing)try{yield r}finally{n.outgoingBytes-=r.byteLength}})()),this.done.catch(r=>this.close(r instanceof Error?r:new Error("Transport failed")))}duplex;outgoing=new ul(256);outgoingBytes=0;get hasPendingWrites(){return this.outgoingBytes>0}done;send(e){const n=Ux.encode(JSON.stringify(e));if(n.length>$i)throw new Error("Record too large");const r=new Uint8Array(n.length+4);if(new DataView(r.buffer).setUint32(0,n.length),r.set(n,4),this.outgoingBytes+r.byteLength>4*1024*1024)throw new Error("Record queue byte budget exceeded");this.outgoingBytes+=r.byteLength;try{this.outgoing.push(r)}catch(o){throw this.outgoingBytes-=r.byteLength,o}}close(e){this.outgoing.end(e),this.duplex.close?.(e)}async*read(){let e=new Uint8Array(0);for await(const n of this.duplex.source){if(e.length+n.length>$i*2+8)throw new Error("Record buffer exceeded");const r=new Uint8Array(e.length+n.length);for(r.set(e),r.set(n,e.length),e=r;e.length>=4;){const o=new DataView(e.buffer,e.byteOffset,4).getUint32(0);if(o>$i||o===0)throw new Error("Invalid record size");if(e.length<o+4)break;const s=JSON.parse($x.decode(e.subarray(4,o+4)));if(!s||typeof s!="object"||typeof s.id!="string"||typeof s.type!="string")throw new Error("Invalid record");yield s,e=e.slice(o+4)}}if(e.length)throw new Error("Truncated record")}}function Np(t){let e="";for(let n=0;n<t.length;n+=8192)e+=String.fromCharCode(...t.subarray(n,n+8192));return btoa(e)}function Lp(t){const e=atob(t);return Uint8Array.from(e,n=>n.charCodeAt(0))}function qx(t){const e=new ul(64);t.binaryType="arraybuffer";const n=r=>{e.end(r),t.close(1e3)};return t.addEventListener("message",r=>{try{if(!(r.data instanceof ArrayBuffer)||r.data.byteLength>1024*1024)throw new Error("Invalid encrypted frame");e.push(new Uint8Array(r.data))}catch{n(new Error("Encrypted transport rejected frame"))}}),t.addEventListener("close",()=>e.end()),t.addEventListener("error",()=>e.end(new Error("Encrypted transport disconnected"))),{source:e,close:n,async sink(r){try{for await(const o of r)for(let s=0;s<o.length;s+=64*1024){const i=Date.now();for(;t.bufferedAmount>256*1024;){if(t.readyState!==1||Date.now()-i>15e3)throw new Error("Encrypted transport congested");await new Promise(a=>setTimeout(a,10))}if(t.readyState!==1)throw new Error("Encrypted transport closed");t.send(o.subarray(s,s+64*1024))}}catch(o){throw n(o instanceof Error?o:new Error("Encrypted transport failed")),o}}}}const Bp=8,_p=128,Kx=5*1024*1024,zx=_p+Bp+8,Wx=256,$o=3e4,Lr=64*1024;function qt(t){return t instanceof Error?t:new Error(String(t??"Secure connection closed"))}function ru(t){if(!t.startsWith("/")||t.startsWith("//")||t.includes("#"))throw new Error("A local API path is required");return t}class Op extends EventTarget{constructor(e,n,r){super(),this.url=e,this.transmit=n,this.disconnect=r}url;transmit;disconnect;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;binaryType="arraybuffer";bufferedAmount=0;protocol="termdock-e2ee-v1";extensions="";readyState=0;onopen=null;onmessage=null;onerror=null;onclose=null;send(e){if(this.readyState!==1)throw new Error("Secure socket is not open");if(typeof e!="string"||new TextEncoder().encode(e).length>1024*1024)throw new Error("Unsupported socket payload");this.transmit(e)}close(e=1e3,n=""){this.readyState!==3&&(this.disconnect(),this.finish(e,n))}accept(e){if(this.readyState!==3)if(e.type==="ws-ready"){this.readyState=1;const n=new Event("open");this.dispatchEvent(n),this.onopen?.(n)}else if(e.type==="ws-data"&&typeof e.data=="string"){const n=new MessageEvent("message",{data:e.data});this.dispatchEvent(n),this.onmessage?.(n)}else e.type==="ws-close"?this.finish(typeof e.code=="number"?e.code:1e3,typeof e.reason=="string"?e.reason:""):e.type==="error"&&this.fail(qt(e.error))}fail(e){if(this.readyState===3)return;const n=new Event("error");this.dispatchEvent(n),this.onerror?.(n),this.finish(1006,e.message)}finish(e,n){if(this.readyState===3)return;this.readyState=3;const r=new CloseEvent("close",{code:e,reason:n,wasClean:e===1e3});this.dispatchEvent(r),this.onclose?.(r)}}class Gx{constructor(e,n,r){this.channel=e,this.identity=n,this.targetPeerId=r,this.read().catch(o=>this.close(qt(o))),e.done.catch(o=>this.close(qt(o)))}channel;identity;targetPeerId;establishedAt=performance.now();establishedWallTime=Date.now();lastInputAt=-1/0;pending=new Map;waiting=[];stopped=!1;closeReason;get canSwitchTransport(){return!this.channel.hasPendingWrites&&performance.now()-this.lastInputAt>=2e3&&![...this.pending.values()].some(e=>e.kind!=="socket")&&!this.waiting.some(e=>e.kind!=="socket")}get renewalDue(){return!this.stopped&&Math.max(performance.now()-this.establishedAt,Date.now()-this.establishedWallTime)>=ec-5*6e4}get closed(){return this.stopped}hasCapacity(e){if(this.pending.size>=zx)return!1;const n=[...this.pending.values()].filter(r=>r.kind===e).length;return e==="http"?n<Bp:e==="socket"?n<_p:!0}allocate(e){if(this.stopped)throw this.closeReason??new Error("Secure connection closed");const n=crypto.randomUUID(),r=new ul(4);return this.pending.set(n,{queue:r,kind:e}),{id:n,queue:r}}reserve(e,n){return n?.aborted?Promise.reject(n.reason):this.stopped?Promise.reject(this.closeReason??new Error("Secure connection closed")):this.hasCapacity(e)?Promise.resolve(this.allocate(e)):this.waiting.length>=Wx?Promise.reject(new Error("连接繁忙,请稍后重试。")):new Promise((r,o)=>{const s=l=>{this.waiting=this.waiting.filter(d=>d!==c),c.cleanup(),o(l)},i=()=>s(n?.reason??new Error("Request aborted")),a=setTimeout(()=>s(new Error("连接等待超时,请重试。")),$o),c={kind:e,resolve:r,reject:o,cleanup:()=>{clearTimeout(a),n?.removeEventListener("abort",i)}};this.waiting.push(c),n?.addEventListener("abort",i,{once:!0})})}dispatchWaiting(){if(!this.stopped)for(let e=0;e<this.waiting.length;){const n=this.waiting[e];if(!this.hasCapacity(n.kind)){e++;continue}this.waiting.splice(e,1),n.cleanup(),n.resolve(this.allocate(n.kind))}}async read(){try{for await(const e of this.channel.read()){const n=this.pending.get(e.id);n&&(n.socket?(n.socket.accept(e),(e.type==="ws-close"||e.type==="error")&&this.release(e.id)):(n.queue.push(e),(e.type==="end"||e.type==="error")&&(n.cancelUpload?.(),this.release(e.id))))}}finally{this.close(new Error("Secure connection closed"))}}release(e){this.pending.get(e)?.queue.end(),this.pending.delete(e),this.dispatchWaiting()}async request(e,n){const{id:r,queue:o}=await this.reserve("request"),s=setTimeout(()=>this.close(new Error("Secure connection timed out")),Math.max(1e3,Math.min($o,n?.timeoutMs??$o)));try{if(this.stopped)throw this.closeReason;this.channel.send({...e,id:r});const i=(await o[Symbol.asyncIterator]().next()).value;if(!i)throw new Error("Secure request closed");if(i.type==="error")throw qt(i.error);return i}finally{clearTimeout(s),this.release(r)}}openSocket(e){ru(e);let n;const r=new AbortController,o=new Op(e,s=>{if(n){try{JSON.parse(s)?.type==="input"&&(this.lastInputAt=performance.now())}catch{}this.channel.send({id:n,type:"ws-data",data:s})}},()=>{if(r.abort(),n)try{this.channel.send({id:n,type:"ws-close"})}finally{this.release(n)}});return this.reserve("socket",r.signal).then(s=>{if(n=s.id,o.readyState===3){this.release(n);return}const i=this.pending.get(n);if(!i)throw new Error("Secure connection closed");i.socket=o,this.channel.send({id:n,type:"ws-open",path:e})}).catch(s=>{n&&this.release(n),o.fail(qt(s))}),o}async fetch(e,n){const r=typeof location>"u"?"https://termdock.invalid":location.origin,o=e instanceof Request?e:null,s=new URL(o?.url??String(e),r);if(s.origin!==r)throw new Error("Only current-service API requests are supported");const i=new Request(s,o?new Request(o,n):n),a=i.method.toUpperCase(),c=ru(s.pathname+s.search),l=s.pathname==="/api/terminal/fs/upload"?110*1024*1024:Kx;if(i.signal.aborted)throw i.signal.reason;const d={};i.headers.forEach((k,L)=>{["cookie","authorization","host","connection","content-length"].includes(L)||(d[L]=k)});const{id:u,queue:f}=await this.reserve("http",i.signal),h=f[Symbol.asyncIterator]();let g;const m=()=>{g?.cancel().catch(()=>{})},b=this.pending.get(u);if(!b)throw new Error("Secure connection closed");b.cancelUpload=m;const w=()=>{m();try{this.channel.send({id:u,type:"cancel"})}catch{}f.end(qt(i.signal.reason??"Request aborted")),this.release(u)};i.signal.addEventListener("abort",w,{once:!0});const I=()=>{i.signal.removeEventListener("abort",w),this.release(u)},y=async()=>{let k;try{const L=(await Promise.race([h.next(),new Promise((C,T)=>{k=setTimeout(()=>T(new Error("服务响应超时,请重试。")),$o)})])).value;if(!L)throw new Error("Secure response ended unexpectedly");if(L.type==="error")throw qt(L.error);return L}finally{clearTimeout(k)}};try{if(i.signal.aborted)throw i.signal.reason;if(this.channel.send({id:u,type:"http",method:a,path:c,headers:d}),i.body){const x=i.body.getReader();g=x;let v=0,A=0;try{for(;;){const{done:N,value:D}=await x.read();if(N)break;if(v+=D.byteLength,v>l)throw new Error("Request body exceeds upload limit");for(let E=0;E<D.byteLength;E+=Lr){if(this.channel.send({id:u,type:"upload",data:Np(D.subarray(E,E+Lr))}),(await y()).type!=="upload-ack")throw new Error("Invalid upload acknowledgement");A+=Math.min(Lr,D.byteLength-E),n?.onUploadProgress?.(A)}}}catch(N){throw await x.cancel(N).catch(()=>{}),N}finally{g=void 0,x.releaseLock()}}if(i.signal.aborted||this.stopped)throw new Error("Request aborted");this.channel.send({id:u,type:"upload-end"});const k=await y();if(k.type!=="head"||typeof k.status!="number")throw new Error("Invalid response header");const L=new Headers(k.headers);if(a==="HEAD"||[204,205,304].includes(k.status)){if((await y()).type!=="end")throw new Error("Unexpected response body");return I(),new Response(null,{status:k.status,headers:L})}let C=!1;const T=new ReadableStream({pull:async x=>{try{C&&(this.channel.send({id:u,type:"ack"}),C=!1);const v=await y();if(v.type==="end"){x.close(),I();return}if(v.type!=="chunk"||typeof v.data!="string")throw new Error("Invalid response chunk");const A=Lp(v.data);if(A.length>Lr)throw new Error("Response chunk exceeds budget");x.enqueue(A),C=!0}catch(v){x.error(v),w(),I()}},cancel:()=>{w(),I()}},{highWaterMark:Lr,size:x=>x.byteLength});return new Response(T,{status:k.status,headers:L})}catch(k){throw w(),I(),k}}retire(){for(const e of this.pending.values())e.socket?.accept({id:"",type:"ws-close",code:Tp,reason:Pp});this.close()}close(e=new Error("Secure connection closed")){if(!this.stopped){this.stopped=!0,this.closeReason=e;for(const n of this.waiting.splice(0))n.cleanup(),n.reject(e);for(const n of this.pending.values())n.queue.end(e),n.cancelUpload?.(),n.socket?.fail(e);this.pending.clear(),this.channel.close(e)}}}async function yn(t){const e=new URL(t.url);if(!["wss:","ws:"].includes(e.protocol))throw new Error("A WebSocket endpoint is required");if(e.protocol==="ws:"&&!["127.0.0.1","localhost","[::1]"].includes(e.hostname))throw new Error("Remote secure channels require WSS");const n=t.identity??await Ip(),r=(t.socketFactory??(c=>new WebSocket(c)))(e.href),o=qx(r),s=new AbortController,i=setTimeout(()=>s.abort(new Error("Secure handshake timed out")),2e4),a=t.signal?AbortSignal.any([t.signal,s.signal]):s.signal;try{await new Promise((d,u)=>{if(a.aborted){u(a.reason);return}const f=()=>{a.removeEventListener("abort",m),r.removeEventListener("open",h),r.removeEventListener("error",g),r.removeEventListener("close",g)},h=()=>{f(),d()},g=()=>{f(),u(new Error("Secure transport unavailable"))},m=()=>{f(),u(a.reason)};a.addEventListener("abort",m,{once:!0}),r.addEventListener("open",h),r.addEventListener("error",g),r.addEventListener("close",g),r.readyState===1&&h()});const c=await Mx({identity:n,duplex:o,initiator:!0,targetPinnedPeerId:t.targetPeerId,signal:a}),l=new Gx(new Hx(c.duplex),n,c.authenticatedPeerId);if(t.pairingCode)try{await l.request({type:"pair",code:t.pairingCode})}catch(d){throw l.close(qt(d)),d}return l}catch(c){throw r.close(),c}finally{clearTimeout(i)}}const ou=256*1024,Vx=1024*1024;class Xx extends EventTarget{constructor(e,n,r=o=>new WebSocket(o)){if(super(),this.url=e,!/^[a-zA-Z0-9_.:-]{1,160}$/.test(n))throw new Error("Invalid target identity");this.upstream=r(e),this.deadline=setTimeout(()=>this.fail("Relay connection timed out"),2e4),this.upstream.addEventListener("message",o=>{if(this.readyState!==3)try{if(typeof o.data!="string"||new TextEncoder().encode(o.data).length>ou)throw new Error("Invalid relay envelope");const s=JSON.parse(o.data);if(s.type==="ready"&&!this.requested){this.requested=!0,this.transmit({type:"open",streamId:this.streamId,serviceId:n});return}if(s.streamId!==this.streamId)return;if(s.type==="opened"&&this.readyState===0){clearTimeout(this.deadline),this.readyState=1;const l=new Event("open");this.dispatchEvent(l),this.onopen?.(l);return}if(s.type==="close"){this.finish(1001,"Relay route closed"),this.upstream.close();return}if(s.type!=="data"||this.readyState!==1||s.encoding!=="base64"||typeof s.payload!="string"||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(s.payload))throw new Error("Invalid ciphertext relay frame");const i=Lp(s.payload),a=this.binaryType==="blob"?new Blob([i]):i.buffer,c=new MessageEvent("message",{data:a});this.dispatchEvent(c),this.onmessage?.(c)}catch{this.fail("Relay protocol rejected frame")}}),this.upstream.addEventListener("close",o=>this.finish(o.code||1006,"Relay disconnected")),this.upstream.addEventListener("error",()=>this.fail("Relay transport unavailable"))}url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;protocol="";extensions="";binaryType="arraybuffer";readyState=0;onopen=null;onmessage=null;onerror=null;onclose=null;upstream;streamId=crypto.randomUUID();requested=!1;deadline;get bufferedAmount(){return this.upstream.bufferedAmount}transmit(e){const n=JSON.stringify(e);if(this.upstream.readyState!==1||this.upstream.bufferedAmount+n.length>Vx||n.length>ou)throw new Error("Relay unavailable or congested");this.upstream.send(n)}send(e){if(this.readyState!==1)throw new Error("Relay socket is not open");let n;if(ArrayBuffer.isView(e))n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);else if(e instanceof ArrayBuffer)n=new Uint8Array(e);else throw new Error("Relay secure transport requires binary bytes");try{this.transmit({type:"data",streamId:this.streamId,encoding:"base64",payload:Np(n)})}catch(r){throw this.fail("Relay transport congested"),r}}close(e=1e3,n=""){if(this.readyState!==3){try{this.requested&&this.transmit({type:"close",streamId:this.streamId})}catch{}this.finish(e,n),this.upstream.close()}}fail(e){if(this.readyState===3)return;const n=new Event("error");this.dispatchEvent(n),this.onerror?.(n),this.finish(1006,e),this.upstream.close()}finish(e,n){if(this.readyState===3)return;clearTimeout(this.deadline),this.readyState=3;const r=new CloseEvent("close",{code:e,reason:n,wasClean:e===1e3});this.dispatchEvent(r),this.onclose?.(r)}}function Dp(t){return e=>new Xx(e,t)}function Yx(t){if(typeof t!="string"||!t.startsWith("/api/")||/[\\\x00-\x20\x7f#]/.test(t))return null;const e=t.split("?")[0];if(e.includes("//"))return null;try{const r=e.split("/").map((o,s)=>{if(s===0||o===""&&s===e.split("/").length-1)return o;const i=decodeURIComponent(o);if(!i||i==="."||i===".."||/[\\/\x00-\x1f\x7f]/.test(i)||/%[a-f0-9]{2}/i.test(i))throw new Error("Ambiguous API path");return i}).join("/");return r.endsWith("/")&&!r.startsWith("/api/terminal/fs/preview/")?null:r}catch{return null}}function Zx(t){if(!("serviceWorker"in navigator))return()=>{};const e=new Set,n=r=>{if(r.source!==navigator.serviceWorker.controller||r.data?.type!=="termdock-secure-fetch"||r.ports.length!==1)return;const o=r.ports[0],{path:s,method:i,headers:a,body:c,expectedTargetPeerId:l,previewPrefix:d}=r.data;let u;try{u=new URL(s,location.origin)}catch{o.close();return}if(u.origin!==location.origin||!u.pathname.startsWith("/api/")||e.size>=32||typeof i!="string"||c!==void 0&&(!(c instanceof ArrayBuffer)||c.byteLength>5*1024*1024)){o.postMessage({type:"error"}),o.close();return}if(d!==void 0&&(typeof d!="string"||!d.endsWith("/")||!/^\/api\/terminal\/fs\/preview\/[a-f0-9]{32}\//.test(d)||!["GET","HEAD"].includes(i)||!Yx(u.pathname)?.startsWith(d))){o.postMessage({type:"error"}),o.close();return}const f=new AbortController;let h,g,m=!1,b=!1;const w=()=>{b||(b=!0,e.delete(w),f.abort(),h?.cancel().catch(()=>{}),o.close())};e.add(w),o.onmessage=I=>{if(I.data?.type==="cancel"){w();return}I.data?.type!=="pull"||m||b||(m=!0,(async()=>{if(!h){o.postMessage({type:"end"}),w();return}if(!g?.length){const k=await h.read();if(k.done){o.postMessage({type:"end"}),w();return}g=k.value}const y=g.slice(0,64*1024);g=g.subarray(y.length),o.postMessage({type:"chunk",data:y.buffer},[y.buffer])})().catch(()=>{o.postMessage({type:"error"}),w()}).finally(()=>{m=!1}))},o.onmessageerror=w,o.start(),(async()=>{const I=await t();if(b)return;if(l&&l!==I.targetPeerId)throw new Error("Preview target changed");const y=await I.fetch(u.pathname+u.search,{method:i,headers:a,body:["GET","HEAD"].includes(i)?void 0:c,signal:f.signal});if(b){await y.body?.cancel();return}h=y.body?.getReader();const k={};y.headers.forEach((L,C)=>{k[C]=L}),o.postMessage({type:"head",status:y.status,headers:k,bodyless:!h,targetPeerId:I.targetPeerId})})().catch(()=>{b||(o.postMessage({type:"error"}),w())})};return navigator.serviceWorker.addEventListener("message",n),()=>{navigator.serviceWorker.removeEventListener("message",n);for(const r of[...e])r()}}class Ze extends Error{constructor(){super("Device authorization expired or revoked")}}const Ho=new WeakMap;function yr(t,e={}){const n=Ho.get(t);if(!t.closed&&n&&(!n.settled||Date.now()-n.at<(e.maxAgeMs??1e3)))return n.pending;const r={at:Date.now(),settled:!1,pending:void 0},o=Jx(t,e.timeoutMs??5e3).then(s=>(r.at=Date.now(),r.settled=!0,s),s=>{throw Ho.get(t)===r&&Ho.delete(t),s});return r.pending=o,Ho.set(t,r),o}async function Jx(t,e){const n=await t.request({type:"permissions"},{timeoutMs:e});if(n.type!=="result"||typeof n.fullService!="boolean"||!Array.isArray(n.grants))throw new Error("Invalid permission response");const r=n.grants,o=n.fullService===!0;if(!o&&r.length===0)throw new Ze;return{fullService:o,grants:r,canManage:o&&r.length>0||r.some(s=>s.actions.includes("authorization.manage"))}}const Fp="termdock-secure-last-path:",Qx=10*6e4;function Mp(t){try{const e=JSON.parse(sessionStorage.getItem(Fp+t)||"null");return e&&typeof e.key=="string"&&Date.now()-e.at<Qx?e.key:void 0}catch{return}}function nc(t,e){try{sessionStorage.setItem(Fp+t,JSON.stringify({key:e,at:Date.now()}))}catch{}}function jp(t,e,n=!1){return new Promise((r,o)=>{let s=0,i=0,a=!1,c,l;const d=new Set,u=()=>{clearTimeout(l);for(const h of d)h.abort();d.clear()},f=()=>{if(a)return;if(s>=t.length){i||(a=!0,u(),o(c||new Error("没有可用的连接路线。")));return}if(i>=(n?1:2))return;const h=t[s++],g=performance.now(),m=w=>{performance.getEntriesByName("termdock:connection-path").length>64&&performance.clearMeasures("termdock:connection-path"),performance.measure("termdock:connection-path",{start:g,end:performance.now(),detail:{path:h.key.startsWith("relay:")?"relay":"direct",ok:w}})},b=new AbortController;d.add(b),i++,h.run(b.signal).then(w=>{if(m(!0),d.delete(b),a){e(w);return}a=!0,u(),r({value:w,key:h.key})},w=>{if(m(!1),d.delete(b),i--,!a){if(c=w,w instanceof Ze){a=!0,u(),o(w);return}f()}}),clearTimeout(l),!n&&s<t.length&&(l=setTimeout(f,400))};f()})}const eE=3,tE=1/0,nE=10,Up="termdock-secure-workspace-limit";function $p(t){return t===1/0||Number.isInteger(t)&&t>=3&&t<=nE}function rE(){try{const t=localStorage.getItem(Up),e=t==="unlimited"?1/0:Number(t);if($p(e))return e}catch{}return navigator.maxTouchPoints>0?eE:tE}function oE(t,e,n,r){if(t.length<=r)return t;const o=new Set(["root",e,...n?[n]:[]]),s=[...t].reverse().sort((i,a)=>a.touchedAt-i.touchedAt);for(const i of s){if(o.size>=r)break;o.add(i.key)}return t.filter(i=>o.has(i.key))}const Hp="termdock-workspace",lo="termdock:workspace-visibility",rc="termdock:workspace-activate";function ii(){return window.parent!==window&&location.pathname==="/workspace.html"&&new URLSearchParams(location.search).get(Hp)||"root"}let su,iu;function ht(){try{if(window.parent===window)return window.__termdockWorkspaceHost;const t=window.parent.__termdockWorkspaceHost;return t&&t!==su&&(su=t,iu={...t,subscribe(e){const n=t.subscribe(e,ii()),r=o=>{o.persisted||n()};return window.addEventListener("pagehide",r),()=>{n(),window.removeEventListener("pagehide",r)}}}),t?iu:void 0}catch{return}}function es(){const t=ht();return!t||t.snapshot().activeKey===ii()}function Ds(t,e=!0){return ht()?.activate(t,e)??!1}function Mn(t){ht()?.report(ii(),t)}const oc="termdock-secure-workspace-session:",qp="termdock-secure-last-workspace";function sE(){for(const t of["sessionStorage","localStorage"])try{const e=window[t].getItem(qp);if(e)return e}catch{}return null}function iE(t){for(const e of["sessionStorage","localStorage"])try{window[e].setItem(qp,t)}catch{}}function QI(t){if(t)try{const e=JSON.parse(localStorage.getItem(oc+t)||"null");return localStorage.removeItem(oc+t),e&&typeof e.sessionId=="string"&&Date.now()-e.at<6e4?e.sessionId:void 0}catch{return}}function aE(t){if(window.parent!==window||window.termdockDesktop)return;if(window.__termdockWorkspaceHost)return window.__termdockWorkspaceHost;let e={activeKey:"root",items:[{key:"root",service:t,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()}]};try{const u=sE(),f=t&&u!==t.targetPeerId?Gt().find(h=>h.targetPeerId===u):void 0;f?.targetPeerId&&(e={activeKey:f.targetPeerId,items:[...e.items,{key:f.targetPeerId,service:f,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()}]})}catch{}let n=rE(),r=e.activeKey==="root"?"root":null;const o=new Map,s=new Map([["root",window]]),i=new Set,a=()=>{for(const u of[...o.keys()])u()},c=()=>{const u=oE(e.items,e.activeKey,r,n),f=new Set(u.map(h=>h.key));e={...e,items:u};for(const[h,g]of o)g&&!f.has(g)&&o.delete(h);for(const h of s.keys())f.has(h)||s.delete(h);for(const h of i)f.has(h)||i.delete(h)},l=(u,f)=>{try{const h=f.document.createEvent("CustomEvent");if(h.initCustomEvent(lo,!1,!1,{active:e.activeKey===u}),f.dispatchEvent(h),e.activeKey===u){const g=f.document.createEvent("Event");if(g.initEvent("resize",!1,!1),f.dispatchEvent(g),i.delete(u)){const m=f.document.createEvent("Event");m.initEvent(rc,!1,!1),f.dispatchEvent(m)}}else f.document.activeElement?.blur?.()}catch{}},d={snapshot:()=>e,subscribe:(u,f)=>(o.set(u,f),()=>{o.delete(u)}),present(u){r=u},retentionLimit:()=>n,setRetentionLimit(u){if($p(u)){n=u;try{localStorage.setItem(Up,u===1/0?"unlimited":String(u))}catch{}c(),a()}},activate(u,f=!0){const h=Ws(u);if(!h?.targetPeerId)return!1;const g=e.items.find(w=>w.service?.targetPeerId===h.targetPeerId),m=g?.key||h.targetPeerId,b=g?{...g,service:h,touchedAt:Date.now()}:{key:m,service:h,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()};e={activeKey:m,items:g?e.items.map(w=>w===g?b:w):[...e.items,b]},c(),iE(h.targetPeerId),f&&i.add(m),a();for(const[w,I]of s)l(w,I);return!0},report(u,f){const h=e.items.find(m=>m.key===u);if(!h||f.service&&h.service?.targetPeerId&&f.service.targetPeerId!==h.service.targetPeerId)return;const g={...h,...f};JSON.stringify(g)!==JSON.stringify(h)&&(e={...e,items:e.items.map(m=>m===h?g:m)},a())},attach(u,f){f&&e.items.some(h=>h.key===u)?(s.set(u,f),l(u,f)):s.delete(u)},focusSession(u,f){const h=Gt().find(m=>m.targetPeerId===u);if(!h)return!1;try{localStorage.setItem(oc+u,JSON.stringify({sessionId:f,at:Date.now()}))}catch{return!1}d.activate(h,!1);const g=s.get(e.activeKey);if(g){const m=g.document.createEvent("CustomEvent");m.initCustomEvent("termdock:workspace-session",!1,!1,null),g.dispatchEvent(m)}return!0}};return window.__termdockWorkspaceHost=d,d}let Hi;async function Qe(){return Hi||(Hi=(async()=>{const t=await new Promise((e,n)=>{const r=indexedDB.open("termdock-device-identity",1);r.onupgradeneeded=()=>r.result.createObjectStore("keys"),r.onsuccess=()=>e(r.result),r.onerror=()=>n(r.error)});try{const e=await new Promise((o,s)=>{const i=t.transaction("keys").objectStore("keys").get("identity");i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error)});if(e)return nu(e);const n=await Ip();let r=n;return await new Promise((o,s)=>{const i=t.transaction("keys","readwrite"),a=i.objectStore("keys"),c=a.get("identity");c.onsuccess=()=>{typeof c.result=="string"?r=nu(c.result):a.put(_x(n),"identity")},i.oncomplete=()=>o(),i.onerror=()=>s(i.error)}),r}finally{t.close()}})()),Hi}const ft="termdock:secure-state";let J,jn,_e,fr="direct",ts=!1,au=0,ns=!1,cu=-1/0;const hr=globalThis.fetch.bind(globalThis);function ne(){return Wn()}function Br(){return J}function cE(){return _e}function Kp(){J?.close(),_e?.close(),J=void 0,_e=void 0}async function zp(){const t=await hr("/api/auth/status",{signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error("Failed to query auth status");return t.json()}async function lE(){if(ne()){await st();return}if((await zp()).enabled)return;const t=await hr("/api/auth/open/parameters",{cache:"no-store"});if(!t.ok)throw new Error("Open service unavailable");const{serviceIdentity:e}=await t.json();if(typeof e!="string"||!e)throw new Error("Invalid service identity");await Ye({url:location.origin,targetPeerId:e,serviceName:location.hostname})}async function dE(t,e){const{startPasswordBootstrap:n,finishPasswordBootstrap:r}=await Yt(async()=>{const{startPasswordBootstrap:l,finishPasswordBootstrap:d}=await import("./passwordBootstrap-B4C87XkY.js");return{startPasswordBootstrap:l,finishPasswordBootstrap:d}},__vite__mapDeps([0,1,2,3])),o=l=>t===location.origin?l:new URL(l,t).href,s=async(l,d)=>{const u=await hr(o(l),{credentials:"omit",cache:"no-store",signal:AbortSignal.timeout(15e3),...d?{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}:{}});if(!u.ok)throw new Error(u.status===429?"尝试次数较多,请稍后再试。":u.status===401?"密码不正确,请重新输入。":"暂时无法登录这台服务,请稍后重试。");return u.json()},{saltHex:i}=await s("/api/auth/password/parameters"),a=await Qe(),c=await n(e,i);try{const l=await s("/api/auth/password/start",{startLoginRequest:c.startLoginRequest,clientIdentity:a.peerId});let d;try{d=await r(c,l,{clientIdentity:a.peerId,origin:location.origin})}catch{throw new Error("密码不正确,或服务身份无法验证。请检查后重试。")}return await s("/api/auth/password/finish",{attemptId:d.attemptId,finishLoginRequest:d.finishLoginRequest}),{url:t,targetPeerId:d.serverIdentity,serviceName:new URL(t).host,serviceOrigin:t}}finally{c.passwordKey=""}}async function fl(t,e){const n=ne();if(n&&(n.serviceOrigin||n.url)===t)return await sc(n,e),n;try{return await dE(t,e)}catch(r){if(!(r instanceof TypeError)&&!(r instanceof DOMException))throw r;const o=(await Je()).find(i=>i.targetPeerId&&(i.serviceOrigin||i.url)===t);if(!o?.targetPeerId)throw new Error("暂时连不上这台服务,请检查地址和网络。");const s={...o,targetPeerId:o.targetPeerId,serviceName:o.label};return await sc(s,e),s}}async function sc(t,e){const n=await Wp(t),{startPasswordBootstrap:r,finishPasswordBootstrap:o}=await Yt(async()=>{const{startPasswordBootstrap:i,finishPasswordBootstrap:a}=await import("./passwordBootstrap-B4C87XkY.js");return{startPasswordBootstrap:i,finishPasswordBootstrap:a}},__vite__mapDeps([0,1,2,3]));let s;try{const i=await n.request({type:"password-parameters"},{timeoutMs:5e3});s=await r(e,String(i.saltHex));const a=await n.request({type:"password-start",startLoginRequest:s.startLoginRequest,origin:location.origin}),c=await o(s,a,{clientIdentity:(await Qe()).peerId,origin:location.origin});if(c.serverIdentity!==t.targetPeerId)throw new Error("服务身份发生变化。");await n.request({type:"password-finish",attemptId:c.attemptId,finishLoginRequest:c.finishLoginRequest})}catch{throw new Error("暂时无法登录,请检查目标服务密码与入口授权后重试。")}finally{s&&(s.passwordKey=""),n.close()}}async function uE(t){try{const e=ne(),n=e?.serviceOrigin||location.origin,r=await fl(n,t);return await Ye({...r,routes:e?.routes,serviceName:e?.serviceName||r.serviceName}),Response.json({ok:!0})}catch(e){return Response.json({error:e instanceof Error?e.message:"暂时无法登录,请重试。",code:"INVALID_PASSWORD"},{status:401})}}async function lu(t,e){const n=Oe(t),r=(await Je()).find(i=>(i.serviceOrigin||i.url)===n&&i.targetPeerId);if(e===void 0&&r?.targetPeerId)try{return await Ye({...r,targetPeerId:r.targetPeerId,serviceName:r.label}),{}}catch(i){if(!(i instanceof Ze))throw i}if(e!==void 0){const i=await fl(n,e);if(r?.targetPeerId&&r.targetPeerId!==i.targetPeerId)throw new Error("这台服务的身份已改变。请先移除旧记录,再重新添加。");return await Ye({...i,routes:r?.routes,serviceName:r?.label||i.serviceName}),{}}const o=await hr(new URL("/api/auth/open/parameters",n).href,{credentials:"omit",cache:"no-store",signal:AbortSignal.timeout(1e4)}).catch(()=>{throw new Error("暂时连不上这台服务,请检查地址和网络后重试。")});if(o.status===403)return{passwordRequired:!0};if(!o.ok)throw new Error("这台服务暂时不可用,请稍后重试。");const{serviceIdentity:s}=await o.json();if(typeof s!="string"||!s)throw new Error("这不是可连接的 Termdock 服务。");if(r?.targetPeerId&&r.targetPeerId!==s)throw new Error("这台服务的身份已改变。请先移除旧记录,再重新添加。");return await Ye({url:n,targetPeerId:s,serviceName:r?.label||new URL(n).host,serviceOrigin:n}),{}}function Xt(t){const e=[...t.routes||[]];if(t.entryServiceId&&t.entryServiceId!==t.targetPeerId&&e.unshift({url:t.url,targetPeerId:t.entryServiceId}),!e.length&&t.routes===void 0)try{const n=JSON.parse(localStorage.getItem(Oc)||"null");n&&n.targetPeerId!==t.targetPeerId&&new URL(n.url).host===new URL(t.url).host&&e.push(n)}catch{}return e.flatMap((n,r)=>{try{return n.targetPeerId&&n.targetPeerId!==t.targetPeerId&&e.findIndex(o=>o.targetPeerId===n.targetPeerId)===r?[{url:Oe(n.url),targetPeerId:n.targetPeerId}]:[]}catch{return[]}}).slice(0,4)}function br(t){const e=Xt(t),n=[t.serviceOrigin||t.url,...(t.routes||[]).slice(0,4).filter(o=>o.targetPeerId===t.targetPeerId).map(o=>o.url)],r=new Set;for(const o of n)try{const s=Oe(o);e.some(i=>i.url===s)||r.add(s)}catch{}return[...r]}function bn(t){const e=new URL("/api/federation/secure",Oe(t));return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.href}async function Zt(t,e){return yn({url:bn(t.url),targetPeerId:t.targetPeerId,identity:await Qe(),signal:e?AbortSignal.any([e,AbortSignal.timeout(5e3)]):AbortSignal.timeout(5e3)})}async function Wp(t,e){const n=await Qe(),r=br(t).map(i=>({key:`direct:${i}`,run:a=>yn({url:bn(i),targetPeerId:t.targetPeerId,identity:n,signal:AbortSignal.any([a,AbortSignal.timeout(8e3),...e?[e]:[]])})}));for(const i of Xt(t))r.push({key:`relay:${i.targetPeerId}:${i.url}`,run:async a=>{e&&(a=AbortSignal.any([a,e]));const c=[J,_e].find(d=>d&&!d.closed&&d.targetPeerId===i.targetPeerId),l=c||await Zt(i,a);try{if(a.aborted)throw a.reason;const d=await l.request({type:"route-ticket",serviceId:t.targetPeerId},{timeoutMs:5e3});if(a.aborted)throw a.reason;if(typeof d.routeToken!="string")throw new Error("入口未允许此设备连接该服务。");const u=new URL(bn(i.url));return u.pathname="/api/federation/relay",u.searchParams.set("routeToken",d.routeToken),await yn({url:u.href,targetPeerId:t.targetPeerId,identity:n,socketFactory:Dp(t.targetPeerId),signal:AbortSignal.any([a,AbortSignal.timeout(8e3)])})}finally{c||l.close()}}});const o=Mp(t.targetPeerId);r.sort((i,a)=>+(a.key===o)-+(i.key===o));const s=await jp(r,i=>i.close());return nc(t.targetPeerId,s.key),s.value}async function fE(t,e){const n=await Wp(t,e),r=()=>n.close();e.addEventListener("abort",r,{once:!0});try{if(e.aborted||(await yr(n,{timeoutMs:3e3}),e.aborted))throw e.reason;return n}catch(o){throw n.close(),o}finally{e.removeEventListener("abort",r)}}async function Ye(t,e={}){const n=J,r=_e,o=await Qe(),s=Oe(t.serviceOrigin||t.url),i=(await Je()).find(w=>w.targetPeerId===t.targetPeerId),a={...t,routes:t.routes??i?.routes},c=Xt(a),l=br(a);let d,u,f=t.pairingCode,h="direct";const g=new Set,m=new Map,b=async(w,I)=>{if(n&&!n.closed&&n.targetPeerId===w.targetPeerId)return n;if(r&&!r.closed&&r.targetPeerId===w.targetPeerId)return r;const y=m.get(w.targetPeerId);if(y&&!y.closed)return y;const k=await Zt(w,I);return g.add(k),m.set(w.targetPeerId,k),k};try{if(t.routeCode&&t.entryServiceId){const x=c.find(N=>N.targetPeerId===t.entryServiceId);if(!x)throw new Error("邀请缺少入口信息。");if((await(await b(x)).request({type:"route-pair",code:t.routeCode})).serviceId!==t.targetPeerId)throw new Error("邀请的目标服务不一致。");t.routeOnly&&await Rt({id:t.targetPeerId,url:s,label:t.serviceName||new URL(s).host,targetPeerId:t.targetPeerId,serviceOrigin:s,routes:c})}const w=[],I=async(x,v)=>{const A=()=>x.close();v.addEventListener("abort",A,{once:!0});try{if(v.aborted||(await yr(x),v.aborted))throw v.reason}catch(N){throw x.close(),N}finally{v.removeEventListener("abort",A)}};for(const x of l)w.push({key:`direct:${x}`,run:async v=>{const A=await yn({url:bn(x),targetPeerId:t.targetPeerId,pairingCode:f,identity:o,signal:AbortSignal.any([v,AbortSignal.timeout(8e3)])});return f=void 0,await I(A,v),{client:A,path:"direct"}}});for(const x of c)w.push({key:`relay:${x.targetPeerId}:${x.url}`,run:async v=>{let A,N;try{if(A=await b(x,v),v.aborted)throw v.reason;const D=await A.request({type:"route-ticket",serviceId:t.targetPeerId},{timeoutMs:5e3});if(v.aborted)throw v.reason;if(typeof D.routeToken!="string"||!D.routeToken)throw new Error("入口未允许此设备连接该服务。");const E=new URL(bn(x.url));return E.pathname="/api/federation/relay",E.searchParams.set("routeToken",D.routeToken),N=await yn({url:E.href,targetPeerId:t.targetPeerId,pairingCode:f,identity:o,socketFactory:Dp(t.targetPeerId),signal:AbortSignal.any([v,AbortSignal.timeout(8e3)])}),f=void 0,await I(N,v),{client:N,entry:A,path:"relay"}}catch(D){throw N?.close(),A&&A!==r&&A!==n&&A.close(),D}}});const y=Mp(t.targetPeerId);w.sort((x,v)=>+(v.key===y)-+(x.key===y));const k=await jp(w,x=>{x.client.close(),x.entry&&x.entry!==n&&x.entry!==r&&x.entry.close()},!!f);if(d=k.value.client,u=k.value.entry,h=k.value.path,e.renewIfCurrent){if(J!==e.renewIfCurrent||n!==e.renewIfCurrent||n.closed||!n.canSwitchTransport||ne()?.targetPeerId!==t.targetPeerId){d.close();for(const x of g)x!==_e&&x!==J&&x.close();return J??n}J=d,fr=h,_e=u,nc(t.targetPeerId,k.key),n.retire();for(const x of new Set([r,...g]))x&&x!==n&&x!==d&&x!==u&&x.close();return window.dispatchEvent(new Event(ft)),d}if(nc(t.targetPeerId,k.key),J!==n&&J&&!J.closed&&J.targetPeerId===t.targetPeerId){d.close();for(const x of g)x!==_e&&x.close();return J}h==="direct"&&new URL(s).host===location.host&&Bm(t.targetPeerId);const L=(await Je()).find(x=>x.targetPeerId===t.targetPeerId||!x.targetPeerId&&(x.serviceOrigin||x.url)===s),C=L?.label||t.serviceName||new URL(s).host,T={url:s,targetPeerId:t.targetPeerId,serviceName:C,serviceOrigin:s,routes:a.routes??c};if(await(e.rememberOnly?Dm:Rt)({id:L?.id||t.targetPeerId,...T,label:C}),zn!=="unpaired"&&zn!==t.targetPeerId&&ht()&&Ds({id:L?.id||t.targetPeerId,...T,label:C})){d.close();for(const x of g)x!==n&&x!==r&&x.close();return n||d}kf(T),J=d,fr=h,_e=u;for(const x of new Set([n,r,...g]))x&&x!==d&&x!==u&&x.close();return zn!==t.targetPeerId?(location.reload(),new Promise(()=>{})):(window.dispatchEvent(new Event(ft)),d)}catch(w){d?.close();for(const I of g)I!==r&&I.close();throw w}}async function hE(){const t=J,e=ne();if(!(ns||ts||jn||!t?.renewalDue||!t.canSwitchTransport||!e||performance.now()-cu<3e4)){cu=performance.now(),ns=!0;try{await Ye(e,{renewIfCurrent:t})}catch(n){console.debug("[connection] renewal deferred",{reason:n instanceof Error?n.message:"unknown"})}finally{ns=!1}}}async function pE(){const t=J,e=ne();if(Date.now()-au<6e4||ns||ts||fr!=="relay"||!t||t.closed||!t.canSwitchTransport||!e?.serviceOrigin)return;ts=!0,au=Date.now();let n;try{for(const o of br(e))try{n=await yn({url:bn(o),targetPeerId:e.targetPeerId,identity:await Qe(),signal:AbortSignal.timeout(3e3)}),await yr(n);break}catch(s){if(n?.close(),n=void 0,s instanceof Ze)throw s}if(!n||J!==t||!t.canSwitchTransport)return;const r=_e;J=n,n=void 0,_e=void 0,fr="direct",t.close(),r?.close(),window.dispatchEvent(new Event(ft))}catch(r){r instanceof Ze&&J===t&&(Kp(),window.dispatchEvent(new Event("auth:unauthorized")))}finally{n?.close(),ts=!1}}function gE(){return fr}async function mE(t){return t?(t.throwIfAborted(),new Promise((e,n)=>{const r=()=>n(t.reason);t.addEventListener("abort",r,{once:!0}),st().then(o=>{t.removeEventListener("abort",r),t.aborted?n(t.reason):e(o)},o=>{t.removeEventListener("abort",r),n(o)})})):st()}async function st(){if(J&&!J.closed){const e=J;return hE(),e}if(J=void 0,jn)return jn;const t=ne();if(!t)throw new Error("DEVICE_PAIRING_REQUIRED");return jn=Ye(t,{rememberOnly:!0}).catch(e=>{if(J&&!J.closed&&J.targetPeerId===t.targetPeerId)return J;throw e}).finally(()=>{jn=void 0}),jn}function Gp(t){const e=new URL(t,location.href);if(J&&!J.closed)return J.openSocket(e.pathname+e.search);let n;const r=new Op(t,o=>n?.send(o),()=>n?.close());return st().then(o=>{r.readyState!==3&&(n=o.openSocket(e.pathname+e.search),n.onopen=()=>r.accept({type:"ws-ready",id:""}),n.onmessage=s=>r.accept({type:"ws-data",id:"",data:s.data}),n.onclose=s=>r.accept({type:"ws-close",id:"",code:s.code,reason:s.reason}),n.onerror=()=>r.fail(new Error("Encrypted connection unavailable")))}).catch(o=>r.fail(o)),r}function wE(){Zx(st),window.fetch=async(t,e)=>{const n=new URL(t instanceof Request?t.url:String(t),location.href);if(!n.pathname.startsWith("/api/"))return hr(t,e);if(n.origin!==location.origin)throw new Error("Remote business API requires a paired encrypted service");if(n.pathname==="/api/meta")return hr(t,e);if(n.pathname==="/api/auth/status"){if(!ne()){const s=await zp();return Response.json({enabled:s.enabled,authenticated:!1})}try{const s=await yr(await st());return Response.json({enabled:s.grants.length>0,authenticated:!0})}catch(s){if(s instanceof Ze)return Response.json({enabled:!0,authenticated:!1});throw s}}if(n.pathname==="/api/auth/login"){const i=await new Request(t instanceof Request?t:n.href,e).json();return uE(typeof i.password=="string"?i.password:"")}if(n.pathname==="/api/csrf-token")return Response.json({csrfToken:"encrypted-device-channel"});if(n.pathname==="/api/auth/logout")return J&&!J.closed&&await J.request({type:"logout"}),J?.close(),_e?.close(),J=void 0,_e=void 0,Lm(),location.reload(),Response.json({ok:!0});const r=e?.signal!==void 0?e.signal:t instanceof Request?t.signal:void 0,o=await mE(r);return t instanceof Request?o.fetch(t,e):o.fetch(n.pathname+n.search,e)}}async function yE(t){if(!t.targetPeerId)throw new Error("请先连接这台服务,再查看可中转的服务。");for(const e of br({...t,targetPeerId:t.targetPeerId})){let n;const r={url:e,targetPeerId:t.targetPeerId};try{n=await Zt(r)}catch{continue}try{const o=await n.request({type:"route-targets"},{timeoutMs:5e3});if(!Array.isArray(o.items))throw new Error("入口服务需要更新后才能查看中转列表。");return{route:r,canManage:o.canManage===!0,items:o.items}}catch(o){throw o instanceof Error&&/UNKNOWN|UNSUPPORTED/i.test(o.message)?new Error("入口服务需要更新后才能查看中转列表。"):o}finally{n.close()}}throw new Error("暂时连不上中转入口,请检查地址和网络后重试。")}async function bE(t,e){const n=await Zt(t);try{const r=await n.request({type:"route-targets"},{timeoutMs:5e3}),o=(Array.isArray(r.items)?r.items:[]).find(c=>c.serviceId===e);if(!o)throw new Error("该服务已不可见,请刷新列表或请入口管理员授权。");if(!o.available)throw new Error("入口暂时无法中转到这台服务,请稍后重试。");const s=(await Je()).find(c=>c.targetPeerId===o.serviceId),i=[t,...(s?.routes||[]).filter(c=>c.targetPeerId!==t.targetPeerId)];if(i.length>4)throw new Error("这台服务已保存 4 个备用连接,请先移除一个后重试。");if(!o.authorized){if(!r.canManage)throw new Error("请先让入口管理员授权此设备。");await n.request({type:"route-grant",serviceId:o.serviceId,subjectId:(await Qe()).peerId})}const a=s?.serviceOrigin||s?.url||o.url||t.url;return{url:a,serviceOrigin:a,targetPeerId:o.serviceId,serviceName:s?.label||o.label||(o.url?new URL(o.url).host:`中转服务 ${o.serviceId.slice(0,8)}`),routes:i}}finally{n.close()}}async function vE(t,e){const n=await Zt(t);try{const r=await n.request({type:"route-access"},{timeoutMs:5e3}),o=(await Qe()).peerId;return{canManage:r.canManage===!0,grants:(Array.isArray(r.grants)?r.grants:[]).filter(s=>s.subjectId===o&&s.targetServiceId===e)}}finally{n.close()}}async function SE(t,e,n){if(n!==void 0&&(await fl(Oe(e.url),n)).targetPeerId!==e.targetPeerId)throw new Error("入口服务的身份已改变,请重新连接并确认。");const r=await Zt(e);try{await r.request({type:"route-grant",serviceId:t.targetPeerId,subjectId:(await Qe()).peerId,url:Oe(t.serviceOrigin||t.url)})}finally{r.close()}}async function xE(t,e){const n=await Zt(e);try{const r=await n.request({type:"route-access"},{timeoutMs:5e3}),o=(await Qe()).peerId,s=(Array.isArray(r.grants)?r.grants:[]).filter(i=>i.subjectId===o&&i.targetServiceId===t&&i.active);for(const i of s)await n.request({type:"route-revoke",grantId:i.id})}finally{n.close()}}async function Vp(t,e){const n=await Zt(e);try{const r=await n.request({type:"route-invite-create",serviceId:t.targetPeerId});if(typeof r.routeCode!="string"||typeof r.expiresAt!="number")throw new Error("暂时无法生成备用连接邀请。");return{routeCode:r.routeCode,expiresAt:r.expiresAt}}finally{n.close()}}async function rs(t,e){const n=(await Je()).find(o=>o.id===t.id||t.targetPeerId&&o.targetPeerId===t.targetPeerId)||t;await Rt({...n,url:n.serviceOrigin||n.url,entryServiceId:void 0,routes:e});const r=ne();r&&r.targetPeerId===t.targetPeerId&&kf({...r,url:r.serviceOrigin||r.url,entryServiceId:void 0,routes:e})}async function EE(t,e){const n=t.targetPeerId;if(!n)throw new Error("请先连接这台服务,再添加备用地址。");let r;try{r=Oe(e)}catch{throw new Error("请输入有效的 HTTPS 地址,例如 https://电脑地址:9834。")}const o=async()=>(await Je()).find(a=>a.targetPeerId===n)||t,s=a=>{const c=a.routes??Xt({...a,targetPeerId:n});if(Oe(a.serviceOrigin||a.url)===r||c.some(l=>Oe(l.url)===r))throw new Error("这个地址已经在连接列表中。");if(c.length>=4)throw new Error("最多保存 4 个备用地址或入口,请先移除不再使用的连接。");return[...c,{url:r,targetPeerId:n}]};s(await o());let i;try{try{i=await yn({url:bn(r),targetPeerId:n,identity:await Qe(),signal:AbortSignal.timeout(5e3)}),await yr(i)}catch(l){throw l instanceof Ze?new Error("这台服务尚未授权当前设备,请先恢复设备授权。"):new Error("无法验证这个地址。请确认能访问该地址、HTTPS 证书受信任,且运行的是同一台 Termdock 服务。")}const a=await o(),c=s(a);if(await rs(a,c),ne()?.targetPeerId===n&&zn===n&&(!J||J.closed)){const l=J,d=_e;J=i,i=void 0,_e=void 0,fr="direct",l?.close(),d?.close(),window.dispatchEvent(new Event(ft))}return c}finally{i?.close()}}async function du(t,e){await sc(t,e),await Ye({...t,pairingCode:void 0,routeCode:void 0})}function AE(t,e){return e.aborted?Promise.reject(e.reason):new Promise((n,r)=>{const o=()=>r(e.reason);e.addEventListener("abort",o,{once:!0}),t.then(n,r).finally(()=>e.removeEventListener("abort",o))})}function Xp(){if(window.termdockDesktop||window.parent!==window)return;if(window.__termdockCollaboration)return window.__termdockCollaboration;const t=new Map;let e=[],n=!1;const r=l=>{const d=l.targetPeerId;if(ne()?.targetPeerId===d)return st();const u=t.get(d);if(u)return u.then(h=>h.closed?(t.get(d)===u&&t.delete(d),r(l)):h);const f=fE({...l,targetPeerId:d},AbortSignal.timeout(12e3)).then(h=>{if(n||t.get(d)!==f)throw h.close(),new Error("服务连接已移除");return h}).catch(h=>{throw t.get(d)===f&&t.delete(d),h});return t.set(d,f),f},o=()=>{const l=ne(),d=Gt();l&&!d.some(f=>f.targetPeerId===l.targetPeerId)&&d.push({...l,id:l.targetPeerId,label:l.serviceName||l.serviceOrigin||l.url});const u=new Set(d.map(f=>f.targetPeerId));for(const[f,h]of t)u.has(f)||(t.delete(f),h.then(g=>g.close()).catch(()=>{}));e=d.filter(f=>!!f.targetPeerId).map(f=>({origin:f.serviceOrigin||f.url,label:f.label,request:async(h,g="GET",m)=>{if(!/^\/collaboration-(?:federation|groups)(?:\/[^?#]*)?$/.test(h))throw new Error("无效的协作请求");const b=AbortSignal.timeout(18e3),w=await AE(r(f),b),I=new Headers({"Content-Type":"application/json"});if(g!=="GET"&&g!=="HEAD"){const L=await w.fetch("/api/csrf-token",{signal:b});if(!L.ok)throw new Error("无法读取目标服务的请求令牌");const C=await L.json();if(typeof C.csrfToken!="string")throw new Error("目标服务的请求令牌无效");I.set("X-XSRF-TOKEN",C.csrfToken)}const y=await w.fetch(`/api/terminal/operations${h}`,{method:g,headers:I,signal:b,...m===void 0?{}:{body:JSON.stringify(m)}}),k=y.status===204?void 0:await y.json();if(!y.ok)throw new Error(k?.error||"服务不可达或未授权协作访问");return k}}))},s=new Om(()=>e),i={peers:l=>(o(),s.peers(l)),save:async(l,d)=>{o();const u=await s.save(l,d);return a(),u}},a=async()=>{n||document.hidden||!navigator.onLine||!ne()||(o(),!(e.length<2)&&await s.refresh().catch(()=>{}))};window.__termdockCollaboration=i;const c=window.setInterval(()=>{a()},2e3);return document.addEventListener("visibilitychange",a),window.addEventListener("online",a),window.addEventListener("pageshow",a),window.addEventListener("pagehide",l=>{if(!l.persisted){n=!0,clearInterval(c);for(const d of t.values())d.then(u=>u.close()).catch(()=>{});t.clear()}}),a(),i}function Yp(){if(!window.termdockDesktop)try{if(window.parent===window)return Xp();if(location.pathname==="/workspace.html"&&window.parent.location.origin===location.origin)return window.parent.__termdockCollaboration}catch{}}var qo={},uu;function kE(){if(uu)return qo;uu=1;var t=Em();return qo.createRoot=t.createRoot,qo.hydrateRoot=t.hydrateRoot,qo}var CE=kE();const IE=Af(CE);const Zp=(...t)=>t.filter((e,n,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===n).join(" ").trim();const RE=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const TE=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,n,r)=>r?r.toUpperCase():n.toLowerCase());const fu=t=>{const e=TE(t);return e.charAt(0).toUpperCase()+e.slice(1)};var qi={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const PE=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1},NE=_.createContext({}),LE=()=>_.useContext(NE),BE=_.forwardRef(({color:t,size:e,strokeWidth:n,absoluteStrokeWidth:r,className:o="",children:s,iconNode:i,...a},c)=>{const{size:l=24,strokeWidth:d=2,absoluteStrokeWidth:u=!1,color:f="currentColor",className:h=""}=LE()??{},g=r??u?Number(n??d)*24/Number(e??l):n??d;return _.createElement("svg",{ref:c,...qi,width:e??l??qi.width,height:e??l??qi.height,stroke:t??f,strokeWidth:g,className:Zp("lucide",h,o),...!s&&!PE(a)&&{"aria-hidden":"true"},...a},[...i.map(([m,b])=>_.createElement(m,b)),...Array.isArray(s)?s:[s]])});const Ee=(t,e)=>{const n=_.forwardRef(({className:r,...o},s)=>_.createElement(BE,{ref:s,iconNode:e,className:Zp(`lucide-${RE(fu(t))}`,`lucide-${t}`,r),...o}));return n.displayName=fu(t),n};const _E=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Jp=Ee("arrow-left",_E);const OE=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],DE=Ee("arrow-right",OE);const FE=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],ME=Ee("arrow-up-right",FE);const jE=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M11.68 2.009A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673c-.824-.85-1.678-1.731-2.21-3.348",key:"xaq59h"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]],Qp=Ee("bell-dot",jE);const UE=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],hl=Ee("check",UE);const $E=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],eg=Ee("chevron-down",$E);const HE=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],vn=Ee("chevron-right",HE);const qE=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],KE=Ee("chevron-up",qE);const zE=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],tg=Ee("copy",zE);const WE=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],ng=Ee("ellipsis",WE);const GE=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],De=Ee("loader-circle",GE);const VE=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],XE=Ee("monitor",VE);const YE=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],ZE=Ee("pencil",YE);const JE=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],rg=Ee("plus",JE);const QE=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],ai=Ee("server",QE);const e1=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],og=Ee("smartphone",e1);const t1=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],n1=Ee("terminal",t1);const r1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],sg=Ee("x",r1);let Hn=null;function o1(t){return!Hn||!t?!1:(Hn(t),!0)}function eR(t){Hn=t;const e=n=>{const{text:r,nonce:o}=n.detail??{};!r||Hn!==t||(t(r),n.stopImmediatePropagation(),o&&window.dispatchEvent(new CustomEvent("termdock-insert-reference-ack",{detail:{nonce:o,ok:!0}})))};return window.addEventListener("termdock-insert-reference",e,!0),()=>{Hn===t&&(Hn=null),window.removeEventListener("termdock-insert-reference",e,!0)}}const s1=/^[A-Za-z0-9_@%+=:,./-]$/;function i1(t){return Array.from(t,e=>(e.codePointAt(0)??0)>127||s1.test(e)?e:`\\${e}`).join("")}function a1(t,e){if(!e)return!1;try{const n=new URL(e.serviceOrigin||e.url);return n.origin===t&&/^(localhost|\[::1\]|127(?:\.\d{1,3}){3})$/.test(n.hostname)&&!(e.routes??[]).some(r=>r.targetPeerId!==e.targetPeerId)}catch{return!1}}function c1(t){const e=s=>s.target instanceof Element?s.target.closest("[data-termdock-terminal-dropzone]"):null,n=()=>!a1(location.origin,Wn()),r=s=>{const i=e(s);!i||!n()||!s.dataTransfer?.types.includes("Files")||(s.preventDefault(),s.stopImmediatePropagation(),s.dataTransfer.dropEffect="copy",i.dataset.nativeFileDrag="true",i.dataset.nativeFileDropState="remote")},o=s=>{const i=e(s),a=Array.from(s.dataTransfer?.files??[]);if(!i||!a.length||!n())return;s.preventDefault(),s.stopImmediatePropagation();const c=i.dataset.termdockTerminalDropzone??"";i.dataset.nativeFileDrag="true",i.dataset.nativeFileDropState="uploading",Yt(async()=>{const{uploadFiles:l}=await Promise.resolve().then(()=>w2);return{uploadFiles:l}},void 0).then(({uploadFiles:l})=>l("/tmp",a)).then(l=>{if(l.files.length!==a.length||l.files.some(d=>!d.path))throw new Error("Upload did not return every file path");delete i.dataset.nativeFileDrag,delete i.dataset.nativeFileDropState,t({sessionKey:c,paths:l.files.map(d=>d.path)})}).catch(l=>{i.dataset.nativeFileDropState="error",i.dispatchEvent(new CustomEvent("termdock:file-drop-error",{bubbles:!0,detail:l instanceof Error?l.message:"File upload failed"})),window.setTimeout(()=>{i.dataset.nativeFileDropState==="error"&&(delete i.dataset.nativeFileDrag,delete i.dataset.nativeFileDropState)},3e3)})};return window.addEventListener("dragover",r,!0),window.addEventListener("drop",o,!0),()=>{window.removeEventListener("dragover",r,!0),window.removeEventListener("drop",o,!0)}}function et(){return typeof window>"u"?null:window.termdockDesktop??null}const Ki=new Set;let hu=!1;function tR(t){const e=et();if(!e)return()=>{};if(Ki.add(t),!hu){const n=r=>{if(!o1(r.paths.map(i1).join(" ")+" "))for(const o of Ki)o(r)};c1(n),e.onNativeFileDrop(n),hu=!0}return()=>{Ki.delete(t)}}function ig(t=navigator.userAgent,e=navigator.maxTouchPoints){const n=/iPad/.test(t)||/Macintosh/.test(t)&&e>1?"iPad":/iPhone/.test(t)?"iPhone":/Android/.test(t)?"Android":/Windows/.test(t)?"Windows":/Macintosh|Mac OS X/.test(t)?"Mac":/Linux/.test(t)?"Linux":"设备",r=/Electron/.test(t)?"Termdock":/Edg\//.test(t)?"Edge":/Firefox|FxiOS/.test(t)?"Firefox":/Chrome|CriOS/.test(t)?"Chrome":/Safari/.test(t)?"Safari":"浏览器";return`${n} · ${r}`}let l1;function d1(){return l1??=(async()=>{const t=navigator.userAgent,[e,n]=ig().split(" · "),r=/(?:Edg|Firefox|FxiOS|Chrome|CriOS|Version)\/([\d.]+)/g,o=[...t.matchAll(r)],s=/(?:CPU (?:iPhone )?OS |Mac OS X |Android )([\d._]+)/.exec(t)?.[1]?.replaceAll("_","."),i={system:`${e}${s?` ${s}`:""}`,client:`${n}${o.length?` ${o.at(-1)[1]}`:""}`,mode:matchMedia("(display-mode: standalone)").matches||navigator.standalone?"已安装的网页应用":"网页"},a=et();if(a){i.mode="桌面客户端";const l=/Electron\/([\d.]+)/.exec(t)?.[1];i.client=l?`Termdock(Electron ${l})`:"Termdock";try{Object.assign(i,await a.deviceInfo?.())}catch{}return i}const c=navigator.userAgentData;try{const l=await c?.getHighEntropyValues(["model","architecture","bitness","platformVersion"]);typeof l?.model=="string"&&l.model&&(i.model=l.model),typeof l?.architecture=="string"&&l.architecture&&(i.arch=`${l.architecture}${l.bitness?` ${l.bitness} 位`:""}`)}catch{}return i})()}function u1({service:t,onBusyChange:e,onConnect:n,onConnectWithPassword:r}){const[o,s]=_.useState(),[i,a]=_.useState(!0),[c,l]=_.useState(!1),[d,u]=_.useState(""),[f,h]=_.useState(0),[g,m]=_.useState(),[b,w]=_.useState("");_.useEffect(()=>{let k=!1;return a(!0),u(""),s(void 0),yE(t).then(L=>{k||s(L)}).catch(L=>{k||u(L instanceof Error?L.message:"暂时无法读取中转列表,请重试。")}).finally(()=>{k||a(!1)}),()=>{k=!0}},[t.id,t.url,f]);const I=async k=>{if(!c){l(!0),e(!0),u("");try{await k()}catch(L){u(L instanceof Error?L.message:"暂时无法连接,请重试。")}finally{l(!1),e(!1)}}},y=async k=>{const L=await bE(o.route,k.serviceId);try{await n(L)}catch(C){if(!(C instanceof Ze))throw C;m(L)}};return p.jsxs("div",{className:"service-form",children:[g?p.jsxs("form",{className:"service-form",onSubmit:k=>{k.preventDefault(),I(async()=>{try{await r?.(g,b)}finally{w("")}})},children:[p.jsxs("p",{className:"service-help",children:["已通过“",t.label,"”连接到“",g.serviceName,"”。请登录目标服务,完成此设备的访问授权。"]}),r?p.jsxs(p.Fragment,{children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"目标服务密码"}),p.jsx("input",{type:"password",autoFocus:!0,required:!0,autoComplete:"current-password",value:b,disabled:c,onChange:k=>w(k.target.value)})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:c||!b,children:c?"正在登录…":"登录并连接"})]}):p.jsx("p",{className:"service-help",children:"请让目标服务管理员邀请此设备后再连接。"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:c,onClick:()=>{m(void 0),w(""),u(""),h(k=>k+1)},children:"返回中转列表"})]}):p.jsxs(p.Fragment,{children:[p.jsxs("p",{className:"service-help",children:["通过“",t.label,"”连接下方服务。",o?.canManage?"选择未授权的服务会授权此设备使用该中转。":"这里只显示已授权给此设备的中转。","目标服务会单独验证访问权限。"]}),i?p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取可中转的服务…"]}):o&&p.jsxs("div",{className:"service-list",children:[o.items.map(k=>p.jsxs("button",{type:"button",className:"service-row-open service-full-width",disabled:c||!k.available,onClick:()=>{I(()=>y(k))},children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:19})}),p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:k.label||(k.url?new URL(k.url).host:`中转服务 ${k.serviceId.slice(0,8)}`)}),p.jsx("span",{className:"service-description",children:k.available?k.authorized?"已获中转授权 · 连接":"授权此设备并连接":"中转暂不可用"})]}),p.jsx(vn,{size:16})]},k.serviceId)),o.items.length===0&&p.jsx("p",{className:"service-empty",children:o.canManage?"暂无可中转的服务。可在本机 Mac 客户端连接目标服务,或在目标服务的“备用连接”中启用本入口。":"暂无已授权的中转服务,请让入口管理员分享备用连接邀请。"})]}),c&&p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在授权并连接目标服务…"]}),!i&&p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:c,onClick:()=>h(k=>k+1),children:"刷新列表"})]}),d&&p.jsx("p",{className:"service-error",role:"alert",children:d})]})}const ic="#termdock-invite=";function ag(t){const e=new URL(t.entryUrl);e.hash="",e.search="",e.pathname="/";const n=new TextEncoder().encode(JSON.stringify(t));return e.hash=ic.slice(1)+btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),e.href}function Fs(t){const e=new URL(t);if(!["https:","http:"].includes(e.protocol)||!e.hash.startsWith(ic))throw new Error("这不是有效的 Termdock 邀请链接");const n=e.hash.slice(ic.length);if(n.length>8192)throw new Error("邀请链接过长");let r;try{const i=n.replace(/-/g,"+").replace(/_/g,"/");r=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Uint8Array.from(atob(i),a=>a.charCodeAt(0))))}catch{throw new Error("邀请链接不完整,请重新复制")}if(r.v!==1||typeof r.serviceId!="string"||!/^12D3KooW[1-9A-HJ-NP-Za-km-z]{44}$/.test(r.serviceId)||r.routeOnly!==!0&&(typeof r.code!="string"||!/^[A-Za-z0-9_-]{32,128}$/.test(r.code)))throw new Error("邀请信息无效或版本不兼容");const o=new URL(r.entryUrl);if(o.origin!==e.origin||o.username||o.password||!["https:","http:"].includes(o.protocol))throw new Error("邀请地址与服务不一致");if(o.protocol==="http:"&&!["localhost","127.0.0.1","[::1]"].includes(o.hostname))throw new Error("远程邀请需要 HTTPS");if(r.entryServiceId!==void 0&&(typeof r.entryServiceId!="string"||!/^12D3KooW[1-9A-HJ-NP-Za-km-z]{44}$/.test(r.entryServiceId)))throw new Error("邀请入口身份无效");if(r.routeCode!==void 0&&(typeof r.routeCode!="string"||!/^[A-Za-z0-9_-]{32,128}$/.test(r.routeCode)||!r.entryServiceId))throw new Error("邀请入口权限无效");if(r.routeOnly===!0&&(!r.entryServiceId||!r.routeCode||r.code!==void 0))throw new Error("备用连接邀请不完整");let s=o.origin;if(r.serviceUrl!==void 0){const i=new URL(r.serviceUrl);if(!["https:","http:"].includes(i.protocol)||i.username||i.password)throw new Error("目标服务地址无效");s=r.entryServiceId&&r.entryServiceId!==r.serviceId?i.origin:o.origin}return{url:o.origin,targetPeerId:r.serviceId,pairingCode:r.code,...r.routeOnly===!0?{routeOnly:!0}:{},serviceOrigin:s,serviceName:typeof r.name=="string"?r.name.slice(0,120):void 0,entryServiceId:r.entryServiceId,routeCode:r.routeCode}}function f1({service:t,onBusyChange:e}){const n={...t,targetPeerId:t.targetPeerId,serviceName:t.label},[r,o]=_.useState(()=>t.routes??Xt(n)),[s,i]=_.useState([]),[a,c]=_.useState(!0),[l,d]=_.useState(!1),[u,f]=_.useState(""),h=B=>{d(B),e(B)},[g,m]=_.useState(),[b,w]=_.useState(""),[I,y]=_.useState(""),[k,L]=_.useState(""),[C,T]=_.useState(!1),[x,v]=_.useState(),[A,N]=_.useState(),[D,E]=_.useState(!1);_.useEffect(()=>{let B=!1;return Je().then(F=>{B||i(F.filter(U=>U.targetPeerId&&U.targetPeerId!==t.targetPeerId))}).catch(()=>{B||f("暂时无法读取可用服务。")}).finally(()=>{B||c(!1)}),()=>{B=!0}},[t.targetPeerId]);const S=B=>s.find(F=>F.targetPeerId===B.targetPeerId)?.label||new URL(B.url).host,P=async B=>{h(!0),f(""),L("");try{await B()}catch(F){const U=F instanceof Error?F.message:"";f(/AUTHORIZATION|DENIED/.test(U)?"当前设备没有入口管理权限。请让管理员分享备用连接邀请,或使用入口密码授权。":"暂时无法完成。请确认入口能连接目标服务,且目标地址、证书和授权有效。")}finally{h(!1)}},R=async(B,F)=>{const U={url:B.serviceOrigin||B.url,targetPeerId:B.targetPeerId};await P(async()=>{const H=await vE(U,n.targetPeerId);if(!H.grants.some(K=>K.active)){if(!H.canManage&&F===void 0){m(B);return}await SE(n,U,F)}const q=[...r.filter(K=>K.targetPeerId!==U.targetPeerId),U];await rs(t,q),o(q),m(void 0),w("")})};if(A)return p.jsxs("div",{className:"service-form",children:[p.jsxs("p",{className:"service-help",children:["把链接发给需要使用此备用连接的人。它只允许通过入口连接“",t.label,"”,对方仍需获得目标服务的访问权限。"]}),p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"备用连接邀请"}),p.jsx("input",{readOnly:!0,value:A,onFocus:B=>B.target.select()})]}),p.jsxs("button",{type:"button",className:"service-button service-primary",onClick:()=>{navigator.clipboard.writeText(A).then(()=>E(!0)).catch(()=>f("无法自动复制,请长按链接复制。"))},children:[p.jsx(tg,{size:16}),D?"已复制":"复制邀请链接"]}),p.jsx("button",{type:"button",className:"service-button service-secondary",onClick:()=>{N(void 0),E(!1)},children:"返回备用连接"}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u})]});if(g)return p.jsxs("form",{className:"service-form",onSubmit:B=>{B.preventDefault(),R(g,b).finally(()=>w(""))},children:[p.jsxs("p",{className:"service-help",children:["需要“",g.label,"”的管理员授权。若这是你的服务,可以使用它的密码;否则请管理员分享备用连接邀请。"]}),p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"入口服务密码"}),p.jsx("input",{type:"password",required:!0,value:b,onChange:B=>w(B.target.value),autoComplete:"current-password",disabled:l,autoFocus:!0})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:l||!b,children:l?"正在授权…":"授权并启用"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>{m(void 0),w("")},children:"取消"}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u})]});const O=r.filter(B=>B.targetPeerId===n.targetPeerId),j=r.filter(B=>B.targetPeerId!==n.targetPeerId),M=async()=>{if(!l){h(!0),T(!0),f(""),L("");try{o(await EE({...t,routes:r},I)),y(""),L("备用地址已验证并保存。")}catch(B){f(B instanceof Error?B.message:"暂时无法添加地址,请重试。")}finally{h(!1),T(!1)}}};return p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"电脑换了网络?添加它在新网络下的地址,原地址连不上时会自动尝试。只接受同一台服务。"}),p.jsxs("form",{className:"service-form",onSubmit:B=>{B.preventDefault(),M()},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"备用地址"}),p.jsx("input",{value:I,onChange:B=>{y(B.target.value),f(""),L("")},required:!0,disabled:l||r.length>=4,inputMode:"url",autoComplete:"off",autoCapitalize:"none",spellCheck:!1,placeholder:"例如:192.168.10.20:9834"})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:l||r.length>=4||!I.trim(),children:C?p.jsxs(p.Fragment,{children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在验证…"]}):"验证并添加"})]}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u}),k&&p.jsx("p",{role:"status",className:"service-help",children:k}),r.length>=4&&p.jsx("p",{className:"service-help",children:"已保存 4 个备用连接。移除不再使用的地址或入口后,可以继续添加。"}),p.jsxs("div",{children:[p.jsx("p",{className:"service-help",children:"首选地址"}),p.jsx("p",{className:"service-address",children:t.serviceOrigin||t.url})]}),O.length>0&&p.jsx("div",{className:"service-list",children:O.map(B=>p.jsxs("div",{className:"service-route-item",children:[p.jsxs("div",{className:"service-route-line",children:[p.jsx("span",{className:"service-address service-route-address",children:B.url}),p.jsx("button",{type:"button",className:"service-icon-button","aria-label":`移除地址 ${B.url}`,disabled:l,onClick:()=>v(B),children:"移除"})]}),x?.targetPeerId===B.targetPeerId&&x.url===B.url&&p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"从备用连接中移除此地址?不会停止正在运行的终端。"}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>v(void 0),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>{P(async()=>{const F=r.filter(U=>U.targetPeerId!==B.targetPeerId||U.url!==B.url);await rs(t,F),o(F),v(void 0)})},children:"确认移除"})]})]})]},B.url))}),p.jsxs("details",{className:"service-relay-options",children:[p.jsxs("summary",{children:["通过其他服务中转",j.length?`(${j.length})`:""]}),p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"所有直连地址都不可用时,尝试下方已授权入口;直连恢复后自动切回。"}),j.length>0&&p.jsx("div",{className:"service-list",children:j.map(B=>p.jsxs("div",{className:"service-route-item",children:[p.jsxs("div",{className:"service-route-line",children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:18})}),p.jsx("span",{className:"service-name",children:S(B)}),p.jsx(hl,{size:16,className:"service-selected"})]}),x?.targetPeerId===B.targetPeerId?p.jsxs("div",{className:"service-form",children:[p.jsxs("p",{className:"service-help",children:["撤销此设备经“",S(B),"”连接目标的权限?如当前无法直连,目标服务将断开。"]}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>v(void 0),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>{P(async()=>{await xE(n.targetPeerId,B);const F=r.filter(U=>U.targetPeerId!==B.targetPeerId);await rs(t,F),o(F),v(void 0)})},children:"确认撤销"})]})]}):p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>{P(async()=>{const F=await Vp(n,B);N(ag({v:1,routeOnly:!0,serviceId:n.targetPeerId,name:t.label,serviceUrl:t.serviceOrigin||t.url,entryUrl:B.url,entryServiceId:B.targetPeerId,routeCode:F.routeCode}))})},children:"分享备用连接"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>v(B),children:"撤销授权"})]})]},B.targetPeerId))}),a?p.jsxs("p",{role:"status",className:"service-feedback",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取服务…"]}):p.jsxs("div",{children:[p.jsx("p",{className:"service-help",children:"添加中转入口"}),s.filter(B=>!r.some(F=>F.targetPeerId===B.targetPeerId)).map(B=>p.jsxs("button",{type:"button",className:"service-row-open service-full-width",disabled:l||r.length>=4,onClick:()=>{R(B)},children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:B.label}),p.jsx("span",{className:"service-description",children:"验证并授权后启用"})]}),p.jsx(vn,{size:16})]},B.id)),s.length===0&&p.jsx("p",{className:"service-empty",children:"添加并登录另一台服务后,可以将它设为中转入口。"})]})]})]}),l&&!C&&p.jsxs("p",{role:"status",className:"service-feedback",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在验证连接与授权…"]})]})}function h1({current:t,renderRoutes:e,renderRelayServices:n,onOpen:r,onAdd:o,onInvite:s,hideHeader:i,onNavigation:a,onBusyChange:c,initiallyAdding:l=!1}){const[d,u]=_.useState([]),[f,h]=_.useState(!0),[g,m]=_.useState(l?{kind:"add"}:{kind:"list"}),[b,w]=_.useState(!1),I=_.useCallback(E=>{w(E),c?.(E)},[c]),[y,k]=_.useState(""),L=_.useCallback(()=>{m(E=>E.kind==="routes"||E.kind==="relay-services"?{kind:"edit",service:E.service}:{kind:"list"}),k("")},[]),C=g.kind==="add"?"添加服务":g.kind==="edit"?"服务设置":g.kind==="routes"?"备用连接":g.kind==="relay-services"?"可中转的服务":void 0;_.useEffect(()=>{a?.({title:C,...C?{back:L}:{}})},[C,L,a]),_.useEffect(()=>{let E=!1,S=0;const P=async()=>{const O=++S;try{const j=await Je();!E&&S===O&&(u(j),k(""))}catch{!E&&S===O&&k("暂时无法读取服务列表,请重试。")}finally{!E&&S===O&&h(!1)}};P();const R=Rf(()=>{P()});return()=>{E=!0,R()}},[]);const T=async E=>{if(!b){I(!0),k("");try{await E()}catch(S){k(S instanceof Error?S.message:"暂时无法完成,请重试。")}finally{I(!1)}}},x=g.kind==="edit"||g.kind==="routes"||g.kind==="relay-services"?d.find(E=>Et(E,g.service))||g.service:void 0,v=t?d.find(E=>Et(E,t))||t:void 0,A=d.filter(E=>!t||!Et(E,t)),N=v?[v,...A]:A,D=p.jsxs(p.Fragment,{children:[f?p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取服务…"]}):p.jsxs("div",{className:"service-list",children:[N.map(E=>{const S=!!t&&Et(E,t);return p.jsxs("div",{className:"service-row",children:[p.jsxs("button",{type:"button",className:"service-row-open",disabled:b||S,onClick:()=>{T(async()=>{(await r(E))?.passwordRequired&&m({kind:"add",input:E.serviceOrigin||E.url,passwordRequired:!0})})},"aria-label":S?`当前服务 ${E.label}`:`打开 ${E.label}`,children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:20})}),p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:E.label}),p.jsx("span",{className:"service-description",children:S?"当前服务":new URL(E.serviceOrigin||E.url).host})]}),S?p.jsx(hl,{size:17,className:"service-selected"}):p.jsx(vn,{size:16,className:"service-muted"})]}),p.jsx("button",{type:"button",className:"service-icon-button","aria-label":`管理 ${E.label}`,disabled:b,onClick:()=>{m({kind:"edit",service:E}),k("")},children:p.jsx(ng,{size:19})})]},E.id)}),N.length===0&&p.jsx("p",{className:"service-empty",children:"还没有添加服务。连接你的电脑,或粘贴收到的邀请链接。"})]}),p.jsxs("div",{className:`service-actions${s?" service-actions-pair":""}`,children:[p.jsxs("button",{type:"button",className:"service-button service-secondary",disabled:b,onClick:()=>{m({kind:"add"}),k("")},children:[p.jsx(rg,{size:16}),"添加服务"]}),s&&p.jsxs("button",{type:"button",className:"service-button service-secondary",disabled:b,onClick:s,children:[p.jsx(og,{size:16}),"邀请设备"]})]})]});return p.jsxs("div",{className:"service-manager",children:[!i&&p.jsxs("div",{className:"service-heading",children:[C&&p.jsx("button",{type:"button",className:"service-icon-button","aria-label":"返回服务",disabled:b,onClick:L,children:p.jsx(Jp,{size:20})}),p.jsx("h2",{children:C||"服务"})]}),g.kind==="relay-services"?n?.(x,I):g.kind==="routes"?e?.(x,I):g.kind==="list"?D:g.kind==="add"?p.jsx(p1,{onSave:E=>T(async()=>{const S=Oe(E);u(await Rt({id:S,url:S,label:new URL(S).host})),L()}),initialInput:g.input,passwordRequired:g.passwordRequired,busy:b,onSubmit:async(E,S)=>{let P;return await T(async()=>{P=await o(E,S),P?.passwordRequired||L()}),P}}):p.jsx(g1,{onRelayServices:n&&g.service.targetPeerId?()=>m({kind:"relay-services",service:g.service}):void 0,onRoutes:e&&g.service.targetPeerId?()=>m({kind:"routes",service:g.service}):void 0,service:x,busy:b,canRemove:!t||!Et(g.service,t),onSave:E=>{T(async()=>{u(await Rt({...x,label:E})),L()})},onRemove:()=>{T(async()=>{u(await Fm(g.service.id)),L()})}}),y&&p.jsx("p",{className:"service-error",role:"alert",children:y})]})}function p1({busy:t,onSubmit:e,onSave:n,initialInput:r="",passwordRequired:o=!1}){const[s,i]=_.useState(r),[a,c]=_.useState(""),[l,d]=_.useState(o);return p.jsxs("form",{className:"service-form",onSubmit:async u=>{u.preventDefault(),(await e(s.trim(),l?a:void 0))?.passwordRequired&&d(!0),c("")},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务地址或邀请链接"}),p.jsx("input",{value:s,onChange:u=>{i(u.target.value),d(!1),c("")},disabled:t,required:!0,autoComplete:"off",autoCapitalize:"none",spellCheck:!1,placeholder:"例如:电脑地址:9834 或 https://…"})]}),l?p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务密码"}),p.jsx("input",{type:"password",value:a,onChange:u=>c(u.target.value),disabled:t,required:!0,autoFocus:!0,autoComplete:"current-password",placeholder:"输入这台服务的密码"})]}):p.jsx("p",{className:"service-help",children:"连接自己的服务,输入地址即可;收到邀请时,粘贴完整链接。"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:t||!s.trim()||s.includes("#termdock-invite="),onClick:()=>{n(s.trim())},children:"仅保存,不连接"}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:t||!s.trim()||l&&!a,children:t?p.jsxs(p.Fragment,{children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在连接…"]}):l?"登录并连接":"继续"})]})}function g1({service:t,busy:e,canRemove:n,onSave:r,onRemove:o,onRoutes:s,onRelayServices:i}){const[a,c]=_.useState(t.label),[l,d]=_.useState(!1);return p.jsxs("form",{className:"service-form",onSubmit:u=>{u.preventDefault(),r(a.trim())},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务名称"}),p.jsx("input",{value:a,onChange:u=>c(u.target.value),disabled:e,required:!0,maxLength:120,placeholder:"例如:办公室电脑"})]}),p.jsx("p",{className:"service-address",children:t.serviceOrigin||t.url}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:e||!a.trim(),children:"保存名称"}),i&&p.jsxs("button",{type:"button",className:"service-row-open",disabled:e,onClick:i,children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:"可中转的服务"}),p.jsx("span",{className:"service-description",children:"通过这台服务连接其他电脑"})]}),p.jsx(vn,{size:16})]}),s&&p.jsxs("button",{type:"button",className:"service-row-open",disabled:e,onClick:s,children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:"备用连接"}),p.jsx("span",{className:"service-description",children:"添加其他网络地址或授权入口"})]}),p.jsx(vn,{size:16})]}),n&&p.jsx("div",{className:"service-remove",children:l?p.jsxs(p.Fragment,{children:[p.jsxs("p",{className:"service-help",children:["从列表移除“",t.label,"”?不会停止服务或删除终端。"]}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:e,onClick:()=>d(!1),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:e,onClick:o,children:"确认移除"})]})]}):p.jsx("button",{type:"button",className:"service-button service-danger",disabled:e,onClick:()=>d(!0),children:"移除服务"})})]})}var _n={},zi,pu;function m1(){return pu||(pu=1,zi=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),zi}var Wi={},jt={},gu;function An(){if(gu)return jt;gu=1;let t;const e=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return jt.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},jt.getSymbolTotalCodewords=function(r){return e[r]},jt.getBCHDigit=function(n){let r=0;for(;n!==0;)r++,n>>>=1;return r},jt.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');t=r},jt.isKanjiModeEnabled=function(){return typeof t<"u"},jt.toSJIS=function(r){return t(r)},jt}var Gi={},mu;function pl(){return mu||(mu=1,(function(t){t.L={bit:1},t.M={bit:0},t.Q={bit:3},t.H={bit:2};function e(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw new Error("Unknown EC Level: "+n)}}t.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},t.from=function(r,o){if(t.isValid(r))return r;try{return e(r)}catch{return o}}})(Gi)),Gi}var Vi,wu;function w1(){if(wu)return Vi;wu=1;function t(){this.buffer=[],this.length=0}return t.prototype={get:function(e){const n=Math.floor(e/8);return(this.buffer[n]>>>7-e%8&1)===1},put:function(e,n){for(let r=0;r<n;r++)this.putBit((e>>>n-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(e){const n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),e&&(this.buffer[n]|=128>>>this.length%8),this.length++}},Vi=t,Vi}var Xi,yu;function y1(){if(yu)return Xi;yu=1;function t(e){if(!e||e<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}return t.prototype.set=function(e,n,r,o){const s=e*this.size+n;this.data[s]=r,o&&(this.reservedBit[s]=!0)},t.prototype.get=function(e,n){return this.data[e*this.size+n]},t.prototype.xor=function(e,n,r){this.data[e*this.size+n]^=r},t.prototype.isReserved=function(e,n){return this.reservedBit[e*this.size+n]},Xi=t,Xi}var Yi={},bu;function b1(){return bu||(bu=1,(function(t){const e=An().getSymbolSize;t.getRowColCoords=function(r){if(r===1)return[];const o=Math.floor(r/7)+2,s=e(r),i=s===145?26:Math.ceil((s-13)/(2*o-2))*2,a=[s-7];for(let c=1;c<o-1;c++)a[c]=a[c-1]-i;return a.push(6),a.reverse()},t.getPositions=function(r){const o=[],s=t.getRowColCoords(r),i=s.length;for(let a=0;a<i;a++)for(let c=0;c<i;c++)a===0&&c===0||a===0&&c===i-1||a===i-1&&c===0||o.push([s[a],s[c]]);return o}})(Yi)),Yi}var Zi={},vu;function v1(){if(vu)return Zi;vu=1;const t=An().getSymbolSize,e=7;return Zi.getPositions=function(r){const o=t(r);return[[0,0],[o-e,0],[0,o-e]]},Zi}var Ji={},Su;function S1(){return Su||(Su=1,(function(t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const e={N1:3,N2:3,N3:40,N4:10};t.isValid=function(o){return o!=null&&o!==""&&!isNaN(o)&&o>=0&&o<=7},t.from=function(o){return t.isValid(o)?parseInt(o,10):void 0},t.getPenaltyN1=function(o){const s=o.size;let i=0,a=0,c=0,l=null,d=null;for(let u=0;u<s;u++){a=c=0,l=d=null;for(let f=0;f<s;f++){let h=o.get(u,f);h===l?a++:(a>=5&&(i+=e.N1+(a-5)),l=h,a=1),h=o.get(f,u),h===d?c++:(c>=5&&(i+=e.N1+(c-5)),d=h,c=1)}a>=5&&(i+=e.N1+(a-5)),c>=5&&(i+=e.N1+(c-5))}return i},t.getPenaltyN2=function(o){const s=o.size;let i=0;for(let a=0;a<s-1;a++)for(let c=0;c<s-1;c++){const l=o.get(a,c)+o.get(a,c+1)+o.get(a+1,c)+o.get(a+1,c+1);(l===4||l===0)&&i++}return i*e.N2},t.getPenaltyN3=function(o){const s=o.size;let i=0,a=0,c=0;for(let l=0;l<s;l++){a=c=0;for(let d=0;d<s;d++)a=a<<1&2047|o.get(l,d),d>=10&&(a===1488||a===93)&&i++,c=c<<1&2047|o.get(d,l),d>=10&&(c===1488||c===93)&&i++}return i*e.N3},t.getPenaltyN4=function(o){let s=0;const i=o.data.length;for(let c=0;c<i;c++)s+=o.data[c];return Math.abs(Math.ceil(s*100/i/5)-10)*e.N4};function n(r,o,s){switch(r){case t.Patterns.PATTERN000:return(o+s)%2===0;case t.Patterns.PATTERN001:return o%2===0;case t.Patterns.PATTERN010:return s%3===0;case t.Patterns.PATTERN011:return(o+s)%3===0;case t.Patterns.PATTERN100:return(Math.floor(o/2)+Math.floor(s/3))%2===0;case t.Patterns.PATTERN101:return o*s%2+o*s%3===0;case t.Patterns.PATTERN110:return(o*s%2+o*s%3)%2===0;case t.Patterns.PATTERN111:return(o*s%3+(o+s)%2)%2===0;default:throw new Error("bad maskPattern:"+r)}}t.applyMask=function(o,s){const i=s.size;for(let a=0;a<i;a++)for(let c=0;c<i;c++)s.isReserved(c,a)||s.xor(c,a,n(o,c,a))},t.getBestMask=function(o,s){const i=Object.keys(t.Patterns).length;let a=0,c=1/0;for(let l=0;l<i;l++){s(l),t.applyMask(l,o);const d=t.getPenaltyN1(o)+t.getPenaltyN2(o)+t.getPenaltyN3(o)+t.getPenaltyN4(o);t.applyMask(l,o),d<c&&(c=d,a=l)}return a}})(Ji)),Ji}var Ko={},xu;function cg(){if(xu)return Ko;xu=1;const t=pl(),e=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],n=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Ko.getBlocksCount=function(o,s){switch(s){case t.L:return e[(o-1)*4+0];case t.M:return e[(o-1)*4+1];case t.Q:return e[(o-1)*4+2];case t.H:return e[(o-1)*4+3];default:return}},Ko.getTotalCodewordsCount=function(o,s){switch(s){case t.L:return n[(o-1)*4+0];case t.M:return n[(o-1)*4+1];case t.Q:return n[(o-1)*4+2];case t.H:return n[(o-1)*4+3];default:return}},Ko}var Qi={},_r={},Eu;function x1(){if(Eu)return _r;Eu=1;const t=new Uint8Array(512),e=new Uint8Array(256);return(function(){let r=1;for(let o=0;o<255;o++)t[o]=r,e[r]=o,r<<=1,r&256&&(r^=285);for(let o=255;o<512;o++)t[o]=t[o-255]})(),_r.log=function(r){if(r<1)throw new Error("log("+r+")");return e[r]},_r.exp=function(r){return t[r]},_r.mul=function(r,o){return r===0||o===0?0:t[e[r]+e[o]]},_r}var Au;function E1(){return Au||(Au=1,(function(t){const e=x1();t.mul=function(r,o){const s=new Uint8Array(r.length+o.length-1);for(let i=0;i<r.length;i++)for(let a=0;a<o.length;a++)s[i+a]^=e.mul(r[i],o[a]);return s},t.mod=function(r,o){let s=new Uint8Array(r);for(;s.length-o.length>=0;){const i=s[0];for(let c=0;c<o.length;c++)s[c]^=e.mul(o[c],i);let a=0;for(;a<s.length&&s[a]===0;)a++;s=s.slice(a)}return s},t.generateECPolynomial=function(r){let o=new Uint8Array([1]);for(let s=0;s<r;s++)o=t.mul(o,new Uint8Array([1,e.exp(s)]));return o}})(Qi)),Qi}var ea,ku;function A1(){if(ku)return ea;ku=1;const t=E1();function e(n){this.genPoly=void 0,this.degree=n,this.degree&&this.initialize(this.degree)}return e.prototype.initialize=function(r){this.degree=r,this.genPoly=t.generateECPolynomial(this.degree)},e.prototype.encode=function(r){if(!this.genPoly)throw new Error("Encoder not initialized");const o=new Uint8Array(r.length+this.degree);o.set(r);const s=t.mod(o,this.genPoly),i=this.degree-s.length;if(i>0){const a=new Uint8Array(this.degree);return a.set(s,i),a}return s},ea=e,ea}var ta={},na={},ra={},Cu;function lg(){return Cu||(Cu=1,ra.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}),ra}var dt={},Iu;function dg(){if(Iu)return dt;Iu=1;const t="[0-9]+",e="[A-Z $%*+\\-./:]+";let n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+`)(?:.|[\r
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/passwordBootstrap-C0GT89S0.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/App-IXJ0RBl_.js","assets/gestureArbiter-B1oSVYS3.js","assets/gestureArbiter-C2J0D0kV.css","assets/triangle-alert-9P6A4GvY.js","assets/referenceLongPress-J0_Uut_r.js","assets/DagPlayground-BoPHEC1t.js","assets/ChangeWalkthroughPanel-BaglIr7w.js","assets/sparkles-CF3bFIsn.js","assets/DiffLab-DhZiVixC.js","assets/DiffViewer-D5eBLwlu.js","assets/DiffViewer-T3uj2-aP.css","assets/DiffReviewLab-48PH3ITt.js","assets/DiffReview-CIOleICq.js"])))=>i.map(i=>d[i]);
2
+ import{r as Bc,a as Em,g as Af}from"./react-XDCjal2T.js";import{b as _,r as _c,R as Ke}from"./dnd-BCFAPC0L.js";import{L as Am,l as km}from"./terminal-C7X98Amf.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const Cm="modulepreload",Im=function(t){return"/"+t},Hl={},Yt=function(e,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(l){return Promise.all(l.map(d=>Promise.resolve(d).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),a=i?.nonce||i?.getAttribute("nonce");o=c(n.map(l=>{if(l=Im(l),l in Hl)return;Hl[l]=!0;const d=l.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":Cm,d||(f.as="script"),f.crossOrigin="",f.href=l,a&&f.setAttribute("nonce",a),document.head.appendChild(f),d)return new Promise((h,g)=>{f.addEventListener("load",h),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${l}`)))})}))}function s(i){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i}return o.then(i=>{for(const a of i||[])a.status==="rejected"&&s(a.reason);return e().catch(s)})};var vi={exports:{}},Ar={};var ql;function Rm(){if(ql)return Ar;ql=1;var t=Bc(),e=Symbol.for("react.element"),n=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,o=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function i(a,c,l){var d,u={},f=null,h=null;l!==void 0&&(f=""+l),c.key!==void 0&&(f=""+c.key),c.ref!==void 0&&(h=c.ref);for(d in c)r.call(c,d)&&!s.hasOwnProperty(d)&&(u[d]=c[d]);if(a&&a.defaultProps)for(d in c=a.defaultProps,c)u[d]===void 0&&(u[d]=c[d]);return{$$typeof:e,type:a,key:f,ref:h,props:u,_owner:o.current}}return Ar.Fragment=n,Ar.jsx=i,Ar.jsxs=i,Ar}var Kl;function Tm(){return Kl||(Kl=1,vi.exports=Rm()),vi.exports}var p=Tm();const gn="termdock-secure-target-v1",Oc="termdock-secure-entry-v1",Pm=new Set([gn,Oc,"termdock-color-theme","termdock:locale","termdock.federation.connections.v1"]),Ao=typeof Storage>"u"?void 0:Storage.prototype.getItem,Si=typeof Storage>"u"?void 0:Storage.prototype.setItem,zl="termdock-secure-legacy-owner",qs=typeof window<"u"&&window.parent!==window&&location.pathname==="/workspace.html";function Nm(){if(typeof window>"u")return null;try{if(qs){const e=new URLSearchParams(location.search).get("termdock-workspace"),n=JSON.parse(localStorage.getItem("termdock.federation.connections.v1")||"[]"),r=Array.isArray(n)?n.find(o=>o?.targetPeerId===e):void 0;return r&&typeof r.url=="string"&&typeof r.targetPeerId=="string"?{...r,serviceName:r.label||r.serviceName}:null}const t=JSON.parse(sessionStorage.getItem(gn)??localStorage.getItem(gn)??"null");return t&&typeof t.url=="string"&&typeof t.targetPeerId=="string"?t:null}catch{return null}}let Ks=Nm();const zn=Ks?.targetPeerId??"unpaired";function Wn(){return Ks}function kf(t){if(Ks=t,qs)return;const e=JSON.stringify(t);sessionStorage.setItem(gn,e),localStorage.setItem(gn,e)}function Lm(){Ks=null,!qs&&(localStorage.removeItem(gn),sessionStorage.removeItem(gn),localStorage.removeItem(Oc))}function Vr(t,e=zn){return Pm.has(t)||t.startsWith("termdock-secure-")?t:`termdock-service:${e}:${t}`}function Bm(t){if(!(!Ao||!Si))try{if(Ao.call(localStorage,zl))return;Si.call(localStorage,zl,t);for(const n of[localStorage,sessionStorage]){const r=Array.from({length:n.length},(o,s)=>n.key(s)).filter(o=>!!o);for(const o of r){if(o.startsWith("termdock-service:")||Vr(o,t)===o)continue;const s=Vr(o,t),i=Ao.call(n,o);i!==null&&Ao.call(n,s)===null&&Si.call(n,s,i)}}}catch{}}let Wl=!1;function _m(){if(Wl||typeof Storage>"u")return;Wl=!0;const t=Storage.prototype.getItem,e=Storage.prototype.setItem,n=Storage.prototype.removeItem;Storage.prototype.getItem=function(r){return t.call(this,Vr(String(r)))},Storage.prototype.setItem=function(r,o){e.call(this,Vr(String(r)),o)},Storage.prototype.removeItem=function(r){n.call(this,Vr(String(r)))}}_m();const Gl={pending:0,failed:1,expired:1,delivered:2,read:3},ko=32768,ds="remote:";function tt(t,e){return e.startsWith(ds)?e:`${ds}${encodeURIComponent(t)}:${encodeURIComponent(e)}`}function Ge(t){if(!t.startsWith(ds))return null;const e=t.slice(ds.length).split(":");if(e.length!==2)return null;try{return{origin:decodeURIComponent(e[0]),id:decodeURIComponent(e[1])}}catch{return null}}function xi(t,e){const n=Ge(e);return n?.origin===t?n.id:e}function Co(t,e){return{...t,fromSessionId:t.fromSessionId?e(t.fromSessionId):null,toSessionId:e(t.toSessionId)}}function Ei(t,e){if(!t)return;const n=Object.fromEntries(Object.entries(t).map(([r,o])=>[e(r),o]));return Object.keys(n).length?n:void 0}class Om{constructor(e){this.services=e}services;snapshots=new Map;reachable=new Set;groups=new Map;messages=new Map;sessions=new Map;diagnostics=new Map;serviceErrors=new Map;inFlight=null;catalogInFlight=null;async refresh(){return this.inFlight?this.inFlight:(this.inFlight=this.synchronize().finally(()=>{this.inFlight=null}),this.inFlight)}async refreshCatalog(){return this.catalogInFlight?this.catalogInFlight:(this.catalogInFlight=this.discover().finally(()=>{this.catalogInFlight=null}),this.catalogInFlight)}async discover(){const e=this.services();this.serviceErrors.clear();const n=await Promise.all(e.map(async r=>{let o;try{const s=await Promise.race([Promise.resolve().then(()=>r.request("/collaboration-federation")),new Promise((i,a)=>{o=setTimeout(()=>a(new Error("服务协作目录响应超时")),18e3)})]);if(!Array.isArray(s.groups)||!Array.isArray(s.sessions)||!Array.isArray(s.messages))throw new Error("协作目录响应无效,请更新服务");return{service:r,data:s}}catch(s){return this.serviceErrors.set(r.origin,s instanceof Error?s.message.slice(0,300):"协作目录请求失败"),null}finally{clearTimeout(o)}}));this.reachable.clear();for(const r of n){if(!r)continue;const{service:o,data:s}=r;for(const[i,a]of Object.entries(s.transportDiagnostics??{}))(!this.diagnostics.has(i)||a.checked_at>this.diagnostics.get(i).checked_at)&&this.diagnostics.set(i,a);this.reachable.add(o.origin),this.snapshots.set(o.origin,s);for(const i of s.groups){const a={...i,sessionIds:i.sessionIds.map(l=>tt(o.origin,l)),roles:Ei(i.roles,l=>tt(o.origin,l))},c=this.groups.get(i.id);(!c||a.updatedAt>c.updatedAt)&&this.groups.set(i.id,a)}for(const i of s.messages)this.mergeMessage(Co(i,a=>tt(o.origin,a)))}this.sessions.clear();for(const r of this.groups.values())for(const o of r.remoteSessions??[])this.sessions.set(o.sessionId,{...o,serviceConnected:!1,status:"offline",serviceCheckedAt:Date.now()});for(const[r,o]of this.snapshots){const s=this.reachable.has(r);for(const i of o.sessions){const a=tt(r,i.sessionId);this.sessions.set(a,{...i,sessionId:a,serviceOrigin:r,serviceLabel:e.find(c=>c.origin===r)?.label??r,serviceConnected:s,serviceCheckedAt:Date.now(),status:s?i.status:"offline"})}}}async synchronize(){await this.refreshCatalog();const e=this.services();for(const n of this.messages.values()){const r=Ge(n.toSessionId)?.origin;if(n.status==="pending"&&r&&!this.reachable.has(r)){const o=this.diagnostics.get(n.id);this.diagnostics.set(n.id,{...o,relay_online:!0,peer_reachable:!1,attempt_count:o?.attempt_count??0,next_retry_at:Date.now()+2e3,last_error:"PEER_UNREACHABLE",checked_at:Date.now()})}}await Promise.all(e.filter(n=>this.reachable.has(n.origin)).map(async n=>{for(const r of this.groups.values())if(!(!this.snapshots.get(n.origin)?.groups.some(s=>s.id===r.id)&&!r.sessionIds.some(s=>Ge(s)?.origin===n.origin)))try{await this.push(n,r)}catch{this.reachable.delete(n.origin)}})),await Promise.all(e.filter(n=>this.reachable.has(n.origin)).map(async n=>{if(!((this.snapshots.get(n.origin)?.protocolVersion??1)<2))for(const r of this.groups.values()){if(r.deleted||!r.sessionIds.some(s=>Ge(s)?.origin===n.origin))continue;const o=[...this.diagnostics].filter(([s])=>this.messages.get(s)?.groupId===r.id).map(([s,i])=>({message_id:s,diagnostic:i,...this.messages.get(s)?.status==="failed"?{failure_reason:this.messages.get(s)?.failureReason}:{}}));if(o.length)try{await n.request("/collaboration-federation","POST",{group:this.groupForService(r,n.origin),messages:[],transport:o})}catch{}}}))}mergeMessage(e){const n=this.messages.get(e.id),r=Gl;(!n||r[e.status]>r[n.status])&&this.messages.set(e.id,e);const o=this.messages.get(e.id);if(o&&(n?.shellConfirmed===!0||e.shellConfirmed===!0)&&(o.shellConfirmed=!0),this.messages.size>2e3){const s=[...this.messages.values()].find(i=>i.status!=="pending"&&i.status!=="failed");s&&this.messages.delete(s.id)}}groupForService(e,n){const r=e.sessionIds.filter(o=>Ge(o)?.origin!==n).map(o=>{const s=Ge(o),i=this.sessions.get(o);return{sessionId:o,name:i?.name??s.id,cwd:i?.cwd??"",status:i?.status??"offline",capability:i?.capability??"",currentTask:i?.currentTask??"",updatedAt:i?.updatedAt??0,agent:i?.agent??null,backendSessionId:null,agentNativeSessionId:null,serviceOrigin:s.origin,serviceLabel:i?.serviceLabel??s.origin,serviceConnected:this.reachable.has(s.origin),serviceCheckedAt:Date.now()}});return{...e,sessionIds:e.sessionIds.map(o=>xi(n,o)),remoteSessions:r,roles:Ei(e.roles,o=>xi(n,o))}}async push(e,n){const r=Gl,o=new Map((this.snapshots.get(e.origin)?.messages??[]).map(i=>[i.id,i])),s=[...this.messages.values()].filter(i=>i.groupId===n.id&&(!o.has(i.id)||r[i.status]>r[o.get(i.id).status]||i.shellConfirmed===!0&&o.get(i.id)?.shellConfirmed!==!0)).map(i=>Co(i,a=>xi(e.origin,a)));if(!s.length){await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[]});return}for(const i of s){const a=this.messages.get(i.id),c=Ge(a.toSessionId)?.origin===e.origin,l=this.diagnostics.get(i.id);if(c&&l?.next_retry_at&&l.next_retry_at>Date.now()&&l.last_error!=="PEER_UNREACHABLE")continue;const d={relay_online:!0,peer_reachable:!0,attempt_count:(l?.attempt_count??0)+(c?1:0),next_retry_at:null,last_error:null,checked_at:Date.now(),fragments_sent:0,fragments_total:0},u=this.snapshots.get(e.origin)?.protocolVersion??1;if(u<2&&(String(i.content??"").length>2e4||i.responseKind||i.task||i.metadata||i.expiresAt||i.status==="failed"||i.status==="expired")){c&&(this.messages.set(i.id,{...a,status:"failed",failureReason:"PEER_UPGRADE_REQUIRED"}),this.diagnostics.set(i.id,{...d,last_error:"PEER_UPGRADE_REQUIRED"}));continue}try{const f=new TextEncoder().encode(JSON.stringify(i));if(u>=2&&f.length>ko&&!o.has(i.id)){const h=Math.ceil(f.length/ko),g=Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",f)),m=>m.toString(16).padStart(2,"0")).join("");d.fragments_total=h;for(let m=0;m<h;m++){const b=await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[],fragments:[{message_id:i.id,group_id:n.id,index:m,total:h,sha256:g,data:btoa(String.fromCharCode(...f.subarray(m*ko,(m+1)*ko)))}]}),w=b.fragmentReceipts?.find(I=>I.message_id===i.id);if(!w||m===h-1&&!w.complete)throw new Error("FRAGMENT_ACK_MISSING");d.fragments_sent=w.received;for(const I of b.messages??[])this.mergeMessage(Co(I,y=>tt(e.origin,y)));if(c){this.diagnostics.set(i.id,{...d,checked_at:Date.now()});const I=this.services().find(y=>y.origin===Ge(a.fromSessionId??"")?.origin);I&&I.origin!==e.origin&&(this.snapshots.get(I.origin)?.protocolVersion??1)>=2&&await I.request("/collaboration-federation","POST",{group:this.groupForService(n,I.origin),messages:[],transport:[{message_id:i.id,diagnostic:d}]}).catch(()=>{})}}}else{const h=await e.request("/collaboration-federation","POST",{group:this.groupForService(n,e.origin),messages:[i]});if(!(h.messages??[]).some(g=>g.id===i.id))throw new Error("PEER_REJECTED_MESSAGE");for(const g of h.messages??[])this.mergeMessage(Co(g,m=>tt(e.origin,m)))}c&&this.diagnostics.set(i.id,{...d,checked_at:Date.now()})}catch(f){c&&this.diagnostics.set(i.id,{...d,checked_at:Date.now(),peer_reachable:null,last_error:f instanceof Error?f.message.slice(0,300):"RELAY_REQUEST_FAILED",next_retry_at:Date.now()+Math.min(3e4,1e3*2**Math.min(d.attempt_count,5))})}}}async peers(e){if(!this.services().some(n=>n.origin===e))throw new Error("当前服务未连接");return await this.refreshCatalog(),{protocolVersion:2,origin:e,sessions:[...this.sessions.values()].filter(n=>Ge(n.sessionId)?.origin!==e),services:[...this.snapshots.keys(),...this.services().map(n=>n.origin)].filter((n,r,o)=>o.indexOf(n)===r).map(n=>({origin:n,label:this.services().find(r=>r.origin===n)?.label??n,connected:this.reachable.has(n),error:this.serviceErrors.get(n)}))}}async list(e){const n=this.services().find(s=>s.origin===e);if(!n)throw new Error("当前服务未连接");const[r,o]=await Promise.all([this.peers(e),n.request("/collaboration-groups")]);return{groups:o.groups,sessions:[...r.sessions,...o.sessions]}}async save(e,n){await this.refreshCatalog();const r=this.services().find(u=>u.origin===e);if(!r)throw new Error("当前服务未连接");const o=await r.request("/collaboration-groups"),s=n.id?o.groups.find(u=>u.id===n.id):void 0;if(n.id&&!s)throw new Error("协作组已删除,请刷新列表");if(s&&n.expectedUpdatedAt!==void 0&&n.expectedUpdatedAt!==s.updatedAt)throw new Error("协作组已被修改,请重新打开成员管理后再保存");for(const u of this.sessions.keys())Ge(u)?.origin===e&&this.sessions.delete(u);for(const u of o.sessions){const f=tt(e,u.sessionId);this.sessions.set(f,{...u,sessionId:f,serviceOrigin:e,serviceLabel:r.label,serviceConnected:!0})}if(!n.id?.startsWith("cross-")&&!n.sessionIds.some(u=>Ge(u)))return r.request("/collaboration-groups","POST",n);if(!this.reachable.has(e))throw new Error("当前服务需要升级 Termdock 后才能跨服务组队");const i=[...new Set(n.sessionIds.map(u=>tt(e,u)))],a=new Set(s?.sessionIds.map(u=>tt(e,u))??[]);if(!n.name?.trim()||i.length<2||i.some(u=>!a.has(u)&&(!this.sessions.has(u)||!this.reachable.has(Ge(u).origin))))throw new Error("所选成员已变化或服务不可达,请刷新后重新选择;尚未保存任何修改");const c=s?.federated?{...s,sessionIds:s.sessionIds.map(u=>tt(e,u))}:void 0,l=Ei(s?.roles,u=>tt(e,u)),d={id:c?.id??`cross-${crypto.randomUUID()}`,name:n.name.trim(),sessionIds:i,...l?{roles:Object.fromEntries(Object.entries(l).filter(([u])=>i.includes(u)))}:{},createdAt:c?.createdAt??Date.now(),updatedAt:Math.max(Date.now(),(c?.updatedAt??0)+1),federated:!0};if(s&&!s.federated){if(o.capabilities?.groupPromotion!==1)throw new Error("当前服务需要升级后才能将已有组转换为跨服务组;原组和记录均未修改");const u=await r.request(`/collaboration-groups/${encodeURIComponent(s.id)}/promote`,"POST",{group:this.groupForService(d,e),expectedUpdatedAt:n.expectedUpdatedAt??s.updatedAt});d.updatedAt=u.group.updatedAt,d.createdAt=u.group.createdAt}else await r.request("/collaboration-federation","POST",{group:this.groupForService(d,e),messages:[],...c?{expectedUpdatedAt:n.expectedUpdatedAt??c.updatedAt}:{}});return this.groups.set(d.id,d),{group:this.groupForService(d,e)}}async remove(e,n){const r=this.services().find(o=>o.origin===e);if(!r)throw new Error("当前服务未连接");await r.request(`/collaboration-groups/${encodeURIComponent(n)}`,"DELETE")}}const zs="termdock.federation.connections.v1",Pa="termdock:services-changed",Dc="termdock-secure-removed-services",us=t=>[t.id,t.targetPeerId,t.serviceOrigin||t.url].filter(e=>!!e);function Fc(){try{const t=JSON.parse(localStorage.getItem(Dc)||"[]");return Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}catch{return[]}}function Oe(t){const e=t.trim();if(!e)throw new Error("请输入服务地址。");const n=new URL(/^[a-z][a-z\d+.-]*:\/\//i.test(e)?e:`https://${e}`);n.protocol==="wss:"&&(n.protocol="https:"),n.protocol==="ws:"&&(n.protocol="http:");const r=["localhost","127.0.0.1","[::1]"].includes(n.hostname);if(!["https:","http:"].includes(n.protocol)||n.protocol==="http:"&&!r)throw new Error("请使用 HTTPS 服务地址。");if(n.username||n.password||n.search||n.hash||!["/","/api/federation/secure"].includes(n.pathname))throw new Error("请输入服务首页地址,不要包含账号或额外参数。");return n.origin}function Ws(t){if(!t||typeof t!="object")return;const e=t;if(typeof e.url=="string")try{const n=Oe(e.url),r=typeof e.targetPeerId=="string"&&e.targetPeerId?e.targetPeerId:void 0,o=(typeof e.label=="string"?e.label:typeof e.serviceName=="string"?e.serviceName:"").trim().slice(0,120)||new URL(n).host;return{id:typeof e.id=="string"&&e.id?e.id:r||n,url:n,label:o,...r?{targetPeerId:r}:{},...typeof e.serviceOrigin=="string"?{serviceOrigin:Oe(e.serviceOrigin)}:{},...typeof e.entryServiceId=="string"&&e.entryServiceId?{entryServiceId:e.entryServiceId}:{},...Array.isArray(e.routes)?{routes:e.routes.slice(0,4).flatMap(s=>{try{return s&&typeof s.targetPeerId=="string"&&s.targetPeerId?[{url:Oe(s.url),targetPeerId:s.targetPeerId}]:[]}catch{return[]}})}:{}}}catch{return}}function Et(t,e){return t.targetPeerId&&e.targetPeerId?t.targetPeerId===e.targetPeerId:(t.serviceOrigin||t.url)===(e.serviceOrigin||e.url)}function Cf(t){const e=[];for(const n of t){const r=e.findIndex(o=>Et(o,n));r<0?e.push(n):e[r]={...e[r],...n,id:e[r].id}}return e}function po(){return typeof window>"u"?void 0:window.termdockDesktop}function Gt(){try{const t=JSON.parse(localStorage.getItem(zs)||"[]");return Array.isArray(t)?Cf(t.map(Ws).filter(e=>!!e)):[]}catch{return[]}}function If(t){localStorage.setItem(zs,JSON.stringify(t.map(e=>({...e,serviceName:e.label})))),window.dispatchEvent(new Event(Pa))}let kr;async function Je(){const t=po();if(!t?.serviceConnections||!t.saveServiceConnection)return Gt();if(kr)return kr;kr=(async()=>{let e=await t.serviceConnections();const n=Gt();for(const r of n)e.some(o=>Et(o,r))||(e=await(t.importServiceConnection||t.saveServiceConnection)(r));return n.length&&localStorage.removeItem(zs),e})();try{return await kr}finally{kr=void 0}}async function Rt(t){const e=Ws(t);if(!e)throw new Error("服务地址无效。");const n=po();if(n?.saveServiceConnection)return n.saveServiceConnection(e);const r=Gt(),o=r.find(a=>a.id===e.id||Et(a,e)),s=new Set([...us(e),...o?us(o):[]]);localStorage.setItem(Dc,JSON.stringify(Fc().filter(a=>!s.has(a))));const i=Cf([...r.filter(a=>a!==o),{...o,...e,id:o?.id||e.id}]);return If(i),i}async function Dm(t){const e=Ws(t);if(!e)throw new Error("服务地址无效。");const n=po();if(n?.importServiceConnection)return n.importServiceConnection(e);if(n?.serviceConnections){const r=await n.serviceConnections();return r.some(o=>Et(o,e))?Rt(e):r}return us(e).some(r=>Fc().includes(r))?Gt():Rt(e)}async function Fm(t){const e=po();if(e?.removeServiceConnection)return e.removeServiceConnection(t);const n=Gt(),r=n.find(s=>s.id===t);r&&localStorage.setItem(Dc,JSON.stringify([...new Set([...Fc(),...us(r)])].slice(-768)));const o=n.filter(s=>s.id!==t);return If(o),o}function Rf(t){const e=r=>{(r.key===zs||r.key===null)&&t()};window.addEventListener(Pa,t),window.addEventListener("storage",e);const n=po()?.onServiceConnections?.(t);return()=>{window.removeEventListener(Pa,t),window.removeEventListener("storage",e),n?.()}}class Mm extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}}let jm=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},it=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}};class Tf extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}}class Pf extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}}class Um extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}}class $m extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}}class Gs extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}}const Nf=Symbol.for("@libp2p/peer-id");function Hm(t){return typeof t?.handleEvent=="function"}function qm(t){return t===!0||t===!1}function Km(t){return qm(t)?t:t?.capture??!1}function Na(t){const e={capture:Km(t),once:!!t?.once};return t?.passive!=null&&(e.passive=t?.passive),t?.signal!=null&&(e.signal=t?.signal),e}function Vl(t,e){return Na(t).capture===Na(e).capture}class zm extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){const n=this.#e.get(e);return n==null?0:n.length}addEventListener(e,n,r){const o=Na(r);if(o?.signal?.aborted===!0)return;const s=l=>{o.once&&this.removeEventListener(e,n,o),Hm(n)?n.handleEvent(l):n(l)};let i=this.#e.get(e);if(i==null&&(i=[],this.#e.set(e,i)),i.some(l=>l.callback!==n?!1:Vl(l.options,o)))return;super.addEventListener(e,s,o);const c=()=>{this.removeEventListener(e,n,o)};o.signal?.addEventListener("abort",c),i.push({callback:n,wrapper:s,options:o,onAbort:c})}removeEventListener(e,n,r){const o=this.#e.get(e);if(o==null){super.removeEventListener(e,n??null,r);return}this.#e.set(e,o.filter(s=>s.callback===n&&Vl(s.options,r)?(super.removeEventListener(e,s.wrapper,r),s.options?.signal?.removeEventListener("abort",s.onAbort),!1):!0))}safeDispatchEvent(e,n={}){return this.dispatchEvent(new CustomEvent(e,n))}}const Wm=Symbol.for("@libp2p/service-capabilities");function Gm(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}function Vs(t){if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")}function Vm(t){return new TextEncoder().encode(t)}function Xm(t){return new TextDecoder().decode(t)}function Ym(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var n=new Uint8Array(256),r=0;r<n.length;r++)n[r]=255;for(var o=0;o<t.length;o++){var s=t.charAt(o),i=s.charCodeAt(0);if(n[i]!==255)throw new TypeError(s+" is ambiguous");n[i]=o}var a=t.length,c=t.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var m=0,b=0,w=0,I=g.length;w!==I&&g[w]===0;)w++,m++;for(var y=(I-w)*d+1>>>0,k=new Uint8Array(y);w!==I;){for(var L=g[w],C=0,T=y-1;(L!==0||C<b)&&T!==-1;T--,C++)L+=256*k[T]>>>0,k[T]=L%a>>>0,L=L/a>>>0;if(L!==0)throw new Error("Non-zero carry");b=C,w++}for(var x=y-b;x!==y&&k[x]===0;)x++;for(var v=c.repeat(m);x<y;++x)v+=t.charAt(k[x]);return v}function f(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var m=0;if(g[m]!==" "){for(var b=0,w=0;g[m]===c;)b++,m++;for(var I=(g.length-m)*l+1>>>0,y=new Uint8Array(I);g[m];){var k=n[g.charCodeAt(m)];if(k===255)return;for(var L=0,C=I-1;(k!==0||L<w)&&C!==-1;C--,L++)k+=a*y[C]>>>0,y[C]=k%256>>>0,k=k/256>>>0;if(k!==0)throw new Error("Non-zero carry");w=L,m++}if(g[m]!==" "){for(var T=I-w;T!==I&&y[T]===0;)T++;for(var x=new Uint8Array(b+(I-T)),v=b;T!==I;)x[v++]=y[T++];return x}}}function h(g){var m=f(g);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Zm=Ym,Jm=Zm;class Qm{name;prefix;baseEncode;constructor(e,n,r){this.name=e,this.prefix=n,this.baseEncode=r}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}}class ew{name;prefix;baseDecode;prefixCodePoint;constructor(e,n,r){this.name=e,this.prefix=n;const o=n.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=r}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return Lf(this,e)}}class tw{decoders;constructor(e){this.decoders=e}or(e){return Lf(this,e)}decode(e){const n=e[0],r=this.decoders[n];if(r!=null)return r.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function Lf(t,e){return new tw({...t.decoders??{[t.prefix]:t},...e.decoders??{[e.prefix]:e}})}class nw{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,n,r,o){this.name=e,this.prefix=n,this.baseEncode=r,this.baseDecode=o,this.encoder=new Qm(e,n,r),this.decoder=new ew(e,n,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}}function Xs({name:t,prefix:e,encode:n,decode:r}){return new nw(t,e,n,r)}function go({name:t,prefix:e,alphabet:n}){const{encode:r,decode:o}=Jm(n,t);return Xs({prefix:e,name:t,encode:r,decode:s=>Vs(o(s))})}function rw(t,e,n,r){let o=t.length;for(;t[o-1]==="=";)--o;const s=new Uint8Array(o*n/8|0);let i=0,a=0,c=0;for(let l=0;l<o;++l){const d=e[t[l]];if(d===void 0)throw new SyntaxError(`Non-${r} character`);a=a<<n|d,i+=n,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=n||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function ow(t,e,n){const r=e[e.length-1]==="=",o=(1<<n)-1;let s="",i=0,a=0;for(let c=0;c<t.length;++c)for(a=a<<8|t[c],i+=8;i>n;)i-=n,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<n-i]),r)for(;(s.length*n&7)!==0;)s+="=";return s}function sw(t){const e={};for(let n=0;n<t.length;++n)e[t[n]]=n;return e}function Ce({name:t,prefix:e,bitsPerChar:n,alphabet:r}){const o=sw(r);return Xs({prefix:e,name:t,encode(s){return ow(s,r,n)},decode(s){return rw(s,o,n,t)}})}const Be=go({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),iw=go({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"}),aw=Object.freeze(Object.defineProperty({__proto__:null,base58btc:Be,base58flickr:iw},Symbol.toStringTag,{value:"Module"})),Xr=Ce({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),cw=Ce({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),lw=Ce({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),dw=Ce({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),uw=Ce({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),fw=Ce({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),hw=Ce({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),pw=Ce({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),gw=Ce({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),mw=Object.freeze(Object.defineProperty({__proto__:null,base32:Xr,base32hex:uw,base32hexpad:hw,base32hexpadupper:pw,base32hexupper:fw,base32pad:lw,base32padupper:dw,base32upper:cw,base32z:gw},Symbol.toStringTag,{value:"Module"})),Zo=go({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),ww=go({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),yw=Object.freeze(Object.defineProperty({__proto__:null,base36:Zo,base36upper:ww},Symbol.toStringTag,{value:"Module"}));var bw=Bf,Xl=128,vw=-128,Sw=Math.pow(2,31);function Bf(t,e,n){e=e||[],n=n||0;for(var r=n;t>=Sw;)e[n++]=t&255|Xl,t/=128;for(;t&vw;)e[n++]=t&255|Xl,t>>>=7;return e[n]=t|0,Bf.bytes=n-r+1,e}var xw=La,Ew=128,Yl=127;function La(t,r){var n=0,r=r||0,o=0,s=r,i,a=t.length;do{if(s>=a)throw La.bytes=0,new RangeError("Could not decode varint");i=t[s++],n+=o<28?(i&Yl)<<o:(i&Yl)*Math.pow(2,o),o+=7}while(i>=Ew);return La.bytes=s-r,n}var Aw=Math.pow(2,7),kw=Math.pow(2,14),Cw=Math.pow(2,21),Iw=Math.pow(2,28),Rw=Math.pow(2,35),Tw=Math.pow(2,42),Pw=Math.pow(2,49),Nw=Math.pow(2,56),Lw=Math.pow(2,63),Bw=function(t){return t<Aw?1:t<kw?2:t<Cw?3:t<Iw?4:t<Rw?5:t<Tw?6:t<Pw?7:t<Nw?8:t<Lw?9:10},_w={encode:bw,decode:xw,encodingLength:Bw},fs=_w;function Ba(t,e=0){return[fs.decode(t,e),fs.decode.bytes]}function hs(t,e,n=0){return fs.encode(t,e,n),e}function ps(t){return fs.encodingLength(t)}function mo(t,e){const n=e.byteLength,r=ps(t),o=r+ps(n),s=new Uint8Array(o+n);return hs(t,s,0),hs(n,s,r),s.set(e,o),new Mc(t,n,e,s)}function _f(t){const e=Vs(t),[n,r]=Ba(e),[o,s]=Ba(e.subarray(r)),i=e.subarray(r+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Mc(n,o,i,e)}function Ow(t,e){if(t===e)return!0;{const n=e;return t.code===n.code&&t.size===n.size&&n.bytes instanceof Uint8Array&&Gm(t.bytes,n.bytes)}}class Mc{code;size;digest;bytes;constructor(e,n,r,o){this.code=e,this.size=n,this.digest=r,this.bytes=o}}function Zl(t,e){const{bytes:n,version:r}=t;return r===0?Fw(n,_a(t),e??Be.encoder):Mw(n,_a(t),e??Xr.encoder)}const Jl=new WeakMap;function _a(t){const e=Jl.get(t);if(e==null){const n=new Map;return Jl.set(t,n),n}return e}class le{code;version;multihash;bytes;"/";constructor(e,n,r,o){this.code=n,this.version=e,this.multihash=r,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{const{code:e,multihash:n}=this;if(e!==Cr)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(n.code!==jw)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return le.createV0(n)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{const{code:e,digest:n}=this.multihash,r=mo(e,n);return le.createV1(this.code,r)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return le.equals(this,e)}static equals(e,n){const r=n;return r!=null&&e.code===r.code&&e.version===r.version&&Ow(e.multihash,r.multihash)}toString(e){return Zl(this,e)}toJSON(){return{"/":Zl(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;const n=e;if(n instanceof le)return n;if(n["/"]!=null&&n["/"]===n.bytes||n.asCID===n){const{version:r,code:o,multihash:s,bytes:i}=n;return new le(r,o,s,i??Ql(r,o,s.bytes))}else if(n[Uw]===!0){const{version:r,multihash:o,code:s}=n,i=_f(o);return le.create(r,s,i)}else return null}static create(e,n,r){if(typeof n!="number")throw new Error("String codecs are no longer supported");if(!(r.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(n!==Cr)throw new Error(`Version 0 CID must use dag-pb (code: ${Cr}) block encoding`);return new le(e,n,r,r.bytes)}case 1:{const o=Ql(e,n,r.bytes);return new le(e,n,r,o)}default:throw new Error("Invalid version")}}static createV0(e){return le.create(0,Cr,e)}static createV1(e,n){return le.create(1,e,n)}static decode(e){const[n,r]=le.decodeFirst(e);if(r.length!==0)throw new Error("Incorrect length");return n}static decodeFirst(e){const n=le.inspectBytes(e),r=n.size-n.multihashSize,o=Vs(e.subarray(r,r+n.multihashSize));if(o.byteLength!==n.multihashSize)throw new Error("Incorrect length");const s=o.subarray(n.multihashSize-n.digestSize),i=new Mc(n.multihashCode,n.digestSize,s,o);return[n.version===0?le.createV0(i):le.createV1(n.codec,i),e.subarray(n.size)]}static inspectBytes(e){let n=0;const r=()=>{const[u,f]=Ba(e.subarray(n));return n+=f,u};let o=r(),s=Cr;if(o===18?(o=0,n=0):s=r(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);const i=n,a=r(),c=r(),l=n+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,n){const[r,o]=Dw(e,n),s=le.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return _a(s).set(r,e),s}}function Dw(t,e){switch(t[0]){case"Q":{const n=e??Be;return[Be.prefix,n.decode(`${Be.prefix}${t}`)]}case Be.prefix:{const n=e??Be;return[Be.prefix,n.decode(t)]}case Xr.prefix:{const n=e??Xr;return[Xr.prefix,n.decode(t)]}case Zo.prefix:{const n=e??Zo;return[Zo.prefix,n.decode(t)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[t[0],e.decode(t)]}}}function Fw(t,e,n){const{prefix:r}=n;if(r!==Be.prefix)throw Error(`Cannot string encode V0 in ${n.name} encoding`);const o=e.get(r);if(o==null){const s=n.encode(t).slice(1);return e.set(r,s),s}else return o}function Mw(t,e,n){const{prefix:r}=n,o=e.get(r);if(o==null){const s=n.encode(t);return e.set(r,s),s}else return o}const Cr=112,jw=18;function Ql(t,e,n){const r=ps(t),o=r+ps(e),s=new Uint8Array(o+n.byteLength);return hs(t,s,0),hs(e,s,r),s.set(n,o),s}const Uw=Symbol.for("@ipld/js-cid/CID"),Of=0,$w="identity",Df=Vs;function Hw(t,e){if(e?.truncate!=null&&e.truncate!==t.byteLength){if(e.truncate<0||e.truncate>t.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${t.byteLength}`);t=t.subarray(0,e.truncate)}return mo(Of,Df(t))}const wo={code:Of,name:$w,encode:Df,digest:Hw};function at(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let n=0;n<t.byteLength;n++)if(t[n]!==e[n])return!1;return!0}function je(t=0){return new Uint8Array(t)}function Tt(t=0){return new Uint8Array(t)}function Oa(t,e){e==null&&(e=t.reduce((o,s)=>o+s.length,0));const n=Tt(e);let r=0;for(const o of t)n.set(o,r),r+=o.length;return n}const Ff=Symbol.for("@achingbrain/uint8arraylist");function ed(t,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let n=0;for(const r of t){const o=n+r.byteLength;if(e<o)return{buf:r,index:e-n};n=o}throw new RangeError("index is out of bounds")}function Io(t){return!!t?.[Ff]}class se{bufs;length;[Ff]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let n=0;for(const r of e)if(r instanceof Uint8Array)n+=r.byteLength,this.bufs.push(r);else if(Io(r)){n+=r.byteLength;for(const o of r.bufs)this.bufs.push(o)}else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=n}prepend(...e){this.prependAll(e)}prependAll(e){let n=0;for(const r of e.reverse())if(r instanceof Uint8Array)n+=r.byteLength,this.bufs.unshift(r);else if(Io(r))n+=r.byteLength,this.bufs.unshift(...r.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=n}get(e){const n=ed(this.bufs,e);return n.buf[n.index]}set(e,n){const r=ed(this.bufs,e);r.buf[r.index]=n}write(e,n=0){if(e instanceof Uint8Array)for(let r=0;r<e.length;r++)this.set(n+r,e[r]);else if(Io(e))for(let r=0;r<e.length;r++)this.set(n+r,e.get(r));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,n){const{bufs:r,length:o}=this._subList(e,n);return Oa(r,o)}subarray(e,n){const{bufs:r,length:o}=this._subList(e,n);return r.length===1?r[0]:Oa(r,o)}sublist(e,n){const{bufs:r,length:o}=this._subList(e,n),s=new se;return s.length=o,s.bufs=r,s}_subList(e,n){if(e=e??0,n=n??this.length,e<0&&(e=this.length+e),n<0&&(n=this.length+n),e<0||n>this.length)throw new RangeError("index is out of bounds");if(e===n)return{bufs:[],length:0};if(e===0&&n===this.length)return{bufs:[...this.bufs],length:this.length};const r=[];let o=0;for(let s=0;s<this.bufs.length;s++){const i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;const l=e>=a&&e<c,d=n>a&&n<=c;if(l&&d){if(e===a&&n===c){r.push(i);break}const u=e-a;r.push(i.subarray(u,u+(n-e)));break}if(l){if(e===0){r.push(i);continue}r.push(i.subarray(e-a));continue}if(d){if(n===c){r.push(i);break}r.push(i.subarray(0,n-a));break}r.push(i)}return{bufs:r,length:n-e}}indexOf(e,n=0){if(!Io(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');const r=e instanceof Uint8Array?e:e.subarray();if(n=Number(n??0),isNaN(n)&&(n=0),n<0&&(n=this.length+n),n<0&&(n=0),e.length===0)return n>this.length?this.length:n;const o=r.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");const s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[r[u]]=u;const a=i,c=this.byteLength-r.byteLength,l=r.byteLength-1;let d;for(let u=n;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){const h=this.get(u+f);if(r[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){const n=this.subarray(e,e+1);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt8(0)}setInt8(e,n){const r=Tt(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt8(0,n),this.write(r,e)}getInt16(e,n){const r=this.subarray(e,e+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt16(0,n)}setInt16(e,n,r){const o=je(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,n,r),this.write(o,e)}getInt32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt32(0,n)}setInt32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,n,r),this.write(o,e)}getBigInt64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigInt64(0,n)}setBigInt64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,n,r),this.write(o,e)}getUint8(e){const n=this.subarray(e,e+1);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint8(0)}setUint8(e,n){const r=Tt(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint8(0,n),this.write(r,e)}getUint16(e,n){const r=this.subarray(e,e+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint16(0,n)}setUint16(e,n,r){const o=je(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,n,r),this.write(o,e)}getUint32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,n)}setUint32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,n,r),this.write(o,e)}getBigUint64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigUint64(0,n)}setBigUint64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,n,r),this.write(o,e)}getFloat32(e,n){const r=this.subarray(e,e+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat32(0,n)}setFloat32(e,n,r){const o=je(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,n,r),this.write(o,e)}getFloat64(e,n){const r=this.subarray(e,e+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat64(0,n)}setFloat64(e,n,r){const o=je(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,n,r),this.write(o,e)}equals(e){if(e==null||!(e instanceof se)||e.bufs.length!==this.bufs.length)return!1;for(let n=0;n<this.bufs.length;n++)if(!at(this.bufs[n],e.bufs[n]))return!1;return!0}static fromUint8Arrays(e,n){const r=new se;return r.bufs=e,n==null&&(n=e.reduce((o,s)=>o+s.byteLength,0)),r.length=n,r}}const qw=go({prefix:"9",name:"base10",alphabet:"0123456789"}),Kw=Object.freeze(Object.defineProperty({__proto__:null,base10:qw},Symbol.toStringTag,{value:"Module"})),zw=Ce({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ww=Ce({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),Gw=Object.freeze(Object.defineProperty({__proto__:null,base16:zw,base16upper:Ww},Symbol.toStringTag,{value:"Module"})),Vw=Ce({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),Xw=Object.freeze(Object.defineProperty({__proto__:null,base2:Vw},Symbol.toStringTag,{value:"Module"})),Mf=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),Yw=Mf.reduce((t,e,n)=>(t[n]=e,t),[]),Zw=Mf.reduce((t,e,n)=>{const r=e.codePointAt(0);if(r==null)throw new Error(`Invalid character: ${e}`);return t[r]=n,t},[]);function Jw(t){return t.reduce((e,n)=>(e+=Yw[n],e),"")}function Qw(t){const e=[];for(const n of t){const r=n.codePointAt(0);if(r==null)throw new Error(`Invalid character: ${n}`);const o=Zw[r];if(o==null)throw new Error(`Non-base256emoji character: ${n}`);e.push(o)}return new Uint8Array(e)}const ey=Xs({prefix:"🚀",name:"base256emoji",encode:Jw,decode:Qw}),ty=Object.freeze(Object.defineProperty({__proto__:null,base256emoji:ey},Symbol.toStringTag,{value:"Module"})),ny=Ce({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ry=Ce({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),oy=Ce({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),sy=Ce({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),iy=Object.freeze(Object.defineProperty({__proto__:null,base64:ny,base64pad:ry,base64url:oy,base64urlpad:sy},Symbol.toStringTag,{value:"Module"})),ay=Ce({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),cy=Object.freeze(Object.defineProperty({__proto__:null,base8:ay},Symbol.toStringTag,{value:"Module"})),ly=Xs({prefix:"\0",name:"identity",encode:t=>Xm(t),decode:t=>Vm(t)}),dy=Object.freeze(Object.defineProperty({__proto__:null,identity:ly},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const uy=20;function fy({name:t,code:e,encode:n,minDigestLength:r,maxDigestLength:o}){return new hy(t,e,n,r,o)}class hy{name;code;encode;minDigestLength;maxDigestLength;constructor(e,n,r,o,s){this.name=e,this.code=n,this.encode=r,this.minDigestLength=o??uy,this.maxDigestLength=s}digest(e,n){if(n?.truncate!=null){if(n.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&n.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){const r=this.encode(e);return r instanceof Uint8Array?td(r,this.code,n?.truncate):r.then(o=>td(o,this.code,n?.truncate))}else throw Error("Unknown type, must be binary type")}}function td(t,e,n){if(n!=null&&n!==t.byteLength){if(n>t.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${t.byteLength}`);t=t.subarray(0,n)}return mo(e,t)}function py(t){return async e=>new Uint8Array(await crypto.subtle.digest(t,e))}const jc=fy({name:"sha2-256",code:18,encode:py("SHA-256")}),nd={...dy,...Xw,...cy,...Kw,...Gw,...mw,...yw,...aw,...iy,...ty};function jf(t,e,n,r){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:n},decoder:{decode:r}}}const rd=jf("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),Ai=jf("ascii","a",t=>{let e="a";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return e},t=>{t=t.substring(1);const e=Tt(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}),Uf={utf8:rd,"utf-8":rd,hex:nd.base16,latin1:Ai,ascii:Ai,binary:Ai,...nd};function ye(t,e="utf8"){const n=Uf[e];if(n==null)throw new Error(`Unsupported encoding "${e}"`);return n.decoder.decode(`${n.prefix}${t}`)}function ee(t,e="utf8"){const n=Uf[e];if(n==null)throw new Error(`Unsupported encoding "${e}"`);return n.encoder.encode(t).substring(1)}const gy=parseInt("11111",2),Da=parseInt("10000000",2),my=parseInt("01111111",2),od={0:Ir,1:Ir,2:wy,3:vy,4:Sy,5:by,6:yy,16:Ir,22:Ir,48:Ir};function wr(t,e={offset:0}){const n=t[e.offset]&gy;if(e.offset++,od[n]!=null)return od[n](t,e);throw new Error("No decoder for tag "+n)}function yo(t,e){let n=0;if((t[e.offset]&Da)===Da){const r=t[e.offset]&my;let o="0x";e.offset++;for(let s=0;s<r;s++,e.offset++)o+=t[e.offset].toString(16).padStart(2,"0");n=parseInt(o,16)}else n=t[e.offset],e.offset++;return n}function Ir(t,e){yo(t,e);const n=[];for(;!(e.offset>=t.byteLength);){const r=wr(t,e);if(r===null)break;n.push(r)}return n}function wy(t,e){const n=yo(t,e),r=e.offset,o=e.offset+n,s=[];for(let i=r;i<o;i++)i===r&&t[i]===0||s.push(t[i]);return e.offset+=n,Uint8Array.from(s)}function yy(t,e){const n=yo(t,e),r=e.offset+n,o=t[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<r;){const l=t[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function by(t,e){return e.offset++,null}function vy(t,e){const n=yo(t,e),r=t[e.offset];e.offset++;const o=t.subarray(e.offset,e.offset+n-1);if(e.offset+=n,r!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function Sy(t,e){const n=yo(t,e),r=t.subarray(e.offset,e.offset+n);return e.offset+=n,r}function xy(t){let e=t.toString(16);e.length%2===1&&(e="0"+e);const n=new se;for(let r=0;r<e.length;r+=2)n.append(Uint8Array.from([parseInt(`${e[r]}${e[r+1]}`,16)]));return n}function Ys(t){if(t.byteLength<128)return Uint8Array.from([t.byteLength]);const e=xy(t.byteLength);return new se(Uint8Array.from([e.byteLength|Da]),e)}function qe(t){const e=new se,n=128;return(t.subarray()[0]&n)===n&&e.append(Uint8Array.from([0])),e.append(t),new se(Uint8Array.from([2]),Ys(e),e)}function Uc(t){const e=Uint8Array.from([0]),n=new se(e,t);return new se(Uint8Array.from([3]),Ys(n),n)}function Ey(t){return new se(Uint8Array.from([4]),Ys(t),t)}function It(t,e=48){const n=new se;for(const r of t)n.append(r);return new se(Uint8Array.from([e]),Ys(n),n)}async function Ay(t,e,n){const r=await crypto.subtle.importKey("jwk",t,{name:"ECDSA",namedCurve:t.crv??"P-256"},!1,["sign"]);n?.signal?.throwIfAborted();const o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},r,e.subarray());return n?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function ky(t,e,n,r){const o=await crypto.subtle.importKey("jwk",t,{name:"ECDSA",namedCurve:t.crv??"P-256"},!1,["verify"]);r?.signal?.throwIfAborted();const s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,n.subarray());return r?.signal?.throwIfAborted(),s}const Cy=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),Iy=Uint8Array.from([6,5,43,129,4,0,34]),Ry=Uint8Array.from([6,5,43,129,4,0,35]),$f={ext:!0,kty:"EC",crv:"P-256"},Hf={ext:!0,kty:"EC",crv:"P-384"},qf={ext:!0,kty:"EC",crv:"P-521"},Gn=32,Vn=48,Xn=66;function Ty(t){const e=wr(t);return Py(e)}function Py(t){const e=t[1],n=ee(e,"base64url"),r=t[2][1][0],o=1;let s,i;if(e.byteLength===Gn)return s=ee(r.subarray(o,o+Gn),"base64url"),i=ee(r.subarray(o+Gn),"base64url"),new ki({...$f,key_ops:["sign"],d:n,x:s,y:i});if(e.byteLength===Vn)return s=ee(r.subarray(o,o+Vn),"base64url"),i=ee(r.subarray(o+Vn),"base64url"),new ki({...Hf,key_ops:["sign"],d:n,x:s,y:i});if(e.byteLength===Xn)return s=ee(r.subarray(o,o+Xn),"base64url"),i=ee(r.subarray(o+Xn),"base64url"),new ki({...qf,key_ops:["sign"],d:n,x:s,y:i});throw new it(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function Kf(t){const e=wr(t);return Ny(e)}function Ny(t){const e=t[1][1][0],n=1;let r,o;if(e.byteLength===Gn*2+1)return r=ee(e.subarray(n,n+Gn),"base64url"),o=ee(e.subarray(n+Gn),"base64url"),new Jo({...$f,key_ops:["verify"],x:r,y:o});if(e.byteLength===Vn*2+1)return r=ee(e.subarray(n,n+Vn),"base64url"),o=ee(e.subarray(n+Vn),"base64url"),new Jo({...Hf,key_ops:["verify"],x:r,y:o});if(e.byteLength===Xn*2+1)return r=ee(e.subarray(n,n+Xn),"base64url"),o=ee(e.subarray(n+Xn),"base64url"),new Jo({...qf,key_ops:["verify"],x:r,y:o});throw new it(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Ly(t){return It([qe(Uint8Array.from([1])),Ey(ye(t.d??"","base64url")),It([zf(t.crv)],160),It([Uc(new se(Uint8Array.from([4]),ye(t.x??"","base64url"),ye(t.y??"","base64url")))],161)]).subarray()}function By(t){return It([qe(Uint8Array.from([1])),It([zf(t.crv)],160),It([Uc(new se(Uint8Array.from([4]),ye(t.x??"","base64url"),ye(t.y??"","base64url")))],161)]).subarray()}function zf(t){if(t==="P-256")return Cy;if(t==="P-384")return Iy;if(t==="P-521")return Ry;throw new it(`Invalid curve ${t}`)}class Jo{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=By(this.jwk)),this._raw}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}async verify(e,n,r){return ky(this.jwk,n,e,r)}}class ki{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new Jo({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=Ly(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}async sign(e,n){return Ay(this.jwk,e,n)}}const Nn=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function bo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Fa(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function Sn(t,...e){if(!bo(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function Wf(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");Fa(t.outputLen),Fa(t.blockLen)}function gs(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function _y(t,e){Sn(t);const n=e.outputLen;if(t.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function cr(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Ci(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function ct(t,e){return t<<32-e|t>>>e}const Gf=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Oy=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function un(t){if(Sn(t),Gf)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=Oy[t[n]];return e}const wt={_0:48,_9:57,A:65,F:70,a:97,f:102};function sd(t){if(t>=wt._0&&t<=wt._9)return t-wt._0;if(t>=wt.A&&t<=wt.F)return t-(wt.A-10);if(t>=wt.a&&t<=wt.f)return t-(wt.a-10)}function ms(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(Gf)return Uint8Array.fromHex(t);const e=t.length,n=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=sd(t.charCodeAt(s)),a=sd(t.charCodeAt(s+1));if(i===void 0||a===void 0){const c=t[s]+t[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function Dy(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function $c(t){return typeof t=="string"&&(t=Dy(t)),Sn(t),t}function ut(...t){let e=0;for(let r=0;r<t.length;r++){const o=t[r];Sn(o),e+=o.length}const n=new Uint8Array(e);for(let r=0,o=0;r<t.length;r++){const s=t[r];n.set(s,o),o+=s.length}return n}class Vf{}function Xf(t){const e=r=>t().update($c(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Hc(t=32){if(Nn&&typeof Nn.getRandomValues=="function")return Nn.getRandomValues(new Uint8Array(t));if(Nn&&typeof Nn.randomBytes=="function")return Uint8Array.from(Nn.randomBytes(t));throw new Error("crypto.getRandomValues must be defined")}function Fy(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),s=BigInt(4294967295),i=Number(n>>o&s),a=Number(n&s),c=r?4:0,l=r?0:4;t.setUint32(e+c,i,r),t.setUint32(e+l,a,r)}function My(t,e,n){return t&e^~t&n}function jy(t,e,n){return t&e^t&n^e&n}let Yf=class extends Vf{constructor(e,n,r,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Ci(this.buffer)}update(e){gs(this),e=$c(e),Sn(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;for(let i=0;i<s;){const a=Math.min(o-this.pos,s-i);if(a===o){const c=Ci(e);for(;o<=s-i;i+=o)this.process(c,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gs(this),_y(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,cr(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;Fy(r,o-8,BigInt(this.length*8),s),this.process(r,0);const a=Ci(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}};const Bt=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Re=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]),Ro=BigInt(2**32-1),id=BigInt(32);function Uy(t,e=!1){return e?{h:Number(t&Ro),l:Number(t>>id&Ro)}:{h:Number(t>>id&Ro)|0,l:Number(t&Ro)|0}}function $y(t,e=!1){const n=t.length;let r=new Uint32Array(n),o=new Uint32Array(n);for(let s=0;s<n;s++){const{h:i,l:a}=Uy(t[s],e);[r[s],o[s]]=[i,a]}return[r,o]}const ad=(t,e,n)=>t>>>n,cd=(t,e,n)=>t<<32-n|e>>>n,Ln=(t,e,n)=>t>>>n|e<<32-n,Bn=(t,e,n)=>t<<32-n|e>>>n,To=(t,e,n)=>t<<64-n|e>>>n-32,Po=(t,e,n)=>t>>>n-32|e<<64-n;function yt(t,e,n,r){const o=(e>>>0)+(r>>>0);return{h:t+n+(o/2**32|0)|0,l:o|0}}const Hy=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),qy=(t,e,n,r)=>e+n+r+(t/2**32|0)|0,Ky=(t,e,n,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0),zy=(t,e,n,r,o)=>e+n+r+o+(t/2**32|0)|0,Wy=(t,e,n,r,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0)+(o>>>0),Gy=(t,e,n,r,o,s)=>e+n+r+o+s+(t/2**32|0)|0,Vy=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_t=new Uint32Array(64);class Xy extends Yf{constructor(e=32){super(64,e,8,!1),this.A=Bt[0]|0,this.B=Bt[1]|0,this.C=Bt[2]|0,this.D=Bt[3]|0,this.E=Bt[4]|0,this.F=Bt[5]|0,this.G=Bt[6]|0,this.H=Bt[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[e,n,r,o,s,i,a,c]}set(e,n,r,o,s,i,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,n){for(let u=0;u<16;u++,n+=4)_t[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const f=_t[u-15],h=_t[u-2],g=ct(f,7)^ct(f,18)^f>>>3,m=ct(h,17)^ct(h,19)^h>>>10;_t[u]=m+_t[u-7]+g+_t[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){const f=ct(a,6)^ct(a,11)^ct(a,25),h=d+f+My(a,c,l)+Vy[u]+_t[u]|0,m=(ct(r,2)^ct(r,13)^ct(r,22))+jy(r,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=r,r=h+m|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,c,l,d)}roundClean(){cr(_t)}destroy(){this.set(0,0,0,0,0,0,0,0),cr(this.buffer)}}const Zf=$y(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),Yy=Zf[0],Zy=Zf[1],Ot=new Uint32Array(80),Dt=new Uint32Array(80);class Jy extends Yf{constructor(e=64){super(128,e,16,!1),this.Ah=Re[0]|0,this.Al=Re[1]|0,this.Bh=Re[2]|0,this.Bl=Re[3]|0,this.Ch=Re[4]|0,this.Cl=Re[5]|0,this.Dh=Re[6]|0,this.Dl=Re[7]|0,this.Eh=Re[8]|0,this.El=Re[9]|0,this.Fh=Re[10]|0,this.Fl=Re[11]|0,this.Gh=Re[12]|0,this.Gl=Re[13]|0,this.Hh=Re[14]|0,this.Hl=Re[15]|0}get(){const{Ah:e,Al:n,Bh:r,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:g,Hh:m,Hl:b}=this;return[e,n,r,o,s,i,a,c,l,d,u,f,h,g,m,b]}set(e,n,r,o,s,i,a,c,l,d,u,f,h,g,m,b){this.Ah=e|0,this.Al=n|0,this.Bh=r|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=g|0,this.Hh=m|0,this.Hl=b|0}process(e,n){for(let y=0;y<16;y++,n+=4)Ot[y]=e.getUint32(n),Dt[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){const k=Ot[y-15]|0,L=Dt[y-15]|0,C=Ln(k,L,1)^Ln(k,L,8)^ad(k,L,7),T=Bn(k,L,1)^Bn(k,L,8)^cd(k,L,7),x=Ot[y-2]|0,v=Dt[y-2]|0,A=Ln(x,v,19)^To(x,v,61)^ad(x,v,6),N=Bn(x,v,19)^Po(x,v,61)^cd(x,v,6),D=Ky(T,N,Dt[y-7],Dt[y-16]),E=zy(D,C,A,Ot[y-7],Ot[y-16]);Ot[y]=E|0,Dt[y]=D|0}let{Ah:r,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:g,Gh:m,Gl:b,Hh:w,Hl:I}=this;for(let y=0;y<80;y++){const k=Ln(u,f,14)^Ln(u,f,18)^To(u,f,41),L=Bn(u,f,14)^Bn(u,f,18)^Po(u,f,41),C=u&h^~u&m,T=f&g^~f&b,x=Wy(I,L,T,Zy[y],Dt[y]),v=Gy(x,w,k,C,Yy[y],Ot[y]),A=x|0,N=Ln(r,o,28)^To(r,o,34)^To(r,o,39),D=Bn(r,o,28)^Po(r,o,34)^Po(r,o,39),E=r&s^r&a^s&a,S=o&i^o&c^i&c;w=m|0,I=b|0,m=h|0,b=g|0,h=u|0,g=f|0,{h:u,l:f}=yt(l|0,d|0,v|0,A|0),l=a|0,d=c|0,a=s|0,c=i|0,s=r|0,i=o|0;const P=Hy(A,D,S);r=qy(P,v,N,E),o=P|0}({h:r,l:o}=yt(this.Ah|0,this.Al|0,r|0,o|0)),{h:s,l:i}=yt(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=yt(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=yt(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=yt(this.Eh|0,this.El|0,u|0,f|0),{h,l:g}=yt(this.Fh|0,this.Fl|0,h|0,g|0),{h:m,l:b}=yt(this.Gh|0,this.Gl|0,m|0,b|0),{h:w,l:I}=yt(this.Hh|0,this.Hl|0,w|0,I|0),this.set(r,o,s,i,a,c,l,d,u,f,h,g,m,b,w,I)}roundClean(){cr(Ot,Dt)}destroy(){cr(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const Jf=Xf(()=>new Xy),Qy=Xf(()=>new Jy);const qc=BigInt(0),Ma=BigInt(1);function mn(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}"`;throw new Error(n+"expected boolean, got type="+typeof t)}return t}function ot(t,e,n=""){const r=bo(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",c=r?`length=${o}`:`type=${typeof t}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return t}function No(t){const e=t.toString(16);return e.length&1?"0"+e:e}function Qf(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?qc:BigInt("0x"+t)}function Zs(t){return Qf(un(t))}function ro(t){return Sn(t),Qf(un(Uint8Array.from(t).reverse()))}function Kc(t,e){return ms(t.toString(16).padStart(e*2,"0"))}function eh(t,e){return Kc(t,e).reverse()}function he(t,e,n){let r;if(typeof e=="string")try{r=ms(e)}catch(s){throw new Error(t+" must be hex string or Uint8Array, cause: "+s)}else if(bo(e))r=Uint8Array.from(e);else throw new Error(t+" must be hex string or Uint8Array");const o=r.length;if(typeof n=="number"&&o!==n)throw new Error(t+" of length "+n+" expected, got "+o);return r}function ld(t){return Uint8Array.from(t)}const Ii=t=>typeof t=="bigint"&&qc<=t;function eb(t,e,n){return Ii(t)&&Ii(e)&&Ii(n)&&e<=t&&t<n}function ja(t,e,n,r){if(!eb(e,n,r))throw new Error("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function th(t){let e;for(e=0;t>qc;t>>=Ma,e+=1);return e}const vo=t=>(Ma<<BigInt(t))-Ma;function tb(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");const r=h=>new Uint8Array(h),o=h=>Uint8Array.of(h);let s=r(t),i=r(t),a=0;const c=()=>{s.fill(1),i.fill(0),a=0},l=(...h)=>n(i,s,...h),d=(h=r(0))=>{i=l(o(0),h),s=l(),h.length!==0&&(i=l(o(1),h),s=l())},u=()=>{if(a++>=1e3)throw new Error("drbg: tried 1000 values");let h=0;const g=[];for(;h<e;){s=l();const m=s.slice();g.push(m),h+=s.length}return ut(...g)};return(h,g)=>{c(),d(h);let m;for(;!(m=g(u()));)d();return c(),m}}function So(t,e,n={}){if(!t||typeof t!="object")throw new Error("expected valid options object");function r(o,s,i){const a=t[o];if(i&&a===void 0)return;const c=typeof a;if(c!==s||a===null)throw new Error(`param "${o}" is invalid: expected ${s}, got ${c}`)}Object.entries(e).forEach(([o,s])=>r(o,s,!1)),Object.entries(n).forEach(([o,s])=>r(o,s,!0))}function ws(t){const e=new WeakMap;return(n,...r)=>{const o=e.get(n);if(o!==void 0)return o;const s=t(n,...r);return e.set(n,s),s}}const Ue=BigInt(0),ke=BigInt(1),sn=BigInt(2),nh=BigInt(3),rh=BigInt(4),oh=BigInt(5),nb=BigInt(7),sh=BigInt(8),rb=BigInt(9),ih=BigInt(16);function be(t,e){const n=t%e;return n>=Ue?n:e+n}function fe(t,e,n){let r=t;for(;e-- >Ue;)r*=r,r%=n;return r}function dd(t,e){if(t===Ue)throw new Error("invert: expected non-zero number");if(e<=Ue)throw new Error("invert: expected positive modulus, got "+e);let n=be(t,e),r=e,o=Ue,s=ke;for(;n!==Ue;){const a=r/n,c=r%n,l=o-s*a;r=n,n=c,o=s,s=l}if(r!==ke)throw new Error("invert: does not exist");return be(o,e)}function zc(t,e,n){if(!t.eql(t.sqr(e),n))throw new Error("Cannot find square root")}function ah(t,e){const n=(t.ORDER+ke)/rh,r=t.pow(e,n);return zc(t,r,e),r}function ob(t,e){const n=(t.ORDER-oh)/sh,r=t.mul(e,sn),o=t.pow(r,n),s=t.mul(e,o),i=t.mul(t.mul(s,sn),o),a=t.mul(s,t.sub(i,t.ONE));return zc(t,a,e),a}function sb(t){const e=xn(t),n=ch(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+nb)/ih;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,r);const u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),g=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,g);const m=a.eql(a.sqr(d),c),b=a.cmov(l,d,m);return zc(a,b,c),b}}function ch(t){if(t<nh)throw new Error("sqrt is not defined for small field");let e=t-ke,n=0;for(;e%sn===Ue;)e/=sn,n++;let r=sn;const o=xn(t);for(;ud(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ah;let s=o.pow(r,e);const i=(e+ke)/sn;return function(c,l){if(c.is0(l))return l;if(ud(c,l)!==1)throw new Error("Cannot find square root");let d=n,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let g=1,m=c.sqr(f);for(;!c.eql(m,c.ONE);)if(g++,m=c.sqr(m),g===d)throw new Error("Cannot find square root");const b=ke<<BigInt(d-g-1),w=c.pow(u,b);d=g,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function ib(t){return t%rh===nh?ah:t%sh===oh?ob:t%ih===rb?sb(t):ch(t)}const ab=(t,e)=>(be(t,e)&ke)===ke,cb=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function lb(t){const e={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},n=cb.reduce((r,o)=>(r[o]="function",r),e);return So(t,n),t}function db(t,e,n){if(n<Ue)throw new Error("invalid exponent, negatives unsupported");if(n===Ue)return t.ONE;if(n===ke)return e;let r=t.ONE,o=e;for(;n>Ue;)n&ke&&(r=t.mul(r,o)),o=t.sqr(o),n>>=ke;return r}function lh(t,e,n=!1){const r=new Array(e.length).fill(n?t.ZERO:void 0),o=e.reduce((i,a,c)=>t.is0(a)?i:(r[c]=i,t.mul(i,a)),t.ONE),s=t.inv(o);return e.reduceRight((i,a,c)=>t.is0(a)?i:(r[c]=t.mul(i,r[c]),t.mul(i,a)),s),r}function ud(t,e){const n=(t.ORDER-ke)/sn,r=t.pow(e,n),o=t.eql(r,t.ONE),s=t.eql(r,t.ZERO),i=t.eql(r,t.neg(t.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function dh(t,e){e!==void 0&&Fa(e);const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function xn(t,e,n=!1,r={}){if(t<=Ue)throw new Error("invalid field: expected ORDER > 0, got "+t);let o,s,i=!1,a;if(typeof e=="object"&&e!=null){if(r.sqrt||n)throw new Error("cannot specify opts in two arguments");const f=e;f.BITS&&(o=f.BITS),f.sqrt&&(s=f.sqrt),typeof f.isLE=="boolean"&&(n=f.isLE),typeof f.modFromBytes=="boolean"&&(i=f.modFromBytes),a=f.allowedLengths}else typeof e=="number"&&(o=e),r.sqrt&&(s=r.sqrt);const{nBitLength:c,nByteLength:l}=dh(t,o);if(l>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let d;const u=Object.freeze({ORDER:t,isLE:n,BITS:c,BYTES:l,MASK:vo(c),ZERO:Ue,ONE:ke,allowedLengths:a,create:f=>be(f,t),isValid:f=>{if(typeof f!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof f);return Ue<=f&&f<t},is0:f=>f===Ue,isValidNot0:f=>!u.is0(f)&&u.isValid(f),isOdd:f=>(f&ke)===ke,neg:f=>be(-f,t),eql:(f,h)=>f===h,sqr:f=>be(f*f,t),add:(f,h)=>be(f+h,t),sub:(f,h)=>be(f-h,t),mul:(f,h)=>be(f*h,t),pow:(f,h)=>db(u,f,h),div:(f,h)=>be(f*dd(h,t),t),sqrN:f=>f*f,addN:(f,h)=>f+h,subN:(f,h)=>f-h,mulN:(f,h)=>f*h,inv:f=>dd(f,t),sqrt:s||(f=>(d||(d=ib(t)),d(u,f))),toBytes:f=>n?eh(f,l):Kc(f,l),fromBytes:(f,h=!0)=>{if(a){if(!a.includes(f.length)||f.length>l)throw new Error("Field.fromBytes: expected "+a+" bytes, got "+f.length);const m=new Uint8Array(l);m.set(f,n?0:m.length-f.length),f=m}if(f.length!==l)throw new Error("Field.fromBytes: expected "+l+" bytes, got "+f.length);let g=n?ro(f):Zs(f);if(i&&(g=be(g,t)),!h&&!u.isValid(g))throw new Error("invalid field element: outside of range 0..ORDER");return g},invertBatch:f=>lh(u,f),cmov:(f,h,g)=>g?h:f});return Object.freeze(u)}function uh(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function fh(t){const e=uh(t);return e+Math.ceil(e/2)}function ub(t,e,n=!1){const r=t.length,o=uh(e),s=fh(e);if(r<16||r<s||r>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+r);const i=n?ro(t):Zs(t),a=be(i,e-ke)+ke;return n?eh(a,o):Kc(a,o)}const lr=BigInt(0),an=BigInt(1);function ys(t,e){const n=e.negate();return t?n:e}function cn(t,e){const n=lh(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function hh(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Ri(t,e){hh(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=vo(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function fd(t,e,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let a=Number(t&o),c=t>>i;a>r&&(a-=s,c+=an);const l=e*r,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}function fb(t,e){if(!Array.isArray(t))throw new Error("array expected");t.forEach((n,r)=>{if(!(n instanceof e))throw new Error("invalid point at index "+r)})}function hb(t,e){if(!Array.isArray(t))throw new Error("array of scalars expected");t.forEach((n,r)=>{if(!e.isValid(n))throw new Error("invalid scalar at index "+r)})}const Ti=new WeakMap,ph=new WeakMap;function Pi(t){return ph.get(t)||1}function hd(t){if(t!==lr)throw new Error("invalid wNAF")}class gh{constructor(e,n){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=n}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>lr;)n&an&&(r=r.add(o)),o=o.double(),n>>=an;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=Ri(n,this.bits),s=[];let i=e,a=i;for(let c=0;c<r;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=Ri(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=fd(r,a,i);r=c,d?s=s.add(ys(f,n[h])):o=o.add(ys(u,n[l]))}return hd(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=Ri(e,this.bits);for(let i=0;i<s.windows&&r!==lr;i++){const{nextN:a,offset:c,isZero:l,isNeg:d}=fd(r,i,s);if(r=a,!l){const u=n[c];o=o.add(d?u.negate():u)}}return hd(r),o}getPrecomputes(e,n,r){let o=Ti.get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),Ti.set(n,o))),o}cached(e,n,r){const o=Pi(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=Pi(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){hh(n,this.bits),ph.set(e,n),Ti.delete(e)}hasCache(e){return Pi(e)!==1}}function pb(t,e,n,r){let o=e,s=t.ZERO,i=t.ZERO;for(;n>lr||r>lr;)n&an&&(s=s.add(o)),r&an&&(i=i.add(o)),o=o.double(),n>>=an,r>>=an;return{p1:s,p2:i}}function mh(t,e,n,r){fb(n,t),hb(r,e);const o=n.length,s=r.length;if(o!==s)throw new Error("arrays of points and scalars must have equal length");const i=t.ZERO,a=th(BigInt(o));let c=1;a>12?c=a-3:a>4?c=a-2:a>0&&(c=2);const l=vo(c),d=new Array(Number(l)+1).fill(i),u=Math.floor((e.BITS-1)/c)*c;let f=i;for(let h=u;h>=0;h-=c){d.fill(i);for(let m=0;m<s;m++){const b=r[m],w=Number(b>>BigInt(h)&l);d[w]=d[w].add(n[m])}let g=i;for(let m=d.length-1,b=i;m>0;m--)b=b.add(d[m]),g=g.add(b);if(f=f.add(g),h!==0)for(let m=0;m<c;m++)f=f.double()}return f}function pd(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return lb(e),e}else return xn(t,{isLE:n})}function wh(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(const c of["p","n","h"]){const l=e[c];if(!(typeof l=="bigint"&&l>lr))throw new Error(`CURVE.${c} must be positive bigint`)}const o=pd(e.p,n.Fp,r),s=pd(e.n,n.Fn,r),a=["Gx","Gy","a",t==="weierstrass"?"b":"d"];for(const c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}const Ft=BigInt(0),ve=BigInt(1),Ni=BigInt(2),gb=BigInt(8);function mb(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function wb(t,e={}){const n=wh("edwards",t,e,e.FpFnLE),{Fp:r,Fn:o}=n;let s=n.CURVE;const{h:i}=s;So(e,{},{uvRatio:"function"});const a=Ni<<BigInt(o.BYTES*8)-ve,c=b=>r.create(b),l=e.uvRatio||((b,w)=>{try{return{isValid:!0,value:r.sqrt(r.div(b,w))}}catch{return{isValid:!1,value:Ft}}});if(!mb(r,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(b,w,I=!1){const y=I?ve:Ft;return ja("coordinate "+b,w,y,a),w}function u(b){if(!(b instanceof g))throw new Error("ExtendedPoint expected")}const f=ws((b,w)=>{const{X:I,Y:y,Z:k}=b,L=b.is0();w==null&&(w=L?gb:r.inv(k));const C=c(I*w),T=c(y*w),x=r.mul(k,w);if(L)return{x:Ft,y:ve};if(x!==ve)throw new Error("invZ was invalid");return{x:C,y:T}}),h=ws(b=>{const{a:w,d:I}=s;if(b.is0())throw new Error("bad point: ZERO");const{X:y,Y:k,Z:L,T:C}=b,T=c(y*y),x=c(k*k),v=c(L*L),A=c(v*v),N=c(T*w),D=c(v*c(N+x)),E=c(A+c(I*c(T*x)));if(D!==E)throw new Error("bad point: equation left != right (1)");const S=c(y*k),P=c(L*C);if(S!==P)throw new Error("bad point: equation left != right (2)");return!0});class g{constructor(w,I,y,k){this.X=d("x",w),this.Y=d("y",I),this.Z=d("z",y,!0),this.T=d("t",k),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof g)throw new Error("extended point not allowed");const{x:I,y}=w||{};return d("x",I),d("y",y),new g(I,y,ve,c(I*y))}static fromBytes(w,I=!1){const y=r.BYTES,{a:k,d:L}=s;w=ld(ot(w,y,"point")),mn(I,"zip215");const C=ld(w),T=w[y-1];C[y-1]=T&-129;const x=ro(C),v=I?a:r.ORDER;ja("point.y",x,Ft,v);const A=c(x*x),N=c(A-ve),D=c(L*A-k);let{isValid:E,value:S}=l(N,D);if(!E)throw new Error("bad point: invalid y coordinate");const P=(S&ve)===ve,R=(T&128)!==0;if(!I&&S===Ft&&R)throw new Error("bad point: x=0 and x_0=1");return R!==P&&(S=c(-S)),g.fromAffine({x:S,y:x})}static fromHex(w,I=!1){return g.fromBytes(he("point",w),I)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,I=!0){return m.createCache(this,w),I||this.multiply(Ni),this}assertValidity(){h(this)}equals(w){u(w);const{X:I,Y:y,Z:k}=this,{X:L,Y:C,Z:T}=w,x=c(I*T),v=c(L*k),A=c(y*T),N=c(C*k);return x===v&&A===N}is0(){return this.equals(g.ZERO)}negate(){return new g(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:w}=s,{X:I,Y:y,Z:k}=this,L=c(I*I),C=c(y*y),T=c(Ni*c(k*k)),x=c(w*L),v=I+y,A=c(c(v*v)-L-C),N=x+C,D=N-T,E=x-C,S=c(A*D),P=c(N*E),R=c(A*E),O=c(D*N);return new g(S,P,O,R)}add(w){u(w);const{a:I,d:y}=s,{X:k,Y:L,Z:C,T}=this,{X:x,Y:v,Z:A,T:N}=w,D=c(k*x),E=c(L*v),S=c(T*y*N),P=c(C*A),R=c((k+L)*(x+v)-D-E),O=P-S,j=P+S,M=c(E-I*D),B=c(R*O),F=c(j*M),U=c(R*M),H=c(O*j);return new g(B,F,H,U)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");const{p:I,f:y}=m.cached(this,w,k=>cn(g,k));return cn(g,[I,y])[0]}multiplyUnsafe(w,I=g.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===Ft?g.ZERO:this.is0()||w===ve?this:m.unsafe(this,w,y=>cn(g,y),I)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return m.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===ve?this:this.multiplyUnsafe(i)}toBytes(){const{x:w,y:I}=this.toAffine(),y=r.toBytes(I);return y[y.length-1]|=w&ve?128:0,y}toHex(){return un(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get ex(){return this.X}get ey(){return this.Y}get ez(){return this.Z}get et(){return this.T}static normalizeZ(w){return cn(g,w)}static msm(w,I){return mh(g,o,w,I)}_setWindowSize(w){this.precompute(w)}toRawBytes(){return this.toBytes()}}g.BASE=new g(s.Gx,s.Gy,ve,c(s.Gx*s.Gy)),g.ZERO=new g(Ft,ve,ve,Ft),g.Fp=r,g.Fn=o;const m=new gh(g,o.BITS);return g.BASE.precompute(8),g}function yb(t,e,n={}){if(typeof e!="function")throw new Error('"hash" function param is required');So(n,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});const{prehash:r}=n,{BASE:o,Fp:s,Fn:i}=t,a=n.randomBytes||Hc,c=n.adjustScalarBytes||(v=>v),l=n.domain||((v,A,N)=>{if(mn(N,"phflag"),A.length||N)throw new Error("Contexts/pre-hash are not supported");return v});function d(v){return i.create(ro(v))}function u(v){const A=y.secretKey;v=he("private key",v,A);const N=he("hashed private key",e(v),2*A),D=c(N.slice(0,A)),E=N.slice(A,2*A),S=d(D);return{head:D,prefix:E,scalar:S}}function f(v){const{head:A,prefix:N,scalar:D}=u(v),E=o.multiply(D),S=E.toBytes();return{head:A,prefix:N,scalar:D,point:E,pointBytes:S}}function h(v){return f(v).pointBytes}function g(v=Uint8Array.of(),...A){const N=ut(...A);return d(e(l(N,he("context",v),!!r)))}function m(v,A,N={}){v=he("message",v),r&&(v=r(v));const{prefix:D,scalar:E,pointBytes:S}=f(A),P=g(N.context,D,v),R=o.multiply(P).toBytes(),O=g(N.context,R,S,v),j=i.create(P+O*E);if(!i.isValid(j))throw new Error("sign failed: invalid s");const M=ut(R,i.toBytes(j));return ot(M,y.signature,"result")}const b={zip215:!0};function w(v,A,N,D=b){const{context:E,zip215:S}=D,P=y.signature;v=he("signature",v,P),A=he("message",A),N=he("publicKey",N,y.publicKey),S!==void 0&&mn(S,"zip215"),r&&(A=r(A));const R=P/2,O=v.subarray(0,R),j=ro(v.subarray(R,P));let M,B,F;try{M=t.fromBytes(N,S),B=t.fromBytes(O,S),F=o.multiplyUnsafe(j)}catch{return!1}if(!S&&M.isSmallOrder())return!1;const U=g(E,B.toBytes(),M.toBytes(),A);return B.add(M.multiplyUnsafe(U)).subtract(F).clearCofactor().is0()}const I=s.BYTES,y={secretKey:I,publicKey:I,signature:2*I,seed:I};function k(v=a(y.seed)){return ot(v,y.seed,"seed")}function L(v){const A=x.randomSecretKey(v);return{secretKey:A,publicKey:h(A)}}function C(v){return bo(v)&&v.length===i.BYTES}function T(v,A){try{return!!t.fromBytes(v,A)}catch{return!1}}const x={getExtendedPublicKey:f,randomSecretKey:k,isValidSecretKey:C,isValidPublicKey:T,toMontgomery(v){const{y:A}=t.fromBytes(v),N=y.publicKey,D=N===32;if(!D&&N!==57)throw new Error("only defined for 25519 and 448");const E=D?s.div(ve+A,ve-A):s.div(A-ve,A+ve);return s.toBytes(E)},toMontgomerySecret(v){const A=y.secretKey;ot(v,A);const N=e(v.subarray(0,A));return c(N).subarray(0,A)},randomPrivateKey:k,precompute(v=8,A=t.BASE){return A.precompute(v,!1)}};return Object.freeze({keygen:L,getPublicKey:h,sign:m,verify:w,utils:x,Point:t,lengths:y})}function bb(t){const e={a:t.a,d:t.d,p:t.Fp.ORDER,n:t.n,h:t.h,Gx:t.Gx,Gy:t.Gy},n=t.Fp,r=xn(e.n,t.nBitLength,!0),o={Fp:n,Fn:r,uvRatio:t.uvRatio},s={randomBytes:t.randomBytes,adjustScalarBytes:t.adjustScalarBytes,domain:t.domain,prehash:t.prehash,mapToCurve:t.mapToCurve};return{CURVE:e,curveOpts:o,hash:t.hash,eddsaOpts:s}}function vb(t,e){const n=e.Point;return Object.assign({},e,{ExtendedPoint:n,CURVE:t,nBitLength:n.Fn.BITS,nByteLength:n.Fn.BYTES})}function Sb(t){const{CURVE:e,curveOpts:n,hash:r,eddsaOpts:o}=bb(t),s=wb(e,n),i=yb(s,r,o);return vb(t,i)}const xb=BigInt(1),gd=BigInt(2);BigInt(3);const Eb=BigInt(5),Ab=BigInt(8),Wc=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),yh={p:Wc,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Ab,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function kb(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Wc,a=t*t%s*t%s,c=fe(a,gd,s)*a%s,l=fe(c,xb,s)*t%s,d=fe(l,Eb,s)*l%s,u=fe(d,e,s)*d%s,f=fe(u,n,s)*u%s,h=fe(f,r,s)*f%s,g=fe(h,o,s)*h%s,m=fe(g,o,s)*h%s,b=fe(m,e,s)*d%s;return{pow_p_5_8:fe(b,gd,s)*t%s,b2:a}}function Cb(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const md=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Ib(t,e){const n=Wc,r=be(e*e*e,n),o=be(r*r*e,n),s=kb(t*o).pow_p_5_8;let i=be(t*r*s,n);const a=be(e*i*i,n),c=i,l=be(i*md,n),d=a===t,u=a===be(-t,n),f=a===be(-t*md,n);return d&&(i=c),(u||f)&&(i=l),ab(i,n)&&(i=be(-i,n)),{isValid:d||u,value:i}}const Rb=xn(yh.p,{isLE:!0}),Tb={...yh,Fp:Rb,hash:Qy,adjustScalarBytes:Cb,uvRatio:Ib},bs=Sb(Tb);class wd extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}}class yd extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}}class Pb extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}}const Pt={get(t=globalThis){const e=t.crypto;if(e?.subtle==null)throw new Pb("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}},vs=32,vt=64,Ua=32;let Yn;const bh=(async()=>{try{return await Pt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function Nb(){const t=bs.utils.randomPrivateKey(),e=bs.getPublicKey(t);return{privateKey:Mb(t,e),publicKey:e}}async function Lb(t,e){let n;t.length===vt?n=t.subarray(0,32):n=t;const r={crv:"Ed25519",kty:"OKP",x:ee(t.subarray(32),"base64url"),d:ee(n,"base64url"),ext:!0,key_ops:["sign"]},o=await Pt.get().subtle.importKey("jwk",r,{name:"Ed25519"},!0,["sign"]),s=await Pt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function Bb(t,e){const n=t.subarray(0,Ua);return bs.sign(e instanceof Uint8Array?e:e.subarray(),n)}async function _b(t,e){return Yn==null&&(Yn=await bh),Yn?Lb(t,e):Bb(t,e)}async function Ob(t,e,n){if(t.buffer instanceof ArrayBuffer){const r=await Pt.get().subtle.importKey("raw",t.buffer,{name:"Ed25519"},!1,["verify"]);return await Pt.get().subtle.verify({name:"Ed25519"},r,e,n instanceof Uint8Array?n:n.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function Db(t,e,n){return bs.verify(e,n instanceof Uint8Array?n:n.subarray(),t)}async function Fb(t,e,n){return Yn==null&&(Yn=await bh),Yn?Ob(t,e,n):Db(t,e,n)}function Mb(t,e){const n=new Uint8Array(vt);for(let r=0;r<Ua;r++)n[r]=t[r],n[Ua+r]=e[r];return n}function Js(t){return t==null?!1:typeof t.then=="function"&&typeof t.catch=="function"&&typeof t.finally=="function"}class vh{type="Ed25519";raw;constructor(e){this.raw=oo(e,vs)}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){r?.signal?.throwIfAborted();const o=Fb(this.raw,n,e);return Js(o)?o.then(s=>(r?.signal?.throwIfAborted(),s)):o}}class $a{type="Ed25519";raw;publicKey;constructor(e,n){this.raw=oo(e,vt),this.publicKey=new vh(n)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){n?.signal?.throwIfAborted();const r=_b(this.raw,e);return Js(r)?r.then(o=>(n?.signal?.throwIfAborted(),o)):(n?.signal?.throwIfAborted(),r)}}function jb(t){if(t.length>vt){t=oo(t,vt+vs);const r=t.subarray(0,vt),o=t.subarray(vt,t.length);return new $a(r,o)}t=oo(t,vt);const e=t.subarray(0,vt),n=t.subarray(vs);return new $a(e,n)}function Sh(t){return t=oo(t,vs),new vh(t)}async function Ub(){const{privateKey:t,publicKey:e}=Nb();return new $a(t,e)}function oo(t,e){if(t=Uint8Array.from(t??[]),t.length!==e)throw new it(`Key must be a Uint8Array of length ${e}, got ${t.length}`);return t}const $b=Math.pow(2,7),Hb=Math.pow(2,14),qb=Math.pow(2,21),Gc=Math.pow(2,28),Vc=Math.pow(2,35),Xc=Math.pow(2,42),Yc=Math.pow(2,49),oe=128,Te=127;function En(t){if(t<$b)return 1;if(t<Hb)return 2;if(t<qb)return 3;if(t<Gc)return 4;if(t<Vc)return 5;if(t<Xc)return 6;if(t<Yc)return 7;if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function xh(t,e,n=0){switch(En(t)){case 8:e[n++]=t&255|oe,t/=128;case 7:e[n++]=t&255|oe,t/=128;case 6:e[n++]=t&255|oe,t/=128;case 5:e[n++]=t&255|oe,t/=128;case 4:e[n++]=t&255|oe,t>>>=7;case 3:e[n++]=t&255|oe,t>>>=7;case 2:e[n++]=t&255|oe,t>>>=7;case 1:{e[n++]=t&255,t>>>=7;break}default:throw new Error("unreachable")}return e}function Kb(t,e,n=0){switch(En(t)){case 8:e.set(n++,t&255|oe),t/=128;case 7:e.set(n++,t&255|oe),t/=128;case 6:e.set(n++,t&255|oe),t/=128;case 5:e.set(n++,t&255|oe),t/=128;case 4:e.set(n++,t&255|oe),t>>>=7;case 3:e.set(n++,t&255|oe),t>>>=7;case 2:e.set(n++,t&255|oe),t>>>=7;case 1:{e.set(n++,t&255),t>>>=7;break}default:throw new Error("unreachable")}return e}function Eh(t,e){let n=t[e],r=0;if(r+=n&Te,n<oe||(n=t[e+1],r+=(n&Te)<<7,n<oe)||(n=t[e+2],r+=(n&Te)<<14,n<oe)||(n=t[e+3],r+=(n&Te)<<21,n<oe)||(n=t[e+4],r+=(n&Te)*Gc,n<oe)||(n=t[e+5],r+=(n&Te)*Vc,n<oe)||(n=t[e+6],r+=(n&Te)*Xc,n<oe)||(n=t[e+7],r+=(n&Te)*Yc,n<oe))return r;throw new RangeError("Could not decode varint")}function zb(t,e){let n=t.get(e),r=0;if(r+=n&Te,n<oe||(n=t.get(e+1),r+=(n&Te)<<7,n<oe)||(n=t.get(e+2),r+=(n&Te)<<14,n<oe)||(n=t.get(e+3),r+=(n&Te)<<21,n<oe)||(n=t.get(e+4),r+=(n&Te)*Gc,n<oe)||(n=t.get(e+5),r+=(n&Te)*Vc,n<oe)||(n=t.get(e+6),r+=(n&Te)*Xc,n<oe)||(n=t.get(e+7),r+=(n&Te)*Yc,n<oe))return r;throw new RangeError("Could not decode varint")}function Wb(t,e,n=0){return e==null&&(e=Tt(En(t))),e instanceof Uint8Array?xh(t,e,n):Kb(t,e,n)}function Ah(t,e=0){return t instanceof Uint8Array?Eh(t,e):zb(t,e)}const Zc=new Float32Array([-0]),zt=new Uint8Array(Zc.buffer);function Gb(t,e,n){Zc[0]=t,e[n]=zt[0],e[n+1]=zt[1],e[n+2]=zt[2],e[n+3]=zt[3]}function Vb(t,e){return zt[0]=t[e],zt[1]=t[e+1],zt[2]=t[e+2],zt[3]=t[e+3],Zc[0]}const Jc=new Float64Array([-0]),Pe=new Uint8Array(Jc.buffer);function Xb(t,e,n){Jc[0]=t,e[n]=Pe[0],e[n+1]=Pe[1],e[n+2]=Pe[2],e[n+3]=Pe[3],e[n+4]=Pe[4],e[n+5]=Pe[5],e[n+6]=Pe[6],e[n+7]=Pe[7]}function Yb(t,e){return Pe[0]=t[e],Pe[1]=t[e+1],Pe[2]=t[e+2],Pe[3]=t[e+3],Pe[4]=t[e+4],Pe[5]=t[e+5],Pe[6]=t[e+6],Pe[7]=t[e+7],Jc[0]}const Zb=BigInt(Number.MAX_SAFE_INTEGER),Jb=BigInt(Number.MIN_SAFE_INTEGER);class Ne{lo;hi;constructor(e,n){this.lo=e|0,this.hi=n|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){const n=~this.lo+1>>>0;let r=~this.hi>>>0;return n===0&&(r=r+1>>>0),-(n+r*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const n=~this.lo+1>>>0;let r=~this.hi>>>0;return n===0&&(r=r+1>>>0),-(BigInt(n)+(BigInt(r)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){const e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){const e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){const e=this.lo,n=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return r===0?n===0?e<16384?e<128?1:2:e<2097152?3:4:n<16384?n<128?5:6:n<2097152?7:8:r<128?9:10}static fromBigInt(e){if(e===0n)return fn;if(e<Zb&&e>Jb)return this.fromNumber(Number(e));const n=e<0n;n&&(e=-e);let r=e>>32n,o=e-(r<<32n);return n&&(r=~r|0n,o=~o|0n,++o>bd&&(o=0n,++r>bd&&(r=0n))),new Ne(Number(o),Number(r))}static fromNumber(e){if(e===0)return fn;const n=e<0;n&&(e=-e);let r=e>>>0,o=(e-r)/4294967296>>>0;return n&&(o=~o>>>0,r=~r>>>0,++r>4294967295&&(r=0,++o>4294967295&&(o=0))),new Ne(r,o)}static from(e){return typeof e=="number"?Ne.fromNumber(e):typeof e=="bigint"?Ne.fromBigInt(e):typeof e=="string"?Ne.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new Ne(e.low>>>0,e.high>>>0):fn}}const fn=new Ne(0,0);fn.toBigInt=function(){return 0n};fn.zzEncode=fn.zzDecode=function(){return this};fn.length=function(){return 1};const bd=4294967296n;function Qb(t){let e=0,n=0;for(let r=0;r<t.length;++r)n=t.charCodeAt(r),n<128?e+=1:n<2048?e+=2:(n&64512)===55296&&(t.charCodeAt(r+1)&64512)===56320?(++r,e+=4):e+=3;return e}function e0(t,e,n){if(n-e<1)return"";let o;const s=[];let i=0,a;for(;e<n;)a=t[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(a&31)<<6|t[e++]&63:a>239&&a<365?(a=((a&7)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(t[e++]&63)<<6|t[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function kh(t,e,n){const r=n;let o,s;for(let i=0;i<t.length;++i)o=t.charCodeAt(i),o<128?e[n++]=o:o<2048?(e[n++]=o>>6|192,e[n++]=o&63|128):(o&64512)===55296&&((s=t.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,e[n++]=o>>18|240,e[n++]=o>>12&63|128,e[n++]=o>>6&63|128,e[n++]=o&63|128):(e[n++]=o>>12|224,e[n++]=o>>6&63|128,e[n++]=o&63|128);return n-r}function nt(t,e){return RangeError(`index out of range: ${t.pos} + ${e??1} > ${t.len}`)}function Lo(t,e){return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0}class t0{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,nt(this,10);return e}int32(){return this.uint32()|0}sint32(){const e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw nt(this,4);return Lo(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw nt(this,4);return Lo(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw nt(this,4);const e=Vb(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw nt(this,4);const e=Yb(this.buf,this.pos);return this.pos+=8,e}bytes(){const e=this.uint32(),n=this.pos,r=this.pos+e;if(r>this.len)throw nt(this,e);return this.pos+=e,n===r?new Uint8Array(0):this.buf.subarray(n,r)}string(){const e=this.bytes();return e0(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw nt(this,e);this.pos+=e}else do if(this.pos>=this.len)throw nt(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){const e=new Ne(0,0);let n=0;if(this.len-this.pos>4){for(;n<4;++n)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<n*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;n=0}else{for(;n<3;++n){if(this.pos>=this.len)throw nt(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<n*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<n*7)>>>0,e}if(this.len-this.pos>4){for(;n<5;++n)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<n*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;n<5;++n){if(this.pos>=this.len)throw nt(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<n*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw nt(this,8);const e=Lo(this.buf,this.pos+=4),n=Lo(this.buf,this.pos+=4);return new Ne(e,n)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const e=Eh(this.buf,this.pos);return this.pos+=En(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function n0(t){return new t0(t instanceof Uint8Array?t:t.subarray())}function Qs(t,e,n){const r=n0(t);return e.decode(r,void 0,n)}function r0(t){let r,o=8192;return function(i){if(i<1||i>4096)return Tt(i);o+i>8192&&(r=Tt(8192),o=0);const a=r.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}class qr{fn;len;next;val;constructor(e,n,r){this.fn=e,this.len=n,this.next=void 0,this.val=r}}function Li(){}class o0{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}}const s0=r0();function i0(t){return globalThis.Buffer!=null?Tt(t):s0(t)}class Ha{len;head;tail;states;constructor(){this.len=0,this.head=new qr(Li,0,0),this.tail=this.head,this.states=null}_push(e,n,r){return this.tail=this.tail.next=new qr(e,n,r),this.len+=n,this}uint32(e){return this.len+=(this.tail=this.tail.next=new c0((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Bo,10,Ne.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){const n=Ne.fromBigInt(e);return this._push(Bo,n.length(),n)}uint64Number(e){return this._push(xh,En(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){const n=Ne.fromBigInt(e).zzEncode();return this._push(Bo,n.length(),n)}sint64Number(e){const n=Ne.fromNumber(e).zzEncode();return this._push(Bo,n.length(),n)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(Bi,1,e?1:0)}fixed32(e){return this._push(Rr,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){const n=Ne.fromBigInt(e);return this._push(Rr,4,n.lo)._push(Rr,4,n.hi)}fixed64Number(e){const n=Ne.fromNumber(e);return this._push(Rr,4,n.lo)._push(Rr,4,n.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(Gb,4,e)}double(e){return this._push(Xb,8,e)}bytes(e){const n=e.length>>>0;return n===0?this._push(Bi,1,0):this.uint32(n)._push(l0,n,e)}string(e){const n=Qb(e);return n!==0?this.uint32(n)._push(kh,n,e):this._push(Bi,1,0)}fork(){return this.states=new o0(this),this.head=this.tail=new qr(Li,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new qr(Li,0,0),this.len=0),this}ldelim(){const e=this.head,n=this.tail,r=this.len;return this.reset().uint32(r),r!==0&&(this.tail.next=e.next,this.tail=n,this.len+=r),this}finish(){let e=this.head.next;const n=i0(this.len);let r=0;for(;e!=null;)e.fn(e.val,n,r),r+=e.len,e=e.next;return n}}function Bi(t,e,n){e[n]=t&255}function a0(t,e,n){for(;t>127;)e[n++]=t&127|128,t>>>=7;e[n]=t}class c0 extends qr{next;constructor(e,n){super(a0,e,n),this.next=void 0}}function Bo(t,e,n){for(;t.hi!==0;)e[n++]=t.lo&127|128,t.lo=(t.lo>>>7|t.hi<<25)>>>0,t.hi>>>=7;for(;t.lo>127;)e[n++]=t.lo&127|128,t.lo=t.lo>>>7;e[n++]=t.lo}function Rr(t,e,n){e[n]=t&255,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24}function l0(t,e,n){e.set(t,n)}globalThis.Buffer!=null&&(Ha.prototype.bytes=function(t){const e=t.length>>>0;return this.uint32(e),e>0&&this._push(d0,e,t),this},Ha.prototype.string=function(t){const e=globalThis.Buffer.byteLength(t);return this.uint32(e),e>0&&this._push(u0,e,t),this});function d0(t,e,n){e.set(t,n)}function u0(t,e,n){t.length<40?kh(t,e,n):e.utf8Write!=null?e.utf8Write(t,n):e.set(ye(t),n)}function f0(){return new Ha}function ei(t,e){const n=f0();return e.encode(t,n,{lengthDelimited:!1}),n.finish()}var Ss;(function(t){t[t.VARINT=0]="VARINT",t[t.BIT64=1]="BIT64",t[t.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",t[t.START_GROUP=3]="START_GROUP",t[t.END_GROUP=4]="END_GROUP",t[t.BIT32=5]="BIT32"})(Ss||(Ss={}));function Ch(t,e,n,r){return{name:t,type:e,encode:n,decode:r}}function h0(t){function e(o){if(t[o.toString()]==null)throw new Error("Invalid enum value");return t[o]}const n=function(s,i){const a=e(s);i.int32(a)},r=function(s){const i=s.int32();return e(i)};return Ch("enum",Ss.VARINT,n,r)}function ti(t,e){return Ch("message",Ss.LENGTH_DELIMITED,t,e)}class vd extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"}var de;(function(t){t.RSA="RSA",t.Ed25519="Ed25519",t.secp256k1="secp256k1",t.ECDSA="ECDSA"})(de||(de={}));var qa;(function(t){t[t.RSA=0]="RSA",t[t.Ed25519=1]="Ed25519",t[t.secp256k1=2]="secp256k1",t[t.ECDSA=3]="ECDSA"})(qa||(qa={}));(function(t){t.codec=()=>h0(qa)})(de||(de={}));var wn;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.Type!=null&&(r.uint32(8),de.codec().encode(n.Type,r)),n.Data!=null&&(r.uint32(18),r.bytes(n.Data)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.Type=de.codec().decode(n);break}case 2:{s.Data=n.bytes();break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(wn||(wn={}));var xs;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.Type!=null&&(r.uint32(8),de.codec().encode(n.Type,r)),n.Data!=null&&(r.uint32(18),r.bytes(n.Data)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.Type=de.codec().decode(n);break}case 2:{s.Data=n.bytes();break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(xs||(xs={}));const Ih=Jf;class Rh{type="RSA";jwk;_raw;_multihash;constructor(e,n){this.jwk=e,this._multihash=n}get raw(){return this._raw==null&&(this._raw=Ph(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return le.createV1(114,this._multihash)}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){return R0(this.jwk,n,e,r)}}class p0{type="RSA";jwk;_raw;publicKey;constructor(e,n){this.jwk=e,this.publicKey=n}get raw(){return this._raw==null&&(this._raw=b0(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){return I0(this.jwk,e,n)}}const g0=8192,Th=18,m0=1062,w0=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function y0(t){return{n:ee(t[1],"base64url"),e:ee(t[2],"base64url"),d:ee(t[3],"base64url"),p:ee(t[4],"base64url"),q:ee(t[5],"base64url"),dp:ee(t[6],"base64url"),dq:ee(t[7],"base64url"),qi:ee(t[8],"base64url"),kty:"RSA"}}function b0(t){if(t.n==null||t.e==null||t.d==null||t.p==null||t.q==null||t.dp==null||t.dq==null||t.qi==null)throw new it("JWK was missing components");return It([qe(Uint8Array.from([0])),qe(ye(t.n,"base64url")),qe(ye(t.e,"base64url")),qe(ye(t.d,"base64url")),qe(ye(t.p,"base64url")),qe(ye(t.q,"base64url")),qe(ye(t.dp,"base64url")),qe(ye(t.dq,"base64url")),qe(ye(t.qi,"base64url"))]).subarray()}function v0(t){const e=wr(t[1],{offset:0});return{kty:"RSA",n:ee(e[0],"base64url"),e:ee(e[1],"base64url")}}function Ph(t){if(t.n==null||t.e==null)throw new it("JWK was missing components");return It([w0,Uc(It([qe(ye(t.n,"base64url")),qe(ye(t.e,"base64url"))]))]).subarray()}function S0(t){const e=wr(t);return x0(e)}function x0(t){const e=y0(t);return k0(e)}function E0(t,e){if(t.byteLength>=m0)throw new Tf("Key size is too large");const n=wr(t,{offset:0});return A0(n,t,e)}function A0(t,e,n){const r=v0(t);if(n==null){const o=Ih(wn.encode({Type:de.RSA,Data:e}));n=mo(Th,o)}return new Rh(r,n)}function k0(t){if(T0(t)>g0)throw new it("Key size is too large");const e=C0(t),n=Ih(wn.encode({Type:de.RSA,Data:Ph(e.publicKey)})),r=mo(Th,n);return new p0(e.privateKey,new Rh(e.publicKey,r))}function C0(t){if(t==null)throw new it("Missing key parameter");return{privateKey:t,publicKey:{kty:t.kty,n:t.n,e:t.e}}}async function I0(t,e,n){const r=await Pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);n?.signal?.throwIfAborted();const o=await Pt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,e instanceof Uint8Array?e:e.subarray());return n?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function R0(t,e,n,r){const o=await Pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);r?.signal?.throwIfAborted();const s=await Pt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,n instanceof Uint8Array?n:n.subarray());return r?.signal?.throwIfAborted(),s}function T0(t){if(t.kty!=="RSA")throw new it("invalid key type");if(t.n==null)throw new it("invalid key modulus");return ye(t.n,"base64url").length*8}class Nh extends Vf{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,Wf(e);const r=$c(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const o=this.blockLen,s=new Uint8Array(o);s.set(r.length>o?e.create().update(r).digest():r);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),cr(s)}update(e){return gs(this),this.iHash.update(e),this}digestInto(e){gs(this),Sn(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Lh=(t,e,n)=>new Nh(t,e).update(n).digest();Lh.create=(t,e)=>new Nh(t,e);const Sd=(t,e)=>(t+(t>=0?e:-e)/Bh)/e;function P0(t,e,n){const[[r,o],[s,i]]=e,a=Sd(i*t,n),c=Sd(-o*t,n);let l=t-a*r-c*s,d=-a*o-c*i;const u=l<At,f=d<At;u&&(l=-l),f&&(d=-d);const h=vo(Math.ceil(th(n)/2))+Zn;if(l<At||l>=h||d<At||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Ka(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function _i(t,e){const n={};for(let r of Object.keys(e))n[r]=t[r]===void 0?e[r]:t[r];return mn(n.lowS,"lowS"),mn(n.prehash,"prehash"),n.format!==void 0&&Ka(n.format),n}class N0 extends Error{constructor(e=""){super(e)}}const St={Err:N0,_tlv:{encode:(t,e)=>{const{Err:n}=St;if(t<0||t>256)throw new n("tlv.encode: wrong tag");if(e.length&1)throw new n("tlv.encode: unpadded data");const r=e.length/2,o=No(r);if(o.length/2&128)throw new n("tlv.encode: long form length too big");const s=r>127?No(o.length/2|128):"";return No(t)+s+o+e},decode(t,e){const{Err:n}=St;let r=0;if(t<0||t>256)throw new n("tlv.encode: wrong tag");if(e.length<2||e[r++]!==t)throw new n("tlv.decode: wrong tlv");const o=e[r++],s=!!(o&128);let i=0;if(!s)i=o;else{const c=o&127;if(!c)throw new n("tlv.decode(long): indefinite length not supported");if(c>4)throw new n("tlv.decode(long): byte length is too big");const l=e.subarray(r,r+c);if(l.length!==c)throw new n("tlv.decode: length bytes not complete");if(l[0]===0)throw new n("tlv.decode(long): zero leftmost byte");for(const d of l)i=i<<8|d;if(r+=c,i<128)throw new n("tlv.decode(long): not minimal encoding")}const a=e.subarray(r,r+i);if(a.length!==i)throw new n("tlv.decode: wrong value length");return{v:a,l:e.subarray(r+i)}}},_int:{encode(t){const{Err:e}=St;if(t<At)throw new e("integer: negative integers are not allowed");let n=No(t);if(Number.parseInt(n[0],16)&8&&(n="00"+n),n.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return n},decode(t){const{Err:e}=St;if(t[0]&128)throw new e("invalid signature integer: negative");if(t[0]===0&&!(t[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return Zs(t)}},toSig(t){const{Err:e,_int:n,_tlv:r}=St,o=he("signature",t),{v:s,l:i}=r.decode(48,o);if(i.length)throw new e("invalid signature: left bytes after parsing");const{v:a,l:c}=r.decode(2,s),{v:l,l:d}=r.decode(2,c);if(d.length)throw new e("invalid signature: left bytes after parsing");return{r:n.decode(a),s:n.decode(l)}},hexFromSig(t){const{_tlv:e,_int:n}=St,r=e.encode(2,n.encode(t.r)),o=e.encode(2,n.encode(t.s)),s=r+o;return e.encode(48,s)}},At=BigInt(0),Zn=BigInt(1),Bh=BigInt(2),_o=BigInt(3),L0=BigInt(4);function $n(t,e){const{BYTES:n}=t;let r;if(typeof e=="bigint")r=e;else{let o=he("private key",e);try{r=t.fromBytes(o)}catch{throw new Error(`invalid private key: expected ui8a of size ${n}, got ${typeof e}`)}}if(!t.isValidNot0(r))throw new Error("invalid private key: out of range [1..N-1]");return r}function B0(t,e={}){const n=wh("weierstrass",t,e),{Fp:r,Fn:o}=n;let s=n.CURVE;const{h:i,n:a}=s;So(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});const{endo:c}=e;if(c&&(!r.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');const l=Oh(r,o);function d(){if(!r.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(D,E,S){const{x:P,y:R}=E.toAffine(),O=r.toBytes(P);if(mn(S,"isCompressed"),S){d();const j=!r.isOdd(R);return ut(_h(j),O)}else return ut(Uint8Array.of(4),O,r.toBytes(R))}function f(D){ot(D,void 0,"Point");const{publicKey:E,publicKeyUncompressed:S}=l,P=D.length,R=D[0],O=D.subarray(1);if(P===E&&(R===2||R===3)){const j=r.fromBytes(O);if(!r.isValid(j))throw new Error("bad point: is not on curve, wrong x");const M=m(j);let B;try{B=r.sqrt(M)}catch(H){const q=H instanceof Error?": "+H.message:"";throw new Error("bad point: is not on curve, sqrt error"+q)}d();const F=r.isOdd(B);return(R&1)===1!==F&&(B=r.neg(B)),{x:j,y:B}}else if(P===S&&R===4){const j=r.BYTES,M=r.fromBytes(O.subarray(0,j)),B=r.fromBytes(O.subarray(j,j*2));if(!b(M,B))throw new Error("bad point: is not on curve");return{x:M,y:B}}else throw new Error(`bad point: got length ${P}, expected compressed=${E} or uncompressed=${S}`)}const h=e.toBytes||u,g=e.fromBytes||f;function m(D){const E=r.sqr(D),S=r.mul(E,D);return r.add(r.add(S,r.mul(D,s.a)),s.b)}function b(D,E){const S=r.sqr(E),P=m(D);return r.eql(S,P)}if(!b(s.Gx,s.Gy))throw new Error("bad curve params: generator point");const w=r.mul(r.pow(s.a,_o),L0),I=r.mul(r.sqr(s.b),BigInt(27));if(r.is0(r.add(w,I)))throw new Error("bad curve params: a or b");function y(D,E,S=!1){if(!r.isValid(E)||S&&r.is0(E))throw new Error(`bad point coordinate ${D}`);return E}function k(D){if(!(D instanceof v))throw new Error("ProjectivePoint expected")}function L(D){if(!c||!c.basises)throw new Error("no endo");return P0(D,c.basises,o.ORDER)}const C=ws((D,E)=>{const{X:S,Y:P,Z:R}=D;if(r.eql(R,r.ONE))return{x:S,y:P};const O=D.is0();E==null&&(E=O?r.ONE:r.inv(R));const j=r.mul(S,E),M=r.mul(P,E),B=r.mul(R,E);if(O)return{x:r.ZERO,y:r.ZERO};if(!r.eql(B,r.ONE))throw new Error("invZ was invalid");return{x:j,y:M}}),T=ws(D=>{if(D.is0()){if(e.allowInfinityPoint&&!r.is0(D.Y))return;throw new Error("bad point: ZERO")}const{x:E,y:S}=D.toAffine();if(!r.isValid(E)||!r.isValid(S))throw new Error("bad point: x or y not field elements");if(!b(E,S))throw new Error("bad point: equation left != right");if(!D.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function x(D,E,S,P,R){return S=new v(r.mul(S.X,D),S.Y,S.Z),E=ys(P,E),S=ys(R,S),E.add(S)}class v{constructor(E,S,P){this.X=y("x",E),this.Y=y("y",S,!0),this.Z=y("z",P),Object.freeze(this)}static CURVE(){return s}static fromAffine(E){const{x:S,y:P}=E||{};if(!E||!r.isValid(S)||!r.isValid(P))throw new Error("invalid affine point");if(E instanceof v)throw new Error("projective point not allowed");return r.is0(S)&&r.is0(P)?v.ZERO:new v(S,P,r.ONE)}static fromBytes(E){const S=v.fromAffine(g(ot(E,void 0,"point")));return S.assertValidity(),S}static fromHex(E){return v.fromBytes(he("pointHex",E))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(E=8,S=!0){return N.createCache(this,E),S||this.multiply(_o),this}assertValidity(){T(this)}hasEvenY(){const{y:E}=this.toAffine();if(!r.isOdd)throw new Error("Field doesn't support isOdd");return!r.isOdd(E)}equals(E){k(E);const{X:S,Y:P,Z:R}=this,{X:O,Y:j,Z:M}=E,B=r.eql(r.mul(S,M),r.mul(O,R)),F=r.eql(r.mul(P,M),r.mul(j,R));return B&&F}negate(){return new v(this.X,r.neg(this.Y),this.Z)}double(){const{a:E,b:S}=s,P=r.mul(S,_o),{X:R,Y:O,Z:j}=this;let M=r.ZERO,B=r.ZERO,F=r.ZERO,U=r.mul(R,R),H=r.mul(O,O),q=r.mul(j,j),K=r.mul(R,O);return K=r.add(K,K),F=r.mul(R,j),F=r.add(F,F),M=r.mul(E,F),B=r.mul(P,q),B=r.add(M,B),M=r.sub(H,B),B=r.add(H,B),B=r.mul(M,B),M=r.mul(K,M),F=r.mul(P,F),q=r.mul(E,q),K=r.sub(U,q),K=r.mul(E,K),K=r.add(K,F),F=r.add(U,U),U=r.add(F,U),U=r.add(U,q),U=r.mul(U,K),B=r.add(B,U),q=r.mul(O,j),q=r.add(q,q),U=r.mul(q,K),M=r.sub(M,U),F=r.mul(q,H),F=r.add(F,F),F=r.add(F,F),new v(M,B,F)}add(E){k(E);const{X:S,Y:P,Z:R}=this,{X:O,Y:j,Z:M}=E;let B=r.ZERO,F=r.ZERO,U=r.ZERO;const H=s.a,q=r.mul(s.b,_o);let K=r.mul(S,O),W=r.mul(P,j),G=r.mul(R,M),V=r.add(S,P),X=r.add(O,j);V=r.mul(V,X),X=r.add(K,W),V=r.sub(V,X),X=r.add(S,R);let Z=r.add(O,M);return X=r.mul(X,Z),Z=r.add(K,G),X=r.sub(X,Z),Z=r.add(P,R),B=r.add(j,M),Z=r.mul(Z,B),B=r.add(W,G),Z=r.sub(Z,B),U=r.mul(H,X),B=r.mul(q,G),U=r.add(B,U),B=r.sub(W,U),U=r.add(W,U),F=r.mul(B,U),W=r.add(K,K),W=r.add(W,K),G=r.mul(H,G),X=r.mul(q,X),W=r.add(W,G),G=r.sub(K,G),G=r.mul(H,G),X=r.add(X,G),K=r.mul(W,X),F=r.add(F,K),K=r.mul(Z,X),B=r.mul(V,B),B=r.sub(B,K),K=r.mul(V,W),U=r.mul(Z,U),U=r.add(U,K),new v(B,F,U)}subtract(E){return this.add(E.negate())}is0(){return this.equals(v.ZERO)}multiply(E){const{endo:S}=e;if(!o.isValidNot0(E))throw new Error("invalid scalar: out of range");let P,R;const O=j=>N.cached(this,j,M=>cn(v,M));if(S){const{k1neg:j,k1:M,k2neg:B,k2:F}=L(E),{p:U,f:H}=O(M),{p:q,f:K}=O(F);R=H.add(K),P=x(S.beta,U,q,j,B)}else{const{p:j,f:M}=O(E);P=j,R=M}return cn(v,[P,R])[0]}multiplyUnsafe(E){const{endo:S}=e,P=this;if(!o.isValid(E))throw new Error("invalid scalar: out of range");if(E===At||P.is0())return v.ZERO;if(E===Zn)return P;if(N.hasCache(this))return this.multiply(E);if(S){const{k1neg:R,k1:O,k2neg:j,k2:M}=L(E),{p1:B,p2:F}=pb(v,P,O,M);return x(S.beta,B,F,R,j)}else return N.unsafe(P,E)}multiplyAndAddUnsafe(E,S,P){const R=this.multiplyUnsafe(S).add(E.multiplyUnsafe(P));return R.is0()?void 0:R}toAffine(E){return C(this,E)}isTorsionFree(){const{isTorsionFree:E}=e;return i===Zn?!0:E?E(v,this):N.unsafe(this,a).is0()}clearCofactor(){const{clearCofactor:E}=e;return i===Zn?this:E?E(v,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(E=!0){return mn(E,"isCompressed"),this.assertValidity(),h(v,this,E)}toHex(E=!0){return un(this.toBytes(E))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(E=!0){return this.toBytes(E)}_setWindowSize(E){this.precompute(E)}static normalizeZ(E){return cn(v,E)}static msm(E,S){return mh(v,o,E,S)}static fromPrivateKey(E){return v.BASE.multiply($n(o,E))}}v.BASE=new v(s.Gx,s.Gy,r.ONE),v.ZERO=new v(r.ZERO,r.ONE,r.ZERO),v.Fp=r,v.Fn=o;const A=o.BITS,N=new gh(v,e.endo?Math.ceil(A/2):A);return v.BASE.precompute(8),v}function _h(t){return Uint8Array.of(t?2:3)}function Oh(t,e){return{secretKey:e.BYTES,publicKey:1+t.BYTES,publicKeyUncompressed:1+2*t.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function _0(t,e={}){const{Fn:n}=t,r=e.randomBytes||Hc,o=Object.assign(Oh(t.Fp,n),{seed:fh(n.ORDER)});function s(h){try{return!!$n(n,h)}catch{return!1}}function i(h,g){const{publicKey:m,publicKeyUncompressed:b}=o;try{const w=h.length;return g===!0&&w!==m||g===!1&&w!==b?!1:!!t.fromBytes(h)}catch{return!1}}function a(h=r(o.seed)){return ub(ot(h,o.seed,"seed"),n.ORDER)}function c(h,g=!0){return t.BASE.multiply($n(n,h)).toBytes(g)}function l(h){const g=a(h);return{secretKey:g,publicKey:c(g)}}function d(h){if(typeof h=="bigint")return!1;if(h instanceof t)return!0;const{secretKey:g,publicKey:m,publicKeyUncompressed:b}=o;if(n.allowedLengths||g===m)return;const w=he("key",h).length;return w===m||w===b}function u(h,g,m=!0){if(d(h)===!0)throw new Error("first arg must be private key");if(d(g)===!1)throw new Error("second arg must be public key");const b=$n(n,h);return t.fromHex(g).multiply(b).toBytes(m)}return Object.freeze({getPublicKey:c,getSharedSecret:u,keygen:l,Point:t,utils:{isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a,isValidPrivateKey:s,randomPrivateKey:a,normPrivateKeyToScalar:h=>$n(n,h),precompute(h=8,g=t.BASE){return g.precompute(h,!1)}},lengths:o})}function O0(t,e,n={}){Wf(e),So(n,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});const r=n.randomBytes||Hc,o=n.hmac||((S,...P)=>Lh(e,S,ut(...P))),{Fp:s,Fn:i}=t,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=_0(t,n),g={prehash:!1,lowS:typeof n.lowS=="boolean"?n.lowS:!1,format:void 0,extraEntropy:!1},m="compact";function b(S){const P=a>>Zn;return S>P}function w(S,P){if(!i.isValidNot0(P))throw new Error(`invalid signature ${S}: out of range 1..Point.Fn.ORDER`);return P}function I(S,P){Ka(P);const R=h.signature,O=P==="compact"?R:P==="recovered"?R+1:void 0;return ot(S,O,`${P} signature`)}class y{constructor(P,R,O){this.r=w("r",P),this.s=w("s",R),O!=null&&(this.recovery=O),Object.freeze(this)}static fromBytes(P,R=m){I(P,R);let O;if(R==="der"){const{r:F,s:U}=St.toSig(ot(P));return new y(F,U)}R==="recovered"&&(O=P[0],R="compact",P=P.subarray(1));const j=i.BYTES,M=P.subarray(0,j),B=P.subarray(j,j*2);return new y(i.fromBytes(M),i.fromBytes(B),O)}static fromHex(P,R){return this.fromBytes(ms(P),R)}addRecoveryBit(P){return new y(this.r,this.s,P)}recoverPublicKey(P){const R=s.ORDER,{r:O,s:j,recovery:M}=this;if(M==null||![0,1,2,3].includes(M))throw new Error("recovery id invalid");if(a*Bh<R&&M>1)throw new Error("recovery id is ambiguous for h>1 curve");const F=M===2||M===3?O+a:O;if(!s.isValid(F))throw new Error("recovery id 2 or 3 invalid");const U=s.toBytes(F),H=t.fromBytes(ut(_h((M&1)===0),U)),q=i.inv(F),K=L(he("msgHash",P)),W=i.create(-K*q),G=i.create(j*q),V=t.BASE.multiplyUnsafe(W).add(H.multiplyUnsafe(G));if(V.is0())throw new Error("point at infinify");return V.assertValidity(),V}hasHighS(){return b(this.s)}toBytes(P=m){if(Ka(P),P==="der")return ms(St.hexFromSig(this));const R=i.toBytes(this.r),O=i.toBytes(this.s);if(P==="recovered"){if(this.recovery==null)throw new Error("recovery bit must be present");return ut(Uint8Array.of(this.recovery),R,O)}return ut(R,O)}toHex(P){return un(this.toBytes(P))}assertValidity(){}static fromCompact(P){return y.fromBytes(he("sig",P),"compact")}static fromDER(P){return y.fromBytes(he("sig",P),"der")}normalizeS(){return this.hasHighS()?new y(this.r,i.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return un(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return un(this.toBytes("compact"))}}const k=n.bits2int||function(P){if(P.length>8192)throw new Error("input is too large");const R=Zs(P),O=P.length*8-c;return O>0?R>>BigInt(O):R},L=n.bits2int_modN||function(P){return i.create(k(P))},C=vo(c);function T(S){return ja("num < 2^"+c,S,At,C),i.toBytes(S)}function x(S,P){return ot(S,void 0,"message"),P?ot(e(S),void 0,"prehashed message"):S}function v(S,P,R){if(["recovered","canonical"].some(W=>W in R))throw new Error("sign() legacy options not supported");const{lowS:O,prehash:j,extraEntropy:M}=_i(R,g);S=x(S,j);const B=L(S),F=$n(i,P),U=[T(F),T(B)];if(M!=null&&M!==!1){const W=M===!0?r(h.secretKey):M;U.push(he("extraEntropy",W))}const H=ut(...U),q=B;function K(W){const G=k(W);if(!i.isValidNot0(G))return;const V=i.inv(G),X=t.BASE.multiply(G).toAffine(),Z=i.create(X.x);if(Z===At)return;const ce=i.create(V*i.create(q+Z*F));if(ce===At)return;let Ie=(X.x===Z?0:2)|Number(X.y&Zn),Fe=ce;return O&&b(ce)&&(Fe=i.neg(ce),Ie^=1),new y(Z,Fe,Ie)}return{seed:H,k2sig:K}}function A(S,P,R={}){S=he("message",S);const{seed:O,k2sig:j}=v(S,P,R);return tb(e.outputLen,i.BYTES,o)(O,j)}function N(S){let P;const R=typeof S=="string"||bo(S),O=!R&&S!==null&&typeof S=="object"&&typeof S.r=="bigint"&&typeof S.s=="bigint";if(!R&&!O)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(O)P=new y(S.r,S.s);else if(R){try{P=y.fromBytes(he("sig",S),"der")}catch(j){if(!(j instanceof St.Err))throw j}if(!P)try{P=y.fromBytes(he("sig",S),"compact")}catch{return!1}}return P||!1}function D(S,P,R,O={}){const{lowS:j,prehash:M,format:B}=_i(O,g);if(R=he("publicKey",R),P=x(he("message",P),M),"strict"in O)throw new Error("options.strict was renamed to lowS");const F=B===void 0?N(S):y.fromBytes(he("sig",S),B);if(F===!1)return!1;try{const U=t.fromBytes(R);if(j&&F.hasHighS())return!1;const{r:H,s:q}=F,K=L(P),W=i.inv(q),G=i.create(K*W),V=i.create(H*W),X=t.BASE.multiplyUnsafe(G).add(U.multiplyUnsafe(V));return X.is0()?!1:i.create(X.x)===H}catch{return!1}}function E(S,P,R={}){const{prehash:O}=_i(R,g);return P=x(P,O),y.fromBytes(S,"recovered").recoverPublicKey(P).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:t,sign:A,verify:D,recoverPublicKey:E,Signature:y,hash:e})}function D0(t){const e={a:t.a,b:t.b,p:t.Fp.ORDER,n:t.n,h:t.h,Gx:t.Gx,Gy:t.Gy},n=t.Fp;let r=t.allowedPrivateKeyLengths?Array.from(new Set(t.allowedPrivateKeyLengths.map(i=>Math.ceil(i/2)))):void 0;const o=xn(e.n,{BITS:t.nBitLength,allowedLengths:r,modFromBytes:t.wrapPrivateKey}),s={Fp:n,Fn:o,allowInfinityPoint:t.allowInfinityPoint,endo:t.endo,isTorsionFree:t.isTorsionFree,clearCofactor:t.clearCofactor,fromBytes:t.fromBytes,toBytes:t.toBytes};return{CURVE:e,curveOpts:s}}function F0(t){const{CURVE:e,curveOpts:n}=D0(t),r={hmac:t.hmac,randomBytes:t.randomBytes,lowS:t.lowS,bits2int:t.bits2int,bits2int_modN:t.bits2int_modN};return{CURVE:e,curveOpts:n,hash:t.hash,ecdsaOpts:r}}function M0(t,e){const n=e.Point;return Object.assign({},e,{ProjectivePoint:n,CURVE:Object.assign({},t,dh(n.Fn.ORDER,n.Fn.BITS))})}function j0(t){const{CURVE:e,curveOpts:n,hash:r,ecdsaOpts:o}=F0(t),s=B0(e,n),i=O0(s,r,o);return M0(t,i)}function U0(t,e){const n=r=>j0({...t,hash:r});return{...n(e),create:n}}const Qc={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},$0={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},xd=BigInt(2);function H0(t){const e=Qc.p,n=BigInt(3),r=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=t*t*t%e,d=l*l*t%e,u=fe(d,n,e)*d%e,f=fe(u,n,e)*d%e,h=fe(f,xd,e)*l%e,g=fe(h,o,e)*h%e,m=fe(g,s,e)*g%e,b=fe(m,a,e)*m%e,w=fe(b,c,e)*b%e,I=fe(w,a,e)*m%e,y=fe(I,n,e)*d%e,k=fe(y,i,e)*g%e,L=fe(k,r,e)*l%e,C=fe(L,xd,e);if(!za.eql(za.sqr(C),t))throw new Error("Cannot find square root");return C}const za=xn(Qc.p,{sqrt:H0}),Vt=U0({...Qc,Fp:za,lowS:!0,endo:$0},Jf);function q0(t,e,n){const r=jc.digest(e instanceof Uint8Array?e:e.subarray());if(Js(r))return r.then(({digest:o})=>(n?.signal?.throwIfAborted(),Vt.sign(o,t).toDERRawBytes())).catch(o=>{throw o.name==="AbortError"?o:new wd(String(o))});try{return Vt.sign(r.digest,t).toDERRawBytes()}catch(o){throw new wd(String(o))}}function K0(t,e,n,r){const o=jc.digest(n instanceof Uint8Array?n:n.subarray());if(Js(o))return o.then(({digest:s})=>(r?.signal?.throwIfAborted(),Vt.verify(e,s,t))).catch(s=>{throw s.name==="AbortError"?s:new yd(String(s))});try{return r?.signal?.throwIfAborted(),Vt.verify(e,o.digest,t)}catch(s){throw new yd(String(s))}}class Dh{type="secp256k1";raw;_key;constructor(e){this._key=X0(e),this.raw=G0(this._key)}toMultihash(){return wo.digest(ni(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}verify(e,n,r){return K0(this._key,n,e,r)}}class z0{type="secp256k1";raw;publicKey;constructor(e,n){this.raw=V0(e),this.publicKey=new Dh(n??Y0(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:at(this.raw,e.raw)}sign(e,n){return q0(this.raw,e,n)}}function W0(t){return new z0(t)}function Fh(t){return new Dh(t)}function G0(t){return Vt.ProjectivePoint.fromHex(t).toRawBytes(!0)}function V0(t){try{return Vt.getPublicKey(t,!0),t}catch(e){throw new Pf(String(e))}}function X0(t){try{return Vt.ProjectivePoint.fromHex(t),t}catch(e){throw new Tf(String(e))}}function Y0(t){try{return Vt.getPublicKey(t,!0)}catch(e){throw new Pf(String(e))}}async function Z0(t,e){return Ub()}function Wa(t,e){const{Type:n,Data:r}=wn.decode(t),o=r??new Uint8Array;switch(n){case de.RSA:return E0(o,e);case de.Ed25519:return Sh(o);case de.secp256k1:return Fh(o);case de.ECDSA:return Kf(o);default:throw new Gs}}function J0(t){const{Type:e,Data:n}=wn.decode(t.digest),r=n??new Uint8Array;switch(e){case de.Ed25519:return Sh(r);case de.secp256k1:return Fh(r);case de.ECDSA:return Kf(r);default:throw new Gs}}function ni(t){return wn.encode({Type:de[t.type],Data:t.raw})}function Q0(t){const e=xs.decode(t),n=e.Data??new Uint8Array;switch(e.Type){case de.RSA:return S0(n);case de.Ed25519:return jb(n);case de.secp256k1:return W0(n);case de.ECDSA:return Ty(n);default:throw new Gs}}function ev(t){return xs.encode({Type:de[t.type],Data:t.raw})}const Mh=Symbol.for("nodejs.util.inspect.custom"),tv=114;class el{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Nf]=!0;toString(){return this.string==null&&(this.string=Be.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return le.createV1(tv,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return at(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return at(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Mh](){return`PeerId(${this.toString()})`}}class jh extends el{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}}class Uh extends el{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}}class $h extends el{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}}const nv=2336;class Hh{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=wo.digest(ye(this.url))}[Mh](){return`PeerId(${this.url})`}[Nf]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return le.createV1(nv,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=ee(e)),e.toString()===this.toString())}}const rv=114,Ed=2336;function ov(t,e){let n;if(t.charAt(0)==="1"||t.charAt(0)==="Q")n=_f(Be.decode(`z${t}`));else{if(t.startsWith("k51qzi5uqu5")||t.startsWith("kzwfwjn5ji4")||t.startsWith("k2k4r8")||t.startsWith("bafz"))return sv(le.parse(t));throw new it('Please pass a multibase decoder for strings that do not start with "1" or "Q"')}return qh(n)}function dr(t){if(t.type==="Ed25519")return new Uh({multihash:t.toCID().multihash,publicKey:t});if(t.type==="secp256k1")return new $h({multihash:t.toCID().multihash,publicKey:t});if(t.type==="RSA")return new jh({multihash:t.toCID().multihash,publicKey:t});throw new Gs}function qh(t){if(av(t))return new jh({multihash:t});if(iv(t))try{const e=J0(t);if(e.type==="Ed25519")return new Uh({multihash:t,publicKey:e});if(e.type==="secp256k1")return new $h({multihash:t,publicKey:e})}catch{const n=ee(t.digest);return new Hh(new URL(n))}throw new $m("Supplied PeerID Multihash is invalid")}function sv(t){if(t?.multihash==null||t.version==null||t.version===1&&t.code!==rv&&t.code!==Ed)throw new Um("Supplied PeerID CID is invalid");if(t.code===Ed){const e=ee(t.multihash.digest);return new Hh(new URL(e))}return qh(t.multihash)}function iv(t){return t.code===wo.code}function av(t){return t.code===jc.code}class Kh extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}}class cv extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}}class Tr extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}}class Ad extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}}class lv extends Event{data;constructor(e,n){super("message",n),this.data=e}}class tl extends Event{error;local;constructor(e,n,r){super("close",r),this.error=n,this.local=e}}class dv extends tl{constructor(e,n){super(!0,e,n)}}class uv extends tl{constructor(e,n){super(!1,e,n)}}const fv=t=>t/2**32|0,hv=t=>t>>>0;function pv(t,e,n,r){const o=fv(n),s=hv(n);t.setUint32(e,r?s:o,r),t.setUint32(e+4,r?o:s,r)}function Ga(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}const Va=t=>t?`"${t}" `:"";function Nt(t,e=""){if(typeof t!="number")throw new TypeError(Va(e)+"expected number, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError(Va(e)+"expected integer >= 0, got "+t);return t}function Lt(t,e,n=""){if(Ga(t)&&(e===void 0||t.length===e))return t;e!==void 0&&Nt(e,"length");const r=Ga(t),o=e!==void 0?` of length ${e}`:"",s=r?`length=${t.length}`:`type=${typeof t}`,i=Va(n)+"expected Uint8Array"+o+", got "+s;throw r?new RangeError(i):new TypeError(i)}function nl(t){if(typeof t!="function"||typeof t.create!="function")throw new TypeError("expected hash wrapped by utils.createHasher");if(Nt(t.outputLen),Nt(t.blockLen),t.outputLen<1||t.blockLen<1)throw new Error("hash blockLen / outputLen must be >= 1")}const gv=(t,e)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError((e==="object"?"":`"${e}" `)+"expected object, got type="+typeof t)},kd=(t,e)=>{gv(t,e);const n=Object.getPrototypeOf(t);if(n!==Object.prototype&&n!==null)throw new TypeError(`"${e}" expected plain object`);if(Object.hasOwn(t,"__proto__"))throw new TypeError(`"${e}.__proto__" is not allowed`)};function Es(t,e=!0){if(t.destroyed)throw new Error("hash was destroyed");if(e&&t.finished)throw new Error("digest() was already called")}function zh(t,e){Lt(t,void 0,"output");const n=e.outputLen;if(!(t.length>=n))throw new RangeError('"output" expected length >= '+n)}function VI(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function hn(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Oi(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function lt(t,e){return t<<32-e|t>>>e}function XI(t,e){return t<<e|t>>>32-e>>>0}const mv=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function wv(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function yv(t){for(let e=0;e<t.length;e++)t[e]=wv(t[e]);return t}const YI=mv?t=>t:yv,Wh=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",bv=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function rl(t){if(Lt(t),Wh)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=bv[t[n]];return e}function Cd(t){return t>=48&&t<=57?t-48:t>=65&&t<=70?t-55:t>=97&&t<=102?t-87:void 0}function Gh(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(Wh)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=Cd(t.charCodeAt(s)),a=Cd(t.charCodeAt(s+1));if(i===void 0||a===void 0){const c=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function vv(t){const e=globalThis;if(typeof e.scheduler?.yield=="function"){const n=e.scheduler.yield();return t&&n.catch(t),n}return new Promise(n=>e.setTimeout(n,0))}async function ZI(t,e,n,r){if(Nt(t,"iters"),Nt(e,"tick"),typeof n!="function")throw new TypeError("callback must be a function");let o=Date.now();for(let s=0;s<t;s++){n(s);const i=Date.now()-o;i>=0&&i<e||(await vv(r),o=Date.now())}}function Sv(t){if(typeof t!="string")throw new TypeError("string expected");const e=new TextEncoder().encode(t);try{return new Uint8Array(e)}finally{hn(e)}}function JI(t,e=""){return typeof t=="string"?Sv(t):Lt(t,void 0,e)}function xv(t,e,n="opts"){return kd(t,"defaults"),e!==void 0&&kd(e,n),Object.assign(Object.create(null),t,e)}function Ev(t,e={}){if(typeof t!="function")throw new TypeError('"hashCons" expected function, got type='+typeof t);e=xv({},e,"info");const n=(o,s)=>t(s).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Av(t=32){Nt(t,"bytesLength");const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}const kv=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Cv(t,e,n){return t&e^~t&n}function Iv(t,e,n){return t&e^t&n^e&n}class Rv{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Oi(this.buffer)}update(e){Es(this),Lt(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;let i=!1;for(let a=0;a<s;){const c=Math.min(o-this.pos,s-a);if(c===o){const l=Oi(e);for(;o<=s-a;a+=o)this.process(l,a);i=!0;continue}r.set(a===0&&c===s?e:e.subarray(a,a+c),this.pos),this.pos+=c,a+=c,this.pos===o&&(this.process(n,0),this.pos=0,i=!0)}return this.length+=e.length,i&&this.roundClean(),this}digestInto(e){Es(this),zh(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,n.fill(0,i),this.padOffset>o-i&&(this.process(r,0),n.fill(0)),pv(r,o-8,this.length*8,s),this.process(r,0),this.roundClean();const a=e===n?r:Oi(e),c=this.outputLen,l=c/4,d=this.get();if(c%4||l>d.length)throw new Error("invalid outputLen");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneIntoMeta(e){const{buffer:n,length:r,finished:o,destroyed:s,pos:i}=this;return e.destroyed=s,e.finished=o,e.length=r,e.pos=i,i&&e.buffer.set(n),e}clone(){return this._cloneInto()}}const Tv=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Pv=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Mt=new Uint32Array(64);class Nv extends Rv{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(e,n){super(64,e,8,!1),this.A=n[0]|0,this.B=n[1]|0,this.C=n[2]|0,this.D=n[3]|0,this.E=n[4]|0,this.F=n[5]|0,this.G=n[6]|0,this.H=n[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[e,n,r,o,s,i,a,c]}set(e,n,r,o,s,i,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}_cloneInto(e){return(e||=new this.constructor).set(...this.get()),this._cloneIntoMeta(e)}process(e,n){for(let u=0;u<16;u++,n+=4)Mt[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const f=Mt[u-15],h=Mt[u-2],g=lt(f,7)^lt(f,18)^f>>>3,m=lt(h,17)^lt(h,19)^h>>>10;Mt[u]=m+Mt[u-7]+g+Mt[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){const f=lt(a,6)^lt(a,11)^lt(a,25),h=d+f+Cv(a,c,l)+Pv[u]+Mt[u]|0,m=(lt(r,2)^lt(r,13)^lt(r,22))+Iv(r,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=r,r=h+m|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,c,l,d)}roundClean(){hn(Mt)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),hn(this.buffer)}}class Lv extends Nv{constructor(){super(32,Tv)}}const Di=Ev(()=>new Lv,kv(1));function Vh(t,e,n=()=>{}){if(!Array.isArray(t))throw new TypeError(`"${e}" expected array, got type=${typeof t}`);for(let r=0;r<t.length;r++)n(t[r],`${e}[${r}]`);return t}const Jn=(t,e,n)=>Lt(t,e,n),Xh=Nt;function Qn(t,e="object"){if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(e==="object"?"expected valid options object":`"${e}" expected object, got type=${typeof t}`);return t}function Yr(t,e){if(typeof t!="function")throw new TypeError(`"${e}" is invalid: expected function, got ${typeof t}`);return t}const Bv=rl,_v=t=>Gh(t),Yh=Ga,Zh=t=>Av(t),As=BigInt(0),Id=BigInt(1),Ov=t=>t?`"${t}" `:"";function ri(t,e=""){if(typeof t!="boolean")throw new TypeError(Ov(e)+"expected boolean, got type="+typeof t);return t}function Dv(t){if(typeof t=="bigint"){if(!pn(t))throw new RangeError("positive bigint expected, got "+t)}else Xh(t);return t}function Xa(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){const n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function Jh(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?As:BigInt("0x"+t)}function Qh(t){return Jh(rl(t))}function ks(t){return Jh(rl(so(Lt(t)).reverse()))}function ep(t,e){if(Nt(e),e===0)throw new Error("zero output length is invalid");t=Dv(t);const n=e*2,r=t.toString(16);if(r.length>n)throw new RangeError("number is too large");return Gh(r.padStart(n,"0"))}function tp(t,e){return ep(t,e).reverse()}function so(t){return Uint8Array.from(Jn(t))}function pn(t){return typeof t=="bigint"&&As<=t}function np(t,e,n){return pn(t)&&pn(e)&&pn(n)&&e<=t&&t<n}function Zr(t,e,n,r){if(!np(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Fv(t){if(t<As)throw new Error("expected non-negative bigint, got "+t);return t===As?0:t.toString(2).length}const Mv=t=>(Xa(t,"n"),(Id<<BigInt(t))-Id);function Cs(t,e={},n={},r="object"){Qn(t,r),Qn(e,"fields"),Qn(n,"optFields");function o(i,a,c){const l=r==="object"?`param "${String(i)}"`:`"${r}.${String(i)}"`,d=t[i];if(!Object.hasOwn(t,i)&&(c?d!==void 0:a!=="function"))throw new TypeError(`${l} is invalid: expected own property`);if(c&&d===void 0)return;const u=typeof d;if(u!==a||d===null)throw new TypeError(`${l} is invalid: expected ${a}, got ${u}`)}const s=(i,a)=>Object.entries(i).forEach(([c,l])=>o(c,l,a));s(e,!1),s(n,!0)}const xe=BigInt(0),ae=BigInt(1),ln=BigInt(2),rp=BigInt(3),ol=BigInt(4),op=BigInt(5),jv=BigInt(7),sp=BigInt(8),Uv=BigInt(9),$v=BigInt(15),ip=BigInt(16),Hv=BigInt("0x10000000000000000");function ie(t,e){if(e<=xe)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=xe?n:e+n}function qv(t,e,n){if(n<=ae)throw new Error("pow: expected modulus > 1, got "+n);if(typeof e!="bigint")throw new TypeError("invalid exponent: expected bigint, got "+typeof e);if(e<xe)throw new Error("invalid exponent, negatives unsupported");if(e===xe)return ae;if(e===ae)return t;let r=t%n;if(r<xe&&(r+=n),e<Hv){let a=ae;for(;e>xe;)e&ae&&(a=a*r%n),r=r*r%n,e>>=ae;return a}const o=[];for(;e>xe;)o.push(Number(e&$v)),e>>=ol;const s=new Array(16);s[0]=ae,s[1]=r;for(let a=2;a<16;a++)s[a]=s[a-1]*r%n;let i=s[o[o.length-1]];for(let a=o.length-2;a>=0;a--){i=i*i%n,i=i*i%n,i=i*i%n,i=i*i%n;const c=o[a];c!==0&&(i=i*s[c]%n)}return i}function rt(t,e,n){if(n<=ae)throw new Error("pow2: expected modulus > 1, got "+n);if(e<xe)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >xe;)r*=r,r%=n;return r}function Rd(t,e){if(t===xe)throw new Error("invert: expected non-zero number");if(e<=ae)throw new Error("invert: expected modulus > 1, got "+e);let n=ie(t,e),r=e,o=xe,s=ae;for(;n!==xe;){const a=r/n,c=r-n*a,l=o-s*a;r=n,n=c,o=s,s=l}if(r!==ae)throw new Error("invert: does not exist");return ie(o,e)}function sl(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function il(t,e){if((t&ae)===xe)throw new Error(e+": expected odd modulus, got "+t)}function ap(t,e){const n=t,r=(n.ORDER+ae)/ol,o=n.pow(e,r);return sl(n,o,e),o}function Kv(t,e){const n=t,r=(n.ORDER-op)/sp,o=n.mul(e,ln),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,ln),s),c=n.mul(i,n.sub(a,n.ONE));return sl(n,c,e),c}function zv(t){const e=al(t),n=cp(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+jv)/ip;return((a,c)=>{const l=a;let d=l.pow(c,i),u=l.mul(d,r);const f=l.mul(d,o),h=l.mul(d,s),g=l.eql(l.sqr(u),c),m=l.eql(l.sqr(f),c);d=l.cmov(d,u,g),u=l.cmov(h,f,m);const b=l.eql(l.sqr(u),c),w=l.cmov(d,u,b);return sl(l,w,c),w})}function cp(t){if(t<rp)throw new Error("sqrt is not defined for small field");il(t,"tonelliShanks");let e=t-ae,n=0;for(;e%ln===xe;)e/=ln,n++;let r=ln;const o=al(t);for(;Is(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ap;let s=o.pow(r,e);const i=(e+ae)/ln;return function(c,l){const d=c;if(d.is0(l))return l;if(Is(d,l)!==1)throw new Error("Cannot find square root");let u=n,f=d.mul(d.ONE,s),h=d.pow(l,e),g=d.pow(l,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))throw new Error("Cannot find square root: probably non-prime P");let m=1,b=d.sqr(h);for(;!d.eql(b,d.ONE);)if(m++,b=d.sqr(b),m===u)throw new Error("Cannot find square root");const w=ae<<BigInt(u-m-1),I=d.pow(f,w);u=m,f=d.sqr(I),h=d.mul(h,f),g=d.mul(g,I)}return g}}function Wv(t){return il(t,"Fp.sqrt"),t%ol===rp?ap:t%sp===op?Kv:t%ip===Uv?zv(t):cp(t)}const Gv=(t,e)=>(ie(t,e)&ae)===ae,Vv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function io(t){if(Qn(t,"field"),typeof t.ORDER!="bigint")throw new TypeError('param "ORDER" is invalid: expected bigint, got '+typeof t.ORDER);Xa(t.BYTES,"BYTES"),Xa(t.BITS,"BITS");for(const e of Vv)Yr(t[e],"field."+e);if(t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=ae)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function lp(t,e,n=!1){io(t),Vh(e,"nums"),ri(n,"passZero");const r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),s=e.reduce((a,c,l)=>r.is0(c)?a:(o[l]=a,r.mul(a,c)),r.ONE),i=r.inv(s);return e.reduceRight((a,c,l)=>r.is0(c)?a:(o[l]=r.mul(a,o[l]),r.mul(a,c)),i),o}function Is(t,e){io(t);const n=t;il(n.ORDER,"FpLegendre");const r=(n.ORDER-ae)/ln,o=n.pow(e,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function Xv(t,e){if(e!==void 0&&Xh(e),t<=xe)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);const n=Fv(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected nBitLength (${e}) >= bitLen(n) (${n})`);const r=e!==void 0?e:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const Td=new WeakMap;class Pd{ORDER;BITS;BYTES;isLE;ZERO=xe;ONE=ae;_lengths;_mod;constructor(e,n={}){if(e<=ae)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));const{nBitLength:o,nByteLength:s}=Xv(e,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(e){return ie(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return xe<=e&&e<this.ORDER}is0(e){return e===xe}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&ae)===ae}neg(e){return ie(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return ie(e*e,this.ORDER)}add(e,n){return ie(e+n,this.ORDER)}sub(e,n){return ie(e-n,this.ORDER)}mul(e,n){return ie(e*n,this.ORDER)}pow(e,n){return qv(e,n,this.ORDER)}div(e,n){return ie(e*Rd(n,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return Rd(e,this.ORDER)}sqrt(e){let n=Td.get(this);return n||Td.set(this,n=Wv(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?tp(e,this.BYTES):ep(e,this.BYTES)}fromBytes(e,n=!1){Jn(e);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);const l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?ks(e):Qh(e);if(a&&(c=ie(c,i)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return lp(this,e,!0)}cmov(e,n,r){return ri(r,"condition"),r?n:e}}function al(t,e={}){return Object.freeze(Pd.prototype),new Pd(t,e)}const cl=BigInt(0),ao=BigInt(1),Yv=BigInt(4),Fi=16,Nd=128,Zv=5,Ld=2**31;function ll(t){const e=t;if(typeof e!="function")throw new TypeError('"Point" expected constructor, got type='+typeof t);Yr(e.fromAffine,"Point.fromAffine"),Yr(e.fromBytes,"Point.fromBytes"),Yr(e.fromHex,"Point.fromHex"),Qn(e.BASE,"Point.BASE"),Qn(e.ZERO,"Point.ZERO"),io(e.Fp),io(e.Fn)}function Jv(t,e){ll(t),dp(e,t);const n=lp(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Qv(t,e,n=1){if(!Number.isSafeInteger(t)||t<n||t>e)throw new Error("invalid window size, expected ["+n+".."+e+"], got W="+t)}function eS(t,e){const n=t*(4*e+128);if(n>Ld)throw new Error("invalid window size: table would need ~"+Math.ceil(n/2**20)+" MiB, max "+Ld/2**20+" MiB")}function tS(t,e){if(t!==void 0){Yr(t,"randomBytes");try{const n=t(e);if(!Yh(n)||n.length!==e)return}catch{return}return t}}function dp(t,e){Vh(t,"points"),t.forEach((n,r)=>{if(!(n instanceof e))throw new Error("invalid point at index "+r)})}function nS(t,e,n){if(!Array.isArray(t))throw new Error("array of scalars expected");t.forEach((r,o)=>{if(!(n===void 0?e.isValid(r):pn(r)&&r<n))throw new Error("invalid scalar at index "+o)})}const up=new WeakMap;function Mi(t){return up.get(t)||1}function rS(t,e){const n=t.double(),r=[t];for(let o=1;o<e;o++)r.push(r[o-1].add(n));return r}function oS(t,e){const n=2**e,r=n/2,o=BigInt(n-1),s=[];for(;t>cl;){let i=0;t&ao&&(i=Number(t&o),i>=r&&(i-=n),t-=BigInt(i)),s.push(i),t>>=ao}return s}function sS(t,e,n){const r=2**e,o=r/2,s=BigInt(r-1),i=BigInt(e),a=[];for(let c=0;c<n;c++){let l=Number(t&s);t>>=i,l>o&&(l-=r,t+=ao),a.push(l)}if(t!==cl)throw new Error("invalid wnaf");return a}function iS(t,e,n){let r=0;for(const s of n)r=Math.max(r,s.length);let o=t;for(let s=r-1;s>=0;s--){s!==r-1&&(o=o.double());for(let i=0;i<n.length;i++){const a=n[i][s];if(a){const c=e[i][Math.abs(a)-1>>1];o=o.add(a<0?c.negate():c)}}}return o}class aS{Point;BASE;ZERO;randomBytes;wnafPrecomputes=new WeakMap;baseCanBeBlinded;bits;constructor(e,n){ll(e),this.randomBytes=tS(n,Fi),this.Point=e,this.BASE=e.BASE,this.ZERO=e.ZERO,this.bits=e.Fn.BITS}buildWnafTable(e,n,r){const o=Math.ceil(r/n)+1,s=2**(n-1),i=[];let a=e;for(let c=0;c<o;c++){let l=a;for(let d=0;d<s;d++)i.push(l),l=l.add(a);a=i[i.length-1].double()}return{W:n,bits:r,windows:o,comp:i}}wnafCachedCT(e,n){const{W:r,windows:o,comp:s}=e,i=2**(r-1),a=sS(n,r,o);let c=this.ZERO,l=this.BASE;for(let d=0;d<o;d++){const u=a[d],f=d*i,h=Math.abs(u)-1;let g=s[f];for(let b=1;b<i;b++)g=b===h?s[f+b]:g;const m=g.negate();u===0?l=l.add(s[f]):c=c.add(u<0?m:g)}return{p:c,f:l}}getWnafPrecomputes(e,n,r,o){let s=this.wnafPrecomputes.get(n),i=s?.find(a=>a.W===e&&a.bits===r);return i||(i=this.buildWnafTable(n,e,r),typeof o=="function"&&(i={...i,comp:o(i.comp)}),s||(s=[],this.wnafPrecomputes.set(n,s)),s.push(i)),i}assertPoint(e){if(!(e instanceof this.Point))throw new TypeError('"point" expected Point instance, got type='+typeof e)}validateMulInput(e,n){if(this.assertPoint(e),!np(n,ao,this.Point.Fn.ORDER))throw new Error("invalid scalar")}runCT(e,n,r,o){const s=Mi(e);return s===1?this.fixedWindowCT(e,n,r):this.wnafCachedCT(this.getWnafPrecomputes(s,e,r,o),n)}mulCT(e,n,r){return this.validateMulInput(e,n),this.runCT(e,n,this.bits,r)}mulCTBlinded(e,n,r){if(this.validateMulInput(e,n),this.randomBytes===void 0)throw new Error("randomBytes is required for scalar blinding");const o=this.Point.Fn.BITS+Nd,s=this.randomBytes(Fi);if(!Yh(s)||s.length!==Fi)throw new Error("randomBytes returned invalid byte array");s[0]=s[0]&63|128;const i=n+Qh(s)*this.Point.Fn.ORDER;return this.runCT(e,i,o,r)}fixedWindowCT(e,n,r){const o=Zv,s=1<<o,i=Mv(o),a=new Array(s);a[0]=this.ZERO;for(let d=1;d<s;d++)a[d]=a[d-1].add(e);const c=Math.ceil(r/o);let l=this.ZERO;for(let d=c-1;d>=0;d--){if(d!==c-1)for(let h=0;h<o;h++)l=l.double();const u=Number(n>>BigInt(d*o)&i);let f=a[0];for(let h=1;h<s;h++)f=h===u?a[h]:f;l=l.add(f)}return{p:l,f:l}}shouldBlind(e,n){return this.randomBytes===void 0?!1:n===ao?!0:e!==this.BASE?!1:(this.baseCanBeBlinded===void 0&&(this.baseCanBeBlinded=this.mulUnsafe(this.BASE,this.Point.Fn.ORDER).is0()),this.baseCanBeBlinded)}mulSecret(e,n,r,o){return this.shouldBlind(e,r)?this.mulCTBlinded(e,n,o):this.mulCT(e,n,o)}mulUnsafe(e,n,r){if(this.assertPoint(e),!pn(n))throw new Error("invalid scalar");const o=Mi(e);if(o===1||n>=this.Point.Fn.ORDER)return cS(this.Point,[e],[n],!0);const s=this.getWnafPrecomputes(o,e,this.bits,r);return this.wnafCachedCT(s,n).p}setWindowSize(e,n){this.assertPoint(e),Qv(n,this.bits);const r=Math.ceil((this.bits+Nd)/n)+1;eS(r*2**(n-1),this.Point.Fp.BYTES),up.set(e,n),this.wnafPrecomputes.delete(e)}hasWindowSize(e){return Mi(e)!==1}}function cS(t,e,n,r=!1){if(ll(t),dp(e,t),ri(r,"allowOversized"),nS(n,t.Fn,r?t.Fn.ORDER**Yv:void 0),e.length!==n.length)throw new Error("arrays of points and scalars must have equal length");const o=e.map(i=>rS(i,4)),s=n.map(i=>oS(i,4));return iS(t.ZERO,o,s)}function Bd(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return io(e),e}else return al(t,{isLE:n})}function lS(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);Cs(n);for(const c of["p","n","h"]){const l=e[c];if(!(pn(l)&&l!==cl))throw new Error(`CURVE.${c} must be positive bigint`)}const o=Bd(e.p,n.Fp,r),s=Bd(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(const c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function dS(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const Oo=BigInt(0),Do=BigInt(1),Fo=BigInt(2),uS=BigInt(4),_d=BigInt(8);function fS(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function hS(t,e={}){Cs(e,{},{},"extraOpts");const n=e,r=lS("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;if(Is(o,i.a)!==1)throw new Error("edwards: CURVE.a must be a square in Fp for complete addition formulas");if(Is(o,i.d)!==-1)throw new Error("edwards: CURVE.d must be a non-square in Fp for complete addition formulas");Cs(n,{},{uvRatio:"function",randomBytes:"function"});const c=n.randomBytes===void 0?Zh:n.randomBytes,l=Fo<<BigInt(o.BYTES*8)-Do;function d(I){if(!o.isOdd)throw new Error("Field does not have .isOdd()");return o.isOdd(I)}const u=n.uvRatio===void 0?(I,y)=>{try{return{isValid:!0,value:o.sqrt(o.div(I,y))}}catch{return{isValid:!1,value:Oo}}}:n.uvRatio;if(!fS(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");const f=o.eql(i.a,o.neg(o.ONE))?I=>o.neg(I):o.eql(i.a,o.ONE)?I=>I:I=>o.mul(i.a,I);function h(I,y,k=!1){const L=k?Do:Oo;return Zr("coordinate "+I,y,L,l),y}function g(I){if(!(I instanceof m))throw new Error("EdwardsPoint expected")}class m{static BASE=new m(i.Gx,i.Gy,o.ONE,o.mul(i.Gx,i.Gy));static ZERO=new m(o.ZERO,o.ONE,o.ONE,o.ZERO);static Fp=o;static Fn=s;X;Y;Z;T;constructor(y,k,L,C){this.X=h("x",y),this.Y=h("y",k),this.Z=h("z",L,!0),this.T=h("t",C),Object.freeze(this)}static CURVE(){return i}static fromAffine(y){if(y instanceof m)throw new Error("extended point not allowed");const{x:k,y:L}=y||{};return h("x",k),h("y",L),new m(k,L,o.ONE,o.mul(k,L))}static fromBytes(y,k=!1){const L=o.BYTES,{a:C,d:T}=i;y=so(Jn(y,L,"point")),ri(k,"zip215");const x=so(y),v=y[L-1];x[L-1]=v&-129;const A=ks(x),N=k?l:o.ORDER;Zr("point.y",A,Oo,N);const D=o.sqr(A),E=o.sub(D,o.ONE),S=o.sub(o.mulN(T,D),C);let{isValid:P,value:R}=u(E,S);if(!P)throw new Error("bad point: invalid y coordinate");const O=d(R),j=(v&128)!==0;if(!k&&o.is0(R)&&j)throw new Error("bad point: x=0 and x_0=1");return j!==O&&(R=o.neg(R)),m.fromAffine({x:R,y:A})}static fromHex(y,k=!1){return m.fromBytes(_v(y),k)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(y=6,k=!0){return w.setWindowSize(this,y),k||this.multiply(Fo),this}assertValidity(){const y=this,{a:k,d:L}=i;if(y.is0())throw new Error("bad point: ZERO");const{X:C,Y:T,Z:x,T:v}=y,A=o.sqr(C),N=o.sqr(T),D=o.sqr(x),E=o.sqr(D),S=o.mul(A,k),P=o.mul(o.add(S,N),D),R=o.add(E,o.mul(L,o.mul(A,N)));if(!o.eql(P,R))throw new Error("bad point: equation left != right (1)");const O=o.mul(C,T),j=o.mul(x,v);if(!o.eql(O,j))throw new Error("bad point: equation left != right (2)")}equals(y){g(y);const{X:k,Y:L,Z:C}=this,{X:T,Y:x,Z:v}=y,A=o.mul(k,v),N=o.mul(T,C),D=o.mul(L,v),E=o.mul(x,C);return o.eql(A,N)&&o.eql(D,E)}is0(){return this.equals(m.ZERO)}negate(){return new m(o.neg(this.X),this.Y,this.Z,o.neg(this.T))}double(){const{X:y,Y:k,Z:L}=this,C=o.sqr(y),T=o.sqr(k),x=o.mul(o.sqr(L),Fo),v=f(C),A=o.addN(y,k),N=o.sub(o.subN(o.sqr(A),C),T),D=o.addN(v,T),E=o.subN(D,x),S=o.subN(v,T),P=o.mul(N,E),R=o.mul(D,S),O=o.mul(N,S),j=o.mul(E,D);return new m(P,R,j,O)}add(y){g(y);const{d:k}=i,{X:L,Y:C,Z:T,T:x}=this,{X:v,Y:A,Z:N,T:D}=y,E=o.mul(L,v),S=o.mul(C,A),P=o.mul(o.mulN(x,k),D),R=o.mul(T,N),O=o.sub(o.subN(o.mulN(o.addN(L,C),o.addN(v,A)),E),S),j=o.subN(R,P),M=o.addN(R,P),B=o.sub(S,f(E)),F=o.mul(O,j),U=o.mul(M,B),H=o.mul(O,B),q=o.mul(j,M);return new m(F,U,q,H)}subtract(y){return g(y),this.add(y.negate())}multiply(y){if(!s.isValidNot0(y))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:k,f:L}=w.mulSecret(this,y,a,b);return b([k,L])[0]}multiplyUnsafe(y){if(!s.isValid(y))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return y===Oo?m.ZERO:this.is0()||y===Do?this:w.mulUnsafe(this,y,b)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return w.mulUnsafe(this,i.n).is0()}toAffine(y){const k=this;let L=y;if(L!=null&&typeof L!="bigint")throw new TypeError('"invertedZ" expected bigint, got type='+typeof L);const{X:C,Y:T,Z:x}=k,v=k.is0();L==null&&(L=v?o.create(_d):o.inv(x));const A=o.mul(C,L),N=o.mul(T,L),D=o.mul(x,L);if(v)return{x:o.ZERO,y:o.ONE};if(!o.eql(D,o.ONE))throw new Error("invZ was invalid");return{x:A,y:N}}clearCofactor(){return a===Do?this:a===Fo?this.double():a===uS?this.double().double():a===_d?this.double().double().double():this.multiplyUnsafe(a)}toBytes(){const{x:y,y:k}=this.toAffine(),L=o.toBytes(k);return L[L.length-1]|=d(y)?128:0,L}toHex(){return Bv(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const b=I=>Jv(m,I),w=new aS(m,c);return w.bits>=6&&m.BASE.precompute(6),Object.freeze(m.prototype),Object.freeze(m),m}const nn=BigInt(0),Xe=BigInt(1),Mo=BigInt(2);function Od(t,e){return t+e-(e>>Xe<<Xe)}function pS(t){const e=BigInt(6)*t;return(n,r,o)=>{const s=r+o,a=((e+o-r)*n+r)%t;return{x_2:a,x_3:s-a}}}function gS(t){return Cs(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function",scalarMultBase:"function"}),Object.freeze({...t})}function mS(t){const e=gS(t),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=e.scalarMultBase,c=r==="x25519";if(!c&&r!=="x448")throw new Error("invalid type");const l=i===void 0?Zh:i,d=c?255:448,u=pS(n),f=c?32:56,h=BigInt(c?9:5),g=BigInt(c?121665:39081),m=c?Mo**BigInt(254):Mo**BigInt(447),b=c?BigInt(8)*(Mo**BigInt(251)-Xe):BigInt(4)*(Mo**BigInt(445)-Xe),w=m+b+Xe,I=R=>ie(R,n),y=k(h);function k(R){return tp(I(R),f)}function L(R){const O=so(Jn(R,f,"uCoordinate"));return c&&(O[31]&=127),I(ks(O))}function C(R){return ks(o(so(Jn(R,f,"scalar"))))}const T=new Set(c?[nn,Xe,n-Xe,BigInt("325606250916557431795983626356110631294008115727848805560023387167927233504"),BigInt("39382357235489614581723060781553021112529911719440698176882885853963445705823")]:[nn,Xe,n-Xe]);function x(R,O){const j=L(O);if(T.has(j))throw new Error("invalid private or public key received");const M=D(j,C(R));if(M===nn)throw new Error("invalid private or public key received");return k(M)}function v(R){if(a===void 0)return x(R,y);const O=C(R);Zr("scalar",O,m,w);const j=I(a(O));if(j===nn)throw new Error("invalid private or public key received");return k(j)}const A=v,N=x;function D(R,O){Zr("u",R,nn,n),Zr("scalar",O,m,w);const j=O,M=R;let B=Xe,F=nn,U=R,H=Xe;const q=j^j>>Xe;for(let G=BigInt(d-1);G>=nn;G--){const V=Od(n,q>>G);({x_2:B,x_3:U}=u(V,B,U)),{x_2:F,x_3:H}=u(V,F,H);const X=B+F,Z=I(X*X),ce=B-F,Ie=I(ce*ce),Fe=Z-Ie,re=U+H,We=U-H,Jt=I(We*X),Qt=I(re*ce),Me=Jt+Qt,en=Jt-Qt;U=I(Me*Me),H=I(M*I(en*en)),B=I(Z*Ie),F=I(Fe*(Z+I(g*Fe)))}const K=Od(n,j);({x_2:B,x_3:U}=u(K,B,U)),{x_2:F,x_3:H}=u(K,F,H);const W=s(F);return I(B*W)}const E={secretKey:f,publicKey:f,seed:f},S=R=>(R=R===void 0?l(f):R,Jn(R,E.seed,"seed"),R),P={randomSecretKey:S};return Object.freeze(E),Object.freeze(P),Object.freeze({keygen:dS(S,A),getSharedSecret:N,getPublicKey:A,scalarMult:x,scalarMultBase:v,utils:P,GuBytes:y.slice(),lengths:E})}const Dd=BigInt(0),wS=BigInt(1),Fd=BigInt(2),yS=BigInt(3),bS=BigInt(5),vS=BigInt(8),oi=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),SS={p:oi,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:vS,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function fp(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=oi,a=t*t%s*t%s,c=rt(a,Fd,s)*a%s,l=rt(c,wS,s)*t%s,d=rt(l,bS,s)*l%s,u=rt(d,e,s)*d%s,f=rt(u,n,s)*u%s,h=rt(f,r,s)*f%s,g=rt(h,o,s)*h%s,m=rt(g,o,s)*h%s,b=rt(m,e,s)*d%s;return{pow_p_5_8:rt(b,Fd,s)*t%s,b2:a}}function xS(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Md=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function ES(t,e){const n=oi,r=ie(e*e*e,n),o=ie(r*r*e,n),s=fp(t*o).pow_p_5_8;let i=ie(t*r*s,n);const a=ie(e*i*i,n),c=i,l=ie(i*Md,n),d=a===t,u=a===ie(-t,n),f=a===ie(-t*Md,n);return d&&(i=c),(u||f)&&(i=l),Gv(i,n)&&(i=ie(-i,n)),{isValid:d||u,value:i}}const jd=hS(SS,{uvRatio:ES}),jo=(()=>{const t=oi,e=n=>{const{pow_p_5_8:r,b2:o}=fp(n);return ie(rt(r,yS,t)*o,t)};return mS({P:t,type:"x25519",powPminus2:e,adjustScalarBytes:xS,scalarMultBase:n=>{const r=ie(n,jd.Fn.ORDER);if(r===Dd)return Dd;const o=jd.BASE.multiply(r);return ie((o.Z+o.Y)*e(ie(o.Z-o.Y,t)),t)}})})();class Ud{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(nl(e),Lt(n,void 0,"key"),this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("expected Hash instance");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?e.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),hn(o)}update(e){return Es(this),this.iHash.update(e),this}digestInto(e){Es(this),zh(e,this),this.finished=!0;const n=e.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a,canXOF:c}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.canXOF=c,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const hp=(()=>{const t=((e,n,r)=>new Ud(e,n).update(r).digest());return t.create=(e,n)=>new Ud(e,n),t})();function $d(){const t={};return t.promise=new Promise((e,n)=>{t.resolve=e,t.reject=n}),t}class Hd{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){const e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}}class ji{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Hd(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){const n=this.head;this.head=n.next=new Hd(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){const n=this.tail.next;this.tail.next=null,this.tail=n,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}}class AS extends Error{type;code;constructor(e,n){super(e??"The operation was aborted"),this.type="aborted",this.code=n??"ABORT_ERR"}}function kS(t={}){return CS(n=>{const r=n.shift();if(r==null)return{done:!0};if(r.error!=null)throw r.error;return{done:r.done===!0,value:r.value}},t)}function CS(t,e){e=e??{};let n=e.onEnd,r=new ji,o,s,i,a=$d();const c=async()=>{try{return r.isEmpty()?i?{done:!0}:await new Promise((b,w)=>{s=I=>{s=null,r.push(I);try{b(t(r))}catch(y){w(y)}return o}}):t(r)}finally{r.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=$d()})}},l=b=>s!=null?s(b):(r.push(b),o),d=b=>(r=new ji,s!=null?s({error:b}):(r.push({error:b}),o)),u=b=>{if(i)return o;if(e?.objectMode!==!0&&b?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:b})},f=b=>i?o:(i=!0,b!=null?d(b):l({done:!0})),h=()=>(r=new ji,f(),{done:!0}),g=b=>(f(b),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:g,push:u,end:f,get readableLength(){return r.size},onEmpty:async b=>{const w=b?.signal;if(w?.throwIfAborted(),r.isEmpty())return;let I,y;w!=null&&(I=new Promise((k,L)=>{y=()=>{L(new AS)},w.addEventListener("abort",y)}));try{await Promise.race([a.promise,I])}finally{y!=null&&w!=null&&w?.removeEventListener("abort",y)}}},n==null)return o;const m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(b){return m.throw(b),n!=null&&(n(b),n=void 0),{done:!0}},return(){return m.return(),n!=null&&(n(),n=void 0),{done:!0}},push:u,end(b){return m.end(b),n!=null&&(n(b),n=void 0),o},get readableLength(){return m.readableLength},onEmpty:b=>m.onEmpty(b)},o}class dl extends Error{name="TimeoutError";constructor(e,n){super(e,n),Error.captureStackTrace?.(this,dl)}}const qd=t=>t.reason??new DOMException("This operation was aborted.","AbortError");function IS(t,e){const{milliseconds:n,fallback:r,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e;let a,c;const d=new Promise((u,f)=>{if(typeof n!="number"||Math.sign(n)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${n}\``);if(i?.aborted){f(qd(i));return}if(i&&(c=()=>{f(qd(i))},i.addEventListener("abort",c,{once:!0})),t.then(u,f),n===Number.POSITIVE_INFINITY)return;const h=new dl;a=s.setTimeout.call(void 0,()=>{if(r){try{u(r())}catch(g){f(g)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${n} milliseconds`,f(h))},n)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}const RS=t=>{const e=t.addEventListener||t.on||t.addListener,n=t.removeEventListener||t.off||t.removeListener;if(!e||!n)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(t),removeListener:n.bind(t)}};function TS(t,e,n){let r;const o=new Promise((s,i)=>{if(n={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...n},!(n.count>=0&&(n.count===Number.POSITIVE_INFINITY||Number.isInteger(n.count))))throw new TypeError("The `count` option should be at least 0 or more");n.signal?.throwIfAborted();const a=[e].flat(),c=[],{addListener:l,removeListener:d}=RS(t),u=async(...h)=>{const g=n.multiArgs?h:h[0];if(n.filter)try{if(!await n.filter(g))return}catch(m){r(),i(m);return}c.push(g),n.count===c.length&&(r(),s(c))},f=(...h)=>{r(),i(n.rejectionMultiArgs?h:h[0])};r=()=>{for(const h of a)d(h,u);for(const h of n.rejectionEvents)a.includes(h)||d(h,f)};for(const h of a)l(h,u);for(const h of n.rejectionEvents)a.includes(h)||l(h,f);n.signal&&n.signal.addEventListener("abort",()=>{f(n.signal.reason)},{once:!0}),n.resolveImmediately&&s(c)});if(o.cancel=r,typeof n.timeout=="number"){const s=IS(o,{milliseconds:n.timeout});return s.cancel=()=>{r(),s.clear()},s}return o}function PS(t,e,n){typeof n=="function"&&(n={filter:n}),n={...n,count:1,resolveImmediately:!1};const r=TS(t,e,n),o=r.then(s=>s[0]);return o.cancel=r.cancel,o}class Rs extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"}class NS extends Error{static name="StreamClosedError";name="StreamClosedError"}function LS(t){return t.reason}function pp(t,e,n){if(e==null||t==null)return t;const r=LS;if(e.aborted)return t.catch(()=>{}),Promise.reject(r(e));let o;return Promise.race([t,new Promise((s,i)=>{o=()=>{i(r(e))},e.addEventListener("abort",o)})]).finally(()=>{o!=null&&e.removeEventListener("abort",o)})}const BS=Math.pow(2,20)*4;class gp extends zm{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??BS,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new se,this.writeBuffer=new se,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);const n=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",n);const r=o=>{this.onDrainPromise?.reject(o.error??new NS)};this.addEventListener("close",r)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),pp(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;const e=kS(),n=s=>{e.push(s.data)};this.addEventListener("message",n);const r=s=>{e.end(s.error)};this.addEventListener("close",r);const o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",n),this.removeEventListener("close",r),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new Tr(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(n){this.log("failed to send reset to remote - %e",n)}this.dispatchEvent(new dv(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Tr(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");const e=new cv;this.dispatchEvent(new uv(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new tl))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0;const n=this.writeBuffer.byteLength;let r=0;for(;this.writeBuffer.byteLength>0;){const o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}const s=this.writeBuffer.sublist(0,o),i=new se(s);this.writeBuffer.consume(s.byteLength);const a=this.sendData(s);if(e=a.canSendMore,r+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",r,n,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}const e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new lv(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new Ad(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new Ad(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}}const _S=4194304;class Kd extends Error{static name="UnwrappedError";name="UnwrappedError"}class mp extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"}class OS extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"}class DS extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"}function FS(t){return typeof t?.closeRead=="function"}function MS(t){return typeof t?.close=="function"}function Ui(t){return FS(t)?t.remoteWriteStatus!=="writable"&&t.readBufferLength===0:MS(t)?t.status!=="open":!1}function jS(t){return t?.addEventListener!=null&&t?.removeEventListener!=null&&t?.send!=null&&t?.push!=null&&t?.log!=null}function US(t,e){const n=e?.maxBufferSize??_S,r=new se;let o,s=!1;if(!jS(t))throw new Kh("Argument should be a Stream or a Multiaddr");const i=d=>{if(r.append(d.data),r.byteLength>n){const u=r.byteLength;r.consume(r.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${n}`))}o?.resolve()};t.addEventListener("message",i);const a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};t.addEventListener("close",a);const c=()=>{o?.resolve()};t.addEventListener("remoteCloseWrite",c);const l={readBuffer:r,async read(d){if(s===!0)throw new Kd("Stream was unwrapped");if(Ui(t)){if(d?.bytes==null)return null;if(r.byteLength<d.bytes)throw t.log.error("closed after reading %d/%d bytes",r.byteLength,d.bytes),new Rs(`Unexpected EOF - stream closed after reading ${r.byteLength}/${d.bytes} bytes`)}const u=d?.bytes??1;for(o=Promise.withResolvers();;){if(r.byteLength>=u){o.resolve();break}if(await pp(o.promise,d?.signal),Ui(t)){if(r.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}const f=d?.bytes??r.byteLength;if(r.byteLength<f){if(Ui(t))throw t.log.error("closed while reading %d/%d bytes",r.byteLength,f),new Rs(`Unexpected EOF - stream closed while reading ${r.byteLength}/${f} bytes`);return l.read(d)}const h=r.sublist(0,f);return r.consume(f),h},async write(d,u){if(s===!0)throw new Kd("Stream was unwrapped");t.send(d)||await PS(t,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,t.removeEventListener("message",i),t.removeEventListener("close",a),t.removeEventListener("remoteCloseWrite",c),r.byteLength>0&&(t.log("stream unwrapped with %d unread bytes",r.byteLength),t.push(r))),t}};return l}function zd(t,e={}){const n=US(t,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=En(e.maxDataLength));const r=e?.lengthDecoder??Ah,o=e?.lengthEncoder??Wb;return{async read(i){let a=-1;const c=new se;for(;;){const d=await n.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=r(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new mp("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new DS(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new OS(`Message length too long - ${a} > ${e.maxDataLength}`);const l=await n.read({...i,bytes:a});if(l==null)throw t.log.error("tried to read %d bytes but the stream closed",a),new Rs(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw t.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Rs(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await n.write(new se(o(i.byteLength),i),a)},async writeV(i,a){const c=new se(...i.flatMap(l=>[o(l.byteLength),l]));await n.write(c,a)},unwrap(){return n.unwrap()}}}const $S=1024*1024*4,HS=1024*1024*4;class qS{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new se,this.maxBufferSize=e.maxBufferSize??$S,this.maxDataLength=e.maxDataLength??HS,this.lengthDecoder=e.lengthDecoder??Ah,this.encodingLength=e.encodingLength??En}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new Kh(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let n;try{n=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(n<0||n>this.maxDataLength)throw new mp("Invalid message length");const r=this.encodingLength(n),o=r+n;if(this.buffer.byteLength>=o){const s=this.buffer.sublist(r,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}}var KS={};const co=65535,Wd=co-16,xo=!!KS?.DUMP_SESSION_KEYS,Gd=16;function Ya(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}const Ts=t=>t?`"${t}" `:"";function Za(t,e=""){if(typeof t!="boolean")throw new TypeError(Ts(e)+"expected boolean, got type="+typeof t);return t}function er(t,e=""){if(typeof t!="number")throw new TypeError(Ts(e)+"expected number, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError(Ts(e)+"expected integer >= 0, got "+t);return t}function Se(t,e,n=""){if(Ya(t)&&(e===void 0||t.length===e))return t;e!==void 0&&er(e,"length");const r=Ya(t),o=e!==void 0?` of length ${e}`:"",s=r?`length=${t.length}`:`type=${typeof t}`,i=Ts(n)+"expected Uint8Array"+o+", got "+s;throw r?new RangeError(i):new TypeError(i)}const Vd=(t,e)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(e==="object"?"expected valid options object":`"${e}" expected object, got type=${typeof t}`)};function Xd(t,e=!0){if(t.destroyed)throw new Error("hash was destroyed");if(e&&t.finished)throw new Error("digest() was already called")}function zS(t,e){Se(t,void 0,"output");const n=e.outputLen;if(!(t.length>=n))throw new RangeError('"output" expected length >= '+n)}function kt(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Wt(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function WS(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const tr=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function GS(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function VS(t){for(let e=0;e<t.length;e++)t[e]=GS(t[e]);return t}const dn=tr?t=>t:VS;function XS(t,e){return!t.byteLength||!e.byteLength?!1:t.buffer===e.buffer&&t.byteOffset<e.byteOffset+e.byteLength&&e.byteOffset<t.byteOffset+t.byteLength}function YS(t,e){if(XS(t,e)&&t.byteOffset<e.byteOffset)throw new Error("complex overlap of input and output is not supported")}function ZS(t,e){return Vd(t,"defaults"),Vd(e,"opts"),Object.assign(t,e)}function JS(t,e){if(t=Se(t),e=Se(e),t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function QS(t,e,n){const r=e,o=(()=>[]),s=(a,c)=>r(c,...o(a)).update(a).digest(),i=r(new Uint8Array(t),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...c)=>r(a,...c),s}const ex=(t,e)=>{function n(r,...o){if(Se(r,void 0,"key"),t.nonceLength!==void 0){const u=o[0];Se(u,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength,i=t.nonceLength!==void 0?1:0;if(!t.withAAD){for(let u=i;u<o.length;u++)if(Ya(o[u]))throw new Error("AAD not supported")}t.withAAD&&o[i]!==void 0&&Se(o[i],void 0,"AAD");const a=e(r,...o),c=(u,f)=>{if(f!==void 0){if(u!==2)throw new Error("cipher output not supported");Se(f,void 0,"output")}};let l=!1;return{encrypt(u,f){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,Se(u,void 0,"data"),c(a.encrypt.length,f),a.encrypt(u,f)},decrypt(u,f){if(Se(u,void 0,"data"),s&&u.length<s)throw new Error('"ciphertext" expected length >= tagLength='+s);return c(a.decrypt.length,f),a.decrypt(u,f)}}}return Object.assign(n,t),n};function Ja(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(Se(e,t,"output"),n&&!Ps(e))throw new Error("invalid output, must be aligned");return e}function tx(t,e,n){er(t),er(e),Za(n);const r=new Uint8Array(16),o=WS(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function Ps(t){return t.byteOffset%4===0}function Ns(t){return Uint8Array.from(Se(t))}const wp=t=>Uint8Array.from(t.split(""),e=>e.charCodeAt(0)),nx=dn(kt(wp("expand 16-byte k"))),rx=dn(kt(wp("expand 32-byte k")));function te(t,e){return t<<e|t>>>32-e}const Pr=64,ox=16,Qa=2**32-1,Yd=Uint32Array.of();function sx(t,e,n,r,o,s,i,a){const c=o.length,l=new Uint8Array(Pr),d=kt(l),u=tr&&Ps(o)&&Ps(s),f=u?kt(o):Yd,h=u?kt(s):Yd;if(!tr){for(let g=0;g<c;i++){if(t(e,n,r,d,i,a),dn(d),i>=Qa)throw new Error("arx: counter overflow");const m=Math.min(Pr,c-g);for(let b=0,w;b<m;b++)w=g+b,s[w]=o[w]^l[b];g+=m}return}for(let g=0;g<c;i++){if(t(e,n,r,d,i,a),i>=Qa)throw new Error("arx: counter overflow");const m=Math.min(Pr,c-g);if(u&&m===Pr){const b=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let w=0,I;w<ox;w++)I=b+w,h[I]=f[I]^d[w];g+=Pr;continue}for(let b=0,w;b<m;b++)w=g+b,s[w]=o[w]^l[b];g+=m}}function ix(t,e){const{allowShortKeys:n,extendNonceFn:r,counterLength:o,counterRight:s,rounds:i}=ZS({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof t!="function")throw new Error("core must be a function");return er(o),er(i),Za(s),Za(n),(a,c,l,d,u=0)=>{Se(a,void 0,"key"),Se(c,void 0,"nonce"),Se(l,void 0,"data");const f=l.length,h=d!==void 0;if(d=Ja(f,d,!1),h&&YS(l,d),er(u),u<0||u>=Qa)throw new Error("arx: counter overflow");const g=[];let m=a.length,b,w;if(m===32)g.push(b=Ns(a)),w=rx;else if(m===16&&n)b=new Uint8Array(32),b.set(a),b.set(a,16),w=nx,g.push(b);else throw Se(a,32,"arx key"),new Error("invalid key size");(!tr||!Ps(c))&&g.push(c=Ns(c));let I=kt(b);if(r){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");const L=c.subarray(0,16);if(tr)r(w,I,kt(L),I);else{const C=dn(Uint32Array.from(w));r(C,I,kt(L),I),Wt(C),dn(I)}c=c.subarray(16)}else tr||dn(I);const y=16-o;if(y!==c.length)throw new Error(`arx: nonce must be ${y} or 16 bytes`);if(y!==12){const L=new Uint8Array(12);L.set(c,s?0:12-c.length),c=L,g.push(c)}const k=dn(kt(c));try{return sx(t,w,I,k,l,d,u,i),d}finally{Wt(...g)}}}function Ae(t,e){return t[e++]&255|(t[e++]&255)<<8}class ax{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;destroyed=!1;constructor(e){e=Ns(Se(e,32,"key"));const n=Ae(e,0),r=Ae(e,2),o=Ae(e,4),s=Ae(e,6),i=Ae(e,8),a=Ae(e,10),c=Ae(e,12),l=Ae(e,14);this.r[0]=n&8191,this.r[1]=(n>>>13|r<<3)&8191,this.r[2]=(r>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=Ae(e,16+2*d)}process(e,n,r=!1){const o=r?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],g=i[7],m=i[8],b=i[9],w=Ae(e,n+0),I=Ae(e,n+2),y=Ae(e,n+4),k=Ae(e,n+6),L=Ae(e,n+8),C=Ae(e,n+10),T=Ae(e,n+12),x=Ae(e,n+14);let v=s[0]+(w&8191),A=s[1]+((w>>>13|I<<3)&8191),N=s[2]+((I>>>10|y<<6)&8191),D=s[3]+((y>>>7|k<<9)&8191),E=s[4]+((k>>>4|L<<12)&8191),S=s[5]+(L>>>1&8191),P=s[6]+((L>>>14|C<<2)&8191),R=s[7]+((C>>>11|T<<5)&8191),O=s[8]+((T>>>8|x<<8)&8191),j=s[9]+(x>>>5|o),M=0,B=M+v*a+A*(5*b)+N*(5*m)+D*(5*g)+E*(5*h);M=B>>>13,B&=8191,B+=S*(5*f)+P*(5*u)+R*(5*d)+O*(5*l)+j*(5*c),M+=B>>>13,B&=8191;let F=M+v*c+A*a+N*(5*b)+D*(5*m)+E*(5*g);M=F>>>13,F&=8191,F+=S*(5*h)+P*(5*f)+R*(5*u)+O*(5*d)+j*(5*l),M+=F>>>13,F&=8191;let U=M+v*l+A*c+N*a+D*(5*b)+E*(5*m);M=U>>>13,U&=8191,U+=S*(5*g)+P*(5*h)+R*(5*f)+O*(5*u)+j*(5*d),M+=U>>>13,U&=8191;let H=M+v*d+A*l+N*c+D*a+E*(5*b);M=H>>>13,H&=8191,H+=S*(5*m)+P*(5*g)+R*(5*h)+O*(5*f)+j*(5*u),M+=H>>>13,H&=8191;let q=M+v*u+A*d+N*l+D*c+E*a;M=q>>>13,q&=8191,q+=S*(5*b)+P*(5*m)+R*(5*g)+O*(5*h)+j*(5*f),M+=q>>>13,q&=8191;let K=M+v*f+A*u+N*d+D*l+E*c;M=K>>>13,K&=8191,K+=S*a+P*(5*b)+R*(5*m)+O*(5*g)+j*(5*h),M+=K>>>13,K&=8191;let W=M+v*h+A*f+N*u+D*d+E*l;M=W>>>13,W&=8191,W+=S*c+P*a+R*(5*b)+O*(5*m)+j*(5*g),M+=W>>>13,W&=8191;let G=M+v*g+A*h+N*f+D*u+E*d;M=G>>>13,G&=8191,G+=S*l+P*c+R*a+O*(5*b)+j*(5*m),M+=G>>>13,G&=8191;let V=M+v*m+A*g+N*h+D*f+E*u;M=V>>>13,V&=8191,V+=S*d+P*l+R*c+O*a+j*(5*b),M+=V>>>13,V&=8191;let X=M+v*b+A*m+N*g+D*h+E*f;M=X>>>13,X&=8191,X+=S*u+P*d+R*l+O*c+j*a,M+=X>>>13,X&=8191,M=(M<<2)+M|0,M=M+B|0,B=M&8191,M=M>>>13,F+=M,s[0]=B,s[1]=F,s[2]=U,s[3]=H,s[4]=q,s[5]=K,s[6]=W,s[7]=G,s[8]=V,s[9]=X}finalize(){const{h:e,pad:n}=this,r=new Uint16Array(10);let o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,r[0]=e[0]+5,o=r[0]>>>13,r[0]&=8191;for(let a=1;a<10;a++)r[a]=e[a]+o,o=r[a]>>>13,r[a]&=8191;r[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)r[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|r[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let i=e[0]+n[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+n[a]|0)+(i>>>16)|0,e[a]=i&65535;Wt(r)}update(e){Xd(this),Se(e),e=Ns(e);const{buffer:n,blockLen:r}=this,o=e.length;for(let s=0;s<o;){const i=Math.min(r-this.pos,o-s);if(i===r){for(;r<=o-s;s+=r)this.process(e,s);continue}n.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===r&&(this.process(n,0,!1),this.pos=0)}return this}destroy(){this.destroyed=!0,Wt(this.h,this.r,this.buffer,this.pad)}digestInto(e){Xd(this),zS(e,this),this.finished=!0;const{buffer:n,h:r}=this;let{pos:o}=this;if(o){for(n[o++]=1;o<16;o++)n[o]=0;this.process(n,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)e[s++]=r[i]>>>0,e[s++]=r[i]>>>8}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}}const cx=QS(32,t=>new ax(t));function lx(t,e,n,r,o,s=20){let i=t[0],a=t[1],c=t[2],l=t[3],d=e[0],u=e[1],f=e[2],h=e[3],g=e[4],m=e[5],b=e[6],w=e[7],I=o,y=n[0],k=n[1],L=n[2],C=i,T=a,x=c,v=l,A=d,N=u,D=f,E=h,S=g,P=m,R=b,O=w,j=I,M=y,B=k,F=L;for(let H=0;H<s;H+=2)C=C+A|0,j=te(j^C,16),S=S+j|0,A=te(A^S,12),C=C+A|0,j=te(j^C,8),S=S+j|0,A=te(A^S,7),T=T+N|0,M=te(M^T,16),P=P+M|0,N=te(N^P,12),T=T+N|0,M=te(M^T,8),P=P+M|0,N=te(N^P,7),x=x+D|0,B=te(B^x,16),R=R+B|0,D=te(D^R,12),x=x+D|0,B=te(B^x,8),R=R+B|0,D=te(D^R,7),v=v+E|0,F=te(F^v,16),O=O+F|0,E=te(E^O,12),v=v+E|0,F=te(F^v,8),O=O+F|0,E=te(E^O,7),C=C+N|0,F=te(F^C,16),R=R+F|0,N=te(N^R,12),C=C+N|0,F=te(F^C,8),R=R+F|0,N=te(N^R,7),T=T+D|0,j=te(j^T,16),O=O+j|0,D=te(D^O,12),T=T+D|0,j=te(j^T,8),O=O+j|0,D=te(D^O,7),x=x+E|0,M=te(M^x,16),S=S+M|0,E=te(E^S,12),x=x+E|0,M=te(M^x,8),S=S+M|0,E=te(E^S,7),v=v+A|0,B=te(B^v,16),P=P+B|0,A=te(A^P,12),v=v+A|0,B=te(B^v,8),P=P+B|0,A=te(A^P,7);let U=0;r[U++]=i+C|0,r[U++]=a+T|0,r[U++]=c+x|0,r[U++]=l+v|0,r[U++]=d+A|0,r[U++]=u+N|0,r[U++]=f+D|0,r[U++]=h+E|0,r[U++]=g+S|0,r[U++]=m+P|0,r[U++]=b+R|0,r[U++]=w+O|0,r[U++]=I+j|0,r[U++]=y+M|0,r[U++]=k+B|0,r[U++]=L+F|0}const dx=ix(lx,{counterRight:!1,counterLength:4,allowShortKeys:!1}),ux=new Uint8Array(16),Zd=(t,e)=>{t.update(e);const n=e.length%16;n&&t.update(ux.subarray(n))},fx=new Uint8Array(32);function Jd(t,e,n,r,o){o!==void 0&&Se(o,void 0,"AAD");const s=t(e,n,fx),i=tx(r.length,o?o.length:0,!0),a=cx.create(s);o&&Zd(a,o),Zd(a,r),a.update(i);const c=a.digest();return Wt(s,i),c}const hx=t=>(e,n,r)=>({encrypt(s,i){const a=s.length;i=Ja(a+16,i,!1),i.set(s);const c=i.subarray(0,-16);t(e,n,c,c,1);const l=Jd(t,e,n,c,r);return i.set(l,a),Wt(l),i},decrypt(s,i){i=Ja(s.length-16,i,!1);const a=s.subarray(0,-16),c=s.subarray(-16),l=Jd(t,e,n,a,r);if(!JS(c,l))throw Wt(l),new Error("invalid tag");return i.set(s.subarray(0,-16)),t(e,n,i,i,1),Wt(l),i}}),Qd=ex({blockSize:64,nonceLength:12,tagLength:16,withAAD:!0},hx(dx));function px(t,e,n){return nl(t),n===void 0&&(n=new Uint8Array(t.outputLen)),hp(t,n,e)}const Nr=Uint8Array.of(0),gx=Uint8Array.of();function mx(t,e,n,r=32,o){nl(t),Nt(r,"length"),Lt(e,void 0,"prk");const s=t.outputLen;if(e.length<s)throw new Error('"prk" must be at least HashLen octets');if(r>255*s)throw new Error("Length must be <= 255*HashLen");const i=Math.ceil(r/s);if(n===void 0?n=gx:Lt(n,void 0,"info"),!i)return new Uint8Array;const a=new Uint8Array(i*s),{iHash:c,oHash:l}=hp.create(t,e),d=new Uint8Array(s),u=i>1?t.create():void 0;for(let h=0;h<i-1;h++){Nr[0]=h+1;const g=c._cloneInto(u);h&&g.update(d),g.update(n).update(Nr).digestInto(d),l._cloneInto(u).update(d).digestInto(d),a.set(d,s*h)}if(Nr[0]=i,i>1&&c.update(d),c.update(n).update(Nr).digestInto(d),l.update(d).digestInto(d),a.set(d,s*(i-1)),c.destroy(),l.destroy(),u?.destroy(),d!==a&&hn(d),hn(Nr),r===a.length)return a;const f=a.slice(0,r);return hn(a),f}const yp={hashSHA256(t){return Di(t.subarray())},getHKDF(t,e){const n=px(Di,e,t),o=mx(Di,n,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){const t=jo.utils.randomSecretKey();return{publicKey:jo.getPublicKey(t),privateKey:t}},generateX25519KeyPairFromSeed(t){return{publicKey:jo.getPublicKey(t),privateKey:t}},generateX25519SharedKey(t,e){return jo.getSharedSecret(t.subarray(),e.subarray())},chaCha20Poly1305Encrypt(t,e,n,r){return Qd(r,e,n).encrypt(t.subarray())},chaCha20Poly1305Decrypt(t,e,n,r,o){return Qd(r,e,n).decrypt(t.subarray(),o)}},wx=yp;function yx(t){return{generateKeypair:t.generateX25519KeyPair,dh:(e,n)=>t.generateX25519SharedKey(e.privateKey,n).subarray(0,32),encrypt:t.chaCha20Poly1305Encrypt,decrypt:t.chaCha20Poly1305Decrypt,hash:t.hashSHA256,hkdf:t.getHKDF}}const Ls=t=>{const e=Tt(2);return e[0]=t>>8,e[1]=t,e};Ls.bytes=2;const Bs=t=>{if(t.length<2)throw RangeError("Could not decode int16BE");if(t instanceof Uint8Array){let e=0;return e+=t[0]<<8,e+=t[1],e}return t.getUint16(0)};Bs.bytes=2;function bx(t){return{xxHandshakeSuccesses:t.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:t.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:t.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:t.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:t.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function bp(t,e){!e.enabled||!xo||(t?(e(`LOCAL_STATIC_PUBLIC_KEY ${ee(t.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${ee(t.privateKey,"hex")}`)):e("Missing local static keys."))}function vp(t,e){!e.enabled||!xo||(t?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${ee(t.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${ee(t.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function vx(t,e){!e.enabled||!xo||e(t?`REMOTE_STATIC_PUBLIC_KEY ${ee(t.subarray(),"hex")}`:"Missing remote static public key.")}function Sp(t,e){!e.enabled||!xo||e(t?`REMOTE_EPHEMERAL_PUBLIC_KEY ${ee(t.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function xp(t,e,n){!n.enabled||!xo||(n(`CIPHER_STATE_1 ${t.n.getUint64()} ${t.k&&ee(t.k,"hex")}`),n(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&ee(e.k,"hex")}`))}class Jr extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=Jr.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"}const Sx=0,xx=4294967295,Ex="Cipherstate has reached maximum n, a new handshake must be performed";class Ax{n;bytes;view;constructor(e=Sx){this.n=e,this.bytes=je(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>xx)throw new Error(Ex)}}const nr=je(0);class Uo{k;n;crypto;constructor(e,n=void 0,r=0){this.crypto=e,this.k=n,this.n=new Ax(r)}hasKey(){return!!this.k}encryptWithAd(e,n){if(!this.hasKey())return n;this.n.assertValue();const r=this.crypto.encrypt(n,this.n.getBytes(),e,this.k);return this.n.increment(),r}decryptWithAd(e,n,r){if(!this.hasKey())return n;this.n.assertValue();const o=this.crypto.decrypt(n,this.n.getBytes(),e,this.k,r);return this.n.increment(),o}}class kx{cs;ck;h;crypto;constructor(e,n){this.crypto=e;const r=ye(n,"utf-8");this.h=Ix(e,r),this.ck=this.h,this.cs=new Uo(e)}mixKey(e){const[n,r]=this.crypto.hkdf(this.ck,e);this.ck=n,this.cs=new Uo(this.crypto,r)}mixHash(e){this.h=this.crypto.hash(new se(this.h,e))}encryptAndHash(e){const n=this.cs.encryptWithAd(this.h,e);return this.mixHash(n),n}decryptAndHash(e){const n=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),n}split(){const[e,n]=this.crypto.hkdf(this.ck,nr);return[new Uo(this.crypto,e),new Uo(this.crypto,n)]}}class Cx{ss;s;e;rs;re;initiator;crypto;constructor(e){const{crypto:n,protocolName:r,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=n,this.ss=new kx(n,r),this.ss.mixHash(o),this.initiator=s,this.s=i,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");const e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,n=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<n+32)throw new Error("message is not long enough");this.re=e.sublist(n,n+32),this.ss.mixHash(this.re)}readS(e,n=0){if(this.rs)throw new Error("remote static public key is already set");const r=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<n+r)throw new Error("message is not long enough");const o=e.sublist(n,n+r);return this.rs=this.ss.decryptAndHash(o),r}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}}class Ep extends Cx{writeMessageA(e){return new se(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){const n=this.writeE();this.writeEE();const r=this.writeS();return this.writeES(),new se(n,r,this.ss.encryptAndHash(e))}writeMessageC(e){const n=this.writeS();return this.writeSE(),new se(n,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(n){throw new Jr(`handshake stage 0 validation fail: ${n.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();const n=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+n))}catch(n){throw new Jr(`handshake stage 1 validation fail: ${n.message}`)}}readMessageC(e){try{const n=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(n))}catch(n){throw new Jr(`handshake stage 2 validation fail: ${n.message}`)}}}function Ix(t,e){if(e.length<=32){const n=je(32);return n.set(e),n}else return t.hash(e)}var _s;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{if(o.lengthDelimited!==!1&&r.fork(),n.webtransportCerthashes!=null)for(const s of n.webtransportCerthashes)r.uint32(10),r.bytes(s);if(n.streamMuxers!=null)for(const s of n.streamMuxers)r.uint32(18),r.string(s);o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={webtransportCerthashes:[],streamMuxers:[]},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new vd('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(n.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new vd('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(n.string());break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(_s||(_s={}));var Os;(function(t){let e;t.codec=()=>(e==null&&(e=ti((n,r,o={})=>{o.lengthDelimited!==!1&&r.fork(),n.identityKey!=null&&n.identityKey.byteLength>0&&(r.uint32(10),r.bytes(n.identityKey)),n.identitySig!=null&&n.identitySig.byteLength>0&&(r.uint32(18),r.bytes(n.identitySig)),n.extensions!=null&&(r.uint32(34),_s.codec().encode(n.extensions,r)),o.lengthDelimited!==!1&&r.ldelim()},(n,r,o={})=>{const s={identityKey:je(0),identitySig:je(0)},i=r==null?n.len:n.pos+r;for(;n.pos<i;){const a=n.uint32();switch(a>>>3){case 1:{s.identityKey=n.bytes();break}case 2:{s.identitySig=n.bytes();break}case 4:{s.extensions=_s.codec().decode(n,n.uint32(),{limits:o.limits?.extensions});break}default:{n.skipType(a&7);break}}}return s})),e),t.encode=n=>ei(n,t.codec()),t.decode=(n,r)=>Qs(n,t.codec(),r)})(Os||(Os={}));async function Ap(t,e,n){const r=await t.sign(Cp(e));return Os.encode({identityKey:ni(t.publicKey),identitySig:r,extensions:n})}async function kp(t,e,n){try{const r=Os.decode(t),o=Wa(r.identityKey);if(n?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${n}`);if(!e)throw new Error("Remote static does not exist");const s=Cp(e);if(!await o.verify(s,r.identitySig))throw new Error("Invalid payload signature");return r}catch(r){throw new Mm(r.message)}}function Cp(t){const e=ye("noise-libp2p-static-key:");return t instanceof Uint8Array?Oa([e,t],e.length+t.length):(t.prepend(e),t)}class Rx extends gp{stream;handshake;metrics;decoder;constructor(e,n,r){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=n,this.metrics=r,this.decoder=new qS({lengthDecoder:Bs,maxBufferSize:16*1024*1024,encodingLength:()=>2});const o=c=>{try{for(const l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);const s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);const i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);const a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){const n=new se;for(let r=0;r<e.byteLength;r+=Wd){let o=r+Wd;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(r,o)):s=this.handshake.encrypt(e.sublist(r,o)),this.metrics?.encryptedPackets.increment(),n.append(Ls(s.byteLength)),n.append(s)}return n}decrypt(e){const n=new se;for(let r=0;r<e.byteLength;r+=co){let o=r+co;if(o>e.byteLength&&(o=e.byteLength),o-Gd<r)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(r,o):s=e.sublist(r,o);const i=e.subarray(r,o-Gd);try{const a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),n.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return n}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}}function eu(t,e,n){return new Rx(t,e,n)}async function Tx(t,e){const{log:n,connection:r,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=t,d=await Ap(s,a.publicKey,l),u=new Ep({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});bp(u.s,n),n.trace("Stage 0 - Initiator starting to send first message."),await r.write(u.writeMessageA(nr),e),n.trace("Stage 0 - Initiator finished sending first message."),vp(u.e,n),n.trace("Stage 1 - Initiator waiting to receive first message from responder...");const f=u.readMessageB(await r.read(e));n.trace("Stage 1 - Initiator received the message."),Sp(u.re,n),vx(u.rs,n),n.trace("Initiator going to check remote's signature...");const h=await kp(f,u.rs,c);n.trace("All good with the signature!"),n.trace("Stage 2 - Initiator sending third handshake message."),await r.write(u.writeMessageC(d),e),n.trace("Stage 2 - Initiator sent message with signed payload.");const[g,m]=u.ss.split();return xp(g,m,n),{payload:h,encrypt:b=>g.encryptWithAd(nr,b),decrypt:(b,w)=>m.decryptWithAd(nr,b,w)}}async function Px(t,e){const{log:n,connection:r,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=t,d=await Ap(s,a.publicKey,l),u=new Ep({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});bp(u.s,n),n.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await r.read(e)),n.trace("Stage 0 - Responder received first message."),Sp(u.re,n),n.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await r.write(u.writeMessageB(d),e),n.trace("Stage 1 - Responder sent the second handshake message with signed payload."),vp(u.e,n),n.trace("Stage 2 - Responder waiting for third handshake message...");const f=u.readMessageC(await r.read(e));n.trace("Stage 2 - Responder received the message, finished handshake.");const h=await kp(f,u.rs,c),[g,m]=u.ss.split();return xp(g,m,n),{payload:h,encrypt:b=>m.encryptWithAd(nr,b),decrypt:(b,w)=>g.decryptWithAd(nr,b,w)}}class Nx{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,n={}){const{staticNoiseKey:r,extensions:o,crypto:s,prologueBytes:i}=n,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");const c=s??wx;this.crypto=yx(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?bx(a):void 0,r?this.staticKey=c.generateX25519KeyPairFromSeed(r):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??je(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Wm]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,n){const r=e.log?.newScope("noise")??this.log,o=zd(e,{lengthEncoder:Ls,lengthDecoder:Bs,maxDataLength:co}),s=await this.performHandshakeInitiator(o,this.components.privateKey,r,n?.remotePeer?.publicKey,n),i=Wa(s.payload.identityKey);return{connection:eu(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:dr(i),streamMuxer:n?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;const n=this.components.upgrader.getStreamMuxers();if(n!=null)for(const r of e){const o=n.get(r);if(o!=null)return o}if(e.length)throw new jm("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,n){const r=e.log?.newScope("noise")??this.log,o=zd(e,{lengthEncoder:Ls,lengthDecoder:Bs,maxDataLength:co}),s=await this.performHandshakeResponder(o,this.components.privateKey,r,n?.remotePeer?.publicKey,n),i=Wa(s.payload.identityKey);return{connection:eu(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:dr(i),streamMuxer:n?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,n,r,o,s){let i;const a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await Tx({connection:e,privateKey:n,remoteIdentityKey:o,log:r.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,n,r,o,s){let i;const a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await Px({connection:e,privateKey:n,remoteIdentityKey:o,log:r.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}}function Lx(t={}){return e=>new Nx(e,t)}const Bx="termdock-e2ee-v1",ec=3600*1e3,tu=512*1024*1024,tc=4*1024*1024,Qo=()=>{},si=Object.assign(Qo,{enabled:!1,error:Qo,trace:Qo,newScope:()=>si});Object.freeze(si);async function Ip(){const t=await Z0();return{privateKey:t,peerId:dr(t.publicKey).toString()}}function _x(t){return btoa(String.fromCharCode(...ev(t.privateKey)))}function nu(t){if(t.length>512||!/^[A-Za-z0-9+/]+={0,2}$/.test(t))throw new Error("Invalid identity encoding");const e=Q0(Uint8Array.from(atob(t),n=>n.charCodeAt(0)));if(e.type!=="Ed25519")throw new Error("Only Ed25519 device identities are supported");return{privateKey:e,peerId:dr(e.publicKey).toString()}}class Rp{constructor(e=Qo){this.consumed=e}consumed;chunks=[];size=0;ended=!1;error;wake;push(e){if(this.ended)throw this.error??new Error("Byte stream closed");if(this.size+e.byteLength>tc)throw new Error("Secure stream buffer limit exceeded");this.chunks.push(e.slice()),this.size+=e.byteLength,this.wake?.()}end(e){this.ended=!0,this.error??=e,this.wake?.()}async*[Symbol.asyncIterator](){for(;;){if(this.error)throw this.error;const e=this.chunks.shift();if(e)this.size-=e.byteLength,yield e,this.consumed();else{if(this.ended)return;await new Promise(n=>{this.wake=n})}}}}class Ox extends gp{constructor(e,n){super({log:si,direction:n?"outbound":"inbound",maxReadBufferLength:tc,maxWriteBufferLength:tc}),this.duplex=e,this.finished=e.sink(this.outgoing).catch(r=>{this.abort(ur(r))}),this.readTransport()}duplex;outgoing=new Rp(()=>this.onMuxerDrain());finished;async readTransport(){try{for await(const e of this.duplex.source)this.onData(e.slice());this.onTransportClosed()}catch(e){this.onTransportClosed(ur(e))}}sendData(e){return this.outgoing.push(e.subarray()),{sentBytes:e.byteLength,canSendMore:!1}}sendReset(e){this.outgoing.end(e),this.duplex.close?.(e)}sendPause(){}sendResume(){}async close(){this.outgoing.end(),this.duplex.close?.(),this.onTransportClosed(),await this.finished}}function ur(t){return t instanceof Error?t:new Error("Secure transport failed")}class Dx extends Error{code="E2EE_REHANDSHAKE_REQUIRED";constructor(){super("Encrypted connection lifetime reached; establish a new handshake without replaying pending input")}}function Fx(t){const e=t?.maxAgeMs??ec,n=t?.maxBytesPerDirection??tu;if(!Number.isSafeInteger(e)||e<=0||e>ec||!Number.isSafeInteger(n)||n<=0||n>tu)throw new Error("Encrypted connection limits cannot exceed the production maximum");return{maxAgeMs:e,maxBytesPerDirection:n}}async function Mx(t){const{identity:e,duplex:n,initiator:r,targetPinnedPeerId:o,signal:s}=t,i=Fx(t.limits);if(typeof Reflect.get(Promise,"withResolvers")!="function"||typeof globalThis.crypto?.getRandomValues!="function")throw new Error("End-to-end encryption requires Node.js 22+ or a modern browser with Promise.withResolvers and secure random support");if(r&&!o)throw new Error("A pinned target identity is required");const a=o?ov(o):void 0;if(a&&a.type!=="Ed25519")throw new Error("Only Ed25519 target identities are supported");if(e.peerId!==dr(e.privateKey.publicKey).toString())throw new Error("Local identity mismatch");if(s?.aborted)throw s.reason??new Error("Connection aborted");const c=new Ox(n,r),l=new AbortController,d=setTimeout(()=>{const h=new Error("Encrypted handshake timed out");l.abort(h),c.abort(h)},15e3),u=()=>{l.abort(s?.reason),c.abort(ur(s?.reason))};s?.addEventListener("abort",u,{once:!0}),c.addEventListener("close",()=>s?.removeEventListener("abort",u),{once:!0});const f=Lx({crypto:yp,prologueBytes:new TextEncoder().encode(Bx)})({privateKey:e.privateKey,peerId:dr(e.privateKey.publicKey),logger:{forComponent:()=>si},upgrader:{getStreamMuxers:()=>new Map}});try{const h=await(r?f.secureOutbound(c,{remotePeer:a,signal:l.signal,skipStreamMuxerNegotiation:!0}):f.secureInbound(c,{remotePeer:a,signal:l.signal,skipStreamMuxerNegotiation:!0}));if(h.remotePeer.type!=="Ed25519")throw new Error("Unsupported remote identity");return{authenticatedPeerId:h.remotePeer.toString(),duplex:jx(h.connection,i)}}catch(h){throw c.abort(ur(h)),h}finally{clearTimeout(d),s?.removeEventListener("abort",u)}}function jx(t,e){const n=new Rp,r=performance.now(),o=Date.now();let s=0,i=0,a;const c=()=>(a??=new Dx,n.end(a),t.abort(a),a),l=setTimeout(c,e.maxAgeMs);typeof l=="object"&&l.unref?.();const d=(f,h)=>{if(a)throw a;if(Math.max(performance.now()-r,Date.now()-o)>=e.maxAgeMs||f+h>=e.maxBytesPerDirection)throw c()};t.addEventListener("message",f=>{try{d(i,f.data.byteLength),i+=f.data.byteLength,n.push(f.data.subarray())}catch(h){t.abort(ur(h))}}),t.addEventListener("close",f=>{clearTimeout(l),n.end(f.error)},{once:!0});let u=!1;return{source:n,async sink(f){if(u)throw new Error("Secure sink already consumed");u=!0;try{for await(const h of f)d(s,h.byteLength),s+=h.byteLength,t.send(h)||await t.onDrain()}catch(h){throw t.abort(ur(h)),h}},close(f){f?t.abort(f):t.close()}}}const Tp=1012,Pp="Encrypted transport renewed";class ul{constructor(e=64){this.limit=e}limit;items=[];wake;ended=!1;error;push(e){if(this.ended)throw new Error("Channel closed");if(this.items.length>=this.limit)throw this.end(new Error("Channel queue exceeded")),this.error;this.items.push(e),this.wake?.()}end(e){this.ended=!0,this.error??=e,this.wake?.()}async*[Symbol.asyncIterator](){for(;;){if(this.error)throw this.error;const e=this.items.shift();if(e!==void 0){yield e;continue}if(this.ended)return;await new Promise(n=>{this.wake=n}),this.wake=void 0}}}const $i=2*1024*1024,Ux=new TextEncoder,$x=new TextDecoder("utf-8",{fatal:!0});class Hx{constructor(e){this.duplex=e;const n=this;this.done=e.sink((async function*(){for await(const r of n.outgoing)try{yield r}finally{n.outgoingBytes-=r.byteLength}})()),this.done.catch(r=>this.close(r instanceof Error?r:new Error("Transport failed")))}duplex;outgoing=new ul(256);outgoingBytes=0;get hasPendingWrites(){return this.outgoingBytes>0}done;send(e){const n=Ux.encode(JSON.stringify(e));if(n.length>$i)throw new Error("Record too large");const r=new Uint8Array(n.length+4);if(new DataView(r.buffer).setUint32(0,n.length),r.set(n,4),this.outgoingBytes+r.byteLength>4*1024*1024)throw new Error("Record queue byte budget exceeded");this.outgoingBytes+=r.byteLength;try{this.outgoing.push(r)}catch(o){throw this.outgoingBytes-=r.byteLength,o}}close(e){this.outgoing.end(e),this.duplex.close?.(e)}async*read(){let e=new Uint8Array(0);for await(const n of this.duplex.source){if(e.length+n.length>$i*2+8)throw new Error("Record buffer exceeded");const r=new Uint8Array(e.length+n.length);for(r.set(e),r.set(n,e.length),e=r;e.length>=4;){const o=new DataView(e.buffer,e.byteOffset,4).getUint32(0);if(o>$i||o===0)throw new Error("Invalid record size");if(e.length<o+4)break;const s=JSON.parse($x.decode(e.subarray(4,o+4)));if(!s||typeof s!="object"||typeof s.id!="string"||typeof s.type!="string")throw new Error("Invalid record");yield s,e=e.slice(o+4)}}if(e.length)throw new Error("Truncated record")}}function Np(t){let e="";for(let n=0;n<t.length;n+=8192)e+=String.fromCharCode(...t.subarray(n,n+8192));return btoa(e)}function Lp(t){const e=atob(t);return Uint8Array.from(e,n=>n.charCodeAt(0))}function qx(t){const e=new ul(64);t.binaryType="arraybuffer";const n=r=>{e.end(r),t.close(1e3)};return t.addEventListener("message",r=>{try{if(!(r.data instanceof ArrayBuffer)||r.data.byteLength>1024*1024)throw new Error("Invalid encrypted frame");e.push(new Uint8Array(r.data))}catch{n(new Error("Encrypted transport rejected frame"))}}),t.addEventListener("close",()=>e.end()),t.addEventListener("error",()=>e.end(new Error("Encrypted transport disconnected"))),{source:e,close:n,async sink(r){try{for await(const o of r)for(let s=0;s<o.length;s+=64*1024){const i=Date.now();for(;t.bufferedAmount>256*1024;){if(t.readyState!==1||Date.now()-i>15e3)throw new Error("Encrypted transport congested");await new Promise(a=>setTimeout(a,10))}if(t.readyState!==1)throw new Error("Encrypted transport closed");t.send(o.subarray(s,s+64*1024))}}catch(o){throw n(o instanceof Error?o:new Error("Encrypted transport failed")),o}}}}const Bp=8,_p=128,Kx=5*1024*1024,zx=_p+Bp+8,Wx=256,$o=3e4,Lr=64*1024;function qt(t){return t instanceof Error?t:new Error(String(t??"Secure connection closed"))}function ru(t){if(!t.startsWith("/")||t.startsWith("//")||t.includes("#"))throw new Error("A local API path is required");return t}class Op extends EventTarget{constructor(e,n,r){super(),this.url=e,this.transmit=n,this.disconnect=r}url;transmit;disconnect;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;binaryType="arraybuffer";bufferedAmount=0;protocol="termdock-e2ee-v1";extensions="";readyState=0;onopen=null;onmessage=null;onerror=null;onclose=null;send(e){if(this.readyState!==1)throw new Error("Secure socket is not open");if(typeof e!="string"||new TextEncoder().encode(e).length>1024*1024)throw new Error("Unsupported socket payload");this.transmit(e)}close(e=1e3,n=""){this.readyState!==3&&(this.disconnect(),this.finish(e,n))}accept(e){if(this.readyState!==3)if(e.type==="ws-ready"){this.readyState=1;const n=new Event("open");this.dispatchEvent(n),this.onopen?.(n)}else if(e.type==="ws-data"&&typeof e.data=="string"){const n=new MessageEvent("message",{data:e.data});this.dispatchEvent(n),this.onmessage?.(n)}else e.type==="ws-close"?this.finish(typeof e.code=="number"?e.code:1e3,typeof e.reason=="string"?e.reason:""):e.type==="error"&&this.fail(qt(e.error))}fail(e){if(this.readyState===3)return;const n=new Event("error");this.dispatchEvent(n),this.onerror?.(n),this.finish(1006,e.message)}finish(e,n){if(this.readyState===3)return;this.readyState=3;const r=new CloseEvent("close",{code:e,reason:n,wasClean:e===1e3});this.dispatchEvent(r),this.onclose?.(r)}}class Gx{constructor(e,n,r){this.channel=e,this.identity=n,this.targetPeerId=r,this.read().catch(o=>this.close(qt(o))),e.done.catch(o=>this.close(qt(o)))}channel;identity;targetPeerId;establishedAt=performance.now();establishedWallTime=Date.now();lastInputAt=-1/0;pending=new Map;waiting=[];stopped=!1;closeReason;get canSwitchTransport(){return!this.channel.hasPendingWrites&&performance.now()-this.lastInputAt>=2e3&&![...this.pending.values()].some(e=>e.kind!=="socket")&&!this.waiting.some(e=>e.kind!=="socket")}get renewalDue(){return!this.stopped&&Math.max(performance.now()-this.establishedAt,Date.now()-this.establishedWallTime)>=ec-5*6e4}get closed(){return this.stopped}hasCapacity(e){if(this.pending.size>=zx)return!1;const n=[...this.pending.values()].filter(r=>r.kind===e).length;return e==="http"?n<Bp:e==="socket"?n<_p:!0}allocate(e){if(this.stopped)throw this.closeReason??new Error("Secure connection closed");const n=crypto.randomUUID(),r=new ul(4);return this.pending.set(n,{queue:r,kind:e}),{id:n,queue:r}}reserve(e,n){return n?.aborted?Promise.reject(n.reason):this.stopped?Promise.reject(this.closeReason??new Error("Secure connection closed")):this.hasCapacity(e)?Promise.resolve(this.allocate(e)):this.waiting.length>=Wx?Promise.reject(new Error("连接繁忙,请稍后重试。")):new Promise((r,o)=>{const s=l=>{this.waiting=this.waiting.filter(d=>d!==c),c.cleanup(),o(l)},i=()=>s(n?.reason??new Error("Request aborted")),a=setTimeout(()=>s(new Error("连接等待超时,请重试。")),$o),c={kind:e,resolve:r,reject:o,cleanup:()=>{clearTimeout(a),n?.removeEventListener("abort",i)}};this.waiting.push(c),n?.addEventListener("abort",i,{once:!0})})}dispatchWaiting(){if(!this.stopped)for(let e=0;e<this.waiting.length;){const n=this.waiting[e];if(!this.hasCapacity(n.kind)){e++;continue}this.waiting.splice(e,1),n.cleanup(),n.resolve(this.allocate(n.kind))}}async read(){try{for await(const e of this.channel.read()){const n=this.pending.get(e.id);n&&(n.socket?(n.socket.accept(e),(e.type==="ws-close"||e.type==="error")&&this.release(e.id)):(n.queue.push(e),(e.type==="end"||e.type==="error")&&(n.cancelUpload?.(),this.release(e.id))))}}finally{this.close(new Error("Secure connection closed"))}}release(e){this.pending.get(e)?.queue.end(),this.pending.delete(e),this.dispatchWaiting()}async request(e,n){const{id:r,queue:o}=await this.reserve("request"),s=setTimeout(()=>this.close(new Error("Secure connection timed out")),Math.max(1e3,Math.min($o,n?.timeoutMs??$o)));try{if(this.stopped)throw this.closeReason;this.channel.send({...e,id:r});const i=(await o[Symbol.asyncIterator]().next()).value;if(!i)throw new Error("Secure request closed");if(i.type==="error")throw qt(i.error);return i}finally{clearTimeout(s),this.release(r)}}openSocket(e){ru(e);let n;const r=new AbortController,o=new Op(e,s=>{if(n){try{JSON.parse(s)?.type==="input"&&(this.lastInputAt=performance.now())}catch{}this.channel.send({id:n,type:"ws-data",data:s})}},()=>{if(r.abort(),n)try{this.channel.send({id:n,type:"ws-close"})}finally{this.release(n)}});return this.reserve("socket",r.signal).then(s=>{if(n=s.id,o.readyState===3){this.release(n);return}const i=this.pending.get(n);if(!i)throw new Error("Secure connection closed");i.socket=o,this.channel.send({id:n,type:"ws-open",path:e})}).catch(s=>{n&&this.release(n),o.fail(qt(s))}),o}async fetch(e,n){const r=typeof location>"u"?"https://termdock.invalid":location.origin,o=e instanceof Request?e:null,s=new URL(o?.url??String(e),r);if(s.origin!==r)throw new Error("Only current-service API requests are supported");const i=new Request(s,o?new Request(o,n):n),a=i.method.toUpperCase(),c=ru(s.pathname+s.search),l=s.pathname==="/api/terminal/fs/upload"?110*1024*1024:Kx;if(i.signal.aborted)throw i.signal.reason;const d={};i.headers.forEach((k,L)=>{["cookie","authorization","host","connection","content-length"].includes(L)||(d[L]=k)});const{id:u,queue:f}=await this.reserve("http",i.signal),h=f[Symbol.asyncIterator]();let g;const m=()=>{g?.cancel().catch(()=>{})},b=this.pending.get(u);if(!b)throw new Error("Secure connection closed");b.cancelUpload=m;const w=()=>{m();try{this.channel.send({id:u,type:"cancel"})}catch{}f.end(qt(i.signal.reason??"Request aborted")),this.release(u)};i.signal.addEventListener("abort",w,{once:!0});const I=()=>{i.signal.removeEventListener("abort",w),this.release(u)},y=async()=>{let k;try{const L=(await Promise.race([h.next(),new Promise((C,T)=>{k=setTimeout(()=>T(new Error("服务响应超时,请重试。")),$o)})])).value;if(!L)throw new Error("Secure response ended unexpectedly");if(L.type==="error")throw qt(L.error);return L}finally{clearTimeout(k)}};try{if(i.signal.aborted)throw i.signal.reason;if(this.channel.send({id:u,type:"http",method:a,path:c,headers:d}),i.body){const x=i.body.getReader();g=x;let v=0,A=0;try{for(;;){const{done:N,value:D}=await x.read();if(N)break;if(v+=D.byteLength,v>l)throw new Error("Request body exceeds upload limit");for(let E=0;E<D.byteLength;E+=Lr){if(this.channel.send({id:u,type:"upload",data:Np(D.subarray(E,E+Lr))}),(await y()).type!=="upload-ack")throw new Error("Invalid upload acknowledgement");A+=Math.min(Lr,D.byteLength-E),n?.onUploadProgress?.(A)}}}catch(N){throw await x.cancel(N).catch(()=>{}),N}finally{g=void 0,x.releaseLock()}}if(i.signal.aborted||this.stopped)throw new Error("Request aborted");this.channel.send({id:u,type:"upload-end"});const k=await y();if(k.type!=="head"||typeof k.status!="number")throw new Error("Invalid response header");const L=new Headers(k.headers);if(a==="HEAD"||[204,205,304].includes(k.status)){if((await y()).type!=="end")throw new Error("Unexpected response body");return I(),new Response(null,{status:k.status,headers:L})}let C=!1;const T=new ReadableStream({pull:async x=>{try{C&&(this.channel.send({id:u,type:"ack"}),C=!1);const v=await y();if(v.type==="end"){x.close(),I();return}if(v.type!=="chunk"||typeof v.data!="string")throw new Error("Invalid response chunk");const A=Lp(v.data);if(A.length>Lr)throw new Error("Response chunk exceeds budget");x.enqueue(A),C=!0}catch(v){x.error(v),w(),I()}},cancel:()=>{w(),I()}},{highWaterMark:Lr,size:x=>x.byteLength});return new Response(T,{status:k.status,headers:L})}catch(k){throw w(),I(),k}}retire(){for(const e of this.pending.values())e.socket?.accept({id:"",type:"ws-close",code:Tp,reason:Pp});this.close()}close(e=new Error("Secure connection closed")){if(!this.stopped){this.stopped=!0,this.closeReason=e;for(const n of this.waiting.splice(0))n.cleanup(),n.reject(e);for(const n of this.pending.values())n.queue.end(e),n.cancelUpload?.(),n.socket?.fail(e);this.pending.clear(),this.channel.close(e)}}}async function yn(t){const e=new URL(t.url);if(!["wss:","ws:"].includes(e.protocol))throw new Error("A WebSocket endpoint is required");if(e.protocol==="ws:"&&!["127.0.0.1","localhost","[::1]"].includes(e.hostname))throw new Error("Remote secure channels require WSS");const n=t.identity??await Ip(),r=(t.socketFactory??(c=>new WebSocket(c)))(e.href),o=qx(r),s=new AbortController,i=setTimeout(()=>s.abort(new Error("Secure handshake timed out")),2e4),a=t.signal?AbortSignal.any([t.signal,s.signal]):s.signal;try{await new Promise((d,u)=>{if(a.aborted){u(a.reason);return}const f=()=>{a.removeEventListener("abort",m),r.removeEventListener("open",h),r.removeEventListener("error",g),r.removeEventListener("close",g)},h=()=>{f(),d()},g=()=>{f(),u(new Error("Secure transport unavailable"))},m=()=>{f(),u(a.reason)};a.addEventListener("abort",m,{once:!0}),r.addEventListener("open",h),r.addEventListener("error",g),r.addEventListener("close",g),r.readyState===1&&h()});const c=await Mx({identity:n,duplex:o,initiator:!0,targetPinnedPeerId:t.targetPeerId,signal:a}),l=new Gx(new Hx(c.duplex),n,c.authenticatedPeerId);if(t.pairingCode)try{await l.request({type:"pair",code:t.pairingCode})}catch(d){throw l.close(qt(d)),d}return l}catch(c){throw r.close(),c}finally{clearTimeout(i)}}const ou=256*1024,Vx=1024*1024;class Xx extends EventTarget{constructor(e,n,r=o=>new WebSocket(o)){if(super(),this.url=e,!/^[a-zA-Z0-9_.:-]{1,160}$/.test(n))throw new Error("Invalid target identity");this.upstream=r(e),this.deadline=setTimeout(()=>this.fail("Relay connection timed out"),2e4),this.upstream.addEventListener("message",o=>{if(this.readyState!==3)try{if(typeof o.data!="string"||new TextEncoder().encode(o.data).length>ou)throw new Error("Invalid relay envelope");const s=JSON.parse(o.data);if(s.type==="ready"&&!this.requested){this.requested=!0,this.transmit({type:"open",streamId:this.streamId,serviceId:n});return}if(s.streamId!==this.streamId)return;if(s.type==="opened"&&this.readyState===0){clearTimeout(this.deadline),this.readyState=1;const l=new Event("open");this.dispatchEvent(l),this.onopen?.(l);return}if(s.type==="close"){this.finish(1001,"Relay route closed"),this.upstream.close();return}if(s.type!=="data"||this.readyState!==1||s.encoding!=="base64"||typeof s.payload!="string"||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(s.payload))throw new Error("Invalid ciphertext relay frame");const i=Lp(s.payload),a=this.binaryType==="blob"?new Blob([i]):i.buffer,c=new MessageEvent("message",{data:a});this.dispatchEvent(c),this.onmessage?.(c)}catch{this.fail("Relay protocol rejected frame")}}),this.upstream.addEventListener("close",o=>this.finish(o.code||1006,"Relay disconnected")),this.upstream.addEventListener("error",()=>this.fail("Relay transport unavailable"))}url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;protocol="";extensions="";binaryType="arraybuffer";readyState=0;onopen=null;onmessage=null;onerror=null;onclose=null;upstream;streamId=crypto.randomUUID();requested=!1;deadline;get bufferedAmount(){return this.upstream.bufferedAmount}transmit(e){const n=JSON.stringify(e);if(this.upstream.readyState!==1||this.upstream.bufferedAmount+n.length>Vx||n.length>ou)throw new Error("Relay unavailable or congested");this.upstream.send(n)}send(e){if(this.readyState!==1)throw new Error("Relay socket is not open");let n;if(ArrayBuffer.isView(e))n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);else if(e instanceof ArrayBuffer)n=new Uint8Array(e);else throw new Error("Relay secure transport requires binary bytes");try{this.transmit({type:"data",streamId:this.streamId,encoding:"base64",payload:Np(n)})}catch(r){throw this.fail("Relay transport congested"),r}}close(e=1e3,n=""){if(this.readyState!==3){try{this.requested&&this.transmit({type:"close",streamId:this.streamId})}catch{}this.finish(e,n),this.upstream.close()}}fail(e){if(this.readyState===3)return;const n=new Event("error");this.dispatchEvent(n),this.onerror?.(n),this.finish(1006,e),this.upstream.close()}finish(e,n){if(this.readyState===3)return;clearTimeout(this.deadline),this.readyState=3;const r=new CloseEvent("close",{code:e,reason:n,wasClean:e===1e3});this.dispatchEvent(r),this.onclose?.(r)}}function Dp(t){return e=>new Xx(e,t)}function Yx(t){if(typeof t!="string"||!t.startsWith("/api/")||/[\\\x00-\x20\x7f#]/.test(t))return null;const e=t.split("?")[0];if(e.includes("//"))return null;try{const r=e.split("/").map((o,s)=>{if(s===0||o===""&&s===e.split("/").length-1)return o;const i=decodeURIComponent(o);if(!i||i==="."||i===".."||/[\\/\x00-\x1f\x7f]/.test(i)||/%[a-f0-9]{2}/i.test(i))throw new Error("Ambiguous API path");return i}).join("/");return r.endsWith("/")&&!r.startsWith("/api/terminal/fs/preview/")?null:r}catch{return null}}function Zx(t){if(!("serviceWorker"in navigator))return()=>{};const e=new Set,n=r=>{if(r.source!==navigator.serviceWorker.controller||r.data?.type!=="termdock-secure-fetch"||r.ports.length!==1)return;const o=r.ports[0],{path:s,method:i,headers:a,body:c,expectedTargetPeerId:l,previewPrefix:d}=r.data;let u;try{u=new URL(s,location.origin)}catch{o.close();return}if(u.origin!==location.origin||!u.pathname.startsWith("/api/")||e.size>=32||typeof i!="string"||c!==void 0&&(!(c instanceof ArrayBuffer)||c.byteLength>5*1024*1024)){o.postMessage({type:"error"}),o.close();return}if(d!==void 0&&(typeof d!="string"||!d.endsWith("/")||!/^\/api\/terminal\/fs\/preview\/[a-f0-9]{32}\//.test(d)||!["GET","HEAD"].includes(i)||!Yx(u.pathname)?.startsWith(d))){o.postMessage({type:"error"}),o.close();return}const f=new AbortController;let h,g,m=!1,b=!1;const w=()=>{b||(b=!0,e.delete(w),f.abort(),h?.cancel().catch(()=>{}),o.close())};e.add(w),o.onmessage=I=>{if(I.data?.type==="cancel"){w();return}I.data?.type!=="pull"||m||b||(m=!0,(async()=>{if(!h){o.postMessage({type:"end"}),w();return}if(!g?.length){const k=await h.read();if(k.done){o.postMessage({type:"end"}),w();return}g=k.value}const y=g.slice(0,64*1024);g=g.subarray(y.length),o.postMessage({type:"chunk",data:y.buffer},[y.buffer])})().catch(()=>{o.postMessage({type:"error"}),w()}).finally(()=>{m=!1}))},o.onmessageerror=w,o.start(),(async()=>{const I=await t();if(b)return;if(l&&l!==I.targetPeerId)throw new Error("Preview target changed");const y=await I.fetch(u.pathname+u.search,{method:i,headers:a,body:["GET","HEAD"].includes(i)?void 0:c,signal:f.signal});if(b){await y.body?.cancel();return}h=y.body?.getReader();const k={};y.headers.forEach((L,C)=>{k[C]=L}),o.postMessage({type:"head",status:y.status,headers:k,bodyless:!h,targetPeerId:I.targetPeerId})})().catch(()=>{b||(o.postMessage({type:"error"}),w())})};return navigator.serviceWorker.addEventListener("message",n),()=>{navigator.serviceWorker.removeEventListener("message",n);for(const r of[...e])r()}}class Ze extends Error{constructor(){super("Device authorization expired or revoked")}}const Ho=new WeakMap;function yr(t,e={}){const n=Ho.get(t);if(!t.closed&&n&&(!n.settled||Date.now()-n.at<(e.maxAgeMs??1e3)))return n.pending;const r={at:Date.now(),settled:!1,pending:void 0},o=Jx(t,e.timeoutMs??5e3).then(s=>(r.at=Date.now(),r.settled=!0,s),s=>{throw Ho.get(t)===r&&Ho.delete(t),s});return r.pending=o,Ho.set(t,r),o}async function Jx(t,e){const n=await t.request({type:"permissions"},{timeoutMs:e});if(n.type!=="result"||typeof n.fullService!="boolean"||!Array.isArray(n.grants))throw new Error("Invalid permission response");const r=n.grants,o=n.fullService===!0;if(!o&&r.length===0)throw new Ze;return{fullService:o,grants:r,canManage:o&&r.length>0||r.some(s=>s.actions.includes("authorization.manage"))}}const Fp="termdock-secure-last-path:",Qx=10*6e4;function Mp(t){try{const e=JSON.parse(sessionStorage.getItem(Fp+t)||"null");return e&&typeof e.key=="string"&&Date.now()-e.at<Qx?e.key:void 0}catch{return}}function nc(t,e){try{sessionStorage.setItem(Fp+t,JSON.stringify({key:e,at:Date.now()}))}catch{}}function jp(t,e,n=!1){return new Promise((r,o)=>{let s=0,i=0,a=!1,c,l;const d=new Set,u=()=>{clearTimeout(l);for(const h of d)h.abort();d.clear()},f=()=>{if(a)return;if(s>=t.length){i||(a=!0,u(),o(c||new Error("没有可用的连接路线。")));return}if(i>=(n?1:2))return;const h=t[s++],g=performance.now(),m=w=>{performance.getEntriesByName("termdock:connection-path").length>64&&performance.clearMeasures("termdock:connection-path"),performance.measure("termdock:connection-path",{start:g,end:performance.now(),detail:{path:h.key.startsWith("relay:")?"relay":"direct",ok:w}})},b=new AbortController;d.add(b),i++,h.run(b.signal).then(w=>{if(m(!0),d.delete(b),a){e(w);return}a=!0,u(),r({value:w,key:h.key})},w=>{if(m(!1),d.delete(b),i--,!a){if(c=w,w instanceof Ze){a=!0,u(),o(w);return}f()}}),clearTimeout(l),!n&&s<t.length&&(l=setTimeout(f,400))};f()})}const eE=3,tE=1/0,nE=10,Up="termdock-secure-workspace-limit";function $p(t){return t===1/0||Number.isInteger(t)&&t>=3&&t<=nE}function rE(){try{const t=localStorage.getItem(Up),e=t==="unlimited"?1/0:Number(t);if($p(e))return e}catch{}return navigator.maxTouchPoints>0?eE:tE}function oE(t,e,n,r){if(t.length<=r)return t;const o=new Set(["root",e,...n?[n]:[]]),s=[...t].reverse().sort((i,a)=>a.touchedAt-i.touchedAt);for(const i of s){if(o.size>=r)break;o.add(i.key)}return t.filter(i=>o.has(i.key))}const Hp="termdock-workspace",lo="termdock:workspace-visibility",rc="termdock:workspace-activate";function ii(){return window.parent!==window&&location.pathname==="/workspace.html"&&new URLSearchParams(location.search).get(Hp)||"root"}let su,iu;function ht(){try{if(window.parent===window)return window.__termdockWorkspaceHost;const t=window.parent.__termdockWorkspaceHost;return t&&t!==su&&(su=t,iu={...t,subscribe(e){const n=t.subscribe(e,ii()),r=o=>{o.persisted||n()};return window.addEventListener("pagehide",r),()=>{n(),window.removeEventListener("pagehide",r)}}}),t?iu:void 0}catch{return}}function es(){const t=ht();return!t||t.snapshot().activeKey===ii()}function Ds(t,e=!0){return ht()?.activate(t,e)??!1}function Mn(t){ht()?.report(ii(),t)}const oc="termdock-secure-workspace-session:",qp="termdock-secure-last-workspace";function sE(){for(const t of["sessionStorage","localStorage"])try{const e=window[t].getItem(qp);if(e)return e}catch{}return null}function iE(t){for(const e of["sessionStorage","localStorage"])try{window[e].setItem(qp,t)}catch{}}function QI(t){if(t)try{const e=JSON.parse(localStorage.getItem(oc+t)||"null");return localStorage.removeItem(oc+t),e&&typeof e.sessionId=="string"&&Date.now()-e.at<6e4?e.sessionId:void 0}catch{return}}function aE(t){if(window.parent!==window||window.termdockDesktop)return;if(window.__termdockWorkspaceHost)return window.__termdockWorkspaceHost;let e={activeKey:"root",items:[{key:"root",service:t,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()}]};try{const u=sE(),f=t&&u!==t.targetPeerId?Gt().find(h=>h.targetPeerId===u):void 0;f?.targetPeerId&&(e={activeKey:f.targetPeerId,items:[...e.items,{key:f.targetPeerId,service:f,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()}]})}catch{}let n=rE(),r=e.activeKey==="root"?"root":null;const o=new Map,s=new Map([["root",window]]),i=new Set,a=()=>{for(const u of[...o.keys()])u()},c=()=>{const u=oE(e.items,e.activeKey,r,n),f=new Set(u.map(h=>h.key));e={...e,items:u};for(const[h,g]of o)g&&!f.has(g)&&o.delete(h);for(const h of s.keys())f.has(h)||s.delete(h);for(const h of i)f.has(h)||i.delete(h)},l=(u,f)=>{try{const h=f.document.createEvent("CustomEvent");if(h.initCustomEvent(lo,!1,!1,{active:e.activeKey===u}),f.dispatchEvent(h),e.activeKey===u){const g=f.document.createEvent("Event");if(g.initEvent("resize",!1,!1),f.dispatchEvent(g),i.delete(u)){const m=f.document.createEvent("Event");m.initEvent(rc,!1,!1),f.dispatchEvent(m)}}else f.document.activeElement?.blur?.()}catch{}},d={snapshot:()=>e,subscribe:(u,f)=>(o.set(u,f),()=>{o.delete(u)}),present(u){r=u},retentionLimit:()=>n,setRetentionLimit(u){if($p(u)){n=u;try{localStorage.setItem(Up,u===1/0?"unlimited":String(u))}catch{}c(),a()}},activate(u,f=!0){const h=Ws(u);if(!h?.targetPeerId)return!1;const g=e.items.find(w=>w.service?.targetPeerId===h.targetPeerId),m=g?.key||h.targetPeerId,b=g?{...g,service:h,touchedAt:Date.now()}:{key:m,service:h,phase:"connecting",runningCount:0,reviewCount:0,touchedAt:Date.now()};e={activeKey:m,items:g?e.items.map(w=>w===g?b:w):[...e.items,b]},c(),iE(h.targetPeerId),f&&i.add(m),a();for(const[w,I]of s)l(w,I);return!0},report(u,f){const h=e.items.find(m=>m.key===u);if(!h||f.service&&h.service?.targetPeerId&&f.service.targetPeerId!==h.service.targetPeerId)return;const g={...h,...f};JSON.stringify(g)!==JSON.stringify(h)&&(e={...e,items:e.items.map(m=>m===h?g:m)},a())},attach(u,f){f&&e.items.some(h=>h.key===u)?(s.set(u,f),l(u,f)):s.delete(u)},focusSession(u,f){const h=Gt().find(m=>m.targetPeerId===u);if(!h)return!1;try{localStorage.setItem(oc+u,JSON.stringify({sessionId:f,at:Date.now()}))}catch{return!1}d.activate(h,!1);const g=s.get(e.activeKey);if(g){const m=g.document.createEvent("CustomEvent");m.initCustomEvent("termdock:workspace-session",!1,!1,null),g.dispatchEvent(m)}return!0}};return window.__termdockWorkspaceHost=d,d}let Hi;async function Qe(){return Hi||(Hi=(async()=>{const t=await new Promise((e,n)=>{const r=indexedDB.open("termdock-device-identity",1);r.onupgradeneeded=()=>r.result.createObjectStore("keys"),r.onsuccess=()=>e(r.result),r.onerror=()=>n(r.error)});try{const e=await new Promise((o,s)=>{const i=t.transaction("keys").objectStore("keys").get("identity");i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error)});if(e)return nu(e);const n=await Ip();let r=n;return await new Promise((o,s)=>{const i=t.transaction("keys","readwrite"),a=i.objectStore("keys"),c=a.get("identity");c.onsuccess=()=>{typeof c.result=="string"?r=nu(c.result):a.put(_x(n),"identity")},i.oncomplete=()=>o(),i.onerror=()=>s(i.error)}),r}finally{t.close()}})()),Hi}const ft="termdock:secure-state";let J,jn,_e,fr="direct",ts=!1,au=0,ns=!1,cu=-1/0;const hr=globalThis.fetch.bind(globalThis);function ne(){return Wn()}function Br(){return J}function cE(){return _e}function Kp(){J?.close(),_e?.close(),J=void 0,_e=void 0}async function zp(){const t=await hr("/api/auth/status",{signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error("Failed to query auth status");return t.json()}async function lE(){if(ne()){await st();return}if((await zp()).enabled)return;const t=await hr("/api/auth/open/parameters",{cache:"no-store"});if(!t.ok)throw new Error("Open service unavailable");const{serviceIdentity:e}=await t.json();if(typeof e!="string"||!e)throw new Error("Invalid service identity");await Ye({url:location.origin,targetPeerId:e,serviceName:location.hostname})}async function dE(t,e){const{startPasswordBootstrap:n,finishPasswordBootstrap:r}=await Yt(async()=>{const{startPasswordBootstrap:l,finishPasswordBootstrap:d}=await import("./passwordBootstrap-C0GT89S0.js");return{startPasswordBootstrap:l,finishPasswordBootstrap:d}},__vite__mapDeps([0,1,2,3])),o=l=>t===location.origin?l:new URL(l,t).href,s=async(l,d)=>{const u=await hr(o(l),{credentials:"omit",cache:"no-store",signal:AbortSignal.timeout(15e3),...d?{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}:{}});if(!u.ok)throw new Error(u.status===429?"尝试次数较多,请稍后再试。":u.status===401?"密码不正确,请重新输入。":"暂时无法登录这台服务,请稍后重试。");return u.json()},{saltHex:i}=await s("/api/auth/password/parameters"),a=await Qe(),c=await n(e,i);try{const l=await s("/api/auth/password/start",{startLoginRequest:c.startLoginRequest,clientIdentity:a.peerId});let d;try{d=await r(c,l,{clientIdentity:a.peerId,origin:location.origin})}catch{throw new Error("密码不正确,或服务身份无法验证。请检查后重试。")}return await s("/api/auth/password/finish",{attemptId:d.attemptId,finishLoginRequest:d.finishLoginRequest}),{url:t,targetPeerId:d.serverIdentity,serviceName:new URL(t).host,serviceOrigin:t}}finally{c.passwordKey=""}}async function fl(t,e){const n=ne();if(n&&(n.serviceOrigin||n.url)===t)return await sc(n,e),n;try{return await dE(t,e)}catch(r){if(!(r instanceof TypeError)&&!(r instanceof DOMException))throw r;const o=(await Je()).find(i=>i.targetPeerId&&(i.serviceOrigin||i.url)===t);if(!o?.targetPeerId)throw new Error("暂时连不上这台服务,请检查地址和网络。");const s={...o,targetPeerId:o.targetPeerId,serviceName:o.label};return await sc(s,e),s}}async function sc(t,e){const n=await Wp(t),{startPasswordBootstrap:r,finishPasswordBootstrap:o}=await Yt(async()=>{const{startPasswordBootstrap:i,finishPasswordBootstrap:a}=await import("./passwordBootstrap-C0GT89S0.js");return{startPasswordBootstrap:i,finishPasswordBootstrap:a}},__vite__mapDeps([0,1,2,3]));let s;try{const i=await n.request({type:"password-parameters"},{timeoutMs:5e3});s=await r(e,String(i.saltHex));const a=await n.request({type:"password-start",startLoginRequest:s.startLoginRequest,origin:location.origin}),c=await o(s,a,{clientIdentity:(await Qe()).peerId,origin:location.origin});if(c.serverIdentity!==t.targetPeerId)throw new Error("服务身份发生变化。");await n.request({type:"password-finish",attemptId:c.attemptId,finishLoginRequest:c.finishLoginRequest})}catch{throw new Error("暂时无法登录,请检查目标服务密码与入口授权后重试。")}finally{s&&(s.passwordKey=""),n.close()}}async function uE(t){try{const e=ne(),n=e?.serviceOrigin||location.origin,r=await fl(n,t);return await Ye({...r,routes:e?.routes,serviceName:e?.serviceName||r.serviceName}),Response.json({ok:!0})}catch(e){return Response.json({error:e instanceof Error?e.message:"暂时无法登录,请重试。",code:"INVALID_PASSWORD"},{status:401})}}async function lu(t,e){const n=Oe(t),r=(await Je()).find(i=>(i.serviceOrigin||i.url)===n&&i.targetPeerId);if(e===void 0&&r?.targetPeerId)try{return await Ye({...r,targetPeerId:r.targetPeerId,serviceName:r.label}),{}}catch(i){if(!(i instanceof Ze))throw i}if(e!==void 0){const i=await fl(n,e);if(r?.targetPeerId&&r.targetPeerId!==i.targetPeerId)throw new Error("这台服务的身份已改变。请先移除旧记录,再重新添加。");return await Ye({...i,routes:r?.routes,serviceName:r?.label||i.serviceName}),{}}const o=await hr(new URL("/api/auth/open/parameters",n).href,{credentials:"omit",cache:"no-store",signal:AbortSignal.timeout(1e4)}).catch(()=>{throw new Error("暂时连不上这台服务,请检查地址和网络后重试。")});if(o.status===403)return{passwordRequired:!0};if(!o.ok)throw new Error("这台服务暂时不可用,请稍后重试。");const{serviceIdentity:s}=await o.json();if(typeof s!="string"||!s)throw new Error("这不是可连接的 Termdock 服务。");if(r?.targetPeerId&&r.targetPeerId!==s)throw new Error("这台服务的身份已改变。请先移除旧记录,再重新添加。");return await Ye({url:n,targetPeerId:s,serviceName:r?.label||new URL(n).host,serviceOrigin:n}),{}}function Xt(t){const e=[...t.routes||[]];if(t.entryServiceId&&t.entryServiceId!==t.targetPeerId&&e.unshift({url:t.url,targetPeerId:t.entryServiceId}),!e.length&&t.routes===void 0)try{const n=JSON.parse(localStorage.getItem(Oc)||"null");n&&n.targetPeerId!==t.targetPeerId&&new URL(n.url).host===new URL(t.url).host&&e.push(n)}catch{}return e.flatMap((n,r)=>{try{return n.targetPeerId&&n.targetPeerId!==t.targetPeerId&&e.findIndex(o=>o.targetPeerId===n.targetPeerId)===r?[{url:Oe(n.url),targetPeerId:n.targetPeerId}]:[]}catch{return[]}}).slice(0,4)}function br(t){const e=Xt(t),n=[t.serviceOrigin||t.url,...(t.routes||[]).slice(0,4).filter(o=>o.targetPeerId===t.targetPeerId).map(o=>o.url)],r=new Set;for(const o of n)try{const s=Oe(o);e.some(i=>i.url===s)||r.add(s)}catch{}return[...r]}function bn(t){const e=new URL("/api/federation/secure",Oe(t));return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.href}async function Zt(t,e){return yn({url:bn(t.url),targetPeerId:t.targetPeerId,identity:await Qe(),signal:e?AbortSignal.any([e,AbortSignal.timeout(5e3)]):AbortSignal.timeout(5e3)})}async function Wp(t,e){const n=await Qe(),r=br(t).map(i=>({key:`direct:${i}`,run:a=>yn({url:bn(i),targetPeerId:t.targetPeerId,identity:n,signal:AbortSignal.any([a,AbortSignal.timeout(8e3),...e?[e]:[]])})}));for(const i of Xt(t))r.push({key:`relay:${i.targetPeerId}:${i.url}`,run:async a=>{e&&(a=AbortSignal.any([a,e]));const c=[J,_e].find(d=>d&&!d.closed&&d.targetPeerId===i.targetPeerId),l=c||await Zt(i,a);try{if(a.aborted)throw a.reason;const d=await l.request({type:"route-ticket",serviceId:t.targetPeerId},{timeoutMs:5e3});if(a.aborted)throw a.reason;if(typeof d.routeToken!="string")throw new Error("入口未允许此设备连接该服务。");const u=new URL(bn(i.url));return u.pathname="/api/federation/relay",u.searchParams.set("routeToken",d.routeToken),await yn({url:u.href,targetPeerId:t.targetPeerId,identity:n,socketFactory:Dp(t.targetPeerId),signal:AbortSignal.any([a,AbortSignal.timeout(8e3)])})}finally{c||l.close()}}});const o=Mp(t.targetPeerId);r.sort((i,a)=>+(a.key===o)-+(i.key===o));const s=await jp(r,i=>i.close());return nc(t.targetPeerId,s.key),s.value}async function fE(t,e){const n=await Wp(t,e),r=()=>n.close();e.addEventListener("abort",r,{once:!0});try{if(e.aborted||(await yr(n,{timeoutMs:3e3}),e.aborted))throw e.reason;return n}catch(o){throw n.close(),o}finally{e.removeEventListener("abort",r)}}async function Ye(t,e={}){const n=J,r=_e,o=await Qe(),s=Oe(t.serviceOrigin||t.url),i=(await Je()).find(w=>w.targetPeerId===t.targetPeerId),a={...t,routes:t.routes??i?.routes},c=Xt(a),l=br(a);let d,u,f=t.pairingCode,h="direct";const g=new Set,m=new Map,b=async(w,I)=>{if(n&&!n.closed&&n.targetPeerId===w.targetPeerId)return n;if(r&&!r.closed&&r.targetPeerId===w.targetPeerId)return r;const y=m.get(w.targetPeerId);if(y&&!y.closed)return y;const k=await Zt(w,I);return g.add(k),m.set(w.targetPeerId,k),k};try{if(t.routeCode&&t.entryServiceId){const x=c.find(N=>N.targetPeerId===t.entryServiceId);if(!x)throw new Error("邀请缺少入口信息。");if((await(await b(x)).request({type:"route-pair",code:t.routeCode})).serviceId!==t.targetPeerId)throw new Error("邀请的目标服务不一致。");t.routeOnly&&await Rt({id:t.targetPeerId,url:s,label:t.serviceName||new URL(s).host,targetPeerId:t.targetPeerId,serviceOrigin:s,routes:c})}const w=[],I=async(x,v)=>{const A=()=>x.close();v.addEventListener("abort",A,{once:!0});try{if(v.aborted||(await yr(x),v.aborted))throw v.reason}catch(N){throw x.close(),N}finally{v.removeEventListener("abort",A)}};for(const x of l)w.push({key:`direct:${x}`,run:async v=>{const A=await yn({url:bn(x),targetPeerId:t.targetPeerId,pairingCode:f,identity:o,signal:AbortSignal.any([v,AbortSignal.timeout(8e3)])});return f=void 0,await I(A,v),{client:A,path:"direct"}}});for(const x of c)w.push({key:`relay:${x.targetPeerId}:${x.url}`,run:async v=>{let A,N;try{if(A=await b(x,v),v.aborted)throw v.reason;const D=await A.request({type:"route-ticket",serviceId:t.targetPeerId},{timeoutMs:5e3});if(v.aborted)throw v.reason;if(typeof D.routeToken!="string"||!D.routeToken)throw new Error("入口未允许此设备连接该服务。");const E=new URL(bn(x.url));return E.pathname="/api/federation/relay",E.searchParams.set("routeToken",D.routeToken),N=await yn({url:E.href,targetPeerId:t.targetPeerId,pairingCode:f,identity:o,socketFactory:Dp(t.targetPeerId),signal:AbortSignal.any([v,AbortSignal.timeout(8e3)])}),f=void 0,await I(N,v),{client:N,entry:A,path:"relay"}}catch(D){throw N?.close(),A&&A!==r&&A!==n&&A.close(),D}}});const y=Mp(t.targetPeerId);w.sort((x,v)=>+(v.key===y)-+(x.key===y));const k=await jp(w,x=>{x.client.close(),x.entry&&x.entry!==n&&x.entry!==r&&x.entry.close()},!!f);if(d=k.value.client,u=k.value.entry,h=k.value.path,e.renewIfCurrent){if(J!==e.renewIfCurrent||n!==e.renewIfCurrent||n.closed||!n.canSwitchTransport||ne()?.targetPeerId!==t.targetPeerId){d.close();for(const x of g)x!==_e&&x!==J&&x.close();return J??n}J=d,fr=h,_e=u,nc(t.targetPeerId,k.key),n.retire();for(const x of new Set([r,...g]))x&&x!==n&&x!==d&&x!==u&&x.close();return window.dispatchEvent(new Event(ft)),d}if(nc(t.targetPeerId,k.key),J!==n&&J&&!J.closed&&J.targetPeerId===t.targetPeerId){d.close();for(const x of g)x!==_e&&x.close();return J}h==="direct"&&new URL(s).host===location.host&&Bm(t.targetPeerId);const L=(await Je()).find(x=>x.targetPeerId===t.targetPeerId||!x.targetPeerId&&(x.serviceOrigin||x.url)===s),C=L?.label||t.serviceName||new URL(s).host,T={url:s,targetPeerId:t.targetPeerId,serviceName:C,serviceOrigin:s,routes:a.routes??c};if(await(e.rememberOnly?Dm:Rt)({id:L?.id||t.targetPeerId,...T,label:C}),zn!=="unpaired"&&zn!==t.targetPeerId&&ht()&&Ds({id:L?.id||t.targetPeerId,...T,label:C})){d.close();for(const x of g)x!==n&&x!==r&&x.close();return n||d}kf(T),J=d,fr=h,_e=u;for(const x of new Set([n,r,...g]))x&&x!==d&&x!==u&&x.close();return zn!==t.targetPeerId?(location.reload(),new Promise(()=>{})):(window.dispatchEvent(new Event(ft)),d)}catch(w){d?.close();for(const I of g)I!==r&&I.close();throw w}}async function hE(){const t=J,e=ne();if(!(ns||ts||jn||!t?.renewalDue||!t.canSwitchTransport||!e||performance.now()-cu<3e4)){cu=performance.now(),ns=!0;try{await Ye(e,{renewIfCurrent:t})}catch(n){console.debug("[connection] renewal deferred",{reason:n instanceof Error?n.message:"unknown"})}finally{ns=!1}}}async function pE(){const t=J,e=ne();if(Date.now()-au<6e4||ns||ts||fr!=="relay"||!t||t.closed||!t.canSwitchTransport||!e?.serviceOrigin)return;ts=!0,au=Date.now();let n;try{for(const o of br(e))try{n=await yn({url:bn(o),targetPeerId:e.targetPeerId,identity:await Qe(),signal:AbortSignal.timeout(3e3)}),await yr(n);break}catch(s){if(n?.close(),n=void 0,s instanceof Ze)throw s}if(!n||J!==t||!t.canSwitchTransport)return;const r=_e;J=n,n=void 0,_e=void 0,fr="direct",t.close(),r?.close(),window.dispatchEvent(new Event(ft))}catch(r){r instanceof Ze&&J===t&&(Kp(),window.dispatchEvent(new Event("auth:unauthorized")))}finally{n?.close(),ts=!1}}function gE(){return fr}async function mE(t){return t?(t.throwIfAborted(),new Promise((e,n)=>{const r=()=>n(t.reason);t.addEventListener("abort",r,{once:!0}),st().then(o=>{t.removeEventListener("abort",r),t.aborted?n(t.reason):e(o)},o=>{t.removeEventListener("abort",r),n(o)})})):st()}async function st(){if(J&&!J.closed){const e=J;return hE(),e}if(J=void 0,jn)return jn;const t=ne();if(!t)throw new Error("DEVICE_PAIRING_REQUIRED");return jn=Ye(t,{rememberOnly:!0}).catch(e=>{if(J&&!J.closed&&J.targetPeerId===t.targetPeerId)return J;throw e}).finally(()=>{jn=void 0}),jn}function Gp(t){const e=new URL(t,location.href);if(J&&!J.closed)return J.openSocket(e.pathname+e.search);let n;const r=new Op(t,o=>n?.send(o),()=>n?.close());return st().then(o=>{r.readyState!==3&&(n=o.openSocket(e.pathname+e.search),n.onopen=()=>r.accept({type:"ws-ready",id:""}),n.onmessage=s=>r.accept({type:"ws-data",id:"",data:s.data}),n.onclose=s=>r.accept({type:"ws-close",id:"",code:s.code,reason:s.reason}),n.onerror=()=>r.fail(new Error("Encrypted connection unavailable")))}).catch(o=>r.fail(o)),r}function wE(){Zx(st),window.fetch=async(t,e)=>{const n=new URL(t instanceof Request?t.url:String(t),location.href);if(!n.pathname.startsWith("/api/"))return hr(t,e);if(n.origin!==location.origin)throw new Error("Remote business API requires a paired encrypted service");if(n.pathname==="/api/meta")return hr(t,e);if(n.pathname==="/api/auth/status"){if(!ne()){const s=await zp();return Response.json({enabled:s.enabled,authenticated:!1})}try{const s=await yr(await st());return Response.json({enabled:s.grants.length>0,authenticated:!0})}catch(s){if(s instanceof Ze)return Response.json({enabled:!0,authenticated:!1});throw s}}if(n.pathname==="/api/auth/login"){const i=await new Request(t instanceof Request?t:n.href,e).json();return uE(typeof i.password=="string"?i.password:"")}if(n.pathname==="/api/csrf-token")return Response.json({csrfToken:"encrypted-device-channel"});if(n.pathname==="/api/auth/logout")return J&&!J.closed&&await J.request({type:"logout"}),J?.close(),_e?.close(),J=void 0,_e=void 0,Lm(),location.reload(),Response.json({ok:!0});const r=e?.signal!==void 0?e.signal:t instanceof Request?t.signal:void 0,o=await mE(r);return t instanceof Request?o.fetch(t,e):o.fetch(n.pathname+n.search,e)}}async function yE(t){if(!t.targetPeerId)throw new Error("请先连接这台服务,再查看可中转的服务。");for(const e of br({...t,targetPeerId:t.targetPeerId})){let n;const r={url:e,targetPeerId:t.targetPeerId};try{n=await Zt(r)}catch{continue}try{const o=await n.request({type:"route-targets"},{timeoutMs:5e3});if(!Array.isArray(o.items))throw new Error("入口服务需要更新后才能查看中转列表。");return{route:r,canManage:o.canManage===!0,items:o.items}}catch(o){throw o instanceof Error&&/UNKNOWN|UNSUPPORTED/i.test(o.message)?new Error("入口服务需要更新后才能查看中转列表。"):o}finally{n.close()}}throw new Error("暂时连不上中转入口,请检查地址和网络后重试。")}async function bE(t,e){const n=await Zt(t);try{const r=await n.request({type:"route-targets"},{timeoutMs:5e3}),o=(Array.isArray(r.items)?r.items:[]).find(c=>c.serviceId===e);if(!o)throw new Error("该服务已不可见,请刷新列表或请入口管理员授权。");if(!o.available)throw new Error("入口暂时无法中转到这台服务,请稍后重试。");const s=(await Je()).find(c=>c.targetPeerId===o.serviceId),i=[t,...(s?.routes||[]).filter(c=>c.targetPeerId!==t.targetPeerId)];if(i.length>4)throw new Error("这台服务已保存 4 个备用连接,请先移除一个后重试。");if(!o.authorized){if(!r.canManage)throw new Error("请先让入口管理员授权此设备。");await n.request({type:"route-grant",serviceId:o.serviceId,subjectId:(await Qe()).peerId})}const a=s?.serviceOrigin||s?.url||o.url||t.url;return{url:a,serviceOrigin:a,targetPeerId:o.serviceId,serviceName:s?.label||o.label||(o.url?new URL(o.url).host:`中转服务 ${o.serviceId.slice(0,8)}`),routes:i}}finally{n.close()}}async function vE(t,e){const n=await Zt(t);try{const r=await n.request({type:"route-access"},{timeoutMs:5e3}),o=(await Qe()).peerId;return{canManage:r.canManage===!0,grants:(Array.isArray(r.grants)?r.grants:[]).filter(s=>s.subjectId===o&&s.targetServiceId===e)}}finally{n.close()}}async function SE(t,e,n){if(n!==void 0&&(await fl(Oe(e.url),n)).targetPeerId!==e.targetPeerId)throw new Error("入口服务的身份已改变,请重新连接并确认。");const r=await Zt(e);try{await r.request({type:"route-grant",serviceId:t.targetPeerId,subjectId:(await Qe()).peerId,url:Oe(t.serviceOrigin||t.url)})}finally{r.close()}}async function xE(t,e){const n=await Zt(e);try{const r=await n.request({type:"route-access"},{timeoutMs:5e3}),o=(await Qe()).peerId,s=(Array.isArray(r.grants)?r.grants:[]).filter(i=>i.subjectId===o&&i.targetServiceId===t&&i.active);for(const i of s)await n.request({type:"route-revoke",grantId:i.id})}finally{n.close()}}async function Vp(t,e){const n=await Zt(e);try{const r=await n.request({type:"route-invite-create",serviceId:t.targetPeerId});if(typeof r.routeCode!="string"||typeof r.expiresAt!="number")throw new Error("暂时无法生成备用连接邀请。");return{routeCode:r.routeCode,expiresAt:r.expiresAt}}finally{n.close()}}async function rs(t,e){const n=(await Je()).find(o=>o.id===t.id||t.targetPeerId&&o.targetPeerId===t.targetPeerId)||t;await Rt({...n,url:n.serviceOrigin||n.url,entryServiceId:void 0,routes:e});const r=ne();r&&r.targetPeerId===t.targetPeerId&&kf({...r,url:r.serviceOrigin||r.url,entryServiceId:void 0,routes:e})}async function EE(t,e){const n=t.targetPeerId;if(!n)throw new Error("请先连接这台服务,再添加备用地址。");let r;try{r=Oe(e)}catch{throw new Error("请输入有效的 HTTPS 地址,例如 https://电脑地址:9834。")}const o=async()=>(await Je()).find(a=>a.targetPeerId===n)||t,s=a=>{const c=a.routes??Xt({...a,targetPeerId:n});if(Oe(a.serviceOrigin||a.url)===r||c.some(l=>Oe(l.url)===r))throw new Error("这个地址已经在连接列表中。");if(c.length>=4)throw new Error("最多保存 4 个备用地址或入口,请先移除不再使用的连接。");return[...c,{url:r,targetPeerId:n}]};s(await o());let i;try{try{i=await yn({url:bn(r),targetPeerId:n,identity:await Qe(),signal:AbortSignal.timeout(5e3)}),await yr(i)}catch(l){throw l instanceof Ze?new Error("这台服务尚未授权当前设备,请先恢复设备授权。"):new Error("无法验证这个地址。请确认能访问该地址、HTTPS 证书受信任,且运行的是同一台 Termdock 服务。")}const a=await o(),c=s(a);if(await rs(a,c),ne()?.targetPeerId===n&&zn===n&&(!J||J.closed)){const l=J,d=_e;J=i,i=void 0,_e=void 0,fr="direct",l?.close(),d?.close(),window.dispatchEvent(new Event(ft))}return c}finally{i?.close()}}async function du(t,e){await sc(t,e),await Ye({...t,pairingCode:void 0,routeCode:void 0})}function AE(t,e){return e.aborted?Promise.reject(e.reason):new Promise((n,r)=>{const o=()=>r(e.reason);e.addEventListener("abort",o,{once:!0}),t.then(n,r).finally(()=>e.removeEventListener("abort",o))})}function Xp(){if(window.termdockDesktop||window.parent!==window)return;if(window.__termdockCollaboration)return window.__termdockCollaboration;const t=new Map;let e=[],n=!1;const r=l=>{const d=l.targetPeerId;if(ne()?.targetPeerId===d)return st();const u=t.get(d);if(u)return u.then(h=>h.closed?(t.get(d)===u&&t.delete(d),r(l)):h);const f=fE({...l,targetPeerId:d},AbortSignal.timeout(12e3)).then(h=>{if(n||t.get(d)!==f)throw h.close(),new Error("服务连接已移除");return h}).catch(h=>{throw t.get(d)===f&&t.delete(d),h});return t.set(d,f),f},o=()=>{const l=ne(),d=Gt();l&&!d.some(f=>f.targetPeerId===l.targetPeerId)&&d.push({...l,id:l.targetPeerId,label:l.serviceName||l.serviceOrigin||l.url});const u=new Set(d.map(f=>f.targetPeerId));for(const[f,h]of t)u.has(f)||(t.delete(f),h.then(g=>g.close()).catch(()=>{}));e=d.filter(f=>!!f.targetPeerId).map(f=>({origin:f.serviceOrigin||f.url,label:f.label,request:async(h,g="GET",m)=>{if(!/^\/collaboration-(?:federation|groups)(?:\/[^?#]*)?$/.test(h))throw new Error("无效的协作请求");const b=AbortSignal.timeout(18e3),w=await AE(r(f),b),I=new Headers({"Content-Type":"application/json"});if(g!=="GET"&&g!=="HEAD"){const L=await w.fetch("/api/csrf-token",{signal:b});if(!L.ok)throw new Error("无法读取目标服务的请求令牌");const C=await L.json();if(typeof C.csrfToken!="string")throw new Error("目标服务的请求令牌无效");I.set("X-XSRF-TOKEN",C.csrfToken)}const y=await w.fetch(`/api/terminal/operations${h}`,{method:g,headers:I,signal:b,...m===void 0?{}:{body:JSON.stringify(m)}}),k=y.status===204?void 0:await y.json();if(!y.ok)throw new Error(k?.error||"服务不可达或未授权协作访问");return k}}))},s=new Om(()=>e),i={peers:l=>(o(),s.peers(l)),save:async(l,d)=>{o();const u=await s.save(l,d);return a(),u}},a=async()=>{n||document.hidden||!navigator.onLine||!ne()||(o(),!(e.length<2)&&await s.refresh().catch(()=>{}))};window.__termdockCollaboration=i;const c=window.setInterval(()=>{a()},2e3);return document.addEventListener("visibilitychange",a),window.addEventListener("online",a),window.addEventListener("pageshow",a),window.addEventListener("pagehide",l=>{if(!l.persisted){n=!0,clearInterval(c);for(const d of t.values())d.then(u=>u.close()).catch(()=>{});t.clear()}}),a(),i}function Yp(){if(!window.termdockDesktop)try{if(window.parent===window)return Xp();if(location.pathname==="/workspace.html"&&window.parent.location.origin===location.origin)return window.parent.__termdockCollaboration}catch{}}var qo={},uu;function kE(){if(uu)return qo;uu=1;var t=Em();return qo.createRoot=t.createRoot,qo.hydrateRoot=t.hydrateRoot,qo}var CE=kE();const IE=Af(CE);const Zp=(...t)=>t.filter((e,n,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===n).join(" ").trim();const RE=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const TE=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,n,r)=>r?r.toUpperCase():n.toLowerCase());const fu=t=>{const e=TE(t);return e.charAt(0).toUpperCase()+e.slice(1)};var qi={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const PE=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1},NE=_.createContext({}),LE=()=>_.useContext(NE),BE=_.forwardRef(({color:t,size:e,strokeWidth:n,absoluteStrokeWidth:r,className:o="",children:s,iconNode:i,...a},c)=>{const{size:l=24,strokeWidth:d=2,absoluteStrokeWidth:u=!1,color:f="currentColor",className:h=""}=LE()??{},g=r??u?Number(n??d)*24/Number(e??l):n??d;return _.createElement("svg",{ref:c,...qi,width:e??l??qi.width,height:e??l??qi.height,stroke:t??f,strokeWidth:g,className:Zp("lucide",h,o),...!s&&!PE(a)&&{"aria-hidden":"true"},...a},[...i.map(([m,b])=>_.createElement(m,b)),...Array.isArray(s)?s:[s]])});const Ee=(t,e)=>{const n=_.forwardRef(({className:r,...o},s)=>_.createElement(BE,{ref:s,iconNode:e,className:Zp(`lucide-${RE(fu(t))}`,`lucide-${t}`,r),...o}));return n.displayName=fu(t),n};const _E=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Jp=Ee("arrow-left",_E);const OE=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],DE=Ee("arrow-right",OE);const FE=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],ME=Ee("arrow-up-right",FE);const jE=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M11.68 2.009A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673c-.824-.85-1.678-1.731-2.21-3.348",key:"xaq59h"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]],Qp=Ee("bell-dot",jE);const UE=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],hl=Ee("check",UE);const $E=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],eg=Ee("chevron-down",$E);const HE=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],vn=Ee("chevron-right",HE);const qE=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],KE=Ee("chevron-up",qE);const zE=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],tg=Ee("copy",zE);const WE=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],ng=Ee("ellipsis",WE);const GE=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],De=Ee("loader-circle",GE);const VE=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],XE=Ee("monitor",VE);const YE=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],ZE=Ee("pencil",YE);const JE=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],rg=Ee("plus",JE);const QE=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],ai=Ee("server",QE);const e1=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],og=Ee("smartphone",e1);const t1=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],n1=Ee("terminal",t1);const r1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],sg=Ee("x",r1);let Hn=null;function o1(t){return!Hn||!t?!1:(Hn(t),!0)}function eR(t){Hn=t;const e=n=>{const{text:r,nonce:o}=n.detail??{};!r||Hn!==t||(t(r),n.stopImmediatePropagation(),o&&window.dispatchEvent(new CustomEvent("termdock-insert-reference-ack",{detail:{nonce:o,ok:!0}})))};return window.addEventListener("termdock-insert-reference",e,!0),()=>{Hn===t&&(Hn=null),window.removeEventListener("termdock-insert-reference",e,!0)}}const s1=/^[A-Za-z0-9_@%+=:,./-]$/;function i1(t){return Array.from(t,e=>(e.codePointAt(0)??0)>127||s1.test(e)?e:`\\${e}`).join("")}function a1(t,e){if(!e)return!1;try{const n=new URL(e.serviceOrigin||e.url);return n.origin===t&&/^(localhost|\[::1\]|127(?:\.\d{1,3}){3})$/.test(n.hostname)&&!(e.routes??[]).some(r=>r.targetPeerId!==e.targetPeerId)}catch{return!1}}function c1(t){const e=s=>s.target instanceof Element?s.target.closest("[data-termdock-terminal-dropzone]"):null,n=()=>!a1(location.origin,Wn()),r=s=>{const i=e(s);!i||!n()||!s.dataTransfer?.types.includes("Files")||(s.preventDefault(),s.stopImmediatePropagation(),s.dataTransfer.dropEffect="copy",i.dataset.nativeFileDrag="true",i.dataset.nativeFileDropState="remote")},o=s=>{const i=e(s),a=Array.from(s.dataTransfer?.files??[]);if(!i||!a.length||!n())return;s.preventDefault(),s.stopImmediatePropagation();const c=i.dataset.termdockTerminalDropzone??"";i.dataset.nativeFileDrag="true",i.dataset.nativeFileDropState="uploading",Yt(async()=>{const{uploadFiles:l}=await Promise.resolve().then(()=>w2);return{uploadFiles:l}},void 0).then(({uploadFiles:l})=>l("/tmp",a)).then(l=>{if(l.files.length!==a.length||l.files.some(d=>!d.path))throw new Error("Upload did not return every file path");delete i.dataset.nativeFileDrag,delete i.dataset.nativeFileDropState,t({sessionKey:c,paths:l.files.map(d=>d.path)})}).catch(l=>{i.dataset.nativeFileDropState="error",i.dispatchEvent(new CustomEvent("termdock:file-drop-error",{bubbles:!0,detail:l instanceof Error?l.message:"File upload failed"})),window.setTimeout(()=>{i.dataset.nativeFileDropState==="error"&&(delete i.dataset.nativeFileDrag,delete i.dataset.nativeFileDropState)},3e3)})};return window.addEventListener("dragover",r,!0),window.addEventListener("drop",o,!0),()=>{window.removeEventListener("dragover",r,!0),window.removeEventListener("drop",o,!0)}}function et(){return typeof window>"u"?null:window.termdockDesktop??null}const Ki=new Set;let hu=!1;function tR(t){const e=et();if(!e)return()=>{};if(Ki.add(t),!hu){const n=r=>{if(!o1(r.paths.map(i1).join(" ")+" "))for(const o of Ki)o(r)};c1(n),e.onNativeFileDrop(n),hu=!0}return()=>{Ki.delete(t)}}function ig(t=navigator.userAgent,e=navigator.maxTouchPoints){const n=/iPad/.test(t)||/Macintosh/.test(t)&&e>1?"iPad":/iPhone/.test(t)?"iPhone":/Android/.test(t)?"Android":/Windows/.test(t)?"Windows":/Macintosh|Mac OS X/.test(t)?"Mac":/Linux/.test(t)?"Linux":"设备",r=/Electron/.test(t)?"Termdock":/Edg\//.test(t)?"Edge":/Firefox|FxiOS/.test(t)?"Firefox":/Chrome|CriOS/.test(t)?"Chrome":/Safari/.test(t)?"Safari":"浏览器";return`${n} · ${r}`}let l1;function d1(){return l1??=(async()=>{const t=navigator.userAgent,[e,n]=ig().split(" · "),r=/(?:Edg|Firefox|FxiOS|Chrome|CriOS|Version)\/([\d.]+)/g,o=[...t.matchAll(r)],s=/(?:CPU (?:iPhone )?OS |Mac OS X |Android )([\d._]+)/.exec(t)?.[1]?.replaceAll("_","."),i={system:`${e}${s?` ${s}`:""}`,client:`${n}${o.length?` ${o.at(-1)[1]}`:""}`,mode:matchMedia("(display-mode: standalone)").matches||navigator.standalone?"已安装的网页应用":"网页"},a=et();if(a){i.mode="桌面客户端";const l=/Electron\/([\d.]+)/.exec(t)?.[1];i.client=l?`Termdock(Electron ${l})`:"Termdock";try{Object.assign(i,await a.deviceInfo?.())}catch{}return i}const c=navigator.userAgentData;try{const l=await c?.getHighEntropyValues(["model","architecture","bitness","platformVersion"]);typeof l?.model=="string"&&l.model&&(i.model=l.model),typeof l?.architecture=="string"&&l.architecture&&(i.arch=`${l.architecture}${l.bitness?` ${l.bitness} 位`:""}`)}catch{}return i})()}function u1({service:t,onBusyChange:e,onConnect:n,onConnectWithPassword:r}){const[o,s]=_.useState(),[i,a]=_.useState(!0),[c,l]=_.useState(!1),[d,u]=_.useState(""),[f,h]=_.useState(0),[g,m]=_.useState(),[b,w]=_.useState("");_.useEffect(()=>{let k=!1;return a(!0),u(""),s(void 0),yE(t).then(L=>{k||s(L)}).catch(L=>{k||u(L instanceof Error?L.message:"暂时无法读取中转列表,请重试。")}).finally(()=>{k||a(!1)}),()=>{k=!0}},[t.id,t.url,f]);const I=async k=>{if(!c){l(!0),e(!0),u("");try{await k()}catch(L){u(L instanceof Error?L.message:"暂时无法连接,请重试。")}finally{l(!1),e(!1)}}},y=async k=>{const L=await bE(o.route,k.serviceId);try{await n(L)}catch(C){if(!(C instanceof Ze))throw C;m(L)}};return p.jsxs("div",{className:"service-form",children:[g?p.jsxs("form",{className:"service-form",onSubmit:k=>{k.preventDefault(),I(async()=>{try{await r?.(g,b)}finally{w("")}})},children:[p.jsxs("p",{className:"service-help",children:["已通过“",t.label,"”连接到“",g.serviceName,"”。请登录目标服务,完成此设备的访问授权。"]}),r?p.jsxs(p.Fragment,{children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"目标服务密码"}),p.jsx("input",{type:"password",autoFocus:!0,required:!0,autoComplete:"current-password",value:b,disabled:c,onChange:k=>w(k.target.value)})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:c||!b,children:c?"正在登录…":"登录并连接"})]}):p.jsx("p",{className:"service-help",children:"请让目标服务管理员邀请此设备后再连接。"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:c,onClick:()=>{m(void 0),w(""),u(""),h(k=>k+1)},children:"返回中转列表"})]}):p.jsxs(p.Fragment,{children:[p.jsxs("p",{className:"service-help",children:["通过“",t.label,"”连接下方服务。",o?.canManage?"选择未授权的服务会授权此设备使用该中转。":"这里只显示已授权给此设备的中转。","目标服务会单独验证访问权限。"]}),i?p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取可中转的服务…"]}):o&&p.jsxs("div",{className:"service-list",children:[o.items.map(k=>p.jsxs("button",{type:"button",className:"service-row-open service-full-width",disabled:c||!k.available,onClick:()=>{I(()=>y(k))},children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:19})}),p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:k.label||(k.url?new URL(k.url).host:`中转服务 ${k.serviceId.slice(0,8)}`)}),p.jsx("span",{className:"service-description",children:k.available?k.authorized?"已获中转授权 · 连接":"授权此设备并连接":"中转暂不可用"})]}),p.jsx(vn,{size:16})]},k.serviceId)),o.items.length===0&&p.jsx("p",{className:"service-empty",children:o.canManage?"暂无可中转的服务。可在本机 Mac 客户端连接目标服务,或在目标服务的“备用连接”中启用本入口。":"暂无已授权的中转服务,请让入口管理员分享备用连接邀请。"})]}),c&&p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在授权并连接目标服务…"]}),!i&&p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:c,onClick:()=>h(k=>k+1),children:"刷新列表"})]}),d&&p.jsx("p",{className:"service-error",role:"alert",children:d})]})}const ic="#termdock-invite=";function ag(t){const e=new URL(t.entryUrl);e.hash="",e.search="",e.pathname="/";const n=new TextEncoder().encode(JSON.stringify(t));return e.hash=ic.slice(1)+btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),e.href}function Fs(t){const e=new URL(t);if(!["https:","http:"].includes(e.protocol)||!e.hash.startsWith(ic))throw new Error("这不是有效的 Termdock 邀请链接");const n=e.hash.slice(ic.length);if(n.length>8192)throw new Error("邀请链接过长");let r;try{const i=n.replace(/-/g,"+").replace(/_/g,"/");r=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Uint8Array.from(atob(i),a=>a.charCodeAt(0))))}catch{throw new Error("邀请链接不完整,请重新复制")}if(r.v!==1||typeof r.serviceId!="string"||!/^12D3KooW[1-9A-HJ-NP-Za-km-z]{44}$/.test(r.serviceId)||r.routeOnly!==!0&&(typeof r.code!="string"||!/^[A-Za-z0-9_-]{32,128}$/.test(r.code)))throw new Error("邀请信息无效或版本不兼容");const o=new URL(r.entryUrl);if(o.origin!==e.origin||o.username||o.password||!["https:","http:"].includes(o.protocol))throw new Error("邀请地址与服务不一致");if(o.protocol==="http:"&&!["localhost","127.0.0.1","[::1]"].includes(o.hostname))throw new Error("远程邀请需要 HTTPS");if(r.entryServiceId!==void 0&&(typeof r.entryServiceId!="string"||!/^12D3KooW[1-9A-HJ-NP-Za-km-z]{44}$/.test(r.entryServiceId)))throw new Error("邀请入口身份无效");if(r.routeCode!==void 0&&(typeof r.routeCode!="string"||!/^[A-Za-z0-9_-]{32,128}$/.test(r.routeCode)||!r.entryServiceId))throw new Error("邀请入口权限无效");if(r.routeOnly===!0&&(!r.entryServiceId||!r.routeCode||r.code!==void 0))throw new Error("备用连接邀请不完整");let s=o.origin;if(r.serviceUrl!==void 0){const i=new URL(r.serviceUrl);if(!["https:","http:"].includes(i.protocol)||i.username||i.password)throw new Error("目标服务地址无效");s=r.entryServiceId&&r.entryServiceId!==r.serviceId?i.origin:o.origin}return{url:o.origin,targetPeerId:r.serviceId,pairingCode:r.code,...r.routeOnly===!0?{routeOnly:!0}:{},serviceOrigin:s,serviceName:typeof r.name=="string"?r.name.slice(0,120):void 0,entryServiceId:r.entryServiceId,routeCode:r.routeCode}}function f1({service:t,onBusyChange:e}){const n={...t,targetPeerId:t.targetPeerId,serviceName:t.label},[r,o]=_.useState(()=>t.routes??Xt(n)),[s,i]=_.useState([]),[a,c]=_.useState(!0),[l,d]=_.useState(!1),[u,f]=_.useState(""),h=B=>{d(B),e(B)},[g,m]=_.useState(),[b,w]=_.useState(""),[I,y]=_.useState(""),[k,L]=_.useState(""),[C,T]=_.useState(!1),[x,v]=_.useState(),[A,N]=_.useState(),[D,E]=_.useState(!1);_.useEffect(()=>{let B=!1;return Je().then(F=>{B||i(F.filter(U=>U.targetPeerId&&U.targetPeerId!==t.targetPeerId))}).catch(()=>{B||f("暂时无法读取可用服务。")}).finally(()=>{B||c(!1)}),()=>{B=!0}},[t.targetPeerId]);const S=B=>s.find(F=>F.targetPeerId===B.targetPeerId)?.label||new URL(B.url).host,P=async B=>{h(!0),f(""),L("");try{await B()}catch(F){const U=F instanceof Error?F.message:"";f(/AUTHORIZATION|DENIED/.test(U)?"当前设备没有入口管理权限。请让管理员分享备用连接邀请,或使用入口密码授权。":"暂时无法完成。请确认入口能连接目标服务,且目标地址、证书和授权有效。")}finally{h(!1)}},R=async(B,F)=>{const U={url:B.serviceOrigin||B.url,targetPeerId:B.targetPeerId};await P(async()=>{const H=await vE(U,n.targetPeerId);if(!H.grants.some(K=>K.active)){if(!H.canManage&&F===void 0){m(B);return}await SE(n,U,F)}const q=[...r.filter(K=>K.targetPeerId!==U.targetPeerId),U];await rs(t,q),o(q),m(void 0),w("")})};if(A)return p.jsxs("div",{className:"service-form",children:[p.jsxs("p",{className:"service-help",children:["把链接发给需要使用此备用连接的人。它只允许通过入口连接“",t.label,"”,对方仍需获得目标服务的访问权限。"]}),p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"备用连接邀请"}),p.jsx("input",{readOnly:!0,value:A,onFocus:B=>B.target.select()})]}),p.jsxs("button",{type:"button",className:"service-button service-primary",onClick:()=>{navigator.clipboard.writeText(A).then(()=>E(!0)).catch(()=>f("无法自动复制,请长按链接复制。"))},children:[p.jsx(tg,{size:16}),D?"已复制":"复制邀请链接"]}),p.jsx("button",{type:"button",className:"service-button service-secondary",onClick:()=>{N(void 0),E(!1)},children:"返回备用连接"}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u})]});if(g)return p.jsxs("form",{className:"service-form",onSubmit:B=>{B.preventDefault(),R(g,b).finally(()=>w(""))},children:[p.jsxs("p",{className:"service-help",children:["需要“",g.label,"”的管理员授权。若这是你的服务,可以使用它的密码;否则请管理员分享备用连接邀请。"]}),p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"入口服务密码"}),p.jsx("input",{type:"password",required:!0,value:b,onChange:B=>w(B.target.value),autoComplete:"current-password",disabled:l,autoFocus:!0})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:l||!b,children:l?"正在授权…":"授权并启用"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>{m(void 0),w("")},children:"取消"}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u})]});const O=r.filter(B=>B.targetPeerId===n.targetPeerId),j=r.filter(B=>B.targetPeerId!==n.targetPeerId),M=async()=>{if(!l){h(!0),T(!0),f(""),L("");try{o(await EE({...t,routes:r},I)),y(""),L("备用地址已验证并保存。")}catch(B){f(B instanceof Error?B.message:"暂时无法添加地址,请重试。")}finally{h(!1),T(!1)}}};return p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"电脑换了网络?添加它在新网络下的地址,原地址连不上时会自动尝试。只接受同一台服务。"}),p.jsxs("form",{className:"service-form",onSubmit:B=>{B.preventDefault(),M()},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"备用地址"}),p.jsx("input",{value:I,onChange:B=>{y(B.target.value),f(""),L("")},required:!0,disabled:l||r.length>=4,inputMode:"url",autoComplete:"off",autoCapitalize:"none",spellCheck:!1,placeholder:"例如:192.168.10.20:9834"})]}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:l||r.length>=4||!I.trim(),children:C?p.jsxs(p.Fragment,{children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在验证…"]}):"验证并添加"})]}),u&&p.jsx("p",{role:"alert",className:"service-error",children:u}),k&&p.jsx("p",{role:"status",className:"service-help",children:k}),r.length>=4&&p.jsx("p",{className:"service-help",children:"已保存 4 个备用连接。移除不再使用的地址或入口后,可以继续添加。"}),p.jsxs("div",{children:[p.jsx("p",{className:"service-help",children:"首选地址"}),p.jsx("p",{className:"service-address",children:t.serviceOrigin||t.url})]}),O.length>0&&p.jsx("div",{className:"service-list",children:O.map(B=>p.jsxs("div",{className:"service-route-item",children:[p.jsxs("div",{className:"service-route-line",children:[p.jsx("span",{className:"service-address service-route-address",children:B.url}),p.jsx("button",{type:"button",className:"service-icon-button","aria-label":`移除地址 ${B.url}`,disabled:l,onClick:()=>v(B),children:"移除"})]}),x?.targetPeerId===B.targetPeerId&&x.url===B.url&&p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"从备用连接中移除此地址?不会停止正在运行的终端。"}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>v(void 0),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>{P(async()=>{const F=r.filter(U=>U.targetPeerId!==B.targetPeerId||U.url!==B.url);await rs(t,F),o(F),v(void 0)})},children:"确认移除"})]})]})]},B.url))}),p.jsxs("details",{className:"service-relay-options",children:[p.jsxs("summary",{children:["通过其他服务中转",j.length?`(${j.length})`:""]}),p.jsxs("div",{className:"service-form",children:[p.jsx("p",{className:"service-help",children:"所有直连地址都不可用时,尝试下方已授权入口;直连恢复后自动切回。"}),j.length>0&&p.jsx("div",{className:"service-list",children:j.map(B=>p.jsxs("div",{className:"service-route-item",children:[p.jsxs("div",{className:"service-route-line",children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:18})}),p.jsx("span",{className:"service-name",children:S(B)}),p.jsx(hl,{size:16,className:"service-selected"})]}),x?.targetPeerId===B.targetPeerId?p.jsxs("div",{className:"service-form",children:[p.jsxs("p",{className:"service-help",children:["撤销此设备经“",S(B),"”连接目标的权限?如当前无法直连,目标服务将断开。"]}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>v(void 0),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>{P(async()=>{await xE(n.targetPeerId,B);const F=r.filter(U=>U.targetPeerId!==B.targetPeerId);await rs(t,F),o(F),v(void 0)})},children:"确认撤销"})]})]}):p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:l,onClick:()=>{P(async()=>{const F=await Vp(n,B);N(ag({v:1,routeOnly:!0,serviceId:n.targetPeerId,name:t.label,serviceUrl:t.serviceOrigin||t.url,entryUrl:B.url,entryServiceId:B.targetPeerId,routeCode:F.routeCode}))})},children:"分享备用连接"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:l,onClick:()=>v(B),children:"撤销授权"})]})]},B.targetPeerId))}),a?p.jsxs("p",{role:"status",className:"service-feedback",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取服务…"]}):p.jsxs("div",{children:[p.jsx("p",{className:"service-help",children:"添加中转入口"}),s.filter(B=>!r.some(F=>F.targetPeerId===B.targetPeerId)).map(B=>p.jsxs("button",{type:"button",className:"service-row-open service-full-width",disabled:l||r.length>=4,onClick:()=>{R(B)},children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:B.label}),p.jsx("span",{className:"service-description",children:"验证并授权后启用"})]}),p.jsx(vn,{size:16})]},B.id)),s.length===0&&p.jsx("p",{className:"service-empty",children:"添加并登录另一台服务后,可以将它设为中转入口。"})]})]})]}),l&&!C&&p.jsxs("p",{role:"status",className:"service-feedback",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在验证连接与授权…"]})]})}function h1({current:t,renderRoutes:e,renderRelayServices:n,onOpen:r,onAdd:o,onInvite:s,hideHeader:i,onNavigation:a,onBusyChange:c,initiallyAdding:l=!1}){const[d,u]=_.useState([]),[f,h]=_.useState(!0),[g,m]=_.useState(l?{kind:"add"}:{kind:"list"}),[b,w]=_.useState(!1),I=_.useCallback(E=>{w(E),c?.(E)},[c]),[y,k]=_.useState(""),L=_.useCallback(()=>{m(E=>E.kind==="routes"||E.kind==="relay-services"?{kind:"edit",service:E.service}:{kind:"list"}),k("")},[]),C=g.kind==="add"?"添加服务":g.kind==="edit"?"服务设置":g.kind==="routes"?"备用连接":g.kind==="relay-services"?"可中转的服务":void 0;_.useEffect(()=>{a?.({title:C,...C?{back:L}:{}})},[C,L,a]),_.useEffect(()=>{let E=!1,S=0;const P=async()=>{const O=++S;try{const j=await Je();!E&&S===O&&(u(j),k(""))}catch{!E&&S===O&&k("暂时无法读取服务列表,请重试。")}finally{!E&&S===O&&h(!1)}};P();const R=Rf(()=>{P()});return()=>{E=!0,R()}},[]);const T=async E=>{if(!b){I(!0),k("");try{await E()}catch(S){k(S instanceof Error?S.message:"暂时无法完成,请重试。")}finally{I(!1)}}},x=g.kind==="edit"||g.kind==="routes"||g.kind==="relay-services"?d.find(E=>Et(E,g.service))||g.service:void 0,v=t?d.find(E=>Et(E,t))||t:void 0,A=d.filter(E=>!t||!Et(E,t)),N=v?[v,...A]:A,D=p.jsxs(p.Fragment,{children:[f?p.jsxs("p",{className:"service-feedback",role:"status",children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在读取服务…"]}):p.jsxs("div",{className:"service-list",children:[N.map(E=>{const S=!!t&&Et(E,t);return p.jsxs("div",{className:"service-row",children:[p.jsxs("button",{type:"button",className:"service-row-open",disabled:b||S,onClick:()=>{T(async()=>{(await r(E))?.passwordRequired&&m({kind:"add",input:E.serviceOrigin||E.url,passwordRequired:!0})})},"aria-label":S?`当前服务 ${E.label}`:`打开 ${E.label}`,children:[p.jsx("span",{className:"service-icon",children:p.jsx(ai,{size:20})}),p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:E.label}),p.jsx("span",{className:"service-description",children:S?"当前服务":new URL(E.serviceOrigin||E.url).host})]}),S?p.jsx(hl,{size:17,className:"service-selected"}):p.jsx(vn,{size:16,className:"service-muted"})]}),p.jsx("button",{type:"button",className:"service-icon-button","aria-label":`管理 ${E.label}`,disabled:b,onClick:()=>{m({kind:"edit",service:E}),k("")},children:p.jsx(ng,{size:19})})]},E.id)}),N.length===0&&p.jsx("p",{className:"service-empty",children:"还没有添加服务。连接你的电脑,或粘贴收到的邀请链接。"})]}),p.jsxs("div",{className:`service-actions${s?" service-actions-pair":""}`,children:[p.jsxs("button",{type:"button",className:"service-button service-secondary",disabled:b,onClick:()=>{m({kind:"add"}),k("")},children:[p.jsx(rg,{size:16}),"添加服务"]}),s&&p.jsxs("button",{type:"button",className:"service-button service-secondary",disabled:b,onClick:s,children:[p.jsx(og,{size:16}),"邀请设备"]})]})]});return p.jsxs("div",{className:"service-manager",children:[!i&&p.jsxs("div",{className:"service-heading",children:[C&&p.jsx("button",{type:"button",className:"service-icon-button","aria-label":"返回服务",disabled:b,onClick:L,children:p.jsx(Jp,{size:20})}),p.jsx("h2",{children:C||"服务"})]}),g.kind==="relay-services"?n?.(x,I):g.kind==="routes"?e?.(x,I):g.kind==="list"?D:g.kind==="add"?p.jsx(p1,{onSave:E=>T(async()=>{const S=Oe(E);u(await Rt({id:S,url:S,label:new URL(S).host})),L()}),initialInput:g.input,passwordRequired:g.passwordRequired,busy:b,onSubmit:async(E,S)=>{let P;return await T(async()=>{P=await o(E,S),P?.passwordRequired||L()}),P}}):p.jsx(g1,{onRelayServices:n&&g.service.targetPeerId?()=>m({kind:"relay-services",service:g.service}):void 0,onRoutes:e&&g.service.targetPeerId?()=>m({kind:"routes",service:g.service}):void 0,service:x,busy:b,canRemove:!t||!Et(g.service,t),onSave:E=>{T(async()=>{u(await Rt({...x,label:E})),L()})},onRemove:()=>{T(async()=>{u(await Fm(g.service.id)),L()})}}),y&&p.jsx("p",{className:"service-error",role:"alert",children:y})]})}function p1({busy:t,onSubmit:e,onSave:n,initialInput:r="",passwordRequired:o=!1}){const[s,i]=_.useState(r),[a,c]=_.useState(""),[l,d]=_.useState(o);return p.jsxs("form",{className:"service-form",onSubmit:async u=>{u.preventDefault(),(await e(s.trim(),l?a:void 0))?.passwordRequired&&d(!0),c("")},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务地址或邀请链接"}),p.jsx("input",{value:s,onChange:u=>{i(u.target.value),d(!1),c("")},disabled:t,required:!0,autoComplete:"off",autoCapitalize:"none",spellCheck:!1,placeholder:"例如:电脑地址:9834 或 https://…"})]}),l?p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务密码"}),p.jsx("input",{type:"password",value:a,onChange:u=>c(u.target.value),disabled:t,required:!0,autoFocus:!0,autoComplete:"current-password",placeholder:"输入这台服务的密码"})]}):p.jsx("p",{className:"service-help",children:"连接自己的服务,输入地址即可;收到邀请时,粘贴完整链接。"}),p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:t||!s.trim()||s.includes("#termdock-invite="),onClick:()=>{n(s.trim())},children:"仅保存,不连接"}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:t||!s.trim()||l&&!a,children:t?p.jsxs(p.Fragment,{children:[p.jsx(De,{size:16,className:"service-spinning"}),"正在连接…"]}):l?"登录并连接":"继续"})]})}function g1({service:t,busy:e,canRemove:n,onSave:r,onRemove:o,onRoutes:s,onRelayServices:i}){const[a,c]=_.useState(t.label),[l,d]=_.useState(!1);return p.jsxs("form",{className:"service-form",onSubmit:u=>{u.preventDefault(),r(a.trim())},children:[p.jsxs("label",{className:"service-field",children:[p.jsx("span",{children:"服务名称"}),p.jsx("input",{value:a,onChange:u=>c(u.target.value),disabled:e,required:!0,maxLength:120,placeholder:"例如:办公室电脑"})]}),p.jsx("p",{className:"service-address",children:t.serviceOrigin||t.url}),p.jsx("button",{type:"submit",className:"service-button service-primary",disabled:e||!a.trim(),children:"保存名称"}),i&&p.jsxs("button",{type:"button",className:"service-row-open",disabled:e,onClick:i,children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:"可中转的服务"}),p.jsx("span",{className:"service-description",children:"通过这台服务连接其他电脑"})]}),p.jsx(vn,{size:16})]}),s&&p.jsxs("button",{type:"button",className:"service-row-open",disabled:e,onClick:s,children:[p.jsxs("span",{className:"service-row-copy",children:[p.jsx("span",{className:"service-name",children:"备用连接"}),p.jsx("span",{className:"service-description",children:"添加其他网络地址或授权入口"})]}),p.jsx(vn,{size:16})]}),n&&p.jsx("div",{className:"service-remove",children:l?p.jsxs(p.Fragment,{children:[p.jsxs("p",{className:"service-help",children:["从列表移除“",t.label,"”?不会停止服务或删除终端。"]}),p.jsxs("div",{className:"service-actions service-actions-pair",children:[p.jsx("button",{type:"button",className:"service-button service-secondary",disabled:e,onClick:()=>d(!1),children:"取消"}),p.jsx("button",{type:"button",className:"service-button service-danger",disabled:e,onClick:o,children:"确认移除"})]})]}):p.jsx("button",{type:"button",className:"service-button service-danger",disabled:e,onClick:()=>d(!0),children:"移除服务"})})]})}var _n={},zi,pu;function m1(){return pu||(pu=1,zi=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),zi}var Wi={},jt={},gu;function An(){if(gu)return jt;gu=1;let t;const e=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return jt.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},jt.getSymbolTotalCodewords=function(r){return e[r]},jt.getBCHDigit=function(n){let r=0;for(;n!==0;)r++,n>>>=1;return r},jt.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');t=r},jt.isKanjiModeEnabled=function(){return typeof t<"u"},jt.toSJIS=function(r){return t(r)},jt}var Gi={},mu;function pl(){return mu||(mu=1,(function(t){t.L={bit:1},t.M={bit:0},t.Q={bit:3},t.H={bit:2};function e(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw new Error("Unknown EC Level: "+n)}}t.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},t.from=function(r,o){if(t.isValid(r))return r;try{return e(r)}catch{return o}}})(Gi)),Gi}var Vi,wu;function w1(){if(wu)return Vi;wu=1;function t(){this.buffer=[],this.length=0}return t.prototype={get:function(e){const n=Math.floor(e/8);return(this.buffer[n]>>>7-e%8&1)===1},put:function(e,n){for(let r=0;r<n;r++)this.putBit((e>>>n-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(e){const n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),e&&(this.buffer[n]|=128>>>this.length%8),this.length++}},Vi=t,Vi}var Xi,yu;function y1(){if(yu)return Xi;yu=1;function t(e){if(!e||e<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}return t.prototype.set=function(e,n,r,o){const s=e*this.size+n;this.data[s]=r,o&&(this.reservedBit[s]=!0)},t.prototype.get=function(e,n){return this.data[e*this.size+n]},t.prototype.xor=function(e,n,r){this.data[e*this.size+n]^=r},t.prototype.isReserved=function(e,n){return this.reservedBit[e*this.size+n]},Xi=t,Xi}var Yi={},bu;function b1(){return bu||(bu=1,(function(t){const e=An().getSymbolSize;t.getRowColCoords=function(r){if(r===1)return[];const o=Math.floor(r/7)+2,s=e(r),i=s===145?26:Math.ceil((s-13)/(2*o-2))*2,a=[s-7];for(let c=1;c<o-1;c++)a[c]=a[c-1]-i;return a.push(6),a.reverse()},t.getPositions=function(r){const o=[],s=t.getRowColCoords(r),i=s.length;for(let a=0;a<i;a++)for(let c=0;c<i;c++)a===0&&c===0||a===0&&c===i-1||a===i-1&&c===0||o.push([s[a],s[c]]);return o}})(Yi)),Yi}var Zi={},vu;function v1(){if(vu)return Zi;vu=1;const t=An().getSymbolSize,e=7;return Zi.getPositions=function(r){const o=t(r);return[[0,0],[o-e,0],[0,o-e]]},Zi}var Ji={},Su;function S1(){return Su||(Su=1,(function(t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const e={N1:3,N2:3,N3:40,N4:10};t.isValid=function(o){return o!=null&&o!==""&&!isNaN(o)&&o>=0&&o<=7},t.from=function(o){return t.isValid(o)?parseInt(o,10):void 0},t.getPenaltyN1=function(o){const s=o.size;let i=0,a=0,c=0,l=null,d=null;for(let u=0;u<s;u++){a=c=0,l=d=null;for(let f=0;f<s;f++){let h=o.get(u,f);h===l?a++:(a>=5&&(i+=e.N1+(a-5)),l=h,a=1),h=o.get(f,u),h===d?c++:(c>=5&&(i+=e.N1+(c-5)),d=h,c=1)}a>=5&&(i+=e.N1+(a-5)),c>=5&&(i+=e.N1+(c-5))}return i},t.getPenaltyN2=function(o){const s=o.size;let i=0;for(let a=0;a<s-1;a++)for(let c=0;c<s-1;c++){const l=o.get(a,c)+o.get(a,c+1)+o.get(a+1,c)+o.get(a+1,c+1);(l===4||l===0)&&i++}return i*e.N2},t.getPenaltyN3=function(o){const s=o.size;let i=0,a=0,c=0;for(let l=0;l<s;l++){a=c=0;for(let d=0;d<s;d++)a=a<<1&2047|o.get(l,d),d>=10&&(a===1488||a===93)&&i++,c=c<<1&2047|o.get(d,l),d>=10&&(c===1488||c===93)&&i++}return i*e.N3},t.getPenaltyN4=function(o){let s=0;const i=o.data.length;for(let c=0;c<i;c++)s+=o.data[c];return Math.abs(Math.ceil(s*100/i/5)-10)*e.N4};function n(r,o,s){switch(r){case t.Patterns.PATTERN000:return(o+s)%2===0;case t.Patterns.PATTERN001:return o%2===0;case t.Patterns.PATTERN010:return s%3===0;case t.Patterns.PATTERN011:return(o+s)%3===0;case t.Patterns.PATTERN100:return(Math.floor(o/2)+Math.floor(s/3))%2===0;case t.Patterns.PATTERN101:return o*s%2+o*s%3===0;case t.Patterns.PATTERN110:return(o*s%2+o*s%3)%2===0;case t.Patterns.PATTERN111:return(o*s%3+(o+s)%2)%2===0;default:throw new Error("bad maskPattern:"+r)}}t.applyMask=function(o,s){const i=s.size;for(let a=0;a<i;a++)for(let c=0;c<i;c++)s.isReserved(c,a)||s.xor(c,a,n(o,c,a))},t.getBestMask=function(o,s){const i=Object.keys(t.Patterns).length;let a=0,c=1/0;for(let l=0;l<i;l++){s(l),t.applyMask(l,o);const d=t.getPenaltyN1(o)+t.getPenaltyN2(o)+t.getPenaltyN3(o)+t.getPenaltyN4(o);t.applyMask(l,o),d<c&&(c=d,a=l)}return a}})(Ji)),Ji}var Ko={},xu;function cg(){if(xu)return Ko;xu=1;const t=pl(),e=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],n=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Ko.getBlocksCount=function(o,s){switch(s){case t.L:return e[(o-1)*4+0];case t.M:return e[(o-1)*4+1];case t.Q:return e[(o-1)*4+2];case t.H:return e[(o-1)*4+3];default:return}},Ko.getTotalCodewordsCount=function(o,s){switch(s){case t.L:return n[(o-1)*4+0];case t.M:return n[(o-1)*4+1];case t.Q:return n[(o-1)*4+2];case t.H:return n[(o-1)*4+3];default:return}},Ko}var Qi={},_r={},Eu;function x1(){if(Eu)return _r;Eu=1;const t=new Uint8Array(512),e=new Uint8Array(256);return(function(){let r=1;for(let o=0;o<255;o++)t[o]=r,e[r]=o,r<<=1,r&256&&(r^=285);for(let o=255;o<512;o++)t[o]=t[o-255]})(),_r.log=function(r){if(r<1)throw new Error("log("+r+")");return e[r]},_r.exp=function(r){return t[r]},_r.mul=function(r,o){return r===0||o===0?0:t[e[r]+e[o]]},_r}var Au;function E1(){return Au||(Au=1,(function(t){const e=x1();t.mul=function(r,o){const s=new Uint8Array(r.length+o.length-1);for(let i=0;i<r.length;i++)for(let a=0;a<o.length;a++)s[i+a]^=e.mul(r[i],o[a]);return s},t.mod=function(r,o){let s=new Uint8Array(r);for(;s.length-o.length>=0;){const i=s[0];for(let c=0;c<o.length;c++)s[c]^=e.mul(o[c],i);let a=0;for(;a<s.length&&s[a]===0;)a++;s=s.slice(a)}return s},t.generateECPolynomial=function(r){let o=new Uint8Array([1]);for(let s=0;s<r;s++)o=t.mul(o,new Uint8Array([1,e.exp(s)]));return o}})(Qi)),Qi}var ea,ku;function A1(){if(ku)return ea;ku=1;const t=E1();function e(n){this.genPoly=void 0,this.degree=n,this.degree&&this.initialize(this.degree)}return e.prototype.initialize=function(r){this.degree=r,this.genPoly=t.generateECPolynomial(this.degree)},e.prototype.encode=function(r){if(!this.genPoly)throw new Error("Encoder not initialized");const o=new Uint8Array(r.length+this.degree);o.set(r);const s=t.mod(o,this.genPoly),i=this.degree-s.length;if(i>0){const a=new Uint8Array(this.degree);return a.set(s,i),a}return s},ea=e,ea}var ta={},na={},ra={},Cu;function lg(){return Cu||(Cu=1,ra.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}),ra}var dt={},Iu;function dg(){if(Iu)return dt;Iu=1;const t="[0-9]+",e="[A-Z $%*+\\-./:]+";let n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+`)(?:.|[\r
3
3
  ]))+`;dt.KANJI=new RegExp(n,"g"),dt.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),dt.BYTE=new RegExp(r,"g"),dt.NUMERIC=new RegExp(t,"g"),dt.ALPHANUMERIC=new RegExp(e,"g");const o=new RegExp("^"+n+"$"),s=new RegExp("^"+t+"$"),i=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return dt.testKanji=function(c){return o.test(c)},dt.testNumeric=function(c){return s.test(c)},dt.testAlphanumeric=function(c){return i.test(c)},dt}var Ru;function kn(){return Ru||(Ru=1,(function(t){const e=lg(),n=dg();t.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},t.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},t.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},t.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},t.MIXED={bit:-1},t.getCharCountIndicator=function(s,i){if(!s.ccBits)throw new Error("Invalid mode: "+s);if(!e.isValid(i))throw new Error("Invalid version: "+i);return i>=1&&i<10?s.ccBits[0]:i<27?s.ccBits[1]:s.ccBits[2]},t.getBestModeForData=function(s){return n.testNumeric(s)?t.NUMERIC:n.testAlphanumeric(s)?t.ALPHANUMERIC:n.testKanji(s)?t.KANJI:t.BYTE},t.toString=function(s){if(s&&s.id)return s.id;throw new Error("Invalid mode")},t.isValid=function(s){return s&&s.bit&&s.ccBits};function r(o){if(typeof o!="string")throw new Error("Param is not a string");switch(o.toLowerCase()){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw new Error("Unknown mode: "+o)}}t.from=function(s,i){if(t.isValid(s))return s;try{return r(s)}catch{return i}}})(na)),na}var Tu;function k1(){return Tu||(Tu=1,(function(t){const e=An(),n=cg(),r=pl(),o=kn(),s=lg(),i=7973,a=e.getBCHDigit(i);function c(f,h,g){for(let m=1;m<=40;m++)if(h<=t.getCapacity(m,g,f))return m}function l(f,h){return o.getCharCountIndicator(f,h)+4}function d(f,h){let g=0;return f.forEach(function(m){const b=l(m.mode,h);g+=b+m.getBitsLength()}),g}function u(f,h){for(let g=1;g<=40;g++)if(d(f,g)<=t.getCapacity(g,h,o.MIXED))return g}t.from=function(h,g){return s.isValid(h)?parseInt(h,10):g},t.getCapacity=function(h,g,m){if(!s.isValid(h))throw new Error("Invalid QR Code version");typeof m>"u"&&(m=o.BYTE);const b=e.getSymbolTotalCodewords(h),w=n.getTotalCodewordsCount(h,g),I=(b-w)*8;if(m===o.MIXED)return I;const y=I-l(m,h);switch(m){case o.NUMERIC:return Math.floor(y/10*3);case o.ALPHANUMERIC:return Math.floor(y/11*2);case o.KANJI:return Math.floor(y/13);case o.BYTE:default:return Math.floor(y/8)}},t.getBestVersionForData=function(h,g){let m;const b=r.from(g,r.M);if(Array.isArray(h)){if(h.length>1)return u(h,b);if(h.length===0)return 1;m=h[0]}else m=h;return c(m.mode,m.getLength(),b)},t.getEncodedBits=function(h){if(!s.isValid(h)||h<7)throw new Error("Invalid QR Code version");let g=h<<12;for(;e.getBCHDigit(g)-a>=0;)g^=i<<e.getBCHDigit(g)-a;return h<<12|g}})(ta)),ta}var oa={},Pu;function C1(){if(Pu)return oa;Pu=1;const t=An(),e=1335,n=21522,r=t.getBCHDigit(e);return oa.getEncodedBits=function(s,i){const a=s.bit<<3|i;let c=a<<10;for(;t.getBCHDigit(c)-r>=0;)c^=e<<t.getBCHDigit(c)-r;return(a<<10|c)^n},oa}var sa={},ia,Nu;function I1(){if(Nu)return ia;Nu=1;const t=kn();function e(n){this.mode=t.NUMERIC,this.data=n.toString()}return e.getBitsLength=function(r){return 10*Math.floor(r/3)+(r%3?r%3*3+1:0)},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(r){let o,s,i;for(o=0;o+3<=this.data.length;o+=3)s=this.data.substr(o,3),i=parseInt(s,10),r.put(i,10);const a=this.data.length-o;a>0&&(s=this.data.substr(o),i=parseInt(s,10),r.put(i,a*3+1))},ia=e,ia}var aa,Lu;function R1(){if(Lu)return aa;Lu=1;const t=kn(),e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function n(r){this.mode=t.ALPHANUMERIC,this.data=r}return n.getBitsLength=function(o){return 11*Math.floor(o/2)+6*(o%2)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(o){let s;for(s=0;s+2<=this.data.length;s+=2){let i=e.indexOf(this.data[s])*45;i+=e.indexOf(this.data[s+1]),o.put(i,11)}this.data.length%2&&o.put(e.indexOf(this.data[s]),6)},aa=n,aa}var ca,Bu;function T1(){if(Bu)return ca;Bu=1;const t=kn();function e(n){this.mode=t.BYTE,typeof n=="string"?this.data=new TextEncoder().encode(n):this.data=new Uint8Array(n)}return e.getBitsLength=function(r){return r*8},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(n){for(let r=0,o=this.data.length;r<o;r++)n.put(this.data[r],8)},ca=e,ca}var la,_u;function P1(){if(_u)return la;_u=1;const t=kn(),e=An();function n(r){this.mode=t.KANJI,this.data=r}return n.getBitsLength=function(o){return o*13},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(r){let o;for(o=0;o<this.data.length;o++){let s=e.toSJIS(this.data[o]);if(s>=33088&&s<=40956)s-=33088;else if(s>=57408&&s<=60351)s-=49472;else throw new Error("Invalid SJIS character: "+this.data[o]+`
4
4
  Make sure your charset is UTF-8`);s=(s>>>8&255)*192+(s&255),r.put(s,13)}},la=n,la}var da={exports:{}},Ou;function N1(){return Ou||(Ou=1,(function(t){var e={single_source_shortest_paths:function(n,r,o){var s={},i={};i[r]=0;var a=e.PriorityQueue.make();a.push(r,0);for(var c,l,d,u,f,h,g,m,b;!a.empty();){c=a.pop(),l=c.value,u=c.cost,f=n[l]||{};for(d in f)f.hasOwnProperty(d)&&(h=f[d],g=u+h,m=i[d],b=typeof i[d]>"u",(b||m>g)&&(i[d]=g,a.push(d,g),s[d]=l))}if(typeof o<"u"&&typeof i[o]>"u"){var w=["Could not find a path from ",r," to ",o,"."].join("");throw new Error(w)}return s},extract_shortest_path_from_predecessor_list:function(n,r){for(var o=[],s=r;s;)o.push(s),n[s],s=n[s];return o.reverse(),o},find_path:function(n,r,o){var s=e.single_source_shortest_paths(n,r,o);return e.extract_shortest_path_from_predecessor_list(s,o)},PriorityQueue:{make:function(n){var r=e.PriorityQueue,o={},s;n=n||{};for(s in r)r.hasOwnProperty(s)&&(o[s]=r[s]);return o.queue=[],o.sorter=n.sorter||r.default_sorter,o},default_sorter:function(n,r){return n.cost-r.cost},push:function(n,r){var o={value:n,cost:r};this.queue.push(o),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t.exports=e})(da)),da.exports}var Du;function L1(){return Du||(Du=1,(function(t){const e=kn(),n=I1(),r=R1(),o=T1(),s=P1(),i=dg(),a=An(),c=N1();function l(w){return unescape(encodeURIComponent(w)).length}function d(w,I,y){const k=[];let L;for(;(L=w.exec(y))!==null;)k.push({data:L[0],index:L.index,mode:I,length:L[0].length});return k}function u(w){const I=d(i.NUMERIC,e.NUMERIC,w),y=d(i.ALPHANUMERIC,e.ALPHANUMERIC,w);let k,L;return a.isKanjiModeEnabled()?(k=d(i.BYTE,e.BYTE,w),L=d(i.KANJI,e.KANJI,w)):(k=d(i.BYTE_KANJI,e.BYTE,w),L=[]),I.concat(y,k,L).sort(function(T,x){return T.index-x.index}).map(function(T){return{data:T.data,mode:T.mode,length:T.length}})}function f(w,I){switch(I){case e.NUMERIC:return n.getBitsLength(w);case e.ALPHANUMERIC:return r.getBitsLength(w);case e.KANJI:return s.getBitsLength(w);case e.BYTE:return o.getBitsLength(w)}}function h(w){return w.reduce(function(I,y){const k=I.length-1>=0?I[I.length-1]:null;return k&&k.mode===y.mode?(I[I.length-1].data+=y.data,I):(I.push(y),I)},[])}function g(w){const I=[];for(let y=0;y<w.length;y++){const k=w[y];switch(k.mode){case e.NUMERIC:I.push([k,{data:k.data,mode:e.ALPHANUMERIC,length:k.length},{data:k.data,mode:e.BYTE,length:k.length}]);break;case e.ALPHANUMERIC:I.push([k,{data:k.data,mode:e.BYTE,length:k.length}]);break;case e.KANJI:I.push([k,{data:k.data,mode:e.BYTE,length:l(k.data)}]);break;case e.BYTE:I.push([{data:k.data,mode:e.BYTE,length:l(k.data)}])}}return I}function m(w,I){const y={},k={start:{}};let L=["start"];for(let C=0;C<w.length;C++){const T=w[C],x=[];for(let v=0;v<T.length;v++){const A=T[v],N=""+C+v;x.push(N),y[N]={node:A,lastCount:0},k[N]={};for(let D=0;D<L.length;D++){const E=L[D];y[E]&&y[E].node.mode===A.mode?(k[E][N]=f(y[E].lastCount+A.length,A.mode)-f(y[E].lastCount,A.mode),y[E].lastCount+=A.length):(y[E]&&(y[E].lastCount=A.length),k[E][N]=f(A.length,A.mode)+4+e.getCharCountIndicator(A.mode,I))}}L=x}for(let C=0;C<L.length;C++)k[L[C]].end=0;return{map:k,table:y}}function b(w,I){let y;const k=e.getBestModeForData(w);if(y=e.from(I,k),y!==e.BYTE&&y.bit<k.bit)throw new Error('"'+w+'" cannot be encoded with mode '+e.toString(y)+`.
5
5
  Suggested mode is: `+e.toString(k));switch(y===e.KANJI&&!a.isKanjiModeEnabled()&&(y=e.BYTE),y){case e.NUMERIC:return new n(w);case e.ALPHANUMERIC:return new r(w);case e.KANJI:return new s(w);case e.BYTE:return new o(w)}}t.fromArray=function(I){return I.reduce(function(y,k){return typeof k=="string"?y.push(b(k,null)):k.data&&y.push(b(k.data,k.mode)),y},[])},t.fromString=function(I,y){const k=u(I,a.isKanjiModeEnabled()),L=g(k),C=m(L,y),T=c.find_path(C.map,"start","end"),x=[];for(let v=1;v<T.length-1;v++)x.push(C.table[T[v]].node);return t.fromArray(h(x))},t.rawSplit=function(I){return t.fromArray(u(I,a.isKanjiModeEnabled()))}})(sa)),sa}var Fu;function B1(){if(Fu)return Wi;Fu=1;const t=An(),e=pl(),n=w1(),r=y1(),o=b1(),s=v1(),i=S1(),a=cg(),c=A1(),l=k1(),d=C1(),u=kn(),f=L1();function h(C,T){const x=C.size,v=s.getPositions(T);for(let A=0;A<v.length;A++){const N=v[A][0],D=v[A][1];for(let E=-1;E<=7;E++)if(!(N+E<=-1||x<=N+E))for(let S=-1;S<=7;S++)D+S<=-1||x<=D+S||(E>=0&&E<=6&&(S===0||S===6)||S>=0&&S<=6&&(E===0||E===6)||E>=2&&E<=4&&S>=2&&S<=4?C.set(N+E,D+S,!0,!0):C.set(N+E,D+S,!1,!0))}}function g(C){const T=C.size;for(let x=8;x<T-8;x++){const v=x%2===0;C.set(x,6,v,!0),C.set(6,x,v,!0)}}function m(C,T){const x=o.getPositions(T);for(let v=0;v<x.length;v++){const A=x[v][0],N=x[v][1];for(let D=-2;D<=2;D++)for(let E=-2;E<=2;E++)D===-2||D===2||E===-2||E===2||D===0&&E===0?C.set(A+D,N+E,!0,!0):C.set(A+D,N+E,!1,!0)}}function b(C,T){const x=C.size,v=l.getEncodedBits(T);let A,N,D;for(let E=0;E<18;E++)A=Math.floor(E/3),N=E%3+x-8-3,D=(v>>E&1)===1,C.set(A,N,D,!0),C.set(N,A,D,!0)}function w(C,T,x){const v=C.size,A=d.getEncodedBits(T,x);let N,D;for(N=0;N<15;N++)D=(A>>N&1)===1,N<6?C.set(N,8,D,!0):N<8?C.set(N+1,8,D,!0):C.set(v-15+N,8,D,!0),N<8?C.set(8,v-N-1,D,!0):N<9?C.set(8,15-N-1+1,D,!0):C.set(8,15-N-1,D,!0);C.set(v-8,8,1,!0)}function I(C,T){const x=C.size;let v=-1,A=x-1,N=7,D=0;for(let E=x-1;E>0;E-=2)for(E===6&&E--;;){for(let S=0;S<2;S++)if(!C.isReserved(A,E-S)){let P=!1;D<T.length&&(P=(T[D]>>>N&1)===1),C.set(A,E-S,P),N--,N===-1&&(D++,N=7)}if(A+=v,A<0||x<=A){A-=v,v=-v;break}}}function y(C,T,x){const v=new n;x.forEach(function(S){v.put(S.mode.bit,4),v.put(S.getLength(),u.getCharCountIndicator(S.mode,C)),S.write(v)});const A=t.getSymbolTotalCodewords(C),N=a.getTotalCodewordsCount(C,T),D=(A-N)*8;for(v.getLengthInBits()+4<=D&&v.put(0,4);v.getLengthInBits()%8!==0;)v.putBit(0);const E=(D-v.getLengthInBits())/8;for(let S=0;S<E;S++)v.put(S%2?17:236,8);return k(v,C,T)}function k(C,T,x){const v=t.getSymbolTotalCodewords(T),A=a.getTotalCodewordsCount(T,x),N=v-A,D=a.getBlocksCount(T,x),E=v%D,S=D-E,P=Math.floor(v/D),R=Math.floor(N/D),O=R+1,j=P-R,M=new c(j);let B=0;const F=new Array(D),U=new Array(D);let H=0;const q=new Uint8Array(C.buffer);for(let X=0;X<D;X++){const Z=X<S?R:O;F[X]=q.slice(B,B+Z),U[X]=M.encode(F[X]),B+=Z,H=Math.max(H,Z)}const K=new Uint8Array(v);let W=0,G,V;for(G=0;G<H;G++)for(V=0;V<D;V++)G<F[V].length&&(K[W++]=F[V][G]);for(G=0;G<j;G++)for(V=0;V<D;V++)K[W++]=U[V][G];return K}function L(C,T,x,v){let A;if(Array.isArray(C))A=f.fromArray(C);else if(typeof C=="string"){let P=T;if(!P){const R=f.rawSplit(C);P=l.getBestVersionForData(R,x)}A=f.fromString(C,P||40)}else throw new Error("Invalid data");const N=l.getBestVersionForData(A,x);if(!N)throw new Error("The amount of data is too big to be stored in a QR Code");if(!T)T=N;else if(T<N)throw new Error(`
@@ -32,4 +32,4 @@ ${t.stack}`:"",e?`
32
32
  React component stack:
33
33
  ${e.trim()}`:""].filter(Boolean).join(`
34
34
  `)}async function AC(t){try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(t),!0}catch{}const e=document.createElement("textarea");e.value=t,e.setAttribute("readonly",""),e.style.position="fixed",e.style.opacity="0",document.body.appendChild(e),e.select();try{return document.execCommand("copy")}catch{return!1}finally{e.remove()}}function kC({error:t,componentStack:e}){const{t:n}=li(),[r,o]=Ke.useState("idle"),s=async()=>{const i=EC(t,e,{url:window.location.href,userAgent:navigator.userAgent,capturedAt:new Date().toISOString()});o(await AC(i)?"copied":"failed")};return p.jsx("div",{className:"flex h-full items-center justify-center p-4",children:p.jsxs("div",{className:"flex flex-col items-center gap-3 text-center max-w-md",children:[p.jsx("div",{className:"w-12 h-12 rounded-full bg-destructive/10 flex items-center justify-center",children:p.jsx("svg",{className:"w-6 h-6 text-destructive",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:p.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})})}),p.jsxs("div",{className:"space-y-1",children:[p.jsx("h3",{className:"font-medium text-foreground",children:n("errorBoundary.title")}),p.jsx("p",{className:"text-sm text-muted-foreground",children:t?.message||n("errorBoundary.unexpected")})]}),p.jsxs("div",{className:"mt-2 flex flex-wrap items-center justify-center gap-2",children:[p.jsx("button",{type:"button",onClick:()=>{s()},className:"rounded-full bg-surface-2 px-5 py-2.5 text-sm font-medium text-foreground ring-1 ring-border/15 transition hover:bg-surface-elevated active:scale-[0.97]",children:n(r==="copied"?"errorBoundary.copied":r==="failed"?"errorBoundary.copyFailed":"errorBoundary.copyDetails")}),p.jsx("button",{type:"button",onClick:()=>window.location.reload(),className:"rounded-full bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 active:scale-[0.97]",children:n("errorBoundary.retry")})]})]})})}class CC extends Ke.Component{state={hasError:!1,error:null,componentStack:""};static getDerivedStateFromError(e){return{hasError:!0,error:e,componentStack:""}}componentDidCatch(e,n){console.error("Terminal error caught by boundary:",e,n),this.setState({componentStack:n.componentStack??""})}render(){return this.state.hasError?this.props.fallback?this.props.fallback:p.jsx(kC,{error:this.state.error,componentStack:this.state.componentStack}):this.props.children}}function ge(){try{if(window.parent!==window&&location.pathname==="/workspace.html"&&window.parent.location.origin===location.origin&&window.parent.__termdockWorkspaceHost)return window.parent}catch{}return window}const IC="debug",RC="termdock:debug";function df(t){return t?new Set(t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)):new Set}function TC(){if(typeof window>"u")return new Set;const t=df(new URLSearchParams(window.location.search).get(IC));let e=new Set;try{e=df(window.localStorage.getItem(RC))}catch{e=new Set}const n=new Set([...t,...e]);return n.has("1")||n.has("true")||n.has("*")||n.has("all")?new Set(["*"]):n}function PC(t){const e=TC();return e.has("*")||e.has(t)}function NC(t){const e=PC(t);return(...n)=>{e&&console.log(`[debug:${t}]`,...n)}}const uf=80,LC=60,BC="termdock:viewport-keyboard-change",_C="termdock:viewport-layout-change",Ct=240,ff=640,hf=360,OC=1500;function DC({measuredHeight:t,documentVisible:e,editableFocused:n}){return e&&n&&t>0}function ka(){if(typeof document>"u")return!1;const t=document.activeElement;return t instanceof HTMLElement&&t.matches('input:not([type="hidden"]), textarea, select, [contenteditable]:not([contenteditable="false"])')}const $s=t=>{const e=typeof t=="number"?t:Number.parseFloat(typeof t=="string"?t:"0");return Number.isFinite(e)&&e>0?Math.round(e):0},Zg=(t,e)=>{const n=t.map($s).filter(r=>r>0);return n.find(r=>r>=Ct)??n[0]??e},to=()=>typeof window>"u"?ff:Zg([ge().innerHeight,document.documentElement?.clientHeight,document.body?.clientHeight,ge().visualViewport?.height,window.screen?.availHeight,window.screen?.height],ff),Jg=()=>typeof window>"u"?hf:Zg([ge().innerWidth,document.documentElement?.clientWidth,document.body?.clientWidth,ge().visualViewport?.width,window.screen?.availWidth,window.screen?.width],hf),$t=t=>{const e=Number.parseFloat(t||"0");return Number.isFinite(e)?Math.max(0,Math.round(e)):0},Qg=()=>typeof navigator>"u"?!1:/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1,FC=()=>typeof window>"u"?!1:ge().navigator.standalone===!0||ge().matchMedia?.("(display-mode: standalone)").matches===!0,em=()=>{if(typeof window>"u"||!Qg()||!FC())return{top:0,right:0,bottom:0,left:0};if(!(to()>=Jg()))return{top:0,right:0,bottom:0,left:0};const e=window.screen?.width||window.innerWidth,n=window.screen?.height||window.innerHeight,r=Math.min(e,n),o=Math.max(e,n);return r>=700?{top:20,right:0,bottom:20,left:0}:o<780?{top:20,right:0,bottom:0,left:0}:{top:o>=852?59:o>=844?47:44,right:0,bottom:34,left:0}};function MC(t="--app-vh"){if(typeof window>"u"||typeof document>"u")return;const e=$s(ge().visualViewport?.height),n=Math.max(0,Math.round(ge().visualViewport?.offsetTop??0)),r=to(),s=e>=Ct?Math.min(r,e+n):r,i=Math.max(r,s),a=document.documentElement.style;a.setProperty(t,`${Math.max(s,Ct)}px`),a.setProperty("--app-base-vh",`${Math.max(i,Ct)}px`),a.setProperty("--app-visible-vh",`${Math.max(s,Ct)}px`),a.setProperty("--app-vv-offset-top",`${n}px`),a.setProperty("--kb-translate-y","0px"),a.setProperty("--kb-margin-top","0px"),a.setProperty("--kb-height","0px");const c=em();c.top>0&&a.setProperty("--safe-top-inset",`${c.top}px`),c.right>0&&a.setProperty("--safe-right-inset",`${c.right}px`),c.bottom>0&&a.setProperty("--safe-bottom-inset",`${c.bottom}px`),c.left>0&&a.setProperty("--safe-left-inset",`${c.left}px`)}function uR(t={}){const{cssVarName:e="--app-vh"}=t,n=Ke.useMemo(()=>NC("viewport"),[]),r=Ke.useCallback(()=>{if(typeof window>"u")return 0;const d=ge().visualViewport,u=to();if(!d)return u;const f=$s(d.height);if(f<Ct&&u>=Ct)return u;const h=d.offsetTop,m=f<u-1&&h>0&&h<=96?f+h:f,b=Math.max(0,Math.min(u,m));return b>0?Math.round(b):u},[]),[o,s]=Ke.useState(r),i=Ke.useRef(0),a=Ke.useRef(0),c=Ke.useRef(0),l=Ke.useRef(!1);return Ke.useEffect(()=>{if(typeof window>"u")return;let d=null,u=0,f=null,h="",g=null;const m=()=>{if(g?.isConnected)return g;try{return g=document.createElement("div"),g.setAttribute("aria-hidden","true"),g.style.cssText=["position:fixed","top:0","left:0","width:0","height:0","visibility:hidden","pointer-events:none","padding-top:constant(safe-area-inset-top)","padding-top:env(safe-area-inset-top,0px)","padding-right:constant(safe-area-inset-right)","padding-right:env(safe-area-inset-right,0px)","padding-bottom:constant(safe-area-inset-bottom)","padding-bottom:env(safe-area-inset-bottom,0px)","padding-left:constant(safe-area-inset-left)","padding-left:env(safe-area-inset-left,0px)"].join(";"),(document.body||document.documentElement).appendChild(g),g}catch{}return null},b=()=>{let R={top:0,right:0,bottom:0,left:0};try{const B=m();if(B){const F=getComputedStyle(B);R={top:$t(F.paddingTop),right:$t(F.paddingRight),bottom:$t(F.paddingBottom),left:$t(F.paddingLeft)}}}catch{}const O=ge();if(O!==window){const B=O.getComputedStyle(O.document.documentElement);R={top:Math.max(R.top,$t(B.getPropertyValue("--safe-top-inset"))),right:Math.max(R.right,$t(B.getPropertyValue("--safe-right-inset"))),bottom:Math.max(R.bottom,$t(B.getPropertyValue("--safe-bottom-inset"))),left:Math.max(R.left,$t(B.getPropertyValue("--safe-left-inset")))}}const j=em(),M={top:Math.max(R.top,j.top),right:Math.max(R.right,j.right),bottom:Math.max(R.bottom,j.bottom),left:Math.max(R.left,j.left)};return document.documentElement.style.setProperty("--safe-top-inset",`${M.top}px`),document.documentElement.style.setProperty("--safe-right-inset",`${M.right}px`),document.documentElement.style.setProperty("--safe-bottom-inset",`${M.bottom}px`),document.documentElement.style.setProperty("--safe-left-inset",`${M.left}px`),M},w=(R,O,j,M)=>{const B=Math.max(O,j);if(i.current===0){i.current=B,a.current=R,document.documentElement.style.setProperty("--app-base-vh",`${B}px`);return}const F=Math.abs(R-a.current),U=M<=uf;(F>LC||U)&&(i.current=B,a.current=R,document.documentElement.style.setProperty("--app-base-vh",`${B}px`))},I=(R="event")=>{d=null;const O=r(),j=Math.round(ge().visualViewport?.offsetTop??0),M=$s(ge().visualViewport?.height),B=M>=Ct?M:O,F=to(),U=Jg(),H=Math.max(0,B+j),q=b(),K=q.bottom,W=Math.max(0,i.current-H-K);w(U,F,H,W),s(Rn=>Rn===O?Rn:O);const G=Number.parseInt(document.documentElement.style.getPropertyValue(e)||"0",10);document.documentElement.style.setProperty(e,`${O}px`),document.documentElement.style.setProperty("--app-vv-offset-top",`${j}px`);const V=i.current,X=Math.min(O,B),Z=Math.max(0,Math.min(V,H)),ce=Math.max(0,Math.round(V-X-K)),Ie=ka(),Fe=DC({measuredHeight:ce,documentVisible:document.visibilityState==="visible",editableFocused:Ie}),re=Fe?ce:0,We=re>=uf,Jt=-re,Qt=re;document.documentElement.style.setProperty("--kb-translate-y",`${Jt}px`),document.documentElement.style.setProperty("--kb-margin-top",`${Qt}px`),document.documentElement.style.setProperty("--kb-height",`${re}px`),document.documentElement.style.setProperty("--app-visible-vh",`${Z}px`);const Me=Math.abs(re-c.current)>1,en=We!==l.current;(Me||en)&&(c.current=re,l.current=We,document.dispatchEvent(new CustomEvent(BC,{detail:{baseHeight:V,visibleHeight:Z,visualViewportHeight:B,offsetTop:j,keyboardHeight:re,isOpen:We,source:R}}))),(G!==O||j>0||Me||en)&&n("sync",{cssVarName:e,innerHeight:F,baseHeight:V,rawViewportHeight:B,offsetTop:j,visibleHeight:Z,rawHeight:O,appliedHeight:O,keyboardViewportHeight:X,measuredKeyboardHeight:ce,editableFocused:Ie,applyKeyboardInset:Fe,keyboardHeight:re,isKeyboardOpen:We,safeAreaInsets:q,source:R}),document.dispatchEvent(new CustomEvent(_C,{detail:{height:O,baseHeight:V,visibleHeight:Z,offsetTop:j,source:R}}))},y=()=>{d===null&&(d=window.requestAnimationFrame(()=>{d=null;const R=ge(),O=R.visualViewport,j=[R.innerWidth,R.innerHeight,O?.width,O?.height,O?.offsetTop,O?.offsetLeft,document.visibilityState,ka()].join(":"),M=f;f=null,(M||j!==h)&&(h=j,I(M||"viewport.settle")),performance.now()<u&&y()}))},k=(R="event")=>{(R.includes("visibilitychange")||R.includes("pageshow"))&&n("schedule",{source:R}),f=R,Qg()&&document.visibilityState==="visible"&&(u=performance.now()+OC),y()};k("mount");const L=()=>k("resize"),C=()=>k("orientationchange"),T=()=>k("visualViewport.resize"),x=()=>k("visualViewport.scroll"),v=()=>k("focusin"),A=()=>k("focusout"),N=R=>{u=0;const O=document.activeElement;O instanceof HTMLElement&&ka()&&O.blur(),c.current=0,l.current=!1;const j=Math.max(i.current,to(),Ct),M=document.documentElement.style;M.setProperty(e,`${j}px`),M.setProperty("--app-visible-vh",`${j}px`),M.setProperty("--app-vv-offset-top","0px"),M.setProperty("--kb-translate-y","0px"),M.setProperty("--kb-margin-top","0px"),M.setProperty("--kb-height","0px"),s(B=>B===j?B:j),n("keyboard session reset",{source:R,baseHeight:j})};window.addEventListener("resize",L),window.addEventListener("orientationchange",C),ge().visualViewport?.addEventListener("resize",T),ge().visualViewport?.addEventListener("scroll",x),document.addEventListener("focusin",v),document.addEventListener("focusout",A);const D=R=>{n("resume",{source:R,innerHeight:Math.round(window.innerHeight),visualViewport:ge().visualViewport?{width:Math.round(ge().visualViewport.width),height:Math.round(ge().visualViewport.height),offsetTop:Math.round(ge().visualViewport.offsetTop)}:null,hidden:document.hidden}),k(R)},E=()=>{document.hidden?N("visibilitychange:hidden"):D("visibilitychange")},S=()=>D("pageshow"),P=()=>N("pagehide");return document.addEventListener("visibilitychange",E),window.addEventListener("pageshow",S),window.addEventListener("pagehide",P),()=>{window.removeEventListener("resize",L),window.removeEventListener("orientationchange",C),ge().visualViewport?.removeEventListener("resize",T),ge().visualViewport?.removeEventListener("scroll",x),document.removeEventListener("focusin",v),document.removeEventListener("focusout",A),document.removeEventListener("visibilitychange",E),window.removeEventListener("pageshow",S),window.removeEventListener("pagehide",P),d!==null&&window.cancelAnimationFrame(d),g?.remove()}},[e,n,r]),o}const jC=1e3,UC=2e4,$C=9e4,HC=5e3,Q={ws:null,listeners:new Set,reconnectAttempt:0,reconnectTimer:null,idleCloseTimer:null,closing:!1};let Yo=0,ar=null;function qC(){return typeof window>"u"?null:`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/api/control/ws`}function tm(){Q.idleCloseTimer&&(clearTimeout(Q.idleCloseTimer),Q.idleCloseTimer=null)}function KC(){tm(),!(Q.ws&&Q.ws.readyState===WebSocket.OPEN)&&(Q.idleCloseTimer=setTimeout(()=>{Q.idleCloseTimer=null,Q.listeners.size===0&&zC()},HC))}function zC(){if(Q.ws){try{Q.ws.close()}catch{}Q.ws=null}ar&&(clearInterval(ar),ar=null)}function pf(){if(Q.reconnectTimer)return;const t=Math.min(jC*Math.pow(2,Q.reconnectAttempt),UC);Q.reconnectAttempt+=1,Q.reconnectTimer=setTimeout(()=>{Q.reconnectTimer=null,nm()},t)}function nm(){const t=qC();if(!t||Q.ws&&Q.ws.readyState===WebSocket.OPEN)return;let e;try{e=Gp(t)}catch{pf();return}Q.ws=e,e.onopen=()=>{Q.reconnectAttempt=0,Yo=Date.now(),ar||(ar=setInterval(()=>{if(!(!Q.ws||Q.ws.readyState!==WebSocket.OPEN)&&Yo>0&&Date.now()-Yo>$C)try{Q.ws.close()}catch{}},3e4),ar.unref?.())},e.onmessage=n=>{Yo=Date.now();let r=null;try{r=JSON.parse(n.data)}catch{return}if(!r)return;if(r.type==="session-notice"){if(typeof r.id!="string"||typeof r.sessionId!="string"||typeof r.sessionName!="string"||typeof r.message!="string"||!r.message.trim()||r.message.length>4e3||r.title!==void 0&&(typeof r.title!="string"||r.title.length>120)||typeof r.createdAt!="number")return;const i=r;for(const a of Q.listeners)try{a(i)}catch(c){console.error("[clientStateSync] listener threw:",c)}return}if(r.type==="update-state"){const i=r.state;if(!i||typeof i.status!="string"||typeof i.currentVersion!="string")return;const a={type:"update-state",state:i};for(const c of Q.listeners)try{c(a)}catch(l){console.error("[clientStateSync] listener threw:",l)}return}if(r.type==="context-draft"){if(typeof r.text!="string")return;const i={type:"context-draft",text:r.text,updatedAt:typeof r.updatedAt=="number"?r.updatedAt:Date.now(),origin:typeof r.origin=="string"?r.origin:null};for(const a of Q.listeners)try{a(i)}catch(c){console.error("[clientStateSync] listener threw:",c)}return}if(r.type==="pinned-explorer-roots"){if(!r.pinnedExplorerRoots||typeof r.pinnedExplorerRoots!="object"||Array.isArray(r.pinnedExplorerRoots))return;const i={type:"pinned-explorer-roots",pinnedExplorerRoots:r.pinnedExplorerRoots,updatedAt:typeof r.updatedAt=="number"?r.updatedAt:Date.now(),origin:typeof r.origin=="string"?r.origin:null};for(const a of Q.listeners)try{a(i)}catch(c){console.error("[clientStateSync] listener threw:",c)}return}if(r.type==="config-updated"){if(r.key!=="toolbar-presets"&&r.key!=="agent-rules"&&r.key!=="program-detection")return;const i={type:"config-updated",key:r.key,updatedAt:typeof r.updatedAt=="number"?r.updatedAt:void 0};for(const a of Q.listeners)try{a(i)}catch(c){console.error("[clientStateSync] listener threw:",c)}return}if(r.type!=="client-state"||!r.state)return;const o=r.state,s={type:"client-state",clientState:{sessions:Array.isArray(o.sessions)?o.sessions:[],updatedAt:typeof o.updatedAt=="number"?o.updatedAt:Date.now()},inventory:r.inventory,seq:typeof r.seq=="number"?r.seq:void 0};for(const i of Q.listeners)try{i(s)}catch(a){console.error("[clientStateSync] listener threw:",a)}},e.onclose=()=>{Q.ws===e&&(Q.ws=null),Q.listeners.size>0&&pf()},e.onerror=()=>{}}function rm(t){return Q.listeners.add(t),tm(),Q.ws||nm(),()=>{Q.listeners.delete(t),Q.listeners.size===0&&KC()}}const Ca=Il(t=>({unread:{},viewing:null,receive:(e,n)=>t(r=>{const o=r.unread[e]??[];return r.viewing===e||o.includes(n)?r:{unread:{...r.unread,[e]:[...o,n]}}}),view:e=>t(n=>{if(!e||!n.unread[e])return n.viewing===e?n:{viewing:e};const r={...n.unread};return delete r[e],{viewing:e,unread:r}})})),om=new Set(["bash","zsh","fish","sh","dash","ksh","tcsh","csh","nu"]);function Kn(t){if(!t)return null;if(t==="/")return"/";const e=t.replace(/\/+$/,"").split("/");return e[e.length-1]||t}function WC(t,e,n,r=om,o=null,s=null){if(t.customName)return{primary:t.name,secondary:Kn(n)};if(o){const a=Kn(n),c=o===n||o===a;if(s!=="idle"&&!r.has(o)&&!c)return{primary:o,secondary:a}}if(e&&!r.has(e))return{primary:e,secondary:Kn(n)};const i=Kn(n);return i?{primary:i,secondary:null}:{primary:t.name,secondary:null}}function GC(t,e,n,r=om,o=null,s=null){return WC(t,e,n,r,o,s).primary}function VC(t,e,n){const r=[],o=new Map;for(const s of t){const i=e(s),a=i&&i.trim().length>0?i:"";let c=o.get(a);c||(c={key:a,label:a?Kn(a)??a:n,sessions:[]},o.set(a,c),r.push(c)),c.sessions.push(s)}return r.sort((s,i)=>(s.key===""?1:0)-(i.key===""?1:0))}function fR(t){return t&&t.trim().length>0?t:""}function hR(t,e,n){const r=[...t],[o]=r.splice(e,1);return o?(r.splice(n,0,o),r.flatMap(s=>s.sessions.map(i=>i.id))):t.flatMap(s=>s.sessions.map(i=>i.id))}function XC(t,e){const n=new Set;return t.flatMap(r=>{const o=[...new Set(r.sessionIds)].filter(s=>e.has(s)&&!n.has(s));return o.length<(r.federated?1:2)?[]:(o.forEach(s=>n.add(s)),[{...r,sessionIds:o}])})}function pR(t,e,n,r,o=[],s=[]){const i=new Map(t.map(g=>[g.id,g])),a=XC(s,new Set(i.keys())),c=new Map,l=new Map,d=o.filter(g=>g.sessionIds.length>=2&&g.sessionIds.every(m=>i.has(m))),u=(g,m)=>{const b=i.get(m);g.forEach(w=>{c.set(w,g),l.set(w,b)})};for(const g of a){const m=new Set(g.sessionIds),b=new Map;for(const y of d)y.sessionIds.every(k=>m.has(k))&&y.sessionIds.forEach(k=>b.set(k,y.sessionIds));const w=new Set,I=g.sessionIds.flatMap(y=>{if(w.has(y))return[];const k=b.get(y)??[y];return k.forEach(L=>w.add(L)),k});u(I,g.sessionIds[0])}for(const g of d)g.sessionIds.some(m=>c.has(m))||u(g.sessionIds,g.sessionIds[0]);const f=g=>{const m=new Set;return g.flatMap(b=>{if(m.has(b.id))return[];const w=c.get(b.id)??[b.id];return w.forEach(I=>m.add(I)),w.map(I=>i.get(I))})};if(!n)return{arranged:f(t),groups:[]};const h=VC(t,g=>e(l.get(g.id)??g),r).map(g=>({...g,sessions:f(g.sessions)}));return{arranged:h.flatMap(g=>g.sessions),groups:h}}function YC(t,e,n){const r=t.findIndex(o=>n(o)===e);return r<0?null:t[r+1]?n(t[r+1]):r>0?n(t[r-1]):null}const Ia="termdock-sessions",Ac="termdock-active-session",Nl="termdock-sessions-cache";function kc(){try{const t=localStorage.getItem(Ac);return t&&t.trim().length>0?t:null}catch{return null}}function Fn(t){try{t?localStorage.setItem(Ac,t):localStorage.removeItem(Ac)}catch{}}function sm(){if(typeof window>"u")return null;try{const t=localStorage.getItem(Nl);if(!t)return null;const e=JSON.parse(t);return Array.isArray(e)?e.filter(n=>typeof n=="object"&&n!==null&&typeof n.sessionId=="string"&&typeof n.name=="string"):null}catch{return null}}function rn(t){if(!(typeof window>"u"))try{localStorage.setItem(Nl,JSON.stringify(t))}catch{}}function gf(){if(!(typeof window>"u"))try{localStorage.removeItem(Nl)}catch{}}function im(t){return t.map(e=>({...e,mode:e.mode==="tmux"?"tmux":"shell",tmuxSessionName:e.tmuxSessionName??null,customName:e.customName===!0}))}function mf(t){return im(t.map(e=>({sessionId:e.sessionId,name:e.name,customName:e.customName===!0,backendSessionId:e.backendSessionId,mode:e.mode,tmuxSessionName:e.tmuxSessionName,createdAt:e.createdAt,lastActivity:e.lastActivity}))).map((e,n)=>({...e,activeProgram:t[n]?.activeProgram??null,cwd:t[n]?.cwd??null}))}function wf(t){return t.map(e=>`${e.sessionId}:${e.name}:${e.customName}:${e.backendSessionId}:${e.mode}:${e.tmuxSessionName}:${e.lastActivity}:${e.activeProgram??""}:${e.cwd??""}`).join("|")}function Cc(t,e){return t.length===0?null:e&&t.some(n=>n.sessionId===e)?e:t[0]?.sessionId??null}function ZC(){const t=sm()??[];return{sessions:t,activeSessionId:Cc(t,kc())}}function gR(){const t=_.useRef(sm()).current,e=_.useRef(kc()).current,[n,r]=_.useState(t??[]),[o,s]=_.useState(null),[i,a]=_.useState(t&&t.length>0?Cc(t,e):e),[c,l]=_.useState(t===null),d=_.useRef(!1),u=_.useRef(null),f=_.useRef(t===null),h=_.useRef(0),g=_.useRef(new Set),m=_.useRef(0);_.useEffect(()=>{f.current=c},[c]),_.useEffect(()=>{u.current=i},[i]);const b=_.useCallback(S=>{const P=Cc(S,u.current??kc());return a(R=>R===P?R:P),Fn(P),u.current=P,P},[]),w=_.useCallback((S,P)=>{const R=S.filter(O=>!g.current.has(O.sessionId));r(O=>wf(O)===wf(R)?O:R),rn(R),P?.reconcileActive&&b(R)},[b]),I=_.useCallback((S,P)=>{const R=g.current.size===0?S:{...S,clientSessions:S.clientSessions.filter(O=>!g.current.has(O.sessionId))};s(R),w(mf(R.clientSessions),P)},[w]),y=_.useCallback(()=>typeof window>"u"?[]:localStorage.getItem(Ia)?(localStorage.removeItem(Ia),gf(),Fn(null),r([]),a(null),console.info("[session-persist] discarded legacy local session cache"),[]):[],[]),k=_.useCallback(async()=>{if(typeof window>"u")return[];const S=m.current;try{const P=await Ag(),R=mf(P.clientSessions);return S!==m.current?(console.info("[session-inventory] ignored restore snapshot superseded by a local mutation"),R.filter(O=>!g.current.has(O.sessionId))):(I(P,{reconcileActive:!0}),R.length>0?R:y())}catch(P){console.error("Failed to restore sessions from server:",P);try{return y()}catch(R){console.error("Failed to discard legacy local sessions:",R)}}finally{l(!1)}return[]},[I,y]),L=_.useCallback(async S=>{const P=++m.current,R=await kg(S);return P===m.current&&(I(R.inventory),a(R.session.sessionId),Fn(R.session.sessionId)),R},[I]),C=_.useCallback(async(S,P)=>{++m.current,g.current.add(S),r(R=>{const O=R.filter(B=>B.sessionId!==S),j=P!=null&&O.some(B=>B.sessionId===P),M=u.current===S?j?P:YC(R,S,B=>B.sessionId):u.current;return a(M),Fn(M),rn(O),O});try{await Ig(S)}catch(R){console.error("Failed to remove session from inventory:",R)}},[]),T=_.useCallback(S=>{const P=Date.now();r(R=>{const O=R.map(j=>j.sessionId===S?{...j,lastActivity:P}:j);return rn(O),O})},[]),x=_.useCallback(S=>{a(S),Fn(S)},[]),v=_.useCallback(async(S,P)=>{const R=P.trim();if(!R)return;const O=++m.current;r(j=>{const M=j.map(B=>B.sessionId===S?{...B,name:R,customName:!0}:B);return rn(M),M});try{const j=await ss(S,{name:R,customName:!0});O===m.current&&I(j)}catch(j){console.error("Failed to rename session in inventory:",j)}},[I]),A=_.useCallback(async S=>{const P=++m.current;r(R=>{const O=R.map(j=>j.sessionId===S?{...j,customName:!1}:j);return rn(O),O});try{const R=await ss(S,{customName:!1});P===m.current&&I(R)}catch(R){console.error("Failed to reset session name in inventory:",R)}},[I]),N=_.useCallback(async S=>{const P=++m.current;r(R=>{const O=new Map(R.map(U=>[U.sessionId,U])),j=S.map(U=>O.get(U)).filter(U=>U!==void 0),M=new Set(S),B=R.filter(U=>!M.has(U.sessionId)),F=[...j,...B];return rn(F),F});try{const R=await Cg(S);P===m.current&&I(R)}catch(R){console.error("Failed to reorder sessions in inventory:",R)}},[I]),D=_.useCallback(async()=>{++m.current;for(const S of n)g.current.add(S.sessionId);r([]),s(null),a(null),Fn(null),gf(),typeof window<"u"&&localStorage.removeItem(Ia);try{await Rg()}catch(S){console.error("Failed to clear session inventory:",S)}},[n]),E=_.useCallback(async(S,P)=>{const R=++m.current;r(O=>{const j=O.map(M=>M.sessionId===S?{...M,backendSessionId:P}:M);return rn(j),j});try{const O=await ss(S,{backendSessionId:P});R===m.current&&I(O)}catch(O){console.error("Failed to update session backend in inventory:",O)}},[I]);return _.useEffect(()=>{d.current||(d.current=!0,k())},[k]),_.useEffect(()=>rm(P=>{if(P.type!=="client-state"||f.current)return;const R=typeof P.seq=="number"?P.seq:null;if(R!==null){if(R<h.current){console.warn("[session-inventory] ignored stale control snapshot",{seq:R,latestSeq:h.current});return}h.current=R}if(P.inventory){I(P.inventory,{reconcileActive:!0});return}const O=im(P.clientState.sessions||[]);w(O,{reconcileActive:!0})}),[I,w]),{sessions:n,inventory:o,activeSessionId:i,isLoading:c,openSession:L,removeSession:C,updateSessionActivity:T,setActiveSession:x,updateSessionBackendId:E,renameSession:v,resetSessionCustomName:A,reorderSessions:N,clearAllSessions:D,restoreSessions:k}}const JC=256*1024,QC=256*1024,eI=128;function yf(t,e=JC){if(!t)return[];if(t.length<=e)return[t];const n=[];let r=0;for(;r<t.length;){let o=Math.min(r+e,t.length);if(o<t.length){const s=t.lastIndexOf(`
35
- `,o);s>r&&(o=s+1)}n.push(t.slice(r,o)),r=o}return n}function tI(t,e=QC,n=eI){const r=new Map;let o=0,s=0;for(const i of[...t.keys()]){const a=t.get(i);if(!a||a.length===0){t.delete(i);continue}const c=[];for(;a.length>0;){const l=a[0];if(s>0&&(s>=n||o+l.length>e))break;a.shift(),c.push(l),o+=l.length,s+=1}if(c.length>0&&r.set(i,c),t.delete(i),a.length>0&&t.set(i,a),s>=n||o>=e)break}return r}async function am(t,e=!1,n="termdock-encrypted-background"){const r=await new Promise((o,s)=>{const i=indexedDB.open(n,1);i.onupgradeneeded=()=>i.result.createObjectStore("state"),i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error)});try{return await new Promise((o,s)=>{const i=r.transaction("state",e?"readwrite":"readonly"),a=t(i.objectStore("state"));i.oncomplete=()=>o(a.result),i.onabort=i.onerror=()=>s(i.error)})}finally{r.close()}}const nI=t=>am(e=>e.put(t,t.targetPeerId),!0),rI=t=>am(e=>e.delete(t),!0),cm="termdock-pwa-notifications-enabled",lm="termdock-pwa-ai-notifications-enabled",dm="termdock-pwa-exit-notifications-enabled",um="termdock-pwa-notification-alert-style",oI="termdock-notification-claim:",Ic=5e3,sI=1500,Rc="termdock-push-last-sync",bf=360*60*1e3,iI=10080*60*1e3,no=new Map;function Ll(){return et()?!0:typeof window<"u"&&typeof Notification<"u"&&"serviceWorker"in navigator&&window.isSecureContext}function aI(){if(typeof navigator>"u")return!1;const t=navigator.userAgent;return/iPad|iPhone|iPod/.test(t)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function cI(){return typeof window>"u"?!1:!!(window.matchMedia("(display-mode: standalone)").matches||"standalone"in navigator&&navigator.standalone===!0)}function lI(){return et()?!0:!(!Ll()||aI()&&!cI())}function mR(){return et()?"granted":typeof Notification>"u"?"unsupported":Notification.permission}function Bl(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(cm)==="true"}catch{return!1}}function wR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(cm,String(t))}catch{}}function Hs(){if(typeof window>"u")return!0;try{const t=window.localStorage.getItem(lm);return t===null?!0:t==="true"}catch{return!0}}function yR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(lm,String(t))}catch{}}function Tc(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(dm)==="true"}catch{return!1}}function bR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(dm,String(t))}catch{}}function ho(){if(typeof window>"u")return"normal";try{const t=window.localStorage.getItem(um);if(t==="quiet"||t==="persistent")return t}catch{}return"normal"}function vR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(um,t)}catch{}}async function SR(){return et()?"granted":Ll()?Notification.permission==="default"?Notification.requestPermission():Notification.permission:"unsupported"}function dI(){return typeof document>"u"?!0:document.visibilityState==="visible"&&document.hasFocus()}function uI(t){for(const[e,n]of no)t-n>Ic&&no.delete(e)}function fI(t){return t.dedupKey?.trim()?t.dedupKey.trim():t.tag?.trim()?t.tag.trim():[t.data?.sessionId,t.title,t.body].filter(e=>typeof e=="string"&&e.trim().length>0).map(e=>e.trim()).join("|")}function hI(t){const e=fI(t);if(!e)return!0;const n=Date.now();uI(n);const r=no.get(e)??0;if(n-r<Ic)return!1;try{if(typeof window<"u"&&window.localStorage){const o=`${oI}${e}`,s=Number(window.localStorage.getItem(o)??"0");if(Number.isFinite(s)&&n-s<Ic)return no.set(e,s),!1;Number.isFinite(s)&&s>0&&window.localStorage.removeItem(o),window.localStorage.setItem(o,String(n))}}catch{}return no.set(e,n),!0}async function di(){if(typeof navigator>"u"||!("serviceWorker"in navigator))return null;try{const t=await navigator.serviceWorker.getRegistration()??null;return t?.active?t:await Promise.race([navigator.serviceWorker.ready,new Promise(n=>{window.setTimeout(()=>n(null),sI)})])??t}catch{return null}}function pI(t){const e="=".repeat((4-t.length%4)%4),n=(t+e).replace(/-/g,"+").replace(/_/g,"/"),r=window.atob(n),o=new Uint8Array(new ArrayBuffer(r.length));for(let s=0;s<r.length;s+=1)o[s]=r.charCodeAt(s);return o}async function _l(t,e){const n=await fetch("/api/csrf-token");if(!n.ok)throw new Error("Unable to get notification security token");const{csrfToken:r}=await n.json();return fetch(`/api/notifications/${t}`,{method:"POST",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":r},body:JSON.stringify(e)})}async function gI(t=!1,e=!1){if(et())return!0;if(!Bl()||!lI()||Notification.permission!=="granted")return!1;const n=await di();if(!n?.pushManager)return!1;try{const r=await fetch("/api/notifications/status");if(!r.ok)return!1;const o=await r.json();let s=await n.pushManager.getSubscription();const i=!!(s?.expirationTime&&s.expirationTime-Date.now()<iI);if(!s)try{s=await n.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:pI(o.publicKey)})}catch(d){return console.warn(`[PWA notifications] Push subscription missing; re-subscribe failed${e?" (user gesture)":""}:`,d),!1}const a=Number(window.localStorage.getItem(Rc)??"0"),c=!o.subscription||o.subscription.endpoint!==s.endpoint||Date.now()-(o.subscription.updatedAt??0)>=bf;if(t||c||Date.now()-a>=bf||i){if(!(await _l("subscribe",{subscription:s.toJSON(),aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language})).ok)return!1;window.localStorage.setItem(Rc,String(Date.now()))}const l=ne();return l&&await nI({targetPeerId:l.targetPeerId,addresses:br(l),routes:Xt(l),publicKey:o.publicKey,preferences:{aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language}}),!0}catch(r){return console.warn("[PWA notifications] Push subscription sync failed:",r),!1}}async function xR(){if(et())return;const e=await(await di())?.pushManager?.getSubscription();try{await _l("unsubscribe",{endpoint:e?.endpoint})}finally{const n=ne();n&&await rI(n.targetPeerId),await e?.unsubscribe();try{window.localStorage.removeItem(Rc)}catch{}}}async function ER(){if(et()||!Bl())return;(await _l("preferences",{aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language})).status===404&&await gI(!0)}async function AR(){if(!et())try{const t=navigator;typeof t.clearAppBadge=="function"&&await t.clearAppBadge()}catch{}}async function kR(t){if(!et())try{const e=await di();if(!e||typeof e.getNotifications!="function")return;const n=`agent:${t}`,r=await e.getNotifications({tag:n});for(const s of r)s.close();const o=navigator;if(typeof o.setAppBadge=="function"){const s=await e.getNotifications();await o.setAppBadge(s.length)}}catch{}}async function Ra(t){if(!Bl()||!Ll())return!1;if(t.requireHidden!==!1&&dI())return!0;const e=et();if(e){const s=t.alertStyle??ho(),i=await e.showNotification({title:t.title,body:t.body,tag:t.tag,sessionId:t.data?.sessionId,silent:s==="quiet",persistent:s==="persistent"});return e.notificationDeliveryConfirmation===!0&&i}if(Notification.permission!=="granted")return!1;const n=await di();if(t.deferToPush&&await n?.pushManager?.getSubscription())return!0;if(t.requireHidden!==!1){if(await n?.pushManager?.getSubscription())return!0}if(!hI(t))return!0;const r=t.alertStyle??ho(),o={body:t.body,tag:t.tag,icon:"/pwa-192x192.png",badge:"/maskable-icon-512x512.png",requireInteraction:r==="persistent",renotify:r==="persistent"?!!t.tag:!1,silent:r==="quiet",vibrate:r==="quiet"?[]:[80,40,80],data:{url:t.data?.url??"/",sessionId:t.data?.sessionId}};try{if(n&&typeof n.showNotification=="function")return await n.showNotification(t.title,o),!0;const s=new Notification(t.title,o);return s.onclick=()=>{window.focus(),t.data?.url&&window.location.href!==t.data.url&&window.location.assign(t.data.url),s.close()},!0}catch(s){if(s instanceof DOMException&&s.name==="NotSupportedError"&&o.renotify)try{const i={...o,renotify:!1};return n&&typeof n.showNotification=="function"?await n.showNotification(t.title,i):new Notification(t.title,i),!0}catch(i){return console.warn("[PWA notifications] Failed to show notification (renotify fallback):",i),!1}return console.warn("[PWA notifications] Failed to show notification:",s),!1}}function mI(){try{return localStorage.getItem("termdock:locale")||"en"}catch{return"en"}}function wI(t,e){return t==="zh"?{waitingTitle:`${e} 需要你的处理`,waitingBody:`${e} 需要你的处理。`,doneTitle:`${e} 已完成`,doneBody:`${e} 已完成,点按查看结果。`,exitedTitle:`${e} 已退出`,exitedBody:`${e} 已退出,点按查看结果。`}:{waitingTitle:`${e} needs your input`,waitingBody:`${e} is waiting for your input.`,doneTitle:`${e} finished`,doneBody:"Tap to see the result.",exitedTitle:`${e} exited`,exitedBody:"Tap to see the result."}}const vf=1e6;function Ht(t){return{sessionId:t,directory:"",terminalSessionId:null,mode:"shell",tmuxSessionName:null,activeProgram:null,activeProgramRaw:null,activeProgramSource:null,cwd:null,inCopyMode:!1,isConnecting:!1,agentStatus:null,agentIndicator:null,agentStatusDetail:null,agent:null,agentMessage:null,agentNativeSessionId:null,agentResumeRecovered:!1,agentRich:!1,agentActivity:0,agentCwd:null,agentNeedsReview:!1,shellTitle:null,promptState:null,shellExitCode:null,tuiProgress:null,gitStatus:null,bufferChunks:[],bufferLength:0,lastOutputAt:null,updatedAt:Date.now()}}const ui="termdock-shell-titles-v1";function fi(){if(typeof window>"u")return{};try{const t=localStorage.getItem(ui);if(!t)return{};const e=JSON.parse(t);return typeof e=="object"&&e!==null?e:{}}catch{return{}}}function yI(t){return fi()[t]??null}function bI(t,e){if(!(typeof window>"u"))try{const n=fi();e?n[t]=e:delete n[t],localStorage.setItem(ui,JSON.stringify(n))}catch{}}function vI(t){if(!(typeof window>"u"))try{const e=fi();delete e[t],localStorage.setItem(ui,JSON.stringify(e))}catch{}}const hi="termdock-agent-cache-v1";function Ol(){if(typeof window>"u")return{};try{const t=localStorage.getItem(hi);if(!t)return{};const e=JSON.parse(t);return typeof e=="object"&&e!==null?e:{}}catch{return{}}}function SI(t,e){if(!(typeof window>"u"))try{const n=Ol();e?n[t]=e:delete n[t],localStorage.setItem(hi,JSON.stringify(n))}catch{}}function xI(t){if(!(typeof window>"u"))try{const e=Ol();delete e[t],localStorage.setItem(hi,JSON.stringify(e))}catch{}}function EI(){if(!(typeof window>"u"))try{localStorage.removeItem(hi)}catch{}}function CR(t){return Ol()[t]??null}function AI(){if(!(typeof window>"u"))try{localStorage.removeItem(ui)}catch{}}const Ta=Il((t,e)=>{const n={pendingChunksBySession:new Map,activitySessionIds:new Set,batchFlushRafRef:null},r=(i,a)=>{const c=new Map;return t(l=>{const d=new Map(l.sessions);let u=l.nextChunkId;const f=Date.now();for(const[h,g]of i){const m=d.get(h)??Ht(h);let b=m.bufferChunks.length>0?[...m.bufferChunks]:[],w=m.bufferLength;for(const I of g){const y=u++;b.push({id:y,data:I}),c.set(h,y),w+=I.length}for(;w>vf&&b.length>1;){const I=b.shift();if(!I)break;w-=I.data.length}d.set(h,{...m,bufferChunks:b,bufferLength:w,lastOutputAt:a.has(h)?f:m.lastOutputAt,updatedAt:f})}return{sessions:d,nextChunkId:u}}),c},o=()=>{if(n.batchFlushRafRef===null){if(typeof window>"u"){s();return}n.batchFlushRafRef=window.requestAnimationFrame(()=>{n.batchFlushRafRef=null,s()})}},s=()=>{if(n.pendingChunksBySession.size===0)return;const i=tI(n.pendingChunksBySession),a=new Set([...i.keys()].filter(c=>n.activitySessionIds.has(c)));for(const c of i.keys())n.pendingChunksBySession.has(c)||n.activitySessionIds.delete(c);r(i,a),n.pendingChunksBySession.size>0&&o()};return{sessions:new Map,nextChunkId:1,activeSessionId:null,getTerminalSession:i=>e().sessions.get(i),setActiveSessionId:i=>{if(t({activeSessionId:i}),i){const a=e().sessions.get(i);if(a?.agentNeedsReview){const c=new Map(e().sessions);c.set(i,{...a,agentNeedsReview:!1,updatedAt:Date.now()}),t({sessions:c}),a.terminalSessionId&&hc(a.terminalSessionId)}}},setTerminalSession:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i),f=!d||d.terminalSessionId!==a.sessionId?Ht(i):d??Ht(i),h=a.history??d?.history??[];return l.set(i,{...f,terminalSessionId:a.sessionId,mode:a.mode??f.mode,tmuxSessionName:a.tmuxSessionName??f.tmuxSessionName,activeProgram:a.activeProgram??d?.activeProgram??f.activeProgram,activeProgramRaw:a.activeProgramRaw??d?.activeProgramRaw??f.activeProgramRaw,activeProgramSource:a.activeProgramSource??d?.activeProgramSource??f.activeProgramSource,cwd:a.cwd??d?.cwd??f.cwd,agentResumeRecovered:d?.agentResumeRecovered??f.agentResumeRecovered,shellTitle:d?.shellTitle??fi()[i]??f.shellTitle,sessionId:i,isConnecting:!1,history:h,updatedAt:Date.now()}),{sessions:l}})},setSessionHistory:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,history:a,updatedAt:Date.now()}),{sessions:l}})},setSessionActiveProgram:(i,a,c=null,l=null)=>{t(d=>{const u=new Map(d.sessions),f=u.get(i)??Ht(i);return u.set(i,{...f,activeProgram:a,activeProgramRaw:l,activeProgramSource:c,updatedAt:Date.now()}),{sessions:u}})},setSessionCwd:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,cwd:a,updatedAt:Date.now()}),{sessions:l}})},setSessionShellTitle:(i,a)=>{t(c=>{const l=c.sessions.get(i);if(!l||l.shellTitle===a)return c;const d=new Map(c.sessions);return d.set(i,{...l,shellTitle:a,updatedAt:Date.now()}),{sessions:d}}),bI(i,a)},setSessionPromptState:(i,a,c)=>{t(l=>{const d=l.sessions.get(i);if(!d||d.promptState===a)return l;const u=new Map(l.sessions);return u.set(i,{...d,promptState:a,shellExitCode:c??d.shellExitCode,updatedAt:Date.now()}),{sessions:u}})},setSessionTuiProgress:(i,a)=>{t(c=>{const l=c.sessions.get(i);if(!l)return c;const d=a?.state==="remove"?null:a;if(l.tuiProgress?.state===d?.state&&l.tuiProgress?.progress===d?.progress)return c;const u=new Map(c.sessions);return u.set(i,{...l,tuiProgress:d,updatedAt:Date.now()}),{sessions:u}})},setSessionGitStatus:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||JSON.stringify(d.gitStatus)===JSON.stringify(a)?c:(l.set(i,{...d,gitStatus:a,updatedAt:Date.now()}),{sessions:l})})},setSessionCopyMode:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||d.inCopyMode===a?c:(l.set(i,{...d,inCopyMode:a,updatedAt:Date.now()}),{sessions:l})})},setSessionAgentStatus:(i,a)=>{const c=e(),l=c.sessions.get(i);if(!l)return;const d=a.agentStatus??null,u=d&&d!=="idle"?a.agentIndicator??l.agentIndicator??null:null,f=d&&d!=="idle"?a.agentStatusDetail??null:null,h=a.agent!==void 0?a.agent:l.agent,g=a.agentMessage!==void 0?a.agentMessage:d?l.agentMessage:null,m=a.agentNativeSessionId!==void 0?a.agentNativeSessionId:l.agentNativeSessionId,b=a.agentResumeRecovered!==void 0?a.agentResumeRecovered:l.agentResumeRecovered,w=a.agentRich??l.agentRich,I=a.agentActivity??l.agentActivity,y=a.agentCwd!==void 0?a.agentCwd:l.agentCwd,k=c.activeSessionId!==i,L=l.agentStatus==="working"||l.agentStatus==="waiting"||l.agentStatus==="done",C=a.reviewed===!1||a.reviewed===null&&d===null&&L&&k;if(l.agentStatus===d&&l.agentIndicator===u&&l.agentStatusDetail===f&&l.agent===h&&l.agentMessage===g&&l.agentNativeSessionId===m&&l.agentResumeRecovered===b&&l.agentRich===w&&l.agentActivity===I&&l.agentCwd===y&&l.agentNeedsReview===C)return;const T=new Map(c.sessions);if(T.set(i,{...l,agentStatus:d,agentIndicator:u,agentStatusDetail:f,agent:h,agentMessage:g,agentNativeSessionId:m,agentResumeRecovered:b,agentRich:w,agentActivity:I,agentCwd:y,agentNeedsReview:C,updatedAt:Date.now()}),t({sessions:T}),h&&SI(i,h),!Hs())return;const x=h?.displayName??l.agent?.displayName??"Agent",v=mI(),A=wI(v,x);if(d==="waiting"&&l.agentStatus!=="waiting"&&k){Ra({title:A.waitingTitle,body:g??A.waitingBody,tag:`agent:${i}`,dedupKey:`agent:${i}:waiting:${I}`,data:{url:"/",sessionId:i},deferToPush:!0});return}if(d==="done"&&l.agentStatus!=="done"&&k){Ra({title:A.doneTitle,body:A.doneBody,tag:`agent:${i}`,dedupKey:`agent:${i}:done:${I}`,data:{url:"/",sessionId:i},deferToPush:!0});return}d===null&&(l.agentStatus==="working"||l.agentStatus==="waiting")&&k&&Ra({title:A.exitedTitle,body:A.exitedBody,tag:`agent:${i}`,dedupKey:`agent:${i}:exited:${I}`,data:{url:"/",sessionId:i},deferToPush:!0})},setAgentResumeRecovered:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return d.agentResumeRecovered===a?c:(l.set(i,{...d,agentResumeRecovered:a,updatedAt:Date.now()}),{sessions:l})})},clearAgentNeedsReview:i=>{const a=e().sessions.get(i);a?.agentNeedsReview&&(t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||!d.agentNeedsReview?c:(l.set(i,{...d,agentNeedsReview:!1,updatedAt:Date.now()}),{sessions:l})}),a.terminalSessionId&&hc(a.terminalSessionId))},setConnecting:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,isConnecting:a,updatedAt:Date.now()}),{sessions:l}})},appendToBuffer:(i,a,c)=>{if(!a)return;let l=n.pendingChunksBySession.get(i);l||(l=[],n.pendingChunksBySession.set(i,l)),l.push(...yf(a)),c?.markActivity!==!1&&n.activitySessionIds.add(i),o()},hasPendingBufferWrites:i=>(n.pendingChunksBySession.get(i)?.length??0)>0,flushPendingBufferWrites:i=>{const a=n.pendingChunksBySession.get(i);if(!a?.length)return e().sessions.get(i)?.bufferChunks.at(-1)?.id??null;n.pendingChunksBySession.delete(i);const c=n.activitySessionIds.delete(i);return n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),r(new Map([[i,a]]),c?new Set([i]):new Set).get(i)??null},replaceBuffer:(i,a)=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null);let c=null;return t(l=>{const d=new Map(l.sessions),u=d.get(i);if(!u)return l;if(!a||a.length===0)return d.set(i,{...u,bufferChunks:[],bufferLength:0,updatedAt:Date.now()}),{sessions:d};let f=l.nextChunkId;const h=[];let g=0;for(const m of a)if(m)for(const b of yf(m)){const w=f++;h.push({id:w,data:b}),c=w,g+=b.length}for(;g>vf&&h.length>1;){const m=h.shift();if(!m)break;g-=m.data.length}return d.set(i,{...u,bufferChunks:h,bufferLength:g,updatedAt:Date.now()}),{sessions:d,nextChunkId:f}}),c},clearTerminalSession:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t(a=>{const c=new Map(a.sessions),l=c.get(i);return l&&c.set(i,{...l,terminalSessionId:null,isConnecting:!1,agentStatus:null,agentIndicator:null,agentStatusDetail:null,agent:null,agentMessage:null,agentNeedsReview:!1,updatedAt:Date.now()}),{sessions:c}})},clearBuffer:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t(a=>{const c=new Map(a.sessions),l=c.get(i);return l?(c.set(i,{...l,bufferChunks:[],bufferLength:0,updatedAt:Date.now()}),{sessions:c}):a})},removeTerminalSession:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),t(a=>{const c=new Map(a.sessions);return c.delete(i),{sessions:c}}),vI(i),xI(i)},clearAllTerminalSessions:()=>{n.pendingChunksBySession.clear(),n.activitySessionIds.clear(),n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t({sessions:new Map,nextChunkId:1}),AI(),EI()}}}),Pc="termdock:session-notice";function kI(){return _.useEffect(()=>{const t=()=>Ca.getState().view(!document.hidden&&es()?Ta.getState().activeSessionId:null);t();const e=Ta.subscribe((n,r)=>{n.activeSessionId!==r.activeSessionId&&t()});return document.addEventListener("visibilitychange",t),window.addEventListener(lo,t),()=>{e(),document.removeEventListener("visibilitychange",t),window.removeEventListener(lo,t),Ca.getState().view(null)}},[]),_.useEffect(()=>rm(t=>{if(t.type!=="session-notice")return;Ca.getState().receive(t.sessionId,t.id);const e=ne()?.targetPeerId,n=ht(),r=window.parent,o=ZC().sessions.find(u=>u.sessionId===t.sessionId),s=Ta.getState().sessions.get(t.sessionId),i=s?.shellTitle??yI(t.sessionId),a=i===s?.cwd||i===Kn(s?.cwd??null)?null:i,c=GC(o??{name:t.sessionName},s?.activeProgram??null,null,void 0,a,s?.promptState??null),l={...t,sessionName:c,key:`${e??"local"}:${t.id}`,open:()=>e&&n?n.focusSession(e,t.sessionId):(window.dispatchEvent(new CustomEvent("termdock:focus-session",{detail:t.sessionId})),!0)},d=r.document.createEvent("CustomEvent");d.initCustomEvent(Pc,!1,!1,l),r.dispatchEvent(d)}),[]),null}function CI(){const{locale:t}=li(),e=t==="zh",[n,r]=_.useState([]);_.useEffect(()=>{const i=a=>{const c=a.detail;r(l=>l.some(d=>d.key===c.key)?l:[...l,c])};return window.addEventListener(Pc,i),()=>window.removeEventListener(Pc,i)},[]);const o=_.useCallback(i=>{r(a=>a.filter(c=>c.key!==i))},[]),s=n[0];return s?_c.createPortal(p.jsx(II,{notice:s,remaining:n.length-1,chinese:e,onDismiss:o},s.key),document.body):null}function II({notice:t,remaining:e,chinese:n,onDismiss:r}){const[o,s]=_.useState(!1),[i,a]=_.useState(!1),[c,l]=_.useState(document.hidden),[d,u]=_.useState(!1);return _.useEffect(()=>{const f=()=>l(document.hidden);return document.addEventListener("visibilitychange",f),()=>document.removeEventListener("visibilitychange",f)},[]),_.useEffect(()=>{if(o||i||c||d)return;const f=setTimeout(()=>r(t.key),8e3);return()=>clearTimeout(f)},[t.key,o,i,c,d,r]),p.jsxs("section",{"aria-label":n?"关键进展提醒":"Progress reminder",onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),onFocusCapture:()=>a(!0),onBlurCapture:f=>{f.currentTarget.contains(f.relatedTarget)||a(!1)},className:"fixed left-3 right-3 top-[calc(var(--safe-top-inset,0px)+0.75rem)] z-toast overflow-hidden rounded-xl bg-surface text-foreground shadow-lg ring-1 ring-inset ring-border/15 animate-fade-in md:left-auto md:right-4 md:w-[360px]",children:[p.jsxs("button",{type:"button","aria-label":n?"查看 Session":"Open session",className:"group flex w-full items-start gap-2.5 p-3.5 pr-11 text-left transition-colors hover:bg-surface-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:()=>{t.open()?r(t.key):u(!0)},children:[p.jsx(Qp,{size:16,className:"mt-0.5 shrink-0 text-primary","aria-hidden":"true"}),p.jsxs("span",{className:"min-w-0 flex-1",role:"status","aria-live":"polite","aria-atomic":"true",children:[p.jsxs("span",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"min-w-0 flex-1 truncate text-[12px] font-medium",title:t.sessionName,children:t.sessionName}),p.jsx(ME,{size:13,className:"shrink-0 text-muted-foreground/60 transition-colors group-hover:text-primary","aria-hidden":"true"})]}),t.title&&p.jsx("span",{className:"mt-1 block truncate text-[11px] text-muted-foreground",children:t.title}),p.jsx("span",{className:"mt-1.5 line-clamp-3 whitespace-pre-wrap break-words text-[13px] leading-relaxed text-foreground/85",title:t.message,children:t.message}),e>0&&p.jsx("span",{className:"mt-2 block text-[10px] text-muted-foreground",children:n?`还有 ${e} 条`:`${e} more`}),d&&p.jsx("span",{role:"alert",className:"mt-2 block text-xs text-warning",children:n?"暂时无法打开该服务,请重试。":"Unable to open the service. Please retry."})]})]}),p.jsx("button",{type:"button","aria-label":n?"关闭提醒":"Dismiss reminder",className:"absolute right-0 top-0 flex h-11 w-11 items-center justify-center rounded-tr-xl text-muted-foreground/60 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:()=>r(t.key),children:p.jsx(sg,{size:14})})]})}const Sf=5*6e4;let Nc,fm=!1,hm=!1,xf=!1;const Lc=new Set;function Ef(){fm=!0,Lc.forEach(t=>t())}function RI(){return _.useSyncExternalStore(t=>(Lc.add(t),()=>{Lc.delete(t)}),()=>fm,()=>!1)}function TI(){window.dispatchEvent(new Event("termdock:before-update")),hm=!0,Nc?.waiting?Nc.waiting.postMessage({type:"SKIP_WAITING"}):window.location.reload()}function PI(t,e){let n=t;return()=>{if(!n){n=!0;return}e()}}function NI(){if(xf||typeof window>"u"||!("serviceWorker"in navigator))return;xf=!0,navigator.serviceWorker.addEventListener("controllerchange",PI(!!navigator.serviceWorker.controller,()=>{hm?window.location.reload():Ef()}));const t=()=>{navigator.serviceWorker.register("/sw.js",{scope:"/",updateViaCache:"none"}).then(e=>{Nc=e;const n=()=>{e.waiting&&Ef()},r=()=>{const i=e.installing;i?.addEventListener("statechange",()=>{i.state==="installed"&&navigator.serviceWorker.controller&&n()})};e.addEventListener("updatefound",r),r(),n();let o=0;const s=()=>{document.visibilityState!=="visible"||Date.now()-o<Sf||(o=Date.now(),e.update().then(n).catch(()=>{}))};s(),window.setInterval(s,Sf),document.addEventListener("visibilitychange",s)}).catch(()=>{})};document.readyState==="complete"?t():window.addEventListener("load",t,{once:!0})}function LI(){const t=RI(),[e,n]=_.useState(!1),{locale:r}=li();if(!t||e)return null;const o=r==="zh";return p.jsxs("div",{role:"status",className:"fixed bottom-16 left-1/2 z-toast flex max-w-[calc(100%-2rem)] -translate-x-1/2 items-center gap-3 rounded-lg border border-border bg-background px-4 py-3 text-sm text-foreground shadow-lg",children:[p.jsx("span",{children:o?"新版本已就绪":"An update is ready"}),p.jsx("button",{type:"button",className:"whitespace-nowrap text-primary",onClick:TI,children:o?"重新加载":"Reload"}),p.jsx("button",{type:"button",className:"whitespace-nowrap text-muted-foreground",onClick:()=>n(!0),children:o?"稍后":"Later"})]})}function pm(t){const e=document.querySelector('meta[name="theme-color"]');e&&e.setAttribute("content",t==="light"?"#FFFCF0":"#1C1B1A")}const gm=_.createContext(void 0);function IR({children:t}){const e=_.useContext(gm),n=e===void 0?typeof document>"u"?null:document.body:e;return n?_c.createPortal(t,n):null}const BI={activeKey:"root",items:[]},_I=()=>()=>{},OI=()=>BI;function DI({host:t,item:e,visible:n,active:r}){const o=_.useRef(null);return _.useEffect(()=>{o.current?.toggleAttribute("inert",!r)},[r]),_.useLayoutEffect(()=>{const s=o.current;return()=>{try{const i=s?.contentWindow,a=i?.document.createEvent("Event");a&&(a.initEvent("termdock:before-update",!1,!1),i?.dispatchEvent(a))}catch{}t.attach(e.key,null)}},[t,e.key]),p.jsx("iframe",{ref:o,title:e.service?.label||"服务工作区","data-workspace-key":e.key,src:`/workspace.html?${Hp}=${encodeURIComponent(e.key)}`,className:"fixed inset-0 w-full border-0 bg-[var(--chrome-bg)]",style:{height:"var(--app-base-vh, 100%)",visibility:n?"visible":"hidden",pointerEvents:r?"auto":"none"},"aria-hidden":!r,tabIndex:r?0:-1,allow:"clipboard-read; clipboard-write; fullscreen"})}function FI({children:t}){const e=window.parent===window?ht():void 0,n=_.useSyncExternalStore(e?.subscribe||_I,e?.snapshot||OI),[r,o]=_.useState(null),[s,i]=_.useState(()=>n.activeKey==="root"?"root":null),[a,c]=_.useState(),[l,d]=_.useState(!1),[u,f]=_.useState(),h=n.items.find(y=>y.key===n.activeKey),g=h?.rendered||a===n.activeKey?n.activeKey:s,m=g!==n.activeKey,b=m&&s===null;_.useLayoutEffect(()=>{if(!m||b){f(void 0);return}const y=()=>{const k=Array.from(document.querySelectorAll("iframe[data-workspace-key]")).find(N=>N.dataset.workspaceKey===s),x=(s==="root"?r:k?.contentDocument)?.querySelector('nav[aria-label="切换服务"]')?.closest("[data-sidebar-gesture-ignore]")?.getBoundingClientRect();if(!x||x.width===0||x.right<=0){f(void 0);return}const v=k?.getBoundingClientRect(),A=x.top+(v?.top??0)>=160;f({left:x.left+(v?.left??0)+12,top:(A?x.top-8:x.bottom+8)+(v?.top??0),width:Math.max(0,x.width-24),transform:A?"translateY(-100%)":"none"})};return y(),window.addEventListener("resize",y),()=>window.removeEventListener("resize",y)},[m,b,s,r]),_.useLayoutEffect(()=>{e?.present(g),m||i(g),r?.toggleAttribute("inert",g!=="root"||m)},[e,r,g,m]),_.useEffect(()=>{if(d(!1),!m)return;const y=setTimeout(()=>d(!0),8e3);return()=>clearTimeout(y)},[n.activeKey,m]),_.useEffect(()=>{c(void 0)},[n.activeKey]);const w=n.items.find(y=>y.key===s),I=h?.phase==="offline"?"网络已断开,等待恢复…":h?.phase==="reconnecting"?"连接暂未恢复,正在重试…":l?"连接时间较长,仍在等待服务…":b?"正在恢复服务…":"正在切换服务…";return _.useEffect(()=>{if(!e)return;const y=()=>{try{const k=JSON.parse(localStorage.getItem("termdock-color-theme")||"null");(k==="dark"||k==="light")&&(document.documentElement.dataset.theme=k,pm(k))}catch{}};return window.addEventListener("storage",y),()=>window.removeEventListener("storage",y)},[e]),_.useEffect(()=>{if(!e||!("serviceWorker"in navigator))return;const y=C=>{if(C.source!==navigator.serviceWorker.controller)return;const T=C.data;T?.type==="termdock:focus-session"&&typeof T.targetPeerId=="string"&&typeof T.sessionId=="string"&&e.focusSession(T.targetPeerId,T.sessionId)&&(C.ports[0]?.postMessage({type:"termdock:focus-session-ack"}),C.stopImmediatePropagation())},k=async()=>{if("caches"in window)try{const C=await caches.open("termdock-notification-target-v1"),T=await C.match("/__termdock-notification-target");if(!T)return;const x=await T.json();typeof x.targetPeerId=="string"&&typeof x.sessionId=="string"&&Date.now()-x.clickedAt<3e4&&e.focusSession(x.targetPeerId,x.sessionId)&&await C.delete("/__termdock-notification-target")}catch{}},L=()=>{document.hidden||k()};return navigator.serviceWorker.addEventListener("message",y),document.addEventListener("visibilitychange",L),k(),()=>{navigator.serviceWorker.removeEventListener("message",y),document.removeEventListener("visibilitychange",L)}},[e]),e?p.jsxs("div",{className:"relative h-full w-full overflow-hidden bg-[var(--chrome-bg)]",children:[p.jsx("div",{ref:o,className:"isolate h-full w-full","aria-hidden":g!=="root"||m,style:{visibility:g==="root"?"visible":"hidden"},children:p.jsx(gm.Provider,{value:r,children:t})}),n.items.filter(y=>y.key!=="root").map(y=>p.jsx(DI,{host:e,item:y,visible:g===y.key,active:!m&&g===y.key},y.key)),b&&p.jsx("div",{className:"termdock-boot z-modal-panel",role:"status","aria-live":"polite",children:l||h?.phase==="offline"||h?.phase==="reconnecting"?p.jsxs("div",{className:"flex max-w-xs flex-col items-center gap-3 text-center",children:[p.jsx(De,{size:16,className:"animate-spin motion-reduce:animate-none","aria-hidden":"true"}),p.jsx("div",{className:"max-w-full truncate text-sm",children:h?.service?.label||"Termdock"}),p.jsx("div",{className:"text-xs text-muted-foreground",children:I}),p.jsx("button",{type:"button",className:"min-h-11 rounded-lg bg-surface-2 px-4 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",onClick:()=>c(n.activeKey),children:"查看连接页面"})]}):p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"termdock-boot-spinner","aria-hidden":"true"}),p.jsx("span",{children:"Loading Termdock"})]})}),m&&!b&&p.jsx("div",{className:"fixed inset-0 z-modal-panel flex items-end justify-center px-3 pb-[calc(env(safe-area-inset-bottom)+96px)]",role:"dialog","aria-modal":"true","aria-label":"切换服务",onKeyDown:y=>{if(y.key==="Escape"&&w?.service&&(y.preventDefault(),e.activate(w.service)),y.key==="Tab"){const k=Array.from(y.currentTarget.querySelectorAll("button")),L=k[0],C=k[k.length-1];y.shiftKey&&document.activeElement===L?(y.preventDefault(),C?.focus()):!y.shiftKey&&document.activeElement===C&&(y.preventDefault(),L?.focus())}},children:p.jsxs("div",{style:u?{position:"absolute",...u}:void 0,className:"flex w-full max-w-sm flex-wrap items-center gap-x-2 gap-y-1 rounded-xl border border-border bg-surface-elevated px-3 py-1.5 text-foreground shadow-lg",children:[p.jsxs("div",{role:"status","aria-live":"polite",className:"flex min-w-0 flex-1 items-center gap-2",children:[p.jsx(De,{size:16,className:"shrink-0 animate-spin text-primary motion-reduce:animate-none","aria-hidden":"true"}),p.jsxs("div",{className:"min-w-0",children:[p.jsx("div",{className:"truncate text-sm font-medium",children:h?.service?.label||"服务工作区"}),p.jsx("div",{className:"mt-1 text-xs text-muted-foreground",children:I})]})]}),p.jsxs("div",{className:"flex items-center justify-end gap-1",children:[l&&p.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-3 text-xs text-muted-foreground hover:bg-surface-2",onClick:()=>c(n.activeKey),children:"查看连接页面"}),w?.service&&p.jsx("button",{type:"button",autoFocus:!0,"aria-label":"取消切换",className:"min-h-11 shrink-0 rounded-lg px-3 text-xs text-muted-foreground hover:bg-surface-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",onClick:()=>e.activate(w.service),children:"取消"})]})]})})]}):t}const MI=_.lazy(()=>Yt(()=>import("./App-Cld3O8C2.js").then(t=>t.A),__vite__mapDeps([4,2,1,5,6,3,7,8]))),jI=_.lazy(()=>Yt(()=>import("./DagPlayground-Cb99juZB.js"),__vite__mapDeps([9,10,2,1,11,7,3])).then(t=>({default:t.DagPlayground}))),UI=_.lazy(()=>Yt(()=>import("./DiffLab-CLftmGmh.js"),__vite__mapDeps([12,2,1,13,8,14,3])).then(t=>({default:t.DiffLab}))),$I=_.lazy(()=>Yt(()=>import("./DiffReviewLab-DboW5kVe.js"),__vite__mapDeps([15,2,1,16,5,6,11,13,8,14,3])).then(t=>({default:t.DiffReviewLab})));MC();wE();window.parent===window&&NI();const Gr=ne();Gr&&Yt(()=>import("./App-Cld3O8C2.js").then(t=>t.A),__vite__mapDeps([4,2,1,5,6,3,7,8])).catch(()=>{});!new URLSearchParams(location.search).has("dag-playground")&&!new URLSearchParams(location.search).has("diff-lab")&&!new URLSearchParams(location.search).has("diff-review-lab")&&(aE(Gr?{...Gr,id:Gr.targetPeerId,label:Gr.serviceName||location.host}:void 0),Xp());try{const t=JSON.parse(window.localStorage.getItem("termdock-color-theme")||"null");(t==="dark"||t==="light")&&(document.documentElement.dataset.theme=t,pm(t))}catch{}IE.createRoot(document.getElementById("root")).render(p.jsx(Ke.StrictMode,{children:p.jsxs(E2,{children:[window.parent===window&&p.jsxs(p.Fragment,{children:[p.jsx(LI,{}),p.jsx(CI,{})]}),p.jsx(CC,{children:p.jsx(_.Suspense,{fallback:p.jsx("div",{className:"termdock-boot",role:"status",children:"Loading Termdock"}),children:(()=>{const t=new URLSearchParams(window.location.search);return t.get("dag-playground")==="1"?p.jsx(jI,{}):t.get("diff-review-lab")==="1"?p.jsx($I,{}):t.get("diff-lab")==="1"?p.jsx(UI,{}):p.jsx(FI,{children:p.jsxs(xC,{children:[p.jsx(kI,{}),p.jsx(MI,{})]})})})()})})]})}));export{QA as $,Sl as A,Qp as B,hl as C,om as D,mg as E,xv as F,nA as G,_A as H,aR as I,hn as J,Xk as K,De as L,nE as M,Vk as N,AR as O,G2 as P,LA as Q,rA as R,ai as S,n1 as T,SA as U,_C as V,lo as W,sg as X,QI as Y,Il as Z,Yt as _,Jp as a,Ng as a$,NC as a0,Ee as a1,vA as a2,Oi as a3,ok as a4,Dk as a5,pR as a6,kR as a7,UA as a8,rk as a9,Mk as aA,uk as aB,mR as aC,Wk as aD,Us as aE,WC as aF,GC as aG,sr as aH,Hs as aI,Tc as aJ,ho as aK,Bl as aL,et as aM,tA as aN,K1 as aO,KA as aP,FA as aQ,HA as aR,Yk as aS,Lg as aT,ht as aU,ka as aV,Gh as aW,hp as aX,Bk as aY,YA as aZ,ek as a_,Ok as aa,i1 as ab,pg as ac,oA as ad,K2 as ae,fR as af,OA as ag,st as ah,XA as ai,VA as aj,JA as ak,bA as al,Gk as am,Kk as an,CR as ao,yI as ap,qk as aq,zk as ar,zA as as,Kn as at,Sk as au,$k as av,Qk as aw,Pk as ax,Zk as ay,Hk as az,DE as b,Ck as b$,vk as b0,xk as b1,gk as b2,bk as b3,wk as b4,lI as b5,Ll as b6,es as b7,p as b8,JI as b9,sA as bA,eR as bB,cc as bC,s2 as bD,ck as bE,h2 as bF,hR as bG,fk as bH,lk as bI,qA as bJ,Mn as bK,SR as bL,hk as bM,dk as bN,PA as bO,cR as bP,BA as bQ,jA as bR,sk as bS,a2 as bT,XI as bU,o1 as bV,r2 as bW,Jk as bX,n2 as bY,l2 as bZ,ne as b_,MA as ba,t2 as bb,ik as bc,c2 as bd,p2 as be,kk as bf,DA as bg,GA as bh,d2 as bi,XC as bj,jk as bk,fg as bl,kg as bm,YC as bn,ak as bo,EA as bp,gt as bq,ZC as br,Lk as bs,Tk as bt,Nk as bu,_k as bv,dR as bw,lR as bx,nR as by,AA as bz,eg as c,m2 as c0,g2 as c1,TA as c2,CA as c3,xA as c4,RA as c5,NA as c6,o2 as c7,f2 as c8,yR as c9,oR as cA,Ca as cB,gR as cC,Le as cD,Ta as cE,uR as cF,ge as cG,Ik as cH,ii as cI,ze as cJ,sR as cK,rR as cL,bR as ca,vR as cb,wR as cc,Eg as cd,yA as ce,Di as cf,iR as cg,Ra as ch,u2 as ci,rm as cj,i2 as ck,tR as cl,kA as cm,YI as cn,ER as co,gI as cp,pm as cq,VI as cr,ZA as cs,xR as ct,nk as cu,WA as cv,ss as cw,xt as cx,Fk as cy,li as cz,vn as d,KE as e,tg as f,ng as g,CC as h,gg as i,ZE as j,rg as k,P2 as l,me as m,IR as n,IA as o,nl as p,Nt as q,e2 as r,ZI as s,VC as t,Ek as u,yk as v,rl as w,Rk as x,Yx as y,tk as z};
35
+ `,o);s>r&&(o=s+1)}n.push(t.slice(r,o)),r=o}return n}function tI(t,e=QC,n=eI){const r=new Map;let o=0,s=0;for(const i of[...t.keys()]){const a=t.get(i);if(!a||a.length===0){t.delete(i);continue}const c=[];for(;a.length>0;){const l=a[0];if(s>0&&(s>=n||o+l.length>e))break;a.shift(),c.push(l),o+=l.length,s+=1}if(c.length>0&&r.set(i,c),t.delete(i),a.length>0&&t.set(i,a),s>=n||o>=e)break}return r}async function am(t,e=!1,n="termdock-encrypted-background"){const r=await new Promise((o,s)=>{const i=indexedDB.open(n,1);i.onupgradeneeded=()=>i.result.createObjectStore("state"),i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error)});try{return await new Promise((o,s)=>{const i=r.transaction("state",e?"readwrite":"readonly"),a=t(i.objectStore("state"));i.oncomplete=()=>o(a.result),i.onabort=i.onerror=()=>s(i.error)})}finally{r.close()}}const nI=t=>am(e=>e.put(t,t.targetPeerId),!0),rI=t=>am(e=>e.delete(t),!0),cm="termdock-pwa-notifications-enabled",lm="termdock-pwa-ai-notifications-enabled",dm="termdock-pwa-exit-notifications-enabled",um="termdock-pwa-notification-alert-style",oI="termdock-notification-claim:",Ic=5e3,sI=1500,Rc="termdock-push-last-sync",bf=360*60*1e3,iI=10080*60*1e3,no=new Map;function Ll(){return et()?!0:typeof window<"u"&&typeof Notification<"u"&&"serviceWorker"in navigator&&window.isSecureContext}function aI(){if(typeof navigator>"u")return!1;const t=navigator.userAgent;return/iPad|iPhone|iPod/.test(t)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function cI(){return typeof window>"u"?!1:!!(window.matchMedia("(display-mode: standalone)").matches||"standalone"in navigator&&navigator.standalone===!0)}function lI(){return et()?!0:!(!Ll()||aI()&&!cI())}function mR(){return et()?"granted":typeof Notification>"u"?"unsupported":Notification.permission}function Bl(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(cm)==="true"}catch{return!1}}function wR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(cm,String(t))}catch{}}function Hs(){if(typeof window>"u")return!0;try{const t=window.localStorage.getItem(lm);return t===null?!0:t==="true"}catch{return!0}}function yR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(lm,String(t))}catch{}}function Tc(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(dm)==="true"}catch{return!1}}function bR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(dm,String(t))}catch{}}function ho(){if(typeof window>"u")return"normal";try{const t=window.localStorage.getItem(um);if(t==="quiet"||t==="persistent")return t}catch{}return"normal"}function vR(t){if(!(typeof window>"u"))try{window.localStorage.setItem(um,t)}catch{}}async function SR(){return et()?"granted":Ll()?Notification.permission==="default"?Notification.requestPermission():Notification.permission:"unsupported"}function dI(){return typeof document>"u"?!0:document.visibilityState==="visible"&&document.hasFocus()}function uI(t){for(const[e,n]of no)t-n>Ic&&no.delete(e)}function fI(t){return t.dedupKey?.trim()?t.dedupKey.trim():t.tag?.trim()?t.tag.trim():[t.data?.sessionId,t.title,t.body].filter(e=>typeof e=="string"&&e.trim().length>0).map(e=>e.trim()).join("|")}function hI(t){const e=fI(t);if(!e)return!0;const n=Date.now();uI(n);const r=no.get(e)??0;if(n-r<Ic)return!1;try{if(typeof window<"u"&&window.localStorage){const o=`${oI}${e}`,s=Number(window.localStorage.getItem(o)??"0");if(Number.isFinite(s)&&n-s<Ic)return no.set(e,s),!1;Number.isFinite(s)&&s>0&&window.localStorage.removeItem(o),window.localStorage.setItem(o,String(n))}}catch{}return no.set(e,n),!0}async function di(){if(typeof navigator>"u"||!("serviceWorker"in navigator))return null;try{const t=await navigator.serviceWorker.getRegistration()??null;return t?.active?t:await Promise.race([navigator.serviceWorker.ready,new Promise(n=>{window.setTimeout(()=>n(null),sI)})])??t}catch{return null}}function pI(t){const e="=".repeat((4-t.length%4)%4),n=(t+e).replace(/-/g,"+").replace(/_/g,"/"),r=window.atob(n),o=new Uint8Array(new ArrayBuffer(r.length));for(let s=0;s<r.length;s+=1)o[s]=r.charCodeAt(s);return o}async function _l(t,e){const n=await fetch("/api/csrf-token");if(!n.ok)throw new Error("Unable to get notification security token");const{csrfToken:r}=await n.json();return fetch(`/api/notifications/${t}`,{method:"POST",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":r},body:JSON.stringify(e)})}async function gI(t=!1,e=!1){if(et())return!0;if(!Bl()||!lI()||Notification.permission!=="granted")return!1;const n=await di();if(!n?.pushManager)return!1;try{const r=await fetch("/api/notifications/status");if(!r.ok)return!1;const o=await r.json();let s=await n.pushManager.getSubscription();const i=!!(s?.expirationTime&&s.expirationTime-Date.now()<iI);if(!s)try{s=await n.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:pI(o.publicKey)})}catch(d){return console.warn(`[PWA notifications] Push subscription missing; re-subscribe failed${e?" (user gesture)":""}:`,d),!1}const a=Number(window.localStorage.getItem(Rc)??"0"),c=!o.subscription||o.subscription.endpoint!==s.endpoint||Date.now()-(o.subscription.updatedAt??0)>=bf;if(t||c||Date.now()-a>=bf||i){if(!(await _l("subscribe",{subscription:s.toJSON(),aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language})).ok)return!1;window.localStorage.setItem(Rc,String(Date.now()))}const l=ne();return l&&await nI({targetPeerId:l.targetPeerId,addresses:br(l),routes:Xt(l),publicKey:o.publicKey,preferences:{aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language}}),!0}catch(r){return console.warn("[PWA notifications] Push subscription sync failed:",r),!1}}async function xR(){if(et())return;const e=await(await di())?.pushManager?.getSubscription();try{await _l("unsubscribe",{endpoint:e?.endpoint})}finally{const n=ne();n&&await rI(n.targetPeerId),await e?.unsubscribe();try{window.localStorage.removeItem(Rc)}catch{}}}async function ER(){if(et()||!Bl())return;(await _l("preferences",{aiEnabled:Hs(),exitEnabled:Tc(),alertStyle:ho(),locale:navigator.language})).status===404&&await gI(!0)}async function AR(){if(!et())try{const t=navigator;typeof t.clearAppBadge=="function"&&await t.clearAppBadge()}catch{}}async function kR(t){if(!et())try{const e=await di();if(!e||typeof e.getNotifications!="function")return;const n=`agent:${t}`,r=await e.getNotifications({tag:n});for(const s of r)s.close();const o=navigator;if(typeof o.setAppBadge=="function"){const s=await e.getNotifications();await o.setAppBadge(s.length)}}catch{}}async function Ra(t){if(!Bl()||!Ll())return!1;if(t.requireHidden!==!1&&dI())return!0;const e=et();if(e){const s=t.alertStyle??ho(),i=await e.showNotification({title:t.title,body:t.body,tag:t.tag,sessionId:t.data?.sessionId,silent:s==="quiet",persistent:s==="persistent"});return e.notificationDeliveryConfirmation===!0&&i}if(Notification.permission!=="granted")return!1;const n=await di();if(t.deferToPush&&await n?.pushManager?.getSubscription())return!0;if(t.requireHidden!==!1){if(await n?.pushManager?.getSubscription())return!0}if(!hI(t))return!0;const r=t.alertStyle??ho(),o={body:t.body,tag:t.tag,icon:"/pwa-192x192.png",badge:"/maskable-icon-512x512.png",requireInteraction:r==="persistent",renotify:r==="persistent"?!!t.tag:!1,silent:r==="quiet",vibrate:r==="quiet"?[]:[80,40,80],data:{url:t.data?.url??"/",sessionId:t.data?.sessionId}};try{if(n&&typeof n.showNotification=="function")return await n.showNotification(t.title,o),!0;const s=new Notification(t.title,o);return s.onclick=()=>{window.focus(),t.data?.url&&window.location.href!==t.data.url&&window.location.assign(t.data.url),s.close()},!0}catch(s){if(s instanceof DOMException&&s.name==="NotSupportedError"&&o.renotify)try{const i={...o,renotify:!1};return n&&typeof n.showNotification=="function"?await n.showNotification(t.title,i):new Notification(t.title,i),!0}catch(i){return console.warn("[PWA notifications] Failed to show notification (renotify fallback):",i),!1}return console.warn("[PWA notifications] Failed to show notification:",s),!1}}function mI(){try{return localStorage.getItem("termdock:locale")||"en"}catch{return"en"}}function wI(t,e){return t==="zh"?{waitingTitle:`${e} 需要你的处理`,waitingBody:`${e} 需要你的处理。`,doneTitle:`${e} 已完成`,doneBody:`${e} 已完成,点按查看结果。`,exitedTitle:`${e} 已退出`,exitedBody:`${e} 已退出,点按查看结果。`}:{waitingTitle:`${e} needs your input`,waitingBody:`${e} is waiting for your input.`,doneTitle:`${e} finished`,doneBody:"Tap to see the result.",exitedTitle:`${e} exited`,exitedBody:"Tap to see the result."}}const vf=1e6;function Ht(t){return{sessionId:t,directory:"",terminalSessionId:null,mode:"shell",tmuxSessionName:null,activeProgram:null,activeProgramRaw:null,activeProgramSource:null,cwd:null,inCopyMode:!1,isConnecting:!1,agentStatus:null,agentIndicator:null,agentStatusDetail:null,agent:null,agentMessage:null,agentNativeSessionId:null,agentResumeRecovered:!1,agentRich:!1,agentActivity:0,agentCwd:null,agentNeedsReview:!1,shellTitle:null,promptState:null,shellExitCode:null,tuiProgress:null,gitStatus:null,bufferChunks:[],bufferLength:0,lastOutputAt:null,updatedAt:Date.now()}}const ui="termdock-shell-titles-v1";function fi(){if(typeof window>"u")return{};try{const t=localStorage.getItem(ui);if(!t)return{};const e=JSON.parse(t);return typeof e=="object"&&e!==null?e:{}}catch{return{}}}function yI(t){return fi()[t]??null}function bI(t,e){if(!(typeof window>"u"))try{const n=fi();e?n[t]=e:delete n[t],localStorage.setItem(ui,JSON.stringify(n))}catch{}}function vI(t){if(!(typeof window>"u"))try{const e=fi();delete e[t],localStorage.setItem(ui,JSON.stringify(e))}catch{}}const hi="termdock-agent-cache-v1";function Ol(){if(typeof window>"u")return{};try{const t=localStorage.getItem(hi);if(!t)return{};const e=JSON.parse(t);return typeof e=="object"&&e!==null?e:{}}catch{return{}}}function SI(t,e){if(!(typeof window>"u"))try{const n=Ol();e?n[t]=e:delete n[t],localStorage.setItem(hi,JSON.stringify(n))}catch{}}function xI(t){if(!(typeof window>"u"))try{const e=Ol();delete e[t],localStorage.setItem(hi,JSON.stringify(e))}catch{}}function EI(){if(!(typeof window>"u"))try{localStorage.removeItem(hi)}catch{}}function CR(t){return Ol()[t]??null}function AI(){if(!(typeof window>"u"))try{localStorage.removeItem(ui)}catch{}}const Ta=Il((t,e)=>{const n={pendingChunksBySession:new Map,activitySessionIds:new Set,batchFlushRafRef:null},r=(i,a)=>{const c=new Map;return t(l=>{const d=new Map(l.sessions);let u=l.nextChunkId;const f=Date.now();for(const[h,g]of i){const m=d.get(h)??Ht(h);let b=m.bufferChunks.length>0?[...m.bufferChunks]:[],w=m.bufferLength;for(const I of g){const y=u++;b.push({id:y,data:I}),c.set(h,y),w+=I.length}for(;w>vf&&b.length>1;){const I=b.shift();if(!I)break;w-=I.data.length}d.set(h,{...m,bufferChunks:b,bufferLength:w,lastOutputAt:a.has(h)?f:m.lastOutputAt,updatedAt:f})}return{sessions:d,nextChunkId:u}}),c},o=()=>{if(n.batchFlushRafRef===null){if(typeof window>"u"){s();return}n.batchFlushRafRef=window.requestAnimationFrame(()=>{n.batchFlushRafRef=null,s()})}},s=()=>{if(n.pendingChunksBySession.size===0)return;const i=tI(n.pendingChunksBySession),a=new Set([...i.keys()].filter(c=>n.activitySessionIds.has(c)));for(const c of i.keys())n.pendingChunksBySession.has(c)||n.activitySessionIds.delete(c);r(i,a),n.pendingChunksBySession.size>0&&o()};return{sessions:new Map,nextChunkId:1,activeSessionId:null,getTerminalSession:i=>e().sessions.get(i),setActiveSessionId:i=>{if(t({activeSessionId:i}),i){const a=e().sessions.get(i);if(a?.agentNeedsReview){const c=new Map(e().sessions);c.set(i,{...a,agentNeedsReview:!1,updatedAt:Date.now()}),t({sessions:c}),a.terminalSessionId&&hc(a.terminalSessionId)}}},setTerminalSession:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i),f=!d||d.terminalSessionId!==a.sessionId?Ht(i):d??Ht(i),h=a.history??d?.history??[];return l.set(i,{...f,terminalSessionId:a.sessionId,mode:a.mode??f.mode,tmuxSessionName:a.tmuxSessionName??f.tmuxSessionName,activeProgram:a.activeProgram??d?.activeProgram??f.activeProgram,activeProgramRaw:a.activeProgramRaw??d?.activeProgramRaw??f.activeProgramRaw,activeProgramSource:a.activeProgramSource??d?.activeProgramSource??f.activeProgramSource,cwd:a.cwd??d?.cwd??f.cwd,agentResumeRecovered:d?.agentResumeRecovered??f.agentResumeRecovered,shellTitle:d?.shellTitle??fi()[i]??f.shellTitle,sessionId:i,isConnecting:!1,history:h,updatedAt:Date.now()}),{sessions:l}})},setSessionHistory:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,history:a,updatedAt:Date.now()}),{sessions:l}})},setSessionActiveProgram:(i,a,c=null,l=null)=>{t(d=>{const u=new Map(d.sessions),f=u.get(i)??Ht(i);return u.set(i,{...f,activeProgram:a,activeProgramRaw:l,activeProgramSource:c,updatedAt:Date.now()}),{sessions:u}})},setSessionCwd:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,cwd:a,updatedAt:Date.now()}),{sessions:l}})},setSessionShellTitle:(i,a)=>{t(c=>{const l=c.sessions.get(i);if(!l||l.shellTitle===a)return c;const d=new Map(c.sessions);return d.set(i,{...l,shellTitle:a,updatedAt:Date.now()}),{sessions:d}}),bI(i,a)},setSessionPromptState:(i,a,c)=>{t(l=>{const d=l.sessions.get(i);if(!d||d.promptState===a)return l;const u=new Map(l.sessions);return u.set(i,{...d,promptState:a,shellExitCode:c??d.shellExitCode,updatedAt:Date.now()}),{sessions:u}})},setSessionTuiProgress:(i,a)=>{t(c=>{const l=c.sessions.get(i);if(!l)return c;const d=a?.state==="remove"?null:a;if(l.tuiProgress?.state===d?.state&&l.tuiProgress?.progress===d?.progress)return c;const u=new Map(c.sessions);return u.set(i,{...l,tuiProgress:d,updatedAt:Date.now()}),{sessions:u}})},setSessionGitStatus:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||JSON.stringify(d.gitStatus)===JSON.stringify(a)?c:(l.set(i,{...d,gitStatus:a,updatedAt:Date.now()}),{sessions:l})})},setSessionCopyMode:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||d.inCopyMode===a?c:(l.set(i,{...d,inCopyMode:a,updatedAt:Date.now()}),{sessions:l})})},setSessionAgentStatus:(i,a)=>{const c=e(),l=c.sessions.get(i);if(!l)return;const d=a.agentStatus??null,u=d&&d!=="idle"?a.agentIndicator??l.agentIndicator??null:null,f=d&&d!=="idle"?a.agentStatusDetail??null:null,h=a.agent!==void 0?a.agent:l.agent,g=a.agentMessage!==void 0?a.agentMessage:d?l.agentMessage:null,m=a.agentNativeSessionId!==void 0?a.agentNativeSessionId:l.agentNativeSessionId,b=a.agentResumeRecovered!==void 0?a.agentResumeRecovered:l.agentResumeRecovered,w=a.agentRich??l.agentRich,I=a.agentActivity??l.agentActivity,y=a.agentCwd!==void 0?a.agentCwd:l.agentCwd,k=c.activeSessionId!==i,L=l.agentStatus==="working"||l.agentStatus==="waiting"||l.agentStatus==="done",C=a.reviewed===!1||a.reviewed===null&&d===null&&L&&k;if(l.agentStatus===d&&l.agentIndicator===u&&l.agentStatusDetail===f&&l.agent===h&&l.agentMessage===g&&l.agentNativeSessionId===m&&l.agentResumeRecovered===b&&l.agentRich===w&&l.agentActivity===I&&l.agentCwd===y&&l.agentNeedsReview===C)return;const T=new Map(c.sessions);if(T.set(i,{...l,agentStatus:d,agentIndicator:u,agentStatusDetail:f,agent:h,agentMessage:g,agentNativeSessionId:m,agentResumeRecovered:b,agentRich:w,agentActivity:I,agentCwd:y,agentNeedsReview:C,updatedAt:Date.now()}),t({sessions:T}),h&&SI(i,h),!Hs())return;const x=h?.displayName??l.agent?.displayName??"Agent",v=mI(),A=wI(v,x);if(d==="waiting"&&l.agentStatus!=="waiting"&&k){Ra({title:A.waitingTitle,body:g??A.waitingBody,tag:`agent:${i}`,dedupKey:`agent:${i}:waiting:${I}`,data:{url:"/",sessionId:i},deferToPush:!0});return}if(d==="done"&&l.agentStatus!=="done"&&k){Ra({title:A.doneTitle,body:A.doneBody,tag:`agent:${i}`,dedupKey:`agent:${i}:done:${I}`,data:{url:"/",sessionId:i},deferToPush:!0});return}d===null&&(l.agentStatus==="working"||l.agentStatus==="waiting")&&k&&Ra({title:A.exitedTitle,body:A.exitedBody,tag:`agent:${i}`,dedupKey:`agent:${i}:exited:${I}`,data:{url:"/",sessionId:i},deferToPush:!0})},setAgentResumeRecovered:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return d.agentResumeRecovered===a?c:(l.set(i,{...d,agentResumeRecovered:a,updatedAt:Date.now()}),{sessions:l})})},clearAgentNeedsReview:i=>{const a=e().sessions.get(i);a?.agentNeedsReview&&(t(c=>{const l=new Map(c.sessions),d=l.get(i);return!d||!d.agentNeedsReview?c:(l.set(i,{...d,agentNeedsReview:!1,updatedAt:Date.now()}),{sessions:l})}),a.terminalSessionId&&hc(a.terminalSessionId))},setConnecting:(i,a)=>{t(c=>{const l=new Map(c.sessions),d=l.get(i)??Ht(i);return l.set(i,{...d,isConnecting:a,updatedAt:Date.now()}),{sessions:l}})},appendToBuffer:(i,a,c)=>{if(!a)return;let l=n.pendingChunksBySession.get(i);l||(l=[],n.pendingChunksBySession.set(i,l)),l.push(...yf(a)),c?.markActivity!==!1&&n.activitySessionIds.add(i),o()},hasPendingBufferWrites:i=>(n.pendingChunksBySession.get(i)?.length??0)>0,flushPendingBufferWrites:i=>{const a=n.pendingChunksBySession.get(i);if(!a?.length)return e().sessions.get(i)?.bufferChunks.at(-1)?.id??null;n.pendingChunksBySession.delete(i);const c=n.activitySessionIds.delete(i);return n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),r(new Map([[i,a]]),c?new Set([i]):new Set).get(i)??null},replaceBuffer:(i,a)=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null);let c=null;return t(l=>{const d=new Map(l.sessions),u=d.get(i);if(!u)return l;if(!a||a.length===0)return d.set(i,{...u,bufferChunks:[],bufferLength:0,updatedAt:Date.now()}),{sessions:d};let f=l.nextChunkId;const h=[];let g=0;for(const m of a)if(m)for(const b of yf(m)){const w=f++;h.push({id:w,data:b}),c=w,g+=b.length}for(;g>vf&&h.length>1;){const m=h.shift();if(!m)break;g-=m.data.length}return d.set(i,{...u,bufferChunks:h,bufferLength:g,updatedAt:Date.now()}),{sessions:d,nextChunkId:f}}),c},clearTerminalSession:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t(a=>{const c=new Map(a.sessions),l=c.get(i);return l&&c.set(i,{...l,terminalSessionId:null,isConnecting:!1,agentStatus:null,agentIndicator:null,agentStatusDetail:null,agent:null,agentMessage:null,agentNeedsReview:!1,updatedAt:Date.now()}),{sessions:c}})},clearBuffer:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),n.pendingChunksBySession.size===0&&n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t(a=>{const c=new Map(a.sessions),l=c.get(i);return l?(c.set(i,{...l,bufferChunks:[],bufferLength:0,updatedAt:Date.now()}),{sessions:c}):a})},removeTerminalSession:i=>{n.pendingChunksBySession.delete(i),n.activitySessionIds.delete(i),t(a=>{const c=new Map(a.sessions);return c.delete(i),{sessions:c}}),vI(i),xI(i)},clearAllTerminalSessions:()=>{n.pendingChunksBySession.clear(),n.activitySessionIds.clear(),n.batchFlushRafRef!==null&&(window.cancelAnimationFrame(n.batchFlushRafRef),n.batchFlushRafRef=null),t({sessions:new Map,nextChunkId:1}),AI(),EI()}}}),Pc="termdock:session-notice";function kI(){return _.useEffect(()=>{const t=()=>Ca.getState().view(!document.hidden&&es()?Ta.getState().activeSessionId:null);t();const e=Ta.subscribe((n,r)=>{n.activeSessionId!==r.activeSessionId&&t()});return document.addEventListener("visibilitychange",t),window.addEventListener(lo,t),()=>{e(),document.removeEventListener("visibilitychange",t),window.removeEventListener(lo,t),Ca.getState().view(null)}},[]),_.useEffect(()=>rm(t=>{if(t.type!=="session-notice")return;Ca.getState().receive(t.sessionId,t.id);const e=ne()?.targetPeerId,n=ht(),r=window.parent,o=ZC().sessions.find(u=>u.sessionId===t.sessionId),s=Ta.getState().sessions.get(t.sessionId),i=s?.shellTitle??yI(t.sessionId),a=i===s?.cwd||i===Kn(s?.cwd??null)?null:i,c=GC(o??{name:t.sessionName},s?.activeProgram??null,null,void 0,a,s?.promptState??null),l={...t,sessionName:c,key:`${e??"local"}:${t.id}`,open:()=>e&&n?n.focusSession(e,t.sessionId):(window.dispatchEvent(new CustomEvent("termdock:focus-session",{detail:t.sessionId})),!0)},d=r.document.createEvent("CustomEvent");d.initCustomEvent(Pc,!1,!1,l),r.dispatchEvent(d)}),[]),null}function CI(){const{locale:t}=li(),e=t==="zh",[n,r]=_.useState([]);_.useEffect(()=>{const i=a=>{const c=a.detail;r(l=>l.some(d=>d.key===c.key)?l:[...l,c])};return window.addEventListener(Pc,i),()=>window.removeEventListener(Pc,i)},[]);const o=_.useCallback(i=>{r(a=>a.filter(c=>c.key!==i))},[]),s=n[0];return s?_c.createPortal(p.jsx(II,{notice:s,remaining:n.length-1,chinese:e,onDismiss:o},s.key),document.body):null}function II({notice:t,remaining:e,chinese:n,onDismiss:r}){const[o,s]=_.useState(!1);return p.jsxs("section",{"aria-label":n?"关键进展提醒":"Progress reminder",className:"fixed left-3 right-3 top-[calc(var(--safe-top-inset,0px)+0.75rem)] z-toast overflow-hidden rounded-xl bg-surface text-foreground shadow-lg ring-1 ring-inset ring-border/15 animate-fade-in md:left-auto md:right-4 md:w-[360px]",children:[p.jsxs("button",{type:"button","aria-label":n?"查看 Session":"Open session",className:"group flex w-full items-start gap-2.5 p-3.5 pr-11 text-left transition-colors hover:bg-surface-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:()=>{t.open()?r(t.key):s(!0)},children:[p.jsx(Qp,{size:16,className:"mt-0.5 shrink-0 text-primary","aria-hidden":"true"}),p.jsxs("span",{className:"min-w-0 flex-1",role:"status","aria-live":"polite","aria-atomic":"true",children:[p.jsxs("span",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"min-w-0 flex-1 truncate text-[12px] font-medium",title:t.sessionName,children:t.sessionName}),p.jsx(ME,{size:13,className:"shrink-0 text-muted-foreground/60 transition-colors group-hover:text-primary","aria-hidden":"true"})]}),t.title&&p.jsx("span",{className:"mt-1 block truncate text-[11px] text-muted-foreground",children:t.title}),p.jsx("span",{className:"mt-1.5 line-clamp-3 whitespace-pre-wrap break-words text-[13px] leading-relaxed text-foreground/85",title:t.message,children:t.message}),e>0&&p.jsx("span",{className:"mt-2 block text-[10px] text-muted-foreground",children:n?`还有 ${e} 条`:`${e} more`}),o&&p.jsx("span",{role:"alert",className:"mt-2 block text-xs text-warning",children:n?"暂时无法打开该服务,请重试。":"Unable to open the service. Please retry."})]})]}),p.jsx("button",{type:"button","aria-label":n?"关闭提醒":"Dismiss reminder",className:"absolute right-0 top-0 flex h-11 w-11 items-center justify-center rounded-tr-xl text-muted-foreground/60 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:()=>r(t.key),children:p.jsx(sg,{size:14})})]})}const Sf=5*6e4;let Nc,fm=!1,hm=!1,xf=!1;const Lc=new Set;function Ef(){fm=!0,Lc.forEach(t=>t())}function RI(){return _.useSyncExternalStore(t=>(Lc.add(t),()=>{Lc.delete(t)}),()=>fm,()=>!1)}function TI(){window.dispatchEvent(new Event("termdock:before-update")),hm=!0,Nc?.waiting?Nc.waiting.postMessage({type:"SKIP_WAITING"}):window.location.reload()}function PI(t,e){let n=t;return()=>{if(!n){n=!0;return}e()}}function NI(){if(xf||typeof window>"u"||!("serviceWorker"in navigator))return;xf=!0,navigator.serviceWorker.addEventListener("controllerchange",PI(!!navigator.serviceWorker.controller,()=>{hm?window.location.reload():Ef()}));const t=()=>{navigator.serviceWorker.register("/sw.js",{scope:"/",updateViaCache:"none"}).then(e=>{Nc=e;const n=()=>{e.waiting&&Ef()},r=()=>{const i=e.installing;i?.addEventListener("statechange",()=>{i.state==="installed"&&navigator.serviceWorker.controller&&n()})};e.addEventListener("updatefound",r),r(),n();let o=0;const s=()=>{document.visibilityState!=="visible"||Date.now()-o<Sf||(o=Date.now(),e.update().then(n).catch(()=>{}))};s(),window.setInterval(s,Sf),document.addEventListener("visibilitychange",s)}).catch(()=>{})};document.readyState==="complete"?t():window.addEventListener("load",t,{once:!0})}function LI(){const t=RI(),[e,n]=_.useState(!1),{locale:r}=li();if(!t||e)return null;const o=r==="zh";return p.jsxs("div",{role:"status",className:"fixed bottom-16 left-1/2 z-toast flex max-w-[calc(100%-2rem)] -translate-x-1/2 items-center gap-3 rounded-lg border border-border bg-background px-4 py-3 text-sm text-foreground shadow-lg",children:[p.jsx("span",{children:o?"新版本已就绪":"An update is ready"}),p.jsx("button",{type:"button",className:"whitespace-nowrap text-primary",onClick:TI,children:o?"重新加载":"Reload"}),p.jsx("button",{type:"button",className:"whitespace-nowrap text-muted-foreground",onClick:()=>n(!0),children:o?"稍后":"Later"})]})}function pm(t){const e=document.querySelector('meta[name="theme-color"]');e&&e.setAttribute("content",t==="light"?"#FFFCF0":"#1C1B1A")}const gm=_.createContext(void 0);function IR({children:t}){const e=_.useContext(gm),n=e===void 0?typeof document>"u"?null:document.body:e;return n?_c.createPortal(t,n):null}const BI={activeKey:"root",items:[]},_I=()=>()=>{},OI=()=>BI;function DI({host:t,item:e,visible:n,active:r}){const o=_.useRef(null);return _.useEffect(()=>{o.current?.toggleAttribute("inert",!r)},[r]),_.useLayoutEffect(()=>{const s=o.current;return()=>{try{const i=s?.contentWindow,a=i?.document.createEvent("Event");a&&(a.initEvent("termdock:before-update",!1,!1),i?.dispatchEvent(a))}catch{}t.attach(e.key,null)}},[t,e.key]),p.jsx("iframe",{ref:o,title:e.service?.label||"服务工作区","data-workspace-key":e.key,src:`/workspace.html?${Hp}=${encodeURIComponent(e.key)}`,className:"fixed inset-0 w-full border-0 bg-[var(--chrome-bg)]",style:{height:"var(--app-base-vh, 100%)",visibility:n?"visible":"hidden",pointerEvents:r?"auto":"none"},"aria-hidden":!r,tabIndex:r?0:-1,allow:"clipboard-read; clipboard-write; fullscreen"})}function FI({children:t}){const e=window.parent===window?ht():void 0,n=_.useSyncExternalStore(e?.subscribe||_I,e?.snapshot||OI),[r,o]=_.useState(null),[s,i]=_.useState(()=>n.activeKey==="root"?"root":null),[a,c]=_.useState(),[l,d]=_.useState(!1),[u,f]=_.useState(),h=n.items.find(y=>y.key===n.activeKey),g=h?.rendered||a===n.activeKey?n.activeKey:s,m=g!==n.activeKey,b=m&&s===null;_.useLayoutEffect(()=>{if(!m||b){f(void 0);return}const y=()=>{const k=Array.from(document.querySelectorAll("iframe[data-workspace-key]")).find(N=>N.dataset.workspaceKey===s),x=(s==="root"?r:k?.contentDocument)?.querySelector('nav[aria-label="切换服务"]')?.closest("[data-sidebar-gesture-ignore]")?.getBoundingClientRect();if(!x||x.width===0||x.right<=0){f(void 0);return}const v=k?.getBoundingClientRect(),A=x.top+(v?.top??0)>=160;f({left:x.left+(v?.left??0)+12,top:(A?x.top-8:x.bottom+8)+(v?.top??0),width:Math.max(0,x.width-24),transform:A?"translateY(-100%)":"none"})};return y(),window.addEventListener("resize",y),()=>window.removeEventListener("resize",y)},[m,b,s,r]),_.useLayoutEffect(()=>{e?.present(g),m||i(g),r?.toggleAttribute("inert",g!=="root"||m)},[e,r,g,m]),_.useEffect(()=>{if(d(!1),!m)return;const y=setTimeout(()=>d(!0),8e3);return()=>clearTimeout(y)},[n.activeKey,m]),_.useEffect(()=>{c(void 0)},[n.activeKey]);const w=n.items.find(y=>y.key===s),I=h?.phase==="offline"?"网络已断开,等待恢复…":h?.phase==="reconnecting"?"连接暂未恢复,正在重试…":l?"连接时间较长,仍在等待服务…":b?"正在恢复服务…":"正在切换服务…";return _.useEffect(()=>{if(!e)return;const y=()=>{try{const k=JSON.parse(localStorage.getItem("termdock-color-theme")||"null");(k==="dark"||k==="light")&&(document.documentElement.dataset.theme=k,pm(k))}catch{}};return window.addEventListener("storage",y),()=>window.removeEventListener("storage",y)},[e]),_.useEffect(()=>{if(!e||!("serviceWorker"in navigator))return;const y=C=>{if(C.source!==navigator.serviceWorker.controller)return;const T=C.data;T?.type==="termdock:focus-session"&&typeof T.targetPeerId=="string"&&typeof T.sessionId=="string"&&e.focusSession(T.targetPeerId,T.sessionId)&&(C.ports[0]?.postMessage({type:"termdock:focus-session-ack"}),C.stopImmediatePropagation())},k=async()=>{if("caches"in window)try{const C=await caches.open("termdock-notification-target-v1"),T=await C.match("/__termdock-notification-target");if(!T)return;const x=await T.json();typeof x.targetPeerId=="string"&&typeof x.sessionId=="string"&&Date.now()-x.clickedAt<3e4&&e.focusSession(x.targetPeerId,x.sessionId)&&await C.delete("/__termdock-notification-target")}catch{}},L=()=>{document.hidden||k()};return navigator.serviceWorker.addEventListener("message",y),document.addEventListener("visibilitychange",L),k(),()=>{navigator.serviceWorker.removeEventListener("message",y),document.removeEventListener("visibilitychange",L)}},[e]),e?p.jsxs("div",{className:"relative h-full w-full overflow-hidden bg-[var(--chrome-bg)]",children:[p.jsx("div",{ref:o,className:"isolate h-full w-full","aria-hidden":g!=="root"||m,style:{visibility:g==="root"?"visible":"hidden"},children:p.jsx(gm.Provider,{value:r,children:t})}),n.items.filter(y=>y.key!=="root").map(y=>p.jsx(DI,{host:e,item:y,visible:g===y.key,active:!m&&g===y.key},y.key)),b&&p.jsx("div",{className:"termdock-boot z-modal-panel",role:"status","aria-live":"polite",children:l||h?.phase==="offline"||h?.phase==="reconnecting"?p.jsxs("div",{className:"flex max-w-xs flex-col items-center gap-3 text-center",children:[p.jsx(De,{size:16,className:"animate-spin motion-reduce:animate-none","aria-hidden":"true"}),p.jsx("div",{className:"max-w-full truncate text-sm",children:h?.service?.label||"Termdock"}),p.jsx("div",{className:"text-xs text-muted-foreground",children:I}),p.jsx("button",{type:"button",className:"min-h-11 rounded-lg bg-surface-2 px-4 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",onClick:()=>c(n.activeKey),children:"查看连接页面"})]}):p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"termdock-boot-spinner","aria-hidden":"true"}),p.jsx("span",{children:"Loading Termdock"})]})}),m&&!b&&p.jsx("div",{className:"fixed inset-0 z-modal-panel flex items-end justify-center px-3 pb-[calc(env(safe-area-inset-bottom)+96px)]",role:"dialog","aria-modal":"true","aria-label":"切换服务",onKeyDown:y=>{if(y.key==="Escape"&&w?.service&&(y.preventDefault(),e.activate(w.service)),y.key==="Tab"){const k=Array.from(y.currentTarget.querySelectorAll("button")),L=k[0],C=k[k.length-1];y.shiftKey&&document.activeElement===L?(y.preventDefault(),C?.focus()):!y.shiftKey&&document.activeElement===C&&(y.preventDefault(),L?.focus())}},children:p.jsxs("div",{style:u?{position:"absolute",...u}:void 0,className:"flex w-full max-w-sm flex-wrap items-center gap-x-2 gap-y-1 rounded-xl border border-border bg-surface-elevated px-3 py-1.5 text-foreground shadow-lg",children:[p.jsxs("div",{role:"status","aria-live":"polite",className:"flex min-w-0 flex-1 items-center gap-2",children:[p.jsx(De,{size:16,className:"shrink-0 animate-spin text-primary motion-reduce:animate-none","aria-hidden":"true"}),p.jsxs("div",{className:"min-w-0",children:[p.jsx("div",{className:"truncate text-sm font-medium",children:h?.service?.label||"服务工作区"}),p.jsx("div",{className:"mt-1 text-xs text-muted-foreground",children:I})]})]}),p.jsxs("div",{className:"flex items-center justify-end gap-1",children:[l&&p.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-3 text-xs text-muted-foreground hover:bg-surface-2",onClick:()=>c(n.activeKey),children:"查看连接页面"}),w?.service&&p.jsx("button",{type:"button",autoFocus:!0,"aria-label":"取消切换",className:"min-h-11 shrink-0 rounded-lg px-3 text-xs text-muted-foreground hover:bg-surface-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",onClick:()=>e.activate(w.service),children:"取消"})]})]})})]}):t}const MI=_.lazy(()=>Yt(()=>import("./App-IXJ0RBl_.js").then(t=>t.A),__vite__mapDeps([4,2,1,5,6,3,7,8]))),jI=_.lazy(()=>Yt(()=>import("./DagPlayground-BoPHEC1t.js"),__vite__mapDeps([9,10,2,1,11,7,3])).then(t=>({default:t.DagPlayground}))),UI=_.lazy(()=>Yt(()=>import("./DiffLab-DhZiVixC.js"),__vite__mapDeps([12,2,1,13,8,14,3])).then(t=>({default:t.DiffLab}))),$I=_.lazy(()=>Yt(()=>import("./DiffReviewLab-48PH3ITt.js"),__vite__mapDeps([15,2,1,16,5,6,11,13,8,14,3])).then(t=>({default:t.DiffReviewLab})));MC();wE();window.parent===window&&NI();const Gr=ne();Gr&&Yt(()=>import("./App-IXJ0RBl_.js").then(t=>t.A),__vite__mapDeps([4,2,1,5,6,3,7,8])).catch(()=>{});!new URLSearchParams(location.search).has("dag-playground")&&!new URLSearchParams(location.search).has("diff-lab")&&!new URLSearchParams(location.search).has("diff-review-lab")&&(aE(Gr?{...Gr,id:Gr.targetPeerId,label:Gr.serviceName||location.host}:void 0),Xp());try{const t=JSON.parse(window.localStorage.getItem("termdock-color-theme")||"null");(t==="dark"||t==="light")&&(document.documentElement.dataset.theme=t,pm(t))}catch{}IE.createRoot(document.getElementById("root")).render(p.jsx(Ke.StrictMode,{children:p.jsxs(E2,{children:[window.parent===window&&p.jsxs(p.Fragment,{children:[p.jsx(LI,{}),p.jsx(CI,{})]}),p.jsx(CC,{children:p.jsx(_.Suspense,{fallback:p.jsx("div",{className:"termdock-boot",role:"status",children:"Loading Termdock"}),children:(()=>{const t=new URLSearchParams(window.location.search);return t.get("dag-playground")==="1"?p.jsx(jI,{}):t.get("diff-review-lab")==="1"?p.jsx($I,{}):t.get("diff-lab")==="1"?p.jsx(UI,{}):p.jsx(FI,{children:p.jsxs(xC,{children:[p.jsx(kI,{}),p.jsx(MI,{})]})})})()})})]})}));export{QA as $,Sl as A,Qp as B,hl as C,om as D,mg as E,xv as F,nA as G,_A as H,aR as I,hn as J,Xk as K,De as L,nE as M,Vk as N,AR as O,G2 as P,LA as Q,rA as R,ai as S,n1 as T,SA as U,_C as V,lo as W,sg as X,QI as Y,Il as Z,Yt as _,Jp as a,Ng as a$,NC as a0,Ee as a1,vA as a2,Oi as a3,ok as a4,Dk as a5,pR as a6,kR as a7,UA as a8,rk as a9,Mk as aA,uk as aB,mR as aC,Wk as aD,Us as aE,WC as aF,GC as aG,sr as aH,Hs as aI,Tc as aJ,ho as aK,Bl as aL,et as aM,tA as aN,K1 as aO,KA as aP,FA as aQ,HA as aR,Yk as aS,Lg as aT,ht as aU,ka as aV,Gh as aW,hp as aX,Bk as aY,YA as aZ,ek as a_,Ok as aa,i1 as ab,pg as ac,oA as ad,K2 as ae,fR as af,OA as ag,st as ah,XA as ai,VA as aj,JA as ak,bA as al,Gk as am,Kk as an,CR as ao,yI as ap,qk as aq,zk as ar,zA as as,Kn as at,Sk as au,$k as av,Qk as aw,Pk as ax,Zk as ay,Hk as az,DE as b,Ck as b$,vk as b0,xk as b1,gk as b2,bk as b3,wk as b4,lI as b5,Ll as b6,es as b7,p as b8,JI as b9,sA as bA,eR as bB,cc as bC,s2 as bD,ck as bE,h2 as bF,hR as bG,fk as bH,lk as bI,qA as bJ,Mn as bK,SR as bL,hk as bM,dk as bN,PA as bO,cR as bP,BA as bQ,jA as bR,sk as bS,a2 as bT,XI as bU,o1 as bV,r2 as bW,Jk as bX,n2 as bY,l2 as bZ,ne as b_,MA as ba,t2 as bb,ik as bc,c2 as bd,p2 as be,kk as bf,DA as bg,GA as bh,d2 as bi,XC as bj,jk as bk,fg as bl,kg as bm,YC as bn,ak as bo,EA as bp,gt as bq,ZC as br,Lk as bs,Tk as bt,Nk as bu,_k as bv,dR as bw,lR as bx,nR as by,AA as bz,eg as c,m2 as c0,g2 as c1,TA as c2,CA as c3,xA as c4,RA as c5,NA as c6,o2 as c7,f2 as c8,yR as c9,oR as cA,Ca as cB,gR as cC,Le as cD,Ta as cE,uR as cF,ge as cG,Ik as cH,ii as cI,ze as cJ,sR as cK,rR as cL,bR as ca,vR as cb,wR as cc,Eg as cd,yA as ce,Di as cf,iR as cg,Ra as ch,u2 as ci,rm as cj,i2 as ck,tR as cl,kA as cm,YI as cn,ER as co,gI as cp,pm as cq,VI as cr,ZA as cs,xR as ct,nk as cu,WA as cv,ss as cw,xt as cx,Fk as cy,li as cz,vn as d,KE as e,tg as f,ng as g,CC as h,gg as i,ZE as j,rg as k,P2 as l,me as m,IR as n,IA as o,nl as p,Nt as q,e2 as r,ZI as s,VC as t,Ek as u,yk as v,rl as w,Rk as x,Yx as y,tk as z};