Invalidate integrity and retry when the check fails
This commit is contained in:
1 parent
418b2505f6
commit
53d232daa9
2 files changed
+14
-14
No files matched your search
@@ -70,9 +70,8 @@ class _AuthState:
|
|||||||
self.access_token: str
|
self.access_token: str
|
||||||
self.client_version: str
|
self.client_version: str
|
||||||
self.integrity_token: str
|
self.integrity_token: str
|
||||||
|
self._last_request: datetime
|
||||||
self.integrity_expires: datetime
|
self.integrity_expires: datetime
|
||||||
self.integrity_request: datetime
|
|
||||||
self.integrity_response: datetime
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def integrity_expired(self) -> bool:
|
def integrity_expired(self) -> bool:
|
||||||
@@ -254,13 +253,12 @@ class _AuthState:
|
|||||||
jar.update_cookies(cookie, url)
|
jar.update_cookies(cookie, url)
|
||||||
jar.save(COOKIES_PATH)
|
jar.save(COOKIES_PATH)
|
||||||
if not hasattr(self, "integrity_token") or self.integrity_expired:
|
if not hasattr(self, "integrity_token") or self.integrity_expired:
|
||||||
self.integrity_request = datetime.now(timezone.utc)
|
|
||||||
async with self._twitch.request(
|
async with self._twitch.request(
|
||||||
"POST",
|
"POST",
|
||||||
"https://gql.twitch.tv/integrity",
|
"https://gql.twitch.tv/integrity",
|
||||||
headers=self.gql_headers(integrity=False)
|
headers=self.gql_headers(integrity=False)
|
||||||
) as response:
|
) as response:
|
||||||
self.integrity_response = datetime.now(timezone.utc)
|
self._last_request = datetime.now(timezone.utc)
|
||||||
response_json: JsonType = await response.json()
|
response_json: JsonType = await response.json()
|
||||||
self.integrity_token = cast(str, response_json["token"])
|
self.integrity_token = cast(str, response_json["token"])
|
||||||
# (i = Math.round(.9 * (n.expiration - Date.now()))) < 0
|
# (i = Math.round(.9 * (n.expiration - Date.now()))) < 0
|
||||||
@@ -303,6 +301,7 @@ class Twitch:
|
|||||||
# Session and auth
|
# Session and auth
|
||||||
self._session: aiohttp.ClientSession | None = None
|
self._session: aiohttp.ClientSession | None = None
|
||||||
self._auth_state: _AuthState = _AuthState(self)
|
self._auth_state: _AuthState = _AuthState(self)
|
||||||
|
self._last_request: datetime = datetime.now(timezone.utc)
|
||||||
# GUI
|
# GUI
|
||||||
self.gui = GUIManager(self)
|
self.gui = GUIManager(self)
|
||||||
# Storing and watching channels
|
# Storing and watching channels
|
||||||
@@ -1053,19 +1052,20 @@ class Twitch:
|
|||||||
errors_list = response_json["errors"]
|
errors_list = response_json["errors"]
|
||||||
if (
|
if (
|
||||||
len(errors_list) == 1
|
len(errors_list) == 1
|
||||||
and all("message" in error_dict for error_dict in errors_list)
|
and "message" in errors_list[0]
|
||||||
and errors_list[0]["message"] == "failed integrity check"
|
and errors_list[0]["message"] == "failed integrity check"
|
||||||
):
|
):
|
||||||
# auth_state.invalidate(integrity=True)
|
self.print(
|
||||||
# continue
|
"\nGQL integrity error:\n"
|
||||||
raise MinerException(
|
f"integrity_request={auth_state._last_request.replace(tzinfo=None)!s},\n"
|
||||||
"GQL integrity error: "
|
f"gql_request={self._last_request.replace(tzinfo=None)!s},\n"
|
||||||
f"now={datetime.now(timezone.utc).replace(tzinfo=None)!s}, "
|
f"now={datetime.now(timezone.utc).replace(tzinfo=None)!s},\n"
|
||||||
f"request={auth_state.integrity_request.replace(tzinfo=None)!s}, "
|
f"expires={auth_state.integrity_expires.replace(tzinfo=None)!s}\n"
|
||||||
f"response={auth_state.integrity_response.replace(tzinfo=None)!s}, "
|
|
||||||
f"expires={auth_state.integrity_expires.replace(tzinfo=None)!s}"
|
|
||||||
)
|
)
|
||||||
|
auth_state.invalidate(integrity=True)
|
||||||
|
continue
|
||||||
raise MinerException(f"GQL error: {errors_list}")
|
raise MinerException(f"GQL error: {errors_list}")
|
||||||
|
self._last_request = datetime.now(timezone.utc)
|
||||||
return response_json
|
return response_json
|
||||||
|
|
||||||
async def fetch_campaign(
|
async def fetch_campaign(
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
__version__ = "13.dev.4"
|
__version__ = "13.dev.5"
|
||||||
Reference in new issue
Block a user