;;; noise-sse.el --- SSE client for signal-cli -*- lexical-binding: t; -*- ;;; Commentary: ;; Implements Server-Sent Events client for receiving real-time messages ;; from signal-cli daemon's /api/v1/events endpoint. ;;; Code: (require 'url) (require 'json) (require 'cl-lib) (defun noise-sse--parse-event (event-string) "Parse an SSE EVENT-STRING into a hash table. Returns nil for empty or invalid events." (when (and event-string (not (string-empty-p event-string))) (let ((lines (split-string event-string "\n")) (data-lines '())) (dolist (line lines) (when (string-prefix-p "data: " line) (push (substring line 6) data-lines))) (when data-lines (let ((json-str (mapconcat #'identity (nreverse data-lines) ""))) (condition-case nil (json-parse-string json-str) (error nil))))))) (provide 'noise-sse) ;;; noise-sse.el ends here