/realtime-go

Realtime Go client library for supabase/realtime

Primary LanguageGo

realtime-go

Realtime-go is a client library for supabase/realtime.

The package interface closely mirrors the supabase/realtime-js library.

Usage

package main

import (
	"log"
	realtimego "github.com/overseedio/realtime-go"
)

func main() {
	// phoneix realtime server endpoint
	const ENDPOINT = "https://{SUPABASE_DB_ID}.supabase.co"
	// gateway api key
	const API_KEY = "..."
	// (optional) auth token
	const RLS_TOKEN = "..."

	// create client
	c, err := realtimego.NewClient(ENDPOINT, API_KEY,
		realtimego.WithUserToken(RLS_TOKEN),
	)
	if err != nil {
		log.Fatal(err)
	}

	// connect to server
	err = c.Connect()
	if err != nil {
		log.Fatal(err)
	}

	// create and subscribe to channel
	db := "realtime"
	schema := "public"
	table := "my_table"
	ch, err := c.Channel(realtimego.WithTable(&db, &schema, &table))
	if err != nil {
		log.Fatal(err)
	}

	// setup hooks
	ch.OnInsert = func(m realtimego.Message) {
		log.Println("***ON INSERT....", m)
	}
	ch.OnDelete = func(m realtimego.Message) {
		log.Println("***ON DELETE....", m)
	}
	ch.OnUpdate = func(m realtimego.Message) {
		log.Println("***ON UPDATE....", m)
	}

	// subscribe to channel
	err = ch.Subscribe()
	if err != nil {
		log.Fatal(err)
	}
}