@run-cloud/sdk 0.5.1 → 0.6.0
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/README.md +32 -0
- package/dist/compat/blaxel.d.ts +49 -0
- package/dist/compat/blaxel.js +85 -0
- package/dist/compat/blaxel.js.map +1 -0
- package/dist/compat/cloudflare.d.ts +32 -0
- package/dist/compat/cloudflare.js +66 -0
- package/dist/compat/cloudflare.js.map +1 -0
- package/dist/compat/codesandbox.d.ts +72 -0
- package/dist/compat/codesandbox.js +138 -0
- package/dist/compat/codesandbox.js.map +1 -0
- package/dist/compat/common.d.ts +40 -0
- package/dist/compat/common.js +85 -0
- package/dist/compat/common.js.map +1 -0
- package/dist/compat/daytona.d.ts +49 -0
- package/dist/compat/daytona.js +87 -0
- package/dist/compat/daytona.js.map +1 -0
- package/dist/compat/e2b.d.ts +65 -0
- package/dist/compat/e2b.js +106 -0
- package/dist/compat/e2b.js.map +1 -0
- package/dist/compat/fly.d.ts +28 -0
- package/dist/compat/fly.js +56 -0
- package/dist/compat/fly.js.map +1 -0
- package/dist/compat/modal.d.ts +77 -0
- package/dist/compat/modal.js +141 -0
- package/dist/compat/modal.js.map +1 -0
- package/dist/compat/sprites.d.ts +24 -0
- package/dist/compat/sprites.js +58 -0
- package/dist/compat/sprites.js.map +1 -0
- package/dist/compat/vercel.d.ts +46 -0
- package/dist/compat/vercel.js +74 -0
- package/dist/compat/vercel.js.map +1 -0
- package/package.json +42 -2
package/README.md
CHANGED
|
@@ -78,6 +78,38 @@ Sandbox fields are returned in both the API's `snake_case` and camelCase
|
|
|
78
78
|
The client reads `RUN_CLOUD_API_KEY` first, then `RUN_CLOUD_API_TOKEN`. Override
|
|
79
79
|
the API origin with `RUN_CLOUD_API_URL` or by passing `new Client({ apiUrl })`.
|
|
80
80
|
|
|
81
|
+
## Compatibility adapters
|
|
82
|
+
|
|
83
|
+
Provider-shaped migration adapters ship in this same package:
|
|
84
|
+
|
|
85
|
+
| Provider | Import |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| Modal | `@run-cloud/sdk/compat/modal` |
|
|
88
|
+
| E2B | `@run-cloud/sdk/compat/e2b` |
|
|
89
|
+
| Daytona | `@run-cloud/sdk/compat/daytona` |
|
|
90
|
+
| Vercel Sandbox | `@run-cloud/sdk/compat/vercel` |
|
|
91
|
+
| Blaxel | `@run-cloud/sdk/compat/blaxel` |
|
|
92
|
+
| Fly Sprites | `@run-cloud/sdk/compat/sprites` |
|
|
93
|
+
| Cloudflare Sandbox | `@run-cloud/sdk/compat/cloudflare` |
|
|
94
|
+
| CodeSandbox | `@run-cloud/sdk/compat/codesandbox` |
|
|
95
|
+
| Fly Machines | `@run-cloud/sdk/compat/fly` |
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
// import { Sandbox } from "@vercel/sandbox";
|
|
99
|
+
import { Sandbox } from "@run-cloud/sdk/compat/vercel";
|
|
100
|
+
|
|
101
|
+
const box = await Sandbox.create();
|
|
102
|
+
const result = await box.runCommand("node", ["-e", "console.log('hello')"]);
|
|
103
|
+
console.log(await result.stdout());
|
|
104
|
+
await box.stop();
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The adapters preserve core creation, lookup/listing, synchronous command
|
|
108
|
+
execution, pause/resume where the provider exposes it, and destruction.
|
|
109
|
+
Provider-specific features that do not have a public run.cloud equivalent throw
|
|
110
|
+
`UnsupportedCompatibilityFeatureError` with a migration hint. In particular,
|
|
111
|
+
public port capabilities and filesystem mutation are not silently emulated.
|
|
112
|
+
|
|
81
113
|
`cloud.ios.screenshot(sessionId)` returns PNG bytes as a `Uint8Array`. Save the
|
|
82
114
|
bytes directly with `node:fs/promises.writeFile`, attach them to test artifacts,
|
|
83
115
|
or pass them to an image-processing library.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type CompatibilityClientOptions, type NativeSandbox } from "./common.js";
|
|
2
|
+
declare class Process {
|
|
3
|
+
private readonly native;
|
|
4
|
+
constructor(native: NativeSandbox);
|
|
5
|
+
exec(config: {
|
|
6
|
+
name?: string;
|
|
7
|
+
command: string;
|
|
8
|
+
workingDir?: string;
|
|
9
|
+
env?: Record<string, string>;
|
|
10
|
+
waitForCompletion?: boolean;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
pid: number;
|
|
13
|
+
name: string;
|
|
14
|
+
status: string;
|
|
15
|
+
exitCode: number;
|
|
16
|
+
logs: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
declare class FileSystem {
|
|
20
|
+
private readonly native;
|
|
21
|
+
constructor(native: NativeSandbox);
|
|
22
|
+
read(path: string): Promise<string>;
|
|
23
|
+
write(): never;
|
|
24
|
+
ls(): never;
|
|
25
|
+
mkdir(): never;
|
|
26
|
+
rm(): never;
|
|
27
|
+
}
|
|
28
|
+
export declare class SandboxInstance {
|
|
29
|
+
readonly native: NativeSandbox;
|
|
30
|
+
readonly process: Process;
|
|
31
|
+
readonly fs: FileSystem;
|
|
32
|
+
private constructor();
|
|
33
|
+
static create(options?: CompatibilityClientOptions & {
|
|
34
|
+
name?: string;
|
|
35
|
+
image?: string;
|
|
36
|
+
memory?: number;
|
|
37
|
+
cpu?: number;
|
|
38
|
+
region?: string;
|
|
39
|
+
ttl?: number | string;
|
|
40
|
+
}): Promise<SandboxInstance>;
|
|
41
|
+
static get(id: string, options?: CompatibilityClientOptions): Promise<SandboxInstance>;
|
|
42
|
+
static list(options?: CompatibilityClientOptions): Promise<SandboxInstance[]>;
|
|
43
|
+
get id(): string;
|
|
44
|
+
get previews(): {
|
|
45
|
+
createIfNotExists: () => never;
|
|
46
|
+
};
|
|
47
|
+
delete(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { compatibilityClient, createNative, getNative, listNative, unsupported, } from "./common.js";
|
|
2
|
+
class Process {
|
|
3
|
+
native;
|
|
4
|
+
constructor(native) {
|
|
5
|
+
this.native = native;
|
|
6
|
+
}
|
|
7
|
+
async exec(config) {
|
|
8
|
+
if (config.waitForCompletion === false)
|
|
9
|
+
unsupported("Blaxel", "background processes");
|
|
10
|
+
const result = await this.native.exec(config.command, {
|
|
11
|
+
cwd: config.workingDir,
|
|
12
|
+
env: config.env,
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
pid: 0,
|
|
16
|
+
name: config.name ?? "",
|
|
17
|
+
status: result.exitCode === 0 ? "completed" : "failed",
|
|
18
|
+
exitCode: result.exitCode,
|
|
19
|
+
logs: result.stdout + result.stderr,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class FileSystem {
|
|
24
|
+
native;
|
|
25
|
+
constructor(native) {
|
|
26
|
+
this.native = native;
|
|
27
|
+
}
|
|
28
|
+
async read(path) {
|
|
29
|
+
return new TextDecoder().decode(await this.native.readFile(path));
|
|
30
|
+
}
|
|
31
|
+
write() {
|
|
32
|
+
return unsupported("Blaxel", "file writes", "use an image or a command that writes the content");
|
|
33
|
+
}
|
|
34
|
+
ls() {
|
|
35
|
+
return unsupported("Blaxel", "directory listing");
|
|
36
|
+
}
|
|
37
|
+
mkdir() {
|
|
38
|
+
return unsupported("Blaxel", "directory creation");
|
|
39
|
+
}
|
|
40
|
+
rm() {
|
|
41
|
+
return unsupported("Blaxel", "file removal");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class SandboxInstance {
|
|
45
|
+
native;
|
|
46
|
+
process;
|
|
47
|
+
fs;
|
|
48
|
+
constructor(native) {
|
|
49
|
+
this.native = native;
|
|
50
|
+
this.process = new Process(native);
|
|
51
|
+
this.fs = new FileSystem(native);
|
|
52
|
+
}
|
|
53
|
+
static async create(options = {}) {
|
|
54
|
+
const client = compatibilityClient(options);
|
|
55
|
+
const ttl = typeof options.ttl === "number" ? options.ttl : undefined;
|
|
56
|
+
return new SandboxInstance(await createNative(client, {
|
|
57
|
+
name: options.name,
|
|
58
|
+
image: options.image,
|
|
59
|
+
memory: options.memory,
|
|
60
|
+
cpu: options.cpu,
|
|
61
|
+
region: options.region,
|
|
62
|
+
idlePauseSeconds: ttl,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
static async get(id, options = {}) {
|
|
66
|
+
const client = compatibilityClient(options);
|
|
67
|
+
return new SandboxInstance(await getNative(client, id));
|
|
68
|
+
}
|
|
69
|
+
static async list(options = {}) {
|
|
70
|
+
const client = compatibilityClient(options);
|
|
71
|
+
return (await listNative(client)).map((sandbox) => new SandboxInstance(sandbox));
|
|
72
|
+
}
|
|
73
|
+
get id() {
|
|
74
|
+
return this.native.id;
|
|
75
|
+
}
|
|
76
|
+
get previews() {
|
|
77
|
+
return {
|
|
78
|
+
createIfNotExists: () => unsupported("Blaxel", "previews", "run.cloud public port capabilities are not available in the SDK yet"),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async delete() {
|
|
82
|
+
await this.native.destroy();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=blaxel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blaxel.js","sourceRoot":"","sources":["../../src/compat/blaxel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Client } from "../index.js";
|
|
2
|
+
import { type CompatibilityClientOptions, type NativeSandbox } from "./common.js";
|
|
3
|
+
export declare class Sandbox {
|
|
4
|
+
private readonly client;
|
|
5
|
+
readonly id: string;
|
|
6
|
+
private ensured?;
|
|
7
|
+
constructor(client: Client, id: string);
|
|
8
|
+
private ensure;
|
|
9
|
+
get native(): Promise<NativeSandbox>;
|
|
10
|
+
exec(command: string, options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
env?: Record<string, string>;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
exitCode: number;
|
|
16
|
+
stdout: string;
|
|
17
|
+
stderr: string;
|
|
18
|
+
command: string;
|
|
19
|
+
duration: number;
|
|
20
|
+
}>;
|
|
21
|
+
readFile(path: string): Promise<{
|
|
22
|
+
content: string;
|
|
23
|
+
}>;
|
|
24
|
+
writeFile(): never;
|
|
25
|
+
mkdir(): never;
|
|
26
|
+
listFiles(): never;
|
|
27
|
+
deleteFile(): never;
|
|
28
|
+
renameFile(): never;
|
|
29
|
+
exposePort(): never;
|
|
30
|
+
destroy(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export declare function getSandbox(binding: Client | unknown, id: string, options?: CompatibilityClientOptions): Sandbox;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { bytesToText, compatibilityClient, createNative, listNative, unsupported, } from "./common.js";
|
|
2
|
+
export class Sandbox {
|
|
3
|
+
client;
|
|
4
|
+
id;
|
|
5
|
+
ensured;
|
|
6
|
+
constructor(client, id) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
this.id = id;
|
|
9
|
+
}
|
|
10
|
+
async ensure() {
|
|
11
|
+
if (!this.ensured) {
|
|
12
|
+
this.ensured = (async () => {
|
|
13
|
+
const existing = (await listNative(this.client)).find((sandbox) => sandbox.name === this.id);
|
|
14
|
+
return existing ?? (await createNative(this.client, { name: this.id }));
|
|
15
|
+
})();
|
|
16
|
+
}
|
|
17
|
+
return await this.ensured;
|
|
18
|
+
}
|
|
19
|
+
get native() {
|
|
20
|
+
return this.ensure();
|
|
21
|
+
}
|
|
22
|
+
async exec(command, options = {}) {
|
|
23
|
+
const startedAt = Date.now();
|
|
24
|
+
const result = await (await this.ensure()).exec(command, options);
|
|
25
|
+
return {
|
|
26
|
+
success: result.exitCode === 0,
|
|
27
|
+
exitCode: result.exitCode,
|
|
28
|
+
stdout: result.stdout,
|
|
29
|
+
stderr: result.stderr,
|
|
30
|
+
command,
|
|
31
|
+
duration: Date.now() - startedAt,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async readFile(path) {
|
|
35
|
+
return { content: bytesToText(await (await this.ensure()).readFile(path)) };
|
|
36
|
+
}
|
|
37
|
+
writeFile() {
|
|
38
|
+
return unsupported("Cloudflare Sandbox", "file writes", "use an image or command");
|
|
39
|
+
}
|
|
40
|
+
mkdir() {
|
|
41
|
+
return unsupported("Cloudflare Sandbox", "directory creation");
|
|
42
|
+
}
|
|
43
|
+
listFiles() {
|
|
44
|
+
return unsupported("Cloudflare Sandbox", "directory listing");
|
|
45
|
+
}
|
|
46
|
+
deleteFile() {
|
|
47
|
+
return unsupported("Cloudflare Sandbox", "file deletion");
|
|
48
|
+
}
|
|
49
|
+
renameFile() {
|
|
50
|
+
return unsupported("Cloudflare Sandbox", "file rename");
|
|
51
|
+
}
|
|
52
|
+
exposePort() {
|
|
53
|
+
return unsupported("Cloudflare Sandbox", "exposePort", "run.cloud public port capabilities are not available in the SDK yet");
|
|
54
|
+
}
|
|
55
|
+
async destroy() {
|
|
56
|
+
await (await this.ensure()).destroy();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function getSandbox(binding, id, options = {}) {
|
|
60
|
+
const client = options.client ??
|
|
61
|
+
(binding && typeof binding === "object" && "sandboxes" in binding
|
|
62
|
+
? binding
|
|
63
|
+
: compatibilityClient(options));
|
|
64
|
+
return new Sandbox(client, id);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=cloudflare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/compat/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Client } from "../index.js";
|
|
2
|
+
import { type CompatibilityClientOptions, type NativeSandbox } from "./common.js";
|
|
3
|
+
export declare class CommandError extends Error {
|
|
4
|
+
readonly exitCode: number;
|
|
5
|
+
readonly output: string;
|
|
6
|
+
constructor(exitCode: number, output: string);
|
|
7
|
+
}
|
|
8
|
+
declare class Commands {
|
|
9
|
+
private readonly native;
|
|
10
|
+
constructor(native: NativeSandbox);
|
|
11
|
+
run(command: string | string[]): Promise<string>;
|
|
12
|
+
runBackground(): never;
|
|
13
|
+
}
|
|
14
|
+
declare class FileSystem {
|
|
15
|
+
private readonly native;
|
|
16
|
+
constructor(native: NativeSandbox);
|
|
17
|
+
readTextFile(path: string): Promise<string>;
|
|
18
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
19
|
+
writeTextFile(): never;
|
|
20
|
+
writeFile(): never;
|
|
21
|
+
readdir(): never;
|
|
22
|
+
mkdir(): never;
|
|
23
|
+
remove(): never;
|
|
24
|
+
rename(): never;
|
|
25
|
+
}
|
|
26
|
+
export declare class SandboxClient {
|
|
27
|
+
readonly native: NativeSandbox;
|
|
28
|
+
readonly commands: Commands;
|
|
29
|
+
readonly fs: FileSystem;
|
|
30
|
+
constructor(native: NativeSandbox);
|
|
31
|
+
get id(): string;
|
|
32
|
+
get ports(): {
|
|
33
|
+
get: () => never;
|
|
34
|
+
getAll: () => Promise<never[]>;
|
|
35
|
+
waitForPort: () => never;
|
|
36
|
+
};
|
|
37
|
+
disconnect(): void;
|
|
38
|
+
}
|
|
39
|
+
export declare class Sandbox {
|
|
40
|
+
readonly native: NativeSandbox;
|
|
41
|
+
private readonly client;
|
|
42
|
+
constructor(native: NativeSandbox, client: Client);
|
|
43
|
+
get id(): string;
|
|
44
|
+
connect(): Promise<SandboxClient>;
|
|
45
|
+
}
|
|
46
|
+
declare class Sandboxes {
|
|
47
|
+
private readonly client;
|
|
48
|
+
constructor(client: Client);
|
|
49
|
+
create(options?: {
|
|
50
|
+
id?: string;
|
|
51
|
+
image?: string;
|
|
52
|
+
vmTier?: {
|
|
53
|
+
cpu?: number;
|
|
54
|
+
memGiB?: number;
|
|
55
|
+
};
|
|
56
|
+
title?: string;
|
|
57
|
+
region?: string;
|
|
58
|
+
}): Promise<Sandbox>;
|
|
59
|
+
resume(id: string): Promise<Sandbox>;
|
|
60
|
+
get(id: string): Promise<Sandbox>;
|
|
61
|
+
list(): Promise<Sandbox[]>;
|
|
62
|
+
hibernate(id: string): Promise<void>;
|
|
63
|
+
shutdown(id: string): Promise<void>;
|
|
64
|
+
delete(id: string): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
export declare class CodeSandbox {
|
|
67
|
+
readonly sandboxes: Sandboxes;
|
|
68
|
+
constructor(apiToken?: string, options?: CompatibilityClientOptions & {
|
|
69
|
+
baseUrl?: string;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { bytesToText, compatibilityClient, createNative, getNative, listNative, unsupported, } from "./common.js";
|
|
2
|
+
export class CommandError extends Error {
|
|
3
|
+
exitCode;
|
|
4
|
+
output;
|
|
5
|
+
constructor(exitCode, output) {
|
|
6
|
+
super(`command failed with exit code ${exitCode}`);
|
|
7
|
+
this.exitCode = exitCode;
|
|
8
|
+
this.output = output;
|
|
9
|
+
this.name = "CommandError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
class Commands {
|
|
13
|
+
native;
|
|
14
|
+
constructor(native) {
|
|
15
|
+
this.native = native;
|
|
16
|
+
}
|
|
17
|
+
async run(command) {
|
|
18
|
+
const result = await this.native.exec(command);
|
|
19
|
+
const output = result.stdout + result.stderr;
|
|
20
|
+
if (result.exitCode !== 0)
|
|
21
|
+
throw new CommandError(result.exitCode, output);
|
|
22
|
+
return output;
|
|
23
|
+
}
|
|
24
|
+
runBackground() {
|
|
25
|
+
return unsupported("CodeSandbox", "background commands");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
class FileSystem {
|
|
29
|
+
native;
|
|
30
|
+
constructor(native) {
|
|
31
|
+
this.native = native;
|
|
32
|
+
}
|
|
33
|
+
async readTextFile(path) {
|
|
34
|
+
return bytesToText(await this.native.readFile(path));
|
|
35
|
+
}
|
|
36
|
+
async readFile(path) {
|
|
37
|
+
return await this.native.readFile(path);
|
|
38
|
+
}
|
|
39
|
+
writeTextFile() {
|
|
40
|
+
return unsupported("CodeSandbox", "file writes", "use an image or command");
|
|
41
|
+
}
|
|
42
|
+
writeFile() {
|
|
43
|
+
return unsupported("CodeSandbox", "file writes", "use an image or command");
|
|
44
|
+
}
|
|
45
|
+
readdir() {
|
|
46
|
+
return unsupported("CodeSandbox", "directory listing");
|
|
47
|
+
}
|
|
48
|
+
mkdir() {
|
|
49
|
+
return unsupported("CodeSandbox", "directory creation");
|
|
50
|
+
}
|
|
51
|
+
remove() {
|
|
52
|
+
return unsupported("CodeSandbox", "file removal");
|
|
53
|
+
}
|
|
54
|
+
rename() {
|
|
55
|
+
return unsupported("CodeSandbox", "file rename");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class SandboxClient {
|
|
59
|
+
native;
|
|
60
|
+
commands;
|
|
61
|
+
fs;
|
|
62
|
+
constructor(native) {
|
|
63
|
+
this.native = native;
|
|
64
|
+
this.commands = new Commands(native);
|
|
65
|
+
this.fs = new FileSystem(native);
|
|
66
|
+
}
|
|
67
|
+
get id() {
|
|
68
|
+
return this.native.id;
|
|
69
|
+
}
|
|
70
|
+
get ports() {
|
|
71
|
+
return {
|
|
72
|
+
get: () => unsupported("CodeSandbox", "ports.get", "run.cloud public port capabilities are not available in the SDK yet"),
|
|
73
|
+
getAll: async () => [],
|
|
74
|
+
waitForPort: () => unsupported("CodeSandbox", "ports.waitForPort"),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
disconnect() { }
|
|
78
|
+
}
|
|
79
|
+
export class Sandbox {
|
|
80
|
+
native;
|
|
81
|
+
client;
|
|
82
|
+
constructor(native, client) {
|
|
83
|
+
this.native = native;
|
|
84
|
+
this.client = client;
|
|
85
|
+
}
|
|
86
|
+
get id() {
|
|
87
|
+
return this.native.id;
|
|
88
|
+
}
|
|
89
|
+
async connect() {
|
|
90
|
+
return new SandboxClient(this.native);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
class Sandboxes {
|
|
94
|
+
client;
|
|
95
|
+
constructor(client) {
|
|
96
|
+
this.client = client;
|
|
97
|
+
}
|
|
98
|
+
async create(options = {}) {
|
|
99
|
+
return new Sandbox(await createNative(this.client, {
|
|
100
|
+
image: options.image ?? options.id,
|
|
101
|
+
cpu: options.vmTier?.cpu,
|
|
102
|
+
memory: options.vmTier?.memGiB ? options.vmTier.memGiB * 1024 : undefined,
|
|
103
|
+
name: options.title,
|
|
104
|
+
region: options.region,
|
|
105
|
+
}), this.client);
|
|
106
|
+
}
|
|
107
|
+
async resume(id) {
|
|
108
|
+
const native = await getNative(this.client, id);
|
|
109
|
+
await native.resume();
|
|
110
|
+
return new Sandbox(native, this.client);
|
|
111
|
+
}
|
|
112
|
+
async get(id) {
|
|
113
|
+
return new Sandbox(await getNative(this.client, id), this.client);
|
|
114
|
+
}
|
|
115
|
+
async list() {
|
|
116
|
+
return (await listNative(this.client)).map((sandbox) => new Sandbox(sandbox, this.client));
|
|
117
|
+
}
|
|
118
|
+
async hibernate(id) {
|
|
119
|
+
await (await getNative(this.client, id)).pause();
|
|
120
|
+
}
|
|
121
|
+
async shutdown(id) {
|
|
122
|
+
await (await getNative(this.client, id)).destroy();
|
|
123
|
+
}
|
|
124
|
+
async delete(id) {
|
|
125
|
+
await (await getNative(this.client, id)).destroy();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export class CodeSandbox {
|
|
129
|
+
sandboxes;
|
|
130
|
+
constructor(apiToken, options = {}) {
|
|
131
|
+
this.sandboxes = new Sandboxes(compatibilityClient({
|
|
132
|
+
...options,
|
|
133
|
+
apiKey: options.apiKey ?? apiToken,
|
|
134
|
+
apiUrl: options.apiUrl ?? options.baseUrl,
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=codesandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codesandbox.js","sourceRoot":"","sources":["../../src/compat/codesandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Client, type ExecOptions, type ExecResult, type Sandbox as SandboxRecord } from "../index.js";
|
|
2
|
+
export declare const DEFAULT_IMAGE = "runcloud/agent-base";
|
|
3
|
+
export declare class UnsupportedCompatibilityFeatureError extends Error {
|
|
4
|
+
constructor(provider: string, feature: string, alternative?: string);
|
|
5
|
+
}
|
|
6
|
+
export interface CompatibilityClientOptions {
|
|
7
|
+
client?: Client;
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
apiUrl?: string;
|
|
10
|
+
fetch?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
export declare function compatibilityClient(options?: CompatibilityClientOptions): Client;
|
|
13
|
+
export declare class NativeSandbox {
|
|
14
|
+
readonly client: Client;
|
|
15
|
+
private record;
|
|
16
|
+
constructor(client: Client, record: SandboxRecord);
|
|
17
|
+
get id(): string;
|
|
18
|
+
get name(): string;
|
|
19
|
+
get state(): string;
|
|
20
|
+
refresh(): Promise<this>;
|
|
21
|
+
exec(command: string | string[], options?: ExecOptions): Promise<ExecResult>;
|
|
22
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
23
|
+
pause(): Promise<this>;
|
|
24
|
+
resume(): Promise<this>;
|
|
25
|
+
destroy(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function createNative(client: Client, options?: {
|
|
28
|
+
image?: string;
|
|
29
|
+
cpu?: number;
|
|
30
|
+
memory?: number;
|
|
31
|
+
disk?: number;
|
|
32
|
+
idlePauseSeconds?: number;
|
|
33
|
+
timeoutSeconds?: number;
|
|
34
|
+
region?: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
}): Promise<NativeSandbox>;
|
|
37
|
+
export declare function getNative(client: Client, id: string): Promise<NativeSandbox>;
|
|
38
|
+
export declare function listNative(client: Client): Promise<NativeSandbox[]>;
|
|
39
|
+
export declare function unsupported(provider: string, feature: string, alternative?: string): never;
|
|
40
|
+
export declare function bytesToText(bytes: Uint8Array): string;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Client, } from "../index.js";
|
|
2
|
+
export const DEFAULT_IMAGE = "runcloud/agent-base";
|
|
3
|
+
export class UnsupportedCompatibilityFeatureError extends Error {
|
|
4
|
+
constructor(provider, feature, alternative) {
|
|
5
|
+
super(`${provider} compatibility does not support ${feature} on run.cloud yet` +
|
|
6
|
+
(alternative ? `; ${alternative}` : ""));
|
|
7
|
+
this.name = "UnsupportedCompatibilityFeatureError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function compatibilityClient(options = {}) {
|
|
11
|
+
if (options.client)
|
|
12
|
+
return options.client;
|
|
13
|
+
const clientOptions = {
|
|
14
|
+
apiKey: options.apiKey,
|
|
15
|
+
apiUrl: options.apiUrl,
|
|
16
|
+
fetch: options.fetch,
|
|
17
|
+
};
|
|
18
|
+
return new Client(clientOptions);
|
|
19
|
+
}
|
|
20
|
+
export class NativeSandbox {
|
|
21
|
+
client;
|
|
22
|
+
record;
|
|
23
|
+
constructor(client, record) {
|
|
24
|
+
this.client = client;
|
|
25
|
+
this.record = record;
|
|
26
|
+
}
|
|
27
|
+
get id() {
|
|
28
|
+
return this.record.id;
|
|
29
|
+
}
|
|
30
|
+
get name() {
|
|
31
|
+
return typeof this.record.name === "string" ? this.record.name : "";
|
|
32
|
+
}
|
|
33
|
+
get state() {
|
|
34
|
+
return this.record.state;
|
|
35
|
+
}
|
|
36
|
+
async refresh() {
|
|
37
|
+
this.record = await this.client.sandboxes.get(this.id);
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
async exec(command, options = {}) {
|
|
41
|
+
return await this.client.sandboxes.exec(this.id, command, options);
|
|
42
|
+
}
|
|
43
|
+
async readFile(path) {
|
|
44
|
+
return await this.client.sandboxes.readFile(this.id, path);
|
|
45
|
+
}
|
|
46
|
+
async pause() {
|
|
47
|
+
this.record = await lifecycle(this.client, this.id, "pause");
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
async resume() {
|
|
51
|
+
this.record = await lifecycle(this.client, this.id, "resume");
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
async destroy() {
|
|
55
|
+
await this.client.sandboxes.destroy(this.id);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function createNative(client, options = {}) {
|
|
59
|
+
return new NativeSandbox(client, await client.sandboxes.create({
|
|
60
|
+
image: options.image ?? DEFAULT_IMAGE,
|
|
61
|
+
cpu: options.cpu,
|
|
62
|
+
memory: options.memory,
|
|
63
|
+
disk: options.disk,
|
|
64
|
+
idlePauseSeconds: options.idlePauseSeconds,
|
|
65
|
+
timeoutSeconds: options.timeoutSeconds,
|
|
66
|
+
region: options.region,
|
|
67
|
+
name: options.name,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
export async function getNative(client, id) {
|
|
71
|
+
return new NativeSandbox(client, await client.sandboxes.get(id));
|
|
72
|
+
}
|
|
73
|
+
export async function listNative(client) {
|
|
74
|
+
return (await client.sandboxes.list()).map((item) => new NativeSandbox(client, item));
|
|
75
|
+
}
|
|
76
|
+
async function lifecycle(client, id, action) {
|
|
77
|
+
return await client.request("POST", `/run-cloud/sandboxes/${encodeURIComponent(id)}/${action}`, {});
|
|
78
|
+
}
|
|
79
|
+
export function unsupported(provider, feature, alternative) {
|
|
80
|
+
throw new UnsupportedCompatibilityFeatureError(provider, feature, alternative);
|
|
81
|
+
}
|
|
82
|
+
export function bytesToText(bytes) {
|
|
83
|
+
return new TextDecoder().decode(bytes);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/compat/common.ts"],"names":[],"mappings":"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"}
|