@xylabs/aries 0.1.1

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 (421) hide show
  1. package/README.md +693 -0
  2. package/dist/actions/audit/auditPaths.mjs +22 -0
  3. package/dist/actions/audit/auditPaths.mjs.map +1 -0
  4. package/dist/actions/audit/index.mjs +739 -0
  5. package/dist/actions/audit/index.mjs.map +1 -0
  6. package/dist/actions/audit/installPlugin.mjs +298 -0
  7. package/dist/actions/audit/installPlugin.mjs.map +1 -0
  8. package/dist/actions/audit/listSessions.mjs +93 -0
  9. package/dist/actions/audit/listSessions.mjs.map +1 -0
  10. package/dist/actions/audit/openAuditDir.mjs +44 -0
  11. package/dist/actions/audit/openAuditDir.mjs.map +1 -0
  12. package/dist/actions/audit/searchAudit.mjs +77 -0
  13. package/dist/actions/audit/searchAudit.mjs.map +1 -0
  14. package/dist/actions/audit/showAiMeta.mjs +105 -0
  15. package/dist/actions/audit/showAiMeta.mjs.map +1 -0
  16. package/dist/actions/audit/showSession.mjs +105 -0
  17. package/dist/actions/audit/showSession.mjs.map +1 -0
  18. package/dist/actions/audit/statusAudit.mjs +98 -0
  19. package/dist/actions/audit/statusAudit.mjs.map +1 -0
  20. package/dist/actions/clamp/clampAudit.mjs +53 -0
  21. package/dist/actions/clamp/clampAudit.mjs.map +1 -0
  22. package/dist/actions/clamp/index.mjs +2258 -0
  23. package/dist/actions/clamp/index.mjs.map +1 -0
  24. package/dist/actions/clamp/ipcServer.mjs +55 -0
  25. package/dist/actions/clamp/ipcServer.mjs.map +1 -0
  26. package/dist/actions/clamp/policyManagement.mjs +144 -0
  27. package/dist/actions/clamp/policyManagement.mjs.map +1 -0
  28. package/dist/actions/clamp/promptUser.mjs +91 -0
  29. package/dist/actions/clamp/promptUser.mjs.map +1 -0
  30. package/dist/actions/clamp/runClamped.mjs +2107 -0
  31. package/dist/actions/clamp/runClamped.mjs.map +1 -0
  32. package/dist/actions/clamp/sandboxExec.mjs +1612 -0
  33. package/dist/actions/clamp/sandboxExec.mjs.map +1 -0
  34. package/dist/actions/clamp/shellEnvSetup.mjs +59 -0
  35. package/dist/actions/clamp/shellEnvSetup.mjs.map +1 -0
  36. package/dist/actions/clamp/shimGenerator.mjs +68 -0
  37. package/dist/actions/clamp/shimGenerator.mjs.map +1 -0
  38. package/dist/actions/clamp/terminalRenderer.mjs +145 -0
  39. package/dist/actions/clamp/terminalRenderer.mjs.map +1 -0
  40. package/dist/actions/datalake/audit/auditLog.mjs +191 -0
  41. package/dist/actions/datalake/audit/auditLog.mjs.map +1 -0
  42. package/dist/actions/datalake/createDatalake.mjs +127 -0
  43. package/dist/actions/datalake/createDatalake.mjs.map +1 -0
  44. package/dist/actions/datalake/describeDatalake.mjs +159 -0
  45. package/dist/actions/datalake/describeDatalake.mjs.map +1 -0
  46. package/dist/actions/datalake/destroyDatalake.mjs +34 -0
  47. package/dist/actions/datalake/destroyDatalake.mjs.map +1 -0
  48. package/dist/actions/datalake/dev/downDevServer.mjs +102 -0
  49. package/dist/actions/datalake/dev/downDevServer.mjs.map +1 -0
  50. package/dist/actions/datalake/dev/index.mjs +369 -0
  51. package/dist/actions/datalake/dev/index.mjs.map +1 -0
  52. package/dist/actions/datalake/dev/logsDevServer.mjs +44 -0
  53. package/dist/actions/datalake/dev/logsDevServer.mjs.map +1 -0
  54. package/dist/actions/datalake/dev/paths.mjs +25 -0
  55. package/dist/actions/datalake/dev/paths.mjs.map +1 -0
  56. package/dist/actions/datalake/dev/resetDevServer.mjs +118 -0
  57. package/dist/actions/datalake/dev/resetDevServer.mjs.map +1 -0
  58. package/dist/actions/datalake/dev/resolveServerBin.mjs +26 -0
  59. package/dist/actions/datalake/dev/resolveServerBin.mjs.map +1 -0
  60. package/dist/actions/datalake/dev/state.mjs +62 -0
  61. package/dist/actions/datalake/dev/state.mjs.map +1 -0
  62. package/dist/actions/datalake/dev/statusDevServer.mjs +101 -0
  63. package/dist/actions/datalake/dev/statusDevServer.mjs.map +1 -0
  64. package/dist/actions/datalake/dev/upDevServer.mjs +221 -0
  65. package/dist/actions/datalake/dev/upDevServer.mjs.map +1 -0
  66. package/dist/actions/datalake/dev/waitForHealth.mjs +22 -0
  67. package/dist/actions/datalake/dev/waitForHealth.mjs.map +1 -0
  68. package/dist/actions/datalake/formatters.mjs +90 -0
  69. package/dist/actions/datalake/formatters.mjs.map +1 -0
  70. package/dist/actions/datalake/grantAccess.mjs +116 -0
  71. package/dist/actions/datalake/grantAccess.mjs.map +1 -0
  72. package/dist/actions/datalake/index.mjs +361 -0
  73. package/dist/actions/datalake/index.mjs.map +1 -0
  74. package/dist/actions/datalake/listDatalakes.mjs +54 -0
  75. package/dist/actions/datalake/listDatalakes.mjs.map +1 -0
  76. package/dist/actions/datalake/login.mjs +20 -0
  77. package/dist/actions/datalake/login.mjs.map +1 -0
  78. package/dist/actions/datalake/logout.mjs +11 -0
  79. package/dist/actions/datalake/logout.mjs.map +1 -0
  80. package/dist/actions/datalake/mintToken.mjs +37 -0
  81. package/dist/actions/datalake/mintToken.mjs.map +1 -0
  82. package/dist/actions/datalake/parseSize.mjs +21 -0
  83. package/dist/actions/datalake/parseSize.mjs.map +1 -0
  84. package/dist/actions/datalake/payloads/fetchPayload.mjs +76 -0
  85. package/dist/actions/datalake/payloads/fetchPayload.mjs.map +1 -0
  86. package/dist/actions/datalake/payloads/index.mjs +271 -0
  87. package/dist/actions/datalake/payloads/index.mjs.map +1 -0
  88. package/dist/actions/datalake/payloads/mintAndConnect.mjs +46 -0
  89. package/dist/actions/datalake/payloads/mintAndConnect.mjs.map +1 -0
  90. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs +71 -0
  91. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs.map +1 -0
  92. package/dist/actions/datalake/payloads/pushPayloads.mjs +181 -0
  93. package/dist/actions/datalake/payloads/pushPayloads.mjs.map +1 -0
  94. package/dist/actions/datalake/payloads/tailPayloads.mjs +106 -0
  95. package/dist/actions/datalake/payloads/tailPayloads.mjs.map +1 -0
  96. package/dist/actions/datalake/resolveTarget.mjs +15 -0
  97. package/dist/actions/datalake/resolveTarget.mjs.map +1 -0
  98. package/dist/actions/datalake/revokeAccess.mjs +108 -0
  99. package/dist/actions/datalake/revokeAccess.mjs.map +1 -0
  100. package/dist/actions/datalake/useDatalake.mjs +22 -0
  101. package/dist/actions/datalake/useDatalake.mjs.map +1 -0
  102. package/dist/actions/detect/detectAiClients.mjs +405 -0
  103. package/dist/actions/detect/detectAiClients.mjs.map +1 -0
  104. package/dist/actions/detect/index.mjs +405 -0
  105. package/dist/actions/detect/index.mjs.map +1 -0
  106. package/dist/actions/hash/algorithms/blockhash.mjs +61 -0
  107. package/dist/actions/hash/algorithms/blockhash.mjs.map +1 -0
  108. package/dist/actions/hash/algorithms/chromaprint.mjs +205 -0
  109. package/dist/actions/hash/algorithms/chromaprint.mjs.map +1 -0
  110. package/dist/actions/hash/algorithms/dhash.mjs +75 -0
  111. package/dist/actions/hash/algorithms/dhash.mjs.map +1 -0
  112. package/dist/actions/hash/algorithms/index.mjs +818 -0
  113. package/dist/actions/hash/algorithms/index.mjs.map +1 -0
  114. package/dist/actions/hash/algorithms/nilsimsa.mjs +27 -0
  115. package/dist/actions/hash/algorithms/nilsimsa.mjs.map +1 -0
  116. package/dist/actions/hash/algorithms/pdq.mjs +83 -0
  117. package/dist/actions/hash/algorithms/pdq.mjs.map +1 -0
  118. package/dist/actions/hash/algorithms/phash.mjs +71 -0
  119. package/dist/actions/hash/algorithms/phash.mjs.map +1 -0
  120. package/dist/actions/hash/algorithms/sha256.mjs +24 -0
  121. package/dist/actions/hash/algorithms/sha256.mjs.map +1 -0
  122. package/dist/actions/hash/algorithms/ssdeep.mjs +203 -0
  123. package/dist/actions/hash/algorithms/ssdeep.mjs.map +1 -0
  124. package/dist/actions/hash/algorithms/tlsh.mjs +66 -0
  125. package/dist/actions/hash/algorithms/tlsh.mjs.map +1 -0
  126. package/dist/actions/hash/algorithms/types.mjs +1 -0
  127. package/dist/actions/hash/algorithms/types.mjs.map +1 -0
  128. package/dist/actions/hash/algorithms/videoFrames.mjs +404 -0
  129. package/dist/actions/hash/algorithms/videoFrames.mjs.map +1 -0
  130. package/dist/actions/hash/algorithms/xyo.mjs +30 -0
  131. package/dist/actions/hash/algorithms/xyo.mjs.map +1 -0
  132. package/dist/actions/hash/compareHashes.mjs +823 -0
  133. package/dist/actions/hash/compareHashes.mjs.map +1 -0
  134. package/dist/actions/hash/hashInput.mjs +868 -0
  135. package/dist/actions/hash/hashInput.mjs.map +1 -0
  136. package/dist/actions/hash/index.mjs +881 -0
  137. package/dist/actions/hash/index.mjs.map +1 -0
  138. package/dist/actions/hash/lib/hamming.mjs +44 -0
  139. package/dist/actions/hash/lib/hamming.mjs.map +1 -0
  140. package/dist/actions/hash/lib/levenshtein.mjs +36 -0
  141. package/dist/actions/hash/lib/levenshtein.mjs.map +1 -0
  142. package/dist/actions/hash/lib/runBinary.mjs +54 -0
  143. package/dist/actions/hash/lib/runBinary.mjs.map +1 -0
  144. package/dist/actions/hash/lib/which.mjs +36 -0
  145. package/dist/actions/hash/lib/which.mjs.map +1 -0
  146. package/dist/actions/hash/lib/withTempfile.mjs +19 -0
  147. package/dist/actions/hash/lib/withTempfile.mjs.map +1 -0
  148. package/dist/actions/index.mjs +4615 -0
  149. package/dist/actions/index.mjs.map +1 -0
  150. package/dist/actions/printVersion.mjs +12 -0
  151. package/dist/actions/printVersion.mjs.map +1 -0
  152. package/dist/actions/sync/index.mjs +51 -0
  153. package/dist/actions/sync/index.mjs.map +1 -0
  154. package/dist/actions/sync/syncAiConfig.mjs +51 -0
  155. package/dist/actions/sync/syncAiConfig.mjs.map +1 -0
  156. package/dist/actions/wallet/account/deriveAndAdd.mjs +394 -0
  157. package/dist/actions/wallet/account/deriveAndAdd.mjs.map +1 -0
  158. package/dist/actions/wallet/account/getActiveWallet.mjs +338 -0
  159. package/dist/actions/wallet/account/getActiveWallet.mjs.map +1 -0
  160. package/dist/actions/wallet/account/labelAccount.mjs +389 -0
  161. package/dist/actions/wallet/account/labelAccount.mjs.map +1 -0
  162. package/dist/actions/wallet/account/listAccounts.mjs +374 -0
  163. package/dist/actions/wallet/account/listAccounts.mjs.map +1 -0
  164. package/dist/actions/wallet/account/removeAccount.mjs +384 -0
  165. package/dist/actions/wallet/account/removeAccount.mjs.map +1 -0
  166. package/dist/actions/wallet/account/showAccount.mjs +368 -0
  167. package/dist/actions/wallet/account/showAccount.mjs.map +1 -0
  168. package/dist/actions/wallet/addressBook/storage.mjs +110 -0
  169. package/dist/actions/wallet/addressBook/storage.mjs.map +1 -0
  170. package/dist/actions/wallet/backup/exportBackup.mjs +93 -0
  171. package/dist/actions/wallet/backup/exportBackup.mjs.map +1 -0
  172. package/dist/actions/wallet/backup/importBackup.mjs +142 -0
  173. package/dist/actions/wallet/backup/importBackup.mjs.map +1 -0
  174. package/dist/actions/wallet/balance/getBalance.mjs +434 -0
  175. package/dist/actions/wallet/balance/getBalance.mjs.map +1 -0
  176. package/dist/actions/wallet/client/walletClient.mjs +64 -0
  177. package/dist/actions/wallet/client/walletClient.mjs.map +1 -0
  178. package/dist/actions/wallet/contact/contactActions.mjs +120 -0
  179. package/dist/actions/wallet/contact/contactActions.mjs.map +1 -0
  180. package/dist/actions/wallet/contact/storage.mjs +69 -0
  181. package/dist/actions/wallet/contact/storage.mjs.map +1 -0
  182. package/dist/actions/wallet/index.mjs +1439 -0
  183. package/dist/actions/wallet/index.mjs.map +1 -0
  184. package/dist/actions/wallet/network/networkActions.mjs +137 -0
  185. package/dist/actions/wallet/network/networkActions.mjs.map +1 -0
  186. package/dist/actions/wallet/network/storage.mjs +93 -0
  187. package/dist/actions/wallet/network/storage.mjs.map +1 -0
  188. package/dist/actions/wallet/password/changePassword.mjs +282 -0
  189. package/dist/actions/wallet/password/changePassword.mjs.map +1 -0
  190. package/dist/actions/wallet/password/getActiveKey.mjs +297 -0
  191. package/dist/actions/wallet/password/getActiveKey.mjs.map +1 -0
  192. package/dist/actions/wallet/password/initOrUnlock.mjs +337 -0
  193. package/dist/actions/wallet/password/initOrUnlock.mjs.map +1 -0
  194. package/dist/actions/wallet/password/passwordStorage.mjs +69 -0
  195. package/dist/actions/wallet/password/passwordStorage.mjs.map +1 -0
  196. package/dist/actions/wallet/password/setPassword.mjs +138 -0
  197. package/dist/actions/wallet/password/setPassword.mjs.map +1 -0
  198. package/dist/actions/wallet/password/validatePassword.mjs +123 -0
  199. package/dist/actions/wallet/password/validatePassword.mjs.map +1 -0
  200. package/dist/actions/wallet/passwordKey.mjs +87 -0
  201. package/dist/actions/wallet/passwordKey.mjs.map +1 -0
  202. package/dist/actions/wallet/paths.mjs +26 -0
  203. package/dist/actions/wallet/paths.mjs.map +1 -0
  204. package/dist/actions/wallet/prompt.mjs +93 -0
  205. package/dist/actions/wallet/prompt.mjs.map +1 -0
  206. package/dist/actions/wallet/seedPhrase/createPhrase.mjs +392 -0
  207. package/dist/actions/wallet/seedPhrase/createPhrase.mjs.map +1 -0
  208. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs +334 -0
  209. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs.map +1 -0
  210. package/dist/actions/wallet/seedPhrase/idGen.mjs +11 -0
  211. package/dist/actions/wallet/seedPhrase/idGen.mjs.map +1 -0
  212. package/dist/actions/wallet/seedPhrase/importPhrase.mjs +393 -0
  213. package/dist/actions/wallet/seedPhrase/importPhrase.mjs.map +1 -0
  214. package/dist/actions/wallet/seedPhrase/listPhrases.mjs +62 -0
  215. package/dist/actions/wallet/seedPhrase/listPhrases.mjs.map +1 -0
  216. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs +89 -0
  217. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs.map +1 -0
  218. package/dist/actions/wallet/seedPhrase/removePhrase.mjs +366 -0
  219. package/dist/actions/wallet/seedPhrase/removePhrase.mjs.map +1 -0
  220. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs +78 -0
  221. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs.map +1 -0
  222. package/dist/actions/wallet/seedPhrase/types.mjs +1 -0
  223. package/dist/actions/wallet/seedPhrase/types.mjs.map +1 -0
  224. package/dist/actions/wallet/seedPhrase/usePhrase.mjs +83 -0
  225. package/dist/actions/wallet/seedPhrase/usePhrase.mjs.map +1 -0
  226. package/dist/actions/wallet/session/machineId.mjs +145 -0
  227. package/dist/actions/wallet/session/machineId.mjs.map +1 -0
  228. package/dist/actions/wallet/session/sessionCache.mjs +221 -0
  229. package/dist/actions/wallet/session/sessionCache.mjs.map +1 -0
  230. package/dist/actions/wallet/session/unlock.mjs +307 -0
  231. package/dist/actions/wallet/session/unlock.mjs.map +1 -0
  232. package/dist/actions/wallet/sign/signPayload.mjs +637 -0
  233. package/dist/actions/wallet/sign/signPayload.mjs.map +1 -0
  234. package/dist/actions/wallet/storage.mjs +51 -0
  235. package/dist/actions/wallet/storage.mjs.map +1 -0
  236. package/dist/actions/wallet/transaction/broadcastTransaction.mjs +453 -0
  237. package/dist/actions/wallet/transaction/broadcastTransaction.mjs.map +1 -0
  238. package/dist/actions/wallet/transaction/sendTransaction.mjs +457 -0
  239. package/dist/actions/wallet/transaction/sendTransaction.mjs.map +1 -0
  240. package/dist/actions/wallet/transaction/signTransactionFile.mjs +378 -0
  241. package/dist/actions/wallet/transaction/signTransactionFile.mjs.map +1 -0
  242. package/dist/actions/xyo/index.mjs +138 -0
  243. package/dist/actions/xyo/index.mjs.map +1 -0
  244. package/dist/actions/xyo/transaction/index.mjs +138 -0
  245. package/dist/actions/xyo/transaction/index.mjs.map +1 -0
  246. package/dist/actions/xyo/transaction/validateTransactions.mjs +138 -0
  247. package/dist/actions/xyo/transaction/validateTransactions.mjs.map +1 -0
  248. package/dist/aries.mjs +8466 -0
  249. package/dist/aries.mjs.map +1 -0
  250. package/dist/bin/aries.mjs +8472 -0
  251. package/dist/bin/aries.mjs.map +1 -0
  252. package/dist/commands/aiCommand.mjs +492 -0
  253. package/dist/commands/aiCommand.mjs.map +1 -0
  254. package/dist/commands/auditAiCommand.mjs +119 -0
  255. package/dist/commands/auditAiCommand.mjs.map +1 -0
  256. package/dist/commands/auditCommand.mjs +857 -0
  257. package/dist/commands/auditCommand.mjs.map +1 -0
  258. package/dist/commands/auditInstallCommand.mjs +324 -0
  259. package/dist/commands/auditInstallCommand.mjs.map +1 -0
  260. package/dist/commands/auditListCommand.mjs +107 -0
  261. package/dist/commands/auditListCommand.mjs.map +1 -0
  262. package/dist/commands/auditOpenCommand.mjs +51 -0
  263. package/dist/commands/auditOpenCommand.mjs.map +1 -0
  264. package/dist/commands/auditSearchCommand.mjs +98 -0
  265. package/dist/commands/auditSearchCommand.mjs.map +1 -0
  266. package/dist/commands/auditShowCommand.mjs +123 -0
  267. package/dist/commands/auditShowCommand.mjs.map +1 -0
  268. package/dist/commands/auditStatusCommand.mjs +105 -0
  269. package/dist/commands/auditStatusCommand.mjs.map +1 -0
  270. package/dist/commands/clampCommand.mjs +2328 -0
  271. package/dist/commands/clampCommand.mjs.map +1 -0
  272. package/dist/commands/clampPolicyCommand.mjs +184 -0
  273. package/dist/commands/clampPolicyCommand.mjs.map +1 -0
  274. package/dist/commands/clampPolicyInitCommand.mjs +63 -0
  275. package/dist/commands/clampPolicyInitCommand.mjs.map +1 -0
  276. package/dist/commands/clampPolicyListCommand.mjs +56 -0
  277. package/dist/commands/clampPolicyListCommand.mjs.map +1 -0
  278. package/dist/commands/clampPolicyShowCommand.mjs +83 -0
  279. package/dist/commands/clampPolicyShowCommand.mjs.map +1 -0
  280. package/dist/commands/clampRunCommand.mjs +2137 -0
  281. package/dist/commands/clampRunCommand.mjs.map +1 -0
  282. package/dist/commands/datalakeAuditCommand.mjs +273 -0
  283. package/dist/commands/datalakeAuditCommand.mjs.map +1 -0
  284. package/dist/commands/datalakeCommand.mjs +1637 -0
  285. package/dist/commands/datalakeCommand.mjs.map +1 -0
  286. package/dist/commands/datalakeCreateCommand.mjs +189 -0
  287. package/dist/commands/datalakeCreateCommand.mjs.map +1 -0
  288. package/dist/commands/datalakeDescribeCommand.mjs +172 -0
  289. package/dist/commands/datalakeDescribeCommand.mjs.map +1 -0
  290. package/dist/commands/datalakeDestroyCommand.mjs +53 -0
  291. package/dist/commands/datalakeDestroyCommand.mjs.map +1 -0
  292. package/dist/commands/datalakeDevCommand.mjs +470 -0
  293. package/dist/commands/datalakeDevCommand.mjs.map +1 -0
  294. package/dist/commands/datalakeDevDownCommand.mjs +111 -0
  295. package/dist/commands/datalakeDevDownCommand.mjs.map +1 -0
  296. package/dist/commands/datalakeDevLogsCommand.mjs +65 -0
  297. package/dist/commands/datalakeDevLogsCommand.mjs.map +1 -0
  298. package/dist/commands/datalakeDevResetCommand.mjs +125 -0
  299. package/dist/commands/datalakeDevResetCommand.mjs.map +1 -0
  300. package/dist/commands/datalakeDevStatusCommand.mjs +110 -0
  301. package/dist/commands/datalakeDevStatusCommand.mjs.map +1 -0
  302. package/dist/commands/datalakeDevUpCommand.mjs +268 -0
  303. package/dist/commands/datalakeDevUpCommand.mjs.map +1 -0
  304. package/dist/commands/datalakeFetchCommand.mjs +106 -0
  305. package/dist/commands/datalakeFetchCommand.mjs.map +1 -0
  306. package/dist/commands/datalakeGrantCommand.mjs +147 -0
  307. package/dist/commands/datalakeGrantCommand.mjs.map +1 -0
  308. package/dist/commands/datalakeListCommand.mjs +61 -0
  309. package/dist/commands/datalakeListCommand.mjs.map +1 -0
  310. package/dist/commands/datalakeLoginCommand.mjs +39 -0
  311. package/dist/commands/datalakeLoginCommand.mjs.map +1 -0
  312. package/dist/commands/datalakeLogoutCommand.mjs +20 -0
  313. package/dist/commands/datalakeLogoutCommand.mjs.map +1 -0
  314. package/dist/commands/datalakePushCommand.mjs +214 -0
  315. package/dist/commands/datalakePushCommand.mjs.map +1 -0
  316. package/dist/commands/datalakeRevokeCommand.mjs +127 -0
  317. package/dist/commands/datalakeRevokeCommand.mjs.map +1 -0
  318. package/dist/commands/datalakeTailCommand.mjs +144 -0
  319. package/dist/commands/datalakeTailCommand.mjs.map +1 -0
  320. package/dist/commands/datalakeTokenCommand.mjs +61 -0
  321. package/dist/commands/datalakeTokenCommand.mjs.map +1 -0
  322. package/dist/commands/datalakeUseCommand.mjs +35 -0
  323. package/dist/commands/datalakeUseCommand.mjs.map +1 -0
  324. package/dist/commands/detectCommand.mjs +419 -0
  325. package/dist/commands/detectCommand.mjs.map +1 -0
  326. package/dist/commands/hashCommand.mjs +976 -0
  327. package/dist/commands/hashCommand.mjs.map +1 -0
  328. package/dist/commands/hashCompareCommand.mjs +865 -0
  329. package/dist/commands/hashCompareCommand.mjs.map +1 -0
  330. package/dist/commands/index.mjs +8461 -0
  331. package/dist/commands/index.mjs.map +1 -0
  332. package/dist/commands/syncCommand.mjs +66 -0
  333. package/dist/commands/syncCommand.mjs.map +1 -0
  334. package/dist/commands/versionCommand.mjs +24 -0
  335. package/dist/commands/versionCommand.mjs.map +1 -0
  336. package/dist/commands/walletAccountCommand.mjs +536 -0
  337. package/dist/commands/walletAccountCommand.mjs.map +1 -0
  338. package/dist/commands/walletAccountDeriveCommand.mjs +415 -0
  339. package/dist/commands/walletAccountDeriveCommand.mjs.map +1 -0
  340. package/dist/commands/walletAccountLabelCommand.mjs +405 -0
  341. package/dist/commands/walletAccountLabelCommand.mjs.map +1 -0
  342. package/dist/commands/walletAccountListCommand.mjs +381 -0
  343. package/dist/commands/walletAccountListCommand.mjs.map +1 -0
  344. package/dist/commands/walletAccountRemoveCommand.mjs +396 -0
  345. package/dist/commands/walletAccountRemoveCommand.mjs.map +1 -0
  346. package/dist/commands/walletAccountShowCommand.mjs +380 -0
  347. package/dist/commands/walletAccountShowCommand.mjs.map +1 -0
  348. package/dist/commands/walletBackupCommand.mjs +222 -0
  349. package/dist/commands/walletBackupCommand.mjs.map +1 -0
  350. package/dist/commands/walletBackupExportCommand.mjs +107 -0
  351. package/dist/commands/walletBackupExportCommand.mjs.map +1 -0
  352. package/dist/commands/walletBackupImportCommand.mjs +154 -0
  353. package/dist/commands/walletBackupImportCommand.mjs.map +1 -0
  354. package/dist/commands/walletBalanceCommand.mjs +448 -0
  355. package/dist/commands/walletBalanceCommand.mjs.map +1 -0
  356. package/dist/commands/walletCommand.mjs +1968 -0
  357. package/dist/commands/walletCommand.mjs.map +1 -0
  358. package/dist/commands/walletContactAddCommand.mjs +111 -0
  359. package/dist/commands/walletContactAddCommand.mjs.map +1 -0
  360. package/dist/commands/walletContactCommand.mjs +184 -0
  361. package/dist/commands/walletContactCommand.mjs.map +1 -0
  362. package/dist/commands/walletContactListCommand.mjs +66 -0
  363. package/dist/commands/walletContactListCommand.mjs.map +1 -0
  364. package/dist/commands/walletContactRemoveCommand.mjs +97 -0
  365. package/dist/commands/walletContactRemoveCommand.mjs.map +1 -0
  366. package/dist/commands/walletContactRenameCommand.mjs +114 -0
  367. package/dist/commands/walletContactRenameCommand.mjs.map +1 -0
  368. package/dist/commands/walletCreateCommand.mjs +407 -0
  369. package/dist/commands/walletCreateCommand.mjs.map +1 -0
  370. package/dist/commands/walletExportCommand.mjs +345 -0
  371. package/dist/commands/walletExportCommand.mjs.map +1 -0
  372. package/dist/commands/walletImportCommand.mjs +413 -0
  373. package/dist/commands/walletImportCommand.mjs.map +1 -0
  374. package/dist/commands/walletListCommand.mjs +69 -0
  375. package/dist/commands/walletListCommand.mjs.map +1 -0
  376. package/dist/commands/walletLockCommand.mjs +56 -0
  377. package/dist/commands/walletLockCommand.mjs.map +1 -0
  378. package/dist/commands/walletNetworkAddCommand.mjs +131 -0
  379. package/dist/commands/walletNetworkAddCommand.mjs.map +1 -0
  380. package/dist/commands/walletNetworkCommand.mjs +206 -0
  381. package/dist/commands/walletNetworkCommand.mjs.map +1 -0
  382. package/dist/commands/walletNetworkListCommand.mjs +104 -0
  383. package/dist/commands/walletNetworkListCommand.mjs.map +1 -0
  384. package/dist/commands/walletNetworkRemoveCommand.mjs +112 -0
  385. package/dist/commands/walletNetworkRemoveCommand.mjs.map +1 -0
  386. package/dist/commands/walletNetworkUseCommand.mjs +110 -0
  387. package/dist/commands/walletNetworkUseCommand.mjs.map +1 -0
  388. package/dist/commands/walletPasswordChangeCommand.mjs +291 -0
  389. package/dist/commands/walletPasswordChangeCommand.mjs.map +1 -0
  390. package/dist/commands/walletPasswordCommand.mjs +301 -0
  391. package/dist/commands/walletPasswordCommand.mjs.map +1 -0
  392. package/dist/commands/walletRemoveCommand.mjs +378 -0
  393. package/dist/commands/walletRemoveCommand.mjs.map +1 -0
  394. package/dist/commands/walletRenameCommand.mjs +94 -0
  395. package/dist/commands/walletRenameCommand.mjs.map +1 -0
  396. package/dist/commands/walletSignCommand.mjs +662 -0
  397. package/dist/commands/walletSignCommand.mjs.map +1 -0
  398. package/dist/commands/walletTxBroadcastCommand.mjs +473 -0
  399. package/dist/commands/walletTxBroadcastCommand.mjs.map +1 -0
  400. package/dist/commands/walletTxCommand.mjs +612 -0
  401. package/dist/commands/walletTxCommand.mjs.map +1 -0
  402. package/dist/commands/walletTxSendCommand.mjs +492 -0
  403. package/dist/commands/walletTxSendCommand.mjs.map +1 -0
  404. package/dist/commands/walletTxSignCommand.mjs +403 -0
  405. package/dist/commands/walletTxSignCommand.mjs.map +1 -0
  406. package/dist/commands/walletUnlockCommand.mjs +308 -0
  407. package/dist/commands/walletUnlockCommand.mjs.map +1 -0
  408. package/dist/commands/walletUseCommand.mjs +95 -0
  409. package/dist/commands/walletUseCommand.mjs.map +1 -0
  410. package/dist/commands/xyoCommand.mjs +188 -0
  411. package/dist/commands/xyoCommand.mjs.map +1 -0
  412. package/dist/commands/xyoTxCommand.mjs +178 -0
  413. package/dist/commands/xyoTxCommand.mjs.map +1 -0
  414. package/dist/commands/xyoTxValidateCommand.mjs +168 -0
  415. package/dist/commands/xyoTxValidateCommand.mjs.map +1 -0
  416. package/dist/index.d.ts +3 -0
  417. package/dist/index.mjs +8466 -0
  418. package/dist/index.mjs.map +1 -0
  419. package/dist/types/modules.d.mjs +1 -0
  420. package/dist/types/modules.d.mjs.map +1 -0
  421. package/package.json +197 -0
