@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.
- package/README.md +107 -0
- package/dist/commands/api-keys.d.ts +15 -0
- package/dist/commands/api-keys.d.ts.map +1 -0
- package/dist/commands/api-keys.js +143 -0
- package/dist/commands/api-keys.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +26 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/deliveries.d.ts +22 -0
- package/dist/commands/deliveries.d.ts.map +1 -0
- package/dist/commands/deliveries.js +223 -0
- package/dist/commands/deliveries.js.map +1 -0
- package/dist/commands/destinations.d.ts +29 -0
- package/dist/commands/destinations.d.ts.map +1 -0
- package/dist/commands/destinations.js +232 -0
- package/dist/commands/destinations.js.map +1 -0
- package/dist/commands/events.d.ts +13 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +192 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/forward.d.ts +2 -0
- package/dist/commands/forward.d.ts.map +1 -0
- package/dist/commands/forward.js +25 -0
- package/dist/commands/forward.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +91 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +12 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +5 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +43 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/routes.d.ts +28 -0
- package/dist/commands/routes.d.ts.map +1 -0
- package/dist/commands/routes.js +225 -0
- package/dist/commands/routes.js.map +1 -0
- package/dist/commands/sources.d.ts +30 -0
- package/dist/commands/sources.d.ts.map +1 -0
- package/dist/commands/sources.js +256 -0
- package/dist/commands/sources.js.map +1 -0
- package/dist/commands/tunnel.d.ts +6 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +150 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/tunnels.d.ts +32 -0
- package/dist/commands/tunnels.d.ts.map +1 -0
- package/dist/commands/tunnels.js +432 -0
- package/dist/commands/tunnels.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +430 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +472 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +480 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +31 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +98 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/logger.d.ts +19 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +90 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/tunnel.d.ts +28 -0
- package/dist/lib/tunnel.d.ts.map +1 -0
- package/dist/lib/tunnel.js +197 -0
- package/dist/lib/tunnel.js.map +1 -0
- package/dist/tui/App.d.ts +2 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +136 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/Dashboard.d.ts +2 -0
- package/dist/tui/Dashboard.d.ts.map +1 -0
- package/dist/tui/Dashboard.js +113 -0
- package/dist/tui/Dashboard.js.map +1 -0
- package/dist/tui/TunnelMonitor.d.ts +2 -0
- package/dist/tui/TunnelMonitor.d.ts.map +1 -0
- package/dist/tui/TunnelMonitor.js +131 -0
- package/dist/tui/TunnelMonitor.js.map +1 -0
- package/dist/tui/components/Box.d.ts +22 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +27 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/views/Analytics.d.ts +6 -0
- package/dist/tui/views/Analytics.d.ts.map +1 -0
- package/dist/tui/views/Analytics.js +104 -0
- package/dist/tui/views/Analytics.js.map +1 -0
- package/dist/tui/views/Destinations.d.ts +10 -0
- package/dist/tui/views/Destinations.d.ts.map +1 -0
- package/dist/tui/views/Destinations.js +156 -0
- package/dist/tui/views/Destinations.js.map +1 -0
- package/dist/tui/views/Events.d.ts +9 -0
- package/dist/tui/views/Events.d.ts.map +1 -0
- package/dist/tui/views/Events.js +60 -0
- package/dist/tui/views/Events.js.map +1 -0
- package/dist/tui/views/Overview.d.ts +13 -0
- package/dist/tui/views/Overview.d.ts.map +1 -0
- package/dist/tui/views/Overview.js +29 -0
- package/dist/tui/views/Overview.js.map +1 -0
- package/dist/tui/views/Sources.d.ts +10 -0
- package/dist/tui/views/Sources.d.ts.map +1 -0
- package/dist/tui/views/Sources.js +151 -0
- package/dist/tui/views/Sources.js.map +1 -0
- package/dist/tui/views/Tunnels.d.ts +10 -0
- package/dist/tui/views/Tunnels.d.ts.map +1 -0
- package/dist/tui/views/Tunnels.js +283 -0
- package/dist/tui/views/Tunnels.js.map +1 -0
- 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
|
+
}
|