@hookbase/cli 2.0.1 → 2.2.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 (73) hide show
  1. package/README.md +3 -3
  2. package/dist/commands/api-keys.d.ts.map +1 -1
  3. package/dist/commands/api-keys.js +3 -3
  4. package/dist/commands/api-keys.js.map +1 -1
  5. package/dist/commands/destinations.d.ts +4 -0
  6. package/dist/commands/destinations.d.ts.map +1 -1
  7. package/dist/commands/destinations.js +8 -1
  8. package/dist/commands/destinations.js.map +1 -1
  9. package/dist/commands/endpoints.d.ts +4 -0
  10. package/dist/commands/endpoints.d.ts.map +1 -1
  11. package/dist/commands/endpoints.js +8 -1
  12. package/dist/commands/endpoints.js.map +1 -1
  13. package/dist/commands/forward.js +3 -3
  14. package/dist/commands/forward.js.map +1 -1
  15. package/dist/commands/groups/inbound.d.ts.map +1 -1
  16. package/dist/commands/groups/inbound.js +4 -0
  17. package/dist/commands/groups/inbound.js.map +1 -1
  18. package/dist/commands/groups/outbound.d.ts.map +1 -1
  19. package/dist/commands/groups/outbound.js +4 -0
  20. package/dist/commands/groups/outbound.js.map +1 -1
  21. package/dist/commands/groups/tools.d.ts.map +1 -1
  22. package/dist/commands/groups/tools.js +9 -1
  23. package/dist/commands/groups/tools.js.map +1 -1
  24. package/dist/commands/trigger.d.ts +8 -0
  25. package/dist/commands/trigger.d.ts.map +1 -0
  26. package/dist/commands/trigger.js +207 -0
  27. package/dist/commands/trigger.js.map +1 -0
  28. package/dist/commands/tunnel.js +2 -2
  29. package/dist/commands/tunnel.js.map +1 -1
  30. package/dist/commands/tunnels.d.ts +7 -0
  31. package/dist/commands/tunnels.d.ts.map +1 -1
  32. package/dist/commands/tunnels.js +154 -1
  33. package/dist/commands/tunnels.js.map +1 -1
  34. package/dist/index.js +10 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/lib/api.d.ts +59 -7
  37. package/dist/lib/api.d.ts.map +1 -1
  38. package/dist/lib/api.js +28 -3
  39. package/dist/lib/api.js.map +1 -1
  40. package/dist/lib/logger.d.ts.map +1 -1
  41. package/dist/lib/logger.js +8 -5
  42. package/dist/lib/logger.js.map +1 -1
  43. package/dist/lib/tunnel.d.ts +14 -0
  44. package/dist/lib/tunnel.d.ts.map +1 -1
  45. package/dist/lib/tunnel.js +51 -1
  46. package/dist/lib/tunnel.js.map +1 -1
  47. package/dist/tui/App.d.ts.map +1 -1
  48. package/dist/tui/App.js +16 -3
  49. package/dist/tui/App.js.map +1 -1
  50. package/dist/tui/Dashboard.d.ts.map +1 -1
  51. package/dist/tui/Dashboard.js +6 -1
  52. package/dist/tui/Dashboard.js.map +1 -1
  53. package/dist/tui/views/Analytics.d.ts.map +1 -1
  54. package/dist/tui/views/Analytics.js +6 -1
  55. package/dist/tui/views/Analytics.js.map +1 -1
  56. package/dist/tui/views/ApiKeys.js +3 -3
  57. package/dist/tui/views/ApiKeys.js.map +1 -1
  58. package/dist/tui/views/Cron.js +1 -1
  59. package/dist/tui/views/Cron.js.map +1 -1
  60. package/dist/tui/views/Destinations.d.ts.map +1 -1
  61. package/dist/tui/views/Destinations.js +166 -12
  62. package/dist/tui/views/Destinations.js.map +1 -1
  63. package/dist/tui/views/Outbound.d.ts.map +1 -1
  64. package/dist/tui/views/Outbound.js +21 -7
  65. package/dist/tui/views/Outbound.js.map +1 -1
  66. package/dist/tui/views/Routes.d.ts.map +1 -1
  67. package/dist/tui/views/Routes.js +4 -3
  68. package/dist/tui/views/Routes.js.map +1 -1
  69. package/dist/tui/views/Sources.js +1 -1
  70. package/dist/tui/views/Sources.js.map +1 -1
  71. package/dist/tui/views/Tunnels.js +1 -1
  72. package/dist/tui/views/Tunnels.js.map +1 -1
  73. package/package.json +1 -1
