mirror of
https://github.com/logos-messaging/OpChan.git
synced 2026-01-02 21:03:09 +00:00
82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { createDecoder, createEncoder } from '@waku/sdk';
|
|
import { MessageType } from './types';
|
|
import { CellMessage, PostMessage, CommentMessage, VoteMessage } from './types';
|
|
import { CONTENT_TOPICS, NETWORK_CONFIG } from './constants';
|
|
import { OpchanMessage } from '@/types/forum';
|
|
|
|
export const encoders = {
|
|
[MessageType.CELL]: createEncoder({
|
|
contentTopic: CONTENT_TOPICS['cell'],
|
|
pubsubTopicShardInfo: {clusterId: NETWORK_CONFIG.clusterId, shard: 0}
|
|
}),
|
|
[MessageType.POST]: createEncoder({
|
|
contentTopic: CONTENT_TOPICS['post'],
|
|
pubsubTopicShardInfo: {clusterId: NETWORK_CONFIG.clusterId, shard: 0}
|
|
}),
|
|
[MessageType.COMMENT]: createEncoder({
|
|
contentTopic: CONTENT_TOPICS['comment'],
|
|
pubsubTopicShardInfo: {clusterId: NETWORK_CONFIG.clusterId, shard: 0}
|
|
}),
|
|
[MessageType.VOTE]: createEncoder({
|
|
contentTopic: CONTENT_TOPICS['vote'],
|
|
pubsubTopicShardInfo: {clusterId: NETWORK_CONFIG.clusterId, shard: 0}
|
|
}),
|
|
[MessageType.MODERATE]: createEncoder({
|
|
contentTopic: CONTENT_TOPICS['moderate'],
|
|
pubsubTopicShardInfo: {clusterId: NETWORK_CONFIG.clusterId, shard: 0}
|
|
})
|
|
}
|
|
|
|
export const decoders = {
|
|
[MessageType.CELL]: createDecoder(CONTENT_TOPICS['cell'], {
|
|
clusterId: NETWORK_CONFIG.clusterId,
|
|
shard: 0
|
|
}),
|
|
[MessageType.POST]: createDecoder(CONTENT_TOPICS['post'], {
|
|
clusterId: NETWORK_CONFIG.clusterId,
|
|
shard: 0
|
|
}),
|
|
[MessageType.COMMENT]: createDecoder(CONTENT_TOPICS['comment'], {
|
|
clusterId: NETWORK_CONFIG.clusterId,
|
|
shard: 0
|
|
}),
|
|
[MessageType.VOTE]: createDecoder(CONTENT_TOPICS['vote'], {
|
|
clusterId: NETWORK_CONFIG.clusterId,
|
|
shard: 0
|
|
}),
|
|
[MessageType.MODERATE]: createDecoder(CONTENT_TOPICS['moderate'], {
|
|
clusterId: NETWORK_CONFIG.clusterId,
|
|
shard: 0
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Encode a message object into a Uint8Array for transmission
|
|
*/
|
|
export function encodeMessage(message: OpchanMessage): Uint8Array {
|
|
const messageJson = JSON.stringify(message);
|
|
return new TextEncoder().encode(messageJson);
|
|
}
|
|
|
|
|
|
/**
|
|
* Decode a message from a Uint8Array based on its type
|
|
*/
|
|
export function decodeMessage(payload: Uint8Array): OpchanMessage {
|
|
const messageJson = new TextDecoder().decode(payload);
|
|
const message = JSON.parse(messageJson) as OpchanMessage;
|
|
|
|
|
|
switch(message.type) {
|
|
case MessageType.CELL:
|
|
return message as CellMessage;
|
|
case MessageType.POST:
|
|
return message as PostMessage;
|
|
case MessageType.COMMENT:
|
|
return message as CommentMessage;
|
|
case MessageType.VOTE:
|
|
return message as VoteMessage;
|
|
default:
|
|
throw new Error(`Unknown message type: ${message}`);
|
|
}
|
|
} |