@exedev/sdk 0.0.6 → 0.2.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/client.js CHANGED
@@ -1,109 +1,353 @@
1
- /**
2
- * Create an exe.dev API client.
3
- *
4
- * @example
5
- * ```ts
6
- * import exedev from "@exedev/sdk";
7
- *
8
- * const exe = exedev({ token: process.env.EXE_TOKEN! });
9
- * const vms = await exe.ls();
10
- * console.log(vms);
11
- * ```
12
- */
13
- export default function exedev(opts) {
14
- if (!opts.token) {
15
- throw new Error("exedev: token is required");
16
- }
17
- const token = opts.token;
18
- const baseURL = (opts.baseURL ?? "https://exe.dev").replace(/\/$/, "");
19
- async function exec(command, execOpts) {
20
- const res = await fetch(`${baseURL}/exec`, {
21
- method: "POST",
22
- headers: {
23
- Authorization: `Bearer ${token}`,
24
- "Content-Type": "text/plain",
25
- },
26
- body: command,
27
- signal: execOpts?.signal,
28
- });
29
- const body = await res.text();
30
- return { status: res.status, body, ok: res.ok };
31
- }
32
- async function execJSON(command, execOpts) {
33
- const result = await exec(command, execOpts);
34
- if (!result.ok) {
35
- throw new ExeAPIError(command, result.status, result.body);
36
- }
37
- return JSON.parse(result.body);
38
- }
39
- return {
40
- exec,
41
- async ls(execOpts) {
42
- const res = await execJSON("ls", execOpts);
43
- return res.vms;
44
- },
45
- async whoami(execOpts) {
46
- return execJSON("whoami", execOpts);
47
- },
48
- async stat(vmName, execOpts) {
49
- return execJSON(`stat ${vmName}`, execOpts);
50
- },
51
- async new(name, options, execOpts) {
52
- let cmd = `new ${name}`;
53
- if (options?.region) {
54
- cmd += ` --region=${options.region}`;
55
- }
56
- const result = await exec(cmd, execOpts);
57
- if (!result.ok) {
58
- throw new ExeAPIError(cmd, result.status, result.body);
1
+ // Code generated by "go run ./cmd/gensdkjs" in the exe.dev repository. DO NOT EDIT.
2
+ /** API rejection. Neither requests nor response bodies appear in default logging. */
3
+ export class ExeAPIError extends Error {
4
+ operation;
5
+ status;
6
+ #body;
7
+ constructor(operation, status, body) {
8
+ super(`exe.dev API error (${status}) during ${operation}`);
9
+ this.name = "ExeAPIError";
10
+ this.operation = operation;
11
+ this.status = status;
12
+ this.#body = body;
13
+ }
14
+ /** Opt-in server diagnostics; may contain secrets. Does not establish whether an operation ran. */
15
+ details() { return { body: this.#body }; }
16
+ }
17
+ export class ExeProtocolError extends Error {
18
+ operation;
19
+ constructor(operation) {
20
+ super(`exedev: invalid ${operation} response`);
21
+ this.operation = operation;
22
+ this.name = "ExeProtocolError";
23
+ }
24
+ }
25
+ /** The command's exit status is unknown; captured output is only a prefix. Do not blindly retry. */
26
+ export class SSHStreamError extends Error {
27
+ code;
28
+ captured;
29
+ #stdout;
30
+ #stderr;
31
+ #detail;
32
+ constructor(code, captured, stdout, stderr, detail) {
33
+ super(`exedev: ssh ${code === "output_limit" ? "capture limit exceeded" : code === "protocol" ? "invalid output stream" : "output ended before the command exited"}`);
34
+ this.code = code;
35
+ this.captured = captured;
36
+ this.name = "SSHStreamError";
37
+ this.#stdout = stdout;
38
+ this.#stderr = stderr;
39
+ this.#detail = detail;
40
+ }
41
+ get stdoutBytes() { return this.#stdout; }
42
+ get stderrBytes() { return this.#stderr; }
43
+ get stdout() { return decodeUTF8(this.#stdout); }
44
+ get stderr() { return decodeUTF8(this.#stderr); }
45
+ /** Opt-in server diagnostics; may contain secrets. */
46
+ details() { return { message: this.#detail }; }
47
+ }
48
+ /** Internal transport, deliberately not exported from the package entry point. */
49
+ export class Transport {
50
+ #token;
51
+ #baseURL;
52
+ #fetch;
53
+ constructor(opts) {
54
+ if (!opts?.token)
55
+ throw new Error("exedev: token is required");
56
+ this.#token = opts.token;
57
+ this.#baseURL = (opts.baseURL ?? "https://exe.dev").replace(/\/$/, "");
58
+ this.#fetch = opts.fetch ?? ((input, init) => fetch(input, init));
59
+ }
60
+ async #post(command, options) {
61
+ const signal = options?.signal;
62
+ signal?.throwIfAborted();
63
+ try {
64
+ const response = await abortable(this.#fetch(`${this.#baseURL}/exec`, {
65
+ method: "POST",
66
+ headers: {
67
+ Authorization: `Bearer ${this.#token}`,
68
+ "Content-Type": "text/plain",
69
+ Accept: "application/json, application/x-ndjson",
70
+ },
71
+ body: command,
72
+ signal,
73
+ }), signal);
74
+ if (signal?.aborted) {
75
+ response.body?.cancel().catch(() => { });
76
+ signal.throwIfAborted();
59
77
  }
60
- return result.body.trim();
61
- },
62
- async rm(vmName, execOpts) {
63
- const result = await exec(`rm ${vmName}`, execOpts);
64
- if (!result.ok) {
65
- throw new ExeAPIError(`rm ${vmName}`, result.status, result.body);
78
+ return response;
79
+ }
80
+ catch (err) {
81
+ signal?.throwIfAborted();
82
+ throw err;
83
+ }
84
+ }
85
+ async #text(response, signal) {
86
+ try {
87
+ const body = await abortable(response.text(), signal);
88
+ signal?.throwIfAborted();
89
+ return body;
90
+ }
91
+ catch (err) {
92
+ signal?.throwIfAborted();
93
+ throw err;
94
+ }
95
+ }
96
+ async call(path, args, options, flags, json = false) {
97
+ const res = await this.#post(commandLine(path, args, options, flags), options);
98
+ const body = await this.#text(res, options?.signal);
99
+ if (!res.ok)
100
+ throw new ExeAPIError(path, res.status, body);
101
+ const docs = parseDocuments(body);
102
+ if (docs === undefined) {
103
+ if (json)
104
+ throw new ExeProtocolError(path);
105
+ return body;
106
+ }
107
+ if (docs.some(isErrorDocument))
108
+ throw new ExeAPIError(path, res.status, body);
109
+ return docs.length === 1 ? docs[0] : docs;
110
+ }
111
+ async ssh(vm, command, options = {}) {
112
+ const { capture = true, maxOutputBytes = 8 * 1024 * 1024 } = options;
113
+ if (typeof capture !== "boolean" || !Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 0) {
114
+ throw new TypeError("exedev: capture must be boolean and maxOutputBytes a nonnegative safe integer");
115
+ }
116
+ const res = await this.#post(`ssh ${quote(vm)} ${quote(command)}`, options);
117
+ if (!res.ok) {
118
+ const body = await this.#text(res, options.signal);
119
+ throw new ExeAPIError("ssh", res.status, body);
120
+ }
121
+ if (!isNDJSON(res)) {
122
+ // An older server may be streaming an infinite command in its raw
123
+ // format. Do not read it as an error body, or claim the command never ran.
124
+ res.body?.cancel().catch(() => { });
125
+ options.signal?.throwIfAborted();
126
+ throw new ExeProtocolError("ssh");
127
+ }
128
+ return readSSHOutput(res, { ...options, capture, maxOutputBytes });
129
+ }
130
+ }
131
+ export function commandLine(path, args, options, flags) {
132
+ const words = [path];
133
+ for (const [key, value] of Object.entries(options ?? {})) {
134
+ if (key === "signal" || value === undefined)
135
+ continue;
136
+ const kind = Object.hasOwn(flags, key) ? flags[key] : undefined;
137
+ switch (kind) {
138
+ case "bool":
139
+ words.push(value ? `--${key}` : `--${key}=false`);
140
+ break;
141
+ case "number":
142
+ case "string":
143
+ words.push(`--${key}=${quote(String(value))}`);
144
+ break;
145
+ case "repeated":
146
+ for (const v of [value].flat())
147
+ words.push(`--${key}=${quote(String(v))}`);
148
+ break;
149
+ default: throw new TypeError(`${path}: unknown option ${JSON.stringify(key)}`);
150
+ }
151
+ }
152
+ const positionals = [];
153
+ let skipped = false;
154
+ for (const arg of args) {
155
+ if (arg === undefined) {
156
+ skipped = true;
157
+ continue;
158
+ }
159
+ for (const a of [arg].flat()) {
160
+ if (skipped)
161
+ throw new TypeError(`${path}: argument follows an omitted argument`);
162
+ positionals.push(a);
163
+ }
164
+ }
165
+ if (positionals.some((p) => p.startsWith("-")))
166
+ words.push("--");
167
+ words.push(...positionals.map(quote));
168
+ return words.join(" ");
169
+ }
170
+ export function quote(s) {
171
+ return /^[A-Za-z0-9_@%+=:,./-]+$/.test(s) ? s : `'${s.replaceAll("'", `'"'"'`)}'`;
172
+ }
173
+ function isNDJSON(res) {
174
+ return (res.headers.get("Content-Type") ?? "").split(";")[0].trim().toLowerCase() === "application/x-ndjson";
175
+ }
176
+ // SSH writes are small; refuse an unbounded/incomplete NDJSON frame even in stream-only mode.
177
+ const maxFrameChars = 1024 * 1024;
178
+ async function readSSHOutput(res, options) {
179
+ const { signal, capture, maxOutputBytes } = options;
180
+ const chunks = { stdout: [], stderr: [] };
181
+ const decoders = { stdout: new TextDecoder(), stderr: new TextDecoder() };
182
+ const callbacks = { stdout: options.onStdout, stderr: options.onStderr };
183
+ let count = 0;
184
+ let exitCode;
185
+ let terminal = false;
186
+ const failure = (code, detail) => new SSHStreamError(code, capture, concat(chunks.stdout), concat(chunks.stderr), detail);
187
+ const deliver = async (name, text) => {
188
+ if (text && callbacks[name])
189
+ await abortable(Promise.resolve().then(() => callbacks[name](text)), signal);
190
+ signal?.throwIfAborted();
191
+ };
192
+ const frame = async (line) => {
193
+ signal?.throwIfAborted();
194
+ if (line.trim() === "")
195
+ return;
196
+ if (terminal || line.length > maxFrameChars)
197
+ throw failure("protocol");
198
+ let f;
199
+ try {
200
+ f = JSON.parse(line);
201
+ }
202
+ catch {
203
+ throw failure("protocol");
204
+ }
205
+ if (typeof f !== "object" || f === null || Array.isArray(f) || Object.keys(f).length !== 1)
206
+ throw failure("protocol");
207
+ const value = f;
208
+ for (const name of ["stdout", "stderr"]) {
209
+ if (typeof value[name] !== "string")
210
+ continue;
211
+ let bytes;
212
+ try {
213
+ bytes = decodeBase64(value[name]);
66
214
  }
67
- },
68
- async restart(vmName, execOpts) {
69
- const result = await exec(`restart ${vmName}`, execOpts);
70
- if (!result.ok) {
71
- throw new ExeAPIError(`restart ${vmName}`, result.status, result.body);
215
+ catch {
216
+ throw failure("protocol");
72
217
  }
73
- },
74
- async rename(oldName, newName, execOpts) {
75
- const result = await exec(`rename ${oldName} ${newName}`, execOpts);
76
- if (!result.ok) {
77
- throw new ExeAPIError(`rename ${oldName} ${newName}`, result.status, result.body);
218
+ if (capture) {
219
+ if (count + bytes.length > maxOutputBytes)
220
+ throw failure("output_limit");
221
+ count += bytes.length;
222
+ chunks[name].push(bytes);
78
223
  }
79
- },
80
- async sshKeyList(execOpts) {
81
- const result = await exec("ssh-key list", execOpts);
82
- if (!result.ok) {
83
- throw new ExeAPIError("ssh-key list", result.status, result.body);
224
+ if (callbacks[name])
225
+ await deliver(name, decoders[name].decode(bytes, { stream: true }));
226
+ return;
227
+ }
228
+ if (typeof value.exit_code === "number" && Number.isSafeInteger(value.exit_code) && value.exit_code >= 0) {
229
+ exitCode = value.exit_code;
230
+ terminal = true;
231
+ }
232
+ else if (typeof value.error === "string") {
233
+ throw failure("interrupted", value.error);
234
+ }
235
+ else {
236
+ throw failure("protocol");
237
+ }
238
+ };
239
+ const reader = res.body?.getReader();
240
+ const decoder = new TextDecoder();
241
+ let pending = "";
242
+ let done = false;
243
+ try {
244
+ if (!reader)
245
+ throw failure("interrupted");
246
+ while (true) {
247
+ signal?.throwIfAborted();
248
+ let chunk;
249
+ try {
250
+ chunk = await abortable(reader.read(), signal);
84
251
  }
85
- return result.body;
86
- },
87
- async shareShow(vmName, execOpts) {
88
- const result = await exec(`share show ${vmName}`, execOpts);
89
- if (!result.ok) {
90
- throw new ExeAPIError(`share show ${vmName}`, result.status, result.body);
252
+ catch {
253
+ signal?.throwIfAborted();
254
+ throw failure("interrupted");
91
255
  }
92
- return result.body;
93
- },
94
- };
256
+ if (chunk.done)
257
+ break;
258
+ const lines = (pending + decoder.decode(chunk.value, { stream: true })).split("\n");
259
+ pending = lines.pop();
260
+ for (const line of lines)
261
+ await frame(line);
262
+ if (pending.length > maxFrameChars)
263
+ throw failure("protocol");
264
+ }
265
+ await frame(pending + decoder.decode());
266
+ if (exitCode === undefined)
267
+ throw failure("interrupted");
268
+ for (const name of ["stdout", "stderr"]) {
269
+ if (callbacks[name])
270
+ await deliver(name, decoders[name].decode());
271
+ }
272
+ signal?.throwIfAborted();
273
+ done = true;
274
+ const stdoutBytes = concat(chunks.stdout);
275
+ const stderrBytes = concat(chunks.stderr);
276
+ return {
277
+ exitCode, captured: capture, stdoutBytes, stderrBytes,
278
+ get stdout() { return decodeUTF8(stdoutBytes); },
279
+ get stderr() { return decodeUTF8(stderrBytes); },
280
+ };
281
+ }
282
+ finally {
283
+ if (!done)
284
+ reader?.cancel().catch(() => { });
285
+ reader?.releaseLock();
286
+ }
95
287
  }
96
- /** Error thrown when the exe.dev API returns a non-2xx status. */
97
- export class ExeAPIError extends Error {
98
- command;
99
- status;
100
- body;
101
- constructor(command, status, body) {
102
- super(`exe.dev API error (${status}): ${body.trim()}`);
103
- this.name = "ExeAPIError";
104
- this.command = command;
105
- this.status = status;
106
- this.body = body;
288
+ /** Stop waiting for an uncooperative fetch/body/callback when the caller cancels. */
289
+ export async function abortable(promise, signal) {
290
+ if (!signal)
291
+ return promise;
292
+ let abort;
293
+ try {
294
+ return await Promise.race([promise, new Promise((_, reject) => {
295
+ abort = () => reject(signal.reason);
296
+ signal.addEventListener("abort", abort, { once: true });
297
+ if (signal.aborted)
298
+ abort();
299
+ })]);
300
+ }
301
+ finally {
302
+ if (abort)
303
+ signal.removeEventListener("abort", abort);
107
304
  }
108
305
  }
306
+ export function delay(ms, signal) {
307
+ return new Promise((resolve, reject) => {
308
+ const done = () => { signal.removeEventListener("abort", abort); resolve(); };
309
+ const timer = setTimeout(done, ms);
310
+ const abort = () => { clearTimeout(timer); signal.removeEventListener("abort", abort); reject(signal.reason); };
311
+ signal.addEventListener("abort", abort, { once: true });
312
+ if (signal.aborted)
313
+ abort();
314
+ });
315
+ }
316
+ function decodeBase64(s) {
317
+ const bin = atob(s);
318
+ const bytes = new Uint8Array(bin.length);
319
+ for (let i = 0; i < bin.length; i++)
320
+ bytes[i] = bin.charCodeAt(i);
321
+ return bytes;
322
+ }
323
+ function decodeUTF8(bytes) { return new TextDecoder().decode(bytes); }
324
+ function concat(chunks) {
325
+ if (chunks.length === 1)
326
+ return chunks[0];
327
+ const out = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));
328
+ let at = 0;
329
+ for (const c of chunks) {
330
+ out.set(c, at);
331
+ at += c.length;
332
+ }
333
+ return out;
334
+ }
335
+ function parseDocuments(body) {
336
+ const text = body.trim();
337
+ if (!text)
338
+ return undefined;
339
+ try {
340
+ return [JSON.parse(text)];
341
+ }
342
+ catch { /* Try NDJSON. */ }
343
+ try {
344
+ return text.split("\n").filter((s) => s.trim() !== "").map((s) => JSON.parse(s));
345
+ }
346
+ catch {
347
+ return undefined;
348
+ }
349
+ }
350
+ function isErrorDocument(doc) {
351
+ return typeof doc === "object" && doc !== null && !Array.isArray(doc) && Object.keys(doc).length === 1 && "error" in doc;
352
+ }
109
353
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}