UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

106 lines (104 loc) 3.07 kB
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