@nodetool-ai/deploy 0.7.0-rc.11

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 (133) hide show
  1. package/dist/admin-client.d.ts +58 -0
  2. package/dist/admin-client.d.ts.map +1 -0
  3. package/dist/admin-client.js +275 -0
  4. package/dist/admin-client.js.map +1 -0
  5. package/dist/admin-operations.d.ts +197 -0
  6. package/dist/admin-operations.d.ts.map +1 -0
  7. package/dist/admin-operations.js +433 -0
  8. package/dist/admin-operations.js.map +1 -0
  9. package/dist/admin-routes.d.ts +306 -0
  10. package/dist/admin-routes.d.ts.map +1 -0
  11. package/dist/admin-routes.js +383 -0
  12. package/dist/admin-routes.js.map +1 -0
  13. package/dist/api-user-manager.d.ts +72 -0
  14. package/dist/api-user-manager.d.ts.map +1 -0
  15. package/dist/api-user-manager.js +89 -0
  16. package/dist/api-user-manager.js.map +1 -0
  17. package/dist/auth.d.ts +67 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +142 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/collection-routes.d.ts +37 -0
  22. package/dist/collection-routes.d.ts.map +1 -0
  23. package/dist/collection-routes.js +43 -0
  24. package/dist/collection-routes.js.map +1 -0
  25. package/dist/compose.d.ts +52 -0
  26. package/dist/compose.d.ts.map +1 -0
  27. package/dist/compose.js +153 -0
  28. package/dist/compose.js.map +1 -0
  29. package/dist/configure.d.ts +87 -0
  30. package/dist/configure.d.ts.map +1 -0
  31. package/dist/configure.js +104 -0
  32. package/dist/configure.js.map +1 -0
  33. package/dist/deploy-to-gcp.d.ts +67 -0
  34. package/dist/deploy-to-gcp.d.ts.map +1 -0
  35. package/dist/deploy-to-gcp.js +268 -0
  36. package/dist/deploy-to-gcp.js.map +1 -0
  37. package/dist/deploy-to-runpod.d.ts +53 -0
  38. package/dist/deploy-to-runpod.d.ts.map +1 -0
  39. package/dist/deploy-to-runpod.js +207 -0
  40. package/dist/deploy-to-runpod.js.map +1 -0
  41. package/dist/deploy.d.ts +54 -0
  42. package/dist/deploy.d.ts.map +1 -0
  43. package/dist/deploy.js +82 -0
  44. package/dist/deploy.js.map +1 -0
  45. package/dist/deployment-config.d.ts +1073 -0
  46. package/dist/deployment-config.d.ts.map +1 -0
  47. package/dist/deployment-config.js +536 -0
  48. package/dist/deployment-config.js.map +1 -0
  49. package/dist/docker-run.d.ts +85 -0
  50. package/dist/docker-run.d.ts.map +1 -0
  51. package/dist/docker-run.js +202 -0
  52. package/dist/docker-run.js.map +1 -0
  53. package/dist/docker.d.ts +98 -0
  54. package/dist/docker.d.ts.map +1 -0
  55. package/dist/docker.js +396 -0
  56. package/dist/docker.js.map +1 -0
  57. package/dist/fly.d.ts +40 -0
  58. package/dist/fly.d.ts.map +1 -0
  59. package/dist/fly.js +291 -0
  60. package/dist/fly.js.map +1 -0
  61. package/dist/gcp.d.ts +59 -0
  62. package/dist/gcp.d.ts.map +1 -0
  63. package/dist/gcp.js +339 -0
  64. package/dist/gcp.js.map +1 -0
  65. package/dist/google-cloud-run-api.d.ts +134 -0
  66. package/dist/google-cloud-run-api.d.ts.map +1 -0
  67. package/dist/google-cloud-run-api.js +532 -0
  68. package/dist/google-cloud-run-api.js.map +1 -0
  69. package/dist/huggingface.d.ts +69 -0
  70. package/dist/huggingface.d.ts.map +1 -0
  71. package/dist/huggingface.js +346 -0
  72. package/dist/huggingface.js.map +1 -0
  73. package/dist/image-builder.d.ts +35 -0
  74. package/dist/image-builder.d.ts.map +1 -0
  75. package/dist/image-builder.js +157 -0
  76. package/dist/image-builder.js.map +1 -0
  77. package/dist/image-spec.d.ts +41 -0
  78. package/dist/image-spec.d.ts.map +1 -0
  79. package/dist/image-spec.js +49 -0
  80. package/dist/image-spec.js.map +1 -0
  81. package/dist/index.d.ts +33 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +45 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/manager.d.ts +121 -0
  86. package/dist/manager.d.ts.map +1 -0
  87. package/dist/manager.js +225 -0
  88. package/dist/manager.js.map +1 -0
  89. package/dist/progress.d.ts +91 -0
  90. package/dist/progress.d.ts.map +1 -0
  91. package/dist/progress.js +262 -0
  92. package/dist/progress.js.map +1 -0
  93. package/dist/railway.d.ts +65 -0
  94. package/dist/railway.d.ts.map +1 -0
  95. package/dist/railway.js +284 -0
  96. package/dist/railway.js.map +1 -0
  97. package/dist/remote-users.d.ts +74 -0
  98. package/dist/remote-users.d.ts.map +1 -0
  99. package/dist/remote-users.js +172 -0
  100. package/dist/remote-users.js.map +1 -0
  101. package/dist/runpod-api.d.ts +206 -0
  102. package/dist/runpod-api.d.ts.map +1 -0
  103. package/dist/runpod-api.js +703 -0
  104. package/dist/runpod-api.js.map +1 -0
  105. package/dist/runpod.d.ts +82 -0
  106. package/dist/runpod.d.ts.map +1 -0
  107. package/dist/runpod.js +188 -0
  108. package/dist/runpod.js.map +1 -0
  109. package/dist/self-hosted.d.ts +157 -0
  110. package/dist/self-hosted.d.ts.map +1 -0
  111. package/dist/self-hosted.js +799 -0
  112. package/dist/self-hosted.js.map +1 -0
  113. package/dist/ssh.d.ts +166 -0
  114. package/dist/ssh.d.ts.map +1 -0
  115. package/dist/ssh.js +430 -0
  116. package/dist/ssh.js.map +1 -0
  117. package/dist/state.d.ts +83 -0
  118. package/dist/state.d.ts.map +1 -0
  119. package/dist/state.js +368 -0
  120. package/dist/state.js.map +1 -0
  121. package/dist/storage-routes.d.ts +55 -0
  122. package/dist/storage-routes.d.ts.map +1 -0
  123. package/dist/storage-routes.js +160 -0
  124. package/dist/storage-routes.js.map +1 -0
  125. package/dist/sync.d.ts +38 -0
  126. package/dist/sync.d.ts.map +1 -0
  127. package/dist/sync.js +130 -0
  128. package/dist/sync.js.map +1 -0
  129. package/dist/workflow-syncer.d.ts +51 -0
  130. package/dist/workflow-syncer.d.ts.map +1 -0
  131. package/dist/workflow-syncer.js +192 -0
  132. package/dist/workflow-syncer.js.map +1 -0
  133. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-hosted.js","sourceRoot":"","sources":["../src/self-hosted.ts"],"names":[],"mappings":"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"}
