jupyter-deploy-client-proxy
A local client that routes an app from your http://localhost to a
jupyter-deploy-managed remote host. It runs a configured token command
(the exec-credential contract, à la kubectl ExecCredential / aws eks get-token),
receives a JSON connection bundle on stdout, and proxies plain http://localhost
to the remote host over pinned self-signed TLS — injecting the bundle's rotating
headers on every request and the WebSocket upgrade.
It stays cloud-agnostic — it imports nothing cloud-specific and works against any self-signed-TLS + bearer endpoint:
jupyter-deploy-client-proxy --token-command "jd proxy connect-info" --listen-port 8080
Connection bundle
The token command emits, on stdout:
{
"host": "203.0.113.7", "port": 443,
"ca_cert": "-----BEGIN CERTIFICATE-----\n...",
"headers": { "Authorization": "Bearer ...", "x-k8s-aws-id": "..." },
"expires_at": "2026-06-10T18:01:00Z"
}
The proxy re-execs the command on a margin before expires_at, reconnecting with
the fresh endpoint/pin/credential and keeping localhost:PORT stable.
A token command signals a transient failure (network blip, throttling) by exiting
75 (EX_TEMPFAIL): the proxy keeps serving on its last-good credential and retries.
Any other non-zero exit is permanent — the proxy can no longer serve anything, so it
stops itself and exits 78.
Auto-shutdown
The proxy ends its own process in two cases, so a background one cannot outlive its session:
- the credential can no longer be refreshed (the token command failed permanently)
— exits
78, leavingstatus.jsonbehind as the record that it failed rather than stopped; the reason is in theNNNN.logfiles beside it; - no client activity for
--idle-timeout-seconds(default 7200, two hours) — exits0and removesstatus.json, like any clean stop. Pass0to disable, which is whatjd opendoes when it runs the proxy in the foreground: there the terminal governs the lifetime.
Activity means traffic from a client. An open WebSocket counts even while no frames flow, so a kernel computing silently for hours keeps its tunnel, and a response still streaming counts on every chunk, so a long transfer is never cut off mid-flight. Credential refreshes do not count — they are the proxy's own traffic.
Part of the jupyter-deploy project.
License
The jupyter-deploy-client-proxy package is licensed under the MIT License.
Metadata
Release files for jupyter-deploy-client-proxy 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jupyter_deploy_client_proxy-0.1.1.tar.gz | 51.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyter_deploy_client_proxy-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 85.5 kB
Release files / jupyter_deploy_client_proxy-0.1.1.tar.gz
| Download URL | jupyter_deploy_client_proxy-0.1.1.tar.gz |
|---|---|
| Size | 51.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ff29a29654b612cfc7589d435282242ecebcca5a1ba8613b6709ad00b8abba3
|
|
BLAKE2b-256 checksum How to use checksums |
a14648fb1b43c81910fbd701bf23f58817926252d7f43071b52effa07bb1c6e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / jupyter_deploy_client_proxy-0.1.1-py3-none-any.whl
| Download URL | jupyter_deploy_client_proxy-0.1.1-py3-none-any.whl |
|---|---|
| Size | 34.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f6886eb0f075c00948e9f4d6a12ae8c9b507f1d3904d4c3958ba3b984f78ccc5
|
|
BLAKE2b-256 checksum How to use checksums |
f5f061cf6e0e05b3c4fb4723c16af2952066b2f74be163c034b757bcb8c84c9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for jupyter-deploy-client-proxy 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.