Skip to content

Commit

Permalink
Cleanup - add the tip event type to river (#1930)
Browse files Browse the repository at this point in the history
  • Loading branch information
texuf authored Dec 30, 2024
1 parent 861b80a commit 8b9541f
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 9 deletions.
13 changes: 13 additions & 0 deletions packages/sdk/src/sync-agent/timeline/models/timeline-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type {
ChannelProperties,
BlockchainTransaction,
UserPayload_ReceivedBlockchainTransaction,
BlockchainTransaction_Tip,
} from '@river-build/proto'
import type { PlainMessage } from '@bufbuild/protobuf'
import type { DecryptionSessionError } from '@river-build/encryption'
Expand Down Expand Up @@ -88,6 +89,7 @@ export type TimelineEvent_OneOf =
| SpaceUpdateAutojoinEvent
| SpaceUpdateHideUserJoinLeavesEvent
| SpaceUsernameEvent
| TipEvent
| UserBlockchainTransactionEvent
| UserReceivedBlockchainTransactionEvent
| UnpinEvent
Expand Down Expand Up @@ -118,6 +120,7 @@ export enum RiverTimelineEvent {
SpaceNft = 'm.space.nft',
StreamEncryptionAlgorithm = 'm.stream_encryption_algorithm',
StreamMembership = 'm.stream_membership',
TipEvent = 'm.tip_event',
Unpin = 'm.unpin',
UserBlockchainTransaction = 'm.user_blockchain_transaction',
UserReceivedBlockchainTransaction = 'm.user_received_blockchain_transaction',
Expand Down Expand Up @@ -280,6 +283,16 @@ export interface MemberBlockchainTransactionEvent {
fromUserId: string
}

export interface TipEvent {
kind: RiverTimelineEvent.TipEvent
transaction: PlainMessage<BlockchainTransaction>
tip: PlainMessage<BlockchainTransaction_Tip>
transactionHash: string
fromUserId: string
refEventId: string
toUserId: string
}

export enum MessageType {
Text = 'm.text',
GM = 'm.gm',
Expand Down
56 changes: 47 additions & 9 deletions packages/sdk/src/sync-agent/timeline/models/timelineEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
MembershipOp,
BlockchainTransaction,
} from '@river-build/proto'
import { isDefined, logNever } from '../../../check'
import { isDefined, logNever, checkNever } from '../../../check'
import {
type TimelineEvent_OneOf,
type Attachment,
Expand Down Expand Up @@ -52,6 +52,7 @@ import {
MemberBlockchainTransactionEvent,
UserReceivedBlockchainTransactionEvent,
StreamEncryptionAlgorithmEvent,
TipEvent,
} from './timeline-types'
import type { PlainMessage } from '@bufbuild/protobuf'
import { userIdFromAddress, streamIdFromBytes, streamIdAsString } from '../../../id'
Expand All @@ -63,7 +64,6 @@ import {
type RemoteTimelineEvent,
isCiphertext,
} from '../../../types'
import { checkNever } from '@river-build/web3'

type SuccessResult = {
content: TimelineEvent_OneOf
Expand Down Expand Up @@ -373,14 +373,46 @@ function toTownsContent_MemberPayload(
algorithm: value.content.value.algorithm,
} satisfies StreamEncryptionAlgorithmEvent,
}
case 'memberBlockchainTransaction':
return {
content: {
kind: RiverTimelineEvent.MemberBlockchainTransaction,
transaction: value.content.value.transaction,
fromUserId: bin_toHexString(value.content.value.fromUserAddress),
} satisfies MemberBlockchainTransactionEvent,
case 'memberBlockchainTransaction': {
const fromUserAddress = value.content.value.fromUserAddress
const transaction = value.content.value.transaction
if (!transaction) {
return { error: `${description} no transaction` }
}
if (!transaction.receipt?.transactionHash) {
return { error: `${description} no transactionHash` }
}
switch (transaction.content.case) {
case 'tip': {
const tipContent = transaction.content.value
if (!tipContent.event) {
return { error: `${description} no event in tip` }
}
return {
content: {
kind: RiverTimelineEvent.TipEvent,
transaction: transaction,
tip: tipContent,
transactionHash: bin_toHexString(transaction.receipt.transactionHash),
fromUserId: userIdFromAddress(fromUserAddress),
refEventId: bin_toHexString(tipContent.event.messageId),
toUserId: userIdFromAddress(tipContent.toUserAddress),
} satisfies TipEvent,
}
}
case undefined:
return {
content: {
kind: RiverTimelineEvent.MemberBlockchainTransaction,
transaction: value.content.value.transaction,
fromUserId: bin_toHexString(value.content.value.fromUserAddress),
} satisfies MemberBlockchainTransactionEvent,
}
default:
logNever(transaction.content)
return { error: `${description} unknown transaction content` }
}
}
case undefined:
return { error: `Undefined payload case: ${description}` }
default:
Expand Down Expand Up @@ -969,6 +1001,10 @@ export function getFallbackContent(
return `memberTransaction from: ${
content.fromUserId
} ${getFallbackContent_BlockchainTransaction(content.transaction)}`
case RiverTimelineEvent.TipEvent:
return `tip from: ${content.fromUserId} to: ${content.toUserId} refEventId: ${
content.refEventId
} amount: ${content.tip.event?.amount.toString() ?? '??'}`
case RiverTimelineEvent.UserReceivedBlockchainTransaction:
return `kind: ${
content.receivedTransaction.transaction?.content?.case ?? '??'
Expand All @@ -979,6 +1015,8 @@ export function getFallbackContent(
}`
case RiverTimelineEvent.StreamEncryptionAlgorithm:
return `algorithm: ${content.algorithm}`
default:
checkNever(content)
}
}

Expand Down

0 comments on commit 8b9541f

Please sign in to comment.