@fased/fased 0.1.61 → 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 +43 -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/acp/client.js +2 -2
- package/dist/acp/secret-file.js +2 -2
- package/dist/agents/agent-scope.js +2 -2
- package/dist/agents/apply-patch.js +8 -8
- package/dist/agents/auth-profiles/paths.js +2 -2
- package/dist/agents/auth-profiles/store.js +269 -33
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/embedded-pi-mcp.js +4 -4
- package/dist/agents/identity-avatar.js +3 -3
- package/dist/agents/identity-file.js +2 -2
- 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/openai-codex-app-server.js +5 -5
- 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-embedded-subscribe.raw-stream.js +3 -3
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
- package/dist/agents/pi-model-discovery.js +6 -6
- package/dist/agents/pi-project-settings.js +3 -3
- 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/sandbox/fs-bridge.js +2 -2
- package/dist/agents/session-dirs.js +4 -4
- package/dist/agents/session-write-lock.js +13 -13
- package/dist/agents/shell-utils.js +5 -5
- package/dist/agents/skills/bundled-dir.js +4 -4
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +141 -13
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- 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/agents/workspace.js +22 -22
- package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
- package/dist/auto-reply/reply/agent-runner.js +2 -2
- package/dist/auto-reply/reply/commands-export-session.js +7 -7
- 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/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +6 -6
- package/dist/brand.js +1 -1
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +3 -3
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/profiles-service.js +2 -2
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/trash.js +4 -4
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channel-web.js +2 -2
- package/dist/channels/plugins/catalog.js +3 -3
- package/dist/cli/browser-cli-extension.js +6 -6
- package/dist/cli/command-format.js +2 -2
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +10 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- 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/secrets-cli.js +3 -3
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/doctor-memory-search.js +2 -2
- package/dist/commands/doctor-platform-notes.js +2 -2
- package/dist/commands/doctor-sandbox.js +2 -2
- package/dist/commands/doctor-state-integrity.js +23 -23
- package/dist/commands/doctor-workspace.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- 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 +35 -11
- 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/onboarding/plugin-install.js +2 -2
- package/dist/commands/sessions-cleanup.js +2 -2
- package/dist/commands/signal-install.js +6 -6
- package/dist/commands/status-all/channels.js +2 -2
- package/dist/commands/wallet.js +570 -1913
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/config.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +66 -4
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-BXA4gPvN.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-D2QbJhVg.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/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +60 -54
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- 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 +14 -11
- 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/control-ui-boot-check.js +6 -6
- package/dist/gateway/control-ui-login.js +7 -7
- package/dist/gateway/control-ui.js +9 -9
- 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/hooks-mapping.js +4 -4
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1088 -1209
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- 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/session-compaction-checkpoints.js +4 -4
- package/dist/gateway/session-utils.fs.js +24 -24
- package/dist/gateway/session-utils.js +6 -6
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/index.js +4 -2
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/managed-runtime-bootstrap.js +6 -6
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/restart.js +41 -10
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/update-runner.js +96 -0
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +11 -11
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/memory/session-files.js +16 -2
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- 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-Bv0hUOWL.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-Bk--NU3E.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-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- 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 +9 -27
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/json-store.js +6 -6
- 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-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.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-BMkkS038.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-D_bbE6Yd.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 +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.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-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- 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-CLIvQaVg.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-BYDL6dQj.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-BInKQkc4.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 +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugins/bundled-dir.js +3 -3
- package/dist/plugins/discovery.js +11 -11
- package/dist/plugins/loader.js +13 -13
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +4 -4
- package/dist/plugins/path-safety.js +3 -3
- package/dist/plugins/status-cache.js +9 -9
- package/dist/plugins/update.js +3 -3
- package/dist/plugins/web-search-install-catalog.js +3 -3
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +17 -17
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/runtime.js +1 -1
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/pid-alive.js +2 -2
- package/dist/tasks/standing-orders.js +5 -5
- package/dist/tasks/task-flow-registry.js +5 -5
- package/dist/tasks/task-registry.js +5 -5
- package/dist/tasks/workflow-definitions.js +6 -6
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- 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 +382 -107
- 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 +20 -31
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +19 -14
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +95 -41
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +64 -51
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +31 -44
- package/dist/wallet/wallet-secrets-store.js +44 -22
- package/dist/wallet/wallet-send-approvals.js +1894 -592
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +17 -16
- 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/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +15 -24
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +118 -1368
- package/dist/wizard/onboarding.js +180 -242
- package/dist/wizard/onboarding.wallet.js +323 -829
- 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 +18 -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 +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -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 +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +24 -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 +217 -0
- 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-BdFQvrvw.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
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
|
-
import
|
|
2
|
+
import syncFs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
5
|
//#region src/wallet/wallet-runtime-config.ts
|
|
@@ -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");
|
|
@@ -94,12 +72,12 @@ function resolveWalletStatePaths(env = process.env) {
|
|
|
94
72
|
}
|
|
95
73
|
function ensureWalletStateDir(env = process.env) {
|
|
96
74
|
const paths = resolveWalletStatePaths(env);
|
|
97
|
-
|
|
75
|
+
syncFs.mkdirSync(paths.rootDir, {
|
|
98
76
|
recursive: true,
|
|
99
77
|
mode: 448
|
|
100
78
|
});
|
|
101
79
|
try {
|
|
102
|
-
|
|
80
|
+
syncFs.chmodSync(paths.rootDir, 448);
|
|
103
81
|
} catch {}
|
|
104
82
|
return paths;
|
|
105
83
|
}
|
|
@@ -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,5 +1,6 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
|
-
import
|
|
2
|
+
import { throwLegacyEmbeddedKeystoreMigrationRequired } from "./legacy-embedded-keystore.js";
|
|
3
|
+
import syncFs from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
|
|
5
6
|
|
|
@@ -12,12 +13,12 @@ const WALLET_RPC_SECRET_FILENAME = "wallet-rpc.v1.enc.json";
|
|
|
12
13
|
const MASTER_KEY_FILENAME = "master.key";
|
|
13
14
|
function ensureSecretsDir(env = process.env) {
|
|
14
15
|
const dir = path.join(resolveStateDir(env), "secrets");
|
|
15
|
-
|
|
16
|
+
syncFs.mkdirSync(dir, {
|
|
16
17
|
recursive: true,
|
|
17
18
|
mode: SECRETS_DIR_MODE
|
|
18
19
|
});
|
|
19
20
|
try {
|
|
20
|
-
|
|
21
|
+
syncFs.chmodSync(dir, SECRETS_DIR_MODE);
|
|
21
22
|
} catch {}
|
|
22
23
|
return dir;
|
|
23
24
|
}
|
|
@@ -37,20 +38,20 @@ function resolveWalletProviderSecretPath(providerId, env = process.env) {
|
|
|
37
38
|
}
|
|
38
39
|
function readOrCreateMasterKey(env = process.env) {
|
|
39
40
|
const keyPath = resolveMasterKeyPath(env);
|
|
40
|
-
if (
|
|
41
|
-
const raw =
|
|
41
|
+
if (syncFs.existsSync(keyPath)) {
|
|
42
|
+
const raw = syncFs.readFileSync(keyPath, "utf8").trim();
|
|
42
43
|
const parsed = Buffer.from(raw, "hex");
|
|
43
44
|
if (parsed.length === MASTER_KEY_BYTES) {
|
|
44
45
|
return parsed;
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
const key = randomBytes(MASTER_KEY_BYTES);
|
|
48
|
-
|
|
49
|
+
syncFs.writeFileSync(keyPath, `${key.toString("hex")}\n`, {
|
|
49
50
|
mode: SECRET_FILE_MODE,
|
|
50
51
|
encoding: "utf8"
|
|
51
52
|
});
|
|
52
53
|
try {
|
|
53
|
-
|
|
54
|
+
syncFs.chmodSync(keyPath, SECRET_FILE_MODE);
|
|
54
55
|
} catch {}
|
|
55
56
|
return key;
|
|
56
57
|
}
|
|
@@ -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
|
}
|
|
@@ -197,17 +199,23 @@ function saveWalletRpcSecret(input, env = process.env) {
|
|
|
197
199
|
};
|
|
198
200
|
const encrypted = encryptPayload(record, env);
|
|
199
201
|
const secretPath = resolveWalletRpcSecretPath(env, input.providerId);
|
|
200
|
-
|
|
202
|
+
syncFs.writeFileSync(secretPath, `${JSON.stringify(encrypted, null, 2)}\n`, {
|
|
201
203
|
mode: SECRET_FILE_MODE,
|
|
202
204
|
encoding: "utf8"
|
|
203
205
|
});
|
|
204
206
|
try {
|
|
205
|
-
|
|
207
|
+
syncFs.chmodSync(secretPath, SECRET_FILE_MODE);
|
|
206
208
|
} catch {}
|
|
207
209
|
return record;
|
|
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();
|
|
@@ -230,23 +238,23 @@ function saveWalletProviderSecret(input, env = process.env) {
|
|
|
230
238
|
};
|
|
231
239
|
const encrypted = encryptProviderPayload(record, env);
|
|
232
240
|
const secretPath = resolveWalletProviderSecretPath(providerId, env);
|
|
233
|
-
|
|
241
|
+
syncFs.writeFileSync(secretPath, `${JSON.stringify(encrypted, null, 2)}\n`, {
|
|
234
242
|
mode: SECRET_FILE_MODE,
|
|
235
243
|
encoding: "utf8"
|
|
236
244
|
});
|
|
237
245
|
try {
|
|
238
|
-
|
|
246
|
+
syncFs.chmodSync(secretPath, SECRET_FILE_MODE);
|
|
239
247
|
} catch {}
|
|
240
248
|
return record;
|
|
241
249
|
}
|
|
242
250
|
function loadWalletRpcSecret(env = process.env, options) {
|
|
243
251
|
const candidatePaths = options?.providerId ? [resolveWalletRpcSecretPath(env, options.providerId), resolveWalletRpcSecretPath(env)] : [resolveWalletRpcSecretPath(env)];
|
|
244
252
|
for (const secretPath of candidatePaths) {
|
|
245
|
-
if (!
|
|
253
|
+
if (!syncFs.existsSync(secretPath)) {
|
|
246
254
|
continue;
|
|
247
255
|
}
|
|
248
256
|
try {
|
|
249
|
-
const parsed = JSON.parse(
|
|
257
|
+
const parsed = JSON.parse(syncFs.readFileSync(secretPath, "utf8"));
|
|
250
258
|
const decrypted = decryptPayload(parsed, env);
|
|
251
259
|
if (decrypted) {
|
|
252
260
|
return decrypted;
|
|
@@ -256,12 +264,18 @@ 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
|
-
if (!
|
|
274
|
+
if (!syncFs.existsSync(secretPath)) {
|
|
261
275
|
return null;
|
|
262
276
|
}
|
|
263
277
|
try {
|
|
264
|
-
const parsed = JSON.parse(
|
|
278
|
+
const parsed = JSON.parse(syncFs.readFileSync(secretPath, "utf8"));
|
|
265
279
|
const value = decryptProviderPayload(parsed, env);
|
|
266
280
|
if (!value || value.providerId !== providerId) {
|
|
267
281
|
return null;
|
|
@@ -274,13 +288,13 @@ function loadWalletProviderSecret(providerId, env = process.env) {
|
|
|
274
288
|
function deleteWalletRpcSecret(env = process.env) {
|
|
275
289
|
const dir = ensureSecretsDir(env);
|
|
276
290
|
const legacyPath = resolveWalletRpcSecretPath(env);
|
|
277
|
-
const candidatePaths = [legacyPath, ...
|
|
291
|
+
const candidatePaths = [legacyPath, ...syncFs.readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isFile() && /^wallet-rpc-[a-z0-9-]+\.v1\.enc\.json$/i.test(entry.name)).map((entry) => path.join(dir, entry.name))];
|
|
278
292
|
const removedPaths = [];
|
|
279
293
|
for (const secretPath of candidatePaths) {
|
|
280
|
-
if (!
|
|
294
|
+
if (!syncFs.existsSync(secretPath)) {
|
|
281
295
|
continue;
|
|
282
296
|
}
|
|
283
|
-
|
|
297
|
+
syncFs.rmSync(secretPath, { force: true });
|
|
284
298
|
removedPaths.push(secretPath);
|
|
285
299
|
}
|
|
286
300
|
return {
|
|
@@ -291,13 +305,13 @@ function deleteWalletRpcSecret(env = process.env) {
|
|
|
291
305
|
}
|
|
292
306
|
function deleteWalletRpcSecretForProvider(providerId, env = process.env) {
|
|
293
307
|
const secretPath = resolveWalletRpcSecretPath(env, providerId);
|
|
294
|
-
if (!
|
|
308
|
+
if (!syncFs.existsSync(secretPath)) {
|
|
295
309
|
return {
|
|
296
310
|
removed: false,
|
|
297
311
|
path: secretPath
|
|
298
312
|
};
|
|
299
313
|
}
|
|
300
|
-
|
|
314
|
+
syncFs.rmSync(secretPath, { force: true });
|
|
301
315
|
return {
|
|
302
316
|
removed: true,
|
|
303
317
|
path: secretPath
|
|
@@ -305,13 +319,13 @@ function deleteWalletRpcSecretForProvider(providerId, env = process.env) {
|
|
|
305
319
|
}
|
|
306
320
|
function deleteWalletProviderSecret(providerId, env = process.env) {
|
|
307
321
|
const secretPath = resolveWalletProviderSecretPath(providerId, env);
|
|
308
|
-
if (!
|
|
322
|
+
if (!syncFs.existsSync(secretPath)) {
|
|
309
323
|
return {
|
|
310
324
|
removed: false,
|
|
311
325
|
path: secretPath
|
|
312
326
|
};
|
|
313
327
|
}
|
|
314
|
-
|
|
328
|
+
syncFs.rmSync(secretPath, { force: true });
|
|
315
329
|
return {
|
|
316
330
|
removed: true,
|
|
317
331
|
path: secretPath
|
|
@@ -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 {
|