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,407 @@
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 { BaseWalletProvider } from './base-provider.js';
9
+ import { sr25519PairFromSeed, sr25519Sign, checkAddress, cryptoWaitReady, } from '@polkadot/util-crypto';
10
+ import { u8aToHex, hexToU8a, } from '@polkadot/util';
11
+ import { ApiPromise, WsProvider } from '@polkadot/api';
12
+ import { Keyring } from '@polkadot/keyring';
13
+ /**
14
+ * Polkadot wallet provider
15
+ */
16
+ export class PolkadotProvider extends BaseWalletProvider {
17
+ keyringPair = null;
18
+ api = null;
19
+ ss58Format;
20
+ chainType;
21
+ constructor(config) {
22
+ super(config);
23
+ this.ss58Format = config.ss58Format || 0;
24
+ this.chainType = config.chainType || 'polkadot';
25
+ }
26
+ getApi() {
27
+ if (!this.api) {
28
+ throw new Error('API not connected');
29
+ }
30
+ return this.api;
31
+ }
32
+ getSystemQuery() {
33
+ return this.getApi().query.system;
34
+ }
35
+ getBalancesTx() {
36
+ return this.getApi().tx.balances;
37
+ }
38
+ getRpcChain() {
39
+ return this.getApi().rpc.chain;
40
+ }
41
+ /**
42
+ * Connect to Polkadot network via RPC
43
+ */
44
+ async connect() {
45
+ try {
46
+ await cryptoWaitReady();
47
+ const rpcUrl = this.config.rpcUrl || this.getDefaultRpcUrl();
48
+ const provider = new WsProvider(rpcUrl);
49
+ this.api = await ApiPromise.create({ provider });
50
+ await this.api.isReady;
51
+ this.connected = true;
52
+ console.log(`Connected to ${this.chainType} network via ${rpcUrl}`);
53
+ }
54
+ catch (error) {
55
+ const message = error instanceof Error ? error.message : 'Unknown error';
56
+ throw new Error(`Failed to connect to Polkadot network: ${message}`);
57
+ }
58
+ }
59
+ /**
60
+ * Disconnect from Polkadot network
61
+ */
62
+ async disconnect() {
63
+ if (this.api) {
64
+ await this.api.disconnect();
65
+ this.api = null;
66
+ }
67
+ this.keyringPair = null;
68
+ this.connected = false;
69
+ }
70
+ /**
71
+ * Get wallet balance
72
+ */
73
+ async getBalance(address) {
74
+ if (!this.connected || !this.api) {
75
+ throw new Error('Provider not connected');
76
+ }
77
+ try {
78
+ const accountInfo = await this.getSystemQuery().account(address);
79
+ const data = accountInfo.toJSON();
80
+ const freeBalance = (data?.data?.free ?? '0');
81
+ const reserved = (data?.data?.reserved ?? '0');
82
+ const totalBalance = (BigInt(freeBalance) + BigInt(reserved)).toString();
83
+ const balanceInDot = parseFloat(totalBalance) / 10_000_000_000;
84
+ const blockNumber = await this.getSystemQuery().number();
85
+ return {
86
+ amount: balanceInDot.toString(),
87
+ denomination: 'DOT',
88
+ chain: this.chainType,
89
+ address,
90
+ blockNumber: Number(blockNumber),
91
+ };
92
+ }
93
+ catch (error) {
94
+ const message = error instanceof Error ? error.message : 'Unknown error';
95
+ throw new Error(`Failed to get balance: ${message}`);
96
+ }
97
+ }
98
+ /**
99
+ * Send transaction
100
+ */
101
+ async sendTransaction(from, request) {
102
+ if (!this.connected || !this.api || !this.keyringPair) {
103
+ throw new Error('Provider not connected or no wallet loaded');
104
+ }
105
+ try {
106
+ const transferAmount = this.parseDotAmount(request.amount);
107
+ const tx = this.getBalancesTx().transfer(request.to, transferAmount);
108
+ const hash = await tx.signAndSend(this.keyringPair);
109
+ const fee = await this.estimateFee(request);
110
+ return {
111
+ hash: hash.toString(),
112
+ from,
113
+ to: request.to,
114
+ amount: request.amount,
115
+ chain: this.chainType,
116
+ timestamp: Date.now(),
117
+ status: 'pending',
118
+ fee,
119
+ data: { memo: request.memo },
120
+ };
121
+ }
122
+ catch (error) {
123
+ const message = error instanceof Error ? error.message : 'Unknown error';
124
+ throw new Error(`Failed to send transaction: ${message}`);
125
+ }
126
+ }
127
+ /**
128
+ * Sign transaction
129
+ */
130
+ async signTransaction(tx, privateKey) {
131
+ if (!this.api) {
132
+ throw new Error('Provider not connected');
133
+ }
134
+ try {
135
+ const keypair = this.createKeyringPair(privateKey);
136
+ const transferAmount = this.parseDotAmount(tx.amount);
137
+ const unsignedTx = this.getBalancesTx().transfer(tx.to, transferAmount);
138
+ const signedTx = await unsignedTx.signAsync(keypair);
139
+ return {
140
+ txHash: signedTx.hash.toString(),
141
+ signedTx: signedTx.toHex(),
142
+ signature: u8aToHex(signedTx.signature),
143
+ request: tx,
144
+ };
145
+ }
146
+ catch (error) {
147
+ const message = error instanceof Error ? error.message : 'Unknown error';
148
+ throw new Error(`Failed to sign transaction: ${message}`);
149
+ }
150
+ }
151
+ /**
152
+ * Get transaction history
153
+ */
154
+ async getTransactionHistory(address) {
155
+ if (!this.connected || !this.api) {
156
+ throw new Error('Provider not connected');
157
+ }
158
+ try {
159
+ const transactions = [];
160
+ const blockNumber = await this.getSystemQuery().number();
161
+ const latestBlocks = Math.min(Number(blockNumber), 100);
162
+ for (let i = 0; i < latestBlocks; i++) {
163
+ const blockHash = await this.getRpcChain().getBlockHash(Number(blockNumber) - i);
164
+ const events = await this.getSystemQuery().events.at(blockHash);
165
+ const eventRecords = events.toHuman();
166
+ for (const event of eventRecords) {
167
+ if (event.event?.section === 'balances' && event.event?.method === 'Transfer') {
168
+ const eventData = event.event.data;
169
+ const [from, to, amount] = eventData;
170
+ if (from.toString() === address || to.toString() === address) {
171
+ transactions.push({
172
+ hash: blockHash.toString(),
173
+ from: from.toString(),
174
+ to: to.toString(),
175
+ amount: this.formatPlancks(amount.toString()),
176
+ chain: this.chainType,
177
+ timestamp: Date.now() - (i * 6000),
178
+ status: 'confirmed',
179
+ fee: '0',
180
+ });
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return transactions.slice(0, 20);
186
+ }
187
+ catch (error) {
188
+ const message = error instanceof Error ? error.message : 'Unknown error';
189
+ console.warn(`Failed to get transaction history: ${message}`);
190
+ return [];
191
+ }
192
+ }
193
+ /**
194
+ * Validate Polkadot address (SS58 format)
195
+ */
196
+ validateAddress(address) {
197
+ try {
198
+ const [isValid] = checkAddress(address, this.ss58Format);
199
+ return isValid;
200
+ }
201
+ catch {
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Estimate transaction fee
207
+ */
208
+ async estimateFee(request) {
209
+ if (!this.connected || !this.api || !this.keyringPair) {
210
+ return '0.01';
211
+ }
212
+ try {
213
+ const transferAmount = this.parseDotAmount(request.amount);
214
+ const tx = this.getBalancesTx().transfer(request.to, transferAmount);
215
+ const info = await tx.paymentInfo(this.keyringPair);
216
+ const partialFee = info.partialFee.toString();
217
+ const feeInDot = parseFloat(partialFee) / 10_000_000_000;
218
+ return feeInDot.toFixed(6);
219
+ }
220
+ catch (_error) {
221
+ return '0.01';
222
+ }
223
+ }
224
+ /**
225
+ * Get current block number
226
+ */
227
+ async getBlockNumber() {
228
+ if (!this.connected || !this.api) {
229
+ throw new Error('Provider not connected');
230
+ }
231
+ try {
232
+ const blockNumber = await this.getSystemQuery().number();
233
+ return Number(blockNumber);
234
+ }
235
+ catch (error) {
236
+ const message = error instanceof Error ? error.message : 'Unknown error';
237
+ throw new Error(`Failed to get block number: ${message}`);
238
+ }
239
+ }
240
+ /**
241
+ * Get transaction by hash
242
+ */
243
+ async getTransaction(txHash) {
244
+ if (!this.connected || !this.api) {
245
+ throw new Error('Provider not connected');
246
+ }
247
+ try {
248
+ const blockHash = await this.getRpcChain().getBlockHash();
249
+ const events = await this.getSystemQuery().events.at(blockHash || undefined);
250
+ const eventRecords = events.toHuman();
251
+ let from = '';
252
+ let to = '';
253
+ let amount = '0';
254
+ let found = false;
255
+ for (const event of eventRecords) {
256
+ if (event.event?.section === 'balances' && event.event?.method === 'Transfer' && event.event?.data) {
257
+ const eventData = event.event?.data;
258
+ [from, to, amount] = eventData;
259
+ found = true;
260
+ }
261
+ if (event.event?.section === 'system' && event.event?.method === 'ExtrinsicSuccess') {
262
+ break;
263
+ }
264
+ }
265
+ if (found && (from || to)) {
266
+ return {
267
+ hash: txHash,
268
+ from: from.toString(),
269
+ to: to.toString(),
270
+ amount: this.formatPlancks(amount.toString()),
271
+ chain: this.chainType,
272
+ timestamp: Date.now(),
273
+ status: 'confirmed',
274
+ fee: '0',
275
+ };
276
+ }
277
+ return null;
278
+ }
279
+ catch (error) {
280
+ const message = error instanceof Error ? error.message : 'Unknown error';
281
+ throw new Error(`Failed to get transaction: ${message}`);
282
+ }
283
+ }
284
+ /**
285
+ * Initialize keypair from wallet data
286
+ */
287
+ async initKeypair(mnemonic, derivationPath) {
288
+ try {
289
+ await cryptoWaitReady();
290
+ const keyring = new Keyring({ type: 'sr25519', ss58Format: this.ss58Format });
291
+ const path = derivationPath || '//hard//stash';
292
+ this.keyringPair = keyring.addFromMnemonic(mnemonic, undefined, 'sr25519');
293
+ if (derivationPath && derivationPath !== '//hard//stash') {
294
+ const derived = keyring.addFromUri(path, undefined, 'sr25519');
295
+ this.keyringPair = derived;
296
+ }
297
+ console.log('Polkadot keypair initialized for derivation:', path);
298
+ console.log('Address:', this.getAddress());
299
+ }
300
+ catch (error) {
301
+ const message = error instanceof Error ? error.message : 'Unknown error';
302
+ throw new Error(`Failed to initialize Polkadot keypair: ${message}`);
303
+ }
304
+ }
305
+ /**
306
+ * Initialize from private key
307
+ */
308
+ async initFromPrivateKey(privateKey) {
309
+ try {
310
+ this.keyringPair = this.createKeyringPair(privateKey);
311
+ console.log('Polkadot keypair initialized from private key');
312
+ console.log('Address:', this.getAddress());
313
+ }
314
+ catch (error) {
315
+ const message = error instanceof Error ? error.message : 'Unknown error';
316
+ throw new Error(`Failed to initialize Polkadot keypair from private key: ${message}`);
317
+ }
318
+ }
319
+ /**
320
+ * Create KeyringPair from private key
321
+ */
322
+ createKeyringPair(privateKeyHex) {
323
+ const keyring = new Keyring({ type: 'sr25519', ss58Format: this.ss58Format });
324
+ const privateKeyBytes = hexToU8a(privateKeyHex);
325
+ const pair = keyring.addFromSeed(privateKeyBytes);
326
+ return pair;
327
+ }
328
+ /**
329
+ * Get address from keypair
330
+ */
331
+ getAddress() {
332
+ if (!this.keyringPair) {
333
+ return null;
334
+ }
335
+ return this.keyringPair.address;
336
+ }
337
+ /**
338
+ * Get public key
339
+ */
340
+ getPublicKey() {
341
+ if (!this.keyringPair) {
342
+ return null;
343
+ }
344
+ return u8aToHex(this.keyringPair.publicKey);
345
+ }
346
+ /**
347
+ * Parse DOT amount (convert from string to Plancks)
348
+ */
349
+ parseDotAmount(amountStr) {
350
+ try {
351
+ const cleanAmount = amountStr.replace(/,/g, '').trim();
352
+ const amount = parseFloat(cleanAmount);
353
+ const plancks = Math.floor(amount * 10_000_000_000);
354
+ return BigInt(plancks);
355
+ }
356
+ catch (_error) {
357
+ return BigInt(0);
358
+ }
359
+ }
360
+ /**
361
+ * Format Plancks to DOT
362
+ */
363
+ formatPlancks(plancks) {
364
+ try {
365
+ const amount = parseFloat(plancks) / 10_000_000_000;
366
+ return amount.toFixed(6);
367
+ }
368
+ catch (_error) {
369
+ return '0';
370
+ }
371
+ }
372
+ /**
373
+ * Create SR25519 signature for transaction
374
+ */
375
+ async createSignature(payload, privateKeyHex) {
376
+ try {
377
+ const privateKeyBytes = hexToU8a(privateKeyHex);
378
+ const keypair = sr25519PairFromSeed(privateKeyBytes);
379
+ const signature = sr25519Sign(payload, { publicKey: keypair.publicKey, secretKey: keypair.secretKey });
380
+ return signature;
381
+ }
382
+ catch (error) {
383
+ const msg = error instanceof Error ? error.message : 'Unknown error';
384
+ throw new Error(`Failed to create Polkadot signature: ${msg}`);
385
+ }
386
+ }
387
+ /**
388
+ * Get default RPC URL for chain type
389
+ * Checks environment variables first, then falls back to public RPC endpoints
390
+ */
391
+ getDefaultRpcUrl() {
392
+ const envUrls = {
393
+ polkadot: process.env.POLKADOT_RPC_URL,
394
+ kusama: process.env.KUSAMA_RPC_URL,
395
+ westend: process.env.WESTEND_RPC_URL,
396
+ astar: process.env.ASTAR_RPC_URL,
397
+ };
398
+ const publicUrls = {
399
+ polkadot: 'wss://rpc.polkadot.io',
400
+ kusama: 'wss://kusama-rpc.polkadot.io',
401
+ westend: 'wss://westend-rpc.polkadot.io',
402
+ astar: 'wss://rpc.astar.network',
403
+ };
404
+ return envUrls[this.chainType] || publicUrls[this.chainType] || publicUrls.polkadot;
405
+ }
406
+ }
407
+ //# sourceMappingURL=polkadot-provider.js.map
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Solana Wallet Provider (Full Implementation)
3
+ *
4
+ * Complete provider for Solana wallet operations.
5
+ * Integrates with @solana/web3.js for key derivation.
6
+ * Uses Connection 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
+ import { type Commitment } from '@solana/web3.js';
11
+ /**
12
+ * Solana provider configuration
13
+ */
14
+ interface SolanaConfig extends ProviderConfig {
15
+ /** Solana JSON-RPC endpoint (HTTP or WebSocket) */
16
+ rpcUrl: string;
17
+ /** Network type (mainnet, devnet) */
18
+ network?: 'mainnet' | 'devnet';
19
+ /** Commitment level */
20
+ commitment?: Commitment;
21
+ }
22
+ /**
23
+ * Solana wallet provider
24
+ */
25
+ export declare class SolanaProvider extends BaseWalletProvider {
26
+ private connection;
27
+ private keypair;
28
+ private network;
29
+ private commitment;
30
+ constructor(config: SolanaConfig);
31
+ /**
32
+ * Connect to Solana network via RPC
33
+ */
34
+ connect(): Promise<void>;
35
+ /**
36
+ * Disconnect from Solana network
37
+ */
38
+ disconnect(): Promise<void>;
39
+ /**
40
+ * Get wallet balance
41
+ */
42
+ getBalance(address: string): Promise<Balance>;
43
+ /**
44
+ * Send transaction
45
+ */
46
+ sendTransaction(from: string, request: TransactionRequest): Promise<Transaction>;
47
+ /**
48
+ * Sign transaction
49
+ */
50
+ signTransaction(tx: any, privateKey: string): Promise<SignedTransaction>;
51
+ /**
52
+ * Get transaction history
53
+ */
54
+ getTransactionHistory(address: string): Promise<Transaction[]>;
55
+ /**
56
+ * Validate Solana address (Base58 format)
57
+ */
58
+ validateAddress(address: string): boolean;
59
+ /**
60
+ * Estimate transaction fee
61
+ */
62
+ estimateFee(request: TransactionRequest): Promise<string>;
63
+ /**
64
+ * Get current block number (slot)
65
+ */
66
+ getBlockNumber(): Promise<number>;
67
+ /**
68
+ * Get transaction by hash
69
+ */
70
+ getTransaction(txHash: string): Promise<Transaction | null>;
71
+ /**
72
+ * Initialize keypair from wallet data
73
+ */
74
+ initKeypair(mnemonic: string, derivationPath?: string): Promise<void>;
75
+ /**
76
+ * Initialize from private key
77
+ */
78
+ initFromPrivateKey(privateKey: string): Promise<void>;
79
+ /**
80
+ * Create Keypair from private key
81
+ */
82
+ private createKeypairFromPrivateKey;
83
+ /**
84
+ * Get address from keypair
85
+ */
86
+ getAddress(): string | null;
87
+ /**
88
+ * Get public key
89
+ */
90
+ getPublicKey(): string | null;
91
+ /**
92
+ * Parse SOL amount to lamports
93
+ */
94
+ private parseSolAmount;
95
+ /**
96
+ * Get default RPC URL for network type
97
+ * Checks environment variables first, then falls back to public RPC endpoints
98
+ */
99
+ private getDefaultRpcUrl;
100
+ }
101
+ export {};
102
+ //# sourceMappingURL=solana-provider.d.ts.map