@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/README.md +165 -59
- package/dist/client.d.ts +70 -43
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +319 -101
- package/dist/client.js.map +1 -1
- package/dist/commands.gen.d.ts +358 -293
- package/dist/commands.gen.d.ts.map +1 -1
- package/dist/commands.gen.js +905 -511
- package/dist/commands.gen.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +327 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Official JavaScript/TypeScript SDK for the [exe.dev](https://exe.dev) HTTPS API.
|
|
4
4
|
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
5
|
```sh
|
|
8
6
|
npm install @exedev/sdk
|
|
9
7
|
```
|
|
@@ -14,91 +12,199 @@ npm install @exedev/sdk
|
|
|
14
12
|
import exedev from "@exedev/sdk";
|
|
15
13
|
|
|
16
14
|
const exe = exedev({ token: process.env.EXE_TOKEN! });
|
|
17
|
-
|
|
18
|
-
// Every exe.dev command is a method. Positional arguments are parameters;
|
|
19
|
-
// flags go in an options object, spelled as on the command line.
|
|
20
15
|
const vm = await exe.new({ name: "my-vm", image: "ubuntu:24.04", tag: ["dev"] });
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
await
|
|
25
|
-
|
|
26
|
-
await
|
|
27
|
-
|
|
28
|
-
await
|
|
29
|
-
|
|
30
|
-
// Run a raw command line.
|
|
31
|
-
const result = await exe.exec("help");
|
|
32
|
-
console.log(result.body);
|
|
16
|
+
// new waits for SSH by default. No create-then-ssh retry loop is needed.
|
|
17
|
+
try {
|
|
18
|
+
console.log(vm.name, vm.httpsUrl);
|
|
19
|
+
const result = await vm.ssh("uname -a");
|
|
20
|
+
console.log(result.exitCode, result.stdout, result.stderr);
|
|
21
|
+
await vm.shareAdd("friend@example.com", { message: "have a look" });
|
|
22
|
+
} finally {
|
|
23
|
+
await vm.rm();
|
|
24
|
+
}
|
|
33
25
|
```
|
|
34
26
|
|
|
35
|
-
##
|
|
27
|
+
## Client and VM API
|
|
28
|
+
|
|
29
|
+
`exedev({ token, baseURL?, fetch? })` creates a client. `baseURL` defaults to
|
|
30
|
+
`https://exe.dev`; `fetch` defaults to the global implementation. Named imports
|
|
31
|
+
of `exedev`, `ExedevClient`, and `VM` are also available.
|
|
32
|
+
|
|
33
|
+
- `exe.new(options?)` creates a VM and returns a `VM` object.
|
|
34
|
+
- `exe.ls(nameOrPattern?, options?)` returns `VM[]`.
|
|
35
|
+
- `exe.vm(name)` references an existing VM without making a request.
|
|
36
|
+
- `vm.refresh(options?)` refreshes its metadata and returns the same object.
|
|
37
|
+
- `vm.ssh(command, options?)` runs a shell command on that VM.
|
|
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.
|
|
42
|
+
- Lifecycle and VM-scoped commands are methods on the VM: `vm.rm()`,
|
|
43
|
+
`vm.pause()`, `vm.resume()`, `vm.restart()`, `vm.rename(newName)`,
|
|
44
|
+
`vm.resize(options)`, `vm.stat(options)`, `vm.tag(tags)`, `vm.comment(text)`,
|
|
45
|
+
`vm.shareShow()`, `vm.sharePort(port)`, and the other generated VM commands.
|
|
46
|
+
- Account commands remain on the client: `exe.whoami()`, `exe.sshKeyList()`,
|
|
47
|
+
`exe.integrationsList()`, `exe.billingPlan()`, etc.
|
|
48
|
+
|
|
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.
|
|
52
|
+
Options for generated commands retain CLI flag names (for example,
|
|
53
|
+
`{ "no-email": true }`); each method carries the server's help text.
|
|
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`.
|
|
61
|
+
|
|
62
|
+
`vm.name` is the current name. `vm.httpsUrl`, `vm.sshDest`, and `vm.tags` expose
|
|
63
|
+
common metadata. `vm.info` is a read-only snapshot with `status`, `region`,
|
|
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.
|
|
70
|
+
|
|
71
|
+
## Readiness and cancellation
|
|
72
|
+
|
|
73
|
+
`new`, `cp`, `restart`, and `resume` wait for SSH by default. Pass
|
|
74
|
+
`{ waitUntil: "created" }` to return without probing, including when the token
|
|
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.
|
|
78
|
+
|
|
79
|
+
Readiness runs only the harmless command `true`, retrying transient connection
|
|
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.
|
|
36
90
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```sh
|
|
40
|
-
ssh exe.dev ssh-key generate-api-key --label=my-app --exp=30d
|
|
91
|
+
```ts
|
|
92
|
+
const vm = await exe.new({ "setup-script": "#!/bin/sh\nsudo apt-get install -y jq", waitUntil: "setup" });
|
|
41
93
|
```
|
|
42
94
|
|
|
43
|
-
|
|
44
|
-
|
|
95
|
+
If waiting fails, `VMReadyError.vm` gives you the VM for inspection or cleanup;
|
|
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`.
|
|
99
|
+
Caller cancellation preserves `signal.reason`, including during streaming and
|
|
100
|
+
callbacks, rather than wrapping it in another error. An aborted creation may
|
|
101
|
+
still have created a VM; use an explicit name or `ls()` to recover it.
|
|
45
102
|
|
|
46
|
-
##
|
|
103
|
+
## Running commands
|
|
47
104
|
|
|
48
|
-
|
|
105
|
+
`vm.ssh()` resolves to `{ exitCode, stdout, stderr, stdoutBytes, stderrBytes,
|
|
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`.
|
|
49
110
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
| `fetch` | function | No | global `fetch` |
|
|
111
|
+
```ts
|
|
112
|
+
import { quote } from "@exedev/sdk";
|
|
113
|
+
await vm.ssh(`cat ${quote(path)}`);
|
|
114
|
+
```
|
|
55
115
|
|
|
56
|
-
|
|
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.
|
|
57
119
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
120
|
+
```ts
|
|
121
|
+
await vm.ssh("make", {
|
|
122
|
+
capture: false,
|
|
123
|
+
onStdout: (chunk) => { process.stdout.write(chunk); },
|
|
124
|
+
onStderr: (chunk) => { process.stderr.write(chunk); },
|
|
125
|
+
});
|
|
126
|
+
```
|
|
62
127
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
128
|
+
Callbacks are awaited serially, with incremental UTF-8 decoding per stream.
|
|
129
|
+
Their cross-stream order is approximate. Throwing from a callback cancels the
|
|
130
|
+
response and rejects with that error.
|
|
131
|
+
|
|
132
|
+
Output is captured by default, with an **8 MiB combined limit** on stdout and
|
|
133
|
+
stderr. Change it with `maxOutputBytes`; exceeding it cancels the response and
|
|
134
|
+
throws `SSHStreamError` with code `output_limit`. Set `capture: false` for
|
|
135
|
+
bounded-memory streaming of arbitrarily long output: callbacks still receive
|
|
136
|
+
it, but result/error output is empty and `captured` is false. The capture limit
|
|
137
|
+
is ignored in this mode. Invalid or oversized NDJSON frames are always rejected.
|
|
138
|
+
|
|
139
|
+
## Errors
|
|
140
|
+
|
|
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.
|
|
146
|
+
- `ExeProtocolError`: an incompatible response, including malformed JSON or a
|
|
147
|
+
server that does not support NDJSON SSH output.
|
|
148
|
+
- `SSHStreamError`: interrupted/invalid output or a capture limit. `code` is
|
|
149
|
+
`interrupted`, `protocol`, or `output_limit`; getters provide captured partial
|
|
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.
|
|
154
|
+
- `VMReadyError`: readiness failed; `vm` and `cause` are available.
|
|
155
|
+
- `VMSetupError`: the setup script failed; the `cause` of a `VMReadyError`.
|
|
156
|
+
|
|
157
|
+
Errors do not establish that an operation never ran. Do not blindly retry a
|
|
158
|
+
mutation or remote command after a transport failure.
|
|
67
159
|
|
|
68
|
-
|
|
69
|
-
exe.dev command tree; don't edit it by hand. To pick up new commands, run
|
|
70
|
-
`npm run sync-commands -- path/to/exe` (default `../exe`) with an up-to-date
|
|
71
|
-
checkout of the exe.dev repository, then `npm test`.
|
|
160
|
+
## Authentication
|
|
72
161
|
|
|
73
|
-
|
|
162
|
+
Generate a token via SSH:
|
|
74
163
|
|
|
75
|
-
```
|
|
76
|
-
|
|
164
|
+
```sh
|
|
165
|
+
ssh exe.dev ssh-key generate-api-key --label=my-app --exp=30d --cmds="new,ls,ssh,share add,rm"
|
|
77
166
|
```
|
|
78
167
|
|
|
168
|
+
See the [HTTPS API docs](https://exe.dev/docs/https-api) for permissions and scoping.
|
|
169
|
+
|
|
79
170
|
## Development
|
|
80
171
|
|
|
172
|
+
**All of `src/` is generated.** Edit `cmd/gensdkjs` and its TypeScript templates
|
|
173
|
+
in the exe.dev repository, then run `go run ./cmd/gensdkjs` there. Copy the
|
|
174
|
+
outputs into this checkout and test:
|
|
175
|
+
|
|
81
176
|
```sh
|
|
82
177
|
npm install
|
|
178
|
+
npm run sync-commands -- ../exe
|
|
83
179
|
npm test
|
|
84
180
|
```
|
|
85
181
|
|
|
86
|
-
`npm test` builds the package,
|
|
87
|
-
|
|
88
|
-
restart, rename and delete
|
|
89
|
-
|
|
90
|
-
`
|
|
182
|
+
`npm test` builds the package, checks the public TypeScript API, and runs unit
|
|
183
|
+
and live integration tests. Live tests require a tag-scoped token and create,
|
|
184
|
+
copy, execute commands on, restart, rename, and delete their own test VMs.
|
|
185
|
+
They read `$EXE_TOKEN`, or `$EXE_TOKEN_FILE` (a bare token or JSON containing
|
|
186
|
+
`token`), or `~/.config/exedev/sdk-test-token`. The expected tag is `sdk-test`
|
|
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:
|
|
91
189
|
|
|
92
190
|
```sh
|
|
93
|
-
|
|
94
|
-
ssh exe.dev 'ssh-key generate-api-key --label=sdk-test --tag=sdk-test --exp=30d --cmds="help,ls,new,whoami,stat,rm,restart,rename,ssh-key list,share show" --json' \
|
|
95
|
-
| jq -r .token > ~/.config/exedev/sdk-test-token
|
|
96
|
-
chmod 600 ~/.config/exedev/sdk-test-token
|
|
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'
|
|
97
192
|
```
|
|
98
193
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
194
|
+
Set `EXE_SKIP_INTEGRATION=1` to run without live access. Set
|
|
195
|
+
`EXE_SKIP_SSH_INTEGRATION=1` to exercise only the live control plane when the
|
|
196
|
+
server has not yet deployed NDJSON SSH support; this explicitly skips live SSH
|
|
197
|
+
and readiness assertions, not the corresponding unit tests. The full live
|
|
198
|
+
suite requires that protocol and does not silently fall back to raw SSH output.
|
|
199
|
+
|
|
200
|
+
The generator's Go tests check regeneration and command grammar assumptions.
|
|
201
|
+
Server-side wire-contract tests exercise creation, listing, copying, and SSH.
|
|
202
|
+
To run the generated SDK end-to-end against the local Go HTTP/SSH fixture:
|
|
203
|
+
|
|
204
|
+
```sh
|
|
205
|
+
# In the exe.dev checkout, with this SDK's npm dependencies installed:
|
|
206
|
+
EXE_SDK_JS_DIR=/absolute/path/to/exe-sdk-js go test ./execore -run TestSDKJSHTTP
|
|
207
|
+
```
|
|
102
208
|
|
|
103
209
|
## License
|
|
104
210
|
|
package/dist/client.d.ts
CHANGED
|
@@ -1,59 +1,86 @@
|
|
|
1
|
-
import { Commands } from "./commands.gen.js";
|
|
2
1
|
import type { Arg, CallOptions, FlagKind } from "./commands.gen.js";
|
|
3
2
|
export interface ExedevOptions {
|
|
4
|
-
/**
|
|
3
|
+
/** API bearer token. */
|
|
5
4
|
token: string;
|
|
6
|
-
/**
|
|
5
|
+
/** Defaults to https://exe.dev. */
|
|
7
6
|
baseURL?: string;
|
|
8
|
-
/**
|
|
7
|
+
/** Defaults to global fetch. */
|
|
9
8
|
fetch?: typeof fetch;
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
export interface SSHOptions extends CallOptions {
|
|
11
|
+
/** Awaited serially as UTF-8 output arrives. Throwing cancels the response. */
|
|
12
|
+
onStdout?: (data: string) => void | Promise<void>;
|
|
13
|
+
onStderr?: (data: string) => void | Promise<void>;
|
|
14
|
+
/** Retain output in the result/error. Set false for bounded-memory streaming. Default true. */
|
|
15
|
+
capture?: boolean;
|
|
16
|
+
/** Maximum combined captured bytes. Default 8 MiB. Ignored with capture: false. */
|
|
17
|
+
maxOutputBytes?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SSHResult {
|
|
20
|
+
/** The command's exit status; 128+N if it was killed by signal N, as in a shell. */
|
|
21
|
+
readonly exitCode: number;
|
|
22
|
+
readonly captured: boolean;
|
|
23
|
+
readonly stdout: string;
|
|
24
|
+
readonly stderr: string;
|
|
25
|
+
readonly stdoutBytes: Uint8Array;
|
|
26
|
+
readonly stderrBytes: Uint8Array;
|
|
20
27
|
}
|
|
21
28
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* Command methods resolve to the command's parsed JSON output and reject with
|
|
26
|
-
* ExeAPIError when the command fails.
|
|
29
|
+
* API rejection. The message carries the server's error text, shortened; the
|
|
30
|
+
* request and the full response body stay out of it.
|
|
27
31
|
*/
|
|
28
|
-
export declare class
|
|
32
|
+
export declare class ExeAPIError extends Error {
|
|
33
|
+
#private;
|
|
34
|
+
readonly operation: string;
|
|
35
|
+
/** The HTTP status, or 404 for a VM the server reported missing. */
|
|
36
|
+
readonly status: number;
|
|
37
|
+
constructor(operation: string, status: number, body: string);
|
|
38
|
+
/** Opt-in server diagnostics; may contain secrets. Does not establish whether an operation ran. */
|
|
39
|
+
details(): {
|
|
40
|
+
body: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export declare class ExeProtocolError extends Error {
|
|
44
|
+
readonly operation: string;
|
|
45
|
+
constructor(operation: string);
|
|
46
|
+
}
|
|
47
|
+
/** The command's exit status is unknown; captured output is only a prefix. Do not blindly retry. */
|
|
48
|
+
export declare class SSHStreamError extends Error {
|
|
49
|
+
#private;
|
|
50
|
+
readonly code: "interrupted" | "protocol" | "output_limit";
|
|
51
|
+
readonly captured: boolean;
|
|
52
|
+
constructor(code: "interrupted" | "protocol" | "output_limit", captured: boolean, stdout: Uint8Array, stderr: Uint8Array, detail?: string, cause?: unknown);
|
|
53
|
+
get stdoutBytes(): Uint8Array;
|
|
54
|
+
get stderrBytes(): Uint8Array;
|
|
55
|
+
get stdout(): string;
|
|
56
|
+
get stderr(): string;
|
|
57
|
+
/** Opt-in diagnostics: the server's message, or the transport's error. Either may contain secrets. */
|
|
58
|
+
details(): {
|
|
59
|
+
message?: string;
|
|
60
|
+
cause?: unknown;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Internal transport, deliberately not exported from the package entry point. */
|
|
64
|
+
export declare class Transport {
|
|
29
65
|
#private;
|
|
30
66
|
constructor(opts: ExedevOptions);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
+
}>;
|
|
74
|
+
ssh(vm: string, command: string, options?: SSHOptions): Promise<SSHResult>;
|
|
34
75
|
}
|
|
76
|
+
export declare function commandLine(path: string, args: readonly Arg[], options: CallOptions | undefined, flags: Readonly<Record<string, FlagKind>>): string;
|
|
35
77
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```ts
|
|
40
|
-
* import exedev from "@exedev/sdk";
|
|
41
|
-
*
|
|
42
|
-
* const exe = exedev({ token: process.env.EXE_TOKEN! });
|
|
43
|
-
* const { vms } = await exe.ls();
|
|
44
|
-
* console.log(vms);
|
|
45
|
-
* ```
|
|
78
|
+
* Quote a string as one POSIX shell word, for untrusted values interpolated
|
|
79
|
+
* into vm.ssh() commands: vm.ssh(`cat ${quote(path)}`).
|
|
46
80
|
*/
|
|
47
|
-
export default function exedev(opts: ExedevOptions): ExedevClient;
|
|
48
|
-
/** Builds the command line for a generated command method. */
|
|
49
|
-
export declare function commandLine(path: string, args: readonly Arg[], options: CallOptions | undefined, flags: Readonly<Record<string, FlagKind>>): string;
|
|
50
|
-
/** Quotes s for the exe.dev command-line parser (POSIX shell rules). */
|
|
51
81
|
export declare function quote(s: string): string;
|
|
52
|
-
/**
|
|
53
|
-
export declare
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
readonly body: string;
|
|
57
|
-
constructor(command: string, status: number, body: string);
|
|
58
|
-
}
|
|
82
|
+
/** Stop waiting for an uncooperative fetch/body/callback when the caller cancels. */
|
|
83
|
+
export declare function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
84
|
+
export declare function delay(ms: number, signal: AbortSignal): Promise<void>;
|
|
85
|
+
export declare function isErrorDocument(doc: unknown): boolean;
|
|
59
86
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|