Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Generate text and images via the reverse-engineered Gemini Web API with multi-turn conversation support.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
scripts/gemini-webapi/constants.ts
1export const Endpoint = {2GOOGLE: 'https://www.google.com',3INIT: 'https://gemini.google.com/app',4GENERATE:5'https://gemini.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate',6ROTATE_COOKIES: 'https://accounts.google.com/RotateCookies',7UPLOAD: 'https://content-push.googleapis.com/upload',8BATCH_EXEC: 'https://gemini.google.com/_/BardChatUi/data/batchexecute',9} as const;1011export const GRPC = {12LIST_CHATS: 'MaZiqc',13READ_CHAT: 'hNvQHb',14LIST_GEMS: 'CNgdBe',15CREATE_GEM: 'oMH3Zd',16UPDATE_GEM: 'kHv0Vd',17DELETE_GEM: 'UXcSJb',18} as const;1920export const Headers = {21GEMINI: {22'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',23Host: 'gemini.google.com',24Origin: 'https://gemini.google.com',25Referer: 'https://gemini.google.com/',26'User-Agent':27'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',28'X-Same-Domain': '1',29},30ROTATE_COOKIES: {31'Content-Type': 'application/json',32},33UPLOAD: {34'Push-ID': 'feeds/mcudyrk2a4khkz',35},36} as const;3738export const ErrorCode = {39TEMPORARY_ERROR_1013: 1013,40USAGE_LIMIT_EXCEEDED: 1037,41MODEL_INCONSISTENT: 1050,42MODEL_HEADER_INVALID: 1052,43IP_TEMPORARILY_BLOCKED: 1060,44} as const;4546export class Model {47static readonly UNSPECIFIED = new Model('unspecified', {}, false);48static readonly G_3_0_PRO = new Model(49'gemini-3.0-pro',50{ 'x-goog-ext-525001261-jspb': '[1,null,null,null,"9d8ca3786ebdfbea",null,null,0,[4],null,null,1]' },51false,52);53static readonly G_3_0_FLASH = new Model(54'gemini-3.0-flash',55{ 'x-goog-ext-525001261-jspb': '[1,null,null,null,"fbb127bbb056c959",null,null,0,[4],null,null,1]' },56false,57);58static readonly G_3_0_FLASH_THINKING = new Model(59'gemini-3.0-flash-thinking',60{ 'x-goog-ext-525001261-jspb': '[1,null,null,null,"5bf011840784117a",null,null,0,[4],null,null,1]' },61false,62);63static readonly G_3_1_PRO_PREVIEW = new Model(64'gemini-3.1-pro-preview',65{},66false,67);6869constructor(70public readonly model_name: string,71public readonly model_header: Record<string, string>,72public readonly advanced_only: boolean,73) {}7475static from_name(name: string): Model {76for (const model of [Model.UNSPECIFIED, Model.G_3_0_PRO, Model.G_3_0_FLASH, Model.G_3_0_FLASH_THINKING, Model.G_3_1_PRO_PREVIEW]) {77if (model.model_name === name) return model;78}7980throw new Error(81`Unknown model name: ${name}. Available models: ${[Model.UNSPECIFIED, Model.G_3_0_PRO, Model.G_3_0_FLASH, Model.G_3_0_FLASH_THINKING, Model.G_3_1_PRO_PREVIEW]82.map((m) => m.model_name)83.join(', ')}`,84);85}8687static from_dict(model_dict: { model_name?: unknown; model_header?: unknown }): Model {88if (!model_dict || typeof model_dict !== 'object') {89throw new Error("When passing a custom model as a dictionary, 'model_name' and 'model_header' keys must be provided.");90}9192if (!('model_name' in model_dict) || !('model_header' in model_dict)) {93throw new Error("When passing a custom model as a dictionary, 'model_name' and 'model_header' keys must be provided.");94}9596if (typeof model_dict.model_name !== 'string' || !model_dict.model_name.trim()) {97throw new Error("When passing a custom model as a dictionary, 'model_name' must be a non-empty string.");98}99100if (!model_dict.model_header || typeof model_dict.model_header !== 'object') {101throw new Error("When passing a custom model as a dictionary, 'model_header' must be a dictionary containing valid header strings.");102}103104const header: Record<string, string> = {};105for (const [k, v] of Object.entries(model_dict.model_header as Record<string, unknown>)) {106if (typeof v === 'string') header[k] = v;107}108109return new Model(model_dict.model_name, header, false);110}111}112113