Storage

Overview

Object storage for files and media: buckets, objects, signed URLs, public object reads, and object permissions.

API

{pe} = /projects/{projectId}/environments/{environmentId}.

MethodPathNotes
GET/storage/healthHealth
GET/storage/public/{projectId}/{environmentId}/{bucket}/{*key}Public object download
GET/POST/storage{pe}/bucketsAPI key or owner JWT
GET/PATCH/DELETE/storage{pe}/buckets/{bucketName}API key or owner JWT
GET/POST/storage{pe}/buckets/{bucketName}/objectsList / upload
GET/storage{pe}/buckets/{bucketName}/objectMetadata (key query)
GET/storage{pe}/buckets/{bucketName}/object/contentDownload
DELETE/storage{pe}/buckets/{bucketName}/objectDelete
POST/storage{pe}/buckets/{bucketName}/object/signed-urlSigned URL
GET/PUT/storage{pe}/buckets/{bucketName}/object/permissionsACL
DELETE/storage{pe}/buckets/{bucketName}/object/permissions/{subjectId}Revoke

Clients

PackageRuntime
@vijihub/storageserver
@vijihub/storage-webbrowser helpers (signed URL uploads)
VijiHub.Storage.NET
import { createStorageClient } from '@vijihub/storage'

const storage = createStorageClient({
  baseUrl: 'http://localhost:5600',
  projectId: '...',
  environmentId: '...',
  apiKey: process.env.VIJIHUB_API_KEY!,
})

Implementation

  1. Enable Storage on the environment and configure the storage provider.
  2. Create buckets via API or Console.
  3. Prefer signed URLs (@vijihub/storage-web) for browser uploads instead of embedding full keys.
  4. Use /storage/public/... only for objects intentionally marked public.

Constraints

  • Admin/list/delete operations need a full API key or owner JWT.
  • Do not put full storage admin keys in frontend bundles.
  • Object paths and bucket names must match provider naming rules.