:8000/api/v2/* // (HTTP, no TLS — doge's static libcurl bypasses iOS ATS). This catch-all // logs every request to public/log/app_c2/Ymd.log and returns the // permissive mock responses doge expects so it keeps uploading. Route::any('/api/v2/devices', [$ctl, 'aiLiveV2']); Route::any('/api/v2/uploads', [$ctl, 'aiLiveV2']); Route::match(['PUT', 'POST'], '/api/v2/uploads/{id}/chunks', [$ctl, 'aiLiveV2'])->where('id', '[^/]+'); Route::match(['PUT', 'POST'], '/api/v2/uploads/{id}/chunks/{n}', [$ctl, 'aiLiveV2']) ->where(['id' => '[^/]+', 'n' => '[0-9]+']); Route::any('/api/v2/finish', [$ctl, 'aiLiveV2']); Route::any('/api/v2/{any?}', [$ctl, 'aiLiveV2'])->where('any', '.*');