@blaxel/core 0.3.27 → 0.3.29-preview.319
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/common/settings.js +2 -2
- package/dist/cjs/image/image.js +12 -7
- package/dist/cjs/image/image.test.js +18 -9
- package/dist/cjs/types/image/image.browser.d.ts +4 -0
- package/dist/cjs/types/image/image.d.ts +9 -5
- package/dist/cjs-browser/.tsbuildinfo +1 -1
- package/dist/cjs-browser/common/settings.js +2 -2
- package/dist/cjs-browser/image/image.test.js +18 -9
- package/dist/cjs-browser/types/image/image.browser.d.ts +4 -0
- package/dist/cjs-browser/types/image/image.d.ts +9 -5
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/common/settings.js +2 -2
- package/dist/esm/image/image.js +12 -7
- package/dist/esm/image/image.test.js +18 -9
- package/dist/esm-browser/.tsbuildinfo +1 -1
- package/dist/esm-browser/common/settings.js +2 -2
- package/dist/esm-browser/image/image.test.js +18 -9
- package/package.json +1 -1
|
@@ -30,8 +30,8 @@ function missingCredentialsMessage() {
|
|
|
30
30
|
return "No Blaxel credentials found. Set the BL_API_KEY and BL_WORKSPACE environment variables, or run `bl login`.";
|
|
31
31
|
}
|
|
32
32
|
// Build info - these placeholders are replaced at build time by build:replace-imports
|
|
33
|
-
const BUILD_VERSION = "0.3.
|
|
34
|
-
const BUILD_COMMIT = "
|
|
33
|
+
const BUILD_VERSION = "0.3.29-preview.319";
|
|
34
|
+
const BUILD_COMMIT = "643251a25f011082e6849e55e91f3b06e3a1efb3";
|
|
35
35
|
const BUILD_SENTRY_DSN = "https://fd5e60e1c9820e1eef5ccebb84a07127@o4508714045276160.ingest.us.sentry.io/4510465864564736";
|
|
36
36
|
const BLAXEL_API_VERSION = "2026-09-22";
|
|
37
37
|
// Bun < 1.3.11 never sends connection-level WINDOW_UPDATE: the pooled h2
|
package/dist/cjs/image/image.js
CHANGED
|
@@ -29,14 +29,19 @@ const BUILD_UPLOAD_LABELS = [
|
|
|
29
29
|
"x-blaxel-build-cache",
|
|
30
30
|
];
|
|
31
31
|
const MAX_BUILD_UPLOAD_LABEL_VALUE = 64;
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
// Reads an option that also has a deprecated `...Mb` spelling.
|
|
33
|
+
function buildSizeLabel(option, value, deprecatedValue, min, max) {
|
|
34
|
+
if (value !== undefined && deprecatedValue !== undefined) {
|
|
35
|
+
throw new Error(`Set ${option} or ${option}Mb, not both`);
|
|
36
|
+
}
|
|
37
|
+
const size = value ?? deprecatedValue;
|
|
38
|
+
if (size === undefined) {
|
|
34
39
|
return undefined;
|
|
35
40
|
}
|
|
36
|
-
if (!Number.isInteger(
|
|
37
|
-
throw new Error(`${option} must be an integer between ${min} and ${max}
|
|
41
|
+
if (!Number.isInteger(size) || size < min || size > max) {
|
|
42
|
+
throw new Error(`${value !== undefined ? option : `${option}Mb`} must be an integer between ${min} and ${max} MB`);
|
|
38
43
|
}
|
|
39
|
-
return String(
|
|
44
|
+
return String(size);
|
|
40
45
|
}
|
|
41
46
|
function buildUploadMetadata(labels) {
|
|
42
47
|
const metadata = {};
|
|
@@ -812,12 +817,12 @@ class ImageInstance {
|
|
|
812
817
|
async build(options) {
|
|
813
818
|
const { name, memory = 4096, timeout = 900000, onStatusChange, sandboxVersion = "latest" } = options;
|
|
814
819
|
const buildLabels = {};
|
|
815
|
-
const buildMemory = buildSizeLabel("
|
|
820
|
+
const buildMemory = buildSizeLabel("buildMemory", options.buildMemory, options.buildMemoryMb, 1, 32768);
|
|
816
821
|
if (buildMemory !== undefined) {
|
|
817
822
|
buildLabels["x-blaxel-build-memory"] = buildMemory;
|
|
818
823
|
}
|
|
819
824
|
// Keep an explicit 0: it asks for memory-backed scratch instead of the default.
|
|
820
|
-
const buildVolume = buildSizeLabel("
|
|
825
|
+
const buildVolume = buildSizeLabel("buildVolume", options.buildVolume, options.buildVolumeMb, 0, 131072);
|
|
821
826
|
if (buildVolume !== undefined) {
|
|
822
827
|
buildLabels["x-blaxel-build-volume"] = buildVolume;
|
|
823
828
|
}
|
|
@@ -594,7 +594,7 @@ let tempSourceDir;
|
|
|
594
594
|
vitest_1.vi.unstubAllGlobals();
|
|
595
595
|
});
|
|
596
596
|
(0, vitest_1.it)("sends build memory and volume as labels and signed upload headers", async () => {
|
|
597
|
-
const { create, upload } = await buildWith({
|
|
597
|
+
const { create, upload } = await buildWith({ buildMemory: 16384, buildVolume: 32768 });
|
|
598
598
|
const labels = create.body.metadata?.labels;
|
|
599
599
|
(0, vitest_1.expect)(labels?.["x-blaxel-build-memory"]).toBe("16384");
|
|
600
600
|
(0, vitest_1.expect)(labels?.["x-blaxel-build-volume"]).toBe("32768");
|
|
@@ -604,20 +604,25 @@ let tempSourceDir;
|
|
|
604
604
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-auto-generated"]).toBeUndefined();
|
|
605
605
|
});
|
|
606
606
|
(0, vitest_1.it)("asks again when creating a sandbox does not sign the settings", async () => {
|
|
607
|
-
const { upload } = await buildWith({
|
|
607
|
+
const { upload } = await buildWith({ buildMemory: 2048 }, undefined, "update");
|
|
608
608
|
(0, vitest_1.expect)(calls.filter((call) => call.url.includes("upload=true")).map((call) => call.method)).toEqual(["PUT", "POST", "PUT"]);
|
|
609
609
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-memory"]).toBe("2048");
|
|
610
610
|
});
|
|
611
611
|
(0, vitest_1.it)("fails clearly when the settings are never signed", async () => {
|
|
612
|
-
await (0, vitest_1.expect)(buildWith({
|
|
612
|
+
await (0, vitest_1.expect)(buildWith({ buildVolume: 32768 }, undefined, "none")).rejects.toThrow("x-blaxel-build-volume");
|
|
613
613
|
(0, vitest_1.expect)(calls.some((call) => call.url.startsWith("https://upload.test"))).toBe(false);
|
|
614
614
|
});
|
|
615
615
|
(0, vitest_1.it)("drops stored labels the upload URL was not signed for", async () => {
|
|
616
616
|
const { upload } = await buildWith({}, { "x-blaxel-auto-generated": "true", "x-blaxel-build-memory": "8192" }, "none");
|
|
617
617
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-memory"]).toBeUndefined();
|
|
618
618
|
});
|
|
619
|
+
(0, vitest_1.it)("still accepts the deprecated Mb spellings", async () => {
|
|
620
|
+
const { create, upload } = await buildWith({ buildMemoryMb: 8192, buildVolumeMb: 0 });
|
|
621
|
+
(0, vitest_1.expect)(create.body.metadata?.labels?.["x-blaxel-build-memory"]).toBe("8192");
|
|
622
|
+
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-volume"]).toBe("0");
|
|
623
|
+
});
|
|
619
624
|
(0, vitest_1.it)("keeps an explicit zero volume", async () => {
|
|
620
|
-
const { upload } = await buildWith({
|
|
625
|
+
const { upload } = await buildWith({ buildVolume: 0 });
|
|
621
626
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-volume"]).toBe("0");
|
|
622
627
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-memory"]).toBeUndefined();
|
|
623
628
|
});
|
|
@@ -630,11 +635,15 @@ let tempSourceDir;
|
|
|
630
635
|
(0, vitest_1.expect)(upload.headers["x-amz-meta-x-blaxel-build-memory"]).toBe("8192");
|
|
631
636
|
});
|
|
632
637
|
vitest_1.it.each([
|
|
633
|
-
[{
|
|
634
|
-
[{
|
|
635
|
-
[{
|
|
636
|
-
[{
|
|
637
|
-
[{
|
|
638
|
+
[{ buildMemory: 0 }, "buildMemory must"],
|
|
639
|
+
[{ buildMemory: 32769 }, "buildMemory must"],
|
|
640
|
+
[{ buildMemory: 1.5 }, "buildMemory must"],
|
|
641
|
+
[{ buildVolume: -1 }, "buildVolume must"],
|
|
642
|
+
[{ buildVolume: 131073 }, "buildVolume must"],
|
|
643
|
+
[{ buildMemoryMb: 0 }, "buildMemoryMb must"],
|
|
644
|
+
[{ buildVolumeMb: -1 }, "buildVolumeMb must"],
|
|
645
|
+
[{ buildMemory: 2048, buildMemoryMb: 2048 }, "not both"],
|
|
646
|
+
[{ buildVolume: 0, buildVolumeMb: 0 }, "not both"],
|
|
638
647
|
])("rejects out-of-range %o before any request", async (options, option) => {
|
|
639
648
|
const fetchSpy = vitest_1.vi.fn();
|
|
640
649
|
vitest_1.vi.stubGlobal("fetch", fetchSpy);
|
|
@@ -27,7 +27,11 @@ export interface ImageBuildOptions {
|
|
|
27
27
|
timeout?: number;
|
|
28
28
|
onStatusChange?: (status: string) => void;
|
|
29
29
|
sandboxVersion?: string;
|
|
30
|
+
buildMemory?: number;
|
|
31
|
+
buildVolume?: number;
|
|
32
|
+
/** @deprecated Use `buildMemory`. */
|
|
30
33
|
buildMemoryMb?: number;
|
|
34
|
+
/** @deprecated Use `buildVolume`. */
|
|
31
35
|
buildVolumeMb?: number;
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
@@ -29,14 +29,18 @@ export interface ImageBuildOptions {
|
|
|
29
29
|
onStatusChange?: (status: string) => void;
|
|
30
30
|
sandboxVersion?: string;
|
|
31
31
|
/**
|
|
32
|
-
* Memory
|
|
33
|
-
* `bl push --memory`. Does not change the deployed sandbox's memory
|
|
32
|
+
* Memory of the environment the image is built in, in MB (1-32768). Same as
|
|
33
|
+
* `bl push --memory`. Does not change the deployed sandbox's `memory`.
|
|
34
34
|
*/
|
|
35
|
-
|
|
35
|
+
buildMemory?: number;
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* `bl push --volume`; 0
|
|
37
|
+
* Disk attached to the build for its intermediate layers, in MB (0-131072).
|
|
38
|
+
* Same as `bl push --volume`; 0 builds in memory.
|
|
39
39
|
*/
|
|
40
|
+
buildVolume?: number;
|
|
41
|
+
/** @deprecated Use `buildMemory`. */
|
|
42
|
+
buildMemoryMb?: number;
|
|
43
|
+
/** @deprecated Use `buildVolume`. */
|
|
40
44
|
buildVolumeMb?: number;
|
|
41
45
|
}
|
|
42
46
|
export interface PipInstallOptions {
|