@vercel/sandbox 1.0.3 → 1.0.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 (56) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +18 -0
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/CHANGELOG.md +12 -0
  5. package/LICENSE +21 -0
  6. package/dist/api-client/api-client.d.ts +5 -2
  7. package/dist/api-client/api-client.js +5 -1
  8. package/dist/api-client/api-client.js.map +1 -0
  9. package/dist/api-client/api-error.js +1 -0
  10. package/dist/api-client/api-error.js.map +1 -0
  11. package/dist/api-client/base-client.js +1 -0
  12. package/dist/api-client/base-client.js.map +1 -0
  13. package/dist/api-client/file-writer.js +1 -0
  14. package/dist/api-client/file-writer.js.map +1 -0
  15. package/dist/api-client/index.js +1 -0
  16. package/dist/api-client/index.js.map +1 -0
  17. package/dist/api-client/validators.d.ts +23 -0
  18. package/dist/api-client/validators.js +2 -0
  19. package/dist/api-client/validators.js.map +1 -0
  20. package/dist/api-client/with-retry.js +11 -0
  21. package/dist/api-client/with-retry.js.map +1 -0
  22. package/dist/command.js +1 -0
  23. package/dist/command.js.map +1 -0
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/sandbox.d.ts +8 -1
  27. package/dist/sandbox.js +24 -5
  28. package/dist/sandbox.js.map +1 -0
  29. package/dist/utils/array.js +1 -0
  30. package/dist/utils/array.js.map +1 -0
  31. package/dist/utils/consume-readable.js +1 -0
  32. package/dist/utils/consume-readable.js.map +1 -0
  33. package/dist/utils/decode-base64-url.js +1 -0
  34. package/dist/utils/decode-base64-url.js.map +1 -0
  35. package/dist/utils/get-credentials.js +1 -0
  36. package/dist/utils/get-credentials.js.map +1 -0
  37. package/dist/utils/jwt-expiry.js +1 -0
  38. package/dist/utils/jwt-expiry.js.map +1 -0
  39. package/dist/utils/normalizePath.js +1 -0
  40. package/dist/utils/normalizePath.js.map +1 -0
  41. package/dist/utils/resolveSignal.js +1 -0
  42. package/dist/utils/resolveSignal.js.map +1 -0
  43. package/dist/utils/types.js +1 -0
  44. package/dist/utils/types.js.map +1 -0
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.js +2 -1
  47. package/dist/version.js.map +1 -0
  48. package/package.json +2 -2
  49. package/src/api-client/api-client.ts +7 -2
  50. package/src/api-client/validators.ts +1 -0
  51. package/src/api-client/with-retry.ts +11 -0
  52. package/src/command.test.ts +81 -77
  53. package/src/sandbox.test.ts +60 -58
  54. package/src/sandbox.ts +24 -6
  55. package/src/version.ts +1 -1
  56. package/tsconfig.json +1 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > @vercel/sandbox@1.0.3 build /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
2
+ > @vercel/sandbox@1.0.4 build /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
3
3
  > tsc
4
4
 
@@ -0,0 +1,18 @@
1
+
2
+ > @vercel/sandbox@1.0.4 test /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
3
+ > vitest run
4
+
5
+
6
+  RUN  v3.2.1 /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
7
+
8
+ ✓ src/utils/jwt-expiry.test.ts (10 tests) 24ms
9
+ ↓ src/sandbox.test.ts (4 tests | 4 skipped)
10
+ ✓ src/utils/normalizePath.test.ts (6 tests) 25ms
11
+ ↓ src/command.test.ts (5 tests | 5 skipped)
12
+ ✓ src/utils/types.test.js (1 test) 11ms
13
+
14
+  Test Files  3 passed | 2 skipped (5)
15
+  Tests  17 passed | 9 skipped (26)
16
+  Start at  13:42:43
17
+  Duration  4.89s (transform 478ms, setup 193ms, collect 1.50s, tests 60ms, environment 2ms, prepare 1.27s)
18
+
@@ -1,4 +1,4 @@
1
1
 
2
- > @vercel/sandbox@1.0.3 typecheck /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
2
+ > @vercel/sandbox@1.0.4 typecheck /home/runner/work/sandbox-sdk/sandbox-sdk/packages/vercel-sandbox
3
3
  > tsc --noEmit
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @vercel/sandbox
2
2
 
