@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 @@
1
+ {"version":3,"sources":["../../src/actions/xyo/transaction/validateTransactions.ts","../../src/commands/xyoTxValidateCommand.ts","../../src/commands/xyoTxCommand.ts","../../src/commands/xyoCommand.ts"],"sourcesContent":["import FS, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-sdk'\nimport {\n isHydratedTransaction,\n isTransactionBoundWitness,\n validateTransaction,\n} from '@xyo-network/xl1-sdk'\nimport chalk from 'chalk'\n\nexport interface ValidateTransactionsOptions {\n data?: string\n detail?: boolean\n}\n\ninterface ValidationResult {\n errors: string[]\n index: number\n source: string\n valid: boolean\n}\n\ntype RawTuple = [unknown, unknown[]]\n\nfunction isRawTuple(value: unknown): value is RawTuple {\n return Array.isArray(value) && value.length === 2 && Array.isArray(value[1])\n}\n\nfunction parseSingleOrBatch(raw: string, source: string): [RawTuple, string][] {\n const parsed: unknown = JSON.parse(raw)\n if (isRawTuple(parsed)) {\n return [[parsed, source]]\n }\n if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {\n return parsed.map((tx, i) => [tx, `${source}[${i}]`])\n }\n throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`)\n}\n\nfunction parseJsonl(raw: string, source: string): [RawTuple, string][] {\n const results: [RawTuple, string][] = []\n for (const [i, rawLine] of raw.split('\\n').entries()) {\n const line = rawLine?.trim()\n if (!line) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error })\n }\n if (!isRawTuple(parsed)) {\n throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`)\n }\n results.push([parsed, `${source}:${i + 1}`])\n }\n return results\n}\n\nfunction parseInput(data: string): [RawTuple, string][] {\n const absolute = path.resolve(data)\n if (existsSync(absolute)) {\n const raw = FS.readFileSync(absolute, 'utf8')\n const ext = path.extname(absolute).toLowerCase()\n if (ext === '.jsonl' || ext === '.ndjson') {\n return parseJsonl(raw, data)\n }\n return parseSingleOrBatch(raw, data)\n }\n return parseSingleOrBatch(data, '<inline>')\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let buf = ''\n process.stdin.setEncoding('utf8')\n process.stdin.on('data', (chunk: string) => {\n buf += chunk\n })\n process.stdin.on('end', () => resolve(buf))\n process.stdin.on('error', reject)\n })\n}\n\nasync function validateOne(raw: RawTuple, source: string, index: number): Promise<ValidationResult> {\n const [bwRaw, payloadsRaw] = raw\n const errors: string[] = []\n\n if (!isTransactionBoundWitness(bwRaw)) {\n return {\n errors: ['not a valid transaction BoundWitness'],\n index,\n source,\n valid: false,\n }\n }\n\n try {\n const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw as Payload)\n const payloadsWithMeta = await Promise.all(\n (payloadsRaw as Payload[]).map(p => PayloadBuilder.addHashMeta(p)),\n )\n const tx = [bwWithMeta, payloadsWithMeta] as unknown as HydratedTransactionWithHashMeta\n\n if (isHydratedTransaction(tx)) {\n const chainId = bwRaw.chain as string\n const txErrors = await validateTransaction({ chainId } as never, tx)\n for (const err of txErrors) {\n errors.push(String(err))\n }\n } else {\n errors.push('transaction failed structural shape check (isHydratedTransaction)')\n }\n } catch (ex) {\n errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`)\n }\n\n return {\n errors,\n index,\n source,\n valid: errors.length === 0,\n }\n}\n\nexport async function validateTransactions(options: ValidateTransactionsOptions): Promise<void> {\n let rawTransactions: [RawTuple, string][]\n\n if (options.data !== undefined) {\n rawTransactions = parseInput(options.data)\n } else if (process.stdin.isTTY) {\n console.error(chalk.red('No input: provide a file path, inline JSON, or pipe data to stdin.'))\n process.exitCode = 1\n return\n } else {\n const stdin = await readStdin()\n rawTransactions = parseSingleOrBatch(stdin.trim(), '<stdin>')\n }\n\n const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)))\n\n const validCount = results.filter(r => r.valid).length\n const invalidCount = results.filter(r => !r.valid).length\n\n console.log(`Total: ${results.length}`)\n console.log(chalk.green(`Valid: ${validCount}`))\n if (invalidCount > 0) {\n console.log(chalk.red(`Invalid: ${invalidCount}`))\n }\n\n if (options.detail === true || invalidCount > 0) {\n for (const result of results.filter(r => !r.valid)) {\n console.log(chalk.red(`\\n[${result.index}] ${result.source}`))\n for (const err of result.errors) {\n console.log(chalk.red(` - ${err}`))\n }\n }\n }\n\n if (invalidCount > 0) {\n process.exitCode = 1\n }\n}\n","import type { CommandModule } from 'yargs'\n\nimport { validateTransactions } from '../actions/xyo/index.ts'\n\nexport const xyoTxValidateCommand: CommandModule = {\n command: 'validate [data]',\n describe: 'Validate one or more XL1 transactions (file, inline JSON, or stdin)',\n builder: yargs =>\n yargs\n .positional('data', {\n type: 'string',\n describe: 'Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]',\n })\n .option('detail', {\n alias: 'd',\n type: 'boolean',\n default: false,\n describe: 'Print per-transaction error details (always shown for invalid transactions)',\n })\n .example(\n '$0 xyo tx validate ./tx.json',\n 'Validate a single signed transaction from a file',\n )\n .example(\n '$0 xyo tx validate ./txs.jsonl',\n 'Validate a batch of transactions, one per line',\n )\n .example(\n 'cat txs.jsonl | $0 xyo tx validate',\n 'Validate transactions piped from stdin',\n ),\n handler: async (argv) => {\n await validateTransactions({\n data: argv.data as string | undefined,\n detail: argv.detail as boolean,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { xyoTxValidateCommand } from './xyoTxValidateCommand.ts'\n\nexport const xyoTxCommand: CommandModule = {\n command: 'tx',\n describe: 'XL1 transaction utilities',\n builder: yargs =>\n yargs\n .command(xyoTxValidateCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { xyoTxCommand } from './xyoTxCommand.ts'\n\nexport const xyoCommand: CommandModule = {\n command: 'xyo',\n describe: 'XYO protocol utilities',\n builder: yargs =>\n yargs\n .command(xyoTxCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,178 @@
1
+ // src/actions/xyo/transaction/validateTransactions.ts
2
+ import FS, { existsSync } from "fs";
3
+ import path from "path";
4
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
5
+ import {
6
+ isHydratedTransaction,
7
+ isTransactionBoundWitness,
8
+ validateTransaction
9
+ } from "@xyo-network/xl1-sdk";
10
+ import chalk from "chalk";
11
+ function isRawTuple(value) {
12
+ return Array.isArray(value) && value.length === 2 && Array.isArray(value[1]);
13
+ }
14
+ function parseSingleOrBatch(raw, source) {
15
+ const parsed = JSON.parse(raw);
16
+ if (isRawTuple(parsed)) {
17
+ return [[parsed, source]];
18
+ }
19
+ if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {
20
+ return parsed.map((tx, i) => [tx, `${source}[${i}]`]);
21
+ }
22
+ throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`);
23
+ }
24
+ function parseJsonl(raw, source) {
25
+ const results = [];
26
+ for (const [i, rawLine] of raw.split("\n").entries()) {
27
+ const line = rawLine?.trim();
28
+ if (!line) continue;
29
+ let parsed;
30
+ try {
31
+ parsed = JSON.parse(line);
32
+ } catch (error) {
33
+ const msg = error instanceof Error ? error.message : String(error);
34
+ throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error });
35
+ }
36
+ if (!isRawTuple(parsed)) {
37
+ throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`);
38
+ }
39
+ results.push([parsed, `${source}:${i + 1}`]);
40
+ }
41
+ return results;
42
+ }
43
+ function parseInput(data) {
44
+ const absolute = path.resolve(data);
45
+ if (existsSync(absolute)) {
46
+ const raw = FS.readFileSync(absolute, "utf8");
47
+ const ext = path.extname(absolute).toLowerCase();
48
+ if (ext === ".jsonl" || ext === ".ndjson") {
49
+ return parseJsonl(raw, data);
50
+ }
51
+ return parseSingleOrBatch(raw, data);
52
+ }
53
+ return parseSingleOrBatch(data, "<inline>");
54
+ }
55
+ async function readStdin() {
56
+ return new Promise((resolve, reject) => {
57
+ let buf = "";
58
+ process.stdin.setEncoding("utf8");
59
+ process.stdin.on("data", (chunk) => {
60
+ buf += chunk;
61
+ });
62
+ process.stdin.on("end", () => resolve(buf));
63
+ process.stdin.on("error", reject);
64
+ });
65
+ }
66
+ async function validateOne(raw, source, index) {
67
+ const [bwRaw, payloadsRaw] = raw;
68
+ const errors = [];
69
+ if (!isTransactionBoundWitness(bwRaw)) {
70
+ return {
71
+ errors: ["not a valid transaction BoundWitness"],
72
+ index,
73
+ source,
74
+ valid: false
75
+ };
76
+ }
77
+ try {
78
+ const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw);
79
+ const payloadsWithMeta = await Promise.all(
80
+ payloadsRaw.map((p) => PayloadBuilder.addHashMeta(p))
81
+ );
82
+ const tx = [bwWithMeta, payloadsWithMeta];
83
+ if (isHydratedTransaction(tx)) {
84
+ const chainId = bwRaw.chain;
85
+ const txErrors = await validateTransaction({ chainId }, tx);
86
+ for (const err of txErrors) {
87
+ errors.push(String(err));
88
+ }
89
+ } else {
90
+ errors.push("transaction failed structural shape check (isHydratedTransaction)");
91
+ }
92
+ } catch (ex) {
93
+ errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`);
94
+ }
95
+ return {
96
+ errors,
97
+ index,
98
+ source,
99
+ valid: errors.length === 0
100
+ };
101
+ }
102
+ async function validateTransactions(options) {
103
+ let rawTransactions;
104
+ if (options.data !== void 0) {
105
+ rawTransactions = parseInput(options.data);
106
+ } else if (process.stdin.isTTY) {
107
+ console.error(chalk.red("No input: provide a file path, inline JSON, or pipe data to stdin."));
108
+ process.exitCode = 1;
109
+ return;
110
+ } else {
111
+ const stdin = await readStdin();
112
+ rawTransactions = parseSingleOrBatch(stdin.trim(), "<stdin>");
113
+ }
114
+ const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)));
115
+ const validCount = results.filter((r) => r.valid).length;
116
+ const invalidCount = results.filter((r) => !r.valid).length;
117
+ console.log(`Total: ${results.length}`);
118
+ console.log(chalk.green(`Valid: ${validCount}`));
119
+ if (invalidCount > 0) {
120
+ console.log(chalk.red(`Invalid: ${invalidCount}`));
121
+ }
122
+ if (options.detail === true || invalidCount > 0) {
123
+ for (const result of results.filter((r) => !r.valid)) {
124
+ console.log(chalk.red(`
125
+ [${result.index}] ${result.source}`));
126
+ for (const err of result.errors) {
127
+ console.log(chalk.red(` - ${err}`));
128
+ }
129
+ }
130
+ }
131
+ if (invalidCount > 0) {
132
+ process.exitCode = 1;
133
+ }
134
+ }
135
+
136
+ // src/commands/xyoTxValidateCommand.ts
137
+ var xyoTxValidateCommand = {
138
+ command: "validate [data]",
139
+ describe: "Validate one or more XL1 transactions (file, inline JSON, or stdin)",
140
+ builder: (yargs) => yargs.positional("data", {
141
+ type: "string",
142
+ describe: "Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]"
143
+ }).option("detail", {
144
+ alias: "d",
145
+ type: "boolean",
146
+ default: false,
147
+ describe: "Print per-transaction error details (always shown for invalid transactions)"
148
+ }).example(
149
+ "$0 xyo tx validate ./tx.json",
150
+ "Validate a single signed transaction from a file"
151
+ ).example(
152
+ "$0 xyo tx validate ./txs.jsonl",
153
+ "Validate a batch of transactions, one per line"
154
+ ).example(
155
+ "cat txs.jsonl | $0 xyo tx validate",
156
+ "Validate transactions piped from stdin"
157
+ ),
158
+ handler: async (argv) => {
159
+ await validateTransactions({
160
+ data: argv.data,
161
+ detail: argv.detail
162
+ });
163
+ }
164
+ };
165
+
166
+ // src/commands/xyoTxCommand.ts
167
+ var xyoTxCommand = {
168
+ command: "tx",
169
+ describe: "XL1 transaction utilities",
170
+ builder: (yargs) => yargs.command(xyoTxValidateCommand).demandCommand(1).strictCommands(),
171
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
172
+ handler: () => {
173
+ }
174
+ };
175
+ export {
176
+ xyoTxCommand
177
+ };
178
+ //# sourceMappingURL=xyoTxCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/xyo/transaction/validateTransactions.ts","../../src/commands/xyoTxValidateCommand.ts","../../src/commands/xyoTxCommand.ts"],"sourcesContent":["import FS, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-sdk'\nimport {\n isHydratedTransaction,\n isTransactionBoundWitness,\n validateTransaction,\n} from '@xyo-network/xl1-sdk'\nimport chalk from 'chalk'\n\nexport interface ValidateTransactionsOptions {\n data?: string\n detail?: boolean\n}\n\ninterface ValidationResult {\n errors: string[]\n index: number\n source: string\n valid: boolean\n}\n\ntype RawTuple = [unknown, unknown[]]\n\nfunction isRawTuple(value: unknown): value is RawTuple {\n return Array.isArray(value) && value.length === 2 && Array.isArray(value[1])\n}\n\nfunction parseSingleOrBatch(raw: string, source: string): [RawTuple, string][] {\n const parsed: unknown = JSON.parse(raw)\n if (isRawTuple(parsed)) {\n return [[parsed, source]]\n }\n if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {\n return parsed.map((tx, i) => [tx, `${source}[${i}]`])\n }\n throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`)\n}\n\nfunction parseJsonl(raw: string, source: string): [RawTuple, string][] {\n const results: [RawTuple, string][] = []\n for (const [i, rawLine] of raw.split('\\n').entries()) {\n const line = rawLine?.trim()\n if (!line) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error })\n }\n if (!isRawTuple(parsed)) {\n throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`)\n }\n results.push([parsed, `${source}:${i + 1}`])\n }\n return results\n}\n\nfunction parseInput(data: string): [RawTuple, string][] {\n const absolute = path.resolve(data)\n if (existsSync(absolute)) {\n const raw = FS.readFileSync(absolute, 'utf8')\n const ext = path.extname(absolute).toLowerCase()\n if (ext === '.jsonl' || ext === '.ndjson') {\n return parseJsonl(raw, data)\n }\n return parseSingleOrBatch(raw, data)\n }\n return parseSingleOrBatch(data, '<inline>')\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let buf = ''\n process.stdin.setEncoding('utf8')\n process.stdin.on('data', (chunk: string) => {\n buf += chunk\n })\n process.stdin.on('end', () => resolve(buf))\n process.stdin.on('error', reject)\n })\n}\n\nasync function validateOne(raw: RawTuple, source: string, index: number): Promise<ValidationResult> {\n const [bwRaw, payloadsRaw] = raw\n const errors: string[] = []\n\n if (!isTransactionBoundWitness(bwRaw)) {\n return {\n errors: ['not a valid transaction BoundWitness'],\n index,\n source,\n valid: false,\n }\n }\n\n try {\n const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw as Payload)\n const payloadsWithMeta = await Promise.all(\n (payloadsRaw as Payload[]).map(p => PayloadBuilder.addHashMeta(p)),\n )\n const tx = [bwWithMeta, payloadsWithMeta] as unknown as HydratedTransactionWithHashMeta\n\n if (isHydratedTransaction(tx)) {\n const chainId = bwRaw.chain as string\n const txErrors = await validateTransaction({ chainId } as never, tx)\n for (const err of txErrors) {\n errors.push(String(err))\n }\n } else {\n errors.push('transaction failed structural shape check (isHydratedTransaction)')\n }\n } catch (ex) {\n errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`)\n }\n\n return {\n errors,\n index,\n source,\n valid: errors.length === 0,\n }\n}\n\nexport async function validateTransactions(options: ValidateTransactionsOptions): Promise<void> {\n let rawTransactions: [RawTuple, string][]\n\n if (options.data !== undefined) {\n rawTransactions = parseInput(options.data)\n } else if (process.stdin.isTTY) {\n console.error(chalk.red('No input: provide a file path, inline JSON, or pipe data to stdin.'))\n process.exitCode = 1\n return\n } else {\n const stdin = await readStdin()\n rawTransactions = parseSingleOrBatch(stdin.trim(), '<stdin>')\n }\n\n const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)))\n\n const validCount = results.filter(r => r.valid).length\n const invalidCount = results.filter(r => !r.valid).length\n\n console.log(`Total: ${results.length}`)\n console.log(chalk.green(`Valid: ${validCount}`))\n if (invalidCount > 0) {\n console.log(chalk.red(`Invalid: ${invalidCount}`))\n }\n\n if (options.detail === true || invalidCount > 0) {\n for (const result of results.filter(r => !r.valid)) {\n console.log(chalk.red(`\\n[${result.index}] ${result.source}`))\n for (const err of result.errors) {\n console.log(chalk.red(` - ${err}`))\n }\n }\n }\n\n if (invalidCount > 0) {\n process.exitCode = 1\n }\n}\n","import type { CommandModule } from 'yargs'\n\nimport { validateTransactions } from '../actions/xyo/index.ts'\n\nexport const xyoTxValidateCommand: CommandModule = {\n command: 'validate [data]',\n describe: 'Validate one or more XL1 transactions (file, inline JSON, or stdin)',\n builder: yargs =>\n yargs\n .positional('data', {\n type: 'string',\n describe: 'Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]',\n })\n .option('detail', {\n alias: 'd',\n type: 'boolean',\n default: false,\n describe: 'Print per-transaction error details (always shown for invalid transactions)',\n })\n .example(\n '$0 xyo tx validate ./tx.json',\n 'Validate a single signed transaction from a file',\n )\n .example(\n '$0 xyo tx validate ./txs.jsonl',\n 'Validate a batch of transactions, one per line',\n )\n .example(\n 'cat txs.jsonl | $0 xyo tx validate',\n 'Validate transactions piped from stdin',\n ),\n handler: async (argv) => {\n await validateTransactions({\n data: argv.data as string | undefined,\n detail: argv.detail as boolean,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { xyoTxValidateCommand } from './xyoTxValidateCommand.ts'\n\nexport const xyoTxCommand: CommandModule = {\n command: 'tx',\n describe: 'XL1 transaction utilities',\n builder: yargs =>\n yargs\n .command(xyoTxValidateCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,168 @@
1
+ // src/actions/xyo/transaction/validateTransactions.ts
2
+ import FS, { existsSync } from "fs";
3
+ import path from "path";
4
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
5
+ import {
6
+ isHydratedTransaction,
7
+ isTransactionBoundWitness,
8
+ validateTransaction
9
+ } from "@xyo-network/xl1-sdk";
10
+ import chalk from "chalk";
11
+ function isRawTuple(value) {
12
+ return Array.isArray(value) && value.length === 2 && Array.isArray(value[1]);
13
+ }
14
+ function parseSingleOrBatch(raw, source) {
15
+ const parsed = JSON.parse(raw);
16
+ if (isRawTuple(parsed)) {
17
+ return [[parsed, source]];
18
+ }
19
+ if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {
20
+ return parsed.map((tx, i) => [tx, `${source}[${i}]`]);
21
+ }
22
+ throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`);
23
+ }
24
+ function parseJsonl(raw, source) {
25
+ const results = [];
26
+ for (const [i, rawLine] of raw.split("\n").entries()) {
27
+ const line = rawLine?.trim();
28
+ if (!line) continue;
29
+ let parsed;
30
+ try {
31
+ parsed = JSON.parse(line);
32
+ } catch (error) {
33
+ const msg = error instanceof Error ? error.message : String(error);
34
+ throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error });
35
+ }
36
+ if (!isRawTuple(parsed)) {
37
+ throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`);
38
+ }
39
+ results.push([parsed, `${source}:${i + 1}`]);
40
+ }
41
+ return results;
42
+ }
43
+ function parseInput(data) {
44
+ const absolute = path.resolve(data);
45
+ if (existsSync(absolute)) {
46
+ const raw = FS.readFileSync(absolute, "utf8");
47
+ const ext = path.extname(absolute).toLowerCase();
48
+ if (ext === ".jsonl" || ext === ".ndjson") {
49
+ return parseJsonl(raw, data);
50
+ }
51
+ return parseSingleOrBatch(raw, data);
52
+ }
53
+ return parseSingleOrBatch(data, "<inline>");
54
+ }
55
+ async function readStdin() {
56
+ return new Promise((resolve, reject) => {
57
+ let buf = "";
58
+ process.stdin.setEncoding("utf8");
59
+ process.stdin.on("data", (chunk) => {
60
+ buf += chunk;
61
+ });
62
+ process.stdin.on("end", () => resolve(buf));
63
+ process.stdin.on("error", reject);
64
+ });
65
+ }
66
+ async function validateOne(raw, source, index) {
67
+ const [bwRaw, payloadsRaw] = raw;
68
+ const errors = [];
69
+ if (!isTransactionBoundWitness(bwRaw)) {
70
+ return {
71
+ errors: ["not a valid transaction BoundWitness"],
72
+ index,
73
+ source,
74
+ valid: false
75
+ };
76
+ }
77
+ try {
78
+ const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw);
79
+ const payloadsWithMeta = await Promise.all(
80
+ payloadsRaw.map((p) => PayloadBuilder.addHashMeta(p))
81
+ );
82
+ const tx = [bwWithMeta, payloadsWithMeta];
83
+ if (isHydratedTransaction(tx)) {
84
+ const chainId = bwRaw.chain;
85
+ const txErrors = await validateTransaction({ chainId }, tx);
86
+ for (const err of txErrors) {
87
+ errors.push(String(err));
88
+ }
89
+ } else {
90
+ errors.push("transaction failed structural shape check (isHydratedTransaction)");
91
+ }
92
+ } catch (ex) {
93
+ errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`);
94
+ }
95
+ return {
96
+ errors,
97
+ index,
98
+ source,
99
+ valid: errors.length === 0
100
+ };
101
+ }
102
+ async function validateTransactions(options) {
103
+ let rawTransactions;
104
+ if (options.data !== void 0) {
105
+ rawTransactions = parseInput(options.data);
106
+ } else if (process.stdin.isTTY) {
107
+ console.error(chalk.red("No input: provide a file path, inline JSON, or pipe data to stdin."));
108
+ process.exitCode = 1;
109
+ return;
110
+ } else {
111
+ const stdin = await readStdin();
112
+ rawTransactions = parseSingleOrBatch(stdin.trim(), "<stdin>");
113
+ }
114
+ const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)));
115
+ const validCount = results.filter((r) => r.valid).length;
116
+ const invalidCount = results.filter((r) => !r.valid).length;
117
+ console.log(`Total: ${results.length}`);
118
+ console.log(chalk.green(`Valid: ${validCount}`));
119
+ if (invalidCount > 0) {
120
+ console.log(chalk.red(`Invalid: ${invalidCount}`));
121
+ }
122
+ if (options.detail === true || invalidCount > 0) {
123
+ for (const result of results.filter((r) => !r.valid)) {
124
+ console.log(chalk.red(`
125
+ [${result.index}] ${result.source}`));
126
+ for (const err of result.errors) {
127
+ console.log(chalk.red(` - ${err}`));
128
+ }
129
+ }
130
+ }
131
+ if (invalidCount > 0) {
132
+ process.exitCode = 1;
133
+ }
134
+ }
135
+
136
+ // src/commands/xyoTxValidateCommand.ts
137
+ var xyoTxValidateCommand = {
138
+ command: "validate [data]",
139
+ describe: "Validate one or more XL1 transactions (file, inline JSON, or stdin)",
140
+ builder: (yargs) => yargs.positional("data", {
141
+ type: "string",
142
+ describe: "Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]"
143
+ }).option("detail", {
144
+ alias: "d",
145
+ type: "boolean",
146
+ default: false,
147
+ describe: "Print per-transaction error details (always shown for invalid transactions)"
148
+ }).example(
149
+ "$0 xyo tx validate ./tx.json",
150
+ "Validate a single signed transaction from a file"
151
+ ).example(
152
+ "$0 xyo tx validate ./txs.jsonl",
153
+ "Validate a batch of transactions, one per line"
154
+ ).example(
155
+ "cat txs.jsonl | $0 xyo tx validate",
156
+ "Validate transactions piped from stdin"
157
+ ),
158
+ handler: async (argv) => {
159
+ await validateTransactions({
160
+ data: argv.data,
161
+ detail: argv.detail
162
+ });
163
+ }
164
+ };
165
+ export {
166
+ xyoTxValidateCommand
167
+ };
168
+ //# sourceMappingURL=xyoTxValidateCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/xyo/transaction/validateTransactions.ts","../../src/commands/xyoTxValidateCommand.ts"],"sourcesContent":["import FS, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-sdk'\nimport {\n isHydratedTransaction,\n isTransactionBoundWitness,\n validateTransaction,\n} from '@xyo-network/xl1-sdk'\nimport chalk from 'chalk'\n\nexport interface ValidateTransactionsOptions {\n data?: string\n detail?: boolean\n}\n\ninterface ValidationResult {\n errors: string[]\n index: number\n source: string\n valid: boolean\n}\n\ntype RawTuple = [unknown, unknown[]]\n\nfunction isRawTuple(value: unknown): value is RawTuple {\n return Array.isArray(value) && value.length === 2 && Array.isArray(value[1])\n}\n\nfunction parseSingleOrBatch(raw: string, source: string): [RawTuple, string][] {\n const parsed: unknown = JSON.parse(raw)\n if (isRawTuple(parsed)) {\n return [[parsed, source]]\n }\n if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {\n return parsed.map((tx, i) => [tx, `${source}[${i}]`])\n }\n throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`)\n}\n\nfunction parseJsonl(raw: string, source: string): [RawTuple, string][] {\n const results: [RawTuple, string][] = []\n for (const [i, rawLine] of raw.split('\\n').entries()) {\n const line = rawLine?.trim()\n if (!line) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error })\n }\n if (!isRawTuple(parsed)) {\n throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`)\n }\n results.push([parsed, `${source}:${i + 1}`])\n }\n return results\n}\n\nfunction parseInput(data: string): [RawTuple, string][] {\n const absolute = path.resolve(data)\n if (existsSync(absolute)) {\n const raw = FS.readFileSync(absolute, 'utf8')\n const ext = path.extname(absolute).toLowerCase()\n if (ext === '.jsonl' || ext === '.ndjson') {\n return parseJsonl(raw, data)\n }\n return parseSingleOrBatch(raw, data)\n }\n return parseSingleOrBatch(data, '<inline>')\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let buf = ''\n process.stdin.setEncoding('utf8')\n process.stdin.on('data', (chunk: string) => {\n buf += chunk\n })\n process.stdin.on('end', () => resolve(buf))\n process.stdin.on('error', reject)\n })\n}\n\nasync function validateOne(raw: RawTuple, source: string, index: number): Promise<ValidationResult> {\n const [bwRaw, payloadsRaw] = raw\n const errors: string[] = []\n\n if (!isTransactionBoundWitness(bwRaw)) {\n return {\n errors: ['not a valid transaction BoundWitness'],\n index,\n source,\n valid: false,\n }\n }\n\n try {\n const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw as Payload)\n const payloadsWithMeta = await Promise.all(\n (payloadsRaw as Payload[]).map(p => PayloadBuilder.addHashMeta(p)),\n )\n const tx = [bwWithMeta, payloadsWithMeta] as unknown as HydratedTransactionWithHashMeta\n\n if (isHydratedTransaction(tx)) {\n const chainId = bwRaw.chain as string\n const txErrors = await validateTransaction({ chainId } as never, tx)\n for (const err of txErrors) {\n errors.push(String(err))\n }\n } else {\n errors.push('transaction failed structural shape check (isHydratedTransaction)')\n }\n } catch (ex) {\n errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`)\n }\n\n return {\n errors,\n index,\n source,\n valid: errors.length === 0,\n }\n}\n\nexport async function validateTransactions(options: ValidateTransactionsOptions): Promise<void> {\n let rawTransactions: [RawTuple, string][]\n\n if (options.data !== undefined) {\n rawTransactions = parseInput(options.data)\n } else if (process.stdin.isTTY) {\n console.error(chalk.red('No input: provide a file path, inline JSON, or pipe data to stdin.'))\n process.exitCode = 1\n return\n } else {\n const stdin = await readStdin()\n rawTransactions = parseSingleOrBatch(stdin.trim(), '<stdin>')\n }\n\n const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)))\n\n const validCount = results.filter(r => r.valid).length\n const invalidCount = results.filter(r => !r.valid).length\n\n console.log(`Total: ${results.length}`)\n console.log(chalk.green(`Valid: ${validCount}`))\n if (invalidCount > 0) {\n console.log(chalk.red(`Invalid: ${invalidCount}`))\n }\n\n if (options.detail === true || invalidCount > 0) {\n for (const result of results.filter(r => !r.valid)) {\n console.log(chalk.red(`\\n[${result.index}] ${result.source}`))\n for (const err of result.errors) {\n console.log(chalk.red(` - ${err}`))\n }\n }\n }\n\n if (invalidCount > 0) {\n process.exitCode = 1\n }\n}\n","import type { CommandModule } from 'yargs'\n\nimport { validateTransactions } from '../actions/xyo/index.ts'\n\nexport const xyoTxValidateCommand: CommandModule = {\n command: 'validate [data]',\n describe: 'Validate one or more XL1 transactions (file, inline JSON, or stdin)',\n builder: yargs =>\n yargs\n .positional('data', {\n type: 'string',\n describe: 'Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]',\n })\n .option('detail', {\n alias: 'd',\n type: 'boolean',\n default: false,\n describe: 'Print per-transaction error details (always shown for invalid transactions)',\n })\n .example(\n '$0 xyo tx validate ./tx.json',\n 'Validate a single signed transaction from a file',\n )\n .example(\n '$0 xyo tx validate ./txs.jsonl',\n 'Validate a batch of transactions, one per line',\n )\n .example(\n 'cat txs.jsonl | $0 xyo tx validate',\n 'Validate transactions piped from stdin',\n ),\n handler: async (argv) => {\n await validateTransactions({\n data: argv.data as string | undefined,\n detail: argv.detail as boolean,\n })\n },\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,3 @@
1
+ declare const aries: () => Promise<void>;
2
+
3
+ export { aries };