@aerol-ai/aerolvm-sdk 0.1.3 → 0.1.5

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/MicroVM.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIClient } from "./internal/client.js";
2
2
  import { Sandbox } from "./Sandbox.js";
3
- const defaultAPIURL = "http://127.0.0.1:8080";
3
+ const defaultAPIURL = "http://127.0.0.1:21212";
4
4
  const authRequiredErrorMessage = "PAT token is required. Set patToken or SB_PAT_TOKEN.";
5
5
  export class MicroVM {
6
6
  apiUrl;
@@ -32,6 +32,19 @@ export declare class APIClient {
32
32
  uploadFile(id: string, targetPath: string, data: BinaryLike): Promise<void>;
33
33
  downloadFile(id: string, targetPath: string): Promise<Uint8Array>;
34
34
  exposePort(id: string, port: number): Promise<string>;
35
+ /**
36
+ * Publish a raw TCP port through caddy-l4. The returned URL is in
37
+ * `tcp://<host>:<port>` form and works directly with `psql`, `redis-cli`,
38
+ * `mysql`, `mongosh`, and any other native-protocol client.
39
+ */
40
+ exposeTCPPort(id: string, port: number): Promise<string>;
41
+ /**
42
+ * Publish a TCP port behind the shared TLS-SNI multiplexer. Returns
43
+ * `tls://<id>-<port>.<domain>:<l4-port>`. Requires the daemon to have a
44
+ * domain configured AND `SB_L4_TLS_LISTEN` set.
45
+ */
46
+ exposeTLSPort(id: string, port: number): Promise<string>;
47
+ private exposePortWithProtocol;
35
48
  unexposePort(id: string, port: number): Promise<void>;
36
49
  reconcile(): Promise<void>;
37
50
  health(): Promise<HealthStatus>;
@@ -82,6 +95,8 @@ export declare class SandboxResource implements Sandbox {
82
95
  uploadFile(targetPath: string, data: BinaryLike): Promise<void>;
83
96
  downloadFile(targetPath: string): Promise<Uint8Array>;
84
97
  exposePort(port: number): Promise<string>;
98
+ exposeTCPPort(port: number): Promise<string>;
99
+ exposeTLSPort(port: number): Promise<string>;
85
100
  unexposePort(port: number): Promise<void>;
86
101
  start(): Promise<this>;
87
102
  stop(): Promise<this>;
@@ -93,7 +93,27 @@ export class APIClient {
93
93
  return new Uint8Array(await response.arrayBuffer());
94
94
  }
95
95
  async exposePort(id, port) {
96
- const response = await this.doJSON("POST", `/v1/sandboxes/${id}/ports/${port}`);
96
+ return this.exposePortWithProtocol(id, port);
97
+ }
98
+ /**
99
+ * Publish a raw TCP port through caddy-l4. The returned URL is in
100
+ * `tcp://<host>:<port>` form and works directly with `psql`, `redis-cli`,
101
+ * `mysql`, `mongosh`, and any other native-protocol client.
102
+ */
103
+ async exposeTCPPort(id, port) {
104
+ return this.exposePortWithProtocol(id, port, "tcp");
105
+ }
106
+ /**
107
+ * Publish a TCP port behind the shared TLS-SNI multiplexer. Returns
108
+ * `tls://<id>-<port>.<domain>:<l4-port>`. Requires the daemon to have a
109
+ * domain configured AND `SB_L4_TLS_LISTEN` set.
110
+ */
111
+ async exposeTLSPort(id, port) {
112
+ return this.exposePortWithProtocol(id, port, "tls");
113
+ }
114
+ async exposePortWithProtocol(id, port, protocol) {
115
+ const body = protocol ? { protocol } : undefined;
116
+ const response = await this.doJSON("POST", `/v1/sandboxes/${id}/ports/${port}`, body);
97
117
  return response.public_url;
98
118
  }
99
119
  async unexposePort(id, port) {
@@ -202,6 +222,12 @@ export class SandboxResource {
202
222
  async exposePort(port) {
203
223
  return this.client.exposePort(this.id, port);
204
224
  }
225
+ async exposeTCPPort(port) {
226
+ return this.client.exposeTCPPort(this.id, port);
227
+ }
228
+ async exposeTLSPort(port) {
229
+ return this.client.exposeTLSPort(this.id, port);
230
+ }
205
231
  async unexposePort(port) {
206
232
  await this.client.unexposePort(this.id, port);
207
233
  }
package/dist/types.d.ts CHANGED
@@ -32,6 +32,34 @@ export interface Lifecycle {
32
32
  destroyAtAge?: number;
33
33
  }
34
34
  export type UpdateLifecycleOptions = Lifecycle;
35
+ export type GPUVendor = "nvidia" | "amd" | "apple";
36
+ export interface GPUOptions {
37
+ /**
38
+ * GPU hardware vendor. Required when gpus is set.
39
+ * - "nvidia": NVIDIA GPUs via nvidia-container-runtime. Requires
40
+ * nvidia-container-toolkit on the host.
41
+ * - "amd": AMD GPUs via ROCm (/dev/kfd + /dev/dri). Requires ROCm
42
+ * drivers on the host.
43
+ * - "apple": Apple Silicon GPU via Docker Desktop's experimental Metal
44
+ * support. Only functional on macOS with Docker Desktop.
45
+ *
46
+ * GPU access is not supported with runtime="gvisor" — the API returns
47
+ * an error if both gpus and runtime="gvisor" are set.
48
+ */
49
+ vendor: GPUVendor;
50
+ /**
51
+ * Number of GPUs to allocate. Use -1 to request all GPUs on the host.
52
+ * Defaults to 1 when omitted. Ignored for AMD (all AMD GPUs are exposed
53
+ * via /dev/kfd and /dev/dri).
54
+ */
55
+ count?: number;
56
+ /**
57
+ * Pin the sandbox to specific GPU device indices or UUIDs.
58
+ * For NVIDIA: indices ("0", "1") or UUIDs ("GPU-abc123...").
59
+ * For AMD and Apple: ignored.
60
+ */
61
+ deviceIDs?: string[];
62
+ }
35
63
  export interface CreateOptions {
36
64
  image: string;
37
65
  /** Number of CPU cores to allocate. Fractional values are supported (e.g. 0.5 = half a core). */
@@ -52,8 +80,15 @@ export interface CreateOptions {
52
80
  * privileged containers and ignores per-sandbox disk quotas. `"kata"` is
53
81
  * reserved for future Kata Containers support and is rejected by the API
54
82
  * today.
83
+ *
84
+ * GPU access is not supported with `"gvisor"`.
55
85
  */
56
86
  runtime?: "docker" | "gvisor" | "kata";
87
+ /**
88
+ * Attach GPU resources to the sandbox. Omit for CPU-only workloads.
89
+ * Not compatible with runtime="gvisor".
90
+ */
91
+ gpus?: GPUOptions;
57
92
  }
58
93
  export interface ResizeOptions {
59
94
  /** Number of CPU cores. Fractional values supported (e.g. 0.5). */
@@ -122,6 +157,8 @@ export interface Sandbox {
122
157
  * a pre-migration row that resolves to the host default at start time.
123
158
  */
124
159
  runtime: "" | "docker" | "gvisor" | "kata";
160
+ /** GPU configuration this sandbox was created with. Absent means no GPU. */
161
+ gpus?: GPUOptions;
125
162
  }
126
163
  export interface ExecRequest {
127
164
  command: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aerol-ai/aerolvm-sdk",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",