mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
Implements support for locally generating PoTokens using the device webview. This is a direct port of https://github.com/TeamNewPipe/NewPipe/pull/11955 to native Kotlin. Closes: https://github.com/libre-tube/LibreTube/issues/7065
89 lines
3.1 KiB
Kotlin
89 lines
3.1 KiB
Kotlin
package com.github.libretube.api
|
|
|
|
import com.github.libretube.api.obj.DeArrowBody
|
|
import com.github.libretube.api.obj.DeArrowContent
|
|
import com.github.libretube.api.obj.PipedConfig
|
|
import com.github.libretube.api.obj.PipedInstance
|
|
import com.github.libretube.api.obj.SegmentData
|
|
import com.github.libretube.api.obj.SubmitSegmentResponse
|
|
import com.github.libretube.api.obj.VoteInfo
|
|
import com.github.libretube.obj.update.UpdateInfo
|
|
import kotlinx.serialization.json.JsonElement
|
|
import retrofit2.http.Body
|
|
import retrofit2.http.GET
|
|
import retrofit2.http.Headers
|
|
import retrofit2.http.POST
|
|
import retrofit2.http.Path
|
|
import retrofit2.http.Query
|
|
import retrofit2.http.Url
|
|
|
|
private const val GITHUB_API_URL = "https://api.github.com/repos/libre-tube/LibreTube/releases/latest"
|
|
private const val SB_API_URL = "https://sponsor.ajay.app"
|
|
private const val RYD_API_URL = "https://returnyoutubedislikeapi.com"
|
|
private const val GOOGLE_API_KEY = "AIzaSyDyT5W0Jh49F30Pqqtyfdf7pDLFKLJoAnw"
|
|
const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3"
|
|
|
|
interface ExternalApi {
|
|
// only for fetching servers list
|
|
@GET
|
|
suspend fun getInstances(@Url url: String): List<PipedInstance>
|
|
|
|
@GET("config")
|
|
suspend fun getInstanceConfig(@Url url: String): PipedConfig
|
|
|
|
// fetch latest version info
|
|
@GET(GITHUB_API_URL)
|
|
suspend fun getLatestRelease(): UpdateInfo
|
|
|
|
@GET("$RYD_API_URL/votes")
|
|
suspend fun getVotes(@Query("videoId") videoId: String): VoteInfo
|
|
|
|
@POST("$SB_API_URL/api/skipSegments")
|
|
suspend fun submitSegment(
|
|
@Query("videoID") videoId: String,
|
|
@Query("userID") userID: String,
|
|
@Query("userAgent") userAgent: String,
|
|
@Query("startTime") startTime: Float,
|
|
@Query("endTime") endTime: Float,
|
|
@Query("category") category: String,
|
|
@Query("duration") duration: Float? = null,
|
|
@Query("description") description: String = ""
|
|
): List<SubmitSegmentResponse>
|
|
|
|
@GET("$SB_API_URL/api/skipSegments/{videoId}")
|
|
suspend fun getSegments(
|
|
@Path("videoId") videoId: String,
|
|
@Query("category") category: List<String>,
|
|
@Query("actionType") actionType: List<String>? = null
|
|
): List<SegmentData>
|
|
|
|
@POST("$SB_API_URL/api/branding")
|
|
suspend fun submitDeArrow(@Body body: DeArrowBody)
|
|
|
|
/**
|
|
* @param score: 0 for downvote, 1 for upvote, 20 for undoing previous vote (if existent)
|
|
*/
|
|
@POST("$SB_API_URL/api/voteOnSponsorTime")
|
|
suspend fun voteOnSponsorTime(
|
|
@Query("UUID") uuid: String,
|
|
@Query("userID") userID: String,
|
|
@Query("type") score: Int
|
|
)
|
|
|
|
@GET("$SB_API_URL/api/branding/{videoId}")
|
|
suspend fun getDeArrowContent(@Path("videoId") videoId: String): Map<String, DeArrowContent>
|
|
|
|
@Headers(
|
|
"User-Agent: $USER_AGENT",
|
|
"Accept: application/json",
|
|
"Content-Type: application/json+protobuf",
|
|
"x-goog-api-key: $GOOGLE_API_KEY",
|
|
"x-user-agent: grpc-web-javascript/0.1",
|
|
)
|
|
@POST
|
|
suspend fun botguardRequest(
|
|
@Url url: String,
|
|
@Body jsonPayload: List<String>
|
|
): JsonElement
|
|
}
|