ObjectStackObjectStack

Storage

Storage protocol schemas

Storage Service Protocol

Defines the API contract for client-side file operations.

Focuses on secure, direct-to-cloud uploads (Presigned URLs)

rather than proxying bytes through the API server.

Source: packages/spec/src/api/storage.zod.ts

TypeScript Usage

import { CompleteChunkedUploadRequest, CompleteChunkedUploadResponse, CompleteUploadRequest, FileTypeValidation, FileUploadResponse, GetPresignedUrlRequest, InitiateChunkedUploadRequest, InitiateChunkedUploadResponse, PresignedUrlResponse, UploadChunkRequest, UploadChunkResponse, UploadProgress } from '@objectstack/spec/api';
import type { CompleteChunkedUploadRequest, CompleteChunkedUploadResponse, CompleteUploadRequest, FileTypeValidation, FileUploadResponse, GetPresignedUrlRequest, InitiateChunkedUploadRequest, InitiateChunkedUploadResponse, PresignedUrlResponse, UploadChunkRequest, UploadChunkResponse, UploadProgress } from '@objectstack/spec/api';

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

CompleteChunkedUploadRequest

Properties

PropertyTypeRequiredDescription
uploadIdstringMultipart upload session ID
partsObject[]Ordered list of uploaded parts for assembly

CompleteChunkedUploadResponse

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObject

CompleteUploadRequest

Properties

PropertyTypeRequiredDescription
fileIdstringFile ID returned from presigned request
eTagstringoptionalS3 ETag verification

FileTypeValidation

Properties

PropertyTypeRequiredDescription
modeEnum<'whitelist' | 'blacklist'>whitelist = only allow listed types, blacklist = block listed types
mimeTypesstring[]List of MIME types to allow or block (e.g., "image/jpeg", "application/pdf")
extensionsstring[]optionalList of file extensions to allow or block (e.g., ".jpg", ".pdf")
maxFileSizeintegeroptionalMaximum file size in bytes
minFileSizeintegeroptionalMinimum file size in bytes (e.g., reject empty files)

FileUploadResponse

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObjectUploaded file metadata

GetPresignedUrlRequest

Properties

PropertyTypeRequiredDescription
filenamestringOriginal filename
mimeTypestringFile MIME type
sizenumberFile size in bytes
scopestringTarget storage scope (e.g. user, private, public)
bucketstringoptionalSpecific bucket override (admin only)

InitiateChunkedUploadRequest

Properties

PropertyTypeRequiredDescription
filenamestringOriginal filename
mimeTypestringFile MIME type
totalSizeintegerTotal file size in bytes
chunkSizeintegerSize of each chunk in bytes (minimum 5MB per S3 spec)
scopestringTarget storage scope
bucketstringoptionalSpecific bucket override (admin only)
metadataRecord<string, string>optionalCustom metadata key-value pairs

InitiateChunkedUploadResponse

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObject

PresignedUrlResponse

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObject

UploadChunkRequest

Properties

PropertyTypeRequiredDescription
uploadIdstringMultipart upload session ID
chunkIndexintegerZero-based chunk index
resumeTokenstringResume token from initiate response

UploadChunkResponse

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObject

UploadProgress

Properties

PropertyTypeRequiredDescription
successbooleanOperation success status
errorObjectoptionalError details if success is false
metaObjectoptionalResponse metadata
dataObject

On this page