diff options
Diffstat (limited to '')
-rw-r--r-- | g4f/Provider/openai/har_file.py | 44 | ||||
-rw-r--r-- | g4f/Provider/openai/proofofwork.py | 12 |
2 files changed, 29 insertions, 27 deletions
diff --git a/g4f/Provider/openai/har_file.py b/g4f/Provider/openai/har_file.py index 7644e693..b7c36f05 100644 --- a/g4f/Provider/openai/har_file.py +++ b/g4f/Provider/openai/har_file.py @@ -27,16 +27,18 @@ class arkReq: self.arkCookies = arkCookies self.userAgent = userAgent -arkPreURL = "https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147" -sessionUrl = "https://chatgpt.com/" -chatArk: arkReq = None +arkoseURL = "https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147" +startUrl = "https://chatgpt.com/" +conversationUrl = "https://chatgpt.com/c/" +arkoseRequest: arkReq = None accessToken: str = None cookies: dict = None headers: dict = None -proofTokens: list = [] +proofToken: list = [] +turnstileToken: str = None def readHAR(): - global proofTokens + global arkoseRequest, accessToken, proofToken, turnstileToken harPath = [] chatArks = [] accessToken = None @@ -58,15 +60,17 @@ def readHAR(): v_headers = get_headers(v) try: if "openai-sentinel-proof-token" in v_headers: - proofTokens.append(json.loads(base64.b64decode( + proofToken = json.loads(base64.b64decode( v_headers["openai-sentinel-proof-token"].split("gAAAAAB", 1)[-1].encode() - ).decode())) + ).decode()) + if "openai-sentinel-turnstile-token" in v_headers: + turnstileToken = v_headers["openai-sentinel-turnstile-token"] except Exception as e: if debug.logging: print(f"Read proof token: {e}") - if arkPreURL in v['request']['url']: - chatArks.append(parseHAREntry(v)) - elif v['request']['url'] == sessionUrl: + if arkoseURL in v['request']['url']: + arkoseRequest = parseHAREntry(v) + elif v['request']['url'] == startUrl or v['request']['url'].startswith(conversationUrl): try: match = re.search(r'"accessToken":"(.*?)"', v["response"]["content"]["text"]) if match: @@ -78,8 +82,8 @@ def readHAR(): if not accessToken: raise NoValidHarFileError("No accessToken found in .har files") if not chatArks: - return None, accessToken, cookies, headers - return chatArks.pop(), accessToken, cookies, headers + return cookies, headers + return cookies, headers def get_headers(entry) -> dict: return {h['name'].lower(): h['value'] for h in entry['request']['headers'] if h['name'].lower() not in ['content-length', 'cookie'] and not h['name'].startswith(':')} @@ -110,7 +114,7 @@ def genArkReq(chatArk: arkReq) -> arkReq: tmpArk.arkHeader['x-ark-esync-value'] = bw return tmpArk -async def sendRequest(tmpArk: arkReq, proxy: str = None): +async def sendRequest(tmpArk: arkReq, proxy: str = None) -> str: async with StreamSession(headers=tmpArk.arkHeader, cookies=tmpArk.arkCookies, proxies={"https": proxy}) as session: async with session.post(tmpArk.arkURL, data=tmpArk.arkBody) as response: data = await response.json() @@ -144,10 +148,10 @@ def getN() -> str: return base64.b64encode(timestamp.encode()).decode() async def getArkoseAndAccessToken(proxy: str) -> tuple[str, str, dict, dict]: - global chatArk, accessToken, cookies, headers, proofTokens - if chatArk is None or accessToken is None: - chatArk, accessToken, cookies, headers = readHAR() - if chatArk is None: - return None, accessToken, cookies, headers, proofTokens - newReq = genArkReq(chatArk) - return await sendRequest(newReq, proxy), accessToken, cookies, headers, proofTokens + global arkoseRequest, accessToken, cookies, headers, proofToken, turnstileToken + if arkoseRequest is None or accessToken is None: + cookies, headers = readHAR() + if arkoseRequest is None: + return None, accessToken, cookies, headers, proofToken, turnstileToken + newReq = genArkReq(arkoseRequest) + return await sendRequest(newReq, proxy), accessToken, cookies, headers, proofToken, turnstileToken diff --git a/g4f/Provider/openai/proofofwork.py b/g4f/Provider/openai/proofofwork.py index 55603892..23e5ab6e 100644 --- a/g4f/Provider/openai/proofofwork.py +++ b/g4f/Provider/openai/proofofwork.py @@ -4,18 +4,16 @@ import json import base64 from datetime import datetime, timezone -def generate_proof_token(required: bool, seed: str = "", difficulty: str = "", user_agent: str = None, proofTokens: list = None): +def generate_proof_token(required: bool, seed: str = "", difficulty: str = "", user_agent: str = None, proofToken: str = None): if not required: return - if proofTokens: - config = proofTokens[-1] - else: + if proofToken is None: screen = random.choice([3008, 4010, 6000]) * random.choice([1, 2, 4]) # Get current UTC time now_utc = datetime.now(timezone.utc) parse_time = now_utc.strftime('%a, %d %b %Y %H:%M:%S GMT') - config = [ + proofToken = [ screen, parse_time, None, 0, user_agent, "https://tcr9i.chat.openai.com/v2/35536E1E-65B4-4D96-9D97-6ADB7EFF8147/api.js", @@ -28,8 +26,8 @@ def generate_proof_token(required: bool, seed: str = "", difficulty: str = "", u diff_len = len(difficulty) for i in range(100000): - config[3] = i - json_data = json.dumps(config) + proofToken[3] = i + json_data = json.dumps(proofToken) base = base64.b64encode(json_data.encode()).decode() hash_value = hashlib.sha3_512((seed + base).encode()).digest() |