50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
const express = require("express");
|
|
const { sendImmutableMedia } = require("./streaming");
|
|
|
|
function createMediaRouter(assetService) {
|
|
const router = express.Router();
|
|
|
|
async function sendMedia(request, response, next, kind) {
|
|
const version = request.params.version;
|
|
if (!version.endsWith(".webp")) {
|
|
response.status(404).json({
|
|
error: {
|
|
code: "MEDIA_NOT_FOUND",
|
|
message: "Asset media version not found",
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const descriptor = assetService.mediaDescriptor(
|
|
request.params.assetId,
|
|
kind,
|
|
version.slice(0, -".webp".length),
|
|
);
|
|
await sendImmutableMedia(assetService, response, descriptor);
|
|
} catch (error) {
|
|
if (response.headersSent) {
|
|
response.destroy(error);
|
|
return;
|
|
}
|
|
next(error);
|
|
}
|
|
}
|
|
|
|
router.get("/assets/:assetId/display/:version", (request, response, next) =>
|
|
sendMedia(request, response, next, "display"),
|
|
);
|
|
router.get(
|
|
"/assets/:assetId/thumbnail/:version",
|
|
(request, response, next) =>
|
|
sendMedia(request, response, next, "thumbnail"),
|
|
);
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = {
|
|
createMediaRouter,
|
|
};
|