diff --git a/internal/auth/cookie.go b/internal/auth/cookie.go
index e426edd..14fdfa5 100644
--- a/internal/auth/cookie.go
+++ b/internal/auth/cookie.go
@@ -10,11 +10,6 @@ import (
// Shared by password login, registration, and WebAuthn login.
func SetSessionCookie(w http.ResponseWriter, cookieName, token string, duration time.Duration) {
secure := os.Getenv("COOKIE_SECURE") == "true"
-
- sameSite := http.SameSiteLaxMode
- if secure {
- sameSite = http.SameSiteStrictMode
- }
http.SetCookie(w, &http.Cookie{
Name: cookieName,
@@ -22,7 +17,7 @@ func SetSessionCookie(w http.ResponseWriter, cookieName, token string, duration
Path: "/",
HttpOnly: true,
Secure: secure,
- SameSite: sameSite,
+ SameSite: http.SameSiteDefaultMode,
MaxAge: int(duration.Seconds()),
})
}
diff --git a/web/src/components/ChatArea.tsx b/web/src/components/ChatArea.tsx
index b77fff8..d387d9e 100644
--- a/web/src/components/ChatArea.tsx
+++ b/web/src/components/ChatArea.tsx
@@ -82,10 +82,10 @@ export function ChatArea() {
{messages.map((message) => (
- [{formatTime(message.createdAt)}]
+ [{formatTime(message.created_at)}]
{" "}
- <{message.author.username}>
+ <{message.author_username}>
{" "}
{message.content}
diff --git a/web/src/stores/message.ts b/web/src/stores/message.ts
index 01448df..031dc6c 100644
--- a/web/src/stores/message.ts
+++ b/web/src/stores/message.ts
@@ -1,14 +1,15 @@
-import { create } from 'zustand';
-import { api } from '../lib/api.ts';
-import type { User } from './auth.ts';
+import { create } from "zustand";
+import { api } from "../lib/api.ts";
export interface Message {
id: string;
- channelId: string;
- author: User;
+ channel_id: string;
+ author_id: string;
+ author_username: string;
+ author_display_name: string | null;
content: string;
- createdAt: string;
- updatedAt?: string;
+ created_at: string;
+ edited_at: string | null;
}
interface MessageState {
@@ -30,22 +31,33 @@ export const useMessageStore = create((set) => ({
fetchMessages: async (channelId, before) => {
set({ isLoading: true, error: null });
try {
- const params = before ? `?before=${encodeURIComponent(before)}` : '';
- const messages = await api.get(`/channels/${channelId}/messages${params}`);
+ const params = before ? `?before=${encodeURIComponent(before)}` : "";
+ const messages = await api.get(
+ `/channels/${channelId}/messages${params}`,
+ );
set((state) => ({
- messagesByChannel: { ...state.messagesByChannel, [channelId]: messages },
+ messagesByChannel: {
+ ...state.messagesByChannel,
+ [channelId]: Array.isArray(messages) ? messages : [],
+ },
isLoading: false,
}));
} catch (error) {
set({
isLoading: false,
- error: error instanceof Error ? error.message : 'Failed to fetch messages',
+ error:
+ error instanceof Error
+ ? error.message
+ : "Failed to fetch messages",
});
}
},
sendMessage: async (channelId, content) => {
- const message = await api.post(`/channels/${channelId}/messages`, { content });
+ const message = await api.post(
+ `/channels/${channelId}/messages`,
+ { content },
+ );
set((state) => {
const list = state.messagesByChannel[channelId] || [];
return {
@@ -60,25 +72,27 @@ export const useMessageStore = create((set) => ({
addMessage: (message) =>
set((state) => {
- const list = state.messagesByChannel[message.channelId] || [];
+ const list = state.messagesByChannel[message.channel_id] || [];
if (list.some((m) => m.id === message.id)) {
return state;
}
return {
messagesByChannel: {
...state.messagesByChannel,
- [message.channelId]: [...list, message],
+ [message.channel_id]: [...list, message],
},
};
}),
updateMessage: (message) =>
set((state) => {
- const list = state.messagesByChannel[message.channelId] || [];
+ const list = state.messagesByChannel[message.channel_id] || [];
return {
messagesByChannel: {
...state.messagesByChannel,
- [message.channelId]: list.map((m) => (m.id === message.id ? message : m)),
+ [message.channel_id]: list.map((m) =>
+ m.id === message.id ? message : m,
+ ),
},
};
}),
diff --git a/web/src/stores/ws.ts b/web/src/stores/ws.ts
index 4238525..5f1974d 100644
--- a/web/src/stores/ws.ts
+++ b/web/src/stores/ws.ts
@@ -50,14 +50,14 @@ function extractServer(payload: UnknownPayload): Server | null {
}
function extractIds(payload: UnknownPayload): { channelId: string; messageId: string } | null {
- if (typeof payload.channelId !== 'string' || typeof payload.messageId !== 'string') {
+ if (typeof payload.channel_id !== 'string' || typeof payload.message_id !== 'string') {
return null;
}
- return { channelId: payload.channelId, messageId: payload.messageId };
+ return { channelId: payload.channel_id, messageId: payload.message_id };
}
function extractChannelId(payload: UnknownPayload): string | null {
- return typeof payload.channelId === 'string' ? payload.channelId : null;
+ return typeof payload.channel_id === 'string' ? payload.channel_id : null;
}
export const useWebSocketStore = create((set, get) => ({
@@ -142,7 +142,7 @@ export const useWebSocketStore = create((set, get) => ({
}
case 'message_deleted': {
const ids = extractIds(data.payload);
- if (ids) removeMessage(ids.channelId, ids.messageId);
+ if (ids) removeMessage(ids.channel_id, ids.message_id);
break;
}
case 'channel_created': {