Сегодня в рамках моего рабочего спринта на [IndieWebCamp Berlin](https://indieweb.org/2017/Berlin) мне удалось исправить ошеломляющую ошибку, которая наблюдалась для [sync-server](https://github.com/neotoma/sync-server) на [Neotoma.io](https://neotoma.io), очевидно, с 28 сентября 2017 года, когда [Dropbox полностью отказался от своего API v1](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/) в пользу API v2.

Я не знал об этой ошибке до этой недели, поскольку обработка ошибок в производстве не была настроена на уведомление меня (по электронной почте или другим способом), но настройка этого уведомления теперь является [приоритетной задачей](https://github.com/neotoma/sync-server/issues/87), чтобы избежать подобных проблем в будущем.

Покопавшись в коде, выяснилось, что реализация [Passport](http://www.passportjs.org/) для Dropbox конкретно не передавала параметр `apiVersion` при инициализации [своей стратегии](https://github.com/florianheinemann/passport-dropbox-oauth2), и поэтому без моего ведома по умолчанию использовалась Dropbox API v1.

Я добавил `apiVersion` [здесь в качестве параметра](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-25ac49459f3ccaa62fa691b8b449625cR69), а также в качестве атрибут [модель хранилища](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-430f49ef85b837131a35d1dd553659aeR23), специально установив для него значение «2» для хранилища Dropbox. документ.

*Примечание: очевидно, что этот атрибут должен быть строкой, а не целым числом, последнее из которых у меня не сработало при попытке.*

```
req.strategy = новый паспортStrategy.Strategy({
  apiVersion: document.apiVersion,
  clientID: document.clientId,
  clientSecret: document.clientSecret,
  ConsumerKey: document.clientId,
  потребительскийсекрет: document.clientSecret,
  callbackURL: `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
  passReqToCallback: правда,
  ProfileFields: ['id', 'displayName', 'email']
}...
```

В результате аутентификация Dropbox теперь снова работает, и я смог запустить задание резервного копирования для моих отметок Foursquare/Swarm, синхронизируя самые последние из них с моим Dropbox с момента последнего запуска резервного копирования ранее летом.