@river-build/sdk
Version:
For more details, visit the following resources:
109 lines • 3.82 kB
JavaScript
import { PersistedEventSchema, PersistedMiniblockSchema, } from '@river-build/proto';
import { bin_toHexString } from '@river-build/dlog';
import { create } from '@bufbuild/protobuf';
import { isDefined, logNever } from './check';
export function isPersistedEvent(event, direction) {
if (!event.event) {
return false;
}
switch (event.event.payload.case) {
case 'channelPayload':
return true;
case 'dmChannelPayload':
return true;
case 'gdmChannelPayload':
return true;
case 'mediaPayload':
return true;
case 'userPayload':
switch (event.event.payload.value.content.case) {
case 'blockchainTransaction':
return true;
case 'receivedBlockchainTransaction':
return true;
default:
return direction === 'forward' ? true : false;
}
case 'userSettingsPayload':
return direction === 'forward' ? true : false;
case 'miniblockHeader':
return true;
case 'userMetadataPayload':
return direction === 'forward' ? true : false;
case 'memberPayload': {
switch (event.event.payload.value.content.case) {
case 'keySolicitation':
return direction === 'forward' ? true : false;
case 'keyFulfillment':
return direction === 'forward' ? true : false;
case 'memberBlockchainTransaction':
return true;
case undefined:
return false;
default:
return direction === 'forward' ? true : false;
}
}
case 'spacePayload':
return direction === 'forward' ? true : false;
case 'userInboxPayload':
return direction === 'forward' ? true : false;
case undefined:
return false;
default:
logNever(event.event.payload, `unsupported event payload ${event.event.payload}`);
return false;
}
}
export function persistedEventToParsedEvent(event) {
if (!event.event) {
return undefined;
}
return {
event: event.event,
hash: event.hash,
hashStr: bin_toHexString(event.hash),
signature: event.signature,
creatorUserId: event.creatorUserId,
};
}
export function persistedMiniblockToParsedMiniblock(miniblock) {
if (!miniblock.header) {
return undefined;
}
return {
hash: miniblock.hash,
header: miniblock.header,
events: miniblock.events.map(persistedEventToParsedEvent).filter(isDefined),
};
}
export function parsedMiniblockToPersistedMiniblock(miniblock, direction) {
return create(PersistedMiniblockSchema, {
hash: miniblock.hash,
header: miniblock.header,
events: miniblock.events
.filter((event) => isPersistedEvent(event, direction))
.map(parsedEventToPersistedEvent),
});
}
function parsedEventToPersistedEvent(event) {
return create(PersistedEventSchema, {
event: event.event,
hash: event.hash,
signature: event.signature,
creatorUserId: event.creatorUserId,
});
}
export function persistedSyncedStreamToParsedSyncedStream(streamId, stream) {
if (!stream.syncCookie) {
return undefined;
}
return {
streamId,
syncCookie: stream.syncCookie,
lastSnapshotMiniblockNum: stream.lastSnapshotMiniblockNum,
minipoolEvents: stream.minipoolEvents.map(persistedEventToParsedEvent).filter(isDefined),
lastMiniblockNum: stream.lastMiniblockNum,
};
}
//# sourceMappingURL=streamUtils.js.map