@@ -32,10 +32,27 @@ function DestinationList({ destinations, onSelect, onCreate }) {
32
32
  }
33
33
  }
34
34
  });
35
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Destinations" }), _jsxs(Text, { dimColor: true, children: [" - ", destinations.length, " total | j/k: navigate | Enter: select | n: new"] })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { borderBottom: true, marginBottom: 0, children: [_jsx(Box, { width: 2, children: _jsx(Text, { children: " " }) }), _jsx(Box, { width: 22, children: _jsx(Text, { bold: true, dimColor: true, children: "Name" }) }), _jsx(Box, { width: 8, children: _jsx(Text, { bold: true, dimColor: true, children: "Method" }) }), _jsx(Box, { width: 44, children: _jsx(Text, { bold: true, dimColor: true, children: "URL" }) }), _jsx(Box, { width: 12, children: _jsx(Text, { bold: true, dimColor: true, children: "Deliveries" }) })] }), destinations.length === 0 && (_jsxs(Box, { paddingY: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "No destinations yet. Press " }), _jsx(Text, { color: "green", children: "n" }), _jsx(Text, { dimColor: true, children: " to create your first destination." })] })), items.map((item, index) => {
35
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Destinations" }), _jsxs(Text, { dimColor: true, children: [" - ", destinations.length, " total | j/k: navigate | Enter: select | n: new"] })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { borderBottom: true, marginBottom: 0, children: [_jsx(Box, { width: 2, children: _jsx(Text, { children: " " }) }), _jsx(Box, { width: 20, children: _jsx(Text, { bold: true, dimColor: true, children: "Name" }) }), _jsx(Box, { width: 7, children: _jsx(Text, { bold: true, dimColor: true, children: "Type" }) }), _jsx(Box, { width: 8, children: _jsx(Text, { bold: true, dimColor: true, children: "Method" }) }), _jsx(Box, { width: 40, children: _jsx(Text, { bold: true, dimColor: true, children: "URL / Bucket" }) }), _jsx(Box, { width: 12, children: _jsx(Text, { bold: true, dimColor: true, children: "Deliveries" }) })] }), destinations.length === 0 && (_jsxs(Box, { paddingY: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "No destinations yet. Press " }), _jsx(Text, { color: "green", children: "n" }), _jsx(Text, { dimColor: true, children: " to create your first destination." })] })), items.map((item, index) => {
36
36
  const isSelected = index === selectedIndex;
37
37
  const isAction = 'isAction' in item;
38
- return (_jsxs(Box, { children: [_jsx(Box, { width: 2, children: _jsx(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: isSelected ? '▶' : ' ' }) }), isAction ? (_jsx(Box, { width: 22, children: _jsx(Text, { color: "green", children: "+ New Destination" }) })) : (_jsxs(_Fragment, { children: [_jsx(Box, { width: 22, children: _jsxs(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: [item.name.slice(0, 20), item.name.length > 20 ? '' : ''] }) }), _jsx(Box, { width: 8, children: _jsx(Text, { color: "yellow", children: item.method || 'POST' }) }), _jsx(Box, { width: 44, children: _jsxs(Text, { color: "blue", children: [item.url.slice(0, 42), item.url.length > 42 ? '…' : ''] }) }), _jsx(Box, { width: 12, children: _jsx(Text, { dimColor: true, children: item.delivery_count ?? item.deliveryCount ?? 0 }) })] }))] }, item.id));
38
+ return (_jsxs(Box, { children: [_jsx(Box, { width: 2, children: _jsx(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: isSelected ? '▶' : ' ' }) }), isAction ? (_jsx(Box, { width: 20, children: _jsx(Text, { color: "green", children: "+ New Destination" }) })) : (_jsxs(_Fragment, { children: [_jsx(Box, { width: 20, children: _jsxs(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: [String(item.name || '').slice(0, 18), String(item.name || '').length > 18 ? '…' : ''] }) }), _jsx(Box, { width: 7, children: (() => {
39
+ const destType = item.type || item.destinationType || 'http';
40
+ const typeColor = destType === 'http' ? 'gray' : destType === 's3' ? 'yellow' : destType === 'r2' ? 'magenta' : destType === 'azure_blob' ? 'cyan' : 'blue';
41
+ return _jsx(Text, { color: typeColor, children: destType.toUpperCase().slice(0, 5) });
42
+ })() }), _jsx(Box, { width: 8, children: _jsx(Text, { color: "yellow", children: item.method || 'POST' }) }), _jsx(Box, { width: 40, children: (() => {
43
+ const destType = item.type || item.destinationType || 'http';
44
+ if (destType !== 'http') {
45
+ try {
46
+ const cfg = JSON.parse(item.config || '{}');
47
+ const display = `${cfg.bucket || '?'}${cfg.prefix ? '/' + cfg.prefix : ''}`;
48
+ return _jsxs(Text, { color: "blue", children: [display.slice(0, 38), display.length > 38 ? '…' : ''] });
49
+ }
50
+ catch {
51
+ return _jsx(Text, { dimColor: true, children: "-" });
52
+ }
53
+ }
54
+ return _jsxs(Text, { color: "blue", children: [item.url.slice(0, 38), item.url.length > 38 ? '…' : ''] });
55
+ })() }), _jsx(Box, { width: 12, children: _jsx(Text, { dimColor: true, children: item.delivery_count ?? item.deliveryCount ?? 0 }) })] }))] }, item.id));
39
56
  })] })] }));
