frontend client for gemstone. decentralised workplace app
1import type { WebsocketMessage } from "@/lib/types/messages";
2import {
3 websocketMessageSchema,
4} from "@/lib/types/messages";
5import type { Result } from "@/lib/utils/result";
6import { z } from "zod";
7
8export const validateWsMessageString = (
9 data: unknown,
10): Result<string, unknown> => {
11 const { success, error, data: message } = z.string().safeParse(data);
12 if (!success) {
13 console.error("Error decoding websocket message");
14 console.error(error);
15 return { ok: false, error: z.treeifyError(error) };
16 }
17 return { ok: true, data: message };
18};
19
20export const validateWsMessageType = (
21 data: unknown,
22): Result<WebsocketMessage, unknown> => {
23 const {
24 success: wsMessageSuccess,
25 error: wsMessageError,
26 data: wsMessage,
27 } = websocketMessageSchema.safeParse(data);
28 if (!wsMessageSuccess) {
29 console.error(
30 "Error parsing websocket message. The data might be the wrong shape.",
31 );
32 console.error(wsMessageError);
33 return { ok: false, error: z.treeifyError(wsMessageError) };
34 }
35 return { ok: true, data: wsMessage };
36};