@exedev/sdk 0.2.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/README.md CHANGED
@@ -36,6 +36,9 @@ of `exedev`, `ExedevClient`, and `VM` are also available.
36
36
  - `vm.refresh(options?)` refreshes its metadata and returns the same object.
37
37
  - `vm.ssh(command, options?)` runs a shell command on that VM.
38
38
  - `vm.cp({ name?, ...options })` copies it and returns a new `VM` object.
39
+ - `exe.rm(vms)` deletes an array of VMs or names in one request; the server
40
+ deletes several at a time. It resolves to `{ deleted, failed, not_found,
41
+ errors }` rather than throwing for VMs it could not delete.
39
42
  - Lifecycle and VM-scoped commands are methods on the VM: `vm.rm()`,
40
43
  `vm.pause()`, `vm.resume()`, `vm.restart()`, `vm.rename(newName)`,
41
44
  `vm.resize(options)`, `vm.stat(options)`, `vm.tag(tags)`, `vm.comment(text)`,
@@ -43,33 +46,56 @@ of `exedev`, `ExedevClient`, and `VM` are also available.
43
46
  - Account commands remain on the client: `exe.whoami()`, `exe.sshKeyList()`,
44
47
  `exe.integrationsList()`, `exe.billingPlan()`, etc.
45
48
 
46
- There is no parallel raw-command API or client-level `ssh`, `cp`, or `rm`.
49
+ There is no parallel raw-command API or client-level `ssh` or `cp`. `vm.rm()`
50
+ throws `ExeAPIError` if the VM is not deleted, with `status` 404 if it does not
51
+ exist.
47
52
  Options for generated commands retain CLI flag names (for example,
48
53
  `{ "no-email": true }`); each method carries the server's help text.
49
- Methods with known JSON responses reject malformed JSON; other account/VM
50
- commands may return JSON or text and are typed as `unknown`.
54
+ Every VM command except `grantSupportRoot`, and `whoami`, has a known JSON
55
+ response: its method rejects anything else and resolves to the response's
56
+ type. The wire types (`VMRecord`, `NewResponse`, `ShareShowResponse`, ...) are
57
+ exported. A few report a problem in the result rather than as an error:
58
+ `domainAdd` when DNS does not point at exe.dev yet and `shelleyInstall` when
59
+ Shelley is missing; narrow with `"error" in result`. Other account commands
60
+ may return JSON or text and are typed as `unknown`.
51
61
 
52
62
  `vm.name` is the current name. `vm.httpsUrl`, `vm.sshDest`, and `vm.tags` expose
53
63
  common metadata. `vm.info` is a read-only snapshot with `status`, `region`,
54
- `comment`, `createdAt`, and `setupError` when available. A reference from
55
- `exe.vm(name)` initially knows only its name. Copies do not invent a web URL;
56
- call `refresh()` to fetch it. A successful `rename()` updates the same object
57
- and invalidates old destinations; other references do not automatically change.
64
+ `comment`, `createdAt`, and `promptError` (why `new`'s `prompt` did not reach
65
+ Shelley) when available. A reference from `exe.vm(name)` initially knows only
66
+ its name, with no tags; call `refresh()` to fetch the rest. A copy from `cp()`
67
+ has the tags and web URL the server reports for it. A successful `rename()`
68
+ updates the same object and invalidates old destinations; other references do
69
+ not automatically change.
58
70
 
59
71
  ## Readiness and cancellation
60
72
 
61
73
  `new`, `cp`, `restart`, and `resume` wait for SSH by default. Pass
62
74
  `{ waitUntil: "created" }` to return without probing, including when the token
63
- has no `ssh` permission. `vm.waitUntilReady({ timeoutMs?, signal? })` explicitly
64
- waits later. The default readiness deadline is 60 seconds **after** creation or
65
- the lifecycle operation returns, including probe requests and backoff.
75
+ has no `ssh` permission. `vm.waitUntilReady({ waitUntil?, timeoutMs?, signal? })`
76
+ explicitly waits later. The default readiness deadline is 60 seconds **after**
77
+ creation or the lifecycle operation returns, including probe requests and backoff.
66
78
 
67
79
  Readiness runs only the harmless command `true`, retrying transient connection
