Does it matter? Regardless of the cause of the failure, the result would be to log out the user as they’re no longer authorised so you have to send them back through your auth flow again (which if they’re still connected to your app will likely be transparent to them).
If you need to know the reason why, well Twitch tell you when a token expires when it gives you the token, it’s you’re job to refresh the token before that point, or send the user through the auth flow again. If you can’t refresh the token, or if a token is invalid before its expiration, then assume the user disconnected from your app, log them out, and force them back through the auth flow if they wish to use your app again.
There are 2 simple ways to perform validation for logins. Either refresh their tokens frequently while they are logged in, or just have a short session time after which the user has to go through the auth process again (if they’re connected all that’ll happen is you’ll send them to Twitch who will send them right back to your redirect url, if you include the users intended path as a state param to Twitch then you can even redirect them directly to the page they tried to access, making the auth process invisible to the user, other than a slight extra load time).
As for the best way to handle refreshing tokens, that’s entirely up to you and your app, there are many ways to handle it and whats best for you and your use case we don’t know.