chainlesschain 0.161.11 → 0.162.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-Cv7DnNSv.js → AIOps-Dn8q-Cu4.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B1m9njbz.js → ActionButton-BePEVs4O.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CU5lrpIq.js → Analytics-CKp-5Gi0.js} +1 -1
- package/src/assets/web-panel/assets/AppLayout-BSudqld0.js +3 -0
- package/src/assets/web-panel/assets/{AppLayout-BpbfrB7k.css → AppLayout-DBgtkmP7.css} +1 -1
- package/src/assets/web-panel/assets/{Audit-DUkzhAbX.js → Audit-iefpSeRG.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-L1i5rG4e.js → Backup-Ce43ZIhD.js} +1 -1
- package/src/assets/web-panel/assets/BaseInput-BvGiwRav.js +1 -0
- package/src/assets/web-panel/assets/{Chat-ySuja9_N.js → Chat-BAaQg-Oc.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-5jHkbotn.js → Checkbox-Dvn8uxKO.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CpTSti2I.js → Codegen-CTcZCayj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C5SJSGcO.js → Col-CBFpGgb5.js} +1 -1
- package/src/assets/web-panel/assets/{Community-0PMz9hPX.js → Community-DmCYaV9M.js} +1 -1
- package/src/assets/web-panel/assets/Compact-DnOD5uMF.js +1 -0
- package/src/assets/web-panel/assets/{Compliance-BEVqh-i7.js → Compliance-u53e9lg-.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C_UEYiR5.js → Cowork-CL5ohuXH.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-B4f0_E2W.js → Cron-DubcmRgt.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-CZT6FKhl.js → Crosschain-BWXcUXc3.js} +1 -1
- package/src/assets/web-panel/assets/{DID-LDSJdg_E.js → DID-Cw0i8WjE.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-CczHBzZy.js → Dashboard-BbofvIWH.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-KJXQPCdN.js → Dropdown-DN6ur5xV.js} +1 -1
- package/src/assets/web-panel/assets/Federation-CA-rIdkY.js +1 -0
- package/src/assets/web-panel/assets/{FormItemContext-CenKDKRv.js → FormItemContext-D_HGU4aA.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Ck3yvIOj.js → Git-CBWFs6Uk.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-C-Wqvp5q.js → Governance-Cx6PTC43.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D1Q4GQsE.js → Inference-Ubk1VstS.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-6-id5kqA.js → KnowledgeGraph-DTB10MYO.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BIrBldyi.js → Logs-Tfk4FBVC.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DuEYH2k1.js → Marketplace-BAsztG4O.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CJyrjpOa.js → McpTools-DliPfvuK.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-25VBuGGA.js → Memory-hkw6Xwyv.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-DDepR_yK.js → MobileBridge-eeNMFGj6.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B52jkX63.js → Mtc-BP3Riowm.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-BimrvH_0.js → MtcAudit-DvD7pE7V.js} +6 -6
- package/src/assets/web-panel/assets/Multisig-CPtc-fVL.js +7 -0
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
- package/src/assets/web-panel/assets/{NLProgramming-D9sqtzgg.js → NLProgramming-1y__Epjg.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BtaoLR6l.js → Notes-CEvJqMP8.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-DGc4Pnhc.js → NotificationSettings-wmCYm99r.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CH8YH1WC.js → Organization-CSoz8gGr.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-BEfCQNlN.js → Overflow-kf1mnFrM.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-DYxbd09I.js → OverrideContext-x9ZzjLwk.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Bp_HTJ00.js → P2P-C4GfXJ8Z.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-UHQF_4gL.js → Permissions-CW1Mn95X.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-yCVADMbj.js → Pipeline-CM1ppddn.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-C1oNG_1P.js → Privacy-DuAY5fEm.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DMW2d6Cb.js → ProjectInit-C72779b6.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-5G8pJeC_.js → ProjectSettings-CAilXWam.js} +1 -1
- package/src/assets/web-panel/assets/Projects-0OrfK90x.css +1 -0
- package/src/assets/web-panel/assets/Projects-DTIlVTkF.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CL_oE5tl.js → Providers-Cf6Yv8bu.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BV38kJpn.js → QuickAsk-CK1_VVzw.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-SAj9Q6gO.js → Recommend-QBC7KgvR.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-1kCD0gaB.js → Reputation-ju6lWzMM.js} +1 -1
- package/src/assets/web-panel/assets/Row-DQwipGEm.js +1 -0
- package/src/assets/web-panel/assets/{RssFeed-CAJCjHjh.js → RssFeed-DkLGmeLW.js} +1 -1
- package/src/assets/web-panel/assets/{Search-cvcqK6k5.js → Search-YYhitzkt.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CQg7wTKN.js → Security-DEllaBqe.js} +1 -1
- package/src/assets/web-panel/assets/{Services-CsUFvNqx.js → Services-BgPHBq9S.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-xBd6cpeg.js → Skeleton-DHEyJI7c.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CaroVcXP.js → Skills-c212vgf3.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BtpCM7Ko.js → Sla-COqhw_no.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BqMJfygi.js → SpeechSettings-Bmds06su.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CZouEnTT.js → SyncSettings-Bx1_A34Y.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-CXRSaKbt.js → Tasks-B0Lo_9aN.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DJY8TQ5i.js → Templates-D0RcpfuW.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BvR-WVDe.js → Tenant-G0yVctLy.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-DqgLtK3c.js +3 -0
- package/src/assets/web-panel/assets/Terminal-G1DrFtKr.css +1 -0
- package/src/assets/web-panel/assets/{Tokens-BvsTsita.js → Tokens-Cdt0aqCc.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BpAXwpX5.js → Trigger-DFbfZFuJ.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CQn3-pr1.js → Trust-BQXsWPz6.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-mdcVVgmW.js → UkeySign-DBem5Xkj.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B64a6mxs.js → VideoEditing-B1yipKKv.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CD6sh797.js → Wallet-iPJtU5QZ.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CBMAhuJk.js → WebAuthn-HLb9srUL.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-BL2e4pEf.js → WorkflowEditor-BSqXL8GD.js} +1 -1
- package/src/assets/web-panel/assets/addon-fit-CK6X9sAG.js +1 -0
- package/src/assets/web-panel/assets/{chat-D0R75-Vf.js → chat-D_J-ZVBh.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-CZQhO80h.js → collapseMotion-CjFH_Jop.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Z5R3KUYW.js → colors-B126JcB4.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Buyen0aR.js → compact-item-Bw5EEKw4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D9l1X-OX.js → createContext-xLJXI46O.js} +1 -1
- package/src/assets/web-panel/assets/{echarts-TwhxblyG.js → echarts-Bq-n0MtJ.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-DV4wtumO.js → hasIn-K8QCNlyy.js} +1 -1
- package/src/assets/web-panel/assets/{icons-Q99MnhG8.js → icons-NT6gy8Ee.js} +2 -2
- package/src/assets/web-panel/assets/{index--pPzkOu2.js → index-85lab9HJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSXvEQFS.js → index-B9ztiTnX.js} +1 -1
- package/src/assets/web-panel/assets/index-BEYypR_d.js +1 -0
- package/src/assets/web-panel/assets/{index-C4m8PjHn.js → index-BQ_NIMQS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAf0-ayI.js → index-BSgvvXgq.js} +2 -2
- package/src/assets/web-panel/assets/{index-RpJYGfg0.js → index-BWUG9yVI.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs7GKmFk.js → index-B_PqXUkT.js} +6 -6
- package/src/assets/web-panel/assets/index-BaXXyyT0.js +21 -0
- package/src/assets/web-panel/assets/index-Bptjq-wQ.js +1 -0
- package/src/assets/web-panel/assets/{index-CpemtT_B.js → index-BsbKjK1o.js} +2 -2
- package/src/assets/web-panel/assets/{index-Cs2QeQFi.js → index-Bv9odL87.js} +2 -2
- package/src/assets/web-panel/assets/{index-0P8ZPtKp.js → index-C2CgD7TN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CprQ5h5e.js → index-COCq6xuZ.js} +1 -1
- package/src/assets/web-panel/assets/index-CVeuzjxG.js +55 -0
- package/src/assets/web-panel/assets/index-CWBajOcE.js +3 -0
- package/src/assets/web-panel/assets/{index-CT46jhtC.js → index-CvAey6iD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Z-i_sfIN.js → index-DFPVNSby.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoV9UGnc.js → index-DFwF_JeQ.js} +2 -2
- package/src/assets/web-panel/assets/{index-DO9gd9wz.js → index-DLZZi1Km.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRWO_MUe.js → index-DY5Oc3z6.js} +4 -4
- package/src/assets/web-panel/assets/index-DZWfmuM2.js +1 -0
- package/src/assets/web-panel/assets/{index-CRvOaSuy.js → index-DZcij18m.js} +2 -2
- package/src/assets/web-panel/assets/{index-BLDanIEV.js → index-Da7bZewp.js} +1 -1
- package/src/assets/web-panel/assets/index-DdMzLeDn.js +1 -0
- package/src/assets/web-panel/assets/index-Dj8BNg-z.js +1 -0
- package/src/assets/web-panel/assets/index-DlX09aXr.js +1 -0
- package/src/assets/web-panel/assets/{index-CHs1Rtgi.js → index-DrfiELFa.js} +2 -2
- package/src/assets/web-panel/assets/{index-DMcK4Son.js → index-Dt0Tp8TS.js} +1 -1
- package/src/assets/web-panel/assets/index-DvNCyE3A.js +13 -0
- package/src/assets/web-panel/assets/{index-vSjbNv8F.js → index-LZYGhjVr.js} +1 -1
- package/src/assets/web-panel/assets/{index-AXmFZTsT.js → index-fMwtau_-.js} +2 -2
- package/src/assets/web-panel/assets/{index-D_g5wyjB.js → index-mqHxeING.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBBX0xZN.js → index-mzNWO8Yy.js} +1 -1
- package/src/assets/web-panel/assets/{index-UAkLBWLE.js → index-p3d5_s7V.js} +2 -2
- package/src/assets/web-panel/assets/{index-BBFrPlY4.js → index-qJbfToeQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtRv6Tqv.js → index-sAfwWh0R.js} +8 -8
- package/src/assets/web-panel/assets/index-xJkPbv0L.js +12 -0
- package/src/assets/web-panel/assets/index-yhA-qP4Y.js +1 -0
- package/src/assets/web-panel/assets/index-zEr6BW9X.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-C5tyEoyp.js → initDefaultProps-CacwmJft.js} +1 -1
- package/src/assets/web-panel/assets/{motion-By5VpSMZ.js → motion-BWrP7Lz6.js} +2 -2
- package/src/assets/web-panel/assets/{move-CNRFLi9k.js → move-imnbiy1n.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DYc7DRhT.js → omit-BlaOv91I.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D667btUF.js → pickAttrs-DUGKp0ro.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Ce-Y2-Qq.js → placementArrow-P0ZA4yAK.js} +1 -1
- package/src/assets/web-panel/assets/responsiveObserve-CZz-M9cI.js +1 -0
- package/src/assets/web-panel/assets/{slide-CyKGKfJ8.js → slide-BEnICwoX.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DffXAKmJ.js → statusUtils-DdYKRSiH.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CeeSLisW.js → styleChecker-DgUxvOQt.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-BUEmeWdR.js +1 -0
- package/src/assets/web-panel/assets/{useFs--Vkrwu51.js → useFs-BXsj6Z5e.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-D3PX36GT.js → useMergedState-O7QXt4P5.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-opfcK7Pm.js → useRefs-0J6m8UWN.js} +1 -1
- package/src/assets/web-panel/assets/{useState-Cp5WlLTS.js → useState-CSzR8F8O.js} +1 -1
- package/src/assets/web-panel/assets/{vendor-BVLz_z7V.js → vendor-M5lGV-wr.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-ChnNrJNw.js → vnode-B3Pp583L.js} +1 -1
- package/src/assets/web-panel/assets/xterm-BZcWGsqw.js +9 -0
- package/src/assets/web-panel/assets/xterm-DFuMZ0ql.css +1 -0
- package/src/assets/web-panel/assets/{zoom-DE1Teifl.js → zoom-D-LYfiQh.js} +1 -1
- package/src/assets/web-panel/index.html +3 -3
- package/src/commands/crosschain.js +403 -1
- package/src/commands/pair.js +291 -0
- package/src/gateways/terminal/PtyManager.js +248 -0
- package/src/gateways/terminal/RingBuffer.js +61 -0
- package/src/gateways/terminal/terminal-handlers.js +121 -0
- package/src/gateways/ws/topic-handler-attachment.js +211 -0
- package/src/index.js +2 -0
- package/src/lib/cross-chain-mtc.js +275 -6
- package/src/lib/cross-chain.js +48 -2
- package/src/lib/lan-pairing-preflight.js +425 -0
- package/src/lib/lan-pairing-tokens.js +264 -0
- package/src/runtime/agent-runtime.js +33 -0
- package/src/assets/web-panel/assets/AppLayout-CrQBcjC1.js +0 -3
- package/src/assets/web-panel/assets/BaseInput-CQSPRZVh.js +0 -1
- package/src/assets/web-panel/assets/Compact-CwrJK_94.js +0 -1
- package/src/assets/web-panel/assets/Federation-Bu085RVF.js +0 -1
- package/src/assets/web-panel/assets/Multisig-D-IuEDLa.css +0 -1
- package/src/assets/web-panel/assets/Multisig-DWsGuuyz.js +0 -1
- package/src/assets/web-panel/assets/Projects-BpLpgCga.js +0 -1
- package/src/assets/web-panel/assets/Projects-C34BWmmy.css +0 -1
- package/src/assets/web-panel/assets/Row-CUF6ofec.js +0 -1
- package/src/assets/web-panel/assets/index-BBvRNeKy.js +0 -1
- package/src/assets/web-panel/assets/index-BJzerWCW.js +0 -1
- package/src/assets/web-panel/assets/index-BbZ_pXN3.js +0 -1
- package/src/assets/web-panel/assets/index-BloaIh8i.js +0 -1
- package/src/assets/web-panel/assets/index-C1u_F_WR.js +0 -12
- package/src/assets/web-panel/assets/index-CHPsWSeL.js +0 -1
- package/src/assets/web-panel/assets/index-CLk9-Adx.js +0 -13
- package/src/assets/web-panel/assets/index-Cyal1Os0.js +0 -1
- package/src/assets/web-panel/assets/index-DYq0yh8a.js +0 -1
- package/src/assets/web-panel/assets/index-KvlSpGws.js +0 -21
- package/src/assets/web-panel/assets/index-WbY1RGjg.js +0 -3
- package/src/assets/web-panel/assets/index-cTf60nCj.js +0 -1
- package/src/assets/web-panel/assets/index-ry4j00pG.js +0 -55
- package/src/assets/web-panel/assets/responsiveObserve-BzzJzAds.js +0 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-CCzODKgI.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as h,o as lt,x as ot,M,R as k,P as i,u as o,c as e,N as t,K as g,L as d,O as v,Q as m,$ as rt,a6 as nt,F as Ie,S as y,a1 as G,_ as st,Y as ut,f as te}from"./vendor-
|
|
1
|
+
import{r as h,o as lt,x as ot,M,R as k,P as i,u as o,c as e,N as t,K as g,L as d,O as v,Q as m,$ as rt,a6 as nt,F as Ie,S as y,a1 as G,_ as st,Y as ut,f as te}from"./vendor-M5lGV-wr.js";import{_ as it,b as dt,u as ct,d as x}from"./index-DY5Oc3z6.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{a as ce,b as $e,f as Fe,c as Le,d as ae,p as vt}from"./mtc-parser-Cc3pB9Xm.js";import{R as pt,f as ft,e as mt,x as je,a$ as bt,aH as gt,N as yt,am as _t,H as ht}from"./icons-NT6gy8Ee.js";import"./community-parser-CO25nZFt.js";const kt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},wt={class:"page-sub"},St={style:{"font-family":"monospace"}},zt={style:{"font-family":"monospace"}},Ct={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},It={key:1,style:{color:"var(--text-muted)"}},$t={key:0,style:{"font-family":"monospace","font-size":"11px","word-break":"break-all"}},Ft={key:1,style:{color:"var(--text-muted)"}},Lt={key:1,style:{"font-family":"monospace","font-size":"11px"}},jt=["title"],Mt={style:{"font-family":"monospace"}},Dt={style:{"font-family":"monospace","font-size":"12px"}},Et={style:{"font-family":"monospace","font-size":"12px"}},Pt={class:"raw-pre"},Ot={style:{"font-family":"monospace"}},Ut={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-tertiary)","margin-left":"8px"}},At={key:0},Nt={style:{"font-family":"monospace"}},Rt={style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"11px"}},Tt={style:{"font-family":"monospace"}},Bt={style:{"font-family":"monospace"}},Ht={style:{"font-family":"monospace","font-size":"11px"}},qt={key:0,style:{color:"#cf1322","margin-left":"8px"}},Zt={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-secondary)","margin-left":"8px"}},Jt={class:"raw-pre",style:{margin:"0"}},Gt={__name:"Mtc",setup(Vt){const{t:r}=dt(),D=ct(),ve=h("status"),Y=h(!1),w=h(ce("")),X=h(""),le=h(!1),E=h($e("")),V=h(""),W=h(""),oe=h(!1),S=h(null),Me=te(()=>[{title:r("mtc.historyColumns.seq"),key:"seq",dataIndex:"seq",width:"90px"},{title:r("mtc.historyColumns.namespace"),key:"namespace",dataIndex:"namespace"},{title:r("mtc.historyColumns.treeSize"),key:"treeSize",dataIndex:"treeSize",width:"100px"},{title:r("mtc.historyColumns.treeHeadId"),key:"treeHeadId",dataIndex:"treeHeadId",width:"180px"},{title:r("mtc.historyColumns.publishedAt"),key:"publishedAt",dataIndex:"publishedAt",width:"140px"}]);function De(a,l){return a?a.length<=l?a:a.slice(0,l)+"…":""}async function pe(){Y.value=!0;try{if(de().isEmbedded){const a=await D.sendRaw({type:"mtc.audit-status"},3e4),l=a?.result;if(!a?.ok||!l?.success)throw new Error(l?.error||a?.error||"mtc.audit-status failed");w.value=ce(l.status)}else{const{output:a}=await D.execute("audit mtc status --json",3e4);w.value=ce(a)}}catch(a){x.error(r("mtc.messages.loadStatusFailed",{err:a?.message||a}))}finally{Y.value=!1}}async function Ee(){if(!X.value.trim()){x.warning(r("mtc.messages.stateFileRequired"));return}le.value=!0;try{const a=X.value.trim().replace(/"/g,'\\"'),{output:l}=await D.execute(`mtc publish-status "${a}" --json`,8e3);E.value=$e(l)}catch(a){x.error(r("mtc.messages.loadPublishFailed",{err:a?.message||a}))}finally{le.value=!1}}async function fe(){if(!V.value.trim()||!W.value.trim()){x.warning(r("mtc.messages.verifyPathsRequired"));return}oe.value=!0,S.value=null;try{const a=V.value.trim().replace(/"/g,'\\"'),l=W.value.trim().replace(/"/g,'\\"'),{output:u}=await D.execute(`mtc verify "${a}" --landmark "${l}" --json`,12e3);S.value=vt(u),S.value.raw||x.error(r("mtc.messages.verifyNoJson"))}catch(a){x.error(r("mtc.messages.verifyFailed",{err:a?.message||a}))}finally{oe.value=!1}}const $=h({config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:""},trust_anchors:{chain_count:0,total:0,by_chain:{}},staging:{pending:0},batches:{total:0,latest:null}}),Pe=te(()=>{switch($.value.config.mode){case"federated":return"Federated";case"light-client":return"Light Client";default:return"Independent"}}),Oe=[{title:"chain",key:"chain",dataIndex:"chain",width:"120px"},{title:"锚数",key:"count",dataIndex:"count",width:"80px"}],Ue=te(()=>{const a=$.value.trust_anchors.by_chain||{};return Object.entries(a).map(([l,u])=>({key:l,chain:l,count:u}))});function me(a){return{config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:"",...a?.config||{}},trust_anchors:{chain_count:0,total:0,by_chain:{},...a?.trust_anchors||{}},staging:{pending:0,...a?.staging||{}},batches:{total:0,latest:null,...a?.batches||{}}}}const N=h({});let re=null;function Ae(a){return a==="ok"?"#52c41a":a==="degraded"?"#faad14":a==="down"?"#ff4d4f":"#888"}async function be(){try{if(de().isEmbedded){const u=await D.sendRaw({type:"mtc.bridge-sla"},3e4),f=u?.result;u?.ok&&f?.success&&f.metrics&&typeof f.metrics.sla_status=="string"&&(N.value=f.metrics);return}const{output:a}=await D.execute("crosschain mtc-sla --json",3e4),l=a.split(/\r?\n/);for(let u=0;u<l.length;u++)if(l[u].trimStart().startsWith("{"))for(let f=l.length;f>u;f--)try{const s=JSON.parse(l.slice(u,f).join(`
|
|
2
2
|
`));if(s&&typeof s.sla_status=="string"){N.value=s;return}}catch{}}catch{}}async function Ne(){try{if(de().isEmbedded){const u=await D.sendRaw({type:"mtc.bridge-status"},3e4),f=u?.result;if(!u?.ok||!f?.success||!f.status)throw new Error(f?.error||u?.error||"mtc.bridge-status failed");const s=f.status;$.value=me({config:{enabled:s.enabled,mode:s.mode,alg:s.alg,batch_interval_seconds:s.batch_interval_seconds,issuer:s.issuer},trust_anchors:s.trust_anchors,staging:s.staging,batches:s.batches});return}const{output:a}=await D.execute("crosschain mtc-status --json",3e4),l=a.split(/\r?\n/);for(let u=0;u<l.length;u++)if(l[u].trimStart().startsWith("{"))for(let f=l.length;f>u;f--)try{const s=JSON.parse(l.slice(u,f).join(`
|
|
3
3
|
`));if(s&&s.config){$.value=me(s);return}}catch{}}catch(a){x.error("加载桥 MTC 状态失败: "+(a?.message||a))}}const J=h(""),ne=h(!1),P=h(null),_=h(null),ge=h("随 governance-log 加载刷新"),se=te(()=>{const a=P.value?.state;return a?Array.isArray(a.pending_thresholds)&&a.pending_thresholds.length>0?a.pending_thresholds:a.pending_threshold&&Number.isInteger(a.pending_threshold.target)?[a.pending_threshold]:[]:[]}),Re=[{title:"member_id",key:"member_id",dataIndex:"member_id"},{title:"status",key:"status",dataIndex:"status",width:"110px"},{title:"weight",key:"weight",dataIndex:"weight",width:"80px"},{title:"alg",key:"alg",dataIndex:"alg",width:"120px"}];function Te(a){switch(a){case"create":return"cyan";case"invite":case"vote":return"blue";case"leave":case"rotate-key":return"default";case"propose-revoke":case"propose-threshold":return"orange";case"confirm-revoke":case"confirm-threshold":return"gold";case"fork":case"merge":return"purple";case"dispute":case"wind-down":return"red";default:return"default"}}const L=h(!1),K=h(null),H=h({actor:"",candidate:"",pubkeyId:""}),q=h({actor:"",candidate:"",decision:"approve"}),Z=h({actor:"",newM:2}),R=h({actor:"",target:"",reason:"inactive"}),j=h({dropZone:"",verify:!1});function C(a){return String(a||"").replace(/"/g,"").replace(/[`$]/g,"")}async function O(a,l=!0){if(!J.value.trim()){x.warning("请先输入联邦 ID");return}L.value=!0,K.value=null;try{const u=C(J.value.trim()),f=`mtc federation ${a.replace("<FED>",`"${u}"`)} --json`,{output:s}=await D.execute(f,12e3),c=s.split(/\r?\n/);let p=null;for(let I=0;I<c.length;I++)if(c[I].trimStart().startsWith("{")){for(let U=c.length;U>I;U--)try{p=JSON.parse(c.slice(I,U).join(`
|
|
4
4
|
`));break}catch{}if(p)break}K.value=p||{raw:s},x.success("命令执行完成"),l&&await xe()}catch(u){x.error("CLI 执行失败: "+(u?.message||u)),K.value={error:u?.message||String(u)}}finally{L.value=!1}}function ye(){const a=H.value;if(!a.actor||!a.candidate||!a.pubkeyId){x.warning("actor / candidate / pubkey-id 都必填");return}return O(`invite <FED> "${C(a.candidate)}" --actor "${C(a.actor)}" --candidate-pubkey-id "${C(a.pubkeyId)}"`)}function _e(){const a=q.value;if(!a.actor||!a.candidate){x.warning("actor / candidate 必填");return}return O(`vote <FED> "${C(a.candidate)}" --actor "${C(a.actor)}" --decision ${a.decision}`)}function he(){const a=Z.value;if(!a.actor){x.warning("actor 必填");return}return O(`propose-threshold <FED> ${parseInt(a.newM)} --actor "${C(a.actor)}"`)}function Be(){const a=Z.value;if(!a.actor){x.warning("actor 必填");return}return O(`confirm-threshold <FED> --actor "${C(a.actor)}"`)}function He(a){const l=(Z.value.actor||"").trim();if(!l){x.warning('请先在"改 threshold"子 tab 填 actor');return}if(!a){x.warning("proposal event_id 缺失");return}return O(`confirm-threshold <FED> --actor "${C(l)}" --proposal-event-id "${C(a)}"`)}function qe(a){return a?a.length<=16?a:`${a.slice(0,8)}…${a.slice(-4)}`:"—"}function ke(){const a=R.value;if(!a.actor||!a.target){x.warning("actor / target 必填");return}return O(`propose-revoke <FED> "${C(a.target)}" --actor "${C(a.actor)}" --reason "${C(a.reason)}"`)}function Ze(){const a=R.value;if(!a.actor||!a.target){x.warning("actor / target 必填");return}return O(`confirm-revoke <FED> "${C(a.target)}" --actor "${C(a.actor)}"`)}function Je(){if(!j.value.dropZone){x.warning("drop-zone 必填");return}return O(`governance-publish <FED> --drop-zone "${C(j.value.dropZone)}"`,!1)}function Ge(){if(!j.value.dropZone){x.warning("drop-zone 必填");return}const a=j.value.verify?" --verify":"";return O(`governance-pull <FED> --drop-zone "${C(j.value.dropZone)}"${a}`)}function Ve(){if(!j.value.dropZone){x.warning("drop-zone 必填");return}const a=j.value.verify?" --verify":"";return O(`governance-sync-serve <FED> --drop-zone "${C(j.value.dropZone)}" --once${a}`)}async function xe(){if(!J.value.trim()){x.warning("请输入联邦 ID");return}ne.value=!0;try{const a=J.value.trim().replace(/"/g,""),{output:l}=await D.execute(`mtc federation governance-log "${a}" --json`,8e3),u=l.split(/\r?\n/);let f=!1;for(let s=0;s<u.length;s++)if(u[s].trimStart().startsWith("{")){for(let c=u.length;c>s;c--)try{const p=JSON.parse(u.slice(s,c).join(`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{d as Le,o as xe,c as r,s as kt,t as Et,a as se,w as Ze,r as K,W as It,e as Tt,n as tt,b as Dt,f as we,F as ue,z as Ot,M as ne,N as o,u as e,Q as B,S as P,L as
|
|
1
|
+
import{d as Le,o as xe,c as r,s as kt,t as Et,a as se,w as Ze,r as K,W as It,e as Tt,n as tt,b as Dt,f as we,F as ue,z as Ot,M as ne,N as o,u as e,Q as B,S as P,L as A,O as S,R as j,a1 as Rt,P as _}from"./vendor-M5lGV-wr.js";import{h as k,f as le,l as At,i as ut,q as dt,w as nt,N as Fe,Q as $t,R as _t,u as ke,_ as Nt,d as X}from"./index-DY5Oc3z6.js";import{u as Ee}from"./useShellMode-CgR0wCYM.js";import{K as Ce}from"./KeyCode-D63Tfrq7.js";import{w as Ve}from"./raf-Deuc0E8-.js";import{i as ct}from"./styleChecker-DgUxvOQt.js";import L,{Textarea as Se}from"./index-DFwF_JeQ.js";import{b0 as Mt,b1 as Bt,ah as Pt,ag as zt,aJ as Ut}from"./icons-NT6gy8Ee.js";import{i as Kt}from"./index-fMwtau_-.js";import{o as pt}from"./operationUnit-vCu2co3e.js";import{s as Ht}from"./BaseInput-BvGiwRav.js";import{R as Lt}from"./index-yhA-qP4Y.js";import{T as Je}from"./index-85lab9HJ.js";import{o as ye}from"./omit-BlaOv91I.js";import{u as jt}from"./useMergedState-O7QXt4P5.js";import q from"./index-Bv9odL87.js";import Wt,{TabPane as be}from"./index-CWBajOcE.js";import he,{FormItem as O}from"./index-DLZZi1Km.js";import{B as z}from"./index-BWUG9yVI.js";import rt,{DescriptionsItem as Y}from"./index-CvAey6iD.js";import re from"./index-COCq6xuZ.js";import ie from"./index-sAfwWh0R.js";import Q from"./index-DFPVNSby.js";import Xe from"./index-BQ_NIMQS.js";import Be,{ListItem as pe}from"./index-Bptjq-wQ.js";import lt from"./index-DvNCyE3A.js";import Ft from"./index-mqHxeING.js";import"./FormItemContext-D_HGU4aA.js";import"./createContext-xLJXI46O.js";import"./statusUtils-DdYKRSiH.js";import"./vnode-B3Pp583L.js";import"./Compact-DnOD5uMF.js";import"./_getTag-BVc6NQ_K.js";import"./isPlainObject-_gz-soRW.js";import"./compact-item-Bw5EEKw4.js";import"./ResizeObserver.es-D6qJbdzf.js";import"./Trigger-DFbfZFuJ.js";import"./motion-BWrP7Lz6.js";import"./isVisible-C7tPsqfj.js";import"./placementArrow-P0ZA4yAK.js";import"./firstNotUndefined-CLFzEa0p.js";import"./colors-B126JcB4.js";import"./zoom-D-LYfiQh.js";import"./initDefaultProps-CacwmJft.js";import"./index-qJbfToeQ.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./_arrayIncludes-B8uzE354.js";import"./injectionKey-BXVc-oGP.js";import"./Overflow-kf1mnFrM.js";import"./collapseMotion-CjFH_Jop.js";import"./slide-BEnICwoX.js";import"./OverrideContext-x9ZzjLwk.js";import"./Dropdown-DN6ur5xV.js";import"./useState-CSzR8F8O.js";import"./useRefs-0J6m8UWN.js";import"./hasIn-K8QCNlyy.js";import"./isSymbol-DAy2hlR5.js";import"./isMobile--2fOlCHx.js";import"./Row-DQwipGEm.js";import"./responsiveObserve-CZz-M9cI.js";import"./useFlexGapSupport-BUEmeWdR.js";import"./index-Da7bZewp.js";import"./debounce-D9xTw4Sx.js";import"./Col-CBFpGgb5.js";import"./index-Dj8BNg-z.js";import"./Skeleton-DHEyJI7c.js";import"./index-mzNWO8Yy.js";import"./index-BaXXyyT0.js";import"./index-B_PqXUkT.js";import"./pickAttrs-DUGKp0ro.js";import"./move-imnbiy1n.js";import"./ActionButton-BePEVs4O.js";var Vt=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const Jt={border:0,background:"transparent",padding:0,lineHeight:"inherit",display:"inline-block"},ot=Le({compatConfig:{MODE:3},name:"TransButton",inheritAttrs:!1,props:{noStyle:{type:Boolean,default:void 0},onClick:Function,disabled:{type:Boolean,default:void 0},autofocus:{type:Boolean,default:void 0}},setup(t,s){let{slots:a,emit:l,attrs:i,expose:d}=s;const c=kt(),p=g=>{const{keyCode:y}=g;y===Ce.ENTER&&g.preventDefault()},C=g=>{const{keyCode:y}=g;y===Ce.ENTER&&l("click",g)},N=g=>{l("click",g)},w=()=>{c.value&&c.value.focus()},f=()=>{c.value&&c.value.blur()};return xe(()=>{t.autofocus&&w()}),d({focus:w,blur:f}),()=>{var g;const{noStyle:y,disabled:I}=t,b=Vt(t,["noStyle","disabled"]);let h={};return y||(h=k({},Jt)),I&&(h.pointerEvents="none"),r("div",le(le(le({role:"button",tabindex:0,ref:c},b),i),{},{onClick:N,onKeydown:p,onKeyup:C,style:k(k({},h),i.style||{})}),[(g=a.default)===null||g===void 0?void 0:g.call(a)])}}}),Xt=(t,s,a,l)=>{const{sizeMarginHeadingVerticalEnd:i,fontWeightStrong:d}=l;return{marginBottom:i,color:a,fontWeight:d,fontSize:t,lineHeight:s}},qt=t=>{const s=[1,2,3,4,5],a={};return s.forEach(l=>{a[`
|
|
2
2
|
h${l}&,
|
|
3
3
|
div&-h${l},
|
|
4
4
|
div&-h${l} > textarea,
|
|
5
5
|
h${l}
|
|
6
|
-
`]=Xt(t[`fontSizeHeading${l}`],t[`lineHeightHeading${l}`],t.colorTextHeading,t)}),a},Qt=t=>{const{componentCls:s}=t;return{"a&, a":k(k({},pt(t)),{textDecoration:t.linkDecoration,"&:active, &:hover":{textDecoration:t.linkHoverDecoration},[`&[disabled], &${s}-disabled`]:{color:t.colorTextDisabled,cursor:"not-allowed","&:active, &:hover":{color:t.colorTextDisabled},"&:active":{pointerEvents:"none"}}})}},Gt=()=>({code:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.2em 0.1em",fontSize:"85%",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3},kbd:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.15em 0.1em",fontSize:"90%",background:"rgba(150, 150, 150, 0.06)",border:"1px solid rgba(100, 100, 100, 0.2)",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:
|
|
6
|
+
`]=Xt(t[`fontSizeHeading${l}`],t[`lineHeightHeading${l}`],t.colorTextHeading,t)}),a},Qt=t=>{const{componentCls:s}=t;return{"a&, a":k(k({},pt(t)),{textDecoration:t.linkDecoration,"&:active, &:hover":{textDecoration:t.linkHoverDecoration},[`&[disabled], &${s}-disabled`]:{color:t.colorTextDisabled,cursor:"not-allowed","&:active, &:hover":{color:t.colorTextDisabled},"&:active":{pointerEvents:"none"}}})}},Gt=()=>({code:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.2em 0.1em",fontSize:"85%",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3},kbd:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.15em 0.1em",fontSize:"90%",background:"rgba(150, 150, 150, 0.06)",border:"1px solid rgba(100, 100, 100, 0.2)",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:Mt[2]},"u, ins":{textDecoration:"underline",textDecorationSkipInk:"auto"},"s, del":{textDecoration:"line-through"},strong:{fontWeight:600},"ul, ol":{marginInline:0,marginBlock:"0 1em",padding:0,li:{marginInline:"20px 0",marginBlock:0,paddingInline:"4px 0",paddingBlock:0}},ul:{listStyleType:"circle",ul:{listStyleType:"disc"}},ol:{listStyleType:"decimal"},"pre, blockquote":{margin:"1em 0"},pre:{padding:"0.4em 0.6em",whiteSpace:"pre-wrap",wordWrap:"break-word",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3,code:{display:"inline",margin:0,padding:0,fontSize:"inherit",fontFamily:"inherit",background:"transparent",border:0}},blockquote:{paddingInline:"0.6em 0",paddingBlock:0,borderInlineStart:"4px solid rgba(100, 100, 100, 0.2)",opacity:.85}}),Zt=t=>{const{componentCls:s}=t,l=Kt(t).inputPaddingVertical+1;return{"&-edit-content":{position:"relative","div&":{insetInlineStart:-t.paddingSM,marginTop:-l,marginBottom:`calc(1em - ${l}px)`},[`${s}-edit-content-confirm`]:{position:"absolute",insetInlineEnd:t.marginXS+2,insetBlockEnd:t.marginXS,color:t.colorTextDescription,fontWeight:"normal",fontSize:t.fontSize,fontStyle:"normal",pointerEvents:"none"},textarea:{margin:"0!important",MozTransition:"none",height:"1em"}}}},Yt=t=>({"&-copy-success":{"\n &,\n &:hover,\n &:focus":{color:t.colorSuccess}}}),en=()=>({"\n a&-ellipsis,\n span&-ellipsis\n ":{display:"inline-block",maxWidth:"100%"},"&-single-line":{whiteSpace:"nowrap"},"&-ellipsis-single-line":{overflow:"hidden",textOverflow:"ellipsis","a&, span&":{verticalAlign:"bottom"}},"&-ellipsis-multiple-line":{display:"-webkit-box",overflow:"hidden",WebkitLineClamp:3,WebkitBoxOrient:"vertical"}}),tn=t=>{const{componentCls:s,sizeMarginHeadingVerticalStart:a}=t;return{[s]:k(k(k(k(k(k(k(k(k({color:t.colorText,wordBreak:"break-word",lineHeight:t.lineHeight,[`&${s}-secondary`]:{color:t.colorTextDescription},[`&${s}-success`]:{color:t.colorSuccess},[`&${s}-warning`]:{color:t.colorWarning},[`&${s}-danger`]:{color:t.colorError,"a&:active, a&:focus":{color:t.colorErrorActive},"a&:hover":{color:t.colorErrorHover}},[`&${s}-disabled`]:{color:t.colorTextDisabled,cursor:"not-allowed",userSelect:"none"},"\n div&,\n p\n ":{marginBottom:"1em"}},qt(t)),{[`
|
|
7
7
|
& + h1${s},
|
|
8
8
|
& + h2${s},
|
|
9
9
|
& + h3${s},
|
|
@@ -13,7 +13,7 @@ import{d as Le,o as xe,c as r,s as kt,t as Et,a as se,w as Ze,r as K,W as It,e a
|
|
|
13
13
|
${s}-expand,
|
|
14
14
|
${s}-edit,
|
|
15
15
|
${s}-copy
|
|
16
|
-
`]:k(k({},pt(t)),{marginInlineStart:t.marginXXS})}),Zt(t)),Yt(t)),en()),{"&-rtl":{direction:"rtl"}})}},ft=Rt("Typography",t=>[tn(t)],{sizeMarginHeadingVerticalStart:"1.2em",sizeMarginHeadingVerticalEnd:"0.5em"}),nn=()=>({prefixCls:String,value:String,maxlength:Number,autoSize:{type:[Boolean,Object]},onSave:Function,onCancel:Function,onEnd:Function,onChange:Function,originContent:String,direction:String,component:String}),rn=Le({compatConfig:{MODE:3},name:"Editable",inheritAttrs:!1,props:nn(),setup(t,s){let{emit:a,slots:l,attrs:i}=s;const{prefixCls:d}=Et(t),c=se({current:t.value||"",lastKeyCode:void 0,inComposition:!1,cancelFlag:!1});Ze(()=>t.value,T=>{c.current=T});const p=K();xe(()=>{var T;if(p.value){const D=(T=p.value)===null||T===void 0?void 0:T.resizableTextArea,H=D?.textArea;H.focus();const{length:U}=H.value;H.setSelectionRange(U,U)}});function C(T){p.value=T}function M(T){let{target:{value:D}}=T;c.current=D.replace(/[\r\n]/g,""),a("change",c.current)}function w(){c.inComposition=!0}function f(){c.inComposition=!1}function g(T){const{keyCode:D}=T;D===Ce.ENTER&&T.preventDefault(),!c.inComposition&&(c.lastKeyCode=D)}function y(T){const{keyCode:D,ctrlKey:H,altKey:U,metaKey:V,shiftKey:N}=T;c.lastKeyCode===D&&!c.inComposition&&!H&&!U&&!V&&!N&&(D===Ce.ENTER?(b(),a("end")):D===Ce.ESC&&(c.current=t.originContent,a("cancel")))}function I(){b()}function b(){a("save",c.current.trim())}const[h,A]=ft(d);return()=>{const T=ut({[`${d.value}`]:!0,[`${d.value}-edit-content`]:!0,[`${d.value}-rtl`]:t.direction==="rtl",[t.component?`${d.value}-${t.component}`:""]:!0},i.class,A.value);return h(r("div",le(le({},i),{},{class:T}),[r(Se,{ref:C,maxlength:t.maxlength,value:c.current,onChange:M,onKeydown:g,onKeyup:y,onCompositionstart:w,onCompositionend:f,onBlur:I,rows:1,autoSize:t.autoSize===void 0||t.autoSize},null),l.enterIcon?l.enterIcon({className:`${t.prefixCls}-edit-content-confirm`}):r(Bt,{class:`${t.prefixCls}-edit-content-confirm`},null)]))}}}),ln=3,on=8;let J;const qe={padding:0,margin:0,display:"inline",lineHeight:"inherit"};function mt(t,s){t.setAttribute("aria-hidden","true");const a=window.getComputedStyle(s),l=Ht(a);t.setAttribute("style",l),t.style.position="fixed",t.style.left="0",t.style.height="auto",t.style.minHeight="auto",t.style.maxHeight="auto",t.style.paddingTop="0",t.style.paddingBottom="0",t.style.borderTopWidth="0",t.style.borderBottomWidth="0",t.style.top="-999999px",t.style.zIndex="-1000",t.style.textOverflow="clip",t.style.whiteSpace="normal",t.style.webkitLineClamp="none"}function an(t){const s=document.createElement("div");mt(s,t),s.appendChild(document.createTextNode("text")),document.body.appendChild(s);const a=s.getBoundingClientRect().height;return document.body.removeChild(s),a}const sn=((t,s,a,l,i)=>{J||(J=document.createElement("div"),J.setAttribute("aria-hidden","true"),document.body.appendChild(J));const{rows:d,suffix:c=""}=s,p=an(t),C=Math.round(p*d*100)/100;mt(J,t);const M=It({render(){return r("div",{style:qe},[r("span",{style:qe},[a,c]),r("span",{style:qe},[l])])}});M.mount(J);function w(){return Math.round(J.getBoundingClientRect().height*100)/100-.1<=C}if(w())return M.unmount(),{content:a,text:J.innerHTML,ellipsis:!1};const f=Array.prototype.slice.apply(J.childNodes[0].childNodes[0].cloneNode(!0).childNodes).filter(D=>{let{nodeType:H,data:U}=D;return H!==on&&U!==""}),g=Array.prototype.slice.apply(J.childNodes[0].childNodes[1].cloneNode(!0).childNodes);M.unmount();const y=[];J.innerHTML="";const I=document.createElement("span");J.appendChild(I);const b=document.createTextNode(i+c);I.appendChild(b),g.forEach(D=>{J.appendChild(D)});function h(D){I.insertBefore(D,b)}function A(D,H){let U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,V=arguments.length>3&&arguments[3]!==void 0?arguments[3]:H.length,N=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;const G=Math.floor((U+V)/2),ve=H.slice(0,G);if(D.textContent=ve,U>=V-1)for(let ee=V;ee>=U;ee-=1){const oe=H.slice(0,ee);if(D.textContent=oe,w()||!oe)return ee===H.length?{finished:!1,vNode:H}:{finished:!0,vNode:oe}}return w()?A(D,H,G,V,G):A(D,H,U,G,N)}function T(D){if(D.nodeType===ln){const U=D.textContent||"",V=document.createTextNode(U);return h(V),A(V,U)}return{finished:!1,vNode:null}}return f.some(D=>{const{finished:H,vNode:U}=T(D);return U&&y.push(U),H}),{content:y,text:J.innerHTML,ellipsis:!0}});var un=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const dn=()=>({prefixCls:String,direction:String,component:String}),W=Le({name:"ATypography",inheritAttrs:!1,props:dn(),setup(t,s){let{slots:a,attrs:l}=s;const{prefixCls:i,direction:d}=dt("typography",t),[c,p]=ft(i);return()=>{var C;const M=k(k({},t),l),{prefixCls:w,direction:f,component:g="article"}=M,y=un(M,["prefixCls","direction","component"]);return c(r(g,le(le({},y),{},{class:ut(i.value,{[`${i.value}-rtl`]:d.value==="rtl"},l.class,p.value)}),{default:()=>[(C=a.default)===null||C===void 0?void 0:C.call(a)]}))}}}),cn=()=>{const t=document.getSelection();if(!t.rangeCount)return function(){};let s=document.activeElement;const a=[];for(let l=0;l<t.rangeCount;l++)a.push(t.getRangeAt(l));switch(s.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":s.blur();break;default:s=null;break}return t.removeAllRanges(),function(){t.type==="Caret"&&t.removeAllRanges(),t.rangeCount||a.forEach(function(l){t.addRange(l)}),s&&s.focus()}},at={"text/plain":"Text","text/html":"Url",default:"Text"},pn="Copy to clipboard: #{key}, Enter";function fn(t){const s=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return t.replace(/#{\s*key\s*}/g,s)}function mn(t,s){let a,l,i,d,c,p=!1;s||(s={});const C=s.debug||!1;try{if(l=cn(),i=document.createRange(),d=document.getSelection(),c=document.createElement("span"),c.textContent=t,c.style.all="unset",c.style.position="fixed",c.style.top=0,c.style.clip="rect(0, 0, 0, 0)",c.style.whiteSpace="pre",c.style.webkitUserSelect="text",c.style.MozUserSelect="text",c.style.msUserSelect="text",c.style.userSelect="text",c.addEventListener("copy",function(w){if(w.stopPropagation(),s.format)if(w.preventDefault(),typeof w.clipboardData>"u"){C&&console.warn("unable to use e.clipboardData"),C&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();const f=at[s.format]||at.default;window.clipboardData.setData(f,t)}else w.clipboardData.clearData(),w.clipboardData.setData(s.format,t);s.onCopy&&(w.preventDefault(),s.onCopy(w.clipboardData))}),document.body.appendChild(c),i.selectNodeContents(c),d.addRange(i),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");p=!0}catch(M){C&&console.error("unable to copy using execCommand: ",M),C&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(s.format||"text",t),s.onCopy&&s.onCopy(window.clipboardData),p=!0}catch(w){C&&console.error("unable to copy using clipboardData: ",w),C&&console.error("falling back to prompt"),a=fn("message"in s?s.message:pn),window.prompt(a,t)}}finally{d&&(typeof d.removeRange=="function"?d.removeRange(i):d.removeAllRanges()),c&&document.body.removeChild(c),l()}return p}var yn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const vn=ct("webkitLineClamp"),gn=ct("textOverflow"),it="...",Ie=()=>({editable:{type:[Boolean,Object],default:void 0},copyable:{type:[Boolean,Object],default:void 0},prefixCls:String,component:String,type:String,disabled:{type:Boolean,default:void 0},ellipsis:{type:[Boolean,Object],default:void 0},code:{type:Boolean,default:void 0},mark:{type:Boolean,default:void 0},underline:{type:Boolean,default:void 0},delete:{type:Boolean,default:void 0},strong:{type:Boolean,default:void 0},keyboard:{type:Boolean,default:void 0},content:String,"onUpdate:content":Function}),Te=Le({compatConfig:{MODE:3},name:"TypographyBase",inheritAttrs:!1,props:Ie(),setup(t,s){let{slots:a,attrs:l,emit:i}=s;const{prefixCls:d,direction:c}=dt("typography",t),p=se({copied:!1,ellipsisText:"",ellipsisContent:null,isEllipsis:!1,expanded:!1,clientRendered:!1,expandStr:"",copyStr:"",copiedStr:"",editStr:"",copyId:void 0,rafId:void 0,prevProps:void 0,originContent:""}),C=K(),M=K(),w=we(()=>{const v=t.ellipsis;return v?k({rows:1,expandable:!1},typeof v=="object"?v:null):{}});xe(()=>{p.clientRendered=!0,G()}),Tt(()=>{clearTimeout(p.copyId),Ve.cancel(p.rafId)}),Ze([()=>w.value.rows,()=>t.content],()=>{tt(()=>{V()})},{flush:"post",deep:!0}),Dt(()=>{t.content===void 0&&(nt(!t.editable),nt(!t.ellipsis))});function f(){var v;return t.ellipsis||t.editable?t.content:(v=Fe(C.value))===null||v===void 0?void 0:v.innerText}function g(v){const{onExpand:E}=w.value;p.expanded=!0,E?.(v)}function y(v){v.preventDefault(),p.originContent=t.content,U(!0)}function I(v){b(v),U(!1)}function b(v){const{onChange:E}=T.value;v!==t.content&&(i("update:content",v),E?.(v))}function h(){var v,E;(E=(v=T.value).onCancel)===null||E===void 0||E.call(v),U(!1)}function A(v){v.preventDefault(),v.stopPropagation();const{copyable:E}=t,$=k({},typeof E=="object"?E:null);$.text===void 0&&($.text=f()),mn($.text||""),p.copied=!0,tt(()=>{$.onCopy&&$.onCopy(v),p.copyId=setTimeout(()=>{p.copied=!1},3e3)})}const T=we(()=>{const v=t.editable;return v?k({},typeof v=="object"?v:null):{editing:!1}}),[D,H]=jt(!1,{value:we(()=>T.value.editing)});function U(v){const{onStart:E}=T.value;v&&E&&E(),H(v)}Ze(D,v=>{var E;v||(E=M.value)===null||E===void 0||E.focus()},{flush:"post"});function V(v){if(v){const{width:E,height:$}=v;if(!E||!$)return}Ve.cancel(p.rafId),p.rafId=Ve(()=>{G()})}const N=we(()=>{const{rows:v,expandable:E,suffix:$,onEllipsis:m,tooltip:n}=w.value;return $||n||t.editable||t.copyable||E||m?!1:v===1?gn:vn}),G=()=>{const{ellipsisText:v,isEllipsis:E}=p,{rows:$,suffix:m,onEllipsis:n}=w.value;if(!$||$<0||!Fe(C.value)||p.expanded||t.content===void 0||N.value)return;const{content:u,text:F,ellipsis:ae}=sn(Fe(C.value),{rows:$,suffix:m},t.content,$e(!0),it);(v!==F||p.isEllipsis!==ae)&&(p.ellipsisText=F,p.ellipsisContent=u,p.isEllipsis=ae,E!==ae&&n&&n(ae))};function ve(v,E){let{mark:$,code:m,underline:n,delete:u,strong:F,keyboard:ae}=v,ge=E;function te(_e,Z){if(!_e)return;const Me=(function(){return ge})();ge=r(Z,null,{default:()=>[Me]})}return te(F,"strong"),te(n,"u"),te(u,"del"),te(m,"code"),te($,"mark"),te(ae,"kbd"),ge}function ee(v){const{expandable:E,symbol:$}=w.value;if(!E||!v&&(p.expanded||!p.isEllipsis))return null;const m=(a.ellipsisSymbol?a.ellipsisSymbol():$)||p.expandStr;return r("a",{key:"expand",class:`${d.value}-expand`,onClick:g,"aria-label":p.expandStr},[m])}function oe(){if(!t.editable)return;const{tooltip:v,triggerType:E=["icon"]}=t.editable,$=a.editableIcon?a.editableIcon():r(Pt,{role:"button"},null),m=a.editableTooltip?a.editableTooltip():p.editStr,n=typeof m=="string"?m:"";return E.indexOf("icon")!==-1?r(Je,{key:"edit",title:v===!1?"":m},{default:()=>[r(ot,{ref:M,class:`${d.value}-edit`,onClick:y,"aria-label":n},{default:()=>[$]})]}):null}function x(){if(!t.copyable)return;const{tooltip:v}=t.copyable,E=p.copied?p.copiedStr:p.copyStr,$=a.copyableTooltip?a.copyableTooltip({copied:p.copied}):E,m=typeof $=="string"?$:"",n=p.copied?r(zt,null,null):r(Ut,null,null),u=a.copyableIcon?a.copyableIcon({copied:!!p.copied}):n;return r(Je,{key:"copy",title:v===!1?"":$},{default:()=>[r(ot,{class:[`${d.value}-copy`,{[`${d.value}-copy-success`]:p.copied}],onClick:A,"aria-label":m},{default:()=>[u]})]})}function je(){const{class:v,style:E}=l,{maxlength:$,autoSize:m,onEnd:n}=T.value;return r(rn,{class:v,style:E,prefixCls:d.value,value:t.content,originContent:p.originContent,maxlength:$,autoSize:m,onSave:I,onChange:b,onCancel:h,onEnd:n,direction:c.value,component:t.component},{enterIcon:a.editableEnterIcon})}function $e(v){return[ee(v),oe(),x()].filter(E=>E)}return()=>{var v;const{triggerType:E=["icon"]}=T.value,$=t.ellipsis||t.editable?t.content!==void 0?t.content:(v=a.default)===null||v===void 0?void 0:v.call(a):a.default?a.default():t.content;return D.value?je():r($t,{componentName:"Text",children:m=>{const n=k(k({},t),l),{type:u,disabled:F,content:ae,class:ge,style:te}=n,_e=yn(n,["type","disabled","content","class","style"]),{rows:Z,suffix:Me,tooltip:We}=w.value,{edit:yt,copy:vt,copied:gt,expand:bt}=m;p.editStr=yt,p.copyStr=vt,p.copiedStr=gt,p.expandStr=bt;const ht=ye(_e,["prefixCls","editable","copyable","ellipsis","mark","code","delete","underline","strong","keyboard","onUpdate:content"]),Ne=N.value,wt=Z===1&&Ne,Ye=Z&&Z>1&&Ne;let de=$,St;if(Z&&p.isEllipsis&&!p.expanded&&!Ne){const{title:et}=_e;let ce=et||"";!et&&(typeof $=="string"||typeof $=="number")&&(ce=String($)),ce=ce?.slice(String(p.ellipsisContent||"").length),de=r(ue,null,[Ot(p.ellipsisContent),r("span",{title:ce,"aria-hidden":"true"},[it]),Me])}else de=r(ue,null,[$,Me]);de=ve(t,de);const Ct=We&&Z&&p.isEllipsis&&!p.expanded&&!Ne,xt=a.ellipsisTooltip?a.ellipsisTooltip():We;return r(Lt,{onResize:V,disabled:!Z},{default:()=>[r(W,le({ref:C,class:[{[`${d.value}-${u}`]:u,[`${d.value}-disabled`]:F,[`${d.value}-ellipsis`]:Z,[`${d.value}-single-line`]:Z===1&&!p.isEllipsis,[`${d.value}-ellipsis-single-line`]:wt,[`${d.value}-ellipsis-multiple-line`]:Ye},ge],style:k(k({},te),{WebkitLineClamp:Ye?Z:void 0}),"aria-label":St,direction:c.value,onClick:E.indexOf("text")!==-1?y:()=>{}},ht),{default:()=>[Ct?r(Je,{title:We===!0?$:xt},{default:()=>[r("span",null,[de])]}):de,$e()]})]})}},null)}}});var bn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const hn=()=>ye(k(k({},Ie()),{ellipsis:{type:Boolean,default:void 0}}),["component"]),De=(t,s)=>{let{slots:a,attrs:l}=s;const i=k(k({},t),l),{ellipsis:d,rel:c}=i,p=bn(i,["ellipsis","rel"]),C=k(k({},p),{rel:c===void 0&&p.target==="_blank"?"noopener noreferrer":c,ellipsis:!!d,component:"a"});return delete C.navigate,r(Te,C,a)};De.displayName="ATypographyLink";De.inheritAttrs=!1;De.props=hn();const wn=()=>ye(Ie(),["component"]),Oe=(t,s)=>{let{slots:a,attrs:l}=s;const i=k(k(k({},t),{component:"div"}),l);return r(Te,i,a)};Oe.displayName="ATypographyParagraph";Oe.inheritAttrs=!1;Oe.props=wn();const Sn=()=>k(k({},ye(Ie(),["component"])),{ellipsis:{type:[Boolean,Object],default:void 0}}),Ae=(t,s)=>{let{slots:a,attrs:l}=s;const{ellipsis:i}=t,d=k(k(k({},t),{ellipsis:i&&typeof i=="object"?ye(i,["expandable","rows"]):i,component:"span"}),l);return r(Te,d,a)};Ae.displayName="ATypographyText";Ae.inheritAttrs=!1;Ae.props=Sn();var Cn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const xn=_t(1,2,3,4,5),kn=()=>k(k({},ye(Ie(),["component","strong"])),{level:Number}),Re=(t,s)=>{let{slots:a,attrs:l}=s;const{level:i=1}=t,d=Cn(t,["level"]);let c;xn.includes(i)?c=`h${i}`:c="h1";const p=k(k(k({},d),{component:c}),l);return r(Te,p,a)};Re.displayName="ATypographyTitle";Re.inheritAttrs=!1;Re.props=kn();W.Text=Ae;W.Title=Re;W.Paragraph=Oe;W.Link=De;W.Base=Te;W.install=function(t){return t.component(W.name,W),t.component(W.Text.displayName,Ae),t.component(W.Title.displayName,Re),t.component(W.Paragraph.displayName,Oe),t.component(W.Link.displayName,De),t};const En=12e3;function In(t){if(t&&t.ok===!1)throw new Error(t.error||"mtc.envelope.get handler failed");return t?.result??t}function Tn(){const t=ke(),{isEmbedded:s}=Ee(),a=K({phase:"idle"});async function l(d,c){if(!d||!c){a.value={phase:"error",message:"communityId / messageId 必填"};return}if(!s){a.value={phase:"error",message:"此功能仅在嵌入式 web-shell 中可用"};return}a.value={phase:"loading"};try{const p=await t.sendRaw({type:"mtc.envelope.get",communityId:d,messageId:c},En),C=In(p);if(!C||C.success!==!0){a.value={phase:"not-found",reason:C?.error};return}a.value={phase:"found",result:{origin:C.origin||"local",envelope:C.envelope||{},landmark:C.landmark??null,treeHeadId:C.treeHeadId||"",namespace:C.namespace,batchId:C.batchId,leafIndex:C.leafIndex,staging:C.staging}}}catch(p){a.value={phase:"error",message:p?.message||String(p)}}}function i(){a.value={phase:"idle"}}return{state:a,fetch:l,reset:i,isEmbedded:s}}const Pe=6e4;function ze(t){if(t&&t.ok===!1)throw new Error(t.error||"archive handler failed");return t?.result??t}function Dn(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K(null),i=K(!1),d=K(""),c=K(null);function p(g){return d.value=g?.message||String(g),null}async function C(g,y){if(d.value="",!g)return p(new Error("communityId 必填"));i.value=!0;try{const I=await t.sendRaw({type:"mtc.archive.list",communityId:g,providerSpec:y},Pe),b=ze(I);return!b||b.success!==!0?p(new Error(b?.error||"列出归档失败")):(a.value=Array.isArray(b.archives)?b.archives:[],a.value)}catch(I){return p(I)}finally{i.value=!1}}async function M(g,y,I={}){if(d.value="",!g)return p(new Error("communityId 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.archive.push",communityId:g,providerSpec:y,packOpts:I},Pe),h=ze(b);return!h||h.success!==!0?p(new Error(h?.error||"归档推送失败")):(l.value=h.result,h.result)}catch(b){return p(b)}finally{i.value=!1}}async function w(g,y,I){if(d.value="",!g||!y)return p(new Error("communityId + archiveName 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.archive.restore",communityId:g,archiveName:y,providerSpec:I},Pe),h=ze(b);return!h||h.success!==!0?p(new Error(h?.error||"归档恢复失败")):(l.value=h.result,h.result)}catch(b){return p(b)}finally{i.value=!1}}async function f(){d.value="";try{const g=await t.sendRaw({type:"mtc.archive.has-stored-webdav-credentials"},Pe),y=ze(g);return!y||y.success!==!0?(c.value=!1,!1):(c.value=!!y.hasCredentials,c.value)}catch(g){return c.value=!1,p(g)}}return{archives:a,lastResult:l,loading:i,errorMessage:d,isEmbedded:s,hasStoredWebdavCredentials:c,listArchives:C,pushArchive:M,restoreArchive:w,checkStoredWebdavCredentials:f}}const fe=12e3;function me(t){if(t&&t.ok===!1)throw new Error(t.error||"governance-mofn handler failed");return t?.result??t}function st(t){if(typeof Buffer<"u"&&Buffer.isBuffer(t))return t.toString("base64");if(t instanceof Uint8Array){let s="";for(let a=0;a<t.length;a++)s+=String.fromCharCode(t[a]);return globalThis.btoa(s)}if(typeof t=="string")return t;throw new TypeError("signerKeys.{secretKey,publicKey} must be Buffer / Uint8Array / base64 string")}function On(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K(null),i=K(!1),d=K("");function c(y){return d.value=y?.message||String(y),null}async function p(y){if(d.value="",!y)return c(new Error("communityId 必填"));i.value=!0;try{const I=await t.sendRaw({type:"mtc.governance-mofn.list",communityId:y},fe),b=me(I);return!b||b.success!==!0?c(new Error(b?.error||"提案列表读取失败")):(a.value=Array.isArray(b.proposals)?b.proposals:[],a.value)}catch(I){return c(I)}finally{i.value=!1}}async function C({communityId:y,proposalId:I,payload:b,members:h,threshold:A}){d.value="",i.value=!0;try{const T=await t.sendRaw({type:"mtc.governance-mofn.create",communityId:y,proposalId:I,payload:b,members:h,threshold:A},fe),D=me(T);return!D||D.success!==!0?c(new Error(D?.error||"创建提案失败")):D.proposal}catch(T){return c(T)}finally{i.value=!1}}async function M(y,I,b){if(d.value="",!b||!b.did)return c(new Error("signerKeys 必须含 did/secretKey/publicKey"));i.value=!0;try{const h={did:b.did,secretKey:st(b.secretKey),publicKey:st(b.publicKey)},A=await t.sendRaw({type:"mtc.governance-mofn.sign",communityId:y,proposalId:I,signerKeys:h},fe),T=me(A);return!T||T.success!==!0?c(new Error(T?.error||"签名提交失败")):(l.value=T.status,T.status)}catch(h){return c(h)}finally{i.value=!1}}async function w(y,I){if(d.value="",!y||!I)return c(new Error("communityId + proposalId 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.sign-as-self",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"代签失败")):(l.value=h.status,{...h.status,signerDID:h.signerDID})}catch(b){return c(b)}finally{i.value=!1}}async function f(y,I){d.value="",i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.status",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"状态读取失败")):(l.value=h.status,h.status)}catch(b){return c(b)}finally{i.value=!1}}async function g(y,I){d.value="",i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.finalize",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"提案 finalize 失败")):h.result}catch(b){return c(b)}finally{i.value=!1}}return{proposals:a,currentStatus:l,loading:i,errorMessage:d,isEmbedded:s,listProposals:p,createProposal:C,addSignature:M,signAsSelf:w,getStatus:f,finalize:g}}const Ue=8e3;function Ke(t){if(t&&t.ok===!1)throw new Error(t.error||"cross-fed-trust handler failed");return t?.result??t}function An(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K([]),i=K(!1),d=K("");function c(f){return d.value=f?.message||String(f),null}async function p(f){if(d.value="",!f)return c(new Error("localCommunityId 必填"));i.value=!0;try{const g=await t.sendRaw({type:"mtc.cross-fed-trust.list",localCommunityId:f},Ue),y=Ke(g);return!y||y.success!==!0?c(new Error(y?.error||"信任列表读取失败")):(a.value=Array.isArray(y.records)?y.records:[],a.value)}catch(g){return c(g)}finally{i.value=!1}}async function C({localCommunityId:f,remoteCommunityId:g,remoteMembers:y,expiresAt:I,note:b}){d.value="",i.value=!0;try{const h=await t.sendRaw({type:"mtc.cross-fed-trust.establish",localCommunityId:f,remoteCommunityId:g,remoteMembers:y,expiresAt:I||void 0,note:b||void 0},Ue),A=Ke(h);return!A||A.success!==!0?c(new Error(A?.error||"建立信任失败")):A.record}catch(h){return c(h)}finally{i.value=!1}}async function M(f,g){d.value="",i.value=!0;try{const y=await t.sendRaw({type:"mtc.cross-fed-trust.revoke",localCommunityId:f,remoteCommunityId:g},Ue),I=Ke(y);return!I||I.success!==!0?c(new Error(I?.error||"撤销信任失败")):I.removed}catch(y){return c(y)}finally{i.value=!1}}async function w(f){if(d.value="",!f)return c(new Error("localCommunityId 必填"));i.value=!0;try{const g=await t.sendRaw({type:"mtc.cross-fed-trust.get-trusted-dids",localCommunityId:f},Ue),y=Ke(g);return!y||y.success!==!0?c(new Error(y?.error||"DID 列表读取失败")):(l.value=Array.isArray(y.dids)?y.dids:[],l.value)}catch(g){return c(g)}finally{i.value=!1}}return{records:a,trustedDids:l,loading:i,errorMessage:d,isEmbedded:s,listTrust:p,establishTrust:C,revokeTrust:M,getTrustedDids:w}}const Qe=6e4;function Ge(t){if(t&&t.ok===!1)throw new Error(t.error||"auto-archive handler failed");return t?.result??t}function Rn(){const t=ke(),{isEmbedded:s}=Ee(),a=K(null),l=K(null),i=K(!1),d=K("");function c(w){return d.value=w?.message||String(w),null}async function p(){d.value="",i.value=!0;try{const w=await t.sendRaw({type:"mtc.auto-archive.config-get"},Qe),f=Ge(w);return!f||f.success!==!0?c(new Error(f?.error||"config-get failed")):(a.value=f.config,f.config)}catch(w){return c(w)}finally{i.value=!1}}async function C(w){if(d.value="",!w||typeof w!="object")return c(new Error("patch 必须是对象"));i.value=!0;try{const f=await t.sendRaw({type:"mtc.auto-archive.config-set",patch:w},Qe),g=Ge(f);return!g||g.success!==!0?c(new Error(g?.error||"config-set failed")):(a.value=g.config,g.config)}catch(f){return c(f)}finally{i.value=!1}}async function M(){d.value="",i.value=!0;try{const w=await t.sendRaw({type:"mtc.auto-archive.run-now"},Qe*5),f=Ge(w);return!f||f.success!==!0?c(new Error(f?.error||"run-now failed")):(l.value=f.result,await p(),f.result)}catch(w){return c(w)}finally{i.value=!1}}return{config:a,lastRunResult:l,loading:i,errorMessage:d,isEmbedded:s,getConfig:p,setConfig:C,runNow:M}}const $n={class:"mtc-audit-page"},_n={style:{"margin-top":"16px"}},Mn={key:0,style:{"margin-top":"8px"}},Nn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Bn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Pn={style:{"font-size":"12px","max-height":"200px",overflow:"auto"}},zn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Un={key:1},Kn={style:{"font-size":"12px","max-height":"200px",overflow:"auto"}},He=36e5,Hn={__name:"MtcAudit",setup(t){const s=Tn(),a=Dn(),l=On(),i=An(),d=Rn(),c=K("envelope"),p=se({communityId:"",messageId:""});async function C(){await s.fetch(p.communityId,p.messageId)}const M=K(!1);function w(m){navigator.clipboard&&(navigator.clipboard.writeText(JSON.stringify(m,null,2)),X.success("已复制到剪贴板"))}const f=se({communityId:"",providerKind:"filesystem",rootDir:"",useStoredCredentials:!0,url:"",username:"",password:"",remotePath:"",sinceBatchId:"",archiveName:""});async function g(){a.isEmbedded&&await a.checkStoredWebdavCredentials()}xe(g);const y=we(()=>f.providerKind==="filesystem"?{kind:"filesystem",rootDir:f.rootDir}:f.providerKind==="webdav"?f.useStoredCredentials?{kind:"webdav",useStoredCredentials:!0}:{kind:"webdav",url:f.url,username:f.username,password:f.password,remotePath:f.remotePath}:null);async function I(){await a.listArchives(f.communityId,y.value)}async function b(){const m={};f.sinceBatchId&&(m.sinceBatchId=f.sinceBatchId);const n=await a.pushArchive(f.communityId,y.value,m);n&&X.success(`归档已推送:${n.name} (${n.bytes} bytes)`)}async function h(){const m=await a.restoreArchive(f.communityId,f.archiveName,y.value);m&&X.success(`恢复完成:${m.restored} 新文件 / ${m.skipped} 跳过`)}const A=se({communityId:"",proposalId:"",payload:'{ "kind": "rule_change", "body": "" }',members:"",threshold:2});async function T(){await l.listProposals(A.communityId)}async function D(){let m;try{m=JSON.parse(A.payload)}catch(F){X.error("payload 必须是合法 JSON: "+F.message);return}const n=A.members.split(/\s+/).map(F=>F.trim()).filter(Boolean),u=await l.createProposal({communityId:A.communityId,proposalId:A.proposalId,payload:m,members:n,threshold:A.threshold});u&&(X.success(`提案已创建:${u.proposalId} (${u.threshold}-of-${u.members.length})`),await T())}async function H(m){const n=await l.finalize(A.communityId,m);n&&(X.success(`提案已 finalize: ${n.treeHeadId.slice(0,24)}...`),await T())}async function U(m){await l.getStatus(A.communityId,m)}async function V(m){const n=await l.signAsSelf(A.communityId,m);n&&(X.success(`已用本人身份 (${(n.signerDID||"").slice(-8)}) 代签 — 已收集 ${n.collected}/${n.threshold}`),await T())}const N=se({localCommunityId:"",remoteCommunityId:"",remoteMembers:"",expiresAt:"",note:""});async function G(){await i.listTrust(N.localCommunityId)}async function ve(){const m=N.remoteMembers.split(/\s+/).map(u=>u.trim()).filter(Boolean);await i.establishTrust({localCommunityId:N.localCommunityId,remoteCommunityId:N.remoteCommunityId,remoteMembers:m,expiresAt:N.expiresAt,note:N.note})&&(X.success(`信任已建立: ${N.localCommunityId} ↔ ${N.remoteCommunityId}`),await G())}async function ee(m){Ft.confirm({title:"确认撤销跨联邦信任?",content:`${N.localCommunityId} → ${m} 将不再被 inbound landmark 校验接受`,onOk:async()=>{await i.revokeTrust(N.localCommunityId,m)&&(X.success("已撤销"),await G())}})}async function oe(){await i.getTrustedDids(N.localCommunityId)}const x=se({enabled:!1,intervalHours:24,providerKind:"webdav",rootDir:"",useStoredCredentials:!0,url:"",username:"",password:"",remotePath:"",communityIdsRaw:""});function je(){const m=Number(x.intervalHours);return Number.isFinite(m)&&m>=5/60?Math.round(m*He):He*24}function $e(){return x.providerKind==="filesystem"?{kind:"filesystem",rootDir:x.rootDir}:x.useStoredCredentials?{kind:"webdav",useStoredCredentials:!0}:{kind:"webdav",url:x.url,username:x.username,password:x.password,remotePath:x.remotePath}}async function v(){const m=await d.getConfig();m&&(x.enabled=!!m.enabled,x.intervalHours=Math.round((m.intervalMs||He*24)/He),m.providerSpec&&(x.providerKind=m.providerSpec.kind,m.providerSpec.kind==="filesystem"?x.rootDir=m.providerSpec.rootDir||"":m.providerSpec.kind==="webdav"&&(x.useStoredCredentials=!!m.providerSpec.useStoredCredentials,m.providerSpec.useStoredCredentials||(x.url=m.providerSpec.url||"",x.username=m.providerSpec.username||"",x.remotePath=m.providerSpec.remotePath||""))),x.communityIdsRaw=(m.communityIds||[]).join(`
|
|
17
|
-
`))}async function E(){const m=x.communityIdsRaw.split(/\s+/).map(u=>u.trim()).filter(Boolean);await d.setConfig({enabled:x.enabled,intervalMs:je(),providerSpec:$e(),communityIds:m})&&X.success(x.enabled?"已保存并启动定时归档":"已保存(定时归档关闭)")}async function $(){const m=await d.runNow();if(m)if(m.status==="ok")X.success(`归档完成:${m.summary?.totalArchives||0} 包 / ${m.summary?.totalBytes||0} bytes`);else if(m.status==="partial"){const n=Object.entries(m.summary?.perCommunity||{}).filter(([,u])=>!u.ok).length;X.warning(`部分成功:${m.summary?.totalArchives||0} 包成功,${n} 个 community 失败`)}else X.error(`归档失败:${m.error||"未知错误"}`)}return xe(async()=>{d.isEmbedded&&await v()}),(m,n)=>(
|
|
18
|
-
did:chainlesschain:def`},null,8,["value"])]),_:1}),r(e(O),{label:"threshold"},{default:o(()=>[r(e(lt),{value:
|
|
19
|
-
comm-B`},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{type:"primary",loading:e(d).loading.value,disabled:!e(d).isEmbedded,onClick:E},{default:o(()=>[...n[68]||(n[68]=[S(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{loading:e(d).loading.value,disabled:!e(d).isEmbedded,onClick:$},{default:o(()=>[...n[69]||(n[69]=[S(" 立即归档一次 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{disabled:!e(d).isEmbedded,onClick:v},{default:o(()=>[...n[70]||(n[70]=[S("刷新",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),e(d).errorMessage.value?(
|
|
16
|
+
`]:k(k({},pt(t)),{marginInlineStart:t.marginXXS})}),Zt(t)),Yt(t)),en()),{"&-rtl":{direction:"rtl"}})}},ft=At("Typography",t=>[tn(t)],{sizeMarginHeadingVerticalStart:"1.2em",sizeMarginHeadingVerticalEnd:"0.5em"}),nn=()=>({prefixCls:String,value:String,maxlength:Number,autoSize:{type:[Boolean,Object]},onSave:Function,onCancel:Function,onEnd:Function,onChange:Function,originContent:String,direction:String,component:String}),rn=Le({compatConfig:{MODE:3},name:"Editable",inheritAttrs:!1,props:nn(),setup(t,s){let{emit:a,slots:l,attrs:i}=s;const{prefixCls:d}=Et(t),c=se({current:t.value||"",lastKeyCode:void 0,inComposition:!1,cancelFlag:!1});Ze(()=>t.value,T=>{c.current=T});const p=K();xe(()=>{var T;if(p.value){const D=(T=p.value)===null||T===void 0?void 0:T.resizableTextArea,H=D?.textArea;H.focus();const{length:U}=H.value;H.setSelectionRange(U,U)}});function C(T){p.value=T}function N(T){let{target:{value:D}}=T;c.current=D.replace(/[\r\n]/g,""),a("change",c.current)}function w(){c.inComposition=!0}function f(){c.inComposition=!1}function g(T){const{keyCode:D}=T;D===Ce.ENTER&&T.preventDefault(),!c.inComposition&&(c.lastKeyCode=D)}function y(T){const{keyCode:D,ctrlKey:H,altKey:U,metaKey:V,shiftKey:M}=T;c.lastKeyCode===D&&!c.inComposition&&!H&&!U&&!V&&!M&&(D===Ce.ENTER?(b(),a("end")):D===Ce.ESC&&(c.current=t.originContent,a("cancel")))}function I(){b()}function b(){a("save",c.current.trim())}const[h,R]=ft(d);return()=>{const T=ut({[`${d.value}`]:!0,[`${d.value}-edit-content`]:!0,[`${d.value}-rtl`]:t.direction==="rtl",[t.component?`${d.value}-${t.component}`:""]:!0},i.class,R.value);return h(r("div",le(le({},i),{},{class:T}),[r(Se,{ref:C,maxlength:t.maxlength,value:c.current,onChange:N,onKeydown:g,onKeyup:y,onCompositionstart:w,onCompositionend:f,onBlur:I,rows:1,autoSize:t.autoSize===void 0||t.autoSize},null),l.enterIcon?l.enterIcon({className:`${t.prefixCls}-edit-content-confirm`}):r(Bt,{class:`${t.prefixCls}-edit-content-confirm`},null)]))}}}),ln=3,on=8;let J;const qe={padding:0,margin:0,display:"inline",lineHeight:"inherit"};function mt(t,s){t.setAttribute("aria-hidden","true");const a=window.getComputedStyle(s),l=Ht(a);t.setAttribute("style",l),t.style.position="fixed",t.style.left="0",t.style.height="auto",t.style.minHeight="auto",t.style.maxHeight="auto",t.style.paddingTop="0",t.style.paddingBottom="0",t.style.borderTopWidth="0",t.style.borderBottomWidth="0",t.style.top="-999999px",t.style.zIndex="-1000",t.style.textOverflow="clip",t.style.whiteSpace="normal",t.style.webkitLineClamp="none"}function an(t){const s=document.createElement("div");mt(s,t),s.appendChild(document.createTextNode("text")),document.body.appendChild(s);const a=s.getBoundingClientRect().height;return document.body.removeChild(s),a}const sn=((t,s,a,l,i)=>{J||(J=document.createElement("div"),J.setAttribute("aria-hidden","true"),document.body.appendChild(J));const{rows:d,suffix:c=""}=s,p=an(t),C=Math.round(p*d*100)/100;mt(J,t);const N=It({render(){return r("div",{style:qe},[r("span",{style:qe},[a,c]),r("span",{style:qe},[l])])}});N.mount(J);function w(){return Math.round(J.getBoundingClientRect().height*100)/100-.1<=C}if(w())return N.unmount(),{content:a,text:J.innerHTML,ellipsis:!1};const f=Array.prototype.slice.apply(J.childNodes[0].childNodes[0].cloneNode(!0).childNodes).filter(D=>{let{nodeType:H,data:U}=D;return H!==on&&U!==""}),g=Array.prototype.slice.apply(J.childNodes[0].childNodes[1].cloneNode(!0).childNodes);N.unmount();const y=[];J.innerHTML="";const I=document.createElement("span");J.appendChild(I);const b=document.createTextNode(i+c);I.appendChild(b),g.forEach(D=>{J.appendChild(D)});function h(D){I.insertBefore(D,b)}function R(D,H){let U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,V=arguments.length>3&&arguments[3]!==void 0?arguments[3]:H.length,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;const G=Math.floor((U+V)/2),ve=H.slice(0,G);if(D.textContent=ve,U>=V-1)for(let ee=V;ee>=U;ee-=1){const oe=H.slice(0,ee);if(D.textContent=oe,w()||!oe)return ee===H.length?{finished:!1,vNode:H}:{finished:!0,vNode:oe}}return w()?R(D,H,G,V,G):R(D,H,U,G,M)}function T(D){if(D.nodeType===ln){const U=D.textContent||"",V=document.createTextNode(U);return h(V),R(V,U)}return{finished:!1,vNode:null}}return f.some(D=>{const{finished:H,vNode:U}=T(D);return U&&y.push(U),H}),{content:y,text:J.innerHTML,ellipsis:!0}});var un=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const dn=()=>({prefixCls:String,direction:String,component:String}),W=Le({name:"ATypography",inheritAttrs:!1,props:dn(),setup(t,s){let{slots:a,attrs:l}=s;const{prefixCls:i,direction:d}=dt("typography",t),[c,p]=ft(i);return()=>{var C;const N=k(k({},t),l),{prefixCls:w,direction:f,component:g="article"}=N,y=un(N,["prefixCls","direction","component"]);return c(r(g,le(le({},y),{},{class:ut(i.value,{[`${i.value}-rtl`]:d.value==="rtl"},l.class,p.value)}),{default:()=>[(C=a.default)===null||C===void 0?void 0:C.call(a)]}))}}}),cn=()=>{const t=document.getSelection();if(!t.rangeCount)return function(){};let s=document.activeElement;const a=[];for(let l=0;l<t.rangeCount;l++)a.push(t.getRangeAt(l));switch(s.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":s.blur();break;default:s=null;break}return t.removeAllRanges(),function(){t.type==="Caret"&&t.removeAllRanges(),t.rangeCount||a.forEach(function(l){t.addRange(l)}),s&&s.focus()}},at={"text/plain":"Text","text/html":"Url",default:"Text"},pn="Copy to clipboard: #{key}, Enter";function fn(t){const s=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return t.replace(/#{\s*key\s*}/g,s)}function mn(t,s){let a,l,i,d,c,p=!1;s||(s={});const C=s.debug||!1;try{if(l=cn(),i=document.createRange(),d=document.getSelection(),c=document.createElement("span"),c.textContent=t,c.style.all="unset",c.style.position="fixed",c.style.top=0,c.style.clip="rect(0, 0, 0, 0)",c.style.whiteSpace="pre",c.style.webkitUserSelect="text",c.style.MozUserSelect="text",c.style.msUserSelect="text",c.style.userSelect="text",c.addEventListener("copy",function(w){if(w.stopPropagation(),s.format)if(w.preventDefault(),typeof w.clipboardData>"u"){C&&console.warn("unable to use e.clipboardData"),C&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();const f=at[s.format]||at.default;window.clipboardData.setData(f,t)}else w.clipboardData.clearData(),w.clipboardData.setData(s.format,t);s.onCopy&&(w.preventDefault(),s.onCopy(w.clipboardData))}),document.body.appendChild(c),i.selectNodeContents(c),d.addRange(i),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");p=!0}catch(N){C&&console.error("unable to copy using execCommand: ",N),C&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(s.format||"text",t),s.onCopy&&s.onCopy(window.clipboardData),p=!0}catch(w){C&&console.error("unable to copy using clipboardData: ",w),C&&console.error("falling back to prompt"),a=fn("message"in s?s.message:pn),window.prompt(a,t)}}finally{d&&(typeof d.removeRange=="function"?d.removeRange(i):d.removeAllRanges()),c&&document.body.removeChild(c),l()}return p}var yn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const vn=ct("webkitLineClamp"),gn=ct("textOverflow"),it="...",Ie=()=>({editable:{type:[Boolean,Object],default:void 0},copyable:{type:[Boolean,Object],default:void 0},prefixCls:String,component:String,type:String,disabled:{type:Boolean,default:void 0},ellipsis:{type:[Boolean,Object],default:void 0},code:{type:Boolean,default:void 0},mark:{type:Boolean,default:void 0},underline:{type:Boolean,default:void 0},delete:{type:Boolean,default:void 0},strong:{type:Boolean,default:void 0},keyboard:{type:Boolean,default:void 0},content:String,"onUpdate:content":Function}),Te=Le({compatConfig:{MODE:3},name:"TypographyBase",inheritAttrs:!1,props:Ie(),setup(t,s){let{slots:a,attrs:l,emit:i}=s;const{prefixCls:d,direction:c}=dt("typography",t),p=se({copied:!1,ellipsisText:"",ellipsisContent:null,isEllipsis:!1,expanded:!1,clientRendered:!1,expandStr:"",copyStr:"",copiedStr:"",editStr:"",copyId:void 0,rafId:void 0,prevProps:void 0,originContent:""}),C=K(),N=K(),w=we(()=>{const v=t.ellipsis;return v?k({rows:1,expandable:!1},typeof v=="object"?v:null):{}});xe(()=>{p.clientRendered=!0,G()}),Tt(()=>{clearTimeout(p.copyId),Ve.cancel(p.rafId)}),Ze([()=>w.value.rows,()=>t.content],()=>{tt(()=>{V()})},{flush:"post",deep:!0}),Dt(()=>{t.content===void 0&&(nt(!t.editable),nt(!t.ellipsis))});function f(){var v;return t.ellipsis||t.editable?t.content:(v=Fe(C.value))===null||v===void 0?void 0:v.innerText}function g(v){const{onExpand:E}=w.value;p.expanded=!0,E?.(v)}function y(v){v.preventDefault(),p.originContent=t.content,U(!0)}function I(v){b(v),U(!1)}function b(v){const{onChange:E}=T.value;v!==t.content&&(i("update:content",v),E?.(v))}function h(){var v,E;(E=(v=T.value).onCancel)===null||E===void 0||E.call(v),U(!1)}function R(v){v.preventDefault(),v.stopPropagation();const{copyable:E}=t,$=k({},typeof E=="object"?E:null);$.text===void 0&&($.text=f()),mn($.text||""),p.copied=!0,tt(()=>{$.onCopy&&$.onCopy(v),p.copyId=setTimeout(()=>{p.copied=!1},3e3)})}const T=we(()=>{const v=t.editable;return v?k({},typeof v=="object"?v:null):{editing:!1}}),[D,H]=jt(!1,{value:we(()=>T.value.editing)});function U(v){const{onStart:E}=T.value;v&&E&&E(),H(v)}Ze(D,v=>{var E;v||(E=N.value)===null||E===void 0||E.focus()},{flush:"post"});function V(v){if(v){const{width:E,height:$}=v;if(!E||!$)return}Ve.cancel(p.rafId),p.rafId=Ve(()=>{G()})}const M=we(()=>{const{rows:v,expandable:E,suffix:$,onEllipsis:m,tooltip:n}=w.value;return $||n||t.editable||t.copyable||E||m?!1:v===1?gn:vn}),G=()=>{const{ellipsisText:v,isEllipsis:E}=p,{rows:$,suffix:m,onEllipsis:n}=w.value;if(!$||$<0||!Fe(C.value)||p.expanded||t.content===void 0||M.value)return;const{content:u,text:F,ellipsis:ae}=sn(Fe(C.value),{rows:$,suffix:m},t.content,$e(!0),it);(v!==F||p.isEllipsis!==ae)&&(p.ellipsisText=F,p.ellipsisContent=u,p.isEllipsis=ae,E!==ae&&n&&n(ae))};function ve(v,E){let{mark:$,code:m,underline:n,delete:u,strong:F,keyboard:ae}=v,ge=E;function te(_e,Z){if(!_e)return;const Ne=(function(){return ge})();ge=r(Z,null,{default:()=>[Ne]})}return te(F,"strong"),te(n,"u"),te(u,"del"),te(m,"code"),te($,"mark"),te(ae,"kbd"),ge}function ee(v){const{expandable:E,symbol:$}=w.value;if(!E||!v&&(p.expanded||!p.isEllipsis))return null;const m=(a.ellipsisSymbol?a.ellipsisSymbol():$)||p.expandStr;return r("a",{key:"expand",class:`${d.value}-expand`,onClick:g,"aria-label":p.expandStr},[m])}function oe(){if(!t.editable)return;const{tooltip:v,triggerType:E=["icon"]}=t.editable,$=a.editableIcon?a.editableIcon():r(Pt,{role:"button"},null),m=a.editableTooltip?a.editableTooltip():p.editStr,n=typeof m=="string"?m:"";return E.indexOf("icon")!==-1?r(Je,{key:"edit",title:v===!1?"":m},{default:()=>[r(ot,{ref:N,class:`${d.value}-edit`,onClick:y,"aria-label":n},{default:()=>[$]})]}):null}function x(){if(!t.copyable)return;const{tooltip:v}=t.copyable,E=p.copied?p.copiedStr:p.copyStr,$=a.copyableTooltip?a.copyableTooltip({copied:p.copied}):E,m=typeof $=="string"?$:"",n=p.copied?r(zt,null,null):r(Ut,null,null),u=a.copyableIcon?a.copyableIcon({copied:!!p.copied}):n;return r(Je,{key:"copy",title:v===!1?"":$},{default:()=>[r(ot,{class:[`${d.value}-copy`,{[`${d.value}-copy-success`]:p.copied}],onClick:R,"aria-label":m},{default:()=>[u]})]})}function je(){const{class:v,style:E}=l,{maxlength:$,autoSize:m,onEnd:n}=T.value;return r(rn,{class:v,style:E,prefixCls:d.value,value:t.content,originContent:p.originContent,maxlength:$,autoSize:m,onSave:I,onChange:b,onCancel:h,onEnd:n,direction:c.value,component:t.component},{enterIcon:a.editableEnterIcon})}function $e(v){return[ee(v),oe(),x()].filter(E=>E)}return()=>{var v;const{triggerType:E=["icon"]}=T.value,$=t.ellipsis||t.editable?t.content!==void 0?t.content:(v=a.default)===null||v===void 0?void 0:v.call(a):a.default?a.default():t.content;return D.value?je():r($t,{componentName:"Text",children:m=>{const n=k(k({},t),l),{type:u,disabled:F,content:ae,class:ge,style:te}=n,_e=yn(n,["type","disabled","content","class","style"]),{rows:Z,suffix:Ne,tooltip:We}=w.value,{edit:yt,copy:vt,copied:gt,expand:bt}=m;p.editStr=yt,p.copyStr=vt,p.copiedStr=gt,p.expandStr=bt;const ht=ye(_e,["prefixCls","editable","copyable","ellipsis","mark","code","delete","underline","strong","keyboard","onUpdate:content"]),Me=M.value,wt=Z===1&&Me,Ye=Z&&Z>1&&Me;let de=$,St;if(Z&&p.isEllipsis&&!p.expanded&&!Me){const{title:et}=_e;let ce=et||"";!et&&(typeof $=="string"||typeof $=="number")&&(ce=String($)),ce=ce?.slice(String(p.ellipsisContent||"").length),de=r(ue,null,[Ot(p.ellipsisContent),r("span",{title:ce,"aria-hidden":"true"},[it]),Ne])}else de=r(ue,null,[$,Ne]);de=ve(t,de);const Ct=We&&Z&&p.isEllipsis&&!p.expanded&&!Me,xt=a.ellipsisTooltip?a.ellipsisTooltip():We;return r(Lt,{onResize:V,disabled:!Z},{default:()=>[r(W,le({ref:C,class:[{[`${d.value}-${u}`]:u,[`${d.value}-disabled`]:F,[`${d.value}-ellipsis`]:Z,[`${d.value}-single-line`]:Z===1&&!p.isEllipsis,[`${d.value}-ellipsis-single-line`]:wt,[`${d.value}-ellipsis-multiple-line`]:Ye},ge],style:k(k({},te),{WebkitLineClamp:Ye?Z:void 0}),"aria-label":St,direction:c.value,onClick:E.indexOf("text")!==-1?y:()=>{}},ht),{default:()=>[Ct?r(Je,{title:We===!0?$:xt},{default:()=>[r("span",null,[de])]}):de,$e()]})]})}},null)}}});var bn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const hn=()=>ye(k(k({},Ie()),{ellipsis:{type:Boolean,default:void 0}}),["component"]),De=(t,s)=>{let{slots:a,attrs:l}=s;const i=k(k({},t),l),{ellipsis:d,rel:c}=i,p=bn(i,["ellipsis","rel"]),C=k(k({},p),{rel:c===void 0&&p.target==="_blank"?"noopener noreferrer":c,ellipsis:!!d,component:"a"});return delete C.navigate,r(Te,C,a)};De.displayName="ATypographyLink";De.inheritAttrs=!1;De.props=hn();const wn=()=>ye(Ie(),["component"]),Oe=(t,s)=>{let{slots:a,attrs:l}=s;const i=k(k(k({},t),{component:"div"}),l);return r(Te,i,a)};Oe.displayName="ATypographyParagraph";Oe.inheritAttrs=!1;Oe.props=wn();const Sn=()=>k(k({},ye(Ie(),["component"])),{ellipsis:{type:[Boolean,Object],default:void 0}}),Re=(t,s)=>{let{slots:a,attrs:l}=s;const{ellipsis:i}=t,d=k(k(k({},t),{ellipsis:i&&typeof i=="object"?ye(i,["expandable","rows"]):i,component:"span"}),l);return r(Te,d,a)};Re.displayName="ATypographyText";Re.inheritAttrs=!1;Re.props=Sn();var Cn=function(t,s){var a={};for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&s.indexOf(l)<0&&(a[l]=t[l]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,l=Object.getOwnPropertySymbols(t);i<l.length;i++)s.indexOf(l[i])<0&&Object.prototype.propertyIsEnumerable.call(t,l[i])&&(a[l[i]]=t[l[i]]);return a};const xn=_t(1,2,3,4,5),kn=()=>k(k({},ye(Ie(),["component","strong"])),{level:Number}),Ae=(t,s)=>{let{slots:a,attrs:l}=s;const{level:i=1}=t,d=Cn(t,["level"]);let c;xn.includes(i)?c=`h${i}`:c="h1";const p=k(k(k({},d),{component:c}),l);return r(Te,p,a)};Ae.displayName="ATypographyTitle";Ae.inheritAttrs=!1;Ae.props=kn();W.Text=Re;W.Title=Ae;W.Paragraph=Oe;W.Link=De;W.Base=Te;W.install=function(t){return t.component(W.name,W),t.component(W.Text.displayName,Re),t.component(W.Title.displayName,Ae),t.component(W.Paragraph.displayName,Oe),t.component(W.Link.displayName,De),t};const En=12e3;function In(t){if(t&&t.ok===!1)throw new Error(t.error||"mtc.envelope.get handler failed");return t?.result??t}function Tn(){const t=ke(),{isEmbedded:s}=Ee(),a=K({phase:"idle"});async function l(d,c){if(!d||!c){a.value={phase:"error",message:"communityId / messageId 必填"};return}if(!s){a.value={phase:"error",message:"此功能仅在嵌入式 web-shell 中可用"};return}a.value={phase:"loading"};try{const p=await t.sendRaw({type:"mtc.envelope.get",communityId:d,messageId:c},En),C=In(p);if(!C||C.success!==!0){a.value={phase:"not-found",reason:C?.error};return}a.value={phase:"found",result:{origin:C.origin||"local",envelope:C.envelope||{},landmark:C.landmark??null,treeHeadId:C.treeHeadId||"",namespace:C.namespace,batchId:C.batchId,leafIndex:C.leafIndex,staging:C.staging}}}catch(p){a.value={phase:"error",message:p?.message||String(p)}}}function i(){a.value={phase:"idle"}}return{state:a,fetch:l,reset:i,isEmbedded:s}}const Pe=6e4;function ze(t){if(t&&t.ok===!1)throw new Error(t.error||"archive handler failed");return t?.result??t}function Dn(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K(null),i=K(!1),d=K(""),c=K(null);function p(g){return d.value=g?.message||String(g),null}async function C(g,y){if(d.value="",!g)return p(new Error("communityId 必填"));i.value=!0;try{const I=await t.sendRaw({type:"mtc.archive.list",communityId:g,providerSpec:y},Pe),b=ze(I);return!b||b.success!==!0?p(new Error(b?.error||"列出归档失败")):(a.value=Array.isArray(b.archives)?b.archives:[],a.value)}catch(I){return p(I)}finally{i.value=!1}}async function N(g,y,I={}){if(d.value="",!g)return p(new Error("communityId 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.archive.push",communityId:g,providerSpec:y,packOpts:I},Pe),h=ze(b);return!h||h.success!==!0?p(new Error(h?.error||"归档推送失败")):(l.value=h.result,h.result)}catch(b){return p(b)}finally{i.value=!1}}async function w(g,y,I){if(d.value="",!g||!y)return p(new Error("communityId + archiveName 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.archive.restore",communityId:g,archiveName:y,providerSpec:I},Pe),h=ze(b);return!h||h.success!==!0?p(new Error(h?.error||"归档恢复失败")):(l.value=h.result,h.result)}catch(b){return p(b)}finally{i.value=!1}}async function f(){d.value="";try{const g=await t.sendRaw({type:"mtc.archive.has-stored-webdav-credentials"},Pe),y=ze(g);return!y||y.success!==!0?(c.value=!1,!1):(c.value=!!y.hasCredentials,c.value)}catch(g){return c.value=!1,p(g)}}return{archives:a,lastResult:l,loading:i,errorMessage:d,isEmbedded:s,hasStoredWebdavCredentials:c,listArchives:C,pushArchive:N,restoreArchive:w,checkStoredWebdavCredentials:f}}const fe=12e3;function me(t){if(t&&t.ok===!1)throw new Error(t.error||"governance-mofn handler failed");return t?.result??t}function st(t){if(typeof Buffer<"u"&&Buffer.isBuffer(t))return t.toString("base64");if(t instanceof Uint8Array){let s="";for(let a=0;a<t.length;a++)s+=String.fromCharCode(t[a]);return globalThis.btoa(s)}if(typeof t=="string")return t;throw new TypeError("signerKeys.{secretKey,publicKey} must be Buffer / Uint8Array / base64 string")}function On(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K(null),i=K(!1),d=K("");function c(y){return d.value=y?.message||String(y),null}async function p(y){if(d.value="",!y)return c(new Error("communityId 必填"));i.value=!0;try{const I=await t.sendRaw({type:"mtc.governance-mofn.list",communityId:y},fe),b=me(I);return!b||b.success!==!0?c(new Error(b?.error||"提案列表读取失败")):(a.value=Array.isArray(b.proposals)?b.proposals:[],a.value)}catch(I){return c(I)}finally{i.value=!1}}async function C({communityId:y,proposalId:I,payload:b,members:h,threshold:R}){d.value="",i.value=!0;try{const T=await t.sendRaw({type:"mtc.governance-mofn.create",communityId:y,proposalId:I,payload:b,members:h,threshold:R},fe),D=me(T);return!D||D.success!==!0?c(new Error(D?.error||"创建提案失败")):D.proposal}catch(T){return c(T)}finally{i.value=!1}}async function N(y,I,b){if(d.value="",!b||!b.did)return c(new Error("signerKeys 必须含 did/secretKey/publicKey"));i.value=!0;try{const h={did:b.did,secretKey:st(b.secretKey),publicKey:st(b.publicKey)},R=await t.sendRaw({type:"mtc.governance-mofn.sign",communityId:y,proposalId:I,signerKeys:h},fe),T=me(R);return!T||T.success!==!0?c(new Error(T?.error||"签名提交失败")):(l.value=T.status,T.status)}catch(h){return c(h)}finally{i.value=!1}}async function w(y,I){if(d.value="",!y||!I)return c(new Error("communityId + proposalId 必填"));i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.sign-as-self",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"代签失败")):(l.value=h.status,{...h.status,signerDID:h.signerDID})}catch(b){return c(b)}finally{i.value=!1}}async function f(y,I){d.value="",i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.status",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"状态读取失败")):(l.value=h.status,h.status)}catch(b){return c(b)}finally{i.value=!1}}async function g(y,I){d.value="",i.value=!0;try{const b=await t.sendRaw({type:"mtc.governance-mofn.finalize",communityId:y,proposalId:I},fe),h=me(b);return!h||h.success!==!0?c(new Error(h?.error||"提案 finalize 失败")):h.result}catch(b){return c(b)}finally{i.value=!1}}return{proposals:a,currentStatus:l,loading:i,errorMessage:d,isEmbedded:s,listProposals:p,createProposal:C,addSignature:N,signAsSelf:w,getStatus:f,finalize:g}}const Ue=8e3;function Ke(t){if(t&&t.ok===!1)throw new Error(t.error||"cross-fed-trust handler failed");return t?.result??t}function Rn(){const t=ke(),{isEmbedded:s}=Ee(),a=K([]),l=K([]),i=K(!1),d=K("");function c(f){return d.value=f?.message||String(f),null}async function p(f){if(d.value="",!f)return c(new Error("localCommunityId 必填"));i.value=!0;try{const g=await t.sendRaw({type:"mtc.cross-fed-trust.list",localCommunityId:f},Ue),y=Ke(g);return!y||y.success!==!0?c(new Error(y?.error||"信任列表读取失败")):(a.value=Array.isArray(y.records)?y.records:[],a.value)}catch(g){return c(g)}finally{i.value=!1}}async function C({localCommunityId:f,remoteCommunityId:g,remoteMembers:y,expiresAt:I,note:b}){d.value="",i.value=!0;try{const h=await t.sendRaw({type:"mtc.cross-fed-trust.establish",localCommunityId:f,remoteCommunityId:g,remoteMembers:y,expiresAt:I||void 0,note:b||void 0},Ue),R=Ke(h);return!R||R.success!==!0?c(new Error(R?.error||"建立信任失败")):R.record}catch(h){return c(h)}finally{i.value=!1}}async function N(f,g){d.value="",i.value=!0;try{const y=await t.sendRaw({type:"mtc.cross-fed-trust.revoke",localCommunityId:f,remoteCommunityId:g},Ue),I=Ke(y);return!I||I.success!==!0?c(new Error(I?.error||"撤销信任失败")):I.removed}catch(y){return c(y)}finally{i.value=!1}}async function w(f){if(d.value="",!f)return c(new Error("localCommunityId 必填"));i.value=!0;try{const g=await t.sendRaw({type:"mtc.cross-fed-trust.get-trusted-dids",localCommunityId:f},Ue),y=Ke(g);return!y||y.success!==!0?c(new Error(y?.error||"DID 列表读取失败")):(l.value=Array.isArray(y.dids)?y.dids:[],l.value)}catch(g){return c(g)}finally{i.value=!1}}return{records:a,trustedDids:l,loading:i,errorMessage:d,isEmbedded:s,listTrust:p,establishTrust:C,revokeTrust:N,getTrustedDids:w}}const Qe=6e4;function Ge(t){if(t&&t.ok===!1)throw new Error(t.error||"auto-archive handler failed");return t?.result??t}function An(){const t=ke(),{isEmbedded:s}=Ee(),a=K(null),l=K(null),i=K(!1),d=K("");function c(w){return d.value=w?.message||String(w),null}async function p(){d.value="",i.value=!0;try{const w=await t.sendRaw({type:"mtc.auto-archive.config-get"},Qe),f=Ge(w);return!f||f.success!==!0?c(new Error(f?.error||"config-get failed")):(a.value=f.config,f.config)}catch(w){return c(w)}finally{i.value=!1}}async function C(w){if(d.value="",!w||typeof w!="object")return c(new Error("patch 必须是对象"));i.value=!0;try{const f=await t.sendRaw({type:"mtc.auto-archive.config-set",patch:w},Qe),g=Ge(f);return!g||g.success!==!0?c(new Error(g?.error||"config-set failed")):(a.value=g.config,g.config)}catch(f){return c(f)}finally{i.value=!1}}async function N(){d.value="",i.value=!0;try{const w=await t.sendRaw({type:"mtc.auto-archive.run-now"},Qe*5),f=Ge(w);return!f||f.success!==!0?c(new Error(f?.error||"run-now failed")):(l.value=f.result,await p(),f.result)}catch(w){return c(w)}finally{i.value=!1}}return{config:a,lastRunResult:l,loading:i,errorMessage:d,isEmbedded:s,getConfig:p,setConfig:C,runNow:N}}const $n={class:"mtc-audit-page"},_n={style:{"margin-top":"16px"}},Nn={key:0,style:{"margin-top":"8px"}},Mn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Bn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Pn={style:{"font-size":"12px","max-height":"200px",overflow:"auto"}},zn={style:{"font-size":"12px","max-height":"240px",overflow:"auto"}},Un={key:1},Kn={style:{"font-size":"12px","max-height":"200px",overflow:"auto"}},He=36e5,Hn={__name:"MtcAudit",setup(t){const s=Tn(),a=Dn(),l=On(),i=Rn(),d=An(),c=K("envelope"),p=se({communityId:"",messageId:""});async function C(){await s.fetch(p.communityId,p.messageId)}const N=K(!1);function w(m){navigator.clipboard&&(navigator.clipboard.writeText(JSON.stringify(m,null,2)),X.success("已复制到剪贴板"))}const f=se({communityId:"",providerKind:"filesystem",rootDir:"",useStoredCredentials:!0,url:"",username:"",password:"",remotePath:"",sinceBatchId:"",archiveName:""});async function g(){a.isEmbedded&&await a.checkStoredWebdavCredentials()}xe(g);const y=we(()=>f.providerKind==="filesystem"?{kind:"filesystem",rootDir:f.rootDir}:f.providerKind==="webdav"?f.useStoredCredentials?{kind:"webdav",useStoredCredentials:!0}:{kind:"webdav",url:f.url,username:f.username,password:f.password,remotePath:f.remotePath}:null);async function I(){await a.listArchives(f.communityId,y.value)}async function b(){const m={};f.sinceBatchId&&(m.sinceBatchId=f.sinceBatchId);const n=await a.pushArchive(f.communityId,y.value,m);n&&X.success(`归档已推送:${n.name} (${n.bytes} bytes)`)}async function h(){const m=await a.restoreArchive(f.communityId,f.archiveName,y.value);m&&X.success(`恢复完成:${m.restored} 新文件 / ${m.skipped} 跳过`)}const R=se({communityId:"",proposalId:"",payload:'{ "kind": "rule_change", "body": "" }',members:"",threshold:2});async function T(){await l.listProposals(R.communityId)}async function D(){let m;try{m=JSON.parse(R.payload)}catch(F){X.error("payload 必须是合法 JSON: "+F.message);return}const n=R.members.split(/\s+/).map(F=>F.trim()).filter(Boolean),u=await l.createProposal({communityId:R.communityId,proposalId:R.proposalId,payload:m,members:n,threshold:R.threshold});u&&(X.success(`提案已创建:${u.proposalId} (${u.threshold}-of-${u.members.length})`),await T())}async function H(m){const n=await l.finalize(R.communityId,m);n&&(X.success(`提案已 finalize: ${n.treeHeadId.slice(0,24)}...`),await T())}async function U(m){await l.getStatus(R.communityId,m)}async function V(m){const n=await l.signAsSelf(R.communityId,m);n&&(X.success(`已用本人身份 (${(n.signerDID||"").slice(-8)}) 代签 — 已收集 ${n.collected}/${n.threshold}`),await T())}const M=se({localCommunityId:"",remoteCommunityId:"",remoteMembers:"",expiresAt:"",note:""});async function G(){await i.listTrust(M.localCommunityId)}async function ve(){const m=M.remoteMembers.split(/\s+/).map(u=>u.trim()).filter(Boolean);await i.establishTrust({localCommunityId:M.localCommunityId,remoteCommunityId:M.remoteCommunityId,remoteMembers:m,expiresAt:M.expiresAt,note:M.note})&&(X.success(`信任已建立: ${M.localCommunityId} ↔ ${M.remoteCommunityId}`),await G())}async function ee(m){Ft.confirm({title:"确认撤销跨联邦信任?",content:`${M.localCommunityId} → ${m} 将不再被 inbound landmark 校验接受`,onOk:async()=>{await i.revokeTrust(M.localCommunityId,m)&&(X.success("已撤销"),await G())}})}async function oe(){await i.getTrustedDids(M.localCommunityId)}const x=se({enabled:!1,intervalHours:24,providerKind:"webdav",rootDir:"",useStoredCredentials:!0,url:"",username:"",password:"",remotePath:"",communityIdsRaw:""});function je(){const m=Number(x.intervalHours);return Number.isFinite(m)&&m>=5/60?Math.round(m*He):He*24}function $e(){return x.providerKind==="filesystem"?{kind:"filesystem",rootDir:x.rootDir}:x.useStoredCredentials?{kind:"webdav",useStoredCredentials:!0}:{kind:"webdav",url:x.url,username:x.username,password:x.password,remotePath:x.remotePath}}async function v(){const m=await d.getConfig();m&&(x.enabled=!!m.enabled,x.intervalHours=Math.round((m.intervalMs||He*24)/He),m.providerSpec&&(x.providerKind=m.providerSpec.kind,m.providerSpec.kind==="filesystem"?x.rootDir=m.providerSpec.rootDir||"":m.providerSpec.kind==="webdav"&&(x.useStoredCredentials=!!m.providerSpec.useStoredCredentials,m.providerSpec.useStoredCredentials||(x.url=m.providerSpec.url||"",x.username=m.providerSpec.username||"",x.remotePath=m.providerSpec.remotePath||""))),x.communityIdsRaw=(m.communityIds||[]).join(`
|
|
17
|
+
`))}async function E(){const m=x.communityIdsRaw.split(/\s+/).map(u=>u.trim()).filter(Boolean);await d.setConfig({enabled:x.enabled,intervalMs:je(),providerSpec:$e(),communityIds:m})&&X.success(x.enabled?"已保存并启动定时归档":"已保存(定时归档关闭)")}async function $(){const m=await d.runNow();if(m)if(m.status==="ok")X.success(`归档完成:${m.summary?.totalArchives||0} 包 / ${m.summary?.totalBytes||0} bytes`);else if(m.status==="partial"){const n=Object.entries(m.summary?.perCommunity||{}).filter(([,u])=>!u.ok).length;X.warning(`部分成功:${m.summary?.totalArchives||0} 包成功,${n} 个 community 失败`)}else X.error(`归档失败:${m.error||"未知错误"}`)}return xe(async()=>{d.isEmbedded&&await v()}),(m,n)=>(A(),ne("div",$n,[r(e(W).Title,{level:3},{default:o(()=>[...n[38]||(n[38]=[S("🔐 MTC 审计套件 (B4)",-1)])]),_:1}),r(e(W).Paragraph,{type:"secondary"},{default:o(()=>[...n[39]||(n[39]=[S(" Merkle envelope 查询 / 外部归档 / M-of-N 治理 / 跨联邦信任锚 — 全套对外暴露。 默认壳走 WS topic ",-1),j("code",null,"mtc.*",-1),S(",主进程未托管对应 manager 时按钮会返回错误信息。 ",-1)])]),_:1}),e(s).isEmbedded?P("",!0):(A(),B(e(q),{key:0,type:"warning","show-icon":"",message:"非嵌入式 web-shell",description:"此页所有功能依赖桌面主进程的 channelEventBatcher / channelEnvelopeArchiver / governanceMultiSig / crossFedTrust 实例 — 请用桌面 Web Shell 访问,纯浏览器模式下按钮会一律失败。",style:{"margin-bottom":"16px"}})),r(e(Wt),{"active-key":c.value,"onUpdate:activeKey":n[37]||(n[37]=u=>c.value=u)},{default:o(()=>[r(e(be),{key:"envelope",tab:"Envelope 查询"},{default:o(()=>[r(e(he),{layout:"inline",onSubmit:Rt(C,["prevent"])},{default:o(()=>[r(e(O),{label:"communityId"},{default:o(()=>[r(e(L),{value:p.communityId,"onUpdate:value":n[0]||(n[0]=u=>p.communityId=u),placeholder:"comm-X","allow-clear":""},null,8,["value"])]),_:1}),r(e(O),{label:"messageId"},{default:o(()=>[r(e(L),{value:p.messageId,"onUpdate:value":n[1]||(n[1]=u=>p.messageId=u),placeholder:"msg-X","allow-clear":""},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(z),{type:"primary","html-type":"submit",loading:e(s).state.value.phase==="loading",disabled:!e(s).isEmbedded},{default:o(()=>[...n[40]||(n[40]=[S(" 查询 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),j("div",_n,[e(s).state.value.phase==="error"?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(s).state.value.message},null,8,["message"])):e(s).state.value.phase==="not-found"?(A(),B(e(q),{key:1,type:"warning","show-icon":"",message:"未找到密码学证据",description:e(s).state.value.reason||"消息可能尚未被打包到 Merkle 批,或发送方未在线。"},null,8,["description"])):e(s).state.value.phase==="found"?(A(),ne(ue,{key:2},[r(e(rt),{bordered:"",column:1,size:"small"},{default:o(()=>[r(e(Y),{label:"来源"},{default:o(()=>[r(e(re),{color:e(s).state.value.result.origin==="local"?"green":"blue"},{default:o(()=>[S(_(e(s).state.value.result.origin==="local"?"本机批次":"远端拉取"),1)]),_:1},8,["color"]),e(s).state.value.result.staging?(A(),B(e(re),{key:0,color:"orange"},{default:o(()=>[...n[41]||(n[41]=[S("尚未关闭批次",-1)])]),_:1})):P("",!0)]),_:1}),r(e(Y),{label:"Tree Head ID"},{default:o(()=>[j("code",null,_(e(s).state.value.result.treeHeadId),1)]),_:1}),e(s).state.value.result.batchId?(A(),B(e(Y),{key:0,label:"Batch ID"},{default:o(()=>[S(_(e(s).state.value.result.batchId),1)]),_:1})):P("",!0),e(s).state.value.result.namespace?(A(),B(e(Y),{key:1,label:"Namespace"},{default:o(()=>[j("code",null,_(e(s).state.value.result.namespace),1)]),_:1})):P("",!0),e(s).state.value.result.leafIndex!==void 0?(A(),B(e(Y),{key:2,label:"Leaf Index"},{default:o(()=>[S(_(e(s).state.value.result.leafIndex),1)]),_:1})):P("",!0)]),_:1}),r(e(z),{type:"link",size:"small",style:{"padding-left":"0","margin-top":"8px"},onClick:n[2]||(n[2]=u=>N.value=!N.value)},{default:o(()=>[S(_(N.value?"收起":"展开")+" raw JSON ",1)]),_:1}),N.value?(A(),ne("div",Nn,[r(e(ie),{size:"small"},{title:o(()=>[r(e(Q),null,{default:o(()=>[n[43]||(n[43]=j("span",null,"Envelope",-1)),r(e(z),{size:"small",onClick:n[3]||(n[3]=u=>w(e(s).state.value.result.envelope))},{default:o(()=>[...n[42]||(n[42]=[S("复制",-1)])]),_:1})]),_:1})]),default:o(()=>[j("pre",Mn,_(JSON.stringify(e(s).state.value.result.envelope,null,2)),1)]),_:1}),e(s).state.value.result.landmark?(A(),B(e(ie),{key:0,size:"small",style:{"margin-top":"8px"}},{title:o(()=>[r(e(Q),null,{default:o(()=>[n[45]||(n[45]=j("span",null,"Landmark",-1)),r(e(z),{size:"small",onClick:n[4]||(n[4]=u=>w(e(s).state.value.result.landmark))},{default:o(()=>[...n[44]||(n[44]=[S("复制",-1)])]),_:1})]),_:1})]),default:o(()=>[j("pre",Bn,_(JSON.stringify(e(s).state.value.result.landmark,null,2)),1)]),_:1})):P("",!0)])):P("",!0)],64)):P("",!0)])]),_:1}),r(e(be),{key:"archive",tab:"Archive 归档"},{default:o(()=>[r(e(he),{layout:"vertical"},{default:o(()=>[r(e(O),{label:"communityId",required:""},{default:o(()=>[r(e(L),{value:f.communityId,"onUpdate:value":n[5]||(n[5]=u=>f.communityId=u),placeholder:"comm-X"},null,8,["value"])]),_:1}),r(e(O),{label:"provider 类型"},{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{type:f.providerKind==="filesystem"?"primary":"default",onClick:n[6]||(n[6]=u=>f.providerKind="filesystem")},{default:o(()=>[...n[46]||(n[46]=[S(" Filesystem ",-1)])]),_:1},8,["type"]),r(e(z),{type:f.providerKind==="webdav"?"primary":"default",onClick:n[7]||(n[7]=u=>f.providerKind="webdav")},{default:o(()=>[...n[47]||(n[47]=[S(" WebDAV ",-1)])]),_:1},8,["type"])]),_:1})]),_:1}),f.providerKind==="filesystem"?(A(),B(e(O),{key:0,label:"rootDir 本地路径",required:""},{default:o(()=>[r(e(L),{value:f.rootDir,"onUpdate:value":n[8]||(n[8]=u=>f.rootDir=u),placeholder:"/path/to/archive-mirror"},null,8,["value"])]),_:1})):(A(),ne(ue,{key:1},[r(e(O),{label:"使用已保存的 WebDAV 凭据"},{default:o(()=>[r(e(Q),{direction:"vertical",style:{width:"100%"}},{default:o(()=>[r(e(Xe),{checked:f.useStoredCredentials,"onUpdate:checked":n[9]||(n[9]=u=>f.useStoredCredentials=u),disabled:e(a).hasStoredWebdavCredentials.value===!1,"checked-children":"使用 Settings 中已保存的 WebDAV 配置","un-checked-children":"本次手输(仍只在 main 进程暂存,不写盘)"},null,8,["checked","disabled"]),f.useStoredCredentials&&e(a).hasStoredWebdavCredentials.value===!0?(A(),B(e(q),{key:0,type:"success","show-icon":"",message:"已找到 Settings → 同步 → WebDAV 中保存的凭据,主进程会从 secure-config.enc(safeStorage / AES-256-GCM 加密)解密后构造 WebDAVClient — 渲染端不接触明文密码。"})):f.useStoredCredentials&&e(a).hasStoredWebdavCredentials.value===!1?(A(),B(e(q),{key:1,type:"warning","show-icon":"",message:"尚未保存 WebDAV 凭据,请先在 Settings → 同步 → WebDAV 中配置一次,然后再回来推送归档。"})):P("",!0)]),_:1})]),_:1}),f.useStoredCredentials?P("",!0):(A(),ne(ue,{key:0},[r(e(O),{label:"url"},{default:o(()=>[r(e(L),{value:f.url,"onUpdate:value":n[10]||(n[10]=u=>f.url=u),placeholder:"https://nas.example/dav"},null,8,["value"])]),_:1}),r(e(O),{label:"username"},{default:o(()=>[r(e(L),{value:f.username,"onUpdate:value":n[11]||(n[11]=u=>f.username=u)},null,8,["value"])]),_:1}),r(e(O),{label:"password"},{default:o(()=>[r(e(L),{value:f.password,"onUpdate:value":n[12]||(n[12]=u=>f.password=u),type:"password"},null,8,["value"])]),_:1}),r(e(O),{label:"remotePath"},{default:o(()=>[r(e(L),{value:f.remotePath,"onUpdate:value":n[13]||(n[13]=u=>f.remotePath=u),placeholder:"/cc-archives"},null,8,["value"])]),_:1})],64))],64)),r(e(O),{label:"(可选) sinceBatchId 增量推"},{default:o(()=>[r(e(L),{value:f.sinceBatchId,"onUpdate:value":n[14]||(n[14]=u=>f.sinceBatchId=u),placeholder:"000005"},null,8,["value"])]),_:1}),r(e(O),{label:"(restore 用) archiveName"},{default:o(()=>[r(e(L),{value:f.archiveName,"onUpdate:value":n[15]||(n[15]=u=>f.archiveName=u),placeholder:"channel-mtc-...zip"},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{loading:e(a).loading.value,onClick:I},{default:o(()=>[...n[48]||(n[48]=[S("列出归档",-1)])]),_:1},8,["loading"]),r(e(z),{type:"primary",loading:e(a).loading.value,disabled:!e(a).isEmbedded,onClick:b},{default:o(()=>[...n[49]||(n[49]=[S(" 推送 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{loading:e(a).loading.value,disabled:!e(a).isEmbedded,onClick:h},{default:o(()=>[...n[50]||(n[50]=[S(" 恢复 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1}),e(a).errorMessage.value?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(a).errorMessage.value},null,8,["message"])):P("",!0),e(a).archives.value.length?(A(),B(e(Be),{key:1,size:"small",bordered:"","data-source":e(a).archives.value,style:{"margin-top":"12px"}},{header:o(()=>[j("span",null,"provider 现有归档("+_(e(a).archives.value.length)+")",1)]),renderItem:o(({item:u})=>[r(e(pe),null,{default:o(()=>[j("code",null,_(u),1),r(e(z),{size:"small",type:"link",onClick:F=>f.archiveName=u},{default:o(()=>[...n[51]||(n[51]=[S("填入恢复",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["data-source"])):P("",!0),e(a).lastResult.value?(A(),B(e(ie),{key:2,size:"small",style:{"margin-top":"12px"}},{title:o(()=>[...n[52]||(n[52]=[S("最近一次操作",-1)])]),default:o(()=>[j("pre",Pn,_(JSON.stringify(e(a).lastResult.value,null,2)),1)]),_:1})):P("",!0)]),_:1}),r(e(be),{key:"mofn",tab:"Governance M-of-N"},{default:o(()=>[r(e(he),{layout:"vertical"},{default:o(()=>[r(e(O),{label:"communityId",required:""},{default:o(()=>[r(e(L),{value:R.communityId,"onUpdate:value":n[16]||(n[16]=u=>R.communityId=u),placeholder:"comm-X"},null,8,["value"])]),_:1}),r(e(O),{label:"proposalId",required:""},{default:o(()=>[r(e(L),{value:R.proposalId,"onUpdate:value":n[17]||(n[17]=u=>R.proposalId=u),placeholder:"prop-rule-1"},null,8,["value"])]),_:1}),r(e(O),{label:"payload (JSON)"},{default:o(()=>[r(e(Se),{value:R.payload,"onUpdate:value":n[18]||(n[18]=u=>R.payload=u),rows:3},null,8,["value"])]),_:1}),r(e(O),{label:"members(DID 列表,空白分隔)"},{default:o(()=>[r(e(Se),{value:R.members,"onUpdate:value":n[19]||(n[19]=u=>R.members=u),rows:3,placeholder:`did:chainlesschain:abc
|
|
18
|
+
did:chainlesschain:def`},null,8,["value"])]),_:1}),r(e(O),{label:"threshold"},{default:o(()=>[r(e(lt),{value:R.threshold,"onUpdate:value":n[20]||(n[20]=u=>R.threshold=u),min:1,max:100},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{loading:e(l).loading.value,onClick:T},{default:o(()=>[...n[53]||(n[53]=[S("刷新提案列表",-1)])]),_:1},8,["loading"]),r(e(z),{type:"primary",loading:e(l).loading.value,disabled:!e(l).isEmbedded,onClick:D},{default:o(()=>[...n[54]||(n[54]=[S(" 创建提案 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1}),e(l).errorMessage.value?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(l).errorMessage.value,style:{margin:"12px 0"}},null,8,["message"])):P("",!0),r(e(q),{type:"success","show-icon":"",message:"签名收集 v2 — 主进程代签",description:"点击提案行的「代我签名」按钮:renderer 只发 (communityId, proposalId),桌面主进程从 DIDManager 取本人当前身份,在主进程内完成 Ed25519 签名后写入 staging/。私钥永不离开主进程。",style:{"margin-bottom":"12px"}}),e(l).proposals.value.length?(A(),B(e(Be),{key:1,size:"small",bordered:"","data-source":e(l).proposals.value},{header:o(()=>[j("span",null,"提案列表("+_(e(l).proposals.value.length)+")",1)]),renderItem:o(({item:u})=>[r(e(pe),null,{default:o(()=>[r(e(pe).Meta,null,{title:o(()=>[r(e(Q),null,{default:o(()=>[j("code",null,_(u.proposalId),1),r(e(re),{color:u.finalized?"green":"blue"},{default:o(()=>[S(_(u.finalized?"已最终化":`${u.collected}/${u.threshold} 收集中`),1)]),_:2},1032,["color"])]),_:2},1024)]),description:o(()=>[S(" members="+_(u.members.length)+" · created "+_(u.createdAt),1)]),_:2},1024),r(e(Q),null,{default:o(()=>[r(e(z),{size:"small",loading:e(l).loading.value,onClick:F=>U(u.proposalId)},{default:o(()=>[...n[55]||(n[55]=[S("详情",-1)])]),_:1},8,["loading","onClick"]),r(e(z),{size:"small",disabled:u.finalized||!e(l).isEmbedded,loading:e(l).loading.value,onClick:F=>V(u.proposalId)},{default:o(()=>[...n[56]||(n[56]=[S(" 代我签名 ",-1)])]),_:1},8,["disabled","loading","onClick"]),r(e(z),{size:"small",type:"primary",disabled:u.finalized||u.collected<u.threshold||!e(l).isEmbedded,loading:e(l).loading.value,onClick:F=>H(u.proposalId)},{default:o(()=>[...n[57]||(n[57]=[S(" Finalize ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])):P("",!0),e(l).currentStatus.value?(A(),B(e(ie),{key:2,size:"small",style:{"margin-top":"12px"}},{title:o(()=>[...n[58]||(n[58]=[S("当前提案状态",-1)])]),default:o(()=>[j("pre",zn,_(JSON.stringify(e(l).currentStatus.value,null,2)),1)]),_:1})):P("",!0)]),_:1}),r(e(be),{key:"trust",tab:"Cross-Fed Trust"},{default:o(()=>[r(e(he),{layout:"vertical"},{default:o(()=>[r(e(O),{label:"localCommunityId",required:""},{default:o(()=>[r(e(L),{value:M.localCommunityId,"onUpdate:value":n[21]||(n[21]=u=>M.localCommunityId=u),placeholder:"comm-engineering"},null,8,["value"])]),_:1}),r(e(O),{label:"remoteCommunityId"},{default:o(()=>[r(e(L),{value:M.remoteCommunityId,"onUpdate:value":n[22]||(n[22]=u=>M.remoteCommunityId=u),placeholder:"comm-research"},null,8,["value"])]),_:1}),r(e(O),{label:"remoteMembers(DID 列表,空白分隔)"},{default:o(()=>[r(e(Se),{value:M.remoteMembers,"onUpdate:value":n[23]||(n[23]=u=>M.remoteMembers=u),rows:3},null,8,["value"])]),_:1}),r(e(O),{label:"expiresAt(ISO 时间,留空表示永久)"},{default:o(()=>[r(e(L),{value:M.expiresAt,"onUpdate:value":n[24]||(n[24]=u=>M.expiresAt=u),placeholder:"2099-01-01T00:00:00Z"},null,8,["value"])]),_:1}),r(e(O),{label:"note (可选)"},{default:o(()=>[r(e(L),{value:M.note,"onUpdate:value":n[25]||(n[25]=u=>M.note=u)},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{loading:e(i).loading.value,onClick:G},{default:o(()=>[...n[59]||(n[59]=[S("刷新",-1)])]),_:1},8,["loading"]),r(e(z),{type:"primary",loading:e(i).loading.value,disabled:!e(i).isEmbedded,onClick:ve},{default:o(()=>[...n[60]||(n[60]=[S(" 建立信任 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{loading:e(i).loading.value,onClick:oe},{default:o(()=>[...n[61]||(n[61]=[S("查看合并 DID 集",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),e(i).errorMessage.value?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(i).errorMessage.value},null,8,["message"])):P("",!0),e(i).records.value.length?(A(),B(e(Be),{key:1,size:"small",bordered:"","data-source":e(i).records.value,style:{"margin-top":"12px"}},{header:o(()=>[j("span",null,"已建立信任("+_(e(i).records.value.length)+")",1)]),renderItem:o(({item:u})=>[r(e(pe),null,{default:o(()=>[r(e(pe).Meta,null,{title:o(()=>[r(e(Q),null,{default:o(()=>[j("code",null,_(u.remoteCommunityId),1),r(e(re),{color:"blue"},{default:o(()=>[S(_(u.remoteMembers.length)+" 成员",1)]),_:2},1024),u.expiresAt?(A(),B(e(re),{key:0,color:"orange"},{default:o(()=>[S("expires "+_(u.expiresAt),1)]),_:2},1024)):(A(),B(e(re),{key:1,color:"green"},{default:o(()=>[...n[62]||(n[62]=[S("永久",-1)])]),_:1}))]),_:2},1024)]),description:o(()=>[S(_(u.note||"(无备注)")+" · issued "+_(u.issuedAt),1)]),_:2},1024),r(e(z),{size:"small",danger:"",disabled:!e(i).isEmbedded,onClick:F=>ee(u.remoteCommunityId)},{default:o(()=>[...n[63]||(n[63]=[S(" 撤销 ",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]),_:1},8,["data-source"])):P("",!0),e(i).trustedDids.value.length?(A(),B(e(ie),{key:2,size:"small",style:{"margin-top":"12px"}},{title:o(()=>[S("合并 DID 集("+_(e(i).trustedDids.value.length)+" 个)",1)]),default:o(()=>[r(e(Be),{size:"small","data-source":e(i).trustedDids.value},{renderItem:o(({item:u})=>[r(e(pe),null,{default:o(()=>[j("code",null,_(u),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):P("",!0)]),_:1}),r(e(be),{key:"auto-archive",tab:"Auto Archive 定时归档"},{default:o(()=>[r(e(q),{type:"info","show-icon":"",message:"B4-auto-archive v1 — 主进程内的定时器",description:"开启后桌面主进程会按设定的间隔自动 ChannelEnvelopeArchiver.push 一遍所有目标 community。最小间隔 5 分钟(防误配)。任何归档失败会记入 lastRunStatus='partial',不会中断后续 community 的归档。",style:{"margin-bottom":"16px"}}),r(e(he),{layout:"vertical"},{default:o(()=>[r(e(O),{label:"启用定时归档"},{default:o(()=>[r(e(Xe),{checked:x.enabled,"onUpdate:checked":n[26]||(n[26]=u=>x.enabled=u)},null,8,["checked"])]),_:1}),r(e(O),{label:"归档间隔(小时)"},{default:o(()=>[r(e(lt),{value:x.intervalHours,"onUpdate:value":n[27]||(n[27]=u=>x.intervalHours=u),min:.1,max:168,step:1},null,8,["value"]),r(e(W).Text,{type:"secondary",style:{"margin-left":"8px"}},{default:o(()=>[...n[64]||(n[64]=[S(" ≥ 5 分钟(0.083 小时);常用值:1 / 6 / 24 / 168 ",-1)])]),_:1})]),_:1}),r(e(O),{label:"归档目标 provider"},{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{type:x.providerKind==="filesystem"?"primary":"default",onClick:n[28]||(n[28]=u=>x.providerKind="filesystem")},{default:o(()=>[...n[65]||(n[65]=[S(" Filesystem ",-1)])]),_:1},8,["type"]),r(e(z),{type:x.providerKind==="webdav"?"primary":"default",onClick:n[29]||(n[29]=u=>x.providerKind="webdav")},{default:o(()=>[...n[66]||(n[66]=[S(" WebDAV ",-1)])]),_:1},8,["type"])]),_:1})]),_:1}),x.providerKind==="filesystem"?(A(),B(e(O),{key:0,label:"rootDir 本地路径",required:""},{default:o(()=>[r(e(L),{value:x.rootDir,"onUpdate:value":n[30]||(n[30]=u=>x.rootDir=u),placeholder:"/path/to/archive-mirror"},null,8,["value"])]),_:1})):(A(),ne(ue,{key:1},[r(e(O),{label:"使用已保存的 WebDAV 凭据"},{default:o(()=>[r(e(Xe),{checked:x.useStoredCredentials,"onUpdate:checked":n[31]||(n[31]=u=>x.useStoredCredentials=u)},null,8,["checked"]),r(e(W).Text,{type:"secondary",style:{"margin-left":"8px"}},{default:o(()=>[...n[67]||(n[67]=[S(" 建议 ON — main 进程从 secure-config.enc 解密,密码不写入 cron 配置 ",-1)])]),_:1})]),_:1}),x.useStoredCredentials?P("",!0):(A(),ne(ue,{key:0},[r(e(O),{label:"url"},{default:o(()=>[r(e(L),{value:x.url,"onUpdate:value":n[32]||(n[32]=u=>x.url=u),placeholder:"https://nas.example/dav"},null,8,["value"])]),_:1}),r(e(O),{label:"username"},{default:o(()=>[r(e(L),{value:x.username,"onUpdate:value":n[33]||(n[33]=u=>x.username=u)},null,8,["value"])]),_:1}),r(e(O),{label:"password"},{default:o(()=>[r(e(L),{value:x.password,"onUpdate:value":n[34]||(n[34]=u=>x.password=u),type:"password"},null,8,["value"])]),_:1}),r(e(O),{label:"remotePath"},{default:o(()=>[r(e(L),{value:x.remotePath,"onUpdate:value":n[35]||(n[35]=u=>x.remotePath=u),placeholder:"/cc-archives"},null,8,["value"])]),_:1})],64))],64)),r(e(O),{label:"目标 community(每行一个;留空表示全部已加入的)"},{default:o(()=>[r(e(Se),{value:x.communityIdsRaw,"onUpdate:value":n[36]||(n[36]=u=>x.communityIdsRaw=u),rows:3,placeholder:`comm-A
|
|
19
|
+
comm-B`},null,8,["value"])]),_:1}),r(e(O),null,{default:o(()=>[r(e(Q),null,{default:o(()=>[r(e(z),{type:"primary",loading:e(d).loading.value,disabled:!e(d).isEmbedded,onClick:E},{default:o(()=>[...n[68]||(n[68]=[S(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{loading:e(d).loading.value,disabled:!e(d).isEmbedded,onClick:$},{default:o(()=>[...n[69]||(n[69]=[S(" 立即归档一次 ",-1)])]),_:1},8,["loading","disabled"]),r(e(z),{disabled:!e(d).isEmbedded,onClick:v},{default:o(()=>[...n[70]||(n[70]=[S("刷新",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),e(d).errorMessage.value?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(d).errorMessage.value,style:{"margin-top":"12px"}},null,8,["message"])):P("",!0),e(d).config.value?(A(),B(e(ie),{key:1,size:"small",title:"当前持久化配置 + 上次运行状态",style:{"margin-top":"16px"}},{default:o(()=>[r(e(rt),{column:2,size:"small"},{default:o(()=>[r(e(Y),{label:"enabled"},{default:o(()=>[r(e(re),{color:e(d).config.value.enabled?"green":"default"},{default:o(()=>[S(_(e(d).config.value.enabled?"ON":"OFF"),1)]),_:1},8,["color"])]),_:1}),r(e(Y),{label:"interval"},{default:o(()=>[S(_(Math.round((e(d).config.value.intervalMs||0)/1e3/60))+" 分钟 ",1)]),_:1}),r(e(Y),{label:"providerKind"},{default:o(()=>[S(_(e(d).config.value.providerSpec?.kind||"—"),1)]),_:1}),r(e(Y),{label:"targets"},{default:o(()=>[S(_(e(d).config.value.communityIds.length||"全部"),1)]),_:1}),r(e(Y),{label:"lastRunAt"},{default:o(()=>[S(_(e(d).config.value.lastRunAt?new Date(e(d).config.value.lastRunAt).toLocaleString():"—"),1)]),_:1}),r(e(Y),{label:"lastRunStatus"},{default:o(()=>[e(d).config.value.lastRunStatus?(A(),B(e(re),{key:0,color:e(d).config.value.lastRunStatus==="ok"?"green":e(d).config.value.lastRunStatus==="partial"?"orange":"red"},{default:o(()=>[S(_(e(d).config.value.lastRunStatus),1)]),_:1},8,["color"])):(A(),ne("span",Un,"—"))]),_:1})]),_:1}),e(d).config.value.lastRunError?(A(),B(e(q),{key:0,type:"error","show-icon":"",message:e(d).config.value.lastRunError,style:{"margin-top":"8px"}},null,8,["message"])):P("",!0)]),_:1})):P("",!0),e(d).lastRunResult.value&&e(d).lastRunResult.value.summary?(A(),B(e(ie),{key:2,size:"small",title:"本次手动 run-now 摘要",style:{"margin-top":"12px"}},{default:o(()=>[j("pre",Kn,_(JSON.stringify(e(d).lastRunResult.value.summary,null,2)),1)]),_:1})):P("",!0)]),_:1})]),_:1},8,["active-key"])]))}},il=Nt(Hn,[["__scopeId","data-v-96ccb8cf"]]);export{il as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{w as ve,L as c,Q as g,N as t,M as E,c as a,O as l,P as s,R as m,F as re,Y as be,S as w,K as i,f as P,r as $,o as De,u as j,_ as Ie,a1 as W}from"./vendor-M5lGV-wr.js";import{_ as xe,u as ke,d as v}from"./index-DY5Oc3z6.js";import{u as he}from"./useShellMode-CgR0wCYM.js";import{R as Ae,x as ge,l as Le,aE as Oe,f as ye,d as Pe,c as Ue}from"./icons-NT6gy8Ee.js";import _e from"./index-mqHxeING.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BlaOv91I.js";import"./pickAttrs-DUGKp0ro.js";import"./initDefaultProps-CacwmJft.js";import"./motion-BWrP7Lz6.js";import"./raf-Deuc0E8-.js";import"./index-BWUG9yVI.js";import"./index-Dj8BNg-z.js";import"./isVisible-C7tPsqfj.js";import"./useState-CSzR8F8O.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-Bw5EEKw4.js";import"./createContext-xLJXI46O.js";import"./Compact-DnOD5uMF.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-DgUxvOQt.js";import"./zoom-D-LYfiQh.js";import"./ActionButton-BePEVs4O.js";import"./vnode-B3Pp583L.js";const je={style:{"font-size":"12px"}},Fe={style:{margin:"8px 0 0","max-height":"200px",overflow:"auto","font-size":"11px"}},Ne={style:{"margin-bottom":"16px"}},Ee={style:{"font-size":"12px"}},Je={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Ke={style:{"margin-bottom":"16px"}},Te={__name:"SignProposalModal",props:{open:{type:Boolean,default:!1},proposal:{type:Object,default:null}},emits:["update:open","signed"],setup(Y,{emit:G}){const q=Y,C=G,J=ke(),{isEmbedded:B}=he(),x=$(!1),M=$(null),k=$("ukey"),L=$(""),D=$(!1);async function n(r,d,b,S=15e3){if(B){const U=await J.sendRaw({type:r,...d},S);if(!U?.ok){const T=U?.error;throw new Error(typeof T=="string"?T:T?.message||`${r} failed`)}return U.result}return J.executeJson(b,S)}const y=P(()=>q.proposal?.proposal??{}),R=P(()=>new Set((q.proposal?.signatures??[]).map(r=>r.signerDid))),oe=P(()=>R.value.size),V=P(()=>(y.value?.memberSet??[]).filter(r=>!R.value.has(r.did))),K=P(()=>{const r=y.value?.payloadHash;return!r||typeof r!="string"?"(unavailable)":r.length<=12?r:`${r.slice(0,8)}…${r.slice(-4)}`}),le=P(()=>{const r=y.value?.payload;try{return r?JSON.stringify(r,null,2):y.value?.payloadJcs||"(empty)"}catch{return String(r)}}),Q=P(()=>x.value||!M.value?!1:k.value==="hex"?/^[0-9a-fA-F]{2,}$/.test(L.value.trim()):k.value==="ukey"),X=P(()=>k.value==="ukey"?"签名将通过主进程调用 U-Key 硬件 (Windows) / simulation 驱动 (macOS/Linux)。 请确认 payload hash 与发起方提供的一致。私钥不出硬件边界。":"调试模式:私钥 hex 仅供 CLI / dev 测试。生产环境请使用 U-Key 硬件源。");function O(r){return r?r.length<=28?r:`${r.slice(0,20)}…${r.slice(-8)}`:""}function Z(){M.value=null,k.value="ukey",L.value="",D.value=!1,x.value=!1}ve(()=>q.open,r=>{r&&Z()}),ve(V,r=>{r.length>0&&!M.value&&(M.value=r[0].did)});function se(r){x.value||C("update:open",r)}function ee(){x.value||C("update:open",!1)}async function ne(){if(!Q.value)return;const r=k.value==="hex"?{secretKeyHex:L.value.trim()}:{},d=y.value.memberSet.find(b=>b.did===M.value);x.value=!0;try{const b=await n("multisig.sign",{proposalId:y.value.id,signerDid:M.value,alg:d?.alg??"Ed25519",source:k.value,params:r},k.value==="hex"?`multisig sign ${y.value.id} --signer ${M.value} --key ${r.secretKeyHex} --json`:`multisig sign ${y.value.id} --signer ${M.value} --json`,2e4);if(b.accepted)v.success(b.reachedThreshold?"✓ 签名已接受 — 达到阈值":"✓ 签名已接受"),C("signed",b),C("update:open",!1);else{const S=b.reason||"unknown",U=b.detail?` (${b.detail})`:"";v.error(`签名失败: ${S}${U}`)}}catch(b){v.error(b.message||String(b))}finally{x.value=!1}}return(r,d)=>{const b=i("a-tag"),S=i("a-descriptions-item"),U=i("a-descriptions"),T=i("a-divider"),o=i("a-select-option"),e=i("a-select"),p=i("a-typography-text"),_=i("a-radio"),h=i("a-radio-group"),I=i("a-input-password"),F=i("a-alert"),te=i("a-button"),N=i("a-space"),ie=i("a-modal");return c(),g(ie,{open:Y.open,title:"签名提案",width:600,"mask-closable":!1,keyboard:!1,"destroy-on-close":"","onUpdate:open":se},{footer:t(()=>[a(N,null,{default:t(()=>[a(te,{disabled:x.value,onClick:ee},{default:t(()=>[...d[12]||(d[12]=[l("取消",-1)])]),_:1},8,["disabled"]),a(te,{type:"primary",danger:"",loading:x.value,disabled:!Q.value,onClick:ne},{default:t(()=>[...d[13]||(d[13]=[l("立即签名",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[Y.proposal?(c(),E(re,{key:0},[a(U,{column:1,bordered:"",size:"small"},{default:t(()=>[a(S,{label:"Domain"},{default:t(()=>[a(b,{color:"purple"},{default:t(()=>[l(s(y.value.domain),1)]),_:1})]),_:1}),a(S,{label:"Proposal ID"},{default:t(()=>[m("code",je,s(y.value.id),1)]),_:1}),a(S,{label:"阈值"},{default:t(()=>[l(s(y.value.thresholdM)+"-of-"+s(y.value.memberSet.length),1)]),_:1}),a(S,{label:"已签 / 需签"},{default:t(()=>[l(s(oe.value)+" / "+s(y.value.thresholdM),1)]),_:1}),a(S,{label:"Payload hash"},{default:t(()=>[D.value?(c(),E("code",{key:1,class:"hash-full",style:{cursor:"pointer","font-size":"11px","word-break":"break-all"},onClick:d[1]||(d[1]=z=>D.value=!1)},s(y.value.payloadHash||"(unavailable)"),1)):(c(),E("code",{key:0,class:"hash-short",style:{cursor:"pointer","font-size":"12px"},onClick:d[0]||(d[0]=z=>D.value=!0),title:"点击展开完整 hash"},s(K.value),1))]),_:1}),a(S,{label:"Payload"},{default:t(()=>[m("details",null,[d[5]||(d[5]=m("summary",{style:{cursor:"pointer",color:"var(--text-secondary)"}}," 展开 (JCS) ",-1)),m("pre",Fe,s(le.value),1)])]),_:1})]),_:1}),a(T),m("div",Ne,[d[7]||(d[7]=m("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"签名身份 (DID)",-1)),a(e,{value:M.value,"onUpdate:value":d[2]||(d[2]=z=>M.value=z),style:{width:"100%"},placeholder:"选择签名成员",disabled:x.value},{default:t(()=>[(c(!0),E(re,null,be(V.value,z=>(c(),g(o,{key:z.did,value:z.did},{default:t(()=>[m("code",Ee,s(O(z.did)),1),m("span",Je," ("+s(z.alg)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","disabled"]),V.value.length===0?(c(),g(p,{key:0,type:"warning",style:{"font-size":"12px"}},{default:t(()=>[...d[6]||(d[6]=[l(" 所有成员均已签名 (达阈值) ",-1)])]),_:1})):w("",!0)]),m("div",Ke,[d[11]||(d[11]=m("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"密钥来源",-1)),a(h,{value:k.value,"onUpdate:value":d[3]||(d[3]=z=>k.value=z),disabled:x.value},{default:t(()=>[a(_,{value:"ukey"},{default:t(()=>[...d[8]||(d[8]=[m("strong",null,"U-Key 硬件",-1),m("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 推荐 (PIN 确认 via 主进程) ",-1)])]),_:1}),d[10]||(d[10]=m("br",null,null,-1)),a(_,{value:"hex",style:{"margin-top":"6px"}},{default:t(()=>[...d[9]||(d[9]=[m("strong",null,"软件 hex",-1),m("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 调试用 — 私钥不应在 UI 输入 ",-1)])]),_:1})]),_:1},8,["value","disabled"]),k.value==="hex"?(c(),g(I,{key:0,value:L.value,"onUpdate:value":d[4]||(d[4]=z=>L.value=z),placeholder:"hex (32 bytes = 64 chars Ed25519)",style:{"margin-top":"8px"},disabled:x.value},null,8,["value","disabled"])):w("",!0)]),a(F,{message:"高风险操作",description:X.value,type:"warning","show-icon":"",style:{"margin-bottom":"8px"}},null,8,["description"])],64)):w("",!0)]),_:1},8,["open"])}}},Be=xe(Te,[["__scopeId","data-v-61747175"]]),Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},He={class:"filter-bar"},qe={key:0,style:{"font-size":"12px"}},Ve={style:{margin:"0 0 8px 0"}},Qe={style:{"margin-left":"8px",color:"var(--text-secondary)"}},We={style:{"margin-top":"8px"}},Ye={style:{cursor:"pointer",color:"var(--text-secondary)"}},Ge={key:0},Xe={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Ze={style:{margin:"16px 0 8px 0"}},et={style:{"font-size":"12px"}},tt={__name:"Multisig",setup(Y){const G=ke(),{isEmbedded:q}=he();async function C(o,e,p,_=8e3){if(q){const h=await G.sendRaw({type:o,...e},_);if(!h?.ok){const I=h?.error;throw new Error(typeof I=="string"?I:I?.message||`${o} failed`)}return h.result}return G.executeJson(p,_)}const J=$(!1),B=$([]),x=$([]),M=$("proposals"),k=$(""),L=$(""),D=$(!1),n=$(null),y=$(!1),R=$(null),oe=[{title:"ID",key:"id",width:200},{title:"Domain",dataIndex:"domain",width:220},{title:"状态",key:"state",width:110},{title:"阈值",key:"sigs",width:80},{title:"创建",key:"createdAt",width:140},{title:"过期",key:"expiresAt",width:140},{title:"操作",key:"actions",width:240,fixed:"right"}],V=[{title:"DID",dataIndex:"did"},{title:"Alg",dataIndex:"alg",width:200}],K=P(()=>{const o={pending:0,reached:0,consumed:0,cancelled:0,expired:0};for(const e of B.value)o[e.state]!==void 0&&(o[e.state]+=1);return o}),le=P(()=>B.value.filter(o=>!(k.value&&o.state!==k.value||L.value&&!o.domain.toLowerCase().includes(L.value.toLowerCase()))));function Q(o){switch(o){case"pending":return"gold";case"reached":return"cyan";case"consumed":return"green";case"cancelled":return"default";case"expired":return"red";default:return"default"}}function X(o){const e=o-Date.now(),p=Math.abs(e)/6e4;if(p<60)return e>0?`${Math.round(p)} 分钟后`:`${Math.round(p)} 分钟前`;const _=p/60;if(_<24)return e>0?`${Math.round(_)} 小时后`:`${Math.round(_)} 小时前`;const h=_/24;return e>0?`${Math.round(h)} 天后`:`${Math.round(h)} 天前`}async function O(){J.value=!0;try{const[o,e]=await Promise.all([C("multisig.list",{limit:500},"multisig list --limit 500 --json",1e4).catch(()=>[]),Promise.all(["marketplace.purchase","crosschain.bridge.outbound","did.rotate"].map(async p=>{try{const _=await C("multisig.policy.show",{domain:p},`multisig policy show ${p} --json`,8e3);return{domain:p,policy:_,updatedAtMs:Date.now()}}catch{return null}})).then(p=>p.filter(Boolean))]);B.value=Array.isArray(o)?o:[],x.value=Array.isArray(e)?e:[]}catch(o){v.error("加载失败: "+(o.message||o))}finally{J.value=!1}}async function Z(o){try{const e=await C("multisig.show",{proposalId:o.id},`multisig show ${o.id} --json`,8e3);n.value=e,D.value=!0}catch(e){v.error("加载详情失败: "+(e.message||e))}}function se(o){return{onClick:()=>Z(o)}}async function ee(o){_e.confirm({title:`取消提案 ${o.id.slice(0,12)}…?`,content:"已签名的成员需要重新发起新提案。此操作不可撤销。",okText:"取消提案",okType:"danger",cancelText:"保持",onOk:async()=>{try{const e=await C("multisig.cancel",{proposalId:o.id,reason:"web-shell"},`multisig cancel ${o.id} --reason web-shell --json`,8e3);e.ok?(v.success("提案已取消"),D.value=!1,await O()):v.error("取消失败: "+e.reason)}catch(e){v.error(e.message||String(e))}}})}async function ne(o){try{const e=await C("multisig.show",{proposalId:o.id},`multisig show ${o.id} --json`,8e3);R.value=e,y.value=!0}catch(e){v.error("加载提案详情失败: "+(e.message||e))}}function r(){n.value&&(R.value=n.value,y.value=!0)}async function d(){D.value=!1,await O()}async function b(o){try{const e=await C("marketplace.consume",{proposalId:o.id},`marketplace consume ${o.id} --json`,1e4);e.status==="consumed"?(v.success(`订单 ${e.order.itemId} 已执行 (¥${(e.order.amountFen/100).toFixed(2)})`),D.value=!1,await O()):v.error("执行失败: "+(e.reason||JSON.stringify(e)))}catch(e){v.error(e.message||String(e))}}async function S(o){try{const e=await C("crosschain.bridge.consume",{proposalId:o.id},`crosschain bridge-consume ${o.id} --json`,1e4);if(e.status==="consumed"){const p=e.payload||{},_=`${p.fromChain||"?"} → ${p.toChain||"?"} (amount ${p.amount??"?"})`;e.bridgeId?v.success(`跨链桥已执行: ${_} · bridgeId ${e.bridgeId}`):(v.success(`跨链桥提案已 finalize: ${_}`),_e.info({title:"跨链桥提案 finalize 完成",content:`Proposal 已标记 consumed。
|
|
2
|
+
|
|
3
|
+
在 CLI 侧运行以下命令完成 cc_bridges 行插入:
|
|
4
|
+
|
|
5
|
+
cc crosschain bridge-consume ${o.id}
|
|
6
|
+
|
|
7
|
+
web-shell 不持有 crosschain DB 句柄,实际 SQLite 插入仍由 CLI 端执行。`})),D.value=!1,await O()}else v.error("执行失败: "+(e.reason||JSON.stringify(e)))}catch(e){v.error(e.message||String(e))}}async function U(o){try{const e=await C("multisig.finalize",{proposalId:o.id},`multisig finalize ${o.id} --json`,8e3);e.ok?(v.success("提案已 finalize"),D.value=!1,await O()):v.error("Finalize 失败: "+e.reason)}catch(e){v.error(e.message||String(e))}}async function T(){try{const o=await C("multisig.sweep",{},"multisig sweep --json",8e3);o.expired===0?v.info("无过期提案"):(v.success(`已标记 ${o.expired} 条提案为过期`),await O())}catch(o){v.error(o.message||String(o))}}return De(O),(o,e)=>{const p=i("a-button"),_=i("a-space"),h=i("a-statistic"),I=i("a-card"),F=i("a-col"),te=i("a-row"),N=i("a-radio-button"),ie=i("a-radio-group"),z=i("a-input-search"),H=i("a-tag"),ue=i("a-tooltip"),de=i("a-table"),pe=i("a-tab-pane"),we=i("a-empty"),A=i("a-descriptions-item"),ce=i("a-descriptions"),me=i("a-list-item"),fe=i("a-list"),$e=i("a-tabs"),Ce=i("a-list-item-meta"),Se=i("a-divider"),ze=i("a-alert"),Me=i("a-drawer");return c(),E("div",null,[m("div",Re,[e[12]||(e[12]=m("div",null,[m("h2",{class:"page-title"},"M-of-N 多签"),m("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),a(_,null,{default:t(()=>[a(p,{loading:J.value,onClick:O},{icon:t(()=>[a(j(Ae))]),default:t(()=>[e[10]||(e[10]=l(" 刷新 ",-1))]),_:1},8,["loading"]),a(p,{onClick:T},{icon:t(()=>[a(j(ge))]),default:t(()=>[e[11]||(e[11]=l(" 扫过期 ",-1))]),_:1})]),_:1})]),a(te,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"总提案",value:B.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[a(j(Le))]),_:1},8,["value"])]),_:1})]),_:1}),a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"待签",value:K.value.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[a(j(ge))]),_:1},8,["value"])]),_:1})]),_:1}),a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"已达阈值",value:K.value.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[a(j(Oe))]),_:1},8,["value"])]),_:1})]),_:1}),a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"已执行",value:K.value.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[a(j(ye))]),_:1},8,["value"])]),_:1})]),_:1}),a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"已取消",value:K.value.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[a(j(Pe))]),_:1},8,["value"])]),_:1})]),_:1}),a(F,{xs:12,sm:8,lg:4},{default:t(()=>[a(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(h,{title:"已过期",value:K.value.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[a(j(Ue))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a($e,{activeKey:M.value,"onUpdate:activeKey":e[2]||(e[2]=u=>M.value=u)},{default:t(()=>[a(pe,{key:"proposals",tab:"提案列表"},{default:t(()=>[m("div",He,[a(ie,{value:k.value,"onUpdate:value":e[0]||(e[0]=u=>k.value=u),size:"small","button-style":"solid"},{default:t(()=>[a(N,{value:""},{default:t(()=>[...e[13]||(e[13]=[l("全部",-1)])]),_:1}),a(N,{value:"pending"},{default:t(()=>[...e[14]||(e[14]=[l("待签",-1)])]),_:1}),a(N,{value:"reached"},{default:t(()=>[...e[15]||(e[15]=[l("已达阈值",-1)])]),_:1}),a(N,{value:"consumed"},{default:t(()=>[...e[16]||(e[16]=[l("已执行",-1)])]),_:1}),a(N,{value:"cancelled"},{default:t(()=>[...e[17]||(e[17]=[l("已取消",-1)])]),_:1}),a(N,{value:"expired"},{default:t(()=>[...e[18]||(e[18]=[l("已过期",-1)])]),_:1})]),_:1},8,["value"]),a(z,{value:L.value,"onUpdate:value":e[1]||(e[1]=u=>L.value=u),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),a(de,{columns:oe,"data-source":le.value,loading:J.value,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:se,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:u,record:f})=>[u.key==="id"?(c(),E("code",qe,s(f.id.slice(0,16))+"…",1)):u.key==="state"?(c(),g(H,{key:1,color:Q(f.state)},{default:t(()=>[l(s(f.state),1)]),_:2},1032,["color"])):u.key==="sigs"?(c(),g(H,{key:2,color:f.n===f.m?"cyan":"default"},{default:t(()=>[l(s(f.m)+"/"+s(f.n),1)]),_:2},1032,["color"])):u.key==="createdAt"?(c(),g(ue,{key:3,title:new Date(f.createdAtMs).toLocaleString()},{default:t(()=>[l(s(X(f.createdAtMs)),1)]),_:2},1032,["title"])):u.key==="expiresAt"?(c(),g(ue,{key:4,title:new Date(f.expiresAtMs).toLocaleString()},{default:t(()=>[m("span",{style:Ie({color:f.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},s(X(f.expiresAtMs)),5)]),_:2},1032,["title"])):u.key==="actions"?(c(),g(_,{key:5,size:"small"},{default:t(()=>[a(p,{size:"small",onClick:W(ae=>Z(f),["stop"])},{default:t(()=>[...e[19]||(e[19]=[l("详情",-1)])]),_:1},8,["onClick"]),f.state==="pending"||f.state==="reached"?(c(),g(p,{key:0,size:"small",danger:"",onClick:W(ae=>ee(f),["stop"])},{default:t(()=>[...e[20]||(e[20]=[l("取消",-1)])]),_:1},8,["onClick"])):w("",!0),f.state==="pending"?(c(),g(p,{key:1,size:"small",type:"primary",onClick:W(ae=>ne(f),["stop"])},{default:t(()=>[...e[21]||(e[21]=[l("签名",-1)])]),_:1},8,["onClick"])):w("",!0),f.state==="reached"&&f.domain==="marketplace.purchase"?(c(),g(p,{key:2,size:"small",type:"primary",onClick:W(ae=>b(f),["stop"])},{default:t(()=>[...e[22]||(e[22]=[l("执行购买",-1)])]),_:1},8,["onClick"])):w("",!0),f.state==="reached"&&f.domain==="crosschain.bridge.outbound"?(c(),g(p,{key:3,size:"small",type:"primary",onClick:W(ae=>S(f),["stop"])},{default:t(()=>[...e[23]||(e[23]=[l("执行跨链桥",-1)])]),_:1},8,["onClick"])):w("",!0)]),_:2},1024)):w("",!0)]),_:1},8,["data-source","loading"])]),_:1}),a(pe,{key:"policies",tab:"域策略"},{default:t(()=>[x.value.length===0?(c(),g(we,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(c(),g(fe,{key:1,"data-source":x.value,"item-layout":"vertical"},{renderItem:t(({item:u})=>[a(me,null,{default:t(()=>[a(I,null,{default:t(()=>[m("h4",Ve,[a(H,{color:"purple"},{default:t(()=>[l(s(u.domain),1)]),_:2},1024),m("span",Qe,[l(s(u.policy.m)+"-of-"+s(u.policy.members.length)+" ",1),u.policy.requirePqc?(c(),g(H,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...e[24]||(e[24]=[l("requirePQC",-1)])]),_:1})):w("",!0)])]),a(ce,{size:"small",column:2},{default:t(()=>[a(A,{label:"阈值 M"},{default:t(()=>[l(s(u.policy.m),1)]),_:2},1024),a(A,{label:"成员数 N"},{default:t(()=>[l(s(u.policy.members.length),1)]),_:2},1024),a(A,{label:"算法"},{default:t(()=>[(c(!0),E(re,null,be(u.policy.algorithms||[],f=>(c(),g(H,{key:f,size:"small"},{default:t(()=>[l(s(f),1)]),_:2},1024))),128))]),_:2},1024),a(A,{label:"默认有效期"},{default:t(()=>[l(s(Math.round((u.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),m("details",We,[m("summary",Ye,"展开成员列表 ("+s(u.policy.members.length)+")",1),a(de,{columns:V,"data-source":u.policy.members,pagination:!1,size:"small","row-key":"did",style:{"margin-top":"8px"}},null,8,["data-source"])])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1})]),_:1},8,["activeKey"]),a(Me,{open:D.value,"onUpdate:open":e[8]||(e[8]=u=>D.value=u),title:n.value?`提案 ${n.value.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[n.value?(c(),E("div",Ge,[a(ce,{column:1,bordered:"",size:"small"},{default:t(()=>[a(A,{label:"Domain"},{default:t(()=>[l(s(n.value.proposal.domain),1)]),_:1}),a(A,{label:"状态"},{default:t(()=>[a(H,{color:Q(n.value.proposal.state)},{default:t(()=>[l(s(n.value.proposal.state),1)]),_:1},8,["color"])]),_:1}),a(A,{label:"阈值"},{default:t(()=>[l(s(n.value.proposal.thresholdM)+"-of-"+s(n.value.proposal.memberSet.length),1)]),_:1}),a(A,{label:"已签 / 需签"},{default:t(()=>[l(s(n.value.signatures.length)+" / "+s(n.value.proposal.thresholdM),1)]),_:1}),a(A,{label:"发起方"},{default:t(()=>[l(s(n.value.proposal.initiatorDid),1)]),_:1}),a(A,{label:"创建时间"},{default:t(()=>[l(s(new Date(n.value.proposal.createdAtMs).toLocaleString()),1)]),_:1}),a(A,{label:"过期时间"},{default:t(()=>[l(s(new Date(n.value.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),a(A,{label:"Payload"},{default:t(()=>[m("pre",Xe,s(n.value.proposal.payload?JSON.stringify(n.value.proposal.payload,null,2):n.value.proposal.payloadJcs),1)]),_:1})]),_:1}),m("h4",Ze,"签名列表 ("+s(n.value.signatures.length)+")",1),a(fe,{"data-source":n.value.signatures,size:"small"},{renderItem:t(({item:u})=>[a(me,null,{default:t(()=>[a(Ce,null,{title:t(()=>[a(j(ye),{style:{color:"#52c41a","margin-right":"6px"}}),m("code",et,s(u.signerDid),1)]),description:t(()=>[l(s(u.alg)+" — "+s(new Date(u.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),a(Se),a(ze,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(接 Unified KeyStore 仍未收口)。本面板用于查看提案状态,签名请用 cc multisig sign;执行已 reached 的提案可在此面板按 domain 直达(marketplace.purchase / crosschain.bridge.outbound),其它 domain 走 cc multisig finalize。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),a(_,null,{default:t(()=>[n.value.proposal.state==="pending"||n.value.proposal.state==="reached"?(c(),g(p,{key:0,danger:"",onClick:e[3]||(e[3]=u=>ee(n.value.proposal))},{default:t(()=>[...e[25]||(e[25]=[l("取消提案",-1)])]),_:1})):w("",!0),n.value.proposal.state==="pending"?(c(),g(p,{key:1,type:"primary",onClick:e[4]||(e[4]=u=>r())},{default:t(()=>[...e[26]||(e[26]=[l("签名 (multisig.sign)",-1)])]),_:1})):w("",!0),n.value.proposal.state==="reached"&&n.value.proposal.domain==="marketplace.purchase"?(c(),g(p,{key:2,type:"primary",onClick:e[5]||(e[5]=u=>b(n.value.proposal))},{default:t(()=>[...e[27]||(e[27]=[l("执行购买 (cc marketplace consume)",-1)])]),_:1})):w("",!0),n.value.proposal.state==="reached"&&n.value.proposal.domain==="crosschain.bridge.outbound"?(c(),g(p,{key:3,type:"primary",onClick:e[6]||(e[6]=u=>S(n.value.proposal))},{default:t(()=>[...e[28]||(e[28]=[l("执行跨链桥 (cc crosschain bridge-consume)",-1)])]),_:1})):w("",!0),n.value.proposal.state==="reached"&&n.value.proposal.domain!=="marketplace.purchase"&&n.value.proposal.domain!=="crosschain.bridge.outbound"?(c(),g(p,{key:4,type:"primary",onClick:e[7]||(e[7]=u=>U(n.value.proposal))},{default:t(()=>[...e[29]||(e[29]=[l("finalize (cc multisig finalize)",-1)])]),_:1})):w("",!0)]),_:1})])):w("",!0)]),_:1},8,["open","title"]),a(Be,{open:y.value,"onUpdate:open":e[9]||(e[9]=u=>y.value=u),proposal:R.value,onSigned:d},null,8,["open","proposal"])])}}},zt=xe(tt,[["__scopeId","data-v-c8a8d20c"]]);export{zt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.hash-short[data-v-61747175],.hash-full[data-v-61747175]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--bg-card, rgba(0, 0, 0, .04));padding:2px 6px;border-radius:4px}.page-title[data-v-c8a8d20c]{font-size:22px;font-weight:600;margin:0;color:var(--text-primary)}.page-sub[data-v-c8a8d20c]{font-size:13px;color:var(--text-secondary);margin:4px 0 0}.filter-bar[data-v-c8a8d20c]{display:flex;align-items:center;margin-bottom:16px}.multisig-row[data-v-c8a8d20c]{cursor:pointer}.multisig-row[data-v-c8a8d20c]:hover{background:var(--bg-hover, rgba(22, 119, 255, .05))}
|