68
- failures. It does not wait for application servers or setup scripts, and it
69
- never retries a user command or the creation request.
80
+ failures. It never retries a user command or the creation request, and it does
81
+ not wait for application servers.
82
+
83
+ `{ waitUntil: "setup" }` also waits for the VM's setup script (`new`'s
84
+ `"setup-script"`, run by exeuntu's `exe-setup.service`) to finish, polling the
85
+ unit over SSH with a default deadline of 10 minutes. If the script failed, the
86
+ `VMReadyError`'s `cause` is a `VMSetupError` with `exitCode` (or `signal`) and
87
+ systemd's `result`; `details().output` has the end of its journal. Images
88
+ without that unit, such as `ubuntu:24.04`, do not run setup scripts, so there
89
+ is nothing to wait for.
90
+
91
+ ```ts
92
+ const vm = await exe.new({ "setup-script": "#!/bin/sh\nsudo apt-get install -y jq", waitUntil: "setup" });
93
+ ```
70
94
 
71
95
  If waiting fails, `VMReadyError.vm` gives you the VM for inspection or cleanup;
72
- it is not automatically deleted. All operations accept an `AbortSignal`.
96
+ it is not automatically deleted. That includes a token without `ssh`
97
+ permission: the probe is refused, and the error says to use
98
+ `waitUntil: "created"`. All operations accept an `AbortSignal`.
73
99
  Caller cancellation preserves `signal.reason`, including during streaming and
74
100
  callbacks, rather than wrapping it in another error. An aborted creation may
75
101
  still have created a VM; use an explicit name or `ls()` to recover it.
@@ -77,9 +103,19 @@ still have created a VM; use an explicit name or `ls()` to recover it.
77
103
  ## Running commands
78
104
 
79
105
  `vm.ssh()` resolves to `{ exitCode, stdout, stderr, stdoutBytes, stderrBytes,
80
- captured }`. A nonzero exit code is a result, not an exception. Byte arrays
81
- preserve binary output; strings are decoded as UTF-8. The command is a shell
82
- script: quote any untrusted values you interpolate into it.
106
+ captured }`. A nonzero exit code is a result, not an exception; a command killed
107
+ by signal N exits 128+N, as in a shell. Byte arrays preserve binary output;
108
+ strings are decoded as UTF-8. The command is a shell script: quote any untrusted
109
+ values you interpolate into it with `quote`.
110
+
111
+ ```ts
112
+ import { quote } from "@exedev/sdk";
113
+ await vm.ssh(`cat ${quote(path)}`);
114
+ ```
115
+
116
+ Commands run in a non-login shell. Variables from `new`'s `env` are set for
117
+ them (once the VM's exe-init has the update that does so; until then use
118
+ `bash -lc`). Long silent commands are fine: the server keeps the response alive.
83
119
 
84
120
  ```ts
