@hookbase/cli 1.0.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 (114) hide show
  1. package/README.md +107 -0
  2. package/dist/commands/api-keys.d.ts +15 -0
  3. package/dist/commands/api-keys.d.ts.map +1 -0
  4. package/dist/commands/api-keys.js +143 -0
  5. package/dist/commands/api-keys.js.map +1 -0
  6. package/dist/commands/dashboard.d.ts +3 -0
  7. package/dist/commands/dashboard.d.ts.map +1 -0
  8. package/dist/commands/dashboard.js +26 -0
  9. package/dist/commands/dashboard.js.map +1 -0
  10. package/dist/commands/deliveries.d.ts +22 -0
  11. package/dist/commands/deliveries.d.ts.map +1 -0
  12. package/dist/commands/deliveries.js +223 -0
  13. package/dist/commands/deliveries.js.map +1 -0
  14. package/dist/commands/destinations.d.ts +29 -0
  15. package/dist/commands/destinations.d.ts.map +1 -0
  16. package/dist/commands/destinations.js +232 -0
  17. package/dist/commands/destinations.js.map +1 -0
  18. package/dist/commands/events.d.ts +13 -0
  19. package/dist/commands/events.d.ts.map +1 -0
  20. package/dist/commands/events.js +192 -0
  21. package/dist/commands/events.js.map +1 -0
  22. package/dist/commands/forward.d.ts +2 -0
  23. package/dist/commands/forward.d.ts.map +1 -0
  24. package/dist/commands/forward.js +25 -0
  25. package/dist/commands/forward.js.map +1 -0
  26. package/dist/commands/login.d.ts +2 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +91 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/logout.d.ts +2 -0
  31. package/dist/commands/logout.d.ts.map +1 -0
  32. package/dist/commands/logout.js +12 -0
  33. package/dist/commands/logout.js.map +1 -0
  34. package/dist/commands/logs.d.ts +5 -0
  35. package/dist/commands/logs.d.ts.map +1 -0
  36. package/dist/commands/logs.js +43 -0
  37. package/dist/commands/logs.js.map +1 -0
  38. package/dist/commands/routes.d.ts +28 -0
  39. package/dist/commands/routes.d.ts.map +1 -0
  40. package/dist/commands/routes.js +225 -0
  41. package/dist/commands/routes.js.map +1 -0
  42. package/dist/commands/sources.d.ts +30 -0
  43. package/dist/commands/sources.d.ts.map +1 -0
  44. package/dist/commands/sources.js +256 -0
  45. package/dist/commands/sources.js.map +1 -0
  46. package/dist/commands/tunnel.d.ts +6 -0
  47. package/dist/commands/tunnel.d.ts.map +1 -0
  48. package/dist/commands/tunnel.js +150 -0
  49. package/dist/commands/tunnel.js.map +1 -0
  50. package/dist/commands/tunnels.d.ts +32 -0
  51. package/dist/commands/tunnels.d.ts.map +1 -0
  52. package/dist/commands/tunnels.js +432 -0
  53. package/dist/commands/tunnels.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +430 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/api.d.ts +472 -0
  59. package/dist/lib/api.d.ts.map +1 -0
  60. package/dist/lib/api.js +480 -0
  61. package/dist/lib/api.js.map +1 -0
  62. package/dist/lib/config.d.ts +31 -0
  63. package/dist/lib/config.d.ts.map +1 -0
  64. package/dist/lib/config.js +98 -0
  65. package/dist/lib/config.js.map +1 -0
  66. package/dist/lib/logger.d.ts +19 -0
  67. package/dist/lib/logger.d.ts.map +1 -0
  68. package/dist/lib/logger.js +90 -0
  69. package/dist/lib/logger.js.map +1 -0
  70. package/dist/lib/tunnel.d.ts +28 -0
  71. package/dist/lib/tunnel.d.ts.map +1 -0
  72. package/dist/lib/tunnel.js +197 -0
  73. package/dist/lib/tunnel.js.map +1 -0
  74. package/dist/tui/App.d.ts +2 -0
  75. package/dist/tui/App.d.ts.map +1 -0
  76. package/dist/tui/App.js +136 -0
  77. package/dist/tui/App.js.map +1 -0
  78. package/dist/tui/Dashboard.d.ts +2 -0
  79. package/dist/tui/Dashboard.d.ts.map +1 -0
  80. package/dist/tui/Dashboard.js +113 -0
  81. package/dist/tui/Dashboard.js.map +1 -0
  82. package/dist/tui/TunnelMonitor.d.ts +2 -0
  83. package/dist/tui/TunnelMonitor.d.ts.map +1 -0
  84. package/dist/tui/TunnelMonitor.js +131 -0
  85. package/dist/tui/TunnelMonitor.js.map +1 -0
  86. package/dist/tui/components/Box.d.ts +22 -0
  87. package/dist/tui/components/Box.d.ts.map +1 -0
  88. package/dist/tui/components/Box.js +27 -0
  89. package/dist/tui/components/Box.js.map +1 -0
  90. package/dist/tui/views/Analytics.d.ts +6 -0
  91. package/dist/tui/views/Analytics.d.ts.map +1 -0
  92. package/dist/tui/views/Analytics.js +104 -0
  93. package/dist/tui/views/Analytics.js.map +1 -0
  94. package/dist/tui/views/Destinations.d.ts +10 -0
  95. package/dist/tui/views/Destinations.d.ts.map +1 -0
  96. package/dist/tui/views/Destinations.js +156 -0
  97. package/dist/tui/views/Destinations.js.map +1 -0
  98. package/dist/tui/views/Events.d.ts +9 -0
  99. package/dist/tui/views/Events.d.ts.map +1 -0
  100. package/dist/tui/views/Events.js +60 -0
  101. package/dist/tui/views/Events.js.map +1 -0
  102. package/dist/tui/views/Overview.d.ts +13 -0
  103. package/dist/tui/views/Overview.d.ts.map +1 -0
  104. package/dist/tui/views/Overview.js +29 -0
  105. package/dist/tui/views/Overview.js.map +1 -0
  106. package/dist/tui/views/Sources.d.ts +10 -0
  107. package/dist/tui/views/Sources.d.ts.map +1 -0
  108. package/dist/tui/views/Sources.js +151 -0
  109. package/dist/tui/views/Sources.js.map +1 -0
  110. package/dist/tui/views/Tunnels.d.ts +10 -0
  111. package/dist/tui/views/Tunnels.d.ts.map +1 -0
  112. package/dist/tui/views/Tunnels.js +283 -0
  113. package/dist/tui/views/Tunnels.js.map +1 -0
  114. package/package.json +62 -0
