lobstercage-cli 0.1.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 +64 -0
- package/dist/commands/auth.d.ts +39 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +393 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/billing.d.ts +11 -0
- package/dist/commands/billing.d.ts.map +1 -0
- package/dist/commands/billing.js +181 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/cages.d.ts +87 -0
- package/dist/commands/cages.d.ts.map +1 -0
- package/dist/commands/cages.js +603 -0
- package/dist/commands/cages.js.map +1 -0
- package/dist/commands/env.d.ts +42 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +287 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/exec.d.ts +12 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +127 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/tunnel.d.ts +29 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +232 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +138 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +96 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +348 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +63 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +193 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/docker.d.ts +52 -0
- package/dist/lib/docker.d.ts.map +1 -0
- package/dist/lib/docker.js +210 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/error-handler.d.ts +30 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +113 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/output.d.ts +71 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +237 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/utils.d.ts +17 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +71 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/types/index.d.ts +158 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tunnel Commands
|
|
4
|
+
*
|
|
5
|
+
* tunnel, ssh
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.tunnelHandler = tunnelHandler;
|
|
45
|
+
exports.sshHandler = sshHandler;
|
|
46
|
+
exports.createTunnelCommands = createTunnelCommands;
|
|
47
|
+
const ora_1 = __importDefault(require("ora"));
|
|
48
|
+
const ws_1 = __importDefault(require("ws"));
|
|
49
|
+
const net = __importStar(require("net"));
|
|
50
|
+
const api = __importStar(require("../lib/api"));
|
|
51
|
+
const output = __importStar(require("../lib/output"));
|
|
52
|
+
const utils_1 = require("../lib/utils");
|
|
53
|
+
const error_handler_1 = require("../lib/error-handler");
|
|
54
|
+
/**
|
|
55
|
+
* Creates a WebSocket tunnel connection
|
|
56
|
+
*/
|
|
57
|
+
async function createTunnel(wsUrl, token, localPort, remotePort) {
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
// Create local TCP server
|
|
60
|
+
const server = net.createServer((socket) => {
|
|
61
|
+
// Connect to WebSocket tunnel
|
|
62
|
+
const ws = new ws_1.default(wsUrl, {
|
|
63
|
+
headers: {
|
|
64
|
+
'Authorization': `Bearer ${token}`,
|
|
65
|
+
'X-Remote-Port': remotePort.toString(),
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
let connected = false;
|
|
69
|
+
ws.on('open', () => {
|
|
70
|
+
connected = true;
|
|
71
|
+
output.info(`Connection established to remote port ${remotePort}`);
|
|
72
|
+
});
|
|
73
|
+
ws.on('message', (data) => {
|
|
74
|
+
if (socket.writable) {
|
|
75
|
+
socket.write(data);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
ws.on('close', () => {
|
|
79
|
+
if (!socket.destroyed) {
|
|
80
|
+
socket.end();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
ws.on('error', (err) => {
|
|
84
|
+
output.error(`WebSocket error: ${err.message}`);
|
|
85
|
+
if (!socket.destroyed) {
|
|
86
|
+
socket.destroy();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
socket.on('data', (data) => {
|
|
90
|
+
if (ws.readyState === ws_1.default.OPEN) {
|
|
91
|
+
ws.send(data);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
socket.on('close', () => {
|
|
95
|
+
if (ws.readyState === ws_1.default.OPEN) {
|
|
96
|
+
ws.close();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
socket.on('error', (err) => {
|
|
100
|
+
if (err.code !== 'ECONNRESET') {
|
|
101
|
+
output.error(`Socket error: ${err.message}`);
|
|
102
|
+
}
|
|
103
|
+
if (ws.readyState === ws_1.default.OPEN) {
|
|
104
|
+
ws.close();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
server.on('error', (err) => {
|
|
109
|
+
output.error(`Server error: ${err.message}`);
|
|
110
|
+
reject(err);
|
|
111
|
+
});
|
|
112
|
+
server.listen(localPort, '127.0.0.1', () => {
|
|
113
|
+
output.success(`Tunnel listening on localhost:${localPort} -> cage:${remotePort}`);
|
|
114
|
+
output.info('Press Ctrl+C to close the tunnel');
|
|
115
|
+
// Don't resolve - keep running until Ctrl+C
|
|
116
|
+
});
|
|
117
|
+
// Handle graceful shutdown
|
|
118
|
+
process.on('SIGINT', () => {
|
|
119
|
+
output.info('\nClosing tunnel...');
|
|
120
|
+
server.close(() => {
|
|
121
|
+
resolve();
|
|
122
|
+
process.exit(0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Tunnel command handler
|
|
129
|
+
*/
|
|
130
|
+
async function tunnelHandler(nameOrId, options) {
|
|
131
|
+
// Determine tunnel type and ports
|
|
132
|
+
let tunnelType = options.ssh ? 'ssh' : 'port';
|
|
133
|
+
let remotePort = options.ssh ? 22 : parseInt(options.port || '80', 10);
|
|
134
|
+
let localPort = options.localPort ? parseInt(options.localPort, 10) : remotePort;
|
|
135
|
+
if (tunnelType === 'port' && !options.port) {
|
|
136
|
+
output.error('Remote port is required. Use --port <port> or --ssh');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
if (isNaN(remotePort) || remotePort < 1 || remotePort > 65535) {
|
|
140
|
+
output.error('Invalid remote port number');
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
if (isNaN(localPort) || localPort < 1 || localPort > 65535) {
|
|
144
|
+
output.error('Invalid local port number');
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
const spinner = (0, ora_1.default)('Initiating tunnel...').start();
|
|
148
|
+
try {
|
|
149
|
+
(0, utils_1.requireAuth)();
|
|
150
|
+
const cageId = await (0, utils_1.resolveCageId)(nameOrId);
|
|
151
|
+
// Get tunnel token
|
|
152
|
+
const tunnel = await api.initiateTunnel(cageId, {
|
|
153
|
+
type: tunnelType,
|
|
154
|
+
port: remotePort,
|
|
155
|
+
});
|
|
156
|
+
spinner.stop();
|
|
157
|
+
if (options.json) {
|
|
158
|
+
output.json({
|
|
159
|
+
localPort,
|
|
160
|
+
remotePort,
|
|
161
|
+
wsUrl: tunnel.wsUrl,
|
|
162
|
+
expiresAt: tunnel.expiresAt,
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Establish the tunnel
|
|
167
|
+
await createTunnel(tunnel.wsUrl, tunnel.token, localPort, remotePort);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
(0, error_handler_1.handleError)(err, { spinner, json: options.json, context: 'initiating tunnel' });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* SSH command handler
|
|
175
|
+
*
|
|
176
|
+
* This is a convenience wrapper around tunnel --ssh
|
|
177
|
+
*/
|
|
178
|
+
async function sshHandler(nameOrId, options) {
|
|
179
|
+
const localPort = options.localPort ? parseInt(options.localPort, 10) : 2222;
|
|
180
|
+
if (isNaN(localPort) || localPort < 1 || localPort > 65535) {
|
|
181
|
+
output.error('Invalid local port number');
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const spinner = (0, ora_1.default)('Setting up SSH tunnel...').start();
|
|
185
|
+
try {
|
|
186
|
+
(0, utils_1.requireAuth)();
|
|
187
|
+
const cageId = await (0, utils_1.resolveCageId)(nameOrId);
|
|
188
|
+
// Get SSH tunnel token
|
|
189
|
+
const tunnel = await api.initiateTunnel(cageId, {
|
|
190
|
+
type: 'ssh',
|
|
191
|
+
});
|
|
192
|
+
spinner.stop();
|
|
193
|
+
if (options.json) {
|
|
194
|
+
output.json({
|
|
195
|
+
command: `ssh -p ${localPort} root@localhost`,
|
|
196
|
+
localPort,
|
|
197
|
+
remotePort: 22,
|
|
198
|
+
wsUrl: tunnel.wsUrl,
|
|
199
|
+
expiresAt: tunnel.expiresAt,
|
|
200
|
+
});
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
output.info(`SSH tunnel will be available at localhost:${localPort}`);
|
|
204
|
+
output.info(`Connect with: ssh -p ${localPort} root@localhost`);
|
|
205
|
+
console.log();
|
|
206
|
+
// Establish the SSH tunnel
|
|
207
|
+
await createTunnel(tunnel.wsUrl, tunnel.token, localPort, 22);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
(0, error_handler_1.handleError)(err, { spinner, json: options.json, context: 'setting up SSH tunnel' });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create tunnel commands
|
|
215
|
+
*/
|
|
216
|
+
function createTunnelCommands(program) {
|
|
217
|
+
program
|
|
218
|
+
.command('tunnel <name>')
|
|
219
|
+
.description('Create a secure tunnel to a cage')
|
|
220
|
+
.option('-p, --port <port>', 'Remote port to tunnel')
|
|
221
|
+
.option('-l, --local-port <port>', 'Local port to listen on (default: same as remote)')
|
|
222
|
+
.option('--ssh', 'Shorthand for --port 22')
|
|
223
|
+
.option('--json', 'Output tunnel info as JSON (don\'t start tunnel)')
|
|
224
|
+
.action(tunnelHandler);
|
|
225
|
+
program
|
|
226
|
+
.command('ssh <name>')
|
|
227
|
+
.description('SSH into a cage (shorthand for tunnel --ssh)')
|
|
228
|
+
.option('-l, --local-port <port>', 'Local port to listen on (default: 2222)')
|
|
229
|
+
.option('--json', 'Output tunnel info as JSON')
|
|
230
|
+
.action(sshHandler);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* LobsterCage CLI
|
|
4
|
+
*
|
|
5
|
+
* Secure AI Agent Sandboxes
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* lobster login Login to LobsterCage
|
|
9
|
+
* lobster login --browser Login via browser OAuth
|
|
10
|
+
* lobster deploy <name> Create and start a new cage
|
|
11
|
+
* lobster list List all cages
|
|
12
|
+
* lobster status <name> Get cage status
|
|
13
|
+
* lobster start <name> Start a stopped cage
|
|
14
|
+
* lobster stop <name> Stop a running cage
|
|
15
|
+
* lobster hibernate <name> Hibernate a cage (preserves state)
|
|
16
|
+
* lobster wake <name> Wake a hibernated cage
|
|
17
|
+
* lobster destroy <name> Delete a cage permanently
|
|
18
|
+
* lobster logs <name> View cage logs
|
|
19
|
+
* lobster env list <cage> List environment variables
|
|
20
|
+
* lobster env set <cage> KEY=VAL Set environment variables
|
|
21
|
+
* lobster env get <cage> <name> Get environment variable value
|
|
22
|
+
* lobster env delete <cage> <name> Delete environment variable
|
|
23
|
+
* lobster env scan <cage> Scan for security issues
|
|
24
|
+
* lobster tunnel <name> --port 80 Tunnel to a port
|
|
25
|
+
* lobster ssh <name> SSH into a cage
|
|
26
|
+
* lobster billing View billing status
|
|
27
|
+
* lobster billing portal Open billing portal
|
|
28
|
+
* lobster upgrade Upgrade to Pro plan
|
|
29
|
+
*/
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* LobsterCage CLI
|
|
5
|
+
*
|
|
6
|
+
* Secure AI Agent Sandboxes
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* lobster login Login to LobsterCage
|
|
10
|
+
* lobster login --browser Login via browser OAuth
|
|
11
|
+
* lobster deploy <name> Create and start a new cage
|
|
12
|
+
* lobster list List all cages
|
|
13
|
+
* lobster status <name> Get cage status
|
|
14
|
+
* lobster start <name> Start a stopped cage
|
|
15
|
+
* lobster stop <name> Stop a running cage
|
|
16
|
+
* lobster hibernate <name> Hibernate a cage (preserves state)
|
|
17
|
+
* lobster wake <name> Wake a hibernated cage
|
|
18
|
+
* lobster destroy <name> Delete a cage permanently
|
|
19
|
+
* lobster logs <name> View cage logs
|
|
20
|
+
* lobster env list <cage> List environment variables
|
|
21
|
+
* lobster env set <cage> KEY=VAL Set environment variables
|
|
22
|
+
* lobster env get <cage> <name> Get environment variable value
|
|
23
|
+
* lobster env delete <cage> <name> Delete environment variable
|
|
24
|
+
* lobster env scan <cage> Scan for security issues
|
|
25
|
+
* lobster tunnel <name> --port 80 Tunnel to a port
|
|
26
|
+
* lobster ssh <name> SSH into a cage
|
|
27
|
+
* lobster billing View billing status
|
|
28
|
+
* lobster billing portal Open billing portal
|
|
29
|
+
* lobster upgrade Upgrade to Pro plan
|
|
30
|
+
*/
|
|
31
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
34
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
35
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
36
|
+
}
|
|
37
|
+
Object.defineProperty(o, k2, desc);
|
|
38
|
+
}) : (function(o, m, k, k2) {
|
|
39
|
+
if (k2 === undefined) k2 = k;
|
|
40
|
+
o[k2] = m[k];
|
|
41
|
+
}));
|
|
42
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
43
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
44
|
+
}) : function(o, v) {
|
|
45
|
+
o["default"] = v;
|
|
46
|
+
});
|
|
47
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
48
|
+
var ownKeys = function(o) {
|
|
49
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
50
|
+
var ar = [];
|
|
51
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
52
|
+
return ar;
|
|
53
|
+
};
|
|
54
|
+
return ownKeys(o);
|
|
55
|
+
};
|
|
56
|
+
return function (mod) {
|
|
57
|
+
if (mod && mod.__esModule) return mod;
|
|
58
|
+
var result = {};
|
|
59
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
60
|
+
__setModuleDefault(result, mod);
|
|
61
|
+
return result;
|
|
62
|
+
};
|
|
63
|
+
})();
|
|
64
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
+
const commander_1 = require("commander");
|
|
66
|
+
const auth_1 = require("./commands/auth");
|
|
67
|
+
const cages_1 = require("./commands/cages");
|
|
68
|
+
const env_1 = require("./commands/env");
|
|
69
|
+
const tunnel_1 = require("./commands/tunnel");
|
|
70
|
+
const exec_1 = require("./commands/exec");
|
|
71
|
+
const billing_1 = require("./commands/billing");
|
|
72
|
+
const output = __importStar(require("./lib/output"));
|
|
73
|
+
const api_1 = require("./lib/api");
|
|
74
|
+
const error_handler_1 = require("./lib/error-handler");
|
|
75
|
+
// Read version from package.json at build time (resolveJsonModule)
|
|
76
|
+
const package_json_1 = require("../package.json");
|
|
77
|
+
// Create the main program
|
|
78
|
+
const program = new commander_1.Command();
|
|
79
|
+
program
|
|
80
|
+
.name('lobster')
|
|
81
|
+
.description('LobsterCage CLI - Secure AI Agent Sandboxes')
|
|
82
|
+
.version(package_json_1.version)
|
|
83
|
+
.enablePositionalOptions()
|
|
84
|
+
.option('--api-url <url>', 'Override API URL')
|
|
85
|
+
.option('--debug', 'Show detailed error information and stack traces')
|
|
86
|
+
.hook('preAction', (thisCommand) => {
|
|
87
|
+
const options = thisCommand.opts();
|
|
88
|
+
if (options.apiUrl) {
|
|
89
|
+
// Set custom API URL
|
|
90
|
+
const { setApiUrl } = require('./lib/config');
|
|
91
|
+
setApiUrl(options.apiUrl);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Register all command modules
|
|
95
|
+
(0, auth_1.createAuthCommands)(program);
|
|
96
|
+
(0, cages_1.createCageCommands)(program);
|
|
97
|
+
(0, env_1.createEnvCommands)(program);
|
|
98
|
+
(0, tunnel_1.createTunnelCommands)(program);
|
|
99
|
+
(0, exec_1.createExecCommand)(program);
|
|
100
|
+
(0, billing_1.createBillingCommands)(program);
|
|
101
|
+
// Global error handling
|
|
102
|
+
process.on('uncaughtException', (err) => {
|
|
103
|
+
if (err instanceof api_1.ApiClientError) {
|
|
104
|
+
output.error(err.message);
|
|
105
|
+
if (err.code === 'NETWORK_ERROR') {
|
|
106
|
+
output.info('Check your internet connection and try again.');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
output.error(`Unexpected error: ${err.message}`);
|
|
111
|
+
}
|
|
112
|
+
if ((0, error_handler_1.isDebug)() && err.stack) {
|
|
113
|
+
console.error(err.stack);
|
|
114
|
+
}
|
|
115
|
+
process.exit(1);
|
|
116
|
+
});
|
|
117
|
+
process.on('unhandledRejection', (reason) => {
|
|
118
|
+
if (reason instanceof api_1.ApiClientError) {
|
|
119
|
+
output.error(reason.message);
|
|
120
|
+
}
|
|
121
|
+
else if (reason instanceof Error) {
|
|
122
|
+
output.error(`Unexpected error: ${reason.message}`);
|
|
123
|
+
if ((0, error_handler_1.isDebug)() && reason.stack) {
|
|
124
|
+
console.error(reason.stack);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
output.error(`Unexpected error: ${reason}`);
|
|
129
|
+
}
|
|
130
|
+
process.exit(1);
|
|
131
|
+
});
|
|
132
|
+
// Parse and execute
|
|
133
|
+
program.parse(process.argv);
|
|
134
|
+
// Show help if no command provided
|
|
135
|
+
if (process.argv.length === 2) {
|
|
136
|
+
program.help();
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LobsterCage API Client
|
|
3
|
+
*
|
|
4
|
+
* Handles all HTTP communication with the LobsterCage API.
|
|
5
|
+
* Includes automatic token refresh and error handling.
|
|
6
|
+
*/
|
|
7
|
+
import { AxiosInstance } from 'axios';
|
|
8
|
+
import type { AuthResponse, Cage, CreateCageRequest, UpdateCageRequest, EnvVar, SetEnvRequest, SecurityWarning, TunnelRequest, TunnelResponse, LogEntry, Account, Usage, ApiKey, ApiKeyCreated, BillingStatus } from '../types';
|
|
9
|
+
/**
|
|
10
|
+
* Custom error class for API errors
|
|
11
|
+
*/
|
|
12
|
+
export declare class ApiClientError extends Error {
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly statusCode: number;
|
|
15
|
+
readonly details?: Record<string, unknown>;
|
|
16
|
+
constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates and configures the API client
|
|
20
|
+
*/
|
|
21
|
+
export declare function createApiClient(): AxiosInstance;
|
|
22
|
+
/**
|
|
23
|
+
* Gets the API client instance (creates if needed)
|
|
24
|
+
*/
|
|
25
|
+
export declare function getApiClient(): AxiosInstance;
|
|
26
|
+
/**
|
|
27
|
+
* Resets the API client (useful for testing or after URL change)
|
|
28
|
+
*/
|
|
29
|
+
export declare function resetApiClient(): void;
|
|
30
|
+
export declare function register(email: string, password: string, name?: string): Promise<AuthResponse>;
|
|
31
|
+
export declare function login(email: string, password: string): Promise<AuthResponse>;
|
|
32
|
+
export declare function refreshToken(token: string): Promise<AuthResponse>;
|
|
33
|
+
export declare function logout(): Promise<void>;
|
|
34
|
+
export declare function listApiKeys(): Promise<ApiKey[]>;
|
|
35
|
+
export declare function createApiKey(name: string, scopes?: string[], expiresAt?: string): Promise<ApiKeyCreated>;
|
|
36
|
+
export declare function revokeApiKey(keyId: string): Promise<void>;
|
|
37
|
+
export interface ListCagesOptions {
|
|
38
|
+
status?: string;
|
|
39
|
+
limit?: number;
|
|
40
|
+
cursor?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ListCagesResponse {
|
|
43
|
+
cages: Cage[];
|
|
44
|
+
nextCursor?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function listCages(options?: ListCagesOptions): Promise<ListCagesResponse>;
|
|
47
|
+
export declare function getCage(cageId: string): Promise<Cage>;
|
|
48
|
+
export declare function createCage(request: CreateCageRequest): Promise<Cage>;
|
|
49
|
+
export declare function updateCage(cageId: string, request: UpdateCageRequest): Promise<Cage>;
|
|
50
|
+
export declare function deleteCage(cageId: string): Promise<void>;
|
|
51
|
+
export declare function startCage(cageId: string): Promise<Cage>;
|
|
52
|
+
export declare function stopCage(cageId: string, force?: boolean): Promise<Cage>;
|
|
53
|
+
export declare function restartCage(cageId: string): Promise<Cage>;
|
|
54
|
+
export declare function hibernateCage(cageId: string): Promise<Cage>;
|
|
55
|
+
export declare function wakeCage(cageId: string): Promise<Cage>;
|
|
56
|
+
export interface GetLogsOptions {
|
|
57
|
+
since?: string;
|
|
58
|
+
until?: string;
|
|
59
|
+
tail?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface GetLogsResponse {
|
|
62
|
+
logs: LogEntry[];
|
|
63
|
+
nextToken?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function getCageLogs(cageId: string, options?: GetLogsOptions): Promise<GetLogsResponse>;
|
|
66
|
+
export interface ExecResult {
|
|
67
|
+
exitCode: number;
|
|
68
|
+
stdout: string;
|
|
69
|
+
stderr: string;
|
|
70
|
+
}
|
|
71
|
+
export declare function execInCage(cageId: string, command: string[]): Promise<ExecResult>;
|
|
72
|
+
export declare function listEnvVars(cageId: string): Promise<EnvVar[]>;
|
|
73
|
+
export interface SetEnvResponse {
|
|
74
|
+
variables: EnvVar[];
|
|
75
|
+
securityWarnings?: SecurityWarning[];
|
|
76
|
+
}
|
|
77
|
+
export declare function setEnvVars(cageId: string, request: SetEnvRequest): Promise<SetEnvResponse>;
|
|
78
|
+
export declare function getEnvVar(cageId: string, varName: string): Promise<{
|
|
79
|
+
name: string;
|
|
80
|
+
value: string;
|
|
81
|
+
}>;
|
|
82
|
+
export declare function deleteEnvVar(cageId: string, varName: string): Promise<void>;
|
|
83
|
+
export declare function scanEnvVars(cageId: string): Promise<{
|
|
84
|
+
warnings: SecurityWarning[];
|
|
85
|
+
}>;
|
|
86
|
+
export declare function initiateTunnel(cageId: string, request: TunnelRequest): Promise<TunnelResponse>;
|
|
87
|
+
export declare function getAccount(): Promise<Account>;
|
|
88
|
+
export declare function getUsage(period?: 'day' | 'week' | 'month'): Promise<Usage>;
|
|
89
|
+
export declare function getBillingStatus(): Promise<BillingStatus>;
|
|
90
|
+
export declare function createCheckoutSession(successUrl: string, cancelUrl: string): Promise<{
|
|
91
|
+
url: string;
|
|
92
|
+
}>;
|
|
93
|
+
export declare function createPortalSession(returnUrl: string): Promise<{
|
|
94
|
+
url: string;
|
|
95
|
+
}>;
|
|
96
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|