class StatelyDB::Common::Auth::AuthTokenProvider::Actor
def refresh_token
-
(::Async::Task)
- A task that will resolve to the new access token
def refresh_token Async do # we use an Async::Condition to dedupe multiple requests here # if the condition exists, we wait on it to complete # otherwise we create a condition, make the request, then signal the condition with the result # If there is an error then we signal that instead so we can raise it for the waiters. if @pending_refresh.nil? begin @pending_refresh = Async::Condition.new new_access_token = refresh_token_impl # now broadcast the new token to any waiters @pending_refresh.signal(new_access_token) new_access_token rescue StandardError => e @pending_refresh.signal(e) raise e ensure # delete the condition to restart the process @pending_refresh = nil end else res = @pending_refresh.wait # if the refresh result is an error, re-raise it. # otherwise return the token raise res if res.is_a?(StandardError) res end end end