ttyd-mux 0.3.0 → 0.4.0

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 (196) hide show
  1. package/README.md +105 -1
  2. package/dist/caddy/client.d.ts +3 -55
  3. package/dist/caddy/client.d.ts.map +1 -1
  4. package/dist/caddy/client.js +0 -73
  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 +26 -0
  15. package/dist/client/api-client.d.ts.map +1 -0
  16. package/dist/client/api-client.js +62 -0
  17. package/dist/client/api-client.js.map +1 -0
  18. package/dist/client/daemon-client.d.ts +48 -0
  19. package/dist/client/daemon-client.d.ts.map +1 -0
  20. package/dist/client/daemon-client.js +205 -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 -136
  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 +2 -1
  29. package/dist/commands/caddy.d.ts.map +1 -1
  30. package/dist/commands/caddy.js +227 -75
  31. package/dist/commands/caddy.js.map +1 -1
  32. package/dist/commands/daemon.js.map +1 -1
  33. package/dist/commands/deploy.d.ts +7 -0
  34. package/dist/commands/deploy.d.ts.map +1 -0
  35. package/dist/commands/deploy.js +100 -0
  36. package/dist/commands/deploy.js.map +1 -0
  37. package/dist/commands/doctor.d.ts +8 -0
  38. package/dist/commands/doctor.d.ts.map +1 -0
  39. package/dist/commands/doctor.js +180 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/down.d.ts.map +1 -1
  42. package/dist/commands/down.js +11 -0
  43. package/dist/commands/down.js.map +1 -1
  44. package/dist/commands/reload.d.ts +14 -0
  45. package/dist/commands/reload.d.ts.map +1 -0
  46. package/dist/commands/reload.js +50 -0
  47. package/dist/commands/reload.js.map +1 -0
  48. package/dist/commands/shutdown.d.ts +2 -1
  49. package/dist/commands/shutdown.d.ts.map +1 -1
  50. package/dist/commands/shutdown.js +8 -2
  51. package/dist/commands/shutdown.js.map +1 -1
  52. package/dist/commands/start.d.ts.map +1 -1
  53. package/dist/commands/start.js +16 -3
  54. package/dist/commands/start.js.map +1 -1
  55. package/dist/commands/status.js.map +1 -1
  56. package/dist/commands/stop.js.map +1 -1
  57. package/dist/commands/up.js.map +1 -1
  58. package/dist/config/config.d.ts.map +1 -1
  59. package/dist/config/config.js +9 -2
  60. package/dist/config/config.js.map +1 -1
  61. package/dist/config/index.d.ts +3 -3
  62. package/dist/config/index.d.ts.map +1 -1
  63. package/dist/config/index.js +6 -3
  64. package/dist/config/index.js.map +1 -1
  65. package/dist/config/state-store.d.ts +27 -0
  66. package/dist/config/state-store.d.ts.map +1 -0
  67. package/dist/config/state-store.js +55 -0
  68. package/dist/config/state-store.js.map +1 -0
  69. package/dist/config/state.d.ts +6 -0
  70. package/dist/config/state.d.ts.map +1 -1
  71. package/dist/config/state.js +49 -14
  72. package/dist/config/state.js.map +1 -1
  73. package/dist/config/types.d.ts +35 -0
  74. package/dist/config/types.d.ts.map +1 -1
  75. package/dist/config/types.js +23 -1
  76. package/dist/config/types.js.map +1 -1
  77. package/dist/daemon/api-handler.d.ts +5 -0
  78. package/dist/daemon/api-handler.d.ts.map +1 -0
  79. package/dist/daemon/api-handler.js +97 -0
  80. package/dist/daemon/api-handler.js.map +1 -0
  81. package/dist/daemon/config-manager.d.ts +43 -0
  82. package/dist/daemon/config-manager.d.ts.map +1 -0
  83. package/dist/daemon/config-manager.js +154 -0
  84. package/dist/daemon/config-manager.js.map +1 -0
  85. package/dist/daemon/http-proxy.d.ts +27 -0
  86. package/dist/daemon/http-proxy.d.ts.map +1 -0
  87. package/dist/daemon/http-proxy.js +110 -0
  88. package/dist/daemon/http-proxy.js.map +1 -0
  89. package/dist/daemon/ime-helper.d.ts +1 -1
  90. package/dist/daemon/ime-helper.d.ts.map +1 -1
  91. package/dist/daemon/ime-helper.js +284 -10
  92. package/dist/daemon/ime-helper.js.map +1 -1
  93. package/dist/daemon/index.d.ts.map +1 -1
  94. package/dist/daemon/index.js +134 -29
  95. package/dist/daemon/index.js.map +1 -1
  96. package/dist/daemon/portal-utils.d.ts +20 -0
  97. package/dist/daemon/portal-utils.d.ts.map +1 -0
  98. package/dist/daemon/portal-utils.js +109 -0
  99. package/dist/daemon/portal-utils.js.map +1 -0
  100. package/dist/daemon/portal.d.ts.map +1 -1
  101. package/dist/daemon/portal.js +20 -77
  102. package/dist/daemon/portal.js.map +1 -1
  103. package/dist/daemon/pwa.d.ts +52 -0
  104. package/dist/daemon/pwa.d.ts.map +1 -0
  105. package/dist/daemon/pwa.js +229 -0
  106. package/dist/daemon/pwa.js.map +1 -0
  107. package/dist/daemon/router.d.ts +15 -0
  108. package/dist/daemon/router.d.ts.map +1 -0
  109. package/dist/daemon/router.js +164 -0
  110. package/dist/daemon/router.js.map +1 -0
  111. package/dist/daemon/server.d.ts +15 -3
  112. package/dist/daemon/server.d.ts.map +1 -1
  113. package/dist/daemon/server.js +23 -271
  114. package/dist/daemon/server.js.map +1 -1
  115. package/dist/daemon/session-manager.d.ts +44 -10
  116. package/dist/daemon/session-manager.d.ts.map +1 -1
  117. package/dist/daemon/session-manager.js +125 -49
  118. package/dist/daemon/session-manager.js.map +1 -1
  119. package/dist/daemon/session-resolver.d.ts +1 -1
  120. package/dist/daemon/session-resolver.d.ts.map +1 -1
  121. package/dist/daemon/session-resolver.js.map +1 -1
  122. package/dist/daemon/toolbar/config.d.ts +13 -0
  123. package/dist/daemon/toolbar/config.d.ts.map +1 -0
  124. package/dist/daemon/toolbar/config.js +13 -0
  125. package/dist/daemon/toolbar/config.js.map +1 -0
  126. package/dist/daemon/toolbar/index.d.ts +43 -0
  127. package/dist/daemon/toolbar/index.d.ts.map +1 -0
  128. package/dist/daemon/toolbar/index.js +835 -0
  129. package/dist/daemon/toolbar/index.js.map +1 -0
  130. package/dist/daemon/toolbar/styles.d.ts +5 -0
  131. package/dist/daemon/toolbar/styles.d.ts.map +1 -0
  132. package/dist/daemon/toolbar/styles.js +278 -0
  133. package/dist/daemon/toolbar/styles.js.map +1 -0
  134. package/dist/daemon/toolbar/template.d.ts +6 -0
  135. package/dist/daemon/toolbar/template.d.ts.map +1 -0
  136. package/dist/daemon/toolbar/template.js +45 -0
  137. package/dist/daemon/toolbar/template.js.map +1 -0
  138. package/dist/daemon/ws-proxy.d.ts +17 -0
  139. package/dist/daemon/ws-proxy.d.ts.map +1 -0
  140. package/dist/daemon/ws-proxy.js +95 -0
  141. package/dist/daemon/ws-proxy.js.map +1 -0
  142. package/dist/deploy/caddyfile.d.ts +8 -0
  143. package/dist/deploy/caddyfile.d.ts.map +1 -0
  144. package/dist/deploy/caddyfile.js +62 -0
  145. package/dist/deploy/caddyfile.js.map +1 -0
  146. package/dist/deploy/deploy-script.d.ts +8 -0
  147. package/dist/deploy/deploy-script.d.ts.map +1 -0
  148. package/dist/deploy/deploy-script.js +72 -0
  149. package/dist/deploy/deploy-script.js.map +1 -0
  150. package/dist/deploy/static-portal.d.ts +3 -0
  151. package/dist/deploy/static-portal.d.ts.map +1 -0
  152. package/dist/deploy/static-portal.js +59 -0
  153. package/dist/deploy/static-portal.js.map +1 -0
  154. package/dist/index.js +38 -9
  155. package/dist/index.js.map +1 -1
  156. package/dist/test-setup.d.ts +19 -0
  157. package/dist/test-setup.d.ts.map +1 -0
  158. package/dist/test-setup.js +33 -0
  159. package/dist/test-setup.js.map +1 -0
  160. package/dist/tmux.d.ts +28 -1
  161. package/dist/tmux.d.ts.map +1 -1
  162. package/dist/tmux.js +37 -32
  163. package/dist/tmux.js.map +1 -1
  164. package/dist/ui.d.ts +2 -1
  165. package/dist/ui.d.ts.map +1 -1
  166. package/dist/ui.js +16 -9
  167. package/dist/ui.js.map +1 -1
  168. package/dist/utils/errors.d.ts +4 -0
  169. package/dist/utils/errors.d.ts.map +1 -1
  170. package/dist/utils/errors.js +9 -1
  171. package/dist/utils/errors.js.map +1 -1
  172. package/dist/utils/logger.d.ts +14 -0
  173. package/dist/utils/logger.d.ts.map +1 -0
  174. package/dist/utils/logger.js +53 -0
  175. package/dist/utils/logger.js.map +1 -0
  176. package/dist/utils/process-runner.d.ts +50 -0
  177. package/dist/utils/process-runner.d.ts.map +1 -0
  178. package/dist/utils/process-runner.js +73 -0
  179. package/dist/utils/process-runner.js.map +1 -0
  180. package/dist/utils/socket-client.d.ts +24 -0
  181. package/dist/utils/socket-client.d.ts.map +1 -0
  182. package/dist/utils/socket-client.js +30 -0
  183. package/dist/utils/socket-client.js.map +1 -0
  184. package/dist/utils/tmux-client.d.ts +57 -0
  185. package/dist/utils/tmux-client.d.ts.map +1 -0
  186. package/dist/utils/tmux-client.js +117 -0
  187. package/dist/utils/tmux-client.js.map +1 -0
  188. package/dist/version.d.ts +3 -0
  189. package/dist/version.d.ts.map +1 -0
  190. package/dist/version.js +4 -0
  191. package/dist/version.js.map +1 -0
  192. package/package.json +6 -2
  193. package/dist/daemon/proxy.d.ts +0 -7
  194. package/dist/daemon/proxy.d.ts.map +0 -1
  195. package/dist/daemon/proxy.js +0 -17
  196. package/dist/daemon/proxy.js.map +0 -1
