agentvault 1.0.0 → 1.0.2

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 (293) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/approve.js +5 -5
  4. package/dist/cli/commands/archive.js +5 -5
  5. package/dist/cli/commands/backup.js +5 -5
  6. package/dist/cli/commands/cloud-backup.js +12 -12
  7. package/dist/cli/commands/decrypt.js +2 -2
  8. package/dist/cli/commands/deploy.js +1 -1
  9. package/dist/cli/commands/exec.js +2 -2
  10. package/dist/cli/commands/fetch.js +4 -4
  11. package/dist/cli/commands/inference.js +5 -5
  12. package/dist/cli/commands/init.d.ts +1 -1
  13. package/dist/cli/commands/init.js +16 -16
  14. package/dist/cli/commands/list.js +4 -4
  15. package/dist/cli/commands/package.js +2 -2
  16. package/dist/cli/commands/profile.js +1 -1
  17. package/dist/cli/commands/rebuild.js +2 -2
  18. package/dist/cli/commands/show.js +1 -1
  19. package/dist/cli/commands/status.d.ts +1 -1
  20. package/dist/cli/commands/status.js +8 -8
  21. package/dist/cli/commands/trace.js +1 -1
  22. package/dist/cli/commands/wallet-export.js +1 -1
  23. package/dist/cli/commands/wallet-sign.js +1 -1
  24. package/dist/cli/commands/wallet.d.ts +1 -1
  25. package/dist/cli/commands/wallet.js +1 -1
  26. package/dist/cli/index.d.ts +2 -2
  27. package/dist/cli/index.js +3 -3
  28. package/dist/src/archival/archive-manager.d.ts +85 -0
  29. package/dist/src/archival/archive-manager.js +294 -0
  30. package/dist/src/archival/arweave-client.d.ts +88 -0
  31. package/dist/src/archival/arweave-client.js +223 -0
  32. package/dist/src/archival/index.d.ts +8 -0
  33. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  34. package/dist/src/backup/backup.d.ts +67 -0
  35. package/dist/src/backup/backup.js +231 -0
  36. package/dist/src/backup/index.d.ts +7 -0
  37. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  38. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  39. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  40. package/dist/src/cloud-storage/index.d.ts +11 -0
  41. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  42. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  43. package/dist/src/cloud-storage/provider-detector.js +158 -0
  44. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  45. package/dist/src/cloud-storage/types.js +10 -0
  46. package/dist/src/debugging/index.d.ts +6 -0
  47. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  48. package/dist/src/debugging/logs.d.ts +32 -0
  49. package/dist/src/debugging/logs.js +158 -0
  50. package/dist/src/debugging/types.d.ts +91 -0
  51. package/dist/src/debugging/types.js +5 -0
  52. package/dist/src/deployment/deployer.d.ts +52 -0
  53. package/dist/src/deployment/deployer.js +211 -0
  54. package/dist/src/deployment/icpClient.d.ts +144 -0
  55. package/dist/src/deployment/icpClient.js +545 -0
  56. package/dist/src/deployment/index.d.ts +11 -0
  57. package/dist/src/deployment/index.js +14 -0
  58. package/dist/src/deployment/promotion.d.ts +32 -0
  59. package/dist/src/deployment/promotion.js +114 -0
  60. package/dist/src/deployment/types.d.ts +101 -0
  61. package/dist/src/deployment/types.js +5 -0
  62. package/dist/src/icp/batch.d.ts +112 -0
  63. package/dist/src/icp/batch.js +273 -0
  64. package/dist/src/icp/cycles.d.ts +29 -0
  65. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  66. package/dist/src/icp/environment.d.ts +60 -0
  67. package/dist/src/icp/environment.js +183 -0
  68. package/dist/src/icp/icpcli.d.ts +204 -0
  69. package/dist/src/icp/icpcli.js +374 -0
  70. package/dist/src/icp/icwasm.d.ts +94 -0
  71. package/dist/src/icp/icwasm.js +197 -0
  72. package/dist/src/icp/identity.d.ts +50 -0
  73. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  74. package/dist/src/icp/index.d.ts +16 -0
  75. package/dist/src/icp/index.js +20 -0
  76. package/dist/src/icp/optimization.d.ts +16 -0
  77. package/dist/src/icp/optimization.js +225 -0
  78. package/dist/src/icp/tokens.d.ts +24 -0
  79. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  80. package/dist/src/icp/tool-detector.d.ts +31 -0
  81. package/dist/src/icp/tool-detector.js +104 -0
  82. package/dist/src/icp/types.d.ts +493 -0
  83. package/dist/src/icp/types.js +7 -0
  84. package/dist/src/index.d.ts +12 -0
  85. package/dist/src/index.js +18 -0
  86. package/dist/src/inference/bittensor-client.d.ts +108 -0
  87. package/dist/src/inference/bittensor-client.js +224 -0
  88. package/dist/src/inference/index.d.ts +8 -0
  89. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  90. package/dist/src/inference/inference-manager.d.ts +76 -0
  91. package/dist/src/inference/inference-manager.js +228 -0
  92. package/dist/src/metrics/index.d.ts +7 -0
  93. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  94. package/dist/src/metrics/metrics.d.ts +39 -0
  95. package/dist/src/metrics/metrics.js +129 -0
  96. package/dist/src/monitoring/alerting.d.ts +51 -0
  97. package/dist/src/monitoring/alerting.js +169 -0
  98. package/dist/src/monitoring/health.d.ts +40 -0
  99. package/dist/src/monitoring/health.js +164 -0
  100. package/dist/src/monitoring/index.d.ts +10 -0
  101. package/dist/src/monitoring/index.js +12 -0
  102. package/dist/src/monitoring/info.d.ts +15 -0
  103. package/dist/src/monitoring/info.js +109 -0
  104. package/dist/src/monitoring/types.d.ts +93 -0
  105. package/dist/src/monitoring/types.js +7 -0
  106. package/dist/src/network/index.d.ts +5 -0
  107. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  108. package/dist/src/network/network-config.d.ts +31 -0
  109. package/dist/src/network/network-config.js +109 -0
  110. package/dist/src/packaging/compiler.d.ts +61 -0
  111. package/dist/src/packaging/compiler.js +562 -0
  112. package/dist/src/packaging/config-persistence.d.ts +46 -0
  113. package/dist/src/packaging/config-persistence.js +108 -0
  114. package/dist/src/packaging/config-schemas.d.ts +115 -0
  115. package/dist/src/packaging/config-schemas.js +43 -0
  116. package/dist/src/packaging/detector.d.ts +26 -0
  117. package/dist/src/packaging/detector.js +193 -0
  118. package/dist/src/packaging/index.d.ts +16 -0
  119. package/dist/src/packaging/index.js +22 -0
  120. package/dist/src/packaging/packager.d.ts +31 -0
  121. package/dist/src/packaging/packager.js +90 -0
  122. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  123. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  124. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  125. package/dist/src/packaging/parsers/cline.js +185 -0
  126. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  127. package/dist/src/packaging/parsers/generic.js +228 -0
  128. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  129. package/dist/src/packaging/parsers/goose.js +175 -0
  130. package/dist/src/packaging/parsers/index.d.ts +11 -0
  131. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  132. package/dist/src/packaging/serializer.d.ts +108 -0
  133. package/dist/src/packaging/serializer.js +153 -0
  134. package/dist/src/packaging/types.d.ts +131 -0
  135. package/dist/src/packaging/types.js +5 -0
  136. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  137. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  138. package/dist/src/security/index.d.ts +11 -0
  139. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  140. package/dist/src/security/multisig.d.ts +102 -0
  141. package/dist/src/security/multisig.js +283 -0
  142. package/dist/src/security/types.d.ts +207 -0
  143. package/dist/src/security/types.js +217 -0
  144. package/dist/src/security/vetkeys.d.ts +179 -0
  145. package/dist/src/security/vetkeys.js +499 -0
  146. package/dist/src/testing/index.d.ts +6 -0
  147. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  148. package/dist/src/testing/local-runner.d.ts +23 -0
  149. package/dist/src/testing/local-runner.js +226 -0
  150. package/dist/src/testing/types.d.ts +98 -0
  151. package/dist/src/testing/types.js +5 -0
  152. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  153. package/dist/src/wallet/cbor-serializer.js +282 -0
  154. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  155. package/dist/src/wallet/chain-dispatcher.js +241 -0
  156. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  157. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  158. package/dist/src/wallet/index.d.ts +16 -0
  159. package/dist/src/wallet/index.js +22 -0
  160. package/dist/src/wallet/key-derivation.d.ts +117 -0
  161. package/dist/src/wallet/key-derivation.js +325 -0
  162. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  163. package/dist/src/wallet/providers/base-provider.js +58 -0
  164. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  165. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  166. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  167. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  168. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  169. package/dist/src/wallet/providers/solana-provider.js +393 -0
  170. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  171. package/dist/src/wallet/transaction-queue.js +195 -0
  172. package/dist/src/wallet/types.d.ts +167 -0
  173. package/dist/src/wallet/types.js +5 -0
  174. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  175. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  176. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  177. package/dist/src/wallet/wallet-manager.js +451 -0
  178. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  179. package/dist/src/wallet/wallet-storage.js +274 -0
  180. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  183. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  185. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  190. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  192. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  196. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  207. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  208. package/macos-wallet-app/Makefile +47 -0
  209. package/macos-wallet-app/project.yml +40 -0
  210. package/macos-wallet-app/setup.sh +73 -0
  211. package/package.json +10 -2
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  215. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  219. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  221. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  222. package/backups/test-backup.json +0 -28
  223. package/scripts/dev-dashboard.mjs +0 -84
  224. package/site/README.md +0 -63
  225. package/site/docusaurus.config.ts +0 -148
  226. package/site/package-lock.json +0 -18383
  227. package/site/package.json +0 -47
  228. package/site/sidebars.ts +0 -86
  229. package/site/static/.gitkeep +0 -0
  230. package/site/static/img/logo.svg +0 -28
  231. package/site/static/img/og-image.svg +0 -35
  232. package/src/archival/archive-manager.ts +0 -372
  233. package/src/archival/arweave-client.ts +0 -289
  234. package/src/backup/backup.ts +0 -315
  235. package/src/cloud-storage/cloud-sync.ts +0 -461
  236. package/src/cloud-storage/provider-detector.ts +0 -198
  237. package/src/debugging/logs.ts +0 -193
  238. package/src/debugging/types.ts +0 -100
  239. package/src/deployment/deployer.ts +0 -274
  240. package/src/deployment/icpClient.ts +0 -620
  241. package/src/deployment/index.ts +0 -46
  242. package/src/deployment/promotion.ts +0 -161
  243. package/src/deployment/types.ts +0 -111
  244. package/src/icp/batch.ts +0 -374
  245. package/src/icp/environment.ts +0 -215
  246. package/src/icp/icpcli.ts +0 -438
  247. package/src/icp/icwasm.ts +0 -222
  248. package/src/icp/index.ts +0 -94
  249. package/src/icp/optimization.ts +0 -242
  250. package/src/icp/tool-detector.ts +0 -110
  251. package/src/icp/types.ts +0 -574
  252. package/src/index.ts +0 -25
  253. package/src/inference/bittensor-client.ts +0 -304
  254. package/src/inference/inference-manager.ts +0 -327
  255. package/src/metrics/metrics.ts +0 -186
  256. package/src/monitoring/alerting.ts +0 -190
  257. package/src/monitoring/health.ts +0 -197
  258. package/src/monitoring/index.ts +0 -38
  259. package/src/monitoring/info.ts +0 -114
  260. package/src/monitoring/types.ts +0 -99
  261. package/src/network/network-config.ts +0 -129
  262. package/src/packaging/compiler.ts +0 -647
  263. package/src/packaging/config-persistence.ts +0 -135
  264. package/src/packaging/config-schemas.ts +0 -156
  265. package/src/packaging/detector.ts +0 -220
  266. package/src/packaging/index.ts +0 -90
  267. package/src/packaging/packager.ts +0 -118
  268. package/src/packaging/parsers/clawdbot.ts +0 -278
  269. package/src/packaging/parsers/cline.ts +0 -223
  270. package/src/packaging/parsers/generic.ts +0 -266
  271. package/src/packaging/parsers/goose.ts +0 -214
  272. package/src/packaging/serializer.ts +0 -260
  273. package/src/packaging/types.ts +0 -144
  274. package/src/packaging/wasmedge-compiler.ts +0 -406
  275. package/src/security/multisig.ts +0 -415
  276. package/src/security/types.ts +0 -416
  277. package/src/security/vetkeys.ts +0 -655
  278. package/src/testing/local-runner.ts +0 -264
  279. package/src/testing/types.ts +0 -104
  280. package/src/wallet/cbor-serializer.ts +0 -323
  281. package/src/wallet/chain-dispatcher.ts +0 -313
  282. package/src/wallet/cross-chain-aggregator.ts +0 -346
  283. package/src/wallet/index.ts +0 -76
  284. package/src/wallet/key-derivation.ts +0 -425
  285. package/src/wallet/providers/base-provider.ts +0 -154
  286. package/src/wallet/providers/cketh-provider.ts +0 -434
  287. package/src/wallet/providers/polkadot-provider.ts +0 -503
  288. package/src/wallet/providers/solana-provider.ts +0 -490
  289. package/src/wallet/transaction-queue.ts +0 -284
  290. package/src/wallet/types.ts +0 -178
  291. package/src/wallet/vetkeys-adapter.ts +0 -431
  292. package/src/wallet/wallet-manager.ts +0 -597
  293. package/src/wallet/wallet-storage.ts +0 -380
@@ -0,0 +1,343 @@
1
+ /**
2
+ * ckETH Wallet Provider
3
+ *
4
+ * Provider for Ethereum-compatible wallets on ICP ckETH.
5
+ * Supports balance queries, transactions, and signing.
6
+ */
7
+ import { ethers } from 'ethers';
8
+ import { BaseWalletProvider } from './base-provider.js';
9
+ /**
10
+ * Environment variable names for RPC configuration
11
+ */
12
+ const ENV_RPC_URL = 'ETHEREUM_RPC_URL';
13
+ const ENV_SEPOLIA_RPC_URL = 'SEPOLIA_RPC_URL';
14
+ const ENV_INFURA_KEY = 'INFURA_API_KEY';
15
+ /**
16
+ * Public RPC endpoints (rate-limited, for fallback only)
17
+ */
18
+ const PUBLIC_RPC_URLS = {
19
+ mainnet: [
20
+ 'https://eth.llamarpc.com',
21
+ 'https://rpc.ankr.com/eth',
22
+ 'https://ethereum.publicnode.com',
23
+ ],
24
+ sepolia: [
25
+ 'https://rpc.sepolia.org',
26
+ 'https://ethereum-sepolia.publicnode.com',
27
+ 'https://rpc2.sepolia.org',
28
+ ],
29
+ };
30
+ /**
31
+ * Environment variable names for Etherscan configuration
32
+ */
33
+ const ENV_ETHERSCAN_API_KEY = 'ETHERSCAN_API_KEY';
34
+ /**
35
+ * ckETH wallet provider
36
+ */
37
+ export class CkEthProvider extends BaseWalletProvider {
38
+ provider = null;
39
+ chainId;
40
+ etherscanApiKey;
41
+ constructor(config) {
42
+ super(config);
43
+ this.chainId = config.chainId ?? 1;
44
+ this.etherscanApiKey = config.etherscanApiKey;
45
+ }
46
+ /**
47
+ * Resolve the RPC URL to use for connections
48
+ *
49
+ * Priority:
50
+ * 1. Explicitly configured URL
51
+ * 2. Environment variable (ETHEREUM_RPC_URL or SEPOLIA_RPC_URL)
52
+ * 3. Infura with API key from environment
53
+ * 4. Public RPC endpoints (fallback, rate-limited)
54
+ *
55
+ * @returns RPC URL
56
+ */
57
+ resolveRpcUrl() {
58
+ const configUrl = super.getRpcUrl();
59
+ if (configUrl && !configUrl.includes('YOUR-API-KEY')) {
60
+ return configUrl;
61
+ }
62
+ const isTestnet = this.chainId !== 1;
63
+ const envVar = isTestnet ? ENV_SEPOLIA_RPC_URL : ENV_RPC_URL;
64
+ const envUrl = process.env[envVar];
65
+ if (envUrl) {
66
+ return envUrl;
67
+ }
68
+ const infuraKey = process.env[ENV_INFURA_KEY];
69
+ if (infuraKey) {
70
+ return isTestnet
71
+ ? `https://sepolia.infura.io/v3/${infuraKey}`
72
+ : `https://mainnet.infura.io/v3/${infuraKey}`;
73
+ }
74
+ const publicUrls = isTestnet ? PUBLIC_RPC_URLS.sepolia : PUBLIC_RPC_URLS.mainnet;
75
+ const publicUrl = publicUrls[0];
76
+ if (!publicUrl) {
77
+ throw new Error(`No RPC URL configured. Set ${envVar} environment variable or provide rpcUrl in config. ` +
78
+ `Example: export ${envVar}=https://eth.example.com/v3/your-api-key`);
79
+ }
80
+ console.warn(`Warning: Using public RPC endpoint (${publicUrl}). ` +
81
+ `For production, set ${envVar} environment variable for better reliability.`);
82
+ return publicUrl;
83
+ }
84
+ /**
85
+ * Connect to Ethereum network via RPC
86
+ */
87
+ async connect() {
88
+ try {
89
+ // Create provider
90
+ this.provider = new ethers.JsonRpcProvider(this.resolveRpcUrl());
91
+ // Verify connection
92
+ const network = await this.provider.getNetwork();
93
+ this.chainId = Number(network.chainId);
94
+ this.connected = true;
95
+ }
96
+ catch (error) {
97
+ const message = error instanceof Error ? error.message : 'Unknown error';
98
+ throw new Error(`Failed to connect to ckETH network: ${message}`);
99
+ }
100
+ }
101
+ /**
102
+ * Disconnect from network
103
+ */
104
+ async disconnect() {
105
+ this.provider = null;
106
+ this.connected = false;
107
+ }
108
+ /**
109
+ * Get wallet balance
110
+ */
111
+ async getBalance(address) {
112
+ if (!this.provider || !this.connected) {
113
+ throw new Error('Provider not connected');
114
+ }
115
+ try {
116
+ const balance = await this.provider.getBalance(address);
117
+ const etherBalance = ethers.formatEther(balance);
118
+ return {
119
+ amount: etherBalance,
120
+ denomination: 'ETH',
121
+ chain: this.getChain(),
122
+ address,
123
+ blockNumber: await this.provider.getBlockNumber(),
124
+ };
125
+ }
126
+ catch (error) {
127
+ const message = error instanceof Error ? error.message : 'Unknown error';
128
+ throw new Error(`Failed to get balance: ${message}`);
129
+ }
130
+ }
131
+ /**
132
+ * Send transaction
133
+ */
134
+ async sendTransaction(from, request) {
135
+ if (!this.provider || !this.connected) {
136
+ throw new Error('Provider not connected');
137
+ }
138
+ try {
139
+ const tx = await this.populateTransaction(from, request);
140
+ const signedTx = await this.signTransaction(tx, from);
141
+ // Send transaction
142
+ const txResponse = await this.provider.broadcastTransaction(signedTx.signedTx);
143
+ return {
144
+ hash: txResponse.hash,
145
+ from,
146
+ to: request.to,
147
+ amount: request.amount,
148
+ chain: this.getChain(),
149
+ timestamp: Date.now(),
150
+ status: 'pending',
151
+ fee: tx.gasPrice ? ethers.formatEther(BigInt(tx.gasPrice) * BigInt(tx.gasLimit || 21000)) : undefined,
152
+ };
153
+ }
154
+ catch (error) {
155
+ const message = error instanceof Error ? error.message : 'Unknown error';
156
+ throw new Error(`Failed to send transaction: ${message}`);
157
+ }
158
+ }
159
+ /**
160
+ * Sign transaction
161
+ */
162
+ async signTransaction(tx, privateKey) {
163
+ try {
164
+ const wallet = new ethers.Wallet(privateKey);
165
+ const signedTxSerialized = await wallet.signTransaction(tx);
166
+ return {
167
+ txHash: tx.hash || '0x0',
168
+ signedTx: signedTxSerialized,
169
+ signature: '0x',
170
+ request: tx,
171
+ };
172
+ }
173
+ catch (error) {
174
+ const message = error instanceof Error ? error.message : 'Unknown error';
175
+ throw new Error(`Failed to sign transaction: ${message}`);
176
+ }
177
+ }
178
+ /**
179
+ * Get transaction history
180
+ *
181
+ * Uses Etherscan API to fetch transaction history.
182
+ * Requires ETHERSCAN_API_KEY environment variable or etherscanApiKey in config.
183
+ *
184
+ * @param address - Wallet address to get history for
185
+ * @returns Array of transactions
186
+ */
187
+ async getTransactionHistory(address) {
188
+ const apiKey = this.etherscanApiKey || process.env[ENV_ETHERSCAN_API_KEY];
189
+ if (!apiKey) {
190
+ console.warn('Etherscan API key not configured. Set ETHERSCAN_API_KEY environment variable ' +
191
+ 'or provide etherscanApiKey in config for transaction history.');
192
+ return [];
193
+ }
194
+ try {
195
+ const isTestnet = this.chainId !== 1;
196
+ const baseUrl = isTestnet
197
+ ? 'https://api-sepolia.etherscan.io/api'
198
+ : 'https://api.etherscan.io/api';
199
+ const url = `${baseUrl}?module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&sort=desc&apikey=${apiKey}`;
200
+ const response = await fetch(url);
201
+ const data = await response.json();
202
+ if (data.status !== '1' || !Array.isArray(data.result)) {
203
+ console.warn('Etherscan API returned no results or error');
204
+ return [];
205
+ }
206
+ return data.result.slice(0, 50).map((tx) => ({
207
+ hash: tx.hash,
208
+ from: tx.from,
209
+ to: tx.to,
210
+ amount: ethers.formatEther(BigInt(tx.value)),
211
+ chain: this.getChain(),
212
+ timestamp: parseInt(tx.timeStamp, 10) * 1000,
213
+ status: tx.isError === '1' ? 'failed' : 'confirmed',
214
+ fee: ethers.formatEther(BigInt(tx.gasUsed) * BigInt(tx.gasPrice)),
215
+ }));
216
+ }
217
+ catch (error) {
218
+ const message = error instanceof Error ? error.message : 'Unknown error';
219
+ console.warn(`Failed to get transaction history: ${message}`);
220
+ return [];
221
+ }
222
+ }
223
+ /**
224
+ * Validate Ethereum address
225
+ */
226
+ validateAddress(address) {
227
+ try {
228
+ return ethers.isAddress(address);
229
+ }
230
+ catch {
231
+ return false;
232
+ }
233
+ }
234
+ /**
235
+ * Estimate transaction fee
236
+ */
237
+ async estimateFee(request) {
238
+ if (!this.provider || !this.connected) {
239
+ throw new Error('Provider not connected');
240
+ }
241
+ try {
242
+ const feeData = await this.provider.getFeeData();
243
+ const gasLimit = await this.provider.estimateGas({
244
+ to: request.to,
245
+ value: ethers.parseEther(request.amount),
246
+ });
247
+ const gasPrice = feeData.gasPrice || feeData.maxFeePerGas || BigInt(0);
248
+ const fee = gasPrice * gasLimit;
249
+ return ethers.formatEther(fee);
250
+ }
251
+ catch (error) {
252
+ const message = error instanceof Error ? error.message : 'Unknown error';
253
+ throw new Error(`Failed to estimate fee: ${message}`);
254
+ }
255
+ }
256
+ /**
257
+ * Get current block number
258
+ */
259
+ async getBlockNumber() {
260
+ if (!this.provider || !this.connected) {
261
+ throw new Error('Provider not connected');
262
+ }
263
+ return await this.provider.getBlockNumber();
264
+ }
265
+ /**
266
+ * Get transaction by hash
267
+ */
268
+ async getTransaction(txHash) {
269
+ if (!this.provider || !this.connected) {
270
+ throw new Error('Provider not connected');
271
+ }
272
+ try {
273
+ const tx = await this.provider.getTransaction(txHash);
274
+ if (!tx) {
275
+ return null;
276
+ }
277
+ const receipt = await this.provider.getTransactionReceipt(txHash);
278
+ return {
279
+ hash: tx.hash,
280
+ from: tx.from,
281
+ to: tx.to || '',
282
+ amount: ethers.formatEther(tx.value),
283
+ chain: this.getChain(),
284
+ timestamp: (await this.provider.getBlock(tx.blockNumber || 0))?.timestamp || 0,
285
+ status: receipt ? (receipt.status ? 'confirmed' : 'failed') : 'pending',
286
+ fee: tx.gasPrice ? ethers.formatEther(BigInt(tx.gasPrice) * BigInt(tx.gasLimit || 21000)) : undefined,
287
+ };
288
+ }
289
+ catch (error) {
290
+ const message = error instanceof Error ? error.message : 'Unknown error';
291
+ throw new Error(`Failed to get transaction: ${message}`);
292
+ }
293
+ }
294
+ /**
295
+ * Create transaction from request
296
+ */
297
+ async populateTransaction(from, request) {
298
+ const tx = {
299
+ to: request.to,
300
+ value: ethers.parseEther(request.amount),
301
+ from,
302
+ gasLimit: request.gasLimit ? BigInt(parseInt(request.gasLimit)) : undefined,
303
+ gasPrice: request.gasPrice ? BigInt(parseInt(request.gasPrice)) : undefined,
304
+ };
305
+ return tx;
306
+ }
307
+ /**
308
+ * Get default RPC URL for chain
309
+ *
310
+ * @param isTestnet - Whether to get testnet URL
311
+ * @returns RPC URL from environment or public endpoint
312
+ * @throws Error if no RPC URL is configured
313
+ */
314
+ static getDefaultRpcUrl(isTestnet = false) {
315
+ const envVar = isTestnet ? ENV_SEPOLIA_RPC_URL : ENV_RPC_URL;
316
+ const envUrl = process.env[envVar];
317
+ if (envUrl) {
318
+ return envUrl;
319
+ }
320
+ const infuraKey = process.env[ENV_INFURA_KEY];
321
+ if (infuraKey) {
322
+ return isTestnet
323
+ ? `https://sepolia.infura.io/v3/${infuraKey}`
324
+ : `https://mainnet.infura.io/v3/${infuraKey}`;
325
+ }
326
+ const publicUrls = isTestnet ? PUBLIC_RPC_URLS.sepolia : PUBLIC_RPC_URLS.mainnet;
327
+ const publicUrl = publicUrls[0];
328
+ if (publicUrl) {
329
+ console.warn(`Warning: Using public RPC endpoint (${publicUrl}). ` +
330
+ `For production, set ${envVar} environment variable.`);
331
+ return publicUrl;
332
+ }
333
+ throw new Error(`No RPC URL configured. Set ${envVar} environment variable. ` +
334
+ `Example: export ${envVar}=https://mainnet.infura.io/v3/your-api-key`);
335
+ }
336
+ /**
337
+ * Get chain ID
338
+ */
339
+ getChainId() {
340
+ return this.chainId;
341
+ }
342
+ }
343
+ //# sourceMappingURL=cketh-provider.js.map
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Polkadot Wallet Provider (Full Implementation)
3
+ *
4
+ * Complete provider for Polkadot wallet operations.
5
+ * Integrates with @polkadot/util-crypto for key derivation.
6
+ * Uses @polkadot/api for real RPC network interactions.
7
+ */
8
+ import type { Balance, Transaction, TransactionRequest, SignedTransaction, ProviderConfig } from '../types.js';
9
+ import { BaseWalletProvider } from './base-provider.js';
10
+ /**
11
+ * Polkadot provider configuration
12
+ */
13
+ interface PolkadotConfig extends ProviderConfig {
14
+ /** Polkadot JSON-RPC endpoint (WS or HTTP) */
15
+ rpcUrl: string;
16
+ /** Chain type (mainnet, testnet, dev) */
17
+ network?: 'mainnet' | 'testnet' | 'dev';
18
+ /** Chain type (polkadot, kusama, westend, astar) */
19
+ chainType?: 'polkadot' | 'kusama' | 'westend' | 'astar';
20
+ /** SS58 prefix for address encoding */
21
+ ss58Format?: number;
22
+ }
23
+ /**
24
+ * Polkadot wallet provider
25
+ */
26
+ export declare class PolkadotProvider extends BaseWalletProvider {
27
+ private keyringPair;
28
+ private api;
29
+ private ss58Format;
30
+ private chainType;
31
+ constructor(config: PolkadotConfig);
32
+ private getApi;
33
+ private getSystemQuery;
34
+ private getBalancesTx;
35
+ private getRpcChain;
36
+ /**
37
+ * Connect to Polkadot network via RPC
38
+ */
39
+ connect(): Promise<void>;
40
+ /**
41
+ * Disconnect from Polkadot network
42
+ */
43
+ disconnect(): Promise<void>;
44
+ /**
45
+ * Get wallet balance
46
+ */
47
+ getBalance(address: string): Promise<Balance>;
48
+ /**
49
+ * Send transaction
50
+ */
51
+ sendTransaction(from: string, request: TransactionRequest): Promise<Transaction>;
52
+ /**
53
+ * Sign transaction
54
+ */
55
+ signTransaction(tx: any, privateKey: string): Promise<SignedTransaction>;
56
+ /**
57
+ * Get transaction history
58
+ */
59
+ getTransactionHistory(address: string): Promise<Transaction[]>;
60
+ /**
61
+ * Validate Polkadot address (SS58 format)
62
+ */
63
+ validateAddress(address: string): boolean;
64
+ /**
65
+ * Estimate transaction fee
66
+ */
67
+ estimateFee(request: TransactionRequest): Promise<string>;
68
+ /**
69
+ * Get current block number
70
+ */
71
+ getBlockNumber(): Promise<number>;
72
+ /**
73
+ * Get transaction by hash
74
+ */
75
+ getTransaction(txHash: string): Promise<Transaction | null>;
76
+ /**
77
+ * Initialize keypair from wallet data
78
+ */
79
+ initKeypair(mnemonic: string, derivationPath?: string): Promise<void>;
80
+ /**
81
+ * Initialize from private key
82
+ */
83
+ initFromPrivateKey(privateKey: string): Promise<void>;
84
+ /**
85
+ * Create KeyringPair from private key
86
+ */
87
+ private createKeyringPair;
88
+ /**
89
+ * Get address from keypair
90
+ */
91
+ getAddress(): string | null;
92
+ /**
93
+ * Get public key
94
+ */
95
+ getPublicKey(): string | null;
96
+ /**
97
+ * Parse DOT amount (convert from string to Plancks)
98
+ */
99
+ private parseDotAmount;
100
+ /**
101
+ * Format Plancks to DOT
102
+ */
103
+ private formatPlancks;
104
+ /**
105
+ * Create SR25519 signature for transaction
106
+ */
107
+ createSignature(payload: Uint8Array, privateKeyHex: string): Promise<Uint8Array>;
108
+ /**
109
+ * Get default RPC URL for chain type
110
+ * Checks environment variables first, then falls back to public RPC endpoints
111
+ */
112
+ private getDefaultRpcUrl;
113
+ }
114
+ export {};
115
+ //# sourceMappingURL=polkadot-provider.d.ts.map