diff --git a/src/app/app.ts b/src/app/app.ts index 476962c..dab6286 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -44,6 +44,31 @@ export default class Enclave

{ return this.accounts?.accounts[this.accounts.activeAccount] || null; } + public sendMessage(content: string, channelId: string) { + const clientSecretKey = this.getClientSecretKey(); + + if (!clientSecretKey) { + console.error("Acccount not found"); + return; + } + + const timestamp = Date.now(); + + const signature = new TextEncoder().encode( + `${timestamp}@${this.server?.hostname}@${content}`, + ); + + this.server?.websocket?.send({ + method: "SendMessage", + channel_id: channelId, + data: { + content, + timestamp, + signature: base58.encode(ed.sign(signature, clientSecretKey)), + }, + }); + } + public async connectToServer(hostname: string, isSecure: boolean) { if (this.server) { this.server.disconnect(); diff --git a/src/app/protocol.ts b/src/app/protocol.ts index 5d51ed8..23c206f 100644 --- a/src/app/protocol.ts +++ b/src/app/protocol.ts @@ -6,6 +6,17 @@ export interface ServerMeta { channels: Channel[]; } +export interface MessageData { + content: string; + timestamp: number; + signature: string; +} + +export interface StoredMessage extends MessageData { + id: string; + author: string; +} + export type ClientMethod = | { method: "Initialized"; @@ -30,6 +41,11 @@ export type ServerMethod = | { method: "Meta"; } + | { + method: "SendMessage"; + channel_id: string; + data: MessageData; + } | { method: "Error"; error: string; diff --git a/src/components/page/channel/TextChannel.tsx b/src/components/page/channel/TextChannel.tsx index e57dc4a..b584951 100644 --- a/src/components/page/channel/TextChannel.tsx +++ b/src/components/page/channel/TextChannel.tsx @@ -6,5 +6,17 @@ export default function TextChannel({ }: { appRef: React.RefObject | null>; }) { - return

{appRef.current?.page?.channel.name}
; + const channel = appRef.current?.page?.channel; + + if (!channel) return null; + + return ( +
{ + appRef.current?.sendMessage("Hello, World", channel.id); + }} + > + {channel.name} +
+ ); }