Skip to content

Commit 8d4a06b

Browse files
committed
fix(services/opencode): allow bill grabbing to grab all public payments (sent/receive)
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 1038196 commit 8d4a06b

7 files changed

Lines changed: 45 additions & 34 deletions

File tree

services/flipcash/src/main/kotlin/com/flipcash/services/models/Errors.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ sealed class LoginError(
99
class InvalidTimestamp : LoginError("Invalid timestamp")
1010
class Denied : LoginError("Denied")
1111
class Unrecognized : LoginError("Unrecognized")
12-
data class Other(override val cause: Throwable? = null) : LoginError(cause = cause)
12+
data class Other(override val cause: Throwable? = null) : LoginError(message = cause?.message, cause = cause)
1313
}
1414

1515
sealed class RegisterError(
@@ -19,7 +19,7 @@ sealed class RegisterError(
1919
class InvalidSignature : RegisterError("Invalid signature")
2020
class Denied: RegisterError("Denied")
2121
class Unrecognized : RegisterError("Unrecognized")
22-
data class Other(override val cause: Throwable? = null) : RegisterError(cause = cause)
22+
data class Other(override val cause: Throwable? = null) : RegisterError(message = cause?.message, cause = cause)
2323
}
2424

2525
sealed class GetUserFlagsError(
@@ -28,7 +28,7 @@ sealed class GetUserFlagsError(
2828
) : CodeServerError(message, cause) {
2929
class Unrecognized : GetUserFlagsError("Unrecognized")
3030
class Denied : GetUserFlagsError("Denied")
31-
data class Other(override val cause: Throwable? = null) : GetUserFlagsError(cause = cause)
31+
data class Other(override val cause: Throwable? = null) : GetUserFlagsError(message = cause?.message, cause = cause)
3232
}
3333

3434
sealed class PurchaseAckError(
@@ -39,7 +39,7 @@ sealed class PurchaseAckError(
3939
class Denied : PurchaseAckError("Denied")
4040
class InvalidReceipt: PurchaseAckError("Invalid receipt")
4141
class InvalidMetadata: PurchaseAckError("Invalid metadata")
42-
data class Other(override val cause: Throwable? = null) : PurchaseAckError(cause = cause)
42+
data class Other(override val cause: Throwable? = null) : PurchaseAckError(message = cause?.message, cause = cause)
4343
}
4444

4545
sealed class AddTokenError(
@@ -48,15 +48,15 @@ sealed class AddTokenError(
4848
) : CodeServerError(message, cause) {
4949
class InvalidPushToken : AddTokenError("Invalid push token")
5050
class Unrecognized : AddTokenError("Unrecognized")
51-
data class Other(override val cause: Throwable? = null) : AddTokenError(cause = cause)
51+
data class Other(override val cause: Throwable? = null) : AddTokenError(message = cause?.message, cause = cause)
5252
}
5353

5454
sealed class DeleteTokenError(
5555
override val message: String? = null,
5656
override val cause: Throwable? = null
5757
) : CodeServerError(message, cause) {
5858
class Unrecognized : DeleteTokenError("Unrecognized")
59-
data class Other(override val cause: Throwable? = null) : DeleteTokenError(cause = cause)
59+
data class Other(override val cause: Throwable? = null) : DeleteTokenError(message = cause?.message, cause = cause)
6060
}
6161

6262
sealed class GetActivityFeedMessagesError(
@@ -66,5 +66,5 @@ sealed class GetActivityFeedMessagesError(
6666
class Denied : GetActivityFeedMessagesError("Denied")
6767
class Unrecognized : GetActivityFeedMessagesError("Unrecognized")
6868
class NotFound: GetActivityFeedMessagesError("Not found")
69-
data class Other(override val cause: Throwable? = null) : GetActivityFeedMessagesError(cause = cause)
69+
data class Other(override val cause: Throwable? = null) : GetActivityFeedMessagesError(message = cause?.message, cause = cause)
7070
}

services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.getcode.opencode.controllers
22

33
import com.getcode.ed25519.Ed25519.KeyPair
44
import com.getcode.opencode.events.Events
5+
import com.getcode.opencode.internal.extensions.generate
56
import com.getcode.opencode.internal.network.api.intents.IntentRemoteReceive
67
import com.getcode.opencode.internal.network.api.intents.IntentRemoteSend
78
import com.getcode.opencode.internal.network.api.intents.IntentTransfer
@@ -16,7 +17,6 @@ import com.getcode.opencode.model.transactions.WithdrawalAvailability
1617
import com.getcode.opencode.repositories.TransactionRepository
1718
import com.getcode.opencode.solana.intents.IntentType
1819
import com.getcode.opencode.utils.flowInterval
19-
import com.getcode.opencode.internal.extensions.generate
2020
import com.getcode.solana.keys.PublicKey
2121
import com.getcode.utils.TraceType
2222
import com.getcode.utils.base64

services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ internal class MessagingService @Inject constructor(
7575
}
7676
},
7777
responseHandler = { response, onResult, requestChannel ->
78-
when (val result = response.responseOrPingCase) {
78+
when (response.responseOrPingCase) {
7979
MessagingService.OpenMessageStreamWithKeepAliveResponse.ResponseOrPingCase.RESPONSE -> {
8080
onResult(Result.success(response.response.messagesList))
8181
}
@@ -99,6 +99,12 @@ internal class MessagingService @Inject constructor(
9999
type = TraceType.Error,
100100
)
101101
}
102+
103+
else -> {
104+
trace(
105+
message = "Pong Message Stream sent null response. This is unexpected.",
106+
)
107+
}
102108
}
103109
}
104110
).fold(

services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal class GrabBillTransactor(
2424
this.payload = payload
2525
}
2626

27-
suspend fun start(): Result<TransactionMetadata.SendPublicPayment> {
27+
suspend fun start(): Result<TransactionMetadata.PublicPayment> {
2828
val ownerKey = owner ?: return Result.failure(GrabTransactorError.Other(message = "No owner key. Did you call with() first?"))
2929
val destination = ownerKey.vaultPublicKey
3030
val data = payload

services/opencode/src/main/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class BillTransactionManager @Inject constructor(
110110
.onSuccess { metadata ->
111111
trace(
112112
tag = "Bill",
113-
message = "attemptGrabFromSender: ReceivePublicPayment => ${metadata.exchangeData}"
113+
message = "attemptGrabFromSender: ${metadata.javaClass.simpleName} => ${metadata.exchangeData}"
114114
)
115115

116116
val amount = LocalFiat(metadata.exchangeData)
@@ -220,6 +220,7 @@ class BillTransactionManager @Inject constructor(
220220
}
221221

222222
fun cancelAwaitForGrab() {
223+
cancelBillTimeout()
223224
giveTransactor?.dispose()
224225
giveTransactor = null
225226
}

services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/Errors.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ sealed class CodeAccountCheckError(
1111
class NotFound : CodeAccountCheckError("Not found")
1212
class UnlockedTimelockAccount : CodeAccountCheckError("Unlocked timelock account")
1313
class Unrecognized : CodeAccountCheckError("Unrecognized")
14-
data class Other(override val cause: Throwable? = null) : CodeAccountCheckError()
14+
data class Other(override val cause: Throwable? = null) : CodeAccountCheckError(message = cause?.message, cause = cause)
1515
}
1616

1717
sealed class GetAccountsError(
@@ -20,7 +20,7 @@ sealed class GetAccountsError(
2020
) : CodeServerError(message, cause) {
2121
class NotFound : GetAccountsError("Not found")
2222
class Unrecognized : GetAccountsError("Unrecognized")
23-
data class Other(override val cause: Throwable? = null) : GetAccountsError()
23+
data class Other(override val cause: Throwable? = null) : GetAccountsError(message = cause?.message, cause = cause)
2424
}
2525

2626
sealed class LinkAccountsError(
@@ -37,7 +37,7 @@ sealed class LinkAccountsError(
3737
*/
3838
class InvalidAccount : LinkAccountsError("Invalid account")
3939
class Unrecognized : LinkAccountsError("Unrecognized")
40-
data class Other(override val cause: Throwable? = null) : LinkAccountsError()
40+
data class Other(override val cause: Throwable? = null) : LinkAccountsError(message = cause?.message, cause = cause)
4141
}
4242

4343
sealed class GetRatesError(
@@ -49,29 +49,29 @@ sealed class GetRatesError(
4949
*/
5050
class MissingData : GetRatesError("Missing data")
5151
class Unrecognized : GetRatesError("Unrecognized")
52-
data class Other(override val cause: Throwable? = null) : GetRatesError()
52+
data class Other(override val cause: Throwable? = null) : GetRatesError(message = cause?.message, cause = cause)
5353
}
5454

5555
sealed class OpenMessageStreamError(
5656
override val message: String? = null,
5757
override val cause: Throwable? = null
5858
) : CodeServerError(message, cause) {
59-
data class Other(override val cause: Throwable? = null) : OpenMessageStreamError()
59+
data class Other(override val cause: Throwable? = null) : OpenMessageStreamError(message = cause?.message, cause = cause)
6060
}
6161

6262
sealed class PollMessagesError(
6363
override val message: String? = null,
6464
override val cause: Throwable? = null
6565
) : CodeServerError(message, cause) {
66-
data class Other(override val cause: Throwable? = null) : PollMessagesError()
66+
data class Other(override val cause: Throwable? = null) : PollMessagesError(message = cause?.message, cause = cause)
6767
}
6868

6969
sealed class AckMessagesError(
7070
override val message: String? = null,
7171
override val cause: Throwable? = null
7272
) : CodeServerError(message, cause) {
7373
class Unrecognized : AckMessagesError("Unrecognized")
74-
data class Other(override val cause: Throwable? = null) : AckMessagesError()
74+
data class Other(override val cause: Throwable? = null) : AckMessagesError(message = cause?.message, cause = cause)
7575
}
7676

7777
sealed class SendMessageError(
@@ -80,7 +80,7 @@ sealed class SendMessageError(
8080
) : CodeServerError(message, cause) {
8181
class NoActiveStream : SendMessageError("No active stream")
8282
class Unrecognized : SendMessageError("Unrecognized")
83-
data class Other(override val cause: Throwable? = null) : SendMessageError()
83+
data class Other(override val cause: Throwable? = null) : SendMessageError(message = cause?.message, cause = cause)
8484
}
8585

8686
enum class DeniedReason {
@@ -111,8 +111,8 @@ sealed class SubmitIntentError(
111111
data class Denied(private val reasons: List<DeniedReason>) :
112112
SubmitIntentError(message = reasons.joinToString())
113113

114-
class Unrecognized : SubmitIntentError()
115-
data class Other(override val cause: Throwable? = null) : SubmitIntentError()
114+
class Unrecognized : SubmitIntentError("Unrecognized")
115+
data class Other(override val cause: Throwable? = null) : SubmitIntentError(message = cause?.message, cause = cause)
116116

117117
companion object {
118118
fun typed(proto: SubmitIntentResponse.Error): SubmitIntentError {
@@ -150,22 +150,22 @@ sealed class GetIntentMetadataError(
150150
) : CodeServerError(message, cause) {
151151
class NotFound : GetIntentMetadataError("Not found")
152152
class Unrecognized : GetIntentMetadataError("Unrecognized")
153-
data class Other(override val cause: Throwable? = null) : GetIntentMetadataError()
153+
data class Other(override val cause: Throwable? = null) : GetIntentMetadataError(message = cause?.message, cause = cause)
154154
}
155155

156156
sealed class GetLimitsError(
157157
override val message: String? = null,
158158
override val cause: Throwable? = null
159159
) : CodeServerError(message, cause) {
160160
class Unrecognized : GetIntentMetadataError("Unrecognized")
161-
data class Other(override val cause: Throwable? = null) : GetIntentMetadataError()
161+
data class Other(override val cause: Throwable? = null) : GetIntentMetadataError(message = cause?.message, cause = cause)
162162
}
163163

164164
sealed class WithdrawalAvailabilityError(
165165
override val message: String? = null,
166166
override val cause: Throwable? = null
167167
) : CodeServerError(message, cause) {
168-
data class Other(override val cause: Throwable? = null) : WithdrawalAvailabilityError()
168+
data class Other(override val cause: Throwable? = null) : WithdrawalAvailabilityError(message = cause?.message, cause = cause)
169169
}
170170

171171
sealed class AirdropError(
@@ -175,7 +175,7 @@ sealed class AirdropError(
175175
class Unavailable: AirdropError("Unavailable")
176176
class AlreadyClaimed: AirdropError("Already claimed")
177177
class Unrecognized: AirdropError("Unrecognized")
178-
data class Other(override val cause: Throwable? = null) : AirdropError()
178+
data class Other(override val cause: Throwable? = null) : AirdropError(message = cause?.message, cause = cause)
179179
}
180180

181181
sealed class VoidGiftCardError(
@@ -186,6 +186,6 @@ sealed class VoidGiftCardError(
186186
class NotFound: VoidGiftCardError("Not found")
187187
class AlreadyClaimed: VoidGiftCardError("Already claimed")
188188
class Unrecognized: VoidGiftCardError("Unrecognized")
189-
data class Other(override val cause: Throwable? = null) : VoidGiftCardError()
189+
data class Other(override val cause: Throwable? = null) : VoidGiftCardError(message = cause?.message, cause = cause)
190190
}
191191

services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ sealed interface TransactionMetadata {
1616
*/
1717
data object OpenAccounts: TransactionMetadata
1818

19+
sealed interface PublicPayment {
20+
val source: PublicKey
21+
val exchangeData: ExchangeData.WithRate
22+
}
23+
1924
/**
2025
* Send a payment to a destination account publicly.
2126
*
@@ -35,11 +40,11 @@ sealed interface TransactionMetadata {
3540
* @param isWithdrawal Is the payment a withdrawal?
3641
*/
3742
data class SendPublicPayment(
38-
val source: PublicKey,
43+
override val source: PublicKey,
3944
val destination: PublicKey,
40-
val exchangeData: ExchangeData.WithRate,
45+
override val exchangeData: ExchangeData.WithRate,
4146
val isWithdrawal: Boolean
42-
): TransactionMetadata
47+
): TransactionMetadata, PublicPayment
4348

4449
/**
4550
* Receives funds into a user-owned account publicly. All use cases of this intent close the
@@ -52,9 +57,8 @@ sealed interface TransactionMetadata {
5257
* Action Specification (Remote Send):
5358
* actions = [NoPrivacyWithdrawAction(REMOTE_SEND_GIFT_CARD, TEMPORARY_INCOMING[latest_index], quarks)]
5459
* ```
55-
* <p>
5660
*
57-
* <b>TODO:</b> This requires a new implementation for the VM
61+
* <p>
5862
*
5963
* @param source The remote send gift card to receive funds from
6064
* @param quarks The exact amount of Kin in quarks being received
@@ -65,11 +69,11 @@ sealed interface TransactionMetadata {
6569
* SubmitIntent will disallow this being set.
6670
*/
6771
data class ReceivePublicPayment(
68-
val source: PublicKey,
72+
override val source: PublicKey,
6973
val quarks: Long,
7074
val isRemoteSend: Boolean = true,
71-
val exchangeData: ExchangeData.WithRate,
72-
): TransactionMetadata
75+
override val exchangeData: ExchangeData.WithRate,
76+
): TransactionMetadata, PublicPayment
7377

7478
data object Unknown: TransactionMetadata
7579
}

0 commit comments

Comments
 (0)