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
@@ -1,431 +0,0 @@
1
- /**
2
- * VetKeys Adapter (Phase 5D)
3
- *
4
- * Mock VetKeys canister integration for threshold signatures.
5
- * Uses local-only implementation until VetKeys canister is deployed.
6
- */
7
-
8
- import type { WalletData, TransactionRequest } from './types.js';
9
-
10
- /**
11
- * Threshold signature result
12
- */
13
- export interface ThresholdSignatureResult {
14
- transactionId: string;
15
- success: boolean;
16
- signature?: string;
17
- partialSignatures?: string[];
18
- error?: string;
19
- thresholdMet: boolean;
20
- }
21
-
22
- /**
23
- * Encrypted secret for canister storage
24
- */
25
- export interface EncryptedSecret {
26
- id: string;
27
- ciphertext: Uint8Array;
28
- iv: Uint8Array;
29
- tag: Uint8Array;
30
- createdAt: number;
31
- }
32
-
33
- /**
34
- * VetKeys adapter options
35
- */
36
- export interface VetKeysAdapterOptions {
37
- threshold?: number;
38
- totalParties?: number;
39
- encryptionAlgorithm?: 'aes-256-gcm' | 'chacha20-poly1305';
40
- /** VetKeys canister ID for canister-based operations */
41
- canisterId?: string;
42
- }
43
-
44
- /**
45
- * VetKeys adapter
46
- *
47
- * VetKeys integration with optional canister support.
48
- * Real VetKeys canister integration requires canisterId to be set.
49
- */
50
- export class VetKeysAdapter {
51
- private options: VetKeysAdapterOptions;
52
- private canisterId?: string;
53
-
54
- constructor(options: VetKeysAdapterOptions = {}) {
55
- this.options = {
56
- threshold: options.threshold ?? 2,
57
- totalParties: options.totalParties ?? 3,
58
- encryptionAlgorithm: options.encryptionAlgorithm ?? 'aes-256-gcm',
59
- canisterId: options.canisterId,
60
- };
61
- this.canisterId = options.canisterId;
62
- }
63
-
64
- /**
65
- * Encrypt secret for canister storage
66
- *
67
- * @param secret - Secret data to encrypt
68
- * @param transactionId - Transaction ID for reference
69
- * @returns Encrypted secret
70
- */
71
- async encryptSecret(
72
- secret: string,
73
- transactionId?: string
74
- ): Promise<EncryptedSecret> {
75
- const crypto = await import('node:crypto');
76
-
77
- const key = crypto.randomBytes(32);
78
- const iv = crypto.randomBytes(12);
79
-
80
- const cipher = crypto.createCipheriv(
81
- this.options.encryptionAlgorithm === 'aes-256-gcm' ? 'aes-256-gcm' : 'chacha20-poly1305',
82
- key,
83
- iv
84
- );
85
-
86
- let encrypted: Buffer;
87
- let tag: Buffer;
88
-
89
- if (this.options.encryptionAlgorithm === 'aes-256-gcm') {
90
- const enc = cipher as any;
91
- encrypted = Buffer.concat([
92
- enc.update(secret, 'utf8'),
93
- enc.final(),
94
- ]);
95
- tag = enc.getAuthTag();
96
- } else {
97
- encrypted = Buffer.concat([
98
- cipher.update(secret, 'utf8'),
99
- cipher.final(),
100
- ]);
101
- tag = Buffer.alloc(0);
102
- }
103
-
104
- return {
105
- id: transactionId || `secret_${Date.now()}`,
106
- ciphertext: new Uint8Array(encrypted),
107
- iv: new Uint8Array(iv),
108
- tag: new Uint8Array(tag),
109
- createdAt: Date.now(),
110
- };
111
- }
112
-
113
- /**
114
- * Decrypt secret from canister
115
- *
116
- * @param encrypted - Encrypted secret data
117
- * @param key - Decryption key
118
- * @returns Decrypted secret
119
- */
120
- async decryptSecret(
121
- encrypted: EncryptedSecret,
122
- key: Buffer
123
- ): Promise<string> {
124
- const crypto = await import('node:crypto');
125
-
126
- const decipher = crypto.createDecipheriv(
127
- this.options.encryptionAlgorithm === 'aes-256-gcm' ? 'aes-256-gcm' : 'chacha20-poly1305',
128
- key,
129
- encrypted.iv
130
- );
131
-
132
- if (this.options.encryptionAlgorithm === 'aes-256-gcm') {
133
- (decipher as any).setAuthTag(encrypted.tag);
134
- }
135
-
136
- const decrypted = Buffer.concat([
137
- decipher.update(Buffer.from(encrypted.ciphertext)),
138
- decipher.final(),
139
- ]);
140
-
141
- return decrypted.toString('utf8');
142
- }
143
-
144
- /**
145
- * Initiate threshold signature (mock)
146
- *
147
- * @param transactionId - Transaction ID
148
- * @param wallet - Wallet to use
149
- * @param request - Transaction request
150
- * @returns Threshold signature result
151
- */
152
- async initiateThresholdSignature(
153
- transactionId: string,
154
- wallet: WalletData,
155
- request: TransactionRequest
156
- ): Promise<ThresholdSignatureResult> {
157
- console.log(`Initiating threshold signature for ${transactionId}...`);
158
-
159
- if (this.options.threshold && this.options.threshold > 1) {
160
- const { VetKeysImplementation } = await import('../security/vetkeys.js');
161
-
162
- const client = new VetKeysImplementation({
163
- threshold: this.options.threshold,
164
- totalParties: this.options.totalParties,
165
- encryptionAlgorithm: this.options.encryptionAlgorithm,
166
- });
167
-
168
- const mnemonic = wallet.mnemonic;
169
-
170
- if (!mnemonic) {
171
- throw new Error('Wallet mnemonic not available for threshold signing');
172
- }
173
-
174
- try {
175
- const derived = await client.deriveThresholdKey(mnemonic);
176
-
177
- console.log('Threshold key derived successfully');
178
-
179
- return {
180
- transactionId,
181
- success: true,
182
- partialSignatures: derived.shareMetadata.map((s) => s.encryptedShare),
183
- thresholdMet: (derived.threshold ?? 0) > 1,
184
- };
185
- } catch (error) {
186
- return {
187
- transactionId,
188
- success: false,
189
- error: error instanceof Error ? error.message : 'Unknown error',
190
- thresholdMet: false,
191
- };
192
- }
193
- } else {
194
- console.log('Threshold is 1, using direct signing');
195
-
196
- const { CkEthProvider, PolkadotProvider, SolanaProvider } = await import('./index.js');
197
-
198
- let provider: any;
199
-
200
- switch (wallet.chain) {
201
- case 'cketh':
202
- provider = new CkEthProvider({ chain: 'cketh', rpcUrl: '', isTestnet: false });
203
- break;
204
- case 'polkadot':
205
- provider = new PolkadotProvider({ chain: 'polkadot', rpcUrl: '', isTestnet: false });
206
- break;
207
- case 'solana':
208
- provider = new SolanaProvider({ chain: 'solana', rpcUrl: '', isTestnet: false });
209
- break;
210
- default:
211
- throw new Error(`Unsupported chain: ${wallet.chain}`);
212
- }
213
-
214
- await provider.connect();
215
-
216
- const signed = await provider.signTransaction(request, wallet.privateKey);
217
-
218
- return {
219
- transactionId,
220
- success: true,
221
- signature: signed.signature,
222
- thresholdMet: true,
223
- };
224
- }
225
- }
226
-
227
- /**
228
- * Combine partial signatures
229
- *
230
- * IMPORTANT: This requires a deployed VetKeys canister for proper threshold
231
- * signature combination. Without the canister, this implementation validates
232
- * signature format but cannot perform cryptographic combination.
233
- *
234
- * @param partialSignatures - Array of partial signatures
235
- * @param canisterConnected - Whether VetKeys canister is available
236
- * @returns Combined signature or error
237
- */
238
- async combineSignatures(
239
- partialSignatures: string[],
240
- canisterConnected: boolean = false
241
- ): Promise<{ success: boolean; combinedSignature?: string; error?: string }> {
242
- console.log(`Combining ${partialSignatures.length} partial signatures...`);
243
-
244
- const threshold = this.options.threshold ?? 2;
245
-
246
- if (partialSignatures.length < threshold) {
247
- return {
248
- success: false,
249
- error: `Insufficient signatures: ${partialSignatures.length}/${threshold} required`,
250
- };
251
- }
252
-
253
- for (let i = 0; i < partialSignatures.length; i++) {
254
- const sig = partialSignatures[i];
255
- if (!sig || typeof sig !== 'string' || sig.length < 64) {
256
- return {
257
- success: false,
258
- error: `Invalid partial signature at index ${i}: must be a valid hex string of at least 64 characters`,
259
- };
260
- }
261
-
262
- if (!/^[0-9a-fA-F]+$/.test(sig)) {
263
- return {
264
- success: false,
265
- error: `Invalid partial signature at index ${i}: must be hexadecimal`,
266
- };
267
- }
268
- }
269
-
270
- if (!canisterConnected) {
271
- return {
272
- success: false,
273
- error: 'VetKeys canister not connected: threshold signature combination requires deployed VetKeys canister. Use single-party signing or deploy the VetKeys canister.',
274
- };
275
- }
276
-
277
- try {
278
- const crypto = await import('node:crypto');
279
-
280
- const combinedData = Buffer.concat(
281
- partialSignatures.map((sig) => Buffer.from(sig, 'hex'))
282
- );
283
-
284
- const combined = crypto.createHash('sha256').update(combinedData).digest('hex');
285
-
286
- console.log('Signatures combined successfully ( VetKeys canister mode)');
287
-
288
- return {
289
- success: true,
290
- combinedSignature: combined,
291
- };
292
- } catch (error) {
293
- return {
294
- success: false,
295
- error: error instanceof Error ? error.message : 'Unknown error',
296
- };
297
- }
298
- }
299
-
300
- /**
301
- * Verify threshold signature
302
- *
303
- * IMPORTANT: This requires a deployed VetKeys canister for proper threshold
304
- * signature verification. Without the canister, this validates format only.
305
- *
306
- * @param signature - Signature to verify
307
- * @param transaction - Transaction data
308
- * @param canisterConnected - Whether VetKeys canister is available
309
- * @returns Verification result
310
- */
311
- async verifySignature(
312
- signature: string,
313
- transaction: TransactionRequest,
314
- canisterConnected: boolean = false
315
- ): Promise<{ valid: boolean; error?: string }> {
316
- console.log('Verifying signature...');
317
-
318
- if (!signature || typeof signature !== 'string') {
319
- return { valid: false, error: 'Signature must be a non-empty string' };
320
- }
321
-
322
- if (signature.length < 64) {
323
- return { valid: false, error: 'Signature must be at least 64 characters' };
324
- }
325
-
326
- if (!/^[0-9a-fA-F]+$/.test(signature)) {
327
- return { valid: false, error: 'Signature must be hexadecimal' };
328
- }
329
-
330
- if (!transaction || typeof transaction !== 'object') {
331
- return { valid: false, error: 'Transaction must be a valid object' };
332
- }
333
-
334
- if (!canisterConnected) {
335
- console.log('Warning: VetKeys canister not connected, signature format validated only');
336
- return {
337
- valid: false,
338
- error: 'VetKeys canister not connected: threshold signature verification requires deployed VetKeys canister. Use single-party verification or deploy the VetKeys canister.',
339
- };
340
- }
341
-
342
- try {
343
- const crypto = await import('node:crypto');
344
-
345
- const dataToVerify = JSON.stringify({
346
- to: transaction.to,
347
- amount: transaction.amount,
348
- chain: transaction.chain,
349
- memo: transaction.memo,
350
- });
351
- const expectedHash = crypto.createHash('sha256')
352
- .update(dataToVerify)
353
- .digest('hex');
354
-
355
- const isValid = signature.includes(expectedHash.slice(0, 32));
356
-
357
- if (isValid) {
358
- console.log('Signature verified successfully (VetKeys canister mode)');
359
- } else {
360
- console.log('Signature verification failed');
361
- }
362
-
363
- return { valid: isValid };
364
- } catch (error) {
365
- return {
366
- valid: false,
367
- error: error instanceof Error ? error.message : 'Unknown error',
368
- };
369
- }
370
- }
371
-
372
- /**
373
- * Get VetKeys status
374
- *
375
- * @returns VetKeys configuration status
376
- */
377
- getStatus(): {
378
- thresholdSupported: boolean;
379
- currentThreshold: number;
380
- totalParties: number;
381
- encryptionAlgorithm: string;
382
- mode: 'mock' | 'production';
383
- } {
384
- return {
385
- thresholdSupported: true,
386
- currentThreshold: this.options.threshold ?? 2,
387
- totalParties: this.options.totalParties ?? 3,
388
- encryptionAlgorithm: this.options.encryptionAlgorithm ?? 'aes-256-gcm',
389
- mode: this.canisterId ? 'production' : 'mock',
390
- };
391
- }
392
-
393
- /**
394
- * Check if canister is connected
395
- *
396
- * Attempts to ping the VetKeys canister to verify connectivity.
397
- * Returns false if canisterId is not configured or canister is unreachable.
398
- *
399
- * @returns True if VetKeys canister is accessible
400
- */
401
- async isCanisterConnected(): Promise<boolean> {
402
- if (!this.canisterId) {
403
- return false;
404
- }
405
-
406
- try {
407
- const { createActor } = await import('../canister/actor.js');
408
- const actor = createActor(this.canisterId);
409
-
410
- const status = await actor.getVetKeysStatus();
411
-
412
- return status && typeof status === 'object' && 'enabled' in status;
413
- } catch (error) {
414
- const message = error instanceof Error ? error.message : 'Unknown error';
415
- console.warn(`VetKeys canister not accessible: ${message}`);
416
- return false;
417
- }
418
- }
419
- }
420
-
421
- /**
422
- * Create VetKeys adapter
423
- *
424
- * @param options - Adapter options
425
- * @returns VetKeys adapter instance
426
- */
427
- export function createVetKeysAdapter(
428
- options?: VetKeysAdapterOptions
429
- ): VetKeysAdapter {
430
- return new VetKeysAdapter(options);
431
- }