Storage · modules/storage
Scaffold de adapterUploadThing,
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_PROVIDERrequeridaSet to uploadthing
UPLOADTHING_TOKENrequeridaUPLOADTHING_APP_IDopcional
Dónde vive
apps/server/src/modules/storage/infrastructure/providers/uploadthing-storage-provider.tsapps/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.