@coursebuilder/core
Version:
Core package for Course Builder
106 lines (104 loc) • 3.07 kB
JavaScript
import {
MuxAssetSchema
} from "./chunk-KUQMUZHK.js";
import {
__name
} from "./chunk-VLQXSCFN.js";
// src/lib/mux.ts
var muxRequestHeaders = {
Authorization: `Basic ${Buffer.from(`${process.env.MUX_ACCESS_TOKEN_ID}:${process.env.MUX_SECRET_KEY}`).toString("base64")}`,
"Content-Type": "application/json"
};
async function addSrtTrackToMuxAsset({ assetId, srtUrl }) {
const muxAsset = await getMuxAsset(assetId);
if (!muxAsset) {
throw new Error("Mux Asset not found");
}
return await fetch(`https://api.mux.com/video/v1/assets/${muxAsset.id}/tracks`, {
method: "POST",
headers: muxRequestHeaders,
body: JSON.stringify({
url: srtUrl,
type: "text",
text_type: "subtitles",
closed_captions: true,
language_code: "en-US",
name: "English",
passthrough: "English"
})
}).then(async (response) => await response.json()).catch((error) => {
console.error(error);
});
}
__name(addSrtTrackToMuxAsset, "addSrtTrackToMuxAsset");
async function deleteSrtTrackFromMuxAsset(assetId) {
const muxAsset = await getMuxAsset(assetId);
if (!muxAsset) {
throw new Error("Mux Asset not found");
}
if (!muxAsset.tracks)
return console.warn("No tracks found");
const trackId = muxAsset.tracks.filter((track) => track.type === "text")[0]?.id;
return await fetch(`https://api.mux.com/video/v1/assets/${muxAsset.id}/tracks/${trackId}`, {
method: "DELETE",
headers: muxRequestHeaders
}).catch((error) => {
console.error(error);
});
}
__name(deleteSrtTrackFromMuxAsset, "deleteSrtTrackFromMuxAsset");
async function getMuxAsset(assetId) {
if (!assetId) {
return null;
}
const { data } = await fetch(`https://api.mux.com/video/v1/assets/${assetId}`, {
headers: muxRequestHeaders
}).then(async (response) => await response.json());
const parsedData = MuxAssetSchema.safeParse(data);
return parsedData.success ? parsedData.data : null;
}
__name(getMuxAsset, "getMuxAsset");
async function createMuxAsset(options) {
const baseUrl = "https://api.mux.com";
const muxOptions = getMuxOptions(options);
const res = await fetch(`${baseUrl}/video/v1/assets`, {
headers: muxRequestHeaders,
method: "POST",
body: JSON.stringify(muxOptions.new_asset_settings)
});
const { data } = await res.json();
return MuxAssetSchema.parse(data);
}
__name(createMuxAsset, "createMuxAsset");
function getMuxOptions(options) {
return {
cors_origin: "*",
test: options?.test || false,
new_asset_settings: {
master_access: "temporary",
max_resolution_tier: "2160p",
playback_policy: [
"public"
],
input: [
{
url: options?.url
}
],
mp4_support: "standard",
...options?.passthrough ? {
passthrough: options.passthrough
} : {}
}
};
}
__name(getMuxOptions, "getMuxOptions");
export {
muxRequestHeaders,
addSrtTrackToMuxAsset,
deleteSrtTrackFromMuxAsset,
getMuxAsset,
createMuxAsset,
getMuxOptions
};
//# sourceMappingURL=chunk-S5X2SWL7.js.map