40
57
  }
41
58
  function DestinationDetail({ destId, destinations, onBack, onRefresh }) {
@@ -115,13 +132,59 @@ function DestinationDetail({ destId, destinations, onBack, onRefresh }) {
115
132
  if (!dest) {
116
133
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "red", children: ["Destination not found: ", destId] }), _jsxs(Text, { dimColor: true, children: ["Available IDs: ", destinations.map(d => d.id).join(', ') || 'none'] }), _jsx(Text, { dimColor: true, children: "Press Esc to go back" })] }));
117
134
  }
118
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Destination Details" }), _jsx(Text, { dimColor: true, children: " - Esc: back | t: test | d: delete" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "ID:" }) }), _jsx(Text, { children: dest.id })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Name:" }) }), _jsx(Text, { bold: true, children: dest.name })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Slug:" }) }), _jsx(Text, { children: dest.slug || '-' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "URL:" }) }), _jsx(Text, { color: "blue", children: dest.url })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Method:" }) }), _jsx(Text, { color: "yellow", children: dest.method || 'POST' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Auth Type:" }) }), _jsx(Text, { children: dest.auth_type || dest.authType || 'none' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Status:" }) }), _jsx(Text, { color: (dest.is_active || dest.isActive) ? 'green' : 'red', children: (dest.is_active || dest.isActive) ? 'Active' : 'Inactive' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Deliveries:" }) }), _jsx(Text, { children: dest.delivery_count ?? dest.deliveryCount ?? 0 })] }), testing && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Testing destination..." }) })), testResult && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Test Result:" }), testResult.error ? (_jsxs(Text, { color: "red", children: ["\u2717 Error: ", testResult.error] })) : (_jsxs(Text, { color: testResult.success ? 'green' : 'red', children: [testResult.success ? '✓' : '✗', " Status: ", testResult.status > 0 ? testResult.status : 'N/A', " | Time: ", testResult.time, "ms"] }))] })), confirmDelete && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "Delete this destination?" }), _jsx(Text, { children: "Press 'y' to confirm, 'n' or Esc to cancel" })] })), deleting && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Deleting..." }) })), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.startsWith('Error') ? 'red' : 'green', children: message }) }))] })] }));
135
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Destination Details" }), _jsx(Text, { dimColor: true, children: " - Esc: back | t: test | d: delete" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "ID:" }) }), _jsx(Text, { children: dest.id })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Name:" }) }), _jsx(Text, { bold: true, children: dest.name })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Slug:" }) }), _jsx(Text, { children: dest.slug || '-' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Type:" }) }), _jsx(Text, { color: (() => {
136
+ const t = dest.type || dest.destinationType || 'http';
137
+ return t === 'http' ? 'white' : t === 's3' ? 'yellow' : t === 'r2' ? 'magenta' : t === 'azure_blob' ? 'cyan' : 'blue';
138
+ })(), children: (dest.type || dest.destinationType || 'http').toUpperCase() })] }), (() => {
139
+ const destType = dest.type || dest.destinationType || 'http';
140
+ if (destType !== 'http') {
141
+ try {
142
+ const cfg = JSON.parse(dest.config || '{}');
143
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Bucket:" }) }), _jsx(Text, { color: "blue", children: cfg.bucket || '-' })] }), cfg.region && (_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Region:" }) }), _jsx(Text, { children: cfg.region })] })), cfg.prefix && (_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Prefix:" }) }), _jsx(Text, { children: cfg.prefix })] })), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "File Format:" }) }), _jsx(Text, { children: cfg.fileFormat || 'jsonl' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Partition:" }) }), _jsx(Text, { children: cfg.partitionBy || 'date' })] })] }));
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "URL:" }) }), _jsx(Text, { color: "blue", children: dest.url })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Method:" }) }), _jsx(Text, { color: "yellow", children: dest.method || 'POST' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Auth Type:" }) }), _jsx(Text, { children: dest.auth_type || dest.authType || 'none' })] })] }));
150
+ })(), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Status:" }) }), _jsx(Text, { color: (dest.is_active || dest.isActive) ? 'green' : 'red', children: (dest.is_active || dest.isActive) ? 'Active' : 'Inactive' })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Static IP:" }) }), (() => {
151
+ const staticIp = dest.use_static_ip ?? dest.useStaticIp;
152
+ const enabled = staticIp === 1 || staticIp === true;
153
+ return _jsx(Text, { color: enabled ? 'green' : 'gray', children: enabled ? 'Enabled' : 'Disabled' });
154
+ })()] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Deliveries:" }) }), _jsx(Text, { children: dest.delivery_count ?? dest.deliveryCount ?? 0 })] }), testing && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Testing destination..." }) })), testResult && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Test Result:" }), testResult.error ? (_jsxs(Text, { color: "red", children: ["\u2717 Error: ", testResult.error] })) : (_jsxs(Text, { color: testResult.success ? 'green' : 'red', children: [testResult.success ? '✓' : '✗', " Status: ", testResult.status > 0 ? testResult.status : 'N/A', " | Time: ", testResult.time, "ms"] }))] })), confirmDelete && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "Delete this destination?" }), _jsx(Text, { children: "Press 'y' to confirm, 'n' or Esc to cancel" })] })), deleting && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Deleting..." }) })), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.startsWith('Error') ? 'red' : 'green', children: message }) }))] })] }));
119
155
  }