@@ -0,0 +1,1439 @@
1
+ // src/actions/wallet/account/deriveAndAdd.ts
2
+ import chalk from "chalk";
3
+
4
+ // src/actions/wallet/paths.ts
5
+ import OS from "os";
6
+ import PATH from "path";
7
+ function walletRoot() {
8
+ const override = process.env.ARIES_WALLET_HOME;
9
+ if (override) return override;
10
+ return PATH.join(OS.homedir(), ".aries", "wallet");
11
+ }
12
+ function walletPaths(root = walletRoot()) {
13
+ return {
14
+ root,
15
+ password: PATH.join(root, "password.json"),
16
+ phrases: PATH.join(root, "phrases.json"),
17
+ active: PATH.join(root, "active.json"),
18
+ addressBooks: PATH.join(root, "address-books.json"),
19
+ contacts: PATH.join(root, "contacts.json"),
20
+ networks: PATH.join(root, "networks.json"),
21
+ session: PATH.join(root, "session.json"),
22
+ machineId: PATH.join(root, ".machine-id")
23
+ };
24
+ }
25
+
26
+ // src/actions/wallet/storage.ts
27
+ import FS from "fs";
28
+ import PATH2 from "path";
29
+ function ensureWalletDir(root = walletRoot()) {
30
+ if (!FS.existsSync(root)) {
31
+ FS.mkdirSync(root, { recursive: true, mode: 448 });
32
+ return;
33
+ }
34
+ try {
35
+ FS.chmodSync(root, 448);
36
+ } catch {
37
+ }
38
+ }
39
+ function readJsonFile(file) {
40
+ if (!FS.existsSync(file)) return void 0;
41
+ const raw = FS.readFileSync(file, "utf8");
42
+ if (raw.trim().length === 0) return void 0;
43
+ return JSON.parse(raw);
44
+ }
45
+ function writeJsonFile(file, value) {
46
+ ensureWalletDir(PATH2.dirname(file));
47
+ const tmp = `${file}.tmp`;
48
+ FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}
49
+ `, { mode: 384 });
50
+ FS.renameSync(tmp, file);
51
+ try {
52
+ FS.chmodSync(file, 384);
53
+ } catch {
54
+ }
55
+ }
56
+ function deleteFile(file) {
57
+ if (FS.existsSync(file)) FS.unlinkSync(file);
58
+ }
59
+
60
+ // src/actions/wallet/addressBook/storage.ts
61
+ var ADDRESS_BOOK_VERSION = 1;
62
+ function readAllAddressBooks() {
63
+ return readJsonFile(walletPaths().addressBooks) ?? {};
64
+ }
65
+ function writeAllAddressBooks(data) {
66
+ writeJsonFile(walletPaths().addressBooks, data);
67
+ }
68
+ function readAddressBook(rootAddress) {
69
+ const all = readAllAddressBooks();
70
+ const key = rootAddress.toLowerCase();
71
+ return all[key] ?? {
72
+ rootAddress: key,
73
+ entries: [{ offset: "0" }, { offset: "1" }, { offset: "2" }],
74
+ version: ADDRESS_BOOK_VERSION
75
+ };
76
+ }
77
+ function writeAddressBook(book) {
78
+ const all = readAllAddressBooks();
79
+ all[book.rootAddress.toLowerCase()] = book;
80
+ writeAllAddressBooks(all);
81
+ }
82
+ function removeAddressBook(rootAddress) {
83
+ const all = readAllAddressBooks();
84
+ const key = rootAddress.toLowerCase();
85
+ if (key in all) {
86
+ delete all[key];
87
+ writeAllAddressBooks(all);
88
+ }
89
+ }
90
+ function upsertAddressBookEntry(rootAddress, entry) {
91
+ const book = readAddressBook(rootAddress);
92
+ const existing = book.entries.find((e) => e.offset === entry.offset);
93
+ if (existing) {
94
+ if (entry.label !== void 0) existing.label = entry.label;
95
+ } else {
96
+ book.entries.push(entry);
97
+ }
98
+ writeAddressBook(book);
99
+ return book;
100
+ }
101
+ function removeAddressBookEntry(rootAddress, offset) {
102
+ const book = readAddressBook(rootAddress);
103
+ book.entries = book.entries.filter((e) => e.offset !== offset);
104
+ writeAddressBook(book);
105
+ return book;
106
+ }
107
+
108
+ // src/actions/wallet/account/getActiveWallet.ts
109
+ import { HDWallet } from "@xyo-network/sdk-js";
110
+ import { DEFAULT_WALLET_PATH } from "@xyo-network/xl1-protocol-sdk";
111
+
112
+ // src/actions/wallet/prompt.ts
113
+ import { execFileSync } from "child_process";
114
+ import {
115
+ closeSync,
116
+ openSync,
117
+ readSync,
118
+ writeSync
119
+ } from "fs";
120
+ var CTRL_C = 3;
121
+ var ENTER = 13;
122
+ var NEWLINE = 10;
123
+ var BACKSPACE_DELETE = 127;
124
+ var BACKSPACE = 8;
125
+ function readChars(readFd, writeFd, mask) {
126
+ const chars = [];
127
+ const buf = Buffer.alloc(1);
128
+ for (; ; ) {
129
+ const bytes = readSync(readFd, buf, 0, 1, null);
130
+ if (bytes === 0) break;
131
+ const ch = buf[0];
132
+ if (ch === ENTER || ch === NEWLINE) break;
133
+ if (ch === CTRL_C) {
134
+ writeSync(writeFd, "\n");
135
+ throw new Error("Aborted");
136
+ }
137
+ if (ch === BACKSPACE_DELETE || ch === BACKSPACE) {
138
+ if (chars.length > 0) {
139
+ chars.pop();
140
+ writeSync(writeFd, "\b \b");
141
+ }
142
+ continue;
143
+ }
144
+ chars.push(ch);
145
+ writeSync(writeFd, mask ? "*" : String.fromCodePoint(ch));
146
+ }
147
+ writeSync(writeFd, "\n");
148
+ return Buffer.from(chars).toString("utf8");
149
+ }
150
+ function saveStty(readFd) {
151
+ try {
152
+ return execFileSync("stty", ["-g"], {
153
+ stdio: [readFd, "pipe", "ignore"],
154
+ encoding: "utf8"
155
+ }).trim();
156
+ } catch {
157
+ return void 0;
158
+ }
159
+ }
160
+ function applyStty(readFd, args) {
161
+ try {
162
+ execFileSync("stty", args, { stdio: [readFd, "ignore", "ignore"] });
163
+ } catch {
164
+ }
165
+ }
166
+ function promptTty(options) {
167
+ const readFd = openSync("/dev/tty", "r");
168
+ const writeFd = openSync("/dev/tty", "w");
169
+ const saved = saveStty(readFd);
170
+ try {
171
+ if (saved) applyStty(readFd, ["-echo", "-icanon", "min", "1", "time", "0"]);
172
+ writeSync(writeFd, options.prompt);
173
+ return readChars(readFd, writeFd, options.mask === true);
174
+ } finally {
175
+ if (saved) applyStty(readFd, [saved]);
176
+ try {
177
+ closeSync(readFd);
178
+ } catch {
179
+ }
180
+ try {
181
+ closeSync(writeFd);
182
+ } catch {
183
+ }
184
+ }
185
+ }
186
+ function promptPassword(prompt = "Password: ") {
187
+ const env = process.env.ARIES_WALLET_PASSWORD;
188
+ if (env !== void 0 && env.length > 0) return env;
189
+ return promptTty({ prompt, mask: true });
190
+ }
191
+ function promptText(prompt) {
192
+ return promptTty({ prompt, mask: false });
193
+ }
194
+
195
+ // src/actions/wallet/session/sessionCache.ts
196
+ import { webcrypto as webcrypto3 } from "crypto";
197
+
198
+ // src/actions/wallet/passwordKey.ts
199
+ import { webcrypto } from "crypto";
200
+ var subtle = webcrypto.subtle;
201
+ var INITIALIZATION_VECTOR_LENGTH = 12;
202
+ var PBKDF2_ITERATIONS = 1e5;
203
+ var SALT_BYTES = 16;
204
+ var PasswordKey = class _PasswordKey {
205
+ password;
206
+ salt;
207
+ constructor(password, salt = _PasswordKey.generateSalt()) {
208
+ this.password = password;
209
+ this.salt = salt;
210
+ }
211
+ static async decryptString(key, data) {
212
+ const encryptedData = new Uint8Array(Buffer.from(data, "base64"));
213
+ const iv = encryptedData.slice(0, INITIALIZATION_VECTOR_LENGTH);
214
+ const ciphertext = encryptedData.slice(INITIALIZATION_VECTOR_LENGTH);
215
+ const decrypted = await subtle.decrypt({ name: "AES-GCM", iv }, key, ciphertext);
216
+ return new TextDecoder("utf-8").decode(decrypted);
217
+ }
218
+ static async encryptString(key, data) {
219
+ const iv = webcrypto.getRandomValues(new Uint8Array(INITIALIZATION_VECTOR_LENGTH));
220
+ const ciphertext = await subtle.encrypt({ name: "AES-GCM", iv }, key, new TextEncoder().encode(data));
221
+ const combined = new Uint8Array(iv.length + ciphertext.byteLength);
222
+ combined.set(iv, 0);
223
+ combined.set(new Uint8Array(ciphertext), iv.length);
224
+ return Buffer.from(combined).toString("base64");
225
+ }
226
+ static generateSalt() {
227
+ const array = new Uint8Array(SALT_BYTES);
228
+ webcrypto.getRandomValues(array);
229
+ return [...array].map((byte) => byte.toString(16).padStart(2, "0")).join("");
230
+ }
231
+ static async getHashFromKey(key) {
232
+ const exported = await subtle.exportKey("raw", key);
233
+ const digest = await subtle.digest("SHA-256", exported);
234
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
235
+ }
236
+ static async importEncryptionKey(rawKey) {
237
+ return await subtle.importKey("raw", rawKey, { name: "AES-GCM" }, false, ["encrypt", "decrypt"]);
238
+ }
239
+ static async importExtractableKey(rawKey) {
240
+ return await subtle.importKey("raw", rawKey, { name: "AES-GCM" }, true, ["encrypt", "decrypt"]);
241
+ }
242
+ static async serializeKey(key, salt = _PasswordKey.generateSalt()) {
243
+ const hash = await _PasswordKey.getHashFromKey(key);
244
+ return { hash, salt };
245
+ }
246
+ async deriveKey() {
247
+ const encoder = new TextEncoder();
248
+ const passphraseKey = await subtle.importKey(
249
+ "raw",
250
+ encoder.encode(this.password),
251
+ { name: "PBKDF2" },
252
+ false,
253
+ ["deriveKey"]
254
+ );
255
+ return await subtle.deriveKey(
256
+ {
257
+ name: "PBKDF2",
258
+ salt: encoder.encode(this.salt),
259
+ iterations: PBKDF2_ITERATIONS,
260
+ hash: "SHA-256"
261
+ },
262
+ passphraseKey,
263
+ { name: "AES-GCM", length: 256 },
264
+ true,
265
+ ["encrypt", "decrypt"]
266
+ );
267
+ }
268
+ };
269
+ async function encryptWithKey(key, data) {
270
+ const exported = await subtle.exportKey("raw", key);
271
+ const encKey = await PasswordKey.importEncryptionKey(exported);
272
+ return await PasswordKey.encryptString(encKey, data);
273
+ }
274
+ async function decryptWithKey(key, data) {
275
+ const exported = await subtle.exportKey("raw", key);
276
+ const encKey = await PasswordKey.importEncryptionKey(exported);
277
+ return await PasswordKey.decryptString(encKey, data);
278
+ }
279
+
280
+ // src/actions/wallet/session/machineId.ts
281
+ import { webcrypto as webcrypto2 } from "crypto";
282
+ import FS2 from "fs";
283
+ import OS2 from "os";
284
+ function generateMachineSecret() {
285
+ const bytes = new Uint8Array(32);
286
+ webcrypto2.getRandomValues(bytes);
287
+ return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
288
+ }
289
+ function loadMachineSecret() {
290
+ ensureWalletDir();
291
+ const path = walletPaths().machineId;
292
+ if (FS2.existsSync(path)) {
293
+ return FS2.readFileSync(path, "utf8").trim();
294
+ }
295
+ const secret = generateMachineSecret();
296
+ FS2.writeFileSync(path, `${secret}
297
+ `, { mode: 384 });
298
+ try {
299
+ FS2.chmodSync(path, 384);
300
+ } catch {
301
+ }
302
+ return secret;
303
+ }
304
+ async function deriveMachineKey() {
305
+ const secret = loadMachineSecret();
306
+ const stable = `${OS2.hostname()}:${OS2.userInfo().username}:${secret}`;
307
+ const passwordKey = new PasswordKey(stable, "aries-wallet-machine-kek-v1");
308
+ return await passwordKey.deriveKey();
309
+ }
310
+
311
+ // src/actions/wallet/session/sessionCache.ts
312
+ var subtle2 = webcrypto3.subtle;
313
+ var DEFAULT_SESSION_TTL_SECONDS = 15 * 60;
314
+ async function unlockSession(passwordKey, ttlSeconds = DEFAULT_SESSION_TTL_SECONDS) {
315
+ const machineKey = await deriveMachineKey();
316
+ const exported = await subtle2.exportKey("raw", passwordKey);
317
+ const exportedBase64 = Buffer.from(new Uint8Array(exported)).toString("base64");
318
+ const encryptedKey = await encryptWithKey(machineKey, exportedBase64);
319
+ const expiresAt = Date.now() + ttlSeconds * 1e3;
320
+ const data = { encryptedKey, expiresAt };
321
+ writeJsonFile(walletPaths().session, data);
322
+ return expiresAt;
323
+ }
324
+ function lockSession() {
325
+ deleteFile(walletPaths().session);
326
+ }
327
+ async function readSession() {
328
+ const data = readJsonFile(walletPaths().session);
329
+ if (!data) return void 0;
330
+ if (data.expiresAt <= Date.now()) {
331
+ lockSession();
332
+ return void 0;
333
+ }
334
+ try {
335
+ const machineKey = await deriveMachineKey();
336
+ const exportedBase64 = await decryptWithKey(machineKey, data.encryptedKey);
337
+ const raw = Buffer.from(exportedBase64, "base64");
338
+ return await PasswordKey.importExtractableKey(
339
+ raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength)
340
+ );
341
+ } catch {
342
+ lockSession();
343
+ return void 0;
344
+ }
345
+ }
346
+
347
+ // src/actions/wallet/password/passwordStorage.ts
348
+ function readPassword() {
349
+ return readJsonFile(walletPaths().password);
350
+ }
351
+ function writePassword(values) {
352
+ writeJsonFile(walletPaths().password, values);
353
+ }
354
+ function hasPassword() {
355
+ return readPassword() !== void 0;
356
+ }
357
+
358
+ // src/actions/wallet/password/validatePassword.ts
359
+ async function validatePassword(password) {
360
+ const stored = readPassword();
361
+ if (!stored) return void 0;
362
+ const passwordKey = new PasswordKey(password, stored.salt);
363
+ const key = await passwordKey.deriveKey();
364
+ const hash = await PasswordKey.getHashFromKey(key);
365
+ if (hash !== stored.hash) return void 0;
366
+ return key;
367
+ }
368
+
369
+ // src/actions/wallet/password/getActiveKey.ts
370
+ async function getActiveKey() {
371
+ if (!hasPassword()) {
372
+ throw new Error("Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.");
373
+ }
374
+ const cached = await readSession();
375
+ if (cached) return cached;
376
+ const password = promptPassword("Wallet password: ");
377
+ const key = await validatePassword(password);
378
+ if (!key) throw new Error("Incorrect password.");
379
+ return key;
380
+ }
381
+
382
+ // src/actions/wallet/seedPhrase/phraseStorage.ts
383
+ function readPhrases() {
384
+ const data = readJsonFile(walletPaths().phrases);
385
+ return data?.phrases ?? [];
386
+ }
387
+ function writePhrases(phrases) {
388
+ writeJsonFile(walletPaths().phrases, { phrases });
389
+ }
390
+ function readActive() {
391
+ return readJsonFile(walletPaths().active) ?? {};
392
+ }
393
+ function writeActive(active) {
394
+ writeJsonFile(walletPaths().active, active);
395
+ }
396
+ function findPhrase(id) {
397
+ return readPhrases().find((p) => p.id === id || p.label === id);
398
+ }
399
+ function getActivePhrase() {
400
+ const phrases = readPhrases();
401
+ if (phrases.length === 0) return void 0;
402
+ const active = readActive();
403
+ if (active.phraseId) {
404
+ const found = phrases.find((p) => p.id === active.phraseId);
405
+ if (found) return found;
406
+ }
407
+ return phrases[0];
408
+ }
409
+
410
+ // src/actions/wallet/account/getActiveWallet.ts
411
+ async function getActiveWallet() {
412
+ const record = getActivePhrase();
413
+ if (!record) throw new Error("No active wallet. Run `aries wallet create` or `aries wallet import` first.");
414
+ const key = await getActiveKey();
415
+ const mnemonic = await decryptWithKey(key, record.encryptedPhrase);
416
+ const rootWallet = await HDWallet.fromPhrase(mnemonic, DEFAULT_WALLET_PATH);
417
+ return {
418
+ record,
419
+ mnemonic,
420
+ rootWallet
421
+ };
422
+ }
423
+ async function deriveAccount(rootWallet, offset) {
424
+ return await rootWallet.derivePath(offset);
425
+ }
426
+
427
+ // src/actions/wallet/account/deriveAndAdd.ts
428
+ async function deriveAndAdd(options) {
429
+ const { rootWallet } = await getActiveWallet();
430
+ const account = await deriveAccount(rootWallet, options.offset);
431
+ upsertAddressBookEntry(rootWallet.address, { offset: options.offset, label: options.label });
432
+ console.log(chalk.green(`Derived account at offset ${chalk.cyan(options.offset)}: 0x${account.address}`));
433
+ if (options.label) console.log(chalk.gray(` label: ${options.label}`));
434
+ }
435
+
436
+ // src/actions/wallet/account/labelAccount.ts
437
+ import chalk2 from "chalk";
438
+ async function labelAccount(offset, label) {
439
+ const { rootWallet } = await getActiveWallet();
440
+ upsertAddressBookEntry(rootWallet.address, { offset, label });
441
+ console.log(chalk2.green(`Labeled account ${chalk2.cyan(offset)} as ${chalk2.white(label)}`));
442
+ }
443
+
444
+ // src/actions/wallet/account/listAccounts.ts
445
+ import chalk3 from "chalk";
446
+ async function listAccounts() {
447
+ const { record, rootWallet } = await getActiveWallet();
448
+ const book = readAddressBook(rootWallet.address);
449
+ console.log(chalk3.cyan(`Wallet ${record.label} (${record.id})`));
450
+ console.log(chalk3.gray(` root: ${rootWallet.address}`));
451
+ console.log();
452
+ if (book.entries.length === 0) {
453
+ console.log(chalk3.gray(" No derived accounts. Run `aries wallet account derive <offset>`."));
454
+ return;
455
+ }
456
+ for (const entry of book.entries) {
457
+ const account = await deriveAccount(rootWallet, entry.offset);
458
+ const offset = chalk3.cyan(entry.offset.padEnd(6));
459
+ const label = chalk3.white((entry.label ?? "").padEnd(20));
460
+ console.log(` ${offset} ${label} 0x${account.address}`);
461
+ }
462
+ }
463
+
464
+ // src/actions/wallet/account/removeAccount.ts
465
+ import chalk4 from "chalk";
466
+ async function removeAccount(offset) {
467
+ const { rootWallet } = await getActiveWallet();
468
+ removeAddressBookEntry(rootWallet.address, offset);
469
+ console.log(chalk4.green(`Removed account at offset ${chalk4.cyan(offset)} from address book`));
470
+ }
471
+
472
+ // src/actions/wallet/account/showAccount.ts
473
+ import chalk5 from "chalk";
474
+ async function showAccount(offset) {
475
+ const { rootWallet } = await getActiveWallet();
476
+ const book = readAddressBook(rootWallet.address);
477
+ const entry = book.entries.find((e) => e.offset === offset);
478
+ const account = await deriveAccount(rootWallet, offset);
479
+ console.log(chalk5.cyan(`Account ${offset}`));
480
+ console.log(` ${chalk5.gray("label:")} ${entry?.label ?? "\u2014"}`);
481
+ console.log(` ${chalk5.gray("address:")} 0x${account.address}`);
482
+ if (account.public) console.log(` ${chalk5.gray("public:")} ${account.public.hex}`);
483
+ console.log(` ${chalk5.gray("path:")} ${offset}`);
484
+ }
485
+
486
+ // src/actions/wallet/backup/exportBackup.ts
487
+ import FS3 from "fs";
488
+ import chalk6 from "chalk";
489
+
490
+ // src/actions/wallet/contact/storage.ts
491
+ var CONTACTS_VERSION = 1;
492
+ function readContacts() {
493
+ return readJsonFile(walletPaths().contacts) ?? {
494
+ entries: [],
495
+ version: CONTACTS_VERSION
496
+ };
497
+ }
498
+ function writeContacts(file) {
499
+ writeJsonFile(walletPaths().contacts, file);
500
+ }
501
+
502
+ // src/actions/wallet/backup/exportBackup.ts
503
+ var SCHEMA = "network.xyo.wallet.backup";
504
+ var VERSION = 1;
505
+ var ADDRESS_BOOK_SCHEMA = "network.xyo.wallet.addressBook";
506
+ var CONTACTS_SCHEMA = "network.xyo.wallet.contacts";
507
+ function exportBackup(options) {
508
+ const exportedAt = (/* @__PURE__ */ new Date()).toISOString();
509
+ const entries = [];
510
+ const sources = [];
511
+ const addressBooks = readAllAddressBooks();
512
+ for (const book of Object.values(addressBooks)) {
513
+ entries.push({
514
+ ...book,
515
+ schema: ADDRESS_BOOK_SCHEMA,
516
+ exportedAt
517
+ });
518
+ if (!sources.includes(ADDRESS_BOOK_SCHEMA)) sources.push(ADDRESS_BOOK_SCHEMA);
519
+ }
520
+ const contacts = readContacts();
521
+ if (contacts.entries.length > 0) {
522
+ entries.push({
523
+ ...contacts,
524
+ schema: CONTACTS_SCHEMA,
525
+ exportedAt
526
+ });
527
+ sources.push(CONTACTS_SCHEMA);
528
+ }
529
+ const backup = {
530
+ schema: SCHEMA,
531
+ version: VERSION,
532
+ entries,
533
+ exportedAt,
534
+ sources
535
+ };
536
+ FS3.writeFileSync(options.file, `${JSON.stringify(backup, null, 2)}
537
+ `, { mode: 384 });
538
+ console.log(chalk6.green(`Backup written to ${options.file}`));
539
+ console.log(chalk6.gray(` ${entries.length} entries, sources: ${sources.join(", ")}`));
540
+ }
541
+
542
+ // src/actions/wallet/backup/importBackup.ts
543
+ import FS4 from "fs";
544
+ import chalk7 from "chalk";
545
+ function importBackup(options) {
546
+ const raw = FS4.readFileSync(options.file, "utf8");
547
+ const parsed = JSON.parse(raw);
548
+ if (parsed.schema !== "network.xyo.wallet.backup") {
549
+ throw new Error(`Not a wallet backup (schema=${parsed.schema}).`);
550
+ }
551
+ const allBooks = readAllAddressBooks();
552
+ let booksImported = 0;
553
+ let contactsImported = 0;
554
+ const existingContacts = readContacts();
555
+ for (const entry of parsed.entries) {
556
+ if (entry.schema === "network.xyo.wallet.addressBook") {
557
+ const book = entry;
558
+ const key = book.rootAddress.toLowerCase();
559
+ const merged = allBooks[key] ? mergeAddressBooks(allBooks[key], book) : {
560
+ rootAddress: key,
561
+ entries: book.entries,
562
+ version: book.version
563
+ };
564
+ allBooks[key] = merged;
565
+ booksImported++;
566
+ } else if (entry.schema === "network.xyo.wallet.contacts") {
567
+ const contacts = entry;
568
+ for (const contact of contacts.entries) {
569
+ upsertContact(existingContacts, contact);
570
+ contactsImported++;
571
+ }
572
+ }
573
+ }
574
+ if (booksImported > 0) writeAllAddressBooks(allBooks);
575
+ if (contactsImported > 0) writeContacts(existingContacts);
576
+ console.log(chalk7.green(`Imported backup from ${options.file}`));
577
+ console.log(chalk7.gray(` address books: ${booksImported}, contacts: ${contactsImported}`));
578
+ }
579
+ function mergeAddressBooks(existing, incoming) {
580
+ const merged = {
581
+ rootAddress: existing.rootAddress,
582
+ version: Math.max(existing.version, incoming.version),
583
+ entries: [...existing.entries]
584
+ };
585
+ for (const entry of incoming.entries) {
586
+ const found = merged.entries.find((e) => e.offset === entry.offset);
587
+ if (found) {
588
+ if (entry.label !== void 0) found.label = entry.label;
589
+ } else {
590
+ merged.entries.push(entry);
591
+ }
592
+ }
593
+ return merged;
594
+ }
595
+ function upsertContact(file, contact) {
596
+ const normalized = contact.address.toLowerCase();
597
+ const found = file.entries.find((e) => e.address.toLowerCase() === normalized);
598
+ if (found) {
599
+ found.label = contact.label;
600
+ found.updatedAt = contact.updatedAt;
601
+ } else {
602
+ file.entries.push({ ...contact, address: normalized });
603
+ }
604
+ }
605
+
606
+ // src/actions/wallet/balance/getBalance.ts
607
+ import { XL1Amount } from "@xyo-network/xl1-protocol-sdk";
608
+ import chalk8 from "chalk";
609
+
610
+ // src/actions/wallet/client/walletClient.ts
611
+ import {
612
+ basicRemoteViewerLocator,
613
+ ProviderFactoryLocator,
614
+ SimpleXyoConnectionRunner,
615
+ SimpleXyoGatewayRunner,
616
+ SimpleXyoRunner,
617
+ SimpleXyoSigner,
618
+ XyoGatewayRunnerMoniker,
619
+ XyoRunnerMoniker,
620
+ XyoViewerMoniker
621
+ } from "@xyo-network/xl1-sdk";
622
+ async function loadValidators() {
623
+ try {
624
+ const mod = await import("@xyo-network/chain-validation");
625
+ return {
626
+ validateHydratedBlock: mod.validateHydratedBlock,
627
+ validateHydratedBlockState: mod.validateHydratedBlockState
628
+ };
629
+ } catch {
630
+ return void 0;
631
+ }
632
+ }
633
+ async function createReadOnlyClient(rpcUrl) {
634
+ const validators = await loadValidators();
635
+ const viewerLocator = await basicRemoteViewerLocator(
636
+ "aries-wallet-readonly",
637
+ { rpc: { protocol: "http", url: rpcUrl } },
638
+ void 0,
639
+ validators ? { validators } : void 0
640
+ );
641
+ const viewer = await viewerLocator.getInstance(XyoViewerMoniker);
642
+ return { viewer, locator: viewerLocator };
643
+ }
644
+ async function createWalletClient(rpcUrl, account) {
645
+ const validators = await loadValidators();
646
+ const viewerLocator = await basicRemoteViewerLocator(
647
+ "aries-wallet",
648
+ { rpc: { protocol: "http", url: rpcUrl } },
649
+ void 0,
650
+ validators ? { validators } : void 0
651
+ );
652
+ const locator = new ProviderFactoryLocator(viewerLocator.context, {});
653
+ locator.register(SimpleXyoSigner.factory(SimpleXyoSigner.dependencies, { account }));
654
+ locator.register(SimpleXyoGatewayRunner.factory(SimpleXyoGatewayRunner.dependencies, {}));
655
+ locator.register(SimpleXyoRunner.factory(SimpleXyoRunner.dependencies, {}));
656
+ locator.register(SimpleXyoConnectionRunner.factory(SimpleXyoConnectionRunner.dependencies, {}));
657
+ locator.validateDependencies();
658
+ const gateway = await locator.getInstance(XyoGatewayRunnerMoniker);
659
+ const runner = await locator.getInstance(XyoRunnerMoniker);
660
+ const viewer = await locator.getInstance(XyoViewerMoniker);
661
+ return {
662
+ gateway,
663
+ runner,
664
+ viewer,
665
+ connection: gateway.connection,
666
+ locator
667
+ };
668
+ }
669
+
670
+ // src/actions/wallet/network/storage.ts
671
+ var DEFAULT_NETWORKS = [
672
+ {
673
+ id: "xl1-mainnet",
674
+ label: "XL1 Mainnet",
675
+ rpcUrl: "https://node.xyo.network",
676
+ isCustom: false
677
+ },
678
+ {
679
+ id: "xl1-testnet",
680
+ label: "XL1 Testnet",
681
+ rpcUrl: "https://testnet.node.xyo.network",
682
+ isCustom: false
683
+ }
684
+ ];
685
+ function readNetworks() {
686
+ const data = readJsonFile(walletPaths().networks);
687
+ if (data) return data;
688
+ const seeded = {
689
+ networks: DEFAULT_NETWORKS,
690
+ activeId: DEFAULT_NETWORKS[0].id
691
+ };
692
+ writeJsonFile(walletPaths().networks, seeded);
693
+ return seeded;
694
+ }
695
+ function writeNetworks(file) {
696
+ writeJsonFile(walletPaths().networks, file);
697
+ }
698
+ function getActiveNetwork() {
699
+ const file = readNetworks();
700
+ const found = file.networks.find((n) => n.id === file.activeId);
701
+ if (!found) throw new Error(`Active network ${file.activeId} not found.`);
702
+ return found;
703
+ }
704
+
705
+ // src/actions/wallet/balance/getBalance.ts
706
+ async function getBalance(options = {}) {
707
+ const offset = options.offset ?? "0";
708
+ const { rootWallet } = await getActiveWallet();
709
+ const account = await deriveAccount(rootWallet, offset);
710
+ const network = getActiveNetwork();
711
+ const { viewer } = await createReadOnlyClient(network.rpcUrl);
712
+ const atto = await viewer.account.balance.accountBalance(account.address);
713
+ const display = new XL1Amount(atto).toString();
714
+ console.log(`${chalk8.cyan("balance:")} ${display} XL1`);
715
+ console.log(`${chalk8.gray("atto:")} ${atto}`);
716
+ console.log(`${chalk8.gray("address:")} 0x${account.address}`);
717
+ console.log(`${chalk8.gray("network:")} ${network.id} (${network.rpcUrl})`);
718
+ }
719
+
720
+ // src/actions/wallet/contact/contactActions.ts
721
+ import chalk9 from "chalk";
722
+ function normalize(address) {
723
+ return address.toLowerCase();
724
+ }
725
+ function listContacts() {
726
+ const file = readContacts();
727
+ if (file.entries.length === 0) {
728
+ console.log(chalk9.gray("No contacts. Run `aries wallet contact add <address> <label>` to add one."));
729
+ return;
730
+ }
731
+ for (const entry of file.entries) {
732
+ console.log(` ${chalk9.white(entry.label.padEnd(20))} ${entry.address}`);
733
+ }
734
+ }
735
+ function addContact(address, label) {
736
+ const file = readContacts();
737
+ const now = (/* @__PURE__ */ new Date()).toISOString();
738
+ const normalized = normalize(address);
739
+ const existing = file.entries.find((e) => normalize(e.address) === normalized);
740
+ if (existing) {
741
+ existing.label = label;
742
+ existing.updatedAt = now;
743
+ } else {
744
+ file.entries.push({
745
+ address: normalized,
746
+ label,
747
+ createdAt: now,
748
+ updatedAt: now
749
+ });
750
+ }
751
+ writeContacts(file);
752
+ console.log(chalk9.green(`Saved contact ${chalk9.cyan(label)} (${normalized})`));
753
+ }
754
+ function renameContact(address, label) {
755
+ addContact(address, label);
756
+ }
757
+ function removeContact(address) {
758
+ const file = readContacts();
759
+ const normalized = normalize(address);
760
+ const before = file.entries.length;
761
+ file.entries = file.entries.filter((e) => normalize(e.address) !== normalized);
762
+ if (file.entries.length === before) throw new Error(`Contact not found: ${address}`);
763
+ writeContacts(file);
764
+ console.log(chalk9.green(`Removed contact ${normalized}`));
765
+ }
766
+
767
+ // src/actions/wallet/network/networkActions.ts
768
+ import chalk10 from "chalk";
769
+ function listNetworks() {
770
+ const file = readNetworks();
771
+ for (const network of file.networks) {
772
+ const marker = network.id === file.activeId ? chalk10.green("* ") : " ";
773
+ const id = chalk10.cyan(network.id.padEnd(20));
774
+ const label = chalk10.white(network.label.padEnd(20));
775
+ const custom = network.isCustom ? chalk10.gray("(custom)") : "";
776
+ console.log(`${marker}${id} ${label} ${network.rpcUrl} ${custom}`);
777
+ }
778
+ }
779
+ function useNetwork(id) {
780
+ const file = readNetworks();
781
+ const found = file.networks.find((n) => n.id === id);
782
+ if (!found) throw new Error(`Network not found: ${id}`);
783
+ file.activeId = id;
784
+ writeNetworks(file);
785
+ console.log(chalk10.green(`Active network set to ${chalk10.cyan(id)}`));
786
+ }
787
+ function addNetwork(options) {
788
+ const file = readNetworks();
789
+ if (file.networks.some((n) => n.id === options.id)) {
790
+ throw new Error(`Network already exists: ${options.id}`);
791
+ }
792
+ const record = {
793
+ id: options.id,
794
+ label: options.label ?? options.id,
795
+ rpcUrl: options.rpcUrl,
796
+ chainId: options.chainId,
797
+ isCustom: true
798
+ };
799
+ file.networks.push(record);
800
+ writeNetworks(file);
801
+ console.log(chalk10.green(`Added network ${chalk10.cyan(options.id)} (${options.rpcUrl})`));
802
+ }
803
+ function removeNetwork(id) {
804
+ const file = readNetworks();
805
+ const target = file.networks.find((n) => n.id === id);
806
+ if (!target) throw new Error(`Network not found: ${id}`);
807
+ if (!target.isCustom) throw new Error(`Cannot remove built-in network: ${id}`);
808
+ file.networks = file.networks.filter((n) => n.id !== id);
809
+ if (file.activeId === id) file.activeId = file.networks[0]?.id ?? "";
810
+ writeNetworks(file);
811
+ console.log(chalk10.green(`Removed network ${chalk10.cyan(id)}`));
812
+ }
813
+
814
+ // src/actions/wallet/password/changePassword.ts
815
+ import chalk11 from "chalk";
816
+ async function changePassword() {
817
+ const current = promptPassword("Current password: ");
818
+ const oldKey = await validatePassword(current);
819
+ if (!oldKey) throw new Error("Incorrect password.");
820
+ const next = promptPassword("New password: ");
821
+ const confirmed = promptPassword("Confirm new password: ");
822
+ if (next !== confirmed) throw new Error("Passwords do not match.");
823
+ if (next.length === 0) throw new Error("Password cannot be empty.");
824
+ const salt = PasswordKey.generateSalt();
825
+ const newKey = await new PasswordKey(next, salt).deriveKey();
826
+ const phrases = readPhrases();
827
+ for (const phrase of phrases) {
828
+ const mnemonic = await decryptWithKey(oldKey, phrase.encryptedPhrase);
829
+ phrase.encryptedPhrase = await encryptWithKey(newKey, mnemonic);
830
+ }
831
+ writePhrases(phrases);
832
+ writePassword(await PasswordKey.serializeKey(newKey, salt));
833
+ lockSession();
834
+ console.log(chalk11.green("Password changed. Re-unlock to start a new session."));
835
+ }
836
+
837
+ // src/actions/wallet/seedPhrase/createPhrase.ts
838
+ import { HDWallet as HDWallet2 } from "@xyo-network/sdk-js";
839
+ import chalk12 from "chalk";
840
+
841
+ // src/actions/wallet/password/setPassword.ts
842
+ async function setPassword(password) {
843
+ if (password.length === 0) throw new Error("Password cannot be empty");
844
+ const salt = PasswordKey.generateSalt();
845
+ const passwordKey = new PasswordKey(password, salt);
846
+ const key = await passwordKey.deriveKey();
847
+ const values = await PasswordKey.serializeKey(key, salt);
848
+ writePassword(values);
849
+ return { key, salt };
850
+ }
851
+
852
+ // src/actions/wallet/password/initOrUnlock.ts
853
+ async function initOrUnlock() {
854
+ if (hasPassword()) return await getActiveKey();
855
+ const fromEnv = process.env.ARIES_WALLET_PASSWORD;
856
+ if (fromEnv !== void 0 && fromEnv.length > 0) {
857
+ const { key: key2 } = await setPassword(fromEnv);
858
+ return key2;
859
+ }
860
+ const password = promptPassword("Set wallet password: ");
861
+ const confirmed = promptPassword("Confirm password: ");
862
+ if (password !== confirmed) throw new Error("Passwords do not match.");
863
+ const { key } = await setPassword(password);
864
+ return key;
865
+ }
866
+
867
+ // src/actions/wallet/seedPhrase/idGen.ts
868
+ import { webcrypto as webcrypto4 } from "crypto";
869
+ function generatePhraseId() {
870
+ const bytes = new Uint8Array(8);
871
+ webcrypto4.getRandomValues(bytes);
872
+ return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
873
+ }
874
+
875
+ // src/actions/wallet/seedPhrase/createPhrase.ts
876
+ async function createPhrase(options) {
877
+ const key = await initOrUnlock();
878
+ const mnemonic = HDWallet2.generateMnemonic();
879
+ const encryptedPhrase = await encryptWithKey(key, mnemonic);
880
+ const record = {
881
+ id: generatePhraseId(),
882
+ label: options.label,
883
+ walletKind: "user",
884
+ encryptedPhrase,
885
+ createdAt: Date.now()
886
+ };
887
+ const phrases = readPhrases();
888
+ phrases.push(record);
889
+ writePhrases(phrases);
890
+ if (phrases.length === 1) writeActive({ phraseId: record.id });
891
+ console.log(chalk12.green(`Created wallet ${chalk12.cyan(record.label)} (id ${record.id})`));
892
+ console.log();
893
+ console.log(chalk12.yellow("Recovery phrase \u2014 write this down and store it safely:"));
894
+ console.log();
895
+ console.log(` ${chalk12.white(mnemonic)}`);
896
+ console.log();
897
+ console.log(chalk12.gray("You will not be shown this phrase again unless you run `aries wallet export`."));
898
+ return record;
899
+ }
900
+
901
+ // src/actions/wallet/seedPhrase/exportPhrase.ts
902
+ import chalk13 from "chalk";
903
+ async function exportPhrase(options = {}) {
904
+ const record = options.id ? findPhrase(options.id) : getActivePhrase();
905
+ if (!record) throw new Error("Wallet not found.");
906
+ const key = await getActiveKey();
907
+ const mnemonic = await decryptWithKey(key, record.encryptedPhrase);
908
+ console.log(chalk13.yellow(`Recovery phrase for ${chalk13.cyan(record.label)} (id ${record.id}):`));
909
+ console.log();
910
+ console.log(` ${chalk13.white(mnemonic)}`);
911
+ return mnemonic;
912
+ }
913
+
914
+ // src/actions/wallet/seedPhrase/importPhrase.ts
915
+ import { HDWallet as HDWallet3 } from "@xyo-network/sdk-js";
916
+ import chalk14 from "chalk";
917
+ async function importPhrase(options) {
918
+ const key = await initOrUnlock();
919
+ const mnemonic = (options.phrase ?? promptText("Recovery phrase: ")).trim();
920
+ if (mnemonic.split(/\s+/).length < 12) {
921
+ throw new Error("Recovery phrase must be at least 12 words.");
922
+ }
923
+ await HDWallet3.fromPhrase(mnemonic);
924
+ const encryptedPhrase = await encryptWithKey(key, mnemonic);
925
+ const record = {
926
+ id: generatePhraseId(),
927
+ label: options.label,
928
+ walletKind: "user",
929
+ encryptedPhrase,
930
+ createdAt: Date.now()
931
+ };
932
+ const phrases = readPhrases();
933
+ phrases.push(record);
934
+ writePhrases(phrases);
935
+ if (phrases.length === 1) writeActive({ phraseId: record.id });
936
+ console.log(chalk14.green(`Imported wallet ${chalk14.cyan(record.label)} (id ${record.id})`));
937
+ return record;
938
+ }
939
+
940
+ // src/actions/wallet/seedPhrase/listPhrases.ts
941
+ import chalk15 from "chalk";
942
+ function listPhrases() {
943
+ const phrases = readPhrases();
944
+ if (phrases.length === 0) {
945
+ console.log(chalk15.gray("No wallets. Run `aries wallet create` or `aries wallet import` to add one."));
946
+ return;
947
+ }
948
+ const active = readActive();
949
+ for (const phrase of phrases) {
950
+ const marker = phrase.id === active.phraseId ? chalk15.green("* ") : " ";
951
+ const created = new Date(phrase.createdAt).toISOString();
952
+ console.log(`${marker}${chalk15.cyan(phrase.label.padEnd(20))} ${chalk15.gray(phrase.id)} ${chalk15.gray(created)}`);
953
+ }
954
+ }
955
+
956
+ // src/actions/wallet/seedPhrase/removePhrase.ts
957
+ import { HDWallet as HDWallet4 } from "@xyo-network/sdk-js";
958
+ import { DEFAULT_WALLET_PATH as DEFAULT_WALLET_PATH2 } from "@xyo-network/xl1-protocol-sdk";
959
+ import chalk16 from "chalk";
960
+ async function removePhrase(options) {
961
+ const phrases = readPhrases();
962
+ const target = phrases.find((p) => p.id === options.id || p.label === options.id);
963
+ if (!target) throw new Error(`Wallet not found: ${options.id}`);
964
+ try {
965
+ const key = await getActiveKey();
966
+ const mnemonic = await decryptWithKey(key, target.encryptedPhrase);
967
+ const root = await HDWallet4.fromPhrase(mnemonic, DEFAULT_WALLET_PATH2);
968
+ removeAddressBook(root.address);
969
+ } catch (e) {
970
+ console.warn(chalk16.yellow(`Warning: failed to clean up address book: ${e.message}`));
971
+ }
972
+ const remaining = phrases.filter((p) => p.id !== target.id);
973
+ writePhrases(remaining);
974
+ const active = readActive();
975
+ if (active.phraseId === target.id) {
976
+ writeActive({ ...active, phraseId: remaining[0]?.id });
977
+ }
978
+ console.log(chalk16.green(`Removed wallet ${chalk16.cyan(target.label)} (id ${target.id})`));
979
+ }
980
+
981
+ // src/actions/wallet/seedPhrase/renamePhrase.ts
982
+ import chalk17 from "chalk";
983
+ function renamePhrase(id, label) {
984
+ const phrases = readPhrases();
985
+ const target = phrases.find((p) => p.id === id || p.label === id);
986
+ if (!target) throw new Error(`Wallet not found: ${id}`);
987
+ target.label = label;
988
+ writePhrases(phrases);
989
+ console.log(chalk17.green(`Renamed wallet ${target.id} to ${chalk17.cyan(label)}`));
990
+ }
991
+
992
+ // src/actions/wallet/seedPhrase/usePhrase.ts
993
+ import chalk18 from "chalk";
994
+ function usePhrase(id) {
995
+ const record = findPhrase(id);
996
+ if (!record) throw new Error(`Wallet not found: ${id}`);
997
+ const active = readActive();
998
+ writeActive({ ...active, phraseId: record.id });
999
+ console.log(chalk18.green(`Active wallet set to ${chalk18.cyan(record.label)} (id ${record.id})`));
1000
+ }
1001
+
1002
+ // src/actions/wallet/session/unlock.ts
1003
+ import chalk19 from "chalk";
1004
+ async function unlock(options = {}) {
1005
+ if (!hasPassword()) {
1006
+ throw new Error("Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.");
1007
+ }
1008
+ const password = promptPassword("Wallet password: ");
1009
+ const key = await validatePassword(password);
1010
+ if (!key) throw new Error("Incorrect password.");
1011
+ const ttl = options.ttl ?? DEFAULT_SESSION_TTL_SECONDS;
1012
+ const expiresAt = await unlockSession(key, ttl);
1013
+ console.log(chalk19.green(`Wallet unlocked. Session expires ${new Date(expiresAt).toISOString()}.`));
1014
+ }
1015
+ function lock() {
1016
+ lockSession();
1017
+ console.log(chalk19.green("Wallet locked."));
1018
+ }
1019
+
1020
+ // src/actions/wallet/sign/signPayload.ts
1021
+ import FS5 from "fs";
1022
+
1023
+ // ../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/dist/neutral/index.mjs
1024
+ import {
1025
+ asAddress,
1026
+ asHash,
1027
+ assertEx,
1028
+ hexFromArrayBuffer,
1029
+ toArrayBuffer
1030
+ } from "@xylabs/sdk-js";
1031
+
1032
+ // ../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/dist/neutral/index.mjs
1033
+ import {
1034
+ AddressZod,
1035
+ HashZod,
1036
+ zodAsFactory,
1037
+ zodIsFactory,
1038
+ zodToFactory
1039
+ } from "@xylabs/sdk-js";
1040
+ import { PayloadZod, SchemaZod } from "@xyo-network/payload-model";
1041
+ import z2 from "zod";
1042
+ import { asSchema } from "@xyo-network/payload-model";
1043
+ import { HexZod } from "@xylabs/sdk-js";
1044
+ import z from "zod";
1045
+ import { PayloadZod as PayloadZod2 } from "@xyo-network/payload-model";
1046
+ import z3 from "zod";
1047
+ import { isStorageMeta } from "@xyo-network/payload-model";
1048
+ var BoundWitnessSchema = asSchema("network.xyo.boundwitness", true);
1049
+ var SignaturesMetaZod = z.object({ $signatures: z.array(z.union([HexZod, z.null()])) });
1050
+ var UnsignedSignaturesMetaZod = z.object({ $signatures: z.array(z.null()) });
1051
+ var SignedSignaturesMetaZod = z.object({ $signatures: z.array(HexZod).min(1) });
1052
+ var BoundWitnessRequiredFieldsZod = z2.object({
1053
+ addresses: z2.array(AddressZod),
1054
+ payload_hashes: z2.array(HashZod),
1055
+ payload_schemas: z2.array(SchemaZod),
1056
+ previous_hashes: z2.array(HashZod.nullable())
1057
+ });
1058
+ var BoundWitnessMetaZod = z2.object({
1059
+ $destination: AddressZod.optional(),
1060
+ $sourceQuery: HashZod.optional()
1061
+ }).extend(SignaturesMetaZod.shape);
1062
+ var BoundWitnessZod = PayloadZod.safeExtend({ schema: z2.literal(BoundWitnessSchema) }).safeExtend(BoundWitnessRequiredFieldsZod.shape).safeExtend(BoundWitnessMetaZod.shape);
1063
+ var isBoundWitness = zodIsFactory(BoundWitnessZod);
1064
+ var asBoundWitness = zodAsFactory(BoundWitnessZod, "asBoundWitness");
1065
+ var toBoundWitness = zodToFactory(BoundWitnessZod, "toBoundWitness");
1066
+ var AnyBoundWitnessZod = BoundWitnessZod.loose();
1067
+ var SignedBoundWitnessZod = BoundWitnessZod.extend(SignedSignaturesMetaZod.shape);
1068
+ var AnySignedBoundWitnessZod = SignedBoundWitnessZod.loose();
1069
+ var UnsignedBoundWitnessZod = BoundWitnessZod.extend(UnsignedSignaturesMetaZod.shape);
1070
+ var AnyUnsignedBoundWitnessZod = UnsignedBoundWitnessZod.loose();
1071
+ function HydratedBoundWitnessZodBuilder(bwZod) {
1072
+ return z3.tuple([bwZod, z3.array(PayloadZod2.loose())]);
1073
+ }
1074
+ var HydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(BoundWitnessZod);
1075
+ var SignedHydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(SignedBoundWitnessZod);
1076
+ var UnsignedHydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(UnsignedBoundWitnessZod);
1077
+
1078
+ // ../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/dist/neutral/index.mjs
1079
+ import {
1080
+ ObjectHasher,
1081
+ removeEmptyFields,
1082
+ sortFields
1083
+ } from "@xyo-network/hash";
1084
+ import { omitSchema, PayloadBuilder } from "@xyo-network/payload-builder";
1085
+ import { Mutex } from "async-mutex";
1086
+ import {
1087
+ asHash as asHash2,
1088
+ difference,
1089
+ exists
1090
+ } from "@xylabs/sdk-js";
1091
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
1092
+ import { asHash as asHash3 } from "@xylabs/sdk-js";
1093
+ import { assertEx as assertEx2 } from "@xylabs/sdk-js";
1094
+ var GeneratedBoundWitnessFields = ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
1095
+ var uniqueAddresses = (addresses, throwOnFalse = false) => {
1096
+ const addressesSet = /* @__PURE__ */ new Set();
1097
+ for (const address of addresses) {
1098
+ if (addressesSet.has(address)) {
1099
+ if (throwOnFalse) {
1100
+ throw new Error("Duplicate address");
1101
+ }
1102
+ return false;
1103
+ }
1104
+ addressesSet.add(address);
1105
+ }
1106
+ return true;
1107
+ };
1108
+ var uniqueAccounts = (accounts, throwOnFalse = false) => {
1109
+ return uniqueAddresses(accounts.map((account) => account.address), throwOnFalse);
1110
+ };
1111
+ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilder {
1112
+ static _buildMutex = new Mutex();
1113
+ _accounts = [];
1114
+ _errorHashes;
1115
+ _errors = [];
1116
+ _payloadHashes;
1117
+ _payloadSchemas;
1118
+ _payloads = [];
1119
+ constructor(options) {
1120
+ super({ ...options, schema: BoundWitnessSchema });
1121
+ }
1122
+ get addresses() {
1123
+ uniqueAccounts(this._accounts, true);
1124
+ return this._accounts.map((account) => account.address.toLowerCase());
1125
+ }
1126
+ get payloadSchemas() {
1127
+ return this._payloadSchemas ?? this._payloads.map((payload) => {
1128
+ return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
1129
+ });
1130
+ }
1131
+ get previousHashBytes() {
1132
+ return this._accounts.map((account) => account.previousHashBytes ?? null);
1133
+ }
1134
+ get previousHashes() {
1135
+ return this._accounts.map((account) => account.previousHash ?? null);
1136
+ }
1137
+ static addressIndex(payload, address) {
1138
+ const index = payload.addresses.indexOf(address);
1139
+ if (index === -1) {
1140
+ throw new Error("Invalid address");
1141
+ }
1142
+ return index;
1143
+ }
1144
+ static previousHash(boundWitness, address) {
1145
+ return asHash(boundWitness.previous_hashes[this.addressIndex(boundWitness, address)])?.toLowerCase();
1146
+ }
1147
+ static async linkingFields(accounts, payloads) {
1148
+ const addresses = accounts.map((account) => asAddress(hexFromArrayBuffer(account.addressBytes, { prefix: false }), true));
1149
+ const previous_hashes = accounts.map((account) => account.previousHash ?? null);
1150
+ const payload_hashes = payloads ? await _BoundWitnessBuilder.hashes(payloads) : [];
1151
+ const payload_schemas = payloads?.map(({ schema }) => schema) ?? [];
1152
+ return {
1153
+ addresses,
1154
+ payload_hashes,
1155
+ payload_schemas,
1156
+ previous_hashes
1157
+ };
1158
+ }
1159
+ static signature(payload, address) {
1160
+ return payload.$signatures[this.addressIndex(payload, address)];
1161
+ }
1162
+ static async signatures(accounts, dataHash) {
1163
+ const hashBytes = toArrayBuffer(dataHash);
1164
+ const previousHashesBytes = accounts?.map((account) => account.previousHashBytes);
1165
+ return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])));
1166
+ }
1167
+ static validateGeneratedFields(fields) {
1168
+ assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => "Payload hash/schema mismatch");
1169
+ assertEx(!fields.payload_hashes.includes(null), () => "nulls found in hashes");
1170
+ assertEx(!fields.payload_schemas.includes(null), () => "nulls found in schemas");
1171
+ }
1172
+ async build(sign = true) {
1173
+ return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
1174
+ const dataHashableFields = await this.dataHashableFields();
1175
+ const $signatures = sign ? await this.sign() : this.addresses.map(() => null);
1176
+ const ret = {
1177
+ ...this._meta,
1178
+ ...dataHashableFields,
1179
+ ...this._fields,
1180
+ $signatures
1181
+ };
1182
+ return [
1183
+ ret,
1184
+ this._payloads,
1185
+ this._errors
1186
+ ];
1187
+ });
1188
+ }
1189
+ async dataHash() {
1190
+ const dataHashableFields = await this.dataHashableFields();
1191
+ const hash = await ObjectHasher.hash(dataHashableFields);
1192
+ return hash;
1193
+ }
1194
+ async dataHashableFields() {
1195
+ const generatedFields = await this.generatedFields();
1196
+ _BoundWitnessBuilder.validateGeneratedFields(generatedFields);
1197
+ const fields = {
1198
+ ...PayloadBuilder.omitMeta(this._fields ?? {}),
1199
+ ...generatedFields
1200
+ };
1201
+ return await _BoundWitnessBuilder.dataHashableFields(this._schema, fields);
1202
+ }
1203
+ error(payload) {
1204
+ assertEx(this._errorHashes === void 0, () => "Can not set errors when hashes already set");
1205
+ if (payload) {
1206
+ this._errors.push(assertEx(sortFields(payload)));
1207
+ }
1208
+ return this;
1209
+ }
1210
+ errors(errors) {
1211
+ if (errors) {
1212
+ for (const error of errors) {
1213
+ if (error !== null) {
1214
+ this.error(error);
1215
+ }
1216
+ }
1217
+ }
1218
+ return this;
1219
+ }
1220
+ fields(fields) {
1221
+ const clone = structuredClone(fields);
1222
+ for (const field of GeneratedBoundWitnessFields) {
1223
+ delete clone[field];
1224
+ }
1225
+ this._fields = _BoundWitnessBuilder.omitStorageMeta(
1226
+ _BoundWitnessBuilder.omitClientMeta(
1227
+ omitSchema(removeEmptyFields(clone))
1228
+ )
1229
+ );
1230
+ return this;
1231
+ }
1232
+ hashes(hashes, schema) {
1233
+ assertEx(this.payloads.length === 0, () => "Can not set hashes when payloads already set");
1234
+ this._payloadHashes = hashes;
1235
+ this._payloadSchemas = schema;
1236
+ return this;
1237
+ }
1238
+ payload(payload) {
1239
+ assertEx(this._payloadHashes === void 0, () => "Can not set payloads when hashes already set");
1240
+ if (payload) {
1241
+ this._payloads.push(assertEx(sortFields(payload)));
1242
+ }
1243
+ return this;
1244
+ }
1245
+ payloads(payloads) {
1246
+ if (payloads)
1247
+ for (const payload of payloads) {
1248
+ if (payload !== null) {
1249
+ this.payload(payload);
1250
+ }
1251
+ }
1252
+ return this;
1253
+ }
1254
+ signer(account) {
1255
+ uniqueAccounts([...this._accounts, account], true);
1256
+ this._accounts?.push(account);
1257
+ return this;
1258
+ }
1259
+ signers(accounts) {
1260
+ uniqueAccounts([...this._accounts, ...accounts], true);
1261
+ this._accounts?.push(...accounts);
1262
+ return this;
1263
+ }
1264
+ sourceQuery(sourceQuery) {
1265
+ this._meta = {
1266
+ ...this._meta,
1267
+ $sourceQuery: sourceQuery
1268
+ };
1269
+ return this;
1270
+ }
1271
+ /** @deprecated use signer instead */
1272
+ witness(account) {
1273
+ this._accounts?.push(account);
1274
+ return this;
1275
+ }
1276
+ /** @deprecated use signers instead */
1277
+ witnesses(accounts) {
1278
+ this._accounts?.push(...accounts);
1279
+ return this;
1280
+ }
1281
+ async sign() {
1282
+ uniqueAccounts(this._accounts, true);
1283
+ const hashBytes = toArrayBuffer(await this.dataHash());
1284
+ return await Promise.all(this._accounts.map(async (account) => hexFromArrayBuffer((await account.sign(hashBytes))[0])));
1285
+ }
1286
+ async generatedFields() {
1287
+ return await _BoundWitnessBuilder.linkingFields(this._accounts, this._payloads);
1288
+ }
1289
+ missingSchemaMessage(payload) {
1290
+ return `Builder: Missing Schema
1291
+ ${JSON.stringify(payload, null, 2)}`;
1292
+ }
1293
+ };
1294
+
1295
+ // src/actions/wallet/sign/signPayload.ts
1296
+ import chalk20 from "chalk";
1297
+ async function signPayload(options) {
1298
+ const offset = options.offset ?? "0";
1299
+ const raw = FS5.readFileSync(options.file, "utf8");
1300
+ const payload = JSON.parse(raw);
1301
+ if (typeof payload.schema !== "string" || payload.schema.length === 0) {
1302
+ throw new Error("Payload must have a non-empty `schema` string field.");
1303
+ }
1304
+ const { rootWallet } = await getActiveWallet();
1305
+ const account = await deriveAccount(rootWallet, offset);
1306
+ const [boundwitness, payloads] = await new BoundWitnessBuilder().payload(payload).signer(account).build();
1307
+ const result = { boundwitness, payloads };
1308
+ const json = JSON.stringify(result, null, 2);
1309
+ if (options.output) {
1310
+ FS5.writeFileSync(options.output, `${json}
1311
+ `);
1312
+ console.log(chalk20.green(`Signed payload written to ${options.output}`));
1313
+ } else {
1314
+ console.log(json);
1315
+ }
1316
+ }
1317
+
1318
+ // src/actions/wallet/transaction/broadcastTransaction.ts
1319
+ import FS6 from "fs";
1320
+ import chalk21 from "chalk";
1321
+ function reviveBigints(_key, value) {
1322
+ if (typeof value === "string" && /^-?\d+n$/.test(value)) {
1323
+ return BigInt(value.slice(0, -1));
1324
+ }
1325
+ return value;
1326
+ }
1327
+ async function broadcastTransaction(options) {
1328
+ const offset = options.offset ?? "0";
1329
+ const raw = FS6.readFileSync(options.file, "utf8");
1330
+ const signedTx = JSON.parse(raw, reviveBigints);
1331
+ const network = getActiveNetwork();
1332
+ const { rootWallet } = await getActiveWallet();
1333
+ const account = await deriveAccount(rootWallet, offset);
1334
+ console.log(chalk21.gray(`Connecting to ${network.rpcUrl}...`));
1335
+ const { runner } = await createWalletClient(network.rpcUrl, account);
1336
+ const hash = await runner.broadcastTransaction(signedTx);
1337
+ console.log(chalk21.green(`Broadcast accepted: ${hash}`));
1338
+ }
1339
+
1340
+ // src/actions/wallet/transaction/sendTransaction.ts
1341
+ import { asAddress as asAddress2, assertEx as assertEx3 } from "@xylabs/sdk-js";
1342
+ import { XL1Amount as XL1Amount2 } from "@xyo-network/xl1-protocol-sdk";
1343
+ import chalk22 from "chalk";
1344
+ async function sendTransaction(options) {
1345
+ const offset = options.offset ?? "0";
1346
+ const { rootWallet } = await getActiveWallet();
1347
+ const account = await deriveAccount(rootWallet, offset);
1348
+ const network = getActiveNetwork();
1349
+ const recipient = assertEx3(asAddress2(options.recipient.toLowerCase().replace(/^0x/, "")), () => `Invalid recipient address: ${options.recipient}`);
1350
+ const amountXL1 = XL1Amount2.fromXL1(BigInt(options.amount));
1351
+ console.log(chalk22.gray(`Connecting to ${network.rpcUrl}...`));
1352
+ const { gateway } = await createWalletClient(network.rpcUrl, account);
1353
+ console.log(chalk22.gray(`Submitting transfer of ${options.amount} XL1 to 0x${recipient}...`));
1354
+ const hash = await gateway.send(recipient, amountXL1.atto);
1355
+ console.log(chalk22.gray(`Tx submitted: ${hash}`));
1356
+ const attempts = options.attempts ?? 30;
1357
+ const delay = options.delay ?? 2e3;
1358
+ console.log(chalk22.gray(`Confirming (up to ${attempts} attempts, ${delay}ms apart)...`));
1359
+ await gateway.confirmSubmittedTransaction(hash, { attempts, delay });
1360
+ console.log(chalk22.green(`Sent ${options.amount} XL1 \u2192 0x${recipient}`));
1361
+ console.log(`${chalk22.gray("hash:")} ${hash}`);
1362
+ console.log(`${chalk22.gray("from:")} 0x${account.address}`);
1363
+ console.log(`${chalk22.gray("network:")} ${network.id}`);
1364
+ }
1365
+
1366
+ // src/actions/wallet/transaction/signTransactionFile.ts
1367
+ import FS7 from "fs";
1368
+ import { buildTransaction } from "@xyo-network/xl1-protocol-sdk";
1369
+ import chalk23 from "chalk";
1370
+ function asBigint(value) {
1371
+ return typeof value === "bigint" ? value : BigInt(value);
1372
+ }
1373
+ async function signTransactionFile(options) {
1374
+ const offset = options.offset ?? "0";
1375
+ const raw = FS7.readFileSync(options.file, "utf8");
1376
+ const tx = JSON.parse(raw);
1377
+ const { rootWallet } = await getActiveWallet();
1378
+ const account = await deriveAccount(rootWallet, offset);
1379
+ const fees = tx.fees ? {
1380
+ base: asBigint(tx.fees.base),
1381
+ gasLimit: asBigint(tx.fees.gasLimit),
1382
+ gasPrice: asBigint(tx.fees.gasPrice),
1383
+ priority: asBigint(tx.fees.priority)
1384
+ } : void 0;
1385
+ const signed = await buildTransaction(
1386
+ tx.chain,
1387
+ tx.onChainPayloads ?? [],
1388
+ tx.offChainPayloads ?? [],
1389
+ account,
1390
+ asBigint(tx.nbf),
1391
+ asBigint(tx.exp),
1392
+ void 0,
1393
+ fees
1394
+ );
1395
+ const serialized = JSON.stringify(signed, (_key, value) => typeof value === "bigint" ? value.toString() : value, 2);
1396
+ if (options.output) {
1397
+ FS7.writeFileSync(options.output, `${serialized}
1398
+ `);
1399
+ console.log(chalk23.green(`Signed transaction written to ${options.output}`));
1400
+ } else {
1401
+ console.log(serialized);
1402
+ }
1403
+ }
1404
+ export {
1405
+ addContact,
1406
+ addNetwork,
1407
+ broadcastTransaction,
1408
+ changePassword,
1409
+ createPhrase,
1410
+ deriveAccount,
1411
+ deriveAndAdd,
1412
+ exportBackup,
1413
+ exportPhrase,
1414
+ getActiveWallet,
1415
+ getBalance,
1416
+ hasPassword,
1417
+ importBackup,
1418
+ importPhrase,
1419
+ labelAccount,
1420
+ listAccounts,
1421
+ listContacts,
1422
+ listNetworks,
1423
+ listPhrases,
1424
+ lock,
1425
+ removeAccount,
1426
+ removeContact,
1427
+ removeNetwork,
1428
+ removePhrase,
1429
+ renameContact,
1430
+ renamePhrase,
1431
+ sendTransaction,
1432
+ showAccount,
1433
+ signPayload,
1434
+ signTransactionFile,
1435
+ unlock,
1436
+ useNetwork,
1437
+ usePhrase
1438
+ };
1439
+ //# sourceMappingURL=index.mjs.map