amped-defi 1.0.0

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.
Files changed (189) hide show
  1. package/README.md +757 -0
  2. package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
  3. package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
  4. package/dist/__mocks__/@sodax/sdk.js +24 -0
  5. package/dist/__mocks__/@sodax/sdk.js.map +1 -0
  6. package/dist/__tests__/setup.d.ts +4 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/__tests__/setup.js +32 -0
  9. package/dist/__tests__/setup.js.map +1 -0
  10. package/dist/index.d.ts +66 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +281 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/policy/policyEngine.d.ts +119 -0
  15. package/dist/policy/policyEngine.d.ts.map +1 -0
  16. package/dist/policy/policyEngine.js +322 -0
  17. package/dist/policy/policyEngine.js.map +1 -0
  18. package/dist/providers/spokeProviderFactory.d.ts +38 -0
  19. package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
  20. package/dist/providers/spokeProviderFactory.js +212 -0
  21. package/dist/providers/spokeProviderFactory.js.map +1 -0
  22. package/dist/sodax/client.d.ts +34 -0
  23. package/dist/sodax/client.d.ts.map +1 -0
  24. package/dist/sodax/client.js +99 -0
  25. package/dist/sodax/client.js.map +1 -0
  26. package/dist/tools/bridge.d.ts +105 -0
  27. package/dist/tools/bridge.d.ts.map +1 -0
  28. package/dist/tools/bridge.js +334 -0
  29. package/dist/tools/bridge.js.map +1 -0
  30. package/dist/tools/discovery.d.ts +141 -0
  31. package/dist/tools/discovery.d.ts.map +1 -0
  32. package/dist/tools/discovery.js +777 -0
  33. package/dist/tools/discovery.js.map +1 -0
  34. package/dist/tools/moneyMarket.d.ts +227 -0
  35. package/dist/tools/moneyMarket.d.ts.map +1 -0
  36. package/dist/tools/moneyMarket.js +867 -0
  37. package/dist/tools/moneyMarket.js.map +1 -0
  38. package/dist/tools/portfolio.d.ts +43 -0
  39. package/dist/tools/portfolio.d.ts.map +1 -0
  40. package/dist/tools/portfolio.js +538 -0
  41. package/dist/tools/portfolio.js.map +1 -0
  42. package/dist/tools/swap.d.ts +71 -0
  43. package/dist/tools/swap.d.ts.map +1 -0
  44. package/dist/tools/swap.js +762 -0
  45. package/dist/tools/swap.js.map +1 -0
  46. package/dist/tools/walletManagement.d.ts +80 -0
  47. package/dist/tools/walletManagement.d.ts.map +1 -0
  48. package/dist/tools/walletManagement.js +289 -0
  49. package/dist/tools/walletManagement.js.map +1 -0
  50. package/dist/types.d.ts +205 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +5 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils/errorUtils.d.ts +2 -0
  55. package/dist/utils/errorUtils.d.ts.map +1 -0
  56. package/dist/utils/errorUtils.js +19 -0
  57. package/dist/utils/errorUtils.js.map +1 -0
  58. package/dist/utils/errors.d.ts +144 -0
  59. package/dist/utils/errors.d.ts.map +1 -0
  60. package/dist/utils/errors.js +310 -0
  61. package/dist/utils/errors.js.map +1 -0
  62. package/dist/utils/positionAggregator.d.ts +122 -0
  63. package/dist/utils/positionAggregator.d.ts.map +1 -0
  64. package/dist/utils/positionAggregator.js +377 -0
  65. package/dist/utils/positionAggregator.js.map +1 -0
  66. package/dist/utils/priceService.d.ts +45 -0
  67. package/dist/utils/priceService.d.ts.map +1 -0
  68. package/dist/utils/priceService.js +108 -0
  69. package/dist/utils/priceService.js.map +1 -0
  70. package/dist/utils/sodaxApi.d.ts +92 -0
  71. package/dist/utils/sodaxApi.d.ts.map +1 -0
  72. package/dist/utils/sodaxApi.js +143 -0
  73. package/dist/utils/sodaxApi.js.map +1 -0
  74. package/dist/utils/tokenResolver.d.ts +54 -0
  75. package/dist/utils/tokenResolver.d.ts.map +1 -0
  76. package/dist/utils/tokenResolver.js +252 -0
  77. package/dist/utils/tokenResolver.js.map +1 -0
  78. package/dist/wallet/backendConfig.d.ts +37 -0
  79. package/dist/wallet/backendConfig.d.ts.map +1 -0
  80. package/dist/wallet/backendConfig.js +125 -0
  81. package/dist/wallet/backendConfig.js.map +1 -0
  82. package/dist/wallet/backends/BankrBackend.d.ts +73 -0
  83. package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
  84. package/dist/wallet/backends/BankrBackend.js +315 -0
  85. package/dist/wallet/backends/BankrBackend.js.map +1 -0
  86. package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
  87. package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
  88. package/dist/wallet/backends/BankrWalletProvider.js +243 -0
  89. package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
  90. package/dist/wallet/backends/EnvBackend.d.ts +50 -0
  91. package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
  92. package/dist/wallet/backends/EnvBackend.js +114 -0
  93. package/dist/wallet/backends/EnvBackend.js.map +1 -0
  94. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
  95. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
  96. package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
  97. package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
  98. package/dist/wallet/backends/index.d.ts +10 -0
  99. package/dist/wallet/backends/index.d.ts.map +1 -0
  100. package/dist/wallet/backends/index.js +10 -0
  101. package/dist/wallet/backends/index.js.map +1 -0
  102. package/dist/wallet/index.d.ts +9 -0
  103. package/dist/wallet/index.d.ts.map +1 -0
  104. package/dist/wallet/index.js +12 -0
  105. package/dist/wallet/index.js.map +1 -0
  106. package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
  107. package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
  108. package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
  109. package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
  110. package/dist/wallet/providers/BankrBackend.d.ts +105 -0
  111. package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
  112. package/dist/wallet/providers/BankrBackend.js +327 -0
  113. package/dist/wallet/providers/BankrBackend.js.map +1 -0
  114. package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
  115. package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
  116. package/dist/wallet/providers/LocalKeyBackend.js +152 -0
  117. package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
  118. package/dist/wallet/providers/chainConfig.d.ts +209 -0
  119. package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
  120. package/dist/wallet/providers/chainConfig.js +175 -0
  121. package/dist/wallet/providers/chainConfig.js.map +1 -0
  122. package/dist/wallet/providers/index.d.ts +30 -0
  123. package/dist/wallet/providers/index.d.ts.map +1 -0
  124. package/dist/wallet/providers/index.js +32 -0
  125. package/dist/wallet/providers/index.js.map +1 -0
  126. package/dist/wallet/providers/types.d.ts +156 -0
  127. package/dist/wallet/providers/types.d.ts.map +1 -0
  128. package/dist/wallet/providers/types.js +11 -0
  129. package/dist/wallet/providers/types.js.map +1 -0
  130. package/dist/wallet/skillWalletAdapter.d.ts +96 -0
  131. package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
  132. package/dist/wallet/skillWalletAdapter.js +280 -0
  133. package/dist/wallet/skillWalletAdapter.js.map +1 -0
  134. package/dist/wallet/types.d.ts +134 -0
  135. package/dist/wallet/types.d.ts.map +1 -0
  136. package/dist/wallet/types.js +138 -0
  137. package/dist/wallet/types.js.map +1 -0
  138. package/dist/wallet/walletManager.d.ts +111 -0
  139. package/dist/wallet/walletManager.d.ts.map +1 -0
  140. package/dist/wallet/walletManager.js +476 -0
  141. package/dist/wallet/walletManager.js.map +1 -0
  142. package/dist/wallet/walletRegistry.d.ts +95 -0
  143. package/dist/wallet/walletRegistry.d.ts.map +1 -0
  144. package/dist/wallet/walletRegistry.js +184 -0
  145. package/dist/wallet/walletRegistry.js.map +1 -0
  146. package/index.js +2 -0
  147. package/openclaw.plugin.json +37 -0
  148. package/package.json +69 -0
  149. package/src/__mocks__/@sodax/sdk.ts +28 -0
  150. package/src/__tests__/errors.test.ts +238 -0
  151. package/src/__tests__/policyEngine.test.ts +354 -0
  152. package/src/__tests__/positionAggregator.test.ts +271 -0
  153. package/src/__tests__/setup.ts +35 -0
  154. package/src/__tests__/sodaxApi.test.ts +203 -0
  155. package/src/__tests__/walletRegistry.test.ts +155 -0
  156. package/src/index.ts +376 -0
  157. package/src/policy/policyEngine.ts +389 -0
  158. package/src/providers/spokeProviderFactory.ts +283 -0
  159. package/src/sodax/client.ts +113 -0
  160. package/src/tools/bridge.ts +425 -0
  161. package/src/tools/discovery.ts +989 -0
  162. package/src/tools/moneyMarket.ts +1265 -0
  163. package/src/tools/portfolio.ts +697 -0
  164. package/src/tools/swap.ts +926 -0
  165. package/src/tools/walletManagement.ts +359 -0
  166. package/src/types.ts +228 -0
  167. package/src/utils/errorUtils.ts +16 -0
  168. package/src/utils/errors.ts +396 -0
  169. package/src/utils/positionAggregator.ts +559 -0
  170. package/src/utils/priceService.ts +153 -0
  171. package/src/utils/sodaxApi.ts +261 -0
  172. package/src/utils/tokenResolver.ts +286 -0
  173. package/src/wallet/backendConfig.ts +151 -0
  174. package/src/wallet/backends/BankrBackend.ts +399 -0
  175. package/src/wallet/backends/BankrWalletProvider.ts +329 -0
  176. package/src/wallet/backends/EnvBackend.ts +149 -0
  177. package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
  178. package/src/wallet/backends/index.ts +10 -0
  179. package/src/wallet/index.ts +14 -0
  180. package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
  181. package/src/wallet/providers/BankrBackend.ts +407 -0
  182. package/src/wallet/providers/LocalKeyBackend.ts +184 -0
  183. package/src/wallet/providers/chainConfig.ts +194 -0
  184. package/src/wallet/providers/index.ts +62 -0
  185. package/src/wallet/providers/types.ts +186 -0
  186. package/src/wallet/skillWalletAdapter.ts +335 -0
  187. package/src/wallet/types.ts +248 -0
  188. package/src/wallet/walletManager.ts +561 -0
  189. package/src/wallet/walletRegistry.ts +216 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Unified Wallet Manager
