Class: BasecampTokenRefreshWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/workers/basecamp_token_refresh_worker.rb

Overview

Proactively refreshes Basecamp OAuth tokens before they expire.

Basecamp tokens expire after 2 weeks. This worker runs daily and
refreshes any token expiring within the next 3 days, ensuring
uninterrupted API access without relying on 401-driven refreshes.

Each OauthCredential is scoped to an Account, so every user's
token is refreshed independently.

Constant Summary collapse

REFRESH_WINDOW =
3.days

Instance Method Summary collapse

Instance Method Details

#performObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/workers/basecamp_token_refresh_worker.rb', line 19

def perform
  credentials = OauthCredential
                  .where(provider: Basecamp::OauthService::PROVIDER)
                  .expiring_within(REFRESH_WINDOW)

  if credentials.none?
    Rails.logger.info('[BasecampTokenRefreshWorker] No tokens expiring soon — nothing to refresh')
    return
  end

  Rails.logger.info("[BasecampTokenRefreshWorker] Refreshing #{credentials.count} Basecamp token(s)")

  credentials.find_each do |cred|
    refresh_credential(cred)
  end
end