addListener( Event\BuildRoutes::class, static function (Event\BuildRoutes $event): void { $app = $event->getApp(); $app->post( '/api/station/{station_id}/ondemand-hls/{media_id:[a-zA-Z0-9-]+}', CreatePlaybackAction::class ) ->setName('ondemand-hls:create') ->add(new Middleware\RateLimit('ondemand_hls_create', 60, 10)) ->add(new Middleware\Permissions(StationPermissions::Media, true)) ->add(new Middleware\StationSupportsFeature(StationFeatures::OnDemand)) ->add(Middleware\RequireStation::class) ->add(Middleware\GetStation::class) ->add(Middleware\Module\Api::class) ->add(Middleware\Auth\ApiAuth::class) ->add(Middleware\InjectSession::class); $app->get( '/api/station/{station_id}/ondemand-hls/playback/{token:[A-Za-z0-9_-]+}/{resource:[A-Za-z0-9._-]+}', ServePlaybackAssetAction::class ) ->setName('ondemand-hls:asset') ->add(new Middleware\RateLimit('ondemand_hls_asset', 5, 150)) ->add(Middleware\RequireStation::class) ->add(Middleware\GetStation::class) ->add(Middleware\Module\Api::class) ->add(Middleware\Auth\PublicAuth::class); } ); $dispatcher->addCallableListener( Event\Nginx\WriteNginxConfiguration::class, NginxConfiguration::class, priority: 20 ); $dispatcher->addListener( Event\GetSyncTasks::class, static fn(Event\GetSyncTasks $event) => $event->addTask(ScheduledCleanupTask::class) ); };