Storage · modules/storage

Scaffold de adapter

UploadThing,
primero el contrato.

UploadThing se enchufa en el mismo port IStorageProvider que los adapters de S3, local y Supabase. El slot es un scaffold tipado hoy — la interfaz ya está comprometida, así que completarlo es un cambio autocontenido que deja el resto de la app intacto.

Qué viene listo y qué completás vos

Honestidad primero: el adapter de UploadThing es un scaffold. La base del boilerplate no trae el SDK de UploadThing como dependencia, así que presignUpload / presignDownload devuelven un "aún no implementado" tipado hasta que lo sumás. La factory cae de forma suave al provider de storage null (con un warning) cuando UPLOADTHING_TOKEN está seteado pero el SDK no está, así nada crashea al arrancar. El valor acá es el mismo que en cualquier otro slot de adapter: el port IStorageProvider está fijado, así que cuando cablees UploadThing implementás contra una forma que el resto del codebase ya consume — sin efecto dominó. Si querés storage de archivos hoy, el adapter de S3 está completamente implementado y habla con AWS, R2 y MinIO.

El port de storage en el que se enchufa

Scaffold tipado

El adapter implementa IStorageProvider; cada método devuelve los mismos tipos Result que los providers cableados, así que el contrato es el compromiso.

Fallback suave

Cuando STORAGE_PROVIDER=uploadthing pero falta el token/SDK, la factory loguea un warning y devuelve el provider null en vez de lanzar.

Alternativa cableada

¿Necesitás storage ya? STORAGE_PROVIDER=s3 está listo para producción y funciona con AWS S3, Cloudflare R2 y MinIO.

Cambio de un solo archivo

Como cada provider comparte el port, pasar de S3 a UploadThing más adelante es un cambio en el composition root, no una reescritura de la app.

Referencia de configuración

Variables de entorno

  • STORAGE_PROVIDERrequerida

    Set to uploadthing

  • UPLOADTHING_TOKENrequerida
  • UPLOADTHING_APP_IDopcional

Dónde vive

  • apps/server/src/modules/storage/infrastructure/providers/uploadthing-storage-provider.ts
  • apps/server/src/modules/storage/infrastructure/providers/index.ts

Storage detrás de un solo contrato.

Arrancá con S3 hoy y cambiate a UploadThing más adelante sin reescribir tu app — el port sigue siendo el mismo.