@daytonaio/sdk 0.170.0 → 0.171.0-alpha.4

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 (198) hide show
  1. package/LICENSE +190 -0
  2. package/{src → cjs}/CodeInterpreter.d.ts +1 -0
  3. package/cjs/CodeInterpreter.js.map +1 -0
  4. package/{src → cjs}/ComputerUse.d.ts +2 -1
  5. package/{src → cjs}/ComputerUse.js +2 -2
  6. package/cjs/ComputerUse.js.map +1 -0
  7. package/{src → cjs}/Daytona.d.ts +3 -1
  8. package/{src → cjs}/Daytona.js +8 -2
  9. package/cjs/Daytona.js.map +1 -0
  10. package/{src → cjs}/FileSystem.d.ts +27 -0
  11. package/{src → cjs}/FileSystem.js +69 -0
  12. package/cjs/FileSystem.js.map +1 -0
  13. package/{src → cjs}/Git.d.ts +1 -0
  14. package/cjs/Git.js.map +1 -0
  15. package/{src → cjs}/Image.d.ts +1 -0
  16. package/cjs/Image.js.map +1 -0
  17. package/{src → cjs}/LspServer.d.ts +1 -0
  18. package/cjs/LspServer.js.map +1 -0
  19. package/{src → cjs}/ObjectStorage.d.ts +1 -0
  20. package/cjs/ObjectStorage.js.map +1 -0
  21. package/{src → cjs}/Process.d.ts +1 -0
  22. package/cjs/Process.js.map +1 -0
  23. package/{src → cjs}/PtyHandle.d.ts +1 -0
  24. package/cjs/PtyHandle.js.map +1 -0
  25. package/cjs/README.md +180 -0
  26. package/{src → cjs}/Sandbox.d.ts +1 -0
  27. package/{src → cjs}/Sandbox.js +1 -1
  28. package/cjs/Sandbox.js.map +1 -0
  29. package/{src → cjs}/Snapshot.d.ts +1 -0
  30. package/cjs/Snapshot.js.map +1 -0
  31. package/{src → cjs}/Volume.d.ts +1 -0
  32. package/cjs/Volume.js.map +1 -0
  33. package/{src → cjs}/errors/DaytonaError.d.ts +1 -0
  34. package/cjs/errors/DaytonaError.js.map +1 -0
  35. package/{src → cjs}/index.d.ts +1 -0
  36. package/cjs/index.js.map +1 -0
  37. package/cjs/package.json +3 -0
  38. package/{src → cjs}/types/Charts.d.ts +1 -0
  39. package/cjs/types/Charts.js.map +1 -0
  40. package/{src → cjs}/types/CodeInterpreter.d.ts +1 -0
  41. package/cjs/types/CodeInterpreter.js.map +1 -0
  42. package/{src → cjs}/types/ExecuteResponse.d.ts +1 -0
  43. package/cjs/types/ExecuteResponse.js.map +1 -0
  44. package/{src → cjs}/types/Pty.d.ts +1 -0
  45. package/cjs/types/Pty.js.map +1 -0
  46. package/{src → cjs}/utils/Binary.d.ts +1 -0
  47. package/cjs/utils/Binary.js.map +1 -0
  48. package/{src → cjs}/utils/FileTransfer.d.ts +2 -1
  49. package/{src → cjs}/utils/FileTransfer.js +5 -2
  50. package/cjs/utils/FileTransfer.js.map +1 -0
  51. package/cjs/utils/Import.d.ts +125 -0
  52. package/cjs/utils/Import.js +112 -0
  53. package/cjs/utils/Import.js.map +1 -0
  54. package/{src → cjs}/utils/Multipart.d.ts +1 -0
  55. package/cjs/utils/Multipart.js.map +1 -0
  56. package/{src → cjs}/utils/Runtime.d.ts +1 -0
  57. package/cjs/utils/Runtime.js.map +1 -0
  58. package/{src → cjs}/utils/Stream.d.ts +1 -0
  59. package/cjs/utils/Stream.js.map +1 -0
  60. package/{src → cjs}/utils/WebSocket.d.ts +1 -0
  61. package/cjs/utils/WebSocket.js.map +1 -0
  62. package/{src → cjs}/utils/otel.decorator.d.ts +1 -0
  63. package/cjs/utils/otel.decorator.js.map +1 -0
  64. package/esm/CodeInterpreter.d.ts +95 -0
  65. package/esm/CodeInterpreter.js +292 -0
  66. package/esm/CodeInterpreter.js.map +1 -0
  67. package/esm/ComputerUse.d.ts +539 -0
  68. package/esm/ComputerUse.js +799 -0
  69. package/esm/ComputerUse.js.map +1 -0
  70. package/esm/Daytona.d.ts +355 -0
  71. package/esm/Daytona.js +523 -0
  72. package/esm/Daytona.js.map +1 -0
  73. package/esm/FileSystem.d.ts +371 -0
  74. package/esm/FileSystem.js +485 -0
  75. package/esm/FileSystem.js.map +1 -0
  76. package/esm/Git.d.ts +203 -0
  77. package/esm/Git.js +322 -0
  78. package/esm/Git.js.map +1 -0
  79. package/esm/Image.d.ts +265 -0
  80. package/esm/Image.js +581 -0
  81. package/esm/Image.js.map +1 -0
  82. package/esm/LspServer.d.ts +172 -0
  83. package/esm/LspServer.js +255 -0
  84. package/esm/LspServer.js.map +1 -0
  85. package/esm/ObjectStorage.d.ts +79 -0
  86. package/esm/ObjectStorage.js +195 -0
  87. package/esm/ObjectStorage.js.map +1 -0
  88. package/esm/Process.d.ts +490 -0
  89. package/esm/Process.js +642 -0
  90. package/esm/Process.js.map +1 -0
  91. package/esm/PtyHandle.d.ts +155 -0
  92. package/esm/PtyHandle.js +412 -0
  93. package/esm/PtyHandle.js.map +1 -0
  94. package/esm/README.md +180 -0
  95. package/esm/Sandbox.d.ts +476 -0
  96. package/esm/Sandbox.js +901 -0
  97. package/esm/Sandbox.js.map +1 -0
  98. package/esm/Snapshot.d.ts +140 -0
  99. package/esm/Snapshot.js +244 -0
  100. package/esm/Snapshot.js.map +1 -0
  101. package/esm/Volume.d.ts +84 -0
  102. package/esm/Volume.js +115 -0
  103. package/esm/Volume.js.map +1 -0
  104. package/esm/errors/DaytonaError.d.ts +171 -0
  105. package/esm/errors/DaytonaError.js +243 -0
  106. package/esm/errors/DaytonaError.js.map +1 -0
  107. package/esm/index.d.ts +22 -0
  108. package/esm/index.js +21 -0
  109. package/esm/index.js.map +1 -0
  110. package/esm/package.json +3 -0
  111. package/esm/types/Charts.d.ts +38 -0
  112. package/esm/types/Charts.js +33 -0
  113. package/esm/types/Charts.js.map +1 -0
  114. package/esm/types/CodeInterpreter.d.ts +77 -0
  115. package/esm/types/CodeInterpreter.js +6 -0
  116. package/esm/types/CodeInterpreter.js.map +1 -0
  117. package/esm/types/ExecuteResponse.d.ts +26 -0
  118. package/esm/types/ExecuteResponse.js +6 -0
  119. package/esm/types/ExecuteResponse.js.map +1 -0
  120. package/esm/types/Pty.d.ts +48 -0
  121. package/esm/types/Pty.js +6 -0
  122. package/esm/types/Pty.js.map +1 -0
  123. package/esm/utils/Binary.d.ts +39 -0
  124. package/esm/utils/Binary.js +157 -0
  125. package/esm/utils/Binary.js.map +1 -0
  126. package/esm/utils/FileTransfer.d.ts +15 -0
  127. package/esm/utils/FileTransfer.js +254 -0
  128. package/esm/utils/FileTransfer.js.map +1 -0
  129. package/{src → esm}/utils/Import.d.ts +3 -5
  130. package/{src → esm}/utils/Import.js +12 -14
  131. package/esm/utils/Import.js.map +1 -0
  132. package/esm/utils/Multipart.d.ts +29 -0
  133. package/esm/utils/Multipart.js +109 -0
  134. package/esm/utils/Multipart.js.map +1 -0
  135. package/esm/utils/Runtime.d.ts +44 -0
  136. package/esm/utils/Runtime.js +89 -0
  137. package/esm/utils/Runtime.js.map +1 -0
  138. package/esm/utils/Stream.d.ts +20 -0
  139. package/esm/utils/Stream.js +360 -0
  140. package/esm/utils/Stream.js.map +1 -0
  141. package/esm/utils/WebSocket.d.ts +10 -0
  142. package/esm/utils/WebSocket.js +22 -0
  143. package/esm/utils/WebSocket.js.map +1 -0
  144. package/esm/utils/otel.decorator.d.ts +83 -0
  145. package/esm/utils/otel.decorator.js +136 -0
  146. package/esm/utils/otel.decorator.js.map +1 -0
  147. package/package.json +26 -8
  148. package/src/CodeInterpreter.js.map +0 -1
  149. package/src/ComputerUse.js.map +0 -1
  150. package/src/Daytona.js.map +0 -1
  151. package/src/FileSystem.js.map +0 -1
  152. package/src/Git.js.map +0 -1
  153. package/src/Image.js.map +0 -1
  154. package/src/LspServer.js.map +0 -1
  155. package/src/ObjectStorage.js.map +0 -1
  156. package/src/Process.js.map +0 -1
  157. package/src/PtyHandle.js.map +0 -1
  158. package/src/Sandbox.js.map +0 -1
  159. package/src/Snapshot.js.map +0 -1
  160. package/src/Volume.js.map +0 -1
  161. package/src/__tests__/helpers.d.ts +0 -5
  162. package/src/__tests__/helpers.js +0 -26
  163. package/src/__tests__/helpers.js.map +0 -1
  164. package/src/errors/DaytonaError.js.map +0 -1
  165. package/src/index.js.map +0 -1
  166. package/src/types/Charts.js.map +0 -1
  167. package/src/types/CodeInterpreter.js.map +0 -1
  168. package/src/types/ExecuteResponse.js.map +0 -1
  169. package/src/types/Pty.js.map +0 -1
  170. package/src/utils/Binary.js.map +0 -1
  171. package/src/utils/FileTransfer.js.map +0 -1
  172. package/src/utils/Import.js.map +0 -1
  173. package/src/utils/Multipart.js.map +0 -1
  174. package/src/utils/Runtime.js.map +0 -1
  175. package/src/utils/Stream.js.map +0 -1
  176. package/src/utils/WebSocket.js.map +0 -1
  177. package/src/utils/otel.decorator.js.map +0 -1
  178. /package/{src → cjs}/CodeInterpreter.js +0 -0
  179. /package/{src → cjs}/Git.js +0 -0
  180. /package/{src → cjs}/Image.js +0 -0
  181. /package/{src → cjs}/LspServer.js +0 -0
  182. /package/{src → cjs}/ObjectStorage.js +0 -0
  183. /package/{src → cjs}/Process.js +0 -0
  184. /package/{src → cjs}/PtyHandle.js +0 -0
  185. /package/{src → cjs}/Snapshot.js +0 -0
  186. /package/{src → cjs}/Volume.js +0 -0
  187. /package/{src → cjs}/errors/DaytonaError.js +0 -0
  188. /package/{src → cjs}/index.js +0 -0
  189. /package/{src → cjs}/types/Charts.js +0 -0
  190. /package/{src → cjs}/types/CodeInterpreter.js +0 -0
  191. /package/{src → cjs}/types/ExecuteResponse.js +0 -0
  192. /package/{src → cjs}/types/Pty.js +0 -0
  193. /package/{src → cjs}/utils/Binary.js +0 -0
  194. /package/{src → cjs}/utils/Multipart.js +0 -0
  195. /package/{src → cjs}/utils/Runtime.js +0 -0
  196. /package/{src → cjs}/utils/Stream.js +0 -0
  197. /package/{src → cjs}/utils/WebSocket.js +0 -0
  198. /package/{src → cjs}/utils/otel.decorator.js +0 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Options for creating a PTY session
