@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,470 @@
|
|
|
1
|
+
// src/actions/datalake/dev/downDevServer.ts
|
|
2
|
+
import { clearCredentials, loadCredentials } from "@xylabs/aries-datalake-client";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/actions/datalake/dev/state.ts
|
|
6
|
+
import {
|
|
7
|
+
existsSync,
|
|
8
|
+
mkdirSync,
|
|
9
|
+
readFileSync,
|
|
10
|
+
unlinkSync,
|
|
11
|
+
writeFileSync
|
|
12
|
+
} from "fs";
|
|
13
|
+
|
|
14
|
+
// src/actions/datalake/dev/paths.ts
|
|
15
|
+
import { homedir } from "os";
|
|
16
|
+
import path from "path";
|
|
17
|
+
function getAriesHome() {
|
|
18
|
+
return process.env.ARIES_HOME ?? path.join(homedir(), ".aries");
|
|
19
|
+
}
|
|
20
|
+
function getDevDir() {
|
|
21
|
+
return path.join(getAriesHome(), "dev");
|
|
22
|
+
}
|
|
23
|
+
function getDevStatePath() {
|
|
24
|
+
return path.join(getDevDir(), "state.json");
|
|
25
|
+
}
|
|
26
|
+
function getDevPidPath() {
|
|
27
|
+
return path.join(getDevDir(), "pid");
|
|
28
|
+
}
|
|
29
|
+
function getDevLogPath() {
|
|
30
|
+
return path.join(getDevDir(), "server.log");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// src/actions/datalake/dev/state.ts
|
|
34
|
+
function readDevState() {
|
|
35
|
+
const filePath = getDevStatePath();
|
|
36
|
+
if (!existsSync(filePath)) return void 0;
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
39
|
+
} catch {
|
|
40
|
+
return void 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function writeDevState(state) {
|
|
44
|
+
const dir = getDevDir();
|
|
45
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
46
|
+
writeFileSync(getDevStatePath(), JSON.stringify(state, void 0, 2), "utf8");
|
|
47
|
+
writeFileSync(getDevPidPath(), String(state.pid), "utf8");
|
|
48
|
+
}
|
|
49
|
+
function clearDevState() {
|
|
50
|
+
for (const filePath of [getDevStatePath(), getDevPidPath()]) {
|
|
51
|
+
if (existsSync(filePath)) unlinkSync(filePath);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function isProcessAlive(pid) {
|
|
55
|
+
try {
|
|
56
|
+
process.kill(pid, 0);
|
|
57
|
+
return true;
|
|
58
|
+
} catch (error) {
|
|
59
|
+
const code = error.code;
|
|
60
|
+
return code === "EPERM";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// src/actions/datalake/dev/downDevServer.ts
|
|
65
|
+
var DEFAULT_GRACE_MS = 2e3;
|
|
66
|
+
var POLL_MS = 50;
|
|
67
|
+
async function downDevServer(options = {}) {
|
|
68
|
+
const state = readDevState();
|
|
69
|
+
if (!state) {
|
|
70
|
+
console.log(chalk.yellow("dev server is not running"));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const graceMs = options.gracePeriodMs ?? DEFAULT_GRACE_MS;
|
|
74
|
+
if (!isProcessAlive(state.pid)) {
|
|
75
|
+
cleanup(state.controlUrl);
|
|
76
|
+
console.log(chalk.green(`dev server pid ${state.pid} was already stopped \u2014 cleaned up state`));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
process.kill(state.pid, "SIGTERM");
|
|
81
|
+
} catch (error) {
|
|
82
|
+
const code = error.code;
|
|
83
|
+
if (code !== "ESRCH") throw error;
|
|
84
|
+
}
|
|
85
|
+
const deadline = Date.now() + graceMs;
|
|
86
|
+
while (Date.now() < deadline && isProcessAlive(state.pid)) {
|
|
87
|
+
await delay(POLL_MS);
|
|
88
|
+
}
|
|
89
|
+
if (isProcessAlive(state.pid)) {
|
|
90
|
+
try {
|
|
91
|
+
process.kill(state.pid, "SIGKILL");
|
|
92
|
+
} catch {
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
cleanup(state.controlUrl);
|
|
96
|
+
console.log(chalk.green(`dev server pid ${state.pid} stopped`));
|
|
97
|
+
}
|
|
98
|
+
function cleanup(controlUrl) {
|
|
99
|
+
const credentials = loadCredentials();
|
|
100
|
+
if (credentials?.baseUrl === controlUrl) {
|
|
101
|
+
clearCredentials();
|
|
102
|
+
}
|
|
103
|
+
clearDevState();
|
|
104
|
+
}
|
|
105
|
+
function delay(ms) {
|
|
106
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// src/actions/datalake/dev/logsDevServer.ts
|
|
110
|
+
import { spawn } from "child_process";
|
|
111
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
112
|
+
import chalk2 from "chalk";
|
|
113
|
+
async function logsDevServer(options = {}) {
|
|
114
|
+
const logPath = getDevLogPath();
|
|
115
|
+
if (!existsSync2(logPath)) {
|
|
116
|
+
console.log(chalk2.yellow("no dev server log file yet"));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (options.follow) {
|
|
120
|
+
const child = spawn("tail", ["-n", String(options.lines ?? 50), "-f", logPath], { stdio: "inherit" });
|
|
121
|
+
await new Promise((resolve) => {
|
|
122
|
+
child.on("exit", (code) => {
|
|
123
|
+
process.exitCode = code ?? 0;
|
|
124
|
+
resolve();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const lines = readFileSync2(logPath, "utf8").split("\n");
|
|
130
|
+
const tail = lines.slice(-(options.lines ?? 50));
|
|
131
|
+
process.stdout.write(tail.join("\n"));
|
|
132
|
+
if (!tail.at(-1)?.endsWith("\n")) process.stdout.write("\n");
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// src/actions/datalake/dev/resetDevServer.ts
|
|
136
|
+
import { existsSync as existsSync3, rmSync } from "fs";
|
|
137
|
+
import chalk3 from "chalk";
|
|
138
|
+
async function resetDevServer() {
|
|
139
|
+
await downDevServer();
|
|
140
|
+
const dir = getDevDir();
|
|
141
|
+
if (!existsSync3(dir)) {
|
|
142
|
+
console.log(chalk3.green("nothing to reset"));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
rmSync(dir, { recursive: true, force: true });
|
|
146
|
+
console.log(chalk3.green(`reset ${dir}`));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// src/actions/datalake/dev/statusDevServer.ts
|
|
150
|
+
import chalk4 from "chalk";
|
|
151
|
+
async function statusDevServer() {
|
|
152
|
+
const state = readDevState();
|
|
153
|
+
if (!state) {
|
|
154
|
+
console.log(chalk4.yellow("dev server not running"));
|
|
155
|
+
process.exitCode = 3;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const alive = isProcessAlive(state.pid);
|
|
159
|
+
const healthy = alive ? await pingHealth(state.controlUrl) : false;
|
|
160
|
+
const uptime = formatUptime(state.startedAt);
|
|
161
|
+
console.log(chalk4.cyan("dev server status"));
|
|
162
|
+
console.log(` ${chalk4.gray("state:")} ${statusLabel(alive, healthy)}`);
|
|
163
|
+
console.log(` ${chalk4.gray("pid:")} ${state.pid}`);
|
|
164
|
+
console.log(` ${chalk4.gray("control:")} ${state.controlUrl}`);
|
|
165
|
+
console.log(` ${chalk4.gray("data:")} ${state.planeUrl}`);
|
|
166
|
+
console.log(` ${chalk4.gray("user:")} ${state.userId}`);
|
|
167
|
+
console.log(` ${chalk4.gray("started:")} ${state.startedAt}${uptime ? ` (${uptime})` : ""}`);
|
|
168
|
+
console.log(` ${chalk4.gray("log:")} ${getDevLogPath()}`);
|
|
169
|
+
if (alive && !healthy) {
|
|
170
|
+
process.exitCode = 2;
|
|
171
|
+
} else if (!alive) {
|
|
172
|
+
process.exitCode = 3;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function statusLabel(alive, healthy) {
|
|
176
|
+
if (alive && healthy) return chalk4.green("running + healthy");
|
|
177
|
+
if (alive) return chalk4.yellow("running but unresponsive");
|
|
178
|
+
return chalk4.red("stale state (process gone)");
|
|
179
|
+
}
|
|
180
|
+
async function pingHealth(controlUrl) {
|
|
181
|
+
try {
|
|
182
|
+
const controller = new AbortController();
|
|
183
|
+
const timeout = setTimeout(() => controller.abort(), 1e3);
|
|
184
|
+
const response = await fetch(`${controlUrl}/v1/health`, { signal: controller.signal });
|
|
185
|
+
clearTimeout(timeout);
|
|
186
|
+
return response.ok;
|
|
187
|
+
} catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function formatUptime(startedAt) {
|
|
192
|
+
const started = new Date(startedAt).getTime();
|
|
193
|
+
if (Number.isNaN(started)) return "";
|
|
194
|
+
const seconds = Math.max(0, Math.floor((Date.now() - started) / 1e3));
|
|
195
|
+
if (seconds < 60) return `${seconds}s`;
|
|
196
|
+
const minutes = Math.floor(seconds / 60);
|
|
197
|
+
if (minutes < 60) return `${minutes}m ${seconds % 60}s`;
|
|
198
|
+
const hours = Math.floor(minutes / 60);
|
|
199
|
+
return `${hours}h ${minutes % 60}m`;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// src/actions/datalake/dev/upDevServer.ts
|
|
203
|
+
import { spawn as spawn2 } from "child_process";
|
|
204
|
+
import { randomBytes } from "crypto";
|
|
205
|
+
import {
|
|
206
|
+
existsSync as existsSync5,
|
|
207
|
+
mkdirSync as mkdirSync2,
|
|
208
|
+
openSync
|
|
209
|
+
} from "fs";
|
|
210
|
+
import path3 from "path";
|
|
211
|
+
import { saveCredentials } from "@xylabs/aries-datalake-client";
|
|
212
|
+
import chalk5 from "chalk";
|
|
213
|
+
|
|
214
|
+
// src/actions/datalake/dev/resolveServerBin.ts
|
|
215
|
+
import { existsSync as existsSync4 } from "fs";
|
|
216
|
+
import { createRequire } from "module";
|
|
217
|
+
import path2 from "path";
|
|
218
|
+
var require2 = createRequire(import.meta.url);
|
|
219
|
+
function resolveServerBin() {
|
|
220
|
+
let packageJsonPath;
|
|
221
|
+
try {
|
|
222
|
+
packageJsonPath = require2.resolve("@xylabs/aries-datalake-plane/package.json");
|
|
223
|
+
} catch {
|
|
224
|
+
throw new Error(
|
|
225
|
+
"@xylabs/aries-datalake-plane is not installed. Install it as a dev dependency to use `aries datalake dev` locally."
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
const binPath = path2.join(path2.dirname(packageJsonPath), "dist", "bin", "devServer.mjs");
|
|
229
|
+
if (!existsSync4(binPath)) {
|
|
230
|
+
throw new Error(
|
|
231
|
+
`Dev server binary not found at ${binPath}. Run \`pnpm xy compile\` to build it.`
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
return binPath;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// src/actions/datalake/dev/waitForHealth.ts
|
|
238
|
+
var POLL_INTERVAL_MS = 100;
|
|
239
|
+
async function waitForHealth(baseUrl, timeoutMs) {
|
|
240
|
+
const deadline = Date.now() + timeoutMs;
|
|
241
|
+
const url = `${baseUrl.replace(/\/$/, "")}/v1/health`;
|
|
242
|
+
while (Date.now() < deadline) {
|
|
243
|
+
try {
|
|
244
|
+
const response = await fetch(url);
|
|
245
|
+
if (response.ok) return true;
|
|
246
|
+
} catch {
|
|
247
|
+
}
|
|
248
|
+
await delay2(POLL_INTERVAL_MS);
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
function delay2(ms) {
|
|
253
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// src/actions/datalake/dev/upDevServer.ts
|
|
257
|
+
var DEFAULT_CONTROL_PORT = 8787;
|
|
258
|
+
var DEFAULT_PLANE_PORT = 8788;
|
|
259
|
+
var DEFAULT_TIMEOUT_SECONDS = 10;
|
|
260
|
+
function resolveOptions(options) {
|
|
261
|
+
const controlPort = options.controlPort ?? DEFAULT_CONTROL_PORT;
|
|
262
|
+
const planePort = options.planePort ?? DEFAULT_PLANE_PORT;
|
|
263
|
+
const rotate = options.auditRotate === true;
|
|
264
|
+
return {
|
|
265
|
+
controlPort,
|
|
266
|
+
planePort,
|
|
267
|
+
controlUrl: `http://127.0.0.1:${controlPort}`,
|
|
268
|
+
planeUrl: `http://127.0.0.1:${planePort}`,
|
|
269
|
+
userId: options.userId ?? "dev-user",
|
|
270
|
+
authToken: options.authToken ?? randomBytes(16).toString("hex"),
|
|
271
|
+
signingSecret: options.signingSecret ?? randomBytes(32).toString("hex"),
|
|
272
|
+
timeoutMs: (options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS) * 1e3,
|
|
273
|
+
persistDir: options.persist ? path3.join(getDevDir(), "store") : void 0,
|
|
274
|
+
auditLogPath: options.audit && !rotate ? path3.join(getDevDir(), "audit.log") : void 0,
|
|
275
|
+
auditDir: options.audit && rotate ? path3.join(getDevDir(), "audit") : void 0,
|
|
276
|
+
auditKeepDays: rotate ? options.auditKeepDays : void 0
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function spawnDaemon(binPath, resolved) {
|
|
280
|
+
const devDir = getDevDir();
|
|
281
|
+
if (!existsSync5(devDir)) mkdirSync2(devDir, { recursive: true });
|
|
282
|
+
const logFd = openSync(getDevLogPath(), "a");
|
|
283
|
+
const env = {
|
|
284
|
+
...process.env,
|
|
285
|
+
CONTROL_PORT: String(resolved.controlPort),
|
|
286
|
+
PLANE_PORT: String(resolved.planePort),
|
|
287
|
+
HOST: "127.0.0.1",
|
|
288
|
+
DATALAKE_CONTROL_TOKENS: `${resolved.authToken}=${resolved.userId}`,
|
|
289
|
+
TOKEN_SIGNING_SECRET: resolved.signingSecret,
|
|
290
|
+
DATALAKE_ORIGIN_URL: resolved.planeUrl,
|
|
291
|
+
LOG_LEVEL: process.env.LOG_LEVEL ?? "info"
|
|
292
|
+
};
|
|
293
|
+
if (resolved.persistDir) env.DATALAKE_PERSIST_DIR = resolved.persistDir;
|
|
294
|
+
if (resolved.auditLogPath) env.DATALAKE_AUDIT_LOG = resolved.auditLogPath;
|
|
295
|
+
if (resolved.auditDir) env.DATALAKE_AUDIT_DIR = resolved.auditDir;
|
|
296
|
+
if (resolved.auditKeepDays !== void 0) env.DATALAKE_AUDIT_MAX_AGE_DAYS = String(resolved.auditKeepDays);
|
|
297
|
+
const child = spawn2(process.execPath, [binPath], {
|
|
298
|
+
detached: true,
|
|
299
|
+
stdio: ["ignore", logFd, logFd],
|
|
300
|
+
env
|
|
301
|
+
});
|
|
302
|
+
child.unref();
|
|
303
|
+
return child;
|
|
304
|
+
}
|
|
305
|
+
function describeAudit(resolved) {
|
|
306
|
+
if (resolved.auditDir) {
|
|
307
|
+
return `rotating ${resolved.auditDir}${resolved.auditKeepDays ? ` (keep ${resolved.auditKeepDays}d)` : ""}`;
|
|
308
|
+
}
|
|
309
|
+
return resolved.auditLogPath ?? "disabled";
|
|
310
|
+
}
|
|
311
|
+
function printReadyBanner(state, resolved) {
|
|
312
|
+
console.log(chalk5.green("dev server ready"));
|
|
313
|
+
console.log(` ${chalk5.gray("control:")} ${state.controlUrl}`);
|
|
314
|
+
console.log(` ${chalk5.gray("data:")} ${state.planeUrl}`);
|
|
315
|
+
console.log(` ${chalk5.gray("user:")} ${state.userId}`);
|
|
316
|
+
console.log(` ${chalk5.gray("log:")} ${getDevLogPath()}`);
|
|
317
|
+
console.log(` ${chalk5.gray("store:")} ${resolved.persistDir ? `persisted (${resolved.persistDir})` : "in-memory"}`);
|
|
318
|
+
console.log(` ${chalk5.gray("audit:")} ${describeAudit(resolved)}`);
|
|
319
|
+
console.log(chalk5.gray("\nCLI is configured \u2014 try `aries datalake list`"));
|
|
320
|
+
}
|
|
321
|
+
async function upDevServer(options = {}) {
|
|
322
|
+
const existing = readDevState();
|
|
323
|
+
if (existing && isProcessAlive(existing.pid)) {
|
|
324
|
+
console.log(chalk5.yellow(`dev server already running (pid ${existing.pid}) at ${existing.controlUrl}`));
|
|
325
|
+
return existing;
|
|
326
|
+
}
|
|
327
|
+
if (existing) clearDevState();
|
|
328
|
+
const resolved = resolveOptions(options);
|
|
329
|
+
const child = spawnDaemon(resolveServerBin(), resolved);
|
|
330
|
+
if (!child.pid) throw new Error("Failed to spawn dev server process");
|
|
331
|
+
console.log(chalk5.gray(`starting dev server (pid ${child.pid})...`));
|
|
332
|
+
const healthy = await waitForHealth(resolved.controlUrl, resolved.timeoutMs);
|
|
333
|
+
if (!healthy) {
|
|
334
|
+
try {
|
|
335
|
+
process.kill(child.pid, "SIGTERM");
|
|
336
|
+
} catch {
|
|
337
|
+
}
|
|
338
|
+
throw new Error(
|
|
339
|
+
`Dev server did not become healthy within ${resolved.timeoutMs / 1e3}s. Check logs at ${getDevLogPath()}`
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
const state = {
|
|
343
|
+
pid: child.pid,
|
|
344
|
+
controlUrl: resolved.controlUrl,
|
|
345
|
+
planeUrl: resolved.planeUrl,
|
|
346
|
+
controlPort: resolved.controlPort,
|
|
347
|
+
planePort: resolved.planePort,
|
|
348
|
+
userId: resolved.userId,
|
|
349
|
+
authToken: resolved.authToken,
|
|
350
|
+
signingSecret: resolved.signingSecret,
|
|
351
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
352
|
+
};
|
|
353
|
+
writeDevState(state);
|
|
354
|
+
saveCredentials({
|
|
355
|
+
baseUrl: resolved.controlUrl,
|
|
356
|
+
authToken: resolved.authToken,
|
|
357
|
+
userId: resolved.userId
|
|
358
|
+
});
|
|
359
|
+
printReadyBanner(state, resolved);
|
|
360
|
+
return state;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// src/commands/datalakeDevDownCommand.ts
|
|
364
|
+
var datalakeDevDownCommand = {
|
|
365
|
+
command: "down",
|
|
366
|
+
describe: "Stop the local dev server (if running) and clear its credentials",
|
|
367
|
+
handler: async () => {
|
|
368
|
+
await downDevServer();
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
// src/commands/datalakeDevLogsCommand.ts
|
|
373
|
+
var datalakeDevLogsCommand = {
|
|
374
|
+
command: "logs",
|
|
375
|
+
describe: "Print recent dev server log output",
|
|
376
|
+
builder: (yargs) => yargs.option("follow", {
|
|
377
|
+
alias: "f",
|
|
378
|
+
type: "boolean",
|
|
379
|
+
default: false,
|
|
380
|
+
describe: "Stream new lines as they arrive"
|
|
381
|
+
}).option("lines", {
|
|
382
|
+
alias: "n",
|
|
383
|
+
type: "number",
|
|
384
|
+
default: 50,
|
|
385
|
+
describe: "Number of tail lines to show"
|
|
386
|
+
}),
|
|
387
|
+
handler: async (argv) => {
|
|
388
|
+
await logsDevServer({
|
|
389
|
+
follow: argv.follow,
|
|
390
|
+
lines: argv.lines
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
// src/commands/datalakeDevResetCommand.ts
|
|
396
|
+
var datalakeDevResetCommand = {
|
|
397
|
+
command: "reset",
|
|
398
|
+
describe: "Stop the dev server and wipe all its local state",
|
|
399
|
+
handler: async () => {
|
|
400
|
+
await resetDevServer();
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
// src/commands/datalakeDevStatusCommand.ts
|
|
405
|
+
var datalakeDevStatusCommand = {
|
|
406
|
+
command: "status",
|
|
407
|
+
describe: "Report whether the local dev server is running and healthy",
|
|
408
|
+
handler: async () => {
|
|
409
|
+
await statusDevServer();
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
// src/commands/datalakeDevUpCommand.ts
|
|
414
|
+
var datalakeDevUpCommand = {
|
|
415
|
+
command: "up",
|
|
416
|
+
describe: "Start the local control + data plane dev server and wire the CLI to it",
|
|
417
|
+
builder: (yargs) => yargs.option("control-port", {
|
|
418
|
+
type: "number",
|
|
419
|
+
default: 8787,
|
|
420
|
+
describe: "Control-plane port"
|
|
421
|
+
}).option("plane-port", {
|
|
422
|
+
type: "number",
|
|
423
|
+
default: 8788,
|
|
424
|
+
describe: "Data-plane port"
|
|
425
|
+
}).option("timeout", {
|
|
426
|
+
type: "number",
|
|
427
|
+
default: 10,
|
|
428
|
+
describe: "Seconds to wait for health"
|
|
429
|
+
}).option("persist", {
|
|
430
|
+
type: "boolean",
|
|
431
|
+
default: false,
|
|
432
|
+
describe: "Persist store state to disk so it survives restarts"
|
|
433
|
+
}).option("audit", {
|
|
434
|
+
type: "boolean",
|
|
435
|
+
default: false,
|
|
436
|
+
describe: "Write a JSONL audit log of every data-plane request"
|
|
437
|
+
}).option("audit-rotate", {
|
|
438
|
+
type: "boolean",
|
|
439
|
+
default: false,
|
|
440
|
+
describe: "Rotate the audit log daily (writes to <home>/dev/audit/)"
|
|
441
|
+
}).option("audit-keep-days", {
|
|
442
|
+
type: "number",
|
|
443
|
+
describe: "Prune rotated audit files older than this many days"
|
|
444
|
+
}),
|
|
445
|
+
handler: async (argv) => {
|
|
446
|
+
await upDevServer({
|
|
447
|
+
controlPort: argv["control-port"],
|
|
448
|
+
planePort: argv["plane-port"],
|
|
449
|
+
timeoutSeconds: argv.timeout,
|
|
450
|
+
persist: argv.persist,
|
|
451
|
+
audit: argv.audit,
|
|
452
|
+
auditRotate: argv["audit-rotate"],
|
|
453
|
+
auditKeepDays: argv["audit-keep-days"]
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
// src/commands/datalakeDevCommand.ts
|
|
459
|
+
var datalakeDevCommand = {
|
|
460
|
+
command: "dev",
|
|
461
|
+
describe: "Run a local datalake control + data plane for development & testing",
|
|
462
|
+
builder: (yargs) => yargs.command(datalakeDevUpCommand).command(datalakeDevDownCommand).command(datalakeDevStatusCommand).command(datalakeDevLogsCommand).command(datalakeDevResetCommand).demandCommand(1).strictCommands(),
|
|
463
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
464
|
+
handler: () => {
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
export {
|
|
468
|
+
datalakeDevCommand
|
|
469
|
+
};
|
|
470
|
+
//# sourceMappingURL=datalakeDevCommand.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/datalake/dev/downDevServer.ts","../../src/actions/datalake/dev/state.ts","../../src/actions/datalake/dev/paths.ts","../../src/actions/datalake/dev/logsDevServer.ts","../../src/actions/datalake/dev/resetDevServer.ts","../../src/actions/datalake/dev/statusDevServer.ts","../../src/actions/datalake/dev/upDevServer.ts","../../src/actions/datalake/dev/resolveServerBin.ts","../../src/actions/datalake/dev/waitForHealth.ts","../../src/commands/datalakeDevDownCommand.ts","../../src/commands/datalakeDevLogsCommand.ts","../../src/commands/datalakeDevResetCommand.ts","../../src/commands/datalakeDevStatusCommand.ts","../../src/commands/datalakeDevUpCommand.ts","../../src/commands/datalakeDevCommand.ts"],"sourcesContent":["import { clearCredentials, loadCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport {\n clearDevState, isProcessAlive, readDevState,\n} from './state.ts'\n\n/**\n * Stops the dev server spawned by `upDevServer`. Sends SIGTERM, waits up to\n * `gracePeriodMs` for a clean exit, then SIGKILLs if the process is still\n * around. Clears credentials only when they still point at the dev server —\n * we never want to stomp a user's real sign-in.\n */\nexport interface DownDevServerOptions {\n gracePeriodMs?: number\n}\n\nconst DEFAULT_GRACE_MS = 2000\nconst POLL_MS = 50\n\nexport async function downDevServer(options: DownDevServerOptions = {}): Promise<void> {\n const state = readDevState()\n if (!state) {\n console.log(chalk.yellow('dev server is not running'))\n return\n }\n const graceMs = options.gracePeriodMs ?? DEFAULT_GRACE_MS\n\n if (!isProcessAlive(state.pid)) {\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} was already stopped — cleaned up state`))\n return\n }\n\n try {\n process.kill(state.pid, 'SIGTERM')\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n if (code !== 'ESRCH') throw error\n }\n\n const deadline = Date.now() + graceMs\n while (Date.now() < deadline && isProcessAlive(state.pid)) {\n await delay(POLL_MS)\n }\n if (isProcessAlive(state.pid)) {\n try {\n process.kill(state.pid, 'SIGKILL')\n } catch {\n // best effort\n }\n }\n\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} stopped`))\n}\n\nfunction cleanup(controlUrl: string): void {\n const credentials = loadCredentials()\n if (credentials?.baseUrl === controlUrl) {\n clearCredentials()\n }\n clearDevState()\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import {\n existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\n\nimport {\n getDevDir, getDevPidPath, getDevStatePath,\n} from './paths.ts'\n\n/**\n * On-disk bookkeeping for a running dev server. Lives in `~/.aries/dev/` so\n * it survives across CLI invocations and can be queried by `dev status` /\n * `dev logs` / `dev down`.\n */\nexport interface DevState {\n pid: number\n controlUrl: string\n planeUrl: string\n controlPort: number\n planePort: number\n /** User id the dev auth token resolves to on the control plane. */\n userId: string\n /** Bearer token accepted by the dev control plane (written to credentials). */\n authToken: string\n /** Secret the dev control plane HMAC-signs data-plane JWTs with. */\n signingSecret: string\n /** ISO-8601 startup time. */\n startedAt: string\n}\n\nexport function readDevState(): DevState | undefined {\n const filePath = getDevStatePath()\n if (!existsSync(filePath)) return undefined\n try {\n return JSON.parse(readFileSync(filePath, 'utf8')) as DevState\n } catch {\n return undefined\n }\n}\n\nexport function writeDevState(state: DevState): void {\n const dir = getDevDir()\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n writeFileSync(getDevStatePath(), JSON.stringify(state, undefined, 2), 'utf8')\n writeFileSync(getDevPidPath(), String(state.pid), 'utf8')\n}\n\nexport function clearDevState(): void {\n for (const filePath of [getDevStatePath(), getDevPidPath()]) {\n if (existsSync(filePath)) unlinkSync(filePath)\n }\n}\n\n/**\n * Returns true iff the pid is still a live process. `kill(pid, 0)` throws\n * ESRCH when the process doesn't exist and EPERM when it does but we can't\n * signal it — both answer the question we're asking.\n */\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0)\n return true\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n return code === 'EPERM'\n }\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","import { spawn } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { getDevLogPath } from './paths.ts'\n\nexport interface LogsDevServerOptions {\n follow?: boolean\n /** Number of tail lines to print when not following. */\n lines?: number\n}\n\n/**\n * Streams or dumps the dev server log file. Uses `tail -f` for the follow\n * case so the output stays bounded; for one-shot we read the file and print\n * the last `lines` lines ourselves (portable, no shell subprocess).\n */\nexport async function logsDevServer(options: LogsDevServerOptions = {}): Promise<void> {\n const logPath = getDevLogPath()\n if (!existsSync(logPath)) {\n console.log(chalk.yellow('no dev server log file yet'))\n return\n }\n\n if (options.follow) {\n const child = spawn('tail', ['-n', String(options.lines ?? 50), '-f', logPath], { stdio: 'inherit' })\n await new Promise<void>((resolve) => {\n child.on('exit', (code) => {\n process.exitCode = code ?? 0\n resolve()\n })\n })\n return\n }\n\n const lines = readFileSync(logPath, 'utf8').split('\\n')\n const tail = lines.slice(-(options.lines ?? 50))\n process.stdout.write(tail.join('\\n'))\n if (!tail.at(-1)?.endsWith('\\n')) process.stdout.write('\\n')\n}\n","import { existsSync, rmSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { downDevServer } from './downDevServer.ts'\nimport { getDevDir } from './paths.ts'\n\n/**\n * Stops the dev server and deletes all dev state. Useful after a crashed\n * server leaves stale sockets or a dirty log file.\n */\nexport async function resetDevServer(): Promise<void> {\n await downDevServer()\n const dir = getDevDir()\n if (!existsSync(dir)) {\n console.log(chalk.green('nothing to reset'))\n return\n }\n rmSync(dir, { recursive: true, force: true })\n console.log(chalk.green(`reset ${dir}`))\n}\n","import chalk from 'chalk'\n\nimport { getDevLogPath } from './paths.ts'\nimport { isProcessAlive, readDevState } from './state.ts'\n\nexport async function statusDevServer(): Promise<void> {\n const state = readDevState()\n if (!state) {\n console.log(chalk.yellow('dev server not running'))\n process.exitCode = 3\n return\n }\n\n const alive = isProcessAlive(state.pid)\n const healthy = alive ? await pingHealth(state.controlUrl) : false\n const uptime = formatUptime(state.startedAt)\n\n console.log(chalk.cyan('dev server status'))\n console.log(` ${chalk.gray('state:')} ${statusLabel(alive, healthy)}`)\n console.log(` ${chalk.gray('pid:')} ${state.pid}`)\n console.log(` ${chalk.gray('control:')} ${state.controlUrl}`)\n console.log(` ${chalk.gray('data:')} ${state.planeUrl}`)\n console.log(` ${chalk.gray('user:')} ${state.userId}`)\n console.log(` ${chalk.gray('started:')} ${state.startedAt}${uptime ? ` (${uptime})` : ''}`)\n console.log(` ${chalk.gray('log:')} ${getDevLogPath()}`)\n\n if (alive && !healthy) {\n process.exitCode = 2\n } else if (!alive) {\n process.exitCode = 3\n }\n}\n\nfunction statusLabel(alive: boolean, healthy: boolean): string {\n if (alive && healthy) return chalk.green('running + healthy')\n if (alive) return chalk.yellow('running but unresponsive')\n return chalk.red('stale state (process gone)')\n}\n\nasync function pingHealth(controlUrl: string): Promise<boolean> {\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 1000)\n const response = await fetch(`${controlUrl}/v1/health`, { signal: controller.signal })\n clearTimeout(timeout)\n return response.ok\n } catch {\n return false\n }\n}\n\nfunction formatUptime(startedAt: string): string {\n const started = new Date(startedAt).getTime()\n if (Number.isNaN(started)) return ''\n const seconds = Math.max(0, Math.floor((Date.now() - started) / 1000))\n if (seconds < 60) return `${seconds}s`\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ${seconds % 60}s`\n const hours = Math.floor(minutes / 60)\n return `${hours}h ${minutes % 60}m`\n}\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\nimport { randomBytes } from 'node:crypto'\nimport {\n existsSync, mkdirSync, openSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport { saveCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { getDevDir, getDevLogPath } from './paths.ts'\nimport { resolveServerBin } from './resolveServerBin.ts'\nimport {\n clearDevState, type DevState, isProcessAlive, readDevState, writeDevState,\n} from './state.ts'\nimport { waitForHealth } from './waitForHealth.ts'\n\nexport interface UpDevServerOptions {\n controlPort?: number\n planePort?: number\n /** Seconds to wait for the dev server to become healthy. Default 10. */\n timeoutSeconds?: number\n /** Override the bearer token. Default: random hex. */\n authToken?: string\n /** Override the HMAC signing secret. Default: random hex. */\n signingSecret?: string\n /** Override the user id the dev token resolves to. Default: 'dev-user'. */\n userId?: string\n /**\n * Persist the datalake + payload stores to `<ARIES_HOME>/dev/store/` so\n * state survives a `dev down` + `dev up` cycle. Default: false.\n */\n persist?: boolean\n /**\n * Enable the data-plane audit log. When true, every request is appended\n * to `<ARIES_HOME>/dev/audit.log` as JSONL.\n */\n audit?: boolean\n /**\n * Use a rotating directory writer instead of a single file. Files live at\n * `<ARIES_HOME>/dev/audit/audit-YYYY-MM-DD.log`.\n */\n auditRotate?: boolean\n /** Retention window in days when rotation is enabled. */\n auditKeepDays?: number\n}\n\nconst DEFAULT_CONTROL_PORT = 8787\nconst DEFAULT_PLANE_PORT = 8788\nconst DEFAULT_TIMEOUT_SECONDS = 10\n\ninterface ResolvedOptions {\n controlPort: number\n planePort: number\n controlUrl: string\n planeUrl: string\n userId: string\n authToken: string\n signingSecret: string\n timeoutMs: number\n persistDir?: string\n auditLogPath?: string\n auditDir?: string\n auditKeepDays?: number\n}\n\nfunction resolveOptions(options: UpDevServerOptions): ResolvedOptions {\n const controlPort = options.controlPort ?? DEFAULT_CONTROL_PORT\n const planePort = options.planePort ?? DEFAULT_PLANE_PORT\n const rotate = options.auditRotate === true\n return {\n controlPort,\n planePort,\n controlUrl: `http://127.0.0.1:${controlPort}`,\n planeUrl: `http://127.0.0.1:${planePort}`,\n userId: options.userId ?? 'dev-user',\n authToken: options.authToken ?? randomBytes(16).toString('hex'),\n signingSecret: options.signingSecret ?? randomBytes(32).toString('hex'),\n timeoutMs: (options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS) * 1000,\n persistDir: options.persist ? path.join(getDevDir(), 'store') : undefined,\n auditLogPath: options.audit && !rotate ? path.join(getDevDir(), 'audit.log') : undefined,\n auditDir: options.audit && rotate ? path.join(getDevDir(), 'audit') : undefined,\n auditKeepDays: rotate ? options.auditKeepDays : undefined,\n }\n}\n\nfunction spawnDaemon(binPath: string, resolved: ResolvedOptions): ChildProcess {\n const devDir = getDevDir()\n if (!existsSync(devDir)) mkdirSync(devDir, { recursive: true })\n const logFd = openSync(getDevLogPath(), 'a')\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n CONTROL_PORT: String(resolved.controlPort),\n PLANE_PORT: String(resolved.planePort),\n HOST: '127.0.0.1',\n DATALAKE_CONTROL_TOKENS: `${resolved.authToken}=${resolved.userId}`,\n TOKEN_SIGNING_SECRET: resolved.signingSecret,\n DATALAKE_ORIGIN_URL: resolved.planeUrl,\n LOG_LEVEL: process.env.LOG_LEVEL ?? 'info',\n }\n if (resolved.persistDir) env.DATALAKE_PERSIST_DIR = resolved.persistDir\n if (resolved.auditLogPath) env.DATALAKE_AUDIT_LOG = resolved.auditLogPath\n if (resolved.auditDir) env.DATALAKE_AUDIT_DIR = resolved.auditDir\n if (resolved.auditKeepDays !== undefined) env.DATALAKE_AUDIT_MAX_AGE_DAYS = String(resolved.auditKeepDays)\n\n const child = spawn(process.execPath, [binPath], {\n detached: true,\n stdio: ['ignore', logFd, logFd],\n env,\n })\n child.unref()\n return child\n}\n\nfunction describeAudit(resolved: ResolvedOptions): string {\n if (resolved.auditDir) {\n return `rotating ${resolved.auditDir}${resolved.auditKeepDays ? ` (keep ${resolved.auditKeepDays}d)` : ''}`\n }\n return resolved.auditLogPath ?? 'disabled'\n}\n\nfunction printReadyBanner(state: DevState, resolved: ResolvedOptions): void {\n console.log(chalk.green('dev server ready'))\n console.log(` ${chalk.gray('control:')} ${state.controlUrl}`)\n console.log(` ${chalk.gray('data:')} ${state.planeUrl}`)\n console.log(` ${chalk.gray('user:')} ${state.userId}`)\n console.log(` ${chalk.gray('log:')} ${getDevLogPath()}`)\n console.log(` ${chalk.gray('store:')} ${resolved.persistDir ? `persisted (${resolved.persistDir})` : 'in-memory'}`)\n console.log(` ${chalk.gray('audit:')} ${describeAudit(resolved)}`)\n console.log(chalk.gray('\\nCLI is configured — try `aries datalake list`'))\n}\n\nexport async function upDevServer(options: UpDevServerOptions = {}): Promise<DevState> {\n const existing = readDevState()\n if (existing && isProcessAlive(existing.pid)) {\n console.log(chalk.yellow(`dev server already running (pid ${existing.pid}) at ${existing.controlUrl}`))\n return existing\n }\n if (existing) clearDevState()\n\n const resolved = resolveOptions(options)\n const child = spawnDaemon(resolveServerBin(), resolved)\n if (!child.pid) throw new Error('Failed to spawn dev server process')\n\n console.log(chalk.gray(`starting dev server (pid ${child.pid})...`))\n const healthy = await waitForHealth(resolved.controlUrl, resolved.timeoutMs)\n if (!healthy) {\n try {\n process.kill(child.pid, 'SIGTERM')\n } catch {\n // best effort\n }\n throw new Error(\n `Dev server did not become healthy within ${resolved.timeoutMs / 1000}s. `\n + `Check logs at ${getDevLogPath()}`,\n )\n }\n\n const state: DevState = {\n pid: child.pid,\n controlUrl: resolved.controlUrl,\n planeUrl: resolved.planeUrl,\n controlPort: resolved.controlPort,\n planePort: resolved.planePort,\n userId: resolved.userId,\n authToken: resolved.authToken,\n signingSecret: resolved.signingSecret,\n startedAt: new Date().toISOString(),\n }\n writeDevState(state)\n saveCredentials({\n baseUrl: resolved.controlUrl, authToken: resolved.authToken, userId: resolved.userId,\n })\n printReadyBanner(state, resolved)\n return state\n}\n","import { existsSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport path from 'node:path'\n\n// Static type-only import so `deplint` recognizes the package as a declared\n// dependency. The bin path itself is resolved at runtime via `require.resolve`.\nimport type { BuildPlaneOptions as _KeepAsDep } from '@xylabs/aries-datalake-plane'\n\nconst require = createRequire(import.meta.url)\n\n/**\n * Resolves the absolute path to `aries-datalake-dev` (the plane/control dev\n * server binary) from the installed `@xylabs/aries-datalake-plane` package.\n * Throws with an actionable message if the package isn't available — e.g.\n * when someone installs `@xylabs/aries` standalone without the dev server.\n */\nexport function resolveServerBin(): string {\n let packageJsonPath: string\n try {\n packageJsonPath = require.resolve('@xylabs/aries-datalake-plane/package.json')\n } catch {\n throw new Error(\n '@xylabs/aries-datalake-plane is not installed. '\n + 'Install it as a dev dependency to use `aries datalake dev` locally.',\n )\n }\n const binPath = path.join(path.dirname(packageJsonPath), 'dist', 'bin', 'devServer.mjs')\n if (!existsSync(binPath)) {\n throw new Error(\n `Dev server binary not found at ${binPath}. `\n + 'Run `pnpm xy compile` to build it.',\n )\n }\n return binPath\n}\n","const POLL_INTERVAL_MS = 100\n\n/**\n * Polls `GET <baseUrl>/v1/health` until it returns 200 or the timeout\n * expires. Returns `true` on success, `false` on timeout. Callers should\n * kill the daemon on failure; it never came up.\n */\nexport async function waitForHealth(baseUrl: string, timeoutMs: number): Promise<boolean> {\n const deadline = Date.now() + timeoutMs\n const url = `${baseUrl.replace(/\\/$/, '')}/v1/health`\n while (Date.now() < deadline) {\n try {\n const response = await fetch(url)\n if (response.ok) return true\n } catch {\n // ECONNREFUSED while the listener is still starting — keep polling.\n }\n await delay(POLL_INTERVAL_MS)\n }\n return false\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import type { CommandModule } from 'yargs'\n\nimport { downDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevDownCommand: CommandModule = {\n command: 'down',\n describe: 'Stop the local dev server (if running) and clear its credentials',\n handler: async () => {\n await downDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { logsDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevLogsCommand: CommandModule = {\n command: 'logs',\n describe: 'Print recent dev server log output',\n builder: yargs =>\n yargs\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n describe: 'Stream new lines as they arrive',\n })\n .option('lines', {\n alias: 'n',\n type: 'number',\n default: 50,\n describe: 'Number of tail lines to show',\n }),\n handler: async (argv) => {\n await logsDevServer({\n follow: argv.follow as boolean,\n lines: argv.lines as number,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { resetDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevResetCommand: CommandModule = {\n command: 'reset',\n describe: 'Stop the dev server and wipe all its local state',\n handler: async () => {\n await resetDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { statusDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevStatusCommand: CommandModule = {\n command: 'status',\n describe: 'Report whether the local dev server is running and healthy',\n handler: async () => {\n await statusDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { upDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevUpCommand: CommandModule = {\n command: 'up',\n describe: 'Start the local control + data plane dev server and wire the CLI to it',\n builder: yargs =>\n yargs\n .option('control-port', {\n type: 'number',\n default: 8787,\n describe: 'Control-plane port',\n })\n .option('plane-port', {\n type: 'number',\n default: 8788,\n describe: 'Data-plane port',\n })\n .option('timeout', {\n type: 'number',\n default: 10,\n describe: 'Seconds to wait for health',\n })\n .option('persist', {\n type: 'boolean',\n default: false,\n describe: 'Persist store state to disk so it survives restarts',\n })\n .option('audit', {\n type: 'boolean',\n default: false,\n describe: 'Write a JSONL audit log of every data-plane request',\n })\n .option('audit-rotate', {\n type: 'boolean',\n default: false,\n describe: 'Rotate the audit log daily (writes to <home>/dev/audit/)',\n })\n .option('audit-keep-days', {\n type: 'number',\n describe: 'Prune rotated audit files older than this many days',\n }),\n handler: async (argv) => {\n await upDevServer({\n controlPort: argv['control-port'] as number,\n planePort: argv['plane-port'] as number,\n timeoutSeconds: argv.timeout as number,\n persist: argv.persist as boolean,\n audit: argv.audit as boolean,\n auditRotate: argv['audit-rotate'] as boolean,\n auditKeepDays: argv['audit-keep-days'] as number | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { datalakeDevDownCommand } from './datalakeDevDownCommand.ts'\nimport { datalakeDevLogsCommand } from './datalakeDevLogsCommand.ts'\nimport { datalakeDevResetCommand } from './datalakeDevResetCommand.ts'\nimport { datalakeDevStatusCommand } from './datalakeDevStatusCommand.ts'\nimport { datalakeDevUpCommand } from './datalakeDevUpCommand.ts'\n\nexport const datalakeDevCommand: CommandModule = {\n command: 'dev',\n describe: 'Run a local datalake control + data plane for development & testing',\n builder: yargs =>\n yargs\n .command(datalakeDevUpCommand)\n .command(datalakeDevDownCommand)\n .command(datalakeDevStatusCommand)\n .command(datalakeDevLogsCommand)\n .command(datalakeDevResetCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n"],"mappings":"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","names":["existsSync","readFileSync","chalk","existsSync","chalk","readFileSync","existsSync","chalk","existsSync","chalk","chalk","chalk","spawn","existsSync","mkdirSync","path","chalk","existsSync","path","require","delay","path","existsSync","mkdirSync","spawn","chalk"]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// src/actions/datalake/dev/downDevServer.ts
|
|
2
|
+
import { clearCredentials, loadCredentials } from "@xylabs/aries-datalake-client";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/actions/datalake/dev/state.ts
|
|
6
|
+
import {
|
|
7
|
+
existsSync,
|
|
8
|
+
mkdirSync,
|
|
9
|
+
readFileSync,
|
|
10
|
+
unlinkSync,
|
|
11
|
+
writeFileSync
|
|
12
|
+
} from "fs";
|
|
13
|
+
|
|
14
|
+
// src/actions/datalake/dev/paths.ts
|
|
15
|
+
import { homedir } from "os";
|
|
16
|
+
import path from "path";
|
|
17
|
+
function getAriesHome() {
|
|
18
|
+
return process.env.ARIES_HOME ?? path.join(homedir(), ".aries");
|
|
19
|
+
}
|
|
20
|
+
function getDevDir() {
|
|
21
|
+
return path.join(getAriesHome(), "dev");
|
|
22
|
+
}
|
|
23
|
+
function getDevStatePath() {
|
|
24
|
+
return path.join(getDevDir(), "state.json");
|
|
25
|
+
}
|
|
26
|
+
function getDevPidPath() {
|
|
27
|
+
return path.join(getDevDir(), "pid");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/actions/datalake/dev/state.ts
|
|
31
|
+
function readDevState() {
|
|
32
|
+
const filePath = getDevStatePath();
|
|
33
|
+
if (!existsSync(filePath)) return void 0;
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
36
|
+
} catch {
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function clearDevState() {
|
|
41
|
+
for (const filePath of [getDevStatePath(), getDevPidPath()]) {
|
|
42
|
+
if (existsSync(filePath)) unlinkSync(filePath);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function isProcessAlive(pid) {
|
|
46
|
+
try {
|
|
47
|
+
process.kill(pid, 0);
|
|
48
|
+
return true;
|
|
49
|
+
} catch (error) {
|
|
50
|
+
const code = error.code;
|
|
51
|
+
return code === "EPERM";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/actions/datalake/dev/downDevServer.ts
|
|
56
|
+
var DEFAULT_GRACE_MS = 2e3;
|
|
57
|
+
var POLL_MS = 50;
|
|
58
|
+
async function downDevServer(options = {}) {
|
|
59
|
+
const state = readDevState();
|
|
60
|
+
if (!state) {
|
|
61
|
+
console.log(chalk.yellow("dev server is not running"));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const graceMs = options.gracePeriodMs ?? DEFAULT_GRACE_MS;
|
|
65
|
+
if (!isProcessAlive(state.pid)) {
|
|
66
|
+
cleanup(state.controlUrl);
|
|
67
|
+
console.log(chalk.green(`dev server pid ${state.pid} was already stopped \u2014 cleaned up state`));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
process.kill(state.pid, "SIGTERM");
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const code = error.code;
|
|
74
|
+
if (code !== "ESRCH") throw error;
|
|
75
|
+
}
|
|
76
|
+
const deadline = Date.now() + graceMs;
|
|
77
|
+
while (Date.now() < deadline && isProcessAlive(state.pid)) {
|
|
78
|
+
await delay(POLL_MS);
|
|
79
|
+
}
|
|
80
|
+
if (isProcessAlive(state.pid)) {
|
|
81
|
+
try {
|
|
82
|
+
process.kill(state.pid, "SIGKILL");
|
|
83
|
+
} catch {
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
cleanup(state.controlUrl);
|
|
87
|
+
console.log(chalk.green(`dev server pid ${state.pid} stopped`));
|
|
88
|
+
}
|
|
89
|
+
function cleanup(controlUrl) {
|
|
90
|
+
const credentials = loadCredentials();
|
|
91
|
+
if (credentials?.baseUrl === controlUrl) {
|
|
92
|
+
clearCredentials();
|
|
93
|
+
}
|
|
94
|
+
clearDevState();
|
|
95
|
+
}
|
|
96
|
+
function delay(ms) {
|
|
97
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// src/commands/datalakeDevDownCommand.ts
|
|
101
|
+
var datalakeDevDownCommand = {
|
|
102
|
+
command: "down",
|
|
103
|
+
describe: "Stop the local dev server (if running) and clear its credentials",
|
|
104
|
+
handler: async () => {
|
|
105
|
+
await downDevServer();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
export {
|
|
109
|
+
datalakeDevDownCommand
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=datalakeDevDownCommand.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/datalake/dev/downDevServer.ts","../../src/actions/datalake/dev/state.ts","../../src/actions/datalake/dev/paths.ts","../../src/commands/datalakeDevDownCommand.ts"],"sourcesContent":["import { clearCredentials, loadCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport {\n clearDevState, isProcessAlive, readDevState,\n} from './state.ts'\n\n/**\n * Stops the dev server spawned by `upDevServer`. Sends SIGTERM, waits up to\n * `gracePeriodMs` for a clean exit, then SIGKILLs if the process is still\n * around. Clears credentials only when they still point at the dev server —\n * we never want to stomp a user's real sign-in.\n */\nexport interface DownDevServerOptions {\n gracePeriodMs?: number\n}\n\nconst DEFAULT_GRACE_MS = 2000\nconst POLL_MS = 50\n\nexport async function downDevServer(options: DownDevServerOptions = {}): Promise<void> {\n const state = readDevState()\n if (!state) {\n console.log(chalk.yellow('dev server is not running'))\n return\n }\n const graceMs = options.gracePeriodMs ?? DEFAULT_GRACE_MS\n\n if (!isProcessAlive(state.pid)) {\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} was already stopped — cleaned up state`))\n return\n }\n\n try {\n process.kill(state.pid, 'SIGTERM')\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n if (code !== 'ESRCH') throw error\n }\n\n const deadline = Date.now() + graceMs\n while (Date.now() < deadline && isProcessAlive(state.pid)) {\n await delay(POLL_MS)\n }\n if (isProcessAlive(state.pid)) {\n try {\n process.kill(state.pid, 'SIGKILL')\n } catch {\n // best effort\n }\n }\n\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} stopped`))\n}\n\nfunction cleanup(controlUrl: string): void {\n const credentials = loadCredentials()\n if (credentials?.baseUrl === controlUrl) {\n clearCredentials()\n }\n clearDevState()\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import {\n existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\n\nimport {\n getDevDir, getDevPidPath, getDevStatePath,\n} from './paths.ts'\n\n/**\n * On-disk bookkeeping for a running dev server. Lives in `~/.aries/dev/` so\n * it survives across CLI invocations and can be queried by `dev status` /\n * `dev logs` / `dev down`.\n */\nexport interface DevState {\n pid: number\n controlUrl: string\n planeUrl: string\n controlPort: number\n planePort: number\n /** User id the dev auth token resolves to on the control plane. */\n userId: string\n /** Bearer token accepted by the dev control plane (written to credentials). */\n authToken: string\n /** Secret the dev control plane HMAC-signs data-plane JWTs with. */\n signingSecret: string\n /** ISO-8601 startup time. */\n startedAt: string\n}\n\nexport function readDevState(): DevState | undefined {\n const filePath = getDevStatePath()\n if (!existsSync(filePath)) return undefined\n try {\n return JSON.parse(readFileSync(filePath, 'utf8')) as DevState\n } catch {\n return undefined\n }\n}\n\nexport function writeDevState(state: DevState): void {\n const dir = getDevDir()\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n writeFileSync(getDevStatePath(), JSON.stringify(state, undefined, 2), 'utf8')\n writeFileSync(getDevPidPath(), String(state.pid), 'utf8')\n}\n\nexport function clearDevState(): void {\n for (const filePath of [getDevStatePath(), getDevPidPath()]) {\n if (existsSync(filePath)) unlinkSync(filePath)\n }\n}\n\n/**\n * Returns true iff the pid is still a live process. `kill(pid, 0)` throws\n * ESRCH when the process doesn't exist and EPERM when it does but we can't\n * signal it — both answer the question we're asking.\n */\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0)\n return true\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n return code === 'EPERM'\n }\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","import type { CommandModule } from 'yargs'\n\nimport { downDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevDownCommand: CommandModule = {\n command: 'down',\n describe: 'Stop the local dev server (if running) and clear its credentials',\n handler: async () => {\n await downDevServer()\n },\n}\n"],"mappings":";AAAA,SAAS,kBAAkB,uBAAuB;AAClD,OAAO,WAAW;;;ACDlB;AAAA,EACE;AAAA,EAAY;AAAA,EAAW;AAAA,EAAc;AAAA,EAAY;AAAA,OAC5C;;;ACFP,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;AAEO,SAAS,kBAA0B;AACxC,SAAO,KAAK,KAAK,UAAU,GAAG,YAAY;AAC5C;AAEO,SAAS,gBAAwB;AACtC,SAAO,KAAK,KAAK,UAAU,GAAG,KAAK;AACrC;;;ADYO,SAAS,eAAqC;AACnD,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,WAAW,QAAQ,EAAG,QAAO;AAClC,MAAI;AACF,WAAO,KAAK,MAAM,aAAa,UAAU,MAAM,CAAC;AAAA,EAClD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AASO,SAAS,gBAAsB;AACpC,aAAW,YAAY,CAAC,gBAAgB,GAAG,cAAc,CAAC,GAAG;AAC3D,QAAI,WAAW,QAAQ,EAAG,YAAW,QAAQ;AAAA,EAC/C;AACF;AAOO,SAAS,eAAe,KAAsB;AACnD,MAAI;AACF,YAAQ,KAAK,KAAK,CAAC;AACnB,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,OAAQ,MAAgC;AAC9C,WAAO,SAAS;AAAA,EAClB;AACF;;;ADhDA,IAAM,mBAAmB;AACzB,IAAM,UAAU;AAEhB,eAAsB,cAAc,UAAgC,CAAC,GAAkB;AACrF,QAAM,QAAQ,aAAa;AAC3B,MAAI,CAAC,OAAO;AACV,YAAQ,IAAI,MAAM,OAAO,2BAA2B,CAAC;AACrD;AAAA,EACF;AACA,QAAM,UAAU,QAAQ,iBAAiB;AAEzC,MAAI,CAAC,eAAe,MAAM,GAAG,GAAG;AAC9B,YAAQ,MAAM,UAAU;AACxB,YAAQ,IAAI,MAAM,MAAM,kBAAkB,MAAM,GAAG,8CAAyC,CAAC;AAC7F;AAAA,EACF;AAEA,MAAI;AACF,YAAQ,KAAK,MAAM,KAAK,SAAS;AAAA,EACnC,SAAS,OAAO;AACd,UAAM,OAAQ,MAAgC;AAC9C,QAAI,SAAS,QAAS,OAAM;AAAA,EAC9B;AAEA,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,SAAO,KAAK,IAAI,IAAI,YAAY,eAAe,MAAM,GAAG,GAAG;AACzD,UAAM,MAAM,OAAO;AAAA,EACrB;AACA,MAAI,eAAe,MAAM,GAAG,GAAG;AAC7B,QAAI;AACF,cAAQ,KAAK,MAAM,KAAK,SAAS;AAAA,IACnC,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,UAAQ,MAAM,UAAU;AACxB,UAAQ,IAAI,MAAM,MAAM,kBAAkB,MAAM,GAAG,UAAU,CAAC;AAChE;AAEA,SAAS,QAAQ,YAA0B;AACzC,QAAM,cAAc,gBAAgB;AACpC,MAAI,aAAa,YAAY,YAAY;AACvC,qBAAiB;AAAA,EACnB;AACA,gBAAc;AAChB;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACvD;;;AG/DO,IAAM,yBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,YAAY;AACnB,UAAM,cAAc;AAAA,EACtB;AACF;","names":[]}
|