@cloudflare/sandbox 0.7.14 → 0.7.16

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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as DirectoryBackup, A as DesktopStopResponse, At as WaitForPortOptions, B as ExecuteResponse, Bt as CreateContextOptions, C as ClickOptions, Ct as ProcessStartResult, D as DesktopStartOptions, Dt as SessionOptions, E as DesktopClient, Et as SandboxOptions, F as ScreenshotRegion, Ft as ExecuteRequest, G as HttpClientOptions, H as BaseApiResponse, Ht as ExecutionResult, I as ScreenshotResponse, It as ExposePortRequest, J as SessionRequest, K as RequestConfig, L as ScrollDirection, Lt as StartProcessRequest, M as ScreenSizeResponse, Mt as isExecResult, N as ScreenshotBytesResponse, Nt as isProcess, O as DesktopStartResponse, Ot as StreamOptions, P as ScreenshotOptions, Pt as isProcessStatus, Q as BucketProvider, R as TypeOptions, Rt as PtyOptions, S as WriteFileRequest, St as ProcessOptions, T as Desktop, Tt as RestoreBackupResult, U as ContainerStub, Ut as RunCodeOptions, V as BackupClient, Vt as Execution, W as ErrorResponse, X as BaseExecOptions, Y as BackupOptions, Z as BucketCredentials, _ as GitClient, _t as ProcessCleanupResult, a as CreateSessionRequest, at as FileMetadata, b as MkdirRequest, bt as ProcessListResult, c as DeleteSessionResponse, ct as GitCheckoutResult, d as ProcessClient, dt as LogEvent, et as ExecEvent, f as PortClient, ft as MountBucketOptions, g as GitCheckoutRequest, gt as Process, h as InterpreterClient, ht as PortListResult, i as CommandsResponse, it as FileChunk, j as KeyInput, jt as WatchOptions, k as DesktopStatusResponse, kt as WaitForLogResult, l as PingResponse, lt as ISandbox, m as ExecutionCallbacks, mt as PortExposeResult, n as getSandbox, nt as ExecResult, o as CreateSessionResponse, ot as FileStreamEvent, p as UnexposePortRequest, pt as PortCloseResult, q as ResponseHandler, r as SandboxClient, rt as ExecutionSession, s as DeleteSessionRequest, st as FileWatchSSEEvent, t as Sandbox, tt as ExecOptions, u as UtilityClient, ut as ListFilesOptions, v as FileClient, vt as ProcessInfoResult, w as CursorPositionResponse, wt as ProcessStatus, x as ReadFileRequest, xt as ProcessLogsResult, y as FileOperationRequest, yt as ProcessKillResult, z as CommandClient, zt as CodeContext } from "./sandbox-CUee1P3v.js";
1
+ import { $ as DirectoryBackup, A as DesktopStopResponse, At as WaitForPortOptions, B as ExecuteResponse, Bt as CreateContextOptions, C as ClickOptions, Ct as ProcessStartResult, D as DesktopStartOptions, Dt as SessionOptions, E as DesktopClient, Et as SandboxOptions, F as ScreenshotRegion, Ft as ExecuteRequest, G as HttpClientOptions, H as BaseApiResponse, Ht as ExecutionResult, I as ScreenshotResponse, It as ExposePortRequest, J as SessionRequest, K as RequestConfig, L as ScrollDirection, Lt as StartProcessRequest, M as ScreenSizeResponse, Mt as isExecResult, N as ScreenshotBytesResponse, Nt as isProcess, O as DesktopStartResponse, Ot as StreamOptions, P as ScreenshotOptions, Pt as isProcessStatus, Q as BucketProvider, R as TypeOptions, Rt as PtyOptions, S as WriteFileRequest, St as ProcessOptions, T as Desktop, Tt as RestoreBackupResult, U as ContainerStub, Ut as RunCodeOptions, V as BackupClient, Vt as Execution, W as ErrorResponse, X as BaseExecOptions, Y as BackupOptions, Z as BucketCredentials, _ as GitClient, _t as ProcessCleanupResult, a as CreateSessionRequest, at as FileMetadata, b as MkdirRequest, bt as ProcessListResult, c as DeleteSessionResponse, ct as GitCheckoutResult, d as ProcessClient, dt as LogEvent, et as ExecEvent, f as PortClient, ft as MountBucketOptions, g as GitCheckoutRequest, gt as Process, h as InterpreterClient, ht as PortListResult, i as CommandsResponse, it as FileChunk, j as KeyInput, jt as WatchOptions, k as DesktopStatusResponse, kt as WaitForLogResult, l as PingResponse, lt as ISandbox, m as ExecutionCallbacks, mt as PortExposeResult, n as getSandbox, nt as ExecResult, o as CreateSessionResponse, ot as FileStreamEvent, p as UnexposePortRequest, pt as PortCloseResult, q as ResponseHandler, r as SandboxClient, rt as ExecutionSession, s as DeleteSessionRequest, st as FileWatchSSEEvent, t as Sandbox, tt as ExecOptions, u as UtilityClient, ut as ListFilesOptions, v as FileClient, vt as ProcessInfoResult, w as CursorPositionResponse, wt as ProcessStatus, x as ReadFileRequest, xt as ProcessLogsResult, y as FileOperationRequest, yt as ProcessKillResult, z as CommandClient, zt as CodeContext } from "./sandbox-DKzgVy6K.js";
2
2
  import { a as DesktopCoordinateErrorContext, d as ErrorResponse$1, f as OperationType, i as BackupRestoreContext, l as ProcessExitedBeforeReadyContext, n as BackupExpiredContext, o as DesktopErrorContext, p as ErrorCode, r as BackupNotFoundContext, s as InvalidBackupConfigContext, t as BackupCreateContext, u as ProcessReadyTimeoutContext } from "./contexts-CeQR115r.js";
3
3
 
4
4
  //#region src/errors/classes.d.ts
package/dist/index.js CHANGED
@@ -832,6 +832,12 @@ var HttpTransport = class extends BaseTransport {
832
832
  //#endregion
833
833
  //#region src/clients/transport/ws-transport.ts
834
834
  /**
835
+ * Default timeout values (all in milliseconds)
836
+ */
837
+ const DEFAULT_REQUEST_TIMEOUT_MS = 12e4;
838
+ const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 3e5;
839
+ const DEFAULT_CONNECT_TIMEOUT_MS = 3e4;
840
+ /**
835
841
  * WebSocket transport implementation
836
842
  *
837
843
  * Multiplexes HTTP-like requests over a single WebSocket connection.
@@ -930,7 +936,7 @@ var WebSocketTransport = class extends BaseTransport {
930
936
  * parent Container class that supports the WebSocket protocol.
931
937
  */
932
938
  async connectViaFetch() {
933
- const timeoutMs = this.config.connectTimeoutMs ?? 3e4;
939
+ const timeoutMs = this.config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
934
940
  const controller = new AbortController();
935
941
  const timeout = setTimeout(() => controller.abort(), timeoutMs);
936
942
  try {
@@ -966,7 +972,7 @@ var WebSocketTransport = class extends BaseTransport {
966
972
  */
967
973
  connectViaWebSocket() {
968
974
  return new Promise((resolve, reject) => {
969
- const timeoutMs = this.config.connectTimeoutMs ?? 3e4;
975
+ const timeoutMs = this.config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
970
976
  const timeout = setTimeout(() => {
971
977
  this.cleanup();
972
978
  reject(/* @__PURE__ */ new Error(`WebSocket connection timeout after ${timeoutMs}ms`));
@@ -1014,7 +1020,7 @@ var WebSocketTransport = class extends BaseTransport {
1014
1020
  body
1015
1021
  };
1016
1022
  return new Promise((resolve, reject) => {
1017
- const timeoutMs = this.config.requestTimeoutMs ?? 12e4;
1023
+ const timeoutMs = this.config.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
1018
1024
  const timeoutId = setTimeout(() => {
1019
1025
  this.pendingRequests.delete(id);
1020
1026
  reject(/* @__PURE__ */ new Error(`Request timeout after ${timeoutMs}ms: ${method} ${path}`));
@@ -1054,6 +1060,10 @@ var WebSocketTransport = class extends BaseTransport {
1054
1060
  * This method waits for the first message before returning. If the server
1055
1061
  * responds with an error (non-streaming response), it throws immediately
1056
1062
  * rather than returning a stream that will error later.
1063
+ *
1064
+ * Uses an inactivity timeout instead of a total-duration timeout so that
1065
+ * long-running streams (e.g. execStream from an agent) stay alive as long
1066
+ * as data is flowing. The timer resets on every chunk or response message.
1057
1067
  */
1058
1068
  async requestStream(method, path, body) {
1059
1069
  await this.connect();
@@ -1065,16 +1075,21 @@ var WebSocketTransport = class extends BaseTransport {
1065
1075
  path,
1066
1076
  body
1067
1077
  };
1078
+ const idleTimeoutMs = this.config.streamIdleTimeoutMs ?? DEFAULT_STREAM_IDLE_TIMEOUT_MS;
1068
1079
  return new Promise((resolveStream, rejectStream) => {
1069
1080
  let streamController;
1070
1081
  let firstMessageReceived = false;
1071
- const timeoutMs = this.config.requestTimeoutMs ?? 12e4;
1072
- const timeoutId = setTimeout(() => {
1073
- this.pendingRequests.delete(id);
1074
- const error = /* @__PURE__ */ new Error(`Stream timeout after ${timeoutMs}ms: ${method} ${path}`);
1075
- if (firstMessageReceived) streamController?.error(error);
1076
- else rejectStream(error);
1077
- }, timeoutMs);
1082
+ const createIdleTimeout = () => {
1083
+ return setTimeout(() => {
1084
+ this.pendingRequests.delete(id);
1085
+ const error = /* @__PURE__ */ new Error(`Stream idle timeout after ${idleTimeoutMs}ms: ${method} ${path}`);
1086
+ if (firstMessageReceived) try {
1087
+ streamController?.error(error);
1088
+ } catch {}
1089
+ else rejectStream(error);
1090
+ }, idleTimeoutMs);
1091
+ };
1092
+ const timeoutId = createIdleTimeout();
1078
1093
  const stream = new ReadableStream({
1079
1094
  start: (controller) => {
1080
1095
  streamController = controller;
@@ -1098,7 +1113,8 @@ var WebSocketTransport = class extends BaseTransport {
1098
1113
  });
1099
1114
  this.pendingRequests.set(id, {
1100
1115
  resolve: (response) => {
1101
- clearTimeout(timeoutId);
1116
+ const pending = this.pendingRequests.get(id);
1117
+ if (pending?.timeoutId) clearTimeout(pending.timeoutId);
1102
1118
  this.pendingRequests.delete(id);
1103
1119
  if (!firstMessageReceived) {
1104
1120
  firstMessageReceived = true;
@@ -1107,13 +1123,18 @@ var WebSocketTransport = class extends BaseTransport {
1107
1123
  streamController?.close();
1108
1124
  resolveStream(stream);
1109
1125
  }
1110
- } else if (response.status >= 400) streamController?.error(/* @__PURE__ */ new Error(`Stream error: ${response.status} - ${JSON.stringify(response.body)}`));
1126
+ } else if (response.status >= 400) try {
1127
+ streamController?.error(/* @__PURE__ */ new Error(`Stream error: ${response.status} - ${JSON.stringify(response.body)}`));
1128
+ } catch {}
1111
1129
  else streamController?.close();
1112
1130
  },
1113
1131
  reject: (error) => {
1114
- clearTimeout(timeoutId);
1132
+ const pending = this.pendingRequests.get(id);
1133
+ if (pending?.timeoutId) clearTimeout(pending.timeoutId);
1115
1134
  this.pendingRequests.delete(id);
1116
- if (firstMessageReceived) streamController?.error(error);
1135
+ if (firstMessageReceived) try {
1136
+ streamController?.error(error);
1137
+ } catch {}
1117
1138
  else rejectStream(error);
1118
1139
  },
1119
1140
  streamController: void 0,
@@ -1197,6 +1218,9 @@ var WebSocketTransport = class extends BaseTransport {
1197
1218
  }
1198
1219
  /**
1199
1220
  * Handle a stream chunk message
1221
+ *
1222
+ * Resets the idle timeout on every chunk so that long-running streams
1223
+ * with continuous output are not killed by the inactivity timer.
1200
1224
  */
1201
1225
  handleStreamChunk(chunk) {
1202
1226
  const pending = this.pendingRequests.get(chunk.id);
@@ -1208,6 +1232,7 @@ var WebSocketTransport = class extends BaseTransport {
1208
1232
  pending.onFirstChunk();
1209
1233
  pending.onFirstChunk = void 0;
1210
1234
  }
1235
+ if (pending.isStreaming) this.resetStreamIdleTimeout(chunk.id, pending);
1211
1236
  if (!pending.streamController) {
1212
1237
  if (!pending.bufferedChunks) pending.bufferedChunks = [];
1213
1238
  const encoder$1 = new TextEncoder();
@@ -1233,6 +1258,20 @@ var WebSocketTransport = class extends BaseTransport {
1233
1258
  }
1234
1259
  }
1235
1260
  /**
1261
+ * Reset the idle timeout for a streaming request.
1262
+ * Called on every incoming chunk to keep the stream alive while data flows.
1263
+ */
1264
+ resetStreamIdleTimeout(id, pending) {
1265
+ if (pending.timeoutId) clearTimeout(pending.timeoutId);
1266
+ const idleTimeoutMs = this.config.streamIdleTimeoutMs ?? DEFAULT_STREAM_IDLE_TIMEOUT_MS;
1267
+ pending.timeoutId = setTimeout(() => {
1268
+ this.pendingRequests.delete(id);
1269
+ if (pending.streamController) try {
1270
+ pending.streamController.error(/* @__PURE__ */ new Error(`Stream idle timeout after ${idleTimeoutMs}ms`));
1271
+ } catch {}
1272
+ }, idleTimeoutMs);
1273
+ }
1274
+ /**
1236
1275
  * Handle an error message
1237
1276
  */
1238
1277
  handleError(error) {
@@ -3349,7 +3388,7 @@ function buildS3fsSource(bucket, prefix) {
3349
3388
  * This file is auto-updated by .github/changeset-version.ts during releases
3350
3389
  * DO NOT EDIT MANUALLY - Changes will be overwritten on the next version bump
3351
3390
  */
3352
- const SDK_VERSION = "0.7.14";
3391
+ const SDK_VERSION = "0.7.16";
3353
3392
 
3354
3393
  //#endregion
3355
3394
  //#region src/sandbox.ts
@@ -4831,7 +4870,8 @@ var Sandbox = class Sandbox extends Container {
4831
4870
  await this.client.utils.createSession({
4832
4871
  id: sessionId,
4833
4872
  ...envPayload && { env: envPayload },
4834
- ...options?.cwd && { cwd: options.cwd }
4873
+ ...options?.cwd && { cwd: options.cwd },
4874
+ ...options?.commandTimeoutMs !== void 0 && { commandTimeoutMs: options.commandTimeoutMs }
4835
4875
  });
4836
4876
  return this.getSessionWrapper(sessionId);
4837
4877
  }