pollTransaction

suspend fun pollTransaction(request: Sep24TransactionRequest, pollIntervalMs: Long = 5000, maxAttempts: Int = 60, onStatusChange: (Sep24Transaction) -> Unit? = null): Sep24Transaction

Polls a transaction until it reaches a terminal status.

Continuously queries the transaction status at the specified interval until the transaction reaches a terminal state (completed, refunded, expired, error, no_market, too_small, or too_large).

Return

Transaction in terminal status

Parameters

request

Transaction request (must have id, stellarTransactionId, or externalTransactionId)

pollIntervalMs

Interval between polls in milliseconds (default 5000ms)

maxAttempts

Maximum poll attempts (default 60, which is 5 minutes at 5s intervals)

onStatusChange

Optional callback invoked when transaction status changes

Throws

If max attempts exceeded without reaching terminal status

If JWT is invalid or expired

If transaction not found

On anchor server error

Example:

val tx = sep24.pollTransaction(
request = Sep24TransactionRequest(jwt = jwtToken, id = transactionId),
pollIntervalMs = 3000,
maxAttempts = 100,
onStatusChange = { tx ->
println("Status changed to: ${tx.status}")
tx.statusEta?.let { eta ->
println("Estimated time: ${eta}s")
}
}
)

when (tx.getStatusEnum()) {
Sep24TransactionStatus.COMPLETED -> {
println("Deposit completed!")
println("Received: ${tx.amountOut} ${tx.amountOutAsset}")
}
Sep24TransactionStatus.REFUNDED -> {
println("Transaction refunded")
tx.refunds?.let { refunds ->
println("Refunded: ${refunds.amountRefunded}")
}
}
Sep24TransactionStatus.ERROR -> {
println("Transaction failed: ${tx.message}")
}
else -> println("Final status: ${tx.status}")
}