@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,366 @@
|
|
|
1
|
+
// src/actions/wallet/seedPhrase/removePhrase.ts
|
|
2
|
+
import { HDWallet } from "@xyo-network/sdk-js";
|
|
3
|
+
import { DEFAULT_WALLET_PATH } from "@xyo-network/xl1-protocol-sdk";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
|
|
6
|
+
// src/actions/wallet/paths.ts
|
|
7
|
+
import OS from "os";
|
|
8
|
+
import PATH from "path";
|
|
9
|
+
function walletRoot() {
|
|
10
|
+
const override = process.env.ARIES_WALLET_HOME;
|
|
11
|
+
if (override) return override;
|
|
12
|
+
return PATH.join(OS.homedir(), ".aries", "wallet");
|
|
13
|
+
}
|
|
14
|
+
function walletPaths(root = walletRoot()) {
|
|
15
|
+
return {
|
|
16
|
+
root,
|
|
17
|
+
password: PATH.join(root, "password.json"),
|
|
18
|
+
phrases: PATH.join(root, "phrases.json"),
|
|
19
|
+
active: PATH.join(root, "active.json"),
|
|
20
|
+
addressBooks: PATH.join(root, "address-books.json"),
|
|
21
|
+
contacts: PATH.join(root, "contacts.json"),
|
|
22
|
+
networks: PATH.join(root, "networks.json"),
|
|
23
|
+
session: PATH.join(root, "session.json"),
|
|
24
|
+
machineId: PATH.join(root, ".machine-id")
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// src/actions/wallet/storage.ts
|
|
29
|
+
import FS from "fs";
|
|
30
|
+
import PATH2 from "path";
|
|
31
|
+
function ensureWalletDir(root = walletRoot()) {
|
|
32
|
+
if (!FS.existsSync(root)) {
|
|
33
|
+
FS.mkdirSync(root, { recursive: true, mode: 448 });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
FS.chmodSync(root, 448);
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function readJsonFile(file) {
|
|
42
|
+
if (!FS.existsSync(file)) return void 0;
|
|
43
|
+
const raw = FS.readFileSync(file, "utf8");
|
|
44
|
+
if (raw.trim().length === 0) return void 0;
|
|
45
|
+
return JSON.parse(raw);
|
|
46
|
+
}
|
|
47
|
+
function writeJsonFile(file, value) {
|
|
48
|
+
ensureWalletDir(PATH2.dirname(file));
|
|
49
|
+
const tmp = `${file}.tmp`;
|
|
50
|
+
FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}
|
|
51
|
+
`, { mode: 384 });
|
|
52
|
+
FS.renameSync(tmp, file);
|
|
53
|
+
try {
|
|
54
|
+
FS.chmodSync(file, 384);
|
|
55
|
+
} catch {
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function deleteFile(file) {
|
|
59
|
+
if (FS.existsSync(file)) FS.unlinkSync(file);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// src/actions/wallet/addressBook/storage.ts
|
|
63
|
+
function readAllAddressBooks() {
|
|
64
|
+
return readJsonFile(walletPaths().addressBooks) ?? {};
|
|
65
|
+
}
|
|
66
|
+
function writeAllAddressBooks(data) {
|
|
67
|
+
writeJsonFile(walletPaths().addressBooks, data);
|
|
68
|
+
}
|
|
69
|
+
function removeAddressBook(rootAddress) {
|
|
70
|
+
const all = readAllAddressBooks();
|
|
71
|
+
const key = rootAddress.toLowerCase();
|
|
72
|
+
if (key in all) {
|
|
73
|
+
delete all[key];
|
|
74
|
+
writeAllAddressBooks(all);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/actions/wallet/prompt.ts
|
|
79
|
+
import { execFileSync } from "child_process";
|
|
80
|
+
import {
|
|
81
|
+
closeSync,
|
|
82
|
+
openSync,
|
|
83
|
+
readSync,
|
|
84
|
+
writeSync
|
|
85
|
+
} from "fs";
|
|
86
|
+
var CTRL_C = 3;
|
|
87
|
+
var ENTER = 13;
|
|
88
|
+
var NEWLINE = 10;
|
|
89
|
+
var BACKSPACE_DELETE = 127;
|
|
90
|
+
var BACKSPACE = 8;
|
|
91
|
+
function readChars(readFd, writeFd, mask) {
|
|
92
|
+
const chars = [];
|
|
93
|
+
const buf = Buffer.alloc(1);
|
|
94
|
+
for (; ; ) {
|
|
95
|
+
const bytes = readSync(readFd, buf, 0, 1, null);
|
|
96
|
+
if (bytes === 0) break;
|
|
97
|
+
const ch = buf[0];
|
|
98
|
+
if (ch === ENTER || ch === NEWLINE) break;
|
|
99
|
+
if (ch === CTRL_C) {
|
|
100
|
+
writeSync(writeFd, "\n");
|
|
101
|
+
throw new Error("Aborted");
|
|
102
|
+
}
|
|
103
|
+
if (ch === BACKSPACE_DELETE || ch === BACKSPACE) {
|
|
104
|
+
if (chars.length > 0) {
|
|
105
|
+
chars.pop();
|
|
106
|
+
writeSync(writeFd, "\b \b");
|
|
107
|
+
}
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
chars.push(ch);
|
|
111
|
+
writeSync(writeFd, mask ? "*" : String.fromCodePoint(ch));
|
|
112
|
+
}
|
|
113
|
+
writeSync(writeFd, "\n");
|
|
114
|
+
return Buffer.from(chars).toString("utf8");
|
|
115
|
+
}
|
|
116
|
+
function saveStty(readFd) {
|
|
117
|
+
try {
|
|
118
|
+
return execFileSync("stty", ["-g"], {
|
|
119
|
+
stdio: [readFd, "pipe", "ignore"],
|
|
120
|
+
encoding: "utf8"
|
|
121
|
+
}).trim();
|
|
122
|
+
} catch {
|
|
123
|
+
return void 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function applyStty(readFd, args) {
|
|
127
|
+
try {
|
|
128
|
+
execFileSync("stty", args, { stdio: [readFd, "ignore", "ignore"] });
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function promptTty(options) {
|
|
133
|
+
const readFd = openSync("/dev/tty", "r");
|
|
134
|
+
const writeFd = openSync("/dev/tty", "w");
|
|
135
|
+
const saved = saveStty(readFd);
|
|
136
|
+
try {
|
|
137
|
+
if (saved) applyStty(readFd, ["-echo", "-icanon", "min", "1", "time", "0"]);
|
|
138
|
+
writeSync(writeFd, options.prompt);
|
|
139
|
+
return readChars(readFd, writeFd, options.mask === true);
|
|
140
|
+
} finally {
|
|
141
|
+
if (saved) applyStty(readFd, [saved]);
|
|
142
|
+
try {
|
|
143
|
+
closeSync(readFd);
|
|
144
|
+
} catch {
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
closeSync(writeFd);
|
|
148
|
+
} catch {
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function promptPassword(prompt = "Password: ") {
|
|
153
|
+
const env = process.env.ARIES_WALLET_PASSWORD;
|
|
154
|
+
if (env !== void 0 && env.length > 0) return env;
|
|
155
|
+
return promptTty({ prompt, mask: true });
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// src/actions/wallet/session/sessionCache.ts
|
|
159
|
+
import { webcrypto as webcrypto3 } from "crypto";
|
|
160
|
+
|
|
161
|
+
// src/actions/wallet/passwordKey.ts
|
|
162
|
+
import { webcrypto } from "crypto";
|
|
163
|
+
var subtle = webcrypto.subtle;
|
|
164
|
+
var INITIALIZATION_VECTOR_LENGTH = 12;
|
|
165
|
+
var PBKDF2_ITERATIONS = 1e5;
|
|
166
|
+
var SALT_BYTES = 16;
|
|
167
|
+
var PasswordKey = class _PasswordKey {
|
|
168
|
+
password;
|
|
169
|
+
salt;
|
|
170
|
+
constructor(password, salt = _PasswordKey.generateSalt()) {
|
|
171
|
+
this.password = password;
|
|
172
|
+
this.salt = salt;
|
|
173
|
+
}
|
|
174
|
+
static async decryptString(key, data) {
|
|
175
|
+
const encryptedData = new Uint8Array(Buffer.from(data, "base64"));
|
|
176
|
+
const iv = encryptedData.slice(0, INITIALIZATION_VECTOR_LENGTH);
|
|
177
|
+
const ciphertext = encryptedData.slice(INITIALIZATION_VECTOR_LENGTH);
|
|
178
|
+
const decrypted = await subtle.decrypt({ name: "AES-GCM", iv }, key, ciphertext);
|
|
179
|
+
return new TextDecoder("utf-8").decode(decrypted);
|
|
180
|
+
}
|
|
181
|
+
static async encryptString(key, data) {
|
|
182
|
+
const iv = webcrypto.getRandomValues(new Uint8Array(INITIALIZATION_VECTOR_LENGTH));
|
|
183
|
+
const ciphertext = await subtle.encrypt({ name: "AES-GCM", iv }, key, new TextEncoder().encode(data));
|
|
184
|
+
const combined = new Uint8Array(iv.length + ciphertext.byteLength);
|
|
185
|
+
combined.set(iv, 0);
|
|
186
|
+
combined.set(new Uint8Array(ciphertext), iv.length);
|
|
187
|
+
return Buffer.from(combined).toString("base64");
|
|
188
|
+
}
|
|
189
|
+
static generateSalt() {
|
|
190
|
+
const array = new Uint8Array(SALT_BYTES);
|
|
191
|
+
webcrypto.getRandomValues(array);
|
|
192
|
+
return [...array].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
193
|
+
}
|
|
194
|
+
static async getHashFromKey(key) {
|
|
195
|
+
const exported = await subtle.exportKey("raw", key);
|
|
196
|
+
const digest = await subtle.digest("SHA-256", exported);
|
|
197
|
+
return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
198
|
+
}
|
|
199
|
+
static async importEncryptionKey(rawKey) {
|
|
200
|
+
return await subtle.importKey("raw", rawKey, { name: "AES-GCM" }, false, ["encrypt", "decrypt"]);
|
|
201
|
+
}
|
|
202
|
+
static async importExtractableKey(rawKey) {
|
|
203
|
+
return await subtle.importKey("raw", rawKey, { name: "AES-GCM" }, true, ["encrypt", "decrypt"]);
|
|
204
|
+
}
|
|
205
|
+
static async serializeKey(key, salt = _PasswordKey.generateSalt()) {
|
|
206
|
+
const hash = await _PasswordKey.getHashFromKey(key);
|
|
207
|
+
return { hash, salt };
|
|
208
|
+
}
|
|
209
|
+
async deriveKey() {
|
|
210
|
+
const encoder = new TextEncoder();
|
|
211
|
+
const passphraseKey = await subtle.importKey(
|
|
212
|
+
"raw",
|
|
213
|
+
encoder.encode(this.password),
|
|
214
|
+
{ name: "PBKDF2" },
|
|
215
|
+
false,
|
|
216
|
+
["deriveKey"]
|
|
217
|
+
);
|
|
218
|
+
return await subtle.deriveKey(
|
|
219
|
+
{
|
|
220
|
+
name: "PBKDF2",
|
|
221
|
+
salt: encoder.encode(this.salt),
|
|
222
|
+
iterations: PBKDF2_ITERATIONS,
|
|
223
|
+
hash: "SHA-256"
|
|
224
|
+
},
|
|
225
|
+
passphraseKey,
|
|
226
|
+
{ name: "AES-GCM", length: 256 },
|
|
227
|
+
true,
|
|
228
|
+
["encrypt", "decrypt"]
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
async function decryptWithKey(key, data) {
|
|
233
|
+
const exported = await subtle.exportKey("raw", key);
|
|
234
|
+
const encKey = await PasswordKey.importEncryptionKey(exported);
|
|
235
|
+
return await PasswordKey.decryptString(encKey, data);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// src/actions/wallet/session/machineId.ts
|
|
239
|
+
import { webcrypto as webcrypto2 } from "crypto";
|
|
240
|
+
import FS2 from "fs";
|
|
241
|
+
import OS2 from "os";
|
|
242
|
+
function generateMachineSecret() {
|
|
243
|
+
const bytes = new Uint8Array(32);
|
|
244
|
+
webcrypto2.getRandomValues(bytes);
|
|
245
|
+
return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
246
|
+
}
|
|
247
|
+
function loadMachineSecret() {
|
|
248
|
+
ensureWalletDir();
|
|
249
|
+
const path = walletPaths().machineId;
|
|
250
|
+
if (FS2.existsSync(path)) {
|
|
251
|
+
return FS2.readFileSync(path, "utf8").trim();
|
|
252
|
+
}
|
|
253
|
+
const secret = generateMachineSecret();
|
|
254
|
+
FS2.writeFileSync(path, `${secret}
|
|
255
|
+
`, { mode: 384 });
|
|
256
|
+
try {
|
|
257
|
+
FS2.chmodSync(path, 384);
|
|
258
|
+
} catch {
|
|
259
|
+
}
|
|
260
|
+
return secret;
|
|
261
|
+
}
|
|
262
|
+
async function deriveMachineKey() {
|
|
263
|
+
const secret = loadMachineSecret();
|
|
264
|
+
const stable = `${OS2.hostname()}:${OS2.userInfo().username}:${secret}`;
|
|
265
|
+
const passwordKey = new PasswordKey(stable, "aries-wallet-machine-kek-v1");
|
|
266
|
+
return await passwordKey.deriveKey();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// src/actions/wallet/session/sessionCache.ts
|
|
270
|
+
var subtle2 = webcrypto3.subtle;
|
|
271
|
+
var DEFAULT_SESSION_TTL_SECONDS = 15 * 60;
|
|
272
|
+
function lockSession() {
|
|
273
|
+
deleteFile(walletPaths().session);
|
|
274
|
+
}
|
|
275
|
+
async function readSession() {
|
|
276
|
+
const data = readJsonFile(walletPaths().session);
|
|
277
|
+
if (!data) return void 0;
|
|
278
|
+
if (data.expiresAt <= Date.now()) {
|
|
279
|
+
lockSession();
|
|
280
|
+
return void 0;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
const machineKey = await deriveMachineKey();
|
|
284
|
+
const exportedBase64 = await decryptWithKey(machineKey, data.encryptedKey);
|
|
285
|
+
const raw = Buffer.from(exportedBase64, "base64");
|
|
286
|
+
return await PasswordKey.importExtractableKey(
|
|
287
|
+
raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength)
|
|
288
|
+
);
|
|
289
|
+
} catch {
|
|
290
|
+
lockSession();
|
|
291
|
+
return void 0;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// src/actions/wallet/password/passwordStorage.ts
|
|
296
|
+
function readPassword() {
|
|
297
|
+
return readJsonFile(walletPaths().password);
|
|
298
|
+
}
|
|
299
|
+
function hasPassword() {
|
|
300
|
+
return readPassword() !== void 0;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// src/actions/wallet/password/validatePassword.ts
|
|
304
|
+
async function validatePassword(password) {
|
|
305
|
+
const stored = readPassword();
|
|
306
|
+
if (!stored) return void 0;
|
|
307
|
+
const passwordKey = new PasswordKey(password, stored.salt);
|
|
308
|
+
const key = await passwordKey.deriveKey();
|
|
309
|
+
const hash = await PasswordKey.getHashFromKey(key);
|
|
310
|
+
if (hash !== stored.hash) return void 0;
|
|
311
|
+
return key;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// src/actions/wallet/password/getActiveKey.ts
|
|
315
|
+
async function getActiveKey() {
|
|
316
|
+
if (!hasPassword()) {
|
|
317
|
+
throw new Error("Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.");
|
|
318
|
+
}
|
|
319
|
+
const cached = await readSession();
|
|
320
|
+
if (cached) return cached;
|
|
321
|
+
const password = promptPassword("Wallet password: ");
|
|
322
|
+
const key = await validatePassword(password);
|
|
323
|
+
if (!key) throw new Error("Incorrect password.");
|
|
324
|
+
return key;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// src/actions/wallet/seedPhrase/phraseStorage.ts
|
|
328
|
+
function readPhrases() {
|
|
329
|
+
const data = readJsonFile(walletPaths().phrases);
|
|
330
|
+
return data?.phrases ?? [];
|
|
331
|
+
}
|
|
332
|
+
function writePhrases(phrases) {
|
|
333
|
+
writeJsonFile(walletPaths().phrases, { phrases });
|
|
334
|
+
}
|
|
335
|
+
function readActive() {
|
|
336
|
+
return readJsonFile(walletPaths().active) ?? {};
|
|
337
|
+
}
|
|
338
|
+
function writeActive(active) {
|
|
339
|
+
writeJsonFile(walletPaths().active, active);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// src/actions/wallet/seedPhrase/removePhrase.ts
|
|
343
|
+
async function removePhrase(options) {
|
|
344
|
+
const phrases = readPhrases();
|
|
345
|
+
const target = phrases.find((p) => p.id === options.id || p.label === options.id);
|
|
346
|
+
if (!target) throw new Error(`Wallet not found: ${options.id}`);
|
|
347
|
+
try {
|
|
348
|
+
const key = await getActiveKey();
|
|
349
|
+
const mnemonic = await decryptWithKey(key, target.encryptedPhrase);
|
|
350
|
+
const root = await HDWallet.fromPhrase(mnemonic, DEFAULT_WALLET_PATH);
|
|
351
|
+
removeAddressBook(root.address);
|
|
352
|
+
} catch (e) {
|
|
353
|
+
console.warn(chalk.yellow(`Warning: failed to clean up address book: ${e.message}`));
|
|
354
|
+
}
|
|
355
|
+
const remaining = phrases.filter((p) => p.id !== target.id);
|
|
356
|
+
writePhrases(remaining);
|
|
357
|
+
const active = readActive();
|
|
358
|
+
if (active.phraseId === target.id) {
|
|
359
|
+
writeActive({ ...active, phraseId: remaining[0]?.id });
|
|
360
|
+
}
|
|
361
|
+
console.log(chalk.green(`Removed wallet ${chalk.cyan(target.label)} (id ${target.id})`));
|
|
362
|
+
}
|
|
363
|
+
export {
|
|
364
|
+
removePhrase
|
|
365
|
+
};
|
|
366
|
+
//# sourceMappingURL=removePhrase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/wallet/seedPhrase/removePhrase.ts","../../../../src/actions/wallet/paths.ts","../../../../src/actions/wallet/storage.ts","../../../../src/actions/wallet/addressBook/storage.ts","../../../../src/actions/wallet/prompt.ts","../../../../src/actions/wallet/session/sessionCache.ts","../../../../src/actions/wallet/passwordKey.ts","../../../../src/actions/wallet/session/machineId.ts","../../../../src/actions/wallet/password/passwordStorage.ts","../../../../src/actions/wallet/password/validatePassword.ts","../../../../src/actions/wallet/password/getActiveKey.ts","../../../../src/actions/wallet/seedPhrase/phraseStorage.ts"],"sourcesContent":["import { HDWallet } from '@xyo-network/sdk-js'\nimport { DEFAULT_WALLET_PATH } from '@xyo-network/xl1-protocol-sdk'\nimport chalk from 'chalk'\n\nimport { removeAddressBook } from '../addressBook/storage.ts'\nimport { getActiveKey } from '../password/getActiveKey.ts'\nimport { decryptWithKey } from '../passwordKey.ts'\nimport {\n readActive, readPhrases, writeActive, writePhrases,\n} from './phraseStorage.ts'\n\nexport interface RemovePhraseOptions {\n id: string\n}\n\nexport async function removePhrase(options: RemovePhraseOptions): Promise<void> {\n const phrases = readPhrases()\n const target = phrases.find(p => p.id === options.id || p.label === options.id)\n if (!target) throw new Error(`Wallet not found: ${options.id}`)\n try {\n const key = await getActiveKey()\n const mnemonic = await decryptWithKey(key, target.encryptedPhrase)\n const root = await HDWallet.fromPhrase(mnemonic, DEFAULT_WALLET_PATH)\n removeAddressBook(root.address)\n } catch (e) {\n console.warn(chalk.yellow(`Warning: failed to clean up address book: ${(e as Error).message}`))\n }\n const remaining = phrases.filter(p => p.id !== target.id)\n writePhrases(remaining)\n const active = readActive()\n if (active.phraseId === target.id) {\n writeActive({ ...active, phraseId: remaining[0]?.id })\n }\n console.log(chalk.green(`Removed wallet ${chalk.cyan(target.label)} (id ${target.id})`))\n}\n","import OS from 'node:os'\nimport PATH from 'node:path'\n\nexport interface WalletPaths {\n root: string\n password: string\n phrases: string\n active: string\n addressBooks: string\n contacts: string\n networks: string\n session: string\n machineId: string\n}\n\nexport function walletRoot(): string {\n const override = process.env.ARIES_WALLET_HOME\n if (override) return override\n return PATH.join(OS.homedir(), '.aries', 'wallet')\n}\n\nexport function walletPaths(root: string = walletRoot()): WalletPaths {\n return {\n root,\n password: PATH.join(root, 'password.json'),\n phrases: PATH.join(root, 'phrases.json'),\n active: PATH.join(root, 'active.json'),\n addressBooks: PATH.join(root, 'address-books.json'),\n contacts: PATH.join(root, 'contacts.json'),\n networks: PATH.join(root, 'networks.json'),\n session: PATH.join(root, 'session.json'),\n machineId: PATH.join(root, '.machine-id'),\n }\n}\n","import FS from 'node:fs'\nimport PATH from 'node:path'\n\nimport { walletRoot } from './paths.ts'\n\nexport function ensureWalletDir(root: string = walletRoot()): void {\n if (!FS.existsSync(root)) {\n FS.mkdirSync(root, { recursive: true, mode: 0o700 })\n return\n }\n try {\n FS.chmodSync(root, 0o700)\n } catch {\n // best-effort on platforms without chmod\n }\n}\n\nexport function readJsonFile<T>(file: string): T | undefined {\n if (!FS.existsSync(file)) return undefined\n const raw = FS.readFileSync(file, 'utf8')\n if (raw.trim().length === 0) return undefined\n return JSON.parse(raw) as T\n}\n\nexport function writeJsonFile(file: string, value: unknown): void {\n ensureWalletDir(PATH.dirname(file))\n const tmp = `${file}.tmp`\n FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 })\n FS.renameSync(tmp, file)\n try {\n FS.chmodSync(file, 0o600)\n } catch {\n // best-effort\n }\n}\n\nexport function deleteFile(file: string): void {\n if (FS.existsSync(file)) FS.unlinkSync(file)\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport interface AddressBookEntry {\n offset: string\n label?: string\n}\n\nexport interface AddressBook {\n entries: AddressBookEntry[]\n rootAddress: string\n version: number\n}\n\nexport type AddressBooksFile = Record<string, AddressBook>\n\nconst ADDRESS_BOOK_VERSION = 1\n\nexport function readAllAddressBooks(): AddressBooksFile {\n return readJsonFile<AddressBooksFile>(walletPaths().addressBooks) ?? {}\n}\n\nexport function writeAllAddressBooks(data: AddressBooksFile): void {\n writeJsonFile(walletPaths().addressBooks, data)\n}\n\nexport function readAddressBook(rootAddress: string): AddressBook {\n const all = readAllAddressBooks()\n const key = rootAddress.toLowerCase()\n return all[key] ?? {\n rootAddress: key,\n entries: [{ offset: '0' }, { offset: '1' }, { offset: '2' }],\n version: ADDRESS_BOOK_VERSION,\n }\n}\n\nexport function writeAddressBook(book: AddressBook): void {\n const all = readAllAddressBooks()\n all[book.rootAddress.toLowerCase()] = book\n writeAllAddressBooks(all)\n}\n\nexport function removeAddressBook(rootAddress: string): void {\n const all = readAllAddressBooks()\n const key = rootAddress.toLowerCase()\n if (key in all) {\n delete all[key]\n writeAllAddressBooks(all)\n }\n}\n\nexport function upsertAddressBookEntry(rootAddress: string, entry: AddressBookEntry): AddressBook {\n const book = readAddressBook(rootAddress)\n const existing = book.entries.find(e => e.offset === entry.offset)\n if (existing) {\n if (entry.label !== undefined) existing.label = entry.label\n } else {\n book.entries.push(entry)\n }\n writeAddressBook(book)\n return book\n}\n\nexport function removeAddressBookEntry(rootAddress: string, offset: string): AddressBook {\n const book = readAddressBook(rootAddress)\n book.entries = book.entries.filter(e => e.offset !== offset)\n writeAddressBook(book)\n return book\n}\n","import { execFileSync } from 'node:child_process'\nimport {\n closeSync, openSync, readSync, writeSync,\n} from 'node:fs'\n\nconst CTRL_C = 0x03\nconst ENTER = 0x0d\nconst NEWLINE = 0x0a\nconst BACKSPACE_DELETE = 0x7f\nconst BACKSPACE = 0x08\n\nexport interface PromptOptions {\n prompt: string\n mask?: boolean\n}\n\nfunction readChars(readFd: number, writeFd: number, mask: boolean): string {\n const chars: number[] = []\n const buf = Buffer.alloc(1)\n for (;;) {\n const bytes = readSync(readFd, buf, 0, 1, null)\n if (bytes === 0) break\n const ch = buf[0]\n if (ch === ENTER || ch === NEWLINE) break\n if (ch === CTRL_C) {\n writeSync(writeFd, '\\n')\n throw new Error('Aborted')\n }\n if (ch === BACKSPACE_DELETE || ch === BACKSPACE) {\n if (chars.length > 0) {\n chars.pop()\n writeSync(writeFd, '\\b \\b')\n }\n continue\n }\n chars.push(ch)\n writeSync(writeFd, mask ? '*' : String.fromCodePoint(ch))\n }\n writeSync(writeFd, '\\n')\n return Buffer.from(chars).toString('utf8')\n}\n\nfunction saveStty(readFd: number): string | undefined {\n try {\n return execFileSync('stty', ['-g'], {\n stdio: [readFd, 'pipe', 'ignore'],\n encoding: 'utf8',\n }).trim()\n } catch {\n return undefined\n }\n}\n\nfunction applyStty(readFd: number, args: string[]): void {\n try {\n execFileSync('stty', args, { stdio: [readFd, 'ignore', 'ignore'] })\n } catch { /* ignore */ }\n}\n\nexport function promptTty(options: PromptOptions): string {\n const readFd = openSync('/dev/tty', 'r')\n const writeFd = openSync('/dev/tty', 'w')\n const saved = saveStty(readFd)\n try {\n if (saved) applyStty(readFd, ['-echo', '-icanon', 'min', '1', 'time', '0'])\n writeSync(writeFd, options.prompt)\n return readChars(readFd, writeFd, options.mask === true)\n } finally {\n if (saved) applyStty(readFd, [saved])\n try {\n closeSync(readFd)\n } catch { /* ignore */ }\n try {\n closeSync(writeFd)\n } catch { /* ignore */ }\n }\n}\n\nexport function promptPassword(prompt = 'Password: '): string {\n const env = process.env.ARIES_WALLET_PASSWORD\n if (env !== undefined && env.length > 0) return env\n return promptTty({ prompt, mask: true })\n}\n\nexport function promptText(prompt: string): string {\n return promptTty({ prompt, mask: false })\n}\n\nexport function confirm(prompt: string): boolean {\n const answer = promptTty({ prompt: `${prompt} [y/N] `, mask: false }).trim().toLowerCase()\n return answer === 'y' || answer === 'yes'\n}\n","import { webcrypto } from 'node:crypto'\n\nimport {\n decryptWithKey, encryptWithKey, PasswordKey,\n} from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport {\n deleteFile, readJsonFile, writeJsonFile,\n} from '../storage.ts'\nimport { deriveMachineKey } from './machineId.ts'\n\ninterface SessionData {\n encryptedKey: string\n expiresAt: number\n}\n\nconst subtle = webcrypto.subtle\n\nexport const DEFAULT_SESSION_TTL_SECONDS = 15 * 60\n\nexport async function unlockSession(passwordKey: webcrypto.CryptoKey, ttlSeconds: number = DEFAULT_SESSION_TTL_SECONDS): Promise<number> {\n const machineKey = await deriveMachineKey()\n const exported = await subtle.exportKey('raw', passwordKey)\n const exportedBase64 = Buffer.from(new Uint8Array(exported)).toString('base64')\n const encryptedKey = await encryptWithKey(machineKey, exportedBase64)\n const expiresAt = Date.now() + ttlSeconds * 1000\n const data: SessionData = { encryptedKey, expiresAt }\n writeJsonFile(walletPaths().session, data)\n return expiresAt\n}\n\nexport function lockSession(): void {\n deleteFile(walletPaths().session)\n}\n\nexport async function readSession(): Promise<webcrypto.CryptoKey | undefined> {\n const data = readJsonFile<SessionData>(walletPaths().session)\n if (!data) return undefined\n if (data.expiresAt <= Date.now()) {\n lockSession()\n return undefined\n }\n try {\n const machineKey = await deriveMachineKey()\n const exportedBase64 = await decryptWithKey(machineKey, data.encryptedKey)\n const raw = Buffer.from(exportedBase64, 'base64')\n return await PasswordKey.importExtractableKey(\n raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength),\n )\n } catch {\n lockSession()\n return undefined\n }\n}\n\nexport function readSessionExpiry(): number | undefined {\n const data = readJsonFile<SessionData>(walletPaths().session)\n if (!data) return undefined\n if (data.expiresAt <= Date.now()) return undefined\n return data.expiresAt\n}\n","import { webcrypto } from 'node:crypto'\n\nconst subtle = webcrypto.subtle\n\nconst INITIALIZATION_VECTOR_LENGTH = 12\nconst PBKDF2_ITERATIONS = 100_000\nconst SALT_BYTES = 16\n\nexport interface PasswordValues {\n hash: string\n salt: string\n}\n\nexport class PasswordKey {\n readonly password: string\n readonly salt: string\n\n constructor(password: string, salt: string = PasswordKey.generateSalt()) {\n this.password = password\n this.salt = salt\n }\n\n static async decryptString(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const encryptedData = new Uint8Array(Buffer.from(data, 'base64'))\n const iv = encryptedData.slice(0, INITIALIZATION_VECTOR_LENGTH)\n const ciphertext = encryptedData.slice(INITIALIZATION_VECTOR_LENGTH)\n const decrypted = await subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext)\n return new TextDecoder('utf-8').decode(decrypted)\n }\n\n static async encryptString(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const iv = webcrypto.getRandomValues(new Uint8Array(INITIALIZATION_VECTOR_LENGTH))\n const ciphertext = await subtle.encrypt({ name: 'AES-GCM', iv }, key, new TextEncoder().encode(data))\n const combined = new Uint8Array(iv.length + ciphertext.byteLength)\n combined.set(iv, 0)\n combined.set(new Uint8Array(ciphertext), iv.length)\n return Buffer.from(combined).toString('base64')\n }\n\n static generateSalt(): string {\n const array = new Uint8Array(SALT_BYTES)\n webcrypto.getRandomValues(array)\n return [...array].map(byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n static async getHashFromKey(key: webcrypto.CryptoKey): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const digest = await subtle.digest('SHA-256', exported)\n return [...new Uint8Array(digest)].map(byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n static async importEncryptionKey(rawKey: ArrayBuffer): Promise<webcrypto.CryptoKey> {\n return await subtle.importKey('raw', rawKey, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt'])\n }\n\n static async importExtractableKey(rawKey: ArrayBuffer): Promise<webcrypto.CryptoKey> {\n return await subtle.importKey('raw', rawKey, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt'])\n }\n\n static async serializeKey(key: webcrypto.CryptoKey, salt: string = PasswordKey.generateSalt()): Promise<PasswordValues> {\n const hash = await PasswordKey.getHashFromKey(key)\n return { hash, salt }\n }\n\n async deriveKey(): Promise<webcrypto.CryptoKey> {\n const encoder = new TextEncoder()\n const passphraseKey = await subtle.importKey(\n 'raw',\n encoder.encode(this.password),\n { name: 'PBKDF2' },\n false,\n ['deriveKey'],\n )\n return await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: encoder.encode(this.salt),\n iterations: PBKDF2_ITERATIONS,\n hash: 'SHA-256',\n },\n passphraseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt'],\n )\n }\n}\n\nexport async function encryptWithKey(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const encKey = await PasswordKey.importEncryptionKey(exported)\n return await PasswordKey.encryptString(encKey, data)\n}\n\nexport async function decryptWithKey(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const encKey = await PasswordKey.importEncryptionKey(exported)\n return await PasswordKey.decryptString(encKey, data)\n}\n","import { webcrypto } from 'node:crypto'\nimport FS from 'node:fs'\nimport OS from 'node:os'\n\nimport { PasswordKey } from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport { ensureWalletDir } from '../storage.ts'\n\nfunction generateMachineSecret(): string {\n const bytes = new Uint8Array(32)\n webcrypto.getRandomValues(bytes)\n return [...bytes].map(b => b.toString(16).padStart(2, '0')).join('')\n}\n\nexport function loadMachineSecret(): string {\n ensureWalletDir()\n const path = walletPaths().machineId\n if (FS.existsSync(path)) {\n return FS.readFileSync(path, 'utf8').trim()\n }\n const secret = generateMachineSecret()\n FS.writeFileSync(path, `${secret}\\n`, { mode: 0o600 })\n try {\n FS.chmodSync(path, 0o600)\n } catch { /* best-effort */ }\n return secret\n}\n\nexport async function deriveMachineKey(): Promise<webcrypto.CryptoKey> {\n const secret = loadMachineSecret()\n const stable = `${OS.hostname()}:${OS.userInfo().username}:${secret}`\n const passwordKey = new PasswordKey(stable, 'aries-wallet-machine-kek-v1')\n return await passwordKey.deriveKey()\n}\n","import type { PasswordValues } from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport function readPassword(): PasswordValues | undefined {\n return readJsonFile<PasswordValues>(walletPaths().password)\n}\n\nexport function writePassword(values: PasswordValues): void {\n writeJsonFile(walletPaths().password, values)\n}\n\nexport function hasPassword(): boolean {\n return readPassword() !== undefined\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { PasswordKey } from '../passwordKey.ts'\nimport { readPassword } from './passwordStorage.ts'\n\nexport async function validatePassword(password: string): Promise<webcrypto.CryptoKey | undefined> {\n const stored = readPassword()\n if (!stored) return undefined\n const passwordKey = new PasswordKey(password, stored.salt)\n const key = await passwordKey.deriveKey()\n const hash = await PasswordKey.getHashFromKey(key)\n if (hash !== stored.hash) return undefined\n return key\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { promptPassword } from '../prompt.ts'\nimport { readSession } from '../session/sessionCache.ts'\nimport { hasPassword } from './passwordStorage.ts'\nimport { validatePassword } from './validatePassword.ts'\n\nexport async function getActiveKey(): Promise<webcrypto.CryptoKey> {\n if (!hasPassword()) {\n throw new Error('Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.')\n }\n const cached = await readSession()\n if (cached) return cached\n const password = promptPassword('Wallet password: ')\n const key = await validatePassword(password)\n if (!key) throw new Error('Incorrect password.')\n return key\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\nimport type {\n ActiveFile, PhrasesFile, SeedPhraseRecord,\n} from './types.ts'\n\nexport function readPhrases(): SeedPhraseRecord[] {\n const data = readJsonFile<PhrasesFile>(walletPaths().phrases)\n return data?.phrases ?? []\n}\n\nexport function writePhrases(phrases: SeedPhraseRecord[]): void {\n writeJsonFile(walletPaths().phrases, { phrases })\n}\n\nexport function readActive(): ActiveFile {\n return readJsonFile<ActiveFile>(walletPaths().active) ?? {}\n}\n\nexport function writeActive(active: ActiveFile): void {\n writeJsonFile(walletPaths().active, active)\n}\n\nexport function findPhrase(id: string): SeedPhraseRecord | undefined {\n return readPhrases().find(p => p.id === id || p.label === id)\n}\n\nexport function getActivePhrase(): SeedPhraseRecord | undefined {\n const phrases = readPhrases()\n if (phrases.length === 0) return undefined\n const active = readActive()\n if (active.phraseId) {\n const found = phrases.find(p => p.id === active.phraseId)\n if (found) return found\n }\n return phrases[0]\n}\n"],"mappings":"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","names":["PATH","PATH","webcrypto","webcrypto","FS","OS","webcrypto","FS","OS","subtle","webcrypto"]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/actions/wallet/seedPhrase/renamePhrase.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
|
|
4
|
+
// src/actions/wallet/paths.ts
|
|
5
|
+
import OS from "os";
|
|
6
|
+
import PATH from "path";
|
|
7
|
+
function walletRoot() {
|
|
8
|
+
const override = process.env.ARIES_WALLET_HOME;
|
|
9
|
+
if (override) return override;
|
|
10
|
+
return PATH.join(OS.homedir(), ".aries", "wallet");
|
|
11
|
+
}
|
|
12
|
+
function walletPaths(root = walletRoot()) {
|
|
13
|
+
return {
|
|
14
|
+
root,
|
|
15
|
+
password: PATH.join(root, "password.json"),
|
|
16
|
+
phrases: PATH.join(root, "phrases.json"),
|
|
17
|
+
active: PATH.join(root, "active.json"),
|
|
18
|
+
addressBooks: PATH.join(root, "address-books.json"),
|
|
19
|
+
contacts: PATH.join(root, "contacts.json"),
|
|
20
|
+
networks: PATH.join(root, "networks.json"),
|
|
21
|
+
session: PATH.join(root, "session.json"),
|
|
22
|
+
machineId: PATH.join(root, ".machine-id")
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// src/actions/wallet/storage.ts
|
|
27
|
+
import FS from "fs";
|
|
28
|
+
import PATH2 from "path";
|
|
29
|
+
function ensureWalletDir(root = walletRoot()) {
|
|
30
|
+
if (!FS.existsSync(root)) {
|
|
31
|
+
FS.mkdirSync(root, { recursive: true, mode: 448 });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
FS.chmodSync(root, 448);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function readJsonFile(file) {
|
|
40
|
+
if (!FS.existsSync(file)) return void 0;
|
|
41
|
+
const raw = FS.readFileSync(file, "utf8");
|
|
42
|
+
if (raw.trim().length === 0) return void 0;
|
|
43
|
+
return JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
function writeJsonFile(file, value) {
|
|
46
|
+
ensureWalletDir(PATH2.dirname(file));
|
|
47
|
+
const tmp = `${file}.tmp`;
|
|
48
|
+
FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}
|
|
49
|
+
`, { mode: 384 });
|
|
50
|
+
FS.renameSync(tmp, file);
|
|
51
|
+
try {
|
|
52
|
+
FS.chmodSync(file, 384);
|
|
53
|
+
} catch {
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/actions/wallet/seedPhrase/phraseStorage.ts
|
|
58
|
+
function readPhrases() {
|
|
59
|
+
const data = readJsonFile(walletPaths().phrases);
|
|
60
|
+
return data?.phrases ?? [];
|
|
61
|
+
}
|
|
62
|
+
function writePhrases(phrases) {
|
|
63
|
+
writeJsonFile(walletPaths().phrases, { phrases });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// src/actions/wallet/seedPhrase/renamePhrase.ts
|
|
67
|
+
function renamePhrase(id, label) {
|
|
68
|
+
const phrases = readPhrases();
|
|
69
|
+
const target = phrases.find((p) => p.id === id || p.label === id);
|
|
70
|
+
if (!target) throw new Error(`Wallet not found: ${id}`);
|
|
71
|
+
target.label = label;
|
|
72
|
+
writePhrases(phrases);
|
|
73
|
+
console.log(chalk.green(`Renamed wallet ${target.id} to ${chalk.cyan(label)}`));
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
renamePhrase
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=renamePhrase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/wallet/seedPhrase/renamePhrase.ts","../../../../src/actions/wallet/paths.ts","../../../../src/actions/wallet/storage.ts","../../../../src/actions/wallet/seedPhrase/phraseStorage.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport { readPhrases, writePhrases } from './phraseStorage.ts'\n\nexport function renamePhrase(id: string, label: string): void {\n const phrases = readPhrases()\n const target = phrases.find(p => p.id === id || p.label === id)\n if (!target) throw new Error(`Wallet not found: ${id}`)\n target.label = label\n writePhrases(phrases)\n console.log(chalk.green(`Renamed wallet ${target.id} to ${chalk.cyan(label)}`))\n}\n","import OS from 'node:os'\nimport PATH from 'node:path'\n\nexport interface WalletPaths {\n root: string\n password: string\n phrases: string\n active: string\n addressBooks: string\n contacts: string\n networks: string\n session: string\n machineId: string\n}\n\nexport function walletRoot(): string {\n const override = process.env.ARIES_WALLET_HOME\n if (override) return override\n return PATH.join(OS.homedir(), '.aries', 'wallet')\n}\n\nexport function walletPaths(root: string = walletRoot()): WalletPaths {\n return {\n root,\n password: PATH.join(root, 'password.json'),\n phrases: PATH.join(root, 'phrases.json'),\n active: PATH.join(root, 'active.json'),\n addressBooks: PATH.join(root, 'address-books.json'),\n contacts: PATH.join(root, 'contacts.json'),\n networks: PATH.join(root, 'networks.json'),\n session: PATH.join(root, 'session.json'),\n machineId: PATH.join(root, '.machine-id'),\n }\n}\n","import FS from 'node:fs'\nimport PATH from 'node:path'\n\nimport { walletRoot } from './paths.ts'\n\nexport function ensureWalletDir(root: string = walletRoot()): void {\n if (!FS.existsSync(root)) {\n FS.mkdirSync(root, { recursive: true, mode: 0o700 })\n return\n }\n try {\n FS.chmodSync(root, 0o700)\n } catch {\n // best-effort on platforms without chmod\n }\n}\n\nexport function readJsonFile<T>(file: string): T | undefined {\n if (!FS.existsSync(file)) return undefined\n const raw = FS.readFileSync(file, 'utf8')\n if (raw.trim().length === 0) return undefined\n return JSON.parse(raw) as T\n}\n\nexport function writeJsonFile(file: string, value: unknown): void {\n ensureWalletDir(PATH.dirname(file))\n const tmp = `${file}.tmp`\n FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 })\n FS.renameSync(tmp, file)\n try {\n FS.chmodSync(file, 0o600)\n } catch {\n // best-effort\n }\n}\n\nexport function deleteFile(file: string): void {\n if (FS.existsSync(file)) FS.unlinkSync(file)\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\nimport type {\n ActiveFile, PhrasesFile, SeedPhraseRecord,\n} from './types.ts'\n\nexport function readPhrases(): SeedPhraseRecord[] {\n const data = readJsonFile<PhrasesFile>(walletPaths().phrases)\n return data?.phrases ?? []\n}\n\nexport function writePhrases(phrases: SeedPhraseRecord[]): void {\n writeJsonFile(walletPaths().phrases, { phrases })\n}\n\nexport function readActive(): ActiveFile {\n return readJsonFile<ActiveFile>(walletPaths().active) ?? {}\n}\n\nexport function writeActive(active: ActiveFile): void {\n writeJsonFile(walletPaths().active, active)\n}\n\nexport function findPhrase(id: string): SeedPhraseRecord | undefined {\n return readPhrases().find(p => p.id === id || p.label === id)\n}\n\nexport function getActivePhrase(): SeedPhraseRecord | undefined {\n const phrases = readPhrases()\n if (phrases.length === 0) return undefined\n const active = readActive()\n if (active.phraseId) {\n const found = phrases.find(p => p.id === active.phraseId)\n if (found) return found\n }\n return phrases[0]\n}\n"],"mappings":";AAAA,OAAO,WAAW;;;ACAlB,OAAO,QAAQ;AACf,OAAO,UAAU;AAcV,SAAS,aAAqB;AACnC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AACrB,SAAO,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,QAAQ;AACnD;AAEO,SAAS,YAAY,OAAe,WAAW,GAAgB;AACpE,SAAO;AAAA,IACL;AAAA,IACA,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,SAAS,KAAK,KAAK,MAAM,cAAc;AAAA,IACvC,QAAQ,KAAK,KAAK,MAAM,aAAa;AAAA,IACrC,cAAc,KAAK,KAAK,MAAM,oBAAoB;AAAA,IAClD,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,SAAS,KAAK,KAAK,MAAM,cAAc;AAAA,IACvC,WAAW,KAAK,KAAK,MAAM,aAAa;AAAA,EAC1C;AACF;;;ACjCA,OAAO,QAAQ;AACf,OAAOA,WAAU;AAIV,SAAS,gBAAgB,OAAe,WAAW,GAAS;AACjE,MAAI,CAAC,GAAG,WAAW,IAAI,GAAG;AACxB,OAAG,UAAU,MAAM,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACnD;AAAA,EACF;AACA,MAAI;AACF,OAAG,UAAU,MAAM,GAAK;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,aAAgB,MAA6B;AAC3D,MAAI,CAAC,GAAG,WAAW,IAAI,EAAG,QAAO;AACjC,QAAM,MAAM,GAAG,aAAa,MAAM,MAAM;AACxC,MAAI,IAAI,KAAK,EAAE,WAAW,EAAG,QAAO;AACpC,SAAO,KAAK,MAAM,GAAG;AACvB;AAEO,SAAS,cAAc,MAAc,OAAsB;AAChE,kBAAgBC,MAAK,QAAQ,IAAI,CAAC;AAClC,QAAM,MAAM,GAAG,IAAI;AACnB,KAAG,cAAc,KAAK,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AAC5E,KAAG,WAAW,KAAK,IAAI;AACvB,MAAI;AACF,OAAG,UAAU,MAAM,GAAK;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;;;AC5BO,SAAS,cAAkC;AAChD,QAAM,OAAO,aAA0B,YAAY,EAAE,OAAO;AAC5D,SAAO,MAAM,WAAW,CAAC;AAC3B;AAEO,SAAS,aAAa,SAAmC;AAC9D,gBAAc,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;AAClD;;;AHTO,SAAS,aAAa,IAAY,OAAqB;AAC5D,QAAM,UAAU,YAAY;AAC5B,QAAM,SAAS,QAAQ,KAAK,OAAK,EAAE,OAAO,MAAM,EAAE,UAAU,EAAE;AAC9D,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB,EAAE,EAAE;AACtD,SAAO,QAAQ;AACf,eAAa,OAAO;AACpB,UAAQ,IAAI,MAAM,MAAM,kBAAkB,OAAO,EAAE,OAAO,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC;AAChF;","names":["PATH","PATH"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// src/actions/wallet/seedPhrase/usePhrase.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
|
|
4
|
+
// src/actions/wallet/paths.ts
|
|
5
|
+
import OS from "os";
|
|
6
|
+
import PATH from "path";
|
|
7
|
+
function walletRoot() {
|
|
8
|
+
const override = process.env.ARIES_WALLET_HOME;
|
|
9
|
+
if (override) return override;
|
|
10
|
+
return PATH.join(OS.homedir(), ".aries", "wallet");
|
|
11
|
+
}
|
|
12
|
+
function walletPaths(root = walletRoot()) {
|
|
13
|
+
return {
|
|
14
|
+
root,
|
|
15
|
+
password: PATH.join(root, "password.json"),
|
|
16
|
+
phrases: PATH.join(root, "phrases.json"),
|
|
17
|
+
active: PATH.join(root, "active.json"),
|
|
18
|
+
addressBooks: PATH.join(root, "address-books.json"),
|
|
19
|
+
contacts: PATH.join(root, "contacts.json"),
|
|
20
|
+
networks: PATH.join(root, "networks.json"),
|
|
21
|
+
session: PATH.join(root, "session.json"),
|
|
22
|
+
machineId: PATH.join(root, ".machine-id")
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// src/actions/wallet/storage.ts
|
|
27
|
+
import FS from "fs";
|
|
28
|
+
import PATH2 from "path";
|
|
29
|
+
function ensureWalletDir(root = walletRoot()) {
|
|
30
|
+
if (!FS.existsSync(root)) {
|
|
31
|
+
FS.mkdirSync(root, { recursive: true, mode: 448 });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
FS.chmodSync(root, 448);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function readJsonFile(file) {
|
|
40
|
+
if (!FS.existsSync(file)) return void 0;
|
|
41
|
+
const raw = FS.readFileSync(file, "utf8");
|
|
42
|
+
if (raw.trim().length === 0) return void 0;
|
|
43
|
+
return JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
function writeJsonFile(file, value) {
|
|
46
|
+
ensureWalletDir(PATH2.dirname(file));
|
|
47
|
+
const tmp = `${file}.tmp`;
|
|
48
|
+
FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}
|
|
49
|
+
`, { mode: 384 });
|
|
50
|
+
FS.renameSync(tmp, file);
|
|
51
|
+
try {
|
|
52
|
+
FS.chmodSync(file, 384);
|
|
53
|
+
} catch {
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/actions/wallet/seedPhrase/phraseStorage.ts
|
|
58
|
+
function readPhrases() {
|
|
59
|
+
const data = readJsonFile(walletPaths().phrases);
|
|
60
|
+
return data?.phrases ?? [];
|
|
61
|
+
}
|
|
62
|
+
function readActive() {
|
|
63
|
+
return readJsonFile(walletPaths().active) ?? {};
|
|
64
|
+
}
|
|
65
|
+
function writeActive(active) {
|
|
66
|
+
writeJsonFile(walletPaths().active, active);
|
|
67
|
+
}
|
|
68
|
+
function findPhrase(id) {
|
|
69
|
+
return readPhrases().find((p) => p.id === id || p.label === id);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/actions/wallet/seedPhrase/usePhrase.ts
|
|
73
|
+
function usePhrase(id) {
|
|
74
|
+
const record = findPhrase(id);
|
|
75
|
+
if (!record) throw new Error(`Wallet not found: ${id}`);
|
|
76
|
+
const active = readActive();
|
|
77
|
+
writeActive({ ...active, phraseId: record.id });
|
|
78
|
+
console.log(chalk.green(`Active wallet set to ${chalk.cyan(record.label)} (id ${record.id})`));
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
usePhrase
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=usePhrase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/wallet/seedPhrase/usePhrase.ts","../../../../src/actions/wallet/paths.ts","../../../../src/actions/wallet/storage.ts","../../../../src/actions/wallet/seedPhrase/phraseStorage.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport {\n findPhrase, readActive, writeActive,\n} from './phraseStorage.ts'\n\nexport function usePhrase(id: string): void {\n const record = findPhrase(id)\n if (!record) throw new Error(`Wallet not found: ${id}`)\n const active = readActive()\n writeActive({ ...active, phraseId: record.id })\n console.log(chalk.green(`Active wallet set to ${chalk.cyan(record.label)} (id ${record.id})`))\n}\n","import OS from 'node:os'\nimport PATH from 'node:path'\n\nexport interface WalletPaths {\n root: string\n password: string\n phrases: string\n active: string\n addressBooks: string\n contacts: string\n networks: string\n session: string\n machineId: string\n}\n\nexport function walletRoot(): string {\n const override = process.env.ARIES_WALLET_HOME\n if (override) return override\n return PATH.join(OS.homedir(), '.aries', 'wallet')\n}\n\nexport function walletPaths(root: string = walletRoot()): WalletPaths {\n return {\n root,\n password: PATH.join(root, 'password.json'),\n phrases: PATH.join(root, 'phrases.json'),\n active: PATH.join(root, 'active.json'),\n addressBooks: PATH.join(root, 'address-books.json'),\n contacts: PATH.join(root, 'contacts.json'),\n networks: PATH.join(root, 'networks.json'),\n session: PATH.join(root, 'session.json'),\n machineId: PATH.join(root, '.machine-id'),\n }\n}\n","import FS from 'node:fs'\nimport PATH from 'node:path'\n\nimport { walletRoot } from './paths.ts'\n\nexport function ensureWalletDir(root: string = walletRoot()): void {\n if (!FS.existsSync(root)) {\n FS.mkdirSync(root, { recursive: true, mode: 0o700 })\n return\n }\n try {\n FS.chmodSync(root, 0o700)\n } catch {\n // best-effort on platforms without chmod\n }\n}\n\nexport function readJsonFile<T>(file: string): T | undefined {\n if (!FS.existsSync(file)) return undefined\n const raw = FS.readFileSync(file, 'utf8')\n if (raw.trim().length === 0) return undefined\n return JSON.parse(raw) as T\n}\n\nexport function writeJsonFile(file: string, value: unknown): void {\n ensureWalletDir(PATH.dirname(file))\n const tmp = `${file}.tmp`\n FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 })\n FS.renameSync(tmp, file)\n try {\n FS.chmodSync(file, 0o600)\n } catch {\n // best-effort\n }\n}\n\nexport function deleteFile(file: string): void {\n if (FS.existsSync(file)) FS.unlinkSync(file)\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\nimport type {\n ActiveFile, PhrasesFile, SeedPhraseRecord,\n} from './types.ts'\n\nexport function readPhrases(): SeedPhraseRecord[] {\n const data = readJsonFile<PhrasesFile>(walletPaths().phrases)\n return data?.phrases ?? []\n}\n\nexport function writePhrases(phrases: SeedPhraseRecord[]): void {\n writeJsonFile(walletPaths().phrases, { phrases })\n}\n\nexport function readActive(): ActiveFile {\n return readJsonFile<ActiveFile>(walletPaths().active) ?? {}\n}\n\nexport function writeActive(active: ActiveFile): void {\n writeJsonFile(walletPaths().active, active)\n}\n\nexport function findPhrase(id: string): SeedPhraseRecord | undefined {\n return readPhrases().find(p => p.id === id || p.label === id)\n}\n\nexport function getActivePhrase(): SeedPhraseRecord | undefined {\n const phrases = readPhrases()\n if (phrases.length === 0) return undefined\n const active = readActive()\n if (active.phraseId) {\n const found = phrases.find(p => p.id === active.phraseId)\n if (found) return found\n }\n return phrases[0]\n}\n"],"mappings":";AAAA,OAAO,WAAW;;;ACAlB,OAAO,QAAQ;AACf,OAAO,UAAU;AAcV,SAAS,aAAqB;AACnC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AACrB,SAAO,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,QAAQ;AACnD;AAEO,SAAS,YAAY,OAAe,WAAW,GAAgB;AACpE,SAAO;AAAA,IACL;AAAA,IACA,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,SAAS,KAAK,KAAK,MAAM,cAAc;AAAA,IACvC,QAAQ,KAAK,KAAK,MAAM,aAAa;AAAA,IACrC,cAAc,KAAK,KAAK,MAAM,oBAAoB;AAAA,IAClD,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,UAAU,KAAK,KAAK,MAAM,eAAe;AAAA,IACzC,SAAS,KAAK,KAAK,MAAM,cAAc;AAAA,IACvC,WAAW,KAAK,KAAK,MAAM,aAAa;AAAA,EAC1C;AACF;;;ACjCA,OAAO,QAAQ;AACf,OAAOA,WAAU;AAIV,SAAS,gBAAgB,OAAe,WAAW,GAAS;AACjE,MAAI,CAAC,GAAG,WAAW,IAAI,GAAG;AACxB,OAAG,UAAU,MAAM,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACnD;AAAA,EACF;AACA,MAAI;AACF,OAAG,UAAU,MAAM,GAAK;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,aAAgB,MAA6B;AAC3D,MAAI,CAAC,GAAG,WAAW,IAAI,EAAG,QAAO;AACjC,QAAM,MAAM,GAAG,aAAa,MAAM,MAAM;AACxC,MAAI,IAAI,KAAK,EAAE,WAAW,EAAG,QAAO;AACpC,SAAO,KAAK,MAAM,GAAG;AACvB;AAEO,SAAS,cAAc,MAAc,OAAsB;AAChE,kBAAgBC,MAAK,QAAQ,IAAI,CAAC;AAClC,QAAM,MAAM,GAAG,IAAI;AACnB,KAAG,cAAc,KAAK,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AAC5E,KAAG,WAAW,KAAK,IAAI;AACvB,MAAI;AACF,OAAG,UAAU,MAAM,GAAK;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;;;AC5BO,SAAS,cAAkC;AAChD,QAAM,OAAO,aAA0B,YAAY,EAAE,OAAO;AAC5D,SAAO,MAAM,WAAW,CAAC;AAC3B;AAMO,SAAS,aAAyB;AACvC,SAAO,aAAyB,YAAY,EAAE,MAAM,KAAK,CAAC;AAC5D;AAEO,SAAS,YAAY,QAA0B;AACpD,gBAAc,YAAY,EAAE,QAAQ,MAAM;AAC5C;AAEO,SAAS,WAAW,IAA0C;AACnE,SAAO,YAAY,EAAE,KAAK,OAAK,EAAE,OAAO,MAAM,EAAE,UAAU,EAAE;AAC9D;;;AHnBO,SAAS,UAAU,IAAkB;AAC1C,QAAM,SAAS,WAAW,EAAE;AAC5B,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB,EAAE,EAAE;AACtD,QAAM,SAAS,WAAW;AAC1B,cAAY,EAAE,GAAG,QAAQ,UAAU,OAAO,GAAG,CAAC;AAC9C,UAAQ,IAAI,MAAM,MAAM,wBAAwB,MAAM,KAAK,OAAO,KAAK,CAAC,QAAQ,OAAO,EAAE,GAAG,CAAC;AAC/F;","names":["PATH","PATH"]}
|