@fased/fased 0.1.62 → 0.1.64
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 +32 -0
- package/README.md +38 -30
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +49 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +76 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/agents/auth-profiles/store.js +267 -31
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +128 -0
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/channel-web.js +2 -2
- package/dist/cli/gateway-cli/run.js +8 -0
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +32 -8
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/wallet.js +568 -1911
- package/dist/config/config.js +2 -2
- package/dist/config/io.js +64 -2
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-DLil9VO1.js → app-bR-fO5ty.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-DdE_NIXo.js → index-ckCxHwjy.js} +3 -3
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/daemon/systemd-system.js +56 -50
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-http.js +1084 -1205
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/index.js +4 -2
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/restart.js +41 -10
- package/dist/infra/update-runner.js +96 -0
- package/dist/light-update-status.js +11 -11
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/session-files.js +16 -2
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-BYxAt775.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DIRHG2gJ.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +6 -6
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +21 -39
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BUTt8cxK.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +6 -6
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-D0wHVqjt.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +6 -6
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
- package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-CInY-lCv.js → web-BXsJ1vqe.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +13 -13
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +1 -1
- package/dist/secrets/runtime.js +1 -1
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +561 -118
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +90 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +17 -28
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +16 -11
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +90 -36
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +57 -44
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +28 -41
- package/dist/wallet/wallet-secrets-store.js +22 -0
- package/dist/wallet/wallet-send-approvals.js +1891 -589
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +14 -13
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/wizard/host-security-capability.js +14 -23
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +117 -1367
- package/dist/wizard/onboarding.js +172 -217
- package/dist/wizard/onboarding.wallet.js +232 -785
- 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/index.ts +498 -153
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +50 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +330 -89
- package/extensions/sat-mining/src/runtime.ts +14 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1199 -428
- package/extensions/sat-mining/src/submission-ledger.ts +433 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +23 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1430 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +183 -108
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +169 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { hasLegacyEmbeddedKeystoreConfig, hasLegacyEmbeddedKeystoreMaterialHint, throwLegacyEmbeddedKeystoreMigrationRequired } from "./legacy-embedded-keystore.js";
|
|
2
2
|
import { readWalletProviderRegistry } from "./wallet-provider-registry.js";
|
|
3
3
|
import { AlchemyAdapter } from "./providers/alchemy-adapter.js";
|
|
4
|
-
import { EmbeddedKeystoreAdapter } from "./providers/embedded-keystore-adapter.js";
|
|
5
4
|
import { LocalSocketSignerAdapter, requireLocalSocketSignerPath } from "./providers/local-socket-signer-adapter.js";
|
|
6
|
-
import { PrivyAdapter } from "./providers/privy-adapter.js";
|
|
7
5
|
import { TurnkeyAdapter } from "./providers/turnkey-adapter.js";
|
|
6
|
+
import { WalletStandardAdapter } from "./providers/wallet-standard-adapter.js";
|
|
8
7
|
import { loadWalletProviderSecret } from "./wallet-secrets-store.js";
|
|
9
8
|
|
|
10
9
|
//#region src/wallet/wallet-provider-resolver.ts
|
|
@@ -14,10 +13,14 @@ function parseProviderId(input) {
|
|
|
14
13
|
case "local-socket-signer":
|
|
15
14
|
case "alchemy":
|
|
16
15
|
case "turnkey":
|
|
16
|
+
case "wallet-standard":
|
|
17
17
|
case "privy": return input;
|
|
18
18
|
default: return null;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
function throwPrivyProviderUnavailable() {
|
|
22
|
+
throw new Error("Privy wallet creation and signing are unavailable; no Privy provider selection or credentials are accepted.");
|
|
23
|
+
}
|
|
21
24
|
function pickCredentialValue(source, keys) {
|
|
22
25
|
for (const key of keys) {
|
|
23
26
|
const value = source[key];
|
|
@@ -57,7 +60,7 @@ function resolveWalletRpcUrlFromEnv(env, chain, walletId) {
|
|
|
57
60
|
const perWalletKey = suffix ? `FASED_WALLET_SOLANA_RPC_URL__${suffix}` : "";
|
|
58
61
|
const perChainKey = "FASED_WALLET_SOLANA_RPC_URL";
|
|
59
62
|
const scopedOrChain = (perWalletKey ? String(env[perWalletKey] ?? "").trim() : "") || String(env[perChainKey] ?? "").trim();
|
|
60
|
-
return scopedOrChain || String(env.
|
|
63
|
+
return scopedOrChain || String(env.FASED_WALLET_RPC_URL ?? "").trim();
|
|
61
64
|
}
|
|
62
65
|
function resolveScopedRpcUrlForWallet(params) {
|
|
63
66
|
const preferred = inferWalletChainFromRegistry(params.env, params.walletId);
|
|
@@ -79,14 +82,6 @@ function inferSelfHostedProviderId(env) {
|
|
|
79
82
|
if (String(env.FASED_WALLET_LOCAL_SIGNER_SOCKET ?? "").trim()) {
|
|
80
83
|
return "local-socket-signer";
|
|
81
84
|
}
|
|
82
|
-
for (const [key, rawValue] of Object.entries(env)) {
|
|
83
|
-
if (typeof rawValue !== "string" || rawValue.trim().length === 0) {
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (key === "FASED_WALLET_SOLANA_KEYSTORE_PATH" || key === "FASED_WALLET_PASSPHRASE_FILE" || key.startsWith("FASED_WALLET_SOLANA_KEYSTORE_PATH__")) {
|
|
87
|
-
return "local-socket-signer";
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
85
|
return null;
|
|
91
86
|
}
|
|
92
87
|
function resolveWalletProviderId(cfg, env = process.env) {
|
|
@@ -95,14 +90,19 @@ function resolveWalletProviderId(cfg, env = process.env) {
|
|
|
95
90
|
...cfg.env?.vars
|
|
96
91
|
};
|
|
97
92
|
const envProvider = parseProviderId(effectiveEnv.FASED_WALLET_PROVIDER);
|
|
98
|
-
if (
|
|
99
|
-
|
|
93
|
+
if (hasLegacyEmbeddedKeystoreConfig(cfg, effectiveEnv)) {
|
|
94
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet provider selection detected");
|
|
95
|
+
}
|
|
96
|
+
if (hasLegacyEmbeddedKeystoreMaterialHint(effectiveEnv)) {
|
|
97
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet material configuration detected");
|
|
100
98
|
}
|
|
101
99
|
const configProvider = parseProviderId(cfg.wallet?.provider?.id);
|
|
102
100
|
const inferredSelfHostedProvider = inferSelfHostedProviderId(effectiveEnv);
|
|
103
101
|
let registryProvider = null;
|
|
102
|
+
let registryHasLegacyEmbeddedWallet = false;
|
|
104
103
|
try {
|
|
105
104
|
const registry = readWalletProviderRegistry(effectiveEnv);
|
|
105
|
+
registryHasLegacyEmbeddedWallet = Boolean(registry.providers["embedded-keystore"]?.enabled) || registry.wallets.some((entry) => entry.providerId === "embedded-keystore");
|
|
106
106
|
const satWalletId = typeof cfg.plugins?.entries?.["sat-mining"]?.config?.walletId === "string" ? cfg.plugins.entries["sat-mining"]?.config?.walletId.trim() : "";
|
|
107
107
|
const satWallet = satWalletId ? registry.wallets.find((entry) => entry.id === satWalletId) : undefined;
|
|
108
108
|
if (satWallet?.providerId) {
|
|
@@ -123,13 +123,28 @@ function resolveWalletProviderId(cfg, env = process.env) {
|
|
|
123
123
|
} catch {
|
|
124
124
|
registryProvider = null;
|
|
125
125
|
}
|
|
126
|
-
if (
|
|
126
|
+
if (registryHasLegacyEmbeddedWallet || registryProvider === "embedded-keystore") {
|
|
127
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet registry selection detected");
|
|
128
|
+
}
|
|
129
|
+
if (envProvider === "privy") {
|
|
130
|
+
throwPrivyProviderUnavailable();
|
|
131
|
+
}
|
|
132
|
+
if (envProvider) {
|
|
133
|
+
return envProvider;
|
|
134
|
+
}
|
|
135
|
+
if (registryProvider === "privy") {
|
|
136
|
+
throwPrivyProviderUnavailable();
|
|
137
|
+
}
|
|
138
|
+
if (registryProvider && !configProvider) {
|
|
127
139
|
return registryProvider;
|
|
128
140
|
}
|
|
129
|
-
if (inferredSelfHostedProvider &&
|
|
141
|
+
if (inferredSelfHostedProvider && !configProvider) {
|
|
130
142
|
return inferredSelfHostedProvider;
|
|
131
143
|
}
|
|
132
144
|
if (configProvider) {
|
|
145
|
+
if (configProvider === "privy") {
|
|
146
|
+
throwPrivyProviderUnavailable();
|
|
147
|
+
}
|
|
133
148
|
return configProvider;
|
|
134
149
|
}
|
|
135
150
|
return inferredSelfHostedProvider ?? "local-socket-signer";
|
|
@@ -141,25 +156,10 @@ function createWalletProviderAdapter(params) {
|
|
|
141
156
|
};
|
|
142
157
|
const providerId = params.providerIdOverride ?? resolveWalletProviderId(params.cfg, env);
|
|
143
158
|
if (providerId === "embedded-keystore") {
|
|
144
|
-
|
|
145
|
-
const secretCredentials = secret?.credentials ?? {};
|
|
146
|
-
return new EmbeddedKeystoreAdapter({
|
|
147
|
-
chains: params.wallet.chains,
|
|
148
|
-
credentials: {
|
|
149
|
-
keystorePath: pickCredentialValue(secretCredentials, ["keystorePath", "path"]) || params.cfg.wallet?.keystore?.path?.trim() || String(env.FASED_WALLET_KEYSTORE_PATH ?? "").trim() || undefined,
|
|
150
|
-
passphrase: pickCredentialValue(secretCredentials, ["passphrase"]) || String(env.FASED_WALLET_PASSPHRASE ?? "").trim() || undefined,
|
|
151
|
-
rpcUrl: pickCredentialValue(secretCredentials, ["rpcUrl", "rpc_url"]) || resolveScopedRpcUrlForWallet({
|
|
152
|
-
env,
|
|
153
|
-
chains: params.wallet.chains,
|
|
154
|
-
walletId: params.walletId
|
|
155
|
-
}) || undefined
|
|
156
|
-
},
|
|
157
|
-
env
|
|
158
|
-
});
|
|
159
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet adapter selection detected");
|
|
159
160
|
}
|
|
160
161
|
if (providerId === "local-socket-signer") {
|
|
161
162
|
return new LocalSocketSignerAdapter(requireLocalSocketSignerPath(env), {
|
|
162
|
-
backendSocketPath: resolveLocalSignerBackendSocketPath(env),
|
|
163
163
|
rpcUrl: resolveScopedRpcUrlForWallet({
|
|
164
164
|
env,
|
|
165
165
|
chains: params.wallet.chains,
|
|
@@ -187,9 +187,19 @@ function createWalletProviderAdapter(params) {
|
|
|
187
187
|
if (providerId === "turnkey") {
|
|
188
188
|
const secret = loadWalletProviderSecret(providerId, env);
|
|
189
189
|
const secretCredentials = secret?.credentials ?? {};
|
|
190
|
+
const registeredWallet = params.walletId ? readWalletProviderRegistry(env).wallets.find((entry) => entry.id === params.walletId) : undefined;
|
|
191
|
+
const registeredProviderWalletId = typeof registeredWallet?.metadata?.turnkeyWalletId === "string" ? registeredWallet.metadata.turnkeyWalletId.trim() : "";
|
|
192
|
+
const registeredSolanaAddress = registeredWallet?.addresses?.solana?.trim() ?? "";
|
|
193
|
+
const configuredSolanaAddress = pickCredentialValue(secretCredentials, ["defaultSolanaAddress", "solanaAddress"]) || String(env.FASED_WALLET_TURNKEY_DEFAULT_SOLANA_ADDRESS ?? "").trim();
|
|
194
|
+
const configuredProviderWalletId = pickCredentialValue(secretCredentials, ["providerWalletId", "turnkeyWalletId"]) || "";
|
|
195
|
+
if (registeredWallet && (registeredSolanaAddress && configuredSolanaAddress && registeredSolanaAddress !== configuredSolanaAddress || registeredProviderWalletId && configuredProviderWalletId && registeredProviderWalletId !== configuredProviderWalletId)) {
|
|
196
|
+
throw new Error(`Turnkey wallet ${registeredWallet.name} does not match the configured provider wallet identity`);
|
|
197
|
+
}
|
|
190
198
|
return new TurnkeyAdapter({
|
|
191
199
|
chains: params.wallet.chains,
|
|
192
200
|
service: params.wallet.service,
|
|
201
|
+
walletName: registeredWallet?.name,
|
|
202
|
+
stateEnv: env,
|
|
193
203
|
credentials: {
|
|
194
204
|
apiPublicKey: pickCredentialValue(secretCredentials, [
|
|
195
205
|
"apiPublicKey",
|
|
@@ -206,47 +216,36 @@ function createWalletProviderAdapter(params) {
|
|
|
206
216
|
"organizationID",
|
|
207
217
|
"orgId"
|
|
208
218
|
]) || String(env.FASED_WALLET_TURNKEY_ORGANIZATION_ID ?? "").trim() || undefined,
|
|
209
|
-
|
|
210
|
-
"stamp",
|
|
211
|
-
"xStamp",
|
|
212
|
-
"x_stamp",
|
|
213
|
-
"apiStamp"
|
|
214
|
-
]) || String(env.FASED_WALLET_TURNKEY_STAMP ?? "").trim() || undefined,
|
|
219
|
+
policyId: pickCredentialValue(secretCredentials, ["policyId", "policyID"]) || String(env.FASED_WALLET_TURNKEY_POLICY_ID ?? "").trim() || undefined,
|
|
215
220
|
baseUrl: pickCredentialValue(secretCredentials, [
|
|
216
221
|
"baseUrl",
|
|
217
222
|
"url",
|
|
218
223
|
"endpoint"
|
|
219
224
|
]) || String(env.FASED_WALLET_TURNKEY_BASE_URL ?? "").trim() || undefined,
|
|
220
|
-
|
|
225
|
+
rpcUrl: pickCredentialValue(secretCredentials, ["rpcUrl", "rpc_url"]) || resolveScopedRpcUrlForWallet({
|
|
226
|
+
env,
|
|
227
|
+
chains: params.wallet.chains,
|
|
228
|
+
walletId: params.walletId
|
|
229
|
+
}) || undefined,
|
|
230
|
+
defaultSolanaAddress: registeredSolanaAddress || configuredSolanaAddress || undefined,
|
|
231
|
+
providerWalletId: registeredProviderWalletId || configuredProviderWalletId || undefined
|
|
221
232
|
}
|
|
222
233
|
});
|
|
223
234
|
}
|
|
224
|
-
if (providerId === "
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
"app_id",
|
|
234
|
-
"applicationId"
|
|
235
|
-
]) || String(env.FASED_WALLET_PRIVY_APP_ID ?? "").trim(),
|
|
236
|
-
appSecret: pickCredentialValue(secretCredentials, [
|
|
237
|
-
"appSecret",
|
|
238
|
-
"app_secret",
|
|
239
|
-
"secret"
|
|
240
|
-
]) || String(env.FASED_WALLET_PRIVY_APP_SECRET ?? "").trim(),
|
|
241
|
-
baseUrl: pickCredentialValue(secretCredentials, [
|
|
242
|
-
"baseUrl",
|
|
243
|
-
"url",
|
|
244
|
-
"endpoint"
|
|
245
|
-
]) || String(env.FASED_WALLET_PRIVY_BASE_URL ?? "").trim() || undefined,
|
|
246
|
-
defaultSolanaAddress: pickCredentialValue(secretCredentials, ["defaultSolanaAddress", "solanaAddress"]) || String(env.FASED_WALLET_PRIVY_DEFAULT_SOLANA_ADDRESS ?? "").trim() || undefined
|
|
247
|
-
}
|
|
235
|
+
if (providerId === "wallet-standard") {
|
|
236
|
+
const registeredWallet = params.walletId ? readWalletProviderRegistry(env).wallets.find((entry) => entry.id === params.walletId) : undefined;
|
|
237
|
+
return new WalletStandardAdapter({
|
|
238
|
+
address: registeredWallet?.addresses?.solana,
|
|
239
|
+
rpcUrl: resolveScopedRpcUrlForWallet({
|
|
240
|
+
env,
|
|
241
|
+
chains: params.wallet.chains,
|
|
242
|
+
walletId: params.walletId
|
|
243
|
+
})
|
|
248
244
|
});
|
|
249
245
|
}
|
|
246
|
+
if (providerId === "privy") {
|
|
247
|
+
throwPrivyProviderUnavailable();
|
|
248
|
+
}
|
|
250
249
|
throw new Error("unsupported wallet provider");
|
|
251
250
|
}
|
|
252
251
|
|
|
@@ -7,6 +7,9 @@ const DEFAULT_WALLET_RUNTIME_PORT = 19444;
|
|
|
7
7
|
const DEFAULT_WALLET_RUNTIME_HOST = "127.0.0.1";
|
|
8
8
|
const DEFAULT_WALLET_RUNTIME_VERSION = "0.1.1";
|
|
9
9
|
const DEFAULT_WALLET_RUNTIME_SOURCE_REF = "v0.2.30";
|
|
10
|
+
function isLocalSignerExternallyManaged(env = process.env) {
|
|
11
|
+
return String(env.FASED_WALLET_LOCAL_SIGNER_LIFECYCLE ?? "").trim().toLowerCase() === "external";
|
|
12
|
+
}
|
|
10
13
|
const DEFAULT_POLICY_CAPS = { solana: {
|
|
11
14
|
maxPerTx: "1000000000",
|
|
12
15
|
maxDaily: "5000000000"
|
|
@@ -50,31 +53,6 @@ function normalizeSolanaTokenCaps(raw) {
|
|
|
50
53
|
}
|
|
51
54
|
return out;
|
|
52
55
|
}
|
|
53
|
-
function isPositivePolicyAmount(raw) {
|
|
54
|
-
if (typeof raw !== "string") {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
try {
|
|
58
|
-
return BigInt(raw.trim() || "0") > 0n;
|
|
59
|
-
} catch {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function hasExplicitPositiveCaps(policy) {
|
|
64
|
-
if (!policy || typeof policy !== "object" || Array.isArray(policy)) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
const value = policy;
|
|
68
|
-
const solana = value.solana && typeof value.solana === "object" ? value.solana : {};
|
|
69
|
-
if (isPositivePolicyAmount(solana.maxPerTx) || isPositivePolicyAmount(solana.maxDaily)) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
const tokenCaps = solana.tokenCaps && typeof solana.tokenCaps === "object" && !Array.isArray(solana.tokenCaps) ? solana.tokenCaps : {};
|
|
73
|
-
return Object.values(tokenCaps).some((capRaw) => {
|
|
74
|
-
const cap = capRaw && typeof capRaw === "object" ? capRaw : {};
|
|
75
|
-
return isPositivePolicyAmount(cap.maxPerTx) || isPositivePolicyAmount(cap.maxDaily);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
56
|
function resolveWalletStatePaths(env = process.env) {
|
|
79
57
|
const rootDir = path.join(resolveStateDir(env), "wallet");
|
|
80
58
|
const stackRootDir = path.join(rootDir, "wallet-stack");
|
|
@@ -128,15 +106,31 @@ function resolveLocalSignerMaterialRootDir(env = process.env) {
|
|
|
128
106
|
return ensureWalletStateDir(env).rootDir;
|
|
129
107
|
}
|
|
130
108
|
function resolveLocalSignerBackendSocketPath(env = process.env) {
|
|
131
|
-
|
|
109
|
+
return resolveLocalSignerSocketPath(env);
|
|
110
|
+
}
|
|
111
|
+
function resolveLocalSignerControlSocketPath(env = process.env) {
|
|
112
|
+
const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_CONTROL_SOCKET ?? "").trim();
|
|
132
113
|
if (explicit) {
|
|
133
114
|
return path.resolve(explicit);
|
|
134
115
|
}
|
|
135
|
-
return
|
|
116
|
+
return path.join(resolveLocalSignerMaterialRootDir(env), "local-signer-control.sock");
|
|
117
|
+
}
|
|
118
|
+
function resolveLocalSignerStateDbPath(env = process.env) {
|
|
119
|
+
const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_STATE_DB ?? "").trim();
|
|
120
|
+
if (explicit) {
|
|
121
|
+
return path.resolve(explicit);
|
|
122
|
+
}
|
|
123
|
+
return path.join(resolveLocalSignerMaterialRootDir(env), "signerd-v2.db");
|
|
124
|
+
}
|
|
125
|
+
function resolveLocalSignerMasterKeyPath(env = process.env) {
|
|
126
|
+
const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_MASTER_KEY ?? "").trim();
|
|
127
|
+
if (explicit) {
|
|
128
|
+
return path.resolve(explicit);
|
|
129
|
+
}
|
|
130
|
+
return path.join(resolveLocalSignerMaterialRootDir(env), "signerd-v2.master.key");
|
|
136
131
|
}
|
|
137
|
-
function resolveLocalSignerRunAsUser(
|
|
138
|
-
|
|
139
|
-
return explicit || undefined;
|
|
132
|
+
function resolveLocalSignerRunAsUser(_env = process.env) {
|
|
133
|
+
return undefined;
|
|
140
134
|
}
|
|
141
135
|
function parseRuntime(value) {
|
|
142
136
|
switch (value) {
|
|
@@ -159,13 +153,6 @@ function inferDefaultWalletProviderId(env) {
|
|
|
159
153
|
if (String(env.FASED_WALLET_LOCAL_SIGNER_SOCKET ?? "").trim()) {
|
|
160
154
|
return "local-socket-signer";
|
|
161
155
|
}
|
|
162
|
-
for (const key of Object.keys(env)) {
|
|
163
|
-
if (key === "FASED_WALLET_SOLANA_KEYSTORE_PATH" || key === "FASED_WALLET_PASSPHRASE_FILE" || key.startsWith("FASED_WALLET_SOLANA_KEYSTORE_PATH__")) {
|
|
164
|
-
if (String(env[key] ?? "").trim()) {
|
|
165
|
-
return "local-socket-signer";
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
156
|
return null;
|
|
170
157
|
}
|
|
171
158
|
function resolveWalletRuntimeConfig(cfg, env = process.env) {
|
|
@@ -203,7 +190,7 @@ function resolveWalletRuntimeConfig(cfg, env = process.env) {
|
|
|
203
190
|
enabled,
|
|
204
191
|
mode,
|
|
205
192
|
runtime,
|
|
206
|
-
execution: { mode: cfg.wallet?.execution?.mode === "autonomous" || cfg.wallet?.execution?.mode !== "manual" && (walletRuntime?.policy?.directSigning ??
|
|
193
|
+
execution: { mode: cfg.wallet?.execution?.mode === "autonomous" || cfg.wallet?.execution?.mode !== "manual" && (walletRuntime?.policy?.directSigning ?? false) ? "autonomous" : "manual" },
|
|
207
194
|
chains,
|
|
208
195
|
service: {
|
|
209
196
|
host,
|
|
@@ -226,8 +213,8 @@ function resolveWalletRuntimeConfig(cfg, env = process.env) {
|
|
|
226
213
|
projectName: "fased-wallet"
|
|
227
214
|
},
|
|
228
215
|
policy: {
|
|
229
|
-
capsEnabled: typeof walletRuntime?.policy?.capsEnabled === "boolean" ? walletRuntime.policy.capsEnabled :
|
|
230
|
-
directSigning: walletRuntime?.policy?.directSigning ??
|
|
216
|
+
capsEnabled: typeof walletRuntime?.policy?.capsEnabled === "boolean" ? walletRuntime.policy.capsEnabled : true,
|
|
217
|
+
directSigning: walletRuntime?.policy?.directSigning ?? false,
|
|
231
218
|
skillsEnabled: walletRuntime?.policy?.skillsEnabled === true,
|
|
232
219
|
solana: {
|
|
233
220
|
allowPrograms: (walletRuntime?.policy?.solana?.allowPrograms ?? []).map((value) => String(value).trim()).filter(Boolean),
|
|
@@ -252,4 +239,4 @@ function resolveWalletRuntimeProviderId(cfg, env = process.env) {
|
|
|
252
239
|
}
|
|
253
240
|
|
|
254
241
|
//#endregion
|
|
255
|
-
export { ensureWalletStateDir,
|
|
242
|
+
export { ensureWalletStateDir, isLocalSignerExternallyManaged, resolveLocalSignerControlSocketPath, resolveLocalSignerMasterKeyPath, resolveLocalSignerMaterialRootDir, resolveLocalSignerSidecarPaths, resolveLocalSignerSocketPath, resolveLocalSignerStateDbPath, resolveWalletRuntimeConfig, resolveWalletStatePaths };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
|
+
import { throwLegacyEmbeddedKeystoreMigrationRequired } from "./legacy-embedded-keystore.js";
|
|
2
3
|
import syncFs from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
|
|
@@ -124,6 +125,7 @@ function decryptProviderPayload(encrypted, env = process.env) {
|
|
|
124
125
|
case "local-socket-signer":
|
|
125
126
|
case "alchemy":
|
|
126
127
|
case "turnkey":
|
|
128
|
+
case "wallet-standard":
|
|
127
129
|
case "privy": return parsed.providerId;
|
|
128
130
|
default: return null;
|
|
129
131
|
}
|
|
@@ -208,6 +210,12 @@ function saveWalletRpcSecret(input, env = process.env) {
|
|
|
208
210
|
}
|
|
209
211
|
function saveWalletProviderSecret(input, env = process.env) {
|
|
210
212
|
const providerId = input.providerId;
|
|
213
|
+
if (providerId === "embedded-keystore") {
|
|
214
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet secret storage is unavailable");
|
|
215
|
+
}
|
|
216
|
+
if (providerId !== "alchemy" && providerId !== "turnkey") {
|
|
217
|
+
throw new Error(`${providerId} does not accept Gateway-held provider credentials; use its signer or wallet authority surface.`);
|
|
218
|
+
}
|
|
211
219
|
const credentials = {};
|
|
212
220
|
for (const [keyName, value] of Object.entries(input.credentials ?? {})) {
|
|
213
221
|
const normalizedKey = keyName.trim();
|
|
@@ -256,6 +264,12 @@ function loadWalletRpcSecret(env = process.env, options) {
|
|
|
256
264
|
return null;
|
|
257
265
|
}
|
|
258
266
|
function loadWalletProviderSecret(providerId, env = process.env) {
|
|
267
|
+
if (providerId === "embedded-keystore") {
|
|
268
|
+
throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet secret loading is unavailable");
|
|
269
|
+
}
|
|
270
|
+
if (providerId !== "alchemy" && providerId !== "turnkey") {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
259
273
|
const secretPath = resolveWalletProviderSecretPath(providerId, env);
|
|
260
274
|
if (!syncFs.existsSync(secretPath)) {
|
|
261
275
|
return null;
|
|
@@ -339,6 +353,14 @@ function readWalletRpcSecretStatus(env = process.env, options) {
|
|
|
339
353
|
}
|
|
340
354
|
function readWalletProviderSecretStatus(providerId, env = process.env) {
|
|
341
355
|
const secretPath = resolveWalletProviderSecretPath(providerId, env);
|
|
356
|
+
if (providerId === "embedded-keystore") {
|
|
357
|
+
return {
|
|
358
|
+
configured: false,
|
|
359
|
+
providerId,
|
|
360
|
+
fields: [],
|
|
361
|
+
path: secretPath
|
|
362
|
+
};
|
|
363
|
+
}
|
|
342
364
|
const secret = loadWalletProviderSecret(providerId, env);
|
|
343
365
|
if (!secret) {
|
|
344
366
|
return {
|