@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,402 +0,0 @@
|
|
|
1
|
-
import { fetchSolanaMintInfoViaRpc } from "../solana-assets.js";
|
|
2
|
-
import { WalletProviderError } from "../wallet-provider-adapter.js";
|
|
3
|
-
import { buildCreateAssociatedTokenAccountIdempotentInstruction, buildTransferCheckedInstruction, deriveAssociatedTokenAddress, toTransactionInstruction } from "../solana-spl-transfer.js";
|
|
4
|
-
import { walletDiagnosticErrorString } from "../wallet-redaction.js";
|
|
5
|
-
import { createRequire } from "node:module";
|
|
6
|
-
import syncFs from "node:fs";
|
|
7
|
-
import { createDecipheriv, randomUUID, scryptSync } from "node:crypto";
|
|
8
|
-
|
|
9
|
-
//#region src/wallet/providers/embedded-keystore-adapter.ts
|
|
10
|
-
const require = createRequire(import.meta.url);
|
|
11
|
-
let solanaModulePromise = null;
|
|
12
|
-
async function loadSolanaWeb3() {
|
|
13
|
-
solanaModulePromise ??= (async () => {
|
|
14
|
-
try {
|
|
15
|
-
return require("@solana/web3.js");
|
|
16
|
-
} catch {
|
|
17
|
-
throw new WalletProviderError({
|
|
18
|
-
code: "wallet_provider_invalid_config",
|
|
19
|
-
message: "embedded-keystore Solana support requires optional '@solana/web3.js'. Run 'pnpm install' in the Fased repository to enable Solana."
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
})();
|
|
23
|
-
return solanaModulePromise;
|
|
24
|
-
}
|
|
25
|
-
function normalizeChains(chains) {
|
|
26
|
-
const out = new Set();
|
|
27
|
-
for (const chain of chains) {
|
|
28
|
-
if (chain === "solana") {
|
|
29
|
-
out.add(chain);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return out.size > 0 ? [...out] : ["solana"];
|
|
33
|
-
}
|
|
34
|
-
function parseAmountLamports(raw) {
|
|
35
|
-
const text = (raw ?? "").trim();
|
|
36
|
-
if (!text) {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
return BigInt(text);
|
|
41
|
-
} catch {
|
|
42
|
-
throw new WalletProviderError({
|
|
43
|
-
code: "wallet_provider_invalid_config",
|
|
44
|
-
message: `invalid amount (expected lamports integer): ${text}`
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function parseSolanaKeystoreEnvelope(raw) {
|
|
49
|
-
try {
|
|
50
|
-
const parsed = JSON.parse(raw);
|
|
51
|
-
if (parsed.kind !== "fased-solana-keypair" || parsed.version !== 1 || parsed.kdf !== "scrypt" || parsed.cipher !== "aes-256-gcm") {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
if (typeof parsed.salt !== "string" || typeof parsed.iv !== "string" || typeof parsed.authTag !== "string" || typeof parsed.ciphertext !== "string" || typeof parsed.publicKey !== "string") {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
return parsed;
|
|
58
|
-
} catch {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function decryptSolanaKeypairEnvelope(envelope, passphrase) {
|
|
63
|
-
const salt = Buffer.from(envelope.salt, "base64url");
|
|
64
|
-
const iv = Buffer.from(envelope.iv, "base64url");
|
|
65
|
-
const authTag = Buffer.from(envelope.authTag, "base64url");
|
|
66
|
-
const ciphertext = Buffer.from(envelope.ciphertext, "base64url");
|
|
67
|
-
const key = scryptSync(passphrase, salt, 32);
|
|
68
|
-
const decipher = createDecipheriv("aes-256-gcm", key, iv);
|
|
69
|
-
decipher.setAuthTag(authTag);
|
|
70
|
-
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
71
|
-
if (plaintext.length !== 64) {
|
|
72
|
-
throw new WalletProviderError({
|
|
73
|
-
code: "wallet_provider_invalid_config",
|
|
74
|
-
message: "invalid Solana keystore secret length"
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
return Uint8Array.from(plaintext);
|
|
78
|
-
}
|
|
79
|
-
function detectKeystoreType(raw) {
|
|
80
|
-
return parseSolanaKeystoreEnvelope(raw) ? "solana-envelope" : "unknown";
|
|
81
|
-
}
|
|
82
|
-
var EmbeddedKeystoreAdapter = class {
|
|
83
|
-
constructor(options) {
|
|
84
|
-
this.id = "embedded-keystore";
|
|
85
|
-
this.displayName = "Embedded Encrypted Keystore";
|
|
86
|
-
this.prepared = new Map();
|
|
87
|
-
this.solanaKeypairPromise = null;
|
|
88
|
-
this.solanaConnectionPromise = null;
|
|
89
|
-
const env = options.env ?? process.env;
|
|
90
|
-
this.chains = normalizeChains(options.chains);
|
|
91
|
-
this.keystorePath = options.credentials?.keystorePath?.trim() || String(env.FASED_WALLET_KEYSTORE_PATH ?? "").trim() || "";
|
|
92
|
-
this.passphrase = options.credentials?.passphrase?.trim() || String(env.FASED_WALLET_PASSPHRASE ?? "").trim() || "";
|
|
93
|
-
this.rpcUrl = options.credentials?.rpcUrl?.trim() || String(env.FASED_WALLET_EMBEDDED_KEYSTORE_RPC_URL ?? "").trim() || String(env.FASED_WALLET_RPC_URL ?? "").trim() || "";
|
|
94
|
-
this.defaultSolanaAddress = String(env.FASED_WALLET_KEYSTORE_DEFAULT_SOLANA_ADDRESS ?? "").trim() || undefined;
|
|
95
|
-
this.capabilities = {
|
|
96
|
-
custodyModel: "self-hosted",
|
|
97
|
-
supportsCreateWallet: false,
|
|
98
|
-
supportsPrepare: true,
|
|
99
|
-
supportsSend: true,
|
|
100
|
-
supportsRotateKeys: false,
|
|
101
|
-
supportsResetKeys: false,
|
|
102
|
-
supportsPasskeyGate: false,
|
|
103
|
-
supportedExecutionModes: ["manual", "autonomous"],
|
|
104
|
-
supportedChains: [...this.chains]
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
supportsChain(chain) {
|
|
108
|
-
return this.capabilities.supportedChains.includes(chain);
|
|
109
|
-
}
|
|
110
|
-
async health() {
|
|
111
|
-
const configured = Boolean(this.keystorePath && this.passphrase && this.rpcUrl);
|
|
112
|
-
if (!configured) {
|
|
113
|
-
return {
|
|
114
|
-
ok: false,
|
|
115
|
-
provider: this.id,
|
|
116
|
-
configured: false,
|
|
117
|
-
checkedAt: new Date().toISOString(),
|
|
118
|
-
details: "missing embedded keystore config (FASED_WALLET_KEYSTORE_PATH, FASED_WALLET_PASSPHRASE, FASED_WALLET_[EMBEDDED_KEYSTORE_]RPC_URL)"
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
if (!syncFs.existsSync(this.keystorePath)) {
|
|
122
|
-
return {
|
|
123
|
-
ok: false,
|
|
124
|
-
provider: this.id,
|
|
125
|
-
configured: true,
|
|
126
|
-
checkedAt: new Date().toISOString(),
|
|
127
|
-
details: `keystore file not found: ${this.keystorePath}`
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
try {
|
|
131
|
-
const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
|
|
132
|
-
if (detectKeystoreType(raw) !== "solana-envelope") {
|
|
133
|
-
throw new Error("keystore file is not a Solana keystore envelope");
|
|
134
|
-
}
|
|
135
|
-
const [address, lamports] = await Promise.all([this.getSolanaAddress(), this.getSolanaBalanceLamports()]);
|
|
136
|
-
return {
|
|
137
|
-
ok: true,
|
|
138
|
-
provider: this.id,
|
|
139
|
-
configured: true,
|
|
140
|
-
checkedAt: new Date().toISOString(),
|
|
141
|
-
details: `keystore unlocked (solana address=${address}, lamports=${lamports})`
|
|
142
|
-
};
|
|
143
|
-
} catch (err) {
|
|
144
|
-
return {
|
|
145
|
-
ok: false,
|
|
146
|
-
provider: this.id,
|
|
147
|
-
configured: true,
|
|
148
|
-
checkedAt: new Date().toISOString(),
|
|
149
|
-
details: `embedded keystore check failed: ${walletDiagnosticErrorString(err)}`
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async createWallet() {
|
|
154
|
-
throw new WalletProviderError({
|
|
155
|
-
code: "wallet_provider_not_implemented",
|
|
156
|
-
message: "Use `fased wallet keystore init` to create an embedded keystore"
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
async getAddresses() {
|
|
160
|
-
const result = {};
|
|
161
|
-
if (!this.keystorePath || !this.passphrase) {
|
|
162
|
-
if (this.supportsChain("solana")) {
|
|
163
|
-
result.solana = this.defaultSolanaAddress;
|
|
164
|
-
}
|
|
165
|
-
return result;
|
|
166
|
-
}
|
|
167
|
-
try {
|
|
168
|
-
const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
|
|
169
|
-
const type = detectKeystoreType(raw);
|
|
170
|
-
if (type === "solana-envelope") {
|
|
171
|
-
if (this.supportsChain("solana")) {
|
|
172
|
-
result.solana = await this.getSolanaAddress();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return result;
|
|
176
|
-
} catch {
|
|
177
|
-
if (this.supportsChain("solana")) {
|
|
178
|
-
result.solana = this.defaultSolanaAddress;
|
|
179
|
-
}
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
async getBalance(chain) {
|
|
184
|
-
if (chain === "solana") {
|
|
185
|
-
this.ensureSolanaChain(chain);
|
|
186
|
-
const address = await this.getSolanaAddress();
|
|
187
|
-
const lamports = await this.getSolanaBalanceLamports();
|
|
188
|
-
return {
|
|
189
|
-
ok: true,
|
|
190
|
-
chain,
|
|
191
|
-
address,
|
|
192
|
-
balance: String(lamports),
|
|
193
|
-
unit: "lamports"
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
this.ensureSolanaChain(chain);
|
|
197
|
-
throw new WalletProviderError({
|
|
198
|
-
code: "wallet_provider_unsupported_chain",
|
|
199
|
-
message: "embedded-keystore supports Solana only"
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
async prepareTx(request) {
|
|
203
|
-
if (request.chain === "solana") {
|
|
204
|
-
this.ensureSolanaChain(request.chain);
|
|
205
|
-
if (request.program) {
|
|
206
|
-
throw new WalletProviderError({
|
|
207
|
-
code: "wallet_provider_not_implemented",
|
|
208
|
-
message: "embedded-keystore Solana program calls are not implemented yet"
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
if (!request.to?.trim()) {
|
|
212
|
-
throw new WalletProviderError({
|
|
213
|
-
code: "wallet_provider_invalid_config",
|
|
214
|
-
message: "embedded-keystore prepareTx requires `to` for Solana transfer"
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
const from = await this.getSolanaAddress();
|
|
218
|
-
const lamports = parseAmountLamports(request.amount) ?? 0n;
|
|
219
|
-
const preparedId = randomUUID();
|
|
220
|
-
this.prepared.set(preparedId, { solana: {
|
|
221
|
-
to: request.to.trim(),
|
|
222
|
-
lamports,
|
|
223
|
-
from
|
|
224
|
-
} });
|
|
225
|
-
return {
|
|
226
|
-
ok: true,
|
|
227
|
-
chain: "solana",
|
|
228
|
-
preparedId,
|
|
229
|
-
signer: from,
|
|
230
|
-
metadata: {
|
|
231
|
-
kind: "native-transfer",
|
|
232
|
-
to: request.to.trim(),
|
|
233
|
-
lamports: lamports.toString()
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
this.ensureSolanaChain(request.chain);
|
|
238
|
-
throw new WalletProviderError({
|
|
239
|
-
code: "wallet_provider_unsupported_chain",
|
|
240
|
-
message: "embedded-keystore supports Solana only"
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
async sendTx(request) {
|
|
244
|
-
if (request.chain === "solana") {
|
|
245
|
-
this.ensureSolanaChain(request.chain);
|
|
246
|
-
if (request.program?.trim()) {
|
|
247
|
-
const mint = request.program.trim();
|
|
248
|
-
const destinationOwner = request.to?.trim();
|
|
249
|
-
const amountRaw = request.amount?.trim();
|
|
250
|
-
if (!destinationOwner || !amountRaw) {
|
|
251
|
-
throw new WalletProviderError({
|
|
252
|
-
code: "wallet_provider_invalid_config",
|
|
253
|
-
message: "embedded-keystore SPL send requires destination and amount"
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
if (!this.rpcUrl) {
|
|
257
|
-
throw new WalletProviderError({
|
|
258
|
-
code: "wallet_provider_invalid_config",
|
|
259
|
-
message: "embedded-keystore missing RPC URL"
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
const mintInfo = await fetchSolanaMintInfoViaRpc({
|
|
263
|
-
rpcUrl: this.rpcUrl,
|
|
264
|
-
mint
|
|
265
|
-
});
|
|
266
|
-
if (!mintInfo) {
|
|
267
|
-
throw new WalletProviderError({
|
|
268
|
-
code: "wallet_provider_unavailable",
|
|
269
|
-
message: "failed to resolve SPL mint metadata from Solana RPC"
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
const [connection, keypair] = await Promise.all([this.getSolanaConnection(), this.getSolanaKeypair()]);
|
|
273
|
-
const authority = keypair.publicKey.toBase58();
|
|
274
|
-
const sourceTokenAccount = await deriveAssociatedTokenAddress({
|
|
275
|
-
owner: authority,
|
|
276
|
-
mint,
|
|
277
|
-
tokenProgramId: mintInfo.tokenProgramId
|
|
278
|
-
});
|
|
279
|
-
const destinationTokenAccount = await deriveAssociatedTokenAddress({
|
|
280
|
-
owner: destinationOwner,
|
|
281
|
-
mint,
|
|
282
|
-
tokenProgramId: mintInfo.tokenProgramId
|
|
283
|
-
});
|
|
284
|
-
const tx = new (await (loadSolanaWeb3())).Transaction();
|
|
285
|
-
tx.add(await toTransactionInstruction(await buildCreateAssociatedTokenAccountIdempotentInstruction({
|
|
286
|
-
payer: authority,
|
|
287
|
-
owner: destinationOwner,
|
|
288
|
-
mint,
|
|
289
|
-
tokenProgramId: mintInfo.tokenProgramId
|
|
290
|
-
})));
|
|
291
|
-
tx.add(await toTransactionInstruction(buildTransferCheckedInstruction({
|
|
292
|
-
sourceTokenAccount,
|
|
293
|
-
mint,
|
|
294
|
-
destinationTokenAccount,
|
|
295
|
-
authority,
|
|
296
|
-
amountRaw,
|
|
297
|
-
decimals: mintInfo.decimals,
|
|
298
|
-
tokenProgramId: mintInfo.tokenProgramId
|
|
299
|
-
})));
|
|
300
|
-
const { blockhash } = await connection.getLatestBlockhash();
|
|
301
|
-
tx.recentBlockhash = blockhash;
|
|
302
|
-
tx.feePayer = keypair.publicKey;
|
|
303
|
-
const txHash = await connection.sendTransaction(tx, [keypair]);
|
|
304
|
-
await connection.confirmTransaction(txHash);
|
|
305
|
-
return {
|
|
306
|
-
ok: true,
|
|
307
|
-
chain: "solana",
|
|
308
|
-
txHash,
|
|
309
|
-
signer: authority
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
let prepared = request.preparedId ? this.prepared.get(request.preparedId) : undefined;
|
|
313
|
-
if (!prepared?.solana) {
|
|
314
|
-
const next = await this.prepareTx(request);
|
|
315
|
-
prepared = this.prepared.get(next.preparedId);
|
|
316
|
-
}
|
|
317
|
-
if (!prepared?.solana) {
|
|
318
|
-
throw new WalletProviderError({
|
|
319
|
-
code: "wallet_provider_unavailable",
|
|
320
|
-
message: "failed to resolve embedded keystore Solana transaction"
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
const solana = await loadSolanaWeb3();
|
|
324
|
-
const [connection, keypair] = await Promise.all([this.getSolanaConnection(), this.getSolanaKeypair()]);
|
|
325
|
-
const tx = new solana.Transaction();
|
|
326
|
-
tx.add(solana.SystemProgram.transfer({
|
|
327
|
-
fromPubkey: keypair.publicKey,
|
|
328
|
-
toPubkey: new solana.PublicKey(prepared.solana.to),
|
|
329
|
-
lamports: Number(prepared.solana.lamports)
|
|
330
|
-
}));
|
|
331
|
-
const { blockhash } = await connection.getLatestBlockhash();
|
|
332
|
-
tx.recentBlockhash = blockhash;
|
|
333
|
-
tx.feePayer = keypair.publicKey;
|
|
334
|
-
const txHash = await connection.sendTransaction(tx, [keypair]);
|
|
335
|
-
await connection.confirmTransaction(txHash);
|
|
336
|
-
return {
|
|
337
|
-
ok: true,
|
|
338
|
-
chain: "solana",
|
|
339
|
-
txHash,
|
|
340
|
-
signer: prepared.solana.from
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
this.ensureSolanaChain(request.chain);
|
|
344
|
-
throw new WalletProviderError({
|
|
345
|
-
code: "wallet_provider_unsupported_chain",
|
|
346
|
-
message: "embedded-keystore supports Solana only"
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
ensureSolanaChain(chain) {
|
|
350
|
-
if (chain !== "solana" || !this.supportsChain(chain)) {
|
|
351
|
-
throw new WalletProviderError({
|
|
352
|
-
code: "wallet_provider_unsupported_chain",
|
|
353
|
-
message: "embedded-keystore currently supports Solana only when configured with a Solana keystore"
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
async getSolanaConnection() {
|
|
358
|
-
if (!this.rpcUrl) {
|
|
359
|
-
throw new WalletProviderError({
|
|
360
|
-
code: "wallet_provider_invalid_config",
|
|
361
|
-
message: "embedded-keystore missing RPC URL"
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
this.solanaConnectionPromise ??= (async () => {
|
|
365
|
-
const solana = await loadSolanaWeb3();
|
|
366
|
-
return new solana.Connection(this.rpcUrl);
|
|
367
|
-
})();
|
|
368
|
-
return this.solanaConnectionPromise;
|
|
369
|
-
}
|
|
370
|
-
async getSolanaKeypair() {
|
|
371
|
-
if (!this.keystorePath || !this.passphrase) {
|
|
372
|
-
throw new WalletProviderError({
|
|
373
|
-
code: "wallet_provider_invalid_config",
|
|
374
|
-
message: "embedded-keystore missing keystore path or passphrase"
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
this.solanaKeypairPromise ??= (async () => {
|
|
378
|
-
const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
|
|
379
|
-
const envelope = parseSolanaKeystoreEnvelope(raw);
|
|
380
|
-
if (!envelope) {
|
|
381
|
-
throw new WalletProviderError({
|
|
382
|
-
code: "wallet_provider_invalid_config",
|
|
383
|
-
message: "embedded-keystore file is not a Solana keystore envelope"
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
const secretKey = decryptSolanaKeypairEnvelope(envelope, this.passphrase);
|
|
387
|
-
const solana = await loadSolanaWeb3();
|
|
388
|
-
return solana.Keypair.fromSecretKey(secretKey);
|
|
389
|
-
})();
|
|
390
|
-
return this.solanaKeypairPromise;
|
|
391
|
-
}
|
|
392
|
-
async getSolanaAddress() {
|
|
393
|
-
return (await this.getSolanaKeypair()).publicKey.toBase58();
|
|
394
|
-
}
|
|
395
|
-
async getSolanaBalanceLamports() {
|
|
396
|
-
const [conn, kp] = await Promise.all([this.getSolanaConnection(), this.getSolanaKeypair()]);
|
|
397
|
-
return conn.getBalance(kp.publicKey);
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
|
|
401
|
-
//#endregion
|
|
402
|
-
export { EmbeddedKeystoreAdapter };
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { WalletProviderError } from "../wallet-provider-adapter.js";
|
|
2
|
-
|
|
3
|
-
//#region src/wallet/providers/privy-adapter.ts
|
|
4
|
-
var PrivyAdapter = class {
|
|
5
|
-
constructor(options) {
|
|
6
|
-
this.id = "privy";
|
|
7
|
-
this.displayName = "Privy Wallet";
|
|
8
|
-
this.credentials = options.credentials;
|
|
9
|
-
this.capabilities = {
|
|
10
|
-
custodyModel: "provider-managed",
|
|
11
|
-
supportsCreateWallet: true,
|
|
12
|
-
supportsPrepare: false,
|
|
13
|
-
supportsSend: false,
|
|
14
|
-
supportsRotateKeys: false,
|
|
15
|
-
supportsResetKeys: false,
|
|
16
|
-
supportsPasskeyGate: false,
|
|
17
|
-
supportedExecutionModes: ["manual"],
|
|
18
|
-
supportedChains: ["solana"]
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
supportsChain(chain) {
|
|
22
|
-
return chain === "solana";
|
|
23
|
-
}
|
|
24
|
-
async health() {
|
|
25
|
-
const configured = Boolean(this.credentials.appId && this.credentials.appSecret);
|
|
26
|
-
return {
|
|
27
|
-
ok: configured,
|
|
28
|
-
provider: this.id,
|
|
29
|
-
configured,
|
|
30
|
-
checkedAt: new Date().toISOString(),
|
|
31
|
-
details: configured ? "Privy adapter configured for Solana wallet discovery." : "Privy adapter is missing app credentials."
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
async createWallet() {
|
|
35
|
-
throw new WalletProviderError({
|
|
36
|
-
code: "wallet_provider_not_implemented",
|
|
37
|
-
message: "Privy wallet creation is not implemented in the Solana-only wallet runtime"
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
async getAddresses() {
|
|
41
|
-
return this.credentials.defaultSolanaAddress ? { solana: this.credentials.defaultSolanaAddress } : {};
|
|
42
|
-
}
|
|
43
|
-
async getBalance(chain) {
|
|
44
|
-
if (!this.supportsChain(chain)) {
|
|
45
|
-
throw new WalletProviderError({
|
|
46
|
-
code: "wallet_provider_unsupported_chain",
|
|
47
|
-
message: "Privy adapter supports Solana only"
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const address = this.credentials.defaultSolanaAddress?.trim();
|
|
51
|
-
if (!address) {
|
|
52
|
-
throw new WalletProviderError({
|
|
53
|
-
code: "wallet_provider_invalid_config",
|
|
54
|
-
message: "Privy wallet has no Solana address configured"
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
ok: true,
|
|
59
|
-
chain: "solana",
|
|
60
|
-
address,
|
|
61
|
-
balance: "0",
|
|
62
|
-
unit: "lamports"
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
async prepareTx(_request) {
|
|
66
|
-
throw new WalletProviderError({
|
|
67
|
-
code: "wallet_provider_not_implemented",
|
|
68
|
-
message: "Privy transaction preparation is not implemented in the Solana-only wallet runtime"
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
async sendTx(_request) {
|
|
72
|
-
throw new WalletProviderError({
|
|
73
|
-
code: "wallet_provider_not_implemented",
|
|
74
|
-
message: "Privy transaction sending is not implemented in the Solana-only wallet runtime"
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
//#endregion
|
|
80
|
-
export { PrivyAdapter };
|