85
121
  await vm.ssh("make", {
@@ -102,15 +138,21 @@ is ignored in this mode. Invalid or oversized NDJSON frames are always rejected.
102
138
 
103
139
  ## Errors
104
140
 
105
- - `ExeAPIError`: `operation` and HTTP `status`. The message, stack, and ordinary
106
- serialization omit request arguments and server response bodies. Explicitly
107
- call `error.details().body` for diagnostics; this may contain secrets.
141
+ - `ExeAPIError`: `operation` and HTTP `status`. The message includes the
142
+ server's error text, on one line and shortened to 200 characters, for example
143
+ `exe.dev API error (422) during ssh: VM "web" is not running`. It never
144
+ includes the request, but the server's text can mention values you sent.
145
+ `error.details().body` has the full response; this may contain secrets.
108
146
  - `ExeProtocolError`: an incompatible response, including malformed JSON or a
109
147
  server that does not support NDJSON SSH output.
110
148
  - `SSHStreamError`: interrupted/invalid output or a capture limit. `code` is
111
149
  `interrupted`, `protocol`, or `output_limit`; getters provide captured partial
112
- output. The exit status is unknown. `details()` exposes opt-in server diagnostics.
150
+ output. The exit status is unknown. A request that fails before a response
151
+ (for example, a network error) is `interrupted` too, since the command may
152
+ have started. `details()` exposes opt-in diagnostics: the server's message or
153
+ the transport's error.
113
154
  - `VMReadyError`: readiness failed; `vm` and `cause` are available.
155
+ - `VMSetupError`: the setup script failed; the `cause` of a `VMReadyError`.
114
156
 
115
157
  Errors do not establish that an operation never ran. Do not blindly retry a
116
158
  mutation or remote command after a transport failure.
@@ -120,7 +162,7 @@ mutation or remote command after a transport failure.
120
162
  Generate a token via SSH:
121
163
 
122
164
  ```sh
123
- ssh exe.dev ssh-key generate-api-key --label=my-app --exp=30d --cmds="new,ls,ssh,rm"
165
+ ssh exe.dev ssh-key generate-api-key --label=my-app --exp=30d --cmds="new,ls,ssh,share add,rm"
124
166
  ```
125
167
 
126
168
  See the [HTTPS API docs](https://exe.dev/docs/https-api) for permissions and scoping.
@@ -142,7 +184,8 @@ and live integration tests. Live tests require a tag-scoped token and create,
142
184
  copy, execute commands on, restart, rename, and delete their own test VMs.
143
185
  They read `$EXE_TOKEN`, or `$EXE_TOKEN_FILE` (a bare token or JSON containing
144
186
  `token`), or `~/.config/exedev/sdk-test-token`. The expected tag is `sdk-test`
145
- (override with `$EXE_TEST_TAG`). To create a test token:
187
+ (override with `$EXE_TEST_TAG`). Set `$EXE_BASE_URL` to test another
188
+ deployment, such as `https://exe-staging.dev`. To create a test token:
146
189
 
147
190
  ```sh
148
191
  ssh exe.dev 'ssh-key generate-api-key --label=sdk-test --tag=sdk-test --exp=30d --cmds="ls,new,whoami,stat,rm,restart,rename,cp,ssh,ssh-key list,share show" --json'
package/dist/client.d.ts CHANGED
@@ -17,6 +17,7 @@ export interface SSHOptions extends CallOptions {
17
17
  maxOutputBytes?: number;
18
18
  }
19
19
  export interface SSHResult {
20
+ /** The command's exit status; 128+N if it was killed by signal N, as in a shell. */
20
21
  readonly exitCode: number;
21
22
  readonly captured: boolean;
22
23
  readonly stdout: string;
@@ -24,10 +25,14 @@ export interface SSHResult {
24
25
  readonly stdoutBytes: Uint8Array;
25
26
  readonly stderrBytes: Uint8Array;
26
27
  }
27
- /** API rejection. Neither requests nor response bodies appear in default logging. */
28
+ /**
29
+ * API rejection. The message carries the server's error text, shortened; the
30
+ * request and the full response body stay out of it.
31
+ */
28
32
  export declare class ExeAPIError extends Error {
29
33
  #private;
30
34
  readonly operation: string;
35
+ /** The HTTP status, or 404 for a VM the server reported missing. */
31
36
  readonly status: number;
32
37
  constructor(operation: string, status: number, body: string);
33
38
  /** Opt-in server diagnostics; may contain secrets. Does not establish whether an operation ran. */
@@ -44,14 +49,15 @@ export declare class SSHStreamError extends Error {
44
49
  #private;
45
50
  readonly code: "interrupted" | "protocol" | "output_limit";
46
51
  readonly captured: boolean;
47
- constructor(code: "interrupted" | "protocol" | "output_limit", captured: boolean, stdout: Uint8Array, stderr: Uint8Array, detail?: string);
52
+ constructor(code: "interrupted" | "protocol" | "output_limit", captured: boolean, stdout: Uint8Array, stderr: Uint8Array, detail?: string, cause?: unknown);
48
53
  get stdoutBytes(): Uint8Array;
49
54
  get stderrBytes(): Uint8Array;
50
55
  get stdout(): string;
51
56
  get stderr(): string;
52
- /** Opt-in server diagnostics; may contain secrets. */
57
+ /** Opt-in diagnostics: the server's message, or the transport's error. Either may contain secrets. */
53
58
  details(): {
54
59
  message?: string;
60
+ cause?: unknown;
55
61
  };
56
62
  }
57
63
  /** Internal transport, deliberately not exported from the package entry point. */
@@ -59,11 +65,22 @@ export declare class Transport {
59
65
  #private;
60
66
  constructor(opts: ExedevOptions);
61
67
  call(path: string, args: readonly Arg[], options: CallOptions | undefined, flags: Readonly<Record<string, FlagKind>>, json?: boolean): Promise<any>;
68
+ /** A successful response's JSON documents, including any in-band error documents. */
69
+ documents(path: string, args: readonly Arg[], options: CallOptions | undefined, flags: Readonly<Record<string, FlagKind>>): Promise<{
70
+ status: number;
71
+ body: string;
72
+ docs: unknown[] | undefined;
73
+ }>;
62
74
  ssh(vm: string, command: string, options?: SSHOptions): Promise<SSHResult>;
63
75
  }
64
76
  export declare function commandLine(path: string, args: readonly Arg[], options: CallOptions | undefined, flags: Readonly<Record<string, FlagKind>>): string;
77
+ /**
78
+ * Quote a string as one POSIX shell word, for untrusted values interpolated
79
+ * into vm.ssh() commands: vm.ssh(`cat ${quote(path)}`).
80
+ */
65
81
  export declare function quote(s: string): string;
66
82
  /** Stop waiting for an uncooperative fetch/body/callback when the caller cancels. */
67
83
  export declare function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
68
84
  export declare function delay(ms: number, signal: AbortSignal): Promise<void>;
85
+ export declare function isErrorDocument(doc: unknown): boolean;
69
86
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,11 +1,16 @@
1
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. */
2
+ /**
3
+ * API rejection. The message carries the server's error text, shortened; the
4
+ * request and the full response body stay out of it.
5
+ */
3
6
  export class ExeAPIError extends Error {
4
7
  operation;
8
+ /** The HTTP status, or 404 for a VM the server reported missing. */
5
9
  status;
6
10
  #body;
7
11
  constructor(operation, status, body) {
8
- super(`exe.dev API error (${status}) during ${operation}`);
12
+ const reason = errorText(body);
13
+ super(`exe.dev API error (${status}) during ${operation}${reason ? `: ${reason}` : ""}`);
9
14
  this.name = "ExeAPIError";
10
15
  this.operation = operation;
11
16
  this.status = status;
@@ -29,21 +34,23 @@ export class SSHStreamError extends Error {
29
34
  #stdout;
30
35
  #stderr;
31
36
  #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"}`);
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"}`);
34
40
  this.code = code;
35
41
  this.captured = captured;
36
42
  this.name = "SSHStreamError";
37
43
  this.#stdout = stdout;
38
44
  this.#stderr = stderr;
39
45
  this.#detail = detail;
46
+ this.#cause = cause;
40
47
  }
41
48
  get stdoutBytes() { return this.#stdout; }
42
49
  get stderrBytes() { return this.#stderr; }
43
50
  get stdout() { return decodeUTF8(this.#stdout); }
44
51
  get stderr() { return decodeUTF8(this.#stderr); }
45
- /** Opt-in server diagnostics; may contain secrets. */
46
- details() { return { message: this.#detail }; }
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 }; }
47
54
  }
48
55
  /** Internal transport, deliberately not exported from the package entry point. */
49
56
  export class Transport {
@@ -94,26 +101,38 @@ export class Transport {
94
101
  }
95
102
  }
96
103
  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);
104
+ const { status, body, docs } = await this.documents(path, args, options, flags);
102
105
  if (docs === undefined) {
103
106
  if (json)
104
107
  throw new ExeProtocolError(path);
105
108
  return body;
106
109
  }
107
110
  if (docs.some(isErrorDocument))
108
- throw new ExeAPIError(path, res.status, body);
111
+ throw new ExeAPIError(path, status, body);
109
112
  return docs.length === 1 ? docs[0] : docs;
110
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
+ }
111
122
  async ssh(vm, command, options = {}) {
112
123
  const { capture = true, maxOutputBytes = 8 * 1024 * 1024 } = options;
113
124
  if (typeof capture !== "boolean" || !Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 0) {
114
125
  throw new TypeError("exedev: capture must be boolean and maxOutputBytes a nonnegative safe integer");
115
126
  }
116
- const res = await this.#post(`ssh ${quote(vm)} ${quote(command)}`, options);
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
+ }
117
136
  if (!res.ok) {
118
137
  const body = await this.#text(res, options.signal);
119
138
  throw new ExeAPIError("ssh", res.status, body);
@@ -167,6 +186,10 @@ export function commandLine(path, args, options, flags) {
167
186
  words.push(...positionals.map(quote));
168
187
  return words.join(" ");
169
188
  }
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
+ */
170
193
  export function quote(s) {
171
194
  return /^[A-Za-z0-9_@%+=:,./-]+$/.test(s) ? s : `'${s.replaceAll("'", `'"'"'`)}'`;
172
195
  }
@@ -183,7 +206,7 @@ async function readSSHOutput(res, options) {
183
206
  let count = 0;
184
207
  let exitCode;
185
208
  let terminal = false;
186
- const failure = (code, detail) => new SSHStreamError(code, capture, concat(chunks.stdout), concat(chunks.stderr), detail);
209
+ const failure = (code, detail, cause) => new SSHStreamError(code, capture, concat(chunks.stdout), concat(chunks.stderr), detail, cause);
187
210
  const deliver = async (name, text) => {
188
211
  if (text && callbacks[name])
189
212
  await abortable(Promise.resolve().then(() => callbacks[name](text)), signal);
@@ -249,9 +272,9 @@ async function readSSHOutput(res, options) {
249
272
  try {
250
273
  chunk = await abortable(reader.read(), signal);
251
274
  }
252
- catch {
275
+ catch (err) {
253
276
  signal?.throwIfAborted();
254
- throw failure("interrupted");
277
+ throw failure("interrupted", undefined, err);
255
278
  }
256
279
  if (chunk.done)
257
280
  break;
@@ -347,7 +370,17 @@ function parseDocuments(body) {
347
370
  return undefined;
348
371
  }
349
372
  }
350
- function isErrorDocument(doc) {
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;
382
+ }
383
+ export function isErrorDocument(doc) {
351
384
  return typeof doc === "object" && doc !== null && !Array.isArray(doc) && Object.keys(doc).length === 1 && "error" in doc;
352
385
  }
353
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":"AAAA,oFAAoF;AAiCpF;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,SAAS,CAAS;IAC3B,oEAAoE;IAC3D,MAAM,CAAS;IACf,KAAK,CAAS;IACvB,YAAY,SAAiB,EAAE,MAAc,EAAE,IAAY;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,CAAC,sBAAsB,MAAM,YAAY,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,mGAAmG;IACnG,OAAO,KAAuB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC7D;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACpB;IAArB,YAAqB,SAAiB;QACpC,KAAK,CAAC,mBAAmB,SAAS,WAAW,CAAC,CAAC;QAD5B,cAAS,GAAT,SAAS,CAAQ;QAEpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,oGAAoG;AACpG,MAAM,OAAO,cAAe,SAAQ,KAAK;IAM5B;IACA;IANF,OAAO,CAAa;IACpB,OAAO,CAAa;IACpB,OAAO,CAAU;IACjB,MAAM,CAAW;IAC1B,YACW,IAAiD,EACjD,QAAiB,EAC1B,MAAkB,EAClB,MAAkB,EAClB,MAAe,EACf,KAAe;QAEf,KAAK,CAAC,eAAe,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2DAA2D,EAAE,CAAC,CAAC;QAPhL,SAAI,GAAJ,IAAI,CAA6C;QACjD,aAAQ,GAAR,QAAQ,CAAS;QAO1B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,IAAI,WAAW,KAAiB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,IAAI,WAAW,KAAiB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,KAAa,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,KAAa,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,sGAAsG;IACtG,OAAO,KAA4C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC3G;AAED,kFAAkF;AAClF,MAAM,OAAO,SAAS;IACX,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,MAAM,CAAe;IAC9B,YAAY,IAAmB;QAC7B,IAAI,CAAC,IAAI,EAAE,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,OAAqB;QAChD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC/B,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,OAAO,EAAE;gBACpE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,YAAY;oBAC5B,MAAM,EAAE,wCAAwC;iBACjD;gBACD,IAAI,EAAE,OAAO;gBACb,MAAM;aACP,CAAC,EAAE,MAAM,CAAC,CAAC;YACZ,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,QAAkB,EAAE,MAAoB;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CACR,IAAY,EAAE,IAAoB,EAAE,OAAgC,EACpE,KAAyC,EAAE,IAAI,GAAG,KAAK;QAEvD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,IAAI;gBAAE,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IACD,qFAAqF;IACrF,KAAK,CAAC,SAAS,CACb,IAAY,EAAE,IAAoB,EAAE,OAAgC,EACpE,KAAyC;QAEzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,OAAe,EAAE,UAAsB,EAAE;QAC7D,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACrE,IAAI,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,SAAS,CAAC,+EAA+E,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YACjC,2EAA2E;YAC3E,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,kEAAkE;YAClE,2EAA2E;YAC3E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACrE,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CACzB,IAAY,EAAE,IAAoB,EAAE,OAAgC,EACpE,KAAyC;IAEzC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACtE,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAC,MAAM;YACrE,KAAK,UAAU;gBACb,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3E,MAAM;YACR,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,IAAI,OAAO;gBAAE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;YAClF,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AACpF,CAAC;AAED,SAAS,QAAQ,CAAC,GAAa;IAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,sBAAsB,CAAC;AAC/G,CAAC;AAGD,8FAA8F;AAC9F,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAElC,KAAK,UAAU,aAAa,CAC1B,GAAa,EAAE,OAAkE;IAEjF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,MAAM,GAAqC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC;IAC1E,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAA4B,CAAC;IACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,CAAC,IAA4B,EAAE,MAAe,EAAE,KAAe,EAAE,EAAE,CACjF,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,KAAK,EAAE,IAAgB,EAAE,IAAY,EAAE,EAAE;QACvD,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3G,MAAM,EAAE,cAAc,EAAE,CAAC;IAC3B,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACnC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO;QAC/B,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa;YAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,CAAU,CAAC;QACf,IAAI,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QAClE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACtH,MAAM,KAAK,GAAG,CAA4B,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;YACjD,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,SAAS;YAC9C,IAAI,KAAiB,CAAC;YACtB,IAAI,CAAC;gBAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;YAAC,CAAC;YAC/E,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc;oBAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;gBACzE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,CAAC;gBAAE,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACzG,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,IAAI,KAA2C,CAAC;YAChD,IAAI,CAAC;gBAAC,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAAC,CAAC;YACvD,OAAO,GAAG,EAAE,CAAC;gBACX,MAAM,EAAE,cAAc,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,KAAK,CAAC,IAAI;gBAAE,MAAM;YACtB,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpF,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YACvB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa;gBAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;YACjD,IAAI,SAAS,CAAC,IAAI,CAAC;gBAAE,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO;YACL,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;YACrD,IAAI,MAAM,KAAK,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,MAAM,KAAK,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACjD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI;YAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,EAAE,WAAW,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,OAAmB,EAAE,MAAoB;IAC1E,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,KAA+B,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACnE,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAI,MAAM,CAAC,OAAO;oBAAE,KAAK,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC,CAAC,CAAC;IACP,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAmB;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,UAAU,CAAC,KAAiB,IAAY,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1F,SAAS,MAAM,CAAC,MAAoB;IAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;IAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AACD,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACzF,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC7B,CAAC;AACD,6EAA6E;AAC7E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,OAAQ,GAAkC,EAAE,KAAK,KAAK,QAAQ,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAmC,CAAC;IAClG,IAAI,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC;AAC3H,CAAC"}
@@ -1,16 +1,21 @@
1
1
  import { Transport } from "./client.js";
2
2
  import type { ExedevOptions, SSHOptions, SSHResult } from "./client.js";
3
- import type { CommandResults } from "./types.js";
3
+ import type { CommandResults, RmResponse } from "./types.js";
4
4
  export interface CallOptions {
5
5
  signal?: AbortSignal;
6
6
  }
7
7
  export interface WaitOptions extends CallOptions {
8
- /** SSH readiness deadline, in milliseconds. Default 60,000. */
8
+ /**
9
+ * ssh (the default): the VM runs commands. setup: also, its setup script
10
+ * (exeuntu's exe-setup.service) has finished, and succeeded. Both need ssh permission.
11
+ */
12
+ waitUntil?: "ssh" | "setup";
13
+ /** Deadline in milliseconds, including requests and backoff. Default 60,000; 600,000 for setup. */
9
14
  timeoutMs?: number;
10
15
  }
11
- export interface ReadyOptions extends WaitOptions {
16
+ export interface ReadyOptions extends Omit<WaitOptions, "waitUntil"> {
12
17
  /** Default ssh. Use created to return without probing (and without ssh permission). */
13
- waitUntil?: "ssh" | "created";
18
+ waitUntil?: "ssh" | "setup" | "created";
14
19
  }
15
20
  export interface VMInfo {
16
21
  readonly name: string;
@@ -21,7 +26,8 @@ export interface VMInfo {
21
26
  readonly region?: string;
22
27
  readonly comment?: string;
23
28
  readonly createdAt?: string;
24
- readonly setupError?: string;
29
+ /** Why new's --prompt did not reach Shelley, when it did not. Setup scripts report through waitUntil: "setup". */
30
+ readonly promptError?: string;
25
31
  }
26
32
  export type CommandResult<P extends string> = P extends keyof CommandResults ? CommandResults[P] : unknown;
27
33
  export type FlagKind = "bool" | "number" | "string" | "repeated";
@@ -29,7 +35,7 @@ export type Arg = string | readonly string[] | undefined;
29
35
  /** Options for {@link ExedevClient.ls}. */
30
36
  export interface LsOptions extends CallOptions {
31
37
  /** group VMs by none|tag|region|type (default: none) */
32
- group?: "none" | "tag" | "region";
38
+ group?: "none" | "tag" | "region" | "type";
33
39
  /** show detailed information */
34
40
  l?: boolean;
35
41
  }
@@ -347,7 +353,7 @@ export interface TeamSettingsVmPlacementMemberPoolOptions extends CallOptions {
347
353
  /** Options for {@link ExedevClient.teamVmLs}. */
348
354
  export interface TeamVmLsOptions extends CallOptions {
349
355
  /** group VMs by none|tag|region|type|user|access (default: none) */
350
- group?: "none" | "tag" | "region" | "user" | "access";
356
+ group?: "none" | "tag" | "region" | "type" | "user" | "access";
351
357
  /** show detailed information */
352
358
  l?: boolean;
353
359
  }
@@ -505,6 +511,12 @@ export declare class ExedevClient {
505
511
  constructor(options: ExedevOptions);
506
512
  /** Reference an existing VM without a request. Use refresh() to fetch its metadata. */
507
513
  vm(name: string): VM;
514
+ /**
515
+ * Delete VMs in one request; the server deletes several at a time. Unlike
516
+ * vm.rm(), VMs that were missing or could not be deleted do not throw: they
517
+ * are listed in failed, with reasons in errors. Requires rm permission.
518
+ */
519
+ rm(vms: readonly (string | VM)[], options?: CallOptions): Promise<RmResponse>;
508
520
  /**
509
521
  * Browse documentation
510
522
  *
@@ -1212,8 +1224,10 @@ export declare class VM {
1212
1224
  refresh(options?: CallOptions): Promise<this>;
1213
1225
  /**
1214
1226
  * Probe SSH with `true` until it exits successfully. Never reruns a user command.
1215
- * The default deadline is 60 seconds, including requests and backoff. This does
1216
- * not wait for application servers or setup scripts. Requires ssh permission.
1227
+ * With waitUntil: "setup", then poll exe-setup.service until the setup script
1228
+ * has finished, throwing VMSetupError (as VMReadyError's cause) if it failed.
1229
+ * Images without that unit (anything but exeuntu) have no setup to wait for.
1230
+ * This does not wait for application servers. Requires ssh permission.
1217
1231
  */
1218
1232
  waitUntilReady(options?: WaitOptions): Promise<this>;
1219
1233
  /**
@@ -1223,7 +1237,7 @@ export declare class VM {
1223
1237
  *
1224
1238
  * Tag-scoped API keys may run this command.
1225
1239
  */
1226
- rm(options?: CallOptions): Promise<CommandResult<"rm">>;
1240
+ rm(options?: CallOptions): Promise<RmResponse>;
1227
1241
  /**
1228
1242
  * Restart a VM
1229
1243
  *
@@ -1465,4 +1479,19 @@ export declare class VMReadyError extends Error {
1465
1479
  readonly vm: VM;
1466
1480
  constructor(vm: VM, cause: unknown);
1467
1481
  }
1482
+ /** The VM's setup script failed. details() has the end of its journal. */
1483
+ export declare class VMSetupError extends Error {
1484
+ #private;
1485
+ /** systemd's Result for exe-setup.service, e.g. "exit-code", "signal", or "timeout". */
1486
+ readonly result: string;
1487
+ readonly exitCode: number | undefined;
1488
+ readonly signal: number | undefined;
1489
+ constructor(
1490
+ /** systemd's Result for exe-setup.service, e.g. "exit-code", "signal", or "timeout". */
1491
+ result: string, exitCode: number | undefined, signal: number | undefined, output: string);
1492
+ /** The script's last journal lines; may contain secrets. */
1493
+ details(): {
1494
+ output: string;
1495
+ };
1496
+ }
1468
1497
  //# sourceMappingURL=commands.gen.d.ts.map