Skip to content
master
Switch branches/tags
Code

Latest commit

Prevent empty results when selecting folder(s) in one bucket that match an object name in another bucket
f687bff

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Supabase Storage Middleware

A scalable, light-weight object storage service.

Read this post on why we decided to build a new object storage service.

  • Uses Postgres as it's datastore for storing metadata
  • Authorization rules are written as Postgres Row Level Security policies
  • Integrates with S3 as the storage backend (with more in the pipeline!)
  • Extremely lightweight and performant

Architecture

Documentation

Development

  • Copy .env.sample to .env file.
  • Copy .env.test.sample to .env.test.
  • Change GLOBAL_S3_BUCKET and REGION to the name and region of a S3 bucket.
    • If you just want to run the tests and not develop locally, you can skip this step because S3 calls are mocked in our tests.
  • Set up your AWS credentials. Your user must have permissions to s3:PutObject, s3:GetObject, s3:DeleteObject in the bucket you have chosen.

Your root directory should now have both .env and .env.test files.

  • Then run the following:
# this sets up a postgres database and postgrest locally via docker
npm run infra:restart
# Start the storage server
npm run dev

The server should now be running at http://localhost:5000/

The following request should insert and return the list of buckets.

# insert a bucket named avatars
curl --location --request POST 'http://localhost:5000/bucket' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjEzNTMxOTg1LCJleHAiOjE5MjkxMDc5ODV9.th84OKK0Iz8QchDyXZRrojmKSEZ-OuitQm_5DvLiSIc' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "avatars"
}'

# get buckets
curl --location --request GET 'http://localhost:5000/bucket' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjEzNTMxOTg1LCJleHAiOjE5MjkxMDc5ODV9.th84OKK0Iz8QchDyXZRrojmKSEZ-OuitQm_5DvLiSIc'

Testing

To perform your tests you can run the following command: npm test