ObjectStackObjectStack

Object Storage

Object Storage protocol schemas

Object Storage Protocol

Unified storage protocol that combines:

  • Object storage systems (S3, Azure Blob, GCS, MinIO)

  • Scoped storage configuration (temp, cache, data, logs, config, public)

  • Multi-cloud storage providers

  • Bucket/container configuration

  • Access control and permissions

  • Lifecycle policies for data retention

  • Presigned URLs for secure direct access

  • Multipart uploads for large files

Source: packages/spec/src/system/object-storage.zod.ts

TypeScript Usage

import { AccessControlConfig, BucketConfig, FileMetadata, LifecycleAction, LifecyclePolicyConfig, LifecyclePolicyRule, MultipartUploadConfig, ObjectMetadata, ObjectStorageConfig, PresignedUrlConfig, StorageAcl, StorageClass, StorageConnection, StorageProvider, StorageScope } from '@objectstack/spec/system';
import type { AccessControlConfig, BucketConfig, FileMetadata, LifecycleAction, LifecyclePolicyConfig, LifecyclePolicyRule, MultipartUploadConfig, ObjectMetadata, ObjectStorageConfig, PresignedUrlConfig, StorageAcl, StorageClass, StorageConnection, StorageProvider, StorageScope } from '@objectstack/spec/system';

// Validate data
const result = AccessControlConfig.parse(data);

AccessControlConfig

Properties

PropertyTypeRequiredDescription
aclEnum<'private' | 'public_read' | 'public_read_write' | 'authenticated_read' | 'bucket_owner_read' | 'bucket_owner_full_control'>Default access control level
allowedOriginsstring[]optionalCORS allowed origins
allowedMethodsEnum<'GET' | 'PUT' | 'POST' | 'DELETE' | 'HEAD'>[]optionalCORS allowed HTTP methods
allowedHeadersstring[]optionalCORS allowed headers
exposeHeadersstring[]optionalCORS exposed headers
maxAgenumberoptionalCORS preflight cache duration in seconds
corsEnabledbooleanEnable CORS configuration
publicAccessObjectoptionalPublic access control
allowedIpsstring[]optionalAllowed IP addresses/CIDR blocks
blockedIpsstring[]optionalBlocked IP addresses/CIDR blocks

BucketConfig

Properties

PropertyTypeRequiredDescription
namestringBucket identifier in ObjectStack (snake_case)
labelstringDisplay label
bucketNamestringActual bucket/container name in storage provider
regionstringoptionalStorage region (e.g., us-east-1, westus)
providerEnum<'s3' | 'azure_blob' | 'gcs' | 'minio' | 'r2' | 'spaces' | 'wasabi' | 'backblaze' | 'local'>Storage provider
endpointstringoptionalCustom endpoint URL (for S3-compatible providers)
pathStylebooleanUse path-style URLs (for S3-compatible providers)
versioningbooleanEnable object versioning
encryptionObjectoptionalServer-side encryption configuration
accessControlObjectoptionalAccess control configuration
lifecyclePolicyObjectoptionalLifecycle policy configuration
multipartConfigObjectoptionalMultipart upload configuration
tagsRecord<string, string>optionalBucket tags for organization
descriptionstringoptionalBucket description
enabledbooleanEnable this bucket

FileMetadata

Properties

PropertyTypeRequiredDescription
pathstringFile path
namestringFile name
sizeintegerFile size in bytes
mimeTypestringMIME type
lastModifiedstringLast modified timestamp
createdstringCreation timestamp
etagstringoptionalEntity tag

LifecycleAction

Lifecycle policy action type

Allowed Values

  • transition
  • delete
  • abort

LifecyclePolicyConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable lifecycle policies
rulesObject[]Lifecycle rules

LifecyclePolicyRule

Properties

PropertyTypeRequiredDescription
idstringRule identifier
enabledbooleanEnable this rule
actionEnum<'transition' | 'delete' | 'abort'>Action to perform
prefixstringoptionalObject key prefix filter (e.g., "uploads/")
tagsRecord<string, string>optionalObject tag filters
daysAfterCreationnumberoptionalDays after object creation
daysAfterModificationnumberoptionalDays after last modification
targetStorageClassEnum<'standard' | 'intelligent' | 'infrequent_access' | 'glacier' | 'deep_archive'>optionalTarget storage class for transition action

MultipartUploadConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable multipart uploads
partSizenumberPart size in bytes (min 5MB, max 5GB)
maxPartsnumberMaximum number of parts (max 10,000)
thresholdnumberFile size threshold to trigger multipart upload (bytes)
maxConcurrentnumberMaximum concurrent part uploads
abortIncompleteAfterDaysnumberoptionalAuto-abort incomplete uploads after N days

ObjectMetadata

Properties

PropertyTypeRequiredDescription
contentTypestringMIME type (e.g., image/jpeg, application/pdf)
contentLengthnumberFile size in bytes
contentEncodingstringoptionalContent encoding (e.g., gzip)
contentDispositionstringoptionalContent disposition header
contentLanguagestringoptionalContent language
cacheControlstringoptionalCache control directives
etagstringoptionalEntity tag for versioning/caching
lastModifiedstringoptionalLast modification timestamp
versionIdstringoptionalObject version identifier
storageClassEnum<'standard' | 'intelligent' | 'infrequent_access' | 'glacier' | 'deep_archive'>optionalStorage class/tier
encryptionObjectoptionalServer-side encryption configuration
customRecord<string, string>optionalCustom user-defined metadata

ObjectStorageConfig

Properties

PropertyTypeRequiredDescription
namestringStorage configuration identifier
labelstringDisplay label
providerEnum<'s3' | 'azure_blob' | 'gcs' | 'minio' | 'r2' | 'spaces' | 'wasabi' | 'backblaze' | 'local'>Primary storage provider
scopeEnum<'global' | 'tenant' | 'user' | 'session' | 'temp' | 'cache' | 'data' | 'logs' | 'config' | 'public'>Storage scope
connectionObjectConnection credentials
bucketsObject[]Configured buckets
defaultBucketstringoptionalDefault bucket name for operations
locationstringoptionalRoot path (local) or base location
quotaintegeroptionalMax size in bytes
optionsRecord<string, any>optionalProvider-specific configuration options
enabledbooleanEnable this storage configuration
descriptionstringoptionalConfiguration description

PresignedUrlConfig

Properties

PropertyTypeRequiredDescription
operationEnum<'get' | 'put' | 'delete' | 'head'>Allowed operation
expiresInnumberExpiration time in seconds (max 7 days)
contentTypestringoptionalRequired content type for PUT operations
maxSizenumberoptionalMaximum file size in bytes for PUT operations
responseContentTypestringoptionalOverride content-type for GET operations
responseContentDispositionstringoptionalOverride content-disposition for GET operations

StorageAcl

Storage access control level

Allowed Values

  • private
  • public_read
  • public_read_write
  • authenticated_read
  • bucket_owner_read
  • bucket_owner_full_control

StorageClass

Storage class/tier for cost optimization

Allowed Values

  • standard
  • intelligent
  • infrequent_access
  • glacier
  • deep_archive

StorageConnection

Properties

PropertyTypeRequiredDescription
accessKeyIdstringoptionalAWS access key ID or MinIO access key
secretAccessKeystringoptionalAWS secret access key or MinIO secret key
sessionTokenstringoptionalAWS session token for temporary credentials
accountNamestringoptionalAzure storage account name
accountKeystringoptionalAzure storage account key
sasTokenstringoptionalAzure SAS token
projectIdstringoptionalGCP project ID
credentialsstringoptionalGCP service account credentials JSON
endpointstringoptionalCustom endpoint URL
regionstringoptionalDefault region
useSSLbooleanUse SSL/TLS for connections
timeoutnumberoptionalConnection timeout in milliseconds

StorageProvider

Storage provider type

Allowed Values

  • s3
  • azure_blob
  • gcs
  • minio
  • r2
  • spaces
  • wasabi
  • backblaze
  • local

StorageScope

Storage scope classification

Allowed Values

  • global
  • tenant
  • user
  • session
  • temp
  • cache
  • data
  • logs
  • config
  • public

On this page