withruntime 0.12.0 → 0.16.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/BLAXEL.md +97 -32
- package/COMPATIBILITY.md +120 -5
- package/DAYTONA.md +34 -3
- package/E2B.md +34 -5
- package/README.md +36 -3
- package/README.src.md +35 -2
- package/VERCEL.md +52 -5
- package/compatibility-lock.json +71 -111
- package/dist/billing-cli.js +8 -4
- package/dist/blaxel/client.d.ts +11 -0
- package/dist/blaxel/client.js +28 -0
- package/dist/blaxel/errors.d.ts +65 -0
- package/dist/blaxel/errors.js +114 -0
- package/dist/blaxel/index.d.ts +10 -3
- package/dist/blaxel/index.js +23 -4
- package/dist/blaxel/preview.d.ts +29 -4
- package/dist/blaxel/preview.js +79 -5
- package/dist/blaxel/sandbox.d.ts +1 -1
- package/dist/blaxel/sandbox.js +2 -1
- package/dist/blaxel/session.js +4 -2
- package/dist/cli-extras.js +2 -1
- package/dist/cli-words.js +1 -0
- package/dist/cli.d.ts +17 -2
- package/dist/cli.js +291 -85
- package/dist/client.d.ts +1 -1
- package/dist/credentials.d.ts +3 -0
- package/dist/credentials.js +15 -0
- package/dist/daytona/client.d.ts +4 -0
- package/dist/daytona/client.js +8 -3
- package/dist/daytona/daytona.d.ts +4 -1
- package/dist/daytona/daytona.js +3 -2
- package/dist/e2b/sandbox.d.ts +7 -6
- package/dist/e2b/sandbox.js +9 -12
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/freestyle/index.d.ts +77 -5
- package/dist/freestyle/index.js +380 -48
- package/dist/identity.js +36 -18
- package/dist/index.d.ts +4 -3
- package/dist/machine.d.ts +39 -13
- package/dist/machine.js +72 -25
- package/dist/mcp.js +157 -20
- package/dist/modal/index.d.ts +15 -0
- package/dist/modal/index.js +35 -7
- package/dist/morph/index.d.ts +255 -0
- package/dist/morph/index.js +641 -0
- package/dist/network-cli.js +2 -2
- package/dist/product-names.d.ts +2 -2
- package/dist/product-names.js +2 -2
- package/dist/products/api-keys.d.ts +73 -0
- package/dist/products/api-keys.js +23 -0
- package/dist/products/apps.d.ts +12 -31
- package/dist/products/apps.js +8 -113
- package/dist/products/balancers.d.ts +87 -0
- package/dist/products/balancers.js +8 -0
- package/dist/products/builds.d.ts +30 -0
- package/dist/products/builds.js +6 -0
- package/dist/products/index.d.ts +2 -0
- package/dist/products/index.js +2 -0
- package/dist/products/jobs.d.ts +2 -2
- package/dist/products/jobs.js +1 -1
- package/dist/products/limits.d.ts +16 -2
- package/dist/products/limits.js +2 -2
- package/dist/products/mcp.d.ts +5 -0
- package/dist/products/network-products.d.ts +21 -3
- package/dist/products/network-products.js +3 -1
- package/dist/products/observability.d.ts +7 -2
- package/dist/products/previews.d.ts +6 -3
- package/dist/products/previews.js +1 -1
- package/dist/products/resources.d.ts +54 -0
- package/dist/products/resources.js +122 -0
- package/dist/products/secrets.d.ts +22 -0
- package/dist/products/secrets.js +8 -0
- package/dist/products/volumes.d.ts +3 -0
- package/dist/sandbox.d.ts +4 -0
- package/dist/sandbox.js +27 -2
- package/dist/snapshots.d.ts +4 -0
- package/dist/ssh.d.ts +35 -0
- package/dist/ssh.js +93 -1
- package/dist/transport.d.ts +14 -8
- package/dist/transport.js +70 -15
- package/dist/types.d.ts +33 -5
- package/dist/vercel/command.d.ts +48 -1
- package/dist/vercel/command.js +237 -6
- package/dist/vercel/sandbox-user.js +2 -1
- package/dist/vercel/sandbox.d.ts +17 -3
- package/dist/vercel/sandbox.js +46 -3
- package/dist/wallet.d.ts +4 -1
- package/dist/wallet.js +2 -1
- package/package.json +7 -14
- package/dist/cli/logs.test.d.ts +0 -1
- package/dist/cli/logs.test.js +0 -272
- package/dist/products/logs.test.d.ts +0 -1
- package/dist/products/logs.test.js +0 -343
package/README.src.md
CHANGED
|
@@ -31,11 +31,11 @@ console.log(result.exitCode, result.stdout);
|
|
|
31
31
|
`await using` deletes it when the block ends (Node 24, Bun or TypeScript; on
|
|
32
32
|
Node 22 call `await sbx.delete()`), and `keep: true` stops it instead, keeping
|
|
33
33
|
its disk. With no arguments you get the
|
|
34
|
-
|
|
34
|
+
free usage, with no card (up to
|
|
35
35
|
{{trial-sandboxes}} sandboxes running at once without credit), 2 vCPU, 4 GiB of
|
|
36
36
|
memory and a 4 GiB disk. The current default image includes NumPy, pandas and
|
|
37
37
|
matplotlib; see the [sandbox environment](https://withruntime.com/docs/sandbox-environment).
|
|
38
|
-
The
|
|
38
|
+
The free usage is spent first, then prepaid credit, with nothing to
|
|
39
39
|
choose; `funding` is accepted and ignored.
|
|
40
40
|
|
|
41
41
|
The sandbox object does the rest:
|
|
@@ -149,6 +149,21 @@ with its token. A Blaxel key is never sent anywhere. Drives, codegen, schedules
|
|
|
149
149
|
`NotSupportedError` before anything happens, naming what to use instead.
|
|
150
150
|
`BLAXEL.md` in this package lists every mapping and gap.
|
|
151
151
|
|
|
152
|
+
## Code written for Morph Cloud
|
|
153
|
+
|
|
154
|
+
`withruntime/morph` translates Morph's TypeScript client (`morphcloud`).
|
|
155
|
+
Change the import:
|
|
156
|
+
|
|
157
|
+
```ts no-run
|
|
158
|
+
import { MorphCloudClient } from "withruntime/morph"; // was: from "morphcloud"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Instances become sandboxes, snapshots Runtime snapshots, metadata labels and
|
|
162
|
+
HTTP services previews; `setup` caches by Morph's chain hash and `branch`
|
|
163
|
+
copies memory and processes. `stop` deletes the sandbox, as Morph's does.
|
|
164
|
+
SSH, reboot and a time limit set after start throw `CompatibilityError`
|
|
165
|
+
naming the alternative. `COMPATIBILITY.md` lists every mapping.
|
|
166
|
+
|
|
152
167
|
## Agent frameworks
|
|
153
168
|
|
|
154
169
|
`withruntime/openai-agents` is a sandbox client for the OpenAI Agents SDK's
|
|
@@ -185,6 +200,24 @@ connected yet, it offers `runtime_connect`, which walks you through the browser
|
|
|
185
200
|
approval. Remote clients add `https://api.withruntime.com/mcp` and sign in through
|
|
186
201
|
the browser, or send a bearer key.
|
|
187
202
|
|
|
203
|
+
## How Runtime compares
|
|
204
|
+
|
|
205
|
+
For typical agent work, Runtime costs {{saving-range}} less than {{rival-count}} other
|
|
206
|
+
sandbox providers at their published rates. These pages show the arithmetic,
|
|
207
|
+
each with the rates it used and the date they were read:
|
|
208
|
+
|
|
209
|
+
- [Best sandbox for AI agents](https://withruntime.com/compare/best-sandbox-for-ai-agents)
|
|
210
|
+
- Alternatives to [E2B](https://withruntime.com/compare/e2b-alternatives),
|
|
211
|
+
[Daytona](https://withruntime.com/compare/daytona-alternatives),
|
|
212
|
+
[Modal](https://withruntime.com/compare/modal-alternatives) and
|
|
213
|
+
[Vercel Sandbox](https://withruntime.com/compare/vercel-sandbox-alternatives)
|
|
214
|
+
- [E2B vs Daytona](https://withruntime.com/compare/e2b-vs-daytona), and
|
|
215
|
+
[every comparison](https://withruntime.com/compare)
|
|
216
|
+
- [The agent sandbox price index](https://withruntime.com/pricing/agent-sandbox-price-index):
|
|
217
|
+
every provider's rates, also as CSV and JSON
|
|
218
|
+
- [Sandbox cost calculator](https://withruntime.com/calculators/sandbox-cost-calculator)
|
|
219
|
+
and [Runtime's pricing](https://withruntime.com/pricing)
|
|
220
|
+
|
|
188
221
|
## Reliability and support
|
|
189
222
|
|
|
190
223
|
- **Status:** https://withruntime.com/status checks the API from outside every
|
package/VERCEL.md
CHANGED
|
@@ -16,11 +16,22 @@ from withruntime.vercel import sandbox # was: from vercel import sandbox
|
|
|
16
16
|
from withruntime.vercel.sandbox import sync as sandbox # was: from vercel.sandbox import sync as sandbox
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
The JavaScript mapping was checked against `@vercel/sandbox` 3.
|
|
20
|
-
|
|
21
|
-
(the `vercel.sandbox` module of `vercel` 0.
|
|
22
|
-
0.9.0
|
|
23
|
-
|
|
19
|
+
The JavaScript mapping was checked against `@vercel/sandbox` 3.8.0 on
|
|
20
|
+
15 October 2026. Python was checked against `vercel-sandbox` 0.9.1 on PyPI
|
|
21
|
+
(the `vercel.sandbox` module of `vercel` 0.12.0) on 15 October 2026.
|
|
22
|
+
0.9.0 added `get_drive`, which raises `NotSupportedError` like the other
|
|
23
|
+
Drive calls.
|
|
24
|
+
|
|
25
|
+
Python review, 15 October 2026: each pinned wheel and sdist matched its
|
|
26
|
+
SHA-256 in `compatibility-lock.json`, each new one the PyPI digest, and each
|
|
27
|
+
new wheel's source its sdist; they were compared file by file, nothing
|
|
28
|
+
installed or run. `vercel-sandbox` 0.9.1 changes only its version and its
|
|
29
|
+
`vercel-internal-core` floor (0.2.2); no sandbox source changes. `vercel`
|
|
30
|
+
0.12.0 moves `vercel.blob` into the separate `vercel-blob` package (a new
|
|
31
|
+
dependency), removing its own Blob code, and raises its floors
|
|
32
|
+
(`vercel-sandbox` 0.9.1). Blob is Vercel's storage product, which the
|
|
33
|
+
drop-in has never offered (`withruntime.vercel` exports `sandbox` and
|
|
34
|
+
`api`), so nothing changes; the inventory's 684 Python items are unchanged.
|
|
24
35
|
|
|
25
36
|
## Keys
|
|
26
37
|
|
|
@@ -125,6 +136,42 @@ Some differences are not refusals:
|
|
|
125
136
|
Vercel's `universal` has Python 3.14.
|
|
126
137
|
- A git source is cloned into the working directory itself.
|
|
127
138
|
|
|
139
|
+
## JavaScript qualification, 15 October 2026
|
|
140
|
+
|
|
141
|
+
Reviewed the exact published npm tarballs for `@vercel/sandbox` 3.6.1 → 3.7.0
|
|
142
|
+
→ 3.8.0 (3.7.0 is the only stable release between them). 3.6.1 matched its
|
|
143
|
+
SHA-512 in `compatibility-lock.json`; 3.7.0 and 3.8.0 matched
|
|
144
|
+
`npm view @vercel/sandbox@<version> dist.integrity` (3.8.0:
|
|
145
|
+
`sha512-2ib+Dl8W...`). No downloaded package code was installed or executed
|
|
146
|
+
outside the oracle's frozen install.
|
|
147
|
+
|
|
148
|
+
The source maps name six changed TypeScript files and one new one
|
|
149
|
+
(`utils/pipe-stdin.ts`); CommonJS and ES-module builds match. `index.d.ts`
|
|
150
|
+
exports nothing new. The changes and their dispositions:
|
|
151
|
+
|
|
152
|
+
| Upstream change | Drop-in disposition |
|
|
153
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
154
|
+
| 3.7.0: `runCommand({ stdin: true, detached: true })` keeps the command's stdin open; `stdin: true` without `detached` throws `TypeError` before anything runs. Unset or false, stdin is empty, as before. | Followed. The process is spawned with Runtime's piped stdin (`stdinMode: "pipe"`); the same `TypeError` message is thrown before any request. Without `stdin`, nothing changes. |
|
|
155
|
+
| 3.7.0: `Command.writeStdin(data, { abortSignal })` and `closeStdin({ abortSignal })`. Writes are queued in call order, chunked, resent with byte offsets so retries never duplicate; after a write that may be partial, later writes are refused (`closeStdin` still works). | Followed on Runtime's process input (`:write` with `offset` and `eof`), which already resends by offset, so no byte is written twice. Writes are queued in call order. A failed write refuses later ones with upstream's message, unless the API rejected a single request with a 4xx, which applied none of it. A `Command` from `getCommand` reads its offset from the process. |
|
|
156
|
+
| 3.7.0: `CommandFinished.writeStdin`/`closeStdin` always throw: the command has exited. | Followed with the same messages. |
|
|
157
|
+
| 3.7.0: `stdin` may be a `Readable`, attached or detached. It is written with backpressure and stdin closes when it ends; the stream is never ended or destroyed. Attached: a piping failure kills the command and rejects `runCommand`. Detached: `wait()` rejects (and `stdinPipe` clears). The command exiting or no longer accepting input (404, `command_stdin_unavailable`) stops piping quietly. `Command.stdinPipe` is the (internal) pipe. | Followed. An attached command with a stream starts as a process and waits on its output, streaming to `stdout`/`stderr` writers as before. Reading pauses past 512 KiB waiting. Runtime's "input closed" answer (409 `stdin_closed`) or a 404 stops piping quietly, as upstream's does. `stdinPipe` is exposed the same way. |
|
|
158
|
+
| 3.7.0: `SandboxUser.runCommand` passes `stdin`; 3.8.0 also passes `onStart`. | Followed: both reach the sandbox's `runCommand` through the user's `sudo -u` wrapper. |
|
|
159
|
+
| 3.8.0: `runCommand({ onStart })`, only when not detached (the type forbids it with `detached: true`; upstream ignores it there): called with the running `Command` as soon as it starts and awaited before `runCommand` resolves. | Followed with the same type. The command starts as a Runtime process so its `Command` (id, `kill`, `logs`) exists before it exits; output and truncation are reported as for any attached command. |
|
|
160
|
+
| `APIClient.writeCommandStdin` and its stdin retry policy (429 `Retry-After`, 502/503/504 resends, offset probes); `CommandStdinResponse` validator. | Internal; `APIClient` is not exported. Runtime's transport and offsets cover resends. |
|
|
161
|
+
| `@vercel/oidc` 3.2.0 → 4.0.0 (now depending on `@vercel/cli-config` and `@vercel/cli-exec`). | The drop-in never uses Vercel OIDC: a Vercel or OIDC token still throws `AuthenticationError`. Only the oracle's lock changes. |
|
|
162
|
+
| Declarations reorder existing status union members; README documents stdin; the package and internal version advance. | No adapter change. |
|
|
163
|
+
|
|
164
|
+
`tests/vercel-3-8.test.ts` (12 cases) runs the real Runtime transport over
|
|
165
|
+
controlled HTTP: piped spawn, write order and offsets, the `TypeError`,
|
|
166
|
+
empty stdin by default, finished-command refusals, partial-write refusal and
|
|
167
|
+
4xx recovery, an attached and a detached `Readable` (end, failure with kill,
|
|
168
|
+
quiet stop on `stdin_closed`), `onStart` ordering and `SandboxUser`
|
|
169
|
+
pass-through. Eleven fail before the adapter change (the twelfth, empty stdin
|
|
170
|
+
by default, guards existing behaviour). They do not prove live-host
|
|
171
|
+
behaviour; the provider remains `partial`. `compat-inventory.json` now counts
|
|
172
|
+
`writeStdin`, `closeStdin`, `stdinPipe` and the `stdin`/`onStart` options
|
|
173
|
+
present (and `CommandFinished`'s stdin calls refused, as upstream's are).
|
|
174
|
+
|
|
128
175
|
## JavaScript qualification, 8 October 2026
|
|
129
176
|
|
|
130
177
|
Reviewed the exact published npm tarballs for `@vercel/sandbox` 3.5.1 → 3.6.1.
|
package/compatibility-lock.json
CHANGED
|
@@ -9,35 +9,35 @@
|
|
|
9
9
|
{
|
|
10
10
|
"registry": "npm",
|
|
11
11
|
"name": "e2b",
|
|
12
|
-
"version": "2.
|
|
12
|
+
"version": "2.56.0",
|
|
13
13
|
"artifacts": {
|
|
14
|
-
"2.
|
|
14
|
+
"2.56.0": "sha512-67vAYTERArdKrPujKnAVZuiIKLFX3vQT2gh1+TFphwEmYcXfU2iGKraRxpwn9qWIdUPFVym+KOo+QFhnySWYNQ=="
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"registry": "npm",
|
|
19
19
|
"name": "@e2b/code-interpreter",
|
|
20
|
-
"version": "2.
|
|
20
|
+
"version": "2.9.0",
|
|
21
21
|
"artifacts": {
|
|
22
|
-
"2.
|
|
22
|
+
"2.9.0": "sha512-ZLO3ayZ0N5kMbKFtgfMSiTa3ppzkybEZgI89XJa55gTv+AvuddO17oFUioeJty3aefhVOnMYiALWfCSxeCKhVA=="
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
"registry": "pypi",
|
|
27
27
|
"name": "e2b",
|
|
28
|
-
"version": "2.
|
|
28
|
+
"version": "2.56.0",
|
|
29
29
|
"artifacts": {
|
|
30
|
-
"e2b-2.
|
|
31
|
-
"e2b-2.
|
|
30
|
+
"e2b-2.56.0-py3-none-any.whl": "sha256-acfb77c56a33daf1542362cab8048f062b578dffe7a48f32f87a4a3e0bef1e14",
|
|
31
|
+
"e2b-2.56.0.tar.gz": "sha256-942a5b0a915e4125bb4cad0aaa17fb3dc891d3b43e31fb8e2fb5ac24b0fef394"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"registry": "pypi",
|
|
36
36
|
"name": "e2b-code-interpreter",
|
|
37
|
-
"version": "2.
|
|
37
|
+
"version": "2.11.0",
|
|
38
38
|
"artifacts": {
|
|
39
|
-
"e2b_code_interpreter-2.
|
|
40
|
-
"e2b_code_interpreter-2.
|
|
39
|
+
"e2b_code_interpreter-2.11.0-py3-none-any.whl": "sha256-33dd24820da40343ae262344fd92f825b3410ad54ebb94c4d92773dae12d1713",
|
|
40
|
+
"e2b_code_interpreter-2.11.0.tar.gz": "sha256-f5ef15c8fdc9079541b01f574d231727bdc1b842c515b506bb6335fbab657a3b"
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
]
|
|
@@ -49,42 +49,42 @@
|
|
|
49
49
|
{
|
|
50
50
|
"registry": "npm",
|
|
51
51
|
"name": "@daytona/sdk",
|
|
52
|
-
"version": "0.
|
|
52
|
+
"version": "0.224.1",
|
|
53
53
|
"artifacts": {
|
|
54
|
-
"0.
|
|
54
|
+
"0.224.1": "sha512-ZQCY9qOXnAXpYD8KhMzn27VNk6KYfBYCpHhij5Th36+fMXfG8qpxvnb3xau/H7ZWN1HPBhlzjaHHn/J+ZhH/OQ=="
|
|
55
55
|
}
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"registry": "pypi",
|
|
59
59
|
"name": "daytona",
|
|
60
|
-
"version": "0.
|
|
60
|
+
"version": "0.224.1",
|
|
61
61
|
"artifacts": {
|
|
62
|
-
"daytona-0.
|
|
63
|
-
"daytona-0.
|
|
62
|
+
"daytona-0.224.1-py3-none-any.whl": "sha256-2dedf1ef0c5f98dd0c3a70ab130284abdd7414a3b8a6f6452842c4f5dcc2a583",
|
|
63
|
+
"daytona-0.224.1.tar.gz": "sha256-02d5a2fa8099f18503310a80b6b807c5fb18863738c13026ea4dad21a454a831"
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"registry": "npm",
|
|
68
68
|
"name": "@daytona/api-client",
|
|
69
|
-
"version": "0.
|
|
69
|
+
"version": "0.224.1",
|
|
70
70
|
"artifacts": {
|
|
71
|
-
"0.
|
|
71
|
+
"0.224.1": "sha512-RFsDcGuifpyKnUHlfTLC9jDXXg7ZwciKlzmy0MBGcG5VKSRdwlRyqCaM9g6/k7m5eQ+N1ieQR2JAjZnVWn23YQ=="
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"registry": "npm",
|
|
76
76
|
"name": "@daytona/toolbox-api-client",
|
|
77
|
-
"version": "0.
|
|
77
|
+
"version": "0.224.1",
|
|
78
78
|
"artifacts": {
|
|
79
|
-
"0.
|
|
79
|
+
"0.224.1": "sha512-fiuBJedfubBMoLh1Z7VdAWsgnQaYGsQMZoAGV12IZ3R5D/ELFATd4tq/jW1mhSl7X27lxqSmtkHvaQt3ELRNPA=="
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"registry": "npm",
|
|
84
84
|
"name": "@daytona/analytics-api-client",
|
|
85
|
-
"version": "0.
|
|
85
|
+
"version": "0.224.1",
|
|
86
86
|
"artifacts": {
|
|
87
|
-
"0.
|
|
87
|
+
"0.224.1": "sha512-CDW5CWbf5Ql0h31uZDD0vcOjJ8T0KimARqgni6gc9YICAoN0tx3getO4CDySTgjJpiYwH1qw4zlJs+h36L0T8w=="
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
]
|
|
@@ -96,27 +96,27 @@
|
|
|
96
96
|
{
|
|
97
97
|
"registry": "npm",
|
|
98
98
|
"name": "@vercel/sandbox",
|
|
99
|
-
"version": "3.
|
|
99
|
+
"version": "3.8.0",
|
|
100
100
|
"artifacts": {
|
|
101
|
-
"3.
|
|
101
|
+
"3.8.0": "sha512-2ib+Dl8WG898OBmtep33UtE6pGbvNA9WClT7NHqQ0tch1Lq1OjQ/gmfjDT32C3HvyPA4YBXoLiJDVWZXURQW8w=="
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"registry": "pypi",
|
|
106
106
|
"name": "vercel",
|
|
107
|
-
"version": "0.
|
|
107
|
+
"version": "0.12.0",
|
|
108
108
|
"artifacts": {
|
|
109
|
-
"vercel-0.
|
|
110
|
-
"vercel-0.
|
|
109
|
+
"vercel-0.12.0-py3-none-any.whl": "sha256-1075d70fb0da3a62469360f8ee08da93e8c6aef7bfb125e4df33cee27c182c8d",
|
|
110
|
+
"vercel-0.12.0.tar.gz": "sha256-88f21af66e0ddd39bf640994366a4a327dc581abd3824482abe64be38f5e5fa7"
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
"registry": "pypi",
|
|
115
115
|
"name": "vercel-sandbox",
|
|
116
|
-
"version": "0.9.
|
|
116
|
+
"version": "0.9.1",
|
|
117
117
|
"artifacts": {
|
|
118
|
-
"vercel_sandbox-0.9.
|
|
119
|
-
"vercel_sandbox-0.9.
|
|
118
|
+
"vercel_sandbox-0.9.1-py3-none-any.whl": "sha256-ff4d51d66e5d4ab5a37559d7828706ea5f77c95cc7d34ba3590d590d71fb7f92",
|
|
119
|
+
"vercel_sandbox-0.9.1.tar.gz": "sha256-3aa377e771acdac99d2370a8586fef354b732a73e944fc8de434ddab8e169970"
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
]
|
|
@@ -128,18 +128,18 @@
|
|
|
128
128
|
{
|
|
129
129
|
"registry": "npm",
|
|
130
130
|
"name": "@blaxel/core",
|
|
131
|
-
"version": "0.3.
|
|
131
|
+
"version": "0.3.30",
|
|
132
132
|
"artifacts": {
|
|
133
|
-
"0.3.
|
|
133
|
+
"0.3.30": "sha512-By64a1IAd68RSZNgBuTlt7sh+V9iKwyCh9KoAzEbsWoKvf/wfD5s9rLSV4Nf0DLgAOyVqEGES8NTxgoqTHNM/g=="
|
|
134
134
|
}
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
"registry": "pypi",
|
|
138
138
|
"name": "blaxel",
|
|
139
|
-
"version": "0.4.
|
|
139
|
+
"version": "0.4.18",
|
|
140
140
|
"artifacts": {
|
|
141
|
-
"blaxel-0.4.
|
|
142
|
-
"blaxel-0.4.
|
|
141
|
+
"blaxel-0.4.18-py3-none-any.whl": "sha256-a6ed0c49798c21933e842cb9baba268a242bf7a4db6ecd411f48457f47933095",
|
|
142
|
+
"blaxel-0.4.18.tar.gz": "sha256-77f23b3b5771e0bfc512c94692c8d1b6d10845d7cac1ae24a66bedd08c25a146"
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
]
|
|
@@ -211,9 +211,32 @@
|
|
|
211
211
|
{
|
|
212
212
|
"registry": "npm",
|
|
213
213
|
"name": "freestyle",
|
|
214
|
-
"version": "0.2.
|
|
214
|
+
"version": "0.2.20",
|
|
215
215
|
"artifacts": {
|
|
216
|
-
"0.2.
|
|
216
|
+
"0.2.20": "sha512-IElfZHSGQO93RUUd9rqluWF69xyp5Kp0GII3JvrlZJpkZ/2nInFoDkfObOT6e2yyt+2hOdPR75BV9HqNwLCvkA=="
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "morph",
|
|
223
|
+
"status": "partial",
|
|
224
|
+
"upstreams": [
|
|
225
|
+
{
|
|
226
|
+
"registry": "npm",
|
|
227
|
+
"name": "morphcloud",
|
|
228
|
+
"version": "0.0.20",
|
|
229
|
+
"artifacts": {
|
|
230
|
+
"0.0.20": "sha512-zcExVlRmQCcOz7pjcLXTSy2caNrRGx/b1DCz7r9YfzYfThA6IHO4Wafd6KFKtsubm6U5Ag/67cjoa7FDOk5T5g=="
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"registry": "pypi",
|
|
235
|
+
"name": "morphcloud",
|
|
236
|
+
"version": "0.1.115",
|
|
237
|
+
"artifacts": {
|
|
238
|
+
"morphcloud-0.1.115-py3-none-any.whl": "sha256-f41f9e51dae3b7837c5a932c0e8e720d0722429f7bfd261ade89a14bbebdbff6",
|
|
239
|
+
"morphcloud-0.1.115.tar.gz": "sha256-ffd08a4cb906c5b188728e4d3e9e0cf60d9596dcdc7a9a57591a62399691cdcc"
|
|
217
240
|
}
|
|
218
241
|
}
|
|
219
242
|
]
|
|
@@ -225,47 +248,10 @@
|
|
|
225
248
|
{
|
|
226
249
|
"registry": "pypi",
|
|
227
250
|
"name": "prime-sandboxes",
|
|
228
|
-
"version": "0.4.
|
|
251
|
+
"version": "0.4.5",
|
|
229
252
|
"artifacts": {
|
|
230
|
-
"prime_sandboxes-0.4.
|
|
231
|
-
"prime_sandboxes-0.4.
|
|
232
|
-
},
|
|
233
|
-
"latestReview": {
|
|
234
|
-
"version": "0.4.3",
|
|
235
|
-
"artifacts": {
|
|
236
|
-
"prime_sandboxes-0.4.3-py3-none-any.whl": "sha256-dd26007838c25b5d38a8b7af0514c07027b783406c0ea5b9fcf0eb74a45139bd",
|
|
237
|
-
"prime_sandboxes-0.4.3.tar.gz": "sha256-a2169182f74307485c73f897e224c978eba3276133ddb40715be4d346594c487"
|
|
238
|
-
},
|
|
239
|
-
"reviewedAt": "2026-10-08",
|
|
240
|
-
"disposition": "held-for-sdk-qualification",
|
|
241
|
-
"evidence": {
|
|
242
|
-
"sourceUrls": [
|
|
243
|
-
"https://pypi.org/pypi/prime-sandboxes/0.4.3/json",
|
|
244
|
-
"https://files.pythonhosted.org/packages/d8/1b/01e02c9d2346956f5ed77d269f836905a017ad796a4b4c719debd8942dc4/prime_sandboxes-0.4.3.tar.gz",
|
|
245
|
-
"https://files.pythonhosted.org/packages/e1/5f/d0b5cd1dabdb6e5cb1ab5d84c8ba9a96e2a9a0be8913ec9db9177c9645fb/prime_sandboxes-0.4.3-py3-none-any.whl",
|
|
246
|
-
"https://github.com/PrimeIntellect-ai/prime/tree/main/packages/prime-sandboxes"
|
|
247
|
-
],
|
|
248
|
-
"artifactSha256": {
|
|
249
|
-
"prime_sandboxes-0.4.3-py3-none-any.whl": "dd26007838c25b5d38a8b7af0514c07027b783406c0ea5b9fcf0eb74a45139bd",
|
|
250
|
-
"prime_sandboxes-0.4.3.tar.gz": "a2169182f74307485c73f897e224c978eba3276133ddb40715be4d346594c487"
|
|
251
|
-
},
|
|
252
|
-
"changes": [
|
|
253
|
-
"Source diff of the 0.4.1 and 0.4.2 sdists, downloaded and hashed on the Mac, nothing installed or run: README, __init__, models.py, sandbox.py, one test changed; tests/test_checkpoints.py added.",
|
|
254
|
-
"Adds filesystem checkpoints: SandboxCheckpoint, CheckpointLookupError and BatchCheckpointResponse models; checkpoint, get_checkpoint, get_checkpoints (batch of up to 100 ids), wait_for_checkpoint and list_checkpoints on the sync and async clients; CreateSandboxRequest takes checkpoint_id with a validate_restore_source check.",
|
|
255
|
-
"CreateSandboxRequest.docker_image becomes Optional (None when restoring from a checkpoint) and disk_size_gb's default 5.0 becomes None.",
|
|
256
|
-
"Background job launch: the working_dir prefix is 'cd DIR || exit 1;' instead of 'cd DIR &&', and the launch cwd is / for an absolute working_dir.",
|
|
257
|
-
"Source diff of the 0.4.2 and 0.4.3 sdists, downloaded and hashed on the Mac, nothing installed or run; the wheel's package source matched the sdist's: __init__, core/client.py, models.py, sandbox.py and tests/test_checkpoints.py changed.",
|
|
258
|
-
"Adds checkpoint deletion: delete_checkpoint (DELETE /sandbox/checkpoints/{id}, 409 while pending or the active tip) and delete_sandbox_checkpoints (DELETE /sandbox/{id}/checkpoints) on the sync and async clients, with DeleteSandboxCheckpointsResponse and CheckpointDeleteError (NOT_FOUND or CONFLICT) models exported.",
|
|
259
|
-
"The core client returns {} for an HTTP 204 instead of parsing an empty body.",
|
|
260
|
-
"No existing method was removed or renamed. Installed consumer qualification against withruntime/prime is not run; the supported pin stays 0.4.1."
|
|
261
|
-
]
|
|
262
|
-
},
|
|
263
|
-
"between": {
|
|
264
|
-
"0.4.2": {
|
|
265
|
-
"prime_sandboxes-0.4.2-py3-none-any.whl": "sha256-ed59f001c7575339d6c903166c5468f783eda0997586ec6476fd8b35f65746f9",
|
|
266
|
-
"prime_sandboxes-0.4.2.tar.gz": "sha256-4990a724cac0a662fde6e12e7eccfee092a78679cc568653b8ef52008dfa28e4"
|
|
267
|
-
}
|
|
268
|
-
}
|
|
253
|
+
"prime_sandboxes-0.4.5-py3-none-any.whl": "sha256-3f24ed4830d2d823169fdb2df75de3b8355224bf867c0208d47eab0d3b33bb33",
|
|
254
|
+
"prime_sandboxes-0.4.5.tar.gz": "sha256-4f7b7e50d3d60d3b459fb3ace5713e7d9eb136ac0aa79cf0e7ee7c75c63b0d82"
|
|
269
255
|
}
|
|
270
256
|
}
|
|
271
257
|
]
|
|
@@ -277,45 +263,18 @@
|
|
|
277
263
|
{
|
|
278
264
|
"registry": "npm",
|
|
279
265
|
"name": "modal",
|
|
280
|
-
"version": "0.11.
|
|
266
|
+
"version": "0.11.1",
|
|
281
267
|
"artifacts": {
|
|
282
|
-
"0.11.
|
|
268
|
+
"0.11.1": "sha512-RVb84wPZGG4zd3q2Fuww/ku5kZbp9sDkSUVqIc2VdKa+2QQyuqM/puVDbeVze8XN9tdUp9IJZRbdECJmz56TeQ=="
|
|
283
269
|
}
|
|
284
270
|
},
|
|
285
271
|
{
|
|
286
272
|
"registry": "pypi",
|
|
287
273
|
"name": "modal",
|
|
288
|
-
"version": "1.6.
|
|
274
|
+
"version": "1.6.2",
|
|
289
275
|
"artifacts": {
|
|
290
|
-
"modal-1.6.
|
|
291
|
-
"modal-1.6.
|
|
292
|
-
},
|
|
293
|
-
"latestReview": {
|
|
294
|
-
"version": "1.6.1",
|
|
295
|
-
"artifacts": {
|
|
296
|
-
"modal-1.6.1-py3-none-any.whl": "sha256-f408ef88563003a83e491a6be09d4221eaa6e038fa4faa2ad8b15b25afe949a4",
|
|
297
|
-
"modal-1.6.1.tar.gz": "sha256-ff17768f67a65595aa7882e893e6cb78e2e001b3653aa52cfe98d4051d8d9e9e"
|
|
298
|
-
},
|
|
299
|
-
"reviewedAt": "2026-10-03",
|
|
300
|
-
"disposition": "held-for-sdk-qualification",
|
|
301
|
-
"evidence": {
|
|
302
|
-
"sourceUrls": [
|
|
303
|
-
"https://pypi.org/pypi/modal/1.6.1/json",
|
|
304
|
-
"https://files.pythonhosted.org/packages/65/ba/2b36899ea5633bf101e6ba6f7e95a4da3e4b1f57f52bd0ba8f4cfd12e808/modal-1.6.1.tar.gz",
|
|
305
|
-
"https://files.pythonhosted.org/packages/d2/3c/6b7d9a15dab9af2833ce674bbc72b5654d4099d5b088f1cc1eda3f8249ca/modal-1.6.1-py3-none-any.whl"
|
|
306
|
-
],
|
|
307
|
-
"artifactSha256": {
|
|
308
|
-
"modal-1.6.1-py3-none-any.whl": "f408ef88563003a83e491a6be09d4221eaa6e038fa4faa2ad8b15b25afe949a4",
|
|
309
|
-
"modal-1.6.1.tar.gz": "ff17768f67a65595aa7882e893e6cb78e2e001b3653aa52cfe98d4051d8d9e9e"
|
|
310
|
-
},
|
|
311
|
-
"changes": [
|
|
312
|
-
"Source diff of the 1.6.0 and 1.6.1 sdists, downloaded and hashed on the Mac, nothing installed or run; the 1.6.0 hashes match the pin. No file added or removed; 37 files changed, most in sandbox.py, the CLI and the generated protos.",
|
|
313
|
-
"Sandbox v2 calls send a per-sandbox token (x-modal-sandbox-token, from the create response) beside the auth token through a new _v2_metadata helper, including command router access.",
|
|
314
|
-
"Experimental sidecars take include_oidc_identity_token and proxy, refused for GPU sandboxes. Server sessions retry start with an idempotency key for up to 25 minutes; the CLI gains endpoint commands; stats types gain container_total_count; agent detection reads tool variables before AGENT and AI_AGENT.",
|
|
315
|
-
"Requirements: protobuf below 8.0 instead of 7.0, synchronicity ~=0.12.6 instead of ~=0.12.5. Some iterator return types become AsyncGenerator.",
|
|
316
|
-
"No public Sandbox, ContainerProcess, Image, App or file method used by withruntime/modal was removed or renamed; that drop-in does not import modal. Installed consumer qualification is not run; the supported pin stays 1.6.0."
|
|
317
|
-
]
|
|
318
|
-
}
|
|
276
|
+
"modal-1.6.2-py3-none-any.whl": "sha256-1a6c8409e315785137615601cac940de3d72462c0059b9cd0faf5d17615bacf0",
|
|
277
|
+
"modal-1.6.2.tar.gz": "sha256-f96bcd2de02abb74ac8ec3ff7d62400403633867a42c9c7b43f69f75ea00b952"
|
|
319
278
|
}
|
|
320
279
|
}
|
|
321
280
|
]
|
|
@@ -332,11 +291,12 @@
|
|
|
332
291
|
"0.12.10": "sha512-245s6xEdR1v0Jti0YYd8ORWcTG/f/ksjJfpubvnbky0KxFC/ZDOpbpNKdtyiRBYZqmJGtEncYW7Cwge47tDrpg=="
|
|
333
292
|
},
|
|
334
293
|
"unsupported": {
|
|
335
|
-
"version": "1.0.
|
|
294
|
+
"version": "1.0.1",
|
|
336
295
|
"artifacts": {
|
|
337
|
-
"1.0.0": "sha512-+TZVuCey6OBDTvPLWisq4Ie7/R5Zy3zFyYOFCNRpdEIyQsKq3xwzpctonE43DfZ+wYZvvu6QYpR138PayDjF+A=="
|
|
296
|
+
"1.0.0": "sha512-+TZVuCey6OBDTvPLWisq4Ie7/R5Zy3zFyYOFCNRpdEIyQsKq3xwzpctonE43DfZ+wYZvvu6QYpR138PayDjF+A==",
|
|
297
|
+
"1.0.1": "sha512-8Qvv2SbMGfDW+zo0AkwaDna+b+IbXPgMKjelu6UZla1jyTwt1Ye0Z4LEahwoXtIMbpQvopr9NvXtLm+abA7+Tw=="
|
|
338
298
|
},
|
|
339
|
-
"reason": "1.0 removes getSandbox, the Sandbox class, exec, processes, sessions and preview proxying and keeps only Files, S3Mount and DirectoryBackup for the caller's own Durable Object; withruntime/cloudflare implements the 0.x API"
|
|
299
|
+
"reason": "1.0 removes getSandbox, the Sandbox class, exec, processes, sessions and preview proxying and keeps only Files, S3Mount and DirectoryBackup for the caller's own Durable Object; withruntime/cloudflare implements the 0.x API. 1.0.1 keeps that API: the same runtime code, its declarations export the same names inline, zod moves from 4.5.4 to 4.6.5, and README example links change"
|
|
340
300
|
}
|
|
341
301
|
}
|
|
342
302
|
]
|
package/dist/billing-cli.js
CHANGED
|
@@ -184,7 +184,7 @@ async function walletCommand(verb, value, acceptTerms, wait, out, sleep, wallet)
|
|
|
184
184
|
let payBy = null;
|
|
185
185
|
if (verb === "topup") {
|
|
186
186
|
if (!acceptTerms)
|
|
187
|
-
throw usage("Opening an account means agreeing to https://withruntime.com/legal/terms. Add --accept-terms
|
|
187
|
+
throw usage("Opening an account means agreeing to https://withruntime.com/legal/terms. Add --accept-terms to agree to them for whoever you act for.");
|
|
188
188
|
const opened = await wallet.open({ usd: dollarsOf(value), acceptTerms: true });
|
|
189
189
|
code = opened.claimCode;
|
|
190
190
|
payBy = opened.payBy;
|
|
@@ -224,11 +224,15 @@ async function walletCommand(verb, value, acceptTerms, wait, out, sleep, wallet)
|
|
|
224
224
|
: `The top-up ${claim.status}: nothing was credited. Open a new one with \`${me} billing topup <usd> --new-account --accept-terms\`.`);
|
|
225
225
|
return 1;
|
|
226
226
|
}
|
|
227
|
-
|
|
227
|
+
// A top-up that never reached Stripe has no address: waiting cannot help.
|
|
228
|
+
const noAddress = claim.topup?.status === "open" && !claim.topup.networks.length;
|
|
229
|
+
if (noAddress || !wait || Date.now() >= until) {
|
|
228
230
|
out.write(out.json
|
|
229
231
|
? JSON.stringify(claim)
|
|
230
|
-
:
|
|
231
|
-
|
|
232
|
+
: noAddress
|
|
233
|
+
? (claim.next ?? "This top-up has no address to pay to yet.")
|
|
234
|
+
: `Not paid yet (${claim.status}). Run \`${me} billing claim ${code}\` again once the transfer has gone through.`);
|
|
235
|
+
return noAddress || wait ? 1 : 0;
|
|
232
236
|
}
|
|
233
237
|
}
|
|
234
238
|
}
|
package/dist/blaxel/client.d.ts
CHANGED
|
@@ -28,8 +28,19 @@ export interface Config {
|
|
|
28
28
|
clientId: string;
|
|
29
29
|
clientSecret: string;
|
|
30
30
|
};
|
|
31
|
+
/** Blaxel's product token for an integration built on the SDK
|
|
32
|
+
* (`<name>/<semver>`), which Blaxel appends to its User-Agent. Kept and
|
|
33
|
+
* checked as Blaxel does; never sent, as Runtime does not attribute traffic
|
|
34
|
+
* by it. */
|
|
35
|
+
integration?: string;
|
|
31
36
|
[key: string]: unknown;
|
|
32
37
|
}
|
|
38
|
+
/** Blaxel's `settings.integration`: the token given to `initialize` or set,
|
|
39
|
+
* then BL_INTEGRATION; `""` when none, or when it is not `<name>/<semver>`
|
|
40
|
+
* (warned once per value, as Blaxel does). */
|
|
41
|
+
export declare function integrationToken(): string;
|
|
42
|
+
/** Sets Blaxel's `settings.integration`; undefined goes back to BL_INTEGRATION. */
|
|
43
|
+
export declare function setIntegrationToken(value: string | undefined): void;
|
|
33
44
|
/** Blaxel's `initialize(config)`: a Runtime key given as `apikey` is used from
|
|
34
45
|
* then on. A Blaxel key is refused while RUNTIME_API_KEY is not set, and never
|
|
35
46
|
* sent. `workspace` means nothing on Runtime and is ignored. */
|
package/dist/blaxel/client.js
CHANGED
|
@@ -3,12 +3,38 @@ import { CredentialsError, NotSupportedError } from "./errors.js";
|
|
|
3
3
|
const env = (name) => typeof process === "undefined" ? undefined : process.env[name];
|
|
4
4
|
const isRuntimeKey = (key) => key.startsWith("rtcloud_");
|
|
5
5
|
let configured;
|
|
6
|
+
let integration;
|
|
7
|
+
let warnedIntegration;
|
|
8
|
+
/** Blaxel's check of an integration token: `<name>/<semver>`, lowercase name. */
|
|
9
|
+
const INTEGRATION_TOKEN = /^[a-z0-9][a-z0-9._-]*\/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
|
|
10
|
+
/** Blaxel's `settings.integration`: the token given to `initialize` or set,
|
|
11
|
+
* then BL_INTEGRATION; `""` when none, or when it is not `<name>/<semver>`
|
|
12
|
+
* (warned once per value, as Blaxel does). */
|
|
13
|
+
export function integrationToken() {
|
|
14
|
+
const value = integration ?? env("BL_INTEGRATION") ?? "";
|
|
15
|
+
if (!value)
|
|
16
|
+
return "";
|
|
17
|
+
if (!INTEGRATION_TOKEN.test(value)) {
|
|
18
|
+
if (warnedIntegration !== value) {
|
|
19
|
+
warnedIntegration = value;
|
|
20
|
+
console.warn(`Ignoring invalid Blaxel integration token ${JSON.stringify(value)}: expected <name>/<semver> with a lowercase name`);
|
|
21
|
+
}
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
/** Sets Blaxel's `settings.integration`; undefined goes back to BL_INTEGRATION. */
|
|
27
|
+
export function setIntegrationToken(value) {
|
|
28
|
+
integration = value;
|
|
29
|
+
}
|
|
6
30
|
/** Blaxel's `initialize(config)`: a Runtime key given as `apikey` is used from
|
|
7
31
|
* then on. A Blaxel key is refused while RUNTIME_API_KEY is not set, and never
|
|
8
32
|
* sent. `workspace` means nothing on Runtime and is ignored. */
|
|
9
33
|
export function initialize(config = {}) {
|
|
10
34
|
if (config.clientCredentials !== undefined)
|
|
11
35
|
throw new NotSupportedError("Blaxel client credentials (clientCredentials)", "Use a Runtime key: set RUNTIME_API_KEY, or run `npx withruntime login` once.");
|
|
36
|
+
if ("integration" in config)
|
|
37
|
+
integration = config.integration;
|
|
12
38
|
const key = config.apikey ?? config.apiKey;
|
|
13
39
|
if (key === undefined || key === "")
|
|
14
40
|
return;
|
|
@@ -51,6 +77,8 @@ export function clientFor(options = {}) {
|
|
|
51
77
|
export function resetClients() {
|
|
52
78
|
clients.clear();
|
|
53
79
|
configured = undefined;
|
|
80
|
+
integration = undefined;
|
|
81
|
+
warnedIntegration = undefined;
|
|
54
82
|
}
|
|
55
83
|
/** Blaxel's default region, from BL_REGION. */
|
|
56
84
|
export function defaultRegion() {
|
package/dist/blaxel/errors.d.ts
CHANGED
|
@@ -63,3 +63,68 @@ export declare function guard<T>(work: () => Promise<T>): Promise<T>;
|
|
|
63
63
|
export declare function isNotFound(error: unknown): boolean;
|
|
64
64
|
/** Runtime's error code on either shape. */
|
|
65
65
|
export declare function codeOf(error: unknown): string | undefined;
|
|
66
|
+
/** Codes Blaxel's edge gateway returns. */
|
|
67
|
+
export type BlaxelGatewayErrorCode = "ROUTE_NOT_FOUND" | "WORKLOAD_NOT_FOUND" | "WORKSPACE_NOT_FOUND" | "WORKLOAD_UNAVAILABLE" | "WORKLOAD_FAILED" | "ROUTING_UNAVAILABLE" | "AUTHENTICATION_REQUIRED" | "AUTHENTICATION_FAILED" | "TOKEN_REVOKED" | "FORBIDDEN" | "BAD_REQUEST" | "USAGE_LIMIT_EXCEEDED" | "POLICY_VIOLATION" | "UPSTREAM_CONNECT_FAILED" | "UPSTREAM_CONNECT_TIMEOUT" | "UPSTREAM_ERROR" | "UPSTREAM_TIMEOUT" | "GATEWAY_INTERNAL_ERROR";
|
|
68
|
+
/** Blaxel's authentication codes from sandbox creation and fork. */
|
|
69
|
+
export type BlaxelAuthErrorCode = "TOKEN_REVOKED" | "UNAUTHORIZED" | "UNAUTHORIZED_WORKSPACE" | "AUTHENTICATION_UNAVAILABLE" | "WORKSPACE_REQUIRED";
|
|
70
|
+
/** Blaxel's codes for creating or forking a sandbox. */
|
|
71
|
+
export type BlaxelSandboxCreationErrorCode = "READ_FAILED" | "PARSE_FAILED" | "VALIDATION_FAILED" | "VALIDATION_ERROR" | "INVALID_INPUT" | "INVALID_IMAGE" | "IMAGE_NOT_FOUND" | "UPLOAD_NOT_SUPPORTED" | "UNSUPPORTED_GENERATION" | "KERNEL_GENERATION_MISMATCH" | "INVALID_PORTS" | "INVALID_REGION" | "REGION_MISMATCH" | "INVALID_VOLUME" | "INVALID_VOLUME_COUNT" | "INVALID_VOLUME_REGION" | "VOLUME_ALREADY_ATTACHED" | "VOLUME_PROVIDER_MISMATCH" | "VOLUME_NOT_FOUND" | "WORKSPACE_NOT_FOUND" | "ACCOUNT_NOT_FOUND" | "SANDBOX_ALREADY_EXISTS" | "SANDBOX_DELETION_IN_PROGRESS" | "SANDBOX_DELETED" | "VOLUME_DELETED" | "CREATION_TIMEOUT" | "QUOTA_EXCEEDED" | "RATE_LIMIT_EXCEEDED" | "WORKSPACE_RATE_LIMIT_EXCEEDED" | "SERVICE_UNAVAILABLE" | "DATABASE_ERROR" | "LOCK_ACQUISITION_FAILED" | "VOLUME_LOOKUP_FAILED" | "BUILD_TRIGGER_ERROR" | "PRESIGNED_URL_ERROR" | "UPLOAD_UNAVAILABLE" | "DEPLOYMENT_FAILED" | "CLUSTER_GATEWAY_ERROR" | "LOCKDOWN_ERROR" | "PROXY_CONFIG_ERROR" | "VALIDATED_DATA_ERROR" | "WORKSPACE_DATA_MISSING" | "CALLBACK_SEND_FAILED" | "FORK_FAILED" | "HANDLER_ERROR" | "INTERNAL_ERROR" | "UNKNOWN_ERROR";
|
|
72
|
+
export type BlaxelErrorCode = BlaxelGatewayErrorCode | BlaxelAuthErrorCode | BlaxelSandboxCreationErrorCode;
|
|
73
|
+
export type BlaxelErrorCodeValue = BlaxelErrorCode | (string & Record<never, never>) | number;
|
|
74
|
+
export type BlaxelApiErrorBody = {
|
|
75
|
+
error: string;
|
|
76
|
+
code: number;
|
|
77
|
+
};
|
|
78
|
+
export type BlaxelActionErrorBody = {
|
|
79
|
+
code: BlaxelSandboxCreationErrorCode | BlaxelAuthErrorCode | (string & Record<never, never>);
|
|
80
|
+
message: string;
|
|
81
|
+
status_code: number;
|
|
82
|
+
reason?: string;
|
|
83
|
+
step?: string;
|
|
84
|
+
workspace?: string;
|
|
85
|
+
sandbox_name?: string;
|
|
86
|
+
timestamp?: string;
|
|
87
|
+
cause?: string;
|
|
88
|
+
details?: Record<string, unknown>;
|
|
89
|
+
};
|
|
90
|
+
export type BlaxelPlatformErrorBody = {
|
|
91
|
+
error: {
|
|
92
|
+
code: BlaxelGatewayErrorCode | (string & Record<never, never>);
|
|
93
|
+
message: string;
|
|
94
|
+
status: number;
|
|
95
|
+
origin?: "platform";
|
|
96
|
+
retryable?: boolean;
|
|
97
|
+
dispatch_state?: "not_dispatched" | "dispatched_unknown";
|
|
98
|
+
safe_to_retry_request?: boolean;
|
|
99
|
+
action?: string;
|
|
100
|
+
do_not?: string;
|
|
101
|
+
docs_url?: string;
|
|
102
|
+
timestamp?: string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
export type BlaxelSandboxApiErrorBody = {
|
|
106
|
+
error: string;
|
|
107
|
+
};
|
|
108
|
+
export type BlaxelErrorLike = ResponseError | SandboxCreationTimeoutError | BlaxelApiErrorBody | Pick<BlaxelActionErrorBody, "code" | "message" | "status_code"> | {
|
|
109
|
+
error: Pick<BlaxelPlatformErrorBody["error"], "code" | "message" | "status">;
|
|
110
|
+
};
|
|
111
|
+
/** True for an error this package throws for an API failure (ResponseError,
|
|
112
|
+
* SandboxGatewayError, SandboxCreationTimeoutError) or a raw Blaxel error body
|
|
113
|
+
* (`{ error, code }`, `{ code, message, status_code }`,
|
|
114
|
+
* `{ error: { code, message, status } }`). False for plain errors, strings and
|
|
115
|
+
* NotSupportedError, which is a refusal made here, not an API failure. Never
|
|
116
|
+
* throws. */
|
|
117
|
+
export declare function isBlaxelError(err: unknown): err is BlaxelErrorLike;
|
|
118
|
+
/** The error's code, then its body's, then the X-Blaxel-Error-Code header. A
|
|
119
|
+
* ResponseError from Runtime answers its HTTP status (its `code`); Runtime's
|
|
120
|
+
* own code is `runtimeCode`. Never throws. */
|
|
121
|
+
export declare function getBlaxelErrorCode(err: unknown): BlaxelErrorCodeValue | undefined;
|
|
122
|
+
/** The HTTP status: the error's, its response's, then its body's (`status`,
|
|
123
|
+
* `status_code` or a numeric `code`). Never throws. */
|
|
124
|
+
export declare function getBlaxelErrorStatus(err: unknown): number | undefined;
|
|
125
|
+
/** The error's message, else its body's message or error text. Never throws. */
|
|
126
|
+
export declare function getBlaxelErrorMessage(err: unknown): string | undefined;
|
|
127
|
+
/** Blaxel's request id headers (X-Cf-Request-Id, X-Amz-Cf-Id, CF-Ray) on the
|
|
128
|
+
* error's response, else the Runtime request id a ResponseError carries
|
|
129
|
+
* (`requestId`). Never throws. */
|
|
130
|
+
export declare function getBlaxelErrorRequestId(err: unknown): string | undefined;
|