ttyd-mux 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +114 -64
  2. package/dist/caddy/client.d.ts +3 -78
  3. package/dist/caddy/client.d.ts.map +1 -1
  4. package/dist/caddy/client.js +0 -170
  5. package/dist/caddy/client.js.map +1 -1
  6. package/dist/caddy/route-builder.d.ts +49 -0
  7. package/dist/caddy/route-builder.d.ts.map +1 -0
  8. package/dist/caddy/route-builder.js +175 -0
  9. package/dist/caddy/route-builder.js.map +1 -0
  10. package/dist/caddy/types.d.ts +27 -0
  11. package/dist/caddy/types.d.ts.map +1 -0
  12. package/dist/caddy/types.js +3 -0
  13. package/dist/caddy/types.js.map +1 -0
  14. package/dist/client/api-client.d.ts +33 -0
  15. package/dist/client/api-client.d.ts.map +1 -0
  16. package/dist/client/api-client.js +63 -0
  17. package/dist/client/api-client.js.map +1 -0
  18. package/dist/client/daemon-client.d.ts +58 -0
  19. package/dist/client/daemon-client.d.ts.map +1 -0
  20. package/dist/client/daemon-client.js +241 -0
  21. package/dist/client/daemon-client.js.map +1 -0
  22. package/dist/client/index.d.ts +2 -10
  23. package/dist/client/index.d.ts.map +1 -1
  24. package/dist/client/index.js +4 -149
  25. package/dist/client/index.js.map +1 -1
  26. package/dist/commands/attach.js +3 -4
  27. package/dist/commands/attach.js.map +1 -1
  28. package/dist/commands/caddy.d.ts.map +1 -1
  29. package/dist/commands/caddy.js +74 -109
  30. package/dist/commands/caddy.js.map +1 -1
  31. package/dist/commands/daemon.d.ts +2 -0
  32. package/dist/commands/daemon.d.ts.map +1 -1
  33. package/dist/commands/daemon.js +72 -3
  34. package/dist/commands/daemon.js.map +1 -1
  35. package/dist/commands/deploy.d.ts.map +1 -1
  36. package/dist/commands/deploy.js +3 -8
  37. package/dist/commands/deploy.js.map +1 -1
  38. package/dist/commands/doctor.d.ts +8 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +180 -0
  41. package/dist/commands/doctor.js.map +1 -0
  42. package/dist/commands/down.d.ts +1 -0
  43. package/dist/commands/down.d.ts.map +1 -1
  44. package/dist/commands/down.js +24 -3
  45. package/dist/commands/down.js.map +1 -1
  46. package/dist/commands/list.d.ts +7 -0
  47. package/dist/commands/list.d.ts.map +1 -0
  48. package/dist/commands/list.js +31 -0
  49. package/dist/commands/list.js.map +1 -0
  50. package/dist/commands/reload.d.ts +14 -0
  51. package/dist/commands/reload.d.ts.map +1 -0
  52. package/dist/commands/reload.js +50 -0
  53. package/dist/commands/reload.js.map +1 -0
  54. package/dist/commands/restart.d.ts +5 -0
  55. package/dist/commands/restart.d.ts.map +1 -0
  56. package/dist/commands/restart.js +19 -0
  57. package/dist/commands/restart.js.map +1 -0
  58. package/dist/commands/shutdown.d.ts +3 -1
  59. package/dist/commands/shutdown.d.ts.map +1 -1
  60. package/dist/commands/shutdown.js +14 -2
  61. package/dist/commands/shutdown.js.map +1 -1
  62. package/dist/commands/start.d.ts.map +1 -1
  63. package/dist/commands/start.js +16 -3
  64. package/dist/commands/start.js.map +1 -1
  65. package/dist/commands/status.js +1 -1
  66. package/dist/commands/status.js.map +1 -1
  67. package/dist/commands/stop.js.map +1 -1
  68. package/dist/commands/up.d.ts.map +1 -1
  69. package/dist/commands/up.js +0 -4
  70. package/dist/commands/up.js.map +1 -1
  71. package/dist/config/config.d.ts.map +1 -1
  72. package/dist/config/config.js +9 -2
  73. package/dist/config/config.js.map +1 -1
  74. package/dist/config/index.d.ts +3 -3
  75. package/dist/config/index.d.ts.map +1 -1
  76. package/dist/config/index.js +6 -3
  77. package/dist/config/index.js.map +1 -1
  78. package/dist/config/state-store.d.ts +27 -0
  79. package/dist/config/state-store.d.ts.map +1 -0
  80. package/dist/config/state-store.js +55 -0
  81. package/dist/config/state-store.js.map +1 -0
  82. package/dist/config/state.d.ts +6 -0
  83. package/dist/config/state.d.ts.map +1 -1
  84. package/dist/config/state.js +49 -14
  85. package/dist/config/state.js.map +1 -1
  86. package/dist/config/types.d.ts +29 -0
  87. package/dist/config/types.d.ts.map +1 -1
  88. package/dist/config/types.js +20 -1
  89. package/dist/config/types.js.map +1 -1
  90. package/dist/daemon/api-handler.d.ts +5 -0
  91. package/dist/daemon/api-handler.d.ts.map +1 -0
  92. package/dist/daemon/api-handler.js +110 -0
  93. package/dist/daemon/api-handler.js.map +1 -0
  94. package/dist/daemon/config-manager.d.ts +43 -0
  95. package/dist/daemon/config-manager.d.ts.map +1 -0
  96. package/dist/daemon/config-manager.js +154 -0
  97. package/dist/daemon/config-manager.js.map +1 -0
  98. package/dist/daemon/http-proxy.d.ts +27 -0
  99. package/dist/daemon/http-proxy.d.ts.map +1 -0
  100. package/dist/daemon/http-proxy.js +110 -0
  101. package/dist/daemon/http-proxy.js.map +1 -0
  102. package/dist/daemon/ime-helper.d.ts +1 -1
  103. package/dist/daemon/ime-helper.d.ts.map +1 -1
  104. package/dist/daemon/ime-helper.js +24 -53
  105. package/dist/daemon/ime-helper.js.map +1 -1
  106. package/dist/daemon/index.d.ts.map +1 -1
  107. package/dist/daemon/index.js +139 -30
  108. package/dist/daemon/index.js.map +1 -1
  109. package/dist/daemon/portal-utils.d.ts +20 -0
  110. package/dist/daemon/portal-utils.d.ts.map +1 -0
  111. package/dist/daemon/portal-utils.js +109 -0
  112. package/dist/daemon/portal-utils.js.map +1 -0
  113. package/dist/daemon/portal.d.ts.map +1 -1
  114. package/dist/daemon/portal.js +20 -77
  115. package/dist/daemon/portal.js.map +1 -1
  116. package/dist/daemon/pwa.d.ts +52 -0
  117. package/dist/daemon/pwa.d.ts.map +1 -0
  118. package/dist/daemon/pwa.js +229 -0
  119. package/dist/daemon/pwa.js.map +1 -0
  120. package/dist/daemon/router.d.ts +15 -0
  121. package/dist/daemon/router.d.ts.map +1 -0
  122. package/dist/daemon/router.js +164 -0
  123. package/dist/daemon/router.js.map +1 -0
  124. package/dist/daemon/server.d.ts +15 -3
  125. package/dist/daemon/server.d.ts.map +1 -1
  126. package/dist/daemon/server.js +23 -271
  127. package/dist/daemon/server.js.map +1 -1
  128. package/dist/daemon/session-manager.d.ts +50 -12
  129. package/dist/daemon/session-manager.d.ts.map +1 -1
  130. package/dist/daemon/session-manager.js +138 -53
  131. package/dist/daemon/session-manager.js.map +1 -1
  132. package/dist/daemon/session-resolver.d.ts +1 -1
  133. package/dist/daemon/session-resolver.d.ts.map +1 -1
  134. package/dist/daemon/session-resolver.js.map +1 -1
  135. package/dist/daemon/toolbar/config.d.ts +13 -0
  136. package/dist/daemon/toolbar/config.d.ts.map +1 -0
  137. package/dist/daemon/toolbar/config.js +13 -0
  138. package/dist/daemon/toolbar/config.js.map +1 -0
  139. package/dist/daemon/toolbar/index.d.ts +43 -0
  140. package/dist/daemon/toolbar/index.d.ts.map +1 -0
  141. package/dist/daemon/toolbar/index.js +835 -0
  142. package/dist/daemon/toolbar/index.js.map +1 -0
  143. package/dist/daemon/toolbar/styles.d.ts +5 -0
  144. package/dist/daemon/toolbar/styles.d.ts.map +1 -0
  145. package/dist/daemon/toolbar/styles.js +278 -0
  146. package/dist/daemon/toolbar/styles.js.map +1 -0
  147. package/dist/daemon/toolbar/template.d.ts +6 -0
  148. package/dist/daemon/toolbar/template.d.ts.map +1 -0
  149. package/dist/daemon/toolbar/template.js +45 -0
  150. package/dist/daemon/toolbar/template.js.map +1 -0
  151. package/dist/daemon/ws-proxy.d.ts +17 -0
  152. package/dist/daemon/ws-proxy.d.ts.map +1 -0
  153. package/dist/daemon/ws-proxy.js +95 -0
  154. package/dist/daemon/ws-proxy.js.map +1 -0
  155. package/dist/deploy/caddyfile.d.ts.map +1 -1
  156. package/dist/deploy/caddyfile.js.map +1 -1
  157. package/dist/deploy/deploy-script.d.ts.map +1 -1
  158. package/dist/deploy/static-portal.d.ts.map +1 -1
  159. package/dist/deploy/static-portal.js +6 -77
  160. package/dist/deploy/static-portal.js.map +1 -1
  161. package/dist/index.js +60 -31
  162. package/dist/index.js.map +1 -1
  163. package/dist/test-setup.d.ts +19 -0
  164. package/dist/test-setup.d.ts.map +1 -0
  165. package/dist/test-setup.js +33 -0
  166. package/dist/test-setup.js.map +1 -0
  167. package/dist/tmux.d.ts +28 -1
  168. package/dist/tmux.d.ts.map +1 -1
  169. package/dist/tmux.js +37 -32
  170. package/dist/tmux.js.map +1 -1
  171. package/dist/ui.d.ts +2 -1
  172. package/dist/ui.d.ts.map +1 -1
  173. package/dist/ui.js +16 -9
  174. package/dist/ui.js.map +1 -1
  175. package/dist/utils/errors.d.ts +4 -0
  176. package/dist/utils/errors.d.ts.map +1 -1
  177. package/dist/utils/errors.js +9 -1
  178. package/dist/utils/errors.js.map +1 -1
  179. package/dist/utils/logger.d.ts +14 -0
  180. package/dist/utils/logger.d.ts.map +1 -0
  181. package/dist/utils/logger.js +53 -0
  182. package/dist/utils/logger.js.map +1 -0
  183. package/dist/utils/process-runner.d.ts +50 -0
  184. package/dist/utils/process-runner.d.ts.map +1 -0
  185. package/dist/utils/process-runner.js +73 -0
  186. package/dist/utils/process-runner.js.map +1 -0
  187. package/dist/utils/socket-client.d.ts +24 -0
  188. package/dist/utils/socket-client.d.ts.map +1 -0
  189. package/dist/utils/socket-client.js +30 -0
  190. package/dist/utils/socket-client.js.map +1 -0
  191. package/dist/utils/tmux-client.d.ts +61 -0
  192. package/dist/utils/tmux-client.d.ts.map +1 -0
  193. package/dist/utils/tmux-client.js +127 -0
  194. package/dist/utils/tmux-client.js.map +1 -0
  195. package/dist/version.d.ts +3 -0
  196. package/dist/version.d.ts.map +1 -0
  197. package/dist/version.js +4 -0
  198. package/dist/version.js.map +1 -0
  199. package/package.json +7 -2
  200. package/dist/daemon/proxy.d.ts +0 -7
  201. package/dist/daemon/proxy.d.ts.map +0 -1
  202. package/dist/daemon/proxy.js +0 -17
  203. package/dist/daemon/proxy.js.map +0 -1
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # ttyd-mux
2
2
 
