replicache supabase
Use replicache with supabase.
This is some glue code for replicache and supabase. Use it in your lambda functions.
This is using the global version strategy.
install
npm i -S @nichoth/replicache-supabase
globals
env vars
We need several environment variables for the DB:
SUPABASE_ANON_KEY="eyJhbGc..."
SUPABASE_DATABASE_PASSWORD="123abc"
SUPABASE_URL="https://my-url.supabase.co"
example
push
Use this in a lambda function.
// netlify/functions/replicache-push/replicache-push.ts
import 'dotenv/config'
import { Handler, HandlerEvent } from '@netlify/functions'
import { processPush, PushRequestSchema } from '@nichoth/replicache-supabase/push'
// mutators are specific to your application
import { Mutators } from '../../../example/mutators.js'
export const handler:Handler = async function (ev:HandlerEvent) {
if (!ev.body) return { statusCode: 400 }
const userID = (ev.headers.cookie && ev.headers.cookie['userID']) || 'anon'
const body = JSON.parse(ev.body)
const push = PushRequestSchema.parse(body)
try {
await processPush(push, userID, Mutators())
} catch (err) {
return { statusCode: 500 }
}
return { statusCode: 200, body: 'OK' }
}
pull
Use this in a lambda function.
// netlify/functions/replicache-pull/replicache-pull.ts
import { Handler, HandlerEvent } from '@netlify/functions'
import {
authError,
processPull,
PullRequestSchema
} from '@nichoth/replicache-supabase/pull'
export const handler:Handler = async function (ev:HandlerEvent) {
if (!ev.body) return { statusCode: 400 }
const userID = (ev.headers.cookie && ev.headers.cookie['userID']) || 'anon'
const body = JSON.parse(ev.body)
const pullRequest = PullRequestSchema.parse(body)
try {
const pullResponse = await processPull(pullRequest, userID)
return { statusCode: 200, body: JSON.stringify(pullResponse) }
} catch (err) {
if (err === authError) {
return { statusCode: 401, body: 'Unauthorized' }
} else {
return {
statusCode: 500,
body: 'Error processing pull: ' + err.toString()
}
}
}
}
test
Run the test like this
npx esbuild test/index.ts --format=cjs --platform=node --bundle | node