refreshBeforeExpiration introduced

This commit is contained in:
Tordarus 2025-02-02 19:44:21 +01:00
parent b320c395df
commit f732d0ed44

14
api.go
View File

@ -67,7 +67,7 @@ func NewApi(config ApiConfig) (*Api, error) {
return nil, fmt.Errorf("auth token request failed: %s", authTokenResponse.Message) 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.accessToken = authTokenResponse.Result.AccessToken
api.refreshToken = authTokenResponse.Result.RefreshToken api.refreshToken = authTokenResponse.Result.RefreshToken
@ -166,12 +166,18 @@ func (api *Api) AuthToken(authCode string) (*model.AuthTokenResponse, error) {
return response, nil 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 { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
return nil return nil
case <-time.After(time.Until(api.expiration)): case <-time.After(time.Until(api.expiration.Add(-refreshBeforeExpiration))):
if err := api.Refresh(); err != nil { if err := api.Refresh(); err != nil {
return err return err
} }
@ -206,7 +212,7 @@ func (api *Api) Refresh() error {
return err 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.accessToken = response.Result.AccessToken
api.refreshToken = response.Result.RefreshToken api.refreshToken = response.Result.RefreshToken