@@ -0,0 +1,283 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useRef } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import TextInput from 'ink-text-input';
5
+ import Spinner from 'ink-spinner';
6
+ import * as api from '../../lib/api.js';
7
+ import * as config from '../../lib/config.js';
8
+ import { TunnelClient } from '../../lib/tunnel.js';
9
+ function TunnelList({ tunnels, onSelect, onCreate }) {
10
+ const [selectedIndex, setSelectedIndex] = useState(0);
11
+ const items = [
12
+ { id: 'create', name: '+ Create New Tunnel', isAction: true },
13
+ ...tunnels,
14
+ ];
15
+ useInput((input, key) => {
16
+ if (key.upArrow) {
17
+ setSelectedIndex(prev => Math.max(0, prev - 1));
18
+ }
19
+ if (key.downArrow) {
20
+ setSelectedIndex(prev => Math.min(items.length - 1, prev + 1));
21
+ }
22
+ if (key.return) {
23
+ const item = items[selectedIndex];
24
+ if (item.id === 'create') {
25
+ onCreate();
26
+ }
27
+ else {
28
+ onSelect(item.id);
29
+ }
30
+ }
31
+ });
32
+ const getStatusColor = (status) => {
33
+ switch (status) {
34
+ case 'connected': return 'green';
35
+ case 'disconnected': return 'gray';
36
+ case 'error': return 'red';
37
+ default: return 'gray';
38
+ }
39
+ };
40
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Tunnels" }), _jsxs(Text, { dimColor: true, children: [" - ", tunnels.length, " total | \u2191\u2193 navigate, Enter select"] })] }), _jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: items.map((item, index) => (_jsx(Box, { children: _jsxs(Text, { color: index === selectedIndex ? 'cyan' : undefined, bold: index === selectedIndex, inverse: index === selectedIndex, children: [index === selectedIndex ? '▶ ' : ' ', 'isAction' in item ? (_jsx(Text, { color: "green", children: item.name })) : (_jsxs(_Fragment, { children: [_jsx(Text, { children: item.name }), _jsxs(Text, { dimColor: true, children: [" (", item.subdomain, ") "] }), _jsxs(Text, { color: getStatusColor(item.status), children: ["\u25CF ", item.status] }), _jsxs(Text, { dimColor: true, children: [" | ", item.total_requests, " reqs"] })] }))] }) }, item.id))) })] }));
41
+ }
42
+ function TunnelDetail({ tunnelId, tunnels, onBack, onRefresh }) {
43
+ const tunnel = tunnels.find(t => t.id === tunnelId);
44
+ const [action, setAction] = useState('none');
45
+ const [confirmDelete, setConfirmDelete] = useState(false);
46
+ const [message, setMessage] = useState(null);
47
+ // Connect mode states
48
+ const [mode, setMode] = useState('detail');
49
+ const [portInput, setPortInput] = useState('');
50
+ const [connectionStatus, setConnectionStatus] = useState('disconnected');
51
+ const [requestLogs, setRequestLogs] = useState([]);
52
+ const tunnelClientRef = useRef(null);
53
+ const apiUrl = config.getApiUrl();
54
+ // Tunnel URL format: api.hookbase.app/t/{subdomain}
55
+ const tunnelUrl = `${apiUrl}/t`;
56
+ // Cleanup tunnel connection on unmount
57
+ useEffect(() => {
58
+ return () => {
59
+ if (tunnelClientRef.current) {
60
+ tunnelClientRef.current.close();
61
+ }
62
+ };
63
+ }, []);
64
+ const handleConnect = async (port) => {
65
+ if (!tunnel)
66
+ return;
67
+ setMode('connecting');
68
+ setMessage(null);
69
+ try {
70
+ // Regenerate token to get auth credentials for connection
71
+ const result = await api.regenerateTunnelToken(tunnelId);
72
+ if (result.error || !result.data) {
73
+ setMessage(`Error: ${result.error || 'Failed to get tunnel credentials'}`);
74
+ setMode('detail');
75
+ return;
76
+ }
77
+ // Use the wsUrl directly from the API response, or construct it
78
+ const authToken = result.data.auth_token || result.data.authToken;
79
+ const wsUrl = result.data.wsUrl ||
80
+ `${apiUrl.replace('https://', 'wss://').replace('http://', 'ws://')}/tunnels/${tunnel.subdomain}/ws?tunnelId=${tunnelId}&token=${authToken}`;
81
+ const client = new TunnelClient({
82
+ wsUrl,
83
+ localPort: port,
84
+ onConnect: () => {
85
+ setConnectionStatus('connected');
86
+ setMode('connected');
87
+ setMessage('Connected! Forwarding requests...');
88
+ onRefresh();
89
+ },
90
+ onDisconnect: () => {
91
+ setConnectionStatus('disconnected');
92
+ setMessage('Disconnected from tunnel');
93
+ },
94
+ onRequest: (method, path, status, duration) => {
95
+ setRequestLogs(prev => [{
96
+ id: `${Date.now()}-${Math.random()}`,
97
+ method,
98
+ path,
99
+ status,
100
+ duration,
101
+ time: new Date(),
102
+ }, ...prev].slice(0, 50)); // Keep last 50 requests
103
+ },
104
+ onError: (error) => {
105
+ setConnectionStatus('error');
106
+ setMessage(`Error: ${error.message}`);
107
+ },
108
+ });
109
+ tunnelClientRef.current = client;
110
+ await client.connect();
111
+ }
112
+ catch (err) {
113
+ setMessage(`Failed to connect: ${err instanceof Error ? err.message : 'Unknown error'}`);
114
+ setMode('detail');
115
+ }
116
+ };
117
+ const handleDisconnectLocal = () => {
118
+ if (tunnelClientRef.current) {
119
+ tunnelClientRef.current.close();
120
+ tunnelClientRef.current = null;
121
+ }
122
+ setMode('detail');
123
+ setConnectionStatus('disconnected');
124
+ setRequestLogs([]);
125
+ onRefresh();
126
+ };
127
+ useInput(async (input, key) => {
128
+ if (action !== 'none')
129
+ return;
130
+ // In connected mode, only allow disconnect
131
+ if (mode === 'connected') {
132
+ if (key.escape || input === 'q') {
133
+ handleDisconnectLocal();
134
+ }
135
+ return;
136
+ }
137
+ // In port input mode, only handle escape
138
+ if (mode === 'port-input') {
139
+ if (key.escape) {
140
+ setMode('detail');
141
+ setPortInput('');
142
+ }
143
+ return;
144
+ }
145
+ // In connecting mode, do nothing
146
+ if (mode === 'connecting')
147
+ return;
148
+ // Normal detail mode
149
+ if (key.escape || input === 'b') {
150
+ if (confirmDelete) {
151
+ setConfirmDelete(false);
152
+ }
153
+ else {
154
+ onBack();
155
+ }
156
+ }
157
+ if (input === 'c' && !confirmDelete && tunnel?.status !== 'connected') {
158
+ setMode('port-input');
159
+ }
160
+ if (input === 'd' && tunnel?.status === 'connected' && !confirmDelete) {
161
+ setAction('disconnecting');
162
+ try {
163
+ const result = await api.disconnectTunnel(tunnelId);
164
+ if (result.error) {
165
+ setMessage(`Error: ${result.error}`);
166
+ }
167
+ else {
168
+ setMessage('Tunnel disconnected');
169
+ onRefresh();
170
+ }
171
+ }
172
+ catch (err) {
173
+ setMessage('Failed to disconnect');
174
+ }
175
+ setAction('none');
176
+ }
177
+ if (input === 'x' && !confirmDelete) {
178
+ setConfirmDelete(true);
179
+ }
180
+ if (input === 'y' && confirmDelete) {
181
+ setAction('deleting');
182
+ setConfirmDelete(false);
183
+ try {
184
+ const result = await api.deleteTunnel(tunnelId);
185
+ if (result.error) {
186
+ setMessage(`Error: ${result.error}`);
187
+ setAction('none');
188
+ }
189
+ else {
190
+ setMessage('Tunnel deleted');
191
+ setTimeout(() => {
192
+ onRefresh();
193
+ onBack();
194
+ }, 1000);
195
+ }
196
+ }
197
+ catch (err) {
198
+ setMessage('Failed to delete');
199
+ setAction('none');
200
+ }
201
+ }
202
+ if (input === 'n' && confirmDelete) {
203
+ setConfirmDelete(false);
204
+ }
205
+ });
206
+ const handlePortSubmit = () => {
207
+ const port = parseInt(portInput, 10);
208
+ if (isNaN(port) || port < 1 || port > 65535) {
209
+ setMessage('Invalid port number (1-65535)');
210
+ return;
211
+ }
212
+ handleConnect(port);
213
+ };
214
+ if (!tunnel) {
215
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "red", children: ["Tunnel not found: ", tunnelId] }), _jsxs(Text, { dimColor: true, children: ["Available IDs: ", tunnels.map(t => t.id).join(', ') || 'none'] }), _jsx(Text, { dimColor: true, children: "Press Esc to go back" })] }));
216
+ }
217
+ // Connected mode - show request logs
218
+ if (mode === 'connected') {
219
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "green", children: "\u25CF Connected" }), _jsx(Text, { children: " to " }), _jsx(Text, { bold: true, children: tunnel.name }), _jsx(Text, { dimColor: true, children: " - Press Esc or 'q' to disconnect" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { dimColor: true, children: "URL:" }) }), _jsxs(Text, { color: "cyan", children: [tunnelUrl, "/", tunnel.subdomain] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { dimColor: true, children: "Forwarding:" }) }), _jsxs(Text, { children: ["localhost:", portInput] })] })] }), _jsxs(Box, { marginTop: 1, marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Request Log" }), _jsxs(Text, { dimColor: true, children: [" (", requestLogs.length, " requests)"] })] }), _jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, height: 15, children: requestLogs.length === 0 ? (_jsx(Text, { dimColor: true, children: "Waiting for requests..." })) : (requestLogs.slice(0, 12).map(log => (_jsxs(Box, { children: [_jsx(Box, { width: 10, children: _jsx(Text, { dimColor: true, children: log.time.toLocaleTimeString() }) }), _jsx(Box, { width: 8, children: _jsx(Text, { color: "yellow", children: log.method }) }), _jsx(Box, { width: 30, children: _jsxs(Text, { children: [log.path.slice(0, 28), log.path.length > 28 ? '..' : ''] }) }), _jsx(Box, { width: 6, children: _jsx(Text, { color: log.status < 400 ? 'green' : 'red', children: log.status }) }), _jsxs(Text, { dimColor: true, children: [log.duration, "ms"] })] }, log.id)))) })] }));
220
+ }
221
+ // Port input mode
222
+ if (mode === 'port-input') {
223
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Connect to Tunnel" }), _jsx(Text, { dimColor: true, children: " - Press Esc to cancel" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { children: "Tunnel: " }), _jsx(Text, { bold: true, color: "cyan", children: tunnel.name }), _jsxs(Text, { dimColor: true, children: [" (", tunnel.subdomain, ")"] })] }), _jsxs(Box, { children: [_jsx(Text, { children: "Local port: " }), _jsx(TextInput, { value: portInput, onChange: setPortInput, onSubmit: handlePortSubmit, placeholder: "3000" })] }), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: message }) }))] })] }));
224
+ }
225
+ // Connecting mode
226
+ if (mode === 'connecting') {
227
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Connecting..." }) }), _jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: _jsx(Spinner, { type: "dots" }) }), _jsxs(Text, { children: [" Connecting to ", tunnel.name, "..."] })] })] }));
228
+ }
229
+ // Normal detail mode
230
+ const showConnectOption = tunnel.status !== 'connected';
231
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Tunnel Details" }), _jsxs(Text, { dimColor: true, children: [" - Esc: back", showConnectOption ? ' | c: connect' : '', " | d: disconnect | x: delete"] })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "ID:" }) }), _jsx(Text, { children: tunnel.id })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "Name:" }) }), _jsx(Text, { bold: true, children: tunnel.name })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "Subdomain:" }) }), _jsx(Text, { color: "cyan", children: tunnel.subdomain })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "URL:" }) }), _jsxs(Text, { color: "blue", children: [tunnelUrl, "/", tunnel.subdomain] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "Status:" }) }), _jsxs(Text, { color: tunnel.status === 'connected' ? 'green' :
232
+ tunnel.status === 'error' ? 'red' : 'gray', children: ["\u25CF ", tunnel.status] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "Total Requests:" }) }), _jsx(Text, { children: tunnel.total_requests })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { dimColor: true, children: "Last Connected:" }) }), _jsx(Text, { children: tunnel.last_connected_at ? new Date(tunnel.last_connected_at).toLocaleString() : 'Never' })] }), confirmDelete && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "Delete this tunnel?" }), _jsx(Text, { children: "Press 'y' to confirm, 'n' or Esc to cancel" })] })), action !== 'none' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: action === 'disconnecting' ? 'Disconnecting...' : 'Deleting...' }) })), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.startsWith('Error') ? 'red' : 'green', children: message }) }))] }), showConnectOption && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Press 'c' to connect or use: hookbase tunnels connect ", tunnel.id, " ", '<port>'] }) }))] }));
233
+ }
234
+ function CreateTunnel({ onBack, onCreated }) {
235
+ const [step, setStep] = useState('name');
236
+ const [name, setName] = useState('');
237
+ const [error, setError] = useState(null);
238
+ const [createdTunnel, setCreatedTunnel] = useState(null);
239
+ useInput((input, key) => {
240
+ if (key.escape && step !== 'creating') {
241
+ onBack();
242
+ }
243
+ });
244
+ const handleSubmit = async () => {
245
+ if (!name.trim())
246
+ return;
247
+ setStep('creating');
248
+ try {
249
+ const result = await api.createTunnel(name);
250
+ if (result.error) {
251
+ setError(result.error);
252
+ setStep('error');
253
+ }
254
+ else {
255
+ setCreatedTunnel(result.data?.tunnel || null);
256
+ setStep('done');
257
+ setTimeout(() => {
258
+ onCreated();
259
+ onBack();
260
+ }, 2000);
261
+ }
262
+ }
263
+ catch (err) {
264
+ setError(err instanceof Error ? err.message : 'Failed to create tunnel');
265
+ setStep('error');
266
+ }
267
+ };
268
+ const apiUrl = config.getApiUrl();
269
+ // Tunnel URL format: api.hookbase.app/t/{subdomain}
270
+ const tunnelUrl = `${apiUrl}/t`;
271
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Create New Tunnel" }), _jsx(Text, { dimColor: true, children: " - Press Esc to cancel" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, children: [step === 'name' && (_jsxs(Box, { children: [_jsx(Text, { children: "Tunnel name: " }), _jsx(TextInput, { value: name, onChange: setName, onSubmit: handleSubmit, placeholder: "my-dev-tunnel" })] })), step === 'creating' && (_jsx(Text, { color: "yellow", children: "Creating tunnel..." })), step === 'done' && createdTunnel && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "\u2713 Tunnel created successfully!" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "URL: " }), _jsxs(Text, { color: "cyan", children: [tunnelUrl, "/", createdTunnel.subdomain] })] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Connect with: hookbase tunnels connect ", createdTunnel.id, " ", '<port>'] }) })] })), step === 'error' && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "red", children: ["Error: ", error] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Esc to go back" }) })] }))] })] }));
272
+ }
273
+ export function TunnelsView({ tunnels, subView, onNavigate, onRefresh }) {
274
+ if (subView === 'create') {
275
+ return (_jsx(CreateTunnel, { onBack: () => onNavigate(null), onCreated: onRefresh }));
276
+ }
277
+ if (subView && subView.startsWith('detail:')) {
278
+ const tunnelId = subView.replace('detail:', '');
279
+ return (_jsx(TunnelDetail, { tunnelId: tunnelId, tunnels: tunnels, onBack: () => onNavigate(null), onRefresh: onRefresh }));
280
+ }
281
+ return (_jsx(TunnelList, { tunnels: tunnels, onSelect: (id) => onNavigate(`detail:${id}`), onCreate: () => onNavigate('create') }));
282
+ }
283
+ //# sourceMappingURL=Tunnels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tunnels.js","sourceRoot":"","sources":["../../../src/tui/views/Tunnels.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@hookbase/cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for Hookbase - manage webhooks and localhost tunnels",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "hookbase": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "start": "node dist/index.js",
18
+ "lint": "eslint src/**/*.ts",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "webhook",
23
+ "tunnel",
24
+ "localhost",
25
+ "ngrok",
26
+ "cloudflare",
27
+ "hookbase"
28
+ ],
29
+ "author": "Hookbase",
30
+ "license": "MIT",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/hookbase/cli"
34
+ },
35
+ "homepage": "https://hookbase.app",
36
+ "bugs": {
37
+ "url": "https://github.com/hookbase/cli/issues"
38
+ },
39
+ "dependencies": {
40
+ "@inquirer/prompts": "^8.2.0",
41
+ "chalk": "^5.3.0",
42
+ "cli-table3": "^0.6.5",
43
+ "commander": "^12.1.0",
44
+ "conf": "^13.0.1",
45
+ "ink": "^6.6.0",
46
+ "ink-select-input": "^6.2.0",
47
+ "ink-spinner": "^5.0.0",
48
+ "ink-text-input": "^6.0.0",
49
+ "ora": "^8.0.1",
50
+ "react": "^19.2.3",
51
+ "ws": "^8.17.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^20.11.0",
55
+ "@types/react": "^19.2.8",
56
+ "@types/ws": "^8.5.10",
57
+ "typescript": "^5.3.3"
58
+ },
59
+ "engines": {
60
+ "node": ">=18.0.0"
61
+ }
62
+ }