diff options
author | Heiner Lohaus <heiner@lohaus.eu> | 2023-10-28 07:21:00 +0200 |
---|---|---|
committer | Heiner Lohaus <heiner@lohaus.eu> | 2023-10-28 07:21:00 +0200 |
commit | dc04ca93060443a3ce6263a476f4dafc66afc6b3 (patch) | |
tree | b9c645cbe897af198ea0551509f901a249af35f2 /g4f/Provider/npm/node_modules/funcaptcha/src/session.ts | |
parent | Update config supports_message_history (diff) | |
download | gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar.gz gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar.bz2 gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar.lz gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar.xz gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.tar.zst gpt4free-dc04ca93060443a3ce6263a476f4dafc66afc6b3.zip |
Diffstat (limited to 'g4f/Provider/npm/node_modules/funcaptcha/src/session.ts')
-rw-r--r-- | g4f/Provider/npm/node_modules/funcaptcha/src/session.ts | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/g4f/Provider/npm/node_modules/funcaptcha/src/session.ts b/g4f/Provider/npm/node_modules/funcaptcha/src/session.ts new file mode 100644 index 00000000..9244daae --- /dev/null +++ b/g4f/Provider/npm/node_modules/funcaptcha/src/session.ts @@ -0,0 +1,125 @@ +import { GetTokenResult } from "./api"; +import { Challenge, Challenge1, Challenge3, Challenge4 } from "./challenge"; +import http from "./http"; +import util from "./util"; + +export interface TokenInfo { + token: string; + r: string; + metabgclr: string; + mainbgclr: string; + guitextcolor: string; + metaiconclr: string; + meta_height: string; + meta_width: string; + meta: string; + pk: string; + dc: string; + at: string; + cdn_url: string; + lurl: string; + surl: string; + smurl: string; + // Enable keyboard biometrics + kbio: boolean; + // Enable mouse biometrics + mbio: boolean; + // Enable touch biometrics + tbio: boolean; +} + +export interface SessionOptions { + userAgent?: string; + proxy?: string; +} + +let parseToken = (token: string): TokenInfo => + Object.fromEntries( + token + .split("|") + .map((v) => v.split("=").map((v) => decodeURIComponent(v))) + ); + +export class Session { + public token: string; + public tokenInfo: TokenInfo; + private userAgent: string; + private proxy: string; + + constructor( + token: string | GetTokenResult, + sessionOptions?: SessionOptions + ) { + if (typeof token === "string") { + this.token = token; + } else { + this.token = token.token; + } + if (!this.token.startsWith("token=")) + this.token = "token=" + this.token; + + this.tokenInfo = parseToken(this.token); + this.tokenInfo.mbio = typeof(token) !== "string" ? token.mbio ?? false : false + this.userAgent = sessionOptions?.userAgent || util.DEFAULT_USER_AGENT; + this.proxy = sessionOptions?.proxy; + } + + async getChallenge(): Promise<Challenge> { + let res = await http( + this.tokenInfo.surl, + { + path: "/fc/gfct/", + method: "POST", + body: util.constructFormData({ + sid: this.tokenInfo.r, + render_type: "canvas", + token: this.tokenInfo.token, + analytics_tier: this.tokenInfo.at, + "data%5Bstatus%5D": "init", + lang: "en", + apiBreakerVersion: "green" + }), + headers: { + "User-Agent": this.userAgent, + "Content-Type": "application/x-www-form-urlencoded", + "Accept-Language": "en-US,en;q=0.9", + "Sec-Fetch-Site": "same-origin", + "Referer": this.getEmbedUrl() + }, + }, + this.proxy + ); + + let data = JSON.parse(res.body.toString()); + data.token = this.token; + data.tokenInfo = this.tokenInfo; + + if (data.game_data.gameType == 1) { + return new Challenge1(data, { + proxy: this.proxy, + userAgent: this.userAgent, + }); + } else if (data.game_data.gameType == 3) { + return new Challenge3(data, { + proxy: this.proxy, + userAgent: this.userAgent, + }); + } else if (data.game_data.gameType == 4) { + return new Challenge4(data, { + proxy: this.proxy, + userAgent: this.userAgent, + }); + } else { + throw new Error( + "Unsupported game type: " + data.game_data.gameType + ); + } + //return res.body.toString() + } + + getEmbedUrl(): string { + return `${this.tokenInfo.surl}/fc/gc/?${util.constructFormData( + this.tokenInfo + )}`; + } +} |