Como parte do meu sprint de trabalho no [IndieWebCamp Berlin](https://indieweb.org/2017/Berlin) hoje, consegui corrigir um bug que estava em produção para o [sync-server](https://github.com/neotoma/sync-server) no [Neotoma.io](https://neotoma.io), aparentemente desde 28 de setembro de 2017, quando o [Dropbox retirou totalmente sua API v1](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/) em favor da API v2.

Eu não estava ciente desse bug até esta semana, já que o tratamento de erros na produção não foi configurado para me notificar (por e-mail ou de outra forma), mas configurar essa notificação agora é [uma tarefa priorizada](https://github.com/neotoma/sync-server/issues/87) para evitar problemas silenciosos como este no futuro.

Depois de pesquisar o código, descobri que a implementação do [Passport](http://www.passportjs.org/) para o Dropbox especificamente não estava passando um parâmetro `apiVersion` na inicialização de [sua estratégia](https://github.com/florianheinemann/passport-dropbox-oauth2) e, como tal, estava padronizando para a API v1 do Dropbox sem que eu percebesse.

Adicionei `apiVersion` [como parâmetro aqui](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-25ac49459f3ccaa62fa691b8b449625cR69) e também como um atributo no [modelo de armazenamento](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-430f49ef85b837131a35d1dd553659aeR23), definindo-o especificamente como “2” para o documento de armazenamento do Dropbox.

*Nota: Este atributo aparentemente precisa ser uma string, não um número inteiro, o último dos quais não funcionou para mim quando tentei.*

```
req.strategy = novopassportStrategy.Strategy({
  apiVersion: document.apiVersion,
  ID do cliente: documento.clientId,
  clienteSecret: document.clientSecret,
  chave do consumidor: document.clientId,
  consumerSecret: document.clientSecret,
  callbackURL: `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
  passReqToCallback: verdadeiro,
  profileFields: ['id', 'displayName', 'e-mails']
}...
```

Como resultado, a autenticação do Dropbox agora funciona novamente e consegui executar uma tarefa de backup para meus check-ins do Foursquare/Swarm, sincronizando os mais recentes com meu Dropbox desde a última execução de backup no início do verão.