Social & guild chat¶
The Social tab (/launcher/friends) hosts the account-level friend graph,
direct messages, and a bridge into every guild the user's characters
belong to. Independent of the in-game character friend list — these
friendships outlive character deletion and follow the user across launcher,
browser portal, and game.
Schema¶
social.account_friendship— bidirectional account graph. Two rows per accepted friendship so each side carries its own per-pair flags (show_real_name,note, blocked state).social.account_chat_message— DM history withsourcetag (launcher, web, game).social.account_presence— last-seen state per account, written by the WebSocket on connect / disconnect and by the auth server on login.social.guild_chat_message— persisted G + Officer chat. Mirrored from in-game bysplintertree-socialon every/gand/oline.
Endpoints¶
/api/v1/social/*:
GET /friends— list with status (pending / accepted), online flag, presence source, real-name resolution (only when both sides opted in).POST /friends/request { splintertag }— auto-promotes both edges to accepted if the recipient already requested us.POST /friends/:id/accept,DELETE /friends/:id,PATCH /friends/:idfor accept, decline / cancel / remove, and toggling real-name visibility.GET / POST /messages/:id— DM history with friendship gate.GET /guilds,GET / POST /guilds/:id/messages?channel=G|O— guild channel history; officer rank checked at read + write time.GET /social/ws?token=— JSON-line WebSocket. Server pushesmessage,guild_message,friend_request,presence. Connect / disconnect updatesaccount_presence.
Cross-service bridges¶
| Direction | Subject |
|---|---|
| Game → web/launcher | wow.social.guildchat (every /g and /o line lands here) |
| Web/launcher → game | wow.social.guildchat.relay |
| Web/launcher → game (DM) | wow.social.acct_dm.relay |
| Web/launcher → game (friend request) | wow.social.acct_friend.relay |
splintertree-social subscribes to the relay subjects and pushes
SMSG_MESSAGECHAT addon-message frames (prefix STAIO) to every online
character of the recipient. The Splintertree AIO addon's social channel
handler renders the events into a system frame + chat line.
Live updates¶
The Vue store (stores/social.ts) opens the WebSocket once per session.
The launcher layout reconnects on refreshAuth, so DMs land even when
the player is on the home page. Friend list refreshes are pushed
alongside friend-request events so /splintertag list in the addon
stays current without a re-login.