@daytonaio/sdk 0.170.0 → 0.171.0-alpha.3

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 (237) hide show
  1. package/LICENSE +190 -0
  2. package/cjs/CodeInterpreter.d.ts +95 -0
  3. package/cjs/CodeInterpreter.d.ts.map +1 -0
  4. package/cjs/CodeInterpreter.js +297 -0
  5. package/cjs/CodeInterpreter.js.map +1 -0
  6. package/cjs/ComputerUse.d.ts +539 -0
  7. package/cjs/ComputerUse.d.ts.map +1 -0
  8. package/cjs/ComputerUse.js +808 -0
  9. package/cjs/ComputerUse.js.map +1 -0
  10. package/cjs/Daytona.d.ts +355 -0
  11. package/cjs/Daytona.d.ts.map +1 -0
  12. package/cjs/Daytona.js +527 -0
  13. package/cjs/Daytona.js.map +1 -0
  14. package/cjs/FileSystem.d.ts +371 -0
  15. package/cjs/FileSystem.d.ts.map +1 -0
  16. package/cjs/FileSystem.js +489 -0
  17. package/cjs/FileSystem.js.map +1 -0
  18. package/cjs/Git.d.ts +203 -0
  19. package/cjs/Git.d.ts.map +1 -0
  20. package/cjs/Git.js +326 -0
  21. package/cjs/Git.js.map +1 -0
  22. package/cjs/Image.d.ts +265 -0
  23. package/cjs/Image.d.ts.map +1 -0
  24. package/cjs/Image.js +586 -0
  25. package/cjs/Image.js.map +1 -0
  26. package/cjs/LspServer.d.ts +172 -0
  27. package/cjs/LspServer.d.ts.map +1 -0
  28. package/cjs/LspServer.js +259 -0
  29. package/cjs/LspServer.js.map +1 -0
  30. package/cjs/ObjectStorage.d.ts +79 -0
  31. package/cjs/ObjectStorage.d.ts.map +1 -0
  32. package/cjs/ObjectStorage.js +199 -0
  33. package/cjs/ObjectStorage.js.map +1 -0
  34. package/cjs/Process.d.ts +490 -0
  35. package/cjs/Process.d.ts.map +1 -0
  36. package/cjs/Process.js +647 -0
  37. package/cjs/Process.js.map +1 -0
  38. package/cjs/PtyHandle.d.ts +155 -0
  39. package/cjs/PtyHandle.d.ts.map +1 -0
  40. package/cjs/PtyHandle.js +416 -0
  41. package/cjs/PtyHandle.js.map +1 -0
  42. package/cjs/README.md +180 -0
  43. package/cjs/Sandbox.d.ts +476 -0
  44. package/cjs/Sandbox.d.ts.map +1 -0
  45. package/cjs/Sandbox.js +905 -0
  46. package/cjs/Sandbox.js.map +1 -0
  47. package/cjs/Snapshot.d.ts +140 -0
  48. package/cjs/Snapshot.d.ts.map +1 -0
  49. package/cjs/Snapshot.js +248 -0
  50. package/cjs/Snapshot.js.map +1 -0
  51. package/cjs/Volume.d.ts +84 -0
  52. package/cjs/Volume.d.ts.map +1 -0
  53. package/cjs/Volume.js +119 -0
  54. package/cjs/Volume.js.map +1 -0
  55. package/cjs/__tests__/helpers.d.ts +6 -0
  56. package/cjs/__tests__/helpers.d.ts.map +1 -0
  57. package/cjs/__tests__/helpers.js +26 -0
  58. package/cjs/__tests__/helpers.js.map +1 -0
  59. package/cjs/errors/DaytonaError.d.ts +171 -0
  60. package/cjs/errors/DaytonaError.d.ts.map +1 -0
  61. package/cjs/errors/DaytonaError.js +258 -0
  62. package/cjs/errors/DaytonaError.js.map +1 -0
  63. package/cjs/index.d.ts +22 -0
  64. package/cjs/index.d.ts.map +1 -0
  65. package/cjs/index.js +49 -0
  66. package/cjs/index.js.map +1 -0
  67. package/cjs/package.json +3 -0
  68. package/cjs/types/Charts.d.ts +38 -0
  69. package/cjs/types/Charts.d.ts.map +1 -0
  70. package/cjs/types/Charts.js +37 -0
  71. package/cjs/types/Charts.js.map +1 -0
  72. package/cjs/types/CodeInterpreter.d.ts +77 -0
  73. package/cjs/types/CodeInterpreter.d.ts.map +1 -0
  74. package/cjs/types/CodeInterpreter.js +7 -0
  75. package/cjs/types/CodeInterpreter.js.map +1 -0
  76. package/cjs/types/ExecuteResponse.d.ts +26 -0
  77. package/cjs/types/ExecuteResponse.d.ts.map +1 -0
  78. package/cjs/types/ExecuteResponse.js +7 -0
  79. package/cjs/types/ExecuteResponse.js.map +1 -0
  80. package/cjs/types/Pty.d.ts +48 -0
  81. package/cjs/types/Pty.d.ts.map +1 -0
  82. package/cjs/types/Pty.js +7 -0
  83. package/cjs/types/Pty.js.map +1 -0
  84. package/cjs/utils/Binary.d.ts +39 -0
  85. package/cjs/utils/Binary.d.ts.map +1 -0
  86. package/cjs/utils/Binary.js +168 -0
  87. package/cjs/utils/Binary.js.map +1 -0
  88. package/cjs/utils/FileTransfer.d.ts +15 -0
  89. package/cjs/utils/FileTransfer.d.ts.map +1 -0
  90. package/cjs/utils/FileTransfer.js +261 -0
  91. package/cjs/utils/FileTransfer.js.map +1 -0
  92. package/cjs/utils/Import.d.ts +125 -0
  93. package/cjs/utils/Import.d.ts.map +1 -0
  94. package/cjs/utils/Import.js +112 -0
  95. package/cjs/utils/Import.js.map +1 -0
  96. package/cjs/utils/Multipart.d.ts +29 -0
  97. package/cjs/utils/Multipart.d.ts.map +1 -0
  98. package/cjs/utils/Multipart.js +115 -0
  99. package/cjs/utils/Multipart.js.map +1 -0
  100. package/cjs/utils/Runtime.d.ts +44 -0
  101. package/cjs/utils/Runtime.d.ts.map +1 -0
  102. package/cjs/utils/Runtime.js +95 -0
  103. package/cjs/utils/Runtime.js.map +1 -0
  104. package/cjs/utils/Stream.d.ts +20 -0
  105. package/cjs/utils/Stream.d.ts.map +1 -0
  106. package/cjs/utils/Stream.js +364 -0
  107. package/cjs/utils/Stream.js.map +1 -0
  108. package/cjs/utils/WebSocket.d.ts +10 -0
  109. package/cjs/utils/WebSocket.d.ts.map +1 -0
  110. package/cjs/utils/WebSocket.js +26 -0
  111. package/cjs/utils/WebSocket.js.map +1 -0
  112. package/cjs/utils/otel.decorator.d.ts +83 -0
  113. package/cjs/utils/otel.decorator.d.ts.map +1 -0
  114. package/cjs/utils/otel.decorator.js +141 -0
  115. package/cjs/utils/otel.decorator.js.map +1 -0
  116. package/esm/CodeInterpreter.d.ts +95 -0
  117. package/esm/CodeInterpreter.d.ts.map +1 -0
  118. package/esm/CodeInterpreter.js +292 -0
  119. package/esm/CodeInterpreter.js.map +1 -0
  120. package/esm/ComputerUse.d.ts +539 -0
  121. package/esm/ComputerUse.d.ts.map +1 -0
  122. package/esm/ComputerUse.js +799 -0
  123. package/esm/ComputerUse.js.map +1 -0
  124. package/esm/Daytona.d.ts +355 -0
  125. package/esm/Daytona.d.ts.map +1 -0
  126. package/esm/Daytona.js +523 -0
  127. package/esm/Daytona.js.map +1 -0
  128. package/esm/FileSystem.d.ts +371 -0
  129. package/esm/FileSystem.d.ts.map +1 -0
  130. package/esm/FileSystem.js +485 -0
  131. package/esm/FileSystem.js.map +1 -0
  132. package/esm/Git.d.ts +203 -0
  133. package/esm/Git.d.ts.map +1 -0
  134. package/esm/Git.js +322 -0
  135. package/esm/Git.js.map +1 -0
  136. package/esm/Image.d.ts +265 -0
  137. package/esm/Image.d.ts.map +1 -0
  138. package/esm/Image.js +581 -0
  139. package/esm/Image.js.map +1 -0
  140. package/esm/LspServer.d.ts +172 -0
  141. package/esm/LspServer.d.ts.map +1 -0
  142. package/esm/LspServer.js +255 -0
  143. package/esm/LspServer.js.map +1 -0
  144. package/esm/ObjectStorage.d.ts +79 -0
  145. package/esm/ObjectStorage.d.ts.map +1 -0
  146. package/esm/ObjectStorage.js +195 -0
  147. package/esm/ObjectStorage.js.map +1 -0
  148. package/esm/Process.d.ts +490 -0
  149. package/esm/Process.d.ts.map +1 -0
  150. package/esm/Process.js +642 -0
  151. package/esm/Process.js.map +1 -0
  152. package/esm/PtyHandle.d.ts +155 -0
  153. package/esm/PtyHandle.d.ts.map +1 -0
  154. package/esm/PtyHandle.js +412 -0
  155. package/esm/PtyHandle.js.map +1 -0
  156. package/esm/README.md +180 -0
  157. package/esm/Sandbox.d.ts +476 -0
  158. package/esm/Sandbox.d.ts.map +1 -0
  159. package/esm/Sandbox.js +901 -0
  160. package/esm/Sandbox.js.map +1 -0
  161. package/esm/Snapshot.d.ts +140 -0
  162. package/esm/Snapshot.d.ts.map +1 -0
  163. package/esm/Snapshot.js +244 -0
  164. package/esm/Snapshot.js.map +1 -0
  165. package/esm/Volume.d.ts +84 -0
  166. package/esm/Volume.d.ts.map +1 -0
  167. package/esm/Volume.js +115 -0
  168. package/esm/Volume.js.map +1 -0
  169. package/esm/__tests__/helpers.d.ts +6 -0
  170. package/esm/__tests__/helpers.d.ts.map +1 -0
  171. package/esm/__tests__/helpers.js +20 -0
  172. package/esm/__tests__/helpers.js.map +1 -0
  173. package/esm/errors/DaytonaError.d.ts +171 -0
  174. package/esm/errors/DaytonaError.d.ts.map +1 -0
  175. package/esm/errors/DaytonaError.js +243 -0
  176. package/esm/errors/DaytonaError.js.map +1 -0
  177. package/esm/index.d.ts +22 -0
  178. package/esm/index.d.ts.map +1 -0
  179. package/esm/index.js +21 -0
  180. package/esm/index.js.map +1 -0
  181. package/esm/package.json +3 -0
  182. package/esm/types/Charts.d.ts +38 -0
  183. package/esm/types/Charts.d.ts.map +1 -0
  184. package/esm/types/Charts.js +33 -0
  185. package/esm/types/Charts.js.map +1 -0
  186. package/esm/types/CodeInterpreter.d.ts +77 -0
  187. package/esm/types/CodeInterpreter.d.ts.map +1 -0
  188. package/esm/types/CodeInterpreter.js +6 -0
  189. package/esm/types/CodeInterpreter.js.map +1 -0
  190. package/esm/types/ExecuteResponse.d.ts +26 -0
  191. package/esm/types/ExecuteResponse.d.ts.map +1 -0
  192. package/esm/types/ExecuteResponse.js +6 -0
  193. package/esm/types/ExecuteResponse.js.map +1 -0
  194. package/esm/types/Pty.d.ts +48 -0
  195. package/esm/types/Pty.d.ts.map +1 -0
  196. package/esm/types/Pty.js +6 -0
  197. package/esm/types/Pty.js.map +1 -0
  198. package/esm/utils/Binary.d.ts +39 -0
  199. package/esm/utils/Binary.d.ts.map +1 -0
  200. package/esm/utils/Binary.js +157 -0
  201. package/esm/utils/Binary.js.map +1 -0
  202. package/esm/utils/FileTransfer.d.ts +15 -0
  203. package/esm/utils/FileTransfer.d.ts.map +1 -0
  204. package/esm/utils/FileTransfer.js +254 -0
  205. package/esm/utils/FileTransfer.js.map +1 -0
  206. package/esm/utils/Import.d.ts +95 -0
  207. package/esm/utils/Import.d.ts.map +1 -0
  208. package/esm/utils/Import.js +77 -0
  209. package/esm/utils/Import.js.map +1 -0
  210. package/esm/utils/Multipart.d.ts +29 -0
  211. package/esm/utils/Multipart.d.ts.map +1 -0
  212. package/esm/utils/Multipart.js +109 -0
  213. package/esm/utils/Multipart.js.map +1 -0
  214. package/esm/utils/Runtime.d.ts +44 -0
  215. package/esm/utils/Runtime.d.ts.map +1 -0
  216. package/esm/utils/Runtime.js +89 -0
  217. package/esm/utils/Runtime.js.map +1 -0
  218. package/esm/utils/Stream.d.ts +20 -0
  219. package/esm/utils/Stream.d.ts.map +1 -0
  220. package/esm/utils/Stream.js +360 -0
  221. package/esm/utils/Stream.js.map +1 -0
  222. package/esm/utils/WebSocket.d.ts +10 -0
  223. package/esm/utils/WebSocket.d.ts.map +1 -0
  224. package/esm/utils/WebSocket.js +22 -0
  225. package/esm/utils/WebSocket.js.map +1 -0
  226. package/esm/utils/otel.decorator.d.ts +83 -0
  227. package/esm/utils/otel.decorator.d.ts.map +1 -0
  228. package/esm/utils/otel.decorator.js +136 -0
  229. package/esm/utils/otel.decorator.js.map +1 -0
  230. package/package.json +20 -8
  231. package/src/ComputerUse.d.ts +4 -4
  232. package/src/ComputerUse.js +4 -4
  233. package/src/Sandbox.d.ts +1 -18
  234. package/src/Sandbox.js +0 -29
  235. package/src/Sandbox.js.map +1 -1
  236. package/src/__tests__/helpers.js +0 -2
  237. package/src/__tests__/helpers.js.map +1 -1
