11import { pipeline } from 'node:stream'
2- import myzod from 'myzod '
2+ import Validator from 'fastest-validator '
33import { createPCMStream } from '../playback/processing/streamProcessor.js'
44import { decodeTrack , logger , sendErrorResponse } from '../utils.js'
55
6- const loadStreamSchema = myzod . object ( {
7- encodedTrack : myzod . string ( ) ,
8- volume : myzod . number ( ) . min ( 0 ) . max ( 1000 ) . optional ( ) ,
9- position : myzod . number ( ) . min ( 0 ) . optional ( ) ,
10- filters : myzod . unknown ( ) . optional ( )
6+ const v = new Validator ( { haltOnFirstError : true } )
7+
8+ const loadStreamSchema = v . compile ( {
9+ encodedTrack : { type : 'string' , empty : false } ,
10+ volume : { type : 'number' , min : 0 , max : 1000 , optional : true } ,
11+ position : { type : 'number' , min : 0 , optional : true } ,
12+ filters : { type : 'any' , optional : true }
1113} )
1214
1315async function handler ( nodelink , req , res , _sendResponse , parsedUrl ) {
@@ -22,10 +24,10 @@ async function handler(nodelink, req, res, _sendResponse, parsedUrl) {
2224 )
2325 }
2426
25- let result
27+ let data
2628 try {
2729 if ( req . method === 'POST' ) {
28- result = loadStreamSchema . try ( req . body )
30+ data = req . body
2931 } else {
3032 const filtersRaw = parsedUrl . searchParams . get ( 'filters' )
3133 let filters
@@ -37,8 +39,8 @@ async function handler(nodelink, req, res, _sendResponse, parsedUrl) {
3739 }
3840 }
3941
40- result = loadStreamSchema . try ( {
41- encodedTrack : parsedUrl . searchParams . get ( 'encodedTrack' ) ,
42+ data = {
43+ encodedTrack : parsedUrl . searchParams . get ( 'encodedTrack' ) ?? undefined ,
4244 volume : parsedUrl . searchParams . get ( 'volume' )
4345 ? Number ( parsedUrl . searchParams . get ( 'volume' ) )
4446 : undefined ,
@@ -51,21 +53,23 @@ async function handler(nodelink, req, res, _sendResponse, parsedUrl) {
5153 )
5254 : undefined ,
5355 filters
54- } )
56+ }
5557 }
5658
57- if ( result instanceof myzod . ValidationError ) {
59+ const validation = loadStreamSchema ( data )
60+
61+ if ( validation !== true ) {
5862 return sendErrorResponse (
5963 req ,
6064 res ,
6165 400 ,
6266 'Bad Request' ,
63- result . message ,
67+ validation ?. [ 0 ] ?. message || 'Invalid parameters' ,
6468 parsedUrl . pathname
6569 )
6670 }
6771
68- const { encodedTrack, volume = 100 , position = 0 , filters = { } } = result
72+ const { encodedTrack, volume = 100 , position = 0 , filters = { } } = data
6973 const decodedTrack = decodeTrack ( encodedTrack . replace ( / / g, '+' ) )
7074
7175 if ( ! decodedTrack ) {
0 commit comments