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