package/dist/ssh.d.ts ADDED
@@ -0,0 +1,166 @@
1
+ /**
2
+ * SSH connection management for remote deployment operations.
3
+ *
4
+ * This module provides a high-level interface for SSH operations including:
5
+ * - Connection management with automatic retry
6
+ * - Remote command execution
7
+ * - File transfer (SFTP)
8
+ * - Connection pooling for efficiency
9
+ *
10
+ * Requires the `ssh2` npm package at runtime.
11
+ */
12
+ interface SSH2ConnectConfig {
13
+ host: string;
14
+ port: number;
15
+ username: string;
16
+ readyTimeout: number;
17
+ privateKey?: Buffer;
18
+ password?: string;
19
+ agent?: string;
20
+ }
21
+ interface SSH2Channel {
22
+ on(event: "data", listener: (data: Buffer) => void): this;
23
+ on(event: "close", listener: (code: number) => void): this;
24
+ stderr: {
25
+ on(event: "data", listener: (data: Buffer) => void): void;
26
+ };
27
+ close(): void;
28
+ }
29
+ interface SSH2SFTPWrapper {
30
+ fastPut(localPath: string, remotePath: string, callback: (err: Error | undefined) => void): void;
31
+ fastGet(remotePath: string, localPath: string, callback: (err: Error | undefined) => void): void;
32
+ createWriteStream(remotePath: string): NodeJS.WritableStream;
33
+ stat(remotePath: string, callback: (err: Error | undefined) => void): void;
34
+ chmod(remotePath: string, mode: number, callback: (err: Error | undefined) => void): void;
35
+ mkdir(remotePath: string, attrs: {
36
+ mode: number;
37
+ }, callback: (err: Error | undefined) => void): void;
38
+ rmdir(remotePath: string, callback: (err: Error | undefined) => void): void;
39
+ end(): void;
40
+ }
41
+ interface SSH2Client {
42
+ on(event: "ready", listener: () => void): this;
43
+ on(event: "error", listener: (err: Error) => void): this;
44
+ connect(config: SSH2ConnectConfig): void;
45
+ exec(command: string, callback: (err: Error | undefined, channel: SSH2Channel) => void): void;
46
+ sftp(callback: (err: Error | undefined, sftp: SSH2SFTPWrapper) => void): void;
47
+ end(): void;
48
+ }
49
+ export interface SSH2ClientConstructor {
50
+ new (): SSH2Client;
51
+ }
52
+ /**
53
+ * Override the ssh2 Client constructor — for use in tests only.
54
+ * Calling this bypasses the lazy require("ssh2") lookup entirely.
55
+ */
56
+ export declare function _setClientCtorForTest(ctor: SSH2ClientConstructor | null): void;
57
+ export declare class SSHConnectionError extends Error {
58
+ constructor(message: string);
59
+ }
60
+ export declare class SSHCommandError extends Error {
61
+ readonly exitCode: number;
62
+ readonly stdout: string;
63
+ readonly stderr: string;
64
+ constructor(message: string, exitCode: number, stdout: string, stderr: string);
65
+ }
66
+ export interface SSHConnectionOptions {
67
+ host: string;
68
+ user: string;
69
+ keyPath?: string;
70
+ password?: string;
71
+ port?: number;
72
+ timeout?: number;
73
+ retryAttempts?: number;
74
+ retryDelay?: number;
75
+ }
76
+ /**
77
+ * Manages SSH connections to remote hosts with automatic retry and connection pooling.
78
+ *
79
+ * This class provides a high-level interface for SSH operations including
80
+ * command execution and file transfer.
81
+ */
82
+ export declare class SSHConnection {
83
+ readonly host: string;
84
+ readonly user: string;
85
+ readonly keyPath: string | undefined;
86
+ readonly password: string | undefined;
87
+ readonly port: number;
88
+ readonly timeout: number;
89
+ readonly retryAttempts: number;
90
+ readonly retryDelay: number;
91
+ private client;
92
+ private sftp;
93
+ constructor(options: SSHConnectionOptions);
94
+ /**
95
+ * Establish SSH connection to the remote host.
96
+ * Retries based on retryAttempts setting.
97
+ */
98
+ connect(): Promise<void>;
99
+ /** Close SSH and SFTP connections. */
100
+ disconnect(): void;
101
+ /** Check if SSH connection is active. */
102
+ isConnected(): boolean;
103
+ /** Ensure connection is active, reconnect if necessary. */
104
+ ensureConnected(): Promise<void>;
105
+ /**
106
+ * Execute a command on the remote host.
107
+ *
108
+ * @returns Tuple of [exitCode, stdout, stderr]
109
+ */
110
+ execute(command: string, options?: {
111
+ check?: boolean;
112
+ timeout?: number;
113
+ }): Promise<[number, string, string]>;
114
+ /**
115
+ * Execute a multi-line shell script on the remote host.
116
+ *
117
+ * @returns Tuple of [exitCode, stdout, stderr]
118
+ */
119
+ executeScript(script: string, options?: {
120
+ check?: boolean;
121
+ timeout?: number;
122
+ }): Promise<[number, string, string]>;
123
+ private getSftp;
124
+ /**
125
+ * Upload a file to the remote host.
126
+ */
127
+ uploadFile(localPath: string, remotePath: string, mode?: number): Promise<void>;
128
+ /**
129
+ * Upload string content as a file to the remote host.
130
+ */
131
+ uploadString(content: string, remotePath: string, mode?: number): Promise<void>;
132
+ /**
133
+ * Download a file from the remote host.
134
+ */
135
+ downloadFile(remotePath: string, localPath: string): Promise<void>;
136
+ /**
137
+ * Check if a file exists on the remote host.
138
+ */
139
+ fileExists(remotePath: string): Promise<boolean>;
140
+ /**
141
+ * Create a directory on the remote host.
142
+ */
143
+ mkdir(remotePath: string, mode?: number, parents?: boolean): Promise<void>;
144
+ /**
145
+ * Remove a directory on the remote host.
146
+ */
147
+ rmdir(remotePath: string, recursive?: boolean): Promise<void>;
148
+ }
149
+ /**
150
+ * Convenience function: creates an SSHConnection, connects, invokes the
151
+ * callback, and ensures disconnection afterwards.
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * await withSSHConnection(
156
+ * { host: "192.168.1.100", user: "ubuntu", keyPath: "~/.ssh/id_rsa" },
157
+ * async (ssh) => {
158
+ * const [code, stdout, stderr] = await ssh.execute("ls -la");
159
+ * console.log(stdout);
160
+ * }
161
+ * );
162
+ * ```
163
+ */
164
+ export declare function withSSHConnection<T>(options: SSHConnectionOptions, fn: (conn: SSHConnection) => Promise<T>): Promise<T>;
165
+ export {};
166
+ //# sourceMappingURL=ssh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
package/dist/ssh.js ADDED
@@ -0,0 +1,430 @@
1
+ /**
2
+ * SSH connection management for remote deployment operations.
3
+ *
4
+ * This module provides a high-level interface for SSH operations including:
5
+ * - Connection management with automatic retry
6
+ * - Remote command execution
7
+ * - File transfer (SFTP)
8
+ * - Connection pooling for efficiency
9
+ *
10
+ * Requires the `ssh2` npm package at runtime.
11
+ */
12
+ import * as fs from "node:fs";
13
+ import * as path from "node:path";
14
+ import * as os from "node:os";
15
+ import { createLogger } from "@nodetool-ai/config";
16
+ const log = createLogger("nodetool.deploy.ssh");
17
+ // Lazy-load ssh2 so the module can be imported even if ssh2 isn't installed.
18
+ let _ClientCtor = null;
19
+ /**
20
+ * Override the ssh2 Client constructor — for use in tests only.
21
+ * Calling this bypasses the lazy require("ssh2") lookup entirely.
22
+ */
23
+ export function _setClientCtorForTest(ctor) {
24
+ _ClientCtor = ctor;
25
+ }
26
+ function getClientCtor() {
27
+ if (!_ClientCtor) {
28
+ try {
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ const ssh2 = require("ssh2");
31
+ _ClientCtor = ssh2.Client;
32
+ }
33
+ catch {
34
+ throw new Error("ssh2 is required for SSH operations. Install it with: npm install ssh2");
35
+ }
36
+ }
37
+ return _ClientCtor;
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Custom Error Classes
41
+ // ---------------------------------------------------------------------------
42
+ export class SSHConnectionError extends Error {
43
+ constructor(message) {
44
+ super(message);
45
+ this.name = "SSHConnectionError";
46
+ }
47
+ }
48
+ export class SSHCommandError extends Error {
49
+ exitCode;
50
+ stdout;
51
+ stderr;
52
+ constructor(message, exitCode, stdout, stderr) {
53
+ super(message);
54
+ this.name = "SSHCommandError";
55
+ this.exitCode = exitCode;
56
+ this.stdout = stdout;
57
+ this.stderr = stderr;
58
+ }
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // SSHConnection Class
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Manages SSH connections to remote hosts with automatic retry and connection pooling.
65
+ *
66
+ * This class provides a high-level interface for SSH operations including
67
+ * command execution and file transfer.
68
+ */
69
+ export class SSHConnection {
70
+ host;
71
+ user;
72
+ keyPath;
73
+ password;
74
+ port;
75
+ timeout;
76
+ retryAttempts;
77
+ retryDelay;
78
+ client = null;
79
+ sftp = null;
80
+ constructor(options) {
81
+ this.host = options.host;
82
+ this.user = options.user;
83
+ this.keyPath = options.keyPath;
84
+ this.password = options.password;
85
+ this.port = options.port ?? 22;
86
+ this.timeout = options.timeout ?? 30;
87
+ this.retryAttempts = options.retryAttempts ?? 3;
88
+ this.retryDelay = options.retryDelay ?? 2.0;
89
+ }
90
+ /**
91
+ * Establish SSH connection to the remote host.
92
+ * Retries based on retryAttempts setting.
93
+ */
94
+ async connect() {
95
+ const ClientCtor = getClientCtor();
96
+ for (let attempt = 0; attempt < this.retryAttempts; attempt++) {
97
+ try {
98
+ this.client = new ClientCtor();
99
+ await new Promise((resolve, reject) => {
100
+ const connectConfig = {
101
+ host: this.host,
102
+ port: this.port,
103
+ username: this.user,
104
+ readyTimeout: this.timeout * 1000
105
+ };
106
+ if (this.keyPath) {
107
+ const expandedPath = this.keyPath.startsWith("~")
108
+ ? path.join(os.homedir(), this.keyPath.slice(1))
109
+ : this.keyPath;
110
+ if (!fs.existsSync(expandedPath)) {
111
+ reject(new SSHConnectionError(`SSH key not found at ${expandedPath}`));
112
+ return;
113
+ }
114
+ connectConfig.privateKey = fs.readFileSync(expandedPath);
115
+ }
116
+ else if (this.password) {
117
+ connectConfig.password = this.password;
118
+ }
119
+ else {
120
+ // Try to use SSH agent
121
+ connectConfig.agent = process.env.SSH_AUTH_SOCK;
122
+ }
123
+ this.client.on("ready", () => resolve());
124
+ this.client.on("error", (err) => reject(err));
125
+ this.client.connect(connectConfig);
126
+ });
127
+ return; // Connection successful
128
+ }
129
+ catch (err) {
130
+ if (attempt < this.retryAttempts - 1) {
131
+ await sleep(this.retryDelay * 1000);
132
+ continue;
133
+ }
134
+ throw new SSHConnectionError(`Failed to connect to ${this.user}@${this.host}:${this.port} ` +
135
+ `after ${this.retryAttempts} attempts: ${err}`);
136
+ }
137
+ }
138
+ }
139
+ /** Close SSH and SFTP connections. */
140
+ disconnect() {
141
+ if (this.sftp) {
142
+ try {
143
+ this.sftp.end();
144
+ }
145
+ catch (err) {
146
+ log.debug(`SFTP end() threw on disconnect from ${this.host}`, err);
147
+ }
148
+ this.sftp = null;
149
+ }
150
+ if (this.client) {
151
+ try {
152
+ this.client.end();
153
+ }
154
+ catch (err) {
155
+ log.debug(`SSH client end() threw on disconnect from ${this.host}`, err);
156
+ }
157
+ this.client = null;
158
+ }
159
+ }
160
+ /** Check if SSH connection is active. */
161
+ isConnected() {
162
+ if (!this.client)
163
+ return false;
164
+ // Heuristic: check whether the underlying socket is writable.
165
+ const sock = this.client._sock;
166
+ return sock?.writable === true;
167
+ }
168
+ /** Ensure connection is active, reconnect if necessary. */
169
+ async ensureConnected() {
170
+ if (!this.isConnected()) {
171
+ await this.connect();
172
+ }
173
+ }
174
+ /**
175
+ * Execute a command on the remote host.
176
+ *
177
+ * @returns Tuple of [exitCode, stdout, stderr]
178
+ */
179
+ async execute(command, options) {
180
+ const check = options?.check ?? true;
181
+ const timeout = options?.timeout ?? this.timeout;
182
+ await this.ensureConnected();
183
+ if (!this.client) {
184
+ throw new SSHConnectionError("Not connected to remote host");
185
+ }
186
+ return new Promise((resolve, reject) => {
187
+ this.client.exec(command, (err, channel) => {
188
+ if (err) {
189
+ reject(new SSHConnectionError(`exec error: ${err.message}`));
190
+ return;
191
+ }
192
+ let stdoutData = "";
193
+ let stderrData = "";
194
+ let timer;
195
+ if (timeout > 0) {
196
+ timer = setTimeout(() => {
197
+ channel.close();
198
+ reject(new SSHCommandError(`Command timed out after ${timeout}s: ${command}`, -1, stdoutData, stderrData));
199
+ }, timeout * 1000);
200
+ }
201
+ channel.on("data", (data) => {
202
+ stdoutData += data.toString("utf-8");
203
+ });
204
+ channel.stderr.on("data", (data) => {
205
+ stderrData += data.toString("utf-8");
206
+ });
207
+ channel.on("close", (exitCode) => {
208
+ if (timer)
209
+ clearTimeout(timer);
210
+ const code = exitCode ?? -1;
211
+ if (check && code !== 0) {
212
+ const errorMsg = `Command failed with exit code ${code}: ${command}\nSTDERR:\n${stderrData}`;
213
+ reject(new SSHCommandError(errorMsg, code, stdoutData, stderrData));
214
+ return;
215
+ }
216
+ resolve([code, stdoutData, stderrData]);
217
+ });
218
+ });
219
+ });
220
+ }
221
+ /**
222
+ * Execute a multi-line shell script on the remote host.
223
+ *
224
+ * @returns Tuple of [exitCode, stdout, stderr]
225
+ */
226
+ async executeScript(script, options) {
227
+ // Wrap script in bash with proper quoting
228
+ const escaped = script.replace(/'/g, "'\\''");
229
+ const command = `bash -c '${escaped}'`;
230
+ return this.execute(command, options);
231
+ }
232
+ // -----------------------------------------------------------------------
233
+ // SFTP operations
234
+ // -----------------------------------------------------------------------
235
+ async getSftp() {
236
+ await this.ensureConnected();
237
+ if (!this.sftp) {
238
+ if (!this.client) {
239
+ throw new SSHConnectionError("Not connected to remote host");
240
+ }
241
+ this.sftp = await new Promise((resolve, reject) => {
242
+ this.client.sftp((err, sftp) => {
243
+ if (err)
244
+ reject(new SSHConnectionError(`SFTP error: ${err.message}`));
245
+ else
246
+ resolve(sftp);
247
+ });
248
+ });
249
+ }
250
+ return this.sftp;
251
+ }
252
+ /**
253
+ * Upload a file to the remote host.
254
+ */
255
+ async uploadFile(localPath, remotePath, mode) {
256
+ if (!fs.existsSync(localPath)) {
257
+ throw new Error(`Local file not found: ${localPath}`);
258
+ }
259
+ const sftp = await this.getSftp();
260
+ await new Promise((resolve, reject) => {
261
+ sftp.fastPut(localPath, remotePath, (err) => {
262
+ if (err)
263
+ reject(err);
264
+ else
265
+ resolve();
266
+ });
267
+ });
268
+ if (mode !== undefined) {
269
+ await new Promise((resolve, reject) => {
270
+ sftp.chmod(remotePath, mode, (err) => {
271
+ if (err)
272
+ reject(err);
273
+ else
274
+ resolve();
275
+ });
276
+ });
277
+ }
278
+ }
279
+ /**
280
+ * Upload string content as a file to the remote host.
281
+ */
282
+ async uploadString(content, remotePath, mode) {
283
+ const sftp = await this.getSftp();
284
+ await new Promise((resolve, reject) => {
285
+ const stream = sftp.createWriteStream(remotePath);
286
+ stream.on("error", reject);
287
+ stream.on("close", () => resolve());
288
+ stream.end(content, "utf-8");
289
+ });
290
+ if (mode !== undefined) {
291
+ await new Promise((resolve, reject) => {
292
+ sftp.chmod(remotePath, mode, (err) => {
293
+ if (err)
294
+ reject(err);
295
+ else
296
+ resolve();
297
+ });
298
+ });
299
+ }
300
+ }
301
+ /**
302
+ * Download a file from the remote host.
303
+ */
304
+ async downloadFile(remotePath, localPath) {
305
+ const sftp = await this.getSftp();
306
+ // Ensure local directory exists
307
+ const localDir = path.dirname(localPath);
308
+ fs.mkdirSync(localDir, { recursive: true });
309
+ await new Promise((resolve, reject) => {
310
+ sftp.fastGet(remotePath, localPath, (err) => {
311
+ if (err)
312
+ reject(err);
313
+ else
314
+ resolve();
315
+ });
316
+ });
317
+ }
318
+ /**
319
+ * Check if a file exists on the remote host.
320
+ */
321
+ async fileExists(remotePath) {
322
+ try {
323
+ const sftp = await this.getSftp();
324
+ await new Promise((resolve, reject) => {
325
+ sftp.stat(remotePath, (err) => {
326
+ if (err)
327
+ reject(err);
328
+ else
329
+ resolve();
330
+ });
331
+ });
332
+ return true;
333
+ }
334
+ catch {
335
+ return false;
336
+ }
337
+ }
338
+ /**
339
+ * Create a directory on the remote host.
340
+ */
341
+ async mkdir(remotePath, mode = 0o755, parents = true) {
342
+ if (parents) {
343
+ const parts = remotePath.split("/").filter(Boolean);
344
+ let current = remotePath.startsWith("/") ? "/" : "";
345
+ const sftp = await this.getSftp();
346
+ for (const part of parts) {
347
+ current = current ? path.posix.join(current, part) : part;
348
+ try {
349
+ await new Promise((resolve, reject) => {
350
+ sftp.mkdir(current, { mode }, (err) => {
351
+ if (err)
352
+ reject(err);
353
+ else
354
+ resolve();
355
+ });
356
+ });
357
+ }
358
+ catch {
359
+ // Directory might already exist
360
+ }
361
+ }
362
+ }
363
+ else {
364
+ const sftp = await this.getSftp();
365
+ await new Promise((resolve, reject) => {
366
+ sftp.mkdir(remotePath, { mode }, (err) => {
367
+ if (err)
368
+ reject(err);
369
+ else
370
+ resolve();
371
+ });
372
+ });
373
+ }
374
+ }
375
+ /**
376
+ * Remove a directory on the remote host.
377
+ */
378
+ async rmdir(remotePath, recursive = false) {
379
+ if (recursive) {
380
+ const escaped = remotePath.replace(/'/g, "'\\''");
381
+ await this.execute(`rm -rf '${escaped}'`);
382
+ }
383
+ else {
384
+ const sftp = await this.getSftp();
385
+ await new Promise((resolve, reject) => {
386
+ sftp.rmdir(remotePath, (err) => {
387
+ if (err)
388
+ reject(err);
389
+ else
390
+ resolve();
391
+ });
392
+ });
393
+ }
394
+ }
395
+ }
396
+ // ---------------------------------------------------------------------------
397
+ // Helper: create an SSHConnection, connect, run a callback, then disconnect
398
+ // ---------------------------------------------------------------------------
399
+ /**
400
+ * Convenience function: creates an SSHConnection, connects, invokes the
401
+ * callback, and ensures disconnection afterwards.
402
+ *
403
+ * @example
404
+ * ```ts
405
+ * await withSSHConnection(
406
+ * { host: "192.168.1.100", user: "ubuntu", keyPath: "~/.ssh/id_rsa" },
407
+ * async (ssh) => {
408
+ * const [code, stdout, stderr] = await ssh.execute("ls -la");
409
+ * console.log(stdout);
410
+ * }
411
+ * );
412
+ * ```
413
+ */
414
+ export async function withSSHConnection(options, fn) {
415
+ const conn = new SSHConnection(options);
416
+ try {
417
+ await conn.connect();
418
+ return await fn(conn);
419
+ }
420
+ finally {
421
+ conn.disconnect();
422
+ }
423
+ }
424
+ // ---------------------------------------------------------------------------
425
+ // Internal helpers
426
+ // ---------------------------------------------------------------------------
427
+ function sleep(ms) {
428
+ return new Promise((resolve) => setTimeout(resolve, ms));
429
+ }
430
+ //# sourceMappingURL=ssh.js.map