termify-agent 1.0.32 → 1.0.34

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 (56) hide show
  1. package/dist/agent.d.ts +13 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +236 -0
  4. package/dist/agent.js.map +1 -1
  5. package/dist/config.d.ts +2 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +5 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/index.js +184 -15
  10. package/dist/index.js.map +1 -1
  11. package/dist/network/backends/windows-wireguard-backend.d.ts +29 -0
  12. package/dist/network/backends/windows-wireguard-backend.d.ts.map +1 -0
  13. package/dist/network/backends/windows-wireguard-backend.js +190 -0
  14. package/dist/network/backends/windows-wireguard-backend.js.map +1 -0
  15. package/dist/network/key-rotation.d.ts +55 -0
  16. package/dist/network/key-rotation.d.ts.map +1 -0
  17. package/dist/network/key-rotation.js +105 -0
  18. package/dist/network/key-rotation.js.map +1 -0
  19. package/dist/network/nat-traversal.d.ts +27 -0
  20. package/dist/network/nat-traversal.d.ts.map +1 -0
  21. package/dist/network/nat-traversal.js +76 -0
  22. package/dist/network/nat-traversal.js.map +1 -0
  23. package/dist/network/uapi-client.d.ts +50 -0
  24. package/dist/network/uapi-client.d.ts.map +1 -0
  25. package/dist/network/uapi-client.js +260 -0
  26. package/dist/network/uapi-client.js.map +1 -0
  27. package/dist/network/wireguard-backend.d.ts +60 -0
  28. package/dist/network/wireguard-backend.d.ts.map +1 -0
  29. package/dist/network/wireguard-backend.js +9 -0
  30. package/dist/network/wireguard-backend.js.map +1 -0
  31. package/dist/network/wireguard-installer.d.ts +24 -0
  32. package/dist/network/wireguard-installer.d.ts.map +1 -0
  33. package/dist/network/wireguard-installer.js +362 -0
  34. package/dist/network/wireguard-installer.js.map +1 -0
  35. package/dist/network/wireguard-manager.d.ts +92 -0
  36. package/dist/network/wireguard-manager.d.ts.map +1 -0
  37. package/dist/network/wireguard-manager.js +575 -0
  38. package/dist/network/wireguard-manager.js.map +1 -0
  39. package/dist/network/wireguard-state-store.d.ts +55 -0
  40. package/dist/network/wireguard-state-store.d.ts.map +1 -0
  41. package/dist/network/wireguard-state-store.js +196 -0
  42. package/dist/network/wireguard-state-store.js.map +1 -0
  43. package/dist/ssh-manager.d.ts +5 -0
  44. package/dist/ssh-manager.d.ts.map +1 -1
  45. package/dist/ssh-manager.js +104 -0
  46. package/dist/ssh-manager.js.map +1 -1
  47. package/dist/tunnel-manager.d.ts +65 -0
  48. package/dist/tunnel-manager.d.ts.map +1 -0
  49. package/dist/tunnel-manager.js +267 -0
  50. package/dist/tunnel-manager.js.map +1 -0
  51. package/dist/ws-client.d.ts +145 -0
  52. package/dist/ws-client.d.ts.map +1 -1
  53. package/dist/ws-client.js +136 -1
  54. package/dist/ws-client.js.map +1 -1
  55. package/package.json +1 -1
  56. package/scripts/postinstall.js +100 -35
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Persistent WireGuard identity store.
3
+ *
4
+ * Keeps the agent's WG keypair, interface name, and listen port in
5
+ * ~/.termify/wireguard.json so the identity survives restarts.
6
+ *
7
+ * Private key material is NEVER logged. Both the JSON state file and
8
+ * the standalone private key file are created with 0600 permissions.
9
+ */
10
+ import { generateKeyPairSync } from 'node:crypto';
11
+ import { join } from 'node:path';
12
+ import { homedir, platform as osPlatform } from 'node:os';
13
+ import { readFile, writeFile, mkdir, access, chmod, constants, } from 'node:fs/promises';
14
+ import { logger } from '../utils/logger.js';
15
+ const isWindows = osPlatform() === 'win32';
16
+ // ---------------------------------------------------------------------------
17
+ // Constants
18
+ // ---------------------------------------------------------------------------
19
+ const STATE_FILE = 'wireguard.json';
20
+ const PRIVATE_KEY_FILE = 'wireguard.key';
21
+ const DEFAULT_INTERFACE = 'termify0';
22
+ const DEFAULT_LISTEN_PORT = 51820;
23
+ // ---------------------------------------------------------------------------
24
+ // Native X25519 key generation (replaces `wg genkey` / `wg pubkey`)
25
+ // ---------------------------------------------------------------------------
26
+ /**
27
+ * Generate a WireGuard-compatible X25519 keypair using Node.js built-in crypto.
28
+ * Returns base64-encoded 32-byte keys, identical format to `wg genkey`/`wg pubkey`.
29
+ */
30
+ export function generateWgKeypair() {
31
+ const kp = generateKeyPairSync('x25519');
32
+ // PKCS#8 DER for X25519 private key is 48 bytes: 16-byte header + 32-byte raw key
33
+ const privDer = kp.privateKey.export({ type: 'pkcs8', format: 'der' });
34
+ const privRaw = privDer.subarray(16);
35
+ // SPKI DER for X25519 public key is 44 bytes: 12-byte header + 32-byte raw key
36
+ const pubDer = kp.publicKey.export({ type: 'spki', format: 'der' });
37
+ const pubRaw = pubDer.subarray(12);
38
+ return {
39
+ privateKey: privRaw.toString('base64'),
40
+ publicKey: pubRaw.toString('base64'),
41
+ };
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Store
45
+ // ---------------------------------------------------------------------------
46
+ export class WireGuardStateStore {
47
+ configDir;
48
+ constructor(configDir) {
49
+ if (configDir) {
50
+ this.configDir = configDir;
51
+ }
52
+ else if (isWindows) {
53
+ // On Windows use %LOCALAPPDATA%\Termify (e.g., C:\Users\X\AppData\Local\Termify)
54
+ this.configDir = join(process.env.LOCALAPPDATA || join(homedir(), 'AppData', 'Local'), 'Termify');
55
+ }
56
+ else {
57
+ this.configDir = join(homedir(), '.termify');
58
+ }
59
+ }
60
+ // -----------------------------------------------------------------------
61
+ // Public API
62
+ // -----------------------------------------------------------------------
63
+ /**
64
+ * Load existing identity or generate a new keypair and persist it.
65
+ */
66
+ async ensureIdentity() {
67
+ const existing = await this.getIdentity();
68
+ if (existing) {
69
+ logger.debug('[WG State] Loaded existing identity (keyVersion=' + existing.keyVersion + ')');
70
+ // Make sure the standalone private key file exists
71
+ await this.writePrivateKeyFile(existing.privateKey);
72
+ return existing;
73
+ }
74
+ logger.info('[WG State] No identity found, generating new keypair...');
75
+ const identity = await this.generateIdentity();
76
+ await this.saveIdentity(identity);
77
+ logger.info('[WG State] New identity saved (pubkey=' + identity.publicKey.slice(0, 8) + '...)');
78
+ return identity;
79
+ }
80
+ /**
81
+ * Read the persisted identity, or null if none exists.
82
+ */
83
+ async getIdentity() {
84
+ const filePath = join(this.configDir, STATE_FILE);
85
+ try {
86
+ await access(filePath, constants.R_OK);
87
+ const raw = await readFile(filePath, 'utf-8');
88
+ const data = JSON.parse(raw);
89
+ // Basic sanity check
90
+ if (!data.privateKey || !data.publicKey || !data.interfaceName) {
91
+ logger.warn('[WG State] Corrupt state file, ignoring');
92
+ return null;
93
+ }
94
+ return data;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Persist the identity to disk with restrictive permissions.
102
+ */
103
+ async saveIdentity(identity) {
104
+ await this.ensureConfigDir();
105
+ const filePath = join(this.configDir, STATE_FILE);
106
+ const json = JSON.stringify(identity, null, 2) + '\n';
107
+ if (isWindows) {
108
+ // Windows does not support Unix file mode; write without mode option
109
+ await writeFile(filePath, json, { encoding: 'utf-8' });
110
+ }
111
+ else {
112
+ await writeFile(filePath, json, { encoding: 'utf-8', mode: 0o600 });
113
+ // Belt-and-suspenders: ensure permissions even if umask is permissive
114
+ await chmod(filePath, 0o600);
115
+ }
116
+ // Also write the standalone private key file for `wg set ... private-key`
117
+ await this.writePrivateKeyFile(identity.privateKey);
118
+ }
119
+ /**
120
+ * Returns the path to the standalone private key file expected by `wg set`.
121
+ */
122
+ getPrivateKeyPath() {
123
+ return join(this.configDir, PRIVATE_KEY_FILE);
124
+ }
125
+ /**
126
+ * Generate a new keypair, replacing the existing one.
127
+ * Preserves interfaceName and listenPort, increments keyVersion.
128
+ * Returns the new identity.
129
+ */
130
+ async rotateKeys() {
131
+ const existing = await this.getIdentity();
132
+ if (!existing) {
133
+ throw new Error('Cannot rotate keys: no existing identity found');
134
+ }
135
+ // Generate new keypair using native crypto
136
+ const { privateKey: newPrivateKey, publicKey: newPublicKey } = generateWgKeypair();
137
+ // Write the new private key file
138
+ await this.writePrivateKeyFile(newPrivateKey);
139
+ // Build updated identity preserving interface config
140
+ const identity = {
141
+ privateKey: newPrivateKey,
142
+ publicKey: newPublicKey,
143
+ interfaceName: existing.interfaceName,
144
+ listenPort: existing.listenPort,
145
+ createdAt: new Date().toISOString(),
146
+ keyVersion: existing.keyVersion + 1,
147
+ };
148
+ // Persist
149
+ await this.saveIdentity(identity);
150
+ logger.info('[WG State] Keys rotated (keyVersion=' + identity.keyVersion + ', pubkey=' + newPublicKey.slice(0, 8) + '...)');
151
+ return identity;
152
+ }
153
+ // -----------------------------------------------------------------------
154
+ // Internal helpers
155
+ // -----------------------------------------------------------------------
156
+ async ensureConfigDir() {
157
+ try {
158
+ await access(this.configDir, constants.W_OK);
159
+ }
160
+ catch {
161
+ if (isWindows) {
162
+ await mkdir(this.configDir, { recursive: true });
163
+ }
164
+ else {
165
+ await mkdir(this.configDir, { recursive: true, mode: 0o700 });
166
+ }
167
+ }
168
+ }
169
+ async writePrivateKeyFile(privateKey) {
170
+ await this.ensureConfigDir();
171
+ const keyPath = this.getPrivateKeyPath();
172
+ // wg expects the key on a single line with a trailing newline
173
+ if (isWindows) {
174
+ await writeFile(keyPath, privateKey.trimEnd() + '\n', { encoding: 'utf-8' });
175
+ }
176
+ else {
177
+ await writeFile(keyPath, privateKey.trimEnd() + '\n', {
178
+ encoding: 'utf-8',
179
+ mode: 0o600,
180
+ });
181
+ await chmod(keyPath, 0o600);
182
+ }
183
+ }
184
+ async generateIdentity() {
185
+ const { privateKey, publicKey } = generateWgKeypair();
186
+ return {
187
+ privateKey,
188
+ publicKey,
189
+ interfaceName: DEFAULT_INTERFACE,
190
+ listenPort: DEFAULT_LISTEN_PORT,
191
+ createdAt: new Date().toISOString(),
192
+ keyVersion: 1,
193
+ };
194
+ }
195
+ }
196
+ //# sourceMappingURL=wireguard-state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireguard-state-store.js","sourceRoot":"","sources":["../../src/network/wireguard-state-store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Client as SSHClient, ClientChannel } from 'ssh2';
2
+ import { Duplex } from 'stream';
2
3
  import type { SSHConfig } from './ws-client.js';
3
4
  export interface SSHInstance {
4
5
  id: string;
@@ -35,6 +36,10 @@ export declare class SSHManager {
35
36
  * Create a new SSH connection
36
37
  */
37
38
  connect(terminalId: string, cols: number, rows: number, config: SSHConfig): Promise<boolean>;
39
+ /**
40
+ * Create an SSH connection over a tunnel Duplex stream
41
+ */
42
+ connectOverTunnel(terminalId: string, cols: number, rows: number, config: SSHConfig, tunnelStream: Duplex): Promise<boolean>;
38
43
  /**
39
44
  * Handle SSH connection close
40
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-manager.d.ts","sourceRoot":"","sources":["../src/ssh-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAC/D,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AACnE,KAAK,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,OAAO,CAA8B;IAE7C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI9C;;OAEG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,OAAO,CAAC;IAuHnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAgBhD;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAmB/D;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAqBjC;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAehB"}
1
+ {"version":3,"file":"ssh-manager.d.ts","sourceRoot":"","sources":["../src/ssh-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAC/D,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AACnE,KAAK,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,OAAO,CAA8B;IAE7C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI9C;;OAEG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,OAAO,CAAC;IAuHnB;;OAEG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAqHnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAgBhD;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAmB/D;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAqBjC;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAehB"}
@@ -132,6 +132,110 @@ export class SSHManager {
132
132
  }
133
133
  });
134
134
  }
135
+ /**
136
+ * Create an SSH connection over a tunnel Duplex stream
137
+ */
138
+ async connectOverTunnel(terminalId, cols, rows, config, tunnelStream) {
139
+ if (this.instances.has(terminalId)) {
140
+ logger.warn(`SSH terminal ${terminalId} already exists`);
141
+ return false;
142
+ }
143
+ const client = new SSHClient();
144
+ const instance = {
145
+ id: terminalId,
146
+ client,
147
+ stream: null,
148
+ cols,
149
+ rows,
150
+ config,
151
+ };
152
+ this.instances.set(terminalId, instance);
153
+ return new Promise((resolve) => {
154
+ const connectionTimeout = setTimeout(() => {
155
+ logger.error(`SSH tunnel connection timeout for ${terminalId}`);
156
+ client.end();
157
+ this.instances.delete(terminalId);
158
+ if (this.onError) {
159
+ this.onError(terminalId, 'Tunnel SSH connection timeout');
160
+ }
161
+ resolve(false);
162
+ }, 30000);
163
+ client.on('ready', () => {
164
+ clearTimeout(connectionTimeout);
165
+ logger.info(`SSH over tunnel connected for ${terminalId}`);
166
+ client.shell({ cols, rows, term: 'xterm-256color' }, (err, stream) => {
167
+ if (err) {
168
+ logger.error(`SSH tunnel shell error for ${terminalId}: ${err.message}`);
169
+ client.end();
170
+ this.instances.delete(terminalId);
171
+ if (this.onError) {
172
+ this.onError(terminalId, err.message);
173
+ }
174
+ resolve(false);
175
+ return;
176
+ }
177
+ instance.stream = stream;
178
+ stream.on('data', (data) => {
179
+ if (this.onData) {
180
+ this.onData(terminalId, data.toString());
181
+ }
182
+ });
183
+ stream.stderr?.on('data', (data) => {
184
+ if (this.onData) {
185
+ this.onData(terminalId, data.toString());
186
+ }
187
+ });
188
+ stream.on('close', () => {
189
+ logger.debug(`SSH tunnel stream closed for ${terminalId}`);
190
+ this.handleClose(terminalId, 0);
191
+ });
192
+ logger.info(`SSH tunnel terminal ${terminalId} ready`);
193
+ resolve(true);
194
+ });
195
+ });
196
+ client.on('error', (err) => {
197
+ clearTimeout(connectionTimeout);
198
+ logger.error(`SSH tunnel error for ${terminalId}: ${err.message}`);
199
+ this.instances.delete(terminalId);
200
+ if (this.onError) {
201
+ this.onError(terminalId, err.message);
202
+ }
203
+ resolve(false);
204
+ });
205
+ client.on('close', () => {
206
+ logger.debug(`SSH tunnel connection closed for ${terminalId}`);
207
+ this.handleClose(terminalId, 0);
208
+ });
209
+ // Build connection config - use sock instead of host/port
210
+ const connectConfig = {
211
+ sock: tunnelStream,
212
+ username: config.username,
213
+ readyTimeout: 30000,
214
+ };
215
+ if (config.authType === 'PASSWORD') {
216
+ connectConfig.password = config.password;
217
+ }
218
+ else if (config.authType === 'KEY' || config.authType === 'KEY_PASSPHRASE') {
219
+ connectConfig.privateKey = config.privateKey;
220
+ if (config.authType === 'KEY_PASSPHRASE' && config.passphrase) {
221
+ connectConfig.passphrase = config.passphrase;
222
+ }
223
+ }
224
+ logger.debug(`Connecting SSH over tunnel for ${terminalId} as ${config.username}`);
225
+ try {
226
+ client.connect(connectConfig);
227
+ }
228
+ catch (err) {
229
+ clearTimeout(connectionTimeout);
230
+ logger.error(`SSH tunnel connect error for ${terminalId}: ${err}`);
231
+ this.instances.delete(terminalId);
232
+ if (this.onError) {
233
+ this.onError(terminalId, `Tunnel connection failed: ${err}`);
234
+ }
235
+ resolve(false);
236
+ }
237
+ });
238
+ }
135
239
  /**
136
240
  * Handle SSH connection close
137
241
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-manager.js","sourceRoot":"","sources":["../src/ssh-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-manager.js","sourceRoot":"","sources":["../src/ssh-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Duplex } from 'stream';
2
+ import { EventEmitter } from 'events';
3
+ import { WSClient } from './ws-client.js';
4
+ type TunnelProtocol = 'tcp' | 'ssh';
5
+ type TunnelRole = 'source' | 'target';
6
+ /**
7
+ * Manages tunnel connections between agents via WebSocket relay.
8
+ * Target agents open local TCP sockets; source agents provide a Duplex stream
9
+ * that can be used by SSHManager or other consumers.
10
+ */
11
+ export declare class TunnelManager extends EventEmitter {
12
+ private tunnels;
13
+ private wsClient;
14
+ constructor(wsClient: WSClient);
15
+ /**
16
+ * Handle server.tunnel.create message
17
+ */
18
+ handleCreate(tunnelId: string, sourceAgentId: string, targetAgentId: string, role: TunnelRole, targetHost: string, targetPort: number, protocol: TunnelProtocol, idleTimeoutMs?: number): void;
19
+ /**
20
+ * Connect to the local target service (target agent role)
21
+ */
22
+ private connectToTarget;
23
+ /**
24
+ * Handle incoming binary data frame from WebSocket
25
+ */
26
+ handleBinaryFrame(data: Buffer): void;
27
+ /**
28
+ * Handle server.tunnel.close message
29
+ */
30
+ handleClose(tunnelId: string, reason: string): void;
31
+ /**
32
+ * Handle server.tunnel.flow message (backpressure from server)
33
+ */
34
+ handleFlow(tunnelId: string, action: 'pause' | 'resume'): void;
35
+ /**
36
+ * Close a tunnel and clean up resources
37
+ */
38
+ closeTunnel(tunnelId: string, reason: string): void;
39
+ /**
40
+ * Write data to a tunnel (from source side - used by SSH over tunnel)
41
+ */
42
+ writeTunnel(tunnelId: string, data: Buffer): boolean;
43
+ /**
44
+ * Create a Duplex stream for a source tunnel (used by SSH over tunnel)
45
+ */
46
+ createTunnelStream(tunnelId: string): Duplex;
47
+ /**
48
+ * Check if a tunnel exists
49
+ */
50
+ has(tunnelId: string): boolean;
51
+ /**
52
+ * Get tunnel count
53
+ */
54
+ get count(): number;
55
+ /**
56
+ * Close all tunnels (for shutdown)
57
+ */
58
+ closeAll(): void;
59
+ /**
60
+ * Reset idle timeout for a tunnel
61
+ */
62
+ private resetIdleTimeout;
63
+ }
64
+ export {};
65
+ //# sourceMappingURL=tunnel-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../src/tunnel-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAkC1C,KAAK,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;AACpC,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAiBtC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAK9B;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI;IAgCP;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyBrC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAInD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;IAa9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAqBnD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAQpD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAkC5C;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CASzB"}