@elizaos/agent 0.25.8 → 2.0.0-alpha.83
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/LICENSE +1 -1
- package/package.json +994 -34
- package/packages/agent/src/actions/emote.d.ts +14 -0
- package/packages/agent/src/actions/emote.d.ts.map +1 -0
- package/packages/agent/src/actions/emote.js +91 -0
- package/packages/agent/src/actions/restart.d.ts +19 -0
- package/packages/agent/src/actions/restart.d.ts.map +1 -0
- package/packages/agent/src/actions/restart.js +86 -0
- package/packages/agent/src/actions/send-message.d.ts +3 -0
- package/packages/agent/src/actions/send-message.d.ts.map +1 -0
- package/packages/agent/src/actions/send-message.js +144 -0
- package/packages/agent/src/actions/stream-control.d.ts +15 -0
- package/packages/agent/src/actions/stream-control.d.ts.map +1 -0
- package/packages/agent/src/actions/stream-control.js +357 -0
- package/packages/agent/src/actions/switch-stream-source.d.ts +16 -0
- package/packages/agent/src/actions/switch-stream-source.d.ts.map +1 -0
- package/packages/agent/src/actions/switch-stream-source.js +94 -0
- package/packages/agent/src/actions/terminal.d.ts +14 -0
- package/packages/agent/src/actions/terminal.d.ts.map +1 -0
- package/packages/agent/src/actions/terminal.js +154 -0
- package/packages/agent/src/api/agent-admin-routes.d.ts +38 -0
- package/packages/agent/src/api/agent-admin-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-admin-routes.js +93 -0
- package/packages/agent/src/api/agent-lifecycle-routes.d.ts +16 -0
- package/packages/agent/src/api/agent-lifecycle-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-lifecycle-routes.js +80 -0
- package/packages/agent/src/api/agent-model.d.ts +12 -0
- package/packages/agent/src/api/agent-model.d.ts.map +1 -0
- package/packages/agent/src/api/agent-model.js +123 -0
- package/packages/agent/src/api/agent-transfer-routes.d.ts +16 -0
- package/packages/agent/src/api/agent-transfer-routes.d.ts.map +1 -0
- package/packages/agent/src/api/agent-transfer-routes.js +124 -0
- package/packages/agent/src/api/apps-routes.d.ts +19 -0
- package/packages/agent/src/api/apps-routes.d.ts.map +1 -0
- package/packages/agent/src/api/apps-routes.js +128 -0
- package/packages/agent/src/api/auth-routes.d.ts +11 -0
- package/packages/agent/src/api/auth-routes.d.ts.map +1 -0
- package/packages/agent/src/api/auth-routes.js +54 -0
- package/packages/agent/src/api/bsc-trade.d.ts +34 -0
- package/packages/agent/src/api/bsc-trade.d.ts.map +1 -0
- package/packages/agent/src/api/bsc-trade.js +567 -0
- package/packages/agent/src/api/bug-report-routes.d.ts +7 -0
- package/packages/agent/src/api/bug-report-routes.d.ts.map +1 -0
- package/packages/agent/src/api/bug-report-routes.js +124 -0
- package/packages/agent/src/api/character-routes.d.ts +50 -0
- package/packages/agent/src/api/character-routes.d.ts.map +1 -0
- package/packages/agent/src/api/character-routes.js +302 -0
- package/packages/agent/src/api/cloud-billing-routes.d.ts +14 -0
- package/packages/agent/src/api/cloud-billing-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-billing-routes.js +400 -0
- package/packages/agent/src/api/cloud-compat-routes.d.ts +15 -0
- package/packages/agent/src/api/cloud-compat-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-compat-routes.js +131 -0
- package/packages/agent/src/api/cloud-routes.d.ts +62 -0
- package/packages/agent/src/api/cloud-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-routes.js +339 -0
- package/packages/agent/src/api/cloud-status-routes.d.ts +15 -0
- package/packages/agent/src/api/cloud-status-routes.d.ts.map +1 -0
- package/packages/agent/src/api/cloud-status-routes.js +165 -0
- package/packages/agent/src/api/compat-utils.d.ts +49 -0
- package/packages/agent/src/api/compat-utils.d.ts.map +1 -0
- package/packages/agent/src/api/compat-utils.js +126 -0
- package/packages/agent/src/api/connector-health.d.ts +34 -0
- package/packages/agent/src/api/connector-health.d.ts.map +1 -0
- package/packages/agent/src/api/connector-health.js +109 -0
- package/packages/agent/src/api/coordinator-wiring.d.ts +46 -0
- package/packages/agent/src/api/coordinator-wiring.d.ts.map +1 -0
- package/packages/agent/src/api/coordinator-wiring.js +101 -0
- package/packages/agent/src/api/credit-detection.d.ts +9 -0
- package/packages/agent/src/api/credit-detection.d.ts.map +1 -0
- package/packages/agent/src/api/credit-detection.js +41 -0
- package/packages/agent/src/api/database.d.ts +33 -0
- package/packages/agent/src/api/database.d.ts.map +1 -0
- package/packages/agent/src/api/database.js +1019 -0
- package/packages/agent/src/api/diagnostics-routes.d.ts +46 -0
- package/packages/agent/src/api/diagnostics-routes.d.ts.map +1 -0
- package/packages/agent/src/api/diagnostics-routes.js +241 -0
- package/packages/agent/src/api/drop-service.d.ts +26 -0
- package/packages/agent/src/api/drop-service.d.ts.map +1 -0
- package/packages/agent/src/api/drop-service.js +134 -0
- package/packages/agent/src/api/early-logs.d.ts +29 -0
- package/packages/agent/src/api/early-logs.d.ts.map +1 -0
- package/packages/agent/src/api/early-logs.js +96 -0
- package/packages/agent/src/api/http-helpers.d.ts +50 -0
- package/packages/agent/src/api/http-helpers.d.ts.map +1 -0
- package/packages/agent/src/api/http-helpers.js +145 -0
- package/packages/agent/src/api/index.d.ts +61 -0
- package/packages/agent/src/api/index.d.ts.map +1 -0
- package/packages/agent/src/api/index.js +59 -0
- package/packages/agent/src/api/knowledge-routes.d.ts +23 -0
- package/packages/agent/src/api/knowledge-routes.d.ts.map +1 -0
- package/packages/agent/src/api/knowledge-routes.js +931 -0
- package/packages/agent/src/api/knowledge-service-loader.d.ts +51 -0
- package/packages/agent/src/api/knowledge-service-loader.d.ts.map +1 -0
- package/packages/agent/src/api/knowledge-service-loader.js +34 -0
- package/packages/agent/src/api/memory-bounds.d.ts +51 -0
- package/packages/agent/src/api/memory-bounds.d.ts.map +1 -0
- package/packages/agent/src/api/memory-bounds.js +81 -0
- package/packages/agent/src/api/memory-routes.d.ts +9 -0
- package/packages/agent/src/api/memory-routes.d.ts.map +1 -0
- package/packages/agent/src/api/memory-routes.js +241 -0
- package/packages/agent/src/api/merkle-tree.d.ts +90 -0
- package/packages/agent/src/api/merkle-tree.d.ts.map +1 -0
- package/packages/agent/src/api/merkle-tree.js +174 -0
- package/packages/agent/src/api/models-routes.d.ts +14 -0
- package/packages/agent/src/api/models-routes.d.ts.map +1 -0
- package/packages/agent/src/api/models-routes.js +37 -0
- package/packages/agent/src/api/nfa-routes.d.ts +5 -0
- package/packages/agent/src/api/nfa-routes.d.ts.map +1 -0
- package/packages/agent/src/api/nfa-routes.js +125 -0
- package/packages/agent/src/api/og-tracker.d.ts +28 -0
- package/packages/agent/src/api/og-tracker.d.ts.map +1 -0
- package/packages/agent/src/api/og-tracker.js +60 -0
- package/packages/agent/src/api/parse-action-block.d.ts +36 -0
- package/packages/agent/src/api/parse-action-block.d.ts.map +1 -0
- package/packages/agent/src/api/parse-action-block.js +110 -0
- package/packages/agent/src/api/permissions-routes.d.ts +32 -0
- package/packages/agent/src/api/permissions-routes.d.ts.map +1 -0
- package/packages/agent/src/api/permissions-routes.js +149 -0
- package/packages/agent/src/api/plugin-validation.d.ts +86 -0
- package/packages/agent/src/api/plugin-validation.d.ts.map +1 -0
- package/packages/agent/src/api/plugin-validation.js +259 -0
- package/packages/agent/src/api/provider-switch-config.d.ts +37 -0
- package/packages/agent/src/api/provider-switch-config.d.ts.map +1 -0
- package/packages/agent/src/api/provider-switch-config.js +317 -0
- package/packages/agent/src/api/registry-routes.d.ts +26 -0
- package/packages/agent/src/api/registry-routes.d.ts.map +1 -0
- package/packages/agent/src/api/registry-routes.js +90 -0
- package/packages/agent/src/api/registry-service.d.ts +77 -0
- package/packages/agent/src/api/registry-service.d.ts.map +1 -0
- package/packages/agent/src/api/registry-service.js +190 -0
- package/packages/agent/src/api/route-helpers.d.ts +16 -0
- package/packages/agent/src/api/route-helpers.d.ts.map +1 -0
- package/packages/agent/src/api/route-helpers.js +1 -0
- package/packages/agent/src/api/sandbox-routes.d.ts +12 -0
- package/packages/agent/src/api/sandbox-routes.d.ts.map +1 -0
- package/packages/agent/src/api/sandbox-routes.js +1334 -0
- package/packages/agent/src/api/server.d.ts +418 -0
- package/packages/agent/src/api/server.d.ts.map +1 -0
- package/packages/agent/src/api/server.js +13614 -0
- package/packages/agent/src/api/signal-routes.d.ts +39 -0
- package/packages/agent/src/api/signal-routes.d.ts.map +1 -0
- package/packages/agent/src/api/signal-routes.js +168 -0
- package/packages/agent/src/api/stream-persistence.d.ts +64 -0
- package/packages/agent/src/api/stream-persistence.d.ts.map +1 -0
- package/packages/agent/src/api/stream-persistence.js +231 -0
- package/packages/agent/src/api/stream-route-state.d.ts +50 -0
- package/packages/agent/src/api/stream-route-state.d.ts.map +1 -0
- package/packages/agent/src/api/stream-route-state.js +1 -0
- package/packages/agent/src/api/stream-routes.d.ts +45 -0
- package/packages/agent/src/api/stream-routes.d.ts.map +1 -0
- package/packages/agent/src/api/stream-routes.js +809 -0
- package/packages/agent/src/api/stream-voice-routes.d.ts +36 -0
- package/packages/agent/src/api/stream-voice-routes.d.ts.map +1 -0
- package/packages/agent/src/api/stream-voice-routes.js +133 -0
- package/packages/agent/src/api/streaming-text.d.ts +9 -0
- package/packages/agent/src/api/streaming-text.d.ts.map +1 -0
- package/packages/agent/src/api/streaming-text.js +85 -0
- package/packages/agent/src/api/streaming-types.d.ts +30 -0
- package/packages/agent/src/api/streaming-types.d.ts.map +1 -0
- package/packages/agent/src/api/streaming-types.js +1 -0
- package/packages/agent/src/api/subscription-routes.d.ts +20 -0
- package/packages/agent/src/api/subscription-routes.d.ts.map +1 -0
- package/packages/agent/src/api/subscription-routes.js +191 -0
- package/packages/agent/src/api/terminal-run-limits.d.ts +5 -0
- package/packages/agent/src/api/terminal-run-limits.d.ts.map +1 -0
- package/packages/agent/src/api/terminal-run-limits.js +22 -0
- package/packages/agent/src/api/training-backend-check.d.ts +8 -0
- package/packages/agent/src/api/training-backend-check.d.ts.map +1 -0
- package/packages/agent/src/api/training-backend-check.js +28 -0
- package/packages/agent/src/api/training-routes.d.ts +44 -0
- package/packages/agent/src/api/training-routes.d.ts.map +1 -0
- package/packages/agent/src/api/training-routes.js +195 -0
- package/packages/agent/src/api/training-service-like.d.ts +38 -0
- package/packages/agent/src/api/training-service-like.d.ts.map +1 -0
- package/packages/agent/src/api/training-service-like.js +1 -0
- package/packages/agent/src/api/trajectory-routes.d.ts +17 -0
- package/packages/agent/src/api/trajectory-routes.d.ts.map +1 -0
- package/packages/agent/src/api/trajectory-routes.js +405 -0
- package/packages/agent/src/api/trigger-routes.d.ts +72 -0
- package/packages/agent/src/api/trigger-routes.d.ts.map +1 -0
- package/packages/agent/src/api/trigger-routes.js +268 -0
- package/packages/agent/src/api/twitter-verify.d.ts +25 -0
- package/packages/agent/src/api/twitter-verify.d.ts.map +1 -0
- package/packages/agent/src/api/twitter-verify.js +168 -0
- package/packages/agent/src/api/tx-service.d.ts +47 -0
- package/packages/agent/src/api/tx-service.d.ts.map +1 -0
- package/packages/agent/src/api/tx-service.js +156 -0
- package/packages/agent/src/api/wallet-dex-prices.d.ts +43 -0
- package/packages/agent/src/api/wallet-dex-prices.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-dex-prices.js +149 -0
- package/packages/agent/src/api/wallet-evm-balance.d.ts +65 -0
- package/packages/agent/src/api/wallet-evm-balance.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-evm-balance.js +663 -0
- package/packages/agent/src/api/wallet-routes.d.ts +33 -0
- package/packages/agent/src/api/wallet-routes.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-routes.js +292 -0
- package/packages/agent/src/api/wallet-rpc.d.ts +61 -0
- package/packages/agent/src/api/wallet-rpc.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-rpc.js +367 -0
- package/packages/agent/src/api/wallet-trading-profile.d.ts +51 -0
- package/packages/agent/src/api/wallet-trading-profile.d.ts.map +1 -0
- package/packages/agent/src/api/wallet-trading-profile.js +547 -0
- package/packages/agent/src/api/wallet.d.ts +31 -0
- package/packages/agent/src/api/wallet.d.ts.map +1 -0
- package/packages/agent/src/api/wallet.js +513 -0
- package/packages/agent/src/api/whatsapp-routes.d.ts +39 -0
- package/packages/agent/src/api/whatsapp-routes.d.ts.map +1 -0
- package/packages/agent/src/api/whatsapp-routes.js +182 -0
- package/packages/agent/src/api/zip-utils.d.ts +8 -0
- package/packages/agent/src/api/zip-utils.d.ts.map +1 -0
- package/packages/agent/src/api/zip-utils.js +115 -0
- package/packages/agent/src/auth/anthropic.d.ts +25 -0
- package/packages/agent/src/auth/anthropic.d.ts.map +1 -0
- package/packages/agent/src/auth/anthropic.js +40 -0
- package/packages/agent/src/auth/apply-stealth.d.ts +8 -0
- package/packages/agent/src/auth/apply-stealth.d.ts.map +1 -0
- package/packages/agent/src/auth/apply-stealth.js +35 -0
- package/packages/agent/src/auth/claude-code-stealth.d.ts +2 -0
- package/packages/agent/src/auth/claude-code-stealth.d.ts.map +1 -0
- package/packages/agent/src/auth/claude-code-stealth.js +104 -0
- package/packages/agent/src/auth/credentials.d.ts +55 -0
- package/packages/agent/src/auth/credentials.d.ts.map +1 -0
- package/packages/agent/src/auth/credentials.js +182 -0
- package/packages/agent/src/auth/index.d.ts +7 -0
- package/packages/agent/src/auth/index.d.ts.map +1 -0
- package/packages/agent/src/auth/index.js +3 -0
- package/packages/agent/src/auth/openai-codex.d.ts +27 -0
- package/packages/agent/src/auth/openai-codex.d.ts.map +1 -0
- package/packages/agent/src/auth/openai-codex.js +72 -0
- package/packages/agent/src/auth/types.d.ts +18 -0
- package/packages/agent/src/auth/types.d.ts.map +1 -0
- package/packages/agent/src/auth/types.js +8 -0
- package/packages/agent/src/awareness/registry.d.ts +27 -0
- package/packages/agent/src/awareness/registry.d.ts.map +1 -0
- package/packages/agent/src/awareness/registry.js +161 -0
- package/packages/agent/src/benchmark-server.d.ts +2 -0
- package/packages/agent/src/benchmark-server.d.ts.map +1 -0
- package/packages/agent/src/benchmark-server.js +773 -0
- package/packages/agent/src/bin.d.ts +3 -0
- package/packages/agent/src/bin.d.ts.map +1 -0
- package/packages/agent/src/bin.js +6 -0
- package/packages/agent/src/cli/index.d.ts +2 -0
- package/packages/agent/src/cli/index.d.ts.map +1 -0
- package/packages/agent/src/cli/index.js +40 -0
- package/packages/agent/src/cli/parse-duration.d.ts +5 -0
- package/packages/agent/src/cli/parse-duration.d.ts.map +1 -0
- package/packages/agent/src/cli/parse-duration.js +27 -0
- package/packages/agent/src/cloud/auth.d.ts +19 -0
- package/packages/agent/src/cloud/auth.d.ts.map +1 -0
- package/packages/agent/src/cloud/auth.js +107 -0
- package/packages/agent/src/cloud/backup.d.ts +18 -0
- package/packages/agent/src/cloud/backup.d.ts.map +1 -0
- package/packages/agent/src/cloud/backup.js +42 -0
- package/packages/agent/src/cloud/base-url.d.ts +3 -0
- package/packages/agent/src/cloud/base-url.d.ts.map +1 -0
- package/packages/agent/src/cloud/base-url.js +40 -0
- package/packages/agent/src/cloud/bridge-client.d.ts +56 -0
- package/packages/agent/src/cloud/bridge-client.d.ts.map +1 -0
- package/packages/agent/src/cloud/bridge-client.js +190 -0
- package/packages/agent/src/cloud/cloud-manager.d.ts +32 -0
- package/packages/agent/src/cloud/cloud-manager.d.ts.map +1 -0
- package/packages/agent/src/cloud/cloud-manager.js +119 -0
- package/packages/agent/src/cloud/cloud-proxy.d.ts +20 -0
- package/packages/agent/src/cloud/cloud-proxy.d.ts.map +1 -0
- package/packages/agent/src/cloud/cloud-proxy.js +34 -0
- package/packages/agent/src/cloud/index.d.ts +7 -0
- package/packages/agent/src/cloud/index.d.ts.map +1 -0
- package/packages/agent/src/cloud/index.js +6 -0
- package/packages/agent/src/cloud/reconnect.d.ts +26 -0
- package/packages/agent/src/cloud/reconnect.d.ts.map +1 -0
- package/packages/agent/src/cloud/reconnect.js +86 -0
- package/packages/agent/src/cloud/validate-url.d.ts +2 -0
- package/packages/agent/src/cloud/validate-url.d.ts.map +1 -0
- package/packages/agent/src/cloud/validate-url.js +162 -0
- package/packages/agent/src/config/character-schema.d.ts +25 -0
- package/packages/agent/src/config/character-schema.d.ts.map +1 -0
- package/packages/agent/src/config/character-schema.js +39 -0
- package/packages/agent/src/config/config.d.ts +6 -0
- package/packages/agent/src/config/config.d.ts.map +1 -0
- package/packages/agent/src/config/config.js +118 -0
- package/packages/agent/src/config/env-vars.d.ts +3 -0
- package/packages/agent/src/config/env-vars.d.ts.map +1 -0
- package/packages/agent/src/config/env-vars.js +76 -0
- package/packages/agent/src/config/includes.d.ts +26 -0
- package/packages/agent/src/config/includes.d.ts.map +1 -0
- package/packages/agent/src/config/includes.js +148 -0
- package/packages/agent/src/config/index.d.ts +16 -0
- package/packages/agent/src/config/index.d.ts.map +1 -0
- package/packages/agent/src/config/index.js +15 -0
- package/packages/agent/src/config/object-utils.d.ts +2 -0
- package/packages/agent/src/config/object-utils.d.ts.map +1 -0
- package/packages/agent/src/config/object-utils.js +6 -0
- package/packages/agent/src/config/paths.d.ts +13 -0
- package/packages/agent/src/config/paths.d.ts.map +1 -0
- package/packages/agent/src/config/paths.js +67 -0
- package/packages/agent/src/config/plugin-auto-enable.d.ts +16 -0
- package/packages/agent/src/config/plugin-auto-enable.d.ts.map +1 -0
- package/packages/agent/src/config/plugin-auto-enable.js +384 -0
- package/packages/agent/src/config/schema.d.ts +87 -0
- package/packages/agent/src/config/schema.d.ts.map +1 -0
- package/packages/agent/src/config/schema.js +928 -0
- package/packages/agent/src/config/telegram-custom-commands.d.ts +25 -0
- package/packages/agent/src/config/telegram-custom-commands.d.ts.map +1 -0
- package/packages/agent/src/config/telegram-custom-commands.js +71 -0
- package/packages/agent/src/config/types.agent-defaults.d.ts +331 -0
- package/packages/agent/src/config/types.agent-defaults.d.ts.map +1 -0
- package/packages/agent/src/config/types.agent-defaults.js +1 -0
- package/packages/agent/src/config/types.agents.d.ts +110 -0
- package/packages/agent/src/config/types.agents.d.ts.map +1 -0
- package/packages/agent/src/config/types.agents.js +1 -0
- package/packages/agent/src/config/types.d.ts +8 -0
- package/packages/agent/src/config/types.d.ts.map +1 -0
- package/packages/agent/src/config/types.eliza.d.ts +636 -0
- package/packages/agent/src/config/types.eliza.d.ts.map +1 -0
- package/packages/agent/src/config/types.eliza.js +1 -0
- package/packages/agent/src/config/types.gateway.d.ts +216 -0
- package/packages/agent/src/config/types.gateway.d.ts.map +1 -0
- package/packages/agent/src/config/types.gateway.js +1 -0
- package/packages/agent/src/config/types.hooks.d.ts +107 -0
- package/packages/agent/src/config/types.hooks.d.ts.map +1 -0
- package/packages/agent/src/config/types.hooks.js +1 -0
- package/packages/agent/src/config/types.js +7 -0
- package/packages/agent/src/config/types.messages.d.ts +176 -0
- package/packages/agent/src/config/types.messages.d.ts.map +1 -0
- package/packages/agent/src/config/types.messages.js +1 -0
- package/packages/agent/src/config/types.tools.d.ts +400 -0
- package/packages/agent/src/config/types.tools.d.ts.map +1 -0
- package/packages/agent/src/config/types.tools.js +1 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.d.ts +1062 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.agent-runtime.js +721 -0
- package/packages/agent/src/config/zod-schema.core.d.ts +1021 -0
- package/packages/agent/src/config/zod-schema.core.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.core.js +694 -0
- package/packages/agent/src/config/zod-schema.d.ts +4817 -0
- package/packages/agent/src/config/zod-schema.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.hooks.d.ts +88 -0
- package/packages/agent/src/config/zod-schema.hooks.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.hooks.js +133 -0
- package/packages/agent/src/config/zod-schema.js +778 -0
- package/packages/agent/src/config/zod-schema.providers-core.d.ts +2976 -0
- package/packages/agent/src/config/zod-schema.providers-core.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.providers-core.js +1006 -0
- package/packages/agent/src/config/zod-schema.session.d.ts +183 -0
- package/packages/agent/src/config/zod-schema.session.d.ts.map +1 -0
- package/packages/agent/src/config/zod-schema.session.js +86 -0
- package/packages/agent/src/contracts/apps.d.ts +42 -0
- package/packages/agent/src/contracts/apps.d.ts.map +1 -0
- package/packages/agent/src/contracts/apps.js +4 -0
- package/packages/agent/src/contracts/awareness.d.ts +38 -0
- package/packages/agent/src/contracts/awareness.d.ts.map +1 -0
- package/packages/agent/src/contracts/awareness.js +7 -0
- package/packages/agent/src/contracts/config.d.ts +146 -0
- package/packages/agent/src/contracts/config.d.ts.map +1 -0
- package/packages/agent/src/contracts/config.js +4 -0
- package/packages/agent/src/contracts/drop.d.ts +20 -0
- package/packages/agent/src/contracts/drop.d.ts.map +1 -0
- package/packages/agent/src/contracts/drop.js +4 -0
- package/packages/agent/src/contracts/index.d.ts +9 -0
- package/packages/agent/src/contracts/index.d.ts.map +1 -0
- package/packages/agent/src/contracts/index.js +8 -0
- package/packages/agent/src/contracts/onboarding.d.ts +379 -0
- package/packages/agent/src/contracts/onboarding.d.ts.map +1 -0
- package/packages/agent/src/contracts/onboarding.js +290 -0
- package/packages/agent/src/contracts/permissions.d.ts +35 -0
- package/packages/agent/src/contracts/permissions.d.ts.map +1 -0
- package/packages/agent/src/contracts/permissions.js +4 -0
- package/packages/agent/src/contracts/verification.d.ts +9 -0
- package/packages/agent/src/contracts/verification.d.ts.map +1 -0
- package/packages/agent/src/contracts/verification.js +4 -0
- package/packages/agent/src/contracts/wallet.d.ts +409 -0
- package/packages/agent/src/contracts/wallet.d.ts.map +1 -0
- package/packages/agent/src/contracts/wallet.js +60 -0
- package/packages/agent/src/diagnostics/integration-observability.d.ts +40 -0
- package/packages/agent/src/diagnostics/integration-observability.d.ts.map +1 -0
- package/packages/agent/src/diagnostics/integration-observability.js +68 -0
- package/packages/agent/src/emotes/catalog.d.ts +31 -0
- package/packages/agent/src/emotes/catalog.d.ts.map +1 -0
- package/packages/agent/src/emotes/catalog.js +618 -0
- package/packages/agent/src/hooks/discovery.d.ts +13 -0
- package/packages/agent/src/hooks/discovery.d.ts.map +1 -0
- package/packages/agent/src/hooks/discovery.js +184 -0
- package/packages/agent/src/hooks/eligibility.d.ts +12 -0
- package/packages/agent/src/hooks/eligibility.d.ts.map +1 -0
- package/packages/agent/src/hooks/eligibility.js +100 -0
- package/packages/agent/src/hooks/index.d.ts +3 -0
- package/packages/agent/src/hooks/index.d.ts.map +1 -0
- package/packages/agent/src/hooks/index.js +2 -0
- package/packages/agent/src/hooks/loader.d.ts +34 -0
- package/packages/agent/src/hooks/loader.d.ts.map +1 -0
- package/packages/agent/src/hooks/loader.js +176 -0
- package/packages/agent/src/hooks/registry.d.ts +11 -0
- package/packages/agent/src/hooks/registry.d.ts.map +1 -0
- package/packages/agent/src/hooks/registry.js +58 -0
- package/packages/agent/src/hooks/types.d.ts +104 -0
- package/packages/agent/src/hooks/types.d.ts.map +1 -0
- package/packages/agent/src/hooks/types.js +8 -0
- package/packages/agent/src/index.d.ts +20 -0
- package/packages/agent/src/index.d.ts.map +1 -0
- package/packages/agent/src/index.js +19 -0
- package/packages/agent/src/onboarding-presets.d.ts +78 -0
- package/packages/agent/src/onboarding-presets.d.ts.map +1 -0
- package/packages/agent/src/onboarding-presets.js +1352 -0
- package/packages/agent/src/plugins/custom-rtmp/index.d.ts +12 -0
- package/packages/agent/src/plugins/custom-rtmp/index.d.ts.map +1 -0
- package/packages/agent/src/plugins/custom-rtmp/index.js +26 -0
- package/packages/agent/src/providers/admin-trust.d.ts +4 -0
- package/packages/agent/src/providers/admin-trust.d.ts.map +1 -0
- package/packages/agent/src/providers/admin-trust.js +53 -0
- package/packages/agent/src/providers/session-bridge.d.ts +24 -0
- package/packages/agent/src/providers/session-bridge.d.ts.map +1 -0
- package/packages/agent/src/providers/session-bridge.js +85 -0
- package/packages/agent/src/providers/session-utils.d.ts +20 -0
- package/packages/agent/src/providers/session-utils.d.ts.map +1 -0
- package/packages/agent/src/providers/session-utils.js +33 -0
- package/packages/agent/src/providers/simple-mode.d.ts +4 -0
- package/packages/agent/src/providers/simple-mode.d.ts.map +1 -0
- package/packages/agent/src/providers/simple-mode.js +85 -0
- package/packages/agent/src/providers/ui-catalog.d.ts +3 -0
- package/packages/agent/src/providers/ui-catalog.d.ts.map +1 -0
- package/packages/agent/src/providers/ui-catalog.js +123 -0
- package/packages/agent/src/providers/workspace-provider.d.ts +22 -0
- package/packages/agent/src/providers/workspace-provider.d.ts.map +1 -0
- package/packages/agent/src/providers/workspace-provider.js +167 -0
- package/packages/agent/src/providers/workspace.d.ts +54 -0
- package/packages/agent/src/providers/workspace.d.ts.map +1 -0
- package/packages/agent/src/providers/workspace.js +405 -0
- package/packages/agent/src/runtime/agent-event-service.d.ts +35 -0
- package/packages/agent/src/runtime/agent-event-service.d.ts.map +1 -0
- package/packages/agent/src/runtime/agent-event-service.js +16 -0
- package/packages/agent/src/runtime/cloud-onboarding.d.ts +55 -0
- package/packages/agent/src/runtime/cloud-onboarding.d.ts.map +1 -0
- package/packages/agent/src/runtime/cloud-onboarding.js +279 -0
- package/packages/agent/src/runtime/core-plugins.d.ts +14 -0
- package/packages/agent/src/runtime/core-plugins.d.ts.map +1 -0
- package/packages/agent/src/runtime/core-plugins.js +51 -0
- package/packages/agent/src/runtime/custom-actions.d.ts +40 -0
- package/packages/agent/src/runtime/custom-actions.d.ts.map +1 -0
- package/packages/agent/src/runtime/custom-actions.js +454 -0
- package/packages/agent/src/runtime/eliza-plugin.d.ts +16 -0
- package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -0
- package/packages/agent/src/runtime/eliza-plugin.js +108 -0
- package/packages/agent/src/runtime/eliza.d.ts +205 -0
- package/packages/agent/src/runtime/eliza.d.ts.map +1 -0
- package/packages/agent/src/runtime/eliza.js +3935 -0
- package/packages/agent/src/runtime/embedding-presets.d.ts +19 -0
- package/packages/agent/src/runtime/embedding-presets.d.ts.map +1 -0
- package/packages/agent/src/runtime/embedding-presets.js +53 -0
- package/packages/agent/src/runtime/index.d.ts +9 -0
- package/packages/agent/src/runtime/index.d.ts.map +1 -0
- package/packages/agent/src/runtime/index.js +8 -0
- package/packages/agent/src/runtime/onboarding-names.d.ts +11 -0
- package/packages/agent/src/runtime/onboarding-names.d.ts.map +1 -0
- package/packages/agent/src/runtime/onboarding-names.js +74 -0
- package/packages/agent/src/runtime/release-plugin-policy.d.ts +20 -0
- package/packages/agent/src/runtime/release-plugin-policy.d.ts.map +1 -0
- package/packages/agent/src/runtime/release-plugin-policy.js +87 -0
- package/packages/agent/src/runtime/restart.d.ts +45 -0
- package/packages/agent/src/runtime/restart.d.ts.map +1 -0
- package/packages/agent/src/runtime/restart.js +45 -0
- package/packages/agent/src/runtime/trajectory-persistence.d.ts +214 -0
- package/packages/agent/src/runtime/trajectory-persistence.d.ts.map +1 -0
- package/packages/agent/src/runtime/trajectory-persistence.js +1957 -0
- package/packages/agent/src/runtime/version.d.ts +2 -0
- package/packages/agent/src/runtime/version.d.ts.map +1 -0
- package/packages/agent/src/runtime/version.js +5 -0
- package/packages/agent/src/security/audit-log.d.ts +49 -0
- package/packages/agent/src/security/audit-log.d.ts.map +1 -0
- package/packages/agent/src/security/audit-log.js +161 -0
- package/packages/agent/src/security/network-policy.d.ts +6 -0
- package/packages/agent/src/security/network-policy.d.ts.map +1 -0
- package/packages/agent/src/security/network-policy.js +85 -0
- package/packages/agent/src/server/index.d.ts +3 -0
- package/packages/agent/src/server/index.d.ts.map +1 -0
- package/packages/agent/src/server/index.js +1 -0
- package/packages/agent/src/services/agent-export.d.ts +100 -0
- package/packages/agent/src/services/agent-export.d.ts.map +1 -0
- package/packages/agent/src/services/agent-export.js +729 -0
- package/packages/agent/src/services/app-manager.d.ts +34 -0
- package/packages/agent/src/services/app-manager.d.ts.map +1 -0
- package/packages/agent/src/services/app-manager.js +425 -0
- package/packages/agent/src/services/browser-capture.d.ts +39 -0
- package/packages/agent/src/services/browser-capture.d.ts.map +1 -0
- package/packages/agent/src/services/browser-capture.js +162 -0
- package/packages/agent/src/services/coding-agent-context.d.ts +310 -0
- package/packages/agent/src/services/coding-agent-context.d.ts.map +1 -0
- package/packages/agent/src/services/coding-agent-context.js +281 -0
- package/packages/agent/src/services/fallback-training-service.d.ts +78 -0
- package/packages/agent/src/services/fallback-training-service.d.ts.map +1 -0
- package/packages/agent/src/services/fallback-training-service.js +126 -0
- package/packages/agent/src/services/index.d.ts +18 -0
- package/packages/agent/src/services/index.d.ts.map +1 -0
- package/packages/agent/src/services/index.js +17 -0
- package/packages/agent/src/services/mcp-marketplace.d.ts +89 -0
- package/packages/agent/src/services/mcp-marketplace.d.ts.map +1 -0
- package/packages/agent/src/services/mcp-marketplace.js +200 -0
- package/packages/agent/src/services/plugin-manager-types.d.ts +139 -0
- package/packages/agent/src/services/plugin-manager-types.d.ts.map +1 -0
- package/packages/agent/src/services/plugin-manager-types.js +18 -0
- package/packages/agent/src/services/privy-wallets.d.ts +18 -0
- package/packages/agent/src/services/privy-wallets.d.ts.map +1 -0
- package/packages/agent/src/services/privy-wallets.js +225 -0
- package/packages/agent/src/services/registry-client-app-meta.d.ts +6 -0
- package/packages/agent/src/services/registry-client-app-meta.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-app-meta.js +147 -0
- package/packages/agent/src/services/registry-client-endpoints.d.ts +7 -0
- package/packages/agent/src/services/registry-client-endpoints.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-endpoints.js +183 -0
- package/packages/agent/src/services/registry-client-local.d.ts +4 -0
- package/packages/agent/src/services/registry-client-local.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-local.js +377 -0
- package/packages/agent/src/services/registry-client-network.d.ts +9 -0
- package/packages/agent/src/services/registry-client-network.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-network.js +109 -0
- package/packages/agent/src/services/registry-client-queries.d.ts +15 -0
- package/packages/agent/src/services/registry-client-queries.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-queries.js +150 -0
- package/packages/agent/src/services/registry-client-types.d.ts +115 -0
- package/packages/agent/src/services/registry-client-types.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client-types.js +1 -0
- package/packages/agent/src/services/registry-client.d.ts +39 -0
- package/packages/agent/src/services/registry-client.d.ts.map +1 -0
- package/packages/agent/src/services/registry-client.js +249 -0
- package/packages/agent/src/services/remote-signing-service.d.ts +58 -0
- package/packages/agent/src/services/remote-signing-service.d.ts.map +1 -0
- package/packages/agent/src/services/remote-signing-service.js +185 -0
- package/packages/agent/src/services/sandbox-engine.d.ts +96 -0
- package/packages/agent/src/services/sandbox-engine.d.ts.map +1 -0
- package/packages/agent/src/services/sandbox-engine.js +604 -0
- package/packages/agent/src/services/sandbox-manager.d.ts +104 -0
- package/packages/agent/src/services/sandbox-manager.d.ts.map +1 -0
- package/packages/agent/src/services/sandbox-manager.js +353 -0
- package/packages/agent/src/services/self-updater.d.ts +21 -0
- package/packages/agent/src/services/self-updater.d.ts.map +1 -0
- package/packages/agent/src/services/self-updater.js +162 -0
- package/packages/agent/src/services/signal-pairing.d.ts +37 -0
- package/packages/agent/src/services/signal-pairing.d.ts.map +1 -0
- package/packages/agent/src/services/signal-pairing.js +124 -0
- package/packages/agent/src/services/signing-policy.d.ts +44 -0
- package/packages/agent/src/services/signing-policy.d.ts.map +1 -0
- package/packages/agent/src/services/signing-policy.js +165 -0
- package/packages/agent/src/services/skill-catalog-client.d.ts +47 -0
- package/packages/agent/src/services/skill-catalog-client.d.ts.map +1 -0
- package/packages/agent/src/services/skill-catalog-client.js +130 -0
- package/packages/agent/src/services/skill-marketplace.d.ts +42 -0
- package/packages/agent/src/services/skill-marketplace.d.ts.map +1 -0
- package/packages/agent/src/services/skill-marketplace.js +680 -0
- package/packages/agent/src/services/stream-manager.d.ts +121 -0
- package/packages/agent/src/services/stream-manager.d.ts.map +1 -0
- package/packages/agent/src/services/stream-manager.js +604 -0
- package/packages/agent/src/services/tts-stream-bridge.d.ts +83 -0
- package/packages/agent/src/services/tts-stream-bridge.d.ts.map +1 -0
- package/packages/agent/src/services/tts-stream-bridge.js +349 -0
- package/packages/agent/src/services/update-checker.d.ts +29 -0
- package/packages/agent/src/services/update-checker.d.ts.map +1 -0
- package/packages/agent/src/services/update-checker.js +134 -0
- package/packages/agent/src/services/version-compat.d.ts +99 -0
- package/packages/agent/src/services/version-compat.d.ts.map +1 -0
- package/packages/agent/src/services/version-compat.js +195 -0
- package/packages/agent/src/services/whatsapp-pairing.d.ts +41 -0
- package/packages/agent/src/services/whatsapp-pairing.d.ts.map +1 -0
- package/packages/agent/src/services/whatsapp-pairing.js +209 -0
- package/packages/agent/src/shared/ui-catalog-prompt.d.ts +52 -0
- package/packages/agent/src/shared/ui-catalog-prompt.d.ts.map +1 -0
- package/packages/agent/src/shared/ui-catalog-prompt.js +1028 -0
- package/packages/agent/src/test-support/process-helpers.d.ts +13 -0
- package/packages/agent/src/test-support/process-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/process-helpers.js +23 -0
- package/packages/agent/src/test-support/route-test-helpers.d.ts +37 -0
- package/packages/agent/src/test-support/route-test-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/route-test-helpers.js +54 -0
- package/packages/agent/src/test-support/test-helpers.d.ts +77 -0
- package/packages/agent/src/test-support/test-helpers.d.ts.map +1 -0
- package/packages/agent/src/test-support/test-helpers.js +210 -0
- package/packages/agent/src/testing/index.d.ts +4 -0
- package/packages/agent/src/testing/index.d.ts.map +1 -0
- package/packages/agent/src/testing/index.js +3 -0
- package/packages/agent/src/triggers/action.d.ts +3 -0
- package/packages/agent/src/triggers/action.d.ts.map +1 -0
- package/packages/agent/src/triggers/action.js +267 -0
- package/packages/agent/src/triggers/runtime.d.ts +24 -0
- package/packages/agent/src/triggers/runtime.d.ts.map +1 -0
- package/packages/agent/src/triggers/runtime.js +322 -0
- package/packages/agent/src/triggers/scheduling.d.ts +70 -0
- package/packages/agent/src/triggers/scheduling.d.ts.map +1 -0
- package/packages/agent/src/triggers/scheduling.js +355 -0
- package/packages/agent/src/triggers/types.d.ts +115 -0
- package/packages/agent/src/triggers/types.d.ts.map +1 -0
- package/packages/agent/src/triggers/types.js +1 -0
- package/packages/agent/src/utils/exec-safety.d.ts +2 -0
- package/packages/agent/src/utils/exec-safety.d.ts.map +1 -0
- package/packages/agent/src/utils/exec-safety.js +21 -0
- package/packages/agent/src/utils/number-parsing.d.ts +26 -0
- package/packages/agent/src/utils/number-parsing.d.ts.map +1 -0
- package/packages/agent/src/utils/number-parsing.js +52 -0
- package/packages/agent/src/utils/spoken-text.d.ts +2 -0
- package/packages/agent/src/utils/spoken-text.d.ts.map +1 -0
- package/packages/agent/src/utils/spoken-text.js +56 -0
- package/packages/agent/src/version-resolver.d.ts +3 -0
- package/packages/agent/src/version-resolver.d.ts.map +1 -0
- package/packages/agent/src/version-resolver.js +51 -0
- package/jest.config.js +0 -17
- package/src/__tests__/client-type-identification.test.ts +0 -59
- package/src/defaultCharacter.ts +0 -530
- package/src/index.ts +0 -865
- package/tsconfig.json +0 -16
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
export async function handleAuthRoutes(ctx) {
|
|
3
|
+
const { req, res, method, pathname, readJsonBody, json, error, pairingEnabled, ensurePairingCode, normalizePairingCode, rateLimitPairing, getPairingExpiresAt, clearPairing, } = ctx;
|
|
4
|
+
if (!pathname.startsWith("/api/auth/"))
|
|
5
|
+
return false;
|
|
6
|
+
if (method === "GET" && pathname === "/api/auth/status") {
|
|
7
|
+
const required = Boolean(process.env.ELIZA_API_TOKEN?.trim());
|
|
8
|
+
const enabled = pairingEnabled();
|
|
9
|
+
if (enabled)
|
|
10
|
+
ensurePairingCode();
|
|
11
|
+
json(res, {
|
|
12
|
+
required,
|
|
13
|
+
pairingEnabled: enabled,
|
|
14
|
+
expiresAt: enabled ? getPairingExpiresAt() : null,
|
|
15
|
+
});
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (method === "POST" && pathname === "/api/auth/pair") {
|
|
19
|
+
const body = await readJsonBody(req, res);
|
|
20
|
+
if (!body)
|
|
21
|
+
return true;
|
|
22
|
+
const token = process.env.ELIZA_API_TOKEN?.trim();
|
|
23
|
+
if (!token) {
|
|
24
|
+
error(res, "Pairing not enabled", 400);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (!pairingEnabled()) {
|
|
28
|
+
error(res, "Pairing disabled", 403);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (!rateLimitPairing(req.socket.remoteAddress ?? null)) {
|
|
32
|
+
error(res, "Too many attempts. Try again later.", 429);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const provided = normalizePairingCode(body.code ?? "");
|
|
36
|
+
const current = ensurePairingCode();
|
|
37
|
+
if (!current || Date.now() > getPairingExpiresAt()) {
|
|
38
|
+
ensurePairingCode();
|
|
39
|
+
error(res, "Pairing code expired. Check server logs for a new code.", 410);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const expected = normalizePairingCode(current);
|
|
43
|
+
const a = Buffer.from(expected, "utf8");
|
|
44
|
+
const b = Buffer.from(provided, "utf8");
|
|
45
|
+
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
|
|
46
|
+
error(res, "Invalid pairing code", 403);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
clearPairing();
|
|
50
|
+
json(res, { token });
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSC trade preflight + quote helpers.
|
|
3
|
+
*
|
|
4
|
+
* Safety-first scope:
|
|
5
|
+
* - No execution/signing here.
|
|
6
|
+
* - Validate wallet/rpc/chain/gas/token before producing a quote.
|
|
7
|
+
*/
|
|
8
|
+
import type { BscTradePreflightResponse, BscTradeQuoteRequest, BscTradeQuoteResponse, BscUnsignedApprovalTx, BscUnsignedTradeTx } from "../contracts/wallet.js";
|
|
9
|
+
export declare const PANCAKE_SWAP_V2_ROUTER: string;
|
|
10
|
+
export declare const BSC_WBNB_FALLBACK: string;
|
|
11
|
+
export interface BscTradeRpcConfig {
|
|
12
|
+
rpcUrls?: string[] | null;
|
|
13
|
+
nodeRealBscRpcUrl?: string | null;
|
|
14
|
+
quickNodeBscRpcUrl?: string | null;
|
|
15
|
+
bscRpcUrl?: string | null;
|
|
16
|
+
cloudManagedAccess?: boolean | null;
|
|
17
|
+
}
|
|
18
|
+
export interface BuildBscTradePreflightInput extends BscTradeRpcConfig {
|
|
19
|
+
walletAddress: string | null;
|
|
20
|
+
tokenAddress?: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface BuildBscTradeQuoteInput extends BscTradeRpcConfig {
|
|
23
|
+
walletAddress: string | null;
|
|
24
|
+
request: BscTradeQuoteRequest;
|
|
25
|
+
}
|
|
26
|
+
export declare function resolveBscRpcUrls(input: BscTradeRpcConfig): string[];
|
|
27
|
+
export declare function resolvePrimaryBscRpcUrl(input: BscTradeRpcConfig): string | null;
|
|
28
|
+
export declare function readTokenDecimals(rpcUrls: string[], tokenAddress: string): Promise<number>;
|
|
29
|
+
export declare function buildBscTradePreflight(input: BuildBscTradePreflightInput): Promise<BscTradePreflightResponse>;
|
|
30
|
+
export declare function buildBscTradeQuote(input: BuildBscTradeQuoteInput): Promise<BscTradeQuoteResponse>;
|
|
31
|
+
export declare function buildBscBuyUnsignedTx(quote: BscTradeQuoteResponse, recipientAddress: string | null, deadlineSeconds?: number): BscUnsignedTradeTx;
|
|
32
|
+
export declare function buildBscSellUnsignedTx(quote: BscTradeQuoteResponse, recipientAddress: string | null, deadlineSeconds?: number): BscUnsignedTradeTx;
|
|
33
|
+
export declare function buildBscApproveUnsignedTx(tokenAddress: string, ownerAddress: string | null, spenderAddress: string, amountWei: string): BscUnsignedApprovalTx;
|
|
34
|
+
//# sourceMappingURL=bsc-trade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bsc-trade.d.ts","sourceRoot":"","sources":["../../../../../src/api/bsc-trade.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EAErB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAYhC,eAAO,MAAM,sBAAsB,QAElC,CAAC;AACF,eAAO,MAAM,iBAAiB,QAE7B,CAAC;AAgBF,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AA6BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,EAAE,CA0BpE;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,GACvB,MAAM,GAAG,IAAI,CAef;AAuJD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAajB;AAmCD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,yBAAyB,CAAC,CAkIpC;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAiIhC;AAcD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,qBAAqB,EAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,eAAe,CAAC,EAAE,MAAM,GACvB,kBAAkB,CA8BpB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,qBAAqB,EAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,eAAe,CAAC,EAAE,MAAM,GACvB,kBAAkB,CA+BpB;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,qBAAqB,CAuCvB"}
|
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSC trade preflight + quote helpers.
|
|
3
|
+
*
|
|
4
|
+
* Safety-first scope:
|
|
5
|
+
* - No execution/signing here.
|
|
6
|
+
* - Validate wallet/rpc/chain/gas/token before producing a quote.
|
|
7
|
+
*/
|
|
8
|
+
import { logger } from "@elizaos/core";
|
|
9
|
+
import { ethers } from "ethers";
|
|
10
|
+
import { buildCloudEvmRpcUrl, DEFAULT_PUBLIC_BSC_RPC_URLS, } from "./wallet-rpc.js";
|
|
11
|
+
const FETCH_TIMEOUT_MS = 15_000;
|
|
12
|
+
const BSC_CHAIN_ID = 56;
|
|
13
|
+
const MIN_GAS_BNB = "0.005";
|
|
14
|
+
const DEFAULT_SLIPPAGE_BPS = 300;
|
|
15
|
+
const MAX_SLIPPAGE_BPS = 5_000;
|
|
16
|
+
export const PANCAKE_SWAP_V2_ROUTER = ethers.getAddress("0x10ED43C718714eb63d5aA57B78B54704E256024E");
|
|
17
|
+
export const BSC_WBNB_FALLBACK = ethers.getAddress("0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c");
|
|
18
|
+
const ROUTER_IFACE = new ethers.Interface([
|
|
19
|
+
"function WETH() view returns (address)",
|
|
20
|
+
"function getAmountsOut(uint256 amountIn, address[] calldata path) view returns (uint256[] memory amounts)",
|
|
21
|
+
"function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] path, address to, uint deadline)",
|
|
22
|
+
"function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] path, address to, uint deadline)",
|
|
23
|
+
]);
|
|
24
|
+
const ERC20_IFACE = new ethers.Interface([
|
|
25
|
+
"function symbol() view returns (string)",
|
|
26
|
+
"function decimals() view returns (uint8)",
|
|
27
|
+
"function balanceOf(address owner) view returns (uint256)",
|
|
28
|
+
"function approve(address spender, uint256 amount) returns (bool)",
|
|
29
|
+
]);
|
|
30
|
+
function normalizeRpcUrl(url) {
|
|
31
|
+
if (typeof url !== "string")
|
|
32
|
+
return null;
|
|
33
|
+
const trimmed = url.trim();
|
|
34
|
+
if (!trimmed)
|
|
35
|
+
return null;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = new URL(trimmed);
|
|
38
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
|
|
39
|
+
return null;
|
|
40
|
+
return parsed.toString();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function resolveBscRpcUrls(input) {
|
|
47
|
+
const candidates = [
|
|
48
|
+
...(input.rpcUrls ?? []).map((url) => normalizeRpcUrl(url)),
|
|
49
|
+
normalizeRpcUrl(input.nodeRealBscRpcUrl !== undefined
|
|
50
|
+
? input.nodeRealBscRpcUrl
|
|
51
|
+
: process.env.NODEREAL_BSC_RPC_URL),
|
|
52
|
+
normalizeRpcUrl(input.quickNodeBscRpcUrl !== undefined
|
|
53
|
+
? input.quickNodeBscRpcUrl
|
|
54
|
+
: process.env.QUICKNODE_BSC_RPC_URL),
|
|
55
|
+
// Standard plugin env key used across elizaOS EVM tooling.
|
|
56
|
+
normalizeRpcUrl(input.bscRpcUrl !== undefined ? input.bscRpcUrl : process.env.BSC_RPC_URL),
|
|
57
|
+
buildCloudEvmRpcUrl("bsc", {
|
|
58
|
+
cloudManagedAccess: input.cloudManagedAccess,
|
|
59
|
+
}),
|
|
60
|
+
...(input.cloudManagedAccess
|
|
61
|
+
? DEFAULT_PUBLIC_BSC_RPC_URLS.map((url) => normalizeRpcUrl(url))
|
|
62
|
+
: []),
|
|
63
|
+
].filter((v) => Boolean(v));
|
|
64
|
+
return [...new Set(candidates)];
|
|
65
|
+
}
|
|
66
|
+
export function resolvePrimaryBscRpcUrl(input) {
|
|
67
|
+
const urls = resolveBscRpcUrls(input);
|
|
68
|
+
if (urls.length === 0)
|
|
69
|
+
return null;
|
|
70
|
+
const primary = urls[0];
|
|
71
|
+
try {
|
|
72
|
+
const parsed = new URL(primary);
|
|
73
|
+
if (parsed.protocol === "http:") {
|
|
74
|
+
logger.warn(`BSC RPC URL uses http: (${parsed.host}) — MITM risk for trade execution. Use https: in production.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// URL parsing failed; normalizeRpcUrl already validated it, so this shouldn't happen
|
|
79
|
+
}
|
|
80
|
+
return primary;
|
|
81
|
+
}
|
|
82
|
+
function hostLabel(url) {
|
|
83
|
+
try {
|
|
84
|
+
return new URL(url).host;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return "rpc";
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function normalizeAddress(value) {
|
|
91
|
+
if (typeof value !== "string")
|
|
92
|
+
return null;
|
|
93
|
+
const trimmed = value.trim();
|
|
94
|
+
if (!trimmed)
|
|
95
|
+
return null;
|
|
96
|
+
try {
|
|
97
|
+
return ethers.getAddress(trimmed);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function parseRpcChainId(value) {
|
|
104
|
+
if (!value || typeof value !== "string")
|
|
105
|
+
return null;
|
|
106
|
+
if (!value.startsWith("0x"))
|
|
107
|
+
return null;
|
|
108
|
+
const parsed = Number.parseInt(value, 16);
|
|
109
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
110
|
+
}
|
|
111
|
+
function clampSlippageBps(value) {
|
|
112
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
113
|
+
return DEFAULT_SLIPPAGE_BPS;
|
|
114
|
+
}
|
|
115
|
+
const rounded = Math.round(value);
|
|
116
|
+
if (rounded < 1)
|
|
117
|
+
return 1;
|
|
118
|
+
if (rounded > MAX_SLIPPAGE_BPS)
|
|
119
|
+
return MAX_SLIPPAGE_BPS;
|
|
120
|
+
return rounded;
|
|
121
|
+
}
|
|
122
|
+
function clampDeadlineSeconds(value) {
|
|
123
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
124
|
+
return 600;
|
|
125
|
+
const rounded = Math.round(value);
|
|
126
|
+
if (rounded < 60)
|
|
127
|
+
return 60;
|
|
128
|
+
if (rounded > 3600)
|
|
129
|
+
return 3600;
|
|
130
|
+
return rounded;
|
|
131
|
+
}
|
|
132
|
+
function parsePositiveDecimal(value) {
|
|
133
|
+
const amount = Number.parseFloat(value);
|
|
134
|
+
if (!Number.isFinite(amount) || amount <= 0) {
|
|
135
|
+
throw new Error("Amount must be a positive number.");
|
|
136
|
+
}
|
|
137
|
+
return amount;
|
|
138
|
+
}
|
|
139
|
+
function formatPrice(amountIn, amountOut) {
|
|
140
|
+
const inNum = Number.parseFloat(amountIn);
|
|
141
|
+
const outNum = Number.parseFloat(amountOut);
|
|
142
|
+
if (!Number.isFinite(inNum) || !Number.isFinite(outNum) || inNum <= 0) {
|
|
143
|
+
return "0";
|
|
144
|
+
}
|
|
145
|
+
const price = outNum / inNum;
|
|
146
|
+
if (price >= 1000)
|
|
147
|
+
return price.toFixed(2);
|
|
148
|
+
if (price >= 1)
|
|
149
|
+
return price.toFixed(4);
|
|
150
|
+
if (price >= 0.001)
|
|
151
|
+
return price.toFixed(6);
|
|
152
|
+
return price.toExponential(4);
|
|
153
|
+
}
|
|
154
|
+
async function rpcCallWithFallback(rpcUrls, method, params) {
|
|
155
|
+
if (rpcUrls.length === 0) {
|
|
156
|
+
throw new Error("No BSC RPC endpoints configured.");
|
|
157
|
+
}
|
|
158
|
+
const payload = JSON.stringify({
|
|
159
|
+
jsonrpc: "2.0",
|
|
160
|
+
id: 1,
|
|
161
|
+
method,
|
|
162
|
+
params,
|
|
163
|
+
});
|
|
164
|
+
let lastError = "Unknown RPC error";
|
|
165
|
+
for (const rpcUrl of rpcUrls) {
|
|
166
|
+
try {
|
|
167
|
+
const response = await fetch(rpcUrl, {
|
|
168
|
+
method: "POST",
|
|
169
|
+
headers: { "Content-Type": "application/json" },
|
|
170
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
171
|
+
body: payload,
|
|
172
|
+
});
|
|
173
|
+
const raw = await response.text();
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
throw new Error(`HTTP ${response.status}: ${raw.slice(0, 180)}`);
|
|
176
|
+
}
|
|
177
|
+
let parsed;
|
|
178
|
+
try {
|
|
179
|
+
parsed = JSON.parse(raw);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
throw new Error(`Invalid JSON response: ${raw.slice(0, 180)}`);
|
|
183
|
+
}
|
|
184
|
+
if (parsed.error) {
|
|
185
|
+
throw new Error(parsed.error.message ?? `RPC error ${parsed.error.code}`);
|
|
186
|
+
}
|
|
187
|
+
if (parsed.result === undefined || parsed.result === null) {
|
|
188
|
+
throw new Error("RPC returned empty result.");
|
|
189
|
+
}
|
|
190
|
+
return { result: parsed.result, rpcUrl };
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
194
|
+
lastError = `${hostLabel(rpcUrl)}: ${message}`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
throw new Error(lastError);
|
|
198
|
+
}
|
|
199
|
+
async function ethCall(rpcUrls, to, data) {
|
|
200
|
+
return rpcCallWithFallback(rpcUrls, "eth_call", [
|
|
201
|
+
{ to, data },
|
|
202
|
+
"latest",
|
|
203
|
+
]);
|
|
204
|
+
}
|
|
205
|
+
async function readWrappedNativeAddress(rpcUrls) {
|
|
206
|
+
try {
|
|
207
|
+
const encoded = ROUTER_IFACE.encodeFunctionData("WETH", []);
|
|
208
|
+
const call = await ethCall(rpcUrls, PANCAKE_SWAP_V2_ROUTER, encoded);
|
|
209
|
+
const decoded = ROUTER_IFACE.decodeFunctionResult("WETH", call.result);
|
|
210
|
+
const wrappedNative = decoded[0];
|
|
211
|
+
if (typeof wrappedNative !== "string" || !wrappedNative) {
|
|
212
|
+
throw new Error("Router WETH() returned an invalid address.");
|
|
213
|
+
}
|
|
214
|
+
return ethers.getAddress(wrappedNative);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
logger.warn(`[bsc-trade] failed to read router WETH(), falling back to WBNB constant: ${err instanceof Error ? err.message : String(err)}`);
|
|
218
|
+
return BSC_WBNB_FALLBACK;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
export async function readTokenDecimals(rpcUrls, tokenAddress) {
|
|
222
|
+
try {
|
|
223
|
+
const encoded = ERC20_IFACE.encodeFunctionData("decimals", []);
|
|
224
|
+
const call = await ethCall(rpcUrls, tokenAddress, encoded);
|
|
225
|
+
const decoded = ERC20_IFACE.decodeFunctionResult("decimals", call.result);
|
|
226
|
+
const decimals = decoded[0];
|
|
227
|
+
if (typeof decimals !== "bigint")
|
|
228
|
+
return 18;
|
|
229
|
+
const parsed = Number(decimals);
|
|
230
|
+
if (!Number.isFinite(parsed) || parsed < 0)
|
|
231
|
+
return 18;
|
|
232
|
+
return parsed;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return 18;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function readTokenSymbol(rpcUrls, tokenAddress) {
|
|
239
|
+
try {
|
|
240
|
+
const encoded = ERC20_IFACE.encodeFunctionData("symbol", []);
|
|
241
|
+
const call = await ethCall(rpcUrls, tokenAddress, encoded);
|
|
242
|
+
const decoded = ERC20_IFACE.decodeFunctionResult("symbol", call.result);
|
|
243
|
+
const symbol = decoded[0];
|
|
244
|
+
if (typeof symbol === "string" && symbol.trim()) {
|
|
245
|
+
return symbol.trim().slice(0, 16);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Ignore and fall back to a deterministic symbol-like label.
|
|
250
|
+
}
|
|
251
|
+
return `TKN-${tokenAddress.slice(2, 6).toUpperCase()}`;
|
|
252
|
+
}
|
|
253
|
+
async function readTokenBalanceWei(rpcUrls, tokenAddress, walletAddress) {
|
|
254
|
+
const encoded = ERC20_IFACE.encodeFunctionData("balanceOf", [walletAddress]);
|
|
255
|
+
const call = await ethCall(rpcUrls, tokenAddress, encoded);
|
|
256
|
+
const decoded = ERC20_IFACE.decodeFunctionResult("balanceOf", call.result);
|
|
257
|
+
const balance = decoded[0];
|
|
258
|
+
if (typeof balance !== "bigint") {
|
|
259
|
+
throw new Error("Token balance response is invalid.");
|
|
260
|
+
}
|
|
261
|
+
return balance;
|
|
262
|
+
}
|
|
263
|
+
export async function buildBscTradePreflight(input) {
|
|
264
|
+
const checks = {
|
|
265
|
+
walletReady: false,
|
|
266
|
+
rpcReady: false,
|
|
267
|
+
chainReady: false,
|
|
268
|
+
gasReady: false,
|
|
269
|
+
tokenAddressValid: true,
|
|
270
|
+
};
|
|
271
|
+
const reasons = [];
|
|
272
|
+
const walletAddress = normalizeAddress(input.walletAddress);
|
|
273
|
+
const tokenAddressRaw = (input.tokenAddress ?? "").trim();
|
|
274
|
+
const tokenAddress = tokenAddressRaw
|
|
275
|
+
? normalizeAddress(tokenAddressRaw)
|
|
276
|
+
: null;
|
|
277
|
+
const rpcUrls = resolveBscRpcUrls(input);
|
|
278
|
+
let chainId = null;
|
|
279
|
+
let bnbBalance = null;
|
|
280
|
+
let activeRpcUrl = null;
|
|
281
|
+
checks.walletReady = Boolean(walletAddress);
|
|
282
|
+
if (!checks.walletReady) {
|
|
283
|
+
reasons.push("Wallet not ready. Create or connect an EVM wallet first.");
|
|
284
|
+
}
|
|
285
|
+
if (tokenAddressRaw && !tokenAddress) {
|
|
286
|
+
checks.tokenAddressValid = false;
|
|
287
|
+
reasons.push("Token address format is invalid.");
|
|
288
|
+
}
|
|
289
|
+
if (rpcUrls.length === 0) {
|
|
290
|
+
reasons.push("BSC RPC not configured. Connect Eliza Cloud or set NODEREAL_BSC_RPC_URL, QUICKNODE_BSC_RPC_URL, or BSC_RPC_URL.");
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
try {
|
|
294
|
+
const chainResponse = await rpcCallWithFallback(rpcUrls, "eth_chainId", []);
|
|
295
|
+
activeRpcUrl = chainResponse.rpcUrl;
|
|
296
|
+
checks.rpcReady = true;
|
|
297
|
+
chainId = parseRpcChainId(chainResponse.result);
|
|
298
|
+
checks.chainReady = chainId === BSC_CHAIN_ID;
|
|
299
|
+
if (!checks.chainReady) {
|
|
300
|
+
reasons.push(chainId === null
|
|
301
|
+
? "Unable to read chain id from RPC."
|
|
302
|
+
: `RPC chain mismatch. Expected BSC (56), got ${chainId}.`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
reasons.push(`BSC RPC unavailable: ${err instanceof Error ? err.message : String(err)}`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (checks.walletReady && checks.rpcReady) {
|
|
310
|
+
try {
|
|
311
|
+
const rpcCandidates = activeRpcUrl
|
|
312
|
+
? [activeRpcUrl, ...rpcUrls.filter((url) => url !== activeRpcUrl)]
|
|
313
|
+
: rpcUrls;
|
|
314
|
+
const balanceResponse = await rpcCallWithFallback(rpcCandidates, "eth_getBalance", [walletAddress, "latest"]);
|
|
315
|
+
if (!activeRpcUrl)
|
|
316
|
+
activeRpcUrl = balanceResponse.rpcUrl;
|
|
317
|
+
const balanceWei = BigInt(balanceResponse.result);
|
|
318
|
+
bnbBalance = ethers.formatEther(balanceWei);
|
|
319
|
+
checks.gasReady = balanceWei >= ethers.parseEther(MIN_GAS_BNB);
|
|
320
|
+
if (!checks.gasReady) {
|
|
321
|
+
reasons.push(`Insufficient BNB gas. Keep at least ${MIN_GAS_BNB} BNB available.`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
reasons.push(`Failed to read wallet balance: ${err instanceof Error ? err.message : String(err)}`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (tokenAddressRaw && tokenAddress && checks.rpcReady && checks.chainReady) {
|
|
329
|
+
try {
|
|
330
|
+
const rpcCandidates = activeRpcUrl
|
|
331
|
+
? [activeRpcUrl, ...rpcUrls.filter((url) => url !== activeRpcUrl)]
|
|
332
|
+
: rpcUrls;
|
|
333
|
+
const codeResponse = await rpcCallWithFallback(rpcCandidates, "eth_getCode", [tokenAddress, "latest"]);
|
|
334
|
+
if (!activeRpcUrl)
|
|
335
|
+
activeRpcUrl = codeResponse.rpcUrl;
|
|
336
|
+
const code = codeResponse.result.trim().toLowerCase();
|
|
337
|
+
if (code === "0x" || code === "0x0") {
|
|
338
|
+
checks.tokenAddressValid = false;
|
|
339
|
+
reasons.push("Token contract not found on BSC.");
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
checks.tokenAddressValid = false;
|
|
344
|
+
reasons.push(`Token contract check failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const ok = checks.walletReady &&
|
|
348
|
+
checks.rpcReady &&
|
|
349
|
+
checks.chainReady &&
|
|
350
|
+
checks.gasReady &&
|
|
351
|
+
checks.tokenAddressValid;
|
|
352
|
+
return {
|
|
353
|
+
ok,
|
|
354
|
+
walletAddress,
|
|
355
|
+
rpcUrlHost: activeRpcUrl ? hostLabel(activeRpcUrl) : null,
|
|
356
|
+
chainId,
|
|
357
|
+
bnbBalance,
|
|
358
|
+
minGasBnb: MIN_GAS_BNB,
|
|
359
|
+
checks,
|
|
360
|
+
reasons,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
export async function buildBscTradeQuote(input) {
|
|
364
|
+
const side = input.request.side;
|
|
365
|
+
if (side !== "buy" && side !== "sell") {
|
|
366
|
+
throw new Error('Unsupported trade side. Use "buy" or "sell".');
|
|
367
|
+
}
|
|
368
|
+
const tokenAddress = normalizeAddress(input.request.tokenAddress);
|
|
369
|
+
if (!tokenAddress) {
|
|
370
|
+
throw new Error("Token address is required.");
|
|
371
|
+
}
|
|
372
|
+
const amountInput = input.request.amount.trim();
|
|
373
|
+
parsePositiveDecimal(amountInput);
|
|
374
|
+
const slippageBps = clampSlippageBps(input.request.slippageBps);
|
|
375
|
+
const preflight = await buildBscTradePreflight({
|
|
376
|
+
walletAddress: input.walletAddress,
|
|
377
|
+
tokenAddress,
|
|
378
|
+
nodeRealBscRpcUrl: input.nodeRealBscRpcUrl,
|
|
379
|
+
quickNodeBscRpcUrl: input.quickNodeBscRpcUrl,
|
|
380
|
+
});
|
|
381
|
+
if (!preflight.ok) {
|
|
382
|
+
throw new Error(preflight.reasons[0] ?? "Trade preflight failed.");
|
|
383
|
+
}
|
|
384
|
+
const rpcUrls = resolveBscRpcUrls(input);
|
|
385
|
+
if (rpcUrls.length === 0) {
|
|
386
|
+
throw new Error("BSC RPC unavailable.");
|
|
387
|
+
}
|
|
388
|
+
const wrappedNativeAddress = await readWrappedNativeAddress(rpcUrls);
|
|
389
|
+
const tokenDecimals = await readTokenDecimals(rpcUrls, tokenAddress);
|
|
390
|
+
const tokenSymbol = await readTokenSymbol(rpcUrls, tokenAddress);
|
|
391
|
+
const amountInWei = side === "buy"
|
|
392
|
+
? ethers.parseEther(amountInput)
|
|
393
|
+
: ethers.parseUnits(amountInput, tokenDecimals);
|
|
394
|
+
if (side === "sell") {
|
|
395
|
+
if (!preflight.walletAddress) {
|
|
396
|
+
throw new Error("Wallet not ready for sell quote.");
|
|
397
|
+
}
|
|
398
|
+
const tokenBalanceWei = await readTokenBalanceWei(rpcUrls, tokenAddress, preflight.walletAddress);
|
|
399
|
+
if (amountInWei > tokenBalanceWei) {
|
|
400
|
+
throw new Error("Insufficient token balance for sell amount.");
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
if (side === "buy" && preflight.bnbBalance) {
|
|
404
|
+
const walletBalanceWei = ethers.parseEther(preflight.bnbBalance);
|
|
405
|
+
const gasReserveWei = ethers.parseEther(MIN_GAS_BNB);
|
|
406
|
+
if (amountInWei + gasReserveWei > walletBalanceWei) {
|
|
407
|
+
throw new Error(`Insufficient BNB for amount + gas reserve (${MIN_GAS_BNB} BNB).`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
const route = side === "buy"
|
|
411
|
+
? [wrappedNativeAddress, tokenAddress]
|
|
412
|
+
: [tokenAddress, wrappedNativeAddress];
|
|
413
|
+
const quoteCall = ROUTER_IFACE.encodeFunctionData("getAmountsOut", [
|
|
414
|
+
amountInWei,
|
|
415
|
+
route,
|
|
416
|
+
]);
|
|
417
|
+
const quoteResponse = await ethCall(rpcUrls, PANCAKE_SWAP_V2_ROUTER, quoteCall);
|
|
418
|
+
const decoded = ROUTER_IFACE.decodeFunctionResult("getAmountsOut", quoteResponse.result);
|
|
419
|
+
const amountsOut = decoded[0];
|
|
420
|
+
if (!Array.isArray(amountsOut) || amountsOut.length < 2) {
|
|
421
|
+
throw new Error("Router returned an invalid quote.");
|
|
422
|
+
}
|
|
423
|
+
const amountOutWei = amountsOut[amountsOut.length - 1];
|
|
424
|
+
if (typeof amountOutWei !== "bigint") {
|
|
425
|
+
throw new Error("Router quote output type is invalid.");
|
|
426
|
+
}
|
|
427
|
+
let minReceiveWei = (amountOutWei * BigInt(10_000 - slippageBps)) / 10000n;
|
|
428
|
+
if (minReceiveWei === 0n && amountOutWei > 0n) {
|
|
429
|
+
minReceiveWei = 1n; // Prevent zero-slippage execution for small amounts
|
|
430
|
+
}
|
|
431
|
+
const outDecimals = side === "buy" ? tokenDecimals : 18;
|
|
432
|
+
const inSymbol = side === "buy" ? "BNB" : tokenSymbol;
|
|
433
|
+
const outSymbol = side === "buy" ? tokenSymbol : "BNB";
|
|
434
|
+
const amountInFormatted = side === "buy"
|
|
435
|
+
? ethers.formatEther(amountInWei)
|
|
436
|
+
: ethers.formatUnits(amountInWei, tokenDecimals);
|
|
437
|
+
const amountOutFormatted = ethers.formatUnits(amountOutWei, outDecimals);
|
|
438
|
+
const minReceiveFormatted = ethers.formatUnits(minReceiveWei, outDecimals);
|
|
439
|
+
return {
|
|
440
|
+
ok: true,
|
|
441
|
+
side,
|
|
442
|
+
routerAddress: PANCAKE_SWAP_V2_ROUTER,
|
|
443
|
+
wrappedNativeAddress,
|
|
444
|
+
tokenAddress,
|
|
445
|
+
slippageBps,
|
|
446
|
+
route,
|
|
447
|
+
quoteIn: {
|
|
448
|
+
symbol: inSymbol,
|
|
449
|
+
amount: amountInFormatted,
|
|
450
|
+
amountWei: amountInWei.toString(),
|
|
451
|
+
},
|
|
452
|
+
quoteOut: {
|
|
453
|
+
symbol: outSymbol,
|
|
454
|
+
amount: amountOutFormatted,
|
|
455
|
+
amountWei: amountOutWei.toString(),
|
|
456
|
+
},
|
|
457
|
+
minReceive: {
|
|
458
|
+
symbol: outSymbol,
|
|
459
|
+
amount: minReceiveFormatted,
|
|
460
|
+
amountWei: minReceiveWei.toString(),
|
|
461
|
+
},
|
|
462
|
+
price: formatPrice(amountInFormatted, amountOutFormatted),
|
|
463
|
+
preflight,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Assert that the quote's routerAddress matches the expected PancakeSwap V2 router.
|
|
468
|
+
* Prevents a compromised or tampered quote from directing funds to an arbitrary address.
|
|
469
|
+
*/
|
|
470
|
+
function assertRouterAddress(quote) {
|
|
471
|
+
if (quote.routerAddress !== PANCAKE_SWAP_V2_ROUTER) {
|
|
472
|
+
throw new Error(`Unexpected router address in quote: ${quote.routerAddress}. Expected PancakeSwap V2 router ${PANCAKE_SWAP_V2_ROUTER}.`);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
export function buildBscBuyUnsignedTx(quote, recipientAddress, deadlineSeconds) {
|
|
476
|
+
assertRouterAddress(quote);
|
|
477
|
+
if (quote.side !== "buy") {
|
|
478
|
+
throw new Error("Only buy execution is currently supported.");
|
|
479
|
+
}
|
|
480
|
+
const normalizedRecipient = normalizeAddress(recipientAddress);
|
|
481
|
+
if (!normalizedRecipient) {
|
|
482
|
+
throw new Error("Recipient wallet address is required.");
|
|
483
|
+
}
|
|
484
|
+
const now = Math.floor(Date.now() / 1000);
|
|
485
|
+
const deadline = now + clampDeadlineSeconds(deadlineSeconds);
|
|
486
|
+
const data = ROUTER_IFACE.encodeFunctionData("swapExactETHForTokensSupportingFeeOnTransferTokens", [
|
|
487
|
+
BigInt(quote.minReceive.amountWei),
|
|
488
|
+
quote.route,
|
|
489
|
+
normalizedRecipient,
|
|
490
|
+
deadline,
|
|
491
|
+
]);
|
|
492
|
+
return {
|
|
493
|
+
chainId: BSC_CHAIN_ID,
|
|
494
|
+
from: normalizedRecipient,
|
|
495
|
+
to: quote.routerAddress,
|
|
496
|
+
data,
|
|
497
|
+
valueWei: quote.quoteIn.amountWei,
|
|
498
|
+
deadline,
|
|
499
|
+
explorerUrl: "https://bscscan.com",
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
export function buildBscSellUnsignedTx(quote, recipientAddress, deadlineSeconds) {
|
|
503
|
+
assertRouterAddress(quote);
|
|
504
|
+
if (quote.side !== "sell") {
|
|
505
|
+
throw new Error("Only sell execution is supported for this payload.");
|
|
506
|
+
}
|
|
507
|
+
const normalizedRecipient = normalizeAddress(recipientAddress);
|
|
508
|
+
if (!normalizedRecipient) {
|
|
509
|
+
throw new Error("Recipient wallet address is required.");
|
|
510
|
+
}
|
|
511
|
+
const now = Math.floor(Date.now() / 1000);
|
|
512
|
+
const deadline = now + clampDeadlineSeconds(deadlineSeconds);
|
|
513
|
+
const data = ROUTER_IFACE.encodeFunctionData("swapExactTokensForETHSupportingFeeOnTransferTokens", [
|
|
514
|
+
BigInt(quote.quoteIn.amountWei),
|
|
515
|
+
BigInt(quote.minReceive.amountWei),
|
|
516
|
+
quote.route,
|
|
517
|
+
normalizedRecipient,
|
|
518
|
+
deadline,
|
|
519
|
+
]);
|
|
520
|
+
return {
|
|
521
|
+
chainId: BSC_CHAIN_ID,
|
|
522
|
+
from: normalizedRecipient,
|
|
523
|
+
to: quote.routerAddress,
|
|
524
|
+
data,
|
|
525
|
+
valueWei: "0",
|
|
526
|
+
deadline,
|
|
527
|
+
explorerUrl: "https://bscscan.com",
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
export function buildBscApproveUnsignedTx(tokenAddress, ownerAddress, spenderAddress, amountWei) {
|
|
531
|
+
const normalizedToken = normalizeAddress(tokenAddress);
|
|
532
|
+
if (!normalizedToken) {
|
|
533
|
+
throw new Error("Token address is invalid for approval payload.");
|
|
534
|
+
}
|
|
535
|
+
const normalizedOwner = normalizeAddress(ownerAddress);
|
|
536
|
+
if (!normalizedOwner) {
|
|
537
|
+
throw new Error("Owner wallet address is required for approval payload.");
|
|
538
|
+
}
|
|
539
|
+
const normalizedSpender = normalizeAddress(spenderAddress);
|
|
540
|
+
if (!normalizedSpender) {
|
|
541
|
+
throw new Error("Spender address is invalid for approval payload.");
|
|
542
|
+
}
|
|
543
|
+
let amount;
|
|
544
|
+
try {
|
|
545
|
+
amount = BigInt(amountWei);
|
|
546
|
+
}
|
|
547
|
+
catch {
|
|
548
|
+
throw new Error(`Invalid approval amount: expected integer string, got "${String(amountWei).slice(0, 20)}"`);
|
|
549
|
+
}
|
|
550
|
+
if (amount <= 0n) {
|
|
551
|
+
throw new Error("Approval amount must be greater than zero.");
|
|
552
|
+
}
|
|
553
|
+
const data = ERC20_IFACE.encodeFunctionData("approve", [
|
|
554
|
+
normalizedSpender,
|
|
555
|
+
amount,
|
|
556
|
+
]);
|
|
557
|
+
return {
|
|
558
|
+
chainId: BSC_CHAIN_ID,
|
|
559
|
+
from: normalizedOwner,
|
|
560
|
+
to: normalizedToken,
|
|
561
|
+
data,
|
|
562
|
+
valueWei: "0",
|
|
563
|
+
explorerUrl: "https://bscscan.com",
|
|
564
|
+
spender: normalizedSpender,
|
|
565
|
+
amountWei: amount.toString(),
|
|
566
|
+
};
|
|
567
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RouteRequestContext } from "./route-helpers";
|
|
2
|
+
export declare const BUG_REPORT_REPO = "elizaos/eliza";
|
|
3
|
+
export declare function rateLimitBugReport(ip: string | null): boolean;
|
|
4
|
+
export declare function resetBugReportRateLimit(): void;
|
|
5
|
+
export declare function sanitize(input: string, maxLen?: number): string;
|
|
6
|
+
export declare function handleBugReportRoutes(ctx: RouteRequestContext): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=bug-report-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug-report-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/bug-report-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAmB/C,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAe7D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAaD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,MAAM,CAE/D;AA6BD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAyElB"}
|