Here is a quick reference for the Supabase JavaScript V2 SDK!
Setup#
export const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_KEY
);
Authentication#
// email signup
const { data, error } = await supabase.auth.signUp({ email, password });
// email login
const { error } = await supabase.auth.signInWithPassword({ email, password });
// magic link
const { error } = await supabase.auth.signInWithOtp({
email,
options: {
emailRedirectTo: 'url to redirect to'
}
});
// reset password
const { error } = await supabase.auth.resetPasswordForEmail(email);
// oAuth login
const { error } = await supabase.auth.signInWithOAuth({
provider: 'oauth provider',
options: {
redirectTo: 'url to redirect to'
}
});
// get user data
const user = (await this.sb.supabase.auth.getUser()).data.user;
Write Operations#
// add record
const { error } = await supabase.from('profiles').insert({ ...data });
// update record by filter
const { error } = await supabase.from('profiles').update({ username }).eq('id', id);
// upsert record (add or merge record)
const { error } = await this.sb.supabase.from('profiles').upsert({ ...data });
// delete record by filter
const { error } = await this.sb.supabase.from('profiles').delete().eq('id', id);
Read Operations#
// select all by filter
const { error, data } = await supabase.from('profiles').select('*').eq('username', username);
// select all with count
const { error, data, count } = await supabase.from('profiles').select('*', {count: 'exact')
.eq('username', username);
// pagination
const getPagination = (page, size) => {
const limit = size ? +size : 3
const from = page ? page * limit : 0
const to = page ? from + size - 1 : size - 1
return { from, to }
};
const { from, to } = getPagination(page, 10);
const { error, data } = await supabase.from('profiles').select('*').range(from, to);
// order
const { error, data } = await supabase.from('profiles').select('*')
.order('username', { ascending: true });
// inner joins (all joins use to_json() to convey child data with uniqueness)
const { error, data } = await supabase.from('posts').select('*, author!inner(*)');
PostgREST is under-the-hood#
Storage#
// upload file
const { data, error } = await supabase.storage.from('photos').upload(path, file));
// delete file by url
const { error } = await supabase.storage.from('photos').remove([url]);
// get url
const { data } = this.sb.supabase.storage.from('photos').getPublicUrl(path);
I may update this with some more items I find useful over time.
J