156
+ // Required config fields per warehouse type
157
+ const WAREHOUSE_FIELDS = {
158
+ s3: ['bucket', 'region', 'accessKeyId', 'secretAccessKey', 'prefix'],
159
+ r2: ['bucket', 'endpoint', 'accessKeyId', 'secretAccessKey', 'prefix'],
160
+ gcs: ['bucket', 'projectId', 'serviceAccountKey', 'prefix'],
161
+ azure_blob: ['accountName', 'accountKey', 'containerName', 'prefix'],
162
+ };
163
+ const FIELD_LABELS = {
164
+ bucket: { label: 'Bucket name', placeholder: 'my-webhook-bucket' },
165
+ region: { label: 'AWS Region', placeholder: 'us-east-1' },
166
+ endpoint: { label: 'S3 API endpoint', placeholder: 'https://<account_id>.r2.cloudflarestorage.com' },
167
+ accessKeyId: { label: 'Access Key ID', placeholder: 'AKIA...' },
168
+ secretAccessKey: { label: 'Secret Access Key', placeholder: '********' },
169
+ projectId: { label: 'GCP Project ID', placeholder: 'my-project-123' },
170
+ serviceAccountKey: { label: 'Service Account Key (JSON)', placeholder: '{"type":"service_account",...}' },
171
+ accountName: { label: 'Storage Account Name', placeholder: 'mystorageaccount' },
172
+ accountKey: { label: 'Storage Account Key', placeholder: '********' },
173
+ containerName: { label: 'Container Name', placeholder: 'webhooks' },
174
+ prefix: { label: 'Key prefix (optional)', placeholder: 'webhooks/production' },
175
+ };
120
176
  function CreateDestination({ onBack, onCreated }) {
121
177
  const [step, setStep] = useState('name');
122
178
  const [name, setName] = useState('');
179
+ const [destType, setDestType] = useState('http');
180
+ // HTTP fields
123
181
  const [url, setUrl] = useState('');
124
182
  const [method, setMethod] = useState('POST');
183
+ // Warehouse config fields
184
+ const [configFields, setConfigFields] = useState({});
185
+ const [currentFieldValue, setCurrentFieldValue] = useState('');
186
+ // Common
187
+ const [useStaticIp, setUseStaticIp] = useState(true);
125
188
  const [error, setError] = useState(null);
126
189
  const [createdDest, setCreatedDest] = useState(null);
127
190
  useInput((input, key) => {
@@ -129,18 +192,76 @@ function CreateDestination({ onBack, onCreated }) {
129
192
  onBack();
130
193
  }
131
194
  });
132
- const handleMethodSelect = async (item) => {
195
+ const isWarehouse = destType !== 'http';
196
+ const handleTypeSelect = (item) => {
197
+ const selected = item.value;
198
+ setDestType(selected);
199
+ if (selected === 'http') {
200
+ setStep('url');
201
+ }
202
+ else {
203
+ // Start the first warehouse config field
204
+ const fields = WAREHOUSE_FIELDS[selected];
205
+ setStep(fields[0]);
206
+ setCurrentFieldValue('');
207
+ }
208
+ };
209
+ const handleMethodSelect = (item) => {
133
210
  setMethod(item.value);
211
+ setStep('staticIp');
212
+ };
213
+ // Advance to the next warehouse config field, or to staticIp/creating
214
+ const advanceWarehouseField = (currentField, value) => {
215
+ // prefix is optional, so allow empty
216
+ if (currentField !== 'prefix' && !value.trim())
217
+ return;
218
+ const updated = { ...configFields, [currentField]: value.trim() };
219
+ setConfigFields(updated);
220
+ setCurrentFieldValue('');
221
+ const fields = WAREHOUSE_FIELDS[destType];
222
+ const currentIndex = fields.indexOf(currentField);
223
+ if (currentIndex < fields.length - 1) {
224
+ setStep(fields[currentIndex + 1]);
225
+ }
226
+ else {
227
+ // Warehouse destinations don't use static IP (they write to object storage)
228
+ setStep('creating');
229
+ doCreate(updated);
230
+ }
231
+ };
232
+ const handleStaticIpSelect = (item) => {
233
+ const staticIp = item.value === 'yes';
234
+ setUseStaticIp(staticIp);
134
235
  setStep('creating');
236
+ doCreate(undefined, staticIp);
237
+ };
238
+ const doCreate = async (warehouseConfig, staticIp) => {
135
239
  try {
136
- const result = await api.createDestination({
240
+ const createData = {
137
241
  name,
138
- url,
139
- method: item.value,
140
- });
242
+ type: destType,
243
+ };
244
+ if (destType === 'http') {
245
+ createData.url = url;
246
+ createData.method = method;
247
+ createData.useStaticIp = staticIp;
248
+ }
249
+ else {
250
+ const cfg = warehouseConfig || configFields;
251
+ // Build config object, filtering out empty optional fields
252
+ const config = {};
253
+ for (const [k, v] of Object.entries(cfg)) {
254
+ if (v)
255
+ config[k] = v;
256
+ }
257
+ config.fileFormat = 'jsonl';
258
+ config.partitionBy = 'date';
259
+ createData.config = config;
260
+ }
261
+ const result = await api.createDestination(createData);
141
262
  if (result.error) {
142
263
  setError(result.error);
143
- setStep('method');
264
+ setStep(isWarehouse ? WAREHOUSE_FIELDS[destType][0] : 'staticIp');
144
265
  }
145
266
  else {
146
267
  setCreatedDest(result.data?.destination || null);
@@ -153,14 +274,47 @@ function CreateDestination({ onBack, onCreated }) {
153
274
  }
154
275
  catch (err) {
155
276
  setError(err instanceof Error ? err.message : 'Failed to create destination');
156
- setStep('method');
277
+ setStep(isWarehouse ? WAREHOUSE_FIELDS[destType][0] : 'staticIp');
157
278
  }
158
279
  };
159
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Create New Destination" }), _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: "Destination name: " }), _jsx(TextInput, { value: name, onChange: setName, onSubmit: () => name.trim() && setStep('url'), placeholder: "My API Endpoint" })] })), step === 'url' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["Name: ", name] }) }), _jsxs(Box, { children: [_jsx(Text, { children: "URL: " }), _jsx(TextInput, { value: url, onChange: setUrl, onSubmit: () => url.trim() && setStep('method'), placeholder: "https://api.example.com/webhook" })] })] })), step === 'method' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["Name: ", name] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["URL: ", url] }) }), _jsx(Text, { children: "Select HTTP method:" }), _jsx(SelectInput, { items: [
280
+ // Summary lines showing what's been entered so far
281
+ const summaryLines = [`Name: ${name}`];
282
+ if (step !== 'name' && step !== 'type') {
283
+ summaryLines.push(`Type: ${destType.toUpperCase()}`);
284
+ }
285
+ if (destType === 'http') {
286
+ if (url)
287
+ summaryLines.push(`URL: ${url}`);
288
+ if (step === 'staticIp' || step === 'creating' || step === 'done')
289
+ summaryLines.push(`Method: ${method}`);
290
+ }
291
+ else {
292
+ // Show warehouse fields filled so far
293
+ for (const [k, v] of Object.entries(configFields)) {
294
+ if (v) {
295
+ const label = FIELD_LABELS[k]?.label || k;
296
+ const display = ['secretAccessKey', 'accountKey', 'serviceAccountKey'].includes(k) ? '••••••••' : v;
297
+ summaryLines.push(`${label}: ${display}`);
298
+ }
299
+ }
300
+ }
301
+ // Determine if current step is a warehouse config field
302
+ const isWarehouseField = Object.values(WAREHOUSE_FIELDS).flat().includes(step);
303
+ const fieldMeta = FIELD_LABELS[step];
304
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Create New Destination" }), _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: "Destination name: " }), _jsx(TextInput, { value: name, onChange: setName, onSubmit: () => name.trim() && setStep('type'), placeholder: "My API Endpoint" })] })), step === 'type' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["Name: ", name] }) }), _jsx(Text, { children: "Select destination type:" }), _jsx(SelectInput, { items: [
305
+ { label: 'HTTP Endpoint', value: 'http' },
306
+ { label: 'Amazon S3', value: 's3' },
307
+ { label: 'Cloudflare R2', value: 'r2' },
308
+ { label: 'Google Cloud Storage', value: 'gcs' },
309
+ { label: 'Azure Blob Storage', value: 'azure_blob' },
310
+ ], onSelect: handleTypeSelect })] })), step === 'url' && (_jsxs(Box, { flexDirection: "column", children: [summaryLines.map((line, i) => (_jsx(Box, { marginBottom: i === summaryLines.length - 1 ? 1 : 0, children: _jsx(Text, { dimColor: true, children: line }) }, i))), _jsxs(Box, { children: [_jsx(Text, { children: "URL: " }), _jsx(TextInput, { value: url, onChange: setUrl, onSubmit: () => url.trim() && setStep('method'), placeholder: "https://api.example.com/webhook" })] })] })), step === 'method' && (_jsxs(Box, { flexDirection: "column", children: [summaryLines.map((line, i) => (_jsx(Box, { marginBottom: i === summaryLines.length - 1 ? 1 : 0, children: _jsx(Text, { dimColor: true, children: line }) }, i))), _jsx(Text, { children: "Select HTTP method:" }), _jsx(SelectInput, { items: [
160
311
  { label: 'POST (Recommended)', value: 'POST' },
161
312
  { label: 'PUT', value: 'PUT' },
162
313
  { label: 'PATCH', value: 'PATCH' },
163
- ], onSelect: handleMethodSelect })] })), step === 'creating' && (_jsx(Text, { color: "yellow", children: "Creating destination..." })), step === 'done' && createdDest && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "\u2713 Destination created successfully!" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "ID: " }), _jsx(Text, { children: createdDest.id })] })] })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) }))] })] }));
314
+ ], onSelect: handleMethodSelect })] })), isWarehouseField && fieldMeta && (_jsxs(Box, { flexDirection: "column", children: [summaryLines.map((line, i) => (_jsx(Box, { marginBottom: i === summaryLines.length - 1 ? 1 : 0, children: _jsx(Text, { dimColor: true, children: line }) }, i))), _jsxs(Box, { children: [_jsxs(Text, { children: [fieldMeta.label, ": "] }), _jsx(TextInput, { value: currentFieldValue, onChange: setCurrentFieldValue, onSubmit: (val) => advanceWarehouseField(step, val), placeholder: fieldMeta.placeholder })] })] })), step === 'staticIp' && (_jsxs(Box, { flexDirection: "column", children: [summaryLines.map((line, i) => (_jsx(Box, { marginBottom: i === summaryLines.length - 1 ? 1 : 0, children: _jsx(Text, { dimColor: true, children: line }) }, i))), _jsx(Text, { children: "Enable Static IP delivery? (Pro/Business plans)" }), _jsx(SelectInput, { items: [
315
+ { label: 'Yes - Route via static IP (Recommended)', value: 'yes' },
316
+ { label: 'No - Use direct delivery', value: 'no' },
317
+ ], onSelect: handleStaticIpSelect })] })), step === 'creating' && (_jsx(Text, { color: "yellow", children: "Creating destination..." })), step === 'done' && createdDest && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "\u2713 Destination created successfully!" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "ID: " }), _jsx(Text, { children: createdDest.id })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Type: " }), _jsx(Text, { children: destType.toUpperCase() })] })] })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) }))] })] }));
164
318
  }
