kitplummer

kitplummer

Heyo. Trying to figure out the best way to use websockex to stream Kraken trades. Their API requires a payload to define the subscription, possibly including an auth token for private data. I’m able to connect and get a basic status event back but am not sure how to send the payload from the start_link function.

Any ideas? TIA.

Showing Posts 1 to 4

kitplummer

kitplummer OP

defmodule Streamer.Kraken do
  use WebSockex

  require Logger

  @stream_endpoint "wss://beta-ws.kraken.com"

  def start_link(symbol) do

    ## Get Kraken Websocket Token only needed for private endpoints
    ## {:ok, %{"expires" =>  expires, "token" => token}} = Krakex.websockets_token()}

    lowercased_symbol = String.downcase(symbol)

    WebSockex.start_link(
      "#{@stream_endpoint}",
      __MODULE__,
      nil,
      name: :"#{__MODULE__}-#{lowercased_symbol}"
    )

  end

  def subscribe(client, symbol) do
    json = """
    {"event": "subscribe", "pair": ["#{symbol}"], "subscription": {"name": "trade"}}
    """

    Logger.info("Sending message: #{json}")
    WebSockex.send_frame(client, {:text, json})
  end

  def handle_connect(_conn, state) do
    Logger.info("Kraken WS Connected!")
    subscribe(self(), "ADA/USDT")
    {:ok, state}
  end

  def handle_frame({_type, msg}, state) do
    IO.inspect msg
    case Jason.decode(msg) do
      {:ok, event} -> process_event(event)
      {:error, _} -> Logger.error("Unable to parse msg: #{msg}")
    end

    {:ok, state}
  end

And when I run this I get:

** (MatchError) no match of right hand side value: {:error, %WebSockex.CallingSelfError{function: :send_frame}}

I’m using a DynamicSupervisor to run the worker - so was looking for a way to get all the way through the subscribe from the start_link flow.

If I don’t use the supervisor and run it manually in two steps it works.

mushu8

mushu8

Hi,
did you get how to subscribe to a subject after the connection has been established ?

mushu8

mushu8

for future ref :
call WebSockex.cast\2 in the connect\ callback as such :

def handle_connect(_conn, state) do
    WebSockex.cast(self(), :subscribe)
    {:ok, state}
end

def handle_cast(:subscribe, state) do
    {:reply, {:text, subscription_frame()}, state}
end
— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
mnkhod
So i have been using ash framework for a while and i love it. However currently the issue im having with ash framework is the error handl...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews