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