3
+ */
4
+ export interface PtyCreateOptions {
5
+ /**
6
+ * The unique identifier for the PTY session
7
+ */
8
+ id: string;
9
+ /**
10
+ * Starting directory for the PTY session, defaults to the sandbox's working directory
11
+ */
12
+ cwd?: string;
13
+ /**
14
+ * Environment variables for the PTY session
15
+ */
16
+ envs?: Record<string, string>;
17
+ /**
18
+ * Number of terminal columns
19
+ */
20
+ cols?: number;
21
+ /**
22
+ * Number of terminal rows
23
+ */
24
+ rows?: number;
25
+ }
26
+ /**
27
+ * Options for connecting to a PTY session
28
+ */
29
+ export interface PtyConnectOptions {
30
+ /**
31
+ * Callback to handle PTY output data
32
+ */
33
+ onData: (data: Uint8Array) => void | Promise<void>;
34
+ }
35
+ /**
36
+ * PTY session result on exit
37
+ */
38
+ export interface PtyResult {
39
+ /**
40
+ * Exit code when the PTY process ends
41
+ */
42
+ exitCode?: number;
43
+ /**
44
+ * Error message if the PTY failed
45
+ */
46
+ error?: string;
47
+ }
48
+ //# sourceMappingURL=Pty.d.ts.map
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright 2025 Daytona Platforms Inc.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=Pty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pty.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/types/Pty.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,39 @@
1
+ import { Buffer } from 'buffer';
2
+ /**
3
+ * Converts various data types to Uint8Array
4
+ */
5
+ export declare function toUint8Array(data: string | ArrayBuffer | ArrayBufferView): Uint8Array;
6
+ /**
7
+ * Concatenates multiple Uint8Array chunks into a single Uint8Array
8
+ */
9
+ export declare function concatUint8Arrays(parts: Uint8Array[]): Uint8Array;
10
+ /**
11
+ * Converts Uint8Array to Buffer (uses polyfill in non-Node environments)
12
+ */
13
+ export declare function toBuffer(data: Uint8Array): Buffer;
14
+ /**
15
+ * Decodes Uint8Array to UTF-8 string
16
+ */
17
+ export declare function utf8Decode(data: Uint8Array): string;
18
+ /**
19
+ * Finds all occurrences of a pattern in a byte buffer
20
+ */
21
+ export declare function findAllBytes(buffer: Uint8Array, pattern: Uint8Array): number[];
22
+ /**
23
+ * Finds the first occurrence of a pattern in a byte buffer within a range
24
+ */
25
+ export declare function findBytesInRange(buffer: Uint8Array, start: number, end: number, pattern: Uint8Array): number;
26
+ /**
27
+ * Checks if a sequence starts at a given position in a byte buffer
28
+ * Returns the position after the sequence if found, -1 otherwise
29
+ */
30
+ export declare function indexAfterSequence(buffer: Uint8Array, start: number, sequence: Uint8Array): number;
31
+ /**
32
+ * Collects all bytes from various stream types into a single Uint8Array
33
+ */
34
+ export declare function collectStreamBytes(stream: any): Promise<Uint8Array>;
35
+ /**
36
+ * Checks if value is a File object (browser environment)
37
+ */
38
+ export declare function isFile(value: any): boolean;
39
+ //# sourceMappingURL=Binary.d.ts.map
@@ -0,0 +1,157 @@
1
+ /*
2
+ * Copyright 2025 Daytona Platforms Inc.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Buffer } from 'buffer';
6
+ import { DaytonaError } from '../errors/DaytonaError.js';
7
+ /**
8
+ * Converts various data types to Uint8Array
9
+ */
10
+ export function toUint8Array(data) {
11
+ if (typeof data === 'string') {
12
+ return new TextEncoder().encode(data);
13
+ }
14
+ if (data instanceof ArrayBuffer) {
15
+ return new Uint8Array(data);
16
+ }
17
+ if (ArrayBuffer.isView(data)) {
18
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
19
+ }
20
+ throw new DaytonaError('Unsupported data type for byte conversion.');
21
+ }
22
+ /**
23
+ * Concatenates multiple Uint8Array chunks into a single Uint8Array
24
+ */
25
+ export function concatUint8Arrays(parts) {
26
+ const size = parts.reduce((sum, part) => sum + part.byteLength, 0);
27
+ const result = new Uint8Array(size);
28
+ let offset = 0;
29
+ for (const part of parts) {
30
+ result.set(part, offset);
31
+ offset += part.byteLength;
32
+ }
33
+ return result;
34
+ }
35
+ /**
36
+ * Converts Uint8Array to Buffer (uses polyfill in non-Node environments)
37
+ */
38
+ export function toBuffer(data) {
39
+ return Buffer.from(data);
40
+ }
41
+ /**
42
+ * Decodes Uint8Array to UTF-8 string
43
+ */
44
+ export function utf8Decode(data) {
45
+ return new TextDecoder('utf-8').decode(data);
46
+ }
47
+ /**
48
+ * Finds all occurrences of a pattern in a byte buffer
49
+ */
50
+ export function findAllBytes(buffer, pattern) {
51
+ const results = [];
52
+ let i = 0;
53
+ while (i <= buffer.length - pattern.length) {
54
+ let match = true;
55
+ for (let j = 0; j < pattern.length; j++) {
56
+ if (buffer[i + j] !== pattern[j]) {
57
+ match = false;
58
+ break;
59
+ }
60
+ }
61
+ if (match) {
62
+ results.push(i);
63
+ i += pattern.length;
64
+ }
65
+ else {
66
+ i++;
67
+ }
68
+ }
69
+ return results;
70
+ }
71
+ /**
72
+ * Finds the first occurrence of a pattern in a byte buffer within a range
73
+ */
74
+ export function findBytesInRange(buffer, start, end, pattern) {
75
+ let i = start;
76
+ while (i <= end - pattern.length) {
77
+ let match = true;
78
+ for (let j = 0; j < pattern.length; j++) {
79
+ if (buffer[i + j] !== pattern[j]) {
80
+ match = false;
81
+ break;
82
+ }
83
+ }
84
+ if (match)
85
+ return i;
86
+ i++;
87
+ }
88
+ return -1;
89
+ }
90
+ /**
91
+ * Checks if a sequence starts at a given position in a byte buffer
92
+ * Returns the position after the sequence if found, -1 otherwise
93
+ */
94
+ export function indexAfterSequence(buffer, start, sequence) {
95
+ for (let j = 0; j < sequence.length; j++) {
96
+ if (buffer[start + j] !== sequence[j])
97
+ return -1;
98
+ }
99
+ return start + sequence.length;
100
+ }
101
+ /**
102
+ * Collects all bytes from various stream types into a single Uint8Array
103
+ */
104
+ export async function collectStreamBytes(stream) {
105
+ if (!stream)
106
+ return new Uint8Array(0);
107
+ // ReadableStream (WHATWG)
108
+ if (typeof stream.getReader === 'function') {
109
+ const reader = stream.getReader();
110
+ const chunks = [];
111
+ try {
112
+ while (true) {
113
+ const { done, value } = await reader.read();
114
+ if (done)
115
+ break;
116
+ if (value?.byteLength) {
117
+ chunks.push(value);
118
+ }
119
+ }
120
+ }
121
+ finally {
122
+ await reader.cancel();
123
+ }
124
+ return concatUint8Arrays(chunks);
125
+ }
126
+ // AsyncIterable
127
+ if (stream?.[Symbol.asyncIterator]) {
128
+ const chunks = [];
129
+ for await (const chunk of stream) {
130
+ chunks.push(toUint8Array(chunk));
131
+ }
132
+ return concatUint8Arrays(chunks);
133
+ }
134
+ // Direct data types
135
+ if (typeof stream === 'string' || stream instanceof ArrayBuffer || ArrayBuffer.isView(stream)) {
136
+ return toUint8Array(stream);
137
+ }
138
+ // Blob
139
+ if (typeof Blob !== 'undefined' && stream instanceof Blob) {
140
+ const arrayBuffer = await stream.arrayBuffer();
141
+ return new Uint8Array(arrayBuffer);
142
+ }
143
+ // Response
144
+ if (typeof Response !== 'undefined' && stream instanceof Response) {
145
+ const arrayBuffer = await stream.arrayBuffer();
146
+ return new Uint8Array(arrayBuffer);
147
+ }
148
+ throw new DaytonaError('Unsupported stream type for byte collection.');
149
+ }
150
+ /**
151
+ * Checks if value is a File object (browser environment)
152
+ */
153
+ export function isFile(value) {
154
+ const FileConstructor = globalThis.File;
155
+ return typeof FileConstructor !== 'undefined' && value instanceof FileConstructor;
156
+ }
157
+ //# sourceMappingURL=Binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Binary.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/Binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { DownloadMetadata } from '../FileSystem.js';
2
+ /**
3
+ * Safely aborts a stream
4
+ */
5
+ export declare function abortStream(stream: any): void;
6
+ /**
7
+ * Normalizes response data to extract the actual stream
8
+ */
9
+ export declare function normalizeResponseStream(responseData: any): any;
10
+ /**
11
+ * Processes multipart response using busboy (Node.js path)
12
+ */
13
+ export declare function processDownloadFilesResponseWithBusboy(stream: any, headers: Record<string, string>, metadataMap: Map<string, DownloadMetadata>, onFileStream?: (source: string, fileStream: any) => void): Promise<void>;
14
+ export declare function processDownloadFilesResponseWithBuffered(stream: any, headers: Record<string, string>, metadataMap: Map<string, DownloadMetadata>): Promise<void>;
15
+ //# sourceMappingURL=FileTransfer.d.ts.map
@@ -0,0 +1,254 @@
1
+ /*
2
+ * Copyright 2025 Daytona Platforms Inc.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Buffer } from 'buffer';
6
+ import busboy from 'busboy';
7
+ import { DaytonaError } from '../errors/DaytonaError.js';
8
+ import { dynamicImport } from './Import.js';
9
+ import { collectStreamBytes, toBuffer, toUint8Array } from './Binary.js';
10
+ import { extractBoundary, getHeader, parseMultipartWithFormData } from './Multipart.js';
11
+ import { parseMultipart } from './Multipart.js';
12
+ /**
13
+ * Parses a bulk-download error part into the legacy message and structured metadata.
14
+ */
15
+ function parseDownloadErrorPart(data, contentType) {
16
+ let message = new TextDecoder('utf-8').decode(data).trim();
17
+ if (!contentType || !/application\/json/i.test(contentType)) {
18
+ return { message };
19
+ }
20
+ try {
21
+ const payload = JSON.parse(message);
22
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
23
+ return { message };
24
+ }
25
+ const payloadObject = payload;
26
+ const structuredMessage = payloadObject.message;
27
+ const statusCode = payloadObject.statusCode ?? payloadObject.status_code;
28
+ const errorCode = payloadObject.code ?? payloadObject.error_code;
29
+ if (typeof structuredMessage === 'string') {
30
+ message = structuredMessage;
31
+ }
32
+ return {
33
+ message,
34
+ errorDetails: {
35
+ message,
36
+ statusCode: typeof statusCode === 'number' ? statusCode : undefined,
37
+ errorCode: typeof errorCode === 'string' ? errorCode : undefined,
38
+ },
39
+ };
40
+ }
41
+ catch {
42
+ return { message };
43
+ }
44
+ }
45
+ /**
46
+ * Records a per-file error part on the corresponding download metadata entry.
47
+ */
48
+ function assignDownloadErrorPart(metadata, data, contentType) {
49
+ const { message, errorDetails } = parseDownloadErrorPart(data, contentType);
50
+ metadata.error = message;
51
+ metadata.errorDetails = errorDetails;
52
+ }
53
+ /**
54
+ * Safely aborts a stream
55
+ */
56
+ export function abortStream(stream) {
57
+ if (stream && typeof stream.destroy === 'function') {
58
+ stream.destroy();
59
+ }
60
+ else if (stream && typeof stream.cancel === 'function') {
61
+ stream.cancel();
62
+ }
63
+ }
64
+ /**
65
+ * Normalizes response data to extract the actual stream
66
+ */
67
+ export function normalizeResponseStream(responseData) {
68
+ if (!responseData || typeof responseData !== 'object') {
69
+ return responseData;
70
+ }
71
+ // WHATWG ReadableStream
72
+ if (responseData.body && typeof responseData.body.getReader === 'function') {
73
+ return responseData.body;
74
+ }
75
+ // Some adapters use .stream
76
+ if (responseData.stream) {
77
+ return responseData.stream;
78
+ }
79
+ return responseData;
80
+ }
81
+ /**
82
+ * Processes multipart response using busboy (Node.js path)
83
+ */
84
+ export async function processDownloadFilesResponseWithBusboy(stream, headers, metadataMap, onFileStream) {
85
+ const fileTasks = [];
86
+ await new Promise((resolve, reject) => {
87
+ const bb = busboy({
88
+ headers,
89
+ preservePath: true,
90
+ });
91
+ bb.on('file', (fieldName, fileStream, fileInfo) => {
92
+ const source = fileInfo?.filename;
93
+ if (!source) {
94
+ abortStream(stream);
95
+ reject(new DaytonaError(`Received unexpected file "${fileInfo?.filename}".`));
96
+ return;
97
+ }
98
+ const metadata = metadataMap.get(source);
99
+ if (!metadata) {
100
+ abortStream(stream);
101
+ reject(new DaytonaError(`Target metadata missing for valid source: ${source}`));
102
+ return;
103
+ }
104
+ if (fieldName === 'error') {
105
+ // Collect per-file error metadata.
106
+ const chunks = [];
107
+ fileStream.on('data', (chunk) => chunks.push(chunk));
108
+ fileStream.on('end', () => {
109
+ assignDownloadErrorPart(metadata, Buffer.concat(chunks), fileInfo?.mimeType);
110
+ });
111
+ fileStream.on('error', (err) => {
112
+ metadata.error = `Stream error: ${err.message}`;
113
+ });
114
+ }
115
+ else if (fieldName === 'file') {
116
+ if (onFileStream) {
117
+ onFileStream(source, fileStream);
118
+ }
119
+ else if (metadata.destination) {
120
+ // Stream to file
121
+ fileTasks.push(new Promise((resolveTask) => {
122
+ dynamicImport('fs', 'Downloading files to local files is not supported: ').then((fs) => {
123
+ const writeStream = fs.createWriteStream(metadata.destination, { autoClose: true });
124
+ fileStream.pipe(writeStream);
125
+ writeStream.on('finish', () => {
126
+ metadata.result = metadata.destination;
127
+ resolveTask();
128
+ });
129
+ writeStream.on('error', (err) => {
130
+ metadata.error = `Write stream failed: ${err.message}`;
131
+ resolveTask();
132
+ });
133
+ fileStream.on('error', (err) => {
134
+ metadata.error = `Read stream failed: ${err.message}`;
135
+ });
136
+ });
137
+ }));
138
+ }
139
+ else {
140
+ // Collect to buffer
141
+ const chunks = [];
142
+ fileStream.on('data', (chunk) => {
143
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
144
+ });
145
+ fileStream.on('end', () => {
146
+ metadata.result = Buffer.concat(chunks);
147
+ });
148
+ fileStream.on('error', (err) => {
149
+ metadata.error = `Read failed: ${err.message}`;
150
+ });
151
+ }
152
+ }
153
+ else {
154
+ // Unknown field, drain it
155
+ fileStream.resume();
156
+ }
157
+ });
158
+ bb.on('error', (err) => {
159
+ abortStream(stream);
160
+ reject(err);
161
+ });
162
+ bb.on('finish', resolve);
163
+ // Feed stream into busboy
164
+ feedStreamToBusboy(stream, bb).catch((err) => bb.destroy(err));
165
+ });
166
+ await Promise.all(fileTasks);
167
+ }
168
+ /**
169
+ * Feeds various stream types into busboy
170
+ */
171
+ async function feedStreamToBusboy(stream, bb) {
172
+ // Node.js stream (piping)
173
+ if (typeof stream?.pipe === 'function') {
174
+ stream.pipe(bb);
175
+ return;
176
+ }
177
+ // Direct buffer-like data
178
+ if (typeof stream === 'string' || stream instanceof ArrayBuffer || ArrayBuffer.isView(stream)) {
179
+ const data = toUint8Array(stream);
180
+ bb.write(Buffer.from(data));
181
+ bb.end();
182
+ return;
183
+ }
184
+ // WHATWG ReadableStream
185
+ if (typeof stream?.getReader === 'function') {
186
+ const reader = stream.getReader();
187
+ while (true) {
188
+ const { done, value } = await reader.read();
189
+ if (done)
190
+ break;
191
+ bb.write(Buffer.from(value));
192
+ }
193
+ bb.end();
194
+ return;
195
+ }
196
+ // AsyncIterable
197
+ if (stream?.[Symbol.asyncIterator]) {
198
+ for await (const chunk of stream) {
199
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(toUint8Array(chunk));
200
+ bb.write(buffer);
201
+ }
202
+ bb.end();
203
+ return;
204
+ }
205
+ // Unsupported stream type
206
+ throw new DaytonaError(`Unsupported stream type: ${stream?.constructor?.name || typeof stream}`);
207
+ }
208
+ export async function processDownloadFilesResponseWithBuffered(stream, headers, metadataMap) {
209
+ const contentType = getHeader(headers, 'content-type') || '';
210
+ const bodyBytes = await collectStreamBytes(stream);
211
+ // Try native FormData parsing for multipart/form-data
212
+ if (/^multipart\/form-data/i.test(contentType) && typeof Response !== 'undefined') {
213
+ try {
214
+ const formDataParts = await parseMultipartWithFormData(bodyBytes, contentType);
215
+ for (const part of formDataParts) {
216
+ const metadata = metadataMap.get(part.filename);
217
+ if (!metadata) {
218
+ continue;
219
+ }
220
+ if (part.fieldName === 'error') {
221
+ assignDownloadErrorPart(metadata, part.data, part.contentType);
222
+ }
223
+ else {
224
+ metadata.result = toBuffer(part.data);
225
+ }
226
+ }
227
+ return;
228
+ }
229
+ catch {
230
+ // Fall through to manual parsing
231
+ }
232
+ }
233
+ // Manual multipart parsing (handles multipart/mixed, etc.)
234
+ const boundary = extractBoundary(contentType);
235
+ if (!boundary) {
236
+ throw new DaytonaError(`Missing multipart boundary in Content-Type: "${contentType}"`);
237
+ }
238
+ const parts = parseMultipart(bodyBytes, boundary);
239
+ for (const part of parts) {
240
+ if (!part.filename)
241
+ continue;
242
+ const metadata = metadataMap.get(part.filename);
243
+ if (!metadata)
244
+ continue;
245
+ if (part.name === 'error') {
246
+ assignDownloadErrorPart(metadata, part.data, part.headers['content-type']);
247
+ }
248
+ else if (part.name === 'file') {
249
+ metadata.result = toBuffer(part.data);
250
+ }
251
+ }
252
+ return;
253
+ }
254
+ //# sourceMappingURL=FileTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTransfer.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/FileTransfer.ts"],"names":[],"mappings":"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"}
@@ -48,12 +48,9 @@ declare const loaderMap: {
48
48
  EventEmitter: typeof import("events");
49
49
  EventEmitterAsyncResource: typeof import("events").EventEmitterAsyncResource;
50
50
  }>;
