UNPKG

@river-build/sdk

Version:

For more details, visit the following resources:

70 lines 2.79 kB
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