Dans le cadre de mon sprint de travail à [IndieWebCamp Berlin](https://indieweb.org/2017/Berlin) aujourd'hui, j'ai réussi à corriger un bug spectaculaire qui était en production pour [sync-server](https://github.com/neotoma/sync-server) sur [Neotoma.io](https://neotoma.io) apparemment depuis le 28 septembre 2017, lorsque [Dropbox a complètement retiré son API v1](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/) en faveur de l'API v2.

Je n'étais pas au courant de ce bug jusqu'à cette semaine puisque la gestion des erreurs en production n'a pas été configurée pour m'avertir (par e-mail ou autrement), mais la configuration de cette notification est maintenant [une tâche prioritaire](https://github.com/neotoma/sync-server/issues/87) pour éviter des problèmes silencieux comme celui-ci à l'avenir.

Après avoir fouillé le code, il s'est avéré que l'implémentation de [Passport](http://www.passportjs.org/) pour Dropbox ne transmettait pas spécifiquement un paramètre « apiVersion » lors de l'initialisation de [sa stratégie](https://github.com/florianheinemann/passport-dropbox-oauth2), et en tant que telle, elle utilisait par défaut l'API v1 de Dropbox sans que je m'en rende compte.

J'ai ajouté `apiVersion` [en tant que paramètre ici](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-25ac49459f3ccaa62fa691b8b449625cR69) et également en tant qu'attribut sur le [modèle de stockage](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-430f49ef85b837131a35d1dd553659aeR23), en le définissant spécifiquement sur « 2 » pour le document de stockage de Dropbox.

*Remarque : Cet attribut doit apparemment être une chaîne, et non un entier, ce dernier n'ayant pas fonctionné lors de ma tentative.*

```
req.strategy = nouveau passeportStrategy.Strategy({
  apiVersion : document.apiVersion,
  ID client : document.ID client,
  clientSecret : document.clientSecret,
  consumerKey : document.clientId,
  consumerSecret : document.clientSecret,
  callbackURL : `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
  passReqToCallback : vrai,
  profileFields : ['id', 'displayName', 'emails']
}...
```

En conséquence, l'authentification Dropbox fonctionne désormais à nouveau et j'ai pu exécuter une tâche de sauvegarde pour mes enregistrements Foursquare / Swarm, en synchronisant les plus récents avec mon Dropbox depuis la dernière sauvegarde plus tôt cet été.