Skip to content

onsetsoftware/automerge-repo-network-supabase

Repository files navigation

Automerge Repo Network Supabase

A Supabase network adapter for automerge-repo. It comprises a client library for the browser and a Deno package for use in a Supabase edge function.

Warning This package is under active development and is not quite ready for production use. However, it is fully intended to be used in production soon. Please feel free to try it out and report any issues you find.

Client

Installation

npm install @onsetsoftware/automerge-repo-network-supabase

Usage

import { SupabaseNetworkAdapter } from '@onsetsoftware/automerge-repo-network-supabase';
import { createClient } from "@supabase/supabase-js";
export { v4 as uuid } from "uuid";

// create a supabase client with your public URL and anon key
const supabase = createClient({SUPABASE_PUBLIC_URL}, {SUPABASE_ANON_KEY});

// create a network adapter with the supabase client and the name of supabase edge function you are using
const supabaseAdapter = new SupabaseNetworkAdapter(supabase, "changes");

// pass the adapter to the repo
const repo = new Repo({
  storage: new LocalForageStorageAdapter(),
  network: [
    supabaseAdapter,
  ],
  // we need to use uuids as the peerId is stored as a uuid type in the database
  peerId: uuid() as PeerId
});

// use the repo as normal

Edge Function

Usage

import { serve } from "https://deno.land/[email protected]/http/server.ts"

import { defaultCorsHeaders, handleRequest } from "https://deno.land/x/[email protected]/mod.ts";

serve(async (req) => {
  if (req.method === "OPTIONS") {
    return new Response("ok", { headers: defaultCorsHeaders });
  }
  
  return handleRequest(req);
});

Database Setup

You will need to create a documents table in your Supabase database and ensure that realtime replication is enabled.

An example migration file can be found in the migration.example.sql file.

About

A Supabase network adapter for automerge-repo

Resources

License

Stars

Watchers

Forks

Packages

No packages published