@@ -0,0 +1,155 @@
1
+ import WebSocket from 'isomorphic-ws';
2
+ import { PtyResult } from './types/Pty';
3
+ import { PtySessionInfo } from '@daytona/toolbox-api-client';
4
+ /**
5
+ * PTY session handle for managing a single PTY session.
6
+ *
7
+ * Provides methods for sending input, resizing the terminal, waiting for completion,
8
+ * and managing the WebSocket connection to a PTY session.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Create a PTY session
13
+ * const ptyHandle = await process.createPty({
14
+ * id: 'my-session',
15
+ * cols: 120,
16
+ * rows: 30,
17
+ * onData: (data) => {
18
+ * const text = new TextDecoder().decode(data);
19
+ * process.stdout.write(text);
20
+ * },
21
+ * });
22
+ *
23
+ *
24
+ * // Send commands
25
+ * await ptyHandle.sendInput('ls -la\n');
26
+ * await ptyHandle.sendInput('exit\n');
27
+ *
28
+ * // Wait for completion
29
+ * const result = await ptyHandle.wait();
30
+ * console.log(`PTY exited with code: ${result.exitCode}`);
31
+ *
32
+ * // Clean up
33
+ * await ptyHandle.disconnect();
34
+ * ```
35
+ */
36
+ export declare class PtyHandle {
37
+ private readonly ws;
38
+ private readonly handleResize;
39
+ private readonly handleKill;
40
+ private readonly onPty;
41
+ readonly sessionId: string;
42
+ private _exitCode?;
43
+ private _error?;
44
+ private connected;
45
+ private connectionEstablished;
46
+ constructor(ws: WebSocket, handleResize: (cols: number, rows: number) => Promise<PtySessionInfo>, handleKill: () => Promise<void>, onPty: (data: Uint8Array) => void | Promise<void>, sessionId: string);
47
+ /**
48
+ * Exit code of the PTY process (if terminated)
49
+ */
50
+ get exitCode(): number | undefined;
51
+ /**
52
+ * Error message if the PTY failed
53
+ */
54
+ get error(): string | undefined;
55
+ /**
56
+ * Check if connected to the PTY session
57
+ */
58
+ isConnected(): boolean;
59
+ /**
60
+ * Wait for the WebSocket connection to be established.
61
+ *
62
+ * This method ensures the PTY session is ready to receive input and send output.
63
+ * It waits for the server to confirm the connection is established.
64
+ *
65
+ * @throws {Error} If connection times out (10 seconds) or connection fails
66
+ */
67
+ waitForConnection(): Promise<void>;
68
+ /**
69
+ * Send input data to the PTY session.
70
+ *
71
+ * Sends keyboard input or commands to the terminal session. The data will be
72
+ * processed as if it was typed in the terminal.
73
+ *
74
+ * @param {string | Uint8Array} data - Input data to send (commands, keystrokes, etc.)
75
+ * @throws {Error} If PTY is not connected or sending fails
76
+ *
77
+ * @example
78
+ * // Send a command
79
+ * await ptyHandle.sendInput('ls -la\n');
80
+ *
81
+ * // Send raw bytes
82
+ * await ptyHandle.sendInput(new Uint8Array([3])); // Ctrl+C
83
+ */
84
+ sendInput(data: string | Uint8Array): Promise<void>;
85
+ /**
86
+ * Resize the PTY terminal dimensions.
87
+ *
88
+ * Changes the terminal size which will notify terminal applications
89
+ * about the new dimensions via SIGWINCH signal.
90
+ *
91
+ * @param {number} cols - New number of terminal columns
92
+ * @param {number} rows - New number of terminal rows
93
+ *
94
+ * @example
95
+ * // Resize to 120x30
96
+ * await ptyHandle.resize(120, 30);
97
+ */
98
+ resize(cols: number, rows: number): Promise<PtySessionInfo>;
99
+ /**
100
+ * Disconnect from the PTY session and clean up resources.
101
+ *
102
+ * Closes the WebSocket connection and releases any associated resources.
103
+ * Should be called when done with the PTY session.
104
+ *
105
+ * @example
106
+ * // Always clean up when done
107
+ * try {
108
+ * // ... use PTY session
109
+ * } finally {
110
+ * await ptyHandle.disconnect();
111
+ * }
112
+ */
113
+ disconnect(): Promise<void>;
114
+ /**
115
+ * Wait for the PTY process to exit and return the result.
116
+ *
117
+ * This method blocks until the PTY process terminates and returns
118
+ * information about how it exited.
119
+ *
120
+ * @returns {Promise<PtyResult>} Result containing exit code and error information
121
+ *
122
+ * @example
123
+ * // Wait for process to complete
124
+ * const result = await ptyHandle.wait();
125
+ *
126
+ * if (result.exitCode === 0) {
127
+ * console.log('Process completed successfully');
128
+ * } else {
129
+ * console.log(`Process failed with code: ${result.exitCode}`);
130
+ * if (result.error) {
131
+ * console.log(`Error: ${result.error}`);
132
+ * }
133
+ * }
134
+ */
135
+ wait(): Promise<PtyResult>;
136
+ /**
137
+ * Kill the PTY process and terminate the session.
138
+ *
139
+ * Forcefully terminates the PTY session and its associated process.
140
+ * This operation is irreversible and will cause the PTY to exit immediately.
141
+ *
142
+ * @throws {Error} If the kill operation fails
143
+ *
144
+ * @example
145
+ * // Kill a long-running process
146
+ * await ptyHandle.kill();
147
+ *
148
+ * // Wait to confirm termination
149
+ * const result = await ptyHandle.wait();
150
+ * console.log(`Process terminated with exit code: ${result.exitCode}`);
151
+ */
152
+ kill(): Promise<void>;
153
+ private setupWebSocketHandlers;
154
+ }
155
+ //# sourceMappingURL=PtyHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PtyHandle.d.ts","sourceRoot":"","sources":["../../../../../libs/sdk-typescript/src/PtyHandle.ts"],"names":[],"mappings":"AAKA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,SAAS;IAOlB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM;IAV5B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,qBAAqB,CAAQ;gBAGlB,EAAE,EAAE,SAAS,EACb,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,EACrE,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACzD,SAAS,EAAE,MAAM;IAK5B;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;OAOG;IAEG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxC;;;;;;;;;;;;;;;OAeG;IAEG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD;;;;;;;;;;;;OAYG;IAEG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjE;;;;;;;;;;;;;OAaG;IAEG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;;;;;;;;;;;;;;;;;;;OAoBG;IAEG,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IA2BhC;;;;;;;;;;;;;;;OAeG;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,sBAAsB;CA+H/B"}
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2025 Daytona Platforms Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PtyHandle = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const isomorphic_ws_1 = tslib_1.__importDefault(require("isomorphic-ws"));
10
+ const DaytonaError_1 = require("./errors/DaytonaError");
11
+ const otel_decorator_1 = require("./utils/otel.decorator");
12
+ /**
13
+ * PTY session handle for managing a single PTY session.
14
+ *
15
+ * Provides methods for sending input, resizing the terminal, waiting for completion,
16
+ * and managing the WebSocket connection to a PTY session.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Create a PTY session
21
+ * const ptyHandle = await process.createPty({
22
+ * id: 'my-session',
23
+ * cols: 120,
24
+ * rows: 30,
25
+ * onData: (data) => {
26
+ * const text = new TextDecoder().decode(data);
27
+ * process.stdout.write(text);
28
+ * },
29
+ * });
30
+ *
31
+ *
32
+ * // Send commands
33
+ * await ptyHandle.sendInput('ls -la\n');
34
+ * await ptyHandle.sendInput('exit\n');
35
+ *
36
+ * // Wait for completion
37
+ * const result = await ptyHandle.wait();
38
+ * console.log(`PTY exited with code: ${result.exitCode}`);
39
+ *
40
+ * // Clean up
41
+ * await ptyHandle.disconnect();
42
+ * ```
43
+ */
44
+ class PtyHandle {
45
+ ws;
46
+ handleResize;
47
+ handleKill;
48
+ onPty;
49
+ sessionId;
50
+ _exitCode;
51
+ _error;
52
+ connected = false;
53
+ connectionEstablished = false; // Track control message received
54
+ constructor(ws, handleResize, handleKill, onPty, sessionId) {
55
+ this.ws = ws;
56
+ this.handleResize = handleResize;
57
+ this.handleKill = handleKill;
58
+ this.onPty = onPty;
59
+ this.sessionId = sessionId;
60
+ this.setupWebSocketHandlers();
61
+ }
62
+ /**
63
+ * Exit code of the PTY process (if terminated)
64
+ */
65
+ get exitCode() {
66
+ return this._exitCode;
67
+ }
68
+ /**
69
+ * Error message if the PTY failed
70
+ */
71
+ get error() {
72
+ return this._error;
73
+ }
74
+ /**
75
+ * Check if connected to the PTY session
76
+ */
77
+ isConnected() {
78
+ return this.connected && this.ws.readyState === isomorphic_ws_1.default.OPEN;
79
+ }
80
+ /**
81
+ * Wait for the WebSocket connection to be established.
82
+ *
83
+ * This method ensures the PTY session is ready to receive input and send output.
84
+ * It waits for the server to confirm the connection is established.
85
+ *
86
+ * @throws {Error} If connection times out (10 seconds) or connection fails
87
+ */
88
+ async waitForConnection() {
89
+ if (this.connectionEstablished) {
90
+ return;
91
+ }
92
+ return new Promise((resolve, reject) => {
93
+ const timeout = setTimeout(() => {
94
+ reject(new DaytonaError_1.DaytonaTimeoutError('PTY connection timeout'));
95
+ }, 10000); // 10 second timeout
96
+ const checkConnection = () => {
97
+ if (this.connectionEstablished) {
98
+ clearTimeout(timeout);
99
+ resolve();
100
+ }
101
+ else if (this.ws.readyState === isomorphic_ws_1.default.CLOSED || this._error) {
102
+ clearTimeout(timeout);
103
+ reject(new DaytonaError_1.DaytonaConnectionError(this._error || 'Connection failed'));
104
+ }
105
+ else {
106
+ setTimeout(checkConnection, 100);
107
+ }
108
+ };
109
+ checkConnection();
110
+ });
111
+ }
112
+ /**
113
+ * Send input data to the PTY session.
114
+ *
115
+ * Sends keyboard input or commands to the terminal session. The data will be
116
+ * processed as if it was typed in the terminal.
117
+ *
118
+ * @param {string | Uint8Array} data - Input data to send (commands, keystrokes, etc.)
119
+ * @throws {Error} If PTY is not connected or sending fails
120
+ *
121
+ * @example
122
+ * // Send a command
123
+ * await ptyHandle.sendInput('ls -la\n');
124
+ *
125
+ * // Send raw bytes
126
+ * await ptyHandle.sendInput(new Uint8Array([3])); // Ctrl+C
127
+ */
128
+ async sendInput(data) {
129
+ if (!this.isConnected()) {
130
+ throw new DaytonaError_1.DaytonaConnectionError('PTY is not connected');
131
+ }
132
+ try {
133
+ if (typeof data === 'string') {
134
+ this.ws.send(new TextEncoder().encode(data));
135
+ }
136
+ else {
137
+ this.ws.send(data);
138
+ }
139
+ }
140
+ catch (error) {
141
+ const errorMessage = error instanceof Error ? error.message : String(error);
142
+ throw new DaytonaError_1.DaytonaConnectionError(`Failed to send input to PTY: ${errorMessage}`);
143
+ }
144
+ }
145
+ /**
146
+ * Resize the PTY terminal dimensions.
147
+ *
148
+ * Changes the terminal size which will notify terminal applications
149
+ * about the new dimensions via SIGWINCH signal.
150
+ *
151
+ * @param {number} cols - New number of terminal columns
152
+ * @param {number} rows - New number of terminal rows
153
+ *
154
+ * @example
155
+ * // Resize to 120x30
156
+ * await ptyHandle.resize(120, 30);
157
+ */
158
+ async resize(cols, rows) {
159
+ return await this.handleResize(cols, rows);
160
+ }
161
+ /**
162
+ * Disconnect from the PTY session and clean up resources.
163
+ *
164
+ * Closes the WebSocket connection and releases any associated resources.
165
+ * Should be called when done with the PTY session.
166
+ *
167
+ * @example
168
+ * // Always clean up when done
169
+ * try {
170
+ * // ... use PTY session
171
+ * } finally {
172
+ * await ptyHandle.disconnect();
173
+ * }
174
+ */
175
+ async disconnect() {
176
+ if (this.ws) {
177
+ try {
178
+ this.ws.close();
179
+ }
180
+ catch {
181
+ // Ignore close errors
182
+ }
183
+ }
184
+ }
185
+ /**
186
+ * Wait for the PTY process to exit and return the result.
187
+ *
188
+ * This method blocks until the PTY process terminates and returns
189
+ * information about how it exited.
190
+ *
191
+ * @returns {Promise<PtyResult>} Result containing exit code and error information
192
+ *
193
+ * @example
194
+ * // Wait for process to complete
195
+ * const result = await ptyHandle.wait();
196
+ *
197
+ * if (result.exitCode === 0) {
198
+ * console.log('Process completed successfully');
199
+ * } else {
200
+ * console.log(`Process failed with code: ${result.exitCode}`);
201
+ * if (result.error) {
202
+ * console.log(`Error: ${result.error}`);
203
+ * }
204
+ * }
205
+ */
206
+ async wait() {
207
+ return new Promise((resolve, reject) => {
208
+ if (this._exitCode !== undefined) {
209
+ resolve({
210
+ exitCode: this._exitCode,
211
+ error: this._error,
212
+ });
213
+ return;
214
+ }
215
+ const checkExit = () => {
216
+ if (this._exitCode !== undefined) {
217
+ resolve({
218
+ exitCode: this._exitCode,
219
+ error: this._error,
220
+ });
221
+ }
222
+ else if (this._error) {
223
+ reject(new DaytonaError_1.DaytonaError(this._error));
224
+ }
225
+ else {
226
+ setTimeout(checkExit, 100);
227
+ }
228
+ };
229
+ checkExit();
230
+ });
231
+ }
232
+ /**
233
+ * Kill the PTY process and terminate the session.
234
+ *
235
+ * Forcefully terminates the PTY session and its associated process.
236
+ * This operation is irreversible and will cause the PTY to exit immediately.
237
+ *
238
+ * @throws {Error} If the kill operation fails
239
+ *
240
+ * @example
241
+ * // Kill a long-running process
242
+ * await ptyHandle.kill();
243
+ *
244
+ * // Wait to confirm termination
245
+ * const result = await ptyHandle.wait();
246
+ * console.log(`Process terminated with exit code: ${result.exitCode}`);
247
+ */
248
+ async kill() {
249
+ return await this.handleKill();
250
+ }
251
+ setupWebSocketHandlers() {
252
+ // Set binary type for binary data handling
253
+ if ('binaryType' in this.ws) {
254
+ this.ws.binaryType = 'arraybuffer';
255
+ }
256
+ // Handle WebSocket open
257
+ const handleOpen = async () => {
258
+ this.connected = true;
259
+ };
260
+ // Handle WebSocket messages - control messages and PTY data
261
+ const handleMessage = async (event) => {
262
+ try {
263
+ const data = event && typeof event === 'object' && 'data' in event ? event.data : event;
264
+ if (typeof data === 'string') {
265
+ // Try to parse as control message first
266
+ try {
267
+ const controlMsg = JSON.parse(data);
268
+ if (controlMsg.type === 'control') {
269
+ if (controlMsg.status === 'connected') {
270
+ this.connectionEstablished = true;
271
+ return;
272
+ }
273
+ else if (controlMsg.status === 'error') {
274
+ this._error = controlMsg.error || 'Unknown connection error';
275
+ this.connected = false;
276
+ return;
277
+ }
278
+ }
279
+ }
280
+ catch {
281
+ // Not a control message, treat as PTY output
282
+ }
283
+ // Regular PTY text output
284
+ if (this.onPty) {
285
+ await this.onPty(new TextEncoder().encode(data));
286
+ }
287
+ }
288
+ else {
289
+ // Handle binary data (terminal output)
290
+ let bytes;
291
+ if (data instanceof ArrayBuffer) {
292
+ bytes = new Uint8Array(data);
293
+ }
294
+ else if (ArrayBuffer.isView(data)) {
295
+ bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
296
+ }
297
+ else if (data instanceof Blob) {
298
+ const buffer = await data.arrayBuffer();
299
+ bytes = new Uint8Array(buffer);
300
+ }
301
+ else {
302
+ throw new DaytonaError_1.DaytonaError(`Unsupported message data type: ${Object.prototype.toString.call(data)}`);
303
+ }
304
+ if (this.onPty) {
305
+ await this.onPty(bytes);
306
+ }
307
+ }
308
+ }
309
+ catch (error) {
310
+ const errorMessage = error instanceof Error ? error.message : String(error);
311
+ throw new DaytonaError_1.DaytonaError(`Error handling PTY message: ${errorMessage}`);
312
+ }
313
+ };
314
+ // Handle WebSocket errors
315
+ const handleError = async (error) => {
316
+ let errorMessage;
317
+ if (error instanceof Error) {
318
+ errorMessage = error.message;
319
+ }
320
+ else if (error && error instanceof Event) {
321
+ errorMessage = 'WebSocket connection error';
322
+ }
323
+ else {
324
+ errorMessage = String(error);
325
+ }
326
+ this._error = errorMessage;
327
+ this.connected = false;
328
+ };
329
+ // Handle WebSocket close - parse structured exit data
330
+ const handleClose = async (event) => {
331
+ this.connected = false;
332
+ // Parse structured exit data from close reason
333
+ if (event && event.reason) {
334
+ try {
335
+ const exitData = JSON.parse(event.reason);
336
+ if (typeof exitData.exitCode === 'number') {
337
+ this._exitCode = exitData.exitCode;
338
+ // Store exit reason if provided (undefined for exitCode 0)
339
+ if (exitData.exitReason) {
340
+ this._error = exitData.exitReason;
341
+ }
342
+ }
343
+ // Handle error messages from server (e.g., "PTY session not found")
344
+ if (exitData.error) {
345
+ this._error = exitData.error;
346
+ }
347
+ }
348
+ catch {
349
+ if (event.code === 1000) {
350
+ this._exitCode = 0;
351
+ }
352
+ }
353
+ }
354
+ // Default to exit code 0 if we can't parse it and it was a normal close
355
+ if (this._exitCode === undefined && event && event.code === 1000) {
356
+ this._exitCode = 0;
357
+ }
358
+ };
359
+ // Attach event listeners based on WebSocket implementation
360
+ if (this.ws.addEventListener) {
361
+ // Browser WebSocket
362
+ this.ws.addEventListener('open', handleOpen);
363
+ this.ws.addEventListener('message', handleMessage);
364
+ this.ws.addEventListener('error', handleError);
365
+ this.ws.addEventListener('close', handleClose);
366
+ }
367
+ else if ('on' in this.ws && typeof this.ws.on === 'function') {
368
+ // Node.js WebSocket
369
+ this.ws.on('open', handleOpen);
370
+ this.ws.on('message', handleMessage);
371
+ this.ws.on('error', handleError);
372
+ this.ws.on('close', handleClose);
373
+ }
374
+ else {
375
+ throw new DaytonaError_1.DaytonaError('Unsupported WebSocket implementation');
376
+ }
377
+ }
378
+ }
379
+ exports.PtyHandle = PtyHandle;
380
+ tslib_1.__decorate([
381
+ (0, otel_decorator_1.WithInstrumentation)(),
382
+ tslib_1.__metadata("design:type", Function),
383
+ tslib_1.__metadata("design:paramtypes", []),
384
+ tslib_1.__metadata("design:returntype", Promise)
385
+ ], PtyHandle.prototype, "waitForConnection", null);
386
+ tslib_1.__decorate([
387
+ (0, otel_decorator_1.WithInstrumentation)(),
388
+ tslib_1.__metadata("design:type", Function),
389
+ tslib_1.__metadata("design:paramtypes", [Object]),
390
+ tslib_1.__metadata("design:returntype", Promise)
391
+ ], PtyHandle.prototype, "sendInput", null);
392
+ tslib_1.__decorate([
393
+ (0, otel_decorator_1.WithInstrumentation)(),
394
+ tslib_1.__metadata("design:type", Function),
395
+ tslib_1.__metadata("design:paramtypes", [Number, Number]),
396
+ tslib_1.__metadata("design:returntype", Promise)
397
+ ], PtyHandle.prototype, "resize", null);
398
+ tslib_1.__decorate([
399
+ (0, otel_decorator_1.WithInstrumentation)(),
400
+ tslib_1.__metadata("design:type", Function),
401
+ tslib_1.__metadata("design:paramtypes", []),
402
+ tslib_1.__metadata("design:returntype", Promise)
403
+ ], PtyHandle.prototype, "disconnect", null);
404
+ tslib_1.__decorate([
405
+ (0, otel_decorator_1.WithInstrumentation)(),
406
+ tslib_1.__metadata("design:type", Function),
407
+ tslib_1.__metadata("design:paramtypes", []),
408
+ tslib_1.__metadata("design:returntype", Promise)
409
+ ], PtyHandle.prototype, "wait", null);
410
+ tslib_1.__decorate([
411
+ (0, otel_decorator_1.WithInstrumentation)(),
412
+ tslib_1.__metadata("design:type", Function),
413
+ tslib_1.__metadata("design:paramtypes", []),
414
+ tslib_1.__metadata("design:returntype", Promise)
415
+ ], PtyHandle.prototype, "kill", null);
416
+ //# sourceMappingURL=PtyHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PtyHandle.js","sourceRoot":"","sources":["../../../../../libs/sdk-typescript/src/PtyHandle.ts"],"names":[],"mappings":"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"}