165
319
  export function DestinationsView({ destinations, subView, onNavigate, onRefresh }) {
166
320
  if (subView === 'create') {
@@ -1 +1 @@
1
- {"version":3,"file":"Destinations.js","sourceRoot":"","sources":["../../../src/tui/views/Destinations.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Destinations.js","sourceRoot":"","sources":["../../../src/tui/views/Destinations.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Outbound.d.ts","sourceRoot":"","sources":["../../../src/tui/views/Outbound.tsx"],"names":[],"mappings":"AAOA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AA8iBD,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAykBjF"}
1
+ {"version":3,"file":"Outbound.d.ts","sourceRoot":"","sources":["../../../src/tui/views/Outbound.tsx"],"names":[],"mappings":"AAOA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AA0kBD,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA6kBjF"}
@@ -44,6 +44,7 @@ function CreateEndpoint({ applications, onBack, onCreated }) {
44
44
  const [step, setStep] = useState('app');
45
45
  const [selectedAppId, setSelectedAppId] = useState('');
46
46
  const [url, setUrl] = useState('');
47
+ const [useStaticIp, setUseStaticIp] = useState(true);
47
48
  const [error, setError] = useState(null);
48
49
  const [createdEndpoint, setCreatedEndpoint] = useState(null);
49
50
  const [secret, setSecret] = useState(null);
@@ -60,18 +61,19 @@ function CreateEndpoint({ applications, onBack, onCreated }) {
60
61
  setSelectedAppId(item.value);
61
62
  setStep('url');
62
63
  };
63
- const handleCreate = async () => {
64
- if (!url.trim())
65
- return;
64
+ const handleStaticIpSelect = async (item) => {
65
+ const staticIp = item.value === 'yes';
66
+ setUseStaticIp(staticIp);
66
67
  setStep('creating');
67
68
  try {
68
69
  const result = await api.createWebhookEndpoint({
69
70
  applicationId: selectedAppId,
70
71
  url: url.trim(),
72
+ useStaticIp: staticIp,
71
73
  });
72
74
  if (result.error) {
73
75
  setError(result.error);
74
- setStep('url');
76
+ setStep('staticIp');
75
77
  }
76
78
  else {
77
79
  const resData = result.data?.data || result.data;
@@ -83,10 +85,13 @@ function CreateEndpoint({ applications, onBack, onCreated }) {
83
85
  }
84
86
  catch (err) {
85
87
  setError(err instanceof Error ? err.message : 'Failed to create');
86
- setStep('url');
88
+ setStep('staticIp');
87
89
  }
88
90
  };
89
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Create Endpoint" }), _jsx(Text, { dimColor: true, children: " - Esc to cancel" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, children: [step === 'app' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Select application:" }), appItems.length === 0 ? (_jsx(Text, { color: "yellow", children: "No applications. Create an application first." })) : (_jsx(SelectInput, { items: appItems, onSelect: handleAppSelect }))] })), step === 'url' && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["App: ", applications.find(a => a.id === selectedAppId)?.name] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "Endpoint URL: " }), _jsx(TextInput, { value: url, onChange: setUrl, onSubmit: handleCreate, placeholder: "https://api.example.com/webhook" })] })] })), step === 'creating' && (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { children: " Creating endpoint..." })] })), step === 'done' && createdEndpoint && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", bold: true, children: "Endpoint created!" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "ID: " }), _jsx(Text, { children: createdEndpoint.id })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "URL: " }), _jsx(Text, { color: "blue", children: createdEndpoint.url })] }), secret && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "yellow", bold: true, children: "Save this secret - it will not be shown again:" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "cyan", bold: true, children: secret }) })] }))] })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) }))] })] }));
91
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Create Endpoint" }), _jsx(Text, { dimColor: true, children: " - Esc to cancel" })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, children: [step === 'app' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Select application:" }), appItems.length === 0 ? (_jsx(Text, { color: "yellow", children: "No applications. Create an application first." })) : (_jsx(SelectInput, { items: appItems, onSelect: handleAppSelect }))] })), step === 'url' && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["App: ", applications.find(a => a.id === selectedAppId)?.name] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "Endpoint URL: " }), _jsx(TextInput, { value: url, onChange: setUrl, onSubmit: () => url.trim() && setStep('staticIp'), placeholder: "https://api.example.com/webhook" })] })] })), step === 'staticIp' && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["App: ", applications.find(a => a.id === selectedAppId)?.name] }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["URL: ", url] }) }), _jsx(Text, { children: "Enable Static IP delivery? (Pro/Business plans)" }), _jsx(SelectInput, { items: [
92
+ { label: 'Yes - Route via static IP (Recommended)', value: 'yes' },
93
+ { label: 'No - Use direct delivery', value: 'no' },
94
+ ], onSelect: handleStaticIpSelect })] })), step === 'creating' && (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { children: " Creating endpoint..." })] })), step === 'done' && createdEndpoint && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", bold: true, children: "Endpoint created!" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "ID: " }), _jsx(Text, { children: createdEndpoint.id })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "URL: " }), _jsx(Text, { color: "blue", children: createdEndpoint.url })] }), secret && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "yellow", bold: true, children: "Save this secret - it will not be shown again:" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "cyan", bold: true, children: secret }) })] }))] })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) }))] })] }));
90
95
  }
