defmodule Polymarket.WebSocket.MessageHandler do
@moduledoc """
Pure functions to handle messages coming from the Polymarket websocket.
"""
@spec handle_message(map(), Polymarket.WebSocket.t()) ::
{:reply, {:text, String.t()}, Polymarket.WebSocket.t()}
| {:noreply, Polymarket.WebSocket.t()}
def handle_message(message, state) do
case message do
%{event_type: "new_market"} ->
{:reply, {:text, subscribe_message(message.clob_token_ids)}, state}
_ ->
{:noreply, state}
end
end
defp subscribe_message(asset_ids) do
%{
operation: "subscribe",
assets_ids: asset_ids,
custom_feature_enabled: true,
level: 2,
initial_dump: true
}
|> Jason.encode!()
end
end