summaryrefslogtreecommitdiff
path: root/ui/lib/apiServer.js
Commit message (Collapse)AuthorAge
* Rename "channel" to "conversation" throughout the client.Owen Jacobson2025-07-03
| | | | Existing client state, stored in local storage, is migrated to new keys (that mention "conversation" instead of "channel" where appropriate) the first time the client loads.
* Replace `channel` with `conversation` throughout the API.Owen Jacobson2025-07-03
| | | | This is a **breaking change** for essentially all clients. Thankfully, there's presently just the one, so we don't need to go to much effort to accommoate that; the client is modified in this commit to adapt, users can reload their client, and life will go on.
* tools/reformatOwen Jacobson2025-06-11
|
* Don't retry operations where we received an unacceptable response.Owen Jacobson2025-05-05
| | | | | | | | This was actually two issues in one! Issue 1: `isRetryable` did not consider whether we got a response or not. It assumed that the presence of a request in the error signaled that the error was definitely due to network issues, when in fact it's the presence of a request _and_ the absence of a response. That's my misreading of the Axios docs; the replacement `isRetryable` is more thorough. Issue 2: operations in the outbox queue that fail with an exception stop the outbox drain process from making further progress, _and_ they stay in the queue. The outbox now dequeues jobs that throw an exception, and restarts itself if it terminates with a non-empty queue. The code that does this is _heinous_, but it seems to work well enough… Words I'm sure I won't come to regret.
* Naming improvements c/o KitOwen Jacobson2025-04-23
|
* When booting a session, retry every five seconds if unable to send the request.Owen Jacobson2025-04-22
| | | | | | This is intended to transparently resume the session (using `boot` to start over) after more serious connection interruptions. It interacts with the heartbeat timeout: we let the browser try to reconnect through `EventSource` on its own for up to 30 seconds, before intervening, closing the event source, and starting attempts to call `boot`. This covers both initial boot, which will now hang if the server is unavailable (sorry), and reconnection after an event timeout. No other operations are retried (particularly, sending a message is _not_ retried).
* Rename `login` to `user` in the client.Owen Jacobson2025-03-24
|
* Remove stray importsOwen Jacobson2025-02-21
|
* Split "set up the event source" and "apply events to state" from one another.Owen Jacobson2025-02-21
|
* Use axios to compute event stream URL, why not.Owen Jacobson2025-02-20
| | | | It's amazing what you can learn by skimming the docs.
* Prefer camelCase to snake_case in argument namesKit La Touche2024-11-29
| | | | Even when they get mapped to snake_case searchParams.
* Deletable messages.Owen Jacobson2024-11-08
| | | | This also fixes some rendering jank with the message timestamp chip.
* Tweak addMessage call signatureKit La Touche2024-11-07
|
* Run spaces-style prettier formattingKit La Touche2024-11-03
|
* Address outstanding lint issues.Owen Jacobson2024-11-02
|
* Run prettier, make lint part of pre-commitOwen Jacobson2024-11-02
|
* Remove notification permissions prompt.Owen Jacobson2024-11-02
| | | | On Safari (iOS and macOS), the permissions prompt can only be done during a user gesture; mounting is sufficiently disconnected from any user gestures that it's not allowed. The browser raises an exception, which, since it is unhandled, then leaks out and interrupts SvelteKit's element unmounting, leading to the whole UI being duplicated when switching channels (the old UI is not unmounted).
* Do some toast notificatingKit La Touche2024-10-31
|
* Don't leave field binding vars uninitialized.Owen Jacobson2024-10-30
| | | | | | This was causing problems for changing passwords: if the user didn't type anything in the "original password" field, the code path to sending that field to the server was just straight-up omitting the field from the message, rather than setting it to empty string, causing a 422 Unprocessable Entity. On investigation we had latent bugs related to this in a bunch of spots.
* Add `change password` UI + API.Owen Jacobson2024-10-29
| | | | The protocol here re-checks the caller's password, as a "I left myself logged in" anti-pranking check.
* Take a swing at putting an invite UI in place.Owen Jacobson2024-10-25
|
* Initial invite accept UIOwen Jacobson2024-10-12
|
* Return a distinct error when an invite username is in use.Owen Jacobson2024-10-11
| | | | I've also aligned channel creation with this (it's 409 Conflict). To make server setup more distinct, it now returns 503 Service Unavailable if setup has not been completed.
* Provide a separate "initial setup" endpoint that creates a user.Owen Jacobson2024-10-11
|
* Move login to its own route.Owen Jacobson2024-10-11
| | | | This - in passing - fixes the problem where the client failed to subscribe after logging in, by causing the whole subscription process to be re-run when returning to the main interface.
* Compute the active channel from the current routing state, not from a store.Owen Jacobson2024-10-10
|
* Hoist the UI one step up furtherOwen Jacobson2024-10-10