91
96
  // Helper to get active status from app (API uses isDisabled, not is_active)
92
97
  function getAppIsActive(app) {
@@ -264,10 +269,15 @@ function EndpointDetail({ endpointId, endpoints, onBack, onRefresh }) {
264
269
  const state = ep.circuit_state || ep.circuitState;
265
270
  const color = state === 'closed' ? 'green' : state === 'open' ? 'red' : 'yellow';
266
271
  return _jsx(Text, { color: color, children: state || 'unknown' });
267
- })()] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Event Types:" }) }), _jsx(Text, { children: eventTypes })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Timeout:" }) }), _jsxs(Text, { children: [ep.timeout_ms || ep.timeoutMs || 30000, "ms"] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Messages:" }) }), _jsx(Text, { children: ep.message_count ?? ep.messageCount ?? 0 })] }), (ep.success_rate !== undefined || ep.successRate !== undefined) && (_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Success Rate:" }) }), _jsxs(Text, { children: [((ep.success_rate ?? ep.successRate) * 100).toFixed(1), "%"] })] })), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Created:" }) }), _jsx(Text, { dimColor: true, children: getDate(ep, 'createdAt', 'created_at') })] }), testing && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Testing..."] }) })), testResult && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Test Result:" }), testResult.error ? (_jsxs(Text, { color: "red", children: ["Error: ", testResult.error] })) : (_jsxs(Text, { color: testResult.success ? 'green' : 'red', children: [testResult.success ? 'Passed' : 'Failed', " - Status: ", testResult.status > 0 ? testResult.status : 'N/A', " | Time: ", testResult.time, "ms"] }))] })), confirmDelete && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "Delete this endpoint?" }), _jsx(Text, { children: "Press 'y' to confirm, 'n' or Esc to cancel" })] })), deleting && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Deleting..."] }) })), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.startsWith('Error') ? 'red' : 'green', children: message }) }))] })] }));
272
+ })()] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Event Types:" }) }), _jsx(Text, { children: eventTypes })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Timeout:" }) }), _jsxs(Text, { children: [ep.timeout_ms || ep.timeoutMs || 30000, "ms"] })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Static IP:" }) }), (() => {
273
+ const staticIp = ep.use_static_ip ?? ep.useStaticIp;
274
+ const enabled = staticIp === 1 || staticIp === true;
275
+ return _jsx(Text, { color: enabled ? 'green' : 'gray', children: enabled ? 'Enabled' : 'Disabled' });
276
+ })()] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Messages:" }) }), _jsx(Text, { children: ep.message_count ?? ep.messageCount ?? 0 })] }), (ep.success_rate !== undefined || ep.successRate !== undefined) && (_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Success Rate:" }) }), _jsxs(Text, { children: [((ep.success_rate ?? ep.successRate) * 100).toFixed(1), "%"] })] })), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { dimColor: true, children: "Created:" }) }), _jsx(Text, { dimColor: true, children: getDate(ep, 'createdAt', 'created_at') })] }), testing && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Testing..."] }) })), testResult && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Test Result:" }), testResult.error ? (_jsxs(Text, { color: "red", children: ["Error: ", testResult.error] })) : (_jsxs(Text, { color: testResult.success ? 'green' : 'red', children: [testResult.success ? 'Passed' : 'Failed', " - Status: ", testResult.status > 0 ? testResult.status : 'N/A', " | Time: ", testResult.time, "ms"] }))] })), confirmDelete && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "Delete this endpoint?" }), _jsx(Text, { children: "Press 'y' to confirm, 'n' or Esc to cancel" })] })), deleting && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Deleting..."] }) })), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.startsWith('Error') ? 'red' : 'green', children: message }) }))] })] }));
268
277
  }
269
278
  export function OutboundView({ subView, onNavigate, onRefresh }) {
270
279
  const [activeSubTab, setActiveSubTab] = useState('apps');
280
+ const lastRefreshRef = useRef(0);
271
281
  const [selectedIndex, setSelectedIndex] = useState(0);
272
282
  const [applications, setApplications] = useState([]);
273
283
  const [endpoints, setEndpoints] = useState([]);
@@ -378,6 +388,10 @@ export function OutboundView({ subView, onNavigate, onRefresh }) {
378
388
  }
379
389
  // Refresh
380
390
  if (input === 'r') {
391
+ const now = Date.now();
392
+ if (now - lastRefreshRef.current < 30000)
393
+ return;
394
+ lastRefreshRef.current = now;
381
395
  fetchData();
382
396
  }
383
397
  // Test endpoint (offset by 1 for create item)