} from '@server/middlewares'
import { HttpStatusCode } from '@shared/models'
import { buildReinjectVideoFileTokenQuery, doReinjectVideoFileToken } from './shared/m3u8-playlist'
+import { GetObjectCommandOutput } from '@aws-sdk/client-s3'
const objectStorageProxyRouter = express.Router()
logger.debug('Proxifying WebTorrent file %s from object storage.', filename)
try {
- const stream = await getWebTorrentFileReadStream({
+ const { response: s3Response, stream } = await getWebTorrentFileReadStream({
filename,
rangeHeader: req.header('range')
})
+ setS3Headers(res, s3Response)
+
return stream.pipe(res)
} catch (err) {
return handleObjectStorageFailure(res, err)
logger.debug('Proxifying HLS file %s from object storage.', filename)
try {
- const stream = await getHLSFileReadStream({
+ const { response: s3Response, stream } = await getHLSFileReadStream({
playlist: playlist.withVideo(video),
filename,
rangeHeader: req.header('range')
})
+ setS3Headers(res, s3Response)
+
const streamReplacer = filename.endsWith('.m3u8') && doReinjectVideoFileToken(req)
? new StreamReplacer(line => injectQueryToPlaylistUrls(line, buildReinjectVideoFileTokenQuery(req)))
: new PassThrough()
type: err.name
})
}
+
+function setS3Headers (res: express.Response, s3Response: GetObjectCommandOutput) {
+ if (s3Response.$metadata.httpStatusCode === HttpStatusCode.PARTIAL_CONTENT_206) {
+ res.status(HttpStatusCode.PARTIAL_CONTENT_206)
+ }
+}