feat: add 20s expiration to call signaling gift wraps
All GiftWrapEvent.create() calls in WebRtcCallFactory now pass expirationDelta=20 so relays can garbage-collect the wraps after the signaling data is no longer relevant. The actual expiration timestamp is createdAt + 20s + 2 days (to account for the randomized createdAt in NIP-59 gift wraps). Previously only the inner events had expiration tags — the outer gift wraps persisted indefinitely on relays. https://claude.ai/code/session_017hZm7yu7CzmcQgZGSaqSXS
This commit is contained in:
+10
-6
@@ -38,6 +38,10 @@ class WebRtcCallFactory {
|
|||||||
val wrap: GiftWrapEvent,
|
val wrap: GiftWrapEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val WRAP_EXPIRATION_SECONDS = 20L
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun createCallOffer(
|
suspend fun createCallOffer(
|
||||||
sdpOffer: String,
|
sdpOffer: String,
|
||||||
calleePubKey: HexKey,
|
calleePubKey: HexKey,
|
||||||
@@ -47,7 +51,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallOfferEvent.build(sdpOffer, calleePubKey, callId, callType)
|
val template = CallOfferEvent.build(sdpOffer, calleePubKey, callId, callType)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = calleePubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = calleePubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +63,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallAnswerEvent.build(sdpAnswer, callerPubKey, callId)
|
val template = CallAnswerEvent.build(sdpAnswer, callerPubKey, callId)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = callerPubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = callerPubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +75,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallIceCandidateEvent.build(candidateJson, peerPubKey, callId)
|
val template = CallIceCandidateEvent.build(candidateJson, peerPubKey, callId)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +87,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallHangupEvent.build(peerPubKey, callId, reason)
|
val template = CallHangupEvent.build(peerPubKey, callId, reason)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +99,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallRejectEvent.build(callerPubKey, callId, reason)
|
val template = CallRejectEvent.build(callerPubKey, callId, reason)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = callerPubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = callerPubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +111,7 @@ class WebRtcCallFactory {
|
|||||||
): Result {
|
): Result {
|
||||||
val template = CallRenegotiateEvent.build(sdpOffer, peerPubKey, callId)
|
val template = CallRenegotiateEvent.build(sdpOffer, peerPubKey, callId)
|
||||||
val signed = signer.sign(template)
|
val signed = signer.sign(template)
|
||||||
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey)
|
val wrap = GiftWrapEvent.create(event = signed, recipientPubKey = peerPubKey, expirationDelta = WRAP_EXPIRATION_SECONDS)
|
||||||
return Result(signed, wrap)
|
return Result(signed, wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user