package api import ( "bytes" "encoding/json" "fmt" "net/http" ) type RefreshRequest struct { RefreshToken string `json:"refresh_token"` } type RefreshResponse struct { AccessToken string `json:"access_token"` ExpiresInMs int `json:"expires_in_ms"` RefreshToken string `json:"refresh_token"` } func Refresh(refreshToken string) (RefreshResponse, error) { body, err := json.Marshal(RefreshRequest{ RefreshToken: refreshToken, }) if err != nil { return RefreshResponse{}, err } resp, err := http.Post("https://matrix-client.matrix.org/_matrix/client/v3/refresh", "application/json", bytes.NewReader(body)) if err != nil { return RefreshResponse{}, err } if resp.StatusCode < 200 || resp.StatusCode >= 300 { return RefreshResponse{}, fmt.Errorf("request failed %d: %s", resp.StatusCode, resp.Status) } var responseBody RefreshResponse err = json.NewDecoder(resp.Body).Decode(&responseBody) return responseBody, err }