Skip to content

A simple go package for interacting with the Coinbase Advanced Trade WebSocket

License

Notifications You must be signed in to change notification settings

apperia-de/catws

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coinbase Advanced Trade WebSocket (catws)

Go Report Card GitHub go.mod Go version GitHub Licence

This go package provides an easy accessible API for connecting and consuming the Coinbase Advanced Trade WebSocket.

See Advanced Trade WebSocket Overview for more details.

Installation

go get -u github.com/apperia-de/catws

Preparation

In order to subscribe to channels and consume data from the Coinbase Advanced Trade WebSocket, you need to create an API key first.

Please visit Creating Cloud API keys for details about creating an API key.

Example usage

package main

import (
	"fmt"
	"github.com/apperia-de/catws"
	"os"
	"os/signal"
	"time"
)

func main() {
	c := make(chan os.Signal, 1)
	signal.Notify(c, os.Interrupt)

	ws := catws.New(
		catws.WithCredentials("YOUR_COINBASE_API_KEY", "YOUR_COINBASE_API_SECRET"),
		catws.WithLogging(), // Enable logging.
		catws.WithSubscriptions(map[string][]string{ // Set default subscriptions -> will be also established after reconnect.
			catws.UserChannel:    nil,
			catws.CandlesChannel: {"BTC-EUR"},
		}),
		catws.WithMaxElapsedTime(time.Hour), // Retry reconnect with exponential backoff for at most 1hour before exiting the app.
	)
	// Subscribe to Ticker batch updates for some product ids
	ws.Subscribe(catws.TickerBatchChannel, []string{"BTC-EUR", "ETH-EUR", "XRP-EUR"}) // Will not be established after reconnect
	closeChan := make(chan struct{})

	go func() {
		for {
			select {
			//case m := <-ws.Channel.Heartbeat:
			//	fmt.Println(m)
			case m := <-ws.Channel.User:
				fmt.Println(m)
			case m := <-ws.Channel.Ticker:
				fmt.Println(m)
			case m := <-ws.Channel.Status:
				fmt.Println(m)
			case m := <-ws.Channel.MarketTrades:
				fmt.Println(m)
			case m := <-ws.Channel.Level2:
				fmt.Println(m)
			case <-closeChan:
				fmt.Println("shutdown go-routine...")
				return
			}
		}
	}()

	// Block until a signal is received. (CTRL-C)
	<-c
	closeChan <- struct{}{}
	fmt.Println("closing websocket...")
	if err := ws.CloseNormal(); err != nil {
		fmt.Println(err)
	}
}

About

A simple go package for interacting with the Coinbase Advanced Trade WebSocket

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages