sse

Server-Sent Events (SSE) support for MoonBit (JS client + Native server)

moon add f4ah6o/sse@0.3.0
Download zip
Author
Version
0.3.0
License
Apache-2.0
Last updated
6 months ago
Downloads
18

Dependencies

README

#sse.mbt

Server-Sent Events (SSE) support for MoonBit/JS.

This library provides a type-safe interface to the browser's EventSource API for receiving server-sent events in MoonBit applications targeting JavaScript.

#Features

  • Type-safe SSE client implementation
  • Fluent API for event handler registration
  • Automatic reconnection with configurable retry logic
  • Connection state management
  • Event message parsing with optional ID tracking
  • Property-based testing coverage
  • No Dependencies: Built on top of mizchi/js bindings.

#Installation

moon add f4ah6o/sse

#Usage

import sse.{connect, on_message, on_error, on_open, close} fn main { let conn = connect("http://localhost:8080/events") conn |> on_message(fn(msg) { println("Received: \{msg.data}") }) |> on_error(fn(err) { println("Error: \{err}") }) |> on_open(fn(_state) { println("Connection opened") }) // Close when done close(conn) }

#Named Events

import sse.{connect, on} let conn = connect("http://localhost:8080/events") conn |> on("notification", fn(msg) { println("Notification: \{msg.data}") }) |> on("update", fn(msg) { println("Update: \{msg.data}") })

#Auto-Reconnection

import sse.{connect, setup_auto_reconnect, on_message} let conn = connect("http://localhost:8080/events") |> setup_auto_reconnect |> on_message(fn(msg) { println("Received: \{msg.data}") }) // Will automatically reconnect on connection loss // up to max_retries times with reconnect_interval delay

#Custom Configuration

import sse.{ default_connection_config, connect_with_config, on_message } let config = { ...default_connection_config("http://localhost:8080/events") with_credentials: true reconnect_interval: 5000 max_retries: 5 } let conn = connect_with_config(config) |> on_message(fn(msg) { println("Event: \{msg.event_name}, Data: \{msg.data}") })

#Building & Testing

# Build for JavaScript target moon build --target js # Run tests moon test --target js # Update snapshots after behavioral changes moon test --target js --update

#License

Apache-2.0

#
ConnectionStateHandler

type ConnectionStateHandler = (EventState) -> Unit

Connection state handler type

#
EventHandler

type EventHandler = (SseMessage) -> Unit

Event handler type for SSE events

#
ConnectionConfig

pub struct ConnectionConfig {
url : String
with_credentials : Bool
reconnect_interval : Int
max_retries : Int
}

Connection configuration for SSE

#
EventState

pub enum EventState {
Connecting
Open
Closed
Error
}

SSE Event State enumeration
impl Show for EventState

#
SSEEvent

pub(all) struct SSEEvent {
data : String
event : String?
id : String?
}

Server-side SSE event structure
impl Eq for SSEEvent
impl Show for SSEEvent

#
SSEEvent::data_only

fn SSEEvent::data_only(data : String) -> SSEEvent

#
SSEEvent::new

fn SSEEvent::new(data : String, event : String, id : String?) -> SSEEvent

#
SseMessage

pub struct SseMessage {
event_name : String
data : String
origin : String
id : String?
}

SSE Message structure

#
CLOSED

let CLOSED : Int

#
CONNECTING

let CONNECTING : Int

EventSource ready state constants

#
OPEN

let OPEN : Int

#
default_connection_config

fn default_connection_config(url : String) -> ConnectionConfig

Default connection configuration

#
format_event

fn format_event(event : SSEEvent) -> String

#
ready_state_to_event_state

fn ready_state_to_event_state(state : Int) -> EventState

Convert ready state to EventState

Source Files

Powered by MoonBit

Site sourceReport issuePackagesBuild queueSkillsStatistics

© 2026 mooncakes.io