diff --git a/api.go b/api.go index f6dccad..95932f3 100644 --- a/api.go +++ b/api.go @@ -67,7 +67,7 @@ func NewApi(config ApiConfig) (*Api, error) { return nil, fmt.Errorf("auth token request failed: %s", authTokenResponse.Message) } - api.expiration = time.Now().Add(time.Duration(authTokenResponse.Result.ExpiresIn-1) * time.Second) + api.expiration = time.Now().Add(time.Duration(authTokenResponse.Result.ExpiresIn) * time.Second) api.accessToken = authTokenResponse.Result.AccessToken api.refreshToken = authTokenResponse.Result.RefreshToken @@ -166,12 +166,18 @@ func (api *Api) AuthToken(authCode string) (*model.AuthTokenResponse, error) { return response, nil } -func (api *Api) AutoRefresh(ctx context.Context) error { +func (api *Api) MustAutoRefresh(ctx context.Context, refreshBeforeExpiration time.Duration) { + if err := api.AutoRefresh(ctx, refreshBeforeExpiration); err != nil { + panic(err) + } +} + +func (api *Api) AutoRefresh(ctx context.Context, refreshBeforeExpiration time.Duration) error { for { select { case <-ctx.Done(): return nil - case <-time.After(time.Until(api.expiration)): + case <-time.After(time.Until(api.expiration.Add(-refreshBeforeExpiration))): if err := api.Refresh(); err != nil { return err } @@ -206,7 +212,7 @@ func (api *Api) Refresh() error { return err } - api.expiration = time.Now().Add(time.Duration(response.Result.ExpiresIn-1) * time.Second) + api.expiration = time.Now().Add(time.Duration(response.Result.ExpiresIn) * time.Second) api.accessToken = response.Result.AccessToken api.refreshToken = response.Result.RefreshToken