@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.
- package/README.md +693 -0
- package/dist/actions/audit/auditPaths.mjs +22 -0
- package/dist/actions/audit/auditPaths.mjs.map +1 -0
- package/dist/actions/audit/index.mjs +739 -0
- package/dist/actions/audit/index.mjs.map +1 -0
- package/dist/actions/audit/installPlugin.mjs +298 -0
- package/dist/actions/audit/installPlugin.mjs.map +1 -0
- package/dist/actions/audit/listSessions.mjs +93 -0
- package/dist/actions/audit/listSessions.mjs.map +1 -0
- package/dist/actions/audit/openAuditDir.mjs +44 -0
- package/dist/actions/audit/openAuditDir.mjs.map +1 -0
- package/dist/actions/audit/searchAudit.mjs +77 -0
- package/dist/actions/audit/searchAudit.mjs.map +1 -0
- package/dist/actions/audit/showAiMeta.mjs +105 -0
- package/dist/actions/audit/showAiMeta.mjs.map +1 -0
- package/dist/actions/audit/showSession.mjs +105 -0
- package/dist/actions/audit/showSession.mjs.map +1 -0
- package/dist/actions/audit/statusAudit.mjs +98 -0
- package/dist/actions/audit/statusAudit.mjs.map +1 -0
- package/dist/actions/clamp/clampAudit.mjs +53 -0
- package/dist/actions/clamp/clampAudit.mjs.map +1 -0
- package/dist/actions/clamp/index.mjs +2258 -0
- package/dist/actions/clamp/index.mjs.map +1 -0
- package/dist/actions/clamp/ipcServer.mjs +55 -0
- package/dist/actions/clamp/ipcServer.mjs.map +1 -0
- package/dist/actions/clamp/policyManagement.mjs +144 -0
- package/dist/actions/clamp/policyManagement.mjs.map +1 -0
- package/dist/actions/clamp/promptUser.mjs +91 -0
- package/dist/actions/clamp/promptUser.mjs.map +1 -0
- package/dist/actions/clamp/runClamped.mjs +2107 -0
- package/dist/actions/clamp/runClamped.mjs.map +1 -0
- package/dist/actions/clamp/sandboxExec.mjs +1612 -0
- package/dist/actions/clamp/sandboxExec.mjs.map +1 -0
- package/dist/actions/clamp/shellEnvSetup.mjs +59 -0
- package/dist/actions/clamp/shellEnvSetup.mjs.map +1 -0
- package/dist/actions/clamp/shimGenerator.mjs +68 -0
- package/dist/actions/clamp/shimGenerator.mjs.map +1 -0
- package/dist/actions/clamp/terminalRenderer.mjs +145 -0
- package/dist/actions/clamp/terminalRenderer.mjs.map +1 -0
- package/dist/actions/datalake/audit/auditLog.mjs +191 -0
- package/dist/actions/datalake/audit/auditLog.mjs.map +1 -0
- package/dist/actions/datalake/createDatalake.mjs +127 -0
- package/dist/actions/datalake/createDatalake.mjs.map +1 -0
- package/dist/actions/datalake/describeDatalake.mjs +159 -0
- package/dist/actions/datalake/describeDatalake.mjs.map +1 -0
- package/dist/actions/datalake/destroyDatalake.mjs +34 -0
- package/dist/actions/datalake/destroyDatalake.mjs.map +1 -0
- package/dist/actions/datalake/dev/downDevServer.mjs +102 -0
- package/dist/actions/datalake/dev/downDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/index.mjs +369 -0
- package/dist/actions/datalake/dev/index.mjs.map +1 -0
- package/dist/actions/datalake/dev/logsDevServer.mjs +44 -0
- package/dist/actions/datalake/dev/logsDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/paths.mjs +25 -0
- package/dist/actions/datalake/dev/paths.mjs.map +1 -0
- package/dist/actions/datalake/dev/resetDevServer.mjs +118 -0
- package/dist/actions/datalake/dev/resetDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/resolveServerBin.mjs +26 -0
- package/dist/actions/datalake/dev/resolveServerBin.mjs.map +1 -0
- package/dist/actions/datalake/dev/state.mjs +62 -0
- package/dist/actions/datalake/dev/state.mjs.map +1 -0
- package/dist/actions/datalake/dev/statusDevServer.mjs +101 -0
- package/dist/actions/datalake/dev/statusDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/upDevServer.mjs +221 -0
- package/dist/actions/datalake/dev/upDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/waitForHealth.mjs +22 -0
- package/dist/actions/datalake/dev/waitForHealth.mjs.map +1 -0
- package/dist/actions/datalake/formatters.mjs +90 -0
- package/dist/actions/datalake/formatters.mjs.map +1 -0
- package/dist/actions/datalake/grantAccess.mjs +116 -0
- package/dist/actions/datalake/grantAccess.mjs.map +1 -0
- package/dist/actions/datalake/index.mjs +361 -0
- package/dist/actions/datalake/index.mjs.map +1 -0
- package/dist/actions/datalake/listDatalakes.mjs +54 -0
- package/dist/actions/datalake/listDatalakes.mjs.map +1 -0
- package/dist/actions/datalake/login.mjs +20 -0
- package/dist/actions/datalake/login.mjs.map +1 -0
- package/dist/actions/datalake/logout.mjs +11 -0
- package/dist/actions/datalake/logout.mjs.map +1 -0
- package/dist/actions/datalake/mintToken.mjs +37 -0
- package/dist/actions/datalake/mintToken.mjs.map +1 -0
- package/dist/actions/datalake/parseSize.mjs +21 -0
- package/dist/actions/datalake/parseSize.mjs.map +1 -0
- package/dist/actions/datalake/payloads/fetchPayload.mjs +76 -0
- package/dist/actions/datalake/payloads/fetchPayload.mjs.map +1 -0
- package/dist/actions/datalake/payloads/index.mjs +271 -0
- package/dist/actions/datalake/payloads/index.mjs.map +1 -0
- package/dist/actions/datalake/payloads/mintAndConnect.mjs +46 -0
- package/dist/actions/datalake/payloads/mintAndConnect.mjs.map +1 -0
- package/dist/actions/datalake/payloads/parsePayloadsFile.mjs +71 -0
- package/dist/actions/datalake/payloads/parsePayloadsFile.mjs.map +1 -0
- package/dist/actions/datalake/payloads/pushPayloads.mjs +181 -0
- package/dist/actions/datalake/payloads/pushPayloads.mjs.map +1 -0
- package/dist/actions/datalake/payloads/tailPayloads.mjs +106 -0
- package/dist/actions/datalake/payloads/tailPayloads.mjs.map +1 -0
- package/dist/actions/datalake/resolveTarget.mjs +15 -0
- package/dist/actions/datalake/resolveTarget.mjs.map +1 -0
- package/dist/actions/datalake/revokeAccess.mjs +108 -0
- package/dist/actions/datalake/revokeAccess.mjs.map +1 -0
- package/dist/actions/datalake/useDatalake.mjs +22 -0
- package/dist/actions/datalake/useDatalake.mjs.map +1 -0
- package/dist/actions/detect/detectAiClients.mjs +405 -0
- package/dist/actions/detect/detectAiClients.mjs.map +1 -0
- package/dist/actions/detect/index.mjs +405 -0
- package/dist/actions/detect/index.mjs.map +1 -0
- package/dist/actions/hash/algorithms/blockhash.mjs +61 -0
- package/dist/actions/hash/algorithms/blockhash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/chromaprint.mjs +205 -0
- package/dist/actions/hash/algorithms/chromaprint.mjs.map +1 -0
- package/dist/actions/hash/algorithms/dhash.mjs +75 -0
- package/dist/actions/hash/algorithms/dhash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/index.mjs +818 -0
- package/dist/actions/hash/algorithms/index.mjs.map +1 -0
- package/dist/actions/hash/algorithms/nilsimsa.mjs +27 -0
- package/dist/actions/hash/algorithms/nilsimsa.mjs.map +1 -0
- package/dist/actions/hash/algorithms/pdq.mjs +83 -0
- package/dist/actions/hash/algorithms/pdq.mjs.map +1 -0
- package/dist/actions/hash/algorithms/phash.mjs +71 -0
- package/dist/actions/hash/algorithms/phash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/sha256.mjs +24 -0
- package/dist/actions/hash/algorithms/sha256.mjs.map +1 -0
- package/dist/actions/hash/algorithms/ssdeep.mjs +203 -0
- package/dist/actions/hash/algorithms/ssdeep.mjs.map +1 -0
- package/dist/actions/hash/algorithms/tlsh.mjs +66 -0
- package/dist/actions/hash/algorithms/tlsh.mjs.map +1 -0
- package/dist/actions/hash/algorithms/types.mjs +1 -0
- package/dist/actions/hash/algorithms/types.mjs.map +1 -0
- package/dist/actions/hash/algorithms/videoFrames.mjs +404 -0
- package/dist/actions/hash/algorithms/videoFrames.mjs.map +1 -0
- package/dist/actions/hash/algorithms/xyo.mjs +30 -0
- package/dist/actions/hash/algorithms/xyo.mjs.map +1 -0
- package/dist/actions/hash/compareHashes.mjs +823 -0
- package/dist/actions/hash/compareHashes.mjs.map +1 -0
- package/dist/actions/hash/hashInput.mjs +868 -0
- package/dist/actions/hash/hashInput.mjs.map +1 -0
- package/dist/actions/hash/index.mjs +881 -0
- package/dist/actions/hash/index.mjs.map +1 -0
- package/dist/actions/hash/lib/hamming.mjs +44 -0
- package/dist/actions/hash/lib/hamming.mjs.map +1 -0
- package/dist/actions/hash/lib/levenshtein.mjs +36 -0
- package/dist/actions/hash/lib/levenshtein.mjs.map +1 -0
- package/dist/actions/hash/lib/runBinary.mjs +54 -0
- package/dist/actions/hash/lib/runBinary.mjs.map +1 -0
- package/dist/actions/hash/lib/which.mjs +36 -0
- package/dist/actions/hash/lib/which.mjs.map +1 -0
- package/dist/actions/hash/lib/withTempfile.mjs +19 -0
- package/dist/actions/hash/lib/withTempfile.mjs.map +1 -0
- package/dist/actions/index.mjs +4615 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/actions/printVersion.mjs +12 -0
- package/dist/actions/printVersion.mjs.map +1 -0
- package/dist/actions/sync/index.mjs +51 -0
- package/dist/actions/sync/index.mjs.map +1 -0
- package/dist/actions/sync/syncAiConfig.mjs +51 -0
- package/dist/actions/sync/syncAiConfig.mjs.map +1 -0
- package/dist/actions/wallet/account/deriveAndAdd.mjs +394 -0
- package/dist/actions/wallet/account/deriveAndAdd.mjs.map +1 -0
- package/dist/actions/wallet/account/getActiveWallet.mjs +338 -0
- package/dist/actions/wallet/account/getActiveWallet.mjs.map +1 -0
- package/dist/actions/wallet/account/labelAccount.mjs +389 -0
- package/dist/actions/wallet/account/labelAccount.mjs.map +1 -0
- package/dist/actions/wallet/account/listAccounts.mjs +374 -0
- package/dist/actions/wallet/account/listAccounts.mjs.map +1 -0
- package/dist/actions/wallet/account/removeAccount.mjs +384 -0
- package/dist/actions/wallet/account/removeAccount.mjs.map +1 -0
- package/dist/actions/wallet/account/showAccount.mjs +368 -0
- package/dist/actions/wallet/account/showAccount.mjs.map +1 -0
- package/dist/actions/wallet/addressBook/storage.mjs +110 -0
- package/dist/actions/wallet/addressBook/storage.mjs.map +1 -0
- package/dist/actions/wallet/backup/exportBackup.mjs +93 -0
- package/dist/actions/wallet/backup/exportBackup.mjs.map +1 -0
- package/dist/actions/wallet/backup/importBackup.mjs +142 -0
- package/dist/actions/wallet/backup/importBackup.mjs.map +1 -0
- package/dist/actions/wallet/balance/getBalance.mjs +434 -0
- package/dist/actions/wallet/balance/getBalance.mjs.map +1 -0
- package/dist/actions/wallet/client/walletClient.mjs +64 -0
- package/dist/actions/wallet/client/walletClient.mjs.map +1 -0
- package/dist/actions/wallet/contact/contactActions.mjs +120 -0
- package/dist/actions/wallet/contact/contactActions.mjs.map +1 -0
- package/dist/actions/wallet/contact/storage.mjs +69 -0
- package/dist/actions/wallet/contact/storage.mjs.map +1 -0
- package/dist/actions/wallet/index.mjs +1439 -0
- package/dist/actions/wallet/index.mjs.map +1 -0
- package/dist/actions/wallet/network/networkActions.mjs +137 -0
- package/dist/actions/wallet/network/networkActions.mjs.map +1 -0
- package/dist/actions/wallet/network/storage.mjs +93 -0
- package/dist/actions/wallet/network/storage.mjs.map +1 -0
- package/dist/actions/wallet/password/changePassword.mjs +282 -0
- package/dist/actions/wallet/password/changePassword.mjs.map +1 -0
- package/dist/actions/wallet/password/getActiveKey.mjs +297 -0
- package/dist/actions/wallet/password/getActiveKey.mjs.map +1 -0
- package/dist/actions/wallet/password/initOrUnlock.mjs +337 -0
- package/dist/actions/wallet/password/initOrUnlock.mjs.map +1 -0
- package/dist/actions/wallet/password/passwordStorage.mjs +69 -0
- package/dist/actions/wallet/password/passwordStorage.mjs.map +1 -0
- package/dist/actions/wallet/password/setPassword.mjs +138 -0
- package/dist/actions/wallet/password/setPassword.mjs.map +1 -0
- package/dist/actions/wallet/password/validatePassword.mjs +123 -0
- package/dist/actions/wallet/password/validatePassword.mjs.map +1 -0
- package/dist/actions/wallet/passwordKey.mjs +87 -0
- package/dist/actions/wallet/passwordKey.mjs.map +1 -0
- package/dist/actions/wallet/paths.mjs +26 -0
- package/dist/actions/wallet/paths.mjs.map +1 -0
- package/dist/actions/wallet/prompt.mjs +93 -0
- package/dist/actions/wallet/prompt.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/createPhrase.mjs +392 -0
- package/dist/actions/wallet/seedPhrase/createPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/exportPhrase.mjs +334 -0
- package/dist/actions/wallet/seedPhrase/exportPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/idGen.mjs +11 -0
- package/dist/actions/wallet/seedPhrase/idGen.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/importPhrase.mjs +393 -0
- package/dist/actions/wallet/seedPhrase/importPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/listPhrases.mjs +62 -0
- package/dist/actions/wallet/seedPhrase/listPhrases.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/phraseStorage.mjs +89 -0
- package/dist/actions/wallet/seedPhrase/phraseStorage.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/removePhrase.mjs +366 -0
- package/dist/actions/wallet/seedPhrase/removePhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/renamePhrase.mjs +78 -0
- package/dist/actions/wallet/seedPhrase/renamePhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/types.mjs +1 -0
- package/dist/actions/wallet/seedPhrase/types.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/usePhrase.mjs +83 -0
- package/dist/actions/wallet/seedPhrase/usePhrase.mjs.map +1 -0
- package/dist/actions/wallet/session/machineId.mjs +145 -0
- package/dist/actions/wallet/session/machineId.mjs.map +1 -0
- package/dist/actions/wallet/session/sessionCache.mjs +221 -0
- package/dist/actions/wallet/session/sessionCache.mjs.map +1 -0
- package/dist/actions/wallet/session/unlock.mjs +307 -0
- package/dist/actions/wallet/session/unlock.mjs.map +1 -0
- package/dist/actions/wallet/sign/signPayload.mjs +637 -0
- package/dist/actions/wallet/sign/signPayload.mjs.map +1 -0
- package/dist/actions/wallet/storage.mjs +51 -0
- package/dist/actions/wallet/storage.mjs.map +1 -0
- package/dist/actions/wallet/transaction/broadcastTransaction.mjs +453 -0
- package/dist/actions/wallet/transaction/broadcastTransaction.mjs.map +1 -0
- package/dist/actions/wallet/transaction/sendTransaction.mjs +457 -0
- package/dist/actions/wallet/transaction/sendTransaction.mjs.map +1 -0
- package/dist/actions/wallet/transaction/signTransactionFile.mjs +378 -0
- package/dist/actions/wallet/transaction/signTransactionFile.mjs.map +1 -0
- package/dist/actions/xyo/index.mjs +138 -0
- package/dist/actions/xyo/index.mjs.map +1 -0
- package/dist/actions/xyo/transaction/index.mjs +138 -0
- package/dist/actions/xyo/transaction/index.mjs.map +1 -0
- package/dist/actions/xyo/transaction/validateTransactions.mjs +138 -0
- package/dist/actions/xyo/transaction/validateTransactions.mjs.map +1 -0
- package/dist/aries.mjs +8466 -0
- package/dist/aries.mjs.map +1 -0
- package/dist/bin/aries.mjs +8472 -0
- package/dist/bin/aries.mjs.map +1 -0
- package/dist/commands/aiCommand.mjs +492 -0
- package/dist/commands/aiCommand.mjs.map +1 -0
- package/dist/commands/auditAiCommand.mjs +119 -0
- package/dist/commands/auditAiCommand.mjs.map +1 -0
- package/dist/commands/auditCommand.mjs +857 -0
- package/dist/commands/auditCommand.mjs.map +1 -0
- package/dist/commands/auditInstallCommand.mjs +324 -0
- package/dist/commands/auditInstallCommand.mjs.map +1 -0
- package/dist/commands/auditListCommand.mjs +107 -0
- package/dist/commands/auditListCommand.mjs.map +1 -0
- package/dist/commands/auditOpenCommand.mjs +51 -0
- package/dist/commands/auditOpenCommand.mjs.map +1 -0
- package/dist/commands/auditSearchCommand.mjs +98 -0
- package/dist/commands/auditSearchCommand.mjs.map +1 -0
- package/dist/commands/auditShowCommand.mjs +123 -0
- package/dist/commands/auditShowCommand.mjs.map +1 -0
- package/dist/commands/auditStatusCommand.mjs +105 -0
- package/dist/commands/auditStatusCommand.mjs.map +1 -0
- package/dist/commands/clampCommand.mjs +2328 -0
- package/dist/commands/clampCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyCommand.mjs +184 -0
- package/dist/commands/clampPolicyCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyInitCommand.mjs +63 -0
- package/dist/commands/clampPolicyInitCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyListCommand.mjs +56 -0
- package/dist/commands/clampPolicyListCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyShowCommand.mjs +83 -0
- package/dist/commands/clampPolicyShowCommand.mjs.map +1 -0
- package/dist/commands/clampRunCommand.mjs +2137 -0
- package/dist/commands/clampRunCommand.mjs.map +1 -0
- package/dist/commands/datalakeAuditCommand.mjs +273 -0
- package/dist/commands/datalakeAuditCommand.mjs.map +1 -0
- package/dist/commands/datalakeCommand.mjs +1637 -0
- package/dist/commands/datalakeCommand.mjs.map +1 -0
- package/dist/commands/datalakeCreateCommand.mjs +189 -0
- package/dist/commands/datalakeCreateCommand.mjs.map +1 -0
- package/dist/commands/datalakeDescribeCommand.mjs +172 -0
- package/dist/commands/datalakeDescribeCommand.mjs.map +1 -0
- package/dist/commands/datalakeDestroyCommand.mjs +53 -0
- package/dist/commands/datalakeDestroyCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevCommand.mjs +470 -0
- package/dist/commands/datalakeDevCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevDownCommand.mjs +111 -0
- package/dist/commands/datalakeDevDownCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevLogsCommand.mjs +65 -0
- package/dist/commands/datalakeDevLogsCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevResetCommand.mjs +125 -0
- package/dist/commands/datalakeDevResetCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevStatusCommand.mjs +110 -0
- package/dist/commands/datalakeDevStatusCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevUpCommand.mjs +268 -0
- package/dist/commands/datalakeDevUpCommand.mjs.map +1 -0
- package/dist/commands/datalakeFetchCommand.mjs +106 -0
- package/dist/commands/datalakeFetchCommand.mjs.map +1 -0
- package/dist/commands/datalakeGrantCommand.mjs +147 -0
- package/dist/commands/datalakeGrantCommand.mjs.map +1 -0
- package/dist/commands/datalakeListCommand.mjs +61 -0
- package/dist/commands/datalakeListCommand.mjs.map +1 -0
- package/dist/commands/datalakeLoginCommand.mjs +39 -0
- package/dist/commands/datalakeLoginCommand.mjs.map +1 -0
- package/dist/commands/datalakeLogoutCommand.mjs +20 -0
- package/dist/commands/datalakeLogoutCommand.mjs.map +1 -0
- package/dist/commands/datalakePushCommand.mjs +214 -0
- package/dist/commands/datalakePushCommand.mjs.map +1 -0
- package/dist/commands/datalakeRevokeCommand.mjs +127 -0
- package/dist/commands/datalakeRevokeCommand.mjs.map +1 -0
- package/dist/commands/datalakeTailCommand.mjs +144 -0
- package/dist/commands/datalakeTailCommand.mjs.map +1 -0
- package/dist/commands/datalakeTokenCommand.mjs +61 -0
- package/dist/commands/datalakeTokenCommand.mjs.map +1 -0
- package/dist/commands/datalakeUseCommand.mjs +35 -0
- package/dist/commands/datalakeUseCommand.mjs.map +1 -0
- package/dist/commands/detectCommand.mjs +419 -0
- package/dist/commands/detectCommand.mjs.map +1 -0
- package/dist/commands/hashCommand.mjs +976 -0
- package/dist/commands/hashCommand.mjs.map +1 -0
- package/dist/commands/hashCompareCommand.mjs +865 -0
- package/dist/commands/hashCompareCommand.mjs.map +1 -0
- package/dist/commands/index.mjs +8461 -0
- package/dist/commands/index.mjs.map +1 -0
- package/dist/commands/syncCommand.mjs +66 -0
- package/dist/commands/syncCommand.mjs.map +1 -0
- package/dist/commands/versionCommand.mjs +24 -0
- package/dist/commands/versionCommand.mjs.map +1 -0
- package/dist/commands/walletAccountCommand.mjs +536 -0
- package/dist/commands/walletAccountCommand.mjs.map +1 -0
- package/dist/commands/walletAccountDeriveCommand.mjs +415 -0
- package/dist/commands/walletAccountDeriveCommand.mjs.map +1 -0
- package/dist/commands/walletAccountLabelCommand.mjs +405 -0
- package/dist/commands/walletAccountLabelCommand.mjs.map +1 -0
- package/dist/commands/walletAccountListCommand.mjs +381 -0
- package/dist/commands/walletAccountListCommand.mjs.map +1 -0
- package/dist/commands/walletAccountRemoveCommand.mjs +396 -0
- package/dist/commands/walletAccountRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletAccountShowCommand.mjs +380 -0
- package/dist/commands/walletAccountShowCommand.mjs.map +1 -0
- package/dist/commands/walletBackupCommand.mjs +222 -0
- package/dist/commands/walletBackupCommand.mjs.map +1 -0
- package/dist/commands/walletBackupExportCommand.mjs +107 -0
- package/dist/commands/walletBackupExportCommand.mjs.map +1 -0
- package/dist/commands/walletBackupImportCommand.mjs +154 -0
- package/dist/commands/walletBackupImportCommand.mjs.map +1 -0
- package/dist/commands/walletBalanceCommand.mjs +448 -0
- package/dist/commands/walletBalanceCommand.mjs.map +1 -0
- package/dist/commands/walletCommand.mjs +1968 -0
- package/dist/commands/walletCommand.mjs.map +1 -0
- package/dist/commands/walletContactAddCommand.mjs +111 -0
- package/dist/commands/walletContactAddCommand.mjs.map +1 -0
- package/dist/commands/walletContactCommand.mjs +184 -0
- package/dist/commands/walletContactCommand.mjs.map +1 -0
- package/dist/commands/walletContactListCommand.mjs +66 -0
- package/dist/commands/walletContactListCommand.mjs.map +1 -0
- package/dist/commands/walletContactRemoveCommand.mjs +97 -0
- package/dist/commands/walletContactRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletContactRenameCommand.mjs +114 -0
- package/dist/commands/walletContactRenameCommand.mjs.map +1 -0
- package/dist/commands/walletCreateCommand.mjs +407 -0
- package/dist/commands/walletCreateCommand.mjs.map +1 -0
- package/dist/commands/walletExportCommand.mjs +345 -0
- package/dist/commands/walletExportCommand.mjs.map +1 -0
- package/dist/commands/walletImportCommand.mjs +413 -0
- package/dist/commands/walletImportCommand.mjs.map +1 -0
- package/dist/commands/walletListCommand.mjs +69 -0
- package/dist/commands/walletListCommand.mjs.map +1 -0
- package/dist/commands/walletLockCommand.mjs +56 -0
- package/dist/commands/walletLockCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkAddCommand.mjs +131 -0
- package/dist/commands/walletNetworkAddCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkCommand.mjs +206 -0
- package/dist/commands/walletNetworkCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkListCommand.mjs +104 -0
- package/dist/commands/walletNetworkListCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkRemoveCommand.mjs +112 -0
- package/dist/commands/walletNetworkRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkUseCommand.mjs +110 -0
- package/dist/commands/walletNetworkUseCommand.mjs.map +1 -0
- package/dist/commands/walletPasswordChangeCommand.mjs +291 -0
- package/dist/commands/walletPasswordChangeCommand.mjs.map +1 -0
- package/dist/commands/walletPasswordCommand.mjs +301 -0
- package/dist/commands/walletPasswordCommand.mjs.map +1 -0
- package/dist/commands/walletRemoveCommand.mjs +378 -0
- package/dist/commands/walletRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletRenameCommand.mjs +94 -0
- package/dist/commands/walletRenameCommand.mjs.map +1 -0
- package/dist/commands/walletSignCommand.mjs +662 -0
- package/dist/commands/walletSignCommand.mjs.map +1 -0
- package/dist/commands/walletTxBroadcastCommand.mjs +473 -0
- package/dist/commands/walletTxBroadcastCommand.mjs.map +1 -0
- package/dist/commands/walletTxCommand.mjs +612 -0
- package/dist/commands/walletTxCommand.mjs.map +1 -0
- package/dist/commands/walletTxSendCommand.mjs +492 -0
- package/dist/commands/walletTxSendCommand.mjs.map +1 -0
- package/dist/commands/walletTxSignCommand.mjs +403 -0
- package/dist/commands/walletTxSignCommand.mjs.map +1 -0
- package/dist/commands/walletUnlockCommand.mjs +308 -0
- package/dist/commands/walletUnlockCommand.mjs.map +1 -0
- package/dist/commands/walletUseCommand.mjs +95 -0
- package/dist/commands/walletUseCommand.mjs.map +1 -0
- package/dist/commands/xyoCommand.mjs +188 -0
- package/dist/commands/xyoCommand.mjs.map +1 -0
- package/dist/commands/xyoTxCommand.mjs +178 -0
- package/dist/commands/xyoTxCommand.mjs.map +1 -0
- package/dist/commands/xyoTxValidateCommand.mjs +168 -0
- package/dist/commands/xyoTxValidateCommand.mjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +8466 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/modules.d.mjs +1 -0
- package/dist/types/modules.d.mjs.map +1 -0
- package/package.json +197 -0
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
export {
|
|
136
|
+
validateTransactions
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/xyo/transaction/validateTransactions.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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
export {
|
|
136
|
+
validateTransactions
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=validateTransactions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/xyo/transaction/validateTransactions.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"],"mappings":"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","names":[]}
|