diff --git a/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py b/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py index 7ebb429b76..eae5be13a1 100644 --- a/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +++ b/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py @@ -334,10 +334,16 @@ def _make_handled_request(self) -> Any: failure_type=FailureType.transient_error, ) if self._wrap_refresh_token_exception(e): - message = "Refresh token is invalid or expired. Please re-authenticate from Sources//Settings." - raise AirbyteTracedException( - internal_message=message, message=message, failure_type=FailureType.config_error + response_info = ( + f"HTTP {e.response.status_code}: {e.response.text[:1000]}" + if e.response is not None + else str(e) ) + raise AirbyteTracedException( + internal_message=f"Refresh token rejected by the OAuth token endpoint. {response_info}", + message="Refresh token was rejected by the OAuth provider (invalid, expired, or already used). Re-authenticate this source's credentials in its connection settings.", + failure_type=FailureType.config_error, + ) from e raise except Exception as e: raise AirbyteTracedException( diff --git a/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py b/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py index 0eabac2678..3a7cb8d3d6 100644 --- a/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +++ b/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py @@ -642,8 +642,12 @@ def test_refresh_access_token_wrapped( oauth.refresh_access_token() if wrapped: - error_message = "Refresh token is invalid or expired. Please re-authenticate from Sources//Settings." - assert exc_info.value.internal_message == error_message + error_message = "Refresh token was rejected by the OAuth provider (invalid, expired, or already used). Re-authenticate this source's credentials in its connection settings." + assert exc_info.value.internal_message.startswith( + "Refresh token rejected by the OAuth token endpoint." + ) + assert f"HTTP {response_code}" in exc_info.value.internal_message + assert response_value in exc_info.value.internal_message assert exc_info.value.message == error_message assert exc_info.value.failure_type == FailureType.config_error