Class: Gusto::CompanyAccessTokenRefresher

Inherits:
Object
  • Object
show all
Defined in:
lib/fern_gusto.rb

Constant Summary collapse

EXPIRY_BUFFER_MS =

1 minute buffer

60 * 1000

Instance Method Summary collapse

Constructor Details

#initialize(client_id, client_secret, redirect_uri, refresh_token) ⇒ CompanyAccessTokenRefresher

Returns a new instance of CompanyAccessTokenRefresher.



276
277
278
279
280
281
282
283
# File 'lib/fern_gusto.rb', line 276

def initialize(client_id, client_secret, redirect_uri, refresh_token)
  @client_id = client_id
  @client_secret = client_secret
  @redirect_uri = redirect_uri
  @refresh_token = refresh_token
  @token = nil
  @token_expiry = nil
end

Instance Method Details

#get_tokenObject

Raises:

  • (GustoError)


285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# File 'lib/fern_gusto.rb', line 285

def get_token
  if @token && @token_expiry && @token_expiry > Time.now + EXPIRY_BUFFER_MS
    return @token
  end

  client = Gusto::BaseClient.new(token: nil)
  response = client.token.refresh(
    client_id: @client_id,
    client_secret: @client_secret,
    redirect_uri: @redirect_uri,
    refresh_token: @refresh_token,
    grant_type: "refresh_token"
  )

  raise GustoError, "Expected access token in response but got null" unless response.access_token
  raise GustoError, "Expected refresh token in response but got null" unless response.refresh_token
  raise GustoError, "Expected expires_in in response but got null" unless response.expires_in

  @token = response.access_token
  @refresh_token = response.refresh_token
  @token_expiry = Time.now + response.expires_in

  @token
end