diff --git a/lightspark-sdk/src/commonJvmAndroidMain/kotlin/com/lightspark/sdk/LightsparkFuturesClient.kt b/lightspark-sdk/src/commonJvmAndroidMain/kotlin/com/lightspark/sdk/LightsparkFuturesClient.kt index 81e51d48..8df0b82c 100644 --- a/lightspark-sdk/src/commonJvmAndroidMain/kotlin/com/lightspark/sdk/LightsparkFuturesClient.kt +++ b/lightspark-sdk/src/commonJvmAndroidMain/kotlin/com/lightspark/sdk/LightsparkFuturesClient.kt @@ -846,6 +846,17 @@ class LightsparkFuturesClient(config: ClientConfig) { coroutineScope.future { coroutinesClient.createUmaInvitationWithPayment(inviterUma, paymentAmount, paymentCurrency, expiresAt) } + + /** + * Cancels an UMA invitation. + * + * @param inviteCode The code of the invitation to cancel. + * @return The cancelled invitation. + */ + fun cancelUmaInvitation(inviteCode: String): CompletableFuture = + coroutineScope.future { + coroutinesClient.cancelUmaInvitation(inviteCode) + } } fun Query.execute(client: LightsparkFuturesClient): CompletableFuture = client.executeQuery(this) diff --git a/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkCoroutinesClient.kt b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkCoroutinesClient.kt index df6ea6da..f2d222b0 100644 --- a/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkCoroutinesClient.kt +++ b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkCoroutinesClient.kt @@ -1393,6 +1393,30 @@ class LightsparkCoroutinesClient private constructor( ) } + /** + * Cancels an UMA invitation. + * + * @param inviteCode The code of the invitation to cancel. + * @return The cancelled invitation. + */ + suspend fun cancelUmaInvitation(inviteCode: String): UmaInvitation { + requireValidAuth() + return executeQuery( + Query( + CancelUmaInvitation, + { + add("invite_code", inviteCode) + }, + ) { + val outputJson = + requireNotNull(it["cancel_uma_invitation"]) { "No invitation output found in response" } + val invitationJson = + requireNotNull(outputJson.jsonObject["invitation"]) { "No invitation found in response" } + serializerFormat.decodeFromJsonElement(invitationJson) + }, + ) + } + suspend fun executeQuery(query: Query): T { return requester.executeQuery(query) } diff --git a/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkSyncClient.kt b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkSyncClient.kt index 4cb5c7db..eea641c5 100644 --- a/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkSyncClient.kt +++ b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/LightsparkSyncClient.kt @@ -793,6 +793,17 @@ class LightsparkSyncClient constructor(config: ClientConfig) { asyncClient.fetchUmaInvitation(invitationCode) } + /** + * Cancels an UMA invitation. + * + * @param inviteCode The code of the invitation to cancel. + * @return The cancelled invitation. + */ + @Throws(LightsparkException::class, LightsparkAuthenticationException::class, CancellationException::class) + fun cancelUmaInvitation(inviteCode: String): UmaInvitation = runBlocking { + asyncClient.cancelUmaInvitation(inviteCode) + } + fun executeQuery(query: Query): T = runBlocking { asyncClient.executeQuery(query) } fun setBitcoinNetwork(network: BitcoinNetwork) { diff --git a/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/graphql/CancelUmaInvitation.kt b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/graphql/CancelUmaInvitation.kt new file mode 100644 index 00000000..1e30086e --- /dev/null +++ b/lightspark-sdk/src/commonMain/kotlin/com/lightspark/sdk/graphql/CancelUmaInvitation.kt @@ -0,0 +1,19 @@ +package com.lightspark.sdk.graphql + +import com.lightspark.sdk.model.UmaInvitation + +const val CancelUmaInvitation = """ + mutation CancelUmaInvitation( + ${'$'}invite_code: String! + ) { + cancel_uma_invitation(input: { + invite_code: ${'$'}invite_code + }) { + invitation { + ...UmaInvitationFragment + } + } + } + +${UmaInvitation.FRAGMENT} +""" \ No newline at end of file