UNPKG

@towns-protocol/sdk

Version:

For more details, visit the following resources:

88 lines 3.64 kB
import { StreamStateView_AbstractContent } from './streamStateView_AbstractContent'; import { check } from '@towns-protocol/dlog'; import { logNever } from './check'; import { userIdFromAddress } from './id'; export class StreamStateView_DMChannel extends StreamStateView_AbstractContent { dmStreamsView; streamId; get firstPartyId() { return this.dmStreamModel.firstPartyId; } get secondPartyId() { return this.dmStreamModel.secondPartyId; } get lastEventCreatedAtEpochMs() { return this.dmStreamModel.lastEventCreatedAtEpochMs; } get dmStreamModel() { return this.dmStreamsView.get(this.streamId); } constructor(streamId, dmStreamsView) { super(); this.dmStreamsView = dmStreamsView; this.streamId = streamId; } applySnapshot(snapshot, content, _cleartexts, _encryptionEmitter) { if (content.inception) { this.dmStreamsView.setParticipants(this.streamId, userIdFromAddress(content.inception.firstPartyAddress), 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.decryptEvent('channelMessage', event, payload.content.value, cleartext, encryptionEmitter); this.updateLastEvent(event.remoteEvent, undefined); 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.dmStreamsView.setLastEventCreatedAtEpochMs(this.streamId, event.createdAtEpochMs); stateEmitter?.emit('streamLatestTimestampUpdated', this.streamId); } updateLastEvent(event, stateEmitter) { const createdAtEpochMs = event.event.createdAtEpochMs; if (createdAtEpochMs > this.lastEventCreatedAtEpochMs) { this.dmStreamsView.setLastEventCreatedAtEpochMs(this.streamId, 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