Como parte de mi sprint de trabajo en [IndieWebCamp Berlin](https://indieweb.org/2017/Berlin) hoy, logré corregir un error espectacular que ha estado en producción para [sync-server](https://github.com/neotoma/sync-server) en [Neotoma.io](https://neotoma.io) aparentemente desde el 28 de septiembre de 2017, cuando [Dropbox retiró completamente su API v1](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/) a favor de API v2.

No me di cuenta de este error hasta esta semana, ya que el manejo de errores en producción no estaba configurado para notificarme (por correo electrónico o de otro modo), pero configurar esa notificación ahora es [una tarea prioritaria](https://github.com/neotoma/sync-server/issues/87) para evitar problemas silenciosos como este en el futuro.

Después de investigar el código, resultó que la implementación de [Passport](http://www.passportjs.org/) para Dropbox específicamente no pasaba un parámetro `apiVersion` al inicializar [su estrategia](https://github.com/florianheinemann/passport-dropbox-oauth2) y, como tal, estaba utilizando de forma predeterminada la API v1 de Dropbox sin que yo me diera cuenta.

Agregué `apiVersion` [como parámetro aquí](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-25ac49459f3ccaa62fa691b8b449625cR69) y también como un atributo en el [modelo de almacenamiento](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-430f49ef85b837131a35d1dd553659aeR23), configurándolo específicamente en "2" para el documento de almacenamiento de Dropbox.

*Nota: Este atributo aparentemente necesita ser una cadena, no un número entero, el último de los cuales no funcionó cuando lo intenté.*

```
req.strategy = nuevo pasaporteStrategy.Strategy({
  apiVersion: documento.apiVersion,
  ID de cliente: documento.id de cliente,
  clientSecret: documento.clientSecret,
  clave del consumidor: documento.clientId,
  ConsumerSecret: documento.clientSecret,
  callbackURL: `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
  passReqToCallback: verdadero,
  campos de perfil: ['id', 'nombre para mostrar', 'correos electrónicos']
}....
```

Como resultado, la autenticación de Dropbox ahora funciona nuevamente y pude ejecutar una tarea de respaldo para mis registros de Foursquare/Swarm, sincronizando los más recientes con mi Dropbox desde la última vez que ejecuté el respaldo a principios del verano.