Some checks failed
ci/woodpecker/push/ci Pipeline failed
Co-authored-by: Madison Grubb <madison@elastiflow.com> Reviewed-on: #1
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
import { getRequestURL } from 'h3'
|
|
import { requireAuth } from '../../../utils/authHelpers.js'
|
|
import { getLiveSession, updateLiveSession } from '../../../utils/liveSessions.js'
|
|
import { getRouter, createTransport } from '../../../utils/mediasoup.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = requireAuth(event)
|
|
const body = await readBody(event).catch(() => ({}))
|
|
const { sessionId, isProducer } = body
|
|
|
|
if (!sessionId) {
|
|
throw createError({ statusCode: 400, message: 'sessionId required' })
|
|
}
|
|
|
|
const session = getLiveSession(sessionId)
|
|
if (!session) {
|
|
throw createError({ statusCode: 404, message: 'Session not found' })
|
|
}
|
|
|
|
// Only publisher (session owner) can create producer transport
|
|
// Viewers can create consumer transports
|
|
if (isProducer && session.userId !== user.id) {
|
|
throw createError({ statusCode: 403, message: 'Forbidden' })
|
|
}
|
|
|
|
const url = getRequestURL(event)
|
|
const requestHost = url.hostname
|
|
const router = await getRouter(sessionId)
|
|
const { transport, params } = await createTransport(router, requestHost)
|
|
|
|
if (isProducer) {
|
|
updateLiveSession(sessionId, {
|
|
transportId: transport.id,
|
|
routerId: router.id,
|
|
})
|
|
}
|
|
|
|
return params
|
|
})
|