@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,360 @@
1
+ import { STDOUT_PREFIX_BYTES, STDERR_PREFIX_BYTES, MAX_PREFIX_LEN } from '../Process.js';
2
+ function isStreamTerminationError(err) {
3
+ if (!err || typeof err !== 'object')
4
+ return false;
5
+ const e = err;
6
+ // Typical Undici / fetch termination cases
7
+ if (e.name === 'AbortError')
8
+ return true;
9
+ if (typeof e.message === 'string' && /terminated/i.test(e.message))
10
+ return true;
11
+ if (e.code === 'UND_ERR_SOCKET')
12
+ return true;
13
+ // Look into nested causes, Undici often nests errors
14
+ if (e.cause)
15
+ return isStreamTerminationError(e.cause);
16
+ return false;
17
+ }
18
+ /**
19
+ * Process a streaming response from fetch(), where getStream() returns a Fetch Response.
20
+ *
21
+ * @param getStream – zero-arg function that does `await fetch(...)` and returns the Response
22
+ * @param onChunk – called with each decoded UTF-8 chunk
23
+ * @param shouldTerminate – pollable; if true for two consecutive timeouts (or once if requireConsecutiveTermination=false), the loop breaks
24
+ * @param chunkTimeout – milliseconds to wait for a new chunk before calling shouldTerminate()
25
+ * @param requireConsecutiveTermination – whether you need two time-outs in a row to break
26
+ */
27
+ export async function processStreamingResponse(getStream, onChunk, shouldTerminate, chunkTimeout = 2000, requireConsecutiveTermination = true) {
28
+ const res = await getStream();
29
+ if (!res.body)
30
+ throw new Error('No streaming support');
31
+ const reader = res.body.getReader();
32
+ const decoder = new TextDecoder('utf-8');
33
+ const TIMEOUT = Symbol();
34
+ let exitCheckStreak = 0;
35
+ // Only one pending read promise at a time:
36
+ let readPromise = null;
37
+ try {
38
+ while (true) {
39
+ // Start a read if none in flight
40
+ if (!readPromise) {
41
+ readPromise = reader.read().then((r) => (r.done ? null : (r.value ?? new Uint8Array(0))));
42
+ }
43
+ // Race that single read against your timeout
44
+ const timeoutPromise = new Promise((r) => setTimeout(() => r(TIMEOUT), chunkTimeout));
45
+ const result = await Promise.race([readPromise, timeoutPromise]);
46
+ if (result === TIMEOUT) {
47
+ // no data yet, but the readPromise is still pending
48
+ const stop = await shouldTerminate();
49
+ if (stop) {
50
+ exitCheckStreak++;
51
+ if (!requireConsecutiveTermination || exitCheckStreak > 1) {
52
+ try {
53
+ await reader.cancel();
54
+ }
55
+ catch {
56
+ /* ignore */
57
+ }
58
+ readPromise = null;
59
+ break;
60
+ }
61
+ }
62
+ else {
63
+ exitCheckStreak = 0;
64
+ }
65
+ // loop again—but do NOT overwrite readPromise!
66
+ }
67
+ else {
68
+ // readPromise has resolved
69
+ readPromise = null;
70
+ if (result === null) {
71
+ // stream closed
72
+ break;
73
+ }
74
+ // valid chunk - use {stream: true} to buffer incomplete UTF-8 sequences
75
+ onChunk(decoder.decode(result, { stream: true }));
76
+ exitCheckStreak = 0;
77
+ }
78
+ }
79
+ }
80
+ catch (err) {
81
+ if (!isStreamTerminationError(err)) {
82
+ throw err;
83
+ }
84
+ }
85
+ finally {
86
+ // Flush any remaining buffered bytes from the decoder
87
+ const remaining = decoder.decode();
88
+ if (remaining) {
89
+ onChunk(remaining);
90
+ }
91
+ try {
92
+ await reader.cancel();
93
+ }
94
+ catch {
95
+ /* ignore */
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Demultiplexes a WebSocket stream into separate stdout and stderr streams.
101
+ *
102
+ * @param socket - The WebSocket instance to demultiplex.
103
+ * @param onStdout - Callback function for stdout messages.
104
+ * @param onStderr - Callback function for stderr messages.
105
+ */
106
+ export function stdDemuxStream(ws, onStdout, onStderr) {
107
+ return new Promise((resolve, reject) => {
108
+ // If running in a browser or any WebSocket supporting binaryType, use ArrayBuffer for binary data
109
+ if ('binaryType' in ws) {
110
+ ws.binaryType = 'arraybuffer'; // ensure binary frames yield ArrayBuffer, not Blob
111
+ }
112
+ // Separate decoders for stdout and stderr to maintain independent UTF-8 decoding state
113
+ const stdoutDecoder = new TextDecoder('utf-8');
114
+ const stderrDecoder = new TextDecoder('utf-8');
115
+ const buf = []; // Buffer to accumulate incoming chunks
116
+ let currentDataType = null; // Track current stream type
117
+ // Helper function to emit payload data
118
+ const emit = (payload) => {
119
+ if (payload.length === 0)
120
+ return;
121
+ // Use {stream: true} to buffer incomplete UTF-8 sequences for the next chunk
122
+ if (currentDataType === 'stdout') {
123
+ const text = stdoutDecoder.decode(payload, { stream: true });
124
+ onStdout(text);
125
+ }
126
+ else if (currentDataType === 'stderr') {
127
+ const text = stderrDecoder.decode(payload, { stream: true });
128
+ onStderr(text);
129
+ }
130
+ // If currentDataType is null, drop unlabeled bytes (shouldn't happen with proper labeling)
131
+ };
132
+ // Helper function to find a subarray within a larger array
133
+ const findSubarray = (haystack, needle) => {
134
+ if (needle.length === 0)
135
+ return 0;
136
+ if (haystack.length < needle.length)
137
+ return -1;
138
+ for (let i = 0; i <= haystack.length - needle.length; i++) {
139
+ let found = true;
140
+ for (let j = 0; j < needle.length; j++) {
141
+ if (haystack[i + j] !== needle[j]) {
142
+ found = false;
143
+ break;
144
+ }
145
+ }
146
+ if (found)
147
+ return i;
148
+ }
149
+ return -1;
150
+ };
151
+ // Event handler for incoming messages (Node: Buffer/ArrayBuffer/String; Browser: event.data etc.)
152
+ const handleMessage = (event) => {
153
+ // Normalize event/data between Node (ws) and browser WebSocket
154
+ const data = event && event instanceof Object && 'data' in event ? event.data : event;
155
+ try {
156
+ // Prepare a Uint8Array for the message data
157
+ let bytes;
158
+ if (typeof data === 'string') {
159
+ // Convert string to bytes for consistent byte-based demuxing
160
+ bytes = new TextEncoder().encode(data);
161
+ }
162
+ else if (data instanceof ArrayBuffer) {
163
+ bytes = new Uint8Array(data);
164
+ }
165
+ else if (ArrayBuffer.isView(data)) {
166
+ // Covers Node.js Buffer (Uint8Array subclass) and other TypedArrays
167
+ bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
168
+ }
169
+ else if (data instanceof Blob) {
170
+ // Browser binary frames might be Blob if binaryType wasn't set in time. Convert to ArrayBuffer asynchronously.
171
+ data.arrayBuffer().then((buf) => {
172
+ try {
173
+ processChunk(new Uint8Array(buf));
174
+ }
175
+ catch (err) {
176
+ handleError(err);
177
+ }
178
+ }, (err) => {
179
+ handleError(err);
180
+ });
181
+ return; // will continue asynchronously once blob is read
182
+ }
183
+ else {
184
+ throw new Error(`Unsupported message data type: ${Object.prototype.toString.call(data)}`);
185
+ }
186
+ // Process the chunk
187
+ processChunk(bytes);
188
+ }
189
+ catch (err) {
190
+ // On any synchronous error in processing, clean up and reject.
191
+ cleanup();
192
+ try {
193
+ ws.close();
194
+ }
195
+ catch {
196
+ /* ignore if already closed */
197
+ }
198
+ reject(err);
199
+ }
200
+ };
201
+ // Process a chunk of data with buffering and safe region handling
202
+ const processChunk = (chunk) => {
203
+ if (chunk.length === 0)
204
+ return;
205
+ // Add chunk to buffer
206
+ buf.push(...chunk);
207
+ // Process as much as we can, preserving only bytes that could be part of a prefix
208
+ while (true) {
209
+ const bufArray = new Uint8Array(buf);
210
+ // Calculate how many bytes we can safely process
211
+ // We need to keep bytes that could potentially be the start of a prefix marker
212
+ let safeLen = buf.length;
213
+ // Check if the last few bytes could be part of a prefix marker
214
+ if (buf.length >= MAX_PREFIX_LEN) {
215
+ // Check if the last byte could be part of a prefix (must be 0x01 or 0x02)
216
+ const lastByte = buf[buf.length - 1];
217
+ if (lastByte !== 0x01 && lastByte !== 0x02) {
218
+ // Last byte can't be part of any prefix, safe to process everything
219
+ safeLen = buf.length;
220
+ }
221
+ else if (buf.length >= MAX_PREFIX_LEN + 1) {
222
+ // Check second-to-last byte if buffer is long enough
223
+ const secondLastByte = buf[buf.length - 2];
224
+ if (secondLastByte !== 0x01 && secondLastByte !== 0x02) {
225
+ // Second-to-last byte can't be part of any prefix, safe to process all but last byte
226
+ safeLen = buf.length - 1;
227
+ }
228
+ else {
229
+ // Both last bytes could be part of prefix, keep MAX_PREFIX_LEN - 1 bytes
230
+ safeLen = buf.length - (MAX_PREFIX_LEN - 1);
231
+ }
232
+ }
233
+ else {
234
+ // Buffer is exactly MAX_PREFIX_LEN, keep MAX_PREFIX_LEN - 1 bytes
235
+ safeLen = buf.length - (MAX_PREFIX_LEN - 1);
236
+ }
237
+ }
238
+ else {
239
+ // Buffer shorter than MAX_PREFIX_LEN, keep MAX_PREFIX_LEN - 1 bytes
240
+ safeLen = buf.length - (MAX_PREFIX_LEN - 1);
241
+ }
242
+ if (safeLen <= 0) {
243
+ break;
244
+ }
245
+ // Find earliest next marker within the safe region
246
+ const safeRegion = bufArray.subarray(0, safeLen);
247
+ const stdoutIndex = findSubarray(safeRegion, STDOUT_PREFIX_BYTES);
248
+ const stderrIndex = findSubarray(safeRegion, STDERR_PREFIX_BYTES);
249
+ let nextIdx = -1;
250
+ let nextKind = null;
251
+ let nextLen = 0;
252
+ if (stdoutIndex !== -1 && (stderrIndex === -1 || stdoutIndex < stderrIndex)) {
253
+ nextIdx = stdoutIndex;
254
+ nextKind = 'stdout';
255
+ nextLen = STDOUT_PREFIX_BYTES.length;
256
+ }
257
+ else if (stderrIndex !== -1) {
258
+ nextIdx = stderrIndex;
259
+ nextKind = 'stderr';
260
+ nextLen = STDERR_PREFIX_BYTES.length;
261
+ }
262
+ if (nextIdx === -1) {
263
+ // No full marker in safe region: emit everything we safely can as payload
264
+ const toEmit = bufArray.subarray(0, safeLen);
265
+ emit(toEmit);
266
+ buf.splice(0, safeLen);
267
+ break; // wait for more data to resolve any partial marker at the end
268
+ }
269
+ // We found a marker. Emit preceding bytes (if any) under the current stream.
270
+ if (nextIdx > 0) {
271
+ const toEmit = bufArray.subarray(0, nextIdx);
272
+ emit(toEmit);
273
+ }
274
+ // Advance past the marker and switch current stream
275
+ buf.splice(0, nextIdx + nextLen);
276
+ currentDataType = nextKind;
277
+ }
278
+ };
279
+ // Event handler for errors
280
+ const handleError = (error) => {
281
+ // Convert Event or plain error to Error instance for consistency
282
+ const err = error && error instanceof Event ? new Error('WebSocket error') : error;
283
+ cleanup();
284
+ try {
285
+ ws.close();
286
+ }
287
+ catch {
288
+ /* ignore if already closed */
289
+ }
290
+ reject(err);
291
+ };
292
+ // Event handler for socket closure
293
+ const handleClose = () => {
294
+ // Flush any remaining buffered payload on clean close
295
+ if (buf.length > 0 && currentDataType) {
296
+ const remainingBytes = new Uint8Array(buf);
297
+ // Use {stream: false} or omit to flush any buffered incomplete UTF-8 sequences
298
+ if (currentDataType === 'stdout') {
299
+ const text = stdoutDecoder.decode(remainingBytes, { stream: false });
300
+ onStdout(text);
301
+ }
302
+ else if (currentDataType === 'stderr') {
303
+ const text = stderrDecoder.decode(remainingBytes, { stream: false });
304
+ onStderr(text);
305
+ }
306
+ }
307
+ else {
308
+ // Flush any remaining bytes in the decoders even if buf is empty
309
+ const stdoutFlushed = stdoutDecoder.decode();
310
+ const stderrFlushed = stderrDecoder.decode();
311
+ if (stdoutFlushed)
312
+ onStdout(stdoutFlushed);
313
+ if (stderrFlushed)
314
+ onStderr(stderrFlushed);
315
+ }
316
+ cleanup();
317
+ resolve();
318
+ };
319
+ // Cleanup function to remove all listeners to avoid memory leaks
320
+ const cleanup = () => {
321
+ if (ws.removeEventListener) {
322
+ // Browser (EventTarget) style cleanup
323
+ ws.removeEventListener('message', handleMessage);
324
+ ws.removeEventListener('error', handleError);
325
+ ws.removeEventListener('close', handleClose);
326
+ }
327
+ if (ws.off) {
328
+ // Node.js ws (EventEmitter) style cleanup (supported in Node 14+)
329
+ ws.off('message', handleMessage);
330
+ ws.off('error', handleError);
331
+ ws.off('close', handleClose);
332
+ }
333
+ else if (ws.removeListener) {
334
+ // Node.js ws fallback for older Node versions
335
+ ;
336
+ ws.removeListener('message', handleMessage);
337
+ ws.removeListener('error', handleError);
338
+ ws.removeListener('close', handleClose);
339
+ }
340
+ };
341
+ // Attach event listeners in a way compatible with both Node (EventEmitter) and browser (EventTarget):
342
+ if (ws.addEventListener) {
343
+ // Browser or WebSocket implementation with EventTarget interface
344
+ ws.addEventListener('message', handleMessage);
345
+ ws.addEventListener('error', handleError);
346
+ ws.addEventListener('close', handleClose);
347
+ }
348
+ else if (ws.on) {
349
+ // Node.js ws library (EventEmitter) interface
350
+ ws.on('message', handleMessage); // ws@8+ yields Buffer for text frames, which we handle via TextDecoder
351
+ ws.on('error', handleError);
352
+ ws.on('close', handleClose);
353
+ }
354
+ else {
355
+ // Unknown WebSocket interface - should not happen with isomorphic-ws
356
+ throw new Error('Unsupported WebSocket implementation');
357
+ }
358
+ });
359
+ }
360
+ //# sourceMappingURL=Stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/Stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import WebSocket from 'isomorphic-ws';
2
+ /**
3
+ * Creates an authenticated WebSocket connection to the sandbox toolbox.
4
+ *
5
+ * @param url - The websocket URL (ws[s]://...)
6
+ * @param headers - Headers to forward when running in Node environments
7
+ * @param getPreviewToken - Lazy getter for preview tokens (required for browser/serverless runtimes)
8
+ */
9
+ export declare function createSandboxWebSocket(url: string, headers: Record<string, any>, getPreviewToken: () => Promise<string>): Promise<WebSocket>;
10
+ //# sourceMappingURL=WebSocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocket.d.ts","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/WebSocket.ts"],"names":[],"mappings":"AAKA,OAAO,SAAS,MAAM,eAAe,CAAA;AAGrC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GACrC,OAAO,CAAC,SAAS,CAAC,CAWpB"}
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Copyright 2025 Daytona Platforms Inc.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import WebSocket from 'isomorphic-ws';
6
+ import { RUNTIME, Runtime } from './Runtime.js';
7
+ /**
8
+ * Creates an authenticated WebSocket connection to the sandbox toolbox.
9
+ *
10
+ * @param url - The websocket URL (ws[s]://...)
11
+ * @param headers - Headers to forward when running in Node environments
12
+ * @param getPreviewToken - Lazy getter for preview tokens (required for browser/serverless runtimes)
13
+ */
14
+ export async function createSandboxWebSocket(url, headers, getPreviewToken) {
15
+ if (RUNTIME === Runtime.BROWSER || RUNTIME === Runtime.DENO || RUNTIME === Runtime.SERVERLESS) {
16
+ const previewToken = await getPreviewToken();
17
+ const separator = url.includes('?') ? '&' : '?';
18
+ return new WebSocket(`${url}${separator}DAYTONA_SANDBOX_AUTH_KEY=${previewToken}`, `X-Daytona-SDK-Version~${String(headers['X-Daytona-SDK-Version'] ?? '')}`);
19
+ }
20
+ return new WebSocket(url, { headers });
21
+ }
22
+ //# sourceMappingURL=WebSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/WebSocket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAW,EACX,OAA4B,EAC5B,eAAsC;IAEtC,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9F,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAA;QAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAC/C,OAAO,IAAI,SAAS,CAClB,GAAG,GAAG,GAAG,SAAS,4BAA4B,YAAY,EAAE,EAC5D,yBAAyB,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,CAC1E,CAAA;IACH,CAAC;IAED,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Configuration options for span instrumentation
3
+ */
4
+ export interface SpanConfig {
5
+ /**
6
+ * Custom name for the span. If not provided, uses `ClassName.methodName` format
7
+ */
8
+ name?: string;
9
+ /**
10
+ * Additional attributes to attach to the span
11
+ */
12
+ attributes?: Record<string, string>;
13
+ }
14
+ /**
15
+ * Configuration options for metric instrumentation
16
+ */
17
+ export interface MetricConfig {
18
+ /**
19
+ * Custom name for the metric. If not provided, uses `ClassName.methodName` format
20
+ */
21
+ name?: string;
22
+ /**
23
+ * Description for the metrics being collected
24
+ */
25
+ description?: string;
26
+ /**
27
+ * Additional labels to attach to the metrics
28
+ */
29
+ labels?: Record<string, string>;
30
+ }
31
+ /**
32
+ * Configuration options for the combined instrumentation decorator
33
+ */
34
+ export interface InstrumentationConfig {
35
+ /**
36
+ * Custom name for the span and metric. If not provided, uses `ClassName.methodName` format
37
+ */
38
+ name?: string;
39
+ /**
40
+ * Description for the metrics being collected
41
+ */
42
+ description?: string;
43
+ /**
44
+ * Additional labels/attributes to attach to spans and metrics
45
+ */
46
+ labels?: Record<string, string>;
47
+ /**
48
+ * Enable trace collection (default: true)
49
+ */
50
+ enableTraces?: boolean;
51
+ /**
52
+ * Enable metrics collection (default: true)
53
+ */
54
+ enableMetrics?: boolean;
55
+ }
56
+ /**
57
+ * Decorator for instrumenting methods with OpenTelemetry spans (traces only)
58
+ *
59
+ * @param config - Configuration object or string name for the span
60
+ *
61
+ */
62
+ export declare function WithSpan(config?: string | SpanConfig): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
63
+ /**
64
+ * Decorator for instrumenting methods with OpenTelemetry metrics (metrics only)
65
+ *
66
+ * Collects two metrics:
67
+ * - Counter: `{name}_executions` - tracks number of executions with status (success/error)
68
+ * - Histogram: `{name}_duration` - tracks execution duration in milliseconds
69
+ *
70
+ * @param config - Configuration object or string name for the metric
71
+ *
72
+ */
73
+ export declare function WithMetric(config?: string | MetricConfig): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
74
+ /**
75
+ * Decorator for instrumenting methods with both OpenTelemetry traces and metrics
76
+ *
77
+ * This decorator composes @WithSpan and @WithMetric to provide both trace and metric collection.
78
+ * You can selectively enable/disable traces or metrics using the config options.
79
+ *
80
+ * @param config - Configuration object or string name for the instrumentation
81
+ */
82
+ export declare function WithInstrumentation(config?: string | InstrumentationConfig): MethodDecorator;
83
+ //# sourceMappingURL=otel.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.decorator.d.ts","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/otel.decorator.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAaD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,IAC3C,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,EAAE,YAAY,kBAAkB,UA0CrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,IAC/C,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,EAAE,YAAY,kBAAkB,UA6CrF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB,GAAG,eAAe,CAiB5F"}
@@ -0,0 +1,136 @@
1
+ /*
2
+ * Copyright 2025 Daytona Platforms Inc.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { trace, context, metrics, SpanStatusCode } from '@opentelemetry/api';
6
+ // Lazy initialization to ensure SDK is started before getting tracer/meter
7
+ const getTracer = () => trace.getTracer('');
8
+ const getMeter = () => metrics.getMeter('');
9
+ const executionHistograms = new Map();
10
+ /**
11
+ * Converts a string to snake_case for Prometheus-friendly metric names
12
+ */
13
+ function toSnakeCase(str) {
14
+ return str
15
+ .replace(/([A-Z])/g, '_$1')
16
+ .toLowerCase()
17
+ .replace(/^_/, '')
18
+ .replace(/\./g, '_');
19
+ }
20
+ /**
21
+ * Decorator for instrumenting methods with OpenTelemetry spans (traces only)
22
+ *
23
+ * @param config - Configuration object or string name for the span
24
+ *
25
+ */
26
+ export function WithSpan(config) {
27
+ return (target, propertyKey, descriptor) => {
28
+ const originalMethod = descriptor.value;
29
+ const methodName = String(propertyKey);
30
+ descriptor.value = async function (...args) {
31
+ const cfg = typeof config === 'string' ? { name: config } : config || {};
32
+ const { name, attributes = {} } = cfg;
33
+ const spanName = name || `${target.constructor.name}.${methodName}`;
34
+ const allAttributes = {
35
+ component: target.constructor.name,
36
+ method: methodName,
37
+ ...attributes,
38
+ };
39
+ const span = getTracer().startSpan(spanName, {
40
+ attributes: allAttributes,
41
+ }, context.active());
42
+ return context.with(trace.setSpan(context.active(), span), async () => {
43
+ try {
44
+ const result = await originalMethod.apply(this, args);
45
+ span.setStatus({ code: SpanStatusCode.OK });
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ span.setStatus({
50
+ code: SpanStatusCode.ERROR,
51
+ message: error instanceof Error ? error.message : String(error),
52
+ });
53
+ span.recordException(error instanceof Error ? error : new Error(String(error)));
54
+ throw error;
55
+ }
56
+ finally {
57
+ span.end();
58
+ }
59
+ });
60
+ };
61
+ };
62
+ }
63
+ /**
64
+ * Decorator for instrumenting methods with OpenTelemetry metrics (metrics only)
65
+ *
66
+ * Collects two metrics:
67
+ * - Counter: `{name}_executions` - tracks number of executions with status (success/error)
68
+ * - Histogram: `{name}_duration` - tracks execution duration in milliseconds
69
+ *
70
+ * @param config - Configuration object or string name for the metric
71
+ *
72
+ */
73
+ export function WithMetric(config) {
74
+ return (target, propertyKey, descriptor) => {
75
+ const originalMethod = descriptor.value;
76
+ const methodName = String(propertyKey);
77
+ descriptor.value = async function (...args) {
78
+ const cfg = typeof config === 'string' ? { name: config } : config || {};
79
+ const { name, description, labels = {} } = cfg;
80
+ const metricName = toSnakeCase(name || `${target.constructor.name}.${methodName}`);
81
+ const allLabels = {
82
+ component: target.constructor.name,
83
+ method: methodName,
84
+ ...labels,
85
+ };
86
+ // Get or create histogram for this method
87
+ if (!executionHistograms.has(metricName)) {
88
+ executionHistograms.set(metricName, getMeter().createHistogram(`${metricName}_duration`, {
89
+ description: description || `Duration of executions for ${metricName}`,
90
+ unit: 'ms',
91
+ }));
92
+ }
93
+ const histogram = executionHistograms.get(metricName);
94
+ if (!histogram) {
95
+ throw new Error(`Histogram not found for metric: ${metricName}`);
96
+ }
97
+ const startTime = Date.now();
98
+ let status = 'success';
99
+ try {
100
+ const result = await originalMethod.apply(this, args);
101
+ return result;
102
+ }
103
+ catch (error) {
104
+ status = 'error';
105
+ throw error;
106
+ }
107
+ finally {
108
+ const duration = Date.now() - startTime;
109
+ histogram.record(duration, { ...allLabels, status });
110
+ }
111
+ };
112
+ };
113
+ }
114
+ /**
115
+ * Decorator for instrumenting methods with both OpenTelemetry traces and metrics
116
+ *
117
+ * This decorator composes @WithSpan and @WithMetric to provide both trace and metric collection.
118
+ * You can selectively enable/disable traces or metrics using the config options.
119
+ *
120
+ * @param config - Configuration object or string name for the instrumentation
121
+ */
122
+ export function WithInstrumentation(config) {
123
+ const cfg = typeof config === 'string' ? { name: config } : config || {};
124
+ const { enableTraces = true, enableMetrics = true, name, description, labels } = cfg;
125
+ const decorators = [];
126
+ if (enableTraces) {
127
+ decorators.push(WithSpan({ name, attributes: labels }));
128
+ }
129
+ if (enableMetrics) {
130
+ decorators.push(WithMetric({ name, description, labels }));
131
+ }
132
+ return (target, propertyKey, descriptor) => {
133
+ decorators.forEach((decorator) => decorator(target, propertyKey, descriptor));
134
+ };
135
+ }
136
+ //# sourceMappingURL=otel.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.decorator.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/otel.decorator.ts"],"names":[],"mappings":"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"}