All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Re-derive and verify each SSH host key's SHA256 fingerprint, and reject
whitespace/control chars in the key fields, before writing
known_hosts— fail-closed against a tampered/buggy well-known response (matches the Go SDK).
- Stop the post-connect output buffer growing without bound — output is still
forwarded to
on_output, but the parse buffer no longer accumulates for the tunnel's lifetime. - Capture a tunnel's
Expires:line even when it lands in a later read chunk than the URL, via a short bounded pre-resolve window (paid/no-expiry tiers still resolve on the small cap). - Detect an
Error:line split across a read-chunk boundary (was previously missed → generic "connection timed out" instead of the real message). - Treat a corrupt host-key cache as missing so the underlying fetch failure
surfaces instead of a cryptic
JSONDecodeError. format_expirynow normalizes the timestamp to UTC before printing, so the shownHH:MMmatches theUTClabel even for a non-Zserver offset.- Align the
--versionsource-run fallback with the real package version.
- README Security section rewritten to match the shipped design (the token is
written to a
0600ssh_configUserdirective, not placed on thesshargv).
- Expose
__version__at package root so callers can introspect the installed SDK version.
- SSH host-key pinning from the
xpos.dev.well-known/ssh-host-keysendpoint. ssh_portoption for custom SSH ports.
- Keep auth token out of the SSH argv (write to a temporary
ssh_configinstead). - Reject control characters and whitespace in
ssh_configvalues. - Validate subdomain/domain as DNS labels client-side.
- Warn when host-key pinning is disabled for a custom server.
- Default
hostto127.0.0.1to avoid IPv6 issues on Windows.
- Double-fire of the
on_closecallback via a_closedevent guard. - Validate
portis in the 1–65535 range in the tunnel constructor. - Require token for TCP mode.
- Validation parity with the Node SDK.
- Reset state on restart.
- TCP output filter improvements.
- Ctrl+C not working on Windows.
- Stream read blocking on Windows by using
read1.
serverdefaulting toNonewhen not passed from CLI.