@@ -1,72 +1,96 @@
1
- import { DEFAULT_ADMIN_API, connectToCaddy } from '../caddy/client.js';
1
+ import { connectToCaddy } from '../caddy/client.js';
2
+ import { createPortalRoute, createProxyRoute, createSessionRoute, filterOutSessionRoutes, findServerForHost, findTtydMuxRoutes, getSessionRoutes, routeExists } from '../caddy/route-builder.js';
3
+ import { getSessions, isDaemonRunning } from '../client/index.js';
2
4
  import { loadConfig } from '../config/config.js';
3
- import { handleCliError } from '../utils/errors.js';
5
+ import { handleCliError, requireHostname } from '../utils/errors.js';
6
+ function getHostname(options, config) {
7
+ return options.hostname ?? config.hostname;
8
+ }
9
+ function getAdminApi(options, config) {
10
+ return options.adminApi ?? config.caddy_admin_api;
11
+ }
4
12
  // Generate snippet for Caddyfile users
5
- export function caddySnippetCommand(options) {
13
+ export async function caddySnippetCommand(options) {
6
14
  const config = loadConfig(options.config);
7
15
  const basePath = config.base_path;
8
16
  const daemonPort = config.daemon_port;
17
+ const proxyMode = config.proxy_mode;
9
18
  console.log('# Add this to your Caddyfile inside your site block:');
10
19
  console.log('');
11
- console.log(`handle ${basePath}/* {`);
12
- console.log(` reverse_proxy localhost:${daemonPort}`);
13
- console.log('}');
20
+ if (proxyMode === 'proxy') {
21
+ // Proxy mode: single route proxies all to daemon
22
+ console.log(`handle ${basePath}/* {`);
23
+ console.log(` reverse_proxy localhost:${daemonPort}`);
24
+ console.log('}');
25
+ }
26
+ else {
27
+ // Static mode: portal/API to daemon, sessions direct to ttyd
28
+ console.log('# Portal and API (via daemon)');
29
+ console.log(`handle ${basePath} {`);
30
+ console.log(` reverse_proxy localhost:${daemonPort}`);
31
+ console.log('}');
32
+ console.log('');
33
+ console.log(`handle ${basePath}/ {`);
34
+ console.log(` reverse_proxy localhost:${daemonPort}`);
35
+ console.log('}');
36
+ console.log('');
37
+ console.log(`handle ${basePath}/api/* {`);
38
+ console.log(` reverse_proxy localhost:${daemonPort}`);
39
+ console.log('}');
40
+ // Get current sessions if daemon is running
41
+ if (await isDaemonRunning()) {
42
+ const sessions = await getSessions(config);
43
+ if (sessions.length > 0) {
44
+ console.log('');
45
+ console.log('# Sessions (direct to ttyd)');
46
+ for (const session of sessions) {
47
+ console.log('');
48
+ console.log(`# Session: ${session.name}`);
49
+ console.log(`handle ${session.fullPath}/* {`);
50
+ console.log(` reverse_proxy localhost:${session.port}`);
51
+ console.log('}');
52
+ }
53
+ }
54
+ }
55
+ else {
56
+ console.log('');
57
+ console.log('# Note: Daemon is not running. Start sessions and re-run to see session routes.');
58
+ }
59
+ }
14
60
  }
15
61
  // Setup route via Admin API
16
62
  export async function caddySetupCommand(options) {
17
63
  const config = loadConfig(options.config);
18
- const adminApi = options.adminApi ?? DEFAULT_ADMIN_API;
19
- const hostname = options.hostname;
20
- if (!hostname) {
21
- console.error('Error: --hostname is required');
22
- process.exit(1);
23
- }
64
+ const adminApi = getAdminApi(options, config);
65
+ const hostname = getHostname(options, config);
66
+ requireHostname(hostname);
24
67
  const basePath = config.base_path;
25
68
  const daemonPort = config.daemon_port;
26
- let client;
27
- try {
28
- client = await connectToCaddy(adminApi);
29
- }
30
- catch {
31
- console.error(`Error: Cannot connect to Caddy Admin API at ${adminApi}`);
32
- console.error('Make sure Caddy is running and admin API is enabled.');
33
- process.exit(1);
34
- }
69
+ const proxyMode = config.proxy_mode;
70
+ const client = await connectToCaddyOrExit(adminApi);
35
71
  try {
36
72
  const servers = await client.getServers();
37
- const ttydMuxRoute = client.createProxyRoute(hostname, basePath, `localhost:${daemonPort}`);
38
- const serverInfo = client.findServerForHost(servers, hostname);
39
- if (serverInfo) {
40
- // Add route to existing server
41
- if (client.routeExists(serverInfo.server, hostname, basePath)) {
42
- console.log(`Route for ${hostname}${basePath}/* already exists.`);
43
- return;
73
+ const serverInfo = findServerForHost(servers, hostname);
74
+ if (proxyMode === 'proxy') {
75
+ // Proxy mode: single proxy route
76
+ const ttydMuxRoute = createProxyRoute(hostname, basePath, `localhost:${daemonPort}`);
77
+ if (serverInfo) {
78
+ if (routeExists(serverInfo.server, hostname, basePath)) {
79
+ console.log(`Route for ${hostname}${basePath}/* already exists.`);
80
+ return;
81
+ }
82
+ const existingRoutes = serverInfo.server.routes ?? [];
83
+ await client.updateServerRoutes(serverInfo.name, [ttydMuxRoute, ...existingRoutes]);
84
+ console.log(`Added route: ${hostname}${basePath}/* -> localhost:${daemonPort}`);
85
+ }
86
+ else {
87
+ await createNewServer(client, hostname, [ttydMuxRoute]);
88
+ console.log(`Created server for ${hostname} with route: ${basePath}/* -> localhost:${daemonPort}`);
44
89
  }
45
- // Prepend route (higher priority)
46
- const existingRoutes = serverInfo.server.routes ?? [];
47
- await client.updateServerRoutes(serverInfo.name, [ttydMuxRoute, ...existingRoutes]);
48
- console.log(`Added route: ${hostname}${basePath}/* -> localhost:${daemonPort}`);
49
90
  }
50
91
  else {
51
- // Create new server with this route
52
- const newServer = {
53
- listen: [':443'],
54
- routes: [
55
- ttydMuxRoute,
56
- {
57
- // Fallback route
58
- handle: [
59
- {
60
- handler: 'static_response',
61
- body: 'OK'
62
- }
63
- ]
64
- }
65
- ]
66
- };
67
- const serverName = `srv_${hostname.replace(/\./g, '_')}`;
68
- await client.createServer(serverName, newServer);
69
- console.log(`Created server for ${hostname} with route: ${basePath}/* -> localhost:${daemonPort}`);
92
+ // Static mode: portal route + session routes
93
+ await setupStaticMode(client, config, hostname, basePath, daemonPort, serverInfo);
70
94
  }
71
95
  }
72
96
  catch (error) {
@@ -74,27 +98,67 @@ export async function caddySetupCommand(options) {
74
98
  process.exit(1);
75
99
  }
76
100
  }
101
+ async function setupStaticMode(client, config, hostname, basePath, daemonPort, serverInfo) {
102
+ const routes = [];
103
+ // Portal route (for /, /api/*)
104
+ routes.push(createPortalRoute(hostname, basePath, daemonPort));
105
+ console.log(`Portal route: ${hostname}${basePath} -> localhost:${daemonPort}`);
106
+ // Get sessions if daemon is running
107
+ if (await isDaemonRunning()) {
108
+ const sessions = await getSessions(config);
109
+ for (const session of sessions) {
110
+ routes.push(createSessionRoute(hostname, session.fullPath, session.port));
111
+ console.log(`Session route: ${hostname}${session.fullPath}/* -> localhost:${session.port}`);
112
+ }
113
+ }
114
+ else {
115
+ console.log('Note: Daemon is not running. Run "ttyd-mux caddy sync" after starting sessions.');
116
+ }
117
+ if (serverInfo) {
118
+ // Filter out existing ttyd-mux routes and add new ones
119
+ const existingRoutes = serverInfo.server.routes ?? [];
120
+ const cleanedRoutes = existingRoutes.filter((route) => {
121
+ const matches = route.match ?? [];
122
+ return !matches.some((m) => m.host?.includes(hostname) && m.path?.some((p) => p.startsWith(basePath)));
123
+ });
124
+ await client.updateServerRoutes(serverInfo.name, [...routes, ...cleanedRoutes]);
125
+ }
126
+ else {
127
+ await createNewServer(client, hostname, routes);
128
+ console.log(`Created new server for ${hostname}`);
129
+ }
130
+ }
131
+ async function createNewServer(client, hostname, routes) {
132
+ const newServer = {
133
+ listen: [':443'],
134
+ routes: [
135
+ ...routes,
136
+ {
137
+ // Fallback route
138
+ handle: [
139
+ {
140
+ handler: 'static_response',
141
+ body: 'OK'
142
+ }
143
+ ]
144
+ }
145
+ ]
146
+ };
147
+ const serverName = `srv_${hostname.replace(/\./g, '_')}`;
148
+ await client.createServer(serverName, newServer);
149
+ }
77
150
  // Remove route via Admin API
78
151
  export async function caddyRemoveCommand(options) {
79
152
  const config = loadConfig(options.config);
80
- const adminApi = options.adminApi ?? DEFAULT_ADMIN_API;
81
- const hostname = options.hostname;
82
- if (!hostname) {
83
- console.error('Error: --hostname is required');
84
- process.exit(1);
85
- }
153
+ const adminApi = getAdminApi(options, config);
154
+ const hostname = getHostname(options, config);
155
+ requireHostname(hostname);
86
156
  const basePath = config.base_path;
87
- let client;
88
- try {
89
- client = await connectToCaddy(adminApi);
90
- }
91
- catch {
92
- console.error(`Error: Cannot connect to Caddy Admin API at ${adminApi}`);
93
- process.exit(1);
94
- }
157
+ const client = await connectToCaddyOrExit(adminApi);
95
158
  try {
96
159
  const servers = await client.getServers();
97
- // Find and remove the route
160
+ let removed = false;
161
+ // Find and remove all ttyd-mux routes (both proxy and static mode)
98
162
  for (const [serverName, server] of Object.entries(servers)) {
99
163
  const routes = server.routes ?? [];
100
164
  const filteredRoutes = routes.filter((route) => {
@@ -103,39 +167,127 @@ export async function caddyRemoveCommand(options) {
103
167
  });
104
168
  if (filteredRoutes.length < routes.length) {
105
169
  await client.updateServerRoutes(serverName, filteredRoutes);
106
- console.log(`Removed route: ${hostname}${basePath}/*`);
107
- return;
170
+ removed = true;
108
171
  }
109
172
  }
110
- console.log(`Route for ${hostname}${basePath}/* not found.`);
173
+ if (removed) {
174
+ console.log(`Removed all ttyd-mux routes for ${hostname}${basePath}/*`);
175
+ }
176
+ else {
177
+ console.log(`No ttyd-mux routes found for ${hostname}${basePath}/*`);
178
+ }
111
179
  }
112
180
  catch (error) {
113
181
  handleCliError('Error', error);
114
182
  process.exit(1);
115
183
  }
116
184
  }
117
- // Show current Caddy status
118
- export async function caddyStatusCommand(options) {
185
+ // Calculate route diff between daemon sessions and Caddy routes
186
+ function calculateRouteDiff(sessions, existingRoutes) {
187
+ const sessionPaths = new Set(sessions.map((s) => s.fullPath));
188
+ const toAdd = sessions.filter((session) => !existingRoutes.some((r) => r.path === session.fullPath && r.port === session.port));
189
+ const toRemove = existingRoutes.filter((r) => !sessionPaths.has(r.path));
190
+ return { toAdd, toRemove };
191
+ }
192
+ // Check if portal route exists in routes
193
+ function hasPortalRoute(routes, hostname, basePath) {
194
+ return routes.some((route) => {
195
+ const matches = route.match ?? [];
196
+ return matches.some((m) => m.host?.includes(hostname) &&
197
+ m.path?.some((p) => p === basePath || p === `${basePath}/` || p === `${basePath}/api/*`));
198
+ });
199
+ }
200
+ // Report sync changes to console
201
+ function reportSyncChanges(hostname, toAdd, toRemove) {
202
+ for (const session of toAdd) {
203
+ console.log(`Added: ${hostname}${session.fullPath}/* -> localhost:${session.port}`);
204
+ }
205
+ for (const removed of toRemove) {
206
+ console.log(`Removed: ${hostname}${removed.path}/* -> localhost:${removed.port}`);
207
+ }
208
+ console.log('');
209
+ console.log(`Sync complete. ${toAdd.length} added, ${toRemove.length} removed.`);
210
+ }
211
+ // Sync session routes (static mode only)
212
+ export async function caddySyncCommand(options) {
119
213
  const config = loadConfig(options.config);
120
- const adminApi = options.adminApi ?? DEFAULT_ADMIN_API;
214
+ if (config.proxy_mode !== 'static') {
215
+ console.log('Note: sync command is only needed in static mode.');
216
+ console.log('Current proxy_mode is "proxy". Sessions are automatically proxied.');
217
+ return;
218
+ }
219
+ const hostname = getHostname(options, config);
220
+ requireHostname(hostname);
221
+ if (!(await isDaemonRunning())) {
222
+ console.error('Error: Daemon is not running. Start daemon first with "ttyd-mux daemon"');
223
+ process.exit(1);
224
+ }
225
+ const adminApi = getAdminApi(options, config);
226
+ const client = await connectToCaddyOrExit(adminApi);
121
227
  const basePath = config.base_path;
122
- let client;
228
+ const daemonPort = config.daemon_port;
229
+ try {
230
+ const serverInfo = await getServerInfoOrExit(client, hostname);
231
+ const sessions = await getSessions(config);
232
+ const sessionPaths = new Set(sessions.map((s) => s.fullPath));
233
+ const existingSessionRoutes = getSessionRoutes(serverInfo.server, hostname, basePath);
234
+ const { toAdd, toRemove } = calculateRouteDiff(sessions, existingSessionRoutes);
235
+ if (toAdd.length === 0 && toRemove.length === 0) {
236
+ console.log('Routes are up to date. No changes needed.');
237
+ return;
238
+ }
239
+ // Build new routes
240
+ const existingRoutes = serverInfo.server.routes ?? [];
241
+ let newRoutes = filterOutSessionRoutes(existingRoutes, hostname, basePath, sessionPaths);
242
+ const sessionRoutes = toAdd.map((s) => createSessionRoute(hostname, s.fullPath, s.port));
243
+ if (!hasPortalRoute(newRoutes, hostname, basePath)) {
244
+ sessionRoutes.push(createPortalRoute(hostname, basePath, daemonPort));
245
+ console.log(`Added portal route: ${hostname}${basePath} -> localhost:${daemonPort}`);
246
+ }
247
+ newRoutes = [...sessionRoutes, ...newRoutes];
248
+ await client.updateServerRoutes(serverInfo.name, newRoutes);
249
+ reportSyncChanges(hostname, toAdd, toRemove);
250
+ }
251
+ catch (error) {
252
+ handleCliError('Error', error);
253
+ process.exit(1);
254
+ }
255
+ }
256
+ async function connectToCaddyOrExit(adminApi) {
123
257
  try {
124
- client = await connectToCaddy(adminApi);
258
+ return await connectToCaddy(adminApi);
125
259
  }
126
260
  catch {
127
261
  console.error(`Error: Cannot connect to Caddy Admin API at ${adminApi}`);
128
262
  console.error('Make sure Caddy is running and admin API is enabled.');
129
263
  process.exit(1);
130
264
  }
265
+ }
266
+ async function getServerInfoOrExit(client, hostname) {
267
+ const servers = await client.getServers();
268
+ const serverInfo = findServerForHost(servers, hostname);
269
+ if (!serverInfo) {
270
+ console.error(`Error: No server found for hostname ${hostname}`);
271
+ console.error('Run "ttyd-mux caddy setup --hostname <hostname>" first.');
272
+ process.exit(1);
273
+ }
274
+ return serverInfo;
275
+ }
276
+ // Show current Caddy status
277
+ export async function caddyStatusCommand(options) {
278
+ const config = loadConfig(options.config);
279
+ const adminApi = getAdminApi(options, config);
280
+ const basePath = config.base_path;
281
+ const client = await connectToCaddyOrExit(adminApi);
131
282
  console.log(`Caddy Admin API: ${adminApi}`);
283
+ console.log(`Proxy Mode: ${config.proxy_mode}`);
132
284
  console.log('');
133
285
  const servers = await client.getServers();
134
286
  if (Object.keys(servers).length === 0) {
135
287
  console.log('No HTTP servers configured.');
136
288
  return;
137
289
  }
138
- const routes = client.findTtydMuxRoutes(servers, basePath);
290
+ const routes = findTtydMuxRoutes(servers, basePath);
139
291
  if (routes.length === 0) {
140
292
  console.log(`No ttyd-mux routes found (looking for ${basePath}/*)`);
141
293
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"caddy.js","sourceRoot":"","sources":["../../src/commands/caddy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"caddy.js","sourceRoot":"","sources":["../../src/commands/caddy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,2BAA2B;IAC3B,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,oBAAoB;QACpB,MAAM,WAAW,CAAC;YAChB,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,2BAA2B;IAC3B,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,oBAAoB;QACpB,MAAM,WAAW,CAAC;YAChB,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface DeployOptions {
2
+ hostname?: string;
3
+ output?: string;
4
+ config?: string;
5
+ }
6
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
7
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FzE"}
@@ -0,0 +1,100 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { getSessions, isDaemonRunning } from '../client/index.js';
5
+ import { loadConfig } from '../config/config.js';
6
+ import { getAllSessions } from '../config/state.js';
7
+ import { generateCaddyJson, generateCaddyfileSnippet } from '../deploy/caddyfile.js';
8
+ import { generateDeployScript } from '../deploy/deploy-script.js';
9
+ import { generateStaticPortalHtml } from '../deploy/static-portal.js';
10
+ import { requireHostname } from '../utils/errors.js';
11
+ function getDefaultDeployDir() {
12
+ return join(homedir(), '.local', 'share', 'ttyd-mux', 'deploy');
13
+ }
14
+ export async function deployCommand(options) {
15
+ const config = loadConfig(options.config);
16
+ const hostname = options.hostname ?? config.hostname;
17
+ requireHostname(hostname);
18
+ const deployDir = options.output ?? getDefaultDeployDir();
19
+ const portalDir = join(deployDir, 'portal');
20
+ // Get sessions
21
+ let sessions;
22
+ if (await isDaemonRunning()) {
23
+ const sessionResponses = await getSessions(config);
24
+ sessions = sessionResponses.map((s) => ({
25
+ name: s.name,
26
+ pid: s.pid,
27
+ port: s.port,
28
+ path: s.path,
29
+ dir: s.dir,
30
+ started_at: s.started_at
31
+ }));
32
+ }
33
+ else {
34
+ // Fallback to state file
35
+ sessions = getAllSessions();
36
+ }
37
+ console.log('ttyd-mux deploy');
38
+ console.log('================');
39
+ console.log('');
40
+ console.log(`Hostname: ${hostname}`);
41
+ console.log(`Output: ${deployDir}`);
42
+ console.log(`Sessions: ${sessions.length}`);
43
+ console.log('');
44
+ // Create directories
45
+ if (!existsSync(deployDir)) {
46
+ mkdirSync(deployDir, { recursive: true });
47
+ }
48
+ if (!existsSync(portalDir)) {
49
+ mkdirSync(portalDir, { recursive: true });
50
+ }
51
+ // Generate static portal HTML
52
+ const portalHtml = generateStaticPortalHtml(config, sessions);
53
+ const portalPath = join(portalDir, 'index.html');
54
+ writeFileSync(portalPath, portalHtml);
55
+ console.log(`Generated: ${portalPath}`);
56
+ // Generate Caddyfile snippet
57
+ const caddyfileSnippet = generateCaddyfileSnippet(config, sessions, {
58
+ hostname,
59
+ portalDir
60
+ });
61
+ const caddyfilePath = join(deployDir, 'Caddyfile.snippet');
62
+ writeFileSync(caddyfilePath, caddyfileSnippet);
63
+ console.log(`Generated: ${caddyfilePath}`);
64
+ // Generate Caddy JSON routes
65
+ const caddyJson = generateCaddyJson(config, sessions, {
66
+ hostname,
67
+ portalDir
68
+ });
69
+ const caddyJsonPath = join(deployDir, 'caddy-routes.json');
70
+ writeFileSync(caddyJsonPath, JSON.stringify(caddyJson, null, 2));
71
+ console.log(`Generated: ${caddyJsonPath}`);
72
+ // Generate deploy script
73
+ const deployScript = generateDeployScript(config, {
74
+ hostname,
75
+ deployDir,
76
+ caddyAdminApi: config.caddy_admin_api
77
+ });
78
+ const scriptPath = join(deployDir, 'deploy.sh');
79
+ writeFileSync(scriptPath, deployScript, { mode: 0o755 });
80
+ console.log(`Generated: ${scriptPath}`);
81
+ console.log('');
82
+ console.log('Next steps:');
83
+ console.log('');
84
+ console.log('Option 1: Add snippet to Caddyfile');
85
+ console.log(` cat ${caddyfilePath}`);
86
+ console.log('');
87
+ console.log('Option 2: Use Caddy Admin API');
88
+ console.log(` ttyd-mux caddy setup --hostname ${hostname}`);
89
+ console.log('');
90
+ if (sessions.length > 0) {
91
+ console.log('Sessions included:');
92
+ for (const session of sessions) {
93
+ console.log(` - ${session.name} (:${session.port})`);
94
+ }
95
+ }
96
+ else {
97
+ console.log('Note: No sessions found. Start sessions with "ttyd-mux up" and run deploy again.');
98
+ }
99
+ }
100
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface DoctorOptions {
2
+ config?: string;
3
+ }
4
+ /**
5
+ * Run all checks and display results
6
+ */
7
+ export declare function doctorCommand(options: DoctorOptions): Promise<void>;
8
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsJD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CzE"}