termify-agent 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.
@@ -0,0 +1,30 @@
1
+ import { machineIdSync } from 'node-machine-id';
2
+ import os from 'os';
3
+ import crypto from 'crypto';
4
+ /**
5
+ * Get a unique machine identifier
6
+ * Uses node-machine-id with fallback to hostname-based hash
7
+ */
8
+ export function getMachineId() {
9
+ try {
10
+ return machineIdSync(true); // true = use original ID, no hash
11
+ }
12
+ catch {
13
+ // Fallback: generate ID from hostname + username + platform
14
+ const fallbackData = `${os.hostname()}-${os.userInfo().username}-${os.platform()}`;
15
+ return crypto.createHash('sha256').update(fallbackData).digest('hex').substring(0, 32);
16
+ }
17
+ }
18
+ /**
19
+ * Get system information for agent registration
20
+ */
21
+ export function getSystemInfo() {
22
+ return {
23
+ os: os.platform(),
24
+ hostname: os.hostname(),
25
+ arch: os.arch(),
26
+ platform: `${os.platform()} ${os.release()}`,
27
+ username: os.userInfo().username,
28
+ };
29
+ }
30
+ //# sourceMappingURL=machine-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../../src/utils/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAO3B,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;QACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;QACf,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { EventEmitter } from 'events';
2
+ type AgentToServerMessage = {
3
+ type: 'agent.auth';
4
+ accessToken: string;
5
+ version: string;
6
+ machineId: string;
7
+ os: string;
8
+ hostname: string;
9
+ arch: string;
10
+ } | {
11
+ type: 'agent.terminal.output';
12
+ terminalId: string;
13
+ data: string;
14
+ } | {
15
+ type: 'agent.terminal.status';
16
+ terminalId: string;
17
+ status: 'RUNNING' | 'STOPPED' | 'CRASHED';
18
+ error?: string;
19
+ } | {
20
+ type: 'agent.terminal.cwd';
21
+ terminalId: string;
22
+ cwd: string;
23
+ } | {
24
+ type: 'agent.terminal.working';
25
+ terminalId: string;
26
+ isWorking: boolean;
27
+ } | {
28
+ type: 'agent.terminal.exit';
29
+ terminalId: string;
30
+ exitCode: number;
31
+ } | {
32
+ type: 'agent.ping';
33
+ };
34
+ export interface WSClientEvents {
35
+ connected: (agentId: string, agentName: string) => void;
36
+ disconnected: (reason: string) => void;
37
+ authFailed: (error: string) => void;
38
+ terminalCreate: (terminalId: string, cols: number, rows: number, options: {
39
+ cwd?: string;
40
+ shell?: string;
41
+ env?: Record<string, string>;
42
+ }) => void;
43
+ terminalInput: (terminalId: string, data: string) => void;
44
+ terminalResize: (terminalId: string, cols: number, rows: number) => void;
45
+ terminalStop: (terminalId: string) => void;
46
+ }
47
+ /**
48
+ * WebSocket client for connecting to Termify server
49
+ */
50
+ export declare class WSClient extends EventEmitter {
51
+ private ws;
52
+ private pingInterval;
53
+ private pongTimeout;
54
+ private reconnectTimeout;
55
+ private isConnected;
56
+ private shouldReconnect;
57
+ private reconnectAttempts;
58
+ private maxReconnectAttempts;
59
+ /**
60
+ * Connect to the Termify server
61
+ */
62
+ connect(): void;
63
+ private doConnect;
64
+ /**
65
+ * Send authentication message
66
+ */
67
+ private authenticate;
68
+ /**
69
+ * Handle incoming message from server
70
+ */
71
+ private handleMessage;
72
+ /**
73
+ * Handle connection close
74
+ */
75
+ private handleClose;
76
+ /**
77
+ * Schedule a reconnection attempt
78
+ */
79
+ private scheduleReconnect;
80
+ /**
81
+ * Start ping interval for keepalive
82
+ */
83
+ private startPingInterval;
84
+ /**
85
+ * Stop ping interval
86
+ */
87
+ private stopPingInterval;
88
+ /**
89
+ * Send ping message
90
+ */
91
+ private sendPing;
92
+ /**
93
+ * Handle pong response
94
+ */
95
+ private handlePong;
96
+ /**
97
+ * Send a message to the server
98
+ */
99
+ send(message: AgentToServerMessage): boolean;
100
+ /**
101
+ * Send terminal output to server
102
+ */
103
+ sendTerminalOutput(terminalId: string, data: string): void;
104
+ /**
105
+ * Send terminal status update
106
+ */
107
+ sendTerminalStatus(terminalId: string, status: 'RUNNING' | 'STOPPED' | 'CRASHED', error?: string): void;
108
+ /**
109
+ * Send terminal CWD update
110
+ */
111
+ sendTerminalCwd(terminalId: string, cwd: string): void;
112
+ /**
113
+ * Send terminal working state
114
+ */
115
+ sendTerminalWorking(terminalId: string, isWorking: boolean): void;
116
+ /**
117
+ * Send terminal exit notification
118
+ */
119
+ sendTerminalExit(terminalId: string, exitCode: number): void;
120
+ /**
121
+ * Disconnect from the server
122
+ */
123
+ disconnect(): void;
124
+ /**
125
+ * Check if connected
126
+ */
127
+ get connected(): boolean;
128
+ }
129
+ export {};
130
+ //# sourceMappingURL=ws-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import WebSocket from 'ws';
2
+ import { EventEmitter } from 'events';
3
+ import { getConfig, setLastConnected } from './config.js';
4
+ import { getMachineId, getSystemInfo } from './utils/machine-id.js';
5
+ import { logger } from './utils/logger.js';
6
+ const VERSION = '1.0.0';
7
+ const PING_INTERVAL = 30000; // 30 seconds
8
+ const PONG_TIMEOUT = 10000; // 10 seconds
9
+ const AGENT_WS_RECONNECT_DELAY = 5000; // 5 seconds
10
+ /**
11
+ * WebSocket client for connecting to Termify server
12
+ */
13
+ export class WSClient extends EventEmitter {
14
+ ws = null;
15
+ pingInterval = null;
16
+ pongTimeout = null;
17
+ reconnectTimeout = null;
18
+ isConnected = false;
19
+ shouldReconnect = true;
20
+ reconnectAttempts = 0;
21
+ maxReconnectAttempts = 10;
22
+ /**
23
+ * Connect to the Termify server
24
+ */
25
+ connect() {
26
+ const config = getConfig();
27
+ if (!config.accessToken) {
28
+ logger.error('Not logged in. Run `termify-agent login` first.');
29
+ return;
30
+ }
31
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
32
+ logger.warn('Already connected');
33
+ return;
34
+ }
35
+ this.shouldReconnect = true;
36
+ this.doConnect();
37
+ }
38
+ doConnect() {
39
+ const config = getConfig();
40
+ const wsUrl = config.wsUrl;
41
+ logger.info(`Connecting to ${wsUrl}...`);
42
+ try {
43
+ this.ws = new WebSocket(wsUrl);
44
+ this.ws.on('open', () => {
45
+ logger.debug('WebSocket connected, authenticating...');
46
+ this.authenticate();
47
+ });
48
+ this.ws.on('message', (data) => {
49
+ this.handleMessage(data);
50
+ });
51
+ this.ws.on('close', (code, reason) => {
52
+ this.handleClose(code, reason.toString());
53
+ });
54
+ this.ws.on('error', (error) => {
55
+ logger.error(`WebSocket error: ${error.message}`);
56
+ });
57
+ }
58
+ catch (error) {
59
+ logger.error(`Failed to connect: ${error}`);
60
+ this.scheduleReconnect();
61
+ }
62
+ }
63
+ /**
64
+ * Send authentication message
65
+ */
66
+ authenticate() {
67
+ const config = getConfig();
68
+ const systemInfo = getSystemInfo();
69
+ const machineId = getMachineId();
70
+ const authMessage = {
71
+ type: 'agent.auth',
72
+ accessToken: config.accessToken,
73
+ version: VERSION,
74
+ machineId,
75
+ os: systemInfo.os,
76
+ hostname: systemInfo.hostname,
77
+ arch: systemInfo.arch,
78
+ };
79
+ this.send(authMessage);
80
+ }
81
+ /**
82
+ * Handle incoming message from server
83
+ */
84
+ handleMessage(data) {
85
+ try {
86
+ const message = JSON.parse(data.toString());
87
+ switch (message.type) {
88
+ case 'server.auth.result':
89
+ if (message.success) {
90
+ this.isConnected = true;
91
+ this.reconnectAttempts = 0;
92
+ setLastConnected();
93
+ this.startPingInterval();
94
+ logger.success(`Connected as ${message.agentName} (${message.agentId})`);
95
+ this.emit('connected', message.agentId, message.agentName);
96
+ }
97
+ else {
98
+ logger.error(`Authentication failed: ${message.error}`);
99
+ this.shouldReconnect = false;
100
+ this.emit('authFailed', message.error || 'Unknown error');
101
+ this.disconnect();
102
+ }
103
+ break;
104
+ case 'server.terminal.create':
105
+ logger.debug(`Create terminal: ${message.terminalId}`);
106
+ this.emit('terminalCreate', message.terminalId, message.cols, message.rows, {
107
+ cwd: message.cwd,
108
+ shell: message.shell,
109
+ env: message.env,
110
+ });
111
+ break;
112
+ case 'server.terminal.input':
113
+ this.emit('terminalInput', message.terminalId, message.data);
114
+ break;
115
+ case 'server.terminal.resize':
116
+ logger.debug(`Resize terminal ${message.terminalId} to ${message.cols}x${message.rows}`);
117
+ this.emit('terminalResize', message.terminalId, message.cols, message.rows);
118
+ break;
119
+ case 'server.terminal.stop':
120
+ logger.debug(`Stop terminal: ${message.terminalId}`);
121
+ this.emit('terminalStop', message.terminalId);
122
+ break;
123
+ case 'server.pong':
124
+ this.handlePong();
125
+ break;
126
+ default:
127
+ logger.warn(`Unknown message type: ${message.type}`);
128
+ }
129
+ }
130
+ catch (error) {
131
+ logger.error(`Failed to parse message: ${error}`);
132
+ }
133
+ }
134
+ /**
135
+ * Handle connection close
136
+ */
137
+ handleClose(code, reason) {
138
+ this.isConnected = false;
139
+ this.stopPingInterval();
140
+ logger.warn(`Disconnected: ${reason || 'Connection closed'} (code: ${code})`);
141
+ this.emit('disconnected', reason || 'Connection closed');
142
+ if (this.shouldReconnect) {
143
+ this.scheduleReconnect();
144
+ }
145
+ }
146
+ /**
147
+ * Schedule a reconnection attempt
148
+ */
149
+ scheduleReconnect() {
150
+ if (this.reconnectTimeout) {
151
+ clearTimeout(this.reconnectTimeout);
152
+ }
153
+ this.reconnectAttempts++;
154
+ if (this.reconnectAttempts > this.maxReconnectAttempts) {
155
+ logger.error('Max reconnection attempts reached. Giving up.');
156
+ this.shouldReconnect = false;
157
+ return;
158
+ }
159
+ // Exponential backoff with jitter
160
+ const delay = Math.min(AGENT_WS_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts - 1) + Math.random() * 1000, 60000 // Max 60 seconds
161
+ );
162
+ logger.info(`Reconnecting in ${Math.round(delay / 1000)}s (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
163
+ this.reconnectTimeout = setTimeout(() => {
164
+ this.doConnect();
165
+ }, delay);
166
+ }
167
+ /**
168
+ * Start ping interval for keepalive
169
+ */
170
+ startPingInterval() {
171
+ this.stopPingInterval();
172
+ this.pingInterval = setInterval(() => {
173
+ if (this.isConnected) {
174
+ this.sendPing();
175
+ }
176
+ }, PING_INTERVAL);
177
+ }
178
+ /**
179
+ * Stop ping interval
180
+ */
181
+ stopPingInterval() {
182
+ if (this.pingInterval) {
183
+ clearInterval(this.pingInterval);
184
+ this.pingInterval = null;
185
+ }
186
+ if (this.pongTimeout) {
187
+ clearTimeout(this.pongTimeout);
188
+ this.pongTimeout = null;
189
+ }
190
+ }
191
+ /**
192
+ * Send ping message
193
+ */
194
+ sendPing() {
195
+ this.send({ type: 'agent.ping' });
196
+ // Set timeout for pong response
197
+ this.pongTimeout = setTimeout(() => {
198
+ logger.warn('Pong timeout, reconnecting...');
199
+ this.ws?.terminate();
200
+ }, PONG_TIMEOUT);
201
+ }
202
+ /**
203
+ * Handle pong response
204
+ */
205
+ handlePong() {
206
+ if (this.pongTimeout) {
207
+ clearTimeout(this.pongTimeout);
208
+ this.pongTimeout = null;
209
+ }
210
+ }
211
+ /**
212
+ * Send a message to the server
213
+ */
214
+ send(message) {
215
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
216
+ logger.warn('Cannot send: not connected');
217
+ return false;
218
+ }
219
+ try {
220
+ this.ws.send(JSON.stringify(message));
221
+ return true;
222
+ }
223
+ catch (error) {
224
+ logger.error(`Failed to send message: ${error}`);
225
+ return false;
226
+ }
227
+ }
228
+ /**
229
+ * Send terminal output to server
230
+ */
231
+ sendTerminalOutput(terminalId, data) {
232
+ this.send({
233
+ type: 'agent.terminal.output',
234
+ terminalId,
235
+ data,
236
+ });
237
+ }
238
+ /**
239
+ * Send terminal status update
240
+ */
241
+ sendTerminalStatus(terminalId, status, error) {
242
+ this.send({
243
+ type: 'agent.terminal.status',
244
+ terminalId,
245
+ status,
246
+ error,
247
+ });
248
+ }
249
+ /**
250
+ * Send terminal CWD update
251
+ */
252
+ sendTerminalCwd(terminalId, cwd) {
253
+ this.send({
254
+ type: 'agent.terminal.cwd',
255
+ terminalId,
256
+ cwd,
257
+ });
258
+ }
259
+ /**
260
+ * Send terminal working state
261
+ */
262
+ sendTerminalWorking(terminalId, isWorking) {
263
+ this.send({
264
+ type: 'agent.terminal.working',
265
+ terminalId,
266
+ isWorking,
267
+ });
268
+ }
269
+ /**
270
+ * Send terminal exit notification
271
+ */
272
+ sendTerminalExit(terminalId, exitCode) {
273
+ this.send({
274
+ type: 'agent.terminal.exit',
275
+ terminalId,
276
+ exitCode,
277
+ });
278
+ }
279
+ /**
280
+ * Disconnect from the server
281
+ */
282
+ disconnect() {
283
+ this.shouldReconnect = false;
284
+ if (this.reconnectTimeout) {
285
+ clearTimeout(this.reconnectTimeout);
286
+ this.reconnectTimeout = null;
287
+ }
288
+ this.stopPingInterval();
289
+ if (this.ws) {
290
+ this.ws.close();
291
+ this.ws = null;
292
+ }
293
+ this.isConnected = false;
294
+ logger.info('Disconnected');
295
+ }
296
+ /**
297
+ * Check if connected
298
+ */
299
+ get connected() {
300
+ return this.isConnected;
301
+ }
302
+ }
303
+ //# sourceMappingURL=ws-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "termify-agent",
3
+ "version": "1.0.0",
4
+ "description": "Termify Agent CLI - Connect your local terminal to Termify",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "termify-agent": "./bin/termify-agent.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "lint": "eslint src --ext .ts",
15
+ "clean": "rm -rf dist"
16
+ },
17
+ "keywords": [
18
+ "termify",
19
+ "terminal",
20
+ "agent",
21
+ "cli"
22
+ ],
23
+ "author": "justdiego",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "chalk": "^5.3.0",
27
+ "commander": "^12.0.0",
28
+ "conf": "^12.0.0",
29
+ "node-machine-id": "^1.1.12",
30
+ "node-pty": "^1.0.0",
31
+ "open": "^10.0.0",
32
+ "ora": "^8.0.1",
33
+ "ws": "^8.16.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^20.11.0",
37
+ "@types/ws": "^8.5.10",
38
+ "typescript": "^5.3.0"
39
+ },
40
+ "engines": {
41
+ "node": ">=18.0.0"
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "bin"
46
+ ]
47
+ }