@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,232 @@
1
+ import { input, confirm, select } from '@inquirer/prompts';
2
+ import * as api from '../lib/api.js';
3
+ import * as config from '../lib/config.js';
4
+ import * as logger from '../lib/logger.js';
5
+ function requireAuth() {
6
+ if (!config.isAuthenticated()) {
7
+ logger.error('Not logged in. Run "hookbase login" first.');
8
+ process.exit(1);
9
+ }
10
+ return true;
11
+ }
12
+ export async function destinationsListCommand(options) {
13
+ requireAuth();
14
+ const spinner = logger.spinner('Fetching destinations...');
15
+ const result = await api.getDestinations();
16
+ if (result.error) {
17
+ spinner.fail('Failed to fetch destinations');
18
+ logger.error(result.error);
19
+ return;
20
+ }
21
+ spinner.stop();
22
+ const destinations = result.data?.destinations || [];
23
+ if (options.json) {
24
+ console.log(JSON.stringify(destinations, null, 2));
25
+ return;
26
+ }
27
+ if (destinations.length === 0) {
28
+ logger.info('No destinations found');
29
+ logger.dim('Create one with "hookbase destinations create"');
30
+ return;
31
+ }
32
+ logger.table(['ID', 'Name', 'URL', 'Method', 'Status', 'Deliveries'], destinations.map(d => [
33
+ d.id.slice(0, 8) + '...',
34
+ d.name,
35
+ d.url.length > 40 ? d.url.slice(0, 37) + '...' : d.url,
36
+ d.method || 'POST',
37
+ d.is_active ? logger.green('active') : logger.dimText('inactive'),
38
+ String(d.delivery_count || 0),
39
+ ]));
40
+ }
41
+ export async function destinationsCreateCommand(options) {
42
+ requireAuth();
43
+ let name = options.name;
44
+ let url = options.url;
45
+ let method = options.method;
46
+ // Interactive mode
47
+ if (!name || !url) {
48
+ name = name || await input({
49
+ message: 'Destination name:',
50
+ validate: (value) => value.length > 0 || 'Name is required',
51
+ });
52
+ url = url || await input({
53
+ message: 'Destination URL:',
54
+ validate: (value) => {
55
+ try {
56
+ new URL(value);
57
+ return true;
58
+ }
59
+ catch {
60
+ return 'Please enter a valid URL';
61
+ }
62
+ },
63
+ });
64
+ method = method || await select({
65
+ message: 'HTTP method:',
66
+ choices: [
67
+ { name: 'POST (Recommended)', value: 'POST' },
68
+ { name: 'PUT', value: 'PUT' },
69
+ { name: 'PATCH', value: 'PATCH' },
70
+ ],
71
+ default: 'POST',
72
+ });
73
+ }
74
+ if (!options.yes && !options.name) {
75
+ const confirmed = await confirm({
76
+ message: `Create destination "${name}" pointing to ${url}?`,
77
+ default: true,
78
+ });
79
+ if (!confirmed) {
80
+ logger.info('Cancelled');
81
+ return;
82
+ }
83
+ }
84
+ const spinner = logger.spinner('Creating destination...');
85
+ const result = await api.createDestination({
86
+ name: name,
87
+ url: url,
88
+ method: method || 'POST',
89
+ });
90
+ if (result.error) {
91
+ spinner.fail('Failed to create destination');
92
+ logger.error(result.error);
93
+ return;
94
+ }
95
+ spinner.succeed('Destination created');
96
+ if (options.json) {
97
+ console.log(JSON.stringify(result.data?.destination, null, 2));
98
+ return;
99
+ }
100
+ const dest = result.data?.destination;
101
+ if (dest) {
102
+ logger.log('');
103
+ logger.box('Destination Created', [
104
+ `ID: ${dest.id}`,
105
+ `Name: ${dest.name}`,
106
+ `URL: ${dest.url}`,
107
+ `Method: ${dest.method}`,
108
+ ].join('\n'));
109
+ }
110
+ }
111
+ export async function destinationsGetCommand(destId, options) {
112
+ requireAuth();
113
+ const spinner = logger.spinner('Fetching destination...');
114
+ const result = await api.getDestination(destId);
115
+ if (result.error) {
116
+ spinner.fail('Failed to fetch destination');
117
+ logger.error(result.error);
118
+ return;
119
+ }
120
+ spinner.stop();
121
+ const dest = result.data?.destination;
122
+ if (options.json) {
123
+ console.log(JSON.stringify(dest, null, 2));
124
+ return;
125
+ }
126
+ if (!dest) {
127
+ logger.error('Destination not found');
128
+ return;
129
+ }
130
+ logger.log('');
131
+ logger.log(logger.bold('Destination Details'));
132
+ logger.log('');
133
+ logger.log(`ID: ${dest.id}`);
134
+ logger.log(`Name: ${dest.name}`);
135
+ logger.log(`Slug: ${dest.slug}`);
136
+ logger.log(`URL: ${dest.url}`);
137
+ logger.log(`Method: ${dest.method}`);
138
+ logger.log(`Auth Type: ${dest.auth_type}`);
139
+ logger.log(`Status: ${dest.is_active ? logger.green('active') : logger.red('inactive')}`);
140
+ logger.log(`Timeout: ${dest.timeout_ms || 30000}ms`);
141
+ if (dest.headers && Object.keys(dest.headers).length > 0) {
142
+ logger.log(`Headers:`);
143
+ for (const [key, value] of Object.entries(dest.headers)) {
144
+ logger.log(` ${key}: ${value}`);
145
+ }
146
+ }
147
+ logger.log('');
148
+ }
149
+ export async function destinationsUpdateCommand(destId, options) {
150
+ requireAuth();
151
+ const updateData = {};
152
+ if (options.name)
153
+ updateData.name = options.name;
154
+ if (options.url)
155
+ updateData.url = options.url;
156
+ if (options.method)
157
+ updateData.method = options.method;
158
+ if (options.active)
159
+ updateData.isActive = true;
160
+ if (options.inactive)
161
+ updateData.isActive = false;
162
+ if (Object.keys(updateData).length === 0) {
163
+ logger.error('No updates specified. Use --name, --url, --method, --active, or --inactive');
164
+ return;
165
+ }
166
+ const spinner = logger.spinner('Updating destination...');
167
+ const result = await api.updateDestination(destId, updateData);
168
+ if (result.error) {
169
+ spinner.fail('Failed to update destination');
170
+ logger.error(result.error);
171
+ return;
172
+ }
173
+ spinner.succeed('Destination updated');
174
+ if (options.json) {
175
+ console.log(JSON.stringify(result.data?.destination, null, 2));
176
+ }
177
+ }
178
+ export async function destinationsDeleteCommand(destId, options) {
179
+ requireAuth();
180
+ if (!options.yes) {
181
+ const confirmed = await confirm({
182
+ message: `Are you sure you want to delete destination ${destId}? This cannot be undone.`,
183
+ default: false,
184
+ });
185
+ if (!confirmed) {
186
+ logger.info('Cancelled');
187
+ return;
188
+ }
189
+ }
190
+ const spinner = logger.spinner('Deleting destination...');
191
+ const result = await api.deleteDestination(destId);
192
+ if (result.error) {
193
+ spinner.fail('Failed to delete destination');
194
+ logger.error(result.error);
195
+ return;
196
+ }
197
+ spinner.succeed('Destination deleted');
198
+ if (options.json) {
199
+ console.log(JSON.stringify({ success: true, destId }, null, 2));
200
+ }
201
+ }
202
+ export async function destinationsTestCommand(destId, options) {
203
+ requireAuth();
204
+ const spinner = logger.spinner('Testing destination...');
205
+ const result = await api.testDestination(destId);
206
+ if (result.error) {
207
+ spinner.fail('Test failed');
208
+ logger.error(result.error);
209
+ return;
210
+ }
211
+ const testResult = result.data;
212
+ if (options.json) {
213
+ console.log(JSON.stringify(testResult, null, 2));
214
+ return;
215
+ }
216
+ if (testResult?.success) {
217
+ spinner.succeed('Test successful');
218
+ logger.log('');
219
+ logger.log(`Status Code: ${logger.green(String(testResult.statusCode))}`);
220
+ logger.log(`Response Time: ${testResult.responseTime}ms`);
221
+ }
222
+ else {
223
+ spinner.fail('Test failed');
224
+ logger.log('');
225
+ logger.log(`Status Code: ${logger.red(String(testResult?.statusCode || 'N/A'))}`);
226
+ logger.log(`Response Time: ${testResult?.responseTime || 'N/A'}ms`);
227
+ if (testResult?.error) {
228
+ logger.log(`Error: ${testResult.error}`);
229
+ }
230
+ }
231
+ }
232
+ //# sourceMappingURL=destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../../src/commands/destinations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function eventsListCommand(options: {
2
+ limit?: string;
3
+ source?: string;
4
+ status?: string;
5
+ json?: boolean;
6
+ }): Promise<void>;
7
+ export declare function eventsGetCommand(eventId: string, options: {
8
+ json?: boolean;
9
+ }): Promise<void>;
10
+ export declare function eventsFollowCommand(options: {
11
+ source?: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AAkCA,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAmEf;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
@@ -0,0 +1,192 @@
1
+ import * as api from '../lib/api.js';
2
+ import * as config from '../lib/config.js';
3
+ import * as logger from '../lib/logger.js';
4
+ function requireAuth() {
5
+ if (!config.isAuthenticated()) {
6
+ logger.error('Not logged in. Run "hookbase login" first.');
7
+ process.exit(1);
8
+ }
9
+ return true;
10
+ }
11
+ function formatDate(dateStr) {
12
+ const date = new Date(dateStr);
13
+ return date.toLocaleString();
14
+ }
15
+ function formatStatus(status) {
16
+ switch (status) {
17
+ case 'delivered':
18
+ return logger.green('delivered');
19
+ case 'failed':
20
+ return logger.red('failed');
21
+ case 'pending':
22
+ return logger.yellow('pending');
23
+ case 'partial':
24
+ return logger.yellow('partial');
25
+ case 'no_routes':
26
+ return logger.dimText('no routes');
27
+ default:
28
+ return logger.dimText(status || 'unknown');
29
+ }
30
+ }
31
+ export async function eventsListCommand(options) {
32
+ requireAuth();
33
+ const spinner = logger.spinner('Fetching events...');
34
+ const result = await api.getEvents({
35
+ limit: options.limit ? parseInt(options.limit, 10) : 50,
36
+ sourceId: options.source,
37
+ status: options.status,
38
+ });
39
+ if (result.error) {
40
+ spinner.fail('Failed to fetch events');
41
+ logger.error(result.error);
42
+ return;
43
+ }
44
+ spinner.stop();
45
+ const events = result.data?.events || [];
46
+ if (options.json) {
47
+ console.log(JSON.stringify(events, null, 2));
48
+ return;
49
+ }
50
+ if (events.length === 0) {
51
+ logger.info('No events found');
52
+ return;
53
+ }
54
+ logger.table(['ID', 'Source', 'Type', 'Status', 'Received'], events.map(e => [
55
+ e.id.slice(0, 8) + '...',
56
+ e.source_name || e.source_slug || e.source_id.slice(0, 8) + '...',
57
+ e.event_type || e.method || '-',
58
+ formatStatus(e.status),
59
+ formatDate(e.received_at),
60
+ ]));
61
+ logger.log('');
62
+ logger.dim(`Showing ${events.length} of ${result.data?.total || events.length} events`);
63
+ }
64
+ export async function eventsGetCommand(eventId, options) {
65
+ requireAuth();
66
+ const spinner = logger.spinner('Fetching event...');
67
+ const result = await api.getEvent(eventId);
68
+ if (result.error) {
69
+ spinner.fail('Failed to fetch event');
70
+ logger.error(result.error);
71
+ return;
72
+ }
73
+ spinner.stop();
74
+ const event = result.data?.event;
75
+ if (options.json) {
76
+ console.log(JSON.stringify(event, null, 2));
77
+ return;
78
+ }
79
+ if (!event) {
80
+ logger.error('Event not found');
81
+ return;
82
+ }
83
+ logger.log('');
84
+ logger.log(logger.bold('Event Details'));
85
+ logger.log('');
86
+ logger.log(`ID: ${event.id}`);
87
+ logger.log(`Source: ${event.source_name || event.source_id}`);
88
+ logger.log(`Type: ${event.event_type || '-'}`);
89
+ logger.log(`Method: ${event.method || '-'}`);
90
+ logger.log(`Path: ${event.path || '/'}`);
91
+ logger.log(`Status: ${formatStatus(event.status)}`);
92
+ logger.log(`Size: ${event.payload_size || 0} bytes`);
93
+ logger.log(`Signature: ${event.signature_valid === true ? logger.green('valid') : event.signature_valid === false ? logger.red('invalid') : logger.dimText('not verified')}`);
94
+ logger.log(`Received: ${formatDate(event.received_at)}`);
95
+ if (event.headers && Object.keys(event.headers).length > 0) {
96
+ logger.log('');
97
+ logger.log(logger.bold('Headers:'));
98
+ for (const [key, value] of Object.entries(event.headers)) {
99
+ logger.log(` ${key}: ${value}`);
100
+ }
101
+ }
102
+ if (event.payload) {
103
+ logger.log('');
104
+ logger.log(logger.bold('Payload:'));
105
+ logger.log(JSON.stringify(event.payload, null, 2));
106
+ }
107
+ if (event.deliveries && event.deliveries.length > 0) {
108
+ logger.log('');
109
+ logger.log(logger.bold('Deliveries:'));
110
+ logger.table(['ID', 'Destination', 'Status', 'Response', 'Time'], event.deliveries.map(d => [
111
+ d.id.slice(0, 8) + '...',
112
+ d.destination_name || d.destination_id.slice(0, 8) + '...',
113
+ d.status === 'success' ? logger.green(d.status) : d.status === 'failed' ? logger.red(d.status) : logger.yellow(d.status),
114
+ d.response_status ? String(d.response_status) : '-',
115
+ d.response_time_ms ? `${d.response_time_ms}ms` : '-',
116
+ ]));
117
+ }
118
+ }
119
+ export async function eventsFollowCommand(options) {
120
+ requireAuth();
121
+ const org = config.getCurrentOrg();
122
+ if (!org) {
123
+ logger.error('No organization selected');
124
+ return;
125
+ }
126
+ logger.info('Connecting to event stream...');
127
+ logger.dim('Press Ctrl+C to stop');
128
+ logger.log('');
129
+ const apiUrl = config.getApiUrl();
130
+ const token = config.getAuthToken();
131
+ // Build SSE URL
132
+ let sseUrl = `${apiUrl}/api/organizations/${org.id}/realtime/events`;
133
+ if (options.source) {
134
+ sseUrl += `?sourceId=${options.source}`;
135
+ }
136
+ try {
137
+ const response = await fetch(sseUrl, {
138
+ headers: {
139
+ 'Authorization': `Bearer ${token}`,
140
+ 'Accept': 'text/event-stream',
141
+ },
142
+ });
143
+ if (!response.ok) {
144
+ logger.error(`Failed to connect: ${response.statusText}`);
145
+ return;
146
+ }
147
+ if (!response.body) {
148
+ logger.error('No response body');
149
+ return;
150
+ }
151
+ const reader = response.body.getReader();
152
+ const decoder = new TextDecoder();
153
+ logger.success('Connected! Waiting for events...');
154
+ logger.log('');
155
+ let buffer = '';
156
+ while (true) {
157
+ const { done, value } = await reader.read();
158
+ if (done)
159
+ break;
160
+ buffer += decoder.decode(value, { stream: true });
161
+ const lines = buffer.split('\n');
162
+ buffer = lines.pop() || '';
163
+ for (const line of lines) {
164
+ if (line.startsWith('data: ')) {
165
+ try {
166
+ const data = JSON.parse(line.slice(6));
167
+ if (data.type === 'event' && data.event) {
168
+ const e = data.event;
169
+ const time = new Date().toLocaleTimeString();
170
+ const status = formatStatus(e.status);
171
+ logger.log(`${logger.dimText(time)} ${logger.cyan(e.source_name || e.source_slug || 'unknown')} ` +
172
+ `${e.event_type || e.method || '-'} ${status}`);
173
+ }
174
+ }
175
+ catch {
176
+ // Ignore parse errors
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ catch (error) {
183
+ if (error instanceof Error && error.name === 'AbortError') {
184
+ logger.log('');
185
+ logger.info('Stream closed');
186
+ }
187
+ else {
188
+ logger.error(`Connection error: ${error instanceof Error ? error.message : 'Unknown error'}`);
189
+ }
190
+ }
191
+ }
192
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,SAAS,WAAW;IAClB,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrC;YACE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAKvC;IACC,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,QAAQ,EAAE,OAAO,CAAC,MAAM;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAK,CACV,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACd,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;QACxB,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;QACjE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;QAC/B,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;KAC1B,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,OAA2B;IAE3B,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAEjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC9K,MAAM,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CACV,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;YACxB,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;YAC1D,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YACxH,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG;YACnD,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,GAAG;SACrD,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAEzC;IACC,WAAW,EAAE,CAAC;IAEd,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IAEpC,gBAAgB;IAChB,IAAI,MAAM,GAAG,GAAG,MAAM,sBAAsB,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACnC,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,QAAQ,EAAE,mBAAmB;aAC9B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,sBAAsB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAElC,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;4BACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;4BACrB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;4BAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;4BACtC,MAAM,CAAC,GAAG,CACR,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,GAAG;gCACtF,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAC/C,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,sBAAsB;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function forwardCommand(url: string): Promise<void>;
2
+ //# sourceMappingURL=forward.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forward.d.ts","sourceRoot":"","sources":["../../src/commands/forward.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/D"}
@@ -0,0 +1,25 @@
1
+ import * as config from '../lib/config.js';
2
+ import * as logger from '../lib/logger.js';
3
+ export async function forwardCommand(url) {
4
+ if (!config.isAuthenticated()) {
5
+ logger.error('Not logged in. Run "webhookrelay login" first.');
6
+ process.exit(1);
7
+ }
8
+ // Parse URL to extract port
9
+ try {
10
+ const parsedUrl = new URL(url);
11
+ const port = parsedUrl.port || (parsedUrl.protocol === 'https:' ? '443' : '80');
12
+ logger.info(`Quick forwarding is a shortcut for creating a tunnel.`);
13
+ logger.log('');
14
+ logger.log(`Run the following command instead:`);
15
+ logger.log('');
16
+ logger.log(` webhookrelay tunnel ${port}`);
17
+ logger.log('');
18
+ logger.dim('This will create a tunnel to forward webhooks to your local server.');
19
+ }
20
+ catch {
21
+ logger.error('Invalid URL format');
22
+ logger.dim('Example: webhookrelay forward http://localhost:3000');
23
+ }
24
+ }
25
+ //# sourceMappingURL=forward.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forward.js","sourceRoot":"","sources":["../../src/commands/forward.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEhF,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loginCommand(): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAwCA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DlD"}
@@ -0,0 +1,91 @@
1
+ import * as api from '../lib/api.js';
2
+ import * as config from '../lib/config.js';
3
+ import * as logger from '../lib/logger.js';
4
+ function readHiddenInput(prompt) {
5
+ return new Promise((resolve) => {
6
+ process.stdout.write(prompt);
7
+ let input = '';
8
+ process.stdin.setRawMode(true);
9
+ process.stdin.resume();
10
+ process.stdin.setEncoding('utf8');
11
+ const onData = (char) => {
12
+ if (char === '\n' || char === '\r') {
13
+ process.stdin.setRawMode(false);
14
+ process.stdin.pause();
15
+ process.stdin.removeListener('data', onData);
16
+ console.log();
17
+ resolve(input);
18
+ }
19
+ else if (char === '\u0003') {
20
+ // Ctrl+C
21
+ process.stdin.setRawMode(false);
22
+ process.exit();
23
+ }
24
+ else if (char === '\u007F' || char === '\b') {
25
+ // Backspace
26
+ if (input.length > 0) {
27
+ input = input.slice(0, -1);
28
+ process.stdout.write('\b \b');
29
+ }
30
+ }
31
+ else {
32
+ input += char;
33
+ process.stdout.write('*');
34
+ }
35
+ };
36
+ process.stdin.on('data', onData);
37
+ });
38
+ }
39
+ export async function loginCommand() {
40
+ // Check if already logged in
41
+ if (config.isAuthenticated()) {
42
+ const user = config.getCurrentUser();
43
+ logger.info(`Already logged in as ${user?.email}`);
44
+ logger.info('Run "hookbase logout" to switch accounts');
45
+ return;
46
+ }
47
+ try {
48
+ logger.log('');
49
+ logger.log(logger.bold(' Hookbase CLI Login'));
50
+ logger.log('');
51
+ logger.log(' Enter your API key from: https://www.hookbase.app/settings');
52
+ logger.log('');
53
+ const apiKey = await readHiddenInput('API Key: ');
54
+ if (!apiKey || !apiKey.trim()) {
55
+ logger.error('API key is required');
56
+ return;
57
+ }
58
+ const spinner = logger.spinner('Verifying API key...');
59
+ // Verify the API key by calling /auth/me
60
+ const result = await api.verifyApiKey(apiKey.trim());
61
+ if (result.error || !result.data) {
62
+ spinner.fail('Invalid API key');
63
+ logger.error(result.error || 'Could not verify API key');
64
+ return;
65
+ }
66
+ const { user, organizations } = result.data;
67
+ // Save credentials
68
+ config.setAuth(apiKey.trim(), user.id, user.email, user.displayName);
69
+ // Set first organization as default
70
+ if (organizations.length > 0) {
71
+ const org = organizations[0];
72
+ config.setCurrentOrg(org.id, org.slug);
73
+ }
74
+ spinner.succeed(`Logged in as ${user.email}`);
75
+ // Show organizations
76
+ if (organizations.length > 0) {
77
+ logger.log('');
78
+ logger.info('Your organizations:');
79
+ for (const org of organizations) {
80
+ const current = org.id === config.getCurrentOrg()?.id ? logger.green(' (current)') : '';
81
+ logger.log(` • ${org.name} (${org.slug})${current}`);
82
+ }
83
+ }
84
+ logger.log('');
85
+ logger.dim('Configuration saved to: ' + config.getConfigPath());
86
+ }
87
+ catch (err) {
88
+ logger.error(`Login failed: ${err instanceof Error ? err.message : String(err)}`);
89
+ }
90
+ }
91
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logoutCommand(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAUnD"}
@@ -0,0 +1,12 @@
1
+ import * as config from '../lib/config.js';
2
+ import * as logger from '../lib/logger.js';
3
+ export async function logoutCommand() {
4
+ if (!config.isAuthenticated()) {
5
+ logger.info('Not logged in');
6
+ return;
7
+ }
8
+ const user = config.getCurrentUser();
9
+ config.clearAuth();
10
+ logger.success(`Logged out from ${user?.email}`);
11
+ }
12
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,SAAS,EAAE,CAAC;IAEnB,MAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function logsCommand(options: {
2
+ limit?: string;
3
+ follow?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD9F"}