51
- tar: () => Promise<typeof import("tar", { with: { "resolution-mode": "import" } })>;
51
+ tar: () => Promise<typeof import("tar")>;
52
52
  'expand-tilde': () => Promise<any>;
53
- ObjectStorage: () => Promise<{
54
- default: typeof import("../ObjectStorage");
55
- ObjectStorage: typeof import("../ObjectStorage").ObjectStorage;
56
- }>;
53
+ ObjectStorage: () => Promise<typeof import("../ObjectStorage.js")>;
57
54
  fs: () => Promise<typeof import("fs")>;
58
55
  'form-data': () => Promise<{
59
56
  default: typeof import("form-data");
@@ -95,3 +92,4 @@ export declare function dynamicImport<K extends keyof ModuleMap>(name: K, errorP
95
92
  type RequireMap = typeof requireMap;
96
93
  export declare function dynamicRequire<K extends keyof RequireMap>(name: K, errorPrefix?: string): ReturnType<RequireMap[K]>;
97
94
  export {};
95
+ //# sourceMappingURL=Import.d.ts.map
@@ -1,13 +1,11 @@
1
- "use strict";
1
+ import { createRequire as _cr } from 'module';
2
+ const require = _cr(import.meta.url);
2
3
  /*
3
4
  * Copyright 2025 Daytona Platforms Inc.
4
5
  * SPDX-License-Identifier: Apache-2.0
5
6
  */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.dynamicImport = dynamicImport;
8
- exports.dynamicRequire = dynamicRequire;
9
- const DaytonaError_1 = require("../errors/DaytonaError");
10
- const Runtime_1 = require("./Runtime");
7
+ import { DaytonaError } from '../errors/DaytonaError.js';
8
+ import { RUNTIME } from './Runtime.js';
11
9
  const loaderMap = {
12
10
  'fast-glob': () => import('fast-glob'),
13
11
  '@iarna/toml': () => import('@iarna/toml'),
@@ -38,10 +36,10 @@ const validateMap = {
38
36
  'form-data': (mod) => typeof mod === 'function',
39
37
  util: (mod) => typeof mod.promisify === 'function',
40
38
  };
41
- async function dynamicImport(name, errorPrefix) {
39
+ export async function dynamicImport(name, errorPrefix) {
42
40
  const loader = loaderMap[name];
43
41
  if (!loader) {
44
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Unknown module "${name}"`);
42
+ throw new DaytonaError(`${errorPrefix || ''} Unknown module "${name}"`);
45
43
  }
46
44
  let mod;
47
45
  try {
@@ -50,17 +48,17 @@ async function dynamicImport(name, errorPrefix) {
50
48
  }
51
49
  catch (err) {
52
50
  const msg = err instanceof Error ? err.message : String(err);
53
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Module "${name}" is not available in the "${Runtime_1.RUNTIME}" runtime: ${msg}`);
51
+ throw new DaytonaError(`${errorPrefix || ''} Module "${name}" is not available in the "${RUNTIME}" runtime: ${msg}`);
54
52
  }
55
53
  if (validateMap[name] && !validateMap[name](mod)) {
56
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Module "${name}" didn't pass import validation in the "${Runtime_1.RUNTIME}" runtime`);
54
+ throw new DaytonaError(`${errorPrefix || ''} Module "${name}" didn't pass import validation in the "${RUNTIME}" runtime`);
57
55
  }
58
56
  return mod;
59
57
  }
60
- function dynamicRequire(name, errorPrefix) {
58
+ export function dynamicRequire(name, errorPrefix) {
61
59
  const loader = requireMap[name];
62
60
  if (!loader) {
63
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Unknown module "${name}"`);
61
+ throw new DaytonaError(`${errorPrefix || ''} Unknown module "${name}"`);
64
62
  }
65
63
  let mod;
66
64
  try {
@@ -69,10 +67,10 @@ function dynamicRequire(name, errorPrefix) {
69
67
  }
70
68
  catch (err) {
71
69
  const msg = err instanceof Error ? err.message : String(err);
72
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Module "${name}" is not available in the "${Runtime_1.RUNTIME}" runtime: ${msg}`);
70
+ throw new DaytonaError(`${errorPrefix || ''} Module "${name}" is not available in the "${RUNTIME}" runtime: ${msg}`);
73
71
  }
74
72
  if (validateMap[name] && !validateMap[name](mod)) {
75
- throw new DaytonaError_1.DaytonaError(`${errorPrefix || ''} Module "${name}" didn't pass import validation in the "${Runtime_1.RUNTIME}" runtime`);
73
+ throw new DaytonaError(`${errorPrefix || ''} Module "${name}" didn't pass import validation in the "${RUNTIME}" runtime`);
76
74
  }
77
75
  return mod;
78
76
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Import.js","sourceRoot":"","sources":["../../../../../../libs/sdk-typescript/src/utils/Import.ts"],"names":[],"mappings":"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"}