3
+ [![CI](https://github.com/cuzic/ttyd-mux/actions/workflows/ci.yml/badge.svg)](https://github.com/cuzic/ttyd-mux/actions/workflows/ci.yml)
4
+ ![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/cuzic/cc6203266343ecd145c80ea0e848fb33/raw/ttyd-mux-coverage.json)
5
+
3
6
  A CLI tool for managing multiple ttyd+tmux web terminal sessions.
4
7
 
5
8
  複数の ttyd+tmux Web ターミナルセッションを管理する CLI ツール。
@@ -60,11 +63,20 @@ sudo apt install ttyd tmux
60
63
  brew install ttyd tmux
61
64
  ```
62
65
 
63
- ## Quick Start / クイックスタート
66
+ ## Usage Patterns / 使い方
67
+
68
+ ttyd-mux has two main usage patterns:
69
+
70
+ ttyd-mux には2つの利用パターンがあります:
71
+
72
+ ### Dynamic Usage (Ad-hoc Sessions) / 動的利用
73
+
74
+ Start sessions on-demand in any directory. No configuration needed.
75
+
76
+ 設定不要で、任意のディレクトリでその場でセッションを起動。
64
77
 
65
78
  ```bash
66
- # Start in your project directory
67
- # プロジェクトディレクトリで起動
79
+ # Start in your project directory / プロジェクトディレクトリで起動
68
80
  cd ~/my-project
69
81
  ttyd-mux up
70
82
 
@@ -78,38 +90,60 @@ ttyd-mux status
78
90
  ttyd-mux down
79
91
  ```
80
92
 
81
- ## Commands / コマンド
93
+ ### Static Usage (Predefined Sessions) / 静的利用
82
94
 
83
- ### Main Commands / メインコマンド
95
+ Define sessions in config.yaml and start them all at once. Ideal for servers.
96
+
97
+ config.yaml にセッションを定義し、一括起動。サーバー運用に最適。
98
+
99
+ ```yaml
100
+ # ~/.config/ttyd-mux/config.yaml
101
+ sessions:
102
+ - name: project-a
103
+ dir: /home/user/project-a
104
+ - name: project-b
105
+ dir: /home/user/project-b
106
+ ```
84
107
 
85
108
  ```bash
86
- ttyd-mux up [--name <name>] # Start session and attach / セッション起動 自動アタッチ
87
- ttyd-mux up --detach # Start without attaching / セッション起動のみ(アタッチしない)
88
- ttyd-mux down # Stop current directory session / カレントディレクトリのセッション停止
109
+ # Start daemon + all predefined sessions / デーモンと全セッションを起動
110
+ ttyd-mux daemon start --sessions
111
+
112
+ # Or select sessions interactively / またはインタラクティブに選択
113
+ ttyd-mux daemon start -s
114
+
115
+ # Stop daemon + all sessions / デーモンと全セッションを停止
116
+ ttyd-mux daemon stop --stop-sessions
89
117
  ```
90
118
 
91
- ### Session Management / セッション管理
119
+ ## Commands / コマンド
120
+
121
+ ### Session Commands / セッションコマンド
92
122
 
93
123
  ```bash
94
- ttyd-mux start <name> # Start predefined session / 事前定義セッションを起動
95
- ttyd-mux start --all # Start all predefined sessions / 全ての事前定義セッションを起動
96
- ttyd-mux stop <name> # Stop session / セッション停止
97
- ttyd-mux stop --all # Stop all sessions / 全セッション停止
98
- ttyd-mux status # Show status / 状態表示
124
+ ttyd-mux up # Start session for current directory
125
+ ttyd-mux down # Stop session for current directory
126
+ ttyd-mux status # Show status
127
+ ttyd-mux attach [name] # Attach to tmux session directly
99
128
  ```
100
129
 
101
- ### Direct Access / 直接アクセス
130
+ ### Daemon Control / デーモン制御
102
131
 
103
132
  ```bash
104
- ttyd-mux attach [name] # Attach directly to tmux session / tmuxセッションに直接アタッチ
133
+ ttyd-mux daemon start # Start daemon only
134
+ ttyd-mux daemon start --sessions # Start daemon + all predefined sessions
135
+ ttyd-mux daemon start -s # Start daemon + select sessions interactively
136
+ ttyd-mux daemon start -f # Start in foreground (debug)
137
+ ttyd-mux daemon stop # Stop daemon
138
+ ttyd-mux daemon stop --stop-sessions # Stop all sessions + daemon
139
+ ttyd-mux daemon reload # Reload config (hot-reload)
140
+ ttyd-mux daemon restart # Restart daemon (apply code updates)
105
141
  ```
106
142
 
107
- ### Daemon Control / デーモン制御
143
+ ### Diagnostics / 診断
108
144
 
109
145
  ```bash
110
- ttyd-mux daemon # Start daemon / デーモン起動
111
- ttyd-mux daemon -f # Start in foreground (debug) / フォアグラウンドで起動(デバッグ用)
112
- ttyd-mux shutdown # Stop daemon / デーモン終了
146
+ ttyd-mux doctor # Check dependencies and configuration
113
147
  ```
114
148
 
115
149
  ## Configuration / 設定
@@ -137,40 +171,24 @@ base_port: 7600
137
171
  daemon_port: 7680
138
172
 
139
173
  # Listen addresses (default: IPv4 + IPv6 localhost)
140
- # リッスンアドレス(デフォルト: IPv4 + IPv6 localhost)
141
174
  listen_addresses:
142
175
  - "127.0.0.1"
143
176
  - "::1"
144
- # - "0.0.0.0" # Allow external access / 外部からのアクセスを許可する場合
145
-
146
- # Auto-attach to tmux on session start (default: true)
147
- # セッション起動時に自動でtmuxにアタッチ(デフォルト: true)
148
- auto_attach: true
149
177
 
150
178
  # Proxy mode: "proxy" (default) or "static"
151
- # プロキシモード: "proxy"(デフォルト)または "static"
152
- # - proxy: All traffic goes through ttyd-mux daemon (supports IME helper)
153
- # - static: Sessions are accessed directly via Caddy (lower latency)
179
+ # - proxy: All traffic goes through daemon (supports toolbar)
180
+ # - static: Sessions accessed directly via Caddy (lower latency)
154
181
  proxy_mode: proxy
155
182
 
156
- # Hostname for Caddy integration (used by caddy/deploy commands)
157
- # Caddy連携用のホスト名(caddy/deployコマンドで使用)
183
+ # Hostname for Caddy integration
158
184
  hostname: example.com
159
185
 
160
- # Caddy Admin API URL
161
- caddy_admin_api: http://localhost:2019
162
-
163
- # Predefined sessions (optional) / 事前定義セッション(オプション)
186
+ # Predefined sessions for static usage / 静的利用のためのセッション定義
164
187
  sessions:
165
188
  - name: project-a
166
189
  dir: /home/user/project-a
167
- path: /project-a
168
- port_offset: 1
169
-
170
190
  - name: project-b
171
191
  dir: /home/user/project-b
172
- path: /project-b
173
- port_offset: 2
174
192
  ```
175
193
 
176
194
  ## Architecture / アーキテクチャ
@@ -210,7 +228,61 @@ sessions:
210
228
 
211
229
  - Lower latency (no intermediate proxy) / 低レイテンシ(中間プロキシなし)
212
230
  - Static portal (no daemon needed at runtime) / 静的ポータル(実行時デーモン不要)
213
- - No IME helper support / IME ヘルパー非対応
231
+ - No toolbar support / ツールバー非対応
232
+
233
+ ### Session Lifecycle / セッションのライフサイクル
234
+
235
+ Each session consists of three independent processes:
236
+
237
+ 各セッションは3つの独立したプロセスで構成されています:
238
+
239
+ ```
240
+ ttyd-mux daemon (manages sessions)
241
+
242
+ └── ttyd (web terminal server)
243
+
244
+ └── tmux session (terminal multiplexer)
245
+ ```
246
+
247
+ **What happens when stopping:**
248
+
249
+ **停止時の挙動:**
250
+
251
+ | Command | daemon | ttyd | tmux |
252
+ |---------|--------|------|------|
253
+ | `daemon stop` | Stops | Keeps running | Keeps running |
254
+ | `daemon stop -s` | Stops | Stops | **Keeps running** |
255
+ | `daemon stop -s --kill-tmux` | Stops | Stops | Stops |
256
+ | `down` | - | Stops | **Keeps running** |
257
+ | `down --kill-tmux` | - | Stops | Stops |
258
+ | `exit` in terminal | - | Stops | Stops |
259
+
260
+ - By default, tmux sessions persist even when ttyd or daemon is stopped
261
+ - Restarting with `ttyd-mux up` reconnects to existing tmux session
262
+ - Use `--kill-tmux` flag to fully terminate tmux sessions
263
+
264
+ - デフォルトでは tmux セッションは ttyd やデーモンを停止しても残ります
265
+ - `ttyd-mux up` で再起動すると既存の tmux セッションに再接続します
266
+ - `--kill-tmux` フラグで tmux セッションも完全に終了できます
267
+
268
+ ## Toolbar Features / ツールバー機能
269
+
270
+ In proxy mode, ttyd-mux injects a toolbar for improved input experience:
271
+
272
+ プロキシモードでは、入力体験向上のためツールバーが注入されます:
273
+
274
+ ### Mobile Support / モバイル対応
275
+
276
+ - **IME Input**: Virtual keyboard with Japanese IME support / 日本語 IME 対応
277
+ - **Touch Pinch Zoom**: Two-finger pinch to resize font / 2本指ピンチでフォントサイズ変更
278
+ - **Double-tap Enter**: Double-tap to send Enter key / ダブルタップで Enter 送信
279
+ - **Scroll Buttons**: PgUp/PgDn for scrolling / スクロール用ボタン
280
+
281
+ ### PC Browser Support / PC ブラウザ対応
282
+
283
+ - **Ctrl+Scroll Zoom**: Mouse wheel with Ctrl key / Ctrl+マウスホイールでサイズ変更
284
+ - **Trackpad Pinch Zoom** (Mac): Two-finger pinch gesture / トラックパッドピンチ
285
+ - **Ctrl+J Toggle**: Show/hide toolbar / ツールバー表示切替
214
286
 
215
287
  ## Caddy Integration / Caddy との連携
216
288
 
@@ -240,29 +312,7 @@ handle /ttyd-mux/* {
240
312
  }
241
313
  ```
242
314
 
243
- ### Static Mode / スタティックモード
244
-
245
- For lower latency, use static mode where Caddy routes directly to ttyd:
246
-
247
- 低レイテンシのために、Caddy から ttyd に直接ルーティングするスタティックモード:
248
-
249
- ```yaml
250
- # config.yaml
251
- proxy_mode: static
252
- hostname: example.com
253
- ```
254
-
255
- ```bash
256
- # Generate static portal and Caddyfile snippet
257
- # 静的ポータルと Caddyfile スニペットを生成
258
- ttyd-mux deploy
259
-
260
- # Sync routes after starting/stopping sessions
261
- # セッション開始/停止後にルートを同期
262
- ttyd-mux caddy sync
263
- ```
264
-
265
- See [docs/caddy-setup.md](docs/caddy-setup.md) for details.
315
+ See [docs/caddy-setup.md](docs/caddy-setup.md) for details, including authentication setup.
266
316
 
267
317
  ## File Structure / ファイル構成
268
318
 
@@ -1,35 +1,11 @@
1
- export interface CaddyConfig {
2
- apps?: {
3
- http?: {
4
- servers?: Record<string, CaddyServer>;
5
- };
6
- };
7
- }
8
- export interface CaddyServer {
9
- listen?: string[];
10
- routes?: CaddyRoute[];
11
- }
12
- export interface CaddyRoute {
13
- match?: CaddyMatch[];
14
- handle?: CaddyHandler[];
15
- }
16
- export interface CaddyMatch {
17
- host?: string[];
18
- path?: string[];
19
- }
20
- export interface CaddyHandler {
21
- handler: string;
22
- upstreams?: Array<{
23
- dial: string;
24
- }>;
25
- body?: string;
26
- }
1
+ import type { CaddyConfig, CaddyRoute, CaddyServer } from './types.js';
2
+ export type { CaddyConfig, CaddyRoute, CaddyServer } from './types.js';
27
3
  export declare const DEFAULT_ADMIN_API = "http://localhost:2019";
28
4
  /**
29
5
  * Client for Caddy Admin API
30
6
  */
31
7
  export declare class CaddyClient {
32
- private adminApi;
8
+ private readonly adminApi;
33
9
  constructor(adminApi?: string);
34
10
  /**
35
11
  * Get current Caddy configuration
@@ -47,57 +23,6 @@ export declare class CaddyClient {
47
23
  * Create a new server
48
24
  */
49
25
  createServer(serverName: string, server: CaddyServer): Promise<void>;
50
- /**
51
- * Find server that handles a specific hostname
52
- */
53
- findServerForHost(servers: Record<string, CaddyServer>, hostname: string): {
54
- name: string;
55
- server: CaddyServer;
56
- } | null;
57
- /**
58
- * Check if a route exists for hostname and path
59
- */
60
- routeExists(server: CaddyServer, hostname: string, basePath: string): boolean;
61
- /**
62
- * Create a reverse proxy route
63
- */
64
- createProxyRoute(hostname: string, basePath: string, upstream: string): CaddyRoute;
65
- /**
66
- * Create a route for a specific session (static mode)
67
- */
68
- createSessionRoute(hostname: string, sessionPath: string, port: number): CaddyRoute;
69
- /**
70
- * Create portal route (exact match for base path without trailing content)
71
- */
72
- createPortalRoute(hostname: string, basePath: string, daemonPort: number): CaddyRoute;
73
- /**
74
- * Check if a session route exists
75
- */
76
- sessionRouteExists(server: CaddyServer, hostname: string, sessionPath: string): boolean;
77
- /**
78
- * Get all ttyd-mux session routes from a server
79
- */
80
- getSessionRoutes(server: CaddyServer, hostname: string, basePath: string): Array<{
81
- path: string;
82
- port: number;
83
- }>;
84
- /**
85
- * Remove session routes that are no longer active
86
- */
87
- filterOutSessionRoutes(routes: CaddyRoute[], hostname: string, basePath: string, keepPaths: Set<string>): CaddyRoute[];
88
- /**
89
- * Extract upstream from route handlers
90
- */
91
- private extractUpstream;
92
- /**
93
- * Find ttyd-mux routes in all servers
94
- */
95
- findTtydMuxRoutes(servers: Record<string, CaddyServer>, basePath: string): Array<{
96
- serverName: string;
97
- hosts: string[];
98
- paths: string[];
99
- upstream: string;
100
- }>;
101
26
  }
102
27
  /**
103
28
  * Connect to Caddy Admin API and return client
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/caddy/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/caddy/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGvE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvE,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,GAAE,MAA0B;IAIhD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAQvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAKxD;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAajF;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAY3E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,GAAE,MAA0B,GAAG,OAAO,CAAC,WAAW,CAAC,CAS/F"}
@@ -52,176 +52,6 @@ export class CaddyClient {
52
52
  throw new Error(`Failed to create server: ${response.status} ${text}`);
53
53
  }
54
54
  }
55
- /**
56
- * Find server that handles a specific hostname
57
- */
58
- findServerForHost(servers, hostname) {
59
- for (const [name, server] of Object.entries(servers)) {
60
- const routes = server.routes ?? [];
61
- for (const route of routes) {
62
- const matches = route.match ?? [];
63
- for (const match of matches) {
64
- if (match.host?.includes(hostname)) {
65
- return { name, server };
66
- }
67
- }
68
- }
69
- }
70
- return null;
71
- }
72
- /**
73
- * Check if a route exists for hostname and path
74
- */
75
- routeExists(server, hostname, basePath) {
76
- const routes = server.routes ?? [];
77
- return routes.some((route) => {
78
- const matches = route.match ?? [];
79
- return matches.some((m) => m.host?.includes(hostname) && m.path?.some((p) => p.startsWith(basePath)));
80
- });
81
- }
82
- /**
83
- * Create a reverse proxy route
84
- */
85
- createProxyRoute(hostname, basePath, upstream) {
86
- return {
87
- match: [
88
- {
89
- host: [hostname],
90
- path: [`${basePath}/*`]
91
- }
92
- ],
93
- handle: [
94
- {
95
- handler: 'reverse_proxy',
96
- upstreams: [{ dial: upstream }]
97
- }
98
- ]
99
- };
100
- }
101
- /**
102
- * Create a route for a specific session (static mode)
103
- */
104
- createSessionRoute(hostname, sessionPath, port) {
105
- return {
106
- match: [
107
- {
108
- host: [hostname],
109
- path: [`${sessionPath}/*`]
110
- }
111
- ],
112
- handle: [
113
- {
114
- handler: 'reverse_proxy',
115
- upstreams: [{ dial: `localhost:${port}` }]
116
- }
117
- ]
118
- };
119
- }
120
- /**
121
- * Create portal route (exact match for base path without trailing content)
122
- */
123
- createPortalRoute(hostname, basePath, daemonPort) {
124
- return {
125
- match: [
126
- {
127
- host: [hostname],
128
- path: [`${basePath}`, `${basePath}/`, `${basePath}/api/*`]
129
- }
130
- ],
131
- handle: [
132
- {
133
- handler: 'reverse_proxy',
134
- upstreams: [{ dial: `localhost:${daemonPort}` }]
135
- }
136
- ]
137
- };
138
- }
139
- /**
140
- * Check if a session route exists
141
- */
142
- sessionRouteExists(server, hostname, sessionPath) {
143
- const routes = server.routes ?? [];
144
- return routes.some((route) => {
145
- const matches = route.match ?? [];
146
- return matches.some((m) => m.host?.includes(hostname) && m.path?.some((p) => p === `${sessionPath}/*`));
147
- });
148
- }
149
- /**
150
- * Get all ttyd-mux session routes from a server
151
- */
152
- getSessionRoutes(server, hostname, basePath) {
153
- const results = [];
154
- const routes = server.routes ?? [];
155
- for (const route of routes) {
156
- const matches = route.match ?? [];
157
- for (const match of matches) {
158
- if (!match.host?.includes(hostname))
159
- continue;
160
- for (const path of match.path ?? []) {
161
- // Match session paths like /ttyd-mux/session-name/*
162
- if (path.startsWith(`${basePath}/`) && path.endsWith('/*')) {
163
- const sessionPath = path.slice(0, -2); // Remove /*
164
- const upstream = this.extractUpstream(route);
165
- const portMatch = upstream.match(/:(\d+)$/);
166
- if (portMatch?.[1]) {
167
- results.push({ path: sessionPath, port: Number.parseInt(portMatch[1], 10) });
168
- }
169
- }
170
- }
171
- }
172
- }
173
- return results;
174
- }
175
- /**
176
- * Remove session routes that are no longer active
177
- */
178
- filterOutSessionRoutes(routes, hostname, basePath, keepPaths) {
179
- return routes.filter((route) => {
180
- const matches = route.match ?? [];
181
- for (const match of matches) {
182
- if (!match.host?.includes(hostname))
183
- continue;
184
- for (const path of match.path ?? []) {
185
- // Check if this is a session route
186
- if (path.startsWith(`${basePath}/`) && path.endsWith('/*')) {
187
- const sessionPath = path.slice(0, -2);
188
- // Keep only if in keepPaths
189
- if (!keepPaths.has(sessionPath)) {
190
- return false;
191
- }
192
- }
193
- }
194
- }
195
- return true;
196
- });
197
- }
198
- /**
199
- * Extract upstream from route handlers
200
- */
201
- extractUpstream(route) {
202
- const handlers = route.handle ?? [];
203
- const proxyHandler = handlers.find((h) => h.handler === 'reverse_proxy');
204
- return proxyHandler?.upstreams?.[0]?.dial ?? 'unknown';
205
- }
206
- /**
207
- * Find ttyd-mux routes in all servers
208
- */
209
- findTtydMuxRoutes(servers, basePath) {
210
- const results = [];
211
- for (const [serverName, server] of Object.entries(servers)) {
212
- for (const route of server.routes ?? []) {
213
- for (const match of route.match ?? []) {
214
- const paths = match.path ?? [];
215
- if (paths.some((p) => p.startsWith(basePath))) {
216
- const hosts = match.host ?? ['*'];
217
- const upstream = this.extractUpstream(route);
218
- results.push({ serverName, hosts, paths, upstream });
219
- }
220
- }
221
- }
222
- }
223
- return results;
224
- }
225
55
  }
226
56
  /**
227
57
  * Connect to Caddy Admin API and return client
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/caddy/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/caddy/client.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,OAAO,WAAW;IACL,QAAQ,CAAS;IAElC,YAAY,WAAmB,iBAAiB;QAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,UAAkB,EAAE,MAAoB;QAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,6BAA6B,UAAU,SAAS,EAAE;YAC7F,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,MAAmB;QACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,6BAA6B,UAAU,EAAE,EAAE;YACtF,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,iBAAiB;IACvE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { CaddyRoute, CaddyServer } from './types.js';
2
+ /**
3
+ * Create a reverse proxy route
4
+ */
5
+ export declare function createProxyRoute(hostname: string, basePath: string, upstream: string): CaddyRoute;
6
+ /**
7
+ * Create a route for a specific session (static mode)
8
+ */
9
+ export declare function createSessionRoute(hostname: string, sessionPath: string, port: number): CaddyRoute;
10
+ /**
11
+ * Create portal route (exact match for base path without trailing content)
12
+ */
13
+ export declare function createPortalRoute(hostname: string, basePath: string, daemonPort: number): CaddyRoute;
14
+ /**
15
+ * Find server that handles a specific hostname
16
+ */
17
+ export declare function findServerForHost(servers: Record<string, CaddyServer>, hostname: string): {
18
+ name: string;
19
+ server: CaddyServer;
20
+ } | null;
21
+ /**
22
+ * Check if a route exists for hostname and path
23
+ */
24
+ export declare function routeExists(server: CaddyServer, hostname: string, basePath: string): boolean;
25
+ /**
26
+ * Check if a session route exists
27
+ */
28
+ export declare function sessionRouteExists(server: CaddyServer, hostname: string, sessionPath: string): boolean;
29
+ /**
30
+ * Get all ttyd-mux session routes from a server
31
+ */
32
+ export declare function getSessionRoutes(server: CaddyServer, hostname: string, basePath: string): Array<{
33
+ path: string;
34
+ port: number;
35
+ }>;
36
+ /**
37
+ * Remove session routes that are no longer active
38
+ */
39
+ export declare function filterOutSessionRoutes(routes: CaddyRoute[], hostname: string, basePath: string, keepPaths: Set<string>): CaddyRoute[];
40
+ /**
41
+ * Find ttyd-mux routes in all servers
42
+ */
43
+ export declare function findTtydMuxRoutes(servers: Record<string, CaddyServer>, basePath: string): Array<{
44
+ serverName: string;
45
+ hosts: string[];
46
+ paths: string[];
47
+ upstream: string;
48
+ }>;
49
+ //# sourceMappingURL=route-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-builder.d.ts","sourceRoot":"","sources":["../../src/caddy/route-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKtE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAejG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,UAAU,CAeZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,UAAU,CAeZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG,IAAI,CAW9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAoDD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAMvC;AA6BD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,UAAU,EAAE,CAEd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAsBD"}