@river-build/sdk
Version:
For more details, visit the following resources:
70 lines • 2.79 kB
JavaScript
import { StreamStateView_AbstractContent } from './streamStateView_AbstractContent';
import { check } from '@river-build/dlog';
import { logNever } from './check';
export class StreamStateView_UserInbox extends StreamStateView_AbstractContent {
streamId;
deviceSummary = {};
constructor(streamId) {
super();
this.streamId = streamId;
}
applySnapshot(snapshot, content, _emitter) {
Object.entries(content.deviceSummary).map(([deviceId, summary]) => {
this.deviceSummary[deviceId] = summary;
});
}
onConfirmedEvent(event, emitter, encryptionEmitter) {
super.onConfirmedEvent(event, emitter, encryptionEmitter);
}
prependEvent(event, _cleartext, encryptionEmitter, _stateEmitter) {
check(event.remoteEvent.event.payload.case === 'userInboxPayload');
const payload = event.remoteEvent.event.payload.value;
switch (payload.content.case) {
case 'inception':
break;
case 'groupEncryptionSessions':
this.addGroupSessions(event.creatorUserId, payload.content.value, encryptionEmitter);
break;
case 'ack':
break;
case undefined:
break;
default:
logNever(payload.content);
}
}
appendEvent(event, _cleartext, encryptionEmitter, stateEmitter) {
check(event.remoteEvent.event.payload.case === 'userInboxPayload');
const payload = event.remoteEvent.event.payload.value;
switch (payload.content.case) {
case 'inception':
break;
case 'groupEncryptionSessions':
this.addGroupSessions(event.creatorUserId, payload.content.value, encryptionEmitter);
break;
case 'ack':
this.updateDeviceSummary(event.remoteEvent, payload.content.value, stateEmitter);
break;
case undefined:
break;
default:
logNever(payload.content);
}
}
addGroupSessions(creatorUserId, content, encryptionEmitter) {
encryptionEmitter?.emit('newGroupSessions', content, creatorUserId);
}
updateDeviceSummary(event, content, stateEmitter) {
const summary = this.deviceSummary[content.deviceKey];
if (summary) {
if (summary.upperBound <= content.miniblockNum) {
delete this.deviceSummary[content.deviceKey];
}
else {
summary.lowerBound = content.miniblockNum + 1n;
}
}
stateEmitter?.emit('userInboxDeviceSummaryUpdated', this.streamId, content.deviceKey, summary);
}
}
//# sourceMappingURL=streamStateView_UserInbox.js.map