3
+ *
4
+ * Manages multiple wallet sources with nicknames:
5
+ * - evm-wallet-skill (main)
6
+ * - Bankr (bankr)
7
+ * - Environment variables (custom names)
8
+ *
9
+ * Auto-discovery order:
10
+ * 1. wallets.json config file
11
+ * 2. ~/.evm-wallet.json (evm-wallet-skill) → "main"
12
+ * 3. BANKR_API_KEY env → "bankr"
13
+ * 4. AMPED_OC_WALLETS_JSON env → named wallets
14
+ */
15
+ import type { IWalletBackend, WalletInfo, WalletConfig } from './types';
16
+ /**
17
+ * Unified wallet manager
18
+ */
19
+ export declare class WalletManager {
20
+ private wallets;
21
+ private defaultWallet;
22
+ private initialized;
23
+ /**
24
+ * Initialize the wallet manager
25
+ * Auto-discovers wallets from all sources
26
+ */
27
+ initialize(): Promise<void>;
28
+ /**
29
+ * Load wallets from config file
30
+ */
31
+ private loadConfigFile;
32
+ /**
33
+ * Create backend from config entry
34
+ */
35
+ private createBackendFromConfig;
36
+ /**
37
+ * Auto-discover wallets from environment
38
+ */
39
+ private autoDiscover;
40
+ /**
41
+ * Determine default wallet
42
+ */
43
+ private determineDefault;
44
+ /**
45
+ * Resolve a wallet by nickname
46
+ * @param nickname Optional wallet nickname (uses default if not provided)
47
+ */
48
+ resolve(nickname?: string): Promise<IWalletBackend>;
49
+ /**
50
+ * Check if a wallet exists
51
+ */
52
+ has(nickname: string): Promise<boolean>;
53
+ /**
54
+ * List all available wallets
55
+ */
56
+ listWallets(): Promise<WalletInfo[]>;
57
+ /**
58
+ * Get the default wallet nickname
59
+ */
60
+ getDefaultWalletName(): Promise<string | null>;
61
+ /**
62
+ * Register a new wallet backend
63
+ */
64
+ registerWallet(nickname: string, backend: IWalletBackend): void;
65
+ /**
66
+ * Get available wallet IDs (nicknames)
67
+ * Synchronous version - requires prior initialization
68
+ */
69
+ getAvailableWalletIds(): string[];
70
+ /**
71
+ * Add a new wallet to the config file
72
+ */
73
+ addWallet(nickname: string, config: WalletConfig): Promise<void>;
74
+ /**
75
+ * Rename a wallet
76
+ */
77
+ renameWallet(currentNickname: string, newNickname: string): Promise<void>;
78
+ /**
79
+ * Remove a wallet from config
80
+ */
81
+ removeWallet(nickname: string): Promise<void>;
82
+ /**
83
+ * Set the default wallet
84
+ */
85
+ setDefaultWallet(nickname: string): Promise<void>;
86
+ /**
87
+ * Load config from file (creates empty if doesn't exist)
88
+ */
89
+ private loadConfigFromFile;
90
+ /**
91
+ * Save config to file
92
+ */
93
+ private saveConfigToFile;
94
+ /**
95
+ * Convert a backend to config (for saving auto-discovered wallets)
96
+ */
97
+ private backendToConfig;
98
+ /**
99
+ * Reset the manager (for testing)
100
+ */
101
+ reset(): void;
102
+ }
103
+ /**
104
+ * Get the singleton WalletManager instance
105
+ */
106
+ export declare function getWalletManager(): WalletManager;
107
+ /**
108
+ * Reset the singleton (for testing)
109
+ */
110
+ export declare function resetWalletManager(): void;
111
+ //# sourceMappingURL=walletManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletManager.d.ts","sourceRoot":"","sources":["../../src/wallet/walletManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAqB,YAAY,EAAE,MAAM,SAAS,CAAC;AAmB3F;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC;;OAEG;YACW,cAAc;IAuB5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;OAEG;YACW,YAAY;IA8C1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;OAGG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwBzD;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAiD1C;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKpD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAK/D;;;OAGG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCtE;;OAEG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD/E;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;YACW,eAAe;IAyB7B;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
@@ -0,0 +1,476 @@
1
+ /**
2
+ * Unified Wallet Manager
3
+ *
4
+ * Manages multiple wallet sources with nicknames:
5
+ * - evm-wallet-skill (main)
6
+ * - Bankr (bankr)
7
+ * - Environment variables (custom names)
8
+ *
9
+ * Auto-discovery order:
10
+ * 1. wallets.json config file
11
+ * 2. ~/.evm-wallet.json (evm-wallet-skill) → "main"
12
+ * 3. BANKR_API_KEY env → "bankr"
13
+ * 4. AMPED_OC_WALLETS_JSON env → named wallets
14
+ */
15
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
16
+ import { join, dirname } from 'path';
17
+ import { homedir } from 'os';
18
+ import { createEvmWalletSkillBackend, createBankrBackend, createEnvBackend, loadWalletsFromEnv } from './backends';
19
+ /**
20
+ * Config file path
21
+ */
22
+ const CONFIG_PATH = join(homedir(), '.openclaw', 'extensions', 'amped-defi', 'wallets.json');
23
+ const EVM_WALLET_PATH = join(homedir(), '.evm-wallet.json');
24
+ /**
25
+ * Singleton WalletManager instance
26
+ */
27
+ let instance = null;
28
+ /**
29
+ * Unified wallet manager
30
+ */
31
+ export class WalletManager {
32
+ wallets = new Map();
33
+ defaultWallet = null;
34
+ initialized = false;
35
+ /**
36
+ * Initialize the wallet manager
37
+ * Auto-discovers wallets from all sources
38
+ */
39
+ async initialize() {
40
+ if (this.initialized)
41
+ return;
42
+ console.log('[WalletManager] Initializing...');
43
+ // 1. Load from config file if exists
44
+ await this.loadConfigFile();
45
+ // 2. Auto-discover from environment
46
+ await this.autoDiscover();
47
+ // 3. Set default
48
+ this.determineDefault();
49
+ this.initialized = true;
50
+ console.log(`[WalletManager] Initialized with ${this.wallets.size} wallet(s)`);
51
+ if (this.defaultWallet) {
52
+ console.log(`[WalletManager] Default wallet: ${this.defaultWallet}`);
53
+ }
54
+ }
55
+ /**
56
+ * Load wallets from config file
57
+ */
58
+ async loadConfigFile() {
59
+ if (!existsSync(CONFIG_PATH))
60
+ return;
61
+ try {
62
+ const content = readFileSync(CONFIG_PATH, 'utf-8');
63
+ const config = JSON.parse(content);
64
+ for (const [name, walletConfig] of Object.entries(config.wallets)) {
65
+ const backend = this.createBackendFromConfig(name, walletConfig);
66
+ if (backend) {
67
+ this.wallets.set(name.toLowerCase(), backend);
68
+ console.log(`[WalletManager] Loaded wallet "${name}" from config`);
69
+ }
70
+ }
71
+ if (config.default) {
72
+ this.defaultWallet = config.default.toLowerCase();
73
+ }
74
+ }
75
+ catch (error) {
76
+ console.warn(`[WalletManager] Failed to load config: ${error}`);
77
+ }
78
+ }
79
+ /**
80
+ * Create backend from config entry
81
+ */
82
+ createBackendFromConfig(name, config) {
83
+ try {
84
+ switch (config.source) {
85
+ case 'evm-wallet-skill':
86
+ return createEvmWalletSkillBackend({
87
+ nickname: name,
88
+ path: config.path,
89
+ chains: config.chains,
90
+ });
91
+ case 'bankr':
92
+ if (!config.apiKey) {
93
+ console.warn(`[WalletManager] Bankr wallet "${name}" missing apiKey`);
94
+ return null;
95
+ }
96
+ return createBankrBackend({
97
+ nickname: name,
98
+ apiKey: config.apiKey,
99
+ apiUrl: config.apiUrl,
100
+ });
101
+ case 'env':
102
+ return createEnvBackend({
103
+ nickname: name,
104
+ address: config.address,
105
+ privateKey: config.privateKey,
106
+ envVar: config.envVar,
107
+ chains: config.chains,
108
+ });
109
+ default:
110
+ console.warn(`[WalletManager] Unknown wallet source: ${config.source}`);
111
+ return null;
112
+ }
113
+ }
114
+ catch (error) {
115
+ console.warn(`[WalletManager] Failed to create backend for "${name}": ${error}`);
116
+ return null;
117
+ }
118
+ }
119
+ /**
120
+ * Auto-discover wallets from environment
121
+ */
122
+ async autoDiscover() {
123
+ // evm-wallet-skill (if not already configured)
124
+ if (!this.wallets.has('main') && existsSync(EVM_WALLET_PATH)) {
125
+ try {
126
+ const backend = createEvmWalletSkillBackend({ nickname: 'main' });
127
+ if (await backend.isReady()) {
128
+ this.wallets.set('main', backend);
129
+ console.log('[WalletManager] Auto-discovered: evm-wallet-skill → "main"');
130
+ }
131
+ }
132
+ catch (error) {
133
+ console.debug(`[WalletManager] evm-wallet-skill not available: ${error}`);
134
+ }
135
+ }
136
+ // Bankr (if API key present and not already configured)
137
+ const bankrApiKey = process.env.BANKR_API_KEY;
138
+ if (!this.wallets.has('bankr') && bankrApiKey) {
139
+ console.log('[WalletManager] Found BANKR_API_KEY, attempting to add Bankr wallet...');
140
+ try {
141
+ const backend = createBankrBackend({
142
+ nickname: 'bankr',
143
+ apiKey: bankrApiKey,
144
+ apiUrl: process.env.BANKR_API_URL,
145
+ });
146
+ const ready = await backend.isReady();
147
+ if (ready) {
148
+ this.wallets.set('bankr', backend);
149
+ console.log('[WalletManager] Auto-discovered: BANKR_API_KEY → "bankr"');
150
+ }
151
+ else {
152
+ console.warn('[WalletManager] Bankr API key present but connectivity check failed');
153
+ }
154
+ }
155
+ catch (error) {
156
+ console.warn(`[WalletManager] Bankr auto-discovery failed: ${error}`);
157
+ }
158
+ }
159
+ // Environment variable wallets
160
+ const envWallets = loadWalletsFromEnv();
161
+ for (const [name, backend] of envWallets) {
162
+ if (!this.wallets.has(name)) {
163
+ this.wallets.set(name, backend);
164
+ console.log(`[WalletManager] Auto-discovered: AMPED_OC_WALLETS_JSON → "${name}"`);
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * Determine default wallet
170
+ */
171
+ determineDefault() {
172
+ // If already set from config, verify it exists
173
+ if (this.defaultWallet && this.wallets.has(this.defaultWallet)) {
174
+ return;
175
+ }
176
+ // Priority: main > first available
177
+ if (this.wallets.has('main')) {
178
+ this.defaultWallet = 'main';
179
+ }
180
+ else if (this.wallets.size > 0) {
181
+ this.defaultWallet = Array.from(this.wallets.keys())[0];
182
+ }
183
+ else {
184
+ this.defaultWallet = null;
185
+ }
186
+ }
187
+ /**
188
+ * Resolve a wallet by nickname
189
+ * @param nickname Optional wallet nickname (uses default if not provided)
190
+ */
191
+ async resolve(nickname) {
192
+ await this.initialize();
193
+ const name = (nickname || this.defaultWallet)?.toLowerCase();
194
+ if (!name) {
195
+ throw new Error('No wallet configured.\n\n' +
196
+ 'To set up a wallet, install evm-wallet-skill:\n' +
197
+ ' git clone https://github.com/amped-finance/evm-wallet-skill.git ~/.openclaw/skills/evm-wallet-skill\n' +
198
+ ' cd ~/.openclaw/skills/evm-wallet-skill && npm install\n' +
199
+ ' node src/setup.js');
200
+ }
201
+ const wallet = this.wallets.get(name);
202
+ if (!wallet) {
203
+ const available = Array.from(this.wallets.keys()).join(', ') || '(none)';
204
+ throw new Error(`Wallet "${name}" not found. Available wallets: ${available}`);
205
+ }
206
+ return wallet;
207
+ }
208
+ /**
209
+ * Check if a wallet exists
210
+ */
211
+ async has(nickname) {
212
+ await this.initialize();
213
+ return this.wallets.has(nickname.toLowerCase());
214
+ }
215
+ /**
216
+ * List all available wallets
217
+ */
218
+ async listWallets() {
219
+ await this.initialize();
220
+ const wallets = [];
221
+ for (const [name, backend] of this.wallets) {
222
+ try {
223
+ // Add timeout for slow backends (like Bankr)
224
+ const addressPromise = backend.getAddress();
225
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 30000));
226
+ const address = await Promise.race([addressPromise, timeoutPromise]);
227
+ // Get Solana address for Bankr wallets
228
+ let solanaAddress;
229
+ if (backend.type === 'bankr' && backend.getSolanaAddress) {
230
+ try {
231
+ solanaAddress = await backend.getSolanaAddress() || undefined;
232
+ }
233
+ catch (e) {
234
+ console.warn(`[WalletManager] Failed to get Solana address for ${name}`);
235
+ }
236
+ }
237
+ wallets.push({
238
+ nickname: name,
239
+ type: backend.type,
240
+ address,
241
+ chains: [...backend.supportedChains],
242
+ isDefault: name === this.defaultWallet,
243
+ solanaAddress,
244
+ });
245
+ }
246
+ catch (error) {
247
+ // Include wallet with placeholder address if we can't get it
248
+ console.warn(`[WalletManager] Failed to get address for "${name}": ${error}`);
249
+ wallets.push({
250
+ nickname: name,
251
+ type: backend.type,
252
+ address: '0x...', // Placeholder
253
+ chains: [...backend.supportedChains],
254
+ isDefault: name === this.defaultWallet,
255
+ });
256
+ }
257
+ }
258
+ return wallets;
259
+ }
260
+ /**
261
+ * Get the default wallet nickname
262
+ */
263
+ async getDefaultWalletName() {
264
+ await this.initialize();
265
+ return this.defaultWallet;
266
+ }
267
+ /**
268
+ * Register a new wallet backend
269
+ */
270
+ registerWallet(nickname, backend) {
271
+ this.wallets.set(nickname.toLowerCase(), backend);
272
+ console.log(`[WalletManager] Registered wallet: ${nickname}`);
273
+ }
274
+ /**
275
+ * Get available wallet IDs (nicknames)
276
+ * Synchronous version - requires prior initialization
277
+ */
278
+ getAvailableWalletIds() {
279
+ return Array.from(this.wallets.keys());
280
+ }
281
+ /**
282
+ * Add a new wallet to the config file
283
+ */
284
+ async addWallet(nickname, config) {
285
+ await this.initialize();
286
+ const normalizedName = nickname.toLowerCase();
287
+ // Check if wallet already exists
288
+ if (this.wallets.has(normalizedName)) {
289
+ throw new Error(`Wallet "${nickname}" already exists. Use rename to change it.`);
290
+ }
291
+ // Create the backend to validate config
292
+ const backend = this.createBackendFromConfig(normalizedName, config);
293
+ if (!backend) {
294
+ throw new Error(`Failed to create wallet backend for "${nickname}"`);
295
+ }
296
+ // Validate the backend works
297
+ const ready = await backend.isReady();
298
+ if (!ready) {
299
+ throw new Error(`Wallet "${nickname}" configuration is invalid or not accessible`);
300
+ }
301
+ // Load existing config
302
+ const fileConfig = this.loadConfigFromFile();
303
+ // Add new wallet
304
+ fileConfig.wallets[normalizedName] = config;
305
+ // Save config
306
+ this.saveConfigToFile(fileConfig);
307
+ // Register in memory
308
+ this.wallets.set(normalizedName, backend);
309
+ console.log(`[WalletManager] Added wallet "${nickname}"`);
310
+ }
311
+ /**
312
+ * Rename a wallet
313
+ */
314
+ async renameWallet(currentNickname, newNickname) {
315
+ await this.initialize();
316
+ const currentName = currentNickname.toLowerCase();
317
+ const newName = newNickname.toLowerCase();
318
+ // Check source exists
319
+ if (!this.wallets.has(currentName)) {
320
+ throw new Error(`Wallet "${currentNickname}" not found`);
321
+ }
322
+ // Check target doesn't exist
323
+ if (this.wallets.has(newName)) {
324
+ throw new Error(`Wallet "${newNickname}" already exists`);
325
+ }
326
+ // Load config
327
+ const fileConfig = this.loadConfigFromFile();
328
+ // Move wallet config
329
+ if (fileConfig.wallets[currentName]) {
330
+ fileConfig.wallets[newName] = fileConfig.wallets[currentName];
331
+ delete fileConfig.wallets[currentName];
332
+ }
333
+ else {
334
+ // Wallet was auto-discovered, need to add it to config
335
+ const backend = this.wallets.get(currentName);
336
+ const config = await this.backendToConfig(backend);
337
+ fileConfig.wallets[newName] = config;
338
+ }
339
+ // Update default if needed
340
+ if (fileConfig.default === currentName) {
341
+ fileConfig.default = newName;
342
+ }
343
+ if (this.defaultWallet === currentName) {
344
+ this.defaultWallet = newName;
345
+ }
346
+ // Save config
347
+ this.saveConfigToFile(fileConfig);
348
+ // Update in-memory
349
+ const backend = this.wallets.get(currentName);
350
+ this.wallets.delete(currentName);
351
+ this.wallets.set(newName, backend);
352
+ console.log(`[WalletManager] Renamed wallet "${currentNickname}" to "${newNickname}"`);
353
+ }
354
+ /**
355
+ * Remove a wallet from config
356
+ */
357
+ async removeWallet(nickname) {
358
+ await this.initialize();
359
+ const name = nickname.toLowerCase();
360
+ if (!this.wallets.has(name)) {
361
+ throw new Error(`Wallet "${nickname}" not found`);
362
+ }
363
+ // Load config
364
+ const fileConfig = this.loadConfigFromFile();
365
+ // Remove from config
366
+ delete fileConfig.wallets[name];
367
+ // Update default if needed
368
+ if (fileConfig.default === name) {
369
+ delete fileConfig.default;
370
+ }
371
+ if (this.defaultWallet === name) {
372
+ this.defaultWallet = null;
373
+ this.determineDefault();
374
+ }
375
+ // Save config
376
+ this.saveConfigToFile(fileConfig);
377
+ // Remove from memory
378
+ this.wallets.delete(name);
379
+ console.log(`[WalletManager] Removed wallet "${nickname}"`);
380
+ }
381
+ /**
382
+ * Set the default wallet
383
+ */
384
+ async setDefaultWallet(nickname) {
385
+ await this.initialize();
386
+ const name = nickname.toLowerCase();
387
+ if (!this.wallets.has(name)) {
388
+ throw new Error(`Wallet "${nickname}" not found`);
389
+ }
390
+ // Load config
391
+ const fileConfig = this.loadConfigFromFile();
392
+ // Update default
393
+ fileConfig.default = name;
394
+ this.defaultWallet = name;
395
+ // Save config
396
+ this.saveConfigToFile(fileConfig);
397
+ console.log(`[WalletManager] Set default wallet to "${nickname}"`);
398
+ }
399
+ /**
400
+ * Load config from file (creates empty if doesn't exist)
401
+ */
402
+ loadConfigFromFile() {
403
+ if (!existsSync(CONFIG_PATH)) {
404
+ return { wallets: {} };
405
+ }
406
+ try {
407
+ const content = readFileSync(CONFIG_PATH, 'utf-8');
408
+ return JSON.parse(content);
409
+ }
410
+ catch {
411
+ return { wallets: {} };
412
+ }
413
+ }
414
+ /**
415
+ * Save config to file
416
+ */
417
+ saveConfigToFile(config) {
418
+ // Ensure directory exists
419
+ const dir = dirname(CONFIG_PATH);
420
+ if (!existsSync(dir)) {
421
+ mkdirSync(dir, { recursive: true });
422
+ }
423
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
424
+ console.log(`[WalletManager] Config saved to ${CONFIG_PATH}`);
425
+ }
426
+ /**
427
+ * Convert a backend to config (for saving auto-discovered wallets)
428
+ */
429
+ async backendToConfig(backend) {
430
+ const config = {
431
+ source: backend.type,
432
+ chains: [...backend.supportedChains],
433
+ };
434
+ // For evm-wallet-skill, just reference the default path
435
+ if (backend.type === 'evm-wallet-skill') {
436
+ config.path = EVM_WALLET_PATH;
437
+ }
438
+ // For env backends, we need address (privateKey should NOT be saved)
439
+ if (backend.type === 'env') {
440
+ config.address = await backend.getAddress();
441
+ // Note: We don't save privateKey to config for security
442
+ }
443
+ // For bankr, we need the API key
444
+ if (backend.type === 'bankr') {
445
+ config.apiKey = process.env.BANKR_API_KEY;
446
+ }
447
+ return config;
448
+ }
449
+ /**
450
+ * Reset the manager (for testing)
451
+ */
452
+ reset() {
453
+ this.wallets.clear();
454
+ this.defaultWallet = null;
455
+ this.initialized = false;
456
+ }
457
+ }
458
+ /**
459
+ * Get the singleton WalletManager instance
460
+ */
461
+ export function getWalletManager() {
462
+ if (!instance) {
463
+ instance = new WalletManager();
464
+ }
465
+ return instance;
466
+ }
467
+ /**
468
+ * Reset the singleton (for testing)
469
+ */
470
+ export function resetWalletManager() {
471
+ if (instance) {
472
+ instance.reset();
473
+ instance = null;
474
+ }
475
+ }
476
+ //# sourceMappingURL=walletManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletManager.js","sourceRoot":"","sources":["../../src/wallet/walletManager.ts"],"names":[],"mappings":"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"}