github.com/supabase/cli@v1.168.1/pkg/storage/buckets.go (about)

     1  package storage
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  
     7  	"github.com/supabase/cli/pkg/fetcher"
     8  )
     9  
    10  type BucketResponse struct {
    11  	Id               string   `json:"id"`                 // "test"
    12  	Name             string   `json:"name"`               // "test"
    13  	Owner            string   `json:"owner"`              // ""
    14  	Public           bool     `json:"public"`             // true
    15  	FileSizeLimit    *int     `json:"file_size_limit"`    // null
    16  	AllowedMimeTypes []string `json:"allowed_mime_types"` // null
    17  	CreatedAt        string   `json:"created_at"`         // "2023-10-13T17:48:58.491Z"
    18  	UpdatedAt        string   `json:"updated_at"`         // "2023-10-13T17:48:58.491Z"
    19  }
    20  
    21  func (s *StorageAPI) ListBuckets(ctx context.Context) ([]BucketResponse, error) {
    22  	resp, err := s.Send(ctx, http.MethodGet, "/storage/v1/bucket", nil)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  	defer resp.Body.Close()
    27  	data, err := fetcher.ParseJSON[[]BucketResponse](resp.Body)
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  	return *data, nil
    32  }
    33  
    34  type CreateBucketRequest struct {
    35  	Name             string   `json:"name"`                         // "string",
    36  	Id               string   `json:"id,omitempty"`                 // "string",
    37  	Public           bool     `json:"public,omitempty"`             // false,
    38  	FileSizeLimit    int      `json:"file_size_limit,omitempty"`    // 0,
    39  	AllowedMimeTypes []string `json:"allowed_mime_types,omitempty"` // ["string"]
    40  }
    41  
    42  type CreateBucketResponse struct {
    43  	Name string `json:"name"`
    44  }
    45  
    46  func (s *StorageAPI) CreateBucket(ctx context.Context, bucketName string) (*CreateBucketResponse, error) {
    47  	body := CreateBucketRequest{Name: bucketName}
    48  	resp, err := s.Send(ctx, http.MethodPost, "/storage/v1/bucket", body)
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  	defer resp.Body.Close()
    53  	return fetcher.ParseJSON[CreateBucketResponse](resp.Body)
    54  }
    55  
    56  type DeleteBucketResponse struct {
    57  	Message string `json:"message"`
    58  }
    59  
    60  func (s *StorageAPI) DeleteBucket(ctx context.Context, bucketId string) (*DeleteBucketResponse, error) {
    61  	resp, err := s.Send(ctx, http.MethodDelete, "/storage/v1/bucket/"+bucketId, nil)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  	defer resp.Body.Close()
    66  	return fetcher.ParseJSON[DeleteBucketResponse](resp.Body)
    67  }