@solarisdk/e2b-compat 0.0.0-stage → 0.1.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/dist/errors.js ADDED
@@ -0,0 +1,159 @@
1
+ // E2B-shaped error hierarchy (names and parent classes follow e2b 2.59 `errors.d.ts`), plus translation from
2
+ // Solari SDK errors. Anything Solari cannot do raises SolariCompatUnsupported (a SandboxError) naming the feature.
3
+ import { ActionError, ConnectionError, GatewayError, SolariError, TimeoutError as SolariTimeoutError } from "@solarisdk/core";
4
+ export class SandboxError extends Error {
5
+ constructor(message, opts) {
6
+ super(message);
7
+ this.name = new.target.name;
8
+ if (opts?.cause !== undefined)
9
+ this.cause = opts.cause;
10
+ }
11
+ }
12
+ export class TimeoutError extends SandboxError {
13
+ }
14
+ export class InvalidArgumentError extends SandboxError {
15
+ }
16
+ export class NotEnoughSpaceError extends SandboxError {
17
+ }
18
+ export class NotFoundError extends SandboxError {
19
+ }
20
+ export class FileNotFoundError extends NotFoundError {
21
+ }
22
+ export class SandboxNotFoundError extends NotFoundError {
23
+ }
24
+ export class SandboxNotRunningError extends TimeoutError {
25
+ }
26
+ export class SandboxUnreachableError extends TimeoutError {
27
+ }
28
+ export class AuthenticationError extends Error {
29
+ constructor(message) {
30
+ super(message);
31
+ this.name = new.target.name;
32
+ }
33
+ }
34
+ export class GitAuthError extends AuthenticationError {
35
+ }
36
+ export class GitUpstreamError extends SandboxError {
37
+ }
38
+ export class TemplateError extends SandboxError {
39
+ }
40
+ export class RateLimitError extends SandboxError {
41
+ }
42
+ export class ServiceBusyError extends Error {
43
+ constructor(message) {
44
+ super(message);
45
+ this.name = new.target.name;
46
+ }
47
+ }
48
+ export class BuildError extends Error {
49
+ constructor(message, opts) {
50
+ super(message);
51
+ this.name = new.target.name;
52
+ if (opts?.cause !== undefined)
53
+ this.cause = opts.cause;
54
+ }
55
+ }
56
+ export class FileUploadError extends BuildError {
57
+ }
58
+ export class VolumeError extends Error {
59
+ constructor(message) {
60
+ super(message);
61
+ this.name = new.target.name;
62
+ }
63
+ }
64
+ export class VolumeNotFoundError extends VolumeError {
65
+ }
66
+ export class VolumePathNotFoundError extends VolumeError {
67
+ }
68
+ export class SecretError extends Error {
69
+ constructor(message) {
70
+ super(message);
71
+ this.name = new.target.name;
72
+ }
73
+ }
74
+ export class SecretNotFoundError extends SecretError {
75
+ }
76
+ /** A command exited non-zero. `commands.run` throws this (E2B semantics); `result.exitCode` etc. are on the error. */
77
+ export class CommandExitError extends SandboxError {
78
+ result;
79
+ constructor(result) {
80
+ super(result.error || `Command exited with code ${result.exitCode}`);
81
+ this.result = result;
82
+ this.name = "CommandExitError";
83
+ }
84
+ get exitCode() {
85
+ return this.result.exitCode;
86
+ }
87
+ get error() {
88
+ return this.result.error;
89
+ }
90
+ get stdout() {
91
+ return this.result.stdout;
92
+ }
93
+ get stderr() {
94
+ return this.result.stderr;
95
+ }
96
+ }
97
+ /** The feature has no Solari equivalent (see COMPAT.md). Never a silent no-op. */
98
+ export class SolariCompatUnsupported extends SandboxError {
99
+ feature;
100
+ constructor(feature, detail) {
101
+ super(`${feature} is not supported by @solarisdk/e2b-compat${detail ? `: ${detail}` : ""}. See COMPAT.md.`);
102
+ this.feature = feature;
103
+ }
104
+ }
105
+ /** A namespace whose every method throws {@link SolariCompatUnsupported}. */
106
+ export function unsupportedNamespace(feature) {
107
+ return new Proxy({}, {
108
+ get: (_t, prop) => {
109
+ if (prop === "then" || typeof prop === "symbol")
110
+ return undefined;
111
+ return () => {
112
+ throw new SolariCompatUnsupported(`${feature}.${String(prop)}`);
113
+ };
114
+ },
115
+ });
116
+ }
117
+ const NOT_FOUND_RE = /no such file|not exist|not found|enoent/i;
118
+ /** Map a Solari error onto the E2B class a caller would catch. `what` says what was being looked up. */
119
+ export function translateError(err, what = "other") {
120
+ if (err instanceof SandboxError || err instanceof AuthenticationError)
121
+ return err;
122
+ if (err instanceof GatewayError) {
123
+ const msg = err.message;
124
+ if (err.status === 401 || err.status === 403)
125
+ return new AuthenticationError(msg);
126
+ if (err.status === 404)
127
+ return what === "sandbox" ? new SandboxNotFoundError(msg, { cause: err }) : what === "file" ? new FileNotFoundError(msg, { cause: err }) : new NotFoundError(msg, { cause: err });
128
+ if (err.status === 429)
129
+ return new RateLimitError(msg, { cause: err });
130
+ if (err.status === 400 || err.status === 422)
131
+ return new InvalidArgumentError(msg, { cause: err });
132
+ if (err.status === 503)
133
+ return new ServiceBusyError(msg);
134
+ return new SandboxError(msg, { cause: err });
135
+ }
136
+ if (err instanceof SolariTimeoutError)
137
+ return new TimeoutError(err.message, { cause: err });
138
+ if (err instanceof ConnectionError)
139
+ return new SandboxUnreachableError(err.message, { cause: err });
140
+ if (err instanceof ActionError) {
141
+ if (NOT_FOUND_RE.test(err.message))
142
+ return what === "file" ? new FileNotFoundError(err.message, { cause: err }) : new NotFoundError(err.message, { cause: err });
143
+ return new SandboxError(err.message, { cause: err });
144
+ }
145
+ if (err instanceof SolariError)
146
+ return new SandboxError(err.message, { cause: err });
147
+ if (err?.name === "AbortError")
148
+ return new TimeoutError(err.message, { cause: err });
149
+ return err;
150
+ }
151
+ export async function translating(fn, what = "other") {
152
+ try {
153
+ return await fn();
154
+ }
155
+ catch (e) {
156
+ throw translateError(e, what);
157
+ }
158
+ }
159
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { Box } from "./box.js";
2
+ export declare enum FileType {
3
+ FILE = "file",
4
+ DIR = "dir",
5
+ SYMLINK = "symlink"
6
+ }
7
+ export declare enum FilesystemEventType {
8
+ CHMOD = "chmod",
9
+ CREATE = "create",
10
+ REMOVE = "remove",
11
+ RENAME = "rename",
12
+ WRITE = "write"
13
+ }
14
+ export interface WriteInfo {
15
+ name: string;
16
+ type?: FileType;
17
+ path: string;
18
+ metadata?: Record<string, string>;
19
+ }
20
+ export interface EntryInfo extends WriteInfo {
21
+ size: number;
22
+ mode: number;
23
+ permissions: string;
24
+ owner: string;
25
+ group: string;
26
+ modifiedTime?: Date;
27
+ symlinkTarget?: string;
28
+ }
29
+ export interface FilesystemEvent {
30
+ name: string;
31
+ type: FilesystemEventType;
32
+ entry?: EntryInfo;
33
+ }
34
+ export type WriteData = string | ArrayBuffer | Blob | ReadableStream;
35
+ export type WriteEntry = {
36
+ path: string;
37
+ data: WriteData;
38
+ };
39
+ export interface FilesystemRequestOpts {
40
+ requestTimeoutMs?: number;
41
+ signal?: AbortSignal;
42
+ user?: string;
43
+ }
44
+ export interface FilesystemWriteOpts extends FilesystemRequestOpts {
45
+ gzip?: boolean;
46
+ useOctetStream?: boolean;
47
+ metadata?: Record<string, string>;
48
+ }
49
+ export interface FilesystemReadOpts extends FilesystemRequestOpts {
50
+ gzip?: boolean;
51
+ streamIdleTimeoutMs?: number;
52
+ }
53
+ export interface FilesystemListOpts extends FilesystemRequestOpts {
54
+ depth?: number;
55
+ }
56
+ export interface WatchOpts extends FilesystemRequestOpts {
57
+ timeoutMs?: number;
58
+ onExit?: (err?: Error) => void | Promise<void>;
59
+ recursive?: boolean;
60
+ includeEntry?: boolean;
61
+ allowNetworkMounts?: boolean;
62
+ }
63
+ export declare class WatchHandle {
64
+ private readonly unwatch;
65
+ private stopped;
66
+ /** @internal */
67
+ constructor(unwatch: () => Promise<void>);
68
+ stop(): Promise<void>;
69
+ }
70
+ export declare class Filesystem {
71
+ private readonly box;
72
+ /** @internal */
73
+ constructor(box: Box);
74
+ read(path: string, opts?: FilesystemReadOpts & {
75
+ format?: "text";
76
+ }): Promise<string>;
77
+ read(path: string, opts: FilesystemReadOpts & {
78
+ format: "bytes";
79
+ }): Promise<Uint8Array>;
80
+ read(path: string, opts: FilesystemReadOpts & {
81
+ format: "blob";
82
+ }): Promise<Blob>;
83
+ read(path: string, opts: FilesystemReadOpts & {
84
+ format: "stream";
85
+ }): Promise<ReadableStream<Uint8Array>>;
86
+ write(path: string, data: WriteData, opts?: FilesystemWriteOpts): Promise<WriteInfo>;
87
+ write(files: WriteEntry[], opts?: FilesystemWriteOpts): Promise<WriteInfo[]>;
88
+ writeFiles(files: WriteEntry[], opts?: FilesystemWriteOpts): Promise<WriteInfo[]>;
89
+ private writeOne;
90
+ list(path: string, opts?: FilesystemListOpts): Promise<EntryInfo[]>;
91
+ getInfo(path: string, opts?: FilesystemRequestOpts): Promise<EntryInfo>;
92
+ private info;
93
+ exists(path: string, opts?: FilesystemRequestOpts): Promise<boolean>;
94
+ makeDir(path: string, opts?: FilesystemRequestOpts): Promise<boolean>;
95
+ rename(oldPath: string, newPath: string, opts?: FilesystemRequestOpts): Promise<EntryInfo>;
96
+ remove(path: string, opts?: FilesystemRequestOpts): Promise<void>;
97
+ watchDir(path: string, onEvent: (event: FilesystemEvent) => void | Promise<void>, opts?: WatchOpts): Promise<WatchHandle>;
98
+ }
99
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ // E2B `sandbox.files`. Relative paths resolve against the guest's $HOME (E2B resolves against the user's home).
2
+ // Solari's listing carries name/dir/size; mode and mtime come from a stat per entry; owner and group are not exposed.
3
+ import { FileNotFoundError, InvalidArgumentError, SolariCompatUnsupported, translateError } from "./errors.js";
4
+ export var FileType;
5
+ (function (FileType) {
6
+ FileType["FILE"] = "file";
7
+ FileType["DIR"] = "dir";
8
+ FileType["SYMLINK"] = "symlink";
9
+ })(FileType || (FileType = {}));
10
+ export var FilesystemEventType;
11
+ (function (FilesystemEventType) {
12
+ FilesystemEventType["CHMOD"] = "chmod";
13
+ FilesystemEventType["CREATE"] = "create";
14
+ FilesystemEventType["REMOVE"] = "remove";
15
+ FilesystemEventType["RENAME"] = "rename";
16
+ FilesystemEventType["WRITE"] = "write";
17
+ })(FilesystemEventType || (FilesystemEventType = {}));
18
+ export class WatchHandle {
19
+ unwatch;
20
+ stopped = false;
21
+ /** @internal */
22
+ constructor(unwatch) {
23
+ this.unwatch = unwatch;
24
+ }
25
+ async stop() {
26
+ if (this.stopped)
27
+ return;
28
+ this.stopped = true;
29
+ await this.unwatch();
30
+ }
31
+ }
32
+ function permissionString(mode, dir) {
33
+ const bits = "rwxrwxrwx";
34
+ let s = dir ? "d" : "-";
35
+ for (let i = 0; i < 9; i++)
36
+ s += mode & (1 << (8 - i)) ? bits[i] : "-";
37
+ return s;
38
+ }
39
+ function dirname(p) {
40
+ const i = p.lastIndexOf("/");
41
+ return i <= 0 ? "/" : p.slice(0, i);
42
+ }
43
+ const baseName = (p) => p.slice(p.lastIndexOf("/") + 1);
44
+ async function toBytes(data) {
45
+ if (typeof data === "string")
46
+ return new TextEncoder().encode(data);
47
+ if (data instanceof ArrayBuffer)
48
+ return new Uint8Array(data);
49
+ if (typeof Blob !== "undefined" && data instanceof Blob)
50
+ return new Uint8Array(await data.arrayBuffer());
51
+ if (data && typeof data.getReader === "function") {
52
+ const reader = data.getReader();
53
+ const chunks = [];
54
+ let n = 0;
55
+ for (;;) {
56
+ const { value, done } = await reader.read();
57
+ if (done)
58
+ break;
59
+ const chunk = typeof value === "string" ? new TextEncoder().encode(value) : value;
60
+ chunks.push(chunk);
61
+ n += chunk.length;
62
+ }
63
+ const out = new Uint8Array(n);
64
+ let o = 0;
65
+ for (const c of chunks) {
66
+ out.set(c, o);
67
+ o += c.length;
68
+ }
69
+ return out;
70
+ }
71
+ throw new InvalidArgumentError("Unsupported data type for write: use string, ArrayBuffer, Blob or ReadableStream");
72
+ }
73
+ function rejectUnsupported(opts, what) {
74
+ if (opts.user)
75
+ throw new SolariCompatUnsupported(`${what} user`, "Solari runs file operations as the sandbox's default user");
76
+ }
77
+ export class Filesystem {
78
+ box;
79
+ /** @internal */
80
+ constructor(box) {
81
+ this.box = box;
82
+ }
83
+ async read(path, opts = {}) {
84
+ rejectUnsupported(opts, "files.read");
85
+ const abs = await this.box.abs(path);
86
+ const bytes = await this.box.on((sb) => sb.files.read(abs), "file");
87
+ switch (opts.format ?? "text") {
88
+ case "bytes":
89
+ return bytes;
90
+ case "blob":
91
+ return new Blob([bytes]);
92
+ case "stream":
93
+ return new ReadableStream({
94
+ start(c) {
95
+ c.enqueue(bytes);
96
+ c.close();
97
+ },
98
+ });
99
+ default:
100
+ return new TextDecoder().decode(bytes);
101
+ }
102
+ }
103
+ async write(pathOrFiles, dataOrOpts, maybeOpts) {
104
+ if (typeof pathOrFiles !== "string")
105
+ return this.writeFiles(pathOrFiles, dataOrOpts);
106
+ const opts = maybeOpts ?? {};
107
+ return this.writeOne(pathOrFiles, dataOrOpts, opts);
108
+ }
109
+ async writeFiles(files, opts = {}) {
110
+ const out = [];
111
+ for (const f of files)
112
+ out.push(await this.writeOne(f.path, f.data, opts));
113
+ return out;
114
+ }
115
+ async writeOne(path, data, opts) {
116
+ rejectUnsupported(opts, "files.write");
117
+ if (opts.metadata && Object.keys(opts.metadata).length > 0)
118
+ throw new SolariCompatUnsupported("files.write metadata", "file extended attributes are not stored");
119
+ const abs = await this.box.abs(path);
120
+ const bytes = await toBytes(data);
121
+ // E2B creates missing parent directories.
122
+ await this.box.on((sb) => sb.files.mkdir(dirname(abs)).catch(() => undefined));
123
+ await this.box.on((sb) => sb.files.write(abs, bytes), "file");
124
+ return { name: baseName(abs), type: FileType.FILE, path: abs };
125
+ }
126
+ async list(path, opts = {}) {
127
+ rejectUnsupported(opts, "files.list");
128
+ const depth = opts.depth ?? 1;
129
+ if (depth < 1)
130
+ throw new InvalidArgumentError("depth should be at least one");
131
+ const abs = (await this.box.abs(path)).replace(/(?<=.)\/+$/, "");
132
+ const out = [];
133
+ const walk = async (dir, left) => {
134
+ const entries = await this.box.on((sb) => sb.files.list(dir), "file");
135
+ const infos = await mapLimit(entries, 8, (e) => this.info(`${dir === "/" ? "" : dir}/${e.name}`));
136
+ out.push(...infos);
137
+ if (left > 1)
138
+ for (const i of infos)
139
+ if (i.type === FileType.DIR)
140
+ await walk(i.path, left - 1);
141
+ };
142
+ await walk(abs, depth);
143
+ return out;
144
+ }
145
+ async getInfo(path, opts = {}) {
146
+ rejectUnsupported(opts, "files.getInfo");
147
+ return this.info(await this.box.abs(path));
148
+ }
149
+ async info(abs) {
150
+ const st = await this.box.on((sb) => sb.files.stat(abs), "file");
151
+ const dir = Boolean(st.dir);
152
+ return {
153
+ name: st.name || baseName(abs),
154
+ path: abs,
155
+ type: dir ? FileType.DIR : FileType.FILE,
156
+ size: st.size,
157
+ mode: st.mode & 0o7777,
158
+ permissions: permissionString(st.mode, dir),
159
+ owner: "",
160
+ group: "",
161
+ modifiedTime: new Date(st.modTimeMs),
162
+ };
163
+ }
164
+ async exists(path, opts = {}) {
165
+ rejectUnsupported(opts, "files.exists");
166
+ try {
167
+ await this.info(await this.box.abs(path));
168
+ return true;
169
+ }
170
+ catch (e) {
171
+ if (e instanceof FileNotFoundError || e.name === "NotFoundError")
172
+ return false;
173
+ // Solari answers a missing path with an action error; E2B's exists() is false for it.
174
+ if (/no such file|not exist|not found|enoent/i.test(String(e?.message)))
175
+ return false;
176
+ throw e;
177
+ }
178
+ }
179
+ async makeDir(path, opts = {}) {
180
+ rejectUnsupported(opts, "files.makeDir");
181
+ const abs = await this.box.abs(path);
182
+ if (await this.exists(abs))
183
+ return false;
184
+ await this.box.on((sb) => sb.files.mkdir(abs), "file");
185
+ return true;
186
+ }
187
+ async rename(oldPath, newPath, opts = {}) {
188
+ rejectUnsupported(opts, "files.rename");
189
+ const from = await this.box.abs(oldPath);
190
+ const to = await this.box.abs(newPath);
191
+ await this.box.on((sb) => sb.files.rename(from, to), "file");
192
+ return this.info(to);
193
+ }
194
+ async remove(path, opts = {}) {
195
+ rejectUnsupported(opts, "files.remove");
196
+ const abs = await this.box.abs(path);
197
+ await this.box.on((sb) => sb.files.remove(abs, true), "file");
198
+ }
199
+ async watchDir(path, onEvent, opts = {}) {
200
+ rejectUnsupported(opts, "files.watchDir");
201
+ if (opts.includeEntry)
202
+ throw new SolariCompatUnsupported("files.watchDir includeEntry");
203
+ const abs = await this.box.abs(path);
204
+ const base = abs.replace(/\/+$/, "");
205
+ const unwatch = await this.box.on((sb) => sb.files.watch(abs, (ev) => {
206
+ const type = Object.values(FilesystemEventType).includes(ev.type) ? ev.type : FilesystemEventType.WRITE;
207
+ const name = ev.path.startsWith(`${base}/`) ? ev.path.slice(base.length + 1) : ev.path;
208
+ void Promise.resolve(onEvent({ name, type })).catch(() => undefined);
209
+ }, Boolean(opts.recursive)));
210
+ let timer;
211
+ const handle = new WatchHandle(async () => {
212
+ if (timer)
213
+ clearTimeout(timer);
214
+ await unwatch().catch(() => undefined);
215
+ });
216
+ // E2B ends a watch after `timeoutMs` (default 60 s; 0 disables).
217
+ const timeoutMs = opts.timeoutMs ?? 60_000;
218
+ if (timeoutMs > 0) {
219
+ timer = setTimeout(() => {
220
+ void handle.stop().then(() => opts.onExit?.());
221
+ }, timeoutMs);
222
+ timer.unref?.();
223
+ }
224
+ return handle;
225
+ }
226
+ }
227
+ async function mapLimit(items, limit, fn) {
228
+ const out = new Array(items.length);
229
+ let i = 0;
230
+ await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => {
231
+ for (;;) {
232
+ const k = i++;
233
+ if (k >= items.length)
234
+ return;
235
+ try {
236
+ out[k] = await fn(items[k]);
237
+ }
238
+ catch (e) {
239
+ throw translateError(e, "file");
240
+ }
241
+ }
242
+ }));
243
+ return out;
244
+ }
245
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Sandbox } from "./sandbox.js";
2
+ export * from "./errors.js";
3
+ export { DEFAULT_BASE_URL, isSolariBaseUrl, type ConnectionOpts } from "./config.js";
4
+ export * from "./sandbox.js";
5
+ export { Commands, Pty, CommandHandle, CommandInputHandle, type CommandResult, type CommandRequestOpts, type CommandStartOpts, type CommandConnectOpts, type CommandStreamInputOpts, type ProcessInfo, type PtyCreateOpts, type PtyConnectOpts, } from "./commands.js";
6
+ export * from "./filesystem.js";
7
+ export * from "./template.js";
8
+ /** E2B's Volume and Secret APIs have no Solari equivalent yet: every call throws {@link SolariCompatUnsupported}. */
9
+ export declare const Volume: Record<string, (...a: unknown[]) => never>;
10
+ export declare const Secret: Record<string, (...a: unknown[]) => never>;
11
+ /** The `new E2B(opts)` client object is not supported; use the static `Sandbox` / `Template` APIs. */
12
+ export declare class E2B {
13
+ constructor(_opts?: unknown);
14
+ }
15
+ export { Sandbox };
16
+ export default Sandbox;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,GAAG,EACH,aAAa,EACb,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAE9B,qHAAqH;AACrH,eAAO,MAAM,MAAM,4CAAiC,CAAC;AACrD,eAAO,MAAM,MAAM,4CAAiC,CAAC;AACrD,sGAAsG;AACtG,qBAAa,GAAG;gBACF,KAAK,CAAC,EAAE,OAAO;CAG5B;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAe,OAAO,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ // @solarisdk/e2b-compat: an E2B-compatible API on Solari Sandbox. Not affiliated with E2B. See README.md, COMPAT.md, NOTICE.
2
+ import { Sandbox } from "./sandbox.js";
3
+ import { SolariCompatUnsupported, unsupportedNamespace } from "./errors.js";
4
+ export * from "./errors.js";
5
+ export { DEFAULT_BASE_URL, isSolariBaseUrl } from "./config.js";
6
+ export * from "./sandbox.js";
7
+ export { Commands, Pty, CommandHandle, CommandInputHandle, } from "./commands.js";
8
+ export * from "./filesystem.js";
9
+ export * from "./template.js";
10
+ /** E2B's Volume and Secret APIs have no Solari equivalent yet: every call throws {@link SolariCompatUnsupported}. */
11
+ export const Volume = unsupportedNamespace("Volume");
12
+ export const Secret = unsupportedNamespace("Secret");
13
+ /** The `new E2B(opts)` client object is not supported; use the static `Sandbox` / `Template` APIs. */
14
+ export class E2B {
15
+ constructor(_opts) {
16
+ throw new SolariCompatUnsupported("new E2B(...)", "use Sandbox.create(...) and Template.build(...) with SOLARI_API_KEY");
17
+ }
18
+ }
19
+ export { Sandbox };
20
+ export default Sandbox;
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6HAA6H;AAE7H,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5E,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACrF,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,GAAG,EACH,aAAa,EACb,kBAAkB,GASnB,MAAM,eAAe,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAE9B,qHAAqH;AACrH,MAAM,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACrD,sGAAsG;AACtG,MAAM,OAAO,GAAG;IACd,YAAY,KAAe;QACzB,MAAM,IAAI,uBAAuB,CAAC,cAAc,EAAE,qEAAqE,CAAC,CAAC;IAC3H,CAAC;CACF;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAe,OAAO,CAAC"}