3
+ ## 1.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - add jsdoc example for sandbox.extendTimeout ([#171](https://github.com/vercel/sandbox-sdk/pull/171))
8
+
9
+ - change license to MIT (more permissive, therefore not breaking change) ([#169](https://github.com/vercel/sandbox-sdk/pull/169))
10
+
11
+ - when streaming stdout/stderr on command creation, don't throw AbortError when AbortSignal is done. Instead silently exit the loop. It's fine. ([#172](https://github.com/vercel/sandbox-sdk/pull/172))
12
+
13
+ - Make interactive sandbox command execution use WebSocket instead of WebRTC to support more diverse network conditions. ([#164](https://github.com/vercel/sandbox-sdk/pull/164))
14
+
3
15
  ## 1.0.3
4
16
 
5
17
  ### Patch Changes
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Vercel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -13,10 +13,10 @@ export declare class APIClient extends BaseClient {
13
13
  });
14
14
  private ensureValidToken;
15
15
  protected request(path: string, params?: RequestParams): Promise<Response>;
16
- getSandbox(params: {
16
+ getSandbox(params: WithPrivate<{
17
17
  sandboxId: string;
18
18
  signal?: AbortSignal;
19
- }): Promise<Parsed<{
19
+ }>): Promise<Parsed<{
20
20
  sandbox: {
21
21
  region: string;
22
22
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -33,6 +33,7 @@ export declare class APIClient extends BaseClient {
33
33
  startedAt?: number | undefined;
34
34
  requestedStopAt?: number | undefined;
35
35
  stoppedAt?: number | undefined;
36
+ interactivePort?: number | undefined;
36
37
  };
37
38
  routes: {
38
39
  url: string;
@@ -77,6 +78,7 @@ export declare class APIClient extends BaseClient {
77
78
  startedAt?: number | undefined;
78
79
  requestedStopAt?: number | undefined;
79
80
  stoppedAt?: number | undefined;
81
+ interactivePort?: number | undefined;
80
82
  };
81
83
  routes: {
82
84
  url: string;
@@ -168,6 +170,7 @@ export declare class APIClient extends BaseClient {
168
170
  startedAt?: number | undefined;
169
171
  requestedStopAt?: number | undefined;
170
172
  stoppedAt?: number | undefined;
173
+ interactivePort?: number | undefined;
171
174
  }[];
172
175
  pagination: {
173
176
  count: number;
@@ -53,7 +53,10 @@ class APIClient extends base_client_1.BaseClient {
53
53
  });
54
54
  }
55
55
  async getSandbox(params) {
56
- return (0, base_client_1.parseOrThrow)(validators_1.SandboxAndRoutesResponse, await this.request(`/v1/sandboxes/${params.sandboxId}`, {
56
+ const privateParams = (0, types_1.getPrivateParams)(params);
57
+ let querystring = new URLSearchParams(privateParams).toString();
58
+ querystring = querystring ? `?${querystring}` : "";
59
+ return (0, base_client_1.parseOrThrow)(validators_1.SandboxAndRoutesResponse, await this.request(`/v1/sandboxes/${params.sandboxId}${querystring}`, {
57
60
  signal: params.signal,
58
61
  }));
59
62
  }
@@ -259,3 +262,4 @@ function mergeSignals(...signals) {
259
262
  }
260
263
  return controller.signal;
261
264
  }
265
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/api-client/api-client.ts"],"names":[],"mappings":";;;;;;AAAA,+CAKuB;AACvB,6CASsB;AACtB,2CAAuC;AACvC,+CAA2C;AAC3C,wCAAqC;AACrC,gEAA4D;AAE5D,0DAAkC;AAClC,4CAAoB;AACpB,mCAAkC;AAClC,0DAAuD;AACvD,oDAAgD;AAChD,0CAA+D;AAE/D,MAAa,SAAU,SAAQ,wBAAU;IAIvC,YAAY,MAA2D;QACrE,KAAK,CAAC;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,wBAAwB;YACnD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,sBAAS,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnD,CAAC;IACH,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAsB;QAC1D,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YACzB,GAAG,MAAM;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,kBAAkB,iBAAO,aAAa,OAAO,CAAC,OAAO,KAAK,YAAE,CAAC,QAAQ,EAAE,IAAI,YAAE,CAAC,IAAI,EAAE,GAAG;gBACrG,GAAG,MAAM,EAAE,OAAO;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAgE;QAEhE,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,WAAW,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,IAAA,0BAAY,EACjB,qCAAwB,EACxB,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,SAAS,GAAG,WAAW,EAAE,EAAE;YACpE,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAiBE;QAEF,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAA,0BAAY,EACjB,qCAAwB,EACxB,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,aAAa;aACjB,CAAC;YACF,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAQhB;QACC,OAAO,IAAA,0BAAY,EACjB,4BAAe,EACf,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,SAAS,MAAM,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;YACF,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAcD,KAAK,CAAC,UAAU,CAAC,MAKhB;QACC,OAAO,MAAM,CAAC,IAAI;YAChB,CAAC,CAAC,IAAA,0BAAY,EACV,oCAAuB,EACvB,MAAM,IAAI,CAAC,OAAO,CAChB,iBAAiB,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,KAAK,EAAE,EACvD,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CACnD,CACF;YACH,CAAC,CAAC,IAAA,0BAAY,EACV,4BAAe,EACf,MAAM,IAAI,CAAC,OAAO,CAChB,iBAAiB,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,KAAK,EAAE,EACvD,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B,CACF,CAAC;IACR,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAKX;QACC,OAAO,IAAA,0BAAY,EACjB,0BAAa,EACb,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,SAAS,WAAW,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,MAIb;QACC,MAAM,MAAM,GAAG,IAAI,wBAAU,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC,KAAK,IAAI,EAAE;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,SAAS,WAAW,EAAE;oBAChE,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,OAAO,EAAE,MAAM,CAAC,UAAU;qBAC3B;oBACD,IAAI,EAAE,MAAM,IAAA,kCAAe,EAAC,MAAM,CAAC,QAAQ,CAAC;oBAC5C,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;YACJ,MAAM;SACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAsBnB;QACC,OAAO,IAAA,0BAAY,EACjB,8BAAiB,EACjB,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAClC,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM,CAAC,SAAS;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EACH,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;oBAC9B,CAAC,CAAC,MAAM,CAAC,KAAK;oBACd,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC7B,KAAK,EACH,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;oBAC9B,CAAC,CAAC,MAAM,CAAC,KAAK;oBACd,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;aAC9B;YACD,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAMhB;QACC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,OAAO,CAAC;gBACnB,IAAI,EAAE,IAAA,6BAAa,EAAC;oBAClB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;iBAChB,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,0BAAY,EAAC,0BAAa,EAAE,MAAM,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAKd;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,iBAAiB,MAAM,CAAC,SAAS,UAAU,EAC3C;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iBAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAKjB;QACC,OAAO,IAAA,0BAAY,EACjB,4BAAe,EACf,MAAM,IAAI,CAAC,OAAO,CAChB,iBAAiB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,OAAO,EAC5D;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,EAAE,MAAM,CAAC,WAAW;SAC3B,CACF,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAIP;QAEC,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM;YAC3B,CAAC,CAAC,QAAQ,CAAC,MAAM;YACjB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,CAAC,KAAK,SAAS,CAAC;YAChC,MAAM,GAAG,GAAG,iBAAiB,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,KAAK,OAAO,CAAC;YACzE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACvC,MAAM,EAAE,KAAK;gBACb,MAAM;aACP,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,sBAAsB,EAAE,CAAC;gBACpE,MAAM,IAAI,oBAAQ,CAAC,QAAQ,EAAE;oBAC3B,OAAO,EAAE,2BAA2B;iBACrC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,oBAAQ,CAAC,QAAQ,EAAE;oBAC3B,OAAO,EAAE,kBAAkB;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,eAAe,GAAG,mBAAS,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjD,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBAC1C,MAAM,oBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YAC9B,CAAC,MAAM,CAAC,OAAO,CAAC;gBACd,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAGjB;QACC,MAAM,GAAG,GAAG,iBAAiB,MAAM,CAAC,SAAS,OAAO,CAAC;QACrD,OAAO,IAAA,0BAAY,EACjB,4BAAe,EACf,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAInB;QACC,MAAM,GAAG,GAAG,iBAAiB,MAAM,CAAC,SAAS,iBAAiB,CAAC;QAC/D,OAAO,IAAA,0BAAY,EACjB,kCAAqB,EACrB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AArYD,8BAqYC;AAED,KAAK,UAAU,IAAI,CACjB,QAAoC,EACpC,MAA6B;IAE7B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAG,OAAwC;IAC/D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM;QACR,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
@@ -14,3 +14,4 @@ class APIError extends Error {
14
14
  }
15
15
  }
16
16
  exports.APIError = APIError;
17
+ //# sourceMappingURL=api-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-error.js","sourceRoot":"","sources":["../../src/api-client/api-error.ts"],"names":[],"mappings":";;;AAMA,MAAa,QAAoB,SAAQ,KAAK;IAM5C,YAAY,QAAkB,EAAE,OAA4B;QAC1D,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;IAC5B,CAAC;CACF;AAjBD,4BAiBC"}
@@ -112,3 +112,4 @@ async function parseOrThrow(validator, response) {
112
112
  }
113
113
  return result;
114
114
  }
115
+ //# sourceMappingURL=base-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/api-client/base-client.ts"],"names":[],"mappings":"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"}
@@ -60,3 +60,4 @@ class FileWriter {
60
60
  }
61
61
  }
62
62
  exports.FileWriter = FileWriter;
63
+ //# sourceMappingURL=file-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../src/api-client/file-writer.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4DAA4C;AAC5C,mCAAkC;AA6BlC;;;;GAIG;AACH,MAAa,UAAU;IAIrB;QACE,MAAM,IAAI,GAAG,cAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,oBAAG,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAC3B,MAAM,IAAI,IAAI;gBACZ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;gBACtC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAClD,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CACF,CAAC;YAEF,IAAI,IAAI,CAAC,OAAO,YAAY,iBAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AArDD,gCAqDC"}
@@ -18,3 +18,4 @@ exports.APIClient = void 0;
18
18
  var api_client_1 = require("./api-client");
19
19
  Object.defineProperty(exports, "APIClient", { enumerable: true, get: function () { return api_client_1.APIClient; } });
20
20
  __exportStar(require("./validators"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api-client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA6B"}
@@ -16,6 +16,7 @@ export declare const Sandbox: z.ZodObject<{
16
16
  createdAt: z.ZodNumber;
17
17
  cwd: z.ZodString;
18
18
  updatedAt: z.ZodNumber;
19
+ interactivePort: z.ZodOptional<z.ZodNumber>;
19
20
  }, "strip", z.ZodTypeAny, {
20
21
  region: string;
21
22
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -32,6 +33,7 @@ export declare const Sandbox: z.ZodObject<{
32
33
  startedAt?: number | undefined;
33
34
  requestedStopAt?: number | undefined;
34
35
  stoppedAt?: number | undefined;
36
+ interactivePort?: number | undefined;
35
37
  }, {
36
38
  region: string;
37
39
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -48,6 +50,7 @@ export declare const Sandbox: z.ZodObject<{
48
50
  startedAt?: number | undefined;
49
51
  requestedStopAt?: number | undefined;
50
52
  stoppedAt?: number | undefined;
53
+ interactivePort?: number | undefined;
51
54
  }>;
52
55
  export type SandboxRouteData = z.infer<typeof SandboxRoute>;
53
56
  export declare const SandboxRoute: z.ZodObject<{
@@ -131,6 +134,7 @@ export declare const SandboxResponse: z.ZodObject<{
131
134
  createdAt: z.ZodNumber;
132
135
  cwd: z.ZodString;
133
136
  updatedAt: z.ZodNumber;
137
+ interactivePort: z.ZodOptional<z.ZodNumber>;
134
138
  }, "strip", z.ZodTypeAny, {
135
139
  region: string;
136
140
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -147,6 +151,7 @@ export declare const SandboxResponse: z.ZodObject<{
147
151
  startedAt?: number | undefined;
148
152
  requestedStopAt?: number | undefined;
149
153
  stoppedAt?: number | undefined;
154
+ interactivePort?: number | undefined;
150
155
  }, {
151
156
  region: string;
152
157
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -163,6 +168,7 @@ export declare const SandboxResponse: z.ZodObject<{
163
168
  startedAt?: number | undefined;
164
169
  requestedStopAt?: number | undefined;
165
170
  stoppedAt?: number | undefined;
171
+ interactivePort?: number | undefined;
166
172
  }>;
167
173
  }, "strip", z.ZodTypeAny, {
168
174
  sandbox: {
@@ -181,6 +187,7 @@ export declare const SandboxResponse: z.ZodObject<{
181
187
  startedAt?: number | undefined;
182
188
  requestedStopAt?: number | undefined;
183
189
  stoppedAt?: number | undefined;
190
+ interactivePort?: number | undefined;
184
191
  };
185
192
  }, {
186
193
  sandbox: {
@@ -199,6 +206,7 @@ export declare const SandboxResponse: z.ZodObject<{
199
206
  startedAt?: number | undefined;
200
207
  requestedStopAt?: number | undefined;
201
208
  stoppedAt?: number | undefined;
209
+ interactivePort?: number | undefined;
202
210
  };
203
211
  }>;
204
212
  export declare const SandboxAndRoutesResponse: z.ZodObject<{
@@ -218,6 +226,7 @@ export declare const SandboxAndRoutesResponse: z.ZodObject<{
218
226
  createdAt: z.ZodNumber;
219
227
  cwd: z.ZodString;
220
228
  updatedAt: z.ZodNumber;
229
+ interactivePort: z.ZodOptional<z.ZodNumber>;
221
230
  }, "strip", z.ZodTypeAny, {
222
231
  region: string;
223
232
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -234,6 +243,7 @@ export declare const SandboxAndRoutesResponse: z.ZodObject<{
234
243
  startedAt?: number | undefined;
235
244
  requestedStopAt?: number | undefined;
236
245
  stoppedAt?: number | undefined;
246
+ interactivePort?: number | undefined;
237
247
  }, {
238
248
  region: string;
239
249
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -250,6 +260,7 @@ export declare const SandboxAndRoutesResponse: z.ZodObject<{
250
260
  startedAt?: number | undefined;
251
261
  requestedStopAt?: number | undefined;
252
262
  stoppedAt?: number | undefined;
263
+ interactivePort?: number | undefined;
253
264
  }>;
254
265
  } & {
255
266
  routes: z.ZodArray<z.ZodObject<{
@@ -282,6 +293,7 @@ export declare const SandboxAndRoutesResponse: z.ZodObject<{
282
293
  startedAt?: number | undefined;
283
294
  requestedStopAt?: number | undefined;
284
295
  stoppedAt?: number | undefined;
296
+ interactivePort?: number | undefined;
285
297
  };
286
298
  routes: {
287
299
  url: string;
@@ -305,6 +317,7 @@ export declare const SandboxAndRoutesResponse: z.ZodObject<{
305
317
  startedAt?: number | undefined;
306
318
  requestedStopAt?: number | undefined;
307
319
  stoppedAt?: number | undefined;
320
+ interactivePort?: number | undefined;
308
321
  };
309
322
  routes: {
310
323
  url: string;
@@ -435,6 +448,7 @@ export declare const SandboxesResponse: z.ZodObject<{
435
448
  createdAt: z.ZodNumber;
436
449
  cwd: z.ZodString;
437
450
  updatedAt: z.ZodNumber;
451
+ interactivePort: z.ZodOptional<z.ZodNumber>;
438
452
  }, "strip", z.ZodTypeAny, {
439
453
  region: string;
440
454
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -451,6 +465,7 @@ export declare const SandboxesResponse: z.ZodObject<{
451
465
  startedAt?: number | undefined;
452
466
  requestedStopAt?: number | undefined;
453
467
  stoppedAt?: number | undefined;
468
+ interactivePort?: number | undefined;
454
469
  }, {
455
470
  region: string;
456
471
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -467,6 +482,7 @@ export declare const SandboxesResponse: z.ZodObject<{
467
482
  startedAt?: number | undefined;
468
483
  requestedStopAt?: number | undefined;
469
484
  stoppedAt?: number | undefined;
485
+ interactivePort?: number | undefined;
470
486
  }>, "many">;
471
487
  pagination: z.ZodObject<{
472
488
  /**
@@ -510,6 +526,7 @@ export declare const SandboxesResponse: z.ZodObject<{
510
526
  startedAt?: number | undefined;
511
527
  requestedStopAt?: number | undefined;
512
528
  stoppedAt?: number | undefined;
529
+ interactivePort?: number | undefined;
513
530
  }[];
514
531
  pagination: {
515
532
  count: number;
@@ -533,6 +550,7 @@ export declare const SandboxesResponse: z.ZodObject<{
533
550
  startedAt?: number | undefined;
534
551
  requestedStopAt?: number | undefined;
535
552
  stoppedAt?: number | undefined;
553
+ interactivePort?: number | undefined;
536
554
  }[];
537
555
  pagination: {
538
556
  count: number;
@@ -557,6 +575,7 @@ export declare const ExtendTimeoutResponse: z.ZodObject<{
557
575
  createdAt: z.ZodNumber;
558
576
  cwd: z.ZodString;
559
577
  updatedAt: z.ZodNumber;
578
+ interactivePort: z.ZodOptional<z.ZodNumber>;
560
579
  }, "strip", z.ZodTypeAny, {
561
580
  region: string;
562
581
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -573,6 +592,7 @@ export declare const ExtendTimeoutResponse: z.ZodObject<{
573
592
  startedAt?: number | undefined;
574
593
  requestedStopAt?: number | undefined;
575
594
  stoppedAt?: number | undefined;
595
+ interactivePort?: number | undefined;
576
596
  }, {
577
597
  region: string;
578
598
  status: "pending" | "running" | "stopping" | "stopped" | "failed";
@@ -589,6 +609,7 @@ export declare const ExtendTimeoutResponse: z.ZodObject<{
589
609
  startedAt?: number | undefined;
590
610
  requestedStopAt?: number | undefined;
591
611
  stoppedAt?: number | undefined;
612
+ interactivePort?: number | undefined;
592
613
  }>;
593
614
  }, "strip", z.ZodTypeAny, {
594
615
  sandbox: {
@@ -607,6 +628,7 @@ export declare const ExtendTimeoutResponse: z.ZodObject<{
607
628
  startedAt?: number | undefined;
608
629
  requestedStopAt?: number | undefined;
609
630
  stoppedAt?: number | undefined;
631
+ interactivePort?: number | undefined;
610
632
  };
611
633
  }, {
612
634
  sandbox: {
@@ -625,5 +647,6 @@ export declare const ExtendTimeoutResponse: z.ZodObject<{
625
647
  startedAt?: number | undefined;
626
648
  requestedStopAt?: number | undefined;
627
649
  stoppedAt?: number | undefined;
650
+ interactivePort?: number | undefined;
628
651
  };
629
652
  }>;
@@ -18,6 +18,7 @@ exports.Sandbox = zod_1.z.object({
18
18
  createdAt: zod_1.z.number(),
19
19
  cwd: zod_1.z.string(),
20
20
  updatedAt: zod_1.z.number(),
21
+ interactivePort: zod_1.z.number().optional(),
21
22
  });
22
23
  exports.SandboxRoute = zod_1.z.object({
23
24
  url: zod_1.z.string(),
@@ -77,3 +78,4 @@ exports.SandboxesResponse = zod_1.z.object({
77
78
  exports.ExtendTimeoutResponse = zod_1.z.object({
78
79
  sandbox: exports.Sandbox,
79
80
  });
81
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api-client/validators.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,9 @@ function withRetry(rawFetch) {
38
38
  try {
39
39
  return (await (0, async_retry_1.default)(async (bail) => {
40
40
  try {
41
+ if (opts.signal?.aborted) {
42
+ return bail(opts.signal.reason || new Error("Request aborted"));
43
+ }
41
44
  const response = await rawFetch(url, opts);
42
45
  /**
43
46
  * When the response is 429 we will try to parse the Retry-After
@@ -73,6 +76,13 @@ function withRetry(rawFetch) {
73
76
  if (isAbortError(error)) {
74
77
  return bail(error);
75
78
  }
79
+ /**
80
+ * If the signal was aborted meanwhile we were
81
+ * waiting, we bail from retrying.
82
+ */
83
+ if (opts.signal?.aborted) {
84
+ return bail(opts.signal.reason || new Error("Request aborted"));
85
+ }
76
86
  throw error;
77
87
  }
78
88
  }, retryOpts));
@@ -95,3 +105,4 @@ function isAbortError(error) {
95
105
  error !== null &&
96
106
  error.name === "AbortError");
97
107
  }
108
+ //# sourceMappingURL=with-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-retry.js","sourceRoot":"","sources":["../../src/api-client/with-retry.ts"],"names":[],"mappings":"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"}
package/dist/command.js CHANGED
@@ -199,3 +199,4 @@ class CommandFinished extends Command {
199
199
  }
200
200
  }
201
201
  exports.CommandFinished = CommandFinished;
202
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,3 +6,4 @@ Object.defineProperty(exports, "Sandbox", { enumerable: true, get: function () {
6
6
  var command_1 = require("./command");
7
7
  Object.defineProperty(exports, "Command", { enumerable: true, get: function () { return command_1.Command; } });
8
8
  Object.defineProperty(exports, "CommandFinished", { enumerable: true, get: function () { return command_1.CommandFinished; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,qCAAqD;AAA5C,kGAAA,OAAO,OAAA;AAAE,0GAAA,eAAe,OAAA"}
package/dist/sandbox.d.ts CHANGED
@@ -126,6 +126,7 @@ export declare class Sandbox {
126
126
  * Unique ID of this sandbox.
127
127
  */
128
128
  get sandboxId(): string;
129
+ get interactivePort(): number | undefined;
129
130
  /**
130
131
  * The status of the sandbox.
131
132
  */
@@ -160,6 +161,7 @@ export declare class Sandbox {
160
161
  startedAt?: number | undefined;
161
162
  requestedStopAt?: number | undefined;
162
163
  stoppedAt?: number | undefined;
164
+ interactivePort?: number | undefined;
163
165
  }[];
164
166
  pagination: {
165
167
  count: number;
@@ -180,7 +182,7 @@ export declare class Sandbox {
180
182
  * @param params - Get parameters and optional credentials.
181
183
  * @returns A promise resolving to the {@link Sandbox}.
182
184
  */
183
- static get(params: GetSandboxParams | (GetSandboxParams & Credentials)): Promise<Sandbox>;
185
+ static get(params: WithPrivate<GetSandboxParams | (GetSandboxParams & Credentials)>): Promise<Sandbox>;
184
186
  /**
185
187
  * Create a new Sandbox instance.
186
188
  *
@@ -308,6 +310,11 @@ export declare class Sandbox {
308
310
  * @param opts - Optional parameters.
309
311
  * @param opts.signal - An AbortSignal to cancel the operation.
310
312
  * @returns A promise that resolves when the timeout is extended
313
+ *
314
+ * @example
315
+ * const sandbox = await Sandbox.create({ timeout: ms('10m') });
316
+ * // Extends timeout by 5 minutes, to a total of 15 minutes.
317
+ * await sandbox.extendTimeout(ms('5m'));
311
318
  */
312
319
  extendTimeout(duration: number, opts?: {
313
320
  signal?: AbortSignal;
package/dist/sandbox.js CHANGED
@@ -18,6 +18,9 @@ class Sandbox {
18
18
  get sandboxId() {
19
19
  return this.sandbox.id;
20
20
  }
21
+ get interactivePort() {
22
+ return this.sandbox.interactivePort ?? undefined;
23
+ }
21
24
  /**
22
25
  * The status of the sandbox.
23
26
  */
@@ -87,9 +90,11 @@ class Sandbox {
87
90
  teamId: credentials.teamId,
88
91
  token: credentials.token,
89
92
  });
93
+ const privateParams = (0, types_1.getPrivateParams)(params);
90
94
  const sandbox = await client.getSandbox({
91
95
  sandboxId: params.sandboxId,
92
96
  signal: params.signal,
97
+ ...privateParams,
93
98
  });
94
99
  return new Sandbox({
95
100
  client,
@@ -158,13 +163,21 @@ class Sandbox {
158
163
  });
159
164
  if (params.stdout || params.stderr) {
160
165
  (async () => {
161
- for await (const log of command.logs({ signal: params.signal })) {
162
- if (log.stream === "stdout") {
163
- params.stdout?.write(log.data);
166
+ try {
167
+ for await (const log of command.logs({ signal: params.signal })) {
168
+ if (log.stream === "stdout") {
169
+ params.stdout?.write(log.data);
170
+ }
171
+ else if (log.stream === "stderr") {
172
+ params.stderr?.write(log.data);
173
+ }
164
174
  }
165
- else if (log.stream === "stderr") {
166
- params.stderr?.write(log.data);
175
+ }
176
+ catch (err) {
177
+ if (params.signal?.aborted) {
178
+ return;
167
179
  }
180
+ throw err;
168
181
  }
169
182
  })();
170
183
  }
@@ -258,6 +271,11 @@ class Sandbox {
258
271
  * @param opts - Optional parameters.
259
272
  * @param opts.signal - An AbortSignal to cancel the operation.
260
273
  * @returns A promise that resolves when the timeout is extended
274
+ *
275
+ * @example
276
+ * const sandbox = await Sandbox.create({ timeout: ms('10m') });
277
+ * // Extends timeout by 5 minutes, to a total of 15 minutes.
278
+ * await sandbox.extendTimeout(ms('5m'));
261
279
  */
262
280
  async extendTimeout(duration, opts) {
263
281
  const response = await this.client.extendTimeout({
@@ -270,3 +288,4 @@ class Sandbox {
270
288
  }
271
289
  }
272
290
  exports.Sandbox = Sandbox;
291
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -16,3 +16,4 @@ function array(item) {
16
16
  : [item]
17
17
  : [];
18
18
  }
19
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":";;AAQA,sBAMC;AAdD;;;;;;;GAOG;AACH,SAAgB,KAAK,CAAI,IAAqB;IAC5C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,IAAI,CAAC;QACV,CAAC,CAAC,EAAE,CAAC;AACT,CAAC"}
@@ -13,3 +13,4 @@ function consumeReadable(readable) {
13
13
  readable.on("end", () => resolve(Buffer.concat(chunks)));
14
14
  });
15
15
  }
16
+ //# sourceMappingURL=consume-readable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consume-readable.js","sourceRoot":"","sources":["../../src/utils/consume-readable.ts"],"names":[],"mappings":";;AAIA,0CAOC;AAXD;;;GAGG;AACH,SAAgB,eAAe,CAAC,QAA+B;IAC7D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -10,3 +10,4 @@ exports.decodeBase64Url = decodeBase64Url;
10
10
  function decodeBase64Url(base64Url) {
11
11
  return JSON.parse(Buffer.from(base64Url.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf8"));
12
12
  }
13
+ //# sourceMappingURL=decode-base64-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-base64-url.js","sourceRoot":"","sources":["../../src/utils/decode-base64-url.ts"],"names":[],"mappings":";;AAMA,0CAOC;AAbD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,SAAiB;IAC/C,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAC/C,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC"}
@@ -89,3 +89,4 @@ function getCredentialsFromOIDCToken(token) {
89
89
  throw new Error(`Invalid Vercel OIDC token: ${error instanceof Error ? error.message : String(error)}`);
90
90
  }
91
91
  }
92
+ //# sourceMappingURL=get-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-credentials.js","sourceRoot":"","sources":["../../src/utils/get-credentials.ts"],"names":[],"mappings":"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"}
@@ -103,3 +103,4 @@ exports.JwtExpiry = JwtExpiry;
103
103
  function isJwtFormat(token) {
104
104
  return token.split(".").length === 3;
105
105
  }
106
+ //# sourceMappingURL=jwt-expiry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-expiry.js","sourceRoot":"","sources":["../../src/utils/jwt-expiry.ts"],"names":[],"mappings":";;;;;;AACA,2DAAsD;AACtD,uDAA2C;AAC3C,uCAAkD;AAClD,4CAAoB;AAEpB,+EAA+E;AAC/E,MAAM,SAAS,GAAG,IAAA,YAAE,EAAC,IAAI,CAAC,CAAC;AAE3B,MAAa,gBAAiB,SAAQ,KAAK;IAA3C;;QACE,SAAI,GAAG,kBAAkB,CAAC;IAC5B,CAAC;CAAA;AAFD,4CAEC;AAED;;;GAGG;AACH,MAAa,SAAS;IAIpB,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAqB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,wBAAM,CAAC,KAAK,CAAC,IAAA,mCAAe,EAAC,aAAa,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC,CAAC,gCAAgC;QAChD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;QAChC,OAAO,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAkB,GAAE,CAAC;YAC9C,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,EAAE;gBACzD,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,CAAC,kCAAkC;QACjD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF;AA7ED,8BA6EC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -29,3 +29,4 @@ function normalizePath(params) {
29
29
  : path_1.default.posix.join(params.cwd, params.filePath);
30
30
  return path_1.default.posix.relative(params.extractDir, basePath);
31
31
  }
32
+ //# sourceMappingURL=normalizePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizePath.js","sourceRoot":"","sources":["../../src/utils/normalizePath.ts"],"names":[],"mappings":";;;;;AAcA,sCAkBC;AAhCD,gDAAwB;AAExB;;;;;;;;;;;GAWG;AACH,SAAgB,aAAa,CAAC,MAI7B;IACC,IAAI,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,cAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAO,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
@@ -19,3 +19,4 @@ function resolveSignal(signal) {
19
19
  }
20
20
  throw new Error(`Unknown signal name: ${String(signal)}`);
21
21
  }
22
+ //# sourceMappingURL=resolveSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSignal.js","sourceRoot":"","sources":["../../src/utils/resolveSignal.ts"],"names":[],"mappings":";;AAcA,sCASC;AAvBD,MAAM,kBAAkB,GAAG;IACzB,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;CACH,CAAC;AAMX,SAAgB,aAAa,CAAC,MAAc;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACjC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC"}
@@ -9,3 +9,4 @@ const getPrivateParams = (params) => {
9
9
  return Object.fromEntries(privateEntries);
10
10
  };
11
11
  exports.getPrivateParams = getPrivateParams;
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":";;;AAUA;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAAe,EAAE,EAAE;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CACjE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACnB,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CAAC,cAAc,CAIvC,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.0.3";
1
+ export declare const VERSION = "1.0.4";
package/dist/version.js CHANGED
@@ -2,4 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Autogenerated by inject-version.ts
5
- exports.VERSION = "1.0.3";
5
+ exports.VERSION = "1.0.4";
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AACxB,QAAA,OAAO,GAAG,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@vercel/sandbox",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "private": false,
8
8
  "keywords": [],
9
9
  "author": "",
10
- "license": "ISC",
10
+ "license": "MIT",
11
11
  "dependencies": {
12
12
  "@vercel/oidc": "^3.0.5",
13
13
  "async-retry": "1.3.3",
@@ -72,10 +72,15 @@ export class APIClient extends BaseClient {
72
72
  });
73
73
  }
74
74
 
75
- async getSandbox(params: { sandboxId: string; signal?: AbortSignal }) {
75
+ async getSandbox(
76
+ params: WithPrivate<{ sandboxId: string; signal?: AbortSignal }>,
77
+ ) {
78
+ const privateParams = getPrivateParams(params);
79
+ let querystring = new URLSearchParams(privateParams).toString();
80
+ querystring = querystring ? `?${querystring}` : "";
76
81
  return parseOrThrow(
77
82
  SandboxAndRoutesResponse,
78
- await this.request(`/v1/sandboxes/${params.sandboxId}`, {
83
+ await this.request(`/v1/sandboxes/${params.sandboxId}${querystring}`, {
79
84
  signal: params.signal,
80
85
  }),
81
86
  );
@@ -18,6 +18,7 @@ export const Sandbox = z.object({
18
18
  createdAt: z.number(),
19
19
  cwd: z.string(),
20
20
  updatedAt: z.number(),
21
+ interactivePort: z.number().optional(),
21
22
  });
22
23
 
23
24
  export type SandboxRouteData = z.infer<typeof SandboxRoute>;
@@ -49,6 +49,9 @@ export function withRetry<T extends RequestInit>(
49
49
  try {
50
50
  return (await retry(async (bail) => {
51
51
  try {
52
+ if (opts.signal?.aborted) {
53
+ return bail(opts.signal.reason || new Error("Request aborted"));
54
+ }
52
55
  const response = await rawFetch(url, opts);
53
56
 
54
57
  /**
@@ -93,6 +96,14 @@ export function withRetry<T extends RequestInit>(
93
96
  return bail(error);
94
97
  }
95
98
 
99
+ /**
100
+ * If the signal was aborted meanwhile we were
101
+ * waiting, we bail from retrying.
102
+ */
103
+ if (opts.signal?.aborted) {
104
+ return bail(opts.signal.reason || new Error("Request aborted"));
105
+ }
106
+
96
107
  throw error;
97
108
  }
98
109
  }, retryOpts)) as Response;
@@ -1,99 +1,103 @@
1
- import { expect, it, vi, beforeEach, afterEach } from "vitest";
1
+ import { expect, it, vi, beforeEach, afterEach, describe } from "vitest";
2
2
  import { Sandbox } from "./sandbox";
3
3
 
4
- let sandbox: Sandbox;
4
+ describe.skipIf(process.env.RUN_INTEGRATION_TESTS !== "1")("Command", () => {
5
+ let sandbox: Sandbox;
5
6
 
6
- beforeEach(async () => {
7
- sandbox = await Sandbox.create();
8
- });
9
-
10
- afterEach(async () => {
11
- await sandbox.stop();
12
- });
13
-
14
- it("supports more than one logs consumer", async () => {
15
- const stdoutSpy = vi
16
- .spyOn(process.stdout, "write")
17
- .mockImplementation(() => true);
18
-
19
- const cmd = await sandbox.runCommand({
20
- cmd: "echo",
21
- args: ["Hello World!"],
22
- stdout: process.stdout,
7
+ beforeEach(async () => {
8
+ sandbox = await Sandbox.create();
23
9
  });
24
10
 
25
- expect(await cmd.stdout()).toEqual("Hello World!\n");
26
- expect(stdoutSpy).toHaveBeenCalledWith("Hello World!\n");
27
- });
28
-
29
- it("does not warn when there is only one logs consumer", async () => {
30
- const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
31
-
32
- const cmd = await sandbox.runCommand({
33
- cmd: "echo",
34
- args: ["Hello World!"],
11
+ afterEach(async () => {
12
+ await sandbox.stop();
35
13
  });
36
14
 
37
- expect(await cmd.stdout()).toEqual("Hello World!\n");
38
- expect(warnSpy).not.toHaveBeenCalled();
39
- });
40
-
41
- it("Kills a command with a SIGINT", async () => {
42
- const cmd = await sandbox.runCommand({
43
- cmd: "sleep",
44
- args: ["200000"],
45
- detached: true,
46
- });
15
+ it("supports more than one logs consumer", async () => {
16
+ const stdoutSpy = vi
17
+ .spyOn(process.stdout, "write")
18
+ .mockImplementation(() => true);
47
19
 
48
- await cmd.kill("SIGINT");
49
- const result = await cmd.wait();
50
- expect(result.exitCode).toBe(130); // 128 + 2
51
- });
20
+ const cmd = await sandbox.runCommand({
21
+ cmd: "echo",
22
+ args: ["Hello World!"],
23
+ stdout: process.stdout,
24
+ });
52
25
 
53
- it("Kills a command with a SIGTERM", async () => {
54
- const cmd = await sandbox.runCommand({
55
- cmd: "sleep",
56
- args: ["200000"],
57
- detached: true,
26
+ expect(await cmd.stdout()).toEqual("Hello World!\n");
27
+ expect(stdoutSpy).toHaveBeenCalledWith("Hello World!\n");
58
28
  });
59
29
 
60
- await cmd.kill("SIGTERM");
30
+ it("does not warn when there is only one logs consumer", async () => {
31
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
61
32
 
62
- const result = await cmd.wait();
63
- expect(result.exitCode).toBe(143); // 128 + 15
64
- });
33
+ const cmd = await sandbox.runCommand({
34
+ cmd: "echo",
35
+ args: ["Hello World!"],
36
+ });
65
37
 
66
- it("can execute commands with sudo", async () => {
67
- const cmd = await sandbox.runCommand({
68
- cmd: "env",
69
- sudo: true,
70
- env: {
71
- FOO: "bar",
72
- },
38
+ expect(await cmd.stdout()).toEqual("Hello World!\n");
39
+ expect(warnSpy).not.toHaveBeenCalled();
73
40
  });
74
41
 
75
- expect(cmd.exitCode).toBe(0);
42
+ it("Kills a command with a SIGINT", async () => {
43
+ const cmd = await sandbox.runCommand({
44
+ cmd: "sleep",
45
+ args: ["200000"],
46
+ detached: true,
47
+ });
76
48
 
77
- const output = await cmd.stdout();
78
- expect(output).toContain("FOO=bar\n");
79
- expect(output).toContain("USER=root\n");
80
- expect(output).toContain("SUDO_USER=vercel-sandbox\n");
49
+ await cmd.kill("SIGINT");
50
+ const result = await cmd.wait();
51
+ expect(result.exitCode).toBe(130); // 128 + 2
52
+ });
81
53
 
82
- const pathLine = output.split("\n").find((line) => line.startsWith("PATH="));
83
- expect(pathLine).toBeDefined();
54
+ it("Kills a command with a SIGTERM", async () => {
55
+ const cmd = await sandbox.runCommand({
56
+ cmd: "sleep",
57
+ args: ["200000"],
58
+ detached: true,
59
+ });
84
60
 
85
- const pathSegments = pathLine!.slice(5).split(":");
86
- expect(pathSegments).toContain("/vercel/bin");
87
- expect(pathSegments).toContain("/vercel/runtimes/node22/bin");
61
+ await cmd.kill("SIGTERM");
88
62
 
89
- const dnf = await sandbox.runCommand({
90
- cmd: "dnf",
91
- args: ["install", "-y", "golang"],
92
- sudo: true,
63
+ const result = await cmd.wait();
64
+ expect(result.exitCode).toBe(143); // 128 + 15
93
65
  });
94
66
 
95
- expect(dnf.exitCode).toBe(0);
96
-
97
- const which = await sandbox.runCommand("which", ["go"]);
98
- expect(await which.output()).toContain("/usr/bin/go");
67
+ it("can execute commands with sudo", async () => {
68
+ const cmd = await sandbox.runCommand({
69
+ cmd: "env",
70
+ sudo: true,
71
+ env: {
72
+ FOO: "bar",
73
+ },
74
+ });
75
+
76
+ expect(cmd.exitCode).toBe(0);
77
+
78
+ const output = await cmd.stdout();
79
+ expect(output).toContain("FOO=bar\n");
80
+ expect(output).toContain("USER=root\n");
81
+ expect(output).toContain("SUDO_USER=vercel-sandbox\n");
82
+
83
+ const pathLine = output
84
+ .split("\n")
85
+ .find((line) => line.startsWith("PATH="));
86
+ expect(pathLine).toBeDefined();
87
+
88
+ const pathSegments = pathLine!.slice(5).split(":");
89
+ expect(pathSegments).toContain("/vercel/bin");
90
+ expect(pathSegments).toContain("/vercel/runtimes/node22/bin");
91
+
92
+ const dnf = await sandbox.runCommand({
93
+ cmd: "dnf",
94
+ args: ["install", "-y", "golang"],
95
+ sudo: true,
96
+ });
97
+
98
+ expect(dnf.exitCode).toBe(0);
99
+
100
+ const which = await sandbox.runCommand("which", ["go"]);
101
+ expect(await which.output()).toContain("/usr/bin/go");
102
+ });
99
103
  });
@@ -1,34 +1,35 @@
1
- import { it, beforeEach, afterEach, expect } from "vitest";
1
+ import { it, beforeEach, afterEach, expect, describe } from "vitest";
2
2
  import { consumeReadable } from "./utils/consume-readable";
3
3
  import { Sandbox } from "./sandbox";
4
4
  import { APIError } from "./api-client/api-error";
5
5
  import ms from "ms";
6
6
 
7
- const PORTS = [3000, 4000];
8
- let sandbox: Sandbox;
7
+ describe.skipIf(process.env.RUN_INTEGRATION_TESTS !== "1")("Sandbox", () => {
8
+ const PORTS = [3000, 4000];
9
+ let sandbox: Sandbox;
9
10
 
10
- beforeEach(async () => {
11
- sandbox = await Sandbox.create({ ports: PORTS });
12
- });
11
+ beforeEach(async () => {
12
+ sandbox = await Sandbox.create({ ports: PORTS });
13
+ });
13
14
 
14
- afterEach(async () => {
15
- await sandbox.stop();
16
- });
15
+ afterEach(async () => {
16
+ await sandbox.stop();
17
+ });
17
18
 
18
- it("allows to write files and then read them", async () => {
19
- await sandbox.writeFiles([
20
- { path: "hello1.txt", content: Buffer.from("Hello 1") },
21
- { path: "hello2.txt", content: Buffer.from("Hello 2") },
22
- ]);
19
+ it("allows to write files and then read them", async () => {
20
+ await sandbox.writeFiles([
21
+ { path: "hello1.txt", content: Buffer.from("Hello 1") },
22
+ { path: "hello2.txt", content: Buffer.from("Hello 2") },
23
+ ]);
23
24
 
24
- const content1 = await sandbox.readFile({ path: "hello1.txt" });
25
- const content2 = await sandbox.readFile({ path: "hello2.txt" });
26
- expect((await consumeReadable(content1!)).toString()).toBe("Hello 1");
27
- expect((await consumeReadable(content2!)).toString()).toBe("Hello 2");
28
- });
25
+ const content1 = await sandbox.readFile({ path: "hello1.txt" });
26
+ const content2 = await sandbox.readFile({ path: "hello2.txt" });
27
+ expect((await consumeReadable(content1!)).toString()).toBe("Hello 1");
28
+ expect((await consumeReadable(content2!)).toString()).toBe("Hello 2");
29
+ });
29
30
 
30
- it("verifies port forwarding works correctly", async () => {
31
- const serverScript = `
31
+ it("verifies port forwarding works correctly", async () => {
32
+ const serverScript = `
32
33
  const http = require('http');
33
34
  const ports = process.argv.slice(2);
34
35
 
@@ -44,48 +45,49 @@ for (const port of ports) {
44
45
  }
45
46
  `;
46
47
 
47
- await sandbox.writeFiles([
48
- { path: "server.js", content: Buffer.from(serverScript) },
49
- ]);
48
+ await sandbox.writeFiles([
49
+ { path: "server.js", content: Buffer.from(serverScript) },
50
+ ]);
50
51
 
51
- const server = await sandbox.runCommand({
52
- cmd: "node",
53
- args: ["server.js", ...PORTS.map(String)],
54
- detached: true,
55
- stdout: process.stdout,
56
- stderr: process.stderr,
57
- });
52
+ const server = await sandbox.runCommand({
53
+ cmd: "node",
54
+ args: ["server.js", ...PORTS.map(String)],
55
+ detached: true,
56
+ stdout: process.stdout,
57
+ stderr: process.stderr,
58
+ });
58
59
 
59
- await new Promise((resolve) => setTimeout(resolve, 1000));
60
+ await new Promise((resolve) => setTimeout(resolve, 1000));
60
61
 
61
- for (const port of PORTS) {
62
- const response = await fetch(sandbox.domain(port));
63
- const text = await response.text();
64
- expect(text).toBe(`hello port ${port}`);
65
- }
62
+ for (const port of PORTS) {
63
+ const response = await fetch(sandbox.domain(port));
64
+ const text = await response.text();
65
+ expect(text).toBe(`hello port ${port}`);
66
+ }
66
67
 
67
- await server.kill();
68
- });
68
+ await server.kill();
69
+ });
69
70
 
70
- it("allows extending the sandbox timeout", async () => {
71
- const originalTimeout = sandbox.timeout;
72
- const extensionDuration = ms("5m");
71
+ it("allows extending the sandbox timeout", async () => {
72
+ const originalTimeout = sandbox.timeout;
73
+ const extensionDuration = ms("5m");
73
74
 
74
- await sandbox.extendTimeout(extensionDuration);
75
- expect(sandbox.timeout).toEqual(originalTimeout + extensionDuration);
76
- });
75
+ await sandbox.extendTimeout(extensionDuration);
76
+ expect(sandbox.timeout).toEqual(originalTimeout + extensionDuration);
77
+ });
77
78
 
78
- it("raises an error when the timeout cannot be updated", async () => {
79
- try {
80
- await sandbox.extendTimeout(ms("5d"));
81
- expect.fail("Expected extendTimeout to throw an error");
82
- } catch (error) {
83
- expect(error).toBeInstanceOf(APIError);
84
- expect(error).toMatchObject({
85
- response: { status: 400 },
86
- json: {
87
- error: { code: "sandbox_timeout_invalid" },
88
- },
89
- });
90
- }
79
+ it("raises an error when the timeout cannot be updated", async () => {
80
+ try {
81
+ await sandbox.extendTimeout(ms("5d"));
82
+ expect.fail("Expected extendTimeout to throw an error");
83
+ } catch (error) {
84
+ expect(error).toBeInstanceOf(APIError);
85
+ expect(error).toMatchObject({
86
+ response: { status: 400 },
87
+ json: {
88
+ error: { code: "sandbox_timeout_invalid" },
89
+ },
90
+ });
91
+ }
92
+ });
91
93
  });
package/src/sandbox.ts CHANGED
@@ -135,6 +135,10 @@ export class Sandbox {
135
135
  return this.sandbox.id;
136
136
  }
137
137
 
138
+ public get interactivePort(): number | undefined {
139
+ return this.sandbox.interactivePort ?? undefined;
140
+ }
141
+
138
142
  /**
139
143
  * The status of the sandbox.
140
144
  */
@@ -216,7 +220,7 @@ export class Sandbox {
216
220
  * @returns A promise resolving to the {@link Sandbox}.
217
221
  */
218
222
  static async get(
219
- params: GetSandboxParams | (GetSandboxParams & Credentials),
223
+ params: WithPrivate<GetSandboxParams | (GetSandboxParams & Credentials)>,
220
224
  ): Promise<Sandbox> {
221
225
  const credentials = await getCredentials(params);
222
226
  const client = new APIClient({
@@ -224,9 +228,11 @@ export class Sandbox {
224
228
  token: credentials.token,
225
229
  });
226
230
 
231
+ const privateParams = getPrivateParams(params);
227
232
  const sandbox = await client.getSandbox({
228
233
  sandboxId: params.sandboxId,
229
234
  signal: params.signal,
235
+ ...privateParams,
230
236
  });
231
237
 
232
238
  return new Sandbox({
@@ -351,12 +357,19 @@ export class Sandbox {
351
357
 
352
358
  if (params.stdout || params.stderr) {
353
359
  (async () => {
354
- for await (const log of command.logs({ signal: params.signal })) {
355
- if (log.stream === "stdout") {
356
- params.stdout?.write(log.data);
357
- } else if (log.stream === "stderr") {
358
- params.stderr?.write(log.data);
360
+ try {
361
+ for await (const log of command.logs({ signal: params.signal })) {
362
+ if (log.stream === "stdout") {
363
+ params.stdout?.write(log.data);
364
+ } else if (log.stream === "stderr") {
365
+ params.stderr?.write(log.data);
366
+ }
367
+ }
368
+ } catch (err) {
369
+ if (params.signal?.aborted) {
370
+ return;
359
371
  }
372
+ throw err;
360
373
  }
361
374
  })();
362
375
  }
@@ -462,6 +475,11 @@ export class Sandbox {
462
475
  * @param opts - Optional parameters.
463
476
  * @param opts.signal - An AbortSignal to cancel the operation.
464
477
  * @returns A promise that resolves when the timeout is extended
478
+ *
479
+ * @example
480
+ * const sandbox = await Sandbox.create({ timeout: ms('10m') });
481
+ * // Extends timeout by 5 minutes, to a total of 15 minutes.
482
+ * await sandbox.extendTimeout(ms('5m'));
465
483
  */
466
484
  async extendTimeout(
467
485
  duration: number,
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Autogenerated by inject-version.ts
2
- export const VERSION = "1.0.3";
2
+ export const VERSION = "1.0.4";
package/tsconfig.json CHANGED
@@ -6,6 +6,7 @@
6
6
  "strict": true,
7
7
  "target": "ES2020",
8
8
  "declaration": true,
9
+ "sourceMap": true,
9
10
  "module": "commonjs",
10
11
  "resolveJsonModule": true
11
12
  },