This repo is an automation utility for VMess preferred-domain rotation: fetch API candidates, pick one domain, write runtime artifacts, then let Sub-Store/V2Ray consume them.
Main entrypoint is scripts/domain_updater.py; optional post-processor for VMess links is scripts/update_vmess_links.py.
Scheduled runtime entrypoint is scripts/run_update_and_commit.sh (runs updater, then commits only when domain changed).
High-value Files
config.json: active runtime config (single source for runtime settings).
runtime/current_domain.json and runtime/current_domain.txt: outputs consumed by Sub-Store/operator scripts.
substore/operator_template.js: Sub-Store script-operation template using $substore.http.get and scriptResourceCache.
systemd/vmess-domain-rotator.service and systemd/vmess-domain-rotator.timer: deployment templates (must customize user/path).
For vps789 Top20, keep API ranking order (scoring.use_api_order=true) and keep only domains (filter IPv4 via domain_filter.exclude_regex).
healthcheck.enabled may be intentionally false in vps789 mode; do not re-enable unless you want local TLS checks to override API ranking behavior.
domain_updater.py fallback behavior depends on persisted runtime/state.json (last_good_domain). Do not delete this file in normal operation.
run_update_and_commit.sh commits only when runtime/current_domain.txt changed before/after update.
Sub-Store script preview may show no change if NODE_NAME_REGEX in substore/operator_template.js does not match node names, or if cached output is reused.
In Sub-Store operators here, use $substore.http.get(...) (not plain fetch) for compatibility.
Deployment Notes (systemd templates)
Template service assumes:
Working dir: /opt/vmess-domain-rotator
User: vmessrotator
Template timer interval is 12h by default.
Before enabling timer, adjust User, WorkingDirectory, and ExecStart in systemd/vmess-domain-rotator.service to match the real host.
Enable flow: copy unit files to /etc/systemd/system/ -> systemctl daemon-reload -> systemctl enable --now vmess-domain-rotator.timer.
Editing Constraints For This Repo
Keep secrets out of source snapshots/backups: avoid placing tokens in tracked/shared files.
runtime/ is operational output; avoid treating it as source-of-truth code.