@fased/fased 0.1.66 → 0.1.68
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 +18 -0
- package/README.md +4 -0
- package/config/signer-protocol-v2.json +4 -0
- 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 +33 -2
- package/dist/commands/onboard.js +0 -8
- package/dist/commands/wallet.js +485 -58
- package/dist/control-ui/assets/{app-DYxADzeH.js → app-DyPTS0oM.js} +1526 -1526
- package/dist/control-ui/assets/{index-vw_10Zeo.js → index-Cu13yYHr.js} +3 -3
- package/dist/control-ui/assets/{wallet-DvStR_AT.js → wallet-ByKBcYhm.js} +272 -188
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/gateway/server-http.js +349 -47
- package/dist/infra/runtime-guard.js +16 -0
- 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-BFLoas5R.js → audio-preflight-_FVQjR1r.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-TErs62MC.js → chunk-items-LH4uKSnh.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-BPnaDBwZ.js → config-schema-DjU_uD-6.js} +192 -94
- 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 +16 -16
- 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-FuBPk-AL.js → monitor-DUMMbG4h.js} +34 -33
- package/dist/plugin-sdk/{monitor-sW6dQdX1.js → monitor-DXIM16Hj.js} +44 -43
- package/dist/plugin-sdk/{openresponses-http-CVZq0H-P.js → openresponses-http-C8lKwta1.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-L6L6L2YF.d.ts → pairing-message-mKO92L-M.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-natjh3rm.js → pw-ai-DJ_gTc4M.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-DczkvPxn.js → runtime-dependency-nup8niQL.js} +9 -9
- package/dist/plugin-sdk/sat-runtime.d.ts +18 -2
- 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-BZISDxDd.js → slack-B-nOOLM0.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-B0aPv6Lg.js → sticker-cache-BLiId8Em.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-H3gePEn6.js → telegram-actions-1X9A32Dn.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-d1CmFAnJ.d.ts → tmp-fased-dir-BkpWlGUe.d.ts} +7 -1
- package/dist/plugin-sdk/{types-DUjYaWB2.d.ts → types-B-zL9gSv.d.ts} +1 -1
- package/dist/plugin-sdk/{types-xWjHXl1z.d.ts → types-DtCOO_hW.d.ts} +1 -1
- package/dist/plugin-sdk/{web-JwP9PAZR.js → web-BvjNyYBz.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-CIzCjXH9.d.ts → zod-schema.providers-core-BCDlgtls.d.ts} +63 -63
- package/dist/wallet/local-socket-signer-lifecycle.js +29 -1
- package/dist/wallet/local-socket-signer-protocol.js +27 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +8 -0
- package/dist/wallet/signer-network-admin.js +11 -118
- package/dist/wallet/signer-protocol-v2.generated.js +4 -0
- package/dist/wallet/solana-assets.js +9 -3
- package/dist/wallet/solana-rpc-read-fetch.js +65 -0
- package/dist/wallet/wallet-status.js +7 -0
- package/dist/web/login-qr.js +1 -1
- package/dist/wizard/onboarding.js +61 -61
- 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/fased.mjs +14 -1
- package/install.sh +16 -10
- package/package.json +6 -1
- package/scripts/fased-managed-updater.mjs +10 -2
- package/scripts/fased-signer-wallet-import-hosting.sh +78 -0
- package/scripts/install-managed-runtime.mjs +10 -7
- /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>0?`wallets ${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 by explicit @wallet:<id> handles. If no @wallet:<id> is specified, approved wallet actions use the primary Agent wallet fallback.`:`If no @wallet:<id> is specified, approved wallet actions use this default Agent wallet.`,tone:`success`,walletId:o.id}:a.length>0?{title:`Agent wallets`,summary:`${a.length} set · no primary`,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 w(e,t){return[]}function te(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"
|
|
@@ -35,10 +35,10 @@ 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
|
|
39
|
-
<span class="wallet-lock-chip" data-state=${
|
|
38
|
+
`}function T(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
43
|
`}function re(r){return r?.automation?.satSweep?.enabled?e`
|
|
44
44
|
<span
|
|
@@ -52,14 +52,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
52
52
|
<span class="wallet-status-icon" data-role=${t.dataRole} title=${t.title}>
|
|
53
53
|
${t.icon}
|
|
54
54
|
</span>
|
|
55
|
-
`):t}function
|
|
55
|
+
`):t}function E(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`:`Primary`,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 wallet as the primary Agent wallet. Existing Agent roles stay unchanged.`:`Make this wallet the primary Agent fallback. Other Agent wallets can still be selected by @wallet handle.`}}function D(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 O(e){switch(e){case`mining`:return 0;case`vault`:return 1;case`agent`:return 2}}function k(e,t){let n=String(t.defaultWalletId??``).trim();return e.toSorted((e,r)=>{let i=D(e.id,t),a=D(r.id,t),o=O(i)-O(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 ae(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 oe(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 A(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 j(e,t=`n/a`){return typeof e==`string`?e.trim()||t:typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):t}function M(e){return j(e,`n/a`).toLowerCase()===`solana`?`SOL`:j(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 A(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=Ee({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(j(e.details.amount,``),o);if(s)return`${R(s)} ${i}`;let c=j(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 se(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?Te(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?`${q(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=Ee({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:q(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 ce(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&&K(i,r)||null;return{fromLabel:i?.name?.trim()||n||t||null,fromAddress:a,toAddress:String(e.request.payload.to??``).trim()||null}}function le(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
|
-
<span>to <span class="mono">${
|
|
59
|
+
<span>to <span class="mono">${Y(s,8,6)}</span></span>
|
|
60
60
|
${c?e`<span class="muted">triggered by ${c}</span>`:t}
|
|
61
61
|
</div>
|
|
62
|
-
`}function V(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function H(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=>H(e)).filter(Boolean);return t.length>0?t.join(`, `):null}return null}function
|
|
62
|
+
`}function V(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function H(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=>H(e)).filter(Boolean);return t.length>0?t.join(`, `):null}return null}function ue(n){let r=V(n.payload.signerSemanticIntent),i=H(r?.type);if(!r||!i)return t;let a=[],o=(e,t)=>{let n=H(t);n&&a.push({label:e,value:n})},s=[];if(i.startsWith(`solana.jupiter.`)){let e=V(r.jupiter),t=V(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=H(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=>H(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=>H(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=V(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=V(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 U(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function W(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`?U(i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3)):i>=1||i>=.01?U(r.toFixed(2)):i>0?`<0.01`:`0`}catch{return n}}function G(e,t){let n=String(e??``).trim();if(!n)return`—`;let r=RegExp(`\\s*${t}$`,`i`);return n.replace(r,``).trim()||`0`}function
|
|
78
|
+
`}function U(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function W(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`?U(i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3)):i>=1||i>=.01?U(r.toFixed(2)):i>0?`<0.01`:`0`}catch{return n}}function G(e,t){let n=String(e??``).trim();if(!n)return`—`;let r=RegExp(`\\s*${t}$`,`i`);return n.replace(r,``).trim()||`0`}function de(e){return String(e.miningProfile?.walletId??e.miningStatus?.walletId??e.miningReadiness?.selectedWalletId??``).trim()}function fe(e,t,n){if(typeof e.balances?.solana==`string`&&e.balances.solana.trim())return q(G(A(e.balances.solana,`solana`),`SOL`));if(n){let e=String(t.miningReadiness?.balances.solBalanceDisplay??``).trim();if(e)return q(G(e,`SOL`));let n=String(t.miningStatus?.currentSolBalanceLamports??``).trim();if(n)return q(W(n,`SOL`))}return e.addresses?.solana?t.balancesLoading?`Loading`:`0`:t.balancesLoading?`Loading`:`—`}function K(e,t){return e&&e.addresses?.solana||``}function pe(e,t){return!e||t?.walletId!==e.id?[]:Array.isArray(t.assets?.solana)?t.assets.solana:[]}function me(e,t){if(!e)return[];let n=[],r=de(t)===e.id,i=pe(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:fe(e,t,r),amountRaw:e.balances?.solana,isNative:!0,address:e.addresses?.solana});return n}function q(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 J(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 he(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 ge(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 _e(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=Y(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:ye(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:Y(r,2,2),detail:Y(r,2,2),mint:r,decimals:e.props.policySolanaTokenCaps[r]?.decimals??-1}))}return t}function ve(n){let{props:r,settings:i,policyDisplay:a,cardRole:o,selectedWalletId:s,cardWalletCanSpendSolana:c,selectedWalletTokens:l,canEditPolicy:u}=n,d=r.policyCapsEnabled===!0,f=_e({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,12 +115,12 @@ 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"
|
|
122
122
|
placeholder="5.0"
|
|
123
|
-
.value=${r.policySolMaxDaily||a?.solana.maxDaily.human.split(` `)[0]||
|
|
123
|
+
.value=${r.policySolMaxDaily||a?.solana.maxDaily.human.split(` `)[0]||A(i.policy.solana.maxDaily,`solana`,{hideUnit:!0})}
|
|
124
124
|
?disabled=${r.settingsBusy||!u}
|
|
125
125
|
@input=${e=>r.onPolicyDraftChange({solMaxDaily:e.target.value})}
|
|
126
126
|
/>
|
|
@@ -128,44 +128,44 @@ 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"
|
|
135
135
|
placeholder="1.0"
|
|
136
|
-
.value=${r.policySolMaxPerTx||a?.solana.maxPerTx.human.split(` `)[0]||
|
|
136
|
+
.value=${r.policySolMaxPerTx||a?.solana.maxPerTx.human.split(` `)[0]||A(i.policy.solana.maxPerTx,`solana`,{hideUnit:!0})}
|
|
137
137
|
?disabled=${r.settingsBusy||!u}
|
|
138
138
|
@input=${e=>r.onPolicyDraftChange({solMaxPerTx:e.target.value})}
|
|
139
139
|
/>
|
|
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=${J({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=>he(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=${J({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=>he(r,t.mint,t.decimals,`maxPerTx`,e.target.value)}
|
|
169
169
|
/>
|
|
170
170
|
</label>
|
|
171
171
|
</div>
|
|
@@ -206,7 +206,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
206
206
|
</div>
|
|
207
207
|
</div>
|
|
208
208
|
<div class="muted mono wallet-token-cap-row__detail" title=${n.mint}>
|
|
209
|
-
${
|
|
209
|
+
${Y(n.mint,2,2)}
|
|
210
210
|
</div>
|
|
211
211
|
<button class="btn" ?disabled=${r.settingsBusy||!u} @click=${()=>r.onTokenSearchSelect(n)}>
|
|
212
212
|
Use
|
|
@@ -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=${()=>ge(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 ye(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 be(e,t){let n=me(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 xe(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 Se(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`:xe(e.action)}function Ce(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 we(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 Y(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 Te(e){let t=e.trim();return t?t.length<=12?t:`${t.slice(0,4)}…${t.slice(-4)}`:`TOKEN`}function Ee(e){if(!e||e.isNative||!e.program)return!1;let t=Te(e.program);return String(e.symbol??``).trim().toUpperCase()===t.toUpperCase()&&String(e.name??``).trim()===`Token ${t}`}async function De(e){let t=e.trim();if(!(!t||typeof navigator>`u`||!navigator.clipboard))try{await navigator.clipboard.writeText(t)}catch{}}function Oe(e){return e.replace(/[^a-zA-Z0-9_-]/g,`-`)||`wallet`}function ke(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 X(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 De(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()||Y(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=>{De(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,10 +339,10 @@ 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?X(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>
|
|
@@ -379,7 +379,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
379
379
|
${t.version?` · ${t.version}`:``}
|
|
380
380
|
</span>
|
|
381
381
|
</span>
|
|
382
|
-
<span class="muted">${
|
|
382
|
+
<span class="muted">${y(t.grantedWalletActions)}</span>
|
|
383
383
|
</button>
|
|
384
384
|
`})}
|
|
385
385
|
</div>
|
|
@@ -388,12 +388,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
388
388
|
<div>
|
|
389
389
|
<span>Requested</span>
|
|
390
390
|
<strong>
|
|
391
|
-
${
|
|
391
|
+
${b(i?.requestedWalletActions??null)}
|
|
392
392
|
</strong>
|
|
393
393
|
</div>
|
|
394
394
|
<div>
|
|
395
395
|
<span>Current grant</span>
|
|
396
|
-
<strong>${
|
|
396
|
+
<strong>${y(i?.grantedWalletActions??null)}</strong>
|
|
397
397
|
</div>
|
|
398
398
|
</div>
|
|
399
399
|
<label class="field">
|
|
@@ -505,15 +505,15 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
505
505
|
</div>
|
|
506
506
|
`}
|
|
507
507
|
</div>
|
|
508
|
-
`}function
|
|
508
|
+
`}function Pe(n){let r=n.status,i=u(n);return e`
|
|
509
509
|
<div class="wallet-top-grid">
|
|
510
510
|
<div id="wallet-admin-control" class="card wallet-top-card">
|
|
511
511
|
<div class="wallet-top-card__head">
|
|
512
512
|
<div>
|
|
513
513
|
<div class="wallet-top-card__title-row">
|
|
514
|
-
<div class="card-title">
|
|
515
|
-
${
|
|
516
|
-
${
|
|
514
|
+
<div class="card-title">Control UI account passkey</div>
|
|
515
|
+
${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
|
+
${T(i.summary,i.detail)}
|
|
517
517
|
</div>
|
|
518
518
|
</div>
|
|
519
519
|
</div>
|
|
@@ -544,9 +544,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
544
544
|
`:t}
|
|
545
545
|
</div>
|
|
546
546
|
<div class="wallet-security-note" style="margin-top: 10px;">
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
547
|
+
This is optional account security for the browser Control UI. It is not requested during
|
|
548
|
+
installation or wallet creation and does not gate Agent or Mining automation. A Vault
|
|
549
|
+
approval device is a separate signer-owned feature configured only for Vault review.
|
|
550
550
|
</div>
|
|
551
551
|
${!i.enableVisible&&!i.enrollVisible?e`
|
|
552
552
|
<details class="wallet-advanced-box">
|
|
@@ -558,7 +558,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
558
558
|
<div>
|
|
559
559
|
<div>Label: ${t.label||`Wallet passkey`}</div>
|
|
560
560
|
<div class="wallet-security-note">
|
|
561
|
-
Credential ID <span class="mono">${
|
|
561
|
+
Credential ID <span class="mono">${Y(t.id)}</span>
|
|
562
562
|
· added ${new Date(t.createdAt).toLocaleString()}
|
|
563
563
|
</div>
|
|
564
564
|
</div>
|
|
@@ -578,8 +578,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
578
578
|
${n.passkeyError?e`<div class="callout danger">${n.passkeyError}</div>`:t}
|
|
579
579
|
</div>
|
|
580
580
|
</div>
|
|
581
|
-
`}function
|
|
582
|
-
${
|
|
581
|
+
`}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,w=c?.policyDisplay,T=v(a.namedWallets,a.walletDetailsWalletId),E=k(a.namedWallets,a),O={enabled:!1,mode:`all`,percentage:100,minRaw:`1`,keepRaw:`0`,...a.miningProfile?.automation?.satSweep},A=a.namedWallets.filter(e=>e.id!==T?.id&&!!e.addresses?.solana),P=O.destinationAddress||!O.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`,V=(a.providers??[]).filter(e=>(e.id===`local-socket-signer`||e.id===`turnkey`)&&e.operationsImplemented&&e.capabilities.operations.createWallet),H=a.createProvider??V[0]?.id??`local-socket-signer`,U=V.find(e=>e.id===H),W=!!(U?.enabled&&U.health.ok&&(!U.capabilities.requiresCredentials||U.credentialsConfigured)),G=a.namedWallets.find(e=>D(e.id,a)===`mining`||e.id===`mining`),K=a.createRole===`mining`&&!!G,pe=!!(a.createRole&&a.createName?.trim()&&(H!==`local-socket-signer`||a.createId?.trim()&&a.createRpcUrl?.trim())&&!K),J=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`
|
|
582
|
+
${Le(a)}
|
|
583
583
|
<style>
|
|
584
584
|
.wallet-dashboard {
|
|
585
585
|
display: grid;
|
|
@@ -1720,7 +1720,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1720
1720
|
}
|
|
1721
1721
|
</style>
|
|
1722
1722
|
<section id="wallet-dashboard" class="wallet-dashboard">
|
|
1723
|
-
${
|
|
1723
|
+
${f?e`
|
|
1724
1724
|
<div class="wallet-message-stack">
|
|
1725
1725
|
${a.error?e`<div class="callout danger">${a.error}</div>`:t}
|
|
1726
1726
|
${a.settingsError?e`<div class="callout danger">${a.settingsError}</div>`:t}
|
|
@@ -1734,28 +1734,28 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1734
1734
|
<button
|
|
1735
1735
|
class="btn"
|
|
1736
1736
|
role="tab"
|
|
1737
|
-
aria-selected=${
|
|
1738
|
-
@click=${()=>
|
|
1737
|
+
aria-selected=${B===`wallets`?`true`:`false`}
|
|
1738
|
+
@click=${()=>J(`wallets`)}
|
|
1739
1739
|
>
|
|
1740
1740
|
Wallets
|
|
1741
1741
|
</button>
|
|
1742
1742
|
<button
|
|
1743
1743
|
class="btn"
|
|
1744
1744
|
role="tab"
|
|
1745
|
-
aria-selected=${
|
|
1746
|
-
@click=${()=>
|
|
1745
|
+
aria-selected=${B===`access`?`true`:`false`}
|
|
1746
|
+
@click=${()=>J(`access`)}
|
|
1747
1747
|
>
|
|
1748
|
-
|
|
1748
|
+
Account Security
|
|
1749
1749
|
</button>
|
|
1750
1750
|
<button
|
|
1751
1751
|
class="btn"
|
|
1752
1752
|
role="tab"
|
|
1753
|
-
aria-selected=${
|
|
1754
|
-
@click=${()=>
|
|
1753
|
+
aria-selected=${B===`skill-grants`?`true`:`false`}
|
|
1754
|
+
@click=${()=>J(`skill-grants`)}
|
|
1755
1755
|
>
|
|
1756
1756
|
Skill Grants
|
|
1757
1757
|
</button>
|
|
1758
|
-
${
|
|
1758
|
+
${B===`wallets`?e`
|
|
1759
1759
|
<span class="wallet-main-tabs__spacer"></span>
|
|
1760
1760
|
<button
|
|
1761
1761
|
class="btn small"
|
|
@@ -1774,7 +1774,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1774
1774
|
</button>
|
|
1775
1775
|
`:t}
|
|
1776
1776
|
</div>
|
|
1777
|
-
${
|
|
1777
|
+
${B===`skill-grants`?Ne(a):B===`access`?Pe(a):e`<div id="wallet-wallets" class="wallet-wallets-section">
|
|
1778
1778
|
<details class="wallet-create-panel">
|
|
1779
1779
|
<summary>Create a signer-owned wallet</summary>
|
|
1780
1780
|
<div class="wallet-create-grid">
|
|
@@ -1791,7 +1791,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1791
1791
|
<span>Permanent wallet ID</span>
|
|
1792
1792
|
<input
|
|
1793
1793
|
.value=${a.createId??``}
|
|
1794
|
-
placeholder=${
|
|
1794
|
+
placeholder=${H===`local-socket-signer`?`agent-primary (required)`:`optional local label`}
|
|
1795
1795
|
autocomplete="off"
|
|
1796
1796
|
@input=${e=>a.onCreateIdChange?.(e.target.value)}
|
|
1797
1797
|
/>
|
|
@@ -1799,10 +1799,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1799
1799
|
<label class="field">
|
|
1800
1800
|
<span>Custody provider</span>
|
|
1801
1801
|
<select
|
|
1802
|
-
.value=${
|
|
1802
|
+
.value=${H}
|
|
1803
1803
|
@change=${e=>a.onCreateProviderChange?.(e.target.value)}
|
|
1804
1804
|
>
|
|
1805
|
-
${
|
|
1805
|
+
${V.map(t=>e`
|
|
1806
1806
|
<option value=${t.id}>
|
|
1807
1807
|
${t.label||(t.id===`local-socket-signer`?`Native Go signer`:`Turnkey`)}
|
|
1808
1808
|
</option>
|
|
@@ -1812,42 +1812,56 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1812
1812
|
<label class="field">
|
|
1813
1813
|
<span>Wallet role</span>
|
|
1814
1814
|
<select
|
|
1815
|
-
.value=${a.createRole
|
|
1815
|
+
.value=${a.createRole??``}
|
|
1816
1816
|
@change=${e=>a.onCreateRoleChange?.(e.target.value)}
|
|
1817
1817
|
>
|
|
1818
|
+
<option value="" disabled>Select a role</option>
|
|
1818
1819
|
<option value="agent">Agent — capped automation</option>
|
|
1820
|
+
<option value="mining">Mining — singleton SAT operations</option>
|
|
1819
1821
|
<option value="vault">Vault — reviewed operations only</option>
|
|
1820
1822
|
</select>
|
|
1821
1823
|
</label>
|
|
1824
|
+
${H===`local-socket-signer`?e`
|
|
1825
|
+
<label class="field">
|
|
1826
|
+
<span>Primary Solana RPC</span>
|
|
1827
|
+
<input
|
|
1828
|
+
.value=${a.createRpcUrl??``}
|
|
1829
|
+
placeholder="https://your-solana-rpc.example"
|
|
1830
|
+
autocomplete="off"
|
|
1831
|
+
spellcheck="false"
|
|
1832
|
+
@input=${e=>a.onCreateRpcUrlChange?.(e.target.value)}
|
|
1833
|
+
/>
|
|
1834
|
+
</label>
|
|
1835
|
+
`:t}
|
|
1822
1836
|
<div class="wallet-create-actions">
|
|
1823
1837
|
<button
|
|
1824
1838
|
class="btn primary"
|
|
1825
|
-
?disabled=${a.settingsBusy||!
|
|
1839
|
+
?disabled=${a.settingsBusy||!W||!pe}
|
|
1826
1840
|
@click=${a.onCreateWallet}
|
|
1827
1841
|
>
|
|
1828
1842
|
${a.settingsBusy?`Creating...`:`Create wallet`}
|
|
1829
1843
|
</button>
|
|
1830
1844
|
<span class="muted">
|
|
1831
|
-
${
|
|
1845
|
+
${K?`Mining already uses ${G?.name??G?.id}. Open, Replace, or Archive that singleton wallet.`:a.createRole?U?U.enabled?U.health.ok?U.capabilities.requiresCredentials&&!U.credentialsConfigured?`Configure restricted provider credentials before creating a wallet.`:H===`local-socket-signer`?`The Go signer generates the key; Node receives only the public address.`:`Turnkey creates the account under the configured restrictive policy.`:U.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
1846
|
</span>
|
|
1833
1847
|
</div>
|
|
1834
1848
|
</div>
|
|
1835
1849
|
</details>
|
|
1836
1850
|
${a.balancesError?e`<div class="callout danger">${a.balancesError}</div>`:t}
|
|
1837
1851
|
<div class="wallet-grid">
|
|
1838
|
-
${
|
|
1852
|
+
${E.map(r=>{let s=fe(r,a,de(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)?me(r,a).filter(e=>e.chain===`solana`):[]).filter(e=>!e.isNative),h=r.addresses?.solana||``,g=`wallet-address-${Oe(r.id)}`,_=s,v=D(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,T=r.providerId!==`local-socket-signer`||r.metadata?.networkReady===!0,E=typeof r.metadata?.networkVersion==`number`?r.metadata.networkVersion:void 0,k=r.providerId!==`local-socket-signer`||C?.state===`acknowledged`,j=ee(r).includes(`solana`),M=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.`}],N=a.policyPanel&&M.some(e=>e.id===a.policyPanel)?a.policyPanel:M[0]?.id??`caps`,I=i(a.recurringTransferCron??``),R=String(a.recurringTransferMint??``).trim(),z=R?`token`:`SOL`,B=e=>a.onPolicyDraftChange({recurringTransferCron:o({every:e.every??I.every,unit:e.unit??I.unit,time:e.time??I.time})});return e`
|
|
1839
1853
|
<div class="wallet-card" title=${r.id}>
|
|
1840
1854
|
<div class="wallet-card__header">
|
|
1841
1855
|
<div class="wallet-card__identity">
|
|
1842
1856
|
<div class="wallet-card__title-row">
|
|
1843
1857
|
<div class="wallet-card__title">${r.name}</div>
|
|
1844
1858
|
${te(r.id,a.federationBond,a.onNavigate)}
|
|
1845
|
-
${
|
|
1846
|
-
${ie({walletId:r.id,role:
|
|
1847
|
-
${ne({role:
|
|
1859
|
+
${v===`mining`?re(a.miningProfile):t}
|
|
1860
|
+
${ie({walletId:r.id,role:v,props:a})}
|
|
1861
|
+
${ne({role:v,automationEnabled:b})}
|
|
1848
1862
|
</div>
|
|
1849
1863
|
<div class="wallet-card__address-row">
|
|
1850
|
-
${
|
|
1864
|
+
${h?e`
|
|
1851
1865
|
<span
|
|
1852
1866
|
class="wallet-card__wallet-icon"
|
|
1853
1867
|
title="Wallet address configured"
|
|
@@ -1856,7 +1870,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1856
1870
|
${n.wallet}
|
|
1857
1871
|
</span>
|
|
1858
1872
|
<span
|
|
1859
|
-
id=${
|
|
1873
|
+
id=${g}
|
|
1860
1874
|
class="mono wallet-card__address"
|
|
1861
1875
|
data-revealed="false"
|
|
1862
1876
|
>
|
|
@@ -1868,35 +1882,57 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1868
1882
|
class="wallet-icon-btn"
|
|
1869
1883
|
title="Show wallet address"
|
|
1870
1884
|
aria-label="Show wallet address"
|
|
1871
|
-
@click=${()=>
|
|
1885
|
+
@click=${()=>ke(g,`******`,h)}
|
|
1872
1886
|
>
|
|
1873
1887
|
<span class="wallet-copy-btn__icon">${n.eye}</span>
|
|
1874
1888
|
</button>
|
|
1875
|
-
${
|
|
1876
|
-
${Z(Q(`solana`,`address`,
|
|
1889
|
+
${X(h,`wallet address`)}
|
|
1890
|
+
${Z(Q(`solana`,`address`,h),`Open wallet address`)}
|
|
1877
1891
|
</span>
|
|
1878
1892
|
`:e`
|
|
1879
1893
|
<span class="muted">No wallet address</span>
|
|
1880
1894
|
`}
|
|
1881
|
-
${
|
|
1895
|
+
${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`})}
|
|
1896
|
+
${h?e`
|
|
1897
|
+
<details>
|
|
1898
|
+
<summary>Receive QR</summary>
|
|
1899
|
+
<div class="qr-wrap">
|
|
1900
|
+
<img
|
|
1901
|
+
src=${`/api/wallet/receive-qr?walletId=${encodeURIComponent(r.id)}`}
|
|
1902
|
+
alt=${`Solana receive QR for ${r.name}`}
|
|
1903
|
+
loading="lazy"
|
|
1904
|
+
/>
|
|
1905
|
+
</div>
|
|
1906
|
+
</details>
|
|
1907
|
+
`:t}
|
|
1882
1908
|
</div>
|
|
1883
1909
|
</div>
|
|
1884
1910
|
<div class="row" style="gap: 8px;">
|
|
1885
1911
|
<button
|
|
1886
|
-
class="btn small ${
|
|
1912
|
+
class="btn small ${p?`primary`:``}"
|
|
1887
1913
|
@click=${()=>a.onWalletDetailsWalletChange(r.id)}
|
|
1888
1914
|
>
|
|
1889
1915
|
Policy
|
|
1890
1916
|
</button>
|
|
1917
|
+
${r.providerId===`local-socket-signer`?e`
|
|
1918
|
+
<button
|
|
1919
|
+
class="btn small danger"
|
|
1920
|
+
?disabled=${a.settingsBusy||!a.onArchiveWallet}
|
|
1921
|
+
title="The server requires Mining runtime obligations to be settled and locks the signer key deny-all. Confirm external balances and recovery before archiving."
|
|
1922
|
+
@click=${()=>a.onArchiveWallet?.(r.id)}
|
|
1923
|
+
>
|
|
1924
|
+
${v===`mining`?`Archive Mining`:`Archive`}
|
|
1925
|
+
</button>
|
|
1926
|
+
`:t}
|
|
1891
1927
|
</div>
|
|
1892
1928
|
</div>
|
|
1893
1929
|
<div class="wallet-card__balance-row">
|
|
1894
1930
|
<div class="wallet-card__balance-main">
|
|
1895
|
-
${
|
|
1931
|
+
${Me(`SOL`,_,`neutral`,{title:`Solana`,onClick:r.addresses?.solana?()=>(a.onWalletBalanceWalletChange??a.onWalletDetailsWalletChange)(r.id):void 0})}
|
|
1896
1932
|
<button
|
|
1897
1933
|
class="btn small primary wallet-card__send-btn"
|
|
1898
|
-
?disabled=${!
|
|
1899
|
-
title=${
|
|
1934
|
+
?disabled=${!S||!k}
|
|
1935
|
+
title=${k?`Send from this wallet`:`Receive-only: the role-safe deny-all baseline is active; install an owner-reviewed spending policy before sending`}
|
|
1900
1936
|
@click=${()=>a.onSendModalOpen(r.id)}
|
|
1901
1937
|
>
|
|
1902
1938
|
Send
|
|
@@ -1906,28 +1942,28 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1906
1942
|
<button
|
|
1907
1943
|
type="button"
|
|
1908
1944
|
class="wallet-balance-link"
|
|
1909
|
-
data-active=${
|
|
1945
|
+
data-active=${f?`true`:`false`}
|
|
1910
1946
|
@click=${()=>(a.onWalletBalanceWalletChange??a.onWalletDetailsWalletChange)(r.id)}
|
|
1911
1947
|
>
|
|
1912
1948
|
<span class="wallet-balance-link__icon">${n.barChart}</span>
|
|
1913
1949
|
<span>Balance</span>
|
|
1914
1950
|
</button>
|
|
1915
1951
|
`:t}
|
|
1916
|
-
${
|
|
1952
|
+
${m.length>0?e`
|
|
1917
1953
|
<div class="wallet-token-details">
|
|
1918
1954
|
<div class="wallet-token-list">
|
|
1919
|
-
${
|
|
1955
|
+
${m.map(n=>e`
|
|
1920
1956
|
<div class="row" style="gap: 8px; align-items: center;">
|
|
1921
1957
|
<button
|
|
1922
1958
|
class="btn small"
|
|
1923
1959
|
style="display: inline-flex; gap: 8px; align-items: center;"
|
|
1924
|
-
?disabled=${!
|
|
1960
|
+
?disabled=${!S||!k}
|
|
1925
1961
|
@click=${()=>a.onSendModalOpen(r.id,n.id)}
|
|
1926
1962
|
>
|
|
1927
|
-
${
|
|
1963
|
+
${ye(n,20)}
|
|
1928
1964
|
<span>${n.symbol}</span>
|
|
1929
1965
|
<span class="muted"
|
|
1930
|
-
>${
|
|
1966
|
+
>${q(n.amountDisplay)}</span
|
|
1931
1967
|
>
|
|
1932
1968
|
</button>
|
|
1933
1969
|
${n.program?Z(Q(`solana`,`address`,n.program),`Open ${n.symbol} mint`):t}
|
|
@@ -1935,54 +1971,102 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1935
1971
|
`)}
|
|
1936
1972
|
</div>
|
|
1937
1973
|
</div>
|
|
1938
|
-
`:
|
|
1974
|
+
`:f&&a.balancesLoading?e`
|
|
1939
1975
|
<div class="muted" style="font-size: 0.85em">Loading balance...</div>
|
|
1940
|
-
`:
|
|
1976
|
+
`:f&&r.addresses?.solana?e`
|
|
1941
1977
|
<div class="muted" style="font-size: 0.85em">Balance loaded. No SPL token balances detected.</div>
|
|
1942
1978
|
`:t}
|
|
1943
1979
|
</div>
|
|
1944
|
-
${
|
|
1980
|
+
${p?e`
|
|
1945
1981
|
<div id="wallet-security-card" class="wallet-card-security">
|
|
1946
1982
|
<div class="wallet-policy-tabs" role="tablist" aria-label="Wallet policy sections">
|
|
1947
|
-
${
|
|
1983
|
+
${M.map(t=>e`
|
|
1948
1984
|
<button
|
|
1949
1985
|
type="button"
|
|
1950
1986
|
class="wallet-policy-tab"
|
|
1951
|
-
data-active=${
|
|
1987
|
+
data-active=${N===t.id?`true`:`false`}
|
|
1952
1988
|
title=${t.title}
|
|
1953
1989
|
role="tab"
|
|
1954
|
-
aria-selected=${
|
|
1990
|
+
aria-selected=${N===t.id?`true`:`false`}
|
|
1955
1991
|
@click=${()=>a.onPolicyPanelChange?.(t.id)}
|
|
1956
1992
|
>
|
|
1957
1993
|
${t.label}
|
|
1958
1994
|
</button>
|
|
1959
1995
|
`)}
|
|
1960
1996
|
</div>
|
|
1961
|
-
${
|
|
1997
|
+
${r.providerId===`local-socket-signer`?e`
|
|
1998
|
+
<div
|
|
1999
|
+
class="callout ${T?`success`:`warn`}"
|
|
2000
|
+
style="margin-top: 10px"
|
|
2001
|
+
data-testid="wallet-signer-network-status"
|
|
2002
|
+
>
|
|
2003
|
+
<strong
|
|
2004
|
+
>Signer RPC: ${T?`ready${E?` · version ${E}`:``}`:`not ready`}</strong
|
|
2005
|
+
>
|
|
2006
|
+
<div>
|
|
2007
|
+
Enter one primary RPC. The Go signer verifies its genesis;
|
|
2008
|
+
ordinary setup never asks for a Solana network or a second
|
|
2009
|
+
RPC.
|
|
2010
|
+
</div>
|
|
2011
|
+
<div class="wallet-card-security__grid" style="margin-top: 8px">
|
|
2012
|
+
<label class="field">
|
|
2013
|
+
<span>Replace primary Solana RPC</span>
|
|
2014
|
+
<input
|
|
2015
|
+
.value=${a.rpcUrl??``}
|
|
2016
|
+
placeholder="https://your-solana-rpc.example"
|
|
2017
|
+
autocomplete="off"
|
|
2018
|
+
spellcheck="false"
|
|
2019
|
+
@input=${e=>a.onRpcUrlChange?.(e.target.value)}
|
|
2020
|
+
/>
|
|
2021
|
+
</label>
|
|
2022
|
+
<button
|
|
2023
|
+
class="btn small"
|
|
2024
|
+
?disabled=${a.settingsBusy||!a.rpcUrl?.trim()||!a.onSaveWalletRpc}
|
|
2025
|
+
@click=${a.onSaveWalletRpc}
|
|
2026
|
+
>
|
|
2027
|
+
Verify and save RPC
|
|
2028
|
+
</button>
|
|
2029
|
+
</div>
|
|
2030
|
+
</div>
|
|
2031
|
+
`:t}
|
|
2032
|
+
${C?e`
|
|
1962
2033
|
<div
|
|
1963
|
-
class="callout ${
|
|
2034
|
+
class="callout ${C.state===`acknowledged`?`success`:`warn`}"
|
|
1964
2035
|
style="margin-top: 10px"
|
|
1965
2036
|
data-testid="wallet-signer-policy-status"
|
|
1966
2037
|
>
|
|
1967
|
-
<strong>Native signer policy: ${
|
|
1968
|
-
${
|
|
2038
|
+
<strong>Native signer policy: ${C.state}</strong>
|
|
2039
|
+
${C.state===`locked`?e`
|
|
1969
2040
|
<div>
|
|
1970
|
-
|
|
1971
|
-
|
|
2041
|
+
The role-safe deny-all baseline is active, so the wallet can receive but cannot send, swap, mine,
|
|
2042
|
+
bond, or execute wallet-capable skills. Spending authority requires a separate owner-reviewed
|
|
2043
|
+
policy; the Gateway cannot grant it silently.
|
|
1972
2044
|
</div>
|
|
1973
2045
|
`:t}
|
|
1974
|
-
${
|
|
2046
|
+
${C.version&&C.hash?e`
|
|
1975
2047
|
<div>
|
|
1976
|
-
Version ${
|
|
2048
|
+
Version ${C.version} ·
|
|
1977
2049
|
<span class="mono" style="overflow-wrap: anywhere"
|
|
1978
|
-
>${
|
|
2050
|
+
>${C.hash}</span
|
|
1979
2051
|
>
|
|
1980
2052
|
</div>
|
|
1981
2053
|
`:t}
|
|
1982
|
-
${
|
|
2054
|
+
${C.guidance?e`<div>${C.guidance}</div>`:t}
|
|
2055
|
+
</div>
|
|
2056
|
+
`:t}
|
|
2057
|
+
${v===`vault`&&r.providerId===`local-socket-signer`?e`
|
|
2058
|
+
<div class="callout" style="margin-top: 10px">
|
|
2059
|
+
<strong>Vault approval device · ${y.summary}</strong>
|
|
2060
|
+
<div>${y.detail}</div>
|
|
2061
|
+
${y.setupCommand?e`<div class="mono" style="overflow-wrap: anywhere">
|
|
2062
|
+
${y.setupCommand}
|
|
2063
|
+
</div>`:t}
|
|
2064
|
+
<div>
|
|
2065
|
+
This optional signer-owned device never changes Agent or Mining automation.
|
|
2066
|
+
</div>
|
|
1983
2067
|
</div>
|
|
1984
2068
|
`:t}
|
|
1985
|
-
${
|
|
2069
|
+
${v===`mining`?N===`sweep`?e`
|
|
1986
2070
|
<div class="field">
|
|
1987
2071
|
<div class="wallet-card-security__grid">
|
|
1988
2072
|
<label class="field">
|
|
@@ -1993,13 +2077,13 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
1993
2077
|
>
|
|
1994
2078
|
<option
|
|
1995
2079
|
value="disabled"
|
|
1996
|
-
?selected=${!
|
|
2080
|
+
?selected=${!O.enabled}
|
|
1997
2081
|
>
|
|
1998
2082
|
Off
|
|
1999
2083
|
</option>
|
|
2000
2084
|
<option
|
|
2001
2085
|
value="enabled"
|
|
2002
|
-
?selected=${
|
|
2086
|
+
?selected=${O.enabled}
|
|
2003
2087
|
>
|
|
2004
2088
|
On
|
|
2005
2089
|
</option>
|
|
@@ -2008,38 +2092,38 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2008
2092
|
<label class="field">
|
|
2009
2093
|
<span>Destination</span>
|
|
2010
2094
|
<select
|
|
2011
|
-
?disabled=${a.settingsBusy||!
|
|
2012
|
-
@change=${e=>{let t=e.currentTarget.value;a.onMiningSatSweepChange?.(t===`__external__`?{destinationWalletId:void 0,destinationAddress:
|
|
2095
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2096
|
+
@change=${e=>{let t=e.currentTarget.value;a.onMiningSatSweepChange?.(t===`__external__`?{destinationWalletId:void 0,destinationAddress:O.destinationAddress??``}:{destinationWalletId:t||void 0,destinationAddress:void 0})}}
|
|
2013
2097
|
>
|
|
2014
2098
|
<option
|
|
2015
2099
|
value="__external__"
|
|
2016
|
-
?selected=${
|
|
2100
|
+
?selected=${P===`external`}
|
|
2017
2101
|
>
|
|
2018
2102
|
External
|
|
2019
2103
|
</option>
|
|
2020
|
-
${
|
|
2104
|
+
${A.map(t=>e`
|
|
2021
2105
|
<option
|
|
2022
2106
|
value=${t.id}
|
|
2023
|
-
?selected=${
|
|
2107
|
+
?selected=${O.destinationWalletId===t.id}
|
|
2024
2108
|
>
|
|
2025
2109
|
${t.name}
|
|
2026
2110
|
</option>
|
|
2027
2111
|
`)}
|
|
2028
2112
|
</select>
|
|
2029
2113
|
</label>
|
|
2030
|
-
${
|
|
2114
|
+
${P===`external`?e`
|
|
2031
2115
|
<label class="field">
|
|
2032
2116
|
<span>Address</span>
|
|
2033
2117
|
<input
|
|
2034
2118
|
type="text"
|
|
2035
|
-
.value=${
|
|
2036
|
-
?disabled=${a.settingsBusy||!
|
|
2119
|
+
.value=${O.destinationAddress??``}
|
|
2120
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2037
2121
|
@change=${e=>a.onMiningSatSweepChange?.({destinationAddress:e.currentTarget.value.trim()||void 0,destinationWalletId:void 0})}
|
|
2038
2122
|
placeholder="Solana address"
|
|
2039
2123
|
/>
|
|
2040
2124
|
</label>
|
|
2041
2125
|
`:t}
|
|
2042
|
-
${
|
|
2126
|
+
${O.mode===`percentage`?e`
|
|
2043
2127
|
<label class="field">
|
|
2044
2128
|
<span>Percent</span>
|
|
2045
2129
|
<input
|
|
@@ -2047,8 +2131,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2047
2131
|
min="1"
|
|
2048
2132
|
max="100"
|
|
2049
2133
|
step="1"
|
|
2050
|
-
.value=${String(
|
|
2051
|
-
?disabled=${a.settingsBusy||!
|
|
2134
|
+
.value=${String(O.percentage??100)}
|
|
2135
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2052
2136
|
@change=${e=>a.onMiningSatSweepChange?.({percentage:Math.max(1,Math.min(100,Number(e.currentTarget.value)||100))})}
|
|
2053
2137
|
/>
|
|
2054
2138
|
</label>
|
|
@@ -2056,18 +2140,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2056
2140
|
<label class="field">
|
|
2057
2141
|
<span>Amount</span>
|
|
2058
2142
|
<select
|
|
2059
|
-
?disabled=${a.settingsBusy||!
|
|
2143
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2060
2144
|
@change=${e=>a.onMiningSatSweepChange?.({mode:e.currentTarget.value===`percentage`?`percentage`:`all`})}
|
|
2061
2145
|
>
|
|
2062
2146
|
<option
|
|
2063
2147
|
value="all"
|
|
2064
|
-
?selected=${
|
|
2148
|
+
?selected=${O.mode!==`percentage`}
|
|
2065
2149
|
>
|
|
2066
2150
|
All
|
|
2067
2151
|
</option>
|
|
2068
2152
|
<option
|
|
2069
2153
|
value="percentage"
|
|
2070
|
-
?selected=${
|
|
2154
|
+
?selected=${O.mode===`percentage`}
|
|
2071
2155
|
>
|
|
2072
2156
|
%
|
|
2073
2157
|
</option>
|
|
@@ -2078,9 +2162,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2078
2162
|
<input
|
|
2079
2163
|
type="text"
|
|
2080
2164
|
inputmode="decimal"
|
|
2081
|
-
.value=${
|
|
2082
|
-
?disabled=${a.settingsBusy||!
|
|
2083
|
-
@change=${e=>a.onMiningSatSweepChange?.({minRaw:
|
|
2165
|
+
.value=${ae(O.minRaw??`1`)}
|
|
2166
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2167
|
+
@change=${e=>a.onMiningSatSweepChange?.({minRaw:oe(e.currentTarget.value)})}
|
|
2084
2168
|
placeholder="1"
|
|
2085
2169
|
/>
|
|
2086
2170
|
</label>
|
|
@@ -2089,24 +2173,24 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2089
2173
|
<input
|
|
2090
2174
|
type="text"
|
|
2091
2175
|
inputmode="decimal"
|
|
2092
|
-
.value=${
|
|
2093
|
-
?disabled=${a.settingsBusy||!
|
|
2094
|
-
@change=${e=>a.onMiningSatSweepChange?.({keepRaw:
|
|
2176
|
+
.value=${ae(O.keepRaw??`0`)}
|
|
2177
|
+
?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
|
|
2178
|
+
@change=${e=>a.onMiningSatSweepChange?.({keepRaw:oe(e.currentTarget.value)})}
|
|
2095
2179
|
placeholder="0"
|
|
2096
2180
|
/>
|
|
2097
2181
|
</label>
|
|
2098
2182
|
</div>
|
|
2099
2183
|
</div>
|
|
2100
2184
|
`:t:e`
|
|
2101
|
-
${l&&
|
|
2102
|
-
${
|
|
2185
|
+
${l&&N===`caps`?ve({props:a,settings:l,policyDisplay:w,cardRole:v,selectedWalletId:r.id,cardWalletCanSpendSolana:j,selectedWalletTokens:m,canEditPolicy:x}):t}
|
|
2186
|
+
${v===`agent`&&N===`schedule`?e`
|
|
2103
2187
|
<div class="field">
|
|
2104
2188
|
<div class="wallet-card-security__grid">
|
|
2105
2189
|
<label class="field">
|
|
2106
2190
|
<span>Status</span>
|
|
2107
2191
|
<select
|
|
2108
2192
|
.value=${a.recurringTransferEnabled?`enabled`:`disabled`}
|
|
2109
|
-
?disabled=${a.settingsBusy||!
|
|
2193
|
+
?disabled=${a.settingsBusy||!x}
|
|
2110
2194
|
@change=${e=>a.onPolicyDraftChange({recurringTransferEnabled:e.currentTarget.value===`enabled`})}
|
|
2111
2195
|
>
|
|
2112
2196
|
<option value="disabled">Off</option>
|
|
@@ -2118,7 +2202,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2118
2202
|
<input
|
|
2119
2203
|
placeholder="@wallet:vault or Solana address"
|
|
2120
2204
|
.value=${a.recurringTransferDestination}
|
|
2121
|
-
?disabled=${a.settingsBusy||!
|
|
2205
|
+
?disabled=${a.settingsBusy||!x}
|
|
2122
2206
|
@input=${e=>a.onPolicyDraftChange({recurringTransferDestination:e.currentTarget.value})}
|
|
2123
2207
|
/>
|
|
2124
2208
|
</label>
|
|
@@ -2127,18 +2211,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2127
2211
|
<input
|
|
2128
2212
|
placeholder="Blank for SOL"
|
|
2129
2213
|
.value=${a.recurringTransferMint}
|
|
2130
|
-
?disabled=${a.settingsBusy||!
|
|
2214
|
+
?disabled=${a.settingsBusy||!x}
|
|
2131
2215
|
@input=${e=>a.onPolicyDraftChange({recurringTransferMint:e.currentTarget.value})}
|
|
2132
2216
|
/>
|
|
2133
2217
|
</label>
|
|
2134
|
-
${
|
|
2218
|
+
${R?e`
|
|
2135
2219
|
<label class="field">
|
|
2136
2220
|
<span>Decimals</span>
|
|
2137
2221
|
<input
|
|
2138
2222
|
inputmode="numeric"
|
|
2139
2223
|
placeholder="6"
|
|
2140
2224
|
.value=${a.recurringTransferDecimals}
|
|
2141
|
-
?disabled=${a.settingsBusy||!
|
|
2225
|
+
?disabled=${a.settingsBusy||!x}
|
|
2142
2226
|
@input=${e=>a.onPolicyDraftChange({recurringTransferDecimals:e.currentTarget.value})}
|
|
2143
2227
|
/>
|
|
2144
2228
|
</label>
|
|
@@ -2147,7 +2231,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2147
2231
|
<span>Amount mode</span>
|
|
2148
2232
|
<select
|
|
2149
2233
|
.value=${a.recurringTransferAmountMode}
|
|
2150
|
-
?disabled=${a.settingsBusy||!
|
|
2234
|
+
?disabled=${a.settingsBusy||!x}
|
|
2151
2235
|
@change=${e=>a.onPolicyDraftChange({recurringTransferAmountMode:e.currentTarget.value===`percentage`?`percentage`:`fixed`})}
|
|
2152
2236
|
>
|
|
2153
2237
|
<option value="fixed">Fixed</option>
|
|
@@ -2161,25 +2245,25 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2161
2245
|
inputmode="numeric"
|
|
2162
2246
|
placeholder="40"
|
|
2163
2247
|
.value=${a.recurringTransferPercentage}
|
|
2164
|
-
?disabled=${a.settingsBusy||!
|
|
2248
|
+
?disabled=${a.settingsBusy||!x}
|
|
2165
2249
|
@input=${e=>a.onPolicyDraftChange({recurringTransferPercentage:e.currentTarget.value})}
|
|
2166
2250
|
/>
|
|
2167
2251
|
</label>
|
|
2168
2252
|
<label class="field">
|
|
2169
2253
|
<span>Minimum</span>
|
|
2170
2254
|
<input
|
|
2171
|
-
placeholder=${`0.01 ${
|
|
2255
|
+
placeholder=${`0.01 ${z}`}
|
|
2172
2256
|
.value=${a.recurringTransferMinAmount}
|
|
2173
|
-
?disabled=${a.settingsBusy||!
|
|
2257
|
+
?disabled=${a.settingsBusy||!x}
|
|
2174
2258
|
@input=${e=>a.onPolicyDraftChange({recurringTransferMinAmount:e.currentTarget.value})}
|
|
2175
2259
|
/>
|
|
2176
2260
|
</label>
|
|
2177
2261
|
<label class="field">
|
|
2178
2262
|
<span>Keep</span>
|
|
2179
2263
|
<input
|
|
2180
|
-
placeholder=${`0 ${
|
|
2264
|
+
placeholder=${`0 ${z}`}
|
|
2181
2265
|
.value=${a.recurringTransferKeepAmount}
|
|
2182
|
-
?disabled=${a.settingsBusy||!
|
|
2266
|
+
?disabled=${a.settingsBusy||!x}
|
|
2183
2267
|
@input=${e=>a.onPolicyDraftChange({recurringTransferKeepAmount:e.currentTarget.value})}
|
|
2184
2268
|
/>
|
|
2185
2269
|
</label>
|
|
@@ -2187,9 +2271,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2187
2271
|
<label class="field">
|
|
2188
2272
|
<span>Amount</span>
|
|
2189
2273
|
<input
|
|
2190
|
-
placeholder=${`0.1 ${
|
|
2274
|
+
placeholder=${`0.1 ${z}`}
|
|
2191
2275
|
.value=${a.recurringTransferAmount}
|
|
2192
|
-
?disabled=${a.settingsBusy||!
|
|
2276
|
+
?disabled=${a.settingsBusy||!x}
|
|
2193
2277
|
@input=${e=>a.onPolicyDraftChange({recurringTransferAmount:e.currentTarget.value})}
|
|
2194
2278
|
/>
|
|
2195
2279
|
</label>
|
|
@@ -2201,17 +2285,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2201
2285
|
min="1"
|
|
2202
2286
|
step="1"
|
|
2203
2287
|
placeholder="1"
|
|
2204
|
-
.value=${
|
|
2205
|
-
?disabled=${a.settingsBusy||!
|
|
2206
|
-
@input=${e=>
|
|
2288
|
+
.value=${I.every}
|
|
2289
|
+
?disabled=${a.settingsBusy||!x}
|
|
2290
|
+
@input=${e=>B({every:e.currentTarget.value})}
|
|
2207
2291
|
/>
|
|
2208
2292
|
</label>
|
|
2209
2293
|
<label class="field">
|
|
2210
2294
|
<span>Unit</span>
|
|
2211
2295
|
<select
|
|
2212
|
-
.value=${
|
|
2213
|
-
?disabled=${a.settingsBusy||!
|
|
2214
|
-
@change=${e=>
|
|
2296
|
+
.value=${I.unit}
|
|
2297
|
+
?disabled=${a.settingsBusy||!x}
|
|
2298
|
+
@change=${e=>B({unit:e.currentTarget.value})}
|
|
2215
2299
|
>
|
|
2216
2300
|
<option value="minutes">minutes</option>
|
|
2217
2301
|
<option value="hours">hours</option>
|
|
@@ -2219,14 +2303,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2219
2303
|
<option value="months">months</option>
|
|
2220
2304
|
</select>
|
|
2221
2305
|
</label>
|
|
2222
|
-
${
|
|
2306
|
+
${I.unit===`days`||I.unit===`months`?e`
|
|
2223
2307
|
<label class="field">
|
|
2224
2308
|
<span>At</span>
|
|
2225
2309
|
<input
|
|
2226
2310
|
type="time"
|
|
2227
|
-
.value=${
|
|
2228
|
-
?disabled=${a.settingsBusy||!
|
|
2229
|
-
@input=${e=>
|
|
2311
|
+
.value=${I.time}
|
|
2312
|
+
?disabled=${a.settingsBusy||!x}
|
|
2313
|
+
@input=${e=>B({time:e.currentTarget.value})}
|
|
2230
2314
|
/>
|
|
2231
2315
|
</label>
|
|
2232
2316
|
`:t}
|
|
@@ -2235,7 +2319,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2235
2319
|
<input
|
|
2236
2320
|
placeholder="America/Chicago"
|
|
2237
2321
|
.value=${a.recurringTransferTz}
|
|
2238
|
-
?disabled=${a.settingsBusy||!
|
|
2322
|
+
?disabled=${a.settingsBusy||!x}
|
|
2239
2323
|
@input=${e=>a.onPolicyDraftChange({recurringTransferTz:e.currentTarget.value})}
|
|
2240
2324
|
/>
|
|
2241
2325
|
</label>
|
|
@@ -2244,26 +2328,26 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2244
2328
|
<input
|
|
2245
2329
|
placeholder="Daily transfer"
|
|
2246
2330
|
.value=${a.recurringTransferName}
|
|
2247
|
-
?disabled=${a.settingsBusy||!
|
|
2331
|
+
?disabled=${a.settingsBusy||!x}
|
|
2248
2332
|
@input=${e=>a.onPolicyDraftChange({recurringTransferName:e.currentTarget.value})}
|
|
2249
2333
|
/>
|
|
2250
2334
|
</label>
|
|
2251
2335
|
<button
|
|
2252
2336
|
class="btn"
|
|
2253
|
-
?disabled=${a.settingsBusy||!
|
|
2337
|
+
?disabled=${a.settingsBusy||!x}
|
|
2254
2338
|
@click=${a.onSavePolicy}
|
|
2255
2339
|
>
|
|
2256
2340
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
2257
2341
|
</button>
|
|
2258
2342
|
</div>
|
|
2259
|
-
${
|
|
2343
|
+
${I.custom?e`
|
|
2260
2344
|
<div class="wallet-security-note" style="margin-top: 8px">
|
|
2261
2345
|
Existing custom schedule is preserved until you edit Every, Unit, or At.
|
|
2262
2346
|
</div>
|
|
2263
2347
|
`:t}
|
|
2264
2348
|
</div>
|
|
2265
2349
|
`:t}
|
|
2266
|
-
${
|
|
2350
|
+
${v===`agent`&&N===`automation`?e`
|
|
2267
2351
|
${e`
|
|
2268
2352
|
<div class="field">
|
|
2269
2353
|
<div class="wallet-spend-limit-row">
|
|
@@ -2271,7 +2355,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2271
2355
|
<span>Status</span>
|
|
2272
2356
|
<select
|
|
2273
2357
|
.value=${a.policyAutoEnabled??l?.policy.directSigning??!0?`enabled`:`disabled`}
|
|
2274
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2358
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2275
2359
|
@change=${e=>a.onPolicyDraftChange({directSigning:e.currentTarget.value===`enabled`})}
|
|
2276
2360
|
>
|
|
2277
2361
|
<option value="disabled">Off</option>
|
|
@@ -2280,7 +2364,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2280
2364
|
</label>
|
|
2281
2365
|
<button
|
|
2282
2366
|
class="btn"
|
|
2283
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2367
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2284
2368
|
@click=${a.onSavePolicy}
|
|
2285
2369
|
>
|
|
2286
2370
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
@@ -2289,7 +2373,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2289
2373
|
</div>
|
|
2290
2374
|
`}
|
|
2291
2375
|
`:t}
|
|
2292
|
-
${
|
|
2376
|
+
${v===`agent`&&N===`skills`?e`
|
|
2293
2377
|
${e`
|
|
2294
2378
|
<div class="field">
|
|
2295
2379
|
<div class="wallet-spend-limit-row">
|
|
@@ -2297,7 +2381,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2297
2381
|
<span>Status</span>
|
|
2298
2382
|
<select
|
|
2299
2383
|
.value=${a.policySkillsEnabled??l?.policy.skillsEnabled??!1?`enabled`:`disabled`}
|
|
2300
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2384
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2301
2385
|
@change=${e=>a.onPolicyDraftChange({skillsEnabled:e.currentTarget.value===`enabled`})}
|
|
2302
2386
|
>
|
|
2303
2387
|
<option value="disabled">Off</option>
|
|
@@ -2306,7 +2390,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2306
2390
|
</label>
|
|
2307
2391
|
<button
|
|
2308
2392
|
class="btn"
|
|
2309
|
-
?disabled=${a.settingsBusy||!l||!
|
|
2393
|
+
?disabled=${a.settingsBusy||!l||!x}
|
|
2310
2394
|
@click=${a.onSavePolicy}
|
|
2311
2395
|
>
|
|
2312
2396
|
${a.settingsBusy?`Saving...`:`Save`}
|
|
@@ -2331,7 +2415,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2331
2415
|
<div>
|
|
2332
2416
|
<div class="card-title wallet-title-with-help">
|
|
2333
2417
|
<span>Wallet Approvals</span>
|
|
2334
|
-
${
|
|
2418
|
+
${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
2419
|
</div>
|
|
2336
2420
|
<div class="card-sub">Pending and recent reviewed wallet operations.</div>
|
|
2337
2421
|
</div>
|
|
@@ -2363,7 +2447,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2363
2447
|
<div>Created</div>
|
|
2364
2448
|
<div>Action</div>
|
|
2365
2449
|
</div>
|
|
2366
|
-
${a.approvals.map(n=>{let i=
|
|
2450
|
+
${a.approvals.map(n=>{let i=se({request:n,balances:a.balances}),o=ce({request:n,namedWallets:a.namedWallets}),s=Array.isArray(n.payload.routeProgramIds)?n.payload.routeProgramIds.map(e=>String(e).trim()).filter(Boolean):[];return e`
|
|
2367
2451
|
<div
|
|
2368
2452
|
id=${r(`wallet-approval`,n.id)}
|
|
2369
2453
|
class="table-row"
|
|
@@ -2374,15 +2458,15 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2374
2458
|
<div class="muted" style="font-size: 0.8em; margin-top: 4px;">
|
|
2375
2459
|
expires ${new Date(n.expiresAt).toLocaleString()}
|
|
2376
2460
|
</div>
|
|
2377
|
-
${
|
|
2378
|
-
${
|
|
2461
|
+
${le({request:n,display:i,endpoints:o})}
|
|
2462
|
+
${ue(n)}
|
|
2379
2463
|
</div>
|
|
2380
2464
|
<div>
|
|
2381
2465
|
<div class="row" style="gap: 8px; align-items: center;">
|
|
2382
2466
|
<span
|
|
2383
2467
|
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
2468
|
>
|
|
2385
|
-
${
|
|
2469
|
+
${Ce(n.status)}
|
|
2386
2470
|
</span>
|
|
2387
2471
|
<span style="font-size: 0.9em; font-weight: 600; text-transform: lowercase;">
|
|
2388
2472
|
${n.status}
|
|
@@ -2422,14 +2506,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2422
2506
|
`:t}
|
|
2423
2507
|
${s.length>0?e`
|
|
2424
2508
|
<div class="muted" style="font-size: 0.76em; margin-top: 4px;">
|
|
2425
|
-
route ${s.map(e=>
|
|
2509
|
+
route ${s.map(e=>Y(e,4,4)).join(`, `)}
|
|
2426
2510
|
</div>
|
|
2427
2511
|
`:t}
|
|
2428
2512
|
</div>
|
|
2429
2513
|
<div style="min-width: 0;">
|
|
2430
2514
|
${o.fromAddress?e`
|
|
2431
2515
|
<div class="mono" style="font-size: 0.82em;">
|
|
2432
|
-
${
|
|
2516
|
+
${Y(o.fromAddress)}
|
|
2433
2517
|
</div>
|
|
2434
2518
|
`:e`
|
|
2435
2519
|
<div class="muted">—</div>
|
|
@@ -2438,7 +2522,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2438
2522
|
<div style="min-width: 0;">
|
|
2439
2523
|
${o.toAddress?e`
|
|
2440
2524
|
<div class="mono" style="font-size: 0.82em;">
|
|
2441
|
-
${
|
|
2525
|
+
${Y(o.toAddress)}
|
|
2442
2526
|
</div>
|
|
2443
2527
|
`:e`
|
|
2444
2528
|
<div class="muted">—</div>
|
|
@@ -2469,7 +2553,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2469
2553
|
</span>
|
|
2470
2554
|
`:n.result?.txHash?e`
|
|
2471
2555
|
<span class="mono muted" style="font-size: 0.8em;">
|
|
2472
|
-
${
|
|
2556
|
+
${Y(n.result.txHash)}
|
|
2473
2557
|
</span>
|
|
2474
2558
|
`:e`
|
|
2475
2559
|
<span class="muted">—</span>
|
|
@@ -2486,45 +2570,45 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2486
2570
|
</div>
|
|
2487
2571
|
`}
|
|
2488
2572
|
</div>
|
|
2489
|
-
${
|
|
2573
|
+
${B===`wallets`?e`<div class="card wallet-activity-card" style="grid-column: 1 / -1;">
|
|
2490
2574
|
<div class="wallet-activity-card__head">
|
|
2491
2575
|
<div>
|
|
2492
2576
|
<div class="card-title">Wallet Activity</div>
|
|
2493
2577
|
<div class="card-sub">Recent send requests and outcomes.</div>
|
|
2494
2578
|
</div>
|
|
2495
|
-
${
|
|
2496
|
-
Showing ${
|
|
2579
|
+
${h>0?e`<div class="wallet-status-chip">
|
|
2580
|
+
Showing ${y+1}-${Math.min(y+s,h)} of ${h}
|
|
2497
2581
|
</div>`:t}
|
|
2498
2582
|
</div>
|
|
2499
|
-
${
|
|
2583
|
+
${h>0?e`
|
|
2500
2584
|
<div class="wallet-activity-toolbar">
|
|
2501
2585
|
<div class="wallet-chip-row">
|
|
2502
|
-
<span class="wallet-status-chip">Page ${
|
|
2586
|
+
<span class="wallet-status-chip">Page ${_} / ${g}</span>
|
|
2503
2587
|
</div>
|
|
2504
2588
|
<div class="row" style="gap: 8px; flex-wrap: wrap;">
|
|
2505
2589
|
<button
|
|
2506
2590
|
class="btn small"
|
|
2507
|
-
?disabled=${
|
|
2508
|
-
@click=${()=>a.onActivityPageChange(
|
|
2591
|
+
?disabled=${_<=1}
|
|
2592
|
+
@click=${()=>a.onActivityPageChange(_-1)}
|
|
2509
2593
|
>
|
|
2510
2594
|
Prev
|
|
2511
2595
|
</button>
|
|
2512
2596
|
<button
|
|
2513
2597
|
class="btn small"
|
|
2514
|
-
?disabled=${g
|
|
2515
|
-
@click=${()=>a.onActivityPageChange(
|
|
2598
|
+
?disabled=${_>=g}
|
|
2599
|
+
@click=${()=>a.onActivityPageChange(_+1)}
|
|
2516
2600
|
>
|
|
2517
2601
|
Next
|
|
2518
2602
|
</button>
|
|
2519
2603
|
</div>
|
|
2520
2604
|
</div>
|
|
2521
2605
|
<div class="wallet-activity-list">
|
|
2522
|
-
${
|
|
2606
|
+
${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=j(r.to,`n/a`),l=j(r.txHash||r.txId,``),u=j(r.reason,``),d=j(r.orderId,``),f=j(r.vaultPubkey,``),p=j(r.executionProvider,``),m=Fe(n.action);return e`
|
|
2523
2607
|
<div class="wallet-activity-item" data-tone=${m}>
|
|
2524
2608
|
<div class="wallet-activity-item__head">
|
|
2525
2609
|
<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>${
|
|
2610
|
+
<span style="color: ${m===`danger`?`var(--danger)`:m===`success`?`var(--ok)`:m===`warn`?`var(--warn)`:`var(--muted)`};">${we(n.action)}</span>
|
|
2611
|
+
<span>${Se(n)}</span>
|
|
2528
2612
|
</div>
|
|
2529
2613
|
<div class="wallet-activity-item__time">
|
|
2530
2614
|
${new Date(n.at).toLocaleString()}
|
|
@@ -2532,17 +2616,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2532
2616
|
</div>
|
|
2533
2617
|
<div class="wallet-activity-item__facts">
|
|
2534
2618
|
${o?t:e`<span class="wallet-status-chip"
|
|
2535
|
-
>${i?
|
|
2619
|
+
>${i?M(i):`n/a`}</span
|
|
2536
2620
|
>`}
|
|
2537
2621
|
<span class="wallet-status-chip">${s}</span>
|
|
2538
2622
|
${p?e`<span class="wallet-status-chip">${p}</span>`:t}
|
|
2539
2623
|
</div>
|
|
2540
2624
|
<div class="wallet-activity-item__rows">
|
|
2541
|
-
${c===`n/a`?t:$({label:`To`,value:
|
|
2542
|
-
${o?$({label:`Mint`,value:
|
|
2543
|
-
${d?$({label:`Order`,value:
|
|
2544
|
-
${f?$({label:`Vault`,value:
|
|
2545
|
-
${l?$({label:`Tx`,value:
|
|
2625
|
+
${c===`n/a`?t:$({label:`To`,value:Y(c,10,8),rawValue:c,copyLabel:`destination address`,href:Q(i,`address`,c)})}
|
|
2626
|
+
${o?$({label:`Mint`,value:Y(o,10,8),rawValue:o,copyLabel:`token mint`,href:Q(`solana`,`address`,o)}):t}
|
|
2627
|
+
${d?$({label:`Order`,value:Y(d,10,8),rawValue:d,copyLabel:`order id`}):t}
|
|
2628
|
+
${f?$({label:`Vault`,value:Y(f,10,8),rawValue:f,copyLabel:`vault address`,href:Q(`solana`,`address`,f)}):t}
|
|
2629
|
+
${l?$({label:`Tx`,value:Y(l,10,8),rawValue:l,copyLabel:`transaction hash`,href:Q(i,`tx`,l)}):u?e`<div class="wallet-meta-row">
|
|
2546
2630
|
<span class="wallet-meta-row__label">Note</span>
|
|
2547
2631
|
<span class="wallet-meta-row__value">${u}</span>
|
|
2548
2632
|
<span class="wallet-meta-row__actions"></span>
|
|
@@ -2557,7 +2641,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2557
2641
|
</div>
|
|
2558
2642
|
`:t}
|
|
2559
2643
|
</section>
|
|
2560
|
-
`}function
|
|
2644
|
+
`}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}=be(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=K(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
2645
|
<div class="modal-overlay" @click=${n.onSendModalClose}>
|
|
2562
2646
|
<div class="modal-card card" @click=${e=>e.stopPropagation()}>
|
|
2563
2647
|
<div class="row" style="justify-content: space-between; align-items: center; margin-bottom: 16px;">
|
|
@@ -2566,7 +2650,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2566
2650
|
<div class="muted" style="margin-top: 6px;">
|
|
2567
2651
|
From ${p}
|
|
2568
2652
|
${u?e`<span class="mono" style="margin-left: 8px;">
|
|
2569
|
-
${
|
|
2653
|
+
${Y(u,4,4)}
|
|
2570
2654
|
</span>`:t}
|
|
2571
2655
|
</div>
|
|
2572
2656
|
</div>
|
|
@@ -2584,7 +2668,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2584
2668
|
>
|
|
2585
2669
|
${o.map(t=>e`
|
|
2586
2670
|
<option value=${t.id} ?selected=${t.id===d?.id}>
|
|
2587
|
-
${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${
|
|
2671
|
+
${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${q(t.amountDisplay)}
|
|
2588
2672
|
</option>
|
|
2589
2673
|
`)}
|
|
2590
2674
|
</select>
|
|
@@ -2728,5 +2812,5 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
|
|
|
2728
2812
|
}
|
|
2729
2813
|
}
|
|
2730
2814
|
</style>
|
|
2731
|
-
`}export{u as describeAdminControlShortcut,
|
|
2732
|
-
//# sourceMappingURL=wallet-
|
|
2815
|
+
`}export{u as describeAdminControlShortcut,E as describeAgentDefaultAction,d as describeVaultSignerApproval,m as describeWalletAutomationPolicySummary,w as describeWalletRoleBadges,f as describeWalletSendFlow,g as hasWalletBalanceValue,k as orderWalletsForDisplay,Ie as renderWallet,h as resolveActiveMiningWalletId,C as resolveOperatorWalletRoles};
|
|
2816
|
+
//# sourceMappingURL=wallet-ByKBcYhm.js.map
|