Coverage Summary for Class: EventSubResource (io.github.captnblubber.twitchkt.helix.resource)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| EventSubResource |
100%
(2/2)
|
|
100%
(9/9)
|
100%
(37/37)
|
| EventSubResource$create$1 |
|
| Total |
100%
(2/2)
|
|
100%
(9/9)
|
100%
(37/37)
|
package io.github.captnblubber.twitchkt.helix.resource
import io.github.captnblubber.twitchkt.helix.EventSubSubscriptionType
import io.github.captnblubber.twitchkt.helix.internal.HelixHttpClient
import io.github.captnblubber.twitchkt.helix.internal.requireFirst
import io.github.captnblubber.twitchkt.helix.model.EventSubSubscription
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* Twitch Helix EventSub API resource.
*
* Provides methods for managing EventSub subscriptions via the Helix API.
*
* @see <a href="https://dev.twitch.tv/docs/api/reference/#create-eventsub-subscription">Twitch API Reference - EventSub</a>
*/
class EventSubResource internal constructor(
private val http: HelixHttpClient,
) {
/**
* [Twitch API: Create EventSub Subscription](https://dev.twitch.tv/docs/api/reference/#create-eventsub-subscription)
*
* @param subscription the type-safe subscription definition containing type, version, and condition fields.
* @param sessionId the WebSocket session ID from the welcome message.
* @return the created EventSub subscription.
*/
suspend fun create(
subscription: EventSubSubscriptionType,
sessionId: String,
): EventSubSubscription {
val request =
CreateEventSubRequest(
type = subscription.type,
version = subscription.version,
condition = subscription.toCondition(),
transport = EventSubTransportRequest(sessionId = sessionId),
)
return http.post<EventSubSubscription>("eventsub/subscriptions", body = http.encodeBody(request)).requireFirst("eventsub/subscriptions")
}
}
@Serializable
internal data class CreateEventSubRequest(
val type: String,
val version: String,
val condition: Map<String, String>,
val transport: EventSubTransportRequest,
)
@Serializable
internal data class EventSubTransportRequest(
val method: String = "websocket",
@SerialName("session_id") val sessionId: String,
)