bug(sdk/ts): forward().close() never revokes SSH session tokens of open connections
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 62/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- api
調査の方向性
sdk/typescript/src/client.ts の forward、teardown、forwardConnection から始め、接続ごとの AbortController シグナルが revokeSshSession を呼び出す finally ブロックにどう届くかを追ってください。Go のファイルクライアントにある revoke 呼び出しを確認し、意図されている独立したコンテキストを確認してください。再現するには、接続を開き、ハンドルを閉じて、RevokeSshSession リクエストが送信されないことを確認します。発行されたすべてのトークンが、接続のシグナルが中断された後でも、それぞれ独自のタイムアウトを持つ revoke リクエストを受け取れば完了です。
索引モデルが issue の本文から書いたものです。
説明
User Story
I use OpenShell and build automation against its SDKs. I found this while reviewing sdk/ on main; it is identified from the code paths cited below and has not yet been reproduced against a live gateway.
Problem Statement
On close() (or caller abort), teardown aborts each connection's AbortController. forwardConnection's finally then calls revokeSshSession({ token, allowMissing: true }, { signal }) with that same, already-aborted signal, so the revoke RPC is never sent. The Go file client revokes with a fresh background context.
Impact / Why This Matters
Every SSH session token minted for connections still open at close() stays valid until it expires instead of being revoked, contrary to the method's documented revoke-on-close behavior.
Acceptance Criteria
- Closing a forward handle with open connections issues
RevokeSshSessionfor each minted token (bounded by its own timeout, independent of the aborted connection signal).
Reproduction Steps
const h = await client.sandbox.forward(name, { targetPort }).- Open a local connection so a session token is minted.
await h.close().- Observe no
RevokeSshSessionRPC reaches the gateway for that token (the call rejects immediately on the aborted signal).
Suggested UX (if applicable)
No response
Environment
- OpenShell:
main@ 82977e2 (2026-10-13) - SDK: TypeScript (
sdk/typescript/src/client.ts,forward/forwardConnection) - Toolchain: Go 1.25.4 linux/amd64, Node 22
Logs
- 主要言語
- Rust
- スター
- 15.4k
- フォーク
- 1.7k
- 平均マージ
- 2日 3時間
- マージ済み PR(30日)
- 374
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NVIDIA/OpenShell のほかの issue
-
state:triage-needed
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
bug(sdk/go): edge (Cloudflare Access) token is cached for the client lifetime and never reloadedオープンstate:triage-needed
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
state:triage-needed
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
state:triage-needed
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
docs(upgrade): no migration notes for 0.1.1, 0.1.2, or 0.1.3 (only the 0.1.0 page exists)対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンstate:triage-needed
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
NVIDIA/OpenShell の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
bytecodealliance/rustix#1703 ·
メンテナーはふだん 3 日以内に返信
-
bug discussion
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
medialab/xan#1201 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
farion1231/cc-switch#8298 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
ajeetdsouza/zoxide#1323 ·
メンテナーはふだん 1 日以内に返信