touche 0.0.15

Synchronous HTTP library
Documentation
<!DOCTYPE html>
<html>
  <head>
    <script>
      document.addEventListener("DOMContentLoaded", () => {
        const socket = new WebSocket("ws://localhost:4444/ws");

        const messages = document.getElementById("messages");
        socket.addEventListener("message", function (event) {
          const data = JSON.parse(event.data);

          switch (data.type) {
            case "user": {
              const { id: userId } = data;
              messages.insertAdjacentHTML("beforeend", `<li>${userId} joined</li>`);
              break;
            }

            case "message": {
              const { userId, text } = data;
              messages.insertAdjacentHTML("beforeend", `<li>${userId}: ${text}</li>`);
              break;
            }
          }
        });

        const messageForm = document.getElementById("message-form");
        messageForm.addEventListener("submit", evt => {
          evt.preventDefault();
          socket.send(messageForm.message.value);
          messageForm.message.value = "";
        });
      });
    </script>
  </head>

  <body>
    <form id="message-form">
      <input type="text" name="message">
      <button type="submit">Send</button>
    </form>

    <ul id="messages"></ul>
  </body>
</html>