solobase-js
Version:
A 100% drop-in replacement for the Supabase JavaScript client. Self-hosted Supabase alternative with complete API compatibility.
190 lines (161 loc) • 5.07 kB
JavaScript
// Basic usage example - identical to Supabase
import {createClient} from 'solobase-js'
// Initialize client
const solobase = createClient(
'http://127.0.0.1:8000/api',
'your-api-key'
)
// Authentication examples
async function authExamples() {
// // Sign up
// const { data: signUpData, error: signUpError } = await solobase.auth.signUp({
// email: 'user@example.com',
// password: 'securepassword123',
// options: {
// data: {
// first_name: 'John',
// last_name: 'Doe',
// age: 30
// }
// }
// })
//
// if (signUpError) {
// console.error('Sign up error:', signUpError.message)
// return
// }
//
// console.log('User signed up:', signUpData.user.email)
// Sign in
const {data: signInData, error: signInError} = await solobase.auth.signInWithPassword({
email: 'abutimartin778@gmail.com',
password: 'password123'
})
if (signInError) {
console.error('Sign in error:', signInError.message)
return
}
// console.log('User signed in:', signInData.session.user.email)
}
// Database examples
async function databaseExamples() {
// Insert data
// const { data: insertData, error: insertError } = await solobase
// .from('users')
// .insert([
// { name: 'John Doe', email: 'john@example.com', age: 30 },
// { name: 'Jane Smith', email: 'jane@example.com', age: 25 }
// ])
// // .select()
//
// if (insertError) {
// console.error('Insert error:', insertError.message)
// return
// }
//
// console.log('Inserted users:', insertData)
// Select data with filters
let base = solobase
.from('users')
.select('*',{count:"exact"});
base.limit(10)
const {data: selectData, error: selectError, count: userCount} = await base;
// // .gte('age', 25)
// // .order('created_at', { ascending: false })
// .limit(10)
// .range(10, 20)
if (selectError) {
console.error('Select error:', selectError.message)
return
}
console.log('count users:', userCount,selectData.length)
return
// Update data
const {data: updateData, error: updateError} = await solobase
.from('users')
.update({age: 31})
.eq('email', 'john@example.com')
.select()
if (updateError) {
console.error('Update error:', updateError.message)
return
}
console.log('Updated user:', updateData)
// Real-time subscription
const subscription = solobase
.channel('users-channel')
.on('postgres_changes', {
event: '*',
schema: 'public',
table: 'users'
}, (payload) => {
console.log('Real-time change:', payload)
})
.subscribe()
// Later, unsubscribe
// subscription.unsubscribe()
}
// Storage examples
async function storageExamples() {
// Create bucket
const {data: bucketData, error: bucketError} = await solobase.storage
.createBucket('avatars', {
public: true,
fileSizeLimit: 1024 * 1024 * 5, // 5MB
allowedMimeTypes: ['image/png', 'image/jpeg', 'image/gif']
})
if (bucketError) {
console.error('Bucket creation error:', bucketError.message)
return
}
console.log('Created bucket:', bucketData.name)
// Upload file (example with File object)
const fileInput = document.getElementById('file-input') // HTML input element
if (fileInput && fileInput.files[0]) {
const file = fileInput.files[0]
const {data: uploadData, error: uploadError} = await solobase.storage
.from('avatars')
.upload(`user-${Date.now()}.png`, file, {
cacheControl: '3600',
upsert: false
})
if (uploadError) {
console.error('Upload error:', uploadError.message)
return
}
console.log('Uploaded file:', uploadData.path)
// Get public URL
const {data: urlData} = solobase.storage
.from('avatars')
.getPublicUrl(uploadData.path)
console.log('Public URL:', urlData.publicUrl)
}
// List files
const {data: fileList, error: listError} = await solobase.storage
.from('avatars')
.list('', {
limit: 100,
sortBy: {column: 'name', order: 'asc'}
})
if (listError) {
console.error('List error:', listError.message)
return
}
console.log('Files in bucket:', fileList)
}
// Run examples
authExamples()
.then(async () => {
let base = solobase
.from('users')
.select('*',{count:"exact"});
base.limit(10)
base.range(0,20)
const {data, error, count} = await base;
console.log(count,data.length)
// databaseExamples()
})
.then(() => {
// storageExamples()
})
.catch(console.error)