@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,191 @@
|
|
|
1
|
+
// src/actions/datalake/audit/auditLog.ts
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
import {
|
|
4
|
+
createReadStream,
|
|
5
|
+
existsSync,
|
|
6
|
+
readdirSync,
|
|
7
|
+
statSync,
|
|
8
|
+
unlinkSync
|
|
9
|
+
} from "fs";
|
|
10
|
+
import path2 from "path";
|
|
11
|
+
import { createInterface } from "readline";
|
|
12
|
+
import { createDatalakeClient } from "@xylabs/aries-datalake-client";
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
|
|
15
|
+
// src/actions/datalake/dev/paths.ts
|
|
16
|
+
import { homedir } from "os";
|
|
17
|
+
import path from "path";
|
|
18
|
+
function getAriesHome() {
|
|
19
|
+
return process.env.ARIES_HOME ?? path.join(homedir(), ".aries");
|
|
20
|
+
}
|
|
21
|
+
function getDevDir() {
|
|
22
|
+
return path.join(getAriesHome(), "dev");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// src/actions/datalake/audit/auditLog.ts
|
|
26
|
+
var AUDIT_FILE_PATTERN = /^audit-\d{4}-\d{2}-\d{2}\.log$/;
|
|
27
|
+
function defaultSingleFile() {
|
|
28
|
+
return path2.join(getDevDir(), "audit.log");
|
|
29
|
+
}
|
|
30
|
+
function defaultRotationDir() {
|
|
31
|
+
return path2.join(getDevDir(), "audit");
|
|
32
|
+
}
|
|
33
|
+
function listRotatedFiles(directory) {
|
|
34
|
+
if (!existsSync(directory)) return [];
|
|
35
|
+
return readdirSync(directory).filter((file) => AUDIT_FILE_PATTERN.test(file)).toSorted().map((file) => path2.join(directory, file));
|
|
36
|
+
}
|
|
37
|
+
function resolveSource(override) {
|
|
38
|
+
if (override) {
|
|
39
|
+
if (!existsSync(override)) return void 0;
|
|
40
|
+
const stat = statSync(override);
|
|
41
|
+
if (stat.isDirectory()) {
|
|
42
|
+
const files2 = listRotatedFiles(override);
|
|
43
|
+
if (files2.length === 0) return void 0;
|
|
44
|
+
return {
|
|
45
|
+
files: files2,
|
|
46
|
+
tailFile: files2.at(-1),
|
|
47
|
+
description: override
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
files: [override],
|
|
52
|
+
tailFile: override,
|
|
53
|
+
description: override
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const single = defaultSingleFile();
|
|
57
|
+
if (existsSync(single)) {
|
|
58
|
+
return {
|
|
59
|
+
files: [single],
|
|
60
|
+
tailFile: single,
|
|
61
|
+
description: single
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const rotDir = defaultRotationDir();
|
|
65
|
+
const files = listRotatedFiles(rotDir);
|
|
66
|
+
if (files.length === 0) return void 0;
|
|
67
|
+
return {
|
|
68
|
+
files,
|
|
69
|
+
tailFile: files.at(-1),
|
|
70
|
+
description: rotDir
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function resolveDatalakeId(target) {
|
|
74
|
+
if (target.startsWith("dl_")) return target;
|
|
75
|
+
const client = createDatalakeClient();
|
|
76
|
+
const descriptor = await client.describe(target);
|
|
77
|
+
return descriptor.id;
|
|
78
|
+
}
|
|
79
|
+
async function buildFilters(options) {
|
|
80
|
+
return {
|
|
81
|
+
datalakeId: options.datalake ? await resolveDatalakeId(options.datalake) : void 0,
|
|
82
|
+
statusPrefix: options.status,
|
|
83
|
+
method: options.method?.toUpperCase(),
|
|
84
|
+
authenticated: options.authenticated === void 0 ? void 0 : options.authenticated === "true",
|
|
85
|
+
grepRegex: options.grep ? new RegExp(options.grep) : void 0
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function matchesFilters(line, entry, filters) {
|
|
89
|
+
if (filters.datalakeId && entry.datalakeId !== filters.datalakeId) return false;
|
|
90
|
+
if (filters.statusPrefix && !String(entry.statusCode).startsWith(filters.statusPrefix)) return false;
|
|
91
|
+
if (filters.method && entry.method !== filters.method) return false;
|
|
92
|
+
if (filters.authenticated !== void 0 && entry.authenticated !== filters.authenticated) return false;
|
|
93
|
+
if (filters.grepRegex && !filters.grepRegex.test(line)) return false;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
function formatEntry(entry) {
|
|
97
|
+
const when = entry.time.slice(11, 19);
|
|
98
|
+
const status = entry.statusCode >= 500 ? chalk.red(String(entry.statusCode)) : entry.statusCode >= 400 ? chalk.yellow(String(entry.statusCode)) : chalk.green(String(entry.statusCode));
|
|
99
|
+
const subject = entry.authenticated ? chalk.magenta(entry.subject) : chalk.gray(entry.subject);
|
|
100
|
+
const duration = chalk.gray(`${entry.durationMs}ms`);
|
|
101
|
+
return `${chalk.gray(when)} ${status} ${entry.method.padEnd(6)} ${entry.path} ${subject} ${duration}`;
|
|
102
|
+
}
|
|
103
|
+
function parseLine(line) {
|
|
104
|
+
try {
|
|
105
|
+
return JSON.parse(line);
|
|
106
|
+
} catch {
|
|
107
|
+
return void 0;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function auditLog(options = {}) {
|
|
111
|
+
const source = resolveSource(options.file);
|
|
112
|
+
if (!source) {
|
|
113
|
+
const location = options.file ?? `${defaultSingleFile()} or ${defaultRotationDir()}`;
|
|
114
|
+
console.log(chalk.yellow(`no audit log at ${location}`));
|
|
115
|
+
console.log(chalk.gray("enable with `aries datalake dev up --audit` (or --audit --audit-rotate)"));
|
|
116
|
+
process.exitCode = 3;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const filters = await buildFilters(options);
|
|
120
|
+
if (options.follow) {
|
|
121
|
+
await followLog(source.tailFile, filters, options.lines ?? 0);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
await dumpTail(source.files, filters, options.lines ?? 50);
|
|
125
|
+
}
|
|
126
|
+
async function dumpTail(files, filters, limit) {
|
|
127
|
+
const ring = [];
|
|
128
|
+
for (const filePath of files) {
|
|
129
|
+
const stream = createReadStream(filePath, { encoding: "utf8" });
|
|
130
|
+
const rl = createInterface({ input: stream, crlfDelay: Infinity });
|
|
131
|
+
for await (const line of rl) {
|
|
132
|
+
if (!line.trim()) continue;
|
|
133
|
+
const entry = parseLine(line);
|
|
134
|
+
if (!entry) continue;
|
|
135
|
+
if (!matchesFilters(line, entry, filters)) continue;
|
|
136
|
+
ring.push(formatEntry(entry));
|
|
137
|
+
if (ring.length > limit) ring.shift();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (const row of ring) console.log(row);
|
|
141
|
+
}
|
|
142
|
+
async function followLog(filePath, filters, initialLines) {
|
|
143
|
+
if (initialLines > 0) {
|
|
144
|
+
await dumpTail([filePath], filters, initialLines);
|
|
145
|
+
}
|
|
146
|
+
const startOffset = statSync(filePath).size;
|
|
147
|
+
const child = spawn("tail", ["-f", "-c", "+0", filePath], { stdio: ["ignore", "pipe", "inherit"] });
|
|
148
|
+
child.stdout.setEncoding("utf8");
|
|
149
|
+
let buffer = "";
|
|
150
|
+
let bytesSeen = 0;
|
|
151
|
+
child.stdout.on("data", (chunk) => {
|
|
152
|
+
bytesSeen += Buffer.byteLength(chunk, "utf8");
|
|
153
|
+
buffer += chunk;
|
|
154
|
+
const lines = buffer.split("\n");
|
|
155
|
+
buffer = lines.pop() ?? "";
|
|
156
|
+
if (bytesSeen < startOffset) return;
|
|
157
|
+
for (const line of lines) {
|
|
158
|
+
if (!line.trim()) continue;
|
|
159
|
+
const entry = parseLine(line);
|
|
160
|
+
if (!entry) continue;
|
|
161
|
+
if (!matchesFilters(line, entry, filters)) continue;
|
|
162
|
+
console.log(formatEntry(entry));
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
await new Promise((resolve) => {
|
|
166
|
+
child.on("exit", (code) => {
|
|
167
|
+
process.exitCode = code ?? 0;
|
|
168
|
+
resolve();
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function purgeAuditLog(options) {
|
|
173
|
+
const directory = options.directory ?? defaultRotationDir();
|
|
174
|
+
if (!existsSync(directory)) return [];
|
|
175
|
+
const cutoff = Date.now() - options.maxAgeDays * 864e5;
|
|
176
|
+
const removed = [];
|
|
177
|
+
for (const file of readdirSync(directory)) {
|
|
178
|
+
if (!AUDIT_FILE_PATTERN.test(file)) continue;
|
|
179
|
+
const fullPath = path2.join(directory, file);
|
|
180
|
+
const stat = statSync(fullPath);
|
|
181
|
+
if (stat.mtimeMs >= cutoff) continue;
|
|
182
|
+
if (!options.dryRun) unlinkSync(fullPath);
|
|
183
|
+
removed.push(fullPath);
|
|
184
|
+
}
|
|
185
|
+
return removed;
|
|
186
|
+
}
|
|
187
|
+
export {
|
|
188
|
+
auditLog,
|
|
189
|
+
purgeAuditLog
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=auditLog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/datalake/audit/auditLog.ts","../../../../src/actions/datalake/dev/paths.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\nimport {\n createReadStream, existsSync, readdirSync, statSync, unlinkSync,\n} from 'node:fs'\nimport path from 'node:path'\nimport { createInterface } from 'node:readline'\n\nimport { createDatalakeClient, type DatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { getDevDir } from '../dev/paths.ts'\n\nexport interface AuditEntry {\n time: string\n requestId: string\n method: string\n path: string\n datalakeId?: string\n subject: string\n authenticated: boolean\n statusCode: number\n durationMs: number\n ip: string\n}\n\nexport interface AuditOptions {\n /**\n * Override the audit source. Pass a file to read one log, a directory to\n * scan a rotation set, or omit entirely to auto-detect between\n * `<home>/dev/audit.log` (single file) and `<home>/dev/audit/` (rotating).\n */\n file?: string\n /** Follow mode — stream new lines as they arrive. */\n follow?: boolean\n /** Max rows to print (when not following). Default 50. */\n lines?: number\n /** Filter by datalake id or name (resolves name via control plane). */\n datalake?: string\n /** Filter by status code prefix (e.g. `4` matches 4xx). */\n status?: string\n /** Filter by HTTP method. */\n method?: string\n /** Filter: only authenticated, only anonymous, or both. */\n authenticated?: 'true' | 'false'\n /** Regex applied to the raw JSON line. */\n grep?: string\n}\n\nexport interface PurgeAuditOptions {\n /** Directory of rotated files. Defaults to `<home>/dev/audit/`. */\n directory?: string\n /** Drop any file older than this many days. Required. */\n maxAgeDays: number\n /** Don't delete, just report. */\n dryRun?: boolean\n}\n\ninterface ResolvedFilters {\n datalakeId?: string\n statusPrefix?: string\n method?: string\n authenticated?: boolean\n grepRegex?: RegExp\n}\n\ninterface ResolvedSource {\n /** Files to read, in chronological order (oldest → newest). */\n files: string[]\n /** File to tail in follow mode (always the newest). */\n tailFile: string\n /** Human-readable description for error messages. */\n description: string\n}\n\nconst AUDIT_FILE_PATTERN = /^audit-\\d{4}-\\d{2}-\\d{2}\\.log$/\n\nfunction defaultSingleFile(): string {\n return path.join(getDevDir(), 'audit.log')\n}\n\nfunction defaultRotationDir(): string {\n return path.join(getDevDir(), 'audit')\n}\n\nfunction listRotatedFiles(directory: string): string[] {\n if (!existsSync(directory)) return []\n return readdirSync(directory)\n .filter(file => AUDIT_FILE_PATTERN.test(file))\n .toSorted()\n .map(file => path.join(directory, file))\n}\n\nfunction resolveSource(override: string | undefined): ResolvedSource | undefined {\n if (override) {\n if (!existsSync(override)) return undefined\n const stat = statSync(override)\n if (stat.isDirectory()) {\n const files = listRotatedFiles(override)\n if (files.length === 0) return undefined\n return {\n files, tailFile: files.at(-1)!, description: override,\n }\n }\n return {\n files: [override], tailFile: override, description: override,\n }\n }\n const single = defaultSingleFile()\n if (existsSync(single)) {\n return {\n files: [single], tailFile: single, description: single,\n }\n }\n const rotDir = defaultRotationDir()\n const files = listRotatedFiles(rotDir)\n if (files.length === 0) return undefined\n return {\n files, tailFile: files.at(-1)!, description: rotDir,\n }\n}\n\nasync function resolveDatalakeId(target: string): Promise<string> {\n if (target.startsWith('dl_')) return target\n const client: DatalakeClient = createDatalakeClient()\n const descriptor = await client.describe(target)\n return descriptor.id\n}\n\nasync function buildFilters(options: AuditOptions): Promise<ResolvedFilters> {\n return {\n datalakeId: options.datalake ? await resolveDatalakeId(options.datalake) : undefined,\n statusPrefix: options.status,\n method: options.method?.toUpperCase(),\n authenticated: options.authenticated === undefined ? undefined : options.authenticated === 'true',\n grepRegex: options.grep ? new RegExp(options.grep) : undefined,\n }\n}\n\nfunction matchesFilters(line: string, entry: AuditEntry, filters: ResolvedFilters): boolean {\n if (filters.datalakeId && entry.datalakeId !== filters.datalakeId) return false\n if (filters.statusPrefix && !String(entry.statusCode).startsWith(filters.statusPrefix)) return false\n if (filters.method && entry.method !== filters.method) return false\n if (filters.authenticated !== undefined && entry.authenticated !== filters.authenticated) return false\n if (filters.grepRegex && !filters.grepRegex.test(line)) return false\n return true\n}\n\nfunction formatEntry(entry: AuditEntry): string {\n const when = entry.time.slice(11, 19)\n const status = entry.statusCode >= 500\n ? chalk.red(String(entry.statusCode))\n : entry.statusCode >= 400\n ? chalk.yellow(String(entry.statusCode))\n : chalk.green(String(entry.statusCode))\n const subject = entry.authenticated ? chalk.magenta(entry.subject) : chalk.gray(entry.subject)\n const duration = chalk.gray(`${entry.durationMs}ms`)\n return `${chalk.gray(when)} ${status} ${entry.method.padEnd(6)} ${entry.path} ${subject} ${duration}`\n}\n\nfunction parseLine(line: string): AuditEntry | undefined {\n try {\n return JSON.parse(line) as AuditEntry\n } catch {\n return undefined\n }\n}\n\nexport async function auditLog(options: AuditOptions = {}): Promise<void> {\n const source = resolveSource(options.file)\n if (!source) {\n const location = options.file ?? `${defaultSingleFile()} or ${defaultRotationDir()}`\n console.log(chalk.yellow(`no audit log at ${location}`))\n console.log(chalk.gray('enable with `aries datalake dev up --audit` (or --audit --audit-rotate)'))\n process.exitCode = 3\n return\n }\n\n const filters = await buildFilters(options)\n\n if (options.follow) {\n await followLog(source.tailFile, filters, options.lines ?? 0)\n return\n }\n\n await dumpTail(source.files, filters, options.lines ?? 50)\n}\n\nasync function dumpTail(files: string[], filters: ResolvedFilters, limit: number): Promise<void> {\n // Ring-buffer across all files in chronological order; retain last N matches.\n const ring: string[] = []\n for (const filePath of files) {\n const stream = createReadStream(filePath, { encoding: 'utf8' })\n const rl = createInterface({ input: stream, crlfDelay: Infinity })\n for await (const line of rl) {\n if (!line.trim()) continue\n const entry = parseLine(line)\n if (!entry) continue\n if (!matchesFilters(line, entry, filters)) continue\n ring.push(formatEntry(entry))\n if (ring.length > limit) ring.shift()\n }\n }\n for (const row of ring) console.log(row)\n}\n\nasync function followLog(filePath: string, filters: ResolvedFilters, initialLines: number): Promise<void> {\n if (initialLines > 0) {\n await dumpTail([filePath], filters, initialLines)\n }\n const startOffset = statSync(filePath).size\n const child = spawn('tail', ['-f', '-c', '+0', filePath], { stdio: ['ignore', 'pipe', 'inherit'] })\n child.stdout.setEncoding('utf8')\n let buffer = ''\n let bytesSeen = 0\n child.stdout.on('data', (chunk: string) => {\n bytesSeen += Buffer.byteLength(chunk, 'utf8')\n buffer += chunk\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n if (bytesSeen < startOffset) return\n for (const line of lines) {\n if (!line.trim()) continue\n const entry = parseLine(line)\n if (!entry) continue\n if (!matchesFilters(line, entry, filters)) continue\n console.log(formatEntry(entry))\n }\n })\n await new Promise<void>((resolve) => {\n child.on('exit', (code) => {\n process.exitCode = code ?? 0\n resolve()\n })\n })\n}\n\n/**\n * Prunes rotated audit files older than `maxAgeDays`. Returns the list of\n * removed file paths (or the would-be-removed list when `dryRun=true`).\n */\nexport function purgeAuditLog(options: PurgeAuditOptions): string[] {\n const directory = options.directory ?? defaultRotationDir()\n if (!existsSync(directory)) return []\n const cutoff = Date.now() - options.maxAgeDays * 86_400_000\n const removed: string[] = []\n for (const file of readdirSync(directory)) {\n if (!AUDIT_FILE_PATTERN.test(file)) continue\n const fullPath = path.join(directory, file)\n const stat = statSync(fullPath)\n if (stat.mtimeMs >= cutoff) continue\n if (!options.dryRun) unlinkSync(fullPath)\n removed.push(fullPath)\n }\n return removed\n}\n","import { homedir } from 'node:os'\nimport path from 'node:path'\n\nfunction getAriesHome(): string {\n return process.env.ARIES_HOME ?? path.join(homedir(), '.aries')\n}\n\nexport function getDevDir(): string {\n return path.join(getAriesHome(), 'dev')\n}\n\nexport function getDevStatePath(): string {\n return path.join(getDevDir(), 'state.json')\n}\n\nexport function getDevPidPath(): string {\n return path.join(getDevDir(), 'pid')\n}\n\nexport function getDevLogPath(): string {\n return path.join(getDevDir(), 'server.log')\n}\n"],"mappings":";AAAA,SAAS,aAAa;AACtB;AAAA,EACE;AAAA,EAAkB;AAAA,EAAY;AAAA,EAAa;AAAA,EAAU;AAAA,OAChD;AACP,OAAOA,WAAU;AACjB,SAAS,uBAAuB;AAEhC,SAAS,4BAAiD;AAC1D,OAAO,WAAW;;;ACRlB,SAAS,eAAe;AACxB,OAAO,UAAU;AAEjB,SAAS,eAAuB;AAC9B,SAAO,QAAQ,IAAI,cAAc,KAAK,KAAK,QAAQ,GAAG,QAAQ;AAChE;AAEO,SAAS,YAAoB;AAClC,SAAO,KAAK,KAAK,aAAa,GAAG,KAAK;AACxC;;;ADiEA,IAAM,qBAAqB;AAE3B,SAAS,oBAA4B;AACnC,SAAOC,MAAK,KAAK,UAAU,GAAG,WAAW;AAC3C;AAEA,SAAS,qBAA6B;AACpC,SAAOA,MAAK,KAAK,UAAU,GAAG,OAAO;AACvC;AAEA,SAAS,iBAAiB,WAA6B;AACrD,MAAI,CAAC,WAAW,SAAS,EAAG,QAAO,CAAC;AACpC,SAAO,YAAY,SAAS,EACzB,OAAO,UAAQ,mBAAmB,KAAK,IAAI,CAAC,EAC5C,SAAS,EACT,IAAI,UAAQA,MAAK,KAAK,WAAW,IAAI,CAAC;AAC3C;AAEA,SAAS,cAAc,UAA0D;AAC/E,MAAI,UAAU;AACZ,QAAI,CAAC,WAAW,QAAQ,EAAG,QAAO;AAClC,UAAM,OAAO,SAAS,QAAQ;AAC9B,QAAI,KAAK,YAAY,GAAG;AACtB,YAAMC,SAAQ,iBAAiB,QAAQ;AACvC,UAAIA,OAAM,WAAW,EAAG,QAAO;AAC/B,aAAO;AAAA,QACL,OAAAA;AAAA,QAAO,UAAUA,OAAM,GAAG,EAAE;AAAA,QAAI,aAAa;AAAA,MAC/C;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO,CAAC,QAAQ;AAAA,MAAG,UAAU;AAAA,MAAU,aAAa;AAAA,IACtD;AAAA,EACF;AACA,QAAM,SAAS,kBAAkB;AACjC,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,MACL,OAAO,CAAC,MAAM;AAAA,MAAG,UAAU;AAAA,MAAQ,aAAa;AAAA,IAClD;AAAA,EACF;AACA,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,iBAAiB,MAAM;AACrC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO;AAAA,IACL;AAAA,IAAO,UAAU,MAAM,GAAG,EAAE;AAAA,IAAI,aAAa;AAAA,EAC/C;AACF;AAEA,eAAe,kBAAkB,QAAiC;AAChE,MAAI,OAAO,WAAW,KAAK,EAAG,QAAO;AACrC,QAAM,SAAyB,qBAAqB;AACpD,QAAM,aAAa,MAAM,OAAO,SAAS,MAAM;AAC/C,SAAO,WAAW;AACpB;AAEA,eAAe,aAAa,SAAiD;AAC3E,SAAO;AAAA,IACL,YAAY,QAAQ,WAAW,MAAM,kBAAkB,QAAQ,QAAQ,IAAI;AAAA,IAC3E,cAAc,QAAQ;AAAA,IACtB,QAAQ,QAAQ,QAAQ,YAAY;AAAA,IACpC,eAAe,QAAQ,kBAAkB,SAAY,SAAY,QAAQ,kBAAkB;AAAA,IAC3F,WAAW,QAAQ,OAAO,IAAI,OAAO,QAAQ,IAAI,IAAI;AAAA,EACvD;AACF;AAEA,SAAS,eAAe,MAAc,OAAmB,SAAmC;AAC1F,MAAI,QAAQ,cAAc,MAAM,eAAe,QAAQ,WAAY,QAAO;AAC1E,MAAI,QAAQ,gBAAgB,CAAC,OAAO,MAAM,UAAU,EAAE,WAAW,QAAQ,YAAY,EAAG,QAAO;AAC/F,MAAI,QAAQ,UAAU,MAAM,WAAW,QAAQ,OAAQ,QAAO;AAC9D,MAAI,QAAQ,kBAAkB,UAAa,MAAM,kBAAkB,QAAQ,cAAe,QAAO;AACjG,MAAI,QAAQ,aAAa,CAAC,QAAQ,UAAU,KAAK,IAAI,EAAG,QAAO;AAC/D,SAAO;AACT;AAEA,SAAS,YAAY,OAA2B;AAC9C,QAAM,OAAO,MAAM,KAAK,MAAM,IAAI,EAAE;AACpC,QAAM,SAAS,MAAM,cAAc,MAC/B,MAAM,IAAI,OAAO,MAAM,UAAU,CAAC,IAClC,MAAM,cAAc,MAClB,MAAM,OAAO,OAAO,MAAM,UAAU,CAAC,IACrC,MAAM,MAAM,OAAO,MAAM,UAAU,CAAC;AAC1C,QAAM,UAAU,MAAM,gBAAgB,MAAM,QAAQ,MAAM,OAAO,IAAI,MAAM,KAAK,MAAM,OAAO;AAC7F,QAAM,WAAW,MAAM,KAAK,GAAG,MAAM,UAAU,IAAI;AACnD,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,QAAQ;AACrG;AAEA,SAAS,UAAU,MAAsC;AACvD,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,SAAS,UAAwB,CAAC,GAAkB;AACxE,QAAM,SAAS,cAAc,QAAQ,IAAI;AACzC,MAAI,CAAC,QAAQ;AACX,UAAM,WAAW,QAAQ,QAAQ,GAAG,kBAAkB,CAAC,OAAO,mBAAmB,CAAC;AAClF,YAAQ,IAAI,MAAM,OAAO,mBAAmB,QAAQ,EAAE,CAAC;AACvD,YAAQ,IAAI,MAAM,KAAK,yEAAyE,CAAC;AACjG,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,aAAa,OAAO;AAE1C,MAAI,QAAQ,QAAQ;AAClB,UAAM,UAAU,OAAO,UAAU,SAAS,QAAQ,SAAS,CAAC;AAC5D;AAAA,EACF;AAEA,QAAM,SAAS,OAAO,OAAO,SAAS,QAAQ,SAAS,EAAE;AAC3D;AAEA,eAAe,SAAS,OAAiB,SAA0B,OAA8B;AAE/F,QAAM,OAAiB,CAAC;AACxB,aAAW,YAAY,OAAO;AAC5B,UAAM,SAAS,iBAAiB,UAAU,EAAE,UAAU,OAAO,CAAC;AAC9D,UAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,WAAW,SAAS,CAAC;AACjE,qBAAiB,QAAQ,IAAI;AAC3B,UAAI,CAAC,KAAK,KAAK,EAAG;AAClB,YAAM,QAAQ,UAAU,IAAI;AAC5B,UAAI,CAAC,MAAO;AACZ,UAAI,CAAC,eAAe,MAAM,OAAO,OAAO,EAAG;AAC3C,WAAK,KAAK,YAAY,KAAK,CAAC;AAC5B,UAAI,KAAK,SAAS,MAAO,MAAK,MAAM;AAAA,IACtC;AAAA,EACF;AACA,aAAW,OAAO,KAAM,SAAQ,IAAI,GAAG;AACzC;AAEA,eAAe,UAAU,UAAkB,SAA0B,cAAqC;AACxG,MAAI,eAAe,GAAG;AACpB,UAAM,SAAS,CAAC,QAAQ,GAAG,SAAS,YAAY;AAAA,EAClD;AACA,QAAM,cAAc,SAAS,QAAQ,EAAE;AACvC,QAAM,QAAQ,MAAM,QAAQ,CAAC,MAAM,MAAM,MAAM,QAAQ,GAAG,EAAE,OAAO,CAAC,UAAU,QAAQ,SAAS,EAAE,CAAC;AAClG,QAAM,OAAO,YAAY,MAAM;AAC/B,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,QAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AACzC,iBAAa,OAAO,WAAW,OAAO,MAAM;AAC5C,cAAU;AACV,UAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,aAAS,MAAM,IAAI,KAAK;AACxB,QAAI,YAAY,YAAa;AAC7B,eAAW,QAAQ,OAAO;AACxB,UAAI,CAAC,KAAK,KAAK,EAAG;AAClB,YAAM,QAAQ,UAAU,IAAI;AAC5B,UAAI,CAAC,MAAO;AACZ,UAAI,CAAC,eAAe,MAAM,OAAO,OAAO,EAAG;AAC3C,cAAQ,IAAI,YAAY,KAAK,CAAC;AAAA,IAChC;AAAA,EACF,CAAC;AACD,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,cAAQ,WAAW,QAAQ;AAC3B,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AACH;AAMO,SAAS,cAAc,SAAsC;AAClE,QAAM,YAAY,QAAQ,aAAa,mBAAmB;AAC1D,MAAI,CAAC,WAAW,SAAS,EAAG,QAAO,CAAC;AACpC,QAAM,SAAS,KAAK,IAAI,IAAI,QAAQ,aAAa;AACjD,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,YAAY,SAAS,GAAG;AACzC,QAAI,CAAC,mBAAmB,KAAK,IAAI,EAAG;AACpC,UAAM,WAAWD,MAAK,KAAK,WAAW,IAAI;AAC1C,UAAM,OAAO,SAAS,QAAQ;AAC9B,QAAI,KAAK,WAAW,OAAQ;AAC5B,QAAI,CAAC,QAAQ,OAAQ,YAAW,QAAQ;AACxC,YAAQ,KAAK,QAAQ;AAAA,EACvB;AACA,SAAO;AACT;","names":["path","path","files"]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// src/actions/datalake/createDatalake.ts
|
|
2
|
+
import { createDatalakeClient } from "@xylabs/aries-datalake-client";
|
|
3
|
+
import chalk2 from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/actions/datalake/formatters.ts
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
var STATUS_COLORS = {
|
|
8
|
+
pending: chalk.gray,
|
|
9
|
+
provisioning: chalk.yellow,
|
|
10
|
+
ready: chalk.green,
|
|
11
|
+
resizing: chalk.yellow,
|
|
12
|
+
deprovisioning: chalk.yellow,
|
|
13
|
+
deleted: chalk.gray,
|
|
14
|
+
error: chalk.red
|
|
15
|
+
};
|
|
16
|
+
function formatBytes(bytes) {
|
|
17
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
18
|
+
if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
19
|
+
if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;
|
|
20
|
+
if (bytes < 1024 ** 4) return `${(bytes / 1024 ** 3).toFixed(1)} GB`;
|
|
21
|
+
return `${(bytes / 1024 ** 4).toFixed(1)} TB`;
|
|
22
|
+
}
|
|
23
|
+
function formatStatus(status) {
|
|
24
|
+
const colorize = STATUS_COLORS[status] ?? chalk.white;
|
|
25
|
+
return colorize(status);
|
|
26
|
+
}
|
|
27
|
+
function printRateLimits(limits) {
|
|
28
|
+
const parts = [];
|
|
29
|
+
if (limits.authenticatedPerMinute !== void 0) parts.push(`auth=${limits.authenticatedPerMinute}/min`);
|
|
30
|
+
if (limits.anonymousPerMinute !== void 0) parts.push(`anon=${limits.anonymousPerMinute}/min`);
|
|
31
|
+
if (limits.burstFactor !== void 0) parts.push(`burst=${limits.burstFactor}x`);
|
|
32
|
+
if (parts.length > 0) {
|
|
33
|
+
console.log(` ${chalk.gray("limits:")} ${parts.join(" ")}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function printUsage(usage) {
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.cyan(" usage"));
|
|
39
|
+
console.log(` ${chalk.gray("payloads:")} ${usage.payloadCount}`);
|
|
40
|
+
console.log(` ${chalk.gray("stored:")} ${formatBytes(usage.bytesStored)} / ${formatBytes(usage.bytesStoredLimit)}`);
|
|
41
|
+
console.log(` ${chalk.gray("reads 24h:")} ${usage.readsLast24h}`);
|
|
42
|
+
console.log(` ${chalk.gray("writes 24h:")} ${usage.writesLast24h}`);
|
|
43
|
+
}
|
|
44
|
+
function printAcl(acl) {
|
|
45
|
+
if (acl.length === 0) return;
|
|
46
|
+
console.log();
|
|
47
|
+
console.log(chalk.cyan(" access"));
|
|
48
|
+
for (const entry of acl) {
|
|
49
|
+
const principal = entry.principal === "public" ? chalk.yellow("public") : entry.principal;
|
|
50
|
+
console.log(` ${principal.padEnd(24)} ${chalk.magenta(entry.role)} ${chalk.gray(entry.grantedAt)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function printDatalakeDetail(datalake) {
|
|
54
|
+
console.log(chalk.cyan(`
|
|
55
|
+
${datalake.name}`));
|
|
56
|
+
console.log(` ${chalk.gray("id:")} ${datalake.id}`);
|
|
57
|
+
console.log(` ${chalk.gray("status:")} ${formatStatus(datalake.status)}`);
|
|
58
|
+
if (datalake.url) {
|
|
59
|
+
console.log(` ${chalk.gray("url:")} ${datalake.url}`);
|
|
60
|
+
}
|
|
61
|
+
console.log(` ${chalk.gray("owner:")} ${datalake.ownerId}`);
|
|
62
|
+
console.log(` ${chalk.gray("tier:")} ${datalake.config.tier}`);
|
|
63
|
+
console.log(` ${chalk.gray("region:")} ${datalake.config.region ?? "\u2014"}`);
|
|
64
|
+
console.log(` ${chalk.gray("size:")} ${datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : "\u2014"}`);
|
|
65
|
+
console.log(` ${chalk.gray("iops:")} ${datalake.config.iops ?? "\u2014"}`);
|
|
66
|
+
console.log(` ${chalk.gray("retention:")} ${datalake.config.retentionDays ?? "forever"}`);
|
|
67
|
+
if (datalake.config.verifyHashes) {
|
|
68
|
+
console.log(` ${chalk.gray("verify:")} ${chalk.green("hashes enforced")}`);
|
|
69
|
+
}
|
|
70
|
+
if (datalake.config.rateLimits) printRateLimits(datalake.config.rateLimits);
|
|
71
|
+
console.log(` ${chalk.gray("created:")} ${datalake.createdAt}`);
|
|
72
|
+
console.log(` ${chalk.gray("updated:")} ${datalake.updatedAt}`);
|
|
73
|
+
if (datalake.usage) printUsage(datalake.usage);
|
|
74
|
+
printAcl(datalake.acl);
|
|
75
|
+
if (datalake.errorMessage) {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(` ${chalk.red("error:")} ${datalake.errorMessage}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/actions/datalake/parseSize.ts
|
|
82
|
+
var SIZE_UNITS = {
|
|
83
|
+
b: 1,
|
|
84
|
+
kb: 1024,
|
|
85
|
+
mb: 1024 ** 2,
|
|
86
|
+
gb: 1024 ** 3,
|
|
87
|
+
tb: 1024 ** 4
|
|
88
|
+
};
|
|
89
|
+
function parseSize(input) {
|
|
90
|
+
const match = /^(\d+(?:\.\d+)?)\s*([a-zA-Z]+)?$/.exec(input.trim());
|
|
91
|
+
if (!match) throw new Error(`Invalid size: ${input}`);
|
|
92
|
+
const value = Number(match[1]);
|
|
93
|
+
const unitRaw = (match[2] ?? "b").toLowerCase();
|
|
94
|
+
const unit = SIZE_UNITS[unitRaw];
|
|
95
|
+
if (unit === void 0) throw new Error(`Unknown size unit: ${match[2]}`);
|
|
96
|
+
return Math.round(value * unit);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/actions/datalake/createDatalake.ts
|
|
100
|
+
function buildRateLimits(options) {
|
|
101
|
+
if (options.rateAuthPerMinute === void 0 && options.rateAnonPerMinute === void 0 && options.rateBurstFactor === void 0) return void 0;
|
|
102
|
+
return {
|
|
103
|
+
authenticatedPerMinute: options.rateAuthPerMinute,
|
|
104
|
+
anonymousPerMinute: options.rateAnonPerMinute,
|
|
105
|
+
burstFactor: options.rateBurstFactor
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function createDatalake(options) {
|
|
109
|
+
const client = createDatalakeClient();
|
|
110
|
+
const config = {
|
|
111
|
+
tier: options.tier,
|
|
112
|
+
sizeBytes: options.size === void 0 ? void 0 : parseSize(options.size),
|
|
113
|
+
iops: options.iops,
|
|
114
|
+
region: options.region,
|
|
115
|
+
retentionDays: options.retentionDays,
|
|
116
|
+
verifyHashes: options.verifyHashes,
|
|
117
|
+
rateLimits: buildRateLimits(options)
|
|
118
|
+
};
|
|
119
|
+
console.log(chalk2.gray(`provisioning ${options.name} (tier=${options.tier})...`));
|
|
120
|
+
const descriptor = await client.create({ name: options.name, config });
|
|
121
|
+
console.log(chalk2.green(`created ${descriptor.name} (${descriptor.id})`));
|
|
122
|
+
printDatalakeDetail(descriptor);
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
createDatalake
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=createDatalake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/datalake/createDatalake.ts","../../../src/actions/datalake/formatters.ts","../../../src/actions/datalake/parseSize.ts"],"sourcesContent":["import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport type {\n DatalakeConfig, DatalakeRegion, DatalakeTier, RateLimitOverrides,\n} from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { parseSize } from './parseSize.ts'\n\nexport interface CreateDatalakeOptions {\n name: string\n tier: DatalakeTier\n size?: string\n iops?: number\n region?: DatalakeRegion\n retentionDays?: number\n verifyHashes?: boolean\n rateAuthPerMinute?: number\n rateAnonPerMinute?: number\n rateBurstFactor?: number\n}\n\nfunction buildRateLimits(options: CreateDatalakeOptions): RateLimitOverrides | undefined {\n if (\n options.rateAuthPerMinute === undefined\n && options.rateAnonPerMinute === undefined\n && options.rateBurstFactor === undefined\n ) return undefined\n return {\n authenticatedPerMinute: options.rateAuthPerMinute,\n anonymousPerMinute: options.rateAnonPerMinute,\n burstFactor: options.rateBurstFactor,\n }\n}\n\nexport async function createDatalake(options: CreateDatalakeOptions): Promise<void> {\n const client = createDatalakeClient()\n const config: DatalakeConfig = {\n tier: options.tier,\n sizeBytes: options.size === undefined ? undefined : parseSize(options.size),\n iops: options.iops,\n region: options.region,\n retentionDays: options.retentionDays,\n verifyHashes: options.verifyHashes,\n rateLimits: buildRateLimits(options),\n }\n\n console.log(chalk.gray(`provisioning ${options.name} (tier=${options.tier})...`))\n const descriptor = await client.create({ name: options.name, config })\n console.log(chalk.green(`created ${descriptor.name} (${descriptor.id})`))\n printDatalakeDetail(descriptor)\n}\n","import type {\n DatalakeDescriptor, DatalakeStatus, DatalakeUsage, RateLimitOverrides,\n} from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nconst STATUS_COLORS: Record<DatalakeStatus, (s: string) => string> = {\n pending: chalk.gray,\n provisioning: chalk.yellow,\n ready: chalk.green,\n resizing: chalk.yellow,\n deprovisioning: chalk.yellow,\n deleted: chalk.gray,\n error: chalk.red,\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`\n if (bytes < 1024 ** 4) return `${(bytes / 1024 ** 3).toFixed(1)} GB`\n return `${(bytes / 1024 ** 4).toFixed(1)} TB`\n}\n\nexport function formatStatus(status: DatalakeStatus): string {\n const colorize = STATUS_COLORS[status] ?? chalk.white\n return colorize(status)\n}\n\nexport function printDatalakeRow(datalake: DatalakeDescriptor): void {\n const size = datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'\n const name = chalk.white(datalake.name.padEnd(20))\n const tier = chalk.cyan(datalake.config.tier.padEnd(8))\n const region = chalk.gray((datalake.config.region ?? '—').padEnd(12))\n const status = formatStatus(datalake.status).padEnd(14)\n console.log(` ${name} ${tier} ${region} ${size.padStart(8)} ${status}`)\n}\n\nfunction printRateLimits(limits: RateLimitOverrides): void {\n const parts: string[] = []\n if (limits.authenticatedPerMinute !== undefined) parts.push(`auth=${limits.authenticatedPerMinute}/min`)\n if (limits.anonymousPerMinute !== undefined) parts.push(`anon=${limits.anonymousPerMinute}/min`)\n if (limits.burstFactor !== undefined) parts.push(`burst=${limits.burstFactor}x`)\n if (parts.length > 0) {\n console.log(` ${chalk.gray('limits:')} ${parts.join(' ')}`)\n }\n}\n\nfunction printUsage(usage: DatalakeUsage): void {\n console.log()\n console.log(chalk.cyan(' usage'))\n console.log(` ${chalk.gray('payloads:')} ${usage.payloadCount}`)\n console.log(` ${chalk.gray('stored:')} ${formatBytes(usage.bytesStored)} / ${formatBytes(usage.bytesStoredLimit)}`)\n console.log(` ${chalk.gray('reads 24h:')} ${usage.readsLast24h}`)\n console.log(` ${chalk.gray('writes 24h:')} ${usage.writesLast24h}`)\n}\n\nfunction printAcl(acl: DatalakeDescriptor['acl']): void {\n if (acl.length === 0) return\n console.log()\n console.log(chalk.cyan(' access'))\n for (const entry of acl) {\n const principal = entry.principal === 'public' ? chalk.yellow('public') : entry.principal\n console.log(` ${principal.padEnd(24)} ${chalk.magenta(entry.role)} ${chalk.gray(entry.grantedAt)}`)\n }\n}\n\nexport function printDatalakeDetail(datalake: DatalakeDescriptor): void {\n console.log(chalk.cyan(`\\n${datalake.name}`))\n console.log(` ${chalk.gray('id:')} ${datalake.id}`)\n console.log(` ${chalk.gray('status:')} ${formatStatus(datalake.status)}`)\n if (datalake.url) {\n console.log(` ${chalk.gray('url:')} ${datalake.url}`)\n }\n console.log(` ${chalk.gray('owner:')} ${datalake.ownerId}`)\n console.log(` ${chalk.gray('tier:')} ${datalake.config.tier}`)\n console.log(` ${chalk.gray('region:')} ${datalake.config.region ?? '—'}`)\n console.log(` ${chalk.gray('size:')} ${datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'}`)\n console.log(` ${chalk.gray('iops:')} ${datalake.config.iops ?? '—'}`)\n console.log(` ${chalk.gray('retention:')} ${datalake.config.retentionDays ?? 'forever'}`)\n if (datalake.config.verifyHashes) {\n console.log(` ${chalk.gray('verify:')} ${chalk.green('hashes enforced')}`)\n }\n if (datalake.config.rateLimits) printRateLimits(datalake.config.rateLimits)\n console.log(` ${chalk.gray('created:')} ${datalake.createdAt}`)\n console.log(` ${chalk.gray('updated:')} ${datalake.updatedAt}`)\n if (datalake.usage) printUsage(datalake.usage)\n printAcl(datalake.acl)\n if (datalake.errorMessage) {\n console.log()\n console.log(` ${chalk.red('error:')} ${datalake.errorMessage}`)\n }\n}\n","const SIZE_UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 ** 2,\n gb: 1024 ** 3,\n tb: 1024 ** 4,\n}\n\n/**\n * Parse human-readable sizes like \"10GB\", \"500MB\", \"1tb\" into bytes.\n * Throws on unrecognized input so the CLI surfaces a clear error.\n */\nexport function parseSize(input: string): number {\n const match = /^(\\d+(?:\\.\\d+)?)\\s*([a-zA-Z]+)?$/.exec(input.trim())\n if (!match) throw new Error(`Invalid size: ${input}`)\n const value = Number(match[1])\n const unitRaw = (match[2] ?? 'b').toLowerCase()\n const unit = SIZE_UNITS[unitRaw]\n if (unit === undefined) throw new Error(`Unknown size unit: ${match[2]}`)\n return Math.round(value * unit)\n}\n"],"mappings":";AAAA,SAAS,4BAA4B;AAIrC,OAAOA,YAAW;;;ACDlB,OAAO,WAAW;AAElB,IAAM,gBAA+D;AAAA,EACnE,SAAS,MAAM;AAAA,EACf,cAAc,MAAM;AAAA,EACpB,OAAO,MAAM;AAAA,EACb,UAAU,MAAM;AAAA,EAChB,gBAAgB,MAAM;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,OAAO,MAAM;AACf;AAEO,SAAS,YAAY,OAAuB;AACjD,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,QAAQ,EAAG,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC1D,MAAI,QAAQ,QAAQ,EAAG,QAAO,IAAI,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC/D,MAAI,QAAQ,QAAQ,EAAG,QAAO,IAAI,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC/D,SAAO,IAAI,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC1C;AAEO,SAAS,aAAa,QAAgC;AAC3D,QAAM,WAAW,cAAc,MAAM,KAAK,MAAM;AAChD,SAAO,SAAS,MAAM;AACxB;AAWA,SAAS,gBAAgB,QAAkC;AACzD,QAAM,QAAkB,CAAC;AACzB,MAAI,OAAO,2BAA2B,OAAW,OAAM,KAAK,QAAQ,OAAO,sBAAsB,MAAM;AACvG,MAAI,OAAO,uBAAuB,OAAW,OAAM,KAAK,QAAQ,OAAO,kBAAkB,MAAM;AAC/F,MAAI,OAAO,gBAAgB,OAAW,OAAM,KAAK,SAAS,OAAO,WAAW,GAAG;AAC/E,MAAI,MAAM,SAAS,GAAG;AACpB,YAAQ,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC,QAAQ,MAAM,KAAK,GAAG,CAAC,EAAE;AAAA,EACjE;AACF;AAEA,SAAS,WAAW,OAA4B;AAC9C,UAAQ,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AACjC,UAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,CAAC,MAAM,MAAM,YAAY,EAAE;AACpE,UAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,CAAC,QAAQ,YAAY,MAAM,WAAW,CAAC,MAAM,YAAY,MAAM,gBAAgB,CAAC,EAAE;AACzH,UAAQ,IAAI,OAAO,MAAM,KAAK,YAAY,CAAC,KAAK,MAAM,YAAY,EAAE;AACpE,UAAQ,IAAI,OAAO,MAAM,KAAK,aAAa,CAAC,IAAI,MAAM,aAAa,EAAE;AACvE;AAEA,SAAS,SAAS,KAAsC;AACtD,MAAI,IAAI,WAAW,EAAG;AACtB,UAAQ,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,UAAU,CAAC;AAClC,aAAW,SAAS,KAAK;AACvB,UAAM,YAAY,MAAM,cAAc,WAAW,MAAM,OAAO,QAAQ,IAAI,MAAM;AAChF,YAAQ,IAAI,OAAO,UAAU,OAAO,EAAE,CAAC,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC,EAAE;AAAA,EACxG;AACF;AAEO,SAAS,oBAAoB,UAAoC;AACtE,UAAQ,IAAI,MAAM,KAAK;AAAA,EAAK,SAAS,IAAI,EAAE,CAAC;AAC5C,UAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,YAAY,SAAS,EAAE,EAAE;AAC3D,UAAQ,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC,QAAQ,aAAa,SAAS,MAAM,CAAC,EAAE;AAC7E,MAAI,SAAS,KAAK;AAChB,YAAQ,IAAI,KAAK,MAAM,KAAK,MAAM,CAAC,WAAW,SAAS,GAAG,EAAE;AAAA,EAC9D;AACA,UAAQ,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC,SAAS,SAAS,OAAO,EAAE;AAChE,UAAQ,IAAI,KAAK,MAAM,KAAK,OAAO,CAAC,UAAU,SAAS,OAAO,IAAI,EAAE;AACpE,UAAQ,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC,QAAQ,SAAS,OAAO,UAAU,QAAG,EAAE;AAC7E,UAAQ,IAAI,KAAK,MAAM,KAAK,OAAO,CAAC,UAAU,SAAS,OAAO,YAAY,YAAY,SAAS,OAAO,SAAS,IAAI,QAAG,EAAE;AACxH,UAAQ,IAAI,KAAK,MAAM,KAAK,OAAO,CAAC,UAAU,SAAS,OAAO,QAAQ,QAAG,EAAE;AAC3E,UAAQ,IAAI,KAAK,MAAM,KAAK,YAAY,CAAC,KAAK,SAAS,OAAO,iBAAiB,SAAS,EAAE;AAC1F,MAAI,SAAS,OAAO,cAAc;AAChC,YAAQ,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC,QAAQ,MAAM,MAAM,iBAAiB,CAAC,EAAE;AAAA,EAChF;AACA,MAAI,SAAS,OAAO,WAAY,iBAAgB,SAAS,OAAO,UAAU;AAC1E,UAAQ,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE;AAClE,UAAQ,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE;AAClE,MAAI,SAAS,MAAO,YAAW,SAAS,KAAK;AAC7C,WAAS,SAAS,GAAG;AACrB,MAAI,SAAS,cAAc;AACzB,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,SAAS,YAAY,EAAE;AAAA,EACjE;AACF;;;AC3FA,IAAM,aAAqC;AAAA,EACzC,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AACd;AAMO,SAAS,UAAU,OAAuB;AAC/C,QAAM,QAAQ,mCAAmC,KAAK,MAAM,KAAK,CAAC;AAClE,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,iBAAiB,KAAK,EAAE;AACpD,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,QAAM,WAAW,MAAM,CAAC,KAAK,KAAK,YAAY;AAC9C,QAAM,OAAO,WAAW,OAAO;AAC/B,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,sBAAsB,MAAM,CAAC,CAAC,EAAE;AACxE,SAAO,KAAK,MAAM,QAAQ,IAAI;AAChC;;;AFEA,SAAS,gBAAgB,SAAgE;AACvF,MACE,QAAQ,sBAAsB,UAC3B,QAAQ,sBAAsB,UAC9B,QAAQ,oBAAoB,OAC/B,QAAO;AACT,SAAO;AAAA,IACL,wBAAwB,QAAQ;AAAA,IAChC,oBAAoB,QAAQ;AAAA,IAC5B,aAAa,QAAQ;AAAA,EACvB;AACF;AAEA,eAAsB,eAAe,SAA+C;AAClF,QAAM,SAAS,qBAAqB;AACpC,QAAM,SAAyB;AAAA,IAC7B,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ,SAAS,SAAY,SAAY,UAAU,QAAQ,IAAI;AAAA,IAC1E,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,eAAe,QAAQ;AAAA,IACvB,cAAc,QAAQ;AAAA,IACtB,YAAY,gBAAgB,OAAO;AAAA,EACrC;AAEA,UAAQ,IAAIC,OAAM,KAAK,gBAAgB,QAAQ,IAAI,UAAU,QAAQ,IAAI,MAAM,CAAC;AAChF,QAAM,aAAa,MAAM,OAAO,OAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC;AACrE,UAAQ,IAAIA,OAAM,MAAM,WAAW,WAAW,IAAI,KAAK,WAAW,EAAE,GAAG,CAAC;AACxE,sBAAoB,UAAU;AAChC;","names":["chalk","chalk"]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// src/actions/datalake/describeDatalake.ts
|
|
2
|
+
import { createDatalakeClient as createDatalakeClient2 } from "@xylabs/aries-datalake-client";
|
|
3
|
+
import chalk2 from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/actions/datalake/formatters.ts
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
var STATUS_COLORS = {
|
|
8
|
+
pending: chalk.gray,
|
|
9
|
+
provisioning: chalk.yellow,
|
|
10
|
+
ready: chalk.green,
|
|
11
|
+
resizing: chalk.yellow,
|
|
12
|
+
deprovisioning: chalk.yellow,
|
|
13
|
+
deleted: chalk.gray,
|
|
14
|
+
error: chalk.red
|
|
15
|
+
};
|
|
16
|
+
function formatBytes(bytes) {
|
|
17
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
18
|
+
if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
19
|
+
if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;
|
|
20
|
+
if (bytes < 1024 ** 4) return `${(bytes / 1024 ** 3).toFixed(1)} GB`;
|
|
21
|
+
return `${(bytes / 1024 ** 4).toFixed(1)} TB`;
|
|
22
|
+
}
|
|
23
|
+
function formatStatus(status) {
|
|
24
|
+
const colorize = STATUS_COLORS[status] ?? chalk.white;
|
|
25
|
+
return colorize(status);
|
|
26
|
+
}
|
|
27
|
+
function printRateLimits(limits) {
|
|
28
|
+
const parts = [];
|
|
29
|
+
if (limits.authenticatedPerMinute !== void 0) parts.push(`auth=${limits.authenticatedPerMinute}/min`);
|
|
30
|
+
if (limits.anonymousPerMinute !== void 0) parts.push(`anon=${limits.anonymousPerMinute}/min`);
|
|
31
|
+
if (limits.burstFactor !== void 0) parts.push(`burst=${limits.burstFactor}x`);
|
|
32
|
+
if (parts.length > 0) {
|
|
33
|
+
console.log(` ${chalk.gray("limits:")} ${parts.join(" ")}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function printUsage(usage) {
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.cyan(" usage"));
|
|
39
|
+
console.log(` ${chalk.gray("payloads:")} ${usage.payloadCount}`);
|
|
40
|
+
console.log(` ${chalk.gray("stored:")} ${formatBytes(usage.bytesStored)} / ${formatBytes(usage.bytesStoredLimit)}`);
|
|
41
|
+
console.log(` ${chalk.gray("reads 24h:")} ${usage.readsLast24h}`);
|
|
42
|
+
console.log(` ${chalk.gray("writes 24h:")} ${usage.writesLast24h}`);
|
|
43
|
+
}
|
|
44
|
+
function printAcl(acl) {
|
|
45
|
+
if (acl.length === 0) return;
|
|
46
|
+
console.log();
|
|
47
|
+
console.log(chalk.cyan(" access"));
|
|
48
|
+
for (const entry of acl) {
|
|
49
|
+
const principal = entry.principal === "public" ? chalk.yellow("public") : entry.principal;
|
|
50
|
+
console.log(` ${principal.padEnd(24)} ${chalk.magenta(entry.role)} ${chalk.gray(entry.grantedAt)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function printDatalakeDetail(datalake) {
|
|
54
|
+
console.log(chalk.cyan(`
|
|
55
|
+
${datalake.name}`));
|
|
56
|
+
console.log(` ${chalk.gray("id:")} ${datalake.id}`);
|
|
57
|
+
console.log(` ${chalk.gray("status:")} ${formatStatus(datalake.status)}`);
|
|
58
|
+
if (datalake.url) {
|
|
59
|
+
console.log(` ${chalk.gray("url:")} ${datalake.url}`);
|
|
60
|
+
}
|
|
61
|
+
console.log(` ${chalk.gray("owner:")} ${datalake.ownerId}`);
|
|
62
|
+
console.log(` ${chalk.gray("tier:")} ${datalake.config.tier}`);
|
|
63
|
+
console.log(` ${chalk.gray("region:")} ${datalake.config.region ?? "\u2014"}`);
|
|
64
|
+
console.log(` ${chalk.gray("size:")} ${datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : "\u2014"}`);
|
|
65
|
+
console.log(` ${chalk.gray("iops:")} ${datalake.config.iops ?? "\u2014"}`);
|
|
66
|
+
console.log(` ${chalk.gray("retention:")} ${datalake.config.retentionDays ?? "forever"}`);
|
|
67
|
+
if (datalake.config.verifyHashes) {
|
|
68
|
+
console.log(` ${chalk.gray("verify:")} ${chalk.green("hashes enforced")}`);
|
|
69
|
+
}
|
|
70
|
+
if (datalake.config.rateLimits) printRateLimits(datalake.config.rateLimits);
|
|
71
|
+
console.log(` ${chalk.gray("created:")} ${datalake.createdAt}`);
|
|
72
|
+
console.log(` ${chalk.gray("updated:")} ${datalake.updatedAt}`);
|
|
73
|
+
if (datalake.usage) printUsage(datalake.usage);
|
|
74
|
+
printAcl(datalake.acl);
|
|
75
|
+
if (datalake.errorMessage) {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(` ${chalk.red("error:")} ${datalake.errorMessage}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/actions/datalake/payloads/mintAndConnect.ts
|
|
82
|
+
import { createDatalakeClient, RestPayloadsClient } from "@xylabs/aries-datalake-client";
|
|
83
|
+
import { XyoPayloadsClient } from "@xylabs/aries-datalake-xl1-adapter";
|
|
84
|
+
|
|
85
|
+
// src/actions/datalake/resolveTarget.ts
|
|
86
|
+
import { getDefaultDatalake } from "@xylabs/aries-datalake-client";
|
|
87
|
+
function resolveTarget(argValue) {
|
|
88
|
+
const target = argValue ?? getDefaultDatalake();
|
|
89
|
+
if (!target) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
"No datalake specified and no default set. Pass <name> or run `aries datalake use <name>`."
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
return target;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/actions/datalake/payloads/mintAndConnect.ts
|
|
98
|
+
async function mintAndConnect(options) {
|
|
99
|
+
const controlClient = createDatalakeClient();
|
|
100
|
+
const target = resolveTarget(options.idOrName);
|
|
101
|
+
const descriptor = await controlClient.describe(target);
|
|
102
|
+
if (!descriptor.url) {
|
|
103
|
+
throw new Error(`Datalake ${descriptor.name} has no URL yet (status=${descriptor.status})`);
|
|
104
|
+
}
|
|
105
|
+
const token = await controlClient.mintToken({
|
|
106
|
+
datalakeId: descriptor.id,
|
|
107
|
+
role: options.role,
|
|
108
|
+
ttlSeconds: options.ttlSeconds ?? 3600
|
|
109
|
+
});
|
|
110
|
+
const clientOptions = {
|
|
111
|
+
baseUrl: token.url,
|
|
112
|
+
datalakeId: descriptor.id,
|
|
113
|
+
authToken: token.token
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
client: options.useXl1Sdk ? new XyoPayloadsClient(clientOptions) : new RestPayloadsClient(clientOptions),
|
|
117
|
+
datalakeName: descriptor.name,
|
|
118
|
+
datalakeId: descriptor.id,
|
|
119
|
+
url: token.url,
|
|
120
|
+
transport: options.useXl1Sdk ? "xl1-sdk" : "native"
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/actions/datalake/describeDatalake.ts
|
|
125
|
+
async function describeDatalake(idOrName) {
|
|
126
|
+
const client = createDatalakeClient2();
|
|
127
|
+
const target = resolveTarget(idOrName);
|
|
128
|
+
const descriptor = await client.describe(target);
|
|
129
|
+
printDatalakeDetail(descriptor);
|
|
130
|
+
if (descriptor.status !== "ready") return;
|
|
131
|
+
try {
|
|
132
|
+
const connection = await mintAndConnect({ idOrName: target, role: "viewer" });
|
|
133
|
+
const usage = await connection.client.usage();
|
|
134
|
+
printLiveUsage(usage);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.log();
|
|
137
|
+
console.log(chalk2.gray(
|
|
138
|
+
` (live quota unavailable: ${error instanceof Error ? error.message : String(error)})`
|
|
139
|
+
));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function printLiveUsage(usage) {
|
|
143
|
+
console.log();
|
|
144
|
+
console.log(chalk2.cyan(" live"));
|
|
145
|
+
console.log(` ${chalk2.gray("payloads:")} ${usage.payloadCount}`);
|
|
146
|
+
const limits = usage.rateLimits;
|
|
147
|
+
if (limits?.authenticated) {
|
|
148
|
+
const { remaining, limit } = limits.authenticated;
|
|
149
|
+
console.log(` ${chalk2.gray("auth quota:")} ${remaining}/${limit}`);
|
|
150
|
+
}
|
|
151
|
+
if (limits?.anonymous) {
|
|
152
|
+
const { remaining, limit } = limits.anonymous;
|
|
153
|
+
console.log(` ${chalk2.gray("anon quota:")} ${remaining}/${limit}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export {
|
|
157
|
+
describeDatalake
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=describeDatalake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/datalake/describeDatalake.ts","../../../src/actions/datalake/formatters.ts","../../../src/actions/datalake/payloads/mintAndConnect.ts","../../../src/actions/datalake/resolveTarget.ts"],"sourcesContent":["import type { DatalakeUsageReport } from '@xylabs/aries-datalake-client'\nimport { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { mintAndConnect } from './payloads/mintAndConnect.ts'\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport async function describeDatalake(idOrName: string | undefined): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(idOrName)\n const descriptor = await client.describe(target)\n printDatalakeDetail(descriptor)\n\n if (descriptor.status !== 'ready') return\n\n // Best-effort live-quota probe against the data plane. Requires a viewer\n // token from the control plane; any failure is surfaced as a note, not\n // an error — `describe` still works without the data plane reachable.\n try {\n const connection = await mintAndConnect({ idOrName: target, role: 'viewer' })\n const usage = await connection.client.usage()\n printLiveUsage(usage)\n } catch (error) {\n console.log()\n console.log(chalk.gray(\n ` (live quota unavailable: ${error instanceof Error ? error.message : String(error)})`,\n ))\n }\n}\n\nfunction printLiveUsage(usage: DatalakeUsageReport): void {\n console.log()\n console.log(chalk.cyan(' live'))\n console.log(` ${chalk.gray('payloads:')} ${usage.payloadCount}`)\n const limits = usage.rateLimits\n if (limits?.authenticated) {\n const { remaining, limit } = limits.authenticated\n console.log(` ${chalk.gray('auth quota:')} ${remaining}/${limit}`)\n }\n if (limits?.anonymous) {\n const { remaining, limit } = limits.anonymous\n console.log(` ${chalk.gray('anon quota:')} ${remaining}/${limit}`)\n }\n}\n","import type {\n DatalakeDescriptor, DatalakeStatus, DatalakeUsage, RateLimitOverrides,\n} from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nconst STATUS_COLORS: Record<DatalakeStatus, (s: string) => string> = {\n pending: chalk.gray,\n provisioning: chalk.yellow,\n ready: chalk.green,\n resizing: chalk.yellow,\n deprovisioning: chalk.yellow,\n deleted: chalk.gray,\n error: chalk.red,\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`\n if (bytes < 1024 ** 4) return `${(bytes / 1024 ** 3).toFixed(1)} GB`\n return `${(bytes / 1024 ** 4).toFixed(1)} TB`\n}\n\nexport function formatStatus(status: DatalakeStatus): string {\n const colorize = STATUS_COLORS[status] ?? chalk.white\n return colorize(status)\n}\n\nexport function printDatalakeRow(datalake: DatalakeDescriptor): void {\n const size = datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'\n const name = chalk.white(datalake.name.padEnd(20))\n const tier = chalk.cyan(datalake.config.tier.padEnd(8))\n const region = chalk.gray((datalake.config.region ?? '—').padEnd(12))\n const status = formatStatus(datalake.status).padEnd(14)\n console.log(` ${name} ${tier} ${region} ${size.padStart(8)} ${status}`)\n}\n\nfunction printRateLimits(limits: RateLimitOverrides): void {\n const parts: string[] = []\n if (limits.authenticatedPerMinute !== undefined) parts.push(`auth=${limits.authenticatedPerMinute}/min`)\n if (limits.anonymousPerMinute !== undefined) parts.push(`anon=${limits.anonymousPerMinute}/min`)\n if (limits.burstFactor !== undefined) parts.push(`burst=${limits.burstFactor}x`)\n if (parts.length > 0) {\n console.log(` ${chalk.gray('limits:')} ${parts.join(' ')}`)\n }\n}\n\nfunction printUsage(usage: DatalakeUsage): void {\n console.log()\n console.log(chalk.cyan(' usage'))\n console.log(` ${chalk.gray('payloads:')} ${usage.payloadCount}`)\n console.log(` ${chalk.gray('stored:')} ${formatBytes(usage.bytesStored)} / ${formatBytes(usage.bytesStoredLimit)}`)\n console.log(` ${chalk.gray('reads 24h:')} ${usage.readsLast24h}`)\n console.log(` ${chalk.gray('writes 24h:')} ${usage.writesLast24h}`)\n}\n\nfunction printAcl(acl: DatalakeDescriptor['acl']): void {\n if (acl.length === 0) return\n console.log()\n console.log(chalk.cyan(' access'))\n for (const entry of acl) {\n const principal = entry.principal === 'public' ? chalk.yellow('public') : entry.principal\n console.log(` ${principal.padEnd(24)} ${chalk.magenta(entry.role)} ${chalk.gray(entry.grantedAt)}`)\n }\n}\n\nexport function printDatalakeDetail(datalake: DatalakeDescriptor): void {\n console.log(chalk.cyan(`\\n${datalake.name}`))\n console.log(` ${chalk.gray('id:')} ${datalake.id}`)\n console.log(` ${chalk.gray('status:')} ${formatStatus(datalake.status)}`)\n if (datalake.url) {\n console.log(` ${chalk.gray('url:')} ${datalake.url}`)\n }\n console.log(` ${chalk.gray('owner:')} ${datalake.ownerId}`)\n console.log(` ${chalk.gray('tier:')} ${datalake.config.tier}`)\n console.log(` ${chalk.gray('region:')} ${datalake.config.region ?? '—'}`)\n console.log(` ${chalk.gray('size:')} ${datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'}`)\n console.log(` ${chalk.gray('iops:')} ${datalake.config.iops ?? '—'}`)\n console.log(` ${chalk.gray('retention:')} ${datalake.config.retentionDays ?? 'forever'}`)\n if (datalake.config.verifyHashes) {\n console.log(` ${chalk.gray('verify:')} ${chalk.green('hashes enforced')}`)\n }\n if (datalake.config.rateLimits) printRateLimits(datalake.config.rateLimits)\n console.log(` ${chalk.gray('created:')} ${datalake.createdAt}`)\n console.log(` ${chalk.gray('updated:')} ${datalake.updatedAt}`)\n if (datalake.usage) printUsage(datalake.usage)\n printAcl(datalake.acl)\n if (datalake.errorMessage) {\n console.log()\n console.log(` ${chalk.red('error:')} ${datalake.errorMessage}`)\n }\n}\n","import type { PayloadsClient } from '@xylabs/aries-datalake-client'\nimport { createDatalakeClient, RestPayloadsClient } from '@xylabs/aries-datalake-client'\nimport type { DatalakeRole } from '@xylabs/aries-datalake-core'\nimport { XyoPayloadsClient } from '@xylabs/aries-datalake-xl1-adapter'\n\nimport { resolveTarget } from '../resolveTarget.ts'\n\nexport interface Connection {\n client: PayloadsClient\n datalakeName: string\n datalakeId: string\n url: string\n transport: 'native' | 'xl1-sdk'\n}\n\nexport interface MintAndConnectOptions {\n idOrName?: string\n role: DatalakeRole\n ttlSeconds?: number\n /**\n * When `true`, use the real `@xyo-network/xl1-protocol-sdk`\n * `RestDataLakeRunner` / `RestDataLakeViewer` for insert and get,\n * proving byte-level wire compatibility. Other methods fall back to the\n * native `RestPayloadsClient` since the XL1 SDK doesn't implement them.\n */\n useXl1Sdk?: boolean\n}\n\n/**\n * Resolves the target datalake, mints a scoped token via the control plane,\n * and returns a data-plane client wired with that token. Centralizes what\n * every payload command has to do before it can talk to the data plane.\n */\nexport async function mintAndConnect(options: MintAndConnectOptions): Promise<Connection> {\n const controlClient = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n const descriptor = await controlClient.describe(target)\n if (!descriptor.url) {\n throw new Error(`Datalake ${descriptor.name} has no URL yet (status=${descriptor.status})`)\n }\n const token = await controlClient.mintToken({\n datalakeId: descriptor.id,\n role: options.role,\n ttlSeconds: options.ttlSeconds ?? 3600,\n })\n const clientOptions = {\n baseUrl: token.url,\n datalakeId: descriptor.id,\n authToken: token.token,\n }\n return {\n client: options.useXl1Sdk\n ? new XyoPayloadsClient(clientOptions)\n : new RestPayloadsClient(clientOptions),\n datalakeName: descriptor.name,\n datalakeId: descriptor.id,\n url: token.url,\n transport: options.useXl1Sdk ? 'xl1-sdk' : 'native',\n }\n}\n","import { getDefaultDatalake } from '@xylabs/aries-datalake-client'\n\n/**\n * Resolves the target datalake name/id for commands that take an optional\n * argument. Falls back to the one set via `aries datalake use`.\n */\nexport function resolveTarget(argValue: string | undefined): string {\n const target = argValue ?? getDefaultDatalake()\n if (!target) {\n throw new Error(\n 'No datalake specified and no default set. '\n + 'Pass <name> or run `aries datalake use <name>`.',\n )\n }\n return target\n}\n"],"mappings":"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","names":["createDatalakeClient","chalk","createDatalakeClient","chalk"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/actions/datalake/destroyDatalake.ts
|
|
2
|
+
import { createDatalakeClient } from "@xylabs/aries-datalake-client";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/actions/datalake/resolveTarget.ts
|
|
6
|
+
import { getDefaultDatalake } from "@xylabs/aries-datalake-client";
|
|
7
|
+
function resolveTarget(argValue) {
|
|
8
|
+
const target = argValue ?? getDefaultDatalake();
|
|
9
|
+
if (!target) {
|
|
10
|
+
throw new Error(
|
|
11
|
+
"No datalake specified and no default set. Pass <name> or run `aries datalake use <name>`."
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// src/actions/datalake/destroyDatalake.ts
|
|
18
|
+
async function destroyDatalake(options) {
|
|
19
|
+
const client = createDatalakeClient();
|
|
20
|
+
const target = resolveTarget(options.idOrName);
|
|
21
|
+
if (!options.force) {
|
|
22
|
+
console.log(chalk.yellow(
|
|
23
|
+
`Refusing to destroy ${target} without --force. This operation permanently deletes the datalake and all its payloads.`
|
|
24
|
+
));
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
await client.destroy(target);
|
|
29
|
+
console.log(chalk.green(`destroyed ${target}`));
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
destroyDatalake
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=destroyDatalake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/datalake/destroyDatalake.ts","../../../src/actions/datalake/resolveTarget.ts"],"sourcesContent":["import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport interface DestroyDatalakeOptions {\n idOrName?: string\n force?: boolean\n}\n\nexport async function destroyDatalake(options: DestroyDatalakeOptions): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n\n if (!options.force) {\n console.log(chalk.yellow(\n `Refusing to destroy ${target} without --force. `\n + 'This operation permanently deletes the datalake and all its payloads.',\n ))\n process.exitCode = 1\n return\n }\n\n await client.destroy(target)\n console.log(chalk.green(`destroyed ${target}`))\n}\n","import { getDefaultDatalake } from '@xylabs/aries-datalake-client'\n\n/**\n * Resolves the target datalake name/id for commands that take an optional\n * argument. Falls back to the one set via `aries datalake use`.\n */\nexport function resolveTarget(argValue: string | undefined): string {\n const target = argValue ?? getDefaultDatalake()\n if (!target) {\n throw new Error(\n 'No datalake specified and no default set. '\n + 'Pass <name> or run `aries datalake use <name>`.',\n )\n }\n return target\n}\n"],"mappings":";AAAA,SAAS,4BAA4B;AACrC,OAAO,WAAW;;;ACDlB,SAAS,0BAA0B;AAM5B,SAAS,cAAc,UAAsC;AAClE,QAAM,SAAS,YAAY,mBAAmB;AAC9C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AACA,SAAO;AACT;;;ADLA,eAAsB,gBAAgB,SAAgD;AACpF,QAAM,SAAS,qBAAqB;AACpC,QAAM,SAAS,cAAc,QAAQ,QAAQ;AAE7C,MAAI,CAAC,QAAQ,OAAO;AAClB,YAAQ,IAAI,MAAM;AAAA,MAChB,uBAAuB,MAAM;AAAA,IAE/B,CAAC;AACD,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ,MAAM;AAC3B,UAAQ,IAAI,MAAM,MAAM,aAAa,MAAM,EAAE,CAAC;AAChD;","names":[]}
|