@river-build/sdk
Version:
For more details, visit the following resources:
78 lines • 3.22 kB
JavaScript
import { StreamStateView_AbstractContent } from './streamStateView_AbstractContent';
import { check } from '@river-build/dlog';
import { logNever } from './check';
import { userIdFromAddress } from './id';
export class StreamStateView_DMChannel extends StreamStateView_AbstractContent {
streamId;
firstPartyId;
secondPartyId;
lastEventCreatedAtEpochMs = 0n;
constructor(streamId) {
super();
this.streamId = streamId;
}
applySnapshot(snapshot, content, _cleartexts, _encryptionEmitter) {
if (content.inception) {
this.firstPartyId = userIdFromAddress(content.inception.firstPartyAddress);
this.secondPartyId = userIdFromAddress(content.inception.secondPartyAddress);
}
}
appendEvent(event, cleartext, encryptionEmitter, stateEmitter) {
check(event.remoteEvent.event.payload.case === 'dmChannelPayload');
const payload = event.remoteEvent.event.payload.value;
switch (payload.content.case) {
case 'inception':
this.updateLastEvent(event.remoteEvent, stateEmitter);
break;
case 'message':
this.decryptEvent('channelMessage', event, payload.content.value, cleartext, encryptionEmitter);
this.updateLastEvent(event.remoteEvent, stateEmitter);
break;
case undefined:
break;
default:
logNever(payload.content);
}
}
prependEvent(event, cleartext, encryptionEmitter, _stateEmitter) {
check(event.remoteEvent.event.payload.case === 'dmChannelPayload');
const payload = event.remoteEvent.event.payload.value;
switch (payload.content.case) {
case 'inception':
this.updateLastEvent(event.remoteEvent, undefined);
break;
case 'message':
this.updateLastEvent(event.remoteEvent, undefined);
this.decryptEvent('channelMessage', event, payload.content.value, cleartext, encryptionEmitter);
break;
case undefined:
break;
default:
logNever(payload.content);
}
}
onDecryptedContent(_eventId, _content, _stateEmitter) {
// pass
}
onConfirmedEvent(event, stateEmitter, encryptionEmitter) {
super.onConfirmedEvent(event, stateEmitter, encryptionEmitter);
}
onAppendLocalEvent(event, stateEmitter) {
this.lastEventCreatedAtEpochMs = event.createdAtEpochMs;
stateEmitter?.emit('streamLatestTimestampUpdated', this.streamId);
}
updateLastEvent(event, stateEmitter) {
const createdAtEpochMs = event.event.createdAtEpochMs;
if (createdAtEpochMs > this.lastEventCreatedAtEpochMs) {
this.lastEventCreatedAtEpochMs = createdAtEpochMs;
stateEmitter?.emit('streamLatestTimestampUpdated', this.streamId);
}
}
participants() {
if (!this.firstPartyId || !this.secondPartyId) {
return new Set();
}
return new Set([this.firstPartyId, this.secondPartyId]);
}
}
//# sourceMappingURL=streamStateView_DMChannel.js.map