diff options
| author | Kit La Touche <kit@transneptune.net> | 2024-10-09 15:32:52 -0400 |
|---|---|---|
| committer | Kit La Touche <kit@transneptune.net> | 2024-10-09 15:32:52 -0400 |
| commit | bd53a51af835478d23bef4772ce7e50553dc3fdf (patch) | |
| tree | 3f190a47b9f704c412d0ff684b959abf003b8e5b /hi-ui/src/lib/apiServer.js | |
| parent | dd62b823e01934a0f841256fdb17b551091896bf (diff) | |
Move a lot of things around
Diffstat (limited to 'hi-ui/src/lib/apiServer.js')
| -rw-r--r-- | hi-ui/src/lib/apiServer.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/hi-ui/src/lib/apiServer.js b/hi-ui/src/lib/apiServer.js new file mode 100644 index 0000000..9a51715 --- /dev/null +++ b/hi-ui/src/lib/apiServer.js @@ -0,0 +1,76 @@ +import axios from 'axios'; +import { activeChannel, channelsList, messages } from '$lib/store'; + +export const apiServer = axios.create({ + baseURL: '/api/', +}); + +export async function boot() { + return apiServer.get('/boot'); +} + +export async function logIn(username, password) { + const data = { + name: username, + password, + }; + return apiServer.post('/auth/login', data); +} + +export async function logOut() { + return apiServer.post('/auth/logout', {}); +} + +export async function createChannel(name) { + return apiServer.post('/channels', { name }); +} + +export async function postToChannel(channelId, message) { + return apiServer.post(`/channels/${channelId}`, { message }); +} + +export async function deleteMessage(messageId) { + // TODO +} + +export function subscribeToEvents(resume_point) { + const eventsUrl = new URL('/api/events', window.location); + eventsUrl.searchParams.append('resume_point', resume_point); + const evtSource = new EventSource(eventsUrl.toString()); + // TODO: this should process all incoming events and store them. + // TODO: eventually we'll need to handle expiring old info, so as not to use + // infinite browser memory. + /* + * Known message types as of now: + * - created: a channel is created. + * - action: ignore. + * - message: a message is created. + * - action: display message in channel. + * - message_deleted: a message is deleted. + * - action: replace message with <...>. + * - deleted: a channel is deleted. + * - action: remove channel from sidebar. + */ + evtSource.onmessage = (evt) => { + const data = JSON.parse(evt.data); + + switch (data.type) { + case 'created': + channelsList.update((value) => value.addChannel(data.channel)) + break; + case 'message': + messages.update((value) => value.addMessage(data)); + break; + case 'message_deleted': + messages.update((value) => value.deleteMessage(data.channel.id, data.message)); + break; + case 'deleted': + activeChannel.update((value) => value.deleteChannel(data.channel)); + channelsList.update((value) => value.deleteChannel(data.channel)); + messages.update((value) => value.deleteChannel(data.channel)); + break; + default: + break; + } + } +} |
