agentvault 1.0.1 → 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 (292) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/dist/cli/commands/approve.js +5 -5
  3. package/dist/cli/commands/archive.js +5 -5
  4. package/dist/cli/commands/backup.js +5 -5
  5. package/dist/cli/commands/cloud-backup.js +12 -12
  6. package/dist/cli/commands/decrypt.js +2 -2
  7. package/dist/cli/commands/deploy.js +1 -1
  8. package/dist/cli/commands/exec.js +2 -2
  9. package/dist/cli/commands/fetch.js +4 -4
  10. package/dist/cli/commands/inference.js +5 -5
  11. package/dist/cli/commands/init.d.ts +1 -1
  12. package/dist/cli/commands/init.js +16 -16
  13. package/dist/cli/commands/list.js +4 -4
  14. package/dist/cli/commands/package.js +2 -2
  15. package/dist/cli/commands/profile.js +1 -1
  16. package/dist/cli/commands/rebuild.js +2 -2
  17. package/dist/cli/commands/show.js +1 -1
  18. package/dist/cli/commands/status.d.ts +1 -1
  19. package/dist/cli/commands/status.js +8 -8
  20. package/dist/cli/commands/trace.js +1 -1
  21. package/dist/cli/commands/wallet-export.js +1 -1
  22. package/dist/cli/commands/wallet-sign.js +1 -1
  23. package/dist/cli/commands/wallet.d.ts +1 -1
  24. package/dist/cli/commands/wallet.js +1 -1
  25. package/dist/cli/index.d.ts +2 -2
  26. package/dist/cli/index.js +3 -3
  27. package/dist/src/archival/archive-manager.d.ts +85 -0
  28. package/dist/src/archival/archive-manager.js +294 -0
  29. package/dist/src/archival/arweave-client.d.ts +88 -0
  30. package/dist/src/archival/arweave-client.js +223 -0
  31. package/dist/src/archival/index.d.ts +8 -0
  32. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  33. package/dist/src/backup/backup.d.ts +67 -0
  34. package/dist/src/backup/backup.js +231 -0
  35. package/dist/src/backup/index.d.ts +7 -0
  36. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  37. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  38. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  39. package/dist/src/cloud-storage/index.d.ts +11 -0
  40. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  41. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  42. package/dist/src/cloud-storage/provider-detector.js +158 -0
  43. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  44. package/dist/src/cloud-storage/types.js +10 -0
  45. package/dist/src/debugging/index.d.ts +6 -0
  46. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  47. package/dist/src/debugging/logs.d.ts +32 -0
  48. package/dist/src/debugging/logs.js +158 -0
  49. package/dist/src/debugging/types.d.ts +91 -0
  50. package/dist/src/debugging/types.js +5 -0
  51. package/dist/src/deployment/deployer.d.ts +52 -0
  52. package/dist/src/deployment/deployer.js +211 -0
  53. package/dist/src/deployment/icpClient.d.ts +144 -0
  54. package/dist/src/deployment/icpClient.js +545 -0
  55. package/dist/src/deployment/index.d.ts +11 -0
  56. package/dist/src/deployment/index.js +14 -0
  57. package/dist/src/deployment/promotion.d.ts +32 -0
  58. package/dist/src/deployment/promotion.js +114 -0
  59. package/dist/src/deployment/types.d.ts +101 -0
  60. package/dist/src/deployment/types.js +5 -0
  61. package/dist/src/icp/batch.d.ts +112 -0
  62. package/dist/src/icp/batch.js +273 -0
  63. package/dist/src/icp/cycles.d.ts +29 -0
  64. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  65. package/dist/src/icp/environment.d.ts +60 -0
  66. package/dist/src/icp/environment.js +183 -0
  67. package/dist/src/icp/icpcli.d.ts +204 -0
  68. package/dist/src/icp/icpcli.js +374 -0
  69. package/dist/src/icp/icwasm.d.ts +94 -0
  70. package/dist/src/icp/icwasm.js +197 -0
  71. package/dist/src/icp/identity.d.ts +50 -0
  72. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  73. package/dist/src/icp/index.d.ts +16 -0
  74. package/dist/src/icp/index.js +20 -0
  75. package/dist/src/icp/optimization.d.ts +16 -0
  76. package/dist/src/icp/optimization.js +225 -0
  77. package/dist/src/icp/tokens.d.ts +24 -0
  78. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  79. package/dist/src/icp/tool-detector.d.ts +31 -0
  80. package/dist/src/icp/tool-detector.js +104 -0
  81. package/dist/src/icp/types.d.ts +493 -0
  82. package/dist/src/icp/types.js +7 -0
  83. package/dist/src/index.d.ts +12 -0
  84. package/dist/src/index.js +18 -0
  85. package/dist/src/inference/bittensor-client.d.ts +108 -0
  86. package/dist/src/inference/bittensor-client.js +224 -0
  87. package/dist/src/inference/index.d.ts +8 -0
  88. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  89. package/dist/src/inference/inference-manager.d.ts +76 -0
  90. package/dist/src/inference/inference-manager.js +228 -0
  91. package/dist/src/metrics/index.d.ts +7 -0
  92. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  93. package/dist/src/metrics/metrics.d.ts +39 -0
  94. package/dist/src/metrics/metrics.js +129 -0
  95. package/dist/src/monitoring/alerting.d.ts +51 -0
  96. package/dist/src/monitoring/alerting.js +169 -0
  97. package/dist/src/monitoring/health.d.ts +40 -0
  98. package/dist/src/monitoring/health.js +164 -0
  99. package/dist/src/monitoring/index.d.ts +10 -0
  100. package/dist/src/monitoring/index.js +12 -0
  101. package/dist/src/monitoring/info.d.ts +15 -0
  102. package/dist/src/monitoring/info.js +109 -0
  103. package/dist/src/monitoring/types.d.ts +93 -0
  104. package/dist/src/monitoring/types.js +7 -0
  105. package/dist/src/network/index.d.ts +5 -0
  106. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  107. package/dist/src/network/network-config.d.ts +31 -0
  108. package/dist/src/network/network-config.js +109 -0
  109. package/dist/src/packaging/compiler.d.ts +61 -0
  110. package/dist/src/packaging/compiler.js +562 -0
  111. package/dist/src/packaging/config-persistence.d.ts +46 -0
  112. package/dist/src/packaging/config-persistence.js +108 -0
  113. package/dist/src/packaging/config-schemas.d.ts +115 -0
  114. package/dist/src/packaging/config-schemas.js +43 -0
  115. package/dist/src/packaging/detector.d.ts +26 -0
  116. package/dist/src/packaging/detector.js +193 -0
  117. package/dist/src/packaging/index.d.ts +16 -0
  118. package/dist/src/packaging/index.js +22 -0
  119. package/dist/src/packaging/packager.d.ts +31 -0
  120. package/dist/src/packaging/packager.js +90 -0
  121. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  122. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  123. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  124. package/dist/src/packaging/parsers/cline.js +185 -0
  125. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  126. package/dist/src/packaging/parsers/generic.js +228 -0
  127. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  128. package/dist/src/packaging/parsers/goose.js +175 -0
  129. package/dist/src/packaging/parsers/index.d.ts +11 -0
  130. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  131. package/dist/src/packaging/serializer.d.ts +108 -0
  132. package/dist/src/packaging/serializer.js +153 -0
  133. package/dist/src/packaging/types.d.ts +131 -0
  134. package/dist/src/packaging/types.js +5 -0
  135. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  136. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  137. package/dist/src/security/index.d.ts +11 -0
  138. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  139. package/dist/src/security/multisig.d.ts +102 -0
  140. package/dist/src/security/multisig.js +283 -0
  141. package/dist/src/security/types.d.ts +207 -0
  142. package/dist/src/security/types.js +217 -0
  143. package/dist/src/security/vetkeys.d.ts +179 -0
  144. package/dist/src/security/vetkeys.js +499 -0
  145. package/dist/src/testing/index.d.ts +6 -0
  146. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  147. package/dist/src/testing/local-runner.d.ts +23 -0
  148. package/dist/src/testing/local-runner.js +226 -0
  149. package/dist/src/testing/types.d.ts +98 -0
  150. package/dist/src/testing/types.js +5 -0
  151. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  152. package/dist/src/wallet/cbor-serializer.js +282 -0
  153. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  154. package/dist/src/wallet/chain-dispatcher.js +241 -0
  155. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  156. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  157. package/dist/src/wallet/index.d.ts +16 -0
  158. package/dist/src/wallet/index.js +22 -0
  159. package/dist/src/wallet/key-derivation.d.ts +117 -0
  160. package/dist/src/wallet/key-derivation.js +325 -0
  161. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  162. package/dist/src/wallet/providers/base-provider.js +58 -0
  163. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  164. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  165. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  166. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  167. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  168. package/dist/src/wallet/providers/solana-provider.js +393 -0
  169. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  170. package/dist/src/wallet/transaction-queue.js +195 -0
  171. package/dist/src/wallet/types.d.ts +167 -0
  172. package/dist/src/wallet/types.js +5 -0
  173. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  174. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  175. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  176. package/dist/src/wallet/wallet-manager.js +451 -0
  177. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  178. package/dist/src/wallet/wallet-storage.js +274 -0
  179. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  180. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  183. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  185. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  190. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  192. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  196. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  207. package/macos-wallet-app/Makefile +47 -0
  208. package/macos-wallet-app/project.yml +40 -0
  209. package/macos-wallet-app/setup.sh +73 -0
  210. package/package.json +10 -2
  211. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  215. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  219. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  221. package/backups/test-backup.json +0 -28
  222. package/scripts/dev-dashboard.mjs +0 -84
  223. package/site/README.md +0 -63
  224. package/site/docusaurus.config.ts +0 -148
  225. package/site/package-lock.json +0 -18383
  226. package/site/package.json +0 -47
  227. package/site/sidebars.ts +0 -86
  228. package/site/static/.gitkeep +0 -0
  229. package/site/static/img/logo.svg +0 -28
  230. package/site/static/img/og-image.svg +0 -35
  231. package/src/archival/archive-manager.ts +0 -372
  232. package/src/archival/arweave-client.ts +0 -289
  233. package/src/backup/backup.ts +0 -315
  234. package/src/cloud-storage/cloud-sync.ts +0 -461
  235. package/src/cloud-storage/provider-detector.ts +0 -198
  236. package/src/debugging/logs.ts +0 -193
  237. package/src/debugging/types.ts +0 -100
  238. package/src/deployment/deployer.ts +0 -274
  239. package/src/deployment/icpClient.ts +0 -620
  240. package/src/deployment/index.ts +0 -46
  241. package/src/deployment/promotion.ts +0 -161
  242. package/src/deployment/types.ts +0 -111
  243. package/src/icp/batch.ts +0 -374
  244. package/src/icp/environment.ts +0 -215
  245. package/src/icp/icpcli.ts +0 -438
  246. package/src/icp/icwasm.ts +0 -222
  247. package/src/icp/index.ts +0 -94
  248. package/src/icp/optimization.ts +0 -242
  249. package/src/icp/tool-detector.ts +0 -110
  250. package/src/icp/types.ts +0 -574
  251. package/src/index.ts +0 -25
  252. package/src/inference/bittensor-client.ts +0 -304
  253. package/src/inference/inference-manager.ts +0 -327
  254. package/src/metrics/metrics.ts +0 -186
  255. package/src/monitoring/alerting.ts +0 -190
  256. package/src/monitoring/health.ts +0 -197
  257. package/src/monitoring/index.ts +0 -38
  258. package/src/monitoring/info.ts +0 -114
  259. package/src/monitoring/types.ts +0 -99
  260. package/src/network/network-config.ts +0 -129
  261. package/src/packaging/compiler.ts +0 -647
  262. package/src/packaging/config-persistence.ts +0 -135
  263. package/src/packaging/config-schemas.ts +0 -156
  264. package/src/packaging/detector.ts +0 -220
  265. package/src/packaging/index.ts +0 -90
  266. package/src/packaging/packager.ts +0 -118
  267. package/src/packaging/parsers/clawdbot.ts +0 -278
  268. package/src/packaging/parsers/cline.ts +0 -223
  269. package/src/packaging/parsers/generic.ts +0 -266
  270. package/src/packaging/parsers/goose.ts +0 -214
  271. package/src/packaging/serializer.ts +0 -260
  272. package/src/packaging/types.ts +0 -144
  273. package/src/packaging/wasmedge-compiler.ts +0 -406
  274. package/src/security/multisig.ts +0 -415
  275. package/src/security/types.ts +0 -416
  276. package/src/security/vetkeys.ts +0 -655
  277. package/src/testing/local-runner.ts +0 -264
  278. package/src/testing/types.ts +0 -104
  279. package/src/wallet/cbor-serializer.ts +0 -323
  280. package/src/wallet/chain-dispatcher.ts +0 -313
  281. package/src/wallet/cross-chain-aggregator.ts +0 -346
  282. package/src/wallet/index.ts +0 -76
  283. package/src/wallet/key-derivation.ts +0 -425
  284. package/src/wallet/providers/base-provider.ts +0 -154
  285. package/src/wallet/providers/cketh-provider.ts +0 -434
  286. package/src/wallet/providers/polkadot-provider.ts +0 -503
  287. package/src/wallet/providers/solana-provider.ts +0 -490
  288. package/src/wallet/transaction-queue.ts +0 -284
  289. package/src/wallet/types.ts +0 -178
  290. package/src/wallet/vetkeys-adapter.ts +0 -431
  291. package/src/wallet/wallet-manager.ts +0 -597
  292. 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