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,393 @@
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 { BaseWalletProvider } from './base-provider.js';
9
+ import { Connection, Keypair, PublicKey, SystemProgram, Transaction as SolanaTransaction, LAMPORTS_PER_SOL, } from '@solana/web3.js';
10
+ import { Buffer } from 'buffer';
11
+ /**
12
+ * Solana wallet provider
13
+ */
14
+ export class SolanaProvider extends BaseWalletProvider {
15
+ connection = null;
16
+ keypair = null;
17
+ network;
18
+ commitment;
19
+ constructor(config) {
20
+ super(config);
21
+ this.network = config.network || 'mainnet';
22
+ this.commitment = config.commitment || 'confirmed';
23
+ }
24
+ /**
25
+ * Connect to Solana network via RPC
26
+ */
27
+ async connect() {
28
+ try {
29
+ const rpcUrl = this.config.rpcUrl || this.getDefaultRpcUrl();
30
+ this.connection = new Connection(rpcUrl, this.commitment);
31
+ // Verify connection by getting latest slot
32
+ const slot = await this.connection.getSlot();
33
+ this.connected = true;
34
+ console.log(`Connected to Solana ${this.network} at slot ${slot}`);
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : 'Unknown error';
38
+ throw new Error(`Failed to connect to Solana network: ${message}`);
39
+ }
40
+ }
41
+ /**
42
+ * Disconnect from Solana network
43
+ */
44
+ async disconnect() {
45
+ this.connection = null;
46
+ this.keypair = null;
47
+ this.connected = false;
48
+ }
49
+ /**
50
+ * Get wallet balance
51
+ */
52
+ async getBalance(address) {
53
+ if (!this.connected || !this.connection) {
54
+ throw new Error('Provider not connected');
55
+ }
56
+ try {
57
+ const publicKey = new PublicKey(address);
58
+ const balanceInLamports = await this.connection.getBalance(publicKey);
59
+ const balanceInSol = balanceInLamports / LAMPORTS_PER_SOL;
60
+ const slot = await this.connection.getSlot();
61
+ return {
62
+ amount: balanceInSol.toString(),
63
+ denomination: 'SOL',
64
+ chain: 'solana',
65
+ address,
66
+ blockNumber: slot,
67
+ };
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : 'Unknown error';
71
+ throw new Error(`Failed to get balance: ${message}`);
72
+ }
73
+ }
74
+ /**
75
+ * Send transaction
76
+ */
77
+ async sendTransaction(from, request) {
78
+ if (!this.connected || !this.connection || !this.keypair) {
79
+ throw new Error('Provider not connected or no wallet loaded');
80
+ }
81
+ try {
82
+ const toPublicKey = new PublicKey(request.to);
83
+ const fromPublicKey = new PublicKey(from);
84
+ const amountInLamports = this.parseSolAmount(request.amount);
85
+ // Get latest blockhash
86
+ const { blockhash } = await this.connection.getLatestBlockhash();
87
+ // Create SystemProgram transfer instruction
88
+ const instruction = SystemProgram.transfer({
89
+ fromPubkey: fromPublicKey,
90
+ toPubkey: toPublicKey,
91
+ lamports: amountInLamports,
92
+ });
93
+ // Create transaction
94
+ const transaction = new SolanaTransaction().add(instruction);
95
+ transaction.recentBlockhash = blockhash;
96
+ transaction.feePayer = fromPublicKey;
97
+ // Sign and send transaction
98
+ const signature = await this.connection.sendTransaction(transaction, [this.keypair]);
99
+ const fee = await this.estimateFee(request);
100
+ return {
101
+ hash: signature,
102
+ from,
103
+ to: request.to,
104
+ amount: request.amount,
105
+ chain: 'solana',
106
+ timestamp: Date.now(),
107
+ status: 'pending',
108
+ fee,
109
+ data: { memo: request.memo },
110
+ };
111
+ }
112
+ catch (error) {
113
+ const message = error instanceof Error ? error.message : 'Unknown error';
114
+ throw new Error(`Failed to send transaction: ${message}`);
115
+ }
116
+ }
117
+ /**
118
+ * Sign transaction
119
+ */
120
+ async signTransaction(tx, privateKey) {
121
+ if (!this.connection) {
122
+ throw new Error('Provider not connected');
123
+ }
124
+ try {
125
+ const keypair = this.createKeypairFromPrivateKey(privateKey);
126
+ const toPublicKey = new PublicKey(tx.to);
127
+ const fromPublicKey = keypair.publicKey;
128
+ const amountInLamports = this.parseSolAmount(tx.amount);
129
+ // Get latest blockhash
130
+ const { blockhash } = await this.connection.getLatestBlockhash();
131
+ // Create transaction
132
+ const instruction = SystemProgram.transfer({
133
+ fromPubkey: fromPublicKey,
134
+ toPubkey: toPublicKey,
135
+ lamports: amountInLamports,
136
+ });
137
+ const transaction = new SolanaTransaction().add(instruction);
138
+ transaction.recentBlockhash = blockhash;
139
+ transaction.feePayer = fromPublicKey;
140
+ // Sign transaction
141
+ transaction.sign(keypair);
142
+ return {
143
+ txHash: transaction.signature?.toString() || '',
144
+ signedTx: transaction.serialize().toString('base64'),
145
+ signature: Buffer.from(transaction.signature).toString('hex'),
146
+ request: tx,
147
+ };
148
+ }
149
+ catch (error) {
150
+ const message = error instanceof Error ? error.message : 'Unknown error';
151
+ throw new Error(`Failed to sign transaction: ${message}`);
152
+ }
153
+ }
154
+ /**
155
+ * Get transaction history
156
+ */
157
+ async getTransactionHistory(address) {
158
+ if (!this.connected || !this.connection) {
159
+ throw new Error('Provider not connected');
160
+ }
161
+ try {
162
+ const publicKey = new PublicKey(address);
163
+ const transactions = [];
164
+ // Get recent signatures for this address (limit to 20)
165
+ const signatures = await this.connection.getSignaturesForAddress(publicKey, { limit: 20 });
166
+ // Fetch detailed transaction info for each signature
167
+ for (const sig of signatures) {
168
+ try {
169
+ const tx = await this.connection.getParsedTransaction(sig.signature, { maxSupportedTransactionVersion: 0 });
170
+ if (!tx || !tx.meta)
171
+ continue;
172
+ // Find transfer instruction
173
+ const transfer = tx.transaction.message.instructions.find((ix) => ix.programId.toBase58() === SystemProgram.programId.toBase58());
174
+ if (!transfer)
175
+ continue;
176
+ const parsedIx = transfer.parsed;
177
+ if (parsedIx?.type !== 'transfer')
178
+ continue;
179
+ const { from, to, lamports } = parsedIx.info;
180
+ // Only include transactions involving this address
181
+ if (from !== address && to !== address)
182
+ continue;
183
+ transactions.push({
184
+ hash: sig.signature,
185
+ from,
186
+ to,
187
+ amount: (lamports / LAMPORTS_PER_SOL).toFixed(9),
188
+ chain: 'solana',
189
+ timestamp: (sig.blockTime || Date.now() / 1000) * 1000,
190
+ status: 'confirmed',
191
+ fee: tx.meta.fee
192
+ ? (tx.meta.fee / LAMPORTS_PER_SOL).toFixed(9)
193
+ : '0',
194
+ });
195
+ }
196
+ catch (error) {
197
+ console.warn(`Failed to fetch transaction ${sig.signature}:`, error);
198
+ continue;
199
+ }
200
+ }
201
+ return transactions;
202
+ }
203
+ catch (error) {
204
+ const message = error instanceof Error ? error.message : 'Unknown error';
205
+ console.warn(`Failed to get transaction history: ${message}`);
206
+ return [];
207
+ }
208
+ }
209
+ /**
210
+ * Validate Solana address (Base58 format)
211
+ */
212
+ validateAddress(address) {
213
+ try {
214
+ new PublicKey(address);
215
+ return true;
216
+ }
217
+ catch {
218
+ return false;
219
+ }
220
+ }
221
+ /**
222
+ * Estimate transaction fee
223
+ */
224
+ async estimateFee(request) {
225
+ if (!this.connected || !this.connection || !this.keypair) {
226
+ return '0.000005'; // Default minimum
227
+ }
228
+ try {
229
+ const toPublicKey = new PublicKey(request.to);
230
+ const fromPublicKey = this.keypair.publicKey;
231
+ const amountInLamports = this.parseSolAmount(request.amount);
232
+ // Get latest blockhash
233
+ const { blockhash } = await this.connection.getLatestBlockhash();
234
+ // Create transaction
235
+ const instruction = SystemProgram.transfer({
236
+ fromPubkey: fromPublicKey,
237
+ toPubkey: toPublicKey,
238
+ lamports: amountInLamports,
239
+ });
240
+ const transaction = new SolanaTransaction().add(instruction);
241
+ transaction.recentBlockhash = blockhash;
242
+ transaction.feePayer = fromPublicKey;
243
+ // Estimate fee
244
+ const fee = await transaction.getEstimatedFee(this.connection);
245
+ if (!fee)
246
+ return '0.000005';
247
+ const feeInSol = fee / LAMPORTS_PER_SOL;
248
+ return feeInSol.toFixed(9);
249
+ }
250
+ catch (_error) {
251
+ return '0.000005';
252
+ }
253
+ }
254
+ /**
255
+ * Get current block number (slot)
256
+ */
257
+ async getBlockNumber() {
258
+ if (!this.connected || !this.connection) {
259
+ throw new Error('Provider not connected');
260
+ }
261
+ try {
262
+ return await this.connection.getSlot();
263
+ }
264
+ catch (error) {
265
+ const message = error instanceof Error ? error.message : 'Unknown error';
266
+ throw new Error(`Failed to get block number: ${message}`);
267
+ }
268
+ }
269
+ /**
270
+ * Get transaction by hash
271
+ */
272
+ async getTransaction(txHash) {
273
+ if (!this.connected || !this.connection) {
274
+ throw new Error('Provider not connected');
275
+ }
276
+ try {
277
+ const tx = await this.connection.getParsedTransaction(txHash, { maxSupportedTransactionVersion: 0 });
278
+ if (!tx || !tx.meta)
279
+ return null;
280
+ // Find transfer instruction
281
+ const transfer = tx.transaction.message.instructions.find((ix) => ix.programId.toBase58() === SystemProgram.programId.toBase58());
282
+ if (!transfer)
283
+ return null;
284
+ const parsedIx = transfer.parsed;
285
+ if (parsedIx?.type !== 'transfer')
286
+ return null;
287
+ const { from, to, lamports } = parsedIx.info;
288
+ return {
289
+ hash: txHash,
290
+ from,
291
+ to,
292
+ amount: (lamports / LAMPORTS_PER_SOL).toFixed(9),
293
+ chain: 'solana',
294
+ timestamp: (tx.blockTime || Date.now() / 1000) * 1000,
295
+ status: 'confirmed',
296
+ fee: tx.meta.fee
297
+ ? (tx.meta.fee / LAMPORTS_PER_SOL).toFixed(9)
298
+ : '0',
299
+ };
300
+ }
301
+ catch (error) {
302
+ const message = error instanceof Error ? error.message : 'Unknown error';
303
+ throw new Error(`Failed to get transaction: ${message}`);
304
+ }
305
+ }
306
+ /**
307
+ * Initialize keypair from wallet data
308
+ */
309
+ async initKeypair(mnemonic, derivationPath) {
310
+ try {
311
+ const { generateSeedFromMnemonic, deriveSolanaKey } = await import('../key-derivation.js');
312
+ const seed = generateSeedFromMnemonic(mnemonic);
313
+ const path = derivationPath || "m/44'/501'/0'/0'/0'";
314
+ const derived = deriveSolanaKey(seed, path);
315
+ const privateKeyBytes = Uint8Array.from(Buffer.from(derived.privateKey, 'hex'));
316
+ this.keypair = Keypair.fromSecretKey(privateKeyBytes);
317
+ console.log('Solana keypair initialized for derivation:', path);
318
+ console.log('Address:', this.getAddress());
319
+ }
320
+ catch (error) {
321
+ const message = error instanceof Error ? error.message : 'Unknown error';
322
+ throw new Error(`Failed to initialize Solana keypair: ${message}`);
323
+ }
324
+ }
325
+ /**
326
+ * Initialize from private key
327
+ */
328
+ async initFromPrivateKey(privateKey) {
329
+ try {
330
+ this.keypair = this.createKeypairFromPrivateKey(privateKey);
331
+ console.log('Solana keypair initialized from private key');
332
+ console.log('Address:', this.getAddress());
333
+ }
334
+ catch (error) {
335
+ const message = error instanceof Error ? error.message : 'Unknown error';
336
+ throw new Error(`Failed to initialize Solana keypair from private key: ${message}`);
337
+ }
338
+ }
339
+ /**
340
+ * Create Keypair from private key
341
+ */
342
+ createKeypairFromPrivateKey(privateKeyHex) {
343
+ const privateKeyBytes = Buffer.from(privateKeyHex, 'hex');
344
+ return Keypair.fromSecretKey(privateKeyBytes.subarray(0, 32));
345
+ }
346
+ /**
347
+ * Get address from keypair
348
+ */
349
+ getAddress() {
350
+ if (!this.keypair) {
351
+ return null;
352
+ }
353
+ return this.keypair.publicKey.toBase58();
354
+ }
355
+ /**
356
+ * Get public key
357
+ */
358
+ getPublicKey() {
359
+ if (!this.keypair) {
360
+ return null;
361
+ }
362
+ return Buffer.from(this.keypair.publicKey.toBytes()).toString('hex');
363
+ }
364
+ /**
365
+ * Parse SOL amount to lamports
366
+ */
367
+ parseSolAmount(amountStr) {
368
+ try {
369
+ const cleanAmount = amountStr.replace(/,/g, '').trim();
370
+ const amount = parseFloat(cleanAmount);
371
+ return Math.floor(amount * LAMPORTS_PER_SOL);
372
+ }
373
+ catch {
374
+ return 0;
375
+ }
376
+ }
377
+ /**
378
+ * Get default RPC URL for network type
379
+ * Checks environment variables first, then falls back to public RPC endpoints
380
+ */
381
+ getDefaultRpcUrl() {
382
+ const envUrls = {
383
+ mainnet: process.env.SOLANA_MAINNET_RPC_URL || process.env.SOLANA_RPC_URL,
384
+ devnet: process.env.SOLANA_DEVNET_RPC_URL || process.env.SOLANA_RPC_URL,
385
+ };
386
+ const publicUrls = {
387
+ mainnet: 'https://api.mainnet-beta.solana.com',
388
+ devnet: 'https://api.devnet.solana.com',
389
+ };
390
+ return envUrls[this.network] || publicUrls[this.network] || publicUrls.mainnet;
391
+ }
392
+ }
393
+ //# sourceMappingURL=solana-provider.js.map
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Transaction Queue Processor (Phase 5B)
3
+ *
4
+ * Advanced transaction queue with priority, retries, and scheduling.
5
+ * Handles agent-initiated transactions queued in canister.
6
+ */
7
+ import type { WalletData, TransactionRequest, SignedTransaction } from './types.js';
8
+ /**
9
+ * Transaction action type
10
+ */
11
+ export type TransactionAction = 'send_funds' | 'sign_message' | 'deploy_contract';
12
+ /**
13
+ * Transaction priority
14
+ */
15
+ export type TransactionPriority = 'low' | 'normal' | 'high';
16
+ /**
17
+ * Transaction status
18
+ */
19
+ export type TransactionStatus = 'pending' | 'queued' | 'signed' | 'completed' | 'failed';
20
+ /**
21
+ * Queued transaction from canister
22
+ */
23
+ export interface QueuedTransaction {
24
+ id: string;
25
+ action: {
26
+ walletId: string;
27
+ action: TransactionAction;
28
+ parameters: [string, string][];
29
+ priority: TransactionPriority;
30
+ threshold?: number;
31
+ };
32
+ status: TransactionStatus;
33
+ result?: string;
34
+ retryCount: number;
35
+ scheduledAt?: number;
36
+ createdAt: number;
37
+ signedAt?: number;
38
+ completedAt?: number;
39
+ errorMessage?: string;
40
+ }
41
+ /**
42
+ * Queue statistics
43
+ */
44
+ export interface QueueStats {
45
+ total: number;
46
+ pending: number;
47
+ queued: number;
48
+ signed: number;
49
+ completed: number;
50
+ failed: number;
51
+ }
52
+ /**
53
+ * Process result
54
+ */
55
+ export interface ProcessResult {
56
+ transactionId: string;
57
+ success: boolean;
58
+ txHash?: string;
59
+ error?: string;
60
+ processedAt: number;
61
+ }
62
+ /**
63
+ * Transaction queue processor
64
+ */
65
+ export declare class TransactionQueueProcessor {
66
+ private actor;
67
+ private maxRetries;
68
+ constructor(_canisterId: string, actor: any, options?: {
69
+ maxRetries?: number;
70
+ retryDelay?: number;
71
+ });
72
+ /**
73
+ * Fetch pending transactions from canister
74
+ */
75
+ fetchPendingTransactions(): Promise<QueuedTransaction[]>;
76
+ /**
77
+ * Process all pending transactions
78
+ *
79
+ * @param signCallback - Callback to sign transactions
80
+ * @returns Processing results
81
+ */
82
+ processPendingTransactions(signCallback: (wallet: WalletData, action: TransactionRequest) => Promise<SignedTransaction | null>): Promise<ProcessResult[]>;
83
+ /**
84
+ * Process a single transaction
85
+ */
86
+ private processTransaction;
87
+ /**
88
+ * Map canister action to transaction request
89
+ */
90
+ private mapActionToRequest;
91
+ /**
92
+ * Mark transaction as signed in canister
93
+ */
94
+ private markSigned;
95
+ /**
96
+ * Mark transaction as failed in canister
97
+ */
98
+ private markFailed;
99
+ /**
100
+ * Mark transaction as completed in canister
101
+ */
102
+ markCompleted(txId: string, txHash: string): Promise<void>;
103
+ /**
104
+ * Get queue statistics
105
+ */
106
+ getStats(): Promise<QueueStats | null>;
107
+ /**
108
+ * Schedule transaction for future execution
109
+ */
110
+ scheduleTransaction(txId: string, scheduledAt: Date): Promise<{
111
+ success: boolean;
112
+ error?: string;
113
+ }>;
114
+ /**
115
+ * Clear completed transactions
116
+ */
117
+ clearCompleted(): Promise<{
118
+ success: boolean;
119
+ error?: string;
120
+ }>;
121
+ }
122
+ /**
123
+ * Create transaction queue processor
124
+ *
125
+ * @param canisterId - Canister ID
126
+ * @param actor - Canister actor instance
127
+ * @returns Queue processor instance
128
+ */
129
+ export declare function createQueueProcessor(canisterId: string, actor: any, options?: {
130
+ maxRetries?: number;
131
+ retryDelay?: number;
132
+ }): TransactionQueueProcessor;
133
+ //# sourceMappingURL=transaction-queue.d.ts.map