fluncle 0.92.0 → 0.93.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/bin/fluncle.mjs +29 -11
- package/package.json +1 -1
package/bin/fluncle.mjs
CHANGED
|
@@ -556,7 +556,7 @@ function parseVersion(version) {
|
|
|
556
556
|
var currentVersion;
|
|
557
557
|
var init_version = __esm(() => {
|
|
558
558
|
init_output();
|
|
559
|
-
currentVersion = "0.
|
|
559
|
+
currentVersion = "0.93.0".trim() ? "0.93.0".trim() : "0.1.0";
|
|
560
560
|
});
|
|
561
561
|
|
|
562
562
|
// src/update-notifier.ts
|
|
@@ -2186,7 +2186,7 @@ function parseVersion2(version) {
|
|
|
2186
2186
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2187
2187
|
var init_version2 = __esm(() => {
|
|
2188
2188
|
init_output();
|
|
2189
|
-
currentVersion2 = "0.
|
|
2189
|
+
currentVersion2 = "0.93.0".trim() ? "0.93.0".trim() : "0.1.0";
|
|
2190
2190
|
});
|
|
2191
2191
|
|
|
2192
2192
|
// ../../packages/registry/src/index.ts
|
|
@@ -3755,7 +3755,7 @@ async function uploadRenditionMultipart(masterPath, presignPath, onProgress = ()
|
|
|
3755
3755
|
throw new CliError2("presign_missing", `Worker did not sign part ${part.partNumber} of ${plan.partCount}`);
|
|
3756
3756
|
}
|
|
3757
3757
|
onProgress(`Set video: part ${part.partNumber}/${plan.partCount}`);
|
|
3758
|
-
const etag = await putPart(url, renditionPath, part);
|
|
3758
|
+
const etag = await putPart(url, renditionPath, part, onProgress);
|
|
3759
3759
|
completed.push({ etag, partNumber: part.partNumber });
|
|
3760
3760
|
}
|
|
3761
3761
|
await completeUpload(presign.completeUrl, completed);
|
|
@@ -3768,14 +3768,32 @@ async function uploadRenditionMultipart(masterPath, presignPath, onProgress = ()
|
|
|
3768
3768
|
rmSync2(renditionPath, { force: true });
|
|
3769
3769
|
}
|
|
3770
3770
|
}
|
|
3771
|
-
async function putPart(url, path2, part) {
|
|
3772
|
-
const
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3771
|
+
async function putPart(url, path2, part, onProgress = () => {}) {
|
|
3772
|
+
const body = await Bun.file(path2).slice(part.start, part.end).arrayBuffer();
|
|
3773
|
+
for (let attempt = 1;; attempt += 1) {
|
|
3774
|
+
try {
|
|
3775
|
+
return await putPartOnce(url, body, part);
|
|
3776
|
+
} catch (error) {
|
|
3777
|
+
if (error instanceof CliError2) {
|
|
3778
|
+
throw error;
|
|
3779
|
+
}
|
|
3780
|
+
if (attempt >= MAX_PART_ATTEMPTS) {
|
|
3781
|
+
throw new CliError2("r2_part_failed", `Part ${part.partNumber} failed after ${MAX_PART_ATTEMPTS} attempts: ${error instanceof Error ? error.message : String(error)}`);
|
|
3782
|
+
}
|
|
3783
|
+
const backoffMs = 500 * 2 ** (attempt - 1);
|
|
3784
|
+
onProgress(`Set video: part ${part.partNumber} dropped — retry ${attempt}/${MAX_PART_ATTEMPTS - 1} in ${backoffMs}ms…`);
|
|
3785
|
+
await new Promise((resolve) => setTimeout(resolve, backoffMs));
|
|
3786
|
+
}
|
|
3787
|
+
}
|
|
3788
|
+
}
|
|
3789
|
+
async function putPartOnce(url, body, part) {
|
|
3790
|
+
const response = await fetch(url, { body, method: "PUT" });
|
|
3776
3791
|
if (!response.ok) {
|
|
3777
3792
|
const detail = (await response.text().catch(() => "")).slice(0, 300);
|
|
3778
|
-
|
|
3793
|
+
if (response.status < 500) {
|
|
3794
|
+
throw new CliError2("r2_part_failed", `R2 rejected part ${part.partNumber} (${response.status} ${response.statusText})${detail ? `: ${detail}` : ""}`);
|
|
3795
|
+
}
|
|
3796
|
+
throw new Error(`R2 ${response.status} ${response.statusText} on part ${part.partNumber}${detail ? `: ${detail}` : ""}`);
|
|
3779
3797
|
}
|
|
3780
3798
|
const etag = response.headers.get("etag");
|
|
3781
3799
|
if (!etag) {
|
|
@@ -3819,7 +3837,7 @@ async function deriveRendition(inputPath, outputPath) {
|
|
|
3819
3837
|
throw new CliError2("ffmpeg_failed", `ffmpeg failed to derive the set-video rendition${detail ? `: ${detail}` : ""}`);
|
|
3820
3838
|
}
|
|
3821
3839
|
}
|
|
3822
|
-
var FOUND_BASE2 = "https://found.fluncle.com", SET_VIDEO_RENDITION, DEFAULT_PART_SIZE, MIN_PART_SIZE, MAX_PARTS = 1e4;
|
|
3840
|
+
var FOUND_BASE2 = "https://found.fluncle.com", SET_VIDEO_RENDITION, DEFAULT_PART_SIZE, MIN_PART_SIZE, MAX_PARTS = 1e4, MAX_PART_ATTEMPTS = 5;
|
|
3823
3841
|
var init_mixtape_set_video = __esm(() => {
|
|
3824
3842
|
init_api();
|
|
3825
3843
|
init_output();
|
|
@@ -3829,7 +3847,7 @@ var init_mixtape_set_video = __esm(() => {
|
|
|
3829
3847
|
gopSeconds: 2,
|
|
3830
3848
|
height: 1080
|
|
3831
3849
|
};
|
|
3832
|
-
DEFAULT_PART_SIZE =
|
|
3850
|
+
DEFAULT_PART_SIZE = 16 * 1024 * 1024;
|
|
3833
3851
|
MIN_PART_SIZE = 5 * 1024 * 1024;
|
|
3834
3852
|
});
|
|
3835
3853
|
|
package/package.json
CHANGED