diff --git a/fbchat/_session.py b/fbchat/_session.py index cc9895c..d8729a4 100644 --- a/fbchat/_session.py +++ b/fbchat/_session.py @@ -15,7 +15,9 @@ from . import _graphql, _util, _exception from typing import Optional, Mapping, Callable, Any -SERVER_JS_DEFINE_REGEX = re.compile(r'require\("ServerJSDefine"\)\)?\.handleDefines\(') +SERVER_JS_DEFINE_REGEX = re.compile( + r'require(?:\("ServerJS"\).{,100}\.handle\({.*"define":)|(?:\("ServerJSDefine"\)\)?\.handleDefines\()' +) SERVER_JS_DEFINE_JSON_DECODER = json.JSONDecoder() diff --git a/tests/test_session.py b/tests/test_session.py index 8cd3897..1e1b5d1 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -13,7 +13,7 @@ from fbchat._session import ( ) -def test_parse_server_js_define(): +def test_parse_server_js_define_old(): html = """ some data;require("TimeSliceImpl").guard(function(){(require("ServerJSDefine")).handleDefines([["DTSGInitialData",[],{"token":"123"},100]]) @@ -29,6 +29,20 @@ def test_parse_server_js_define(): } +def test_parse_server_js_define_new(): + html = """ + some data;require("TimeSliceImpl").guard(function(){new (require("ServerJS"))().handle({"define":[["DTSGInitialData",[],{"token":""},100]],"require":[...]});}, "ServerJS define", {"root":true})(); + more data + + other irrelevant data + """ + define = parse_server_js_define(html) + assert define == { + "DTSGInitialData": {"token": ""}, + "DTSGInitData": {"async_get_token": "", "token": ""}, + } + + def test_parse_server_js_define_error(): with pytest.raises(ParseError, match="Could not find any"): parse_server_js_define("")