def main() -> None:
exit_if_version_requested(sys.argv[1:])
from jmcore.process_hardening import harden_current_process
# Disable core dumps and ptrace before loading directory-node keys.
harden_current_process()
# Load settings to get defaults from config
settings = get_settings()
parser = argparse.ArgumentParser(
description="JoinMarket Directory Server CLI",
formatter_class=SortedHelpFormatter,
)
parser.add_argument(
"--version",
action="version",
version=f"JoinMarket NG {get_version()}",
help="Show the installed JoinMarket NG version and exit.",
)
parser.add_argument(
"--host",
default=settings.directory_server.health_check_host,
help=f"Health check server host (default: {settings.directory_server.health_check_host})",
)
parser.add_argument(
"--port",
type=int,
default=settings.directory_server.health_check_port,
help=f"Health check server port (default: {settings.directory_server.health_check_port})",
)
parser.add_argument(
"--log-level",
"-l",
default=settings.logging.level,
help=f"Log level (default: {settings.logging.level})",
)
subparsers = parser.add_subparsers(dest="command", help="Available commands")
# Register subcommands alphabetically so the usage metavar is sorted too.
health_parser = subparsers.add_parser(
"health", help="Check server health", formatter_class=SortedHelpFormatter
)
health_parser.add_argument("--json", action="store_true", help="Output as JSON")
health_parser.set_defaults(func=health_command)
status_parser = subparsers.add_parser(
"status", help="Get server status", formatter_class=SortedHelpFormatter
)
status_parser.add_argument("--json", action="store_true", help="Output as JSON")
status_parser.set_defaults(func=status_command)
args = parser.parse_args()
# Configure logging
setup_logging(args.log_level)
if not args.command:
parser.print_help()
sys.exit(1)
sys.exit(args.func(args))