@fased/fased 0.1.67 → 0.1.69
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/CHANGELOG.md +27 -0
- package/README.md +20 -22
- package/config/sat-runtime.env +6 -2
- package/config/signer-protocol-v2.json +10 -0
- package/dist/agents/tools/wallet-action-tool.js +2 -0
- package/dist/agents/tools/wallet-tool.js +5 -3
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/cli/program/register.wallet.js +119 -5
- package/dist/commands/wallet.js +1286 -74
- package/dist/config/sat-runtime-ids.js +6 -1
- package/dist/control-ui/assets/{app-De8gTtZU.js → app-BLFLoFPk.js} +1526 -1526
- package/dist/control-ui/assets/{federation-DgA9e-Pn.js → federation-SGMAnM_8.js} +2 -2
- package/dist/control-ui/assets/{index-DYYBRBOS.js → index-S88kp5ZQ.js} +3 -3
- package/dist/control-ui/assets/{mining-Dg-3ll0F.js → mining-ClI8RW4u.js} +2 -2
- package/dist/control-ui/assets/{wallet-DvStR_AT.js → wallet-CRIhDQbW.js} +325 -156
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/gateway/server-http.js +394 -55
- package/dist/mining/mainnet-sync.js +67 -5
- package/dist/operator/operator-readiness.js +1 -1
- package/dist/plugin-sdk/{actions-DRu135h0.js → actions-B-Vwj64K.js} +3 -3
- package/dist/plugin-sdk/{allow-list-DyAxs4yw.js → allow-list-Bf45HfoP.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Dq_rJtqH.js → audio-preflight-CS7Q_7-R.js} +26 -25
- package/dist/plugin-sdk/{audit-C5d2z5U1.js → audit-CUULWG22.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-DaI5wevh.js → channel-access-configure-BoUsC-Ys.js} +1 -1
- package/dist/plugin-sdk/{channel-adapters.discord-BS4S4Svh.js → channel-adapters.discord-DSiR4X2Y.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
- package/dist/plugin-sdk/channel-plugin-common.js +1 -1
- package/dist/plugin-sdk/{chunk-CyoyqpbG.js → chunk-CBpl-AiQ.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-Dunoq4Er.js → chunk-items-BLBZNORg.js} +1 -1
- package/dist/plugin-sdk/command-status.js +26 -25
- package/dist/plugin-sdk/{commands-registry-BfqdEWdF.js → commands-registry-G5KXSi_y.js} +1 -1
- package/dist/plugin-sdk/{config-schema--vl89M7d.js → config-schema-BiBOUW89.js} +431 -125
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/{diagnostic-DLL_zekv.js → diagnostic-sYs6Agr-.js} +1 -1
- package/dist/plugin-sdk/{directory-live-CSuYxdwk.js → directory-live-BXMpuYAF.js} +1 -1
- package/dist/plugin-sdk/{directory-live-Dw7ZgC9_.js → directory-live-Rn1BzPof.js} +1 -1
- package/dist/plugin-sdk/discord.d.ts +4 -4
- package/dist/plugin-sdk/discord.js +20 -20
- package/dist/plugin-sdk/{draft-stream-controls-BqchW1vi.js → draft-stream-controls-CMNdKSx-.js} +1 -1
- package/dist/plugin-sdk/{guilds-CDhRIX57.js → guilds-Dkwl0yHv.js} +1 -1
- package/dist/plugin-sdk/{handle-action-hvwapMKg.js → handle-action-CRdM6B-8.js} +15 -15
- package/dist/plugin-sdk/index.d.ts +15 -15
- package/dist/plugin-sdk/index.js +28 -27
- package/dist/plugin-sdk/{login-Ca583Okc.js → login-D7WnK8-P.js} +1 -1
- package/dist/plugin-sdk/{login-qr-CGciBSNP.js → login-qr-CRueOKZK.js} +2 -114
- package/dist/plugin-sdk/{markdown-tables-DCOXEUfZ.js → markdown-tables-d7GlUs5R.js} +1 -1
- package/dist/plugin-sdk/{media-CAdQF5TG.js → media-BAoaxCrt.js} +1 -1
- package/dist/plugin-sdk/{monitor-DrTy_4CL.js → monitor-WXdn4mR-.js} +34 -33
- package/dist/plugin-sdk/{monitor-CV1sr0p2.js → monitor-xzVAPbg2.js} +44 -43
- package/dist/plugin-sdk/{openresponses-http-BAjgURZa.js → openresponses-http-DnI1LFgq.js} +26 -25
- package/dist/plugin-sdk/{outbound-attachment-QqTnIhZL.js → outbound-attachment-CyXM3cAv.js} +1 -1
- package/dist/plugin-sdk/{outbound-BgVDdHxx.js → outbound-zB6llMGW.js} +6 -6
- package/dist/plugin-sdk/{pairing-message-BjIJYVvp.d.ts → pairing-message-CiTcdD6m.d.ts} +1 -1
- package/dist/plugin-sdk/{pairing-store-BChahgI2.js → pairing-store-B6J2C0vP.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DxTMz_XF.js → pi-model-discovery-runtime-6JzLw9Gk.js} +1 -1
- package/dist/plugin-sdk/{probe-CJb5uR8B.js → probe-BM7Oe40M.js} +2 -2
- package/dist/plugin-sdk/{probe-l_whvGLY.js → probe-CMPksimh.js} +1 -1
- package/dist/plugin-sdk/{probe-BFroeK3g.js → probe-oVp12D6L.js} +1 -1
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
- package/dist/plugin-sdk/{pw-ai-DlxqX6Es.js → pw-ai-DZYLDC-S.js} +1 -1
- package/dist/plugin-sdk/qr-image-B4MlMG4N.js +115 -0
- package/dist/plugin-sdk/{replies-ChYo5ZQM.js → replies-CY-V0Zob.js} +3 -3
- package/dist/plugin-sdk/{resolve-channels-87LZrFk_.js → resolve-channels-1HtDcMqh.js} +2 -2
- package/dist/plugin-sdk/{resolve-channels-_-nV-EK2.js → resolve-channels-CU72Qh2j.js} +1 -1
- package/dist/plugin-sdk/{resolve-outbound-target-D-KGgHJZ.js → resolve-outbound-target-nQSBVYz9.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-C8tvQm8Z.js → resolve-route-Dufnu2cT.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-DN9VQBwv.js → resolve-users-Bk_ss2vC.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-V6dHh_2B.js → resolve-users-IevCOk4W.js} +2 -2
- package/dist/plugin-sdk/{runtime-2B9_WKoI.js → runtime-CXSQwMaR.js} +1 -1
- package/dist/plugin-sdk/{runtime-dependency-nup8niQL.js → runtime-dependency-DczkvPxn.js} +9 -9
- package/dist/plugin-sdk/sat-runtime.d.ts +105 -10
- package/dist/plugin-sdk/sat-runtime.js +26 -25
- package/dist/plugin-sdk/{send-DCO441U7.js → send-BXBS_mRK.js} +8 -8
- package/dist/plugin-sdk/{send-CFzGKJXo.js → send-D-HfKQZm.js} +4 -4
- package/dist/plugin-sdk/{send-B6KkGKZD.js → send-D1j12ZgX.js} +5 -5
- package/dist/plugin-sdk/{send-q9HXrSwK.js → send-DWKm6yay.js} +10 -10
- package/dist/plugin-sdk/{send-gDoGA-7e.js → send-Di1Jit3L.js} +7 -7
- package/dist/plugin-sdk/{skill-commands-FKEPLS7T.js → skill-commands-iJtvpqgb.js} +2 -2
- package/dist/plugin-sdk/{slack-DSC6T2KW.js → slack-CkIRVDUK.js} +45 -44
- package/dist/plugin-sdk/{slack-actions-DhbMcp8M.js → slack-actions-BzUEszJa.js} +10 -10
- package/dist/plugin-sdk/slack.d.ts +4 -4
- package/dist/plugin-sdk/slack.js +6 -6
- package/dist/plugin-sdk/{sticker-cache-C0l_5IKg.js → sticker-cache-Dpap5ce_.js} +2 -2
- package/dist/plugin-sdk/{tables-B3jr0Pvq.js → tables-_1W36GII.js} +2 -2
- package/dist/plugin-sdk/{targets-CtSbTxYX.js → targets-DDbNnLnB.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-BwGBIVDE.js → telegram-actions-Cewdga8H.js} +30 -29
- package/dist/plugin-sdk/telegram.d.ts +4 -4
- package/dist/plugin-sdk/telegram.js +3 -3
- package/dist/plugin-sdk/{thread-bindings.lifecycle-QbkNl-m6.js → thread-bindings.lifecycle-Y9T3CQGf.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-D9hg_M1c.js → thread-bindings.state-D2oOWDpv.js} +1 -1
- package/dist/plugin-sdk/{tmp-fased-dir-DXnGKKgi.d.ts → tmp-fased-dir-BSEHc8MQ.d.ts} +8 -2
- package/dist/plugin-sdk/{types-eG9aYqXF.d.ts → types-BakzIzGN.d.ts} +1 -1
- package/dist/plugin-sdk/{types-Cegc86EP.d.ts → types-CzF0YQqK.d.ts} +3 -3
- package/dist/plugin-sdk/{web-C_AH5PyB.js → web-DGWi7i3B.js} +33 -32
- package/dist/plugin-sdk/{whatsapp-actions-Bj_rOncr.js → whatsapp-actions-Blu9-eX-.js} +9 -9
- package/dist/plugin-sdk/{whatsapp-heartbeat-B1WHkJIg.js → whatsapp-heartbeat-DjmQM7hq.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +9 -9
- package/dist/plugin-sdk/whatsapp.js +7 -7
- package/dist/plugin-sdk/{wsl-J-HscWxS.js → wsl-CTvIWvZz.js} +1 -1
- package/dist/plugin-sdk/{zod-schema.providers-core-FaYR6KdD.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
- package/dist/wallet/local-socket-signer-lifecycle.js +107 -3
- package/dist/wallet/local-socket-signer-protocol.js +97 -10
- package/dist/wallet/mining-wallet-retirement.js +256 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +10 -0
- package/dist/wallet/signer-network-admin.js +11 -118
- package/dist/wallet/signer-protocol-v2.generated.js +10 -0
- package/dist/wallet/solana-assets.js +9 -3
- package/dist/wallet/solana-rpc-read-fetch.js +65 -0
- package/dist/wallet/wallet-agent-selection.js +6 -10
- package/dist/wallet/wallet-provider-registry.js +70 -29
- package/dist/wallet/wallet-send-approvals.js +6 -2
- package/dist/wallet/wallet-status.js +63 -1
- package/dist/web/login-qr.js +1 -1
- package/dist/wizard/onboarding.js +86 -84
- package/dist/wizard/onboarding.wallet.js +10 -1
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +286 -107
- package/package.json +4 -2
- package/scripts/fased-managed-updater.mjs +10 -2
- package/scripts/install-fased-signerd.sh +4 -8
- package/scripts/install-managed-runtime.mjs +10 -7
- package/scripts/install-runtime-profile.sh +27 -0
- package/scripts/start-managed.sh +13 -1
- /package/dist/plugin-sdk/{active-listener-B_NMtgPL.js → active-listener-p9Ooc1qj.js} +0 -0
- /package/dist/plugin-sdk/{blocks-input-Bg-8S2pl.js → blocks-input-DiZaqaN7.js} +0 -0
- /package/dist/plugin-sdk/{channel-access-CcFRdRPO.js → channel-access-B0aZBSd2.js} +0 -0
- /package/dist/plugin-sdk/{channel-activity-DBDMQ3yI.js → channel-activity-F07DjroV.js} +0 -0
- /package/dist/plugin-sdk/{channel-core-CFRs8LPy.js → channel-core-DoF4X04L.js} +0 -0
- /package/dist/plugin-sdk/{client-pI228AVT.js → client-DLY-kWF_.js} +0 -0
- /package/dist/plugin-sdk/{command-poll-backoff-yJU83wEq.js → command-poll-backoff-NAePk3eL.js} +0 -0
- /package/dist/plugin-sdk/{date-time-uUevHscU.js → date-time-ChY_tHoG.js} +0 -0
- /package/dist/plugin-sdk/{draft-stream-loop-CrOPfV3F.js → draft-stream-loop-DMBwjjd1.js} +0 -0
- /package/dist/plugin-sdk/{fetch-BtmoPIlf.js → fetch-B0v6OTUZ.js} +0 -0
- /package/dist/plugin-sdk/{filesystem-manager-DoI8IBNF.js → filesystem-manager-BzuIJ9K9.js} +0 -0
- /package/dist/plugin-sdk/{gateway-registry-DZDsqicG.js → gateway-registry-Bgl2GFgy.js} +0 -0
- /package/dist/plugin-sdk/{inbound-context-DrAcXE0y.js → inbound-context-CQnfFFQ9.js} +0 -0
- /package/dist/plugin-sdk/{pi-model-discovery-BX_JLcEJ.js → pi-model-discovery-BHNVyRny.js} +0 -0
- /package/dist/plugin-sdk/{polls-DKQXVfJp.js → polls-DXd67TD8.js} +0 -0
- /package/dist/plugin-sdk/{proxy-DWpYcsvR.js → proxy-CLRUdShp.js} +0 -0
- /package/dist/plugin-sdk/{qmd-manager-CgRaTxUq.js → qmd-manager-B8Vnu0ND.js} +0 -0
- /package/dist/plugin-sdk/{render-e7fENCYH.js → render-DrBfVs0u.js} +0 -0
- /package/dist/plugin-sdk/{reply-reference-Bqk-7HXE.js → reply-reference-BnAk5Wjb.js} +0 -0
- /package/dist/plugin-sdk/{retry-policy-C6SjKjQA.js → retry-policy-CXh1owkc.js} +0 -0
- /package/dist/plugin-sdk/{sandbox-paths-Dx2lUqCu.js → sandbox-paths-Bzh1CuZc.js} +0 -0
- /package/dist/plugin-sdk/{session-DHD4ZKyG.js → session-iuGR_rdi.js} +0 -0
- /package/dist/plugin-sdk/{shared-CBgp_GBw.js → shared-D1AD2Ejn.js} +0 -0
- /package/dist/plugin-sdk/{target-errors-Ckufe179.js → target-errors-DfS1sLR9.js} +0 -0
- /package/dist/plugin-sdk/{tool-loop-detection-Bp8bPJLs.js → tool-loop-detection-sDZl27w7.js} +0 -0
- /package/dist/plugin-sdk/{ui-Be8cLHIS.js → ui-GQDYm_jw.js} +0 -0
- /package/dist/plugin-sdk/{with-timeout-ckWB8rTo.js → with-timeout-CVV8tytk.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-ledger-source-route-C-yTp0QU.js";import{a as i,c as a,t as o}from"./wallet-policy-C3ZS66Rl.js";var s=8,c=9n,l=11n;function u(e){let t=e.status?.approvalAuth?.mode??`none`,n=e.status?.approvalAuth?.ready??!1,r=e.status?.approvalAuth?.passkeyCount??0;return t===`webauthn`?!n||r<=0?{summary:`
|
|
1
|
+
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-ledger-source-route-C-yTp0QU.js";import{a as i,c as a,t as o}from"./wallet-policy-C3ZS66Rl.js";var s=8,c=9n,l=11n;function u(e){let t=e.status?.approvalAuth?.mode??`none`,n=e.status?.approvalAuth?.ready??!1,r=e.status?.approvalAuth?.passkeyCount??0;return t===`webauthn`?!n||r<=0?{summary:`Setup incomplete`,detail:`Account passkey mode is enabled but no device is enrolled. Wallet creation, Agent automation, and Mining automation are unaffected.`,enableVisible:!1,enableLabel:`Passkey approval enabled`,enableDisabled:!0,enrollVisible:!0,enrollLabel:e.passkeyBusy?`Enrolling...`:`Enroll passkey`,enrollDisabled:e.settingsBusy||e.passkeyBusy}:{summary:`Enabled`,detail:`Optional Control UI account passkey is enabled. Agent and Mining autonomous signer policies remain independent.`,enableVisible:!1,enableLabel:`Passkey approval ready`,enableDisabled:!0,enrollVisible:!1,enrollLabel:e.passkeyBusy?`Adding passkey...`:`Add passkey`,enrollDisabled:e.settingsBusy||e.passkeyBusy}:{summary:`Optional`,detail:`Optional extra approval for Control UI account actions. It is not part of Agent or Mining wallet readiness.`,enableVisible:!0,enableLabel:e.settingsBusy?`Enabling...`:`Add account passkey`,enableDisabled:e.settingsBusy||e.passkeyBusy,enrollVisible:!1,enrollLabel:`Enroll passkey`,enrollDisabled:!0}}function d(e){let t=e?.nativeSignerApproval;return t?t.configured?!t.ready||t.credentialCount<=0?{summary:`Not enrolled`,detail:`No signer-owned approval device is enrolled. Run the native signer-owner ceremony from the host terminal; ordinary Gateway JavaScript cannot enroll it.`,setupCommand:`Local: ~/.fased/bin/fased-signer-enroll · Hosting root console: /usr/local/sbin/fased-signer-enroll`}:{summary:`Ready · ${t.credentialCount} device${t.credentialCount===1?``:`s`}`,detail:`The native signer has an approval device. This Vault still needs an acknowledged manual policy for the exact operation before Send becomes available.`,setupCommand:null}:{summary:`Not configured`,detail:`This signer has no WebAuthn origin configured. Vault creation and receiving still work, but native Vault review cannot be enabled yet.`,setupCommand:null}:{summary:`Status unavailable`,detail:`Signer-owned Vault approval readiness is unavailable. Vault remains manual and receive-only until signer health is restored and an exact manual policy is acknowledged.`,setupCommand:null}}function f(e){return{mode:`manual`,submitLabel:`Create Approval Request`,detail:`Direct user Send is always reviewed/manual. Confirm creates a pending wallet approval request below. The optional account passkey is requested only when the user enabled it.`}}function p(t){return e`
|
|
2
2
|
<span class="wallet-help" role="img" tabindex="0" aria-label=${t} data-tooltip=${t}>
|
|
3
3
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
4
4
|
<circle cx="12" cy="12" r="10" />
|
|
@@ -6,7 +6,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
6
6
|
<path d="M12 17h.01" />
|
|
7
7
|
</svg>
|
|
8
8
|
</span>
|
|
9
|
-
`}function
|
|
9
|
+
`}function m(e){return e?.policy?.directSigning?{label:`Automation on`,detail:`This selected wallet can execute approved typed background actions when signer policy and caps allow it.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}:{label:`Automation off`,detail:`This selected wallet is manual-first. Reviewed Wallet UI sends can still be approved, but background actions cannot execute.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}}function h(e){return String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null}function g(e){return typeof e==`string`&&e.trim().length>0}function _(e){return e.id.startsWith(`solana-`)||e.name.toLowerCase().startsWith(`solana `)||e.addresses?.solana?`solana`:null}function ee(e){return!e||_(e),[`solana`]}function v(e,t){let n=String(t??``).trim();if(n)return e.find(e=>e.id===n)}function y(e){if(!e)return`No grant`;let t=Array.isArray(e.actions)?e.actions.map(e=>String(e)).filter(Boolean):[],n=Array.isArray(e.chains)?e.chains.map(e=>String(e)).filter(Boolean):[],r=Array.isArray(e.walletIds)?e.walletIds.map(e=>String(e)).filter(Boolean):[],i=[e.autonomous===!0?`autonomous`:null,e.cron===!0?`cron`:null].filter(Boolean).join(`, `);return[t.length>0?t.join(`, `):`actions unspecified`,r.length===1?`skill override ${r[0]}`:r.length>1?`wallet allowlist ${r.join(`, `)}`:`wallet unspecified`,n.length>0?n.join(`, `):`chain unspecified`,i].filter(Boolean).join(` · `)}function b(e){return e?[e.actions?.length?e.actions.join(`, `):`actions unspecified`,e.chains?.length?e.chains.join(`, `):`chain unspecified`,[e.autonomous?`autonomous requested`:null,e.cron?`cron requested`:null].filter(Boolean).join(`, `)].filter(Boolean).join(` · `):`No marketplace wallet request recorded`}function x(e){let t=(typeof e?.metadata?.purpose==`string`?e.metadata.purpose:typeof e?.metadata?.role==`string`?e.metadata.role:``).toLowerCase();if(t===`agent`)return`agent`;if(t===`vault`)return`vault`;if(t===`mining`)return`mining`}function S(e,t){if(!e)return!1;let n=x(e);return n&&n!==`agent`?!1:e.id===String(t??``).trim()||n===`agent`}function C(e){let t=e.status?.approvalAuth?.mode??`none`,n=e.status?.approvalAuth?.ready??!1,r=String(e.defaultWalletId??``).trim()||null,i=v(e.namedWallets,r),a=e.namedWallets.filter(e=>S(e,r)),o=i&&S(i,r)?i:void 0,s=String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null,c=v(e.namedWallets,s),l=String(e.federationBond?.walletId??``).trim()||null,u=v(e.namedWallets,l);return{admin:e.status?t===`webauthn`&&n?{title:`Control UI account passkey`,summary:`Optional · enabled`,detail:`Adds account-level approval without changing Agent or Mining readiness.`,tone:`success`}:t===`webauthn`?{title:`Control UI account passkey`,summary:`Optional · setup incomplete`,detail:`Finish or disable account passkey mode. Wallet role readiness is separate.`,tone:`warn`}:{title:`Control UI account passkey`,summary:`Optional · off`,detail:`The signed-in Control UI session is active. Add an account passkey only if you want the extra approval step.`,tone:`neutral`}:{title:`Control UI account passkey`,summary:`Optional status unavailable`,detail:`Refresh Account Security before changing account-level approval.`,tone:`neutral`},agent:o?{title:`Agent wallets`,summary:a.length>1?`${o.name} + ${a.length-1}`:o.name,detail:a.length>1?`Multiple Agent wallets can be selected explicitly. Otherwise routing checks a skill override, then the Agent assignment, then this optional Default Agent wallet fallback.`:`If no explicit, skill, or Agent assignment exists, approved wallet actions use this optional fallback.`,tone:`success`,walletId:o.id}:a.length>0?{title:`Agent wallets`,summary:`${a.length} set · no fallback`,detail:`Agent wallets can be selected by explicit @wallet:<id> handles. Set one default Agent wallet if approved actions should have a fallback.`,tone:`warn`,walletId:a[0]?.id}:r?{title:`Agent wallets`,summary:r,detail:`An Agent wallet is configured but not present in this wallet list right now. Refresh or repair the registry before paid Fased Network or skill wallet work.`,tone:`warn`,walletId:r}:{title:`Agent wallets`,summary:`Not set`,detail:`Mark at least one Agent wallet before paid Fased Network tasks, payment evidence, or skill wallet actions use a clear operator wallet.`,tone:`warn`},mining:c?{title:`SAT Mining`,summary:c.name,detail:`SAT mining uses the singleton @wallet:mining wallet for capital, cycle history, and restart recovery. Keep it separate from Agent wallets.`,tone:`success`,walletId:c.id}:s?{title:`SAT Mining`,summary:s,detail:`SAT runtime points at @wallet:mining, but that wallet is not visible in the current wallet list. Refresh mining and wallet state before SAT mining.`,tone:`warn`,walletId:s}:{title:`SAT Mining`,summary:`Not configured`,detail:`Create or import @wallet:mining in onboarding or CLI if you want SAT participation. Mining is optional and should not be assumed by Fased Network join.`,tone:`neutral`},bond:u?{title:`Fased Network Bond`,summary:u.name,detail:e.federationBond?.status===`active`?`This wallet currently holds the active SAT bond for Fased Network. Tier ${e.federationBond?.tier??`none`} · quota ${e.federationBond?.quotaBand??`standard`}.`:`This wallet is configured for Fased Network bond. Use the Fased Network page to open, increase, unlock, or re-prove the SAT bond.`,tone:e.federationBond?.status===`active`?`success`:e.federationBond?.status===`unlocking`?`warn`:`neutral`,walletId:u.id}:l?{title:`Fased Network Bond`,summary:l,detail:`A Fased Network bond Vault is configured but not visible in the current wallet list. Refresh wallet state or repair the local wallet registry before changing bond posture.`,tone:`warn`,walletId:l}:{title:`Fased Network Bond`,summary:`Not set`,detail:`Select a Vault wallet on Fased Network before longer-lived bond capital if you want bonded network access.`,tone:`neutral`},sharedWalletWarning:c&&a.some(e=>e.id===c.id)?`Agent and Mining wallets must stay separate. This singleton mining wallet is also marked Agent; use a dedicated Agent wallet and clear the Agent default before wallet work.`:null,miningWalletId:s,bondWalletId:l}}function te(e,t){return[]}function ne(r,i,a){if(r!==String(i?.walletId??``).trim())return t;let o=i?.status??`none`,s=o===`active`?`bond-active`:o===`unlocking`?`bond-unlocking`:`bond`,c=o===`active`?`Fased Network bond active`:o===`unlocking`?`Fased Network bond unlocking`:`Fased Network bond wallet`;return e`
|
|
10
10
|
<button
|
|
11
11
|
type="button"
|
|
12
12
|
class="wallet-status-icon wallet-status-icon--button"
|
|
@@ -17,7 +17,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
17
17
|
>
|
|
18
18
|
${n.shield}
|
|
19
19
|
</button>
|
|
20
|
-
`}function
|
|
20
|
+
`}function re(r){let{role:i}=r;if(i===`mining`)return t;if(i===`vault`)return e`
|
|
21
21
|
<span
|
|
22
22
|
class="wallet-status-icon"
|
|
23
23
|
data-state="vault-manual"
|
|
@@ -35,12 +35,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
35
35
|
>
|
|
36
36
|
${a?n.zap:n.hand}
|
|
37
37
|
</span>
|
|
38
|
-
`}function w(t,n){
|
|
39
|
-
<span class="wallet-lock-chip" data-state=${
|
|
38
|
+
`}function w(t,n){return e`
|
|
39
|
+
<span class="wallet-lock-chip" data-state=${t.toLowerCase()===`enabled`?`unlocked`:`locked`} title=${n}>
|
|
40
40
|
<span class="wallet-lock-chip__dot"></span>
|
|
41
|
-
${
|
|
41
|
+
${t}
|
|
42
42
|
</span>
|
|
43
|
-
`}function
|
|
43
|
+
`}function ie(r){return r?.automation?.satSweep?.enabled?e`
|
|
44
44
|
<span
|
|
45
45
|
class="wallet-status-icon"
|
|
46
46
|
data-role="sweep-on"
|
|
@@ -48,18 +48,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
48
48
|
>
|
|
49
49
|
${n.arrowDown}
|
|
50
50
|
</span>
|
|
51
|
-
`:t}function
|
|
51
|
+
`:t}function ae(r){return r.walletId===r.props.walletDetailsWalletId?(r.role===`agent`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Caps active`,icon:n.shield}:null,r.props.recurringTransferEnabled?{dataRole:`policy-on`,title:`Recurring send active`,icon:n.send}:null,r.props.policySkillsEnabled?{dataRole:`policy-on`,title:`Skill wallet access gate is active. Individual skills still need explicit Wallet > Skill Grants.`,icon:n.spark}:null]:r.role===`vault`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Vault caps active`,icon:n.shield}:null]:[]).filter(e=>e!==null).map(t=>e`
|
|
52
52
|
<span class="wallet-status-icon" data-role=${t.dataRole} title=${t.title}>
|
|
53
53
|
${t.icon}
|
|
54
54
|
</span>
|
|
55
|
-
`):t}function T(e,t){let n=e===String(t.defaultWalletId??``).trim(),r=!n&&e===
|
|
55
|
+
`):t}function T(e,t){let n=e===String(t.defaultWalletId??``).trim(),r=!n&&e===h(t),i=x(v(t.namedWallets,e)),a=!!(i&&i!==`agent`);return{label:n?`Clear fallback`:`Set fallback`,disabled:t.settingsBusy||r||a,title:r?`Agent and Mining wallets must stay separate. Create a dedicated Agent wallet instead.`:a?`Wallet purpose is permanent. Create a new Agent wallet instead of changing this wallet.`:n?`Clear this optional Default Agent wallet fallback. Existing Agent roles and assignments stay unchanged.`:`Use this as the optional Default Agent wallet fallback after explicit, skill, and Agent assignments.`}}function E(e,t){if(e===h(t))return`mining`;let n=v(t.namedWallets,e);return x(n)===`mining`?`mining`:S(n,t.defaultWalletId)?`agent`:`vault`}function D(e){switch(e){case`mining`:return 0;case`vault`:return 1;case`agent`:return 2}}function O(e,t){let n=String(t.defaultWalletId??``).trim();return e.toSorted((e,r)=>{let i=E(e.id,t),a=E(r.id,t),o=D(i)-D(a);if(o!==0)return o;if(i===`agent`&&a===`agent`){if(e.id===n&&r.id!==n)return-1;if(r.id===n&&e.id!==n)return 1}return e.name.localeCompare(r.name)||e.id.localeCompare(r.id)})}function k(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=100000000000n,r=e/n,i=(e%n).toString().padStart(11,`0`).replace(/0+$/,``).slice(0,6);return i?`${r}.${i}`:`${r}`}catch{return`0`}}function A(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,11})?$/.test(t))return`0`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*100000000000n+BigInt((r+`00000000000`).slice(0,11)||`0`)).toString()}function j(e,t,n={}){try{let t=BigInt(e),r=10n**9n,i=t/r,a=(t%r).toString().padStart(9,`0`).replace(/0+$/,``),o=a?`${i.toString()}.${a}`:i.toString();return n.hideUnit?o:`${o} SOL`}catch{return`—`}}function M(e,t=`n/a`){return typeof e==`string`?e.trim()||t:typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):t}function oe(e){return M(e,`n/a`).toLowerCase()===`solana`?`SOL`:M(e,`n/a`)}function N(e){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return null;let t=String(e).trim().toLowerCase();return t===`solana`||t===`sol`?`solana`:null}function P(e,t){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return`n/a`;let n=String(e).trim();if(!n)return`n/a`;let r=N(t);if(!r)return n;try{return j(n,r)}catch{return n}}function F(e,t){let n=String(e??``).trim();if(!n||typeof t!=`number`||!Number.isFinite(t)||t<0)return null;try{let e=10n**BigInt(t),r=BigInt(n),i=r/e,a=(r%e).toString().padStart(t,`0`).replace(/0+$/,``);if(!a)return i.toString();let o=a.slice(0,6).replace(/0+$/,``);return o?`${i.toString()}.${o}`:i.toString()}catch{return null}}function I(e,t){return typeof e[t]==`string`?String(e[t]).trim():``}function L(e,t){let n=e[t];if(typeof n==`number`&&Number.isFinite(n))return n;if(typeof n==`string`&&n.trim()){let e=Number(n);return Number.isFinite(e)?e:null}return null}function R(e){let t=e.trim();if(!/^[0-9]+(\.[0-9]+)?$/.test(t))return t;let n=Number(t);return Number.isFinite(n)?n>0&&n<1e-6?`<0.000001`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:Math.abs(n)>=1?2:6}).format(n):t}function z(e){let t=N(e.details.chain),n=I(e.details,`program`);if(t===`solana`&&n){let t=Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>!e.isNative&&e.program===n):void 0,r=I(e.details,`assetSymbol`)||t?.symbol||`SPL`,i=Te({isNative:!1,program:n,symbol:r,name:I(e.details,`assetName`)||t?.name||``})?`SPL`:r,a=I(e.details,`amountDisplay`);if(a)return`${R(a)} ${i}`;let o=L(e.details,`assetDecimals`)??t?.decimals,s=F(M(e.details.amount,``),o);if(s)return`${R(s)} ${i}`;let c=M(e.details.amount,``);return c?`${c} raw ${i}`:`n/a`}return P(e.details.amount,t)}function B(e){return{name:String(e.payload.assetName??``).trim()||null,symbol:String(e.payload.assetSymbol??``).trim()||null,program:String(e.payload.program??``).trim()||null}}function V(e){if(e.request.payload.actionKind===`solana_swap`){let t=String(e.request.payload.inputSymbol??``).trim()||`SOL`,n=String(e.request.payload.outputSymbol??``).trim()||(e.request.payload.outputMint?we(e.request.payload.outputMint):`token`),r=typeof e.request.payload.inputDecimals==`number`&&Number.isFinite(e.request.payload.inputDecimals)?e.request.payload.inputDecimals:Number(c),i=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r)||``;return{amountValueText:i?`${J(i)} ${t}`:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:`${t} -> ${n}`,assetSecondaryText:e.request.payload.routeLabel?`Jupiter · ${e.request.payload.routeLabel}`:`Jupiter swap`,name:String(e.request.payload.outputName??``).trim()||null,symbol:n,program:e.request.payload.outputMint??null,usesFallbackIdentity:!1}}let t=B(e.request),n=t.program,r=n&&Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>e.program===n):void 0,i=t.symbol??r?.symbol??null,a=t.name??r?.name??null,o=Te({isNative:!1,program:n??``,symbol:i??``,name:a??``}),s=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r?.decimals)||``;return s?{amountValueText:J(s),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}:{amountValueText:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}}function se(e){let t=String(e.request.payload.walletId??``).trim(),n=String(e.request.payload.walletName??``).trim(),r=e.request.payload.chain,i=v(e.namedWallets,t)??(n?e.namedWallets.find(e=>e.name.trim().toLowerCase()===n.toLowerCase()):void 0),a=i&&q(i,r)||null;return{fromLabel:i?.name?.trim()||n||t||null,fromAddress:a,toAddress:String(e.request.payload.to??``).trim()||null}}function ce(n){let r=n.request.approvalDiff??n.request.simulation?.diff;if(!r)return t;let i=r.fromWalletName||n.endpoints.fromLabel||(r.fromWalletId?`@wallet:${r.fromWalletId}`:`wallet`),a=r.amountDisplay||n.display.amountValueText||r.amount||`amount`,o=r.token||n.display.assetPrimaryText||r.mint||r.chain,s=r.to||n.endpoints.toAddress||`destination`,c=[r.source,r.skillId?`skill ${r.skillId}`:``,r.taskId?`task ${r.taskId}`:``].filter(Boolean).join(` · `);return e`
|
|
56
56
|
<div class="wallet-approval-diff">
|
|
57
57
|
<span>Spend <strong>${a}</strong> ${o?e`<span>${o}</span>`:t}</span>
|
|
58
58
|
<span>from <strong>${i}</strong> <span class="muted">(${r.fromRole})</span></span>
|
|
59
59
|
<span>to <span class="mono">${X(s,8,6)}</span></span>
|
|
60
60
|
${c?e`<span class="muted">triggered by ${c}</span>`:t}
|
|
61
61
|
</div>
|
|
62
|
-
`}function
|
|
62
|
+
`}function H(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function U(e){if(typeof e==`string`)return e.trim()||null;if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`boolean`)return e?`yes`:`no`;if(Array.isArray(e)){let t=e.map(e=>U(e)).filter(Boolean);return t.length>0?t.join(`, `):null}return null}function le(n){let r=H(n.payload.signerSemanticIntent),i=U(r?.type);if(!r||!i)return t;let a=[],o=(e,t)=>{let n=U(t);n&&a.push({label:e,value:n})},s=[];if(i.startsWith(`solana.jupiter.`)){let e=H(r.jupiter),t=H(e?.trigger);if(o(`Owner`,e?.owner),o(`Input mint`,e?.inputMint),o(`Output mint`,e?.outputMint),o(`Input amount`,e?.inputAmount),o(`Maximum input`,e?.maxInputAmount),o(`Minimum output`,e?.minimumOutputAmount),o(`Fee ceiling (lamports)`,e?.maxFeeLamports),o(`Source token account`,e?.sourceTokenAccount),o(`Destination token account`,e?.destinationTokenAccount),o(`Programs`,e?.programs),o(`Trigger operation`,t?.operation),o(`Trigger program`,t?.program),o(`Trigger order ID`,t?.order),o(`Trigger mint`,t?.triggerMint),o(`Condition`,t?.condition),o(`Target price (USD)`,t?.targetPriceUsd),o(`Slippage (bps)`,t?.slippageBps),o(`Order expiry`,t?.expiresAt),o(`Expected order state`,t?.expectedOrderState),i.includes(`.trigger.`)){let n=U(t?.operation);s=(n===`create`?[[`input mint`,e?.inputMint],[`output mint`,e?.outputMint],[`exact input amount`,e?.inputAmount],[`trigger mint`,t?.triggerMint],[`condition`,t?.condition],[`target price`,t?.targetPriceUsd],[`slippage`,t?.slippageBps],[`order expiry`,t?.expiresAt],[`expected new state`,t?.expectedOrderState]]:n===`cancel`?[[`order ID`,t?.order],[`refund mint`,e?.outputMint],[`minimum refund`,e?.minimumOutputAmount],[`refund destination`,e?.destinationTokenAccount],[`expected open state`,t?.expectedOrderState]]:[[`operation`,t?.operation]]).filter(e=>U(e[1])===null).map(e=>String(e[0]));let r=[[`vault`,t?.vault],[`external request ID`,t?.requestId],[`source token account`,e?.sourceTokenAccount],...n===`create`?[[`destination token account`,e?.destinationTokenAccount]]:[]].filter(e=>U(e[1])!==null).map(e=>String(e[0]));s.push(...r.map(e=>`remove caller-provided ${e}`))}}else if(i===`solana.nativeTransfer`)o(`Destination`,r.destination),o(`Lamports`,r.lamports);else if(i===`solana.splTransferChecked`)o(`Token program`,r.tokenProgram),o(`Mint`,r.mint),o(`Destination`,r.destination),o(`Amount`,r.amount);else if(i===`solana.vaultBondAction`){let e=H(r.context);o(`Cluster`,r.cluster),o(`Vault action`,r.action),o(`Program`,r.programId),o(`Target authority`,e?.targetAuthority),o(`Dispute authority`,e?.disputeAuthority),o(`Interval start cycle`,e?.intervalStartCycleId),o(`Registry page`,e?.registryPageIndex),o(`Miner authorities`,e?.minerAuthorities),o(`Front cycle IDs`,e?.frontCycleIds),o(`Back cycle IDs`,e?.backCycleIds)}else if(i===`federation.bondChallenge`){let e=H(r.federation);o(`Challenge ID`,e?.challengeId),o(`Bond ID`,e?.bondId),o(`Bond tier`,e?.tier),o(`Bond amount`,e?.amountRaw),o(`Federation handle`,e?.handle),o(`Node ID`,e?.nodeId),o(`Token ID`,e?.tokenId),o(`Federation origin`,e?.federationOrigin),o(`Challenge expiry`,e?.expiresAt)}return e`
|
|
63
63
|
<div class="wallet-approval-diff" style="margin-top: 6px;">
|
|
64
64
|
<span><strong>Signer intent</strong> <span class="mono">${i}</span></span>
|
|
65
65
|
${a.map(t=>e`
|
|
@@ -75,7 +75,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
75
75
|
</span>
|
|
76
76
|
`:t}
|
|
77
77
|
</div>
|
|
78
|
-
`}function
|
|
78
|
+
`}function W(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function G(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return t===`SAT`?W(i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3)):i>=1||i>=.01?W(r.toFixed(2)):i>0?`<0.01`:`0`}catch{return n}}function K(e,t){let n=String(e??``).trim();if(!n)return`—`;let r=RegExp(`\\s*${t}$`,`i`);return n.replace(r,``).trim()||`0`}function ue(e){return String(e.miningProfile?.walletId??e.miningStatus?.walletId??e.miningReadiness?.selectedWalletId??``).trim()}function de(e,t,n){if(typeof e.balances?.solana==`string`&&e.balances.solana.trim())return J(K(j(e.balances.solana,`solana`),`SOL`));if(n){let e=String(t.miningReadiness?.balances.solBalanceDisplay??``).trim();if(e)return J(K(e,`SOL`));let n=String(t.miningStatus?.currentSolBalanceLamports??``).trim();if(n)return J(G(n,`SOL`))}return e.addresses?.solana?t.balancesLoading?`Loading`:`0`:t.balancesLoading?`Loading`:`—`}function q(e,t){return e&&e.addresses?.solana||``}function fe(e,t){return!e||t?.walletId!==e.id?[]:Array.isArray(t.assets?.solana)?t.assets.solana:[]}function pe(e,t){if(!e)return[];let n=[],r=ue(t)===e.id,i=fe(e,t.balances);if(i.length>0)for(let e of i)n.push({id:e.id,chain:`solana`,symbol:e.symbol,name:e.name,amountDisplay:e.amountDisplay,amountRaw:e.amountRaw,decimals:e.decimals,isNative:e.isNative,program:e.program,tokenProgramId:e.tokenProgramId,address:e.address,logoUri:e.logoUri,verificationStatus:e.verificationStatus,priceUsd:e.priceUsd,valueUsd:e.valueUsd,tags:e.tags});else n.push({id:`solana:native`,chain:`solana`,symbol:`SOL`,name:`Solana`,amountDisplay:de(e,t,r),amountRaw:e.balances?.solana,isNative:!0,address:e.addresses?.solana});return n}function J(e){let t=e.trim();if(!t||t===`—`||t.toLowerCase()===`loading`)return e;let n=Number.parseFloat(t.replaceAll(`,`,``));return Number.isFinite(n)?n>0&&n<.01?`<0.01`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:2}).format(n):e}function Y(e){let t=e.mint?.trim();if(!t)return``;let n=e.drafts[t]?.[e.field];if(n!==void 0)return(e.drafts[t]?.decimals??-1)<0?F(n,e.decimals)??n:n;let r=e.settings?.policy.solana.tokenCaps?.[t]?.[e.field];return F(r,e.decimals)??``}function me(e,t,n,r,i){let a=t?.trim();if(!a)return;let o=e.policySolanaTokenCaps[a],s=o&&o.decimals<0?{decimals:n,maxPerTx:F(o.maxPerTx,n)??``,maxDaily:F(o.maxDaily,n)??``}:o??{decimals:n};e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[a]:{...s,decimals:n,[r]:i}}})}function he(e){let t=e.policyTokenCapMint.trim();if(!t)return;let n=Number.parseInt(e.policyTokenCapDecimals.trim(),10),r=Number.isFinite(n)?Math.max(0,Math.min(18,n)):0;e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[t]:{decimals:r,maxPerTx:e.policyTokenCapMaxPerTx.trim(),maxDaily:e.policyTokenCapMaxDaily.trim()}},tokenCapMint:``,tokenCapDecimals:``,tokenCapMaxPerTx:``,tokenCapMaxDaily:``})}function ge(e){let t=[],n=new Set;for(let r of e.selectedWalletTokens){let e=r.program?.trim();if(r.isNative||!e||n.has(e))continue;let i=X(e,2,2),a=String(r.symbol||``).trim(),o=!a||a===`Token`||a.includes(`...`)||a.includes(`…`)||a.length>8?i:a;n.add(e),t.push({key:e,label:o,detail:i,mint:e,decimals:r.decimals??0,logo:ve(r,20)})}let r=new Set([...Object.keys(e.props.settings?.policy.solana.tokenCaps??{}),...Object.keys(e.props.policySolanaTokenCaps??{})]);for(let i of r){let r=i.trim();!r||n.has(r)||(n.add(r),t.push({key:r,label:X(r,2,2),detail:X(r,2,2),mint:r,decimals:e.props.policySolanaTokenCaps[r]?.decimals??-1}))}return t}function _e(n){let{props:r,settings:i,policyDisplay:a,cardRole:o,selectedWalletId:s,cardWalletCanSpendSolana:c,selectedWalletTokens:l,canEditPolicy:u}=n,d=r.policyCapsEnabled===!0,f=ge({props:r,selectedWalletTokens:l});return e`
|
|
79
79
|
<div class="field">
|
|
80
80
|
<div class="wallet-spend-limit-row" style="align-items: end;">
|
|
81
81
|
<label class="field">
|
|
@@ -115,7 +115,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
115
115
|
<label class="field wallet-cap-field">
|
|
116
116
|
<span class="wallet-field-label wallet-field-label--mint">
|
|
117
117
|
<span>SOL</span>
|
|
118
|
-
${
|
|
118
|
+
${p(`Maximum SOL this wallet may spend in one day under this policy.`)}
|
|
119
119
|
</span>
|
|
120
120
|
<input
|
|
121
121
|
aria-label="Daily SOL cap"
|
|
@@ -128,7 +128,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
128
128
|
<label class="field wallet-cap-field">
|
|
129
129
|
<span class="wallet-field-label">
|
|
130
130
|
<span>Tx</span>
|
|
131
|
-
${
|
|
131
|
+
${p(`Maximum SOL this wallet may spend in one approved transaction.`)}
|
|
132
132
|
</span>
|
|
133
133
|
<input
|
|
134
134
|
aria-label="Per transaction SOL cap"
|
|
@@ -140,32 +140,32 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
140
140
|
</label>
|
|
141
141
|
</div>
|
|
142
142
|
`:t}
|
|
143
|
-
${
|
|
143
|
+
${f.map(t=>e`
|
|
144
144
|
<div class="wallet-token-cap-row">
|
|
145
145
|
<label class="field wallet-cap-field">
|
|
146
146
|
<span class="wallet-field-label wallet-field-label--mint mono" title=${t.mint??t.label}>
|
|
147
147
|
<span>${t.label}</span>
|
|
148
|
-
${
|
|
148
|
+
${p(`Maximum token amount this wallet may spend in one day under this policy.`)}
|
|
149
149
|
</span>
|
|
150
150
|
<input
|
|
151
151
|
aria-label=${`Daily cap for ${t.label}`}
|
|
152
152
|
placeholder="0"
|
|
153
|
-
.value=${
|
|
153
|
+
.value=${Y({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxDaily`,decimals:t.decimals})}
|
|
154
154
|
?disabled=${r.settingsBusy||!u}
|
|
155
|
-
@input=${e=>
|
|
155
|
+
@input=${e=>me(r,t.mint,t.decimals,`maxDaily`,e.target.value)}
|
|
156
156
|
/>
|
|
157
157
|
</label>
|
|
158
158
|
<label class="field wallet-cap-field">
|
|
159
159
|
<span class="wallet-field-label">
|
|
160
160
|
<span>Tx</span>
|
|
161
|
-
${
|
|
161
|
+
${p(`Maximum token amount this wallet may spend in one approved transaction.`)}
|
|
162
162
|
</span>
|
|
163
163
|
<input
|
|
164
164
|
aria-label=${`Per transaction cap for ${t.label}`}
|
|
165
165
|
placeholder="0"
|
|
166
|
-
.value=${
|
|
166
|
+
.value=${Y({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxPerTx`,decimals:t.decimals})}
|
|
167
167
|
?disabled=${r.settingsBusy||!u}
|
|
168
|
-
@input=${e=>
|
|
168
|
+
@input=${e=>me(r,t.mint,t.decimals,`maxPerTx`,e.target.value)}
|
|
169
169
|
/>
|
|
170
170
|
</label>
|
|
171
171
|
</div>
|
|
@@ -237,7 +237,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
237
237
|
</label>
|
|
238
238
|
<label class="field">
|
|
239
239
|
<span class="wallet-field-label wallet-field-label--icon-only">
|
|
240
|
-
${
|
|
240
|
+
${p(`Maximum token amount this wallet may spend in one day under this policy.`)}
|
|
241
241
|
</span>
|
|
242
242
|
<input
|
|
243
243
|
aria-label="Daily token cap"
|
|
@@ -249,7 +249,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
249
249
|
</label>
|
|
250
250
|
<label class="field">
|
|
251
251
|
<span class="wallet-field-label wallet-field-label--icon-only">
|
|
252
|
-
${
|
|
252
|
+
${p(`Maximum token amount this wallet may spend in one approved transaction.`)}
|
|
253
253
|
</span>
|
|
254
254
|
<input
|
|
255
255
|
aria-label="Per transaction token cap"
|
|
@@ -262,7 +262,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
262
262
|
<button
|
|
263
263
|
class="btn"
|
|
264
264
|
?disabled=${r.settingsBusy||!u||!(r.policyTokenCapMint??``).trim()}
|
|
265
|
-
@click=${()=>
|
|
265
|
+
@click=${()=>he(r)}
|
|
266
266
|
>
|
|
267
267
|
Add
|
|
268
268
|
</button>
|
|
@@ -285,32 +285,32 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
285
285
|
</details>
|
|
286
286
|
`:t}
|
|
287
287
|
</div>
|
|
288
|
-
`}function
|
|
288
|
+
`}function ve(t,n=28){let r=t.symbol.trim().slice(0,1).toUpperCase()||`?`,i=`width:${n}px;height:${n}px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,0.08);color:rgba(255,255,255,0.92);font-weight:600;font-size:0.8em;overflow:hidden;flex-shrink:0;`;return t.logoUri?e`<span style=${i}
|
|
289
289
|
><img
|
|
290
290
|
src=${t.logoUri}
|
|
291
291
|
alt=${`${t.symbol} logo`}
|
|
292
292
|
style=${`width:${n}px;height:${n}px;object-fit:cover;display:block;`}
|
|
293
293
|
@error=${e=>{let t=e.currentTarget,n=t?.parentElement;t&&n&&(t.style.display=`none`,n.textContent=r)}}
|
|
294
294
|
/></span
|
|
295
|
-
>`:e`<span style=${i}>${r}</span>`}function
|
|
295
|
+
>`:e`<span style=${i}>${r}</span>`}function ye(e,t){let n=pe(e,t);if(n.length===0)return{options:n};let r=String(t.sendCreateForm.assetId??``).trim(),i=t.sendCreateForm.chain;return{selected:n.find(e=>e.id===r)??n.find(e=>e.chain===i&&e.isNative)??n.find(e=>e.chain===i)??n[0],options:n}}function be(e){switch(e){case`send_requested`:return`Request created`;case`send_approved`:return`Approved`;case`send_rejected`:return`Rejected`;case`send_executed`:return`Executed`;case`send_failed`:return`Failed`;default:return e.replace(/_/g,` `)}}function xe(e){let t=I(e.details??{},`actionKind`);return t===`solana_limit_order`?e.action===`send_executed`?`Limit order created`:e.action===`send_failed`?`Limit order failed`:`Limit order request`:t===`solana_limit_cancel`?e.action===`send_executed`?`Limit order cancelled`:e.action===`send_failed`?`Cancel failed`:`Cancel request`:be(e.action)}function Se(e){switch(e){case`pending`:return n.loader;case`approved`:return n.check;case`executed`:return n.send;case`failed`:case`rejected`:case`expired`:return n.x;default:return n.fileText}}function Ce(e){switch(e){case`send_requested`:return n.penLine;case`send_approved`:return n.check;case`send_rejected`:return n.x;case`send_executed`:return n.send;case`send_failed`:return n.bug;default:return n.fileText}}function X(e,t=8,n=6){let r=e.trim();return r?r.length<=t+n+1?r:`${r.slice(0,t)}...${r.slice(-n)}`:`—`}function we(e){let t=e.trim();return t?t.length<=12?t:`${t.slice(0,4)}…${t.slice(-4)}`:`TOKEN`}function Te(e){if(!e||e.isNative||!e.program)return!1;let t=we(e.program);return String(e.symbol??``).trim().toUpperCase()===t.toUpperCase()&&String(e.name??``).trim()===`Token ${t}`}async function Ee(e){let t=e.trim();if(!(!t||typeof navigator>`u`||!navigator.clipboard))try{await navigator.clipboard.writeText(t)}catch{}}function De(e){return e.replace(/[^a-zA-Z0-9_-]/g,`-`)||`wallet`}function Oe(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function ke(r,i){let a=r.trim();return a?e`<button
|
|
296
296
|
type="button"
|
|
297
297
|
class="wallet-copy-btn"
|
|
298
298
|
title=${`Copy ${i}`}
|
|
299
299
|
aria-label=${`Copy ${i}`}
|
|
300
|
-
@click=${()=>void
|
|
300
|
+
@click=${()=>void Ee(a)}
|
|
301
301
|
>
|
|
302
302
|
<span class="wallet-copy-btn__icon">${n.copy}</span>
|
|
303
|
-
</button>`:t}function
|
|
303
|
+
</button>`:t}function Ae(n){let r=String(n.value??``).trim();if(!r)return t;let i=n.display.trim()||X(r);return e`<button
|
|
304
304
|
type="button"
|
|
305
305
|
class=${`wallet-copy-text ${n.className??``}`.trim()}
|
|
306
306
|
data-copied="false"
|
|
307
307
|
title=${n.title??`Copy ${n.label}`}
|
|
308
308
|
aria-label=${`Copy ${n.label}`}
|
|
309
|
-
@click=${e=>{
|
|
309
|
+
@click=${e=>{Ee(r).then(()=>{let t=e.currentTarget;if(!t)return;let n=t.querySelector(`.wallet-copy-popover`);t.dataset.copied=`true`,n&&(n.textContent=`Copied`),window.setTimeout(()=>{n&&(n.textContent=`Copy`),t.dataset.copied=`false`},1200)})}}
|
|
310
310
|
>
|
|
311
311
|
<span class="wallet-copy-text__label">${i}</span>
|
|
312
312
|
<span class="wallet-copy-popover" aria-hidden="true">Copy</span>
|
|
313
|
-
</button>`}function
|
|
313
|
+
</button>`}function je(t,r){let i=`${t}: ${r}`;return e`<button
|
|
314
314
|
type="button"
|
|
315
315
|
class="wallet-icon-btn"
|
|
316
316
|
title=${i}
|
|
@@ -326,7 +326,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
326
326
|
aria-label=${i}
|
|
327
327
|
>
|
|
328
328
|
<span class="wallet-copy-btn__icon">${n.externalLink}</span>
|
|
329
|
-
</a>`:t}function Q(e,t,n){let r=String(n??``).trim();return!r||!e?null:t===`tx`?`https://solscan.io/tx/${encodeURIComponent(r)}`:`https://solscan.io/account/${encodeURIComponent(r)}`}function
|
|
329
|
+
</a>`:t}function Q(e,t,n){let r=String(n??``).trim();return!r||!e?null:t===`tx`?`https://solscan.io/tx/${encodeURIComponent(r)}`:`https://solscan.io/account/${encodeURIComponent(r)}`}function Me(t,n,r=`neutral`,i={}){let a=i.title??t,o=e`<div class="wallet-balance-pill__value">${n}</div>`;return i.onClick?e`<button
|
|
330
330
|
type="button"
|
|
331
331
|
class="wallet-balance-pill wallet-balance-pill--button"
|
|
332
332
|
data-tone=${r}
|
|
@@ -339,15 +339,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
339
339
|
<span class="wallet-meta-row__label">${n.label}</span>
|
|
340
340
|
<span class="wallet-meta-row__value mono">${n.value}</span>
|
|
341
341
|
<span class="wallet-meta-row__actions">
|
|
342
|
-
${n.rawValue&&n.copyLabel?
|
|
342
|
+
${n.rawValue&&n.copyLabel?ke(n.rawValue,n.copyLabel):t}
|
|
343
343
|
${Z(n.href,`Open ${n.label}`)}
|
|
344
344
|
</span>
|
|
345
|
-
</div>`}function
|
|
345
|
+
</div>`}function Ne(n){let r=n.skillGrantDraft,i=n.skillGrantRows.find(e=>e.skillId===r.skillId)??n.skillGrantRows[0],o=(r.walletIds??``).split(`,`).map(e=>e.trim()).filter(Boolean),s=n.skillGrantBusy||!r.skillId.trim()||r.actions.length===0||o.length===0;return e`
|
|
346
346
|
<div id="wallet-skill-grants" class="card wallet-panel">
|
|
347
347
|
<div class="wallet-panel__head">
|
|
348
348
|
<div>
|
|
349
349
|
<div class="card-title">Skill Grants</div>
|
|
350
|
-
<div class="card-sub">
|
|
350
|
+
<div class="card-sub">
|
|
351
|
+
Per-skill caps for Agent wallets. One wallet id is the explicit skill override;
|
|
352
|
+
multiple ids are an allowlist and normal Agent routing continues.
|
|
353
|
+
</div>
|
|
351
354
|
</div>
|
|
352
355
|
<button class="btn" ?disabled=${n.skillGrantsLoading} @click=${n.onRefresh}>
|
|
353
356
|
${n.skillGrantsLoading?`Refreshing...`:`Refresh`}
|
|
@@ -379,7 +382,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
379
382
|
${t.version?` · ${t.version}`:``}
|
|
380
383
|
</span>
|
|
381
384
|
</span>
|
|
382
|
-
<span class="muted">${
|
|
385
|
+
<span class="muted">${y(t.grantedWalletActions)}</span>
|
|
383
386
|
</button>
|
|
384
387
|
`})}
|
|
385
388
|
</div>
|
|
@@ -388,12 +391,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
388
391
|
<div>
|
|
389
392
|
<span>Requested</span>
|
|
390
393
|
<strong>
|
|
391
|
-
${
|
|
394
|
+
${b(i?.requestedWalletActions??null)}
|
|
392
395
|
</strong>
|
|
393
396
|
</div>
|
|
394
397
|
<div>
|
|
395
398
|
<span>Current grant</span>
|
|
396
|
-
<strong>${
|
|
399
|
+
<strong>${y(i?.grantedWalletActions??null)}</strong>
|
|
397
400
|
</div>
|
|
398
401
|
</div>
|
|
399
402
|
<label class="field">
|
|
@@ -505,14 +508,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
505
508
|
</div>
|
|
506
509
|
`}
|
|
507
510
|
</div>
|
|
508
|
-
`}function
|
|
511
|
+
`}function Pe(n){let r=n.status,i=u(n),a=n.namedWallets.filter(e=>S(e,n.defaultWalletId)),o=[...new Set([...(n.agents??[]).map(e=>e.id.trim()).filter(Boolean),...Object.keys(n.assignments??{})])].toSorted();return e`
|
|
509
512
|
<div class="wallet-top-grid">
|
|
510
513
|
<div id="wallet-admin-control" class="card wallet-top-card">
|
|
511
514
|
<div class="wallet-top-card__head">
|
|
512
515
|
<div>
|
|
513
516
|
<div class="wallet-top-card__title-row">
|
|
514
|
-
<div class="card-title">
|
|
515
|
-
${
|
|
517
|
+
<div class="card-title">Control UI account passkey</div>
|
|
518
|
+
${je(`Optional Control UI account passkey`,`${i.detail} Use a device passkey such as Touch ID, Windows Hello, a phone passkey, or a supported security key.`)}
|
|
516
519
|
${w(i.summary,i.detail)}
|
|
517
520
|
</div>
|
|
518
521
|
</div>
|
|
@@ -544,9 +547,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
544
547
|
`:t}
|
|
545
548
|
</div>
|
|
546
549
|
<div class="wallet-security-note" style="margin-top: 10px;">
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
+
This is optional account security for the browser Control UI. It is not requested during
|
|
551
|
+
installation or wallet creation and does not gate Agent or Mining automation. A Vault
|
|
552
|
+
approval device is a separate signer-owned feature configured only for Vault review.
|
|
550
553
|
</div>
|
|
551
554
|
${!i.enableVisible&&!i.enrollVisible?e`
|
|
552
555
|
<details class="wallet-advanced-box">
|
|
@@ -577,9 +580,72 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
577
580
|
`:t}
|
|
578
581
|
${n.passkeyError?e`<div class="callout danger">${n.passkeyError}</div>`:t}
|
|
579
582
|
</div>
|
|
583
|
+
<div id="wallet-agent-routing" class="card wallet-top-card">
|
|
584
|
+
<div class="wallet-top-card__head">
|
|
585
|
+
<div>
|
|
586
|
+
<div class="card-title">Agent wallet routing</div>
|
|
587
|
+
<div class="card-sub">
|
|
588
|
+
Explicit action → one-wallet skill override → Agent assignment → optional Default
|
|
589
|
+
Agent wallet fallback. If none exists, the action stops with Select an Agent wallet.
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
|
+
</div>
|
|
593
|
+
<div class="wallet-security-device-list" style="margin-top: 12px">
|
|
594
|
+
${o.length>0?o.map(t=>{let r=n.assignments?.[t],i=r||n.defaultWalletId||null;return e`
|
|
595
|
+
<div class="wallet-security-device-row">
|
|
596
|
+
<div>
|
|
597
|
+
<strong>${n.agents?.find(e=>e.id===t)?.name?.trim()||t}</strong>
|
|
598
|
+
<div class="wallet-security-note mono">${t}</div>
|
|
599
|
+
<div class="wallet-security-note">
|
|
600
|
+
Assigned: ${r||`none`} · Effective fallback:
|
|
601
|
+
${i||`Select an Agent wallet`}
|
|
602
|
+
</div>
|
|
603
|
+
</div>
|
|
604
|
+
<button
|
|
605
|
+
class="btn small"
|
|
606
|
+
?disabled=${n.settingsBusy||!r}
|
|
607
|
+
@click=${()=>n.onDeleteAgentAssignment?.(t)}
|
|
608
|
+
>
|
|
609
|
+
Clear assignment
|
|
610
|
+
</button>
|
|
611
|
+
</div>
|
|
612
|
+
`}):e`
|
|
613
|
+
<div class="wallet-security-note">No Agents are available yet.</div>
|
|
614
|
+
`}
|
|
615
|
+
</div>
|
|
616
|
+
<div class="wallet-card-security__grid" style="margin-top: 12px">
|
|
617
|
+
<label class="field">
|
|
618
|
+
<span>Agent</span>
|
|
619
|
+
<select
|
|
620
|
+
.value=${n.assignAgentId??``}
|
|
621
|
+
@change=${e=>n.onAssignAgentIdChange?.(e.target.value)}
|
|
622
|
+
>
|
|
623
|
+
<option value="">Select Agent</option>
|
|
624
|
+
${o.map(t=>e`<option value=${t}>${t}</option>`)}
|
|
625
|
+
</select>
|
|
626
|
+
</label>
|
|
627
|
+
<label class="field">
|
|
628
|
+
<span>Assigned Agent wallet</span>
|
|
629
|
+
<select
|
|
630
|
+
.value=${n.assignWalletId??``}
|
|
631
|
+
@change=${e=>n.onAssignWalletIdChange?.(e.target.value)}
|
|
632
|
+
>
|
|
633
|
+
<option value="">No assignment</option>
|
|
634
|
+
${a.map(t=>e`<option value=${t.id}>${t.name} (${t.id})</option>`)}
|
|
635
|
+
</select>
|
|
636
|
+
</label>
|
|
637
|
+
<button
|
|
638
|
+
class="btn primary"
|
|
639
|
+
?disabled=${n.settingsBusy||!n.assignAgentId?.trim()}
|
|
640
|
+
@click=${n.onAssignAgentWallet}
|
|
641
|
+
>
|
|
642
|
+
Save assignment
|
|
643
|
+
</button>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
580
646
|
</div>
|
|
581
|
-
`}function
|
|
582
|
-
${
|
|
647
|
+
`}function Fe(e){switch(e){case`send_executed`:case`send_approved`:return`success`;case`send_failed`:case`send_rejected`:return`danger`;case`send_requested`:return`warn`;default:return`neutral`}}function Ie(a){let c=a.status,l=a.settings,u=C(a),f=!!(a.error||a.settingsError||a.actionMessage||a.settingsMessage||u.sharedWalletWarning),m=a.auditEntries.filter(e=>[`send_requested`,`send_approved`,`send_rejected`,`send_executed`,`send_failed`].includes(e.action)).slice(0,48),h=m.length,g=Math.max(1,Math.ceil(h/s)),_=Math.min(Math.max(a.activityPage,1),g),y=(_-1)*s,b=m.slice(y,y+s),x=c?.capabilities?.canEditPolicy??!0,S=c?.capabilities?.canSend??!0,te=c?.policyDisplay,w=v(a.namedWallets,a.walletDetailsWalletId),T=O(a.namedWallets,a),D={enabled:!1,mode:`all`,percentage:100,minRaw:`1`,keepRaw:`0`,...a.miningProfile?.automation?.satSweep},j=a.namedWallets.filter(e=>e.id!==w?.id&&!!e.addresses?.solana),P=D.destinationAddress||!D.destinationWalletId?`external`:`wallet`,F=String(a.expandedWalletId??``).trim(),L=a.expandedPanel??``,R=typeof window<`u`?String(window.location?.hash??``).replace(/^#/,``):``,B=(R===`wallet-skill-grants`?`skill-grants`:[`wallet-access`,`wallet-admin-control`].includes(R)?`access`:null)??a.mainPanel??`wallets`,H=(a.providers??[]).filter(e=>(e.id===`local-socket-signer`||e.id===`turnkey`)&&e.operationsImplemented&&e.capabilities.operations.createWallet),U=a.createProvider??H[0]?.id??`local-socket-signer`,W=H.find(e=>e.id===U),G=!!(W?.enabled&&W.health.ok&&(!W.capabilities.requiresCredentials||W.credentialsConfigured)),K=a.namedWallets.find(e=>E(e.id,a)===`mining`||e.id===`mining`),q=a.createRole===`mining`&&!!K,fe=!!(a.createRole&&a.createName?.trim()&&(U!==`local-socket-signer`||a.createId?.trim()&&a.createRpcUrl?.trim())&&!q),Y=e=>{if(a.onMainPanelChange?.(e),typeof window>`u`)return;let t=new URL(window.location.href);t.hash=e===`skill-grants`?`wallet-skill-grants`:e===`access`?`wallet-access`:``,window.history.replaceState({},``,t.toString())};return e`
|
|
648
|
+
${Le(a)}
|
|
583
649
|
<style>
|
|
584
650
|
.wallet-dashboard {
|
|
585
651
|
display: grid;
|
|
@@ -1720,7 +1786,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1720
1786
|
}
|
|
1721
1787
|
</style>
|
|
1722
1788
|
<section id="wallet-dashboard" class="wallet-dashboard">
|
|
1723
|
-
${
|
|
1789
|
+
${f?e`
|
|
1724
1790
|
<div class="wallet-message-stack">
|
|
1725
1791
|
${a.error?e`<div class="callout danger">${a.error}</div>`:t}
|
|
1726
1792
|
${a.settingsError?e`<div class="callout danger">${a.settingsError}</div>`:t}
|
|
@@ -1734,28 +1800,28 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1734
1800
|
<button
|
|
1735
1801
|
class="btn"
|
|
1736
1802
|
role="tab"
|
|
1737
|
-
aria-selected=${
|
|
1738
|
-
@click=${()=>
|
|
1803
|
+
aria-selected=${B===`wallets`?`true`:`false`}
|
|
1804
|
+
@click=${()=>Y(`wallets`)}
|
|
1739
1805
|
>
|
|
1740
1806
|
Wallets
|
|
1741
1807
|
</button>
|
|
1742
1808
|
<button
|
|
1743
1809
|
class="btn"
|
|
1744
1810
|
role="tab"
|
|
1745
|
-
aria-selected=${
|
|
1746
|
-
@click=${()=>
|
|
1811
|
+
aria-selected=${B===`access`?`true`:`false`}
|
|
1812
|
+
@click=${()=>Y(`access`)}
|
|
1747
1813
|
>
|
|
1748
|
-
|
|
1814
|
+
Account Security
|
|
1749
1815
|
</button>
|
|
1750
1816
|
<button
|
|
1751
1817
|
class="btn"
|
|
1752
1818
|
role="tab"
|
|
1753
|
-
aria-selected=${
|
|
1754
|
-
@click=${()=>
|
|
1819
|
+
aria-selected=${B===`skill-grants`?`true`:`false`}
|
|
1820
|
+
@click=${()=>Y(`skill-grants`)}
|
|
1755
1821
|
>
|
|
1756
1822
|
Skill Grants
|
|
1757
1823
|
</button>
|
|
1758
|
-
${
|
|
1824
|
+
${B===`wallets`?e`
|
|
1759
1825
|
<span class="wallet-main-tabs__spacer"></span>
|
|
1760
1826
|
<button
|
|
1761
1827
|
class="btn small"
|
|
@@ -1774,7 +1840,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1774
1840
|
</button>
|
|
1775
1841
|
`:t}
|
|
1776
1842
|
</div>
|
|
1777
|
-
${
|
|
1843
|
+
${B===`skill-grants`?Ne(a):B===`access`?Pe(a):e`<div id="wallet-wallets" class="wallet-wallets-section">
|
|
1778
1844
|
<details class="wallet-create-panel">
|
|
1779
1845
|
<summary>Create a signer-owned wallet</summary>
|
|
1780
1846
|
<div class="wallet-create-grid">
|
|
@@ -1782,7 +1848,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1782
1848
|
<span>Name</span>
|
|
1783
1849
|
<input
|
|
1784
1850
|
.value=${a.createName??``}
|
|
1785
|
-
placeholder="
|
|
1851
|
+
placeholder="Agent wallet"
|
|
1786
1852
|
autocomplete="off"
|
|
1787
1853
|
@input=${e=>a.onCreateNameChange?.(e.target.value)}
|
|
1788
1854
|
/>
|
|
@@ -1791,7 +1857,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1791
1857
|
<span>Permanent wallet ID</span>
|
|
1792
1858
|
<input
|
|
1793
1859
|
.value=${a.createId??``}
|
|
1794
|
-
placeholder=${
|
|
1860
|
+
placeholder=${U===`local-socket-signer`?`agent-operations (required)`:`optional local label`}
|
|
1795
1861
|
autocomplete="off"
|
|
1796
1862
|
@input=${e=>a.onCreateIdChange?.(e.target.value)}
|
|
1797
1863
|
/>
|
|
@@ -1799,10 +1865,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1799
1865
|
<label class="field">
|
|
1800
1866
|
<span>Custody provider</span>
|
|
1801
1867
|
<select
|
|
1802
|
-
.value=${
|
|
1868
|
+
.value=${U}
|
|
1803
1869
|
@change=${e=>a.onCreateProviderChange?.(e.target.value)}
|
|
1804
1870
|
>
|
|
1805
|
-
${
|
|
1871
|
+
${H.map(t=>e`
|
|
1806
1872
|
<option value=${t.id}>
|
|
1807
1873
|
${t.label||(t.id===`local-socket-signer`?`Native Go signer`:`Turnkey`)}
|
|
1808
1874
|
</option>
|
|
@@ -1812,42 +1878,56 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1812
1878
|
<label class="field">
|
|
1813
1879
|
<span>Wallet role</span>
|
|
1814
1880
|
<select
|
|
1815
|
-
.value=${a.createRole
|
|
1881
|
+
.value=${a.createRole??``}
|
|
1816
1882
|
@change=${e=>a.onCreateRoleChange?.(e.target.value)}
|
|
1817
1883
|
>
|
|
1884
|
+
<option value="" disabled>Select a role</option>
|
|
1818
1885
|
<option value="agent">Agent — capped automation</option>
|
|
1886
|
+
<option value="mining">Mining — singleton SAT operations</option>
|
|
1819
1887
|
<option value="vault">Vault — reviewed operations only</option>
|
|
1820
1888
|
</select>
|
|
1821
1889
|
</label>
|
|
1890
|
+
${U===`local-socket-signer`?e`
|
|
1891
|
+
<label class="field">
|
|
1892
|
+
<span>Primary Solana RPC</span>
|
|
1893
|
+
<input
|
|
1894
|
+
.value=${a.createRpcUrl??``}
|
|
1895
|
+
placeholder="https://your-solana-rpc.example"
|
|
1896
|
+
autocomplete="off"
|
|
1897
|
+
spellcheck="false"
|
|
1898
|
+
@input=${e=>a.onCreateRpcUrlChange?.(e.target.value)}
|
|
1899
|
+
/>
|
|
1900
|
+
</label>
|
|
1901
|
+
`:t}
|
|
1822
1902
|
<div class="wallet-create-actions">
|
|
1823
1903
|
<button
|
|
1824
1904
|
class="btn primary"
|
|
1825
|
-
?disabled=${a.settingsBusy||!
|
|
1905
|
+
?disabled=${a.settingsBusy||!G||!fe}
|
|
1826
1906
|
@click=${a.onCreateWallet}
|
|
1827
1907
|
>
|
|
1828
1908
|
${a.settingsBusy?`Creating...`:`Create wallet`}
|
|
1829
1909
|
</button>
|
|
1830
1910
|
<span class="muted">
|
|
1831
|
-
${
|
|
1911
|
+
${q?`Mining already uses ${K?.name??K?.id}. Open, Replace, or Archive that singleton wallet.`:a.createRole?W?W.enabled?W.health.ok?W.capabilities.requiresCredentials&&!W.credentialsConfigured?`Configure restricted provider credentials before creating a wallet.`:U===`local-socket-signer`?`The Go signer generates the key; Node receives only the public address.`:`Turnkey creates the account under the configured restrictive policy.`:W.health.details||`Provider health check failed.`:`Enable this provider in Wallet Access first.`:`No production wallet-creation provider is available.`:`Choose a wallet role; Agent is never selected silently.`}
|
|
1832
1912
|
</span>
|
|
1833
1913
|
</div>
|
|
1834
1914
|
</div>
|
|
1835
1915
|
</details>
|
|
1836
1916
|
${a.balancesError?e`<div class="callout danger">${a.balancesError}</div>`:t}
|
|
1837
1917
|
<div class="wallet-grid">
|
|
1838
|
-
${T.map(r=>{let s=
|
|
1918
|
+
${T.map(r=>{let s=de(r,a,ue(a)===r.id),u=String(a.balanceWalletId??``).trim(),f=r.id===F&&L===`balance`,p=r.id===F&&L===`security`,m=((f||p)&&r.id===(u||a.balances?.walletId)?pe(r,a).filter(e=>e.chain===`solana`):[]).filter(e=>!e.isNative),h=r.addresses?.solana||``,g=`wallet-address-${De(r.id)}`,_=s,v=E(r.id,a),y=d(c),b=v===`agent`&&r.id===a.walletDetailsWalletId&&l?l.policy.directSigning:void 0,C=r.id===a.walletDetailsWalletId?l?.signerPolicy:void 0,w=r.readiness?.signer,T=r.providerId!==`local-socket-signer`||w?.networkReady===!0,O=w?.networkVersion??(typeof r.metadata?.networkVersion==`number`?r.metadata.networkVersion:void 0),M=r.providerId!==`local-socket-signer`||r.readiness?.ready===!0,oe=ee(r).includes(`solana`),N=v===`mining`?[{id:`sweep`,label:`Sweep`,title:`Mining-only sweep after SAT claims.`}]:v===`agent`?[{id:`caps`,label:`Caps`,title:`Limits used by chat, scheduled sends, swaps, and approved automation.`},{id:`schedule`,label:`Send`,title:`One Agent-wallet recurring send policy shared by chat and Wallet UI.`},{id:`automation`,label:`Auto`,title:`Stop or resume background wallet execution for this Agent wallet.`},{id:`skills`,label:`Skills`,title:`Allow reviewed skills to use this Agent wallet after separate skill grants.`}]:[{id:`caps`,label:`Caps`,title:`Vault guardrails for reviewed Wallet UI sends only.`}],I=a.policyPanel&&N.some(e=>e.id===a.policyPanel)?a.policyPanel:N[0]?.id??`caps`,R=i(a.recurringTransferCron??``),z=String(a.recurringTransferMint??``).trim(),B=z?`token`:`SOL`,V=e=>a.onPolicyDraftChange({recurringTransferCron:o({every:e.every??R.every,unit:e.unit??R.unit,time:e.time??R.time})});return e`
|
|
1839
1919
|
<div class="wallet-card" title=${r.id}>
|
|
1840
1920
|
<div class="wallet-card__header">
|
|
1841
1921
|
<div class="wallet-card__identity">
|
|
1842
1922
|
<div class="wallet-card__title-row">
|
|
1843
1923
|
<div class="wallet-card__title">${r.name}</div>
|
|
1844
|
-
${
|
|
1845
|
-
${
|
|
1846
|
-
${
|
|
1847
|
-
${
|
|
1924
|
+
${ne(r.id,a.federationBond,a.onNavigate)}
|
|
1925
|
+
${v===`mining`?ie(a.miningProfile):t}
|
|
1926
|
+
${ae({walletId:r.id,role:v,props:a})}
|
|
1927
|
+
${re({role:v,automationEnabled:b})}
|
|
1848
1928
|
</div>
|
|
1849
1929
|
<div class="wallet-card__address-row">
|
|
1850
|
-
${
|
|
1930
|
+
${h?e`
|
|
1851
1931
|
<span
|
|
1852
1932
|
class="wallet-card__wallet-icon"
|
|
1853
1933
|
title="Wallet address configured"
|
|
@@ -1856,7 +1936,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1856
1936
|
${n.wallet}
|
|
1857
1937
|
</span>
|
|
1858
1938
|
<span
|
|
1859
|
-
id=${
|
|
1939
|
+
id=${g}
|
|
1860
1940
|
class="mono wallet-card__address"
|
|
1861
1941
|
data-revealed="false"
|
|
1862
1942
|
>
|
|
@@ -1868,35 +1948,57 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1868
1948
|
class="wallet-icon-btn"
|
|
1869
1949
|
title="Show wallet address"
|
|
1870
1950
|
aria-label="Show wallet address"
|
|
1871
|
-
@click=${()=>
|
|
1951
|
+
@click=${()=>Oe(g,`******`,h)}
|
|
1872
1952
|
>
|
|
1873
1953
|
<span class="wallet-copy-btn__icon">${n.eye}</span>
|
|
1874
1954
|
</button>
|
|
1875
|
-
${
|
|
1876
|
-
${Z(Q(`solana`,`address`,
|
|
1955
|
+
${ke(h,`wallet address`)}
|
|
1956
|
+
${Z(Q(`solana`,`address`,h),`Open wallet address`)}
|
|
1877
1957
|
</span>
|
|
1878
1958
|
`:e`
|
|
1879
1959
|
<span class="muted">No wallet address</span>
|
|
1880
1960
|
`}
|
|
1881
|
-
${
|
|
1961
|
+
${Ae({value:`@wallet:${r.id}`,display:`@wallet:${r.id}`,label:`wallet handle`,title:v===`mining`?`Copy wallet handle. Mining wallets are reserved for SAT mining and SAT sweep.`:`Copy wallet handle for approved chat, skill, plugin, or scheduled wallet actions.`,className:`mono wallet-card__handle`})}
|
|
1962
|
+
${h?e`
|
|
1963
|
+
<details>
|
|
1964
|
+
<summary>Receive QR</summary>
|
|
1965
|
+
<div class="qr-wrap">
|
|
1966
|
+
<img
|
|
1967
|
+
src=${`/api/wallet/receive-qr?walletId=${encodeURIComponent(r.id)}`}
|
|
1968
|
+
alt=${`Solana receive QR for ${r.name}`}
|
|
1969
|
+
loading="lazy"
|
|
1970
|
+
/>
|
|
1971
|
+
</div>
|
|
1972
|
+
</details>
|
|
1973
|
+
`:t}
|
|
1882
1974
|
</div>
|
|
1883
1975
|
</div>
|
|
1884
1976
|
<div class="row" style="gap: 8px;">
|
|
1885
1977
|
<button
|
|
1886
|
-
class="btn small ${
|
|
1978
|
+
class="btn small ${p?`primary`:``}"
|
|
1887
1979
|
@click=${()=>a.onWalletDetailsWalletChange(r.id)}
|
|
1888
1980
|
>
|
|
1889
1981
|
Policy
|
|
1890
1982
|
</button>
|
|
1983
|
+
${r.providerId===`local-socket-signer`?e`
|
|
1984
|
+
<button
|
|
1985
|
+
class="btn small danger"
|
|
1986
|
+
?disabled=${a.settingsBusy||!a.onArchiveWallet}
|
|
1987
|
+
title="The server requires Mining runtime obligations to be settled and locks the signer key deny-all. Confirm external balances and recovery before archiving."
|
|
1988
|
+
@click=${()=>a.onArchiveWallet?.(r.id)}
|
|
1989
|
+
>
|
|
1990
|
+
${v===`mining`?`Archive Mining`:`Archive`}
|
|
1991
|
+
</button>
|
|
1992
|
+
`:t}
|
|
1891
1993
|
</div>
|
|
1892
1994
|
</div>
|
|
1893
1995
|
<div class="wallet-card__balance-row">
|
|
1894
1996
|
<div class="wallet-card__balance-main">
|
|
1895
|
-
${
|
|
1997
|
+
${Me(`SOL`,_,`neutral`,{title:`Solana`,onClick:r.addresses?.solana?()=>(a.onWalletBalanceWalletChange??a.onWalletDetailsWalletChange)(r.id):void 0})}
|
|
1896
1998
|
<button
|
|
1897
1999
|
class="btn small primary wallet-card__send-btn"
|
|
1898
|
-
?disabled=${!
|
|
1899
|
-
title=${
|
|
2000
|
+
?disabled=${!S||!M}
|
|
2001
|
+
title=${M?`Send from this wallet`:`Setup incomplete: live signer key, role baseline, or network readiness is not confirmed`}
|
|
1900
2002
|
@click=${()=>a.onSendModalOpen(r.id)}
|
|
1901
2003
|
>
|
|
1902
2004
|
Send
|
|
@@ -1906,28 +2008,28 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1906
2008
|
<button
|
|
1907
2009
|
type="button"
|
|
1908
2010
|
class="wallet-balance-link"
|
|
1909
|
-
data-active=${
|
|
2011
|
+
data-active=${f?`true`:`false`}
|
|
1910
2012
|
@click=${()=>(a.onWalletBalanceWalletChange??a.onWalletDetailsWalletChange)(r.id)}
|
|
1911
2013
|
>
|
|
1912
2014
|
<span class="wallet-balance-link__icon">${n.barChart}</span>
|
|
1913
2015
|
<span>Balance</span>
|
|
1914
2016
|
</button>
|
|
1915
2017
|
`:t}
|
|
1916
|
-
${
|
|
2018
|
+
${m.length>0?e`
|
|
1917
2019
|
<div class="wallet-token-details">
|
|
1918
2020
|
<div class="wallet-token-list">
|
|
1919
|
-
${
|
|
2021
|
+
${m.map(n=>e`
|
|
1920
2022
|
<div class="row" style="gap: 8px; align-items: center;">
|
|
1921
2023
|
<button
|
|
1922
2024
|
class="btn small"
|
|
1923
2025
|
style="display: inline-flex; gap: 8px; align-items: center;"
|
|
1924
|
-
?disabled=${!
|
|
2026
|
+
?disabled=${!S||!M}
|
|
1925
2027
|
@click=${()=>a.onSendModalOpen(r.id,n.id)}
|
|
1926
2028
|
>
|
|
1927
|
-
${
|
|
2029
|
+
${ve(n,20)}
|
|
1928
2030
|
<span>${n.symbol}</span>
|
|
1929
2031
|
<span class="muted"
|
|
1930
|
-
>${
|
|
2032
|
+
>${J(n.amountDisplay)}</span
|
|
1931
2033
|
>
|
|
1932
2034
|
</button>
|
|
1933
2035
|
${n.program?Z(Q(`solana`,`address`,n.program),`Open ${n.symbol} mint`):t}
|
|
@@ -1935,54 +2037,121 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1935
2037
|
`)}
|
|
1936
2038
|
</div>
|
|
1937
2039
|
</div>
|
|
1938
|
-
`:
|
|
2040
|
+
`:f&&a.balancesLoading?e`
|
|
1939
2041
|
<div class="muted" style="font-size: 0.85em">Loading balance...</div>
|
|
1940
|
-
`:
|
|
2042
|
+
`:f&&r.addresses?.solana?e`
|
|
1941
2043
|
<div class="muted" style="font-size: 0.85em">Balance loaded. No SPL token balances detected.</div>
|
|
1942
2044
|
`:t}
|
|
1943
2045
|
</div>
|
|
1944
|
-
${
|
|
2046
|
+
${p?e`
|
|
1945
2047
|
<div id="wallet-security-card" class="wallet-card-security">
|
|
1946
2048
|
<div class="wallet-policy-tabs" role="tablist" aria-label="Wallet policy sections">
|
|
1947
|
-
${
|
|
2049
|
+
${N.map(t=>e`
|
|
1948
2050
|
<button
|
|
1949
2051
|
type="button"
|
|
1950
2052
|
class="wallet-policy-tab"
|
|
1951
|
-
data-active=${
|
|
2053
|
+
data-active=${I===t.id?`true`:`false`}
|
|
1952
2054
|
title=${t.title}
|
|
1953
2055
|
role="tab"
|
|
1954
|
-
aria-selected=${
|
|
2056
|
+
aria-selected=${I===t.id?`true`:`false`}
|
|
1955
2057
|
@click=${()=>a.onPolicyPanelChange?.(t.id)}
|
|
1956
2058
|
>
|
|
1957
2059
|
${t.label}
|
|
1958
2060
|
</button>
|
|
1959
2061
|
`)}
|
|
1960
2062
|
</div>
|
|
1961
|
-
${
|
|
2063
|
+
${r.providerId===`local-socket-signer`?e`
|
|
1962
2064
|
<div
|
|
1963
|
-
class="callout ${
|
|
2065
|
+
class="callout ${T?`success`:`warn`}"
|
|
2066
|
+
style="margin-top: 10px"
|
|
2067
|
+
data-testid="wallet-signer-network-status"
|
|
2068
|
+
>
|
|
2069
|
+
<strong
|
|
2070
|
+
>Signer RPC: ${T?`ready${O?` · version ${O}`:``}`:`not ready`}</strong
|
|
2071
|
+
>
|
|
2072
|
+
<div>
|
|
2073
|
+
Enter one primary RPC. The Go signer verifies its genesis;
|
|
2074
|
+
ordinary setup never asks for a Solana network or a second
|
|
2075
|
+
RPC.
|
|
2076
|
+
</div>
|
|
2077
|
+
<div class="wallet-card-security__grid" style="margin-top: 8px">
|
|
2078
|
+
<label class="field">
|
|
2079
|
+
<span>Replace primary Solana RPC</span>
|
|
2080
|
+
<input
|
|
2081
|
+
.value=${a.rpcUrl??``}
|
|
2082
|
+
placeholder="https://your-solana-rpc.example"
|
|
2083
|
+
autocomplete="off"
|
|
2084
|
+
spellcheck="false"
|
|
2085
|
+
@input=${e=>a.onRpcUrlChange?.(e.target.value)}
|
|
2086
|
+
/>
|
|
2087
|
+
</label>
|
|
2088
|
+
<button
|
|
2089
|
+
class="btn small"
|
|
2090
|
+
?disabled=${a.settingsBusy||!a.rpcUrl?.trim()||!a.onSaveWalletRpc}
|
|
2091
|
+
@click=${a.onSaveWalletRpc}
|
|
2092
|
+
>
|
|
2093
|
+
Verify and save RPC
|
|
2094
|
+
</button>
|
|
2095
|
+
</div>
|
|
2096
|
+
</div>
|
|
2097
|
+
`:t}
|
|
2098
|
+
${C?e`
|
|
2099
|
+
<div
|
|
2100
|
+
class="callout ${C.state===`acknowledged`?`success`:`warn`}"
|
|
1964
2101
|
style="margin-top: 10px"
|
|
1965
2102
|
data-testid="wallet-signer-policy-status"
|
|
1966
2103
|
>
|
|
1967
|
-
<strong>Native signer policy: ${
|
|
1968
|
-
${
|
|
2104
|
+
<strong>Native signer policy: ${C.state}</strong>
|
|
2105
|
+
${C.state===`locked`?e`
|
|
1969
2106
|
<div>
|
|
1970
|
-
This wallet
|
|
1971
|
-
|
|
2107
|
+
This pre-role-baseline wallet remains deny-all. Review its immutable role, then select Activate
|
|
2108
|
+
role baseline with the native wallet CLI. No root policy helper is required.
|
|
1972
2109
|
</div>
|
|
1973
2110
|
`:t}
|
|
1974
|
-
${
|
|
2111
|
+
${C.version&&C.hash?e`
|
|
1975
2112
|
<div>
|
|
1976
|
-
Version ${
|
|
2113
|
+
Version ${C.version} ·
|
|
1977
2114
|
<span class="mono" style="overflow-wrap: anywhere"
|
|
1978
|
-
>${
|
|
2115
|
+
>${C.hash}</span
|
|
1979
2116
|
>
|
|
1980
2117
|
</div>
|
|
1981
2118
|
`:t}
|
|
1982
|
-
${
|
|
2119
|
+
${C.guidance?e`<div>${C.guidance}</div>`:t}
|
|
2120
|
+
</div>
|
|
2121
|
+
`:t}
|
|
2122
|
+
${w?e`
|
|
2123
|
+
<div
|
|
2124
|
+
class="callout ${w.ready?`success`:`warn`}"
|
|
2125
|
+
style="margin-top: 10px"
|
|
2126
|
+
data-testid="wallet-live-readiness"
|
|
2127
|
+
>
|
|
2128
|
+
<strong
|
|
2129
|
+
>Role readiness:
|
|
2130
|
+
${w.ready?`ready`:`setup incomplete`}</strong
|
|
2131
|
+
>
|
|
2132
|
+
<div>
|
|
2133
|
+
${w.role} baseline v${w.baselineVersion}
|
|
2134
|
+
· ${w.operationLane}
|
|
2135
|
+
</div>
|
|
2136
|
+
<div>
|
|
2137
|
+
Policy v${w.policyVersion} · Network
|
|
2138
|
+
v${w.networkVersion}
|
|
2139
|
+
</div>
|
|
2140
|
+
</div>
|
|
2141
|
+
`:t}
|
|
2142
|
+
${v===`vault`&&r.providerId===`local-socket-signer`?e`
|
|
2143
|
+
<div class="callout" style="margin-top: 10px">
|
|
2144
|
+
<strong>Vault approval device · ${y.summary}</strong>
|
|
2145
|
+
<div>${y.detail}</div>
|
|
2146
|
+
${y.setupCommand?e`<div class="mono" style="overflow-wrap: anywhere">
|
|
2147
|
+
${y.setupCommand}
|
|
2148
|
+
</div>`:t}
|
|
2149
|
+
<div>
|
|
2150
|
+
This optional signer-owned device never changes Agent or Mining automation.
|
|
2151
|
+
</div>
|
|
1983
2152
|
</div>
|
|
1984
2153
|
`:t}
|
|
1985
|
-
${
|
|
2154
|
+
${v===`mining`?I===`sweep`?e`
|
|
1986
2155
|
<div class="field">
|
|
1987
2156
|
<div class="wallet-card-security__grid">
|
|
1988
2157
|
<label class="field">
|
|
@@ -2013,7 +2182,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2013
2182
|
>
|
|
2014
2183
|
<option
|
|
2015
2184
|
value="__external__"
|
|
2016
|
-
?selected=${
|
|
2185
|
+
?selected=${P===`external`}
|
|
2017
2186
|
>
|
|
2018
2187
|
External
|
|
2019
2188
|
</option>
|
|
@@ -2027,7 +2196,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2027
2196
|
`)}
|
|
2028
2197
|
</select>
|
|
2029
2198
|
</label>
|
|
2030
|
-
${
|
|
2199
|
+
${P===`external`?e`
|
|
2031
2200
|
<label class="field">
|
|
2032
2201
|
<span>Address</span>
|
|
2033
2202
|
<input
|
|
@@ -2098,15 +2267,15 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2098
2267
|
</div>
|
|
2099
2268
|
</div>
|
|
2100
2269
|
`:t:e`
|
|
2101
|
-
${l&&
|
|
2102
|
-
${
|
|
2270
|
+
${l&&I===`caps`?_e({props:a,settings:l,policyDisplay:te,cardRole:v,selectedWalletId:r.id,cardWalletCanSpendSolana:oe,selectedWalletTokens:m,canEditPolicy:x}):t}
|
|
2271
|
+
${v===`agent`&&I===`schedule`?e`
|
|
2103
2272
|
<div class="field">
|
|
2104
2273
|
<div class="wallet-card-security__grid">
|
|
2105
2274
|
<label class="field">
|
|
2106
2275
|
<span>Status</span>
|
|
2107
2276
|
<select
|
|
2108
2277
|
.value=${a.recurringTransferEnabled?`enabled`:`disabled`}
|
|
2109
|
-
?disabled=${a.settingsBusy||!
|
|
2278
|
+
?disabled=${a.settingsBusy||!x}
|
|
2110
2279
|
@change=${e=>a.onPolicyDraftChange({recurringTransferEnabled:e.currentTarget.value===`enabled`})}
|
|
2111
2280
|
>
|
|
2112
2281
|
<option value="disabled">Off</option>
|
|
@@ -2118,7 +2287,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2118
2287
|
<input
|
|
2119
2288
|
placeholder="@wallet:vault or Solana address"
|
|
2120
2289
|
.value=${a.recurringTransferDestination}
|
|
2121
|
-
?disabled=${a.settingsBusy||!
|
|
2290
|
+
?disabled=${a.settingsBusy||!x}
|
|
2122
2291
|
@input=${e=>a.onPolicyDraftChange({recurringTransferDestination:e.currentTarget.value})}
|
|
2123
2292
|
/>
|
|
2124
2293
|
</label>
|
|
@@ -2127,18 +2296,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2127
2296
|
<input
|
|
2128
2297
|
placeholder="Blank for SOL"
|
|
2129
2298
|
.value=${a.recurringTransferMint}
|
|
2130
|
-
?disabled=${a.settingsBusy||!
|
|
2299
|
+
?disabled=${a.settingsBusy||!x}
|
|
2131
2300
|
@input=${e=>a.onPolicyDraftChange({recurringTransferMint:e.currentTarget.value})}
|
|
2132
2301
|
/>
|
|
2133
2302
|
</label>
|
|
2134
|
-
${
|
|
2303
|
+
${z?e`
|
|
2135
2304
|
<label class="field">
|
|
2136
2305
|
<span>Decimals</span>
|
|
2137
2306
|
<input
|
|
2138
2307
|
inputmode="numeric"
|
|
2139
2308
|
placeholder="6"
|
|
2140
2309
|
.value=${a.recurringTransferDecimals}
|
|
2141
|
-
?disabled=${a.settingsBusy||!
|
|
2310
|
+
?disabled=${a.settingsBusy||!x}
|
|
2142
2311
|
@input=${e=>a.onPolicyDraftChange({recurringTransferDecimals:e.currentTarget.value})}
|
|
2143
2312
|
/>
|
|
2144
2313
|
</label>
|
|
@@ -2147,7 +2316,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2147
2316
|
<span>Amount mode</span>
|
|
2148
2317
|
<select
|
|
2149
2318
|
.value=${a.recurringTransferAmountMode}
|
|
2150
|
-
?disabled=${a.settingsBusy||!
|
|
2319
|
+
?disabled=${a.settingsBusy||!x}
|
|
2151
2320
|
@change=${e=>a.onPolicyDraftChange({recurringTransferAmountMode:e.currentTarget.value===`percentage`?`percentage`:`fixed`})}
|
|
2152
2321
|
>
|
|
2153
2322
|
<option value="fixed">Fixed</option>
|
|
@@ -2161,25 +2330,25 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2161
2330
|
inputmode="numeric"
|
|
2162
2331
|
placeholder="40"
|
|
2163
2332
|
.value=${a.recurringTransferPercentage}
|
|
2164
|
-
?disabled=${a.settingsBusy||!
|
|
2333
|
+
?disabled=${a.settingsBusy||!x}
|
|
2165
2334
|
@input=${e=>a.onPolicyDraftChange({recurringTransferPercentage:e.currentTarget.value})}
|
|
2166
2335
|
/>
|
|
2167
2336
|
</label>
|
|
2168
2337
|
<label class="field">
|
|
2169
2338
|
<span>Minimum</span>
|
|
2170
2339
|
<input
|
|
2171
|
-
placeholder=${`0.01 ${
|
|
2340
|
+
placeholder=${`0.01 ${B}`}
|
|
2172
2341
|
.value=${a.recurringTransferMinAmount}
|
|
2173
|
-
?disabled=${a.settingsBusy||!
|
|
2342
|
+
?disabled=${a.settingsBusy||!x}
|
|
2174
2343
|
@input=${e=>a.onPolicyDraftChange({recurringTransferMinAmount:e.currentTarget.value})}
|
|
2175
2344
|
/>
|
|
2176
2345
|
</label>
|
|
2177
2346
|
<label class="field">
|
|
2178
2347
|
<span>Keep</span>
|
|
2179
2348
|
<input
|
|
2180
|
-
placeholder=${`0 ${
|
|
2349
|
+
placeholder=${`0 ${B}`}
|
|
2181
2350
|
.value=${a.recurringTransferKeepAmount}
|
|
2182
|
-
?disabled=${a.settingsBusy||!
|
|
2351
|
+
?disabled=${a.settingsBusy||!x}
|
|
2183
2352
|
@input=${e=>a.onPolicyDraftChange({recurringTransferKeepAmount:e.currentTarget.value})}
|
|
2184
2353
|
/>
|
|
2185
2354
|
</label>
|
|
@@ -2187,9 +2356,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2187
2356
|
<label class="field">
|
|
2188
2357
|
<span>Amount</span>
|
|
2189
2358
|
<input
|
|
2190
|
-
placeholder=${`0.1 ${
|
|
2359
|
+
placeholder=${`0.1 ${B}`}
|
|
2191
2360
|
.value=${a.recurringTransferAmount}
|
|
2192
|
-
?disabled=${a.settingsBusy||!
|
|
2361
|
+
?disabled=${a.settingsBusy||!x}
|
|
2193
2362
|
@input=${e=>a.onPolicyDraftChange({recurringTransferAmount:e.currentTarget.value})}
|
|
2194
2363
|
/>
|
|
2195
2364
|
</label>
|
|
@@ -2201,17 +2370,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2201
2370
|
min="1"
|
|
2202
2371
|
step="1"
|
|
2203
2372
|
placeholder="1"
|
|
2204
|
-
.value=${
|
|
2205
|
-
?disabled=${a.settingsBusy||!
|
|
2206
|
-
@input=${e=>
|
|
2373
|
+
.value=${R.every}
|
|
2374
|
+
?disabled=${a.settingsBusy||!x}
|
|
2375
|
+
@input=${e=>V({every:e.currentTarget.value})}
|
|
2207
2376
|
/>
|
|
2208
2377
|
</label>
|
|
2209
2378
|
<label class="field">
|
|
2210
2379
|
<span>Unit</span>
|
|
2211
2380
|
<select
|
|
2212
|
-
.value=${
|
|
2213
|
-
?disabled=${a.settingsBusy||!
|
|
2214
|
-
@change=${e=>
|
|
2381
|
+
.value=${R.unit}
|
|
2382
|
+
?disabled=${a.settingsBusy||!x}
|
|
2383
|
+
@change=${e=>V({unit:e.currentTarget.value})}
|
|
2215
2384
|
>
|
|
2216
2385
|
<option value="minutes">minutes</option>
|
|
2217
2386
|
<option value="hours">hours</option>
|
|
@@ -2219,14 +2388,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2219
2388
|
<option value="months">months</option>
|
|
2220
2389
|
</select>
|
|
2221
2390
|
</label>
|
|
2222
|
-
${
|
|
2391
|
+
${R.unit===`days`||R.unit===`months`?e`
|
|
2223
2392
|
<label class="field">
|
|
2224
2393
|
<span>At</span>
|
|
2225
2394
|
<input
|
|
2226
2395
|
type="time"
|
|
2227
|
-
.value=${
|
|
2228
|
-
?disabled=${a.settingsBusy||!
|
|
2229
|
-
@input=${e=>
|
|
2396
|
+
.value=${R.time}
|
|
2397
|
+
?disabled=${a.settingsBusy||!x}
|
|
2398
|
+
@input=${e=>V({time:e.currentTarget.value})}
|
|
2230
2399
|
/>
|
|
2231
2400
|
</label>
|
|
2232
2401
|
`:t}
|
|
@@ -2235,7 +2404,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2235
2404
|
<input
|
|
2236
2405
|
placeholder="America/Chicago"
|
|
2237
2406
|
.value=${a.recurringTransferTz}
|
|
2238
|
-
?disabled=${a.settingsBusy||!
|
|
2407
|
+
?disabled=${a.settingsBusy||!x}
|
|
2239
2408
|
@input=${e=>a.onPolicyDraftChange({recurringTransferTz:e.currentTarget.value})}
|
|
2240
2409
|
/>
|
|
2241
2410
|
</label>
|
|
@@ -2244,26 +2413,26 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2244
2413
|
<input
|
|
2245
2414
|
placeholder="Daily transfer"
|
|
2246
2415
|
.value=${a.recurringTransferName}
|
|
2247
|
-
?disabled=${a.settingsBusy||!
|
|
2416
|
+
?disabled=${a.settingsBusy||!x}
|
|
2248
2417
|
@input=${e=>a.onPolicyDraftChange({recurringTransferName:e.currentTarget.value})}
|
|
2249
2418
|
/>
|
|
2250
2419
|
</label>
|
|
2251
2420
|
<button
|
|
2252
2421
|
class="btn"
|
|
2253
|
-
?disabled=${a.settingsBusy||!
|
|
2422
|
+
?disabled=${a.settingsBusy||!x}
|
|
2254
2423
|
@click=${a.onSavePolicy}
|
|
2255
2424
|
>
|
|
2256
2425
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
2257
2426
|
</button>
|
|
2258
2427
|
</div>
|
|
2259
|
-
${
|
|
2428
|
+
${R.custom?e`
|
|
2260
2429
|
<div class="wallet-security-note" style="margin-top: 8px">
|
|
2261
2430
|
Existing custom schedule is preserved until you edit Every, Unit, or At.
|
|
2262
2431
|
</div>
|
|
2263
2432
|
`:t}
|
|
2264
2433
|
</div>
|
|
2265
2434
|
`:t}
|
|
2266
|
-
${
|
|
2435
|
+
${v===`agent`&&I===`automation`?e`
|
|
2267
2436
|
${e`
|
|
2268
2437
|
<div class="field">
|
|
2269
2438
|
<div class="wallet-spend-limit-row">
|
|
@@ -2271,7 +2440,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2271
2440
|
<span>Status</span>
|
|
2272
2441
|
<select
|
|
2273
2442
|
.value=${a.policyAutoEnabled??l?.policy.directSigning??!0?`enabled`:`disabled`}
|
|
2274
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2443
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2275
2444
|
@change=${e=>a.onPolicyDraftChange({directSigning:e.currentTarget.value===`enabled`})}
|
|
2276
2445
|
>
|
|
2277
2446
|
<option value="disabled">Off</option>
|
|
@@ -2280,7 +2449,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2280
2449
|
</label>
|
|
2281
2450
|
<button
|
|
2282
2451
|
class="btn"
|
|
2283
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2452
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2284
2453
|
@click=${a.onSavePolicy}
|
|
2285
2454
|
>
|
|
2286
2455
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
@@ -2289,7 +2458,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2289
2458
|
</div>
|
|
2290
2459
|
`}
|
|
2291
2460
|
`:t}
|
|
2292
|
-
${
|
|
2461
|
+
${v===`agent`&&I===`skills`?e`
|
|
2293
2462
|
${e`
|
|
2294
2463
|
<div class="field">
|
|
2295
2464
|
<div class="wallet-spend-limit-row">
|
|
@@ -2297,7 +2466,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2297
2466
|
<span>Status</span>
|
|
2298
2467
|
<select
|
|
2299
2468
|
.value=${a.policySkillsEnabled??l?.policy.skillsEnabled??!1?`enabled`:`disabled`}
|
|
2300
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2469
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2301
2470
|
@change=${e=>a.onPolicyDraftChange({skillsEnabled:e.currentTarget.value===`enabled`})}
|
|
2302
2471
|
>
|
|
2303
2472
|
<option value="disabled">Off</option>
|
|
@@ -2306,7 +2475,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2306
2475
|
</label>
|
|
2307
2476
|
<button
|
|
2308
2477
|
class="btn"
|
|
2309
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2478
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2310
2479
|
@click=${a.onSavePolicy}
|
|
2311
2480
|
>
|
|
2312
2481
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
@@ -2331,7 +2500,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2331
2500
|
<div>
|
|
2332
2501
|
<div class="card-title wallet-title-with-help">
|
|
2333
2502
|
<span>Wallet Approvals</span>
|
|
2334
|
-
${
|
|
2503
|
+
${p(`Reviewed sends, Vault actions, and federation signatures appear here. The signer executes only the exact prepared operation; Vault review may require its separately configured approval device.`)}
|
|
2335
2504
|
</div>
|
|
2336
2505
|
<div class="card-sub">Pending and recent reviewed wallet operations.</div>
|
|
2337
2506
|
</div>
|
|
@@ -2363,7 +2532,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2363
2532
|
<div>Created</div>
|
|
2364
2533
|
<div>Action</div>
|
|
2365
2534
|
</div>
|
|
2366
|
-
${a.approvals.map(n=>{let i=
|
|
2535
|
+
${a.approvals.map(n=>{let i=V({request:n,balances:a.balances}),o=se({request:n,namedWallets:a.namedWallets}),s=Array.isArray(n.payload.routeProgramIds)?n.payload.routeProgramIds.map(e=>String(e).trim()).filter(Boolean):[];return e`
|
|
2367
2536
|
<div
|
|
2368
2537
|
id=${r(`wallet-approval`,n.id)}
|
|
2369
2538
|
class="table-row"
|
|
@@ -2382,7 +2551,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2382
2551
|
<span
|
|
2383
2552
|
style="width: 16px; height: 16px; display: inline-flex; color: ${n.status===`failed`||n.status===`rejected`||n.status===`expired`?`rgba(248,113,113,0.95)`:n.status===`executed`||n.status===`approved`?`rgba(104,211,145,0.95)`:`rgba(96,165,250,0.95)`};"
|
|
2384
2553
|
>
|
|
2385
|
-
${
|
|
2554
|
+
${Se(n.status)}
|
|
2386
2555
|
</span>
|
|
2387
2556
|
<span style="font-size: 0.9em; font-weight: 600; text-transform: lowercase;">
|
|
2388
2557
|
${n.status}
|
|
@@ -2486,45 +2655,45 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2486
2655
|
</div>
|
|
2487
2656
|
`}
|
|
2488
2657
|
</div>
|
|
2489
|
-
${
|
|
2658
|
+
${B===`wallets`?e`<div class="card wallet-activity-card" style="grid-column: 1 / -1;">
|
|
2490
2659
|
<div class="wallet-activity-card__head">
|
|
2491
2660
|
<div>
|
|
2492
2661
|
<div class="card-title">Wallet Activity</div>
|
|
2493
2662
|
<div class="card-sub">Recent send requests and outcomes.</div>
|
|
2494
2663
|
</div>
|
|
2495
|
-
${
|
|
2496
|
-
Showing ${
|
|
2664
|
+
${h>0?e`<div class="wallet-status-chip">
|
|
2665
|
+
Showing ${y+1}-${Math.min(y+s,h)} of ${h}
|
|
2497
2666
|
</div>`:t}
|
|
2498
2667
|
</div>
|
|
2499
|
-
${
|
|
2668
|
+
${h>0?e`
|
|
2500
2669
|
<div class="wallet-activity-toolbar">
|
|
2501
2670
|
<div class="wallet-chip-row">
|
|
2502
|
-
<span class="wallet-status-chip">Page ${
|
|
2671
|
+
<span class="wallet-status-chip">Page ${_} / ${g}</span>
|
|
2503
2672
|
</div>
|
|
2504
2673
|
<div class="row" style="gap: 8px; flex-wrap: wrap;">
|
|
2505
2674
|
<button
|
|
2506
2675
|
class="btn small"
|
|
2507
|
-
?disabled=${
|
|
2508
|
-
@click=${()=>a.onActivityPageChange(
|
|
2676
|
+
?disabled=${_<=1}
|
|
2677
|
+
@click=${()=>a.onActivityPageChange(_-1)}
|
|
2509
2678
|
>
|
|
2510
2679
|
Prev
|
|
2511
2680
|
</button>
|
|
2512
2681
|
<button
|
|
2513
2682
|
class="btn small"
|
|
2514
|
-
?disabled=${g
|
|
2515
|
-
@click=${()=>a.onActivityPageChange(
|
|
2683
|
+
?disabled=${_>=g}
|
|
2684
|
+
@click=${()=>a.onActivityPageChange(_+1)}
|
|
2516
2685
|
>
|
|
2517
2686
|
Next
|
|
2518
2687
|
</button>
|
|
2519
2688
|
</div>
|
|
2520
2689
|
</div>
|
|
2521
2690
|
<div class="wallet-activity-list">
|
|
2522
|
-
${
|
|
2691
|
+
${b.map(n=>{let r=n.details??{},i=N(r.chain),o=i===`solana`?I(r,`program`):``,s=z({details:r,balances:a.balances}),c=M(r.to,`n/a`),l=M(r.txHash||r.txId,``),u=M(r.reason,``),d=M(r.orderId,``),f=M(r.vaultPubkey,``),p=M(r.executionProvider,``),m=Fe(n.action);return e`
|
|
2523
2692
|
<div class="wallet-activity-item" data-tone=${m}>
|
|
2524
2693
|
<div class="wallet-activity-item__head">
|
|
2525
2694
|
<div class="wallet-activity-item__title">
|
|
2526
|
-
<span style="color: ${m===`danger`?`var(--danger)`:m===`success`?`var(--ok)`:m===`warn`?`var(--warn)`:`var(--muted)`};">${
|
|
2527
|
-
<span>${
|
|
2695
|
+
<span style="color: ${m===`danger`?`var(--danger)`:m===`success`?`var(--ok)`:m===`warn`?`var(--warn)`:`var(--muted)`};">${Ce(n.action)}</span>
|
|
2696
|
+
<span>${xe(n)}</span>
|
|
2528
2697
|
</div>
|
|
2529
2698
|
<div class="wallet-activity-item__time">
|
|
2530
2699
|
${new Date(n.at).toLocaleString()}
|
|
@@ -2532,7 +2701,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2532
2701
|
</div>
|
|
2533
2702
|
<div class="wallet-activity-item__facts">
|
|
2534
2703
|
${o?t:e`<span class="wallet-status-chip"
|
|
2535
|
-
>${i?
|
|
2704
|
+
>${i?oe(i):`n/a`}</span
|
|
2536
2705
|
>`}
|
|
2537
2706
|
<span class="wallet-status-chip">${s}</span>
|
|
2538
2707
|
${p?e`<span class="wallet-status-chip">${p}</span>`:t}
|
|
@@ -2557,7 +2726,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2557
2726
|
</div>
|
|
2558
2727
|
`:t}
|
|
2559
2728
|
</section>
|
|
2560
|
-
`}function
|
|
2729
|
+
`}function Le(n){if(!n.sendModalVisible)return t;let r=n.status?.capabilities?.canSend??!0,i=n.namedWallets.find(e=>e.id===n.sendCreateForm.walletId),{selected:a,options:o}=ye(i,n),s=[...new Set(o.map(e=>e.chain))],c=a?.chain??s[0]??n.sendCreateForm.chain,l=s.includes(n.sendCreateForm.chain)?n.sendCreateForm.chain:c,u=q(i,l),d=a&&a.chain===l?a:void 0,f=d?.symbol||`SOL`,p=i?`${i.name} (@wallet:${i.id})`:`Default wallet`;return e`
|
|
2561
2730
|
<div class="modal-overlay" @click=${n.onSendModalClose}>
|
|
2562
2731
|
<div class="modal-card card" @click=${e=>e.stopPropagation()}>
|
|
2563
2732
|
<div class="row" style="justify-content: space-between; align-items: center; margin-bottom: 16px;">
|
|
@@ -2584,7 +2753,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2584
2753
|
>
|
|
2585
2754
|
${o.map(t=>e`
|
|
2586
2755
|
<option value=${t.id} ?selected=${t.id===d?.id}>
|
|
2587
|
-
${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${
|
|
2756
|
+
${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${J(t.amountDisplay)}
|
|
2588
2757
|
</option>
|
|
2589
2758
|
`)}
|
|
2590
2759
|
</select>
|
|
@@ -2728,5 +2897,5 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2728
2897
|
}
|
|
2729
2898
|
}
|
|
2730
2899
|
</style>
|
|
2731
|
-
`}export{u as describeAdminControlShortcut,T as describeAgentDefaultAction,
|
|
2732
|
-
//# sourceMappingURL=wallet-
|
|
2900
|
+
`}export{u as describeAdminControlShortcut,T as describeAgentDefaultAction,d as describeVaultSignerApproval,m as describeWalletAutomationPolicySummary,te as describeWalletRoleBadges,f as describeWalletSendFlow,g as hasWalletBalanceValue,O as orderWalletsForDisplay,Ie as renderWallet,h as resolveActiveMiningWalletId,C as resolveOperatorWalletRoles};
|
|
2901
|
+
//# sourceMappingURL=wallet-CRIhDQbW.js.map
|