API Reference/Storage API

Quick Reference

Essential storage operations at a glance

Storage API Quick Reference

Setup

// lib/upload.ts
import { createUploadConfig } from 'pushduck/server'

const { storage } = createUploadConfig()
  .provider("cloudflareR2",{
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region: 'auto',
    endpoint: process.env.AWS_ENDPOINT_URL,
    bucket: process.env.S3_BUCKET_NAME,
    accountId: process.env.R2_ACCOUNT_ID,
  })
  .build()

export { storage }

Essential Operations

List Files

const files = await storage.list.files({ prefix: 'uploads/', maxResults: 50 })
const paginated = await storage.list.paginated({ maxResults: 20 })
const images = await storage.list.byExtension('jpg')

File Info

const info = await storage.metadata.getInfo('file.jpg')
const exists = await storage.validation.exists('file.jpg')

Delete Files

await storage.delete.file('old-file.jpg')
await storage.delete.files(['file1.jpg', 'file2.pdf'])
await storage.delete.byPrefix('temp/')

Presigned URLs

const downloadUrl = await storage.download.presignedUrl('private/file.pdf', 3600)
const uploadUrl = await storage.upload.presignedUrl({ key: 'new-file.jpg', contentType: 'image/jpeg' })

API Route Example

// app/api/files/route.ts
import { storage } from '@/lib/upload'

export async function GET() {
  const files = await storage.list.files()
  return Response.json({ files })
}

export async function DELETE(request: Request) {
  const { key } = await request.json()
  const result = await storage.delete.file(key)
  return Response.json(result)
}

Error Handling

import { isPushduckError } from 'pushduck/server'

try {
  await storage.list.files()
} catch (error) {
  if (isPushduckError(error)) {
    console.log(error.code, error.context)
  }
}

Types

import type { 
  FileInfo, 
  ListFilesOptions, 
  ValidationRules 
} from 'pushduck/server'