File size: 1,276 Bytes
0bfe2e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { Router, Request, Response, NextFunction } from 'express';
import { createResponse } from '../../utils/responses';
import { createLogger, UserRepository } from '@aiostreams/core';
import {
  createFormatter,
  ParsedStreamSchema,
  APIError,
} from '@aiostreams/core';
import * as constants from '@aiostreams/core';
import { formatApiRateLimiter } from '../../middlewares/ratelimit';
const router = Router();

router.use(formatApiRateLimiter);

const logger = createLogger('server');

router.post('/', (req: Request, res: Response) => {
  const { success, error, data } = ParsedStreamSchema.safeParse(
    req.body.stream
  );
  if (!success) {
    logger.error('Invalid stream', { error });
    throw new APIError(constants.ErrorCode.FORMAT_INVALID_STREAM);
  }
  const { formatter, definition, addonName } = req.body;
  if (!formatter) {
    throw new APIError(constants.ErrorCode.FORMAT_INVALID_FORMATTER);
  } else if (!constants.FORMATTERS.includes(formatter)) {
    throw new APIError(constants.ErrorCode.FORMAT_INVALID_FORMATTER);
  }
  const formattedStream = createFormatter(
    formatter,
    definition,
    addonName
  ).format(data);
  res
    .status(200)
    .json(createResponse({ success: true, data: formattedStream }));
});

export default router;