@elizaos/plugin-steward-app 2.0.3-beta.5 → 2.0.3-beta.7
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/dist/ApprovalQueue.d.ts +18 -0
- package/dist/ApprovalQueue.d.ts.map +1 -0
- package/dist/ApprovalQueue.js +420 -0
- package/dist/ApprovalQueue.js.map +1 -0
- package/dist/StewardLogo.d.ts +11 -0
- package/dist/StewardLogo.d.ts.map +1 -0
- package/dist/StewardLogo.js +36 -0
- package/dist/StewardLogo.js.map +1 -0
- package/dist/StewardView.d.ts +13 -0
- package/dist/StewardView.d.ts.map +1 -0
- package/dist/StewardView.helpers.d.ts +15 -0
- package/dist/StewardView.helpers.d.ts.map +1 -0
- package/dist/StewardView.helpers.js +45 -0
- package/dist/StewardView.helpers.js.map +1 -0
- package/dist/StewardView.interact.d.ts +2 -0
- package/dist/StewardView.interact.d.ts.map +1 -0
- package/dist/StewardView.interact.js +54 -0
- package/dist/StewardView.interact.js.map +1 -0
- package/dist/StewardView.js +249 -0
- package/dist/StewardView.js.map +1 -0
- package/dist/TransactionHistory.d.ts +22 -0
- package/dist/TransactionHistory.d.ts.map +1 -0
- package/dist/TransactionHistory.js +361 -0
- package/dist/TransactionHistory.js.map +1 -0
- package/dist/__fixtures__/steward-sdk-fixtures.d.ts +10 -0
- package/dist/__fixtures__/steward-sdk-fixtures.d.ts.map +1 -0
- package/dist/__fixtures__/steward-sdk-fixtures.js +60 -0
- package/dist/__fixtures__/steward-sdk-fixtures.js.map +1 -0
- package/dist/actions/wallet-action-shared.d.ts +15 -0
- package/dist/actions/wallet-action-shared.d.ts.map +1 -0
- package/dist/actions/wallet-action-shared.js +16 -0
- package/dist/actions/wallet-action-shared.js.map +1 -0
- package/dist/api/binance-skill-helpers.d.ts +21 -0
- package/dist/api/binance-skill-helpers.d.ts.map +1 -0
- package/dist/api/binance-skill-helpers.js +790 -0
- package/dist/api/binance-skill-helpers.js.map +1 -0
- package/dist/api/bsc-trade.d.ts +36 -0
- package/dist/api/bsc-trade.d.ts.map +1 -0
- package/dist/api/bsc-trade.js +796 -0
- package/dist/api/bsc-trade.js.map +1 -0
- package/dist/api/trade-safety.d.ts +35 -0
- package/dist/api/trade-safety.d.ts.map +1 -0
- package/dist/api/trade-safety.js +56 -0
- package/dist/api/trade-safety.js.map +1 -0
- package/dist/api/tx-service.d.ts +53 -0
- package/dist/api/tx-service.d.ts.map +1 -0
- package/dist/api/tx-service.js +206 -0
- package/dist/api/tx-service.js.map +1 -0
- package/dist/api/wallet-bsc-routes.d.ts +63 -0
- package/dist/api/wallet-bsc-routes.d.ts.map +1 -0
- package/dist/api/wallet-bsc-routes.js +337 -0
- package/dist/api/wallet-bsc-routes.js.map +1 -0
- package/dist/api/wallet-capability.d.ts +2 -0
- package/dist/api/wallet-capability.d.ts.map +1 -0
- package/dist/api/wallet-capability.js +15 -0
- package/dist/api/wallet-capability.js.map +1 -0
- package/dist/api/wallet-dex-prices.d.ts +43 -0
- package/dist/api/wallet-dex-prices.d.ts.map +1 -0
- package/dist/api/wallet-dex-prices.js +132 -0
- package/dist/api/wallet-dex-prices.js.map +1 -0
- package/dist/api/wallet-evm-balance.d.ts +72 -0
- package/dist/api/wallet-evm-balance.d.ts.map +1 -0
- package/dist/api/wallet-evm-balance.js +697 -0
- package/dist/api/wallet-evm-balance.js.map +1 -0
- package/dist/api/wallet-routes.d.ts +27 -0
- package/dist/api/wallet-routes.d.ts.map +1 -0
- package/dist/api/wallet-routes.js +556 -0
- package/dist/api/wallet-routes.js.map +1 -0
- package/dist/api/wallet-rpc.d.ts +73 -0
- package/dist/api/wallet-rpc.d.ts.map +1 -0
- package/dist/api/wallet-rpc.js +460 -0
- package/dist/api/wallet-rpc.js.map +1 -0
- package/dist/api/wallet-trade-routes.d.ts +104 -0
- package/dist/api/wallet-trade-routes.d.ts.map +1 -0
- package/dist/api/wallet-trade-routes.js +353 -0
- package/dist/api/wallet-trade-routes.js.map +1 -0
- package/dist/api/wallet-trading-profile.d.ts +31 -0
- package/dist/api/wallet-trading-profile.d.ts.map +1 -0
- package/dist/api/wallet-trading-profile.js +500 -0
- package/dist/api/wallet-trading-profile.js.map +1 -0
- package/dist/api/wallet.d.ts +60 -0
- package/dist/api/wallet.d.ts.map +1 -0
- package/dist/api/wallet.js +617 -0
- package/dist/api/wallet.js.map +1 -0
- package/dist/chain-utils.d.ts +10 -0
- package/dist/chain-utils.d.ts.map +1 -0
- package/dist/chain-utils.js +81 -0
- package/dist/chain-utils.js.map +1 -0
- package/dist/components/StewardSpatialView.d.ts +74 -0
- package/dist/components/StewardSpatialView.d.ts.map +1 -0
- package/dist/components/StewardSpatialView.js +309 -0
- package/dist/components/StewardSpatialView.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +21 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +319 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/steward-balance.d.ts +12 -0
- package/dist/providers/steward-balance.d.ts.map +1 -0
- package/dist/providers/steward-balance.js +85 -0
- package/dist/providers/steward-balance.js.map +1 -0
- package/dist/providers/steward-receive-address.d.ts +12 -0
- package/dist/providers/steward-receive-address.d.ts.map +1 -0
- package/dist/providers/steward-receive-address.js +47 -0
- package/dist/providers/steward-receive-address.js.map +1 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +6 -0
- package/dist/register-routes.js.map +1 -0
- package/dist/register-terminal-view.d.ts +15 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +34 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/routes/steward-bridge.d.ts +202 -0
- package/dist/routes/steward-bridge.d.ts.map +1 -0
- package/dist/routes/steward-bridge.js +776 -0
- package/dist/routes/steward-bridge.js.map +1 -0
- package/dist/routes/steward-compat-routes.d.ts +21 -0
- package/dist/routes/steward-compat-routes.d.ts.map +1 -0
- package/dist/routes/steward-compat-routes.js +350 -0
- package/dist/routes/steward-compat-routes.js.map +1 -0
- package/dist/routes/wallet-browser-compat-routes.d.ts +6 -0
- package/dist/routes/wallet-browser-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-browser-compat-routes.js +402 -0
- package/dist/routes/wallet-browser-compat-routes.js.map +1 -0
- package/dist/routes/wallet-bsc-core-routes.d.ts +15 -0
- package/dist/routes/wallet-bsc-core-routes.d.ts.map +1 -0
- package/dist/routes/wallet-bsc-core-routes.js +59 -0
- package/dist/routes/wallet-bsc-core-routes.js.map +1 -0
- package/dist/routes/wallet-compat-routes.d.ts +13 -0
- package/dist/routes/wallet-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-compat-routes.js +206 -0
- package/dist/routes/wallet-compat-routes.js.map +1 -0
- package/dist/routes/wallet-core-routes.d.ts +16 -0
- package/dist/routes/wallet-core-routes.d.ts.map +1 -0
- package/dist/routes/wallet-core-routes.js +48 -0
- package/dist/routes/wallet-core-routes.js.map +1 -0
- package/dist/routes/wallet-trade-compat-routes.d.ts +11 -0
- package/dist/routes/wallet-trade-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-trade-compat-routes.js +570 -0
- package/dist/routes/wallet-trade-compat-routes.js.map +1 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts +7 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.js +43 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.js.map +1 -0
- package/dist/security/wallet-os-store-actions.d.ts +14 -0
- package/dist/security/wallet-os-store-actions.d.ts.map +1 -0
- package/dist/security/wallet-os-store-actions.js +63 -0
- package/dist/security/wallet-os-store-actions.js.map +1 -0
- package/dist/services/steward-credentials.d.ts +2 -0
- package/dist/services/steward-credentials.d.ts.map +1 -0
- package/dist/services/steward-credentials.js +2 -0
- package/dist/services/steward-credentials.js.map +1 -0
- package/dist/services/steward-evm-account.d.ts +75 -0
- package/dist/services/steward-evm-account.d.ts.map +1 -0
- package/dist/services/steward-evm-account.js +279 -0
- package/dist/services/steward-evm-account.js.map +1 -0
- package/dist/services/steward-evm-bridge.d.ts +36 -0
- package/dist/services/steward-evm-bridge.d.ts.map +1 -0
- package/dist/services/steward-evm-bridge.js +78 -0
- package/dist/services/steward-evm-bridge.js.map +1 -0
- package/dist/services/steward-sidecar/health-check.d.ts +2 -0
- package/dist/services/steward-sidecar/health-check.d.ts.map +1 -0
- package/dist/services/steward-sidecar/health-check.js +2 -0
- package/dist/services/steward-sidecar/health-check.js.map +1 -0
- package/dist/services/steward-sidecar/helpers.d.ts +2 -0
- package/dist/services/steward-sidecar/helpers.d.ts.map +1 -0
- package/dist/services/steward-sidecar/helpers.js +2 -0
- package/dist/services/steward-sidecar/helpers.js.map +1 -0
- package/dist/services/steward-sidecar/process-management.d.ts +2 -0
- package/dist/services/steward-sidecar/process-management.d.ts.map +1 -0
- package/dist/services/steward-sidecar/process-management.js +2 -0
- package/dist/services/steward-sidecar/process-management.js.map +1 -0
- package/dist/services/steward-sidecar/types.d.ts +2 -0
- package/dist/services/steward-sidecar/types.d.ts.map +1 -0
- package/dist/services/steward-sidecar/types.js +2 -0
- package/dist/services/steward-sidecar/types.js.map +1 -0
- package/dist/services/steward-sidecar/wallet-setup.d.ts +2 -0
- package/dist/services/steward-sidecar/wallet-setup.d.ts.map +1 -0
- package/dist/services/steward-sidecar/wallet-setup.js +2 -0
- package/dist/services/steward-sidecar/wallet-setup.js.map +1 -0
- package/dist/services/steward-sidecar.d.ts +2 -0
- package/dist/services/steward-sidecar.d.ts.map +1 -0
- package/dist/services/steward-sidecar.js +2 -0
- package/dist/services/steward-sidecar.js.map +1 -0
- package/dist/services/steward-wallet.d.ts +25 -0
- package/dist/services/steward-wallet.d.ts.map +1 -0
- package/dist/services/steward-wallet.js +333 -0
- package/dist/services/steward-wallet.js.map +1 -0
- package/dist/steward-ui-state.d.ts +14 -0
- package/dist/steward-ui-state.d.ts.map +1 -0
- package/dist/steward-ui-state.js +46 -0
- package/dist/steward-ui-state.js.map +1 -0
- package/dist/steward-view-bundle.d.ts +3 -0
- package/dist/steward-view-bundle.d.ts.map +1 -0
- package/dist/steward-view-bundle.js +7 -0
- package/dist/steward-view-bundle.js.map +1 -0
- package/dist/types/bsc-trade.d.ts +180 -0
- package/dist/types/bsc-trade.d.ts.map +1 -0
- package/dist/types/bsc-trade.js +1 -0
- package/dist/types/bsc-trade.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/steward.d.ts +83 -0
- package/dist/types/steward.d.ts.map +1 -0
- package/dist/types/steward.js +1 -0
- package/dist/types/steward.js.map +1 -0
- package/dist/ui.d.ts +7 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +7 -0
- package/dist/ui.js.map +1 -0
- package/dist/views/bundle.js +601 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type WalletConfigUpdateRequest, type WalletRpcChain, type WalletRpcCredentialKey, type WalletRpcSelections } from "@elizaos/core";
|
|
2
|
+
type ElizaConfig = Record<string, unknown> & {
|
|
3
|
+
cloud?: (Record<string, unknown> & {
|
|
4
|
+
apiKey?: string | null;
|
|
5
|
+
baseUrl?: string | null;
|
|
6
|
+
}) | null;
|
|
7
|
+
env?: Record<string, unknown> | null;
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_CLOUD_API_BASE_URL = "https://elizacloud.ai/api/v1";
|
|
10
|
+
export declare const DEFAULT_PUBLIC_BSC_RPC_URLS: readonly ["https://bsc.publicnode.com/", "https://bsc-rpc.publicnode.com/", "https://binance.llamarpc.com/", "https://rpc.ankr.com/bsc", "https://bsc-dataseed.bnbchain.org/", "https://bsc-dataseed1.binance.org/", "https://bsc-dataseed2.binance.org/", "https://bsc-dataseed3.binance.org/"];
|
|
11
|
+
export declare const DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS: readonly ["https://bsc-testnet.publicnode.com/", "https://bsc-testnet-rpc.publicnode.com/", "https://data-seed-prebsc-1-s1.binance.org:8545/"];
|
|
12
|
+
export declare const DEFAULT_PUBLIC_ETHEREUM_RPC_URLS: readonly ["https://ethereum.publicnode.com/", "https://ethereum-rpc.publicnode.com/", "https://eth.llamarpc.com/", "https://rpc.ankr.com/eth"];
|
|
13
|
+
export declare const DEFAULT_PUBLIC_BASE_RPC_URLS: readonly ["https://base.publicnode.com/", "https://base-rpc.publicnode.com/", "https://base.llamarpc.com/", "https://mainnet.base.org/"];
|
|
14
|
+
export declare const DEFAULT_PUBLIC_AVALANCHE_RPC_URLS: readonly ["https://avalanche.publicnode.com/ext/bc/C/rpc", "https://avalanche-c-chain-rpc.publicnode.com/", "https://api.avax.network/ext/bc/C/rpc", "https://rpc.ankr.com/avalanche"];
|
|
15
|
+
export declare const DEFAULT_PUBLIC_SOLANA_RPC_URLS: readonly ["https://api.mainnet-beta.solana.com", "https://solana-rpc.publicnode.com"];
|
|
16
|
+
export declare const DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS: readonly ["https://api.devnet.solana.com"];
|
|
17
|
+
type WalletCapableConfig = Pick<ElizaConfig, "cloud" | "env"> & {
|
|
18
|
+
wallet?: {
|
|
19
|
+
rpcProviders?: Partial<Record<keyof WalletRpcSelections, string>>;
|
|
20
|
+
network?: "mainnet" | "testnet";
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface InventoryProviderOption {
|
|
24
|
+
id: WalletRpcChain;
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
rpcProviders: Array<{
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
envKey: WalletRpcCredentialKey | null;
|
|
32
|
+
requiresKey: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export interface WalletRpcResolutionOptions {
|
|
36
|
+
cloudManagedAccess?: boolean | null;
|
|
37
|
+
cloudApiKey?: string | null;
|
|
38
|
+
cloudBaseUrl?: string | null;
|
|
39
|
+
walletNetwork?: "mainnet" | "testnet" | null;
|
|
40
|
+
}
|
|
41
|
+
export interface WalletRpcReadiness {
|
|
42
|
+
walletNetwork: "mainnet" | "testnet";
|
|
43
|
+
cloudManagedAccess: boolean;
|
|
44
|
+
managedBscRpcReady: boolean;
|
|
45
|
+
evmBalanceReady: boolean;
|
|
46
|
+
solanaBalanceReady: boolean;
|
|
47
|
+
selectedRpcProviders: WalletRpcSelections;
|
|
48
|
+
legacyCustomChains: WalletRpcChain[];
|
|
49
|
+
bscRpcUrls: string[];
|
|
50
|
+
ethereumRpcUrls: string[];
|
|
51
|
+
baseRpcUrls: string[];
|
|
52
|
+
avalancheRpcUrls: string[];
|
|
53
|
+
solanaRpcUrls: string[];
|
|
54
|
+
}
|
|
55
|
+
type SupportedCloudEvmRpcChain = "mainnet" | "base" | "bsc" | "avalanche";
|
|
56
|
+
export declare function resolveWalletNetworkMode(config?: WalletCapableConfig | null, fallback?: string | null): "mainnet" | "testnet";
|
|
57
|
+
export declare function normalizeRpcUrl(url: string | null | undefined): string | null;
|
|
58
|
+
export declare function resolveCloudApiBaseUrl(rawBaseUrl?: string | null): string | null;
|
|
59
|
+
export declare function resolveCloudApiKey(config?: Pick<ElizaConfig, "cloud"> | null): string | null;
|
|
60
|
+
export declare function buildCloudEvmRpcUrl(chain: SupportedCloudEvmRpcChain, options?: WalletRpcResolutionOptions): string | null;
|
|
61
|
+
export declare function buildCloudSolanaRpcUrl(options?: WalletRpcResolutionOptions): string | null;
|
|
62
|
+
export declare function hasElizaCloudRpcAccess(config?: WalletCapableConfig | null): boolean;
|
|
63
|
+
export declare function getStoredWalletRpcSelections(config?: WalletCapableConfig | null): WalletRpcSelections;
|
|
64
|
+
export declare function getInventoryProviderOptions(): InventoryProviderOption[];
|
|
65
|
+
export declare function resolveBscRpcUrls(options?: WalletRpcResolutionOptions): string[];
|
|
66
|
+
export declare function resolveEthereumRpcUrls(options?: WalletRpcResolutionOptions): string[];
|
|
67
|
+
export declare function resolveBaseRpcUrls(options?: WalletRpcResolutionOptions): string[];
|
|
68
|
+
export declare function resolveAvalancheRpcUrls(options?: WalletRpcResolutionOptions): string[];
|
|
69
|
+
export declare function resolveSolanaRpcUrls(options?: WalletRpcResolutionOptions): string[];
|
|
70
|
+
export declare function applyWalletRpcConfigUpdate(config: WalletCapableConfig, update: WalletConfigUpdateRequest): void;
|
|
71
|
+
export declare function resolveWalletRpcReadiness(config?: WalletCapableConfig | null): WalletRpcReadiness;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=wallet-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-rpc.d.ts","sourceRoot":"","sources":["../../src/api/wallet-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_WALLET_RPC_SELECTIONS,
|
|
3
|
+
isElizaCloudServiceSelectedInConfig,
|
|
4
|
+
migrateLegacyRuntimeConfig,
|
|
5
|
+
normalizeWalletRpcSelections
|
|
6
|
+
} from "@elizaos/core";
|
|
7
|
+
const DEFAULT_CLOUD_API_BASE_URL = "https://elizacloud.ai/api/v1";
|
|
8
|
+
const DEFAULT_PUBLIC_BSC_RPC_URLS = [
|
|
9
|
+
"https://bsc.publicnode.com/",
|
|
10
|
+
"https://bsc-rpc.publicnode.com/",
|
|
11
|
+
"https://binance.llamarpc.com/",
|
|
12
|
+
"https://rpc.ankr.com/bsc",
|
|
13
|
+
"https://bsc-dataseed.bnbchain.org/",
|
|
14
|
+
"https://bsc-dataseed1.binance.org/",
|
|
15
|
+
"https://bsc-dataseed2.binance.org/",
|
|
16
|
+
"https://bsc-dataseed3.binance.org/"
|
|
17
|
+
];
|
|
18
|
+
const DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS = [
|
|
19
|
+
"https://bsc-testnet.publicnode.com/",
|
|
20
|
+
"https://bsc-testnet-rpc.publicnode.com/",
|
|
21
|
+
"https://data-seed-prebsc-1-s1.binance.org:8545/"
|
|
22
|
+
];
|
|
23
|
+
const DEFAULT_PUBLIC_ETHEREUM_RPC_URLS = [
|
|
24
|
+
"https://ethereum.publicnode.com/",
|
|
25
|
+
"https://ethereum-rpc.publicnode.com/",
|
|
26
|
+
"https://eth.llamarpc.com/",
|
|
27
|
+
"https://rpc.ankr.com/eth"
|
|
28
|
+
];
|
|
29
|
+
const DEFAULT_PUBLIC_BASE_RPC_URLS = [
|
|
30
|
+
"https://base.publicnode.com/",
|
|
31
|
+
"https://base-rpc.publicnode.com/",
|
|
32
|
+
"https://base.llamarpc.com/",
|
|
33
|
+
"https://mainnet.base.org/"
|
|
34
|
+
];
|
|
35
|
+
const DEFAULT_PUBLIC_AVALANCHE_RPC_URLS = [
|
|
36
|
+
"https://avalanche.publicnode.com/ext/bc/C/rpc",
|
|
37
|
+
"https://avalanche-c-chain-rpc.publicnode.com/",
|
|
38
|
+
"https://api.avax.network/ext/bc/C/rpc",
|
|
39
|
+
"https://rpc.ankr.com/avalanche"
|
|
40
|
+
];
|
|
41
|
+
const DEFAULT_PUBLIC_SOLANA_RPC_URLS = [
|
|
42
|
+
"https://api.mainnet-beta.solana.com",
|
|
43
|
+
"https://solana-rpc.publicnode.com"
|
|
44
|
+
];
|
|
45
|
+
const DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS = [
|
|
46
|
+
"https://api.devnet.solana.com"
|
|
47
|
+
];
|
|
48
|
+
const PROVIDER_CREDENTIAL_KEYS = {
|
|
49
|
+
evm: {
|
|
50
|
+
"eliza-cloud": [],
|
|
51
|
+
alchemy: ["ALCHEMY_API_KEY"],
|
|
52
|
+
infura: ["INFURA_API_KEY"],
|
|
53
|
+
ankr: ["ANKR_API_KEY"]
|
|
54
|
+
},
|
|
55
|
+
bsc: {
|
|
56
|
+
"eliza-cloud": [],
|
|
57
|
+
alchemy: ["ALCHEMY_API_KEY"],
|
|
58
|
+
ankr: ["ANKR_API_KEY"],
|
|
59
|
+
nodereal: ["NODEREAL_BSC_RPC_URL"],
|
|
60
|
+
quicknode: ["QUICKNODE_BSC_RPC_URL"]
|
|
61
|
+
},
|
|
62
|
+
solana: {
|
|
63
|
+
"eliza-cloud": [],
|
|
64
|
+
"helius-birdeye": ["HELIUS_API_KEY", "BIRDEYE_API_KEY"]
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const LEGACY_CUSTOM_CHAIN_KEYS = {
|
|
68
|
+
evm: ["ETHEREUM_RPC_URL", "BASE_RPC_URL", "AVALANCHE_RPC_URL"],
|
|
69
|
+
bsc: ["BSC_RPC_URL"],
|
|
70
|
+
solana: ["SOLANA_RPC_URL"]
|
|
71
|
+
};
|
|
72
|
+
const WALLET_RPC_CONFIG_KEYS = [
|
|
73
|
+
"ALCHEMY_API_KEY",
|
|
74
|
+
"INFURA_API_KEY",
|
|
75
|
+
"ANKR_API_KEY",
|
|
76
|
+
"ETHEREUM_RPC_URL",
|
|
77
|
+
"BASE_RPC_URL",
|
|
78
|
+
"AVALANCHE_RPC_URL",
|
|
79
|
+
"HELIUS_API_KEY",
|
|
80
|
+
"BIRDEYE_API_KEY",
|
|
81
|
+
"NODEREAL_BSC_RPC_URL",
|
|
82
|
+
"QUICKNODE_BSC_RPC_URL",
|
|
83
|
+
"BSC_RPC_URL",
|
|
84
|
+
"SOLANA_RPC_URL"
|
|
85
|
+
];
|
|
86
|
+
function normalizeSecret(value) {
|
|
87
|
+
if (typeof value !== "string") return null;
|
|
88
|
+
const trimmed = value.trim();
|
|
89
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
90
|
+
}
|
|
91
|
+
function resolveWalletNetworkMode(config, fallback) {
|
|
92
|
+
const normalized = (fallback ?? config?.wallet?.network ?? process.env.ELIZA_WALLET_NETWORK ?? "").trim().toLowerCase();
|
|
93
|
+
if (normalized === "testnet") return "testnet";
|
|
94
|
+
return "mainnet";
|
|
95
|
+
}
|
|
96
|
+
function uniqueRpcUrls(...groups) {
|
|
97
|
+
return [
|
|
98
|
+
...new Set(
|
|
99
|
+
groups.flat().map((url) => normalizeRpcUrl(url)).filter((url) => Boolean(url))
|
|
100
|
+
)
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
function hasStoredSelections(config) {
|
|
104
|
+
const selections = config?.wallet?.rpcProviders;
|
|
105
|
+
return Boolean(selections && Object.keys(selections).length > 0);
|
|
106
|
+
}
|
|
107
|
+
function inferSelectedRpcProviders() {
|
|
108
|
+
return {
|
|
109
|
+
evm: process.env.ALCHEMY_API_KEY?.trim() ? "alchemy" : process.env.INFURA_API_KEY?.trim() ? "infura" : process.env.ANKR_API_KEY?.trim() ? "ankr" : DEFAULT_WALLET_RPC_SELECTIONS.evm,
|
|
110
|
+
bsc: process.env.NODEREAL_BSC_RPC_URL?.trim() ? "nodereal" : process.env.QUICKNODE_BSC_RPC_URL?.trim() ? "quicknode" : process.env.ALCHEMY_API_KEY?.trim() ? "alchemy" : process.env.ANKR_API_KEY?.trim() ? "ankr" : DEFAULT_WALLET_RPC_SELECTIONS.bsc,
|
|
111
|
+
solana: process.env.HELIUS_API_KEY?.trim() || process.env.BIRDEYE_API_KEY?.trim() ? "helius-birdeye" : DEFAULT_WALLET_RPC_SELECTIONS.solana
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function walletSelectionsUseElizaCloud(selections) {
|
|
115
|
+
return Object.values(selections).some(
|
|
116
|
+
(provider) => provider === "eliza-cloud"
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
function hasLegacyCustomChainUrl(chain) {
|
|
120
|
+
return LEGACY_CUSTOM_CHAIN_KEYS[chain].some(
|
|
121
|
+
(key) => Boolean(normalizeSecret(process.env[key]))
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function buildLegacyCustomChains(selections) {
|
|
125
|
+
return Object.keys(LEGACY_CUSTOM_CHAIN_KEYS).filter(
|
|
126
|
+
(chain) => selections[chain] === DEFAULT_WALLET_RPC_SELECTIONS[chain] && hasLegacyCustomChainUrl(chain)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
function normalizeRpcUrl(url) {
|
|
130
|
+
if (typeof url !== "string") return null;
|
|
131
|
+
const trimmed = url.trim();
|
|
132
|
+
if (!trimmed) return null;
|
|
133
|
+
try {
|
|
134
|
+
const parsed = new URL(trimmed);
|
|
135
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return parsed.toString();
|
|
139
|
+
} catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function resolveCloudApiBaseUrl(rawBaseUrl) {
|
|
144
|
+
const candidate = normalizeSecret(rawBaseUrl ?? process.env.ELIZAOS_CLOUD_BASE_URL) ?? DEFAULT_CLOUD_API_BASE_URL;
|
|
145
|
+
try {
|
|
146
|
+
const parsed = new URL(candidate);
|
|
147
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
parsed.hash = "";
|
|
151
|
+
parsed.search = "";
|
|
152
|
+
const normalizedBase = parsed.toString().replace(/\/+$/, "");
|
|
153
|
+
return normalizedBase.endsWith("/api/v1") ? normalizedBase : `${normalizedBase}/api/v1`;
|
|
154
|
+
} catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function resolveCloudApiKey(config) {
|
|
159
|
+
return normalizeSecret(
|
|
160
|
+
config?.cloud?.apiKey ?? process.env.ELIZAOS_CLOUD_API_KEY
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
function buildCloudRpcProxyUrl(pathname, options = {}) {
|
|
164
|
+
const cloudApiKey = normalizeSecret(
|
|
165
|
+
options.cloudApiKey ?? process.env.ELIZAOS_CLOUD_API_KEY
|
|
166
|
+
);
|
|
167
|
+
const cloudManagedAccess = options.cloudManagedAccess ?? Boolean(cloudApiKey);
|
|
168
|
+
if (!cloudManagedAccess || !cloudApiKey) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const cloudBaseUrl = resolveCloudApiBaseUrl(options.cloudBaseUrl);
|
|
172
|
+
if (!cloudBaseUrl) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const url = new URL(
|
|
176
|
+
pathname.replace(/^\/+/, ""),
|
|
177
|
+
`${cloudBaseUrl.replace(/\/+$/, "")}/`
|
|
178
|
+
);
|
|
179
|
+
url.searchParams.set("api_key", cloudApiKey);
|
|
180
|
+
return normalizeRpcUrl(url.toString());
|
|
181
|
+
}
|
|
182
|
+
function buildCloudEvmRpcUrl(chain, options = {}) {
|
|
183
|
+
return buildCloudRpcProxyUrl(`proxy/evm-rpc/${chain}`, options);
|
|
184
|
+
}
|
|
185
|
+
function buildCloudSolanaRpcUrl(options = {}) {
|
|
186
|
+
return buildCloudRpcProxyUrl("proxy/solana-rpc", options);
|
|
187
|
+
}
|
|
188
|
+
function hasElizaCloudRpcAccess(config) {
|
|
189
|
+
const selectedRpcProviders = hasStoredSelections(config) ? getStoredWalletRpcSelections(config) : inferSelectedRpcProviders();
|
|
190
|
+
return Boolean(
|
|
191
|
+
resolveCloudApiKey(config) && (walletSelectionsUseElizaCloud(selectedRpcProviders) || isElizaCloudServiceSelectedInConfig(
|
|
192
|
+
config ?? {},
|
|
193
|
+
"rpc"
|
|
194
|
+
))
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
function getStoredWalletRpcSelections(config) {
|
|
198
|
+
return normalizeWalletRpcSelections(config?.wallet?.rpcProviders);
|
|
199
|
+
}
|
|
200
|
+
function getInventoryProviderOptions() {
|
|
201
|
+
return [
|
|
202
|
+
{
|
|
203
|
+
id: "evm",
|
|
204
|
+
name: "EVM",
|
|
205
|
+
description: "Ethereum, Base, Arbitrum, Optimism, Polygon.",
|
|
206
|
+
rpcProviders: [
|
|
207
|
+
{
|
|
208
|
+
id: "eliza-cloud",
|
|
209
|
+
name: "Eliza Cloud",
|
|
210
|
+
description: "Managed RPC. No setup needed.",
|
|
211
|
+
envKey: null,
|
|
212
|
+
requiresKey: false
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "infura",
|
|
216
|
+
name: "Infura",
|
|
217
|
+
description: "Reliable EVM infrastructure.",
|
|
218
|
+
envKey: "INFURA_API_KEY",
|
|
219
|
+
requiresKey: true
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
id: "alchemy",
|
|
223
|
+
name: "Alchemy",
|
|
224
|
+
description: "Full-featured EVM data platform.",
|
|
225
|
+
envKey: "ALCHEMY_API_KEY",
|
|
226
|
+
requiresKey: true
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
id: "ankr",
|
|
230
|
+
name: "Ankr",
|
|
231
|
+
description: "Decentralized RPC provider.",
|
|
232
|
+
envKey: "ANKR_API_KEY",
|
|
233
|
+
requiresKey: true
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
id: "bsc",
|
|
239
|
+
name: "BSC",
|
|
240
|
+
description: "BNB Smart Chain tokens, NFTs, and trades.",
|
|
241
|
+
rpcProviders: [
|
|
242
|
+
{
|
|
243
|
+
id: "eliza-cloud",
|
|
244
|
+
name: "Eliza Cloud",
|
|
245
|
+
description: "Managed RPC. No setup needed.",
|
|
246
|
+
envKey: null,
|
|
247
|
+
requiresKey: false
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
id: "alchemy",
|
|
251
|
+
name: "Alchemy",
|
|
252
|
+
description: "Managed BSC RPC via Alchemy.",
|
|
253
|
+
envKey: "ALCHEMY_API_KEY",
|
|
254
|
+
requiresKey: true
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: "ankr",
|
|
258
|
+
name: "Ankr",
|
|
259
|
+
description: "Decentralized BSC RPC provider.",
|
|
260
|
+
envKey: "ANKR_API_KEY",
|
|
261
|
+
requiresKey: true
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
id: "nodereal",
|
|
265
|
+
name: "NodeReal",
|
|
266
|
+
description: "Dedicated BSC RPC endpoint.",
|
|
267
|
+
envKey: "NODEREAL_BSC_RPC_URL",
|
|
268
|
+
requiresKey: true
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
id: "quicknode",
|
|
272
|
+
name: "QuickNode",
|
|
273
|
+
description: "Managed BSC RPC endpoint.",
|
|
274
|
+
envKey: "QUICKNODE_BSC_RPC_URL",
|
|
275
|
+
requiresKey: true
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
id: "solana",
|
|
281
|
+
name: "Solana",
|
|
282
|
+
description: "Solana mainnet tokens and NFTs.",
|
|
283
|
+
rpcProviders: [
|
|
284
|
+
{
|
|
285
|
+
id: "eliza-cloud",
|
|
286
|
+
name: "Eliza Cloud",
|
|
287
|
+
description: "Managed RPC. No setup needed.",
|
|
288
|
+
envKey: null,
|
|
289
|
+
requiresKey: false
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
id: "helius-birdeye",
|
|
293
|
+
name: "Helius + Birdeye",
|
|
294
|
+
description: "Solana balances and NFT metadata.",
|
|
295
|
+
envKey: "HELIUS_API_KEY",
|
|
296
|
+
requiresKey: true
|
|
297
|
+
}
|
|
298
|
+
]
|
|
299
|
+
}
|
|
300
|
+
];
|
|
301
|
+
}
|
|
302
|
+
function resolveBscRpcUrls(options = {}) {
|
|
303
|
+
const network = resolveWalletNetworkMode(void 0, options.walletNetwork);
|
|
304
|
+
const cloudRpcUrl = network === "mainnet" ? buildCloudEvmRpcUrl("bsc", options) : null;
|
|
305
|
+
const publicDefaults = network === "testnet" ? DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS : DEFAULT_PUBLIC_BSC_RPC_URLS;
|
|
306
|
+
return uniqueRpcUrls(
|
|
307
|
+
[
|
|
308
|
+
process.env.BSC_TESTNET_RPC_URL,
|
|
309
|
+
process.env.NODEREAL_BSC_RPC_URL,
|
|
310
|
+
process.env.QUICKNODE_BSC_RPC_URL,
|
|
311
|
+
process.env.BSC_RPC_URL,
|
|
312
|
+
cloudRpcUrl
|
|
313
|
+
],
|
|
314
|
+
options.cloudManagedAccess ? publicDefaults : []
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
function resolveEthereumRpcUrls(options = {}) {
|
|
318
|
+
return uniqueRpcUrls(
|
|
319
|
+
[process.env.ETHEREUM_RPC_URL, buildCloudEvmRpcUrl("mainnet", options)],
|
|
320
|
+
options.cloudManagedAccess ? DEFAULT_PUBLIC_ETHEREUM_RPC_URLS : []
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
function resolveBaseRpcUrls(options = {}) {
|
|
324
|
+
return uniqueRpcUrls(
|
|
325
|
+
[process.env.BASE_RPC_URL, buildCloudEvmRpcUrl("base", options)],
|
|
326
|
+
options.cloudManagedAccess ? DEFAULT_PUBLIC_BASE_RPC_URLS : []
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
function resolveAvalancheRpcUrls(options = {}) {
|
|
330
|
+
return uniqueRpcUrls(
|
|
331
|
+
[process.env.AVALANCHE_RPC_URL, buildCloudEvmRpcUrl("avalanche", options)],
|
|
332
|
+
options.cloudManagedAccess ? DEFAULT_PUBLIC_AVALANCHE_RPC_URLS : []
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
function resolveSolanaRpcUrls(options = {}) {
|
|
336
|
+
const network = resolveWalletNetworkMode(void 0, options.walletNetwork);
|
|
337
|
+
const cloudRpcUrl = network === "mainnet" ? buildCloudSolanaRpcUrl(options) : null;
|
|
338
|
+
const publicDefaults = network === "testnet" ? DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS : DEFAULT_PUBLIC_SOLANA_RPC_URLS;
|
|
339
|
+
return uniqueRpcUrls(
|
|
340
|
+
[
|
|
341
|
+
process.env.SOLANA_TESTNET_RPC_URL,
|
|
342
|
+
process.env.SOLANA_RPC_URL,
|
|
343
|
+
cloudRpcUrl
|
|
344
|
+
],
|
|
345
|
+
options.cloudManagedAccess ? publicDefaults : []
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
function applyWalletRpcConfigUpdate(config, update) {
|
|
349
|
+
config.env ??= {};
|
|
350
|
+
const env = config.env;
|
|
351
|
+
const normalizedSelections = normalizeWalletRpcSelections(update.selections);
|
|
352
|
+
const selectedCredentialKeys = /* @__PURE__ */ new Set();
|
|
353
|
+
for (const chain of Object.keys(normalizedSelections)) {
|
|
354
|
+
for (const key of PROVIDER_CREDENTIAL_KEYS[chain][normalizedSelections[chain]]) {
|
|
355
|
+
selectedCredentialKeys.add(key);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
config.wallet = {
|
|
359
|
+
...config.wallet,
|
|
360
|
+
rpcProviders: normalizedSelections,
|
|
361
|
+
network: update.walletNetwork === "testnet" ? "testnet" : update.walletNetwork === "mainnet" ? "mainnet" : config.wallet?.network
|
|
362
|
+
};
|
|
363
|
+
if (update.walletNetwork === "testnet" || update.walletNetwork === "mainnet") {
|
|
364
|
+
env.ELIZA_WALLET_NETWORK = update.walletNetwork;
|
|
365
|
+
process.env.ELIZA_WALLET_NETWORK = update.walletNetwork;
|
|
366
|
+
}
|
|
367
|
+
for (const key of WALLET_RPC_CONFIG_KEYS) {
|
|
368
|
+
const value = update.credentials?.[key];
|
|
369
|
+
if (typeof value === "string" && value.trim()) {
|
|
370
|
+
const normalizedValue = value.trim();
|
|
371
|
+
env[key] = normalizedValue;
|
|
372
|
+
process.env[key] = normalizedValue;
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
if (typeof value === "string" || !selectedCredentialKeys.has(key)) {
|
|
376
|
+
delete env[key];
|
|
377
|
+
delete process.env[key];
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const heliusKey = update.credentials?.HELIUS_API_KEY?.trim();
|
|
381
|
+
if (heliusKey) {
|
|
382
|
+
const solanaRpcUrl = `https://mainnet.helius-rpc.com/?api-key=${heliusKey}`;
|
|
383
|
+
env.SOLANA_RPC_URL = solanaRpcUrl;
|
|
384
|
+
process.env.SOLANA_RPC_URL = solanaRpcUrl;
|
|
385
|
+
} else if (typeof update.credentials?.HELIUS_API_KEY === "string" && typeof update.credentials?.SOLANA_RPC_URL !== "string") {
|
|
386
|
+
delete env.SOLANA_RPC_URL;
|
|
387
|
+
delete process.env.SOLANA_RPC_URL;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function resolveWalletRpcReadiness(config) {
|
|
391
|
+
if (config && typeof config === "object" && !Array.isArray(config)) {
|
|
392
|
+
migrateLegacyRuntimeConfig(config);
|
|
393
|
+
}
|
|
394
|
+
const walletNetwork = resolveWalletNetworkMode(config);
|
|
395
|
+
const cloudApiKey = resolveCloudApiKey(config);
|
|
396
|
+
const cloudBaseUrl = resolveCloudApiBaseUrl(config?.cloud?.baseUrl);
|
|
397
|
+
const selectedRpcProviders = hasStoredSelections(config) ? getStoredWalletRpcSelections(config) : inferSelectedRpcProviders();
|
|
398
|
+
const cloudRpcSelected = walletSelectionsUseElizaCloud(selectedRpcProviders) || isElizaCloudServiceSelectedInConfig(
|
|
399
|
+
config ?? {},
|
|
400
|
+
"rpc"
|
|
401
|
+
);
|
|
402
|
+
const cloudManagedAccess = Boolean(cloudApiKey && cloudRpcSelected);
|
|
403
|
+
const cloudOptions = {
|
|
404
|
+
cloudManagedAccess,
|
|
405
|
+
cloudApiKey,
|
|
406
|
+
cloudBaseUrl,
|
|
407
|
+
walletNetwork
|
|
408
|
+
};
|
|
409
|
+
const bscRpcUrls = resolveBscRpcUrls(cloudOptions);
|
|
410
|
+
const ethereumRpcUrls = resolveEthereumRpcUrls(cloudOptions);
|
|
411
|
+
const baseRpcUrls = resolveBaseRpcUrls(cloudOptions);
|
|
412
|
+
const avalancheRpcUrls = resolveAvalancheRpcUrls(cloudOptions);
|
|
413
|
+
const solanaRpcUrls = resolveSolanaRpcUrls(cloudOptions);
|
|
414
|
+
const legacyCustomChains = buildLegacyCustomChains(selectedRpcProviders);
|
|
415
|
+
return {
|
|
416
|
+
walletNetwork,
|
|
417
|
+
cloudManagedAccess,
|
|
418
|
+
managedBscRpcReady: bscRpcUrls.length > 0,
|
|
419
|
+
evmBalanceReady: Boolean(
|
|
420
|
+
process.env.ALCHEMY_API_KEY?.trim() || process.env.ANKR_API_KEY?.trim() || process.env.INFURA_API_KEY?.trim() || bscRpcUrls.length > 0 || ethereumRpcUrls.length > 0 || baseRpcUrls.length > 0 || avalancheRpcUrls.length > 0
|
|
421
|
+
),
|
|
422
|
+
solanaBalanceReady: Boolean(
|
|
423
|
+
process.env.HELIUS_API_KEY?.trim() || solanaRpcUrls.length > 0
|
|
424
|
+
),
|
|
425
|
+
selectedRpcProviders,
|
|
426
|
+
legacyCustomChains,
|
|
427
|
+
bscRpcUrls,
|
|
428
|
+
ethereumRpcUrls,
|
|
429
|
+
baseRpcUrls,
|
|
430
|
+
avalancheRpcUrls,
|
|
431
|
+
solanaRpcUrls
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
export {
|
|
435
|
+
DEFAULT_CLOUD_API_BASE_URL,
|
|
436
|
+
DEFAULT_PUBLIC_AVALANCHE_RPC_URLS,
|
|
437
|
+
DEFAULT_PUBLIC_BASE_RPC_URLS,
|
|
438
|
+
DEFAULT_PUBLIC_BSC_RPC_URLS,
|
|
439
|
+
DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS,
|
|
440
|
+
DEFAULT_PUBLIC_ETHEREUM_RPC_URLS,
|
|
441
|
+
DEFAULT_PUBLIC_SOLANA_RPC_URLS,
|
|
442
|
+
DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS,
|
|
443
|
+
applyWalletRpcConfigUpdate,
|
|
444
|
+
buildCloudEvmRpcUrl,
|
|
445
|
+
buildCloudSolanaRpcUrl,
|
|
446
|
+
getInventoryProviderOptions,
|
|
447
|
+
getStoredWalletRpcSelections,
|
|
448
|
+
hasElizaCloudRpcAccess,
|
|
449
|
+
normalizeRpcUrl,
|
|
450
|
+
resolveAvalancheRpcUrls,
|
|
451
|
+
resolveBaseRpcUrls,
|
|
452
|
+
resolveBscRpcUrls,
|
|
453
|
+
resolveCloudApiBaseUrl,
|
|
454
|
+
resolveCloudApiKey,
|
|
455
|
+
resolveEthereumRpcUrls,
|
|
456
|
+
resolveSolanaRpcUrls,
|
|
457
|
+
resolveWalletNetworkMode,
|
|
458
|
+
resolveWalletRpcReadiness
|
|
459
|
+
};
|
|
460
|
+
//# sourceMappingURL=wallet-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/wallet-rpc.ts"],"sourcesContent":["import {\n DEFAULT_WALLET_RPC_SELECTIONS,\n isElizaCloudServiceSelectedInConfig,\n migrateLegacyRuntimeConfig,\n normalizeWalletRpcSelections,\n type WalletConfigUpdateRequest,\n type WalletRpcChain,\n type WalletRpcCredentialKey,\n type WalletRpcSelections,\n} from \"@elizaos/core\";\n\ntype ElizaConfig = Record<string, unknown> & {\n cloud?:\n | (Record<string, unknown> & {\n apiKey?: string | null;\n baseUrl?: string | null;\n })\n | null;\n env?: Record<string, unknown> | null;\n};\n\nexport const DEFAULT_CLOUD_API_BASE_URL = \"https://elizacloud.ai/api/v1\";\n// Multiple BSC public RPCs so we have working fallbacks when Eliza\n// Cloud's proxy returns 401 (plan/account issue) AND the primary\n// Binance dataseed endpoint is blocked/rate-limited. Order matters —\n// the wallet resolver tries them in sequence, so put the most reliable\n// community endpoints first.\nexport const DEFAULT_PUBLIC_BSC_RPC_URLS = [\n \"https://bsc.publicnode.com/\",\n \"https://bsc-rpc.publicnode.com/\",\n \"https://binance.llamarpc.com/\",\n \"https://rpc.ankr.com/bsc\",\n \"https://bsc-dataseed.bnbchain.org/\",\n \"https://bsc-dataseed1.binance.org/\",\n \"https://bsc-dataseed2.binance.org/\",\n \"https://bsc-dataseed3.binance.org/\",\n] as const;\nexport const DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS = [\n \"https://bsc-testnet.publicnode.com/\",\n \"https://bsc-testnet-rpc.publicnode.com/\",\n \"https://data-seed-prebsc-1-s1.binance.org:8545/\",\n] as const;\n// Same reasoning for Ethereum / Base / Avalanche — give the resolver\n// multiple community endpoints so a single DNS/rate-limit failure\n// doesn't block wallet execution end-to-end.\nexport const DEFAULT_PUBLIC_ETHEREUM_RPC_URLS = [\n \"https://ethereum.publicnode.com/\",\n \"https://ethereum-rpc.publicnode.com/\",\n \"https://eth.llamarpc.com/\",\n \"https://rpc.ankr.com/eth\",\n] as const;\nexport const DEFAULT_PUBLIC_BASE_RPC_URLS = [\n \"https://base.publicnode.com/\",\n \"https://base-rpc.publicnode.com/\",\n \"https://base.llamarpc.com/\",\n \"https://mainnet.base.org/\",\n] as const;\nexport const DEFAULT_PUBLIC_AVALANCHE_RPC_URLS = [\n \"https://avalanche.publicnode.com/ext/bc/C/rpc\",\n \"https://avalanche-c-chain-rpc.publicnode.com/\",\n \"https://api.avax.network/ext/bc/C/rpc\",\n \"https://rpc.ankr.com/avalanche\",\n] as const;\nexport const DEFAULT_PUBLIC_SOLANA_RPC_URLS = [\n \"https://api.mainnet-beta.solana.com\",\n \"https://solana-rpc.publicnode.com\",\n] as const;\nexport const DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS = [\n \"https://api.devnet.solana.com\",\n] as const;\n\ntype WalletCapableConfig = Pick<ElizaConfig, \"cloud\" | \"env\"> & {\n wallet?: {\n rpcProviders?: Partial<Record<keyof WalletRpcSelections, string>>;\n network?: \"mainnet\" | \"testnet\";\n };\n};\n\nexport interface InventoryProviderOption {\n id: WalletRpcChain;\n name: string;\n description: string;\n rpcProviders: Array<{\n id: string;\n name: string;\n description: string;\n envKey: WalletRpcCredentialKey | null;\n requiresKey: boolean;\n }>;\n}\n\nexport interface WalletRpcResolutionOptions {\n cloudManagedAccess?: boolean | null;\n cloudApiKey?: string | null;\n cloudBaseUrl?: string | null;\n walletNetwork?: \"mainnet\" | \"testnet\" | null;\n}\n\nexport interface WalletRpcReadiness {\n walletNetwork: \"mainnet\" | \"testnet\";\n cloudManagedAccess: boolean;\n managedBscRpcReady: boolean;\n evmBalanceReady: boolean;\n solanaBalanceReady: boolean;\n selectedRpcProviders: WalletRpcSelections;\n legacyCustomChains: WalletRpcChain[];\n bscRpcUrls: string[];\n ethereumRpcUrls: string[];\n baseRpcUrls: string[];\n avalancheRpcUrls: string[];\n solanaRpcUrls: string[];\n}\n\ntype SupportedCloudEvmRpcChain = \"mainnet\" | \"base\" | \"bsc\" | \"avalanche\";\n\nconst PROVIDER_CREDENTIAL_KEYS: Record<\n WalletRpcChain,\n Record<string, WalletRpcCredentialKey[]>\n> = {\n evm: {\n \"eliza-cloud\": [],\n alchemy: [\"ALCHEMY_API_KEY\"],\n infura: [\"INFURA_API_KEY\"],\n ankr: [\"ANKR_API_KEY\"],\n },\n bsc: {\n \"eliza-cloud\": [],\n alchemy: [\"ALCHEMY_API_KEY\"],\n ankr: [\"ANKR_API_KEY\"],\n nodereal: [\"NODEREAL_BSC_RPC_URL\"],\n quicknode: [\"QUICKNODE_BSC_RPC_URL\"],\n },\n solana: {\n \"eliza-cloud\": [],\n \"helius-birdeye\": [\"HELIUS_API_KEY\", \"BIRDEYE_API_KEY\"],\n },\n};\n\nconst LEGACY_CUSTOM_CHAIN_KEYS: Record<\n WalletRpcChain,\n WalletRpcCredentialKey[]\n> = {\n evm: [\"ETHEREUM_RPC_URL\", \"BASE_RPC_URL\", \"AVALANCHE_RPC_URL\"],\n bsc: [\"BSC_RPC_URL\"],\n solana: [\"SOLANA_RPC_URL\"],\n};\n\nconst WALLET_RPC_CONFIG_KEYS = [\n \"ALCHEMY_API_KEY\",\n \"INFURA_API_KEY\",\n \"ANKR_API_KEY\",\n \"ETHEREUM_RPC_URL\",\n \"BASE_RPC_URL\",\n \"AVALANCHE_RPC_URL\",\n \"HELIUS_API_KEY\",\n \"BIRDEYE_API_KEY\",\n \"NODEREAL_BSC_RPC_URL\",\n \"QUICKNODE_BSC_RPC_URL\",\n \"BSC_RPC_URL\",\n \"SOLANA_RPC_URL\",\n] as const satisfies readonly WalletRpcCredentialKey[];\n\nfunction normalizeSecret(value: string | null | undefined): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function resolveWalletNetworkMode(\n config?: WalletCapableConfig | null,\n fallback?: string | null,\n): \"mainnet\" | \"testnet\" {\n const normalized = (\n fallback ??\n config?.wallet?.network ??\n process.env.ELIZA_WALLET_NETWORK ??\n \"\"\n )\n .trim()\n .toLowerCase();\n if (normalized === \"testnet\") return \"testnet\";\n return \"mainnet\";\n}\n\nfunction uniqueRpcUrls(\n ...groups: Array<ReadonlyArray<string | null | undefined>>\n): string[] {\n return [\n ...new Set(\n groups\n .flat()\n .map((url) => normalizeRpcUrl(url))\n .filter((url): url is string => Boolean(url)),\n ),\n ];\n}\n\nfunction hasStoredSelections(config?: WalletCapableConfig | null): boolean {\n const selections = config?.wallet?.rpcProviders;\n return Boolean(selections && Object.keys(selections).length > 0);\n}\n\nfunction inferSelectedRpcProviders(): WalletRpcSelections {\n return {\n evm: process.env.ALCHEMY_API_KEY?.trim()\n ? \"alchemy\"\n : process.env.INFURA_API_KEY?.trim()\n ? \"infura\"\n : process.env.ANKR_API_KEY?.trim()\n ? \"ankr\"\n : DEFAULT_WALLET_RPC_SELECTIONS.evm,\n bsc: process.env.NODEREAL_BSC_RPC_URL?.trim()\n ? \"nodereal\"\n : process.env.QUICKNODE_BSC_RPC_URL?.trim()\n ? \"quicknode\"\n : process.env.ALCHEMY_API_KEY?.trim()\n ? \"alchemy\"\n : process.env.ANKR_API_KEY?.trim()\n ? \"ankr\"\n : DEFAULT_WALLET_RPC_SELECTIONS.bsc,\n solana:\n process.env.HELIUS_API_KEY?.trim() || process.env.BIRDEYE_API_KEY?.trim()\n ? \"helius-birdeye\"\n : DEFAULT_WALLET_RPC_SELECTIONS.solana,\n };\n}\n\nfunction walletSelectionsUseElizaCloud(\n selections: WalletRpcSelections,\n): boolean {\n return Object.values(selections).some(\n (provider) => provider === \"eliza-cloud\",\n );\n}\n\nfunction hasLegacyCustomChainUrl(chain: WalletRpcChain): boolean {\n return LEGACY_CUSTOM_CHAIN_KEYS[chain].some((key) =>\n Boolean(normalizeSecret(process.env[key])),\n );\n}\n\nfunction buildLegacyCustomChains(\n selections: WalletRpcSelections,\n): WalletRpcChain[] {\n return (Object.keys(LEGACY_CUSTOM_CHAIN_KEYS) as WalletRpcChain[]).filter(\n (chain) =>\n selections[chain] === DEFAULT_WALLET_RPC_SELECTIONS[chain] &&\n hasLegacyCustomChainUrl(chain),\n );\n}\n\nexport function normalizeRpcUrl(url: string | null | undefined): string | null {\n if (typeof url !== \"string\") return null;\n const trimmed = url.trim();\n if (!trimmed) return null;\n try {\n const parsed = new URL(trimmed);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n return parsed.toString();\n } catch {\n return null;\n }\n}\n\nexport function resolveCloudApiBaseUrl(\n rawBaseUrl?: string | null,\n): string | null {\n const candidate =\n normalizeSecret(rawBaseUrl ?? process.env.ELIZAOS_CLOUD_BASE_URL) ??\n DEFAULT_CLOUD_API_BASE_URL;\n try {\n const parsed = new URL(candidate);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n parsed.hash = \"\";\n parsed.search = \"\";\n const normalizedBase = parsed.toString().replace(/\\/+$/, \"\");\n return normalizedBase.endsWith(\"/api/v1\")\n ? normalizedBase\n : `${normalizedBase}/api/v1`;\n } catch {\n return null;\n }\n}\n\nexport function resolveCloudApiKey(\n config?: Pick<ElizaConfig, \"cloud\"> | null,\n): string | null {\n return normalizeSecret(\n config?.cloud?.apiKey ?? process.env.ELIZAOS_CLOUD_API_KEY,\n );\n}\n\nfunction buildCloudRpcProxyUrl(\n pathname: string,\n options: WalletRpcResolutionOptions = {},\n): string | null {\n const cloudApiKey = normalizeSecret(\n options.cloudApiKey ?? process.env.ELIZAOS_CLOUD_API_KEY,\n );\n const cloudManagedAccess = options.cloudManagedAccess ?? Boolean(cloudApiKey);\n if (!cloudManagedAccess || !cloudApiKey) {\n return null;\n }\n\n const cloudBaseUrl = resolveCloudApiBaseUrl(options.cloudBaseUrl);\n if (!cloudBaseUrl) {\n return null;\n }\n\n const url = new URL(\n pathname.replace(/^\\/+/, \"\"),\n `${cloudBaseUrl.replace(/\\/+$/, \"\")}/`,\n );\n url.searchParams.set(\"api_key\", cloudApiKey);\n return normalizeRpcUrl(url.toString());\n}\n\nexport function buildCloudEvmRpcUrl(\n chain: SupportedCloudEvmRpcChain,\n options: WalletRpcResolutionOptions = {},\n): string | null {\n return buildCloudRpcProxyUrl(`proxy/evm-rpc/${chain}`, options);\n}\n\nexport function buildCloudSolanaRpcUrl(\n options: WalletRpcResolutionOptions = {},\n): string | null {\n return buildCloudRpcProxyUrl(\"proxy/solana-rpc\", options);\n}\n\nexport function hasElizaCloudRpcAccess(\n config?: WalletCapableConfig | null,\n): boolean {\n const selectedRpcProviders = hasStoredSelections(config)\n ? getStoredWalletRpcSelections(config)\n : inferSelectedRpcProviders();\n return Boolean(\n resolveCloudApiKey(config) &&\n (walletSelectionsUseElizaCloud(selectedRpcProviders) ||\n isElizaCloudServiceSelectedInConfig(\n (config ?? {}) as Record<string, unknown>,\n \"rpc\",\n )),\n );\n}\n\nexport function getStoredWalletRpcSelections(\n config?: WalletCapableConfig | null,\n): WalletRpcSelections {\n return normalizeWalletRpcSelections(config?.wallet?.rpcProviders);\n}\n\nexport function getInventoryProviderOptions(): InventoryProviderOption[] {\n return [\n {\n id: \"evm\",\n name: \"EVM\",\n description: \"Ethereum, Base, Arbitrum, Optimism, Polygon.\",\n rpcProviders: [\n {\n id: \"eliza-cloud\",\n name: \"Eliza Cloud\",\n description: \"Managed RPC. No setup needed.\",\n envKey: null,\n requiresKey: false,\n },\n {\n id: \"infura\",\n name: \"Infura\",\n description: \"Reliable EVM infrastructure.\",\n envKey: \"INFURA_API_KEY\",\n requiresKey: true,\n },\n {\n id: \"alchemy\",\n name: \"Alchemy\",\n description: \"Full-featured EVM data platform.\",\n envKey: \"ALCHEMY_API_KEY\",\n requiresKey: true,\n },\n {\n id: \"ankr\",\n name: \"Ankr\",\n description: \"Decentralized RPC provider.\",\n envKey: \"ANKR_API_KEY\",\n requiresKey: true,\n },\n ],\n },\n {\n id: \"bsc\",\n name: \"BSC\",\n description: \"BNB Smart Chain tokens, NFTs, and trades.\",\n rpcProviders: [\n {\n id: \"eliza-cloud\",\n name: \"Eliza Cloud\",\n description: \"Managed RPC. No setup needed.\",\n envKey: null,\n requiresKey: false,\n },\n {\n id: \"alchemy\",\n name: \"Alchemy\",\n description: \"Managed BSC RPC via Alchemy.\",\n envKey: \"ALCHEMY_API_KEY\",\n requiresKey: true,\n },\n {\n id: \"ankr\",\n name: \"Ankr\",\n description: \"Decentralized BSC RPC provider.\",\n envKey: \"ANKR_API_KEY\",\n requiresKey: true,\n },\n {\n id: \"nodereal\",\n name: \"NodeReal\",\n description: \"Dedicated BSC RPC endpoint.\",\n envKey: \"NODEREAL_BSC_RPC_URL\",\n requiresKey: true,\n },\n {\n id: \"quicknode\",\n name: \"QuickNode\",\n description: \"Managed BSC RPC endpoint.\",\n envKey: \"QUICKNODE_BSC_RPC_URL\",\n requiresKey: true,\n },\n ],\n },\n {\n id: \"solana\",\n name: \"Solana\",\n description: \"Solana mainnet tokens and NFTs.\",\n rpcProviders: [\n {\n id: \"eliza-cloud\",\n name: \"Eliza Cloud\",\n description: \"Managed RPC. No setup needed.\",\n envKey: null,\n requiresKey: false,\n },\n {\n id: \"helius-birdeye\",\n name: \"Helius + Birdeye\",\n description: \"Solana balances and NFT metadata.\",\n envKey: \"HELIUS_API_KEY\",\n requiresKey: true,\n },\n ],\n },\n ];\n}\n\nexport function resolveBscRpcUrls(\n options: WalletRpcResolutionOptions = {},\n): string[] {\n const network = resolveWalletNetworkMode(undefined, options.walletNetwork);\n const cloudRpcUrl =\n network === \"mainnet\" ? buildCloudEvmRpcUrl(\"bsc\", options) : null;\n const publicDefaults =\n network === \"testnet\"\n ? DEFAULT_PUBLIC_BSC_TESTNET_RPC_URLS\n : DEFAULT_PUBLIC_BSC_RPC_URLS;\n return uniqueRpcUrls(\n [\n process.env.BSC_TESTNET_RPC_URL,\n process.env.NODEREAL_BSC_RPC_URL,\n process.env.QUICKNODE_BSC_RPC_URL,\n process.env.BSC_RPC_URL,\n cloudRpcUrl,\n ],\n options.cloudManagedAccess ? publicDefaults : [],\n );\n}\n\nexport function resolveEthereumRpcUrls(\n options: WalletRpcResolutionOptions = {},\n): string[] {\n return uniqueRpcUrls(\n [process.env.ETHEREUM_RPC_URL, buildCloudEvmRpcUrl(\"mainnet\", options)],\n options.cloudManagedAccess ? DEFAULT_PUBLIC_ETHEREUM_RPC_URLS : [],\n );\n}\n\nexport function resolveBaseRpcUrls(\n options: WalletRpcResolutionOptions = {},\n): string[] {\n return uniqueRpcUrls(\n [process.env.BASE_RPC_URL, buildCloudEvmRpcUrl(\"base\", options)],\n options.cloudManagedAccess ? DEFAULT_PUBLIC_BASE_RPC_URLS : [],\n );\n}\n\nexport function resolveAvalancheRpcUrls(\n options: WalletRpcResolutionOptions = {},\n): string[] {\n return uniqueRpcUrls(\n [process.env.AVALANCHE_RPC_URL, buildCloudEvmRpcUrl(\"avalanche\", options)],\n options.cloudManagedAccess ? DEFAULT_PUBLIC_AVALANCHE_RPC_URLS : [],\n );\n}\n\nexport function resolveSolanaRpcUrls(\n options: WalletRpcResolutionOptions = {},\n): string[] {\n const network = resolveWalletNetworkMode(undefined, options.walletNetwork);\n const cloudRpcUrl =\n network === \"mainnet\" ? buildCloudSolanaRpcUrl(options) : null;\n const publicDefaults =\n network === \"testnet\"\n ? DEFAULT_PUBLIC_SOLANA_TESTNET_RPC_URLS\n : DEFAULT_PUBLIC_SOLANA_RPC_URLS;\n return uniqueRpcUrls(\n [\n process.env.SOLANA_TESTNET_RPC_URL,\n process.env.SOLANA_RPC_URL,\n cloudRpcUrl,\n ],\n options.cloudManagedAccess ? publicDefaults : [],\n );\n}\n\nexport function applyWalletRpcConfigUpdate(\n config: WalletCapableConfig,\n update: WalletConfigUpdateRequest,\n): void {\n config.env ??= {};\n const env = config.env as Record<string, string>;\n const normalizedSelections = normalizeWalletRpcSelections(update.selections);\n const selectedCredentialKeys = new Set<WalletRpcCredentialKey>();\n\n for (const chain of Object.keys(normalizedSelections) as WalletRpcChain[]) {\n for (const key of PROVIDER_CREDENTIAL_KEYS[chain][\n normalizedSelections[chain]\n ]) {\n selectedCredentialKeys.add(key);\n }\n }\n\n config.wallet = {\n ...config.wallet,\n rpcProviders: normalizedSelections,\n network:\n update.walletNetwork === \"testnet\"\n ? \"testnet\"\n : update.walletNetwork === \"mainnet\"\n ? \"mainnet\"\n : config.wallet?.network,\n };\n\n if (\n update.walletNetwork === \"testnet\" ||\n update.walletNetwork === \"mainnet\"\n ) {\n env.ELIZA_WALLET_NETWORK = update.walletNetwork;\n process.env.ELIZA_WALLET_NETWORK = update.walletNetwork;\n }\n\n for (const key of WALLET_RPC_CONFIG_KEYS) {\n const value = update.credentials?.[key];\n if (typeof value === \"string\" && value.trim()) {\n const normalizedValue = value.trim();\n env[key] = normalizedValue;\n process.env[key] = normalizedValue;\n continue;\n }\n if (typeof value === \"string\" || !selectedCredentialKeys.has(key)) {\n delete env[key];\n delete process.env[key];\n }\n }\n\n const heliusKey = update.credentials?.HELIUS_API_KEY?.trim();\n if (heliusKey) {\n const solanaRpcUrl = `https://mainnet.helius-rpc.com/?api-key=${heliusKey}`;\n env.SOLANA_RPC_URL = solanaRpcUrl;\n process.env.SOLANA_RPC_URL = solanaRpcUrl;\n } else if (\n typeof update.credentials?.HELIUS_API_KEY === \"string\" &&\n typeof update.credentials?.SOLANA_RPC_URL !== \"string\"\n ) {\n delete env.SOLANA_RPC_URL;\n delete process.env.SOLANA_RPC_URL;\n }\n}\n\nexport function resolveWalletRpcReadiness(\n config?: WalletCapableConfig | null,\n): WalletRpcReadiness {\n if (config && typeof config === \"object\" && !Array.isArray(config)) {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n }\n const walletNetwork = resolveWalletNetworkMode(config);\n const cloudApiKey = resolveCloudApiKey(config);\n const cloudBaseUrl = resolveCloudApiBaseUrl(config?.cloud?.baseUrl);\n const selectedRpcProviders = hasStoredSelections(config)\n ? getStoredWalletRpcSelections(config)\n : inferSelectedRpcProviders();\n const cloudRpcSelected =\n walletSelectionsUseElizaCloud(selectedRpcProviders) ||\n isElizaCloudServiceSelectedInConfig(\n (config ?? {}) as Record<string, unknown>,\n \"rpc\",\n );\n const cloudManagedAccess = Boolean(cloudApiKey && cloudRpcSelected);\n const cloudOptions = {\n cloudManagedAccess,\n cloudApiKey,\n cloudBaseUrl,\n walletNetwork,\n } satisfies WalletRpcResolutionOptions;\n const bscRpcUrls = resolveBscRpcUrls(cloudOptions);\n const ethereumRpcUrls = resolveEthereumRpcUrls(cloudOptions);\n const baseRpcUrls = resolveBaseRpcUrls(cloudOptions);\n const avalancheRpcUrls = resolveAvalancheRpcUrls(cloudOptions);\n const solanaRpcUrls = resolveSolanaRpcUrls(cloudOptions);\n const legacyCustomChains = buildLegacyCustomChains(selectedRpcProviders);\n\n return {\n walletNetwork,\n cloudManagedAccess,\n managedBscRpcReady: bscRpcUrls.length > 0,\n evmBalanceReady: Boolean(\n process.env.ALCHEMY_API_KEY?.trim() ||\n process.env.ANKR_API_KEY?.trim() ||\n process.env.INFURA_API_KEY?.trim() ||\n bscRpcUrls.length > 0 ||\n ethereumRpcUrls.length > 0 ||\n baseRpcUrls.length > 0 ||\n avalancheRpcUrls.length > 0,\n ),\n solanaBalanceReady: Boolean(\n process.env.HELIUS_API_KEY?.trim() || solanaRpcUrls.length > 0,\n ),\n selectedRpcProviders,\n legacyCustomChains,\n bscRpcUrls,\n ethereumRpcUrls,\n baseRpcUrls,\n avalancheRpcUrls,\n solanaRpcUrls,\n };\n}\n"],"mappings":"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","names":[]}
|