notebooklm-sdk 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/enums.ts","../src/types/errors.ts","../src/auth.ts","../src/api/artifacts.ts","../src/types/models.ts","../src/api/chat.ts","../src/api/notebooks.ts","../src/api/notes.ts","../src/api/research.ts","../src/api/settings.ts","../src/api/sharing.ts","../src/api/sources.ts","../src/index.ts","../src/client.ts","../src/rpc/core.ts","../src/rpc/decoder.ts","../src/rpc/encoder.ts"],"names":["ArtifactTypeCode","AudioFormat","AudioLength","ChatMode","ExportType","InfographicDetail","InfographicOrientation","InfographicStyle","QuizDifficulty","QuizQuantity","RPCMethod","ShareAccess","SharePermission","ShareViewLevel","SlideDeckFormat","SlideDeckLength","VideoFormat","VideoStyle","NotebookLMError","NetworkError","RPCTimeoutError","RPCError","AuthError","RateLimitError","ServerError","ClientError","NotebookError","NotebookNotFoundError","SourceError","SourceNotFoundError","SourceAddError","SourceProcessingError","SourceTimeoutError","ArtifactError","ArtifactNotFoundError","ArtifactNotReadyError","ArtifactParseError","ArtifactDownloadError","ChatError","readFileSync","existsSync","join","homedir","sleep","fetchTokens"],"mappings":"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","file":"index.cjs","sourcesContent":["/** RPC method IDs for NotebookLM batchexecute API. */\nexport const RPCMethod = {\n // Notebook\n LIST_NOTEBOOKS: \"wXbhsf\",\n CREATE_NOTEBOOK: \"CCqFvf\",\n GET_NOTEBOOK: \"rLM1Ne\",\n RENAME_NOTEBOOK: \"s0tc2d\",\n DELETE_NOTEBOOK: \"WWINqb\",\n // Sources\n ADD_SOURCE: \"izAoDd\",\n ADD_SOURCE_FILE: \"o4cbdc\",\n DELETE_SOURCE: \"tGMBJ\",\n GET_SOURCE: \"hizoJc\",\n REFRESH_SOURCE: \"FLmJqe\",\n CHECK_SOURCE_FRESHNESS: \"yR9Yof\",\n UPDATE_SOURCE: \"b7Wfje\",\n // Summary\n SUMMARIZE: \"VfAZjd\",\n GET_SOURCE_GUIDE: \"tr032e\",\n GET_SUGGESTED_REPORTS: \"ciyUvf\",\n // Artifacts\n CREATE_ARTIFACT: \"R7cb6c\",\n LIST_ARTIFACTS: \"gArtLc\",\n DELETE_ARTIFACT: \"V5N4be\",\n RENAME_ARTIFACT: \"rc3d8d\",\n EXPORT_ARTIFACT: \"Krh3pd\",\n SHARE_ARTIFACT: \"RGP97b\",\n GET_INTERACTIVE_HTML: \"v9rmvd\",\n REVISE_SLIDE: \"KmcKPe\",\n // Research\n START_FAST_RESEARCH: \"Ljjv0c\",\n START_DEEP_RESEARCH: \"QA9ei\",\n POLL_RESEARCH: \"e3bVqc\",\n IMPORT_RESEARCH: \"LBwxtb\",\n // Notes / Mind Maps\n GENERATE_MIND_MAP: \"yyryJe\",\n CREATE_NOTE: \"CYK0Xb\",\n GET_NOTES_AND_MIND_MAPS: \"cFji9\",\n UPDATE_NOTE: \"cYAfTb\",\n DELETE_NOTE: \"AH0mwd\",\n // Conversation\n GET_LAST_CONVERSATION_ID: \"hPTbtc\",\n GET_CONVERSATION_TURNS: \"khqZz\",\n // Sharing\n SHARE_NOTEBOOK: \"QDyure\",\n GET_SHARE_STATUS: \"JFMDGd\",\n // Misc\n REMOVE_RECENTLY_VIEWED: \"fejl7e\",\n GET_USER_SETTINGS: \"ZwVcOc\",\n SET_USER_SETTINGS: \"hT54vc\",\n} as const;\n\nexport type RPCMethodId = (typeof RPCMethod)[keyof typeof RPCMethod];\n\n// ---------------------------------------------------------------------------\n// Artifact type codes (used in RPC calls)\n// ---------------------------------------------------------------------------\n\nexport const ArtifactTypeCode = {\n AUDIO: 1,\n REPORT: 2,\n VIDEO: 3,\n QUIZ: 4,\n MIND_MAP: 5,\n INFOGRAPHIC: 7,\n SLIDE_DECK: 8,\n DATA_TABLE: 9,\n} as const;\n\nexport type ArtifactTypeCodeValue = (typeof ArtifactTypeCode)[keyof typeof ArtifactTypeCode];\n\n// ---------------------------------------------------------------------------\n// Artifact status codes\n// ---------------------------------------------------------------------------\n\nexport const ArtifactStatusCode = {\n PROCESSING: 1,\n PENDING: 2,\n COMPLETED: 3,\n FAILED: 4,\n} as const;\n\nexport type ArtifactStatusCodeValue = (typeof ArtifactStatusCode)[keyof typeof ArtifactStatusCode];\n\n// ---------------------------------------------------------------------------\n// Source status codes\n// ---------------------------------------------------------------------------\n\nexport const SourceStatusCode = {\n PROCESSING: 1,\n READY: 2,\n ERROR: 3,\n PREPARING: 5,\n} as const;\n\nexport type SourceStatusCodeValue = (typeof SourceStatusCode)[keyof typeof SourceStatusCode];\n\n// ---------------------------------------------------------------------------\n// User-facing string enums\n// ---------------------------------------------------------------------------\n\n/** User-facing source type strings. */\nexport type SourceType =\n | \"google_docs\"\n | \"google_slides\"\n | \"google_spreadsheet\"\n | \"pdf\"\n | \"pasted_text\"\n | \"web_page\"\n | \"youtube\"\n | \"markdown\"\n | \"docx\"\n | \"csv\"\n | \"image\"\n | \"media\"\n | \"unknown\";\n\n/** User-facing artifact type strings. */\nexport type ArtifactType =\n | \"audio\"\n | \"video\"\n | \"report\"\n | \"quiz\"\n | \"flashcards\"\n | \"mind_map\"\n | \"infographic\"\n | \"slide_deck\"\n | \"data_table\"\n | \"unknown\";\n\n/** User-facing artifact status strings. */\nexport type ArtifactStatus = \"in_progress\" | \"pending\" | \"completed\" | \"failed\" | \"unknown\";\n\n/** User-facing source status strings. */\nexport type SourceStatus = \"processing\" | \"ready\" | \"error\" | \"preparing\" | \"unknown\";\n\n// ---------------------------------------------------------------------------\n// Format options (passed to RPC)\n// ---------------------------------------------------------------------------\n\nexport const AudioFormat = {\n DEEP_DIVE: 1,\n BRIEF: 2,\n CRITIQUE: 3,\n DEBATE: 4,\n} as const;\nexport type AudioFormatValue = (typeof AudioFormat)[keyof typeof AudioFormat];\n\nexport const AudioLength = {\n SHORT: 1,\n DEFAULT: 2,\n LONG: 3,\n} as const;\nexport type AudioLengthValue = (typeof AudioLength)[keyof typeof AudioLength];\n\nexport const VideoFormat = {\n EXPLAINER: 1,\n BRIEF: 2,\n CINEMATIC: 3,\n} as const;\nexport type VideoFormatValue = (typeof VideoFormat)[keyof typeof VideoFormat];\n\nexport const VideoStyle = {\n AUTO_SELECT: 1,\n CUSTOM: 2,\n CLASSIC: 3,\n WHITEBOARD: 4,\n KAWAII: 5,\n ANIME: 6,\n WATERCOLOR: 7,\n RETRO_PRINT: 8,\n HERITAGE: 9,\n PAPER_CRAFT: 10,\n} as const;\nexport type VideoStyleValue = (typeof VideoStyle)[keyof typeof VideoStyle];\n\nexport const QuizQuantity = {\n FEWER: 1,\n STANDARD: 2,\n MORE: 2, // API limitation: same as STANDARD\n} as const;\nexport type QuizQuantityValue = (typeof QuizQuantity)[keyof typeof QuizQuantity];\n\nexport const QuizDifficulty = {\n EASY: 1,\n MEDIUM: 2,\n HARD: 3,\n} as const;\nexport type QuizDifficultyValue = (typeof QuizDifficulty)[keyof typeof QuizDifficulty];\n\nexport const InfographicOrientation = {\n LANDSCAPE: 1,\n PORTRAIT: 2,\n SQUARE: 3,\n} as const;\nexport type InfographicOrientationValue =\n (typeof InfographicOrientation)[keyof typeof InfographicOrientation];\n\nexport const InfographicDetail = {\n CONCISE: 1,\n STANDARD: 2,\n DETAILED: 3,\n} as const;\nexport type InfographicDetailValue = (typeof InfographicDetail)[keyof typeof InfographicDetail];\n\nexport const InfographicStyle = {\n AUTO_SELECT: 1,\n SKETCH_NOTE: 2,\n PROFESSIONAL: 3,\n BENTO_GRID: 4,\n EDITORIAL: 5,\n INSTRUCTIONAL: 6,\n BRICKS: 7,\n CLAY: 8,\n ANIME: 9,\n KAWAII: 10,\n SCIENTIFIC: 11,\n} as const;\nexport type InfographicStyleValue = (typeof InfographicStyle)[keyof typeof InfographicStyle];\n\nexport const SlideDeckFormat = {\n DETAILED_DECK: 1,\n PRESENTER_SLIDES: 2,\n} as const;\nexport type SlideDeckFormatValue = (typeof SlideDeckFormat)[keyof typeof SlideDeckFormat];\n\nexport const SlideDeckLength = {\n DEFAULT: 1,\n SHORT: 2,\n} as const;\nexport type SlideDeckLengthValue = (typeof SlideDeckLength)[keyof typeof SlideDeckLength];\n\nexport const ExportType = {\n DOCS: 1,\n SHEETS: 2,\n} as const;\nexport type ExportTypeValue = (typeof ExportType)[keyof typeof ExportType];\n\n// ---------------------------------------------------------------------------\n// Internal mappings\n// ---------------------------------------------------------------------------\n\nconst SOURCE_TYPE_MAP: Record<number, SourceType> = {\n 1: \"google_docs\",\n 2: \"google_slides\",\n 3: \"pdf\",\n 4: \"pasted_text\",\n 5: \"web_page\",\n 8: \"markdown\",\n 9: \"youtube\",\n 10: \"media\",\n 11: \"docx\",\n 13: \"image\",\n 14: \"google_spreadsheet\",\n 16: \"csv\",\n};\n\nconst ARTIFACT_TYPE_MAP: Record<number, ArtifactType> = {\n 1: \"audio\",\n 2: \"report\",\n 3: \"video\",\n 5: \"mind_map\",\n 7: \"infographic\",\n 8: \"slide_deck\",\n 9: \"data_table\",\n};\n\nconst ARTIFACT_STATUS_MAP: Record<number, ArtifactStatus> = {\n 1: \"in_progress\",\n 2: \"pending\",\n 3: \"completed\",\n 4: \"failed\",\n};\n\nconst SOURCE_STATUS_MAP: Record<number, SourceStatus> = {\n 1: \"processing\",\n 2: \"ready\",\n 3: \"error\",\n 5: \"preparing\",\n};\n\nexport function sourceTypeFromCode(code: number | null | undefined): SourceType {\n if (code == null) return \"unknown\";\n return SOURCE_TYPE_MAP[code] ?? \"unknown\";\n}\n\nexport function artifactTypeFromCode(typeCode: number, variant?: number | null): ArtifactType {\n // Quiz (4) and flashcards both use type 4, distinguished by variant\n if (typeCode === 4) {\n if (variant === 1) return \"flashcards\";\n if (variant === 2) return \"quiz\";\n return \"unknown\";\n }\n return ARTIFACT_TYPE_MAP[typeCode] ?? \"unknown\";\n}\n\nexport function artifactStatusFromCode(code: number): ArtifactStatus {\n return ARTIFACT_STATUS_MAP[code] ?? \"unknown\";\n}\n\nexport function sourceStatusFromCode(code: number): SourceStatus {\n return SOURCE_STATUS_MAP[code] ?? \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Chat mode\n// ---------------------------------------------------------------------------\n\n/**\n * Predefined chat modes that control response style and verbosity.\n * Applied per-notebook via `client.chat.setMode()`.\n */\nexport const ChatMode = {\n /** General purpose — balanced length and style. */\n DEFAULT: \"default\",\n /** Educational focus with longer, learning-oriented responses. */\n LEARNING_GUIDE: \"learning_guide\",\n /** Short, concise answers. */\n CONCISE: \"concise\",\n /** Verbose, detailed answers. */\n DETAILED: \"detailed\",\n} as const;\n\nexport type ChatModeValue = (typeof ChatMode)[keyof typeof ChatMode];\n\n// Internal goal/length codes used by the RPC\nconst CHAT_MODE_PARAMS: Record<ChatModeValue, [goal: number, length: number]> = {\n default: [1, 1],\n learning_guide: [3, 4],\n concise: [1, 5],\n detailed: [1, 4],\n};\n\nexport function chatModeToParams(mode: ChatModeValue): [goal: number, length: number] {\n return CHAT_MODE_PARAMS[mode];\n}\n\n// ---------------------------------------------------------------------------\n// Sharing enums\n// ---------------------------------------------------------------------------\n\nexport const ShareAccess = {\n /** Only explicitly shared users can access */\n RESTRICTED: 0,\n /** Anyone with the link can access */\n ANYONE_WITH_LINK: 1,\n} as const;\n\nexport type ShareAccessValue = (typeof ShareAccess)[keyof typeof ShareAccess];\n\nexport const ShareViewLevel = {\n /** Chat + sources + notes */\n FULL_NOTEBOOK: 0,\n /** Chat interface only */\n CHAT_ONLY: 1,\n} as const;\n\nexport type ShareViewLevelValue = (typeof ShareViewLevel)[keyof typeof ShareViewLevel];\n\nexport const SharePermission = {\n OWNER: 1,\n EDITOR: 2,\n VIEWER: 3,\n /** Internal: remove user from share list */\n _REMOVE: 4,\n} as const;\n\nexport type SharePermissionValue = (typeof SharePermission)[keyof typeof SharePermission];\n","/**\n * All exceptions for notebooklm-sdk.\n *\n * All errors extend NotebookLMError so you can catch everything with:\n * try { ... } catch (e) { if (e instanceof NotebookLMError) ... }\n */\n\nexport class NotebookLMError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Network (transport-level, before RPC processing)\n// ---------------------------------------------------------------------------\n\nexport class NetworkError extends NotebookLMError {\n readonly methodId?: string;\n readonly originalError?: Error;\n\n constructor(message: string, opts: { methodId?: string; originalError?: Error } = {}) {\n super(message);\n this.methodId = opts.methodId;\n this.originalError = opts.originalError;\n }\n}\n\nexport class RPCTimeoutError extends NetworkError {}\n\n// ---------------------------------------------------------------------------\n// RPC Protocol (after connection established)\n// ---------------------------------------------------------------------------\n\nexport class RPCError extends NotebookLMError {\n readonly methodId?: string;\n readonly rawResponse?: string;\n readonly rpcCode?: string | number;\n readonly foundIds: string[];\n\n constructor(\n message: string,\n opts: {\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n foundIds?: string[];\n } = {},\n ) {\n super(message);\n this.methodId = opts.methodId;\n this.rawResponse = opts.rawResponse ? opts.rawResponse.slice(0, 500) : undefined;\n this.rpcCode = opts.rpcCode;\n this.foundIds = opts.foundIds ?? [];\n }\n}\n\nexport class AuthError extends RPCError {}\n\nexport class RateLimitError extends RPCError {\n readonly retryAfter?: number;\n\n constructor(\n message: string,\n opts: {\n retryAfter?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n foundIds?: string[];\n } = {},\n ) {\n super(message, opts);\n this.retryAfter = opts.retryAfter;\n }\n}\n\nexport class ServerError extends RPCError {\n readonly statusCode?: number;\n\n constructor(\n message: string,\n opts: {\n statusCode?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n } = {},\n ) {\n super(message, opts);\n this.statusCode = opts.statusCode;\n }\n}\n\nexport class ClientError extends RPCError {\n readonly statusCode?: number;\n\n constructor(\n message: string,\n opts: {\n statusCode?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n } = {},\n ) {\n super(message, opts);\n this.statusCode = opts.statusCode;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Notebooks\n// ---------------------------------------------------------------------------\n\nexport class NotebookError extends NotebookLMError {}\n\nexport class NotebookNotFoundError extends NotebookError {\n readonly notebookId: string;\n\n constructor(notebookId: string) {\n super(`Notebook not found: ${notebookId}`);\n this.notebookId = notebookId;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Sources\n// ---------------------------------------------------------------------------\n\nexport class SourceError extends NotebookLMError {}\n\nexport class SourceNotFoundError extends SourceError {\n readonly sourceId: string;\n\n constructor(sourceId: string) {\n super(`Source not found: ${sourceId}`);\n this.sourceId = sourceId;\n }\n}\n\nexport class SourceAddError extends SourceError {\n readonly url: string;\n readonly cause?: Error;\n\n constructor(url: string, opts: { cause?: Error; message?: string } = {}) {\n super(\n opts.message ??\n `Failed to add source: ${url}\\n` +\n \"Possible causes:\\n\" +\n \" - URL is invalid or inaccessible\\n\" +\n \" - Content is behind a paywall or requires authentication\\n\" +\n \" - Rate limiting or quota exceeded\",\n );\n this.url = url;\n this.cause = opts.cause;\n }\n}\n\nexport class SourceProcessingError extends SourceError {\n readonly sourceId: string;\n readonly status: number;\n\n constructor(sourceId: string, status = 3, message?: string) {\n super(message ?? `Source ${sourceId} failed to process`);\n this.sourceId = sourceId;\n this.status = status;\n }\n}\n\nexport class SourceTimeoutError extends SourceError {\n readonly sourceId: string;\n readonly timeout: number;\n readonly lastStatus?: number;\n\n constructor(sourceId: string, timeout: number, lastStatus?: number) {\n const statusInfo = lastStatus != null ? ` (last status: ${lastStatus})` : \"\";\n super(`Source ${sourceId} not ready after ${timeout.toFixed(1)}s${statusInfo}`);\n this.sourceId = sourceId;\n this.timeout = timeout;\n this.lastStatus = lastStatus;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Artifacts\n// ---------------------------------------------------------------------------\n\nexport class ArtifactError extends NotebookLMError {}\n\nexport class ArtifactNotFoundError extends ArtifactError {\n readonly artifactId: string;\n readonly artifactType?: string;\n\n constructor(artifactId: string, artifactType?: string) {\n const typeInfo = artifactType ? ` ${artifactType}` : \"\";\n super(`${typeInfo.trim() || \"Artifact\"} ${artifactId} not found`);\n this.artifactId = artifactId;\n this.artifactType = artifactType;\n }\n}\n\nexport class ArtifactNotReadyError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly status?: string;\n\n constructor(artifactType: string, opts: { artifactId?: string; status?: string } = {}) {\n const base = opts.artifactId\n ? `${artifactType} artifact ${opts.artifactId} is not ready`\n : `No completed ${artifactType} found`;\n const statusInfo = opts.status ? ` (status: ${opts.status})` : \"\";\n super(`${base}${statusInfo}`);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.status = opts.status;\n }\n}\n\nexport class ArtifactParseError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly details?: string;\n readonly cause?: Error;\n\n constructor(\n artifactType: string,\n opts: { details?: string; artifactId?: string; cause?: Error } = {},\n ) {\n let msg = `Failed to parse ${artifactType} artifact`;\n if (opts.artifactId) msg += ` ${opts.artifactId}`;\n if (opts.details) msg += `: ${opts.details}`;\n super(msg);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.details = opts.details;\n this.cause = opts.cause;\n }\n}\n\nexport class ArtifactDownloadError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly details?: string;\n readonly cause?: Error;\n\n constructor(\n artifactType: string,\n opts: { details?: string; artifactId?: string; cause?: Error } = {},\n ) {\n let msg = `Failed to download ${artifactType} artifact`;\n if (opts.artifactId) msg += ` ${opts.artifactId}`;\n if (opts.details) msg += `: ${opts.details}`;\n super(msg);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.details = opts.details;\n this.cause = opts.cause;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Chat\n// ---------------------------------------------------------------------------\n\nexport class ChatError extends NotebookLMError {}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { AuthError } from \"./types/errors.js\";\n\n/** Default session file written by `npx notebooklm-sdk login`. */\nconst DEFAULT_SESSION_FILE = join(homedir(), \".notebooklm\", \"session.json\");\n\nexport interface CookieMap {\n [key: string]: string;\n}\n\nexport interface AuthTokens {\n cookies: CookieMap;\n csrfToken: string;\n sessionId: string;\n cookieHeader: string;\n /** Cookie header containing only .google.com domain cookies — for media downloads */\n googleCookieHeader: string;\n}\n\n// ---------------------------------------------------------------------------\n// Cookie loading\n// ---------------------------------------------------------------------------\n\n/** Load cookies from a Playwright storage_state.json file. */\nexport function loadCookiesFromFile(filePath: string): CookieMap {\n let raw: string;\n try {\n raw = readFileSync(filePath, \"utf-8\");\n } catch {\n throw new AuthError(`Session file not found: ${filePath}\\nRun: npx notebooklm-sdk login`);\n }\n return extractCookiesFromStorageState(JSON.parse(raw));\n}\n\n/** Load cookies from a raw Playwright storage state object. */\nexport function loadCookiesFromObject(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): CookieMap {\n return extractCookiesFromStorageState(storageState);\n}\n\n/** Build a cookie header containing only .google.com domain cookies (for media downloads). */\nexport function buildGoogleCookieHeader(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): string {\n const map: CookieMap = {};\n for (const c of storageState.cookies ?? []) {\n if (c.domain === \".google.com\" && c.name && c.value) {\n map[c.name] = map[c.name] ?? c.value;\n }\n }\n return buildCookieHeader(map);\n}\n\n/** Load cookies from a flat cookie map (already parsed). */\nexport function loadCookiesFromMap(map: CookieMap): CookieMap {\n return { ...map };\n}\n\n/** Load cookies from a \"; \"-separated cookie string (e.g. process.env.NOTEBOOKLM_COOKIES). */\nexport function loadCookiesFromString(cookieStr: string): CookieMap {\n const map: CookieMap = {};\n for (const part of cookieStr.split(/;\\s*/)) {\n const idx = part.indexOf(\"=\");\n if (idx > 0) {\n const name = part.slice(0, idx).trim();\n const value = part.slice(idx + 1).trim();\n if (name) map[name] = value;\n }\n }\n return map;\n}\n\nfunction extractCookiesFromStorageState(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): CookieMap {\n const cookies: CookieMap = {};\n const domainTrack: Record<string, string> = {};\n\n for (const cookie of storageState.cookies ?? []) {\n const { domain, name, value } = cookie;\n if (!isAllowedDomain(domain) || !name) continue;\n\n const isBase = domain === \".google.com\";\n if (!(name in cookies) || isBase) {\n cookies[name] = value;\n domainTrack[name] = domain;\n }\n }\n\n if (!cookies[\"SID\"]) {\n throw new AuthError(\n \"Missing required cookie: SID. Session may be invalid or expired.\\nRun: npx notebooklm-sdk login\",\n );\n }\n return cookies;\n}\n\nfunction isAllowedDomain(domain: string): boolean {\n if (\n domain === \".google.com\" ||\n domain === \"notebooklm.google.com\" ||\n domain === \".googleusercontent.com\"\n ) {\n return true;\n }\n if (domain.startsWith(\".google.\")) {\n return true; // Allow all regional Google domains\n }\n return false;\n}\n\nexport function buildCookieHeader(cookies: CookieMap): string {\n return Object.entries(cookies)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"; \");\n}\n\n// ---------------------------------------------------------------------------\n// Token fetching\n// ---------------------------------------------------------------------------\n\nconst NOTEBOOKLM_URL = \"https://notebooklm.google.com/\";\n\nexport async function fetchTokens(\n cookies: CookieMap,\n): Promise<{ csrfToken: string; sessionId: string }> {\n const cookieHeader = buildCookieHeader(cookies);\n\n const response = await fetch(NOTEBOOKLM_URL, {\n headers: { Cookie: cookieHeader },\n redirect: \"follow\",\n });\n\n if (!response.ok) {\n throw new AuthError(`Failed to fetch NotebookLM page: HTTP ${response.status}`);\n }\n\n const finalUrl = response.url;\n if (isGoogleAuthRedirect(finalUrl)) {\n throw new AuthError(`Redirected to login page: ${finalUrl}. Cookies may be expired.`);\n }\n\n const html = await response.text();\n const csrfToken = extractCsrfToken(html, finalUrl);\n const sessionId = extractSessionId(html, finalUrl);\n\n return { csrfToken, sessionId };\n}\n\nfunction extractCsrfToken(html: string, finalUrl: string): string {\n const match = /\"SNlM0e\"\\s*:\\s*\"([^\"]+)\"/.exec(html);\n if (!match?.[1]) {\n if (isGoogleAuthRedirect(finalUrl) || html.includes(\"accounts.google.com\")) {\n throw new AuthError(\"Session expired or invalid.\\nRun: npx notebooklm-sdk login\");\n }\n throw new AuthError(\"CSRF token (SNlM0e) not found in NotebookLM page HTML.\");\n }\n return match[1];\n}\n\nfunction extractSessionId(html: string, finalUrl: string): string {\n const match = /\"FdrFJe\"\\s*:\\s*\"([^\"]+)\"/.exec(html);\n if (!match?.[1]) {\n if (isGoogleAuthRedirect(finalUrl) || html.includes(\"accounts.google.com\")) {\n throw new AuthError(\"Session expired or invalid.\\nRun: npx notebooklm-sdk login\");\n }\n throw new AuthError(\"Session ID (FdrFJe) not found in NotebookLM page HTML.\");\n }\n return match[1];\n}\n\nfunction isGoogleAuthRedirect(url: string): boolean {\n return url.includes(\"accounts.google.com\") || url.includes(\"signin\");\n}\n\n// ---------------------------------------------------------------------------\n// Connect options\n// ---------------------------------------------------------------------------\n\nexport interface ConnectOptions {\n /** \"; \"-separated cookie string (e.g. \"SID=abc; HSID=xyz\") */\n cookies?: string;\n /** Path to Playwright storage_state.json */\n cookiesFile?: string;\n /** Pre-parsed cookie map */\n cookiesObject?: CookieMap | { cookies?: Array<{ name: string; value: string; domain: string }> };\n}\n\nexport async function connect(opts: ConnectOptions = {}): Promise<AuthTokens> {\n let cookieMap: CookieMap;\n let googleCookieHeader: string | null = null;\n\n if (opts.cookies) {\n cookieMap = loadCookiesFromString(opts.cookies);\n } else if (opts.cookiesFile) {\n cookieMap = loadCookiesFromFile(opts.cookiesFile);\n } else if (opts.cookiesObject) {\n if (\"cookies\" in opts.cookiesObject && Array.isArray(opts.cookiesObject.cookies)) {\n const storageState = opts.cookiesObject as {\n cookies: Array<{ name: string; value: string; domain: string }>;\n };\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else {\n cookieMap = loadCookiesFromMap(opts.cookiesObject as CookieMap);\n }\n } else {\n // Auto-discovery: ~/.notebooklm/session.json → ./storage_state.json → env var\n const envCookies = process.env[\"NOTEBOOKLM_COOKIES\"];\n const envFile = process.env[\"NOTEBOOKLM_COOKIES_FILE\"];\n if (envFile) {\n cookieMap = loadCookiesFromFile(envFile);\n } else if (existsSync(DEFAULT_SESSION_FILE)) {\n const raw = readFileSync(DEFAULT_SESSION_FILE, \"utf-8\");\n const storageState = JSON.parse(raw);\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else if (existsSync(\"storage_state.json\")) {\n const raw = readFileSync(\"storage_state.json\", \"utf-8\");\n const storageState = JSON.parse(raw);\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else if (envCookies) {\n cookieMap = loadCookiesFromString(envCookies);\n } else {\n throw new AuthError(\"No session found. Run: npx notebooklm-sdk login\");\n }\n }\n\n const { csrfToken, sessionId } = await fetchTokens(cookieMap);\n const cookieHeader = buildCookieHeader(cookieMap);\n\n return {\n cookies: cookieMap,\n csrfToken,\n sessionId,\n cookieHeader,\n googleCookieHeader: googleCookieHeader ?? cookieHeader,\n };\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type {\n AudioFormatValue,\n AudioLengthValue,\n InfographicDetailValue,\n InfographicOrientationValue,\n InfographicStyleValue,\n QuizDifficultyValue,\n QuizQuantityValue,\n SlideDeckFormatValue,\n SlideDeckLengthValue,\n VideoFormatValue,\n VideoStyleValue,\n} from \"../types/enums.js\";\nimport {\n ArtifactTypeCode,\n AudioFormat,\n AudioLength,\n artifactStatusFromCode,\n InfographicDetail,\n InfographicOrientation,\n InfographicStyle,\n QuizDifficulty,\n QuizQuantity,\n RPCMethod,\n SlideDeckFormat,\n SlideDeckLength,\n VideoFormat,\n VideoStyle,\n} from \"../types/enums.js\";\nimport { ArtifactNotReadyError } from \"../types/errors.js\";\nimport type { Artifact, GenerationStatus, Note, ReportSuggestion } from \"../types/models.js\";\nimport { parseArtifact } from \"../types/models.js\";\nimport type { NotesAPI } from \"./notes.js\";\n\nexport interface CreateAudioOptions {\n format?: AudioFormatValue;\n length?: AudioLengthValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateVideoOptions {\n format?: VideoFormatValue;\n style?: VideoStyleValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateQuizOptions {\n quantity?: QuizQuantityValue;\n difficulty?: QuizDifficultyValue;\n sourceIds?: string[];\n instructions?: string;\n}\n\nexport interface CreateInfographicOptions {\n orientation?: InfographicOrientationValue;\n detail?: InfographicDetailValue;\n style?: InfographicStyleValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateSlideDeckOptions {\n format?: SlideDeckFormatValue;\n length?: SlideDeckLengthValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateDataTableOptions {\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface DataTableContent {\n headers: string[];\n rows: string[][];\n}\n\nexport type ReportFormat = \"briefing_doc\" | \"study_guide\" | \"blog_post\" | \"custom\";\n\nexport interface CreateReportOptions {\n format?: ReportFormat;\n sourceIds?: string[];\n language?: string;\n customPrompt?: string;\n extraInstructions?: string;\n}\n\n// Triple-nest source IDs as required by the API: [[[sid]], [[sid]], ...]\nfunction tripleNest(ids: string[]): string[][][] {\n return ids.map((id) => [[id]]);\n}\n\n// Double-nest source IDs: [[sid], [sid], ...]\nfunction doubleNest(ids: string[]): string[][] {\n return ids.map((id) => [id]);\n}\n\nexport class ArtifactsAPI {\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n private readonly notes: NotesAPI,\n ) {}\n\n async list(notebookId: string): Promise<Artifact[]> {\n const rawList = await this._listRaw(notebookId);\n const artifacts: Artifact[] = [];\n for (const item of rawList) {\n if (Array.isArray(item)) {\n try {\n artifacts.push(parseArtifact(item, notebookId));\n } catch {\n // ignore malformed items\n }\n }\n }\n return artifacts;\n }\n\n private async _listRaw(notebookId: string): Promise<unknown[][]> {\n const params = [[2], notebookId, 'NOT artifact.status = \"ARTIFACT_STATUS_SUGGESTED\"'];\n const result = await this.rpc.call(RPCMethod.LIST_ARTIFACTS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (!Array.isArray(result) || !result.length) return [];\n return (Array.isArray(result[0]) ? result[0] : result) as unknown[][];\n }\n\n async get(notebookId: string, artifactId: string): Promise<Artifact | null> {\n const artifacts = await this.list(notebookId);\n return artifacts.find((a) => a.id === artifactId) ?? null;\n }\n\n async delete(notebookId: string, artifactId: string): Promise<boolean> {\n const params = [[2], notebookId, artifactId];\n await this.rpc.call(RPCMethod.DELETE_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async rename(notebookId: string, artifactId: string, newTitle: string): Promise<boolean> {\n const params = [[2], notebookId, artifactId, newTitle];\n await this.rpc.call(RPCMethod.RENAME_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n // ---------------------------------------------------------------------------\n // Generation\n // ---------------------------------------------------------------------------\n\n async createAudio(notebookId: string, opts: CreateAudioOptions = {}): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const length = opts.length ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n // config at index 6 (no extra null before it)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.AUDIO,\n triple,\n null,\n null,\n [null, [opts.instructions ?? null, length, null, double, language, null, format]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createVideo(notebookId: string, opts: CreateVideoOptions = {}): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const style = opts.style ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n // config at index 8 (two extra nulls at 6,7)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.VIDEO,\n triple,\n null,\n null,\n null,\n null,\n [null, null, [double, language, opts.instructions ?? null, null, format, style]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createQuiz(notebookId: string, opts: CreateQuizOptions = {}): Promise<GenerationStatus> {\n const quantity = opts.quantity ?? null;\n const difficulty = opts.difficulty ?? null;\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 9 (three extra nulls at 6,7,8); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.QUIZ,\n triple,\n null,\n null,\n null,\n null,\n null,\n [\n null,\n [2, null, opts.instructions ?? null, null, null, null, null, [quantity, difficulty]],\n ],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createFlashcards(\n notebookId: string,\n opts: CreateQuizOptions = {},\n ): Promise<GenerationStatus> {\n const quantity = opts.quantity ?? null;\n const difficulty = opts.difficulty ?? null;\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 9; note [difficulty, quantity] order (reversed from quiz)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.QUIZ,\n triple,\n null,\n null,\n null,\n null,\n null,\n [null, [1, null, opts.instructions ?? null, null, null, null, [difficulty, quantity]]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createInfographic(\n notebookId: string,\n opts: CreateInfographicOptions = {},\n ): Promise<GenerationStatus> {\n const orientation = opts.orientation ?? null;\n const detail = opts.detail ?? null;\n const style = opts.style ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 14 (eight extra nulls at 6-13); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.INFOGRAPHIC,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [[opts.instructions ?? null, language, null, orientation, detail, style]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createSlideDeck(\n notebookId: string,\n opts: CreateSlideDeckOptions = {},\n ): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const length = opts.length ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 16 (ten extra nulls at 6-15); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.SLIDE_DECK,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [[opts.instructions ?? null, language, format, length]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createDataTable(\n notebookId: string,\n opts: CreateDataTableOptions = {},\n ): Promise<GenerationStatus> {\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 18 (twelve extra nulls at 6-17)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.DATA_TABLE,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [null, [opts.instructions ?? null, language]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createReport(\n notebookId: string,\n opts: CreateReportOptions = {},\n ): Promise<GenerationStatus> {\n const format = opts.format ?? \"briefing_doc\";\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n const configs: Record<string, { title: string; description: string; prompt: string }> = {\n briefing_doc: {\n title: \"Briefing Doc\",\n description: \"Key insights and important quotes\",\n prompt:\n \"Create a comprehensive briefing document that includes an Executive Summary, \" +\n \"detailed analysis of key themes, important quotes with context, and actionable insights.\",\n },\n study_guide: {\n title: \"Study Guide\",\n description: \"Short-answer quiz, essay questions, glossary\",\n prompt:\n \"Create a comprehensive study guide that includes key concepts, short-answer practice \" +\n \"questions, essay prompts for deeper exploration, and a glossary of important terms.\",\n },\n blog_post: {\n title: \"Blog Post\",\n description: \"Insightful takeaways in readable article format\",\n prompt:\n \"Write an engaging blog post that presents the key insights in an accessible, \" +\n \"reader-friendly format with an attention-grabbing introduction and compelling conclusion.\",\n },\n custom: {\n title: \"Custom Report\",\n description: \"Custom format\",\n prompt: opts.customPrompt ?? \"Create a report based on the provided sources.\",\n },\n };\n\n const cfg = configs[format] ?? configs[\"briefing_doc\"]!;\n const prompt =\n opts.extraInstructions && format !== \"custom\"\n ? `${cfg.prompt}\\n\\n${opts.extraInstructions}`\n : cfg.prompt;\n\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.REPORT,\n triple,\n null,\n null,\n null,\n [null, [cfg.title, cfg.description, null, double, language, prompt, null, true]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createMindMap(notebookId: string, sourceIds?: string[]): Promise<Note> {\n const ids = sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(ids);\n\n // GENERATE_MIND_MAP returns content directly — it does NOT persist anything.\n // We extract the JSON from result[0][0] and save it as a note.\n const params = [\n triple,\n null,\n null,\n null,\n null,\n [\"interactive_mindmap\", [[\"[CONTEXT]\", \"\"]], \"\"],\n null,\n [2, null, [1]],\n ];\n const result = await this.rpc.call(RPCMethod.GENERATE_MIND_MAP, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const mindMapJson: string | null =\n Array.isArray(result) && Array.isArray(result[0]) && typeof result[0][0] === \"string\"\n ? (result[0][0] as string)\n : null;\n\n if (!mindMapJson) throw new Error(\"Mind map generation returned no content\");\n\n let title = \"Mind Map\";\n try {\n const parsed = JSON.parse(mindMapJson) as Record<string, unknown>;\n if (typeof parsed[\"name\"] === \"string\") title = parsed[\"name\"];\n } catch {\n // keep default title\n }\n\n return this.notes.create(notebookId, mindMapJson, title);\n }\n\n // ---------------------------------------------------------------------------\n // Polling / download\n // ---------------------------------------------------------------------------\n\n /** Poll until artifact reaches completed/failed status. */\n async waitUntilReady(\n notebookId: string,\n artifactId: string,\n timeout = 300,\n pollInterval = 3,\n ): Promise<Artifact> {\n const deadline = Date.now() + timeout * 1000;\n\n while (Date.now() < deadline) {\n const artifact = await this.get(notebookId, artifactId);\n if (artifact?.status === \"completed\") return artifact;\n if (artifact?.status === \"failed\") {\n throw new ArtifactNotReadyError(artifact.kind, { artifactId, status: \"failed\" });\n }\n await sleep(pollInterval * 1000);\n }\n throw new ArtifactNotReadyError(\"artifact\", { artifactId, status: \"timeout\" });\n }\n\n /** Download audio content as a Buffer. */\n async downloadAudio(notebookId: string, artifactId: string): Promise<Buffer> {\n const artifact = await this.get(notebookId, artifactId);\n if (!artifact || artifact.status !== \"completed\") {\n throw new ArtifactNotReadyError(\"audio\", { artifactId, status: artifact?.status });\n }\n if (!artifact.audioUrl) throw new ArtifactNotReadyError(\"audio\", { artifactId });\n return this._fetchMediaWithCookies(artifact.audioUrl);\n }\n\n /** Download video content as a Buffer. */\n async downloadVideo(notebookId: string, artifactId: string): Promise<Buffer> {\n const artifact = await this.get(notebookId, artifactId);\n if (!artifact || artifact.status !== \"completed\") {\n throw new ArtifactNotReadyError(\"video\", { artifactId, status: artifact?.status });\n }\n if (!artifact.videoUrl) throw new ArtifactNotReadyError(\"video\", { artifactId });\n return this._fetchMediaWithCookies(artifact.videoUrl);\n }\n\n /** Get markdown content for a completed report artifact. */\n async getReportMarkdown(notebookId: string, artifactId: string): Promise<string | null> {\n const artifact = await this.get(notebookId, artifactId);\n return artifact?.content ?? null;\n }\n\n /** Get interactive HTML for quiz/flashcard artifacts. */\n async getInteractiveHtml(notebookId: string, artifactId: string): Promise<string | null> {\n const params = [artifactId];\n const result = await this.rpc.call(RPCMethod.GET_INTERACTIVE_HTML, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n // result[0] is artifact data array; HTML is at result[0][9][0]\n if (Array.isArray(result) && Array.isArray(result[0])) {\n const data = result[0] as unknown[];\n if (Array.isArray(data[9]) && typeof (data[9] as unknown[])[0] === \"string\") {\n return (data[9] as unknown[])[0] as string;\n }\n }\n return null;\n }\n\n /** Download a completed slide deck as PDF or PPTX. Returns a Buffer. */\n async downloadSlideDeck(\n notebookId: string,\n artifactId: string,\n format: \"pdf\" | \"pptx\" = \"pdf\",\n ): Promise<Buffer> {\n const rawList = await this._listRaw(notebookId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const raw = rawList.find(\n (a: any) => a[0] === artifactId && a[2] === ArtifactTypeCode.SLIDE_DECK,\n ) as any;\n if (!raw) throw new ArtifactNotReadyError(\"slide_deck\", { artifactId });\n\n // artifact[16] = [config, title, slides, pdf_url, pptx_url]\n const metadata = raw[16];\n if (!Array.isArray(metadata)) throw new ArtifactNotReadyError(\"slide_deck\", { artifactId });\n\n const url = format === \"pptx\" ? metadata[4] : metadata[3];\n if (typeof url !== \"string\" || !url.startsWith(\"http\")) {\n throw new ArtifactNotReadyError(\"slide_deck\", { artifactId, status: `no ${format} url` });\n }\n return this._fetchMediaWithCookies(url);\n }\n\n /** Download a completed infographic as PNG. Returns a Buffer. */\n async downloadInfographic(notebookId: string, artifactId: string): Promise<Buffer> {\n const rawList = await this._listRaw(notebookId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const raw = rawList.find(\n (a: any) => a[0] === artifactId && a[2] === ArtifactTypeCode.INFOGRAPHIC,\n ) as any[];\n if (!raw) throw new ArtifactNotReadyError(\"infographic\", { artifactId });\n\n // Scan in reverse for the nested list containing the image URL\n let url: string | null = null;\n for (let i = raw.length - 1; i >= 0; i--) {\n const item = raw[i];\n if (\n Array.isArray(item) &&\n Array.isArray(item[2]) &&\n Array.isArray(item[2][0]) &&\n Array.isArray(item[2][0][1]) &&\n typeof item[2][0][1][0] === \"string\" &&\n (item[2][0][1][0] as string).startsWith(\"http\")\n ) {\n url = item[2][0][1][0] as string;\n break;\n }\n }\n if (!url) throw new ArtifactNotReadyError(\"infographic\", { artifactId });\n return this._fetchMediaWithCookies(url);\n }\n\n /** Get AI-suggested report formats based on notebook content. */\n async suggestReports(notebookId: string): Promise<ReportSuggestion[]> {\n const params = [[2], notebookId];\n const result = await this.rpc.call(RPCMethod.GET_SUGGESTED_REPORTS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n timeoutMs: 120_000,\n });\n if (!Array.isArray(result) || !result.length) return [];\n const items = Array.isArray(result[0]) ? (result[0] as unknown[]) : result;\n const suggestions: ReportSuggestion[] = [];\n for (const item of items) {\n if (Array.isArray(item) && item.length >= 5) {\n suggestions.push({\n title: typeof item[0] === \"string\" ? item[0] : \"\",\n description: typeof item[1] === \"string\" ? item[1] : \"\",\n prompt: typeof item[4] === \"string\" ? item[4] : \"\",\n audienceLevel: typeof item[5] === \"number\" ? item[5] : 2,\n });\n }\n }\n return suggestions;\n }\n\n /** Revise an individual slide in a completed slide deck using a prompt. */\n async reviseSlide(\n notebookId: string,\n artifactId: string,\n slideIndex: number,\n prompt: string,\n ): Promise<GenerationStatus> {\n if (slideIndex < 0) throw new Error(\"slideIndex must be >= 0\");\n const params = [[2], artifactId, [[[slideIndex, prompt]]]];\n const result = await this.rpc.call(RPCMethod.REVISE_SLIDE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this._parseGenerationResult(result);\n }\n\n /** Get parsed headers and rows from a completed data table artifact. */\n async getDataTableContent(\n notebookId: string,\n artifactId: string,\n ): Promise<DataTableContent | null> {\n const artifacts = await this._listRaw(notebookId);\n const raw = artifacts.find(\n (a) => Array.isArray(a) && a[0] === artifactId && a[2] === ArtifactTypeCode.DATA_TABLE,\n );\n if (!raw || !Array.isArray(raw) || !Array.isArray(raw[18])) return null;\n return parseDataTable(raw[18]);\n }\n\n // ---------------------------------------------------------------------------\n // Internal\n // ---------------------------------------------------------------------------\n\n /**\n * Fetch a Google-hosted media URL, manually following redirects to ensure\n * cookies are included on every hop. Node/Bun fetch strips the Cookie header\n * on cross-origin redirects (e.g. googleusercontent.com → lh3.google.com).\n */\n private async _fetchMediaWithCookies(url: string, maxRedirects = 10): Promise<Buffer> {\n let current = url;\n for (let i = 0; i < maxRedirects; i++) {\n if (!isTrustedDomain(current)) {\n throw new Error(`Untrusted redirect target: ${new URL(current).hostname}`);\n }\n const response = await fetch(current, {\n headers: { Cookie: this.auth.googleCookieHeader },\n redirect: \"manual\",\n });\n\n if (response.status >= 300 && response.status < 400) {\n const location = response.headers.get(\"location\");\n if (!location)\n throw new Error(`Redirect with no Location header (status ${response.status})`);\n current = location.startsWith(\"http\") ? location : new URL(location, current).href;\n continue;\n }\n\n if (!response.ok) throw new Error(`Media download failed: HTTP ${response.status}`);\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/html\")) {\n throw new Error(\"Media download returned HTML — authentication cookies may be expired.\");\n }\n\n return Buffer.from(await response.arrayBuffer());\n }\n throw new Error(\"Too many redirects fetching media URL\");\n }\n\n private async _callGenerate(notebookId: string, params: unknown[]): Promise<GenerationStatus> {\n const result = await this.rpc.call(RPCMethod.CREATE_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this._parseGenerationResult(result);\n }\n\n private _parseGenerationResult(result: unknown): GenerationStatus {\n if (Array.isArray(result) && result.length > 0) {\n const artifactData = result[0] as unknown[];\n const artifactId =\n Array.isArray(artifactData) &&\n artifactData.length > 0 &&\n typeof artifactData[0] === \"string\"\n ? (artifactData[0] as string)\n : null;\n const statusCode =\n Array.isArray(artifactData) &&\n artifactData.length > 4 &&\n typeof artifactData[4] === \"number\"\n ? (artifactData[4] as number)\n : null;\n\n if (artifactId) {\n return {\n artifactId,\n status: statusCode != null ? artifactStatusFromCode(statusCode) : \"pending\",\n };\n }\n }\n return { artifactId: null, status: \"failed\" };\n }\n}\n\nfunction extractCellText(cell: unknown): string {\n if (typeof cell === \"string\") return cell;\n if (typeof cell === \"number\") return \"\";\n if (Array.isArray(cell)) return cell.map(extractCellText).join(\"\");\n return \"\";\n}\n\nfunction parseDataTable(rawData: unknown): DataTableContent {\n try {\n // Navigate: raw[0][0][0][0][4][2] → rows array\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nav = rawData as any;\n const rowsArray = nav[0][0][0][0][4][2] as unknown[][];\n if (!rowsArray?.length) throw new Error(\"Empty data table\");\n\n const headers: string[] = [];\n const rows: string[][] = [];\n\n for (let i = 0; i < rowsArray.length; i++) {\n const rowSection = rowsArray[i];\n if (!Array.isArray(rowSection) || rowSection.length < 3) continue;\n const cellArray = rowSection[2] as unknown[];\n if (!Array.isArray(cellArray)) continue;\n const values = cellArray.map(extractCellText);\n if (i === 0) headers.push(...values);\n else rows.push(values);\n }\n\n if (!headers.length) throw new Error(\"No headers found\");\n return { headers, rows };\n } catch (e) {\n throw new Error(`Failed to parse data table: ${e}`);\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nconst TRUSTED_MEDIA_DOMAINS = [\n \".google.com\",\n \".googleusercontent.com\",\n \".googleapis.com\",\n \".usercontent.google.com\",\n];\n\nfunction isTrustedDomain(url: string): boolean {\n try {\n const host = new URL(url).hostname;\n return TRUSTED_MEDIA_DOMAINS.some((d) => host === d.slice(1) || host.endsWith(d));\n } catch {\n return false;\n }\n}\n","import type {\n ArtifactStatus,\n ArtifactType,\n artifactStatusFromCode,\n artifactTypeFromCode,\n SourceStatus,\n SourceType,\n sourceStatusFromCode,\n sourceTypeFromCode,\n} from \"./enums.js\";\n\nexport type { ArtifactStatus, ArtifactType, SourceStatus, SourceType };\n\n// ---------------------------------------------------------------------------\n// Notebook\n// ---------------------------------------------------------------------------\n\nexport interface Notebook {\n id: string;\n title: string;\n createdAt: Date | null;\n sourcesCount: number;\n isOwner: boolean;\n}\n\nexport interface SuggestedTopic {\n question: string;\n prompt: string;\n}\n\nexport interface NotebookDescription {\n summary: string;\n suggestedTopics: SuggestedTopic[];\n}\n\nexport interface SourceSummary {\n kind: SourceType;\n title: string | null;\n url: string | null;\n}\n\nexport interface NotebookMetadata {\n id: string;\n title: string;\n createdAt: Date | null;\n isOwner: boolean;\n sources: SourceSummary[];\n}\n\n// ---------------------------------------------------------------------------\n// Source\n// ---------------------------------------------------------------------------\n\nexport interface Source {\n id: string;\n title: string | null;\n url: string | null;\n kind: SourceType;\n createdAt: Date | null;\n status: SourceStatus;\n /** Raw type code from API (for debugging) */\n _typeCode: number | null;\n}\n\nexport interface SourceFulltext {\n sourceId: string;\n title: string;\n content: string;\n url: string | null;\n charCount: number;\n}\n\nexport interface SourceSummaryData {\n sourceId: string;\n summary: string;\n}\n\n// ---------------------------------------------------------------------------\n// Artifact\n// ---------------------------------------------------------------------------\n\nexport interface Artifact {\n id: string;\n title: string | null;\n kind: ArtifactType;\n status: ArtifactStatus;\n notebookId: string;\n audioUrl: string | null;\n videoUrl: string | null;\n exportUrl: string | null;\n shareUrl: string | null;\n /** Markdown content for report artifacts (data[7][0]) */\n content: string | null;\n /** Raw data from API */\n _raw: unknown[];\n}\n\nexport interface GenerationStatus {\n status: ArtifactStatus;\n artifactId: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Sharing\n// ---------------------------------------------------------------------------\n\nexport interface SharedUser {\n email: string;\n permission: \"owner\" | \"editor\" | \"viewer\";\n displayName: string | null;\n avatarUrl: string | null;\n}\n\nexport interface ShareStatus {\n notebookId: string;\n isPublic: boolean;\n /** 0 = restricted, 1 = anyone with link */\n access: number;\n /** 0 = full notebook, 1 = chat only */\n viewLevel: number;\n sharedUsers: SharedUser[];\n shareUrl: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Chat\n// ---------------------------------------------------------------------------\n\nexport interface ChatReference {\n sourceId: string;\n title: string | null;\n url: string | null;\n}\n\nexport interface AskResult {\n answer: string;\n conversationId: string;\n turnNumber: number;\n references: ChatReference[];\n}\n\nexport interface ConversationTurn {\n query: string;\n answer: string;\n turnNumber: number;\n}\n\n// ---------------------------------------------------------------------------\n// Notes\n// ---------------------------------------------------------------------------\n\nexport interface Note {\n id: string;\n title: string | null;\n content: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nexport interface SourceGuide {\n /** AI-generated summary with **bold** keywords (markdown). */\n summary: string;\n /** Topic keywords extracted from the source. */\n keywords: string[];\n}\n\nexport interface ReportSuggestion {\n title: string;\n description: string;\n prompt: string;\n /** 1 = beginner, 2 = advanced */\n audienceLevel: number;\n}\n\n// ---------------------------------------------------------------------------\n// Parsers (from raw API responses)\n// ---------------------------------------------------------------------------\n\nimport {\n artifactStatusFromCode as _artifactStatusFromCode,\n artifactTypeFromCode as _artifactTypeFromCode,\n sourceStatusFromCode as _sourceStatusFromCode,\n sourceTypeFromCode as _sourceTypeFromCode,\n} from \"./enums.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Raw = any;\n\nexport function parseNotebook(data: Raw[]): Notebook {\n const rawTitle = typeof data[0] === \"string\" ? data[0] : \"\";\n const title = rawTitle.replace(\"thought\\n\", \"\").trim();\n const id = typeof data[2] === \"string\" ? data[2] : \"\";\n\n let createdAt: Date | null = null;\n if (Array.isArray(data[5]) && Array.isArray(data[5][5]) && data[5][5].length > 0) {\n try {\n createdAt = new Date((data[5][5][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n const isOwner = !(Array.isArray(data[5]) && data[5][1] === true);\n\n return { id, title, createdAt, sourcesCount: 0, isOwner };\n}\n\nexport function parseSource(src: Raw[]): Source {\n const srcId = Array.isArray(src[0]) ? (src[0][0] as string) : (src[0] as string);\n const title = typeof src[1] === \"string\" ? src[1] : null;\n\n let url: string | null = null;\n if (Array.isArray(src[2]) && Array.isArray(src[2][7]) && src[2][7].length > 0) {\n url = typeof src[2][7][0] === \"string\" ? (src[2][7][0] as string) : null;\n }\n\n let createdAt: Date | null = null;\n if (Array.isArray(src[2]) && Array.isArray(src[2][2]) && typeof src[2][2][0] === \"number\") {\n try {\n createdAt = new Date((src[2][2][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n let statusCode = 2; // default READY\n if (Array.isArray(src[3]) && typeof src[3][1] === \"number\") {\n statusCode = src[3][1] as number;\n }\n\n let typeCode: number | null = null;\n if (Array.isArray(src[2]) && typeof src[2][4] === \"number\") {\n typeCode = src[2][4] as number;\n }\n\n return {\n id: String(srcId),\n title,\n url,\n kind: _sourceTypeFromCode(typeCode),\n createdAt,\n status: _sourceStatusFromCode(statusCode),\n _typeCode: typeCode,\n };\n}\n\nexport function parseArtifact(data: Raw[], notebookId: string): Artifact {\n const id = typeof data[0] === \"string\" ? data[0] : \"\";\n const title = typeof data[1] === \"string\" ? data[1] : null;\n const typeCode = typeof data[2] === \"number\" ? (data[2] as number) : 0;\n const statusCode = typeof data[4] === \"number\" ? (data[4] as number) : 0;\n\n // Quiz/flashcard variant is at data[9][1][0]: 1=flashcards, 2=quiz\n let variant: number | null = null;\n if (\n typeCode === 4 &&\n Array.isArray(data[9]) &&\n Array.isArray(data[9][1]) &&\n typeof data[9][1][0] === \"number\"\n ) {\n variant = data[9][1][0] as number;\n }\n\n // Audio URL at data[6][5]: list of [url, ..., mime_type] media items\n let audioUrl: string | null = null;\n const meta6 = data[6];\n if (Array.isArray(meta6) && Array.isArray(meta6[5])) {\n const mediaList = meta6[5] as unknown[][];\n // Prefer audio/mp4 item; fallback to first item\n for (const item of mediaList) {\n if (Array.isArray(item) && item[2] === \"audio/mp4\" && typeof item[0] === \"string\") {\n audioUrl = item[0] as string;\n break;\n }\n }\n if (!audioUrl && Array.isArray(mediaList[0]) && typeof mediaList[0][0] === \"string\") {\n audioUrl = mediaList[0][0] as string;\n }\n }\n\n // Video URL at data[8]: scan for nested list with HTTP items, prefer video/mp4 priority 4\n let videoUrl: string | null = null;\n if (Array.isArray(data[8])) {\n const meta8 = data[8] as unknown[][];\n for (const item of meta8) {\n if (\n Array.isArray(item) &&\n Array.isArray(item[0]) &&\n typeof (item[0] as unknown[])[0] === \"string\" &&\n ((item[0] as unknown[])[0] as string).startsWith(\"http\")\n ) {\n const mediaList = item as unknown[][];\n let best: string | null = null;\n for (const m of mediaList) {\n if (Array.isArray(m) && m[2] === \"video/mp4\" && typeof m[0] === \"string\") {\n best = m[0] as string;\n if (m[1] === 4) break;\n }\n }\n videoUrl =\n best ??\n (Array.isArray(mediaList[0]) && typeof mediaList[0][0] === \"string\"\n ? (mediaList[0][0] as string)\n : null);\n break;\n }\n }\n }\n\n // Report markdown content at data[7] or data[7][0]\n let content: string | null = null;\n if (Array.isArray(data[7]) && typeof data[7][0] === \"string\") {\n content = data[7][0] as string;\n } else if (typeof data[7] === \"string\") {\n content = data[7] as string;\n }\n\n return {\n id,\n title,\n kind: _artifactTypeFromCode(typeCode, variant),\n status: _artifactStatusFromCode(statusCode),\n notebookId,\n audioUrl,\n videoUrl,\n exportUrl: null,\n shareUrl: null,\n content,\n _raw: Array.isArray(data) ? data : [],\n };\n}\n\nexport function parseNote(data: Raw[]): Note {\n const id = typeof data[0] === \"string\" ? data[0] : \"\";\n const content = typeof data[1] === \"string\" ? data[1] : \"\";\n const title = typeof data[2] === \"string\" ? data[2] : null;\n\n let createdAt: Date | null = null;\n let updatedAt: Date | null = null;\n if (Array.isArray(data[3]) && typeof data[3][0] === \"number\") {\n try {\n createdAt = new Date((data[3][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n if (Array.isArray(data[4]) && typeof data[4][0] === \"number\") {\n try {\n updatedAt = new Date((data[4][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n return { id, title, content, createdAt, updatedAt };\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport { chatModeToParams, RPCMethod } from \"../types/enums.js\";\nimport type { ChatModeValue } from \"../types/enums.js\";\nimport { ChatError } from \"../types/errors.js\";\nimport type { AskResult, ChatReference, ConversationTurn } from \"../types/models.js\";\n\nconst QUERY_URL =\n \"https://notebooklm.google.com/_/LabsTailwindUi/data/google.internal.labs.tailwind.orchestration.v1.LabsTailwindOrchestrationService/GenerateFreeFormStreamed\";\n\nconst DEFAULT_BL = \"boq_labs-tailwind-frontend_20260301.03_p0\";\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport interface AskOptions {\n conversationId?: string;\n sourceIds?: string[];\n}\n\ninterface CachedTurn {\n query: string;\n answer: string;\n turnNumber: number;\n}\n\nexport class ChatAPI {\n private readonly conversationCache = new Map<string, CachedTurn[]>();\n private reqid = Math.floor(Math.random() * 900_000) + 100_000;\n\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n ) {}\n\n async ask(notebookId: string, query: string, opts: AskOptions = {}): Promise<AskResult> {\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const isNew = !opts.conversationId;\n const conversationId = opts.conversationId ?? randomUUID();\n\n const history = isNew ? null : this._buildHistory(conversationId);\n // Sources are triple-nested: [[[sid]], [[sid]], ...]\n const sourcesArray = sourceIds.map((sid) => [[sid]]);\n\n const params = [\n sourcesArray,\n query,\n history,\n [2, null, [1], [1]],\n conversationId,\n null,\n null,\n notebookId,\n 1,\n ];\n\n const paramsJson = JSON.stringify(params, null, 0);\n const fReq = JSON.stringify([null, paramsJson]);\n\n this.reqid += 100_000;\n const bl = (typeof process !== \"undefined\" && process.env[\"NOTEBOOKLM_BL\"]) || DEFAULT_BL;\n\n const urlParams = new URLSearchParams({ bl, hl: \"en\", _reqid: String(this.reqid), rt: \"c\" });\n if (this.auth.sessionId) urlParams.set(\"f.sid\", this.auth.sessionId);\n\n const bodyParts = [`f.req=${encodeURIComponent(fReq)}`];\n if (this.auth.csrfToken) bodyParts.push(`at=${encodeURIComponent(this.auth.csrfToken)}`);\n const body = bodyParts.join(\"&\") + \"&\";\n\n let response: Response;\n try {\n response = await fetch(`${QUERY_URL}?${urlParams.toString()}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n },\n body,\n });\n } catch (e) {\n throw new ChatError(`Chat request failed: ${String(e)}`);\n }\n\n if (!response.ok) throw new ChatError(`Chat request failed: HTTP ${response.status}`);\n\n const text = await response.text();\n const { answer, conversationId: serverConvId, references } = parseStreamingResponse(text);\n\n const finalConvId = serverConvId ?? conversationId;\n const cached = this.conversationCache.get(finalConvId) ?? [];\n const turnNumber = cached.length + 1;\n cached.push({ query, answer, turnNumber });\n this.conversationCache.set(finalConvId, cached);\n\n return { answer, conversationId: finalConvId, turnNumber, references };\n }\n\n async getConversationTurns(\n notebookId: string,\n conversationId: string,\n ): Promise<ConversationTurn[]> {\n // params: [[], null, null, conversation_id, limit]\n const params = [[], null, null, conversationId, 100];\n const result = await this.rpc.call(RPCMethod.GET_CONVERSATION_TURNS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (!Array.isArray(result) || !Array.isArray(result[0])) return [];\n\n // API returns individual turns newest-first; reverse to chronological\n const rawTurns = [...(result[0] as unknown[])].reverse();\n const turns: ConversationTurn[] = [];\n\n let i = 0;\n while (i < rawTurns.length) {\n const turn = rawTurns[i];\n if (!Array.isArray(turn) || turn.length < 3) {\n i++;\n continue;\n }\n if (turn[2] === 1 && turn.length > 3) {\n const q = typeof turn[3] === \"string\" ? (turn[3] as string) : \"\";\n let a = \"\";\n const next = rawTurns[i + 1];\n if (Array.isArray(next) && next.length > 4 && next[2] === 2) {\n try {\n a = String(((next[4] as unknown[][])[0] as unknown[])[0] ?? \"\");\n } catch {\n /* ignore */\n }\n i++;\n }\n turns.push({ query: q, answer: a, turnNumber: turns.length + 1 });\n }\n i++;\n }\n return turns;\n }\n\n async getLastConversationId(notebookId: string): Promise<string | null> {\n // params: [[], null, notebook_id, 1]\n const params = [[], null, notebookId, 1];\n const result = await this.rpc.call(RPCMethod.GET_LAST_CONVERSATION_ID, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n // Response structure: [[[conv_id]]]\n if (!Array.isArray(result)) return null;\n for (const group of result as unknown[]) {\n if (!Array.isArray(group)) continue;\n for (const conv of group as unknown[]) {\n if (Array.isArray(conv) && typeof (conv as unknown[])[0] === \"string\") {\n return (conv as unknown[])[0] as string;\n }\n }\n }\n return null;\n }\n\n /**\n * Set the chat mode for a notebook. Persists on the server — affects all\n * subsequent `ask()` calls until changed.\n */\n async setMode(notebookId: string, mode: ChatModeValue): Promise<void> {\n const [goal, length] = chatModeToParams(mode);\n const chatSettings = [[goal], [length]];\n const params = [notebookId, [[null, null, null, null, null, null, null, chatSettings]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n }\n\n clearCache(conversationId?: string): void {\n if (conversationId) {\n this.conversationCache.delete(conversationId);\n } else {\n this.conversationCache.clear();\n }\n }\n\n private _buildHistory(conversationId: string): unknown[] | null {\n const turns = this.conversationCache.get(conversationId) ?? [];\n if (!turns.length) return null;\n const history: unknown[] = [];\n for (const turn of turns) {\n history.push([turn.answer, null, 2]);\n history.push([turn.query, null, 1]);\n }\n return history;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\ninterface ParsedResponse {\n answer: string;\n conversationId: string | null;\n references: ChatReference[];\n}\n\nfunction parseStreamingResponse(rawText: string): ParsedResponse {\n let text = rawText;\n if (text.startsWith(\")]}'\")) text = text.slice(4);\n\n const lines = text.trim().split(\"\\n\");\n let bestMarkedAnswer = \"\";\n let bestUnmarkedAnswer = \"\";\n let serverConvId: string | null = null;\n const references: ChatReference[] = [];\n\n function processChunk(jsonStr: string): void {\n let data: unknown;\n try {\n data = JSON.parse(jsonStr);\n } catch {\n return;\n }\n if (!Array.isArray(data)) return;\n\n for (const item of data as unknown[]) {\n if (!Array.isArray(item) || item.length < 3 || (item as unknown[])[0] !== \"wrb.fr\") continue;\n const innerJson = (item as unknown[])[2];\n if (typeof innerJson !== \"string\") continue;\n\n let innerData: unknown;\n try {\n innerData = JSON.parse(innerJson);\n } catch {\n continue;\n }\n if (!Array.isArray(innerData) || !innerData.length) continue;\n\n const first = (innerData as unknown[])[0];\n if (!Array.isArray(first) || !first.length) continue;\n\n const answerText = (first as unknown[])[0];\n if (typeof answerText !== \"string\" || !answerText) continue;\n\n const typeInfo = (first as unknown[])[4];\n const isAnswer =\n Array.isArray(typeInfo) && typeInfo.length > 0 && typeInfo[typeInfo.length - 1] === 1;\n\n const convData = (first as unknown[])[2];\n if (\n !serverConvId &&\n Array.isArray(convData) &&\n convData.length > 0 &&\n typeof (convData as unknown[])[0] === \"string\"\n ) {\n serverConvId = (convData as unknown[])[0] as string;\n }\n\n // Extract references (sourceIds) from first[4][3]\n if (Array.isArray(typeInfo) && typeInfo.length > 3) {\n const citations = typeInfo[3];\n if (Array.isArray(citations)) {\n for (const cite of citations as unknown[]) {\n const sourceId = extractUuid(cite);\n if (sourceId) {\n references.push({ sourceId, title: null, url: null });\n }\n }\n }\n }\n\n if (isAnswer && answerText.length > bestMarkedAnswer.length) {\n bestMarkedAnswer = answerText;\n } else if (!isAnswer && answerText.length > bestUnmarkedAnswer.length) {\n bestUnmarkedAnswer = answerText;\n }\n }\n }\n\n let i = 0;\n while (i < lines.length) {\n const line = (lines[i] ?? \"\").trim();\n if (!line) {\n i++;\n continue;\n }\n if (/^\\d+$/.test(line)) {\n i++;\n const next = lines[i];\n if (next !== undefined) processChunk(next);\n i++;\n } else {\n processChunk(line);\n i++;\n }\n }\n\n return {\n answer: bestMarkedAnswer || bestUnmarkedAnswer,\n conversationId: serverConvId,\n references,\n };\n}\n\nfunction extractUuid(data: unknown, depth = 8): string | null {\n if (depth <= 0 || data == null) return null;\n if (typeof data === \"string\") return UUID_RE.test(data) ? data : null;\n if (Array.isArray(data)) {\n for (const item of data) {\n const found = extractUuid(item, depth - 1);\n if (found) return found;\n }\n }\n return null;\n}\n\nfunction randomUUID(): string {\n // Use Web Crypto API (available in Node 19+, Bun, Deno)\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n // Fallback: simple UUID v4\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport type { Notebook, NotebookDescription, SuggestedTopic } from \"../types/models.js\";\nimport { parseNotebook } from \"../types/models.js\";\n\nexport class NotebooksAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n async list(): Promise<Notebook[]> {\n const params = [null, 1, null, [2]];\n const result = await this.rpc.call(RPCMethod.LIST_NOTEBOOKS, params);\n if (!Array.isArray(result) || !result.length) return [];\n const raw = Array.isArray(result[0]) ? result[0] : result;\n return (raw as unknown[][]).map((nb) => parseNotebook(nb));\n }\n\n async create(title: string): Promise<Notebook> {\n const params = [title, null, null, [2], [1]];\n const result = await this.rpc.call(RPCMethod.CREATE_NOTEBOOK, params);\n return parseNotebook(result as unknown[]);\n }\n\n async get(notebookId: string): Promise<Notebook> {\n const params = [notebookId, null, [2], null, 0];\n const result = await this.rpc.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n const data = Array.isArray(result) && result.length ? result[0] : result;\n return parseNotebook(data as unknown[]);\n }\n\n async delete(notebookId: string): Promise<boolean> {\n const params = [[notebookId], [2]];\n await this.rpc.call(RPCMethod.DELETE_NOTEBOOK, params);\n return true;\n }\n\n async rename(notebookId: string, newTitle: string): Promise<Notebook> {\n const params = [notebookId, [[null, null, null, [null, newTitle]]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n return this.get(notebookId);\n }\n\n async getSummary(notebookId: string): Promise<string> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.SUMMARIZE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n try {\n if (Array.isArray(result)) {\n const val = (result as unknown[][][])[0]?.[0]?.[0];\n return typeof val === \"string\" ? val : \"\";\n }\n } catch {\n // ignore\n }\n return \"\";\n }\n\n async removeFromRecent(notebookId: string): Promise<void> {\n await this.rpc.call(RPCMethod.REMOVE_RECENTLY_VIEWED, [notebookId], { allowNull: true });\n }\n\n async getDescription(notebookId: string): Promise<NotebookDescription> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.SUMMARIZE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n let summary = \"\";\n const suggestedTopics: SuggestedTopic[] = [];\n\n try {\n if (Array.isArray(result)) {\n const outer = (result as unknown[][])[0];\n if (Array.isArray(outer)) {\n const summaryVal = (outer as unknown[][])[0]?.[0];\n if (typeof summaryVal === \"string\") summary = summaryVal;\n\n const topicsList = (outer as unknown[][])[1]?.[0];\n if (Array.isArray(topicsList)) {\n for (const t of topicsList as unknown[][]) {\n const question = typeof t[0] === \"string\" ? t[0] : \"\";\n const prompt = typeof t[1] === \"string\" ? t[1] : \"\";\n suggestedTopics.push({ question, prompt });\n }\n }\n }\n }\n } catch {\n // ignore\n }\n\n return { summary, suggestedTopics };\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport type { Note } from \"../types/models.js\";\n\nexport class NotesAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n async list(notebookId: string): Promise<Note[]> {\n const all = await this._fetchAll(notebookId);\n return all.filter((n) => !this._isMindMap(n.content));\n }\n\n async listMindMaps(notebookId: string): Promise<Note[]> {\n const all = await this._fetchAll(notebookId);\n return all.filter((n) => this._isMindMap(n.content));\n }\n\n async create(notebookId: string, content: string, title?: string): Promise<Note> {\n // CREATE_NOTE ignores content/title; creates an empty note and returns the ID.\n // We must call UPDATE_NOTE afterwards to set actual content and title.\n const createParams = [notebookId, \"\", [1], null, \"New Note\"];\n const result = await this.rpc.call(RPCMethod.CREATE_NOTE, createParams, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const noteId: string | null =\n Array.isArray(result) && Array.isArray(result[0]) && typeof result[0][0] === \"string\"\n ? (result[0][0] as string)\n : Array.isArray(result) && typeof result[0] === \"string\"\n ? (result[0] as string)\n : null;\n\n if (!noteId) throw new Error(\"CREATE_NOTE did not return a note ID\");\n\n await this.update(notebookId, noteId, content, title ?? \"New Note\");\n return { id: noteId, title: title ?? null, content, createdAt: null, updatedAt: new Date() };\n }\n\n async update(notebookId: string, noteId: string, content: string, title?: string): Promise<Note> {\n const params = [notebookId, noteId, [[[content, title ?? \"New Note\", [], 0]]]];\n await this.rpc.call(RPCMethod.UPDATE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return { id: noteId, title: title ?? null, content, createdAt: null, updatedAt: new Date() };\n }\n\n async delete(notebookId: string, noteId: string): Promise<boolean> {\n const params = [notebookId, null, [noteId]];\n await this.rpc.call(RPCMethod.DELETE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n private async _fetchAll(notebookId: string): Promise<Note[]> {\n const result = await this.rpc.call(RPCMethod.GET_NOTES_AND_MIND_MAPS, [notebookId], {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (!Array.isArray(result) || !Array.isArray(result[0])) return [];\n const notes: Note[] = [];\n for (const item of result[0] as unknown[][]) {\n if (!Array.isArray(item) || typeof item[0] !== \"string\") continue;\n if (item[1] === null && item[2] === 2) continue; // deleted\n const content = this._extractContent(item);\n notes.push(this._parseItem(item, notebookId, content));\n }\n return notes;\n }\n\n private _isMindMap(content: string): boolean {\n return content.includes('\"children\":') || content.includes('\"nodes\":');\n }\n\n private _extractContent(item: unknown[]): string {\n if (typeof item[1] === \"string\") return item[1];\n if (Array.isArray(item[1]) && typeof item[1][1] === \"string\") return item[1][1] as string;\n return \"\";\n }\n\n private _parseItem(item: unknown[], _notebookId: string, content: string): Note {\n // New format: item[1] is [note_id, content, metadata, null, title]\n // Old format: item[1] is a plain string (no title available)\n const inner = Array.isArray(item[1]) ? (item[1] as unknown[]) : null;\n const title = inner && typeof inner[4] === \"string\" && inner[4] ? (inner[4] as string) : null;\n const createdAt =\n Array.isArray(item[3]) && typeof item[3][0] === \"number\"\n ? new Date((item[3][0] as number) * 1000)\n : null;\n return { id: item[0] as string, title, content, createdAt, updatedAt: null };\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport { RPCMethod } from \"../types/enums.js\";\n\nexport interface ResearchTask {\n taskId: string;\n reportId: string | null;\n notebookId: string;\n query: string;\n mode: \"fast\" | \"deep\";\n}\n\nexport interface ResearchSource {\n url: string;\n title: string;\n /** 1=web, 2=drive, 5=deep research report */\n resultType: number;\n researchTaskId: string;\n /** Markdown content for deep research report entries (resultType=5) */\n reportMarkdown?: string;\n}\n\nexport interface ResearchResult {\n taskId: string | null;\n status: \"in_progress\" | \"completed\" | \"no_research\";\n query: string;\n sources: ResearchSource[];\n summary: string;\n report: string;\n tasks: ResearchResult[];\n}\n\nexport interface ImportedSource {\n id: string;\n title: string;\n}\n\nexport class ResearchAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /**\n * Start a research session.\n * @param source \"web\" or \"drive\"\n * @param mode \"fast\" or \"deep\" (deep only available for web)\n */\n async start(\n notebookId: string,\n query: string,\n source: \"web\" | \"drive\" = \"web\",\n mode: \"fast\" | \"deep\" = \"fast\",\n ): Promise<ResearchTask | null> {\n if (mode === \"deep\" && source === \"drive\") {\n throw new Error(\"Deep research only supports web sources.\");\n }\n\n const sourceType = source === \"web\" ? 1 : 2;\n\n let rpcId: RPCMethodId;\n let params: unknown[];\n if (mode === \"fast\") {\n rpcId = RPCMethod.START_FAST_RESEARCH;\n params = [[query, sourceType], null, 1, notebookId];\n } else {\n rpcId = RPCMethod.START_DEEP_RESEARCH;\n params = [null, [1], [query, sourceType], 5, notebookId];\n }\n\n const result = await this.rpc.call(rpcId, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (Array.isArray(result) && result.length > 0) {\n return {\n taskId: result[0] as string,\n reportId: result.length > 1 ? (result[1] as string) : null,\n notebookId,\n query,\n mode,\n };\n }\n return null;\n }\n\n /** Poll for current research results in a notebook. */\n async poll(notebookId: string): Promise<ResearchResult> {\n const params = [null, null, notebookId];\n let result = (await this.rpc.call(RPCMethod.POLL_RESEARCH, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n })) as unknown[];\n\n if (!Array.isArray(result) || !result.length) {\n return emptyResult();\n }\n\n // Unwrap if double-nested\n if (Array.isArray(result[0]) && Array.isArray((result[0] as unknown[])[0])) {\n result = result[0] as unknown[];\n }\n\n const parsedTasks: ResearchResult[] = [];\n\n for (const taskData of result) {\n if (!Array.isArray(taskData) || taskData.length < 2) continue;\n\n const taskId = taskData[0] as string;\n const taskInfo = taskData[1] as unknown[];\n if (typeof taskId !== \"string\" || !Array.isArray(taskInfo)) continue;\n\n const queryText = Array.isArray(taskInfo[1])\n ? (((taskInfo[1] as unknown[])[0] as string) ?? \"\")\n : \"\";\n const sourcesAndSummary = Array.isArray(taskInfo[3]) ? (taskInfo[3] as unknown[]) : [];\n const statusCode = typeof taskInfo[4] === \"number\" ? taskInfo[4] : null;\n\n const sourcesData = Array.isArray(sourcesAndSummary[0])\n ? (sourcesAndSummary[0] as unknown[])\n : [];\n const summary = typeof sourcesAndSummary[1] === \"string\" ? sourcesAndSummary[1] : \"\";\n\n const parsedSources: ResearchSource[] = [];\n let report = \"\";\n\n for (const src of sourcesData) {\n if (!Array.isArray(src) || src.length < 2) continue;\n\n let url = \"\";\n let title = \"\";\n let sourceReport = \"\";\n let resultType = parseResultType(src.length > 3 ? src[3] : 1);\n\n if (src[0] === null) {\n // Deep research entry\n if (\n Array.isArray(src[1]) &&\n src[1].length >= 2 &&\n typeof src[1][0] === \"string\" &&\n typeof src[1][1] === \"string\"\n ) {\n title = src[1][0] as string;\n sourceReport = src[1][1] as string;\n if (resultType === 1) resultType = 5;\n } else if (typeof src[1] === \"string\") {\n title = src[1] as string;\n if (resultType === 1) resultType = 5;\n }\n } else {\n // Fast research / web entry\n url = typeof src[0] === \"string\" ? src[0] : \"\";\n title = src.length > 1 && typeof src[1] === \"string\" ? src[1] : \"\";\n }\n\n if (title || url) {\n const parsed: ResearchSource = { url, title, resultType, researchTaskId: taskId };\n if (sourceReport) parsed.reportMarkdown = sourceReport;\n parsedSources.push(parsed);\n\n if (!report && sourceReport) {\n report = sourceReport;\n } else if (!report) {\n const legacyReport = extractLegacyReport(src);\n if (legacyReport) {\n report = legacyReport;\n parsed.reportMarkdown = legacyReport;\n }\n }\n }\n }\n\n // Research status codes: 1=in_progress, 2=completed, 6=completed (deep)\n const status = statusCode === 2 || statusCode === 6 ? \"completed\" : \"in_progress\";\n\n parsedTasks.push({\n taskId,\n status,\n query: queryText,\n sources: parsedSources,\n summary,\n report,\n tasks: [],\n });\n }\n\n if (parsedTasks.length > 0) {\n return { ...parsedTasks[0]!, tasks: parsedTasks };\n }\n return emptyResult();\n }\n\n /**\n * Import selected research sources into the notebook.\n * Pass sources from poll() — web sources need `url`, deep research report entries\n * need `reportMarkdown` (resultType=5).\n *\n * Note: The API may return fewer items than imported. Use sources.list() to verify.\n */\n async importSources(\n notebookId: string,\n taskId: string,\n sources: ResearchSource[],\n ): Promise<ImportedSource[]> {\n if (!sources.length) return [];\n\n // All sources must come from the same research task\n const taskIds = new Set(sources.map((s) => s.researchTaskId).filter(Boolean));\n if (taskIds.size > 1)\n throw new Error(\"Cannot import sources from multiple research tasks in one batch.\");\n const effectiveTaskId = taskIds.size === 1 ? [...taskIds][0]! : taskId;\n\n const reportSources = sources.filter((s) => s.resultType === 5 && s.title && s.reportMarkdown);\n const reportSourceSet = new Set(reportSources);\n const webSources = sources.filter((s) => s.url && !reportSourceSet.has(s));\n\n if (!webSources.length && !reportSources.length) return [];\n\n const sourceArray: unknown[] = [\n ...reportSources\n .filter((s) => s.reportMarkdown)\n .map((s) => buildReportEntry(s.title, s.reportMarkdown as string)),\n ...webSources.map((s) => buildWebEntry(s.url, s.title)),\n ];\n\n const params = [null, [1], effectiveTaskId, notebookId, sourceArray];\n let result = (await this.rpc.call(RPCMethod.IMPORT_RESEARCH, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n })) as unknown[];\n\n if (!Array.isArray(result)) return [];\n\n // Unwrap if double-nested\n if (\n result.length > 0 &&\n Array.isArray(result[0]) &&\n Array.isArray((result[0] as unknown[])[0])\n ) {\n result = result[0] as unknown[];\n }\n\n const imported: ImportedSource[] = [];\n for (const srcData of result) {\n if (!Array.isArray(srcData) || srcData.length < 2) continue;\n const first = srcData[0];\n const srcId = Array.isArray(first) && first.length > 0 ? (first[0] as string) : null;\n if (srcId) imported.push({ id: srcId, title: srcData[1] as string });\n }\n return imported;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction parseResultType(value: unknown): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n const aliases: Record<string, number> = { web: 1, drive: 2, report: 5 };\n return aliases[value.toLowerCase()] ?? 1;\n }\n return 1;\n}\n\nfunction extractLegacyReport(src: unknown[]): string {\n if (src.length <= 6 || !Array.isArray(src[6])) return \"\";\n return (src[6] as unknown[])\n .filter((c): c is string => typeof c === \"string\" && !!c)\n .join(\"\\n\\n\");\n}\n\nfunction buildReportEntry(title: string, markdown: string): unknown[] {\n return [null, [title, markdown], null, 3, null, null, null, null, null, null, 3];\n}\n\nfunction buildWebEntry(url: string, title: string): unknown[] {\n return [null, null, [url, title], null, null, null, null, null, null, null, 2];\n}\n\nfunction emptyResult(): ResearchResult {\n return {\n taskId: null,\n status: \"no_research\",\n query: \"\",\n sources: [],\n summary: \"\",\n report: \"\",\n tasks: [],\n };\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\n\nexport class SettingsAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /** Get the current output language setting (e.g. \"en\", \"ja\", \"zh_Hans\"). */\n async getOutputLanguage(): Promise<string | null> {\n const params = [null, [1, null, null, null, null, null, null, null, null, null, [1]]];\n const result = await this.rpc.call(RPCMethod.GET_USER_SETTINGS, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n // result[0][2][4][0]\n return extractNested(result as unknown[], [0, 2, 4, 0]);\n }\n\n /**\n * Set the output language for artifact generation.\n * Pass a BCP-47 language code, e.g. \"en\", \"ja\", \"zh_Hans\".\n * Returns the language that was set, or null if the response couldn't be parsed.\n */\n async setOutputLanguage(language: string): Promise<string | null> {\n if (!language) return null;\n const params = [[[null, [[null, null, null, null, [language]]]]]];\n const result = await this.rpc.call(RPCMethod.SET_USER_SETTINGS, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n // result[2][4][0]\n return extractNested(result as unknown[], [2, 4, 0]);\n }\n}\n\nfunction extractNested(data: unknown, path: number[]): string | null {\n try {\n let cur: unknown = data;\n for (const idx of path) {\n if (!Array.isArray(cur)) return null;\n cur = cur[idx];\n }\n return typeof cur === \"string\" && cur ? cur : null;\n } catch {\n return null;\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport type {\n ShareAccessValue,\n SharePermissionValue,\n ShareViewLevelValue,\n} from \"../types/enums.js\";\nimport { RPCMethod, ShareAccess, SharePermission, ShareViewLevel } from \"../types/enums.js\";\nimport type { SharedUser, ShareStatus } from \"../types/models.js\";\n\nexport type { ShareAccessValue, SharePermissionValue, ShareViewLevelValue };\n\nexport class SharingAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /** Get current sharing configuration for a notebook. */\n async getStatus(notebookId: string): Promise<ShareStatus> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.GET_SHARE_STATUS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return parseShareStatus(result as unknown[], notebookId);\n }\n\n /** Enable or disable public link sharing. Returns updated status. */\n async setPublic(notebookId: string, isPublic: boolean): Promise<ShareStatus> {\n const access = isPublic ? ShareAccess.ANYONE_WITH_LINK : ShareAccess.RESTRICTED;\n const params = [[[notebookId, null, [access], [access, \"\"]]], 1, null, [2]];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n\n /**\n * Set what viewers can access: full notebook or chat only.\n * Note: GET_SHARE_STATUS doesn't return view_level, so it's inferred from what was set.\n */\n async setViewLevel(notebookId: string, level: ShareViewLevelValue): Promise<ShareStatus> {\n const params = [notebookId, [[null, null, null, null, null, null, null, null, [[level]]]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n const status = await this.getStatus(notebookId);\n return { ...status, viewLevel: level };\n }\n\n /** Share notebook with a user. Returns updated status. */\n async addUser(\n notebookId: string,\n email: string,\n permission: SharePermissionValue = SharePermission.VIEWER,\n opts: { notify?: boolean; welcomeMessage?: string } = {},\n ): Promise<ShareStatus> {\n if (permission === SharePermission.OWNER) throw new Error(\"Cannot assign OWNER permission\");\n if (permission === SharePermission._REMOVE) throw new Error(\"Use removeUser() instead\");\n\n const { notify = true, welcomeMessage = \"\" } = opts;\n const messageFlag = welcomeMessage ? 0 : 1;\n const notifyFlag = notify ? 1 : 0;\n\n const params = [\n [[notebookId, [[email, null, permission]], null, [messageFlag, welcomeMessage]]],\n notifyFlag,\n null,\n [2],\n ];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n\n /** Update an existing user's permission level. Returns updated status. */\n async updateUser(\n notebookId: string,\n email: string,\n permission: SharePermissionValue,\n ): Promise<ShareStatus> {\n return this.addUser(notebookId, email, permission, { notify: false });\n }\n\n /** Remove a user's access to the notebook. Returns updated status. */\n async removeUser(notebookId: string, email: string): Promise<ShareStatus> {\n const params = [\n [[notebookId, [[email, null, SharePermission._REMOVE]], null, [0, \"\"]]],\n 0,\n null,\n [2],\n ];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\nconst PERM_MAP: Record<number, SharedUser[\"permission\"]> = {\n 1: \"owner\",\n 2: \"editor\",\n 3: \"viewer\",\n};\n\nfunction parseSharedUser(data: unknown[]): SharedUser {\n const email = typeof data[0] === \"string\" ? data[0] : \"\";\n const permCode = typeof data[1] === \"number\" ? data[1] : 3;\n const permission = PERM_MAP[permCode] ?? \"viewer\";\n\n let displayName: string | null = null;\n let avatarUrl: string | null = null;\n if (Array.isArray(data[3])) {\n const info = data[3] as unknown[];\n displayName = typeof info[0] === \"string\" ? info[0] : null;\n avatarUrl = typeof info[1] === \"string\" ? info[1] : null;\n }\n\n return { email, permission, displayName, avatarUrl };\n}\n\nfunction parseShareStatus(data: unknown[], notebookId: string): ShareStatus {\n // Response format: [[[user_entries...]], [is_public], 1000]\n const users: SharedUser[] = [];\n if (Array.isArray(data[0])) {\n for (const entry of data[0] as unknown[]) {\n if (Array.isArray(entry)) users.push(parseSharedUser(entry as unknown[]));\n }\n }\n\n const isPublic = Array.isArray(data[1]) && (data[1] as unknown[])[0] === true;\n const access = isPublic ? ShareAccess.ANYONE_WITH_LINK : ShareAccess.RESTRICTED;\n const shareUrl = isPublic ? `https://notebooklm.google.com/notebook/${notebookId}` : null;\n\n return {\n notebookId,\n isPublic,\n access,\n viewLevel: ShareViewLevel.FULL_NOTEBOOK,\n sharedUsers: users,\n shareUrl,\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport { SourceProcessingError, SourceTimeoutError } from \"../types/errors.js\";\nimport type { Source, SourceFulltext, SourceGuide } from \"../types/models.js\";\nimport { parseSource } from \"../types/models.js\";\n\nconst UPLOAD_URL = \"https://notebooklm.google.com/upload/_/\";\n\nexport interface AddSourceOptions {\n waitUntilReady?: boolean;\n waitTimeout?: number;\n}\n\nexport class SourcesAPI {\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n ) {}\n\n async list(notebookId: string): Promise<Source[]> {\n const params = [notebookId, null, [2], null, 0];\n const notebook = await this.rpc.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n if (!Array.isArray(notebook) || !notebook.length) return [];\n const nbInfo = notebook[0] as unknown[];\n if (!Array.isArray(nbInfo) || nbInfo.length <= 1) return [];\n const sourcesList = nbInfo[1] as unknown[][];\n if (!Array.isArray(sourcesList)) return [];\n\n return sourcesList\n .filter((s) => Array.isArray(s) && s.length > 0)\n .map((s) => parseSource(s as unknown[]));\n }\n\n async get(notebookId: string, sourceId: string): Promise<Source | null> {\n const sources = await this.list(notebookId);\n return sources.find((s) => s.id === sourceId) ?? null;\n }\n\n async addUrl(notebookId: string, url: string, opts: AddSourceOptions = {}): Promise<Source> {\n const isYouTube = url.includes(\"youtube.com\") || url.includes(\"youtu.be\");\n\n let params: unknown[];\n if (isYouTube) {\n params = [\n [[null, null, null, null, null, null, null, [url], null, null, 1]],\n notebookId,\n [2],\n [1, null, null, null, null, null, null, null, null, null, [1]],\n ];\n } else {\n params = [[[null, null, [url], null, null, null, null, null]], notebookId, [2], null, null];\n }\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: isYouTube,\n });\n\n const sourceId = extractSourceId(result);\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n return {\n id: sourceId,\n title: url,\n url,\n kind: \"web_page\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n async addText(\n notebookId: string,\n text: string,\n title?: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n // Pasted text uses ADD_SOURCE with a special format\n const params = [\n [[null, [title ?? \"\", text], null, null, null, null, null, null]],\n notebookId,\n [2],\n null,\n null,\n ];\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n const sourceId = extractSourceId(result);\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n return {\n id: sourceId,\n title: title ?? null,\n url: null,\n kind: \"pasted_text\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n async addFile(\n notebookId: string,\n filePath: string,\n mimeType: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n const fileData = readFileSync(filePath);\n const fileName = filePath.split(\"/\").pop() ?? \"file\";\n return this.addFileBuffer(notebookId, fileData, fileName, mimeType, opts);\n }\n\n async addFileBuffer(\n notebookId: string,\n data: Buffer | Uint8Array,\n fileName: string,\n _mimeType: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n // Step 1: Register file source intent to get SOURCE_ID\n const params = [\n [[fileName]],\n notebookId,\n [2],\n [1, null, null, null, null, null, null, null, null, null, [1]],\n ];\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE_FILE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const sourceId = extractSourceId(result);\n\n // Step 2: Start resumable upload session\n const uploadUrl = await this.startResumableUpload(notebookId, fileName, data.length, sourceId);\n\n // Step 3: Stream/upload final file content\n await this.uploadFile(uploadUrl, data);\n\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n\n return {\n id: sourceId,\n title: fileName,\n url: null,\n kind: \"pdf\", // Defaults to generic kind until ready\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n private async startResumableUpload(\n notebookId: string,\n fileName: string,\n fileSize: number,\n sourceId: string,\n ): Promise<string> {\n const startResp = await fetch(`${UPLOAD_URL}?authuser=0`, {\n method: \"POST\",\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n Origin: \"https://notebooklm.google.com\",\n Referer: \"https://notebooklm.google.com/\",\n \"x-goog-authuser\": \"0\",\n \"x-goog-upload-command\": \"start\",\n \"x-goog-upload-header-content-length\": String(fileSize),\n \"x-goog-upload-protocol\": \"resumable\",\n },\n body: JSON.stringify({\n PROJECT_ID: notebookId,\n SOURCE_NAME: fileName,\n SOURCE_ID: sourceId,\n }),\n });\n\n if (!startResp.ok) {\n throw new Error(`Upload initiation failed: HTTP ${startResp.status}`);\n }\n\n const uploadSessionUrl = startResp.headers.get(\"x-goog-upload-url\");\n if (!uploadSessionUrl) {\n throw new Error(\"Failed to get upload URL from response headers\");\n }\n\n return uploadSessionUrl;\n }\n\n private async uploadFile(uploadUrl: string, data: Buffer | Uint8Array): Promise<string> {\n const uploadResp = await fetch(uploadUrl, {\n method: \"POST\",\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=utf-8\",\n Cookie: this.auth.cookieHeader,\n Origin: \"https://notebooklm.google.com\",\n Referer: \"https://notebooklm.google.com/\",\n \"X-Goog-Upload-Command\": \"upload, finalize\",\n \"X-Goog-Upload-Offset\": \"0\",\n },\n body: new Uint8Array(data),\n });\n\n if (!uploadResp.ok) {\n throw new Error(`File upload failed: HTTP ${uploadResp.status}`);\n }\n\n const uploadResult = await uploadResp.text();\n return uploadResult.trim();\n }\n\n /** Get the AI-generated Source Guide (summary + keywords) for a source. */\n async getGuide(notebookId: string, sourceId: string): Promise<SourceGuide> {\n const params = [[[[sourceId]]]];\n const result = await this.rpc.call(RPCMethod.GET_SOURCE_GUIDE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n timeoutMs: 120_000,\n });\n\n let summary = \"\";\n let keywords: string[] = [];\n\n if (Array.isArray(result) && result.length > 0) {\n const outer = result[0];\n if (Array.isArray(outer) && outer.length > 0) {\n const inner = outer[0] as unknown[];\n if (Array.isArray(inner)) {\n if (inner.length > 1 && Array.isArray(inner[1]) && typeof inner[1][0] === \"string\") {\n summary = inner[1][0];\n }\n if (inner.length > 2 && Array.isArray(inner[2]) && Array.isArray(inner[2][0])) {\n keywords = (inner[2][0] as unknown[]).filter((k) => typeof k === \"string\") as string[];\n }\n }\n }\n }\n\n return { summary, keywords };\n }\n\n /** Get the full indexed text content of a source. */\n async getFulltext(notebookId: string, sourceId: string): Promise<SourceFulltext> {\n const params = [[sourceId], [2], [2]];\n const result = await this.rpc.call(RPCMethod.GET_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (!Array.isArray(result) || !result.length) {\n throw new Error(`Source ${sourceId} not found in notebook ${notebookId}`);\n }\n\n let title = \"\";\n let url: string | null = null;\n\n if (Array.isArray(result[0]) && result[0].length > 1) {\n title = typeof result[0][1] === \"string\" ? result[0][1] : \"\";\n const meta = result[0][2] as unknown[];\n if (Array.isArray(meta) && meta.length > 7 && Array.isArray(meta[7]) && typeof meta[7][0] === \"string\") {\n url = meta[7][0];\n }\n }\n\n let content = \"\";\n if (Array.isArray(result[3]) && result[3].length > 0) {\n const texts = extractAllText(result[3][0] as unknown[]);\n content = texts.join(\"\\n\");\n }\n\n return { sourceId, title, content, url, charCount: content.length };\n }\n\n /** Check if a source has newer content available. Returns true if fresh, false if stale. */\n async checkFreshness(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [null, [sourceId], [2]];\n const result = await this.rpc.call(RPCMethod.CHECK_SOURCE_FRESHNESS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (result === true) return true;\n if (result === false) return false;\n if (Array.isArray(result)) {\n if (result.length === 0) return true;\n const first = result[0];\n if (Array.isArray(first) && first.length > 1 && first[1] === true) return true;\n }\n return false;\n }\n\n async delete(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [notebookId, [sourceId], [2]];\n await this.rpc.call(RPCMethod.DELETE_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async refresh(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [notebookId, sourceId, [2]];\n await this.rpc.call(RPCMethod.REFRESH_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async waitUntilReady(\n notebookId: string,\n sourceId: string,\n timeout = 120,\n initialInterval = 1,\n maxInterval = 10,\n backoffFactor = 1.5,\n ): Promise<Source> {\n const deadline = Date.now() + timeout * 1000;\n let interval = initialInterval;\n let lastStatus: number | undefined;\n\n while (Date.now() < deadline) {\n const source = await this.get(notebookId, sourceId);\n if (source) {\n if (source.status === \"ready\") return source;\n if (source.status === \"error\") {\n throw new SourceProcessingError(sourceId, 3);\n }\n lastStatus = source._typeCode ?? undefined;\n }\n\n await sleep(interval * 1000);\n interval = Math.min(interval * backoffFactor, maxInterval);\n }\n\n throw new SourceTimeoutError(sourceId, timeout, lastStatus);\n }\n}\n\nfunction extractSourceId(result: unknown): string {\n // Source ID appears in various positions depending on the RPC\n if (Array.isArray(result)) {\n // Navigate down the first elements to find the deeply nested ID\n // e.g., [[[[[\"id\"], ...]]]], [[[\"id\", title]]]\n let current: unknown = result;\n while (Array.isArray(current) && current.length > 0) {\n if (typeof current[0] === \"string\") {\n // Only return if it's a UUID-like string or long enough\n if (current[0].length > 8) {\n return current[0];\n }\n }\n current = current[0];\n }\n\n // Fallback flat search\n for (const item of result) {\n if (typeof item === \"string\" && item.length > 8) return item;\n }\n }\n if (typeof result === \"string\") return result;\n console.log(\"extractSourceId debug info: could not parse:\", JSON.stringify(result, null, 2));\n throw new Error(\"Could not extract source ID from API response\");\n}\n\nfunction extractAllText(data: unknown[], maxDepth = 100): string[] {\n if (maxDepth <= 0) return [];\n const texts: string[] = [];\n for (const item of data) {\n if (typeof item === \"string\" && item.length > 0) texts.push(item);\n else if (Array.isArray(item)) texts.push(...extractAllText(item, maxDepth - 1));\n }\n return texts;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","// Main client\n\n// API option types\nexport type {\n CreateAudioOptions,\n CreateDataTableOptions,\n CreateInfographicOptions,\n CreateQuizOptions,\n CreateReportOptions,\n CreateSlideDeckOptions,\n CreateVideoOptions,\n DataTableContent,\n} from \"./api/artifacts.js\";\n// API classes (for advanced users)\nexport { ArtifactsAPI } from \"./api/artifacts.js\";\nexport type { AskOptions } from \"./api/chat.js\";\nexport { ChatAPI } from \"./api/chat.js\";\nexport { NotebooksAPI } from \"./api/notebooks.js\";\nexport { NotesAPI } from \"./api/notes.js\";\nexport type {\n ImportedSource,\n ResearchResult,\n ResearchSource,\n ResearchTask,\n} from \"./api/research.js\";\nexport { ResearchAPI } from \"./api/research.js\";\nexport { SettingsAPI } from \"./api/settings.js\";\nexport { SharingAPI } from \"./api/sharing.js\";\nexport type { AddSourceOptions } from \"./api/sources.js\";\nexport { SourcesAPI } from \"./api/sources.js\";\nexport type { AuthTokens, ConnectOptions, CookieMap } from \"./auth.js\";\n// Auth\nexport { connect } from \"./auth.js\";\nexport type { ClientOptions } from \"./client.js\";\nexport { NotebookLMClient } from \"./client.js\";\nexport type {\n AudioFormatValue,\n ChatModeValue,\n AudioLengthValue,\n ExportTypeValue,\n InfographicDetailValue,\n InfographicOrientationValue,\n InfographicStyleValue,\n QuizDifficultyValue,\n QuizQuantityValue,\n RPCMethodId,\n ShareAccessValue,\n SharePermissionValue,\n ShareViewLevelValue,\n SlideDeckFormatValue,\n SlideDeckLengthValue,\n VideoFormatValue,\n VideoStyleValue,\n} from \"./types/enums.js\";\n// Enums (const objects)\nexport {\n ArtifactTypeCode,\n AudioFormat,\n ChatMode,\n AudioLength,\n ExportType,\n InfographicDetail,\n InfographicOrientation,\n InfographicStyle,\n QuizDifficulty,\n QuizQuantity,\n RPCMethod,\n ShareAccess,\n SharePermission,\n ShareViewLevel,\n SlideDeckFormat,\n SlideDeckLength,\n VideoFormat,\n VideoStyle,\n} from \"./types/enums.js\";\n// Errors\nexport {\n ArtifactDownloadError,\n ArtifactError,\n ArtifactNotFoundError,\n ArtifactNotReadyError,\n ArtifactParseError,\n AuthError,\n ChatError,\n ClientError,\n NetworkError,\n NotebookError,\n NotebookLMError,\n NotebookNotFoundError,\n RateLimitError,\n RPCError,\n RPCTimeoutError,\n ServerError,\n SourceAddError,\n SourceError,\n SourceNotFoundError,\n SourceProcessingError,\n SourceTimeoutError,\n} from \"./types/errors.js\";\n// Types / models\nexport type {\n Artifact,\n ArtifactStatus,\n ArtifactType,\n AskResult,\n ChatReference,\n ConversationTurn,\n GenerationStatus,\n Note,\n Notebook,\n ReportSuggestion,\n NotebookDescription,\n NotebookMetadata,\n SharedUser,\n ShareStatus,\n Source,\n SourceFulltext,\n SourceGuide,\n SourceStatus,\n SourceSummary,\n SourceType,\n SuggestedTopic,\n} from \"./types/models.js\";\n","import { ArtifactsAPI } from \"./api/artifacts.js\";\nimport { ChatAPI } from \"./api/chat.js\";\nimport { NotebooksAPI } from \"./api/notebooks.js\";\nimport { NotesAPI } from \"./api/notes.js\";\nimport { ResearchAPI } from \"./api/research.js\";\nimport { SettingsAPI } from \"./api/settings.js\";\nimport { SharingAPI } from \"./api/sharing.js\";\nimport { SourcesAPI } from \"./api/sources.js\";\nimport type { AuthTokens, ConnectOptions } from \"./auth.js\";\nimport { connect } from \"./auth.js\";\nimport { RPCCore } from \"./rpc/core.js\";\n\nexport interface ClientOptions {\n /** HTTP request timeout in milliseconds. Default: 30000 */\n timeoutMs?: number;\n}\n\n/**\n * NotebookLM SDK client.\n *\n * @example\n * ```ts\n * // After running `npx notebooklm-sdk login` once:\n * const client = await NotebookLMClient.connect();\n * const notebooks = await client.notebooks.list();\n *\n * // Or with explicit credentials:\n * const client = await NotebookLMClient.connect({ cookiesFile: './session.json' });\n * ```\n */\nexport class NotebookLMClient {\n readonly notebooks: NotebooksAPI;\n readonly sources: SourcesAPI;\n readonly artifacts: ArtifactsAPI;\n readonly chat: ChatAPI;\n readonly notes: NotesAPI;\n readonly research: ResearchAPI;\n readonly settings: SettingsAPI;\n readonly sharing: SharingAPI;\n\n private constructor(\n private readonly auth: AuthTokens,\n opts: ClientOptions = {},\n ) {\n const rpc = new RPCCore(auth, opts.timeoutMs);\n this.notebooks = new NotebooksAPI(rpc);\n this.sources = new SourcesAPI(rpc, auth);\n this.notes = new NotesAPI(rpc);\n this.artifacts = new ArtifactsAPI(rpc, auth, this.notes);\n this.chat = new ChatAPI(rpc, auth);\n this.research = new ResearchAPI(rpc);\n this.settings = new SettingsAPI(rpc);\n this.sharing = new SharingAPI(rpc);\n }\n\n /**\n * Connect to NotebookLM using cookies.\n * Fetches CSRF and session tokens from the NotebookLM homepage.\n */\n static async connect(\n opts: ConnectOptions = {},\n clientOpts: ClientOptions = {},\n ): Promise<NotebookLMClient> {\n const auth = await connect(opts);\n return new NotebookLMClient(auth, clientOpts);\n }\n\n /**\n * Refresh CSRF and session tokens (e.g. if they expire mid-session).\n */\n async refreshTokens(): Promise<void> {\n const { fetchTokens } = await import(\"./auth.js\");\n const { csrfToken, sessionId } = await fetchTokens(this.auth.cookies);\n (this.auth as { csrfToken: string }).csrfToken = csrfToken;\n (this.auth as { sessionId: string }).sessionId = sessionId;\n }\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport {\n AuthError,\n ClientError,\n NetworkError,\n RateLimitError,\n RPCError,\n RPCTimeoutError,\n ServerError,\n} from \"../types/errors.js\";\nimport { decodeResponse } from \"./decoder.js\";\nimport { buildRequestBody, buildUrlParams, encodeRPCRequest } from \"./encoder.js\";\n\nconst BATCHEXECUTE_URL = \"https://notebooklm.google.com/_/LabsTailwindUi/data/batchexecute\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport interface RPCCallOptions {\n sourcePath?: string;\n allowNull?: boolean;\n timeoutMs?: number;\n}\n\nexport class RPCCore {\n private readonly auth: AuthTokens;\n private readonly timeoutMs: number;\n\n constructor(auth: AuthTokens, timeoutMs = DEFAULT_TIMEOUT_MS) {\n this.auth = auth;\n this.timeoutMs = timeoutMs;\n }\n\n async call(\n methodId: RPCMethodId,\n params: unknown[],\n opts: RPCCallOptions = {},\n ): Promise<unknown> {\n const sourcePath = opts.sourcePath ?? \"/\";\n const allowNull = opts.allowNull ?? false;\n const timeoutMs = opts.timeoutMs ?? this.timeoutMs;\n\n const rpcRequest = encodeRPCRequest(methodId, params);\n const body = buildRequestBody(rpcRequest, this.auth.csrfToken);\n const urlParams = buildUrlParams(methodId, this.auth.sessionId, sourcePath);\n const url = `${BATCHEXECUTE_URL}?${urlParams.toString()}`;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n },\n body,\n signal: controller.signal,\n });\n } catch (e) {\n clearTimeout(timer);\n if (e instanceof Error && e.name === \"AbortError\") {\n throw new RPCTimeoutError(`Request timed out calling ${methodId}`, {\n methodId,\n originalError: e,\n });\n }\n throw new NetworkError(`Request failed calling ${methodId}: ${String(e)}`, {\n methodId,\n originalError: e instanceof Error ? e : undefined,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const status = response.status;\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"retry-after\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(`API rate limit exceeded calling ${methodId}`, {\n methodId,\n retryAfter: isNaN(retryAfter ?? NaN) ? undefined : retryAfter,\n });\n }\n if (status === 401 || status === 403) {\n throw new AuthError(`HTTP ${status} calling ${methodId}: authentication required`, {\n methodId,\n });\n }\n if (status >= 500) {\n throw new ServerError(`Server error ${status} calling ${methodId}`, {\n methodId,\n statusCode: status,\n });\n }\n if (status >= 400) {\n throw new ClientError(`Client error ${status} calling ${methodId}`, {\n methodId,\n statusCode: status,\n });\n }\n throw new RPCError(`HTTP ${status} calling ${methodId}`, { methodId });\n }\n\n const text = await response.text();\n return decodeResponse(text, methodId, allowNull);\n }\n\n /** Extract source IDs from a notebook (used by chat/artifact APIs). */\n async getSourceIds(notebookId: string): Promise<string[]> {\n const params = [notebookId, null, [2], null, 0];\n // Inline import to avoid circular — use same methodId constant\n const { RPCMethod } = await import(\"../types/enums.js\");\n const data = await this.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n const sourceIds: string[] = [];\n if (!Array.isArray(data) || !data.length) return sourceIds;\n\n try {\n const nbInfo = data[0] as unknown[];\n if (!Array.isArray(nbInfo) || nbInfo.length <= 1) return sourceIds;\n const sources = nbInfo[1] as unknown[];\n if (!Array.isArray(sources)) return sourceIds;\n for (const src of sources) {\n if (!Array.isArray(src) || !src.length) continue;\n const first = src[0];\n if (Array.isArray(first) && first.length > 0 && typeof first[0] === \"string\") {\n sourceIds.push(first[0] as string);\n }\n }\n } catch {\n // ignore parse errors\n }\n return sourceIds;\n }\n}\n","import { RateLimitError, RPCError } from \"../types/errors.js\";\n\n/**\n * Strip Google's anti-XSSI prefix: )]}'\\n\n */\nexport function stripAntiXSSI(response: string): string {\n if (response.startsWith(\")]}'\")) {\n const match = /\\)\\]\\}'\\r?\\n/.exec(response);\n if (match) return response.slice(match[0].length);\n }\n return response;\n}\n\n/**\n * Parse chunked batchexecute response (rt=c mode).\n * Format: alternating byte_count lines and JSON payload lines.\n */\nexport function parseChunkedResponse(response: string): unknown[][] {\n if (!response || !response.trim()) return [];\n\n const chunks: unknown[][] = [];\n let skippedCount = 0;\n const lines = response.trim().split(\"\\n\");\n let i = 0;\n\n while (i < lines.length) {\n const line = (lines[i] ?? \"\").trim();\n\n if (!line) {\n i++;\n continue;\n }\n\n // Try to parse as byte count (pure digits line)\n if (/^\\d+$/.test(line)) {\n i++;\n if (i < lines.length) {\n try {\n const chunk = JSON.parse(lines[i] ?? \"\");\n chunks.push(chunk as unknown[][]);\n } catch {\n skippedCount++;\n }\n }\n i++;\n } else {\n // Try to parse directly as JSON\n try {\n const chunk = JSON.parse(line);\n chunks.push(chunk as unknown[][]);\n } catch {\n skippedCount++;\n }\n i++;\n }\n }\n\n if (skippedCount > 0 && lines.length > 0) {\n const errorRate = skippedCount / lines.length;\n if (errorRate > 0.1) {\n throw new RPCError(\n `Response parsing failed: ${skippedCount} of ${lines.length} chunks malformed`,\n { rawResponse: response.slice(0, 500) },\n );\n }\n }\n\n return chunks;\n}\n\nfunction containsUserDisplayableError(obj: unknown): boolean {\n if (typeof obj === \"string\") return obj.includes(\"UserDisplayableError\");\n if (Array.isArray(obj)) return obj.some(containsUserDisplayableError);\n if (obj !== null && typeof obj === \"object\") {\n return Object.values(obj as Record<string, unknown>).some(containsUserDisplayableError);\n }\n return false;\n}\n\n/**\n * Collect all RPC IDs found in response chunks (for debugging).\n */\nexport function collectRPCIds(chunks: unknown[][]): string[] {\n const ids: string[] = [];\n for (const chunk of chunks) {\n if (!Array.isArray(chunk)) continue;\n const items: unknown[] = Array.isArray(chunk[0]) ? (chunk as unknown[][]) : [chunk];\n for (const item of items) {\n if (!Array.isArray(item) || item.length < 2) continue;\n if ((item[0] === \"wrb.fr\" || item[0] === \"er\") && typeof item[1] === \"string\") {\n ids.push(item[1] as string);\n }\n }\n }\n return ids;\n}\n\n/**\n * Extract the result for a specific RPC ID from parsed chunks.\n * Returns undefined if not found.\n */\nexport function extractRPCResult(chunks: unknown[][], rpcId: string): unknown {\n for (const chunk of chunks) {\n if (!Array.isArray(chunk)) continue;\n const items: unknown[][] = Array.isArray(chunk[0])\n ? (chunk as unknown[][])\n : [chunk as unknown[]];\n\n for (const item of items) {\n if (!Array.isArray(item) || item.length < 3) continue;\n\n if (item[0] === \"er\" && item[1] === rpcId) {\n const code = item[2] as string | number | undefined;\n let msg = \"Unknown error\";\n if (typeof code === \"number\") {\n if (code === 429) msg = \"API rate limit exceeded. Please wait before retrying.\";\n else if (code === 401 || code === 403) msg = \"Authentication required or forbidden.\";\n else if (code === 404) msg = \"Resource not found.\";\n else if (code >= 500) msg = `Server error ${code}. Try again later.`;\n else msg = `Error code: ${code}`;\n } else if (typeof code === \"string\") {\n msg = code;\n }\n throw new RPCError(msg, { methodId: rpcId, rpcCode: code });\n }\n\n if (item[0] === \"wrb.fr\" && item[1] === rpcId) {\n const resultData = item[2];\n\n // Check for UserDisplayableError (rate limit / quota)\n if (resultData === null && item.length > 5 && item[5] != null) {\n if (containsUserDisplayableError(item[5])) {\n throw new RateLimitError(\n \"API rate limit or quota exceeded. Please wait before retrying.\",\n { methodId: rpcId, rpcCode: \"USER_DISPLAYABLE_ERROR\" },\n );\n }\n }\n\n if (typeof resultData === \"string\") {\n try {\n return JSON.parse(resultData);\n } catch {\n return resultData;\n }\n }\n if (resultData === null) {\n console.log(\n \"decodeResponse debug info: resultData is exactly null. Full item Array:\",\n JSON.stringify(item),\n );\n }\n return resultData;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Full decode pipeline: strip prefix → parse chunks → extract result.\n */\nexport function decodeResponse(rawResponse: string, rpcId: string, allowNull = false): unknown {\n const cleaned = stripAntiXSSI(rawResponse);\n const chunks = parseChunkedResponse(cleaned);\n const responsePreview = cleaned.slice(0, 500);\n const foundIds = collectRPCIds(chunks);\n\n let result: unknown;\n try {\n result = extractRPCResult(chunks, rpcId);\n } catch (e) {\n if (e instanceof RPCError && e.foundIds.length === 0) {\n throw new RPCError(e.message, {\n methodId: e.methodId,\n rpcCode: e.rpcCode,\n foundIds,\n rawResponse: responsePreview,\n });\n }\n throw e;\n }\n\n if (result === undefined && !allowNull) {\n if (foundIds.length > 0 && !foundIds.includes(rpcId)) {\n throw new RPCError(\n `No result for RPC ID '${rpcId}'. Response has IDs: ${foundIds.join(\", \")}. Method ID may have changed.`,\n { methodId: rpcId, foundIds, rawResponse: responsePreview },\n );\n }\n throw new RPCError(`No result found for RPC ID: ${rpcId} (${chunks.length} chunks parsed)`, {\n methodId: rpcId,\n foundIds,\n rawResponse: responsePreview,\n });\n }\n\n return result ?? null;\n}\n","import type { RPCMethodId } from \"../types/enums.js\";\n\n/**\n * Encode RPC params into batchexecute triple-nested format.\n * Result: [[[rpcId, JSON.stringify(params), null, \"generic\"]]]\n */\nexport function encodeRPCRequest(methodId: RPCMethodId, params: unknown[]): unknown[][][] {\n const paramsJson = JSON.stringify(params);\n return [[[methodId, paramsJson, null, \"generic\"]]];\n}\n\n/**\n * Build URL-encoded request body for batchexecute.\n * Format: f.req=<encoded>&at=<csrf>&\n */\nexport function buildRequestBody(rpcRequest: unknown, csrfToken: string): string {\n const fReq = encodeURIComponent(JSON.stringify(rpcRequest));\n const at = encodeURIComponent(csrfToken);\n return `f.req=${fReq}&at=${at}&`;\n}\n\n/**\n * Build URL query params for a batchexecute call.\n */\nexport function buildUrlParams(\n methodId: RPCMethodId,\n sessionId: string,\n sourcePath = \"/\",\n): URLSearchParams {\n return new URLSearchParams({\n rpcids: methodId,\n \"source-path\": sourcePath,\n \"f.sid\": sessionId,\n hl: \"en\",\n rt: \"c\",\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/types/enums.ts","../src/types/errors.ts","../src/auth.ts","../src/api/artifacts.ts","../src/types/models.ts","../src/api/chat.ts","../src/api/notebooks.ts","../src/api/notes.ts","../src/api/research.ts","../src/api/settings.ts","../src/api/sharing.ts","../src/api/sources.ts","../src/index.ts","../src/client.ts","../src/rpc/core.ts","../src/rpc/decoder.ts","../src/rpc/encoder.ts"],"names":["ArtifactTypeCode","AudioFormat","AudioLength","ChatGoal","ChatMode","ChatResponseLength","DriveMimeType","ExportType","InfographicDetail","InfographicOrientation","InfographicStyle","QuizDifficulty","QuizQuantity","RPCMethod","ShareAccess","SharePermission","ShareViewLevel","SlideDeckFormat","SlideDeckLength","VideoFormat","VideoStyle","NotebookLMError","NetworkError","RPCTimeoutError","RPCError","AuthError","RateLimitError","ServerError","ClientError","NotebookError","NotebookNotFoundError","SourceError","SourceNotFoundError","SourceAddError","SourceProcessingError","SourceTimeoutError","ArtifactError","ArtifactNotFoundError","ArtifactNotReadyError","ArtifactParseError","ArtifactDownloadError","ChatError","readFileSync","existsSync","join","homedir","sleep","fetchTokens"],"mappings":"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","file":"index.cjs","sourcesContent":["/** RPC method IDs for NotebookLM batchexecute API. */\nexport const RPCMethod = {\n // Notebook\n LIST_NOTEBOOKS: \"wXbhsf\",\n CREATE_NOTEBOOK: \"CCqFvf\",\n GET_NOTEBOOK: \"rLM1Ne\",\n RENAME_NOTEBOOK: \"s0tc2d\",\n DELETE_NOTEBOOK: \"WWINqb\",\n // Sources\n ADD_SOURCE: \"izAoDd\",\n ADD_SOURCE_FILE: \"o4cbdc\",\n DELETE_SOURCE: \"tGMBJ\",\n GET_SOURCE: \"hizoJc\",\n REFRESH_SOURCE: \"FLmJqe\",\n CHECK_SOURCE_FRESHNESS: \"yR9Yof\",\n UPDATE_SOURCE: \"b7Wfje\",\n // Summary\n SUMMARIZE: \"VfAZjd\",\n GET_SOURCE_GUIDE: \"tr032e\",\n GET_SUGGESTED_REPORTS: \"ciyUvf\",\n // Artifacts\n CREATE_ARTIFACT: \"R7cb6c\",\n LIST_ARTIFACTS: \"gArtLc\",\n DELETE_ARTIFACT: \"V5N4be\",\n RENAME_ARTIFACT: \"rc3d8d\",\n EXPORT_ARTIFACT: \"Krh3pd\",\n SHARE_ARTIFACT: \"RGP97b\",\n GET_INTERACTIVE_HTML: \"v9rmvd\",\n REVISE_SLIDE: \"KmcKPe\",\n // Research\n START_FAST_RESEARCH: \"Ljjv0c\",\n START_DEEP_RESEARCH: \"QA9ei\",\n POLL_RESEARCH: \"e3bVqc\",\n IMPORT_RESEARCH: \"LBwxtb\",\n // Notes / Mind Maps\n GENERATE_MIND_MAP: \"yyryJe\",\n CREATE_NOTE: \"CYK0Xb\",\n GET_NOTES_AND_MIND_MAPS: \"cFji9\",\n UPDATE_NOTE: \"cYAfTb\",\n DELETE_NOTE: \"AH0mwd\",\n // Conversation\n GET_LAST_CONVERSATION_ID: \"hPTbtc\",\n GET_CONVERSATION_TURNS: \"khqZz\",\n // Sharing\n SHARE_NOTEBOOK: \"QDyure\",\n GET_SHARE_STATUS: \"JFMDGd\",\n // Misc\n REMOVE_RECENTLY_VIEWED: \"fejl7e\",\n GET_USER_SETTINGS: \"ZwVcOc\",\n SET_USER_SETTINGS: \"hT54vc\",\n} as const;\n\nexport type RPCMethodId = (typeof RPCMethod)[keyof typeof RPCMethod];\n\n// ---------------------------------------------------------------------------\n// Artifact type codes (used in RPC calls)\n// ---------------------------------------------------------------------------\n\nexport const ArtifactTypeCode = {\n AUDIO: 1,\n REPORT: 2,\n VIDEO: 3,\n QUIZ: 4,\n MIND_MAP: 5,\n INFOGRAPHIC: 7,\n SLIDE_DECK: 8,\n DATA_TABLE: 9,\n} as const;\n\nexport type ArtifactTypeCodeValue = (typeof ArtifactTypeCode)[keyof typeof ArtifactTypeCode];\n\n// ---------------------------------------------------------------------------\n// Artifact status codes\n// ---------------------------------------------------------------------------\n\nexport const ArtifactStatusCode = {\n PROCESSING: 1,\n PENDING: 2,\n COMPLETED: 3,\n FAILED: 4,\n} as const;\n\nexport type ArtifactStatusCodeValue = (typeof ArtifactStatusCode)[keyof typeof ArtifactStatusCode];\n\n// ---------------------------------------------------------------------------\n// Source status codes\n// ---------------------------------------------------------------------------\n\nexport const SourceStatusCode = {\n PROCESSING: 1,\n READY: 2,\n ERROR: 3,\n PREPARING: 5,\n} as const;\n\nexport type SourceStatusCodeValue = (typeof SourceStatusCode)[keyof typeof SourceStatusCode];\n\n// ---------------------------------------------------------------------------\n// User-facing string enums\n// ---------------------------------------------------------------------------\n\n/** User-facing source type strings. */\nexport type SourceType =\n | \"google_docs\"\n | \"google_slides\"\n | \"google_spreadsheet\"\n | \"pdf\"\n | \"pasted_text\"\n | \"web_page\"\n | \"youtube\"\n | \"markdown\"\n | \"docx\"\n | \"csv\"\n | \"image\"\n | \"media\"\n | \"unknown\";\n\n/** User-facing artifact type strings. */\nexport type ArtifactType =\n | \"audio\"\n | \"video\"\n | \"report\"\n | \"quiz\"\n | \"flashcards\"\n | \"mind_map\"\n | \"infographic\"\n | \"slide_deck\"\n | \"data_table\"\n | \"unknown\";\n\n/** User-facing artifact status strings. */\nexport type ArtifactStatus = \"in_progress\" | \"pending\" | \"completed\" | \"failed\" | \"unknown\";\n\n/** User-facing source status strings. */\nexport type SourceStatus = \"processing\" | \"ready\" | \"error\" | \"preparing\" | \"unknown\";\n\n// ---------------------------------------------------------------------------\n// Format options (passed to RPC)\n// ---------------------------------------------------------------------------\n\nexport const AudioFormat = {\n DEEP_DIVE: 1,\n BRIEF: 2,\n CRITIQUE: 3,\n DEBATE: 4,\n} as const;\nexport type AudioFormatValue = (typeof AudioFormat)[keyof typeof AudioFormat];\n\nexport const AudioLength = {\n SHORT: 1,\n DEFAULT: 2,\n LONG: 3,\n} as const;\nexport type AudioLengthValue = (typeof AudioLength)[keyof typeof AudioLength];\n\nexport const VideoFormat = {\n EXPLAINER: 1,\n BRIEF: 2,\n CINEMATIC: 3,\n} as const;\nexport type VideoFormatValue = (typeof VideoFormat)[keyof typeof VideoFormat];\n\nexport const VideoStyle = {\n AUTO_SELECT: 1,\n CUSTOM: 2,\n CLASSIC: 3,\n WHITEBOARD: 4,\n KAWAII: 5,\n ANIME: 6,\n WATERCOLOR: 7,\n RETRO_PRINT: 8,\n HERITAGE: 9,\n PAPER_CRAFT: 10,\n} as const;\nexport type VideoStyleValue = (typeof VideoStyle)[keyof typeof VideoStyle];\n\nexport const QuizQuantity = {\n FEWER: 1,\n STANDARD: 2,\n MORE: 2, // API limitation: same as STANDARD\n} as const;\nexport type QuizQuantityValue = (typeof QuizQuantity)[keyof typeof QuizQuantity];\n\nexport const QuizDifficulty = {\n EASY: 1,\n MEDIUM: 2,\n HARD: 3,\n} as const;\nexport type QuizDifficultyValue = (typeof QuizDifficulty)[keyof typeof QuizDifficulty];\n\nexport const InfographicOrientation = {\n LANDSCAPE: 1,\n PORTRAIT: 2,\n SQUARE: 3,\n} as const;\nexport type InfographicOrientationValue =\n (typeof InfographicOrientation)[keyof typeof InfographicOrientation];\n\nexport const InfographicDetail = {\n CONCISE: 1,\n STANDARD: 2,\n DETAILED: 3,\n} as const;\nexport type InfographicDetailValue = (typeof InfographicDetail)[keyof typeof InfographicDetail];\n\nexport const InfographicStyle = {\n AUTO_SELECT: 1,\n SKETCH_NOTE: 2,\n PROFESSIONAL: 3,\n BENTO_GRID: 4,\n EDITORIAL: 5,\n INSTRUCTIONAL: 6,\n BRICKS: 7,\n CLAY: 8,\n ANIME: 9,\n KAWAII: 10,\n SCIENTIFIC: 11,\n} as const;\nexport type InfographicStyleValue = (typeof InfographicStyle)[keyof typeof InfographicStyle];\n\nexport const SlideDeckFormat = {\n DETAILED_DECK: 1,\n PRESENTER_SLIDES: 2,\n} as const;\nexport type SlideDeckFormatValue = (typeof SlideDeckFormat)[keyof typeof SlideDeckFormat];\n\nexport const SlideDeckLength = {\n DEFAULT: 1,\n SHORT: 2,\n} as const;\nexport type SlideDeckLengthValue = (typeof SlideDeckLength)[keyof typeof SlideDeckLength];\n\nexport const ExportType = {\n DOCS: 1,\n SHEETS: 2,\n} as const;\nexport type ExportTypeValue = (typeof ExportType)[keyof typeof ExportType];\n\nexport const DriveMimeType = {\n GOOGLE_DOC: \"application/vnd.google-apps.document\",\n GOOGLE_SLIDES: \"application/vnd.google-apps.presentation\",\n GOOGLE_SHEETS: \"application/vnd.google-apps.spreadsheet\",\n PDF: \"application/pdf\",\n} as const;\nexport type DriveMimeTypeValue = (typeof DriveMimeType)[keyof typeof DriveMimeType];\n\n// ---------------------------------------------------------------------------\n// Internal mappings\n// ---------------------------------------------------------------------------\n\nconst SOURCE_TYPE_MAP: Record<number, SourceType> = {\n 1: \"google_docs\",\n 2: \"google_slides\",\n 3: \"pdf\",\n 4: \"pasted_text\",\n 5: \"web_page\",\n 8: \"markdown\",\n 9: \"youtube\",\n 10: \"media\",\n 11: \"docx\",\n 13: \"image\",\n 14: \"google_spreadsheet\",\n 16: \"csv\",\n};\n\nconst ARTIFACT_TYPE_MAP: Record<number, ArtifactType> = {\n 1: \"audio\",\n 2: \"report\",\n 3: \"video\",\n 5: \"mind_map\",\n 7: \"infographic\",\n 8: \"slide_deck\",\n 9: \"data_table\",\n};\n\nconst ARTIFACT_STATUS_MAP: Record<number, ArtifactStatus> = {\n 1: \"in_progress\",\n 2: \"pending\",\n 3: \"completed\",\n 4: \"failed\",\n};\n\nconst SOURCE_STATUS_MAP: Record<number, SourceStatus> = {\n 1: \"processing\",\n 2: \"ready\",\n 3: \"error\",\n 5: \"preparing\",\n};\n\nexport function sourceTypeFromCode(code: number | null | undefined): SourceType {\n if (code == null) return \"unknown\";\n return SOURCE_TYPE_MAP[code] ?? \"unknown\";\n}\n\nexport function artifactTypeFromCode(typeCode: number, variant?: number | null): ArtifactType {\n // Quiz (4) and flashcards both use type 4, distinguished by variant\n if (typeCode === 4) {\n if (variant === 1) return \"flashcards\";\n if (variant === 2) return \"quiz\";\n return \"unknown\";\n }\n return ARTIFACT_TYPE_MAP[typeCode] ?? \"unknown\";\n}\n\nexport function artifactStatusFromCode(code: number): ArtifactStatus {\n return ARTIFACT_STATUS_MAP[code] ?? \"unknown\";\n}\n\nexport function sourceStatusFromCode(code: number): SourceStatus {\n return SOURCE_STATUS_MAP[code] ?? \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Chat mode\n// ---------------------------------------------------------------------------\n\n/**\n * Predefined chat modes that control response style and verbosity.\n * Applied per-notebook via `client.chat.setMode()`.\n */\nexport const ChatMode = {\n /** General purpose — balanced length and style. */\n DEFAULT: \"default\",\n /** Educational focus with longer, learning-oriented responses. */\n LEARNING_GUIDE: \"learning_guide\",\n /** Short, concise answers. */\n CONCISE: \"concise\",\n /** Verbose, detailed answers. */\n DETAILED: \"detailed\",\n} as const;\n\nexport type ChatModeValue = (typeof ChatMode)[keyof typeof ChatMode];\n\n// Internal goal/length codes used by the RPC\nconst CHAT_MODE_PARAMS: Record<ChatModeValue, [goal: number, length: number]> = {\n default: [1, 1],\n learning_guide: [3, 4],\n concise: [1, 5],\n detailed: [1, 4],\n};\n\nexport function chatModeToParams(mode: ChatModeValue): [goal: number, length: number] {\n return CHAT_MODE_PARAMS[mode];\n}\n\nexport const ChatGoal = {\n /** General purpose research and brainstorming. */\n DEFAULT: 1,\n /** Custom instructions (up to 10,000 characters). */\n CUSTOM: 2,\n /** Educational focus with learning-oriented responses. */\n LEARNING_GUIDE: 3,\n} as const;\nexport type ChatGoalValue = (typeof ChatGoal)[keyof typeof ChatGoal];\n\nexport const ChatResponseLength = {\n /** Standard response length. */\n DEFAULT: 1,\n /** Verbose, detailed responses. */\n LONGER: 4,\n /** Concise, brief responses. */\n SHORTER: 5,\n} as const;\nexport type ChatResponseLengthValue = (typeof ChatResponseLength)[keyof typeof ChatResponseLength];\n\n// ---------------------------------------------------------------------------\n// Sharing enums\n// ---------------------------------------------------------------------------\n\nexport const ShareAccess = {\n /** Only explicitly shared users can access */\n RESTRICTED: 0,\n /** Anyone with the link can access */\n ANYONE_WITH_LINK: 1,\n} as const;\n\nexport type ShareAccessValue = (typeof ShareAccess)[keyof typeof ShareAccess];\n\nexport const ShareViewLevel = {\n /** Chat + sources + notes */\n FULL_NOTEBOOK: 0,\n /** Chat interface only */\n CHAT_ONLY: 1,\n} as const;\n\nexport type ShareViewLevelValue = (typeof ShareViewLevel)[keyof typeof ShareViewLevel];\n\nexport const SharePermission = {\n OWNER: 1,\n EDITOR: 2,\n VIEWER: 3,\n /** Internal: remove user from share list */\n _REMOVE: 4,\n} as const;\n\nexport type SharePermissionValue = (typeof SharePermission)[keyof typeof SharePermission];\n","/**\n * All exceptions for notebooklm-sdk.\n *\n * All errors extend NotebookLMError so you can catch everything with:\n * try { ... } catch (e) { if (e instanceof NotebookLMError) ... }\n */\n\nexport class NotebookLMError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Network (transport-level, before RPC processing)\n// ---------------------------------------------------------------------------\n\nexport class NetworkError extends NotebookLMError {\n readonly methodId?: string;\n readonly originalError?: Error;\n\n constructor(message: string, opts: { methodId?: string; originalError?: Error } = {}) {\n super(message);\n this.methodId = opts.methodId;\n this.originalError = opts.originalError;\n }\n}\n\nexport class RPCTimeoutError extends NetworkError {}\n\n// ---------------------------------------------------------------------------\n// RPC Protocol (after connection established)\n// ---------------------------------------------------------------------------\n\nexport class RPCError extends NotebookLMError {\n readonly methodId?: string;\n readonly rawResponse?: string;\n readonly rpcCode?: string | number;\n readonly foundIds: string[];\n\n constructor(\n message: string,\n opts: {\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n foundIds?: string[];\n } = {},\n ) {\n super(message);\n this.methodId = opts.methodId;\n this.rawResponse = opts.rawResponse ? opts.rawResponse.slice(0, 500) : undefined;\n this.rpcCode = opts.rpcCode;\n this.foundIds = opts.foundIds ?? [];\n }\n}\n\nexport class AuthError extends RPCError {}\n\nexport class RateLimitError extends RPCError {\n readonly retryAfter?: number;\n\n constructor(\n message: string,\n opts: {\n retryAfter?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n foundIds?: string[];\n } = {},\n ) {\n super(message, opts);\n this.retryAfter = opts.retryAfter;\n }\n}\n\nexport class ServerError extends RPCError {\n readonly statusCode?: number;\n\n constructor(\n message: string,\n opts: {\n statusCode?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n } = {},\n ) {\n super(message, opts);\n this.statusCode = opts.statusCode;\n }\n}\n\nexport class ClientError extends RPCError {\n readonly statusCode?: number;\n\n constructor(\n message: string,\n opts: {\n statusCode?: number;\n methodId?: string;\n rawResponse?: string;\n rpcCode?: string | number;\n } = {},\n ) {\n super(message, opts);\n this.statusCode = opts.statusCode;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Notebooks\n// ---------------------------------------------------------------------------\n\nexport class NotebookError extends NotebookLMError {}\n\nexport class NotebookNotFoundError extends NotebookError {\n readonly notebookId: string;\n\n constructor(notebookId: string) {\n super(`Notebook not found: ${notebookId}`);\n this.notebookId = notebookId;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Sources\n// ---------------------------------------------------------------------------\n\nexport class SourceError extends NotebookLMError {}\n\nexport class SourceNotFoundError extends SourceError {\n readonly sourceId: string;\n\n constructor(sourceId: string) {\n super(`Source not found: ${sourceId}`);\n this.sourceId = sourceId;\n }\n}\n\nexport class SourceAddError extends SourceError {\n readonly url: string;\n readonly cause?: Error;\n\n constructor(url: string, opts: { cause?: Error; message?: string } = {}) {\n super(\n opts.message ??\n `Failed to add source: ${url}\\n` +\n \"Possible causes:\\n\" +\n \" - URL is invalid or inaccessible\\n\" +\n \" - Content is behind a paywall or requires authentication\\n\" +\n \" - Rate limiting or quota exceeded\",\n );\n this.url = url;\n this.cause = opts.cause;\n }\n}\n\nexport class SourceProcessingError extends SourceError {\n readonly sourceId: string;\n readonly status: number;\n\n constructor(sourceId: string, status = 3, message?: string) {\n super(message ?? `Source ${sourceId} failed to process`);\n this.sourceId = sourceId;\n this.status = status;\n }\n}\n\nexport class SourceTimeoutError extends SourceError {\n readonly sourceId: string;\n readonly timeout: number;\n readonly lastStatus?: number;\n\n constructor(sourceId: string, timeout: number, lastStatus?: number) {\n const statusInfo = lastStatus != null ? ` (last status: ${lastStatus})` : \"\";\n super(`Source ${sourceId} not ready after ${timeout.toFixed(1)}s${statusInfo}`);\n this.sourceId = sourceId;\n this.timeout = timeout;\n this.lastStatus = lastStatus;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Artifacts\n// ---------------------------------------------------------------------------\n\nexport class ArtifactError extends NotebookLMError {}\n\nexport class ArtifactNotFoundError extends ArtifactError {\n readonly artifactId: string;\n readonly artifactType?: string;\n\n constructor(artifactId: string, artifactType?: string) {\n const typeInfo = artifactType ? ` ${artifactType}` : \"\";\n super(`${typeInfo.trim() || \"Artifact\"} ${artifactId} not found`);\n this.artifactId = artifactId;\n this.artifactType = artifactType;\n }\n}\n\nexport class ArtifactNotReadyError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly status?: string;\n\n constructor(artifactType: string, opts: { artifactId?: string; status?: string } = {}) {\n const base = opts.artifactId\n ? `${artifactType} artifact ${opts.artifactId} is not ready`\n : `No completed ${artifactType} found`;\n const statusInfo = opts.status ? ` (status: ${opts.status})` : \"\";\n super(`${base}${statusInfo}`);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.status = opts.status;\n }\n}\n\nexport class ArtifactParseError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly details?: string;\n readonly cause?: Error;\n\n constructor(\n artifactType: string,\n opts: { details?: string; artifactId?: string; cause?: Error } = {},\n ) {\n let msg = `Failed to parse ${artifactType} artifact`;\n if (opts.artifactId) msg += ` ${opts.artifactId}`;\n if (opts.details) msg += `: ${opts.details}`;\n super(msg);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.details = opts.details;\n this.cause = opts.cause;\n }\n}\n\nexport class ArtifactDownloadError extends ArtifactError {\n readonly artifactType: string;\n readonly artifactId?: string;\n readonly details?: string;\n readonly cause?: Error;\n\n constructor(\n artifactType: string,\n opts: { details?: string; artifactId?: string; cause?: Error } = {},\n ) {\n let msg = `Failed to download ${artifactType} artifact`;\n if (opts.artifactId) msg += ` ${opts.artifactId}`;\n if (opts.details) msg += `: ${opts.details}`;\n super(msg);\n this.artifactType = artifactType;\n this.artifactId = opts.artifactId;\n this.details = opts.details;\n this.cause = opts.cause;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Domain: Chat\n// ---------------------------------------------------------------------------\n\nexport class ChatError extends NotebookLMError {}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { AuthError } from \"./types/errors.js\";\n\n/** Default session file written by `npx notebooklm-sdk login`. */\nconst DEFAULT_SESSION_FILE = join(homedir(), \".notebooklm\", \"session.json\");\n\nexport interface CookieMap {\n [key: string]: string;\n}\n\nexport interface AuthTokens {\n cookies: CookieMap;\n csrfToken: string;\n sessionId: string;\n cookieHeader: string;\n /** Cookie header containing only .google.com domain cookies — for media downloads */\n googleCookieHeader: string;\n}\n\n// ---------------------------------------------------------------------------\n// Cookie loading\n// ---------------------------------------------------------------------------\n\n/** Load cookies from a Playwright storage_state.json file. */\nexport function loadCookiesFromFile(filePath: string): CookieMap {\n let raw: string;\n try {\n raw = readFileSync(filePath, \"utf-8\");\n } catch {\n throw new AuthError(`Session file not found: ${filePath}\\nRun: npx notebooklm-sdk login`);\n }\n return extractCookiesFromStorageState(JSON.parse(raw));\n}\n\n/** Load cookies from a raw Playwright storage state object. */\nexport function loadCookiesFromObject(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): CookieMap {\n return extractCookiesFromStorageState(storageState);\n}\n\n/** Build a cookie header containing only .google.com domain cookies (for media downloads). */\nexport function buildGoogleCookieHeader(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): string {\n const map: CookieMap = {};\n for (const c of storageState.cookies ?? []) {\n if (c.domain === \".google.com\" && c.name && c.value) {\n map[c.name] = map[c.name] ?? c.value;\n }\n }\n return buildCookieHeader(map);\n}\n\n/** Load cookies from a flat cookie map (already parsed). */\nexport function loadCookiesFromMap(map: CookieMap): CookieMap {\n return { ...map };\n}\n\n/** Load cookies from a \"; \"-separated cookie string (e.g. process.env.NOTEBOOKLM_COOKIES). */\nexport function loadCookiesFromString(cookieStr: string): CookieMap {\n const map: CookieMap = {};\n for (const part of cookieStr.split(/;\\s*/)) {\n const idx = part.indexOf(\"=\");\n if (idx > 0) {\n const name = part.slice(0, idx).trim();\n const value = part.slice(idx + 1).trim();\n if (name) map[name] = value;\n }\n }\n return map;\n}\n\nfunction extractCookiesFromStorageState(storageState: {\n cookies?: Array<{ name: string; value: string; domain: string }>;\n}): CookieMap {\n const cookies: CookieMap = {};\n const domainTrack: Record<string, string> = {};\n\n for (const cookie of storageState.cookies ?? []) {\n const { domain, name, value } = cookie;\n if (!isAllowedDomain(domain) || !name) continue;\n\n const isBase = domain === \".google.com\";\n if (!(name in cookies) || isBase) {\n cookies[name] = value;\n domainTrack[name] = domain;\n }\n }\n\n if (!cookies[\"SID\"]) {\n throw new AuthError(\n \"Missing required cookie: SID. Session may be invalid or expired.\\nRun: npx notebooklm-sdk login\",\n );\n }\n return cookies;\n}\n\nfunction isAllowedDomain(domain: string): boolean {\n if (\n domain === \".google.com\" ||\n domain === \"notebooklm.google.com\" ||\n domain === \".googleusercontent.com\"\n ) {\n return true;\n }\n if (domain.startsWith(\".google.\")) {\n return true; // Allow all regional Google domains\n }\n return false;\n}\n\nexport function buildCookieHeader(cookies: CookieMap): string {\n return Object.entries(cookies)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"; \");\n}\n\n// ---------------------------------------------------------------------------\n// Token fetching\n// ---------------------------------------------------------------------------\n\nconst NOTEBOOKLM_URL = \"https://notebooklm.google.com/\";\n\nexport async function fetchTokens(\n cookies: CookieMap,\n): Promise<{ csrfToken: string; sessionId: string }> {\n const cookieHeader = buildCookieHeader(cookies);\n\n const response = await fetch(NOTEBOOKLM_URL, {\n headers: { Cookie: cookieHeader },\n redirect: \"follow\",\n });\n\n if (!response.ok) {\n throw new AuthError(`Failed to fetch NotebookLM page: HTTP ${response.status}`);\n }\n\n const finalUrl = response.url;\n if (isGoogleAuthRedirect(finalUrl)) {\n throw new AuthError(`Redirected to login page: ${finalUrl}. Cookies may be expired.`);\n }\n\n const html = await response.text();\n const csrfToken = extractCsrfToken(html, finalUrl);\n const sessionId = extractSessionId(html, finalUrl);\n\n return { csrfToken, sessionId };\n}\n\nfunction extractCsrfToken(html: string, finalUrl: string): string {\n const match = /\"SNlM0e\"\\s*:\\s*\"([^\"]+)\"/.exec(html);\n if (!match?.[1]) {\n if (isGoogleAuthRedirect(finalUrl) || html.includes(\"accounts.google.com\")) {\n throw new AuthError(\"Session expired or invalid.\\nRun: npx notebooklm-sdk login\");\n }\n throw new AuthError(\"CSRF token (SNlM0e) not found in NotebookLM page HTML.\");\n }\n return match[1];\n}\n\nfunction extractSessionId(html: string, finalUrl: string): string {\n const match = /\"FdrFJe\"\\s*:\\s*\"([^\"]+)\"/.exec(html);\n if (!match?.[1]) {\n if (isGoogleAuthRedirect(finalUrl) || html.includes(\"accounts.google.com\")) {\n throw new AuthError(\"Session expired or invalid.\\nRun: npx notebooklm-sdk login\");\n }\n throw new AuthError(\"Session ID (FdrFJe) not found in NotebookLM page HTML.\");\n }\n return match[1];\n}\n\nfunction isGoogleAuthRedirect(url: string): boolean {\n return url.includes(\"accounts.google.com\") || url.includes(\"signin\");\n}\n\n// ---------------------------------------------------------------------------\n// Connect options\n// ---------------------------------------------------------------------------\n\nexport interface ConnectOptions {\n /** \"; \"-separated cookie string (e.g. \"SID=abc; HSID=xyz\") */\n cookies?: string;\n /** Path to Playwright storage_state.json */\n cookiesFile?: string;\n /** Pre-parsed cookie map */\n cookiesObject?: CookieMap | { cookies?: Array<{ name: string; value: string; domain: string }> };\n}\n\nexport async function connect(opts: ConnectOptions = {}): Promise<AuthTokens> {\n let cookieMap: CookieMap;\n let googleCookieHeader: string | null = null;\n\n if (opts.cookies) {\n cookieMap = loadCookiesFromString(opts.cookies);\n } else if (opts.cookiesFile) {\n cookieMap = loadCookiesFromFile(opts.cookiesFile);\n } else if (opts.cookiesObject) {\n if (\"cookies\" in opts.cookiesObject && Array.isArray(opts.cookiesObject.cookies)) {\n const storageState = opts.cookiesObject as {\n cookies: Array<{ name: string; value: string; domain: string }>;\n };\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else {\n cookieMap = loadCookiesFromMap(opts.cookiesObject as CookieMap);\n }\n } else {\n // Auto-discovery: ~/.notebooklm/session.json → ./storage_state.json → env var\n const envCookies = process.env[\"NOTEBOOKLM_COOKIES\"];\n const envFile = process.env[\"NOTEBOOKLM_COOKIES_FILE\"];\n if (envFile) {\n cookieMap = loadCookiesFromFile(envFile);\n } else if (existsSync(DEFAULT_SESSION_FILE)) {\n const raw = readFileSync(DEFAULT_SESSION_FILE, \"utf-8\");\n const storageState = JSON.parse(raw);\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else if (existsSync(\"storage_state.json\")) {\n const raw = readFileSync(\"storage_state.json\", \"utf-8\");\n const storageState = JSON.parse(raw);\n cookieMap = loadCookiesFromObject(storageState);\n googleCookieHeader = buildGoogleCookieHeader(storageState);\n } else if (envCookies) {\n cookieMap = loadCookiesFromString(envCookies);\n } else {\n throw new AuthError(\"No session found. Run: npx notebooklm-sdk login\");\n }\n }\n\n const { csrfToken, sessionId } = await fetchTokens(cookieMap);\n const cookieHeader = buildCookieHeader(cookieMap);\n\n return {\n cookies: cookieMap,\n csrfToken,\n sessionId,\n cookieHeader,\n googleCookieHeader: googleCookieHeader ?? cookieHeader,\n };\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type {\n AudioFormatValue,\n AudioLengthValue,\n InfographicDetailValue,\n InfographicOrientationValue,\n InfographicStyleValue,\n QuizDifficultyValue,\n QuizQuantityValue,\n SlideDeckFormatValue,\n SlideDeckLengthValue,\n VideoFormatValue,\n VideoStyleValue,\n} from \"../types/enums.js\";\nimport {\n ArtifactTypeCode,\n AudioFormat,\n AudioLength,\n artifactStatusFromCode,\n ExportType,\n InfographicDetail,\n InfographicOrientation,\n InfographicStyle,\n QuizDifficulty,\n QuizQuantity,\n RPCMethod,\n SlideDeckFormat,\n SlideDeckLength,\n VideoFormat,\n VideoStyle,\n} from \"../types/enums.js\";\nimport { ArtifactNotReadyError } from \"../types/errors.js\";\nimport type { Artifact, GenerationStatus, Note, ReportSuggestion } from \"../types/models.js\";\nimport { parseArtifact } from \"../types/models.js\";\nimport type { NotesAPI } from \"./notes.js\";\n\nexport interface CreateAudioOptions {\n format?: AudioFormatValue;\n length?: AudioLengthValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateVideoOptions {\n format?: VideoFormatValue;\n style?: VideoStyleValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateQuizOptions {\n quantity?: QuizQuantityValue;\n difficulty?: QuizDifficultyValue;\n sourceIds?: string[];\n instructions?: string;\n}\n\nexport interface CreateInfographicOptions {\n orientation?: InfographicOrientationValue;\n detail?: InfographicDetailValue;\n style?: InfographicStyleValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateSlideDeckOptions {\n format?: SlideDeckFormatValue;\n length?: SlideDeckLengthValue;\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface CreateDataTableOptions {\n sourceIds?: string[];\n instructions?: string;\n language?: string;\n}\n\nexport interface DataTableContent {\n headers: string[];\n rows: string[][];\n}\n\nexport type ReportFormat = \"briefing_doc\" | \"study_guide\" | \"blog_post\" | \"custom\";\n\nexport interface CreateReportOptions {\n format?: ReportFormat;\n sourceIds?: string[];\n language?: string;\n customPrompt?: string;\n extraInstructions?: string;\n}\n\n// Triple-nest source IDs as required by the API: [[[sid]], [[sid]], ...]\nfunction tripleNest(ids: string[]): string[][][] {\n return ids.map((id) => [[id]]);\n}\n\n// Double-nest source IDs: [[sid], [sid], ...]\nfunction doubleNest(ids: string[]): string[][] {\n return ids.map((id) => [id]);\n}\n\nexport class ArtifactsAPI {\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n private readonly notes: NotesAPI,\n ) {}\n\n async list(notebookId: string): Promise<Artifact[]> {\n const rawList = await this._listRaw(notebookId);\n const artifacts: Artifact[] = [];\n for (const item of rawList) {\n if (Array.isArray(item)) {\n try {\n artifacts.push(parseArtifact(item, notebookId));\n } catch {\n // ignore malformed items\n }\n }\n }\n return artifacts;\n }\n\n private async _listRaw(notebookId: string): Promise<unknown[][]> {\n const params = [[2], notebookId, 'NOT artifact.status = \"ARTIFACT_STATUS_SUGGESTED\"'];\n const result = await this.rpc.call(RPCMethod.LIST_ARTIFACTS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (!Array.isArray(result) || !result.length) return [];\n return (Array.isArray(result[0]) ? result[0] : result) as unknown[][];\n }\n\n async get(notebookId: string, artifactId: string): Promise<Artifact | null> {\n const artifacts = await this.list(notebookId);\n return artifacts.find((a) => a.id === artifactId) ?? null;\n }\n\n async listAudio(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"audio\");\n }\n\n async listVideo(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"video\");\n }\n\n async listReports(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"report\");\n }\n\n async listQuizzes(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"quiz\");\n }\n\n async listFlashcards(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"flashcards\");\n }\n\n async listInfographics(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"infographic\");\n }\n\n async listSlideDecks(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"slide_deck\");\n }\n\n async listDataTables(notebookId: string): Promise<Artifact[]> {\n return (await this.list(notebookId)).filter((a) => a.kind === \"data_table\");\n }\n\n async delete(notebookId: string, artifactId: string): Promise<boolean> {\n const params = [[2], notebookId, artifactId];\n await this.rpc.call(RPCMethod.DELETE_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async rename(notebookId: string, artifactId: string, newTitle: string): Promise<boolean> {\n const params = [[2], notebookId, artifactId, newTitle];\n await this.rpc.call(RPCMethod.RENAME_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n // ---------------------------------------------------------------------------\n // Generation\n // ---------------------------------------------------------------------------\n\n async createAudio(notebookId: string, opts: CreateAudioOptions = {}): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const length = opts.length ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n // config at index 6 (no extra null before it)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.AUDIO,\n triple,\n null,\n null,\n [null, [opts.instructions ?? null, length, null, double, language, null, format]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createVideo(notebookId: string, opts: CreateVideoOptions = {}): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const style = opts.style ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n // config at index 8 (two extra nulls at 6,7)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.VIDEO,\n triple,\n null,\n null,\n null,\n null,\n [null, null, [double, language, opts.instructions ?? null, null, format, style]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createQuiz(notebookId: string, opts: CreateQuizOptions = {}): Promise<GenerationStatus> {\n const quantity = opts.quantity ?? null;\n const difficulty = opts.difficulty ?? null;\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 9 (three extra nulls at 6,7,8); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.QUIZ,\n triple,\n null,\n null,\n null,\n null,\n null,\n [\n null,\n [2, null, opts.instructions ?? null, null, null, null, null, [quantity, difficulty]],\n ],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createFlashcards(\n notebookId: string,\n opts: CreateQuizOptions = {},\n ): Promise<GenerationStatus> {\n const quantity = opts.quantity ?? null;\n const difficulty = opts.difficulty ?? null;\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 9; note [difficulty, quantity] order (reversed from quiz)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.QUIZ,\n triple,\n null,\n null,\n null,\n null,\n null,\n [null, [1, null, opts.instructions ?? null, null, null, null, [difficulty, quantity]]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createInfographic(\n notebookId: string,\n opts: CreateInfographicOptions = {},\n ): Promise<GenerationStatus> {\n const orientation = opts.orientation ?? null;\n const detail = opts.detail ?? null;\n const style = opts.style ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 14 (eight extra nulls at 6-13); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.INFOGRAPHIC,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [[opts.instructions ?? null, language, null, orientation, detail, style]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createSlideDeck(\n notebookId: string,\n opts: CreateSlideDeckOptions = {},\n ): Promise<GenerationStatus> {\n const format = opts.format ?? null;\n const length = opts.length ?? null;\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 16 (ten extra nulls at 6-15); no source_ids_double in config\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.SLIDE_DECK,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [[opts.instructions ?? null, language, format, length]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createDataTable(\n notebookId: string,\n opts: CreateDataTableOptions = {},\n ): Promise<GenerationStatus> {\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n\n // config at index 18 (twelve extra nulls at 6-17)\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.DATA_TABLE,\n triple,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [null, [opts.instructions ?? null, language]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createReport(\n notebookId: string,\n opts: CreateReportOptions = {},\n ): Promise<GenerationStatus> {\n const format = opts.format ?? \"briefing_doc\";\n const language = opts.language ?? \"en\";\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(sourceIds);\n const double = doubleNest(sourceIds);\n\n const configs: Record<string, { title: string; description: string; prompt: string }> = {\n briefing_doc: {\n title: \"Briefing Doc\",\n description: \"Key insights and important quotes\",\n prompt:\n \"Create a comprehensive briefing document that includes an Executive Summary, \" +\n \"detailed analysis of key themes, important quotes with context, and actionable insights.\",\n },\n study_guide: {\n title: \"Study Guide\",\n description: \"Short-answer quiz, essay questions, glossary\",\n prompt:\n \"Create a comprehensive study guide that includes key concepts, short-answer practice \" +\n \"questions, essay prompts for deeper exploration, and a glossary of important terms.\",\n },\n blog_post: {\n title: \"Blog Post\",\n description: \"Insightful takeaways in readable article format\",\n prompt:\n \"Write an engaging blog post that presents the key insights in an accessible, \" +\n \"reader-friendly format with an attention-grabbing introduction and compelling conclusion.\",\n },\n custom: {\n title: \"Custom Report\",\n description: \"Custom format\",\n prompt: opts.customPrompt ?? \"Create a report based on the provided sources.\",\n },\n };\n\n const cfg = configs[format] ?? configs[\"briefing_doc\"]!;\n const prompt =\n opts.extraInstructions && format !== \"custom\"\n ? `${cfg.prompt}\\n\\n${opts.extraInstructions}`\n : cfg.prompt;\n\n const params = [\n [2],\n notebookId,\n [\n null,\n null,\n ArtifactTypeCode.REPORT,\n triple,\n null,\n null,\n null,\n [null, [cfg.title, cfg.description, null, double, language, prompt, null, true]],\n ],\n ];\n return this._callGenerate(notebookId, params);\n }\n\n async createMindMap(notebookId: string, sourceIds?: string[]): Promise<Note> {\n const ids = sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(ids);\n\n // GENERATE_MIND_MAP returns content directly — it does NOT persist anything.\n // We extract the JSON from result[0][0] and save it as a note.\n const params = [\n triple,\n null,\n null,\n null,\n null,\n [\"interactive_mindmap\", [[\"[CONTEXT]\", \"\"]], \"\"],\n null,\n [2, null, [1]],\n ];\n const result = await this.rpc.call(RPCMethod.GENERATE_MIND_MAP, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const mindMapJson: string | null =\n Array.isArray(result) && Array.isArray(result[0]) && typeof result[0][0] === \"string\"\n ? (result[0][0] as string)\n : null;\n\n if (!mindMapJson) throw new Error(\"Mind map generation returned no content\");\n\n let title = \"Mind Map\";\n try {\n const parsed = JSON.parse(mindMapJson) as Record<string, unknown>;\n if (typeof parsed[\"name\"] === \"string\") title = parsed[\"name\"];\n } catch {\n // keep default title\n }\n\n return this.notes.create(notebookId, mindMapJson, title);\n }\n\n // ---------------------------------------------------------------------------\n // Polling / download\n // ---------------------------------------------------------------------------\n\n /** Poll until artifact reaches completed/failed status. */\n async waitUntilReady(\n notebookId: string,\n artifactId: string,\n timeout = 300,\n pollInterval = 3,\n ): Promise<Artifact> {\n const deadline = Date.now() + timeout * 1000;\n\n while (Date.now() < deadline) {\n const artifact = await this.get(notebookId, artifactId);\n if (artifact?.status === \"completed\") return artifact;\n if (artifact?.status === \"failed\") {\n throw new ArtifactNotReadyError(artifact.kind, { artifactId, status: \"failed\" });\n }\n await sleep(pollInterval * 1000);\n }\n throw new ArtifactNotReadyError(\"artifact\", { artifactId, status: \"timeout\" });\n }\n\n /** Download audio content as a Buffer. */\n async downloadAudio(notebookId: string, artifactId: string): Promise<Buffer> {\n const artifact = await this.get(notebookId, artifactId);\n if (!artifact || artifact.status !== \"completed\") {\n throw new ArtifactNotReadyError(\"audio\", { artifactId, status: artifact?.status });\n }\n if (!artifact.audioUrl) throw new ArtifactNotReadyError(\"audio\", { artifactId });\n return this._fetchMediaWithCookies(artifact.audioUrl);\n }\n\n /** Download video content as a Buffer. */\n async downloadVideo(notebookId: string, artifactId: string): Promise<Buffer> {\n const artifact = await this.get(notebookId, artifactId);\n if (!artifact || artifact.status !== \"completed\") {\n throw new ArtifactNotReadyError(\"video\", { artifactId, status: artifact?.status });\n }\n if (!artifact.videoUrl) throw new ArtifactNotReadyError(\"video\", { artifactId });\n return this._fetchMediaWithCookies(artifact.videoUrl);\n }\n\n /** Get markdown content for a completed report artifact. */\n async getReportMarkdown(notebookId: string, artifactId: string): Promise<string | null> {\n const artifact = await this.get(notebookId, artifactId);\n return artifact?.content ?? null;\n }\n\n /** Get interactive HTML for quiz/flashcard artifacts. */\n async getInteractiveHtml(notebookId: string, artifactId: string): Promise<string | null> {\n const params = [artifactId];\n const result = await this.rpc.call(RPCMethod.GET_INTERACTIVE_HTML, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n // result[0] is artifact data array; HTML is at result[0][9][0]\n if (Array.isArray(result) && Array.isArray(result[0])) {\n const data = result[0] as unknown[];\n if (Array.isArray(data[9]) && typeof (data[9] as unknown[])[0] === \"string\") {\n return (data[9] as unknown[])[0] as string;\n }\n }\n return null;\n }\n\n /** Download a completed slide deck as PDF or PPTX. Returns a Buffer. */\n async downloadSlideDeck(\n notebookId: string,\n artifactId: string,\n format: \"pdf\" | \"pptx\" = \"pdf\",\n ): Promise<Buffer> {\n const rawList = await this._listRaw(notebookId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const raw = rawList.find(\n (a: any) => a[0] === artifactId && a[2] === ArtifactTypeCode.SLIDE_DECK,\n ) as any;\n if (!raw) throw new ArtifactNotReadyError(\"slide_deck\", { artifactId });\n\n // artifact[16] = [config, title, slides, pdf_url, pptx_url]\n const metadata = raw[16];\n if (!Array.isArray(metadata)) throw new ArtifactNotReadyError(\"slide_deck\", { artifactId });\n\n const url = format === \"pptx\" ? metadata[4] : metadata[3];\n if (typeof url !== \"string\" || !url.startsWith(\"http\")) {\n throw new ArtifactNotReadyError(\"slide_deck\", { artifactId, status: `no ${format} url` });\n }\n return this._fetchMediaWithCookies(url);\n }\n\n /** Download a completed infographic as PNG. Returns a Buffer. */\n async downloadInfographic(notebookId: string, artifactId: string): Promise<Buffer> {\n const rawList = await this._listRaw(notebookId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const raw = rawList.find(\n (a: any) => a[0] === artifactId && a[2] === ArtifactTypeCode.INFOGRAPHIC,\n ) as any[];\n if (!raw) throw new ArtifactNotReadyError(\"infographic\", { artifactId });\n\n // Scan in reverse for the nested list containing the image URL\n let url: string | null = null;\n for (let i = raw.length - 1; i >= 0; i--) {\n const item = raw[i];\n if (\n Array.isArray(item) &&\n Array.isArray(item[2]) &&\n Array.isArray(item[2][0]) &&\n Array.isArray(item[2][0][1]) &&\n typeof item[2][0][1][0] === \"string\" &&\n (item[2][0][1][0] as string).startsWith(\"http\")\n ) {\n url = item[2][0][1][0] as string;\n break;\n }\n }\n if (!url) throw new ArtifactNotReadyError(\"infographic\", { artifactId });\n return this._fetchMediaWithCookies(url);\n }\n\n /** Get AI-suggested report formats based on notebook content. */\n async suggestReports(notebookId: string): Promise<ReportSuggestion[]> {\n const params = [[2], notebookId];\n const result = await this.rpc.call(RPCMethod.GET_SUGGESTED_REPORTS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n timeoutMs: 120_000,\n });\n if (!Array.isArray(result) || !result.length) return [];\n const items = Array.isArray(result[0]) ? (result[0] as unknown[]) : result;\n const suggestions: ReportSuggestion[] = [];\n for (const item of items) {\n if (Array.isArray(item) && item.length >= 5) {\n suggestions.push({\n title: typeof item[0] === \"string\" ? item[0] : \"\",\n description: typeof item[1] === \"string\" ? item[1] : \"\",\n prompt: typeof item[4] === \"string\" ? item[4] : \"\",\n audienceLevel: typeof item[5] === \"number\" ? item[5] : 2,\n });\n }\n }\n return suggestions;\n }\n\n /** Revise an individual slide in a completed slide deck using a prompt. */\n async reviseSlide(\n notebookId: string,\n artifactId: string,\n slideIndex: number,\n prompt: string,\n ): Promise<GenerationStatus> {\n if (slideIndex < 0) throw new Error(\"slideIndex must be >= 0\");\n const params = [[2], artifactId, [[[slideIndex, prompt]]]];\n const result = await this.rpc.call(RPCMethod.REVISE_SLIDE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this._parseGenerationResult(result);\n }\n\n /** Get parsed headers and rows from a completed data table artifact. */\n async getDataTableContent(\n notebookId: string,\n artifactId: string,\n ): Promise<DataTableContent | null> {\n const artifacts = await this._listRaw(notebookId);\n const raw = artifacts.find(\n (a) => Array.isArray(a) && a[0] === artifactId && a[2] === ArtifactTypeCode.DATA_TABLE,\n );\n if (!raw || !Array.isArray(raw) || !Array.isArray(raw[18])) return null;\n return parseDataTable(raw[18]);\n }\n\n // ---------------------------------------------------------------------------\n // Internal\n /** Export a completed report artifact to Google Docs. Returns the created document URL. */\n async exportReport(\n notebookId: string,\n artifactId: string,\n title: string,\n ): Promise<string | null> {\n const params = [null, artifactId, null, title, ExportType.DOCS];\n const result = await this.rpc.call(RPCMethod.EXPORT_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return extractExportUrl(result);\n }\n\n /** Export a completed data table artifact to Google Sheets. Returns the created spreadsheet URL. */\n async exportDataTable(\n notebookId: string,\n artifactId: string,\n title: string,\n ): Promise<string | null> {\n const params = [null, artifactId, null, title, ExportType.SHEETS];\n const result = await this.rpc.call(RPCMethod.EXPORT_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return extractExportUrl(result);\n }\n\n // ---------------------------------------------------------------------------\n\n /**\n * Fetch a Google-hosted media URL, manually following redirects to ensure\n * cookies are included on every hop. Node/Bun fetch strips the Cookie header\n * on cross-origin redirects (e.g. googleusercontent.com → lh3.google.com).\n */\n private async _fetchMediaWithCookies(url: string, maxRedirects = 10): Promise<Buffer> {\n let current = url;\n for (let i = 0; i < maxRedirects; i++) {\n if (!isTrustedDomain(current)) {\n throw new Error(`Untrusted redirect target: ${new URL(current).hostname}`);\n }\n const response = await fetch(current, {\n headers: { Cookie: this.auth.googleCookieHeader },\n redirect: \"manual\",\n });\n\n if (response.status >= 300 && response.status < 400) {\n const location = response.headers.get(\"location\");\n if (!location)\n throw new Error(`Redirect with no Location header (status ${response.status})`);\n current = location.startsWith(\"http\") ? location : new URL(location, current).href;\n continue;\n }\n\n if (!response.ok) throw new Error(`Media download failed: HTTP ${response.status}`);\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/html\")) {\n throw new Error(\"Media download returned HTML — authentication cookies may be expired.\");\n }\n\n return Buffer.from(await response.arrayBuffer());\n }\n throw new Error(\"Too many redirects fetching media URL\");\n }\n\n private async _callGenerate(notebookId: string, params: unknown[]): Promise<GenerationStatus> {\n const result = await this.rpc.call(RPCMethod.CREATE_ARTIFACT, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this._parseGenerationResult(result);\n }\n\n private _parseGenerationResult(result: unknown): GenerationStatus {\n if (Array.isArray(result) && result.length > 0) {\n const artifactData = result[0] as unknown[];\n const artifactId =\n Array.isArray(artifactData) &&\n artifactData.length > 0 &&\n typeof artifactData[0] === \"string\"\n ? (artifactData[0] as string)\n : null;\n const statusCode =\n Array.isArray(artifactData) &&\n artifactData.length > 4 &&\n typeof artifactData[4] === \"number\"\n ? (artifactData[4] as number)\n : null;\n\n if (artifactId) {\n return {\n artifactId,\n status: statusCode != null ? artifactStatusFromCode(statusCode) : \"pending\",\n };\n }\n }\n return { artifactId: null, status: \"failed\" };\n }\n}\n\nfunction extractCellText(cell: unknown): string {\n if (typeof cell === \"string\") return cell;\n if (typeof cell === \"number\") return \"\";\n if (Array.isArray(cell)) return cell.map(extractCellText).join(\"\");\n return \"\";\n}\n\nfunction parseDataTable(rawData: unknown): DataTableContent {\n try {\n // Navigate: raw[0][0][0][0][4][2] → rows array\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nav = rawData as any;\n const rowsArray = nav[0][0][0][0][4][2] as unknown[][];\n if (!rowsArray?.length) throw new Error(\"Empty data table\");\n\n const headers: string[] = [];\n const rows: string[][] = [];\n\n for (let i = 0; i < rowsArray.length; i++) {\n const rowSection = rowsArray[i];\n if (!Array.isArray(rowSection) || rowSection.length < 3) continue;\n const cellArray = rowSection[2] as unknown[];\n if (!Array.isArray(cellArray)) continue;\n const values = cellArray.map(extractCellText);\n if (i === 0) headers.push(...values);\n else rows.push(values);\n }\n\n if (!headers.length) throw new Error(\"No headers found\");\n return { headers, rows };\n } catch (e) {\n throw new Error(`Failed to parse data table: ${e}`);\n }\n}\n\nfunction extractExportUrl(result: unknown): string | null {\n if (!Array.isArray(result)) return null;\n // Scan recursively for the first https URL\n function findUrl(data: unknown, depth = 5): string | null {\n if (depth <= 0 || data == null) return null;\n if (typeof data === \"string\" && data.startsWith(\"https://\")) return data;\n if (Array.isArray(data)) {\n for (const item of data) {\n const found = findUrl(item, depth - 1);\n if (found) return found;\n }\n }\n return null;\n }\n return findUrl(result);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nconst TRUSTED_MEDIA_DOMAINS = [\n \".google.com\",\n \".googleusercontent.com\",\n \".googleapis.com\",\n \".usercontent.google.com\",\n];\n\nfunction isTrustedDomain(url: string): boolean {\n try {\n const host = new URL(url).hostname;\n return TRUSTED_MEDIA_DOMAINS.some((d) => host === d.slice(1) || host.endsWith(d));\n } catch {\n return false;\n }\n}\n","import type {\n ArtifactStatus,\n ArtifactType,\n artifactStatusFromCode,\n artifactTypeFromCode,\n SourceStatus,\n SourceType,\n sourceStatusFromCode,\n sourceTypeFromCode,\n} from \"./enums.js\";\n\nexport type { ArtifactStatus, ArtifactType, SourceStatus, SourceType };\n\n// ---------------------------------------------------------------------------\n// Notebook\n// ---------------------------------------------------------------------------\n\nexport interface Notebook {\n id: string;\n title: string;\n createdAt: Date | null;\n sourcesCount: number;\n isOwner: boolean;\n}\n\nexport interface SuggestedTopic {\n question: string;\n prompt: string;\n}\n\nexport interface NotebookDescription {\n summary: string;\n suggestedTopics: SuggestedTopic[];\n}\n\nexport interface SourceSummary {\n kind: SourceType;\n title: string | null;\n url: string | null;\n}\n\nexport interface NotebookMetadata {\n id: string;\n title: string;\n createdAt: Date | null;\n isOwner: boolean;\n sources: SourceSummary[];\n}\n\n// ---------------------------------------------------------------------------\n// Source\n// ---------------------------------------------------------------------------\n\nexport interface Source {\n id: string;\n title: string | null;\n url: string | null;\n kind: SourceType;\n createdAt: Date | null;\n status: SourceStatus;\n /** Raw type code from API (for debugging) */\n _typeCode: number | null;\n}\n\nexport interface SourceFulltext {\n sourceId: string;\n title: string;\n content: string;\n url: string | null;\n charCount: number;\n}\n\nexport interface SourceSummaryData {\n sourceId: string;\n summary: string;\n}\n\n// ---------------------------------------------------------------------------\n// Artifact\n// ---------------------------------------------------------------------------\n\nexport interface Artifact {\n id: string;\n title: string | null;\n kind: ArtifactType;\n status: ArtifactStatus;\n notebookId: string;\n audioUrl: string | null;\n videoUrl: string | null;\n exportUrl: string | null;\n shareUrl: string | null;\n /** Markdown content for report artifacts (data[7][0]) */\n content: string | null;\n /** Raw data from API */\n _raw: unknown[];\n}\n\nexport interface GenerationStatus {\n status: ArtifactStatus;\n artifactId: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Sharing\n// ---------------------------------------------------------------------------\n\nexport interface SharedUser {\n email: string;\n permission: \"owner\" | \"editor\" | \"viewer\";\n displayName: string | null;\n avatarUrl: string | null;\n}\n\nexport interface ShareStatus {\n notebookId: string;\n isPublic: boolean;\n /** 0 = restricted, 1 = anyone with link */\n access: number;\n /** 0 = full notebook, 1 = chat only */\n viewLevel: number;\n sharedUsers: SharedUser[];\n shareUrl: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Chat\n// ---------------------------------------------------------------------------\n\nexport interface ChatReference {\n sourceId: string;\n title: string | null;\n url: string | null;\n}\n\nexport interface AskResult {\n answer: string;\n conversationId: string;\n turnNumber: number;\n references: ChatReference[];\n}\n\nexport interface ConversationTurn {\n query: string;\n answer: string;\n turnNumber: number;\n}\n\n// ---------------------------------------------------------------------------\n// Notes\n// ---------------------------------------------------------------------------\n\nexport interface Note {\n id: string;\n title: string | null;\n content: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nexport interface SourceGuide {\n /** AI-generated summary with **bold** keywords (markdown). */\n summary: string;\n /** Topic keywords extracted from the source. */\n keywords: string[];\n}\n\nexport interface ReportSuggestion {\n title: string;\n description: string;\n prompt: string;\n /** 1 = beginner, 2 = advanced */\n audienceLevel: number;\n}\n\n// ---------------------------------------------------------------------------\n// Parsers (from raw API responses)\n// ---------------------------------------------------------------------------\n\nimport {\n artifactStatusFromCode as _artifactStatusFromCode,\n artifactTypeFromCode as _artifactTypeFromCode,\n sourceStatusFromCode as _sourceStatusFromCode,\n sourceTypeFromCode as _sourceTypeFromCode,\n} from \"./enums.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Raw = any;\n\nexport function parseNotebook(data: Raw[]): Notebook {\n const rawTitle = typeof data[0] === \"string\" ? data[0] : \"\";\n const title = rawTitle.replace(\"thought\\n\", \"\").trim();\n const id = typeof data[2] === \"string\" ? data[2] : \"\";\n\n let createdAt: Date | null = null;\n if (Array.isArray(data[5]) && Array.isArray(data[5][5]) && data[5][5].length > 0) {\n try {\n createdAt = new Date((data[5][5][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n const isOwner = !(Array.isArray(data[5]) && data[5][1] === true);\n\n return { id, title, createdAt, sourcesCount: 0, isOwner };\n}\n\nexport function parseSource(src: Raw[]): Source {\n const srcId = Array.isArray(src[0]) ? (src[0][0] as string) : (src[0] as string);\n const title = typeof src[1] === \"string\" ? src[1] : null;\n\n let url: string | null = null;\n if (Array.isArray(src[2]) && Array.isArray(src[2][7]) && src[2][7].length > 0) {\n url = typeof src[2][7][0] === \"string\" ? (src[2][7][0] as string) : null;\n }\n\n let createdAt: Date | null = null;\n if (Array.isArray(src[2]) && Array.isArray(src[2][2]) && typeof src[2][2][0] === \"number\") {\n try {\n createdAt = new Date((src[2][2][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n let statusCode = 2; // default READY\n if (Array.isArray(src[3]) && typeof src[3][1] === \"number\") {\n statusCode = src[3][1] as number;\n }\n\n let typeCode: number | null = null;\n if (Array.isArray(src[2]) && typeof src[2][4] === \"number\") {\n typeCode = src[2][4] as number;\n }\n\n return {\n id: String(srcId),\n title,\n url,\n kind: _sourceTypeFromCode(typeCode),\n createdAt,\n status: _sourceStatusFromCode(statusCode),\n _typeCode: typeCode,\n };\n}\n\nexport function parseArtifact(data: Raw[], notebookId: string): Artifact {\n const id = typeof data[0] === \"string\" ? data[0] : \"\";\n const title = typeof data[1] === \"string\" ? data[1] : null;\n const typeCode = typeof data[2] === \"number\" ? (data[2] as number) : 0;\n const statusCode = typeof data[4] === \"number\" ? (data[4] as number) : 0;\n\n // Quiz/flashcard variant is at data[9][1][0]: 1=flashcards, 2=quiz\n let variant: number | null = null;\n if (\n typeCode === 4 &&\n Array.isArray(data[9]) &&\n Array.isArray(data[9][1]) &&\n typeof data[9][1][0] === \"number\"\n ) {\n variant = data[9][1][0] as number;\n }\n\n // Audio URL at data[6][5]: list of [url, ..., mime_type] media items\n let audioUrl: string | null = null;\n const meta6 = data[6];\n if (Array.isArray(meta6) && Array.isArray(meta6[5])) {\n const mediaList = meta6[5] as unknown[][];\n // Prefer audio/mp4 item; fallback to first item\n for (const item of mediaList) {\n if (Array.isArray(item) && item[2] === \"audio/mp4\" && typeof item[0] === \"string\") {\n audioUrl = item[0] as string;\n break;\n }\n }\n if (!audioUrl && Array.isArray(mediaList[0]) && typeof mediaList[0][0] === \"string\") {\n audioUrl = mediaList[0][0] as string;\n }\n }\n\n // Video URL at data[8]: scan for nested list with HTTP items, prefer video/mp4 priority 4\n let videoUrl: string | null = null;\n if (Array.isArray(data[8])) {\n const meta8 = data[8] as unknown[][];\n for (const item of meta8) {\n if (\n Array.isArray(item) &&\n Array.isArray(item[0]) &&\n typeof (item[0] as unknown[])[0] === \"string\" &&\n ((item[0] as unknown[])[0] as string).startsWith(\"http\")\n ) {\n const mediaList = item as unknown[][];\n let best: string | null = null;\n for (const m of mediaList) {\n if (Array.isArray(m) && m[2] === \"video/mp4\" && typeof m[0] === \"string\") {\n best = m[0] as string;\n if (m[1] === 4) break;\n }\n }\n videoUrl =\n best ??\n (Array.isArray(mediaList[0]) && typeof mediaList[0][0] === \"string\"\n ? (mediaList[0][0] as string)\n : null);\n break;\n }\n }\n }\n\n // Report markdown content at data[7] or data[7][0]\n let content: string | null = null;\n if (Array.isArray(data[7]) && typeof data[7][0] === \"string\") {\n content = data[7][0] as string;\n } else if (typeof data[7] === \"string\") {\n content = data[7] as string;\n }\n\n return {\n id,\n title,\n kind: _artifactTypeFromCode(typeCode, variant),\n status: _artifactStatusFromCode(statusCode),\n notebookId,\n audioUrl,\n videoUrl,\n exportUrl: null,\n shareUrl: null,\n content,\n _raw: Array.isArray(data) ? data : [],\n };\n}\n\nexport function parseNote(data: Raw[]): Note {\n const id = typeof data[0] === \"string\" ? data[0] : \"\";\n const content = typeof data[1] === \"string\" ? data[1] : \"\";\n const title = typeof data[2] === \"string\" ? data[2] : null;\n\n let createdAt: Date | null = null;\n let updatedAt: Date | null = null;\n if (Array.isArray(data[3]) && typeof data[3][0] === \"number\") {\n try {\n createdAt = new Date((data[3][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n if (Array.isArray(data[4]) && typeof data[4][0] === \"number\") {\n try {\n updatedAt = new Date((data[4][0] as number) * 1000);\n } catch {\n // ignore\n }\n }\n\n return { id, title, content, createdAt, updatedAt };\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type { ChatGoalValue, ChatModeValue, ChatResponseLengthValue } from \"../types/enums.js\";\nimport { ChatGoal, chatModeToParams, RPCMethod } from \"../types/enums.js\";\nimport { ChatError } from \"../types/errors.js\";\nimport type { AskResult, ChatReference, ConversationTurn } from \"../types/models.js\";\n\nconst QUERY_URL =\n \"https://notebooklm.google.com/_/LabsTailwindUi/data/google.internal.labs.tailwind.orchestration.v1.LabsTailwindOrchestrationService/GenerateFreeFormStreamed\";\n\nconst DEFAULT_BL = \"boq_labs-tailwind-frontend_20260301.03_p0\";\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport interface AskOptions {\n conversationId?: string;\n sourceIds?: string[];\n}\n\ninterface CachedTurn {\n query: string;\n answer: string;\n turnNumber: number;\n}\n\nexport class ChatAPI {\n private readonly conversationCache = new Map<string, CachedTurn[]>();\n private reqid = Math.floor(Math.random() * 900_000) + 100_000;\n\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n ) {}\n\n async ask(notebookId: string, query: string, opts: AskOptions = {}): Promise<AskResult> {\n const sourceIds = opts.sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const isNew = !opts.conversationId;\n const conversationId = opts.conversationId ?? randomUUID();\n\n const history = isNew ? null : this._buildHistory(conversationId);\n // Sources are triple-nested: [[[sid]], [[sid]], ...]\n const sourcesArray = sourceIds.map((sid) => [[sid]]);\n\n const params = [\n sourcesArray,\n query,\n history,\n [2, null, [1], [1]],\n conversationId,\n null,\n null,\n notebookId,\n 1,\n ];\n\n const paramsJson = JSON.stringify(params, null, 0);\n const fReq = JSON.stringify([null, paramsJson]);\n\n this.reqid += 100_000;\n const bl = (typeof process !== \"undefined\" && process.env[\"NOTEBOOKLM_BL\"]) || DEFAULT_BL;\n\n const urlParams = new URLSearchParams({ bl, hl: \"en\", _reqid: String(this.reqid), rt: \"c\" });\n if (this.auth.sessionId) urlParams.set(\"f.sid\", this.auth.sessionId);\n\n const bodyParts = [`f.req=${encodeURIComponent(fReq)}`];\n if (this.auth.csrfToken) bodyParts.push(`at=${encodeURIComponent(this.auth.csrfToken)}`);\n const body = bodyParts.join(\"&\") + \"&\";\n\n let response: Response;\n try {\n response = await fetch(`${QUERY_URL}?${urlParams.toString()}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n },\n body,\n });\n } catch (e) {\n throw new ChatError(`Chat request failed: ${String(e)}`);\n }\n\n if (!response.ok) throw new ChatError(`Chat request failed: HTTP ${response.status}`);\n\n const text = await response.text();\n const { answer, conversationId: serverConvId, references } = parseStreamingResponse(text);\n\n const finalConvId = serverConvId ?? conversationId;\n const cached = this.conversationCache.get(finalConvId) ?? [];\n const turnNumber = cached.length + 1;\n cached.push({ query, answer, turnNumber });\n this.conversationCache.set(finalConvId, cached);\n\n return { answer, conversationId: finalConvId, turnNumber, references };\n }\n\n async getConversationTurns(\n notebookId: string,\n conversationId: string,\n ): Promise<ConversationTurn[]> {\n // params: [[], null, null, conversation_id, limit]\n const params = [[], null, null, conversationId, 100];\n const result = await this.rpc.call(RPCMethod.GET_CONVERSATION_TURNS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (!Array.isArray(result) || !Array.isArray(result[0])) return [];\n\n // API returns individual turns newest-first; reverse to chronological\n const rawTurns = [...(result[0] as unknown[])].reverse();\n const turns: ConversationTurn[] = [];\n\n let i = 0;\n while (i < rawTurns.length) {\n const turn = rawTurns[i];\n if (!Array.isArray(turn) || turn.length < 3) {\n i++;\n continue;\n }\n if (turn[2] === 1 && turn.length > 3) {\n const q = typeof turn[3] === \"string\" ? (turn[3] as string) : \"\";\n let a = \"\";\n const next = rawTurns[i + 1];\n if (Array.isArray(next) && next.length > 4 && next[2] === 2) {\n try {\n a = String(((next[4] as unknown[][])[0] as unknown[])[0] ?? \"\");\n } catch {\n /* ignore */\n }\n i++;\n }\n turns.push({ query: q, answer: a, turnNumber: turns.length + 1 });\n }\n i++;\n }\n return turns;\n }\n\n async getLastConversationId(notebookId: string): Promise<string | null> {\n // params: [[], null, notebook_id, 1]\n const params = [[], null, notebookId, 1];\n const result = await this.rpc.call(RPCMethod.GET_LAST_CONVERSATION_ID, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n // Response structure: [[[conv_id]]]\n if (!Array.isArray(result)) return null;\n for (const group of result as unknown[]) {\n if (!Array.isArray(group)) continue;\n for (const conv of group as unknown[]) {\n if (Array.isArray(conv) && typeof (conv as unknown[])[0] === \"string\") {\n return (conv as unknown[])[0] as string;\n }\n }\n }\n return null;\n }\n\n /**\n * Low-level chat configuration. Set goal, response length, and optional\n * custom instructions directly. Persists on the server per notebook.\n * Use `setMode()` for preset combinations instead.\n */\n async configure(\n notebookId: string,\n goal: ChatGoalValue,\n length: ChatResponseLengthValue,\n customPrompt?: string,\n ): Promise<void> {\n if (goal === ChatGoal.CUSTOM && !customPrompt) {\n throw new Error(\"customPrompt is required when goal is ChatGoal.CUSTOM\");\n }\n const goalArray = goal === ChatGoal.CUSTOM ? [goal, customPrompt] : [goal];\n const chatSettings = [goalArray, [length]];\n const params = [notebookId, [[null, null, null, null, null, null, null, chatSettings]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n }\n\n /**\n * Set the chat mode for a notebook. Persists on the server — affects all\n * subsequent `ask()` calls until changed.\n */\n async setMode(notebookId: string, mode: ChatModeValue): Promise<void> {\n const [goal, length] = chatModeToParams(mode);\n const chatSettings = [[goal], [length]];\n const params = [notebookId, [[null, null, null, null, null, null, null, chatSettings]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n }\n\n clearCache(conversationId?: string): void {\n if (conversationId) {\n this.conversationCache.delete(conversationId);\n } else {\n this.conversationCache.clear();\n }\n }\n\n private _buildHistory(conversationId: string): unknown[] | null {\n const turns = this.conversationCache.get(conversationId) ?? [];\n if (!turns.length) return null;\n const history: unknown[] = [];\n for (const turn of turns) {\n history.push([turn.answer, null, 2]);\n history.push([turn.query, null, 1]);\n }\n return history;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\ninterface ParsedResponse {\n answer: string;\n conversationId: string | null;\n references: ChatReference[];\n}\n\nfunction parseStreamingResponse(rawText: string): ParsedResponse {\n let text = rawText;\n if (text.startsWith(\")]}'\")) text = text.slice(4);\n\n const lines = text.trim().split(\"\\n\");\n let bestMarkedAnswer = \"\";\n let bestUnmarkedAnswer = \"\";\n let serverConvId: string | null = null;\n const references: ChatReference[] = [];\n\n function processChunk(jsonStr: string): void {\n let data: unknown;\n try {\n data = JSON.parse(jsonStr);\n } catch {\n return;\n }\n if (!Array.isArray(data)) return;\n\n for (const item of data as unknown[]) {\n if (!Array.isArray(item) || item.length < 3 || (item as unknown[])[0] !== \"wrb.fr\") continue;\n const innerJson = (item as unknown[])[2];\n if (typeof innerJson !== \"string\") continue;\n\n let innerData: unknown;\n try {\n innerData = JSON.parse(innerJson);\n } catch {\n continue;\n }\n if (!Array.isArray(innerData) || !innerData.length) continue;\n\n const first = (innerData as unknown[])[0];\n if (!Array.isArray(first) || !first.length) continue;\n\n const answerText = (first as unknown[])[0];\n if (typeof answerText !== \"string\" || !answerText) continue;\n\n const typeInfo = (first as unknown[])[4];\n const isAnswer =\n Array.isArray(typeInfo) && typeInfo.length > 0 && typeInfo[typeInfo.length - 1] === 1;\n\n const convData = (first as unknown[])[2];\n if (\n !serverConvId &&\n Array.isArray(convData) &&\n convData.length > 0 &&\n typeof (convData as unknown[])[0] === \"string\"\n ) {\n serverConvId = (convData as unknown[])[0] as string;\n }\n\n // Extract references (sourceIds) from first[4][3]\n if (Array.isArray(typeInfo) && typeInfo.length > 3) {\n const citations = typeInfo[3];\n if (Array.isArray(citations)) {\n for (const cite of citations as unknown[]) {\n const sourceId = extractUuid(cite);\n if (sourceId) {\n references.push({ sourceId, title: null, url: null });\n }\n }\n }\n }\n\n if (isAnswer && answerText.length > bestMarkedAnswer.length) {\n bestMarkedAnswer = answerText;\n } else if (!isAnswer && answerText.length > bestUnmarkedAnswer.length) {\n bestUnmarkedAnswer = answerText;\n }\n }\n }\n\n let i = 0;\n while (i < lines.length) {\n const line = (lines[i] ?? \"\").trim();\n if (!line) {\n i++;\n continue;\n }\n if (/^\\d+$/.test(line)) {\n i++;\n const next = lines[i];\n if (next !== undefined) processChunk(next);\n i++;\n } else {\n processChunk(line);\n i++;\n }\n }\n\n return {\n answer: bestMarkedAnswer || bestUnmarkedAnswer,\n conversationId: serverConvId,\n references,\n };\n}\n\nfunction extractUuid(data: unknown, depth = 8): string | null {\n if (depth <= 0 || data == null) return null;\n if (typeof data === \"string\") return UUID_RE.test(data) ? data : null;\n if (Array.isArray(data)) {\n for (const item of data) {\n const found = extractUuid(item, depth - 1);\n if (found) return found;\n }\n }\n return null;\n}\n\nfunction randomUUID(): string {\n // Use Web Crypto API (available in Node 19+, Bun, Deno)\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n // Fallback: simple UUID v4\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport type { Notebook, NotebookDescription, SuggestedTopic } from \"../types/models.js\";\nimport { parseNotebook } from \"../types/models.js\";\n\nexport class NotebooksAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n async list(): Promise<Notebook[]> {\n const params = [null, 1, null, [2]];\n const result = await this.rpc.call(RPCMethod.LIST_NOTEBOOKS, params);\n if (!Array.isArray(result) || !result.length) return [];\n const raw = Array.isArray(result[0]) ? result[0] : result;\n return (raw as unknown[][]).map((nb) => parseNotebook(nb));\n }\n\n async create(title: string): Promise<Notebook> {\n const params = [title, null, null, [2], [1]];\n const result = await this.rpc.call(RPCMethod.CREATE_NOTEBOOK, params);\n return parseNotebook(result as unknown[]);\n }\n\n async get(notebookId: string): Promise<Notebook> {\n const params = [notebookId, null, [2], null, 0];\n const result = await this.rpc.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n const data = Array.isArray(result) && result.length ? result[0] : result;\n return parseNotebook(data as unknown[]);\n }\n\n async delete(notebookId: string): Promise<boolean> {\n const params = [[notebookId], [2]];\n await this.rpc.call(RPCMethod.DELETE_NOTEBOOK, params);\n return true;\n }\n\n async rename(notebookId: string, newTitle: string): Promise<Notebook> {\n const params = [notebookId, [[null, null, null, [null, newTitle]]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n return this.get(notebookId);\n }\n\n async getSummary(notebookId: string): Promise<string> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.SUMMARIZE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n try {\n if (Array.isArray(result)) {\n const val = (result as unknown[][][])[0]?.[0]?.[0];\n return typeof val === \"string\" ? val : \"\";\n }\n } catch {\n // ignore\n }\n return \"\";\n }\n\n async removeFromRecent(notebookId: string): Promise<void> {\n await this.rpc.call(RPCMethod.REMOVE_RECENTLY_VIEWED, [notebookId], { allowNull: true });\n }\n\n async getDescription(notebookId: string): Promise<NotebookDescription> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.SUMMARIZE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n let summary = \"\";\n const suggestedTopics: SuggestedTopic[] = [];\n\n try {\n if (Array.isArray(result)) {\n const outer = (result as unknown[][])[0];\n if (Array.isArray(outer)) {\n const summaryVal = (outer as unknown[][])[0]?.[0];\n if (typeof summaryVal === \"string\") summary = summaryVal;\n\n const topicsList = (outer as unknown[][])[1]?.[0];\n if (Array.isArray(topicsList)) {\n for (const t of topicsList as unknown[][]) {\n const question = typeof t[0] === \"string\" ? t[0] : \"\";\n const prompt = typeof t[1] === \"string\" ? t[1] : \"\";\n suggestedTopics.push({ question, prompt });\n }\n }\n }\n }\n } catch {\n // ignore\n }\n\n return { summary, suggestedTopics };\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport type { Note } from \"../types/models.js\";\n\nexport class NotesAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n async list(notebookId: string): Promise<Note[]> {\n const all = await this._fetchAll(notebookId);\n return all.filter((n) => !this._isMindMap(n.content));\n }\n\n async listMindMaps(notebookId: string): Promise<Note[]> {\n const all = await this._fetchAll(notebookId);\n return all.filter((n) => this._isMindMap(n.content));\n }\n\n async create(notebookId: string, content: string, title?: string): Promise<Note> {\n // CREATE_NOTE ignores content/title; creates an empty note and returns the ID.\n // We must call UPDATE_NOTE afterwards to set actual content and title.\n const createParams = [notebookId, \"\", [1], null, \"New Note\"];\n const result = await this.rpc.call(RPCMethod.CREATE_NOTE, createParams, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const noteId: string | null =\n Array.isArray(result) && Array.isArray(result[0]) && typeof result[0][0] === \"string\"\n ? (result[0][0] as string)\n : Array.isArray(result) && typeof result[0] === \"string\"\n ? (result[0] as string)\n : null;\n\n if (!noteId) throw new Error(\"CREATE_NOTE did not return a note ID\");\n\n await this.update(notebookId, noteId, content, title ?? \"New Note\");\n return { id: noteId, title: title ?? null, content, createdAt: null, updatedAt: new Date() };\n }\n\n async update(notebookId: string, noteId: string, content: string, title?: string): Promise<Note> {\n const params = [notebookId, noteId, [[[content, title ?? \"New Note\", [], 0]]]];\n await this.rpc.call(RPCMethod.UPDATE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return { id: noteId, title: title ?? null, content, createdAt: null, updatedAt: new Date() };\n }\n\n async delete(notebookId: string, noteId: string): Promise<boolean> {\n const params = [notebookId, null, [noteId]];\n await this.rpc.call(RPCMethod.DELETE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n private async _fetchAll(notebookId: string): Promise<Note[]> {\n const result = await this.rpc.call(RPCMethod.GET_NOTES_AND_MIND_MAPS, [notebookId], {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (!Array.isArray(result) || !Array.isArray(result[0])) return [];\n const notes: Note[] = [];\n for (const item of result[0] as unknown[][]) {\n if (!Array.isArray(item) || typeof item[0] !== \"string\") continue;\n if (item[1] === null && item[2] === 2) continue; // deleted\n const content = this._extractContent(item);\n notes.push(this._parseItem(item, notebookId, content));\n }\n return notes;\n }\n\n private _isMindMap(content: string): boolean {\n return content.includes('\"children\":') || content.includes('\"nodes\":');\n }\n\n private _extractContent(item: unknown[]): string {\n if (typeof item[1] === \"string\") return item[1];\n if (Array.isArray(item[1]) && typeof item[1][1] === \"string\") return item[1][1] as string;\n return \"\";\n }\n\n private _parseItem(item: unknown[], _notebookId: string, content: string): Note {\n // New format: item[1] is [note_id, content, metadata, null, title]\n // Old format: item[1] is a plain string (no title available)\n const inner = Array.isArray(item[1]) ? (item[1] as unknown[]) : null;\n const title = inner && typeof inner[4] === \"string\" && inner[4] ? (inner[4] as string) : null;\n const createdAt =\n Array.isArray(item[3]) && typeof item[3][0] === \"number\"\n ? new Date((item[3][0] as number) * 1000)\n : null;\n return { id: item[0] as string, title, content, createdAt, updatedAt: null };\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport { RPCMethod } from \"../types/enums.js\";\n\nexport interface ResearchTask {\n taskId: string;\n reportId: string | null;\n notebookId: string;\n query: string;\n mode: \"fast\" | \"deep\";\n}\n\nexport interface ResearchSource {\n url: string;\n title: string;\n /** 1=web, 2=drive, 5=deep research report */\n resultType: number;\n researchTaskId: string;\n /** Markdown content for deep research report entries (resultType=5) */\n reportMarkdown?: string;\n}\n\nexport interface ResearchResult {\n taskId: string | null;\n status: \"in_progress\" | \"completed\" | \"no_research\";\n query: string;\n sources: ResearchSource[];\n summary: string;\n report: string;\n tasks: ResearchResult[];\n}\n\nexport interface ImportedSource {\n id: string;\n title: string;\n}\n\nexport class ResearchAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /**\n * Start a research session.\n * @param source \"web\" or \"drive\"\n * @param mode \"fast\" or \"deep\" (deep only available for web)\n */\n async start(\n notebookId: string,\n query: string,\n source: \"web\" | \"drive\" = \"web\",\n mode: \"fast\" | \"deep\" = \"fast\",\n ): Promise<ResearchTask | null> {\n if (mode === \"deep\" && source === \"drive\") {\n throw new Error(\"Deep research only supports web sources.\");\n }\n\n const sourceType = source === \"web\" ? 1 : 2;\n\n let rpcId: RPCMethodId;\n let params: unknown[];\n if (mode === \"fast\") {\n rpcId = RPCMethod.START_FAST_RESEARCH;\n params = [[query, sourceType], null, 1, notebookId];\n } else {\n rpcId = RPCMethod.START_DEEP_RESEARCH;\n params = [null, [1], [query, sourceType], 5, notebookId];\n }\n\n const result = await this.rpc.call(rpcId, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (Array.isArray(result) && result.length > 0) {\n return {\n taskId: result[0] as string,\n reportId: result.length > 1 ? (result[1] as string) : null,\n notebookId,\n query,\n mode,\n };\n }\n return null;\n }\n\n /** Poll for current research results in a notebook. */\n async poll(notebookId: string): Promise<ResearchResult> {\n const params = [null, null, notebookId];\n let result = (await this.rpc.call(RPCMethod.POLL_RESEARCH, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n })) as unknown[];\n\n if (!Array.isArray(result) || !result.length) {\n return emptyResult();\n }\n\n // Unwrap if double-nested\n if (Array.isArray(result[0]) && Array.isArray((result[0] as unknown[])[0])) {\n result = result[0] as unknown[];\n }\n\n const parsedTasks: ResearchResult[] = [];\n\n for (const taskData of result) {\n if (!Array.isArray(taskData) || taskData.length < 2) continue;\n\n const taskId = taskData[0] as string;\n const taskInfo = taskData[1] as unknown[];\n if (typeof taskId !== \"string\" || !Array.isArray(taskInfo)) continue;\n\n const queryText = Array.isArray(taskInfo[1])\n ? (((taskInfo[1] as unknown[])[0] as string) ?? \"\")\n : \"\";\n const sourcesAndSummary = Array.isArray(taskInfo[3]) ? (taskInfo[3] as unknown[]) : [];\n const statusCode = typeof taskInfo[4] === \"number\" ? taskInfo[4] : null;\n\n const sourcesData = Array.isArray(sourcesAndSummary[0])\n ? (sourcesAndSummary[0] as unknown[])\n : [];\n const summary = typeof sourcesAndSummary[1] === \"string\" ? sourcesAndSummary[1] : \"\";\n\n const parsedSources: ResearchSource[] = [];\n let report = \"\";\n\n for (const src of sourcesData) {\n if (!Array.isArray(src) || src.length < 2) continue;\n\n let url = \"\";\n let title = \"\";\n let sourceReport = \"\";\n let resultType = parseResultType(src.length > 3 ? src[3] : 1);\n\n if (src[0] === null) {\n // Deep research entry\n if (\n Array.isArray(src[1]) &&\n src[1].length >= 2 &&\n typeof src[1][0] === \"string\" &&\n typeof src[1][1] === \"string\"\n ) {\n title = src[1][0] as string;\n sourceReport = src[1][1] as string;\n if (resultType === 1) resultType = 5;\n } else if (typeof src[1] === \"string\") {\n title = src[1] as string;\n if (resultType === 1) resultType = 5;\n }\n } else {\n // Fast research / web entry\n url = typeof src[0] === \"string\" ? src[0] : \"\";\n title = src.length > 1 && typeof src[1] === \"string\" ? src[1] : \"\";\n }\n\n if (title || url) {\n const parsed: ResearchSource = { url, title, resultType, researchTaskId: taskId };\n if (sourceReport) parsed.reportMarkdown = sourceReport;\n parsedSources.push(parsed);\n\n if (!report && sourceReport) {\n report = sourceReport;\n } else if (!report) {\n const legacyReport = extractLegacyReport(src);\n if (legacyReport) {\n report = legacyReport;\n parsed.reportMarkdown = legacyReport;\n }\n }\n }\n }\n\n // Research status codes: 1=in_progress, 2=completed, 6=completed (deep)\n const status = statusCode === 2 || statusCode === 6 ? \"completed\" : \"in_progress\";\n\n parsedTasks.push({\n taskId,\n status,\n query: queryText,\n sources: parsedSources,\n summary,\n report,\n tasks: [],\n });\n }\n\n if (parsedTasks.length > 0) {\n return { ...parsedTasks[0]!, tasks: parsedTasks };\n }\n return emptyResult();\n }\n\n /**\n * Import selected research sources into the notebook.\n * Pass sources from poll() — web sources need `url`, deep research report entries\n * need `reportMarkdown` (resultType=5).\n *\n * Note: The API may return fewer items than imported. Use sources.list() to verify.\n */\n async importSources(\n notebookId: string,\n taskId: string,\n sources: ResearchSource[],\n ): Promise<ImportedSource[]> {\n if (!sources.length) return [];\n\n // All sources must come from the same research task\n const taskIds = new Set(sources.map((s) => s.researchTaskId).filter(Boolean));\n if (taskIds.size > 1)\n throw new Error(\"Cannot import sources from multiple research tasks in one batch.\");\n const effectiveTaskId = taskIds.size === 1 ? [...taskIds][0]! : taskId;\n\n const reportSources = sources.filter((s) => s.resultType === 5 && s.title && s.reportMarkdown);\n const reportSourceSet = new Set(reportSources);\n const webSources = sources.filter((s) => s.url && !reportSourceSet.has(s));\n\n if (!webSources.length && !reportSources.length) return [];\n\n const sourceArray: unknown[] = [\n ...reportSources\n .filter((s) => s.reportMarkdown)\n .map((s) => buildReportEntry(s.title, s.reportMarkdown as string)),\n ...webSources.map((s) => buildWebEntry(s.url, s.title)),\n ];\n\n const params = [null, [1], effectiveTaskId, notebookId, sourceArray];\n let result = (await this.rpc.call(RPCMethod.IMPORT_RESEARCH, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n })) as unknown[];\n\n if (!Array.isArray(result)) return [];\n\n // Unwrap if double-nested\n if (\n result.length > 0 &&\n Array.isArray(result[0]) &&\n Array.isArray((result[0] as unknown[])[0])\n ) {\n result = result[0] as unknown[];\n }\n\n const imported: ImportedSource[] = [];\n for (const srcData of result) {\n if (!Array.isArray(srcData) || srcData.length < 2) continue;\n const first = srcData[0];\n const srcId = Array.isArray(first) && first.length > 0 ? (first[0] as string) : null;\n if (srcId) imported.push({ id: srcId, title: srcData[1] as string });\n }\n return imported;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction parseResultType(value: unknown): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n const aliases: Record<string, number> = { web: 1, drive: 2, report: 5 };\n return aliases[value.toLowerCase()] ?? 1;\n }\n return 1;\n}\n\nfunction extractLegacyReport(src: unknown[]): string {\n if (src.length <= 6 || !Array.isArray(src[6])) return \"\";\n return (src[6] as unknown[])\n .filter((c): c is string => typeof c === \"string\" && !!c)\n .join(\"\\n\\n\");\n}\n\nfunction buildReportEntry(title: string, markdown: string): unknown[] {\n return [null, [title, markdown], null, 3, null, null, null, null, null, null, 3];\n}\n\nfunction buildWebEntry(url: string, title: string): unknown[] {\n return [null, null, [url, title], null, null, null, null, null, null, null, 2];\n}\n\nfunction emptyResult(): ResearchResult {\n return {\n taskId: null,\n status: \"no_research\",\n query: \"\",\n sources: [],\n summary: \"\",\n report: \"\",\n tasks: [],\n };\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport { RPCMethod } from \"../types/enums.js\";\n\nexport class SettingsAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /** Get the current output language setting (e.g. \"en\", \"ja\", \"zh_Hans\"). */\n async getOutputLanguage(): Promise<string | null> {\n const params = [null, [1, null, null, null, null, null, null, null, null, null, [1]]];\n const result = await this.rpc.call(RPCMethod.GET_USER_SETTINGS, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n // result[0][2][4][0]\n return extractNested(result as unknown[], [0, 2, 4, 0]);\n }\n\n /**\n * Set the output language for artifact generation.\n * Pass a BCP-47 language code, e.g. \"en\", \"ja\", \"zh_Hans\".\n * Returns the language that was set, or null if the response couldn't be parsed.\n */\n async setOutputLanguage(language: string): Promise<string | null> {\n if (!language) return null;\n const params = [[[null, [[null, null, null, null, [language]]]]]];\n const result = await this.rpc.call(RPCMethod.SET_USER_SETTINGS, params, {\n sourcePath: \"/\",\n allowNull: true,\n });\n // result[2][4][0]\n return extractNested(result as unknown[], [2, 4, 0]);\n }\n}\n\nfunction extractNested(data: unknown, path: number[]): string | null {\n try {\n let cur: unknown = data;\n for (const idx of path) {\n if (!Array.isArray(cur)) return null;\n cur = cur[idx];\n }\n return typeof cur === \"string\" && cur ? cur : null;\n } catch {\n return null;\n }\n}\n","import type { RPCCore } from \"../rpc/core.js\";\nimport type {\n ShareAccessValue,\n SharePermissionValue,\n ShareViewLevelValue,\n} from \"../types/enums.js\";\nimport { RPCMethod, ShareAccess, SharePermission, ShareViewLevel } from \"../types/enums.js\";\nimport type { SharedUser, ShareStatus } from \"../types/models.js\";\n\nexport type { ShareAccessValue, SharePermissionValue, ShareViewLevelValue };\n\nexport class SharingAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n /** Get current sharing configuration for a notebook. */\n async getStatus(notebookId: string): Promise<ShareStatus> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.GET_SHARE_STATUS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return parseShareStatus(result as unknown[], notebookId);\n }\n\n /** Enable or disable public link sharing. Returns updated status. */\n async setPublic(notebookId: string, isPublic: boolean): Promise<ShareStatus> {\n const access = isPublic ? ShareAccess.ANYONE_WITH_LINK : ShareAccess.RESTRICTED;\n const params = [[[notebookId, null, [access], [access, \"\"]]], 1, null, [2]];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n\n /**\n * Set what viewers can access: full notebook or chat only.\n * Note: GET_SHARE_STATUS doesn't return view_level, so it's inferred from what was set.\n */\n async setViewLevel(notebookId: string, level: ShareViewLevelValue): Promise<ShareStatus> {\n const params = [notebookId, [[null, null, null, null, null, null, null, null, [[level]]]]];\n await this.rpc.call(RPCMethod.RENAME_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n const status = await this.getStatus(notebookId);\n return { ...status, viewLevel: level };\n }\n\n /** Share notebook with a user. Returns updated status. */\n async addUser(\n notebookId: string,\n email: string,\n permission: SharePermissionValue = SharePermission.VIEWER,\n opts: { notify?: boolean; welcomeMessage?: string } = {},\n ): Promise<ShareStatus> {\n if (permission === SharePermission.OWNER) throw new Error(\"Cannot assign OWNER permission\");\n if (permission === SharePermission._REMOVE) throw new Error(\"Use removeUser() instead\");\n\n const { notify = true, welcomeMessage = \"\" } = opts;\n const messageFlag = welcomeMessage ? 0 : 1;\n const notifyFlag = notify ? 1 : 0;\n\n const params = [\n [[notebookId, [[email, null, permission]], null, [messageFlag, welcomeMessage]]],\n notifyFlag,\n null,\n [2],\n ];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n\n /** Update an existing user's permission level. Returns updated status. */\n async updateUser(\n notebookId: string,\n email: string,\n permission: SharePermissionValue,\n ): Promise<ShareStatus> {\n return this.addUser(notebookId, email, permission, { notify: false });\n }\n\n /** Remove a user's access to the notebook. Returns updated status. */\n async removeUser(notebookId: string, email: string): Promise<ShareStatus> {\n const params = [\n [[notebookId, [[email, null, SharePermission._REMOVE]], null, [0, \"\"]]],\n 0,\n null,\n [2],\n ];\n await this.rpc.call(RPCMethod.SHARE_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return this.getStatus(notebookId);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\nconst PERM_MAP: Record<number, SharedUser[\"permission\"]> = {\n 1: \"owner\",\n 2: \"editor\",\n 3: \"viewer\",\n};\n\nfunction parseSharedUser(data: unknown[]): SharedUser {\n const email = typeof data[0] === \"string\" ? data[0] : \"\";\n const permCode = typeof data[1] === \"number\" ? data[1] : 3;\n const permission = PERM_MAP[permCode] ?? \"viewer\";\n\n let displayName: string | null = null;\n let avatarUrl: string | null = null;\n if (Array.isArray(data[3])) {\n const info = data[3] as unknown[];\n displayName = typeof info[0] === \"string\" ? info[0] : null;\n avatarUrl = typeof info[1] === \"string\" ? info[1] : null;\n }\n\n return { email, permission, displayName, avatarUrl };\n}\n\nfunction parseShareStatus(data: unknown[], notebookId: string): ShareStatus {\n // Response format: [[[user_entries...]], [is_public], 1000]\n const users: SharedUser[] = [];\n if (Array.isArray(data[0])) {\n for (const entry of data[0] as unknown[]) {\n if (Array.isArray(entry)) users.push(parseSharedUser(entry as unknown[]));\n }\n }\n\n const isPublic = Array.isArray(data[1]) && (data[1] as unknown[])[0] === true;\n const access = isPublic ? ShareAccess.ANYONE_WITH_LINK : ShareAccess.RESTRICTED;\n const shareUrl = isPublic ? `https://notebooklm.google.com/notebook/${notebookId}` : null;\n\n return {\n notebookId,\n isPublic,\n access,\n viewLevel: ShareViewLevel.FULL_NOTEBOOK,\n sharedUsers: users,\n shareUrl,\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport type { AuthTokens } from \"../auth.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type { DriveMimeTypeValue } from \"../types/enums.js\";\nimport { DriveMimeType, RPCMethod } from \"../types/enums.js\";\nimport { SourceProcessingError, SourceTimeoutError } from \"../types/errors.js\";\nimport type { Source, SourceFulltext, SourceGuide } from \"../types/models.js\";\nimport { parseSource } from \"../types/models.js\";\n\nconst UPLOAD_URL = \"https://notebooklm.google.com/upload/_/\";\n\nexport interface AddSourceOptions {\n waitUntilReady?: boolean;\n waitTimeout?: number;\n}\n\nexport class SourcesAPI {\n constructor(\n private readonly rpc: RPCCore,\n private readonly auth: AuthTokens,\n ) {}\n\n async list(notebookId: string): Promise<Source[]> {\n const params = [notebookId, null, [2], null, 0];\n const notebook = await this.rpc.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n if (!Array.isArray(notebook) || !notebook.length) return [];\n const nbInfo = notebook[0] as unknown[];\n if (!Array.isArray(nbInfo) || nbInfo.length <= 1) return [];\n const sourcesList = nbInfo[1] as unknown[][];\n if (!Array.isArray(sourcesList)) return [];\n\n return sourcesList\n .filter((s) => Array.isArray(s) && s.length > 0)\n .map((s) => parseSource(s as unknown[]));\n }\n\n async get(notebookId: string, sourceId: string): Promise<Source | null> {\n const sources = await this.list(notebookId);\n return sources.find((s) => s.id === sourceId) ?? null;\n }\n\n async addUrl(notebookId: string, url: string, opts: AddSourceOptions = {}): Promise<Source> {\n const isYouTube = url.includes(\"youtube.com\") || url.includes(\"youtu.be\");\n\n let params: unknown[];\n if (isYouTube) {\n params = [\n [[null, null, null, null, null, null, null, [url], null, null, 1]],\n notebookId,\n [2],\n [1, null, null, null, null, null, null, null, null, null, [1]],\n ];\n } else {\n params = [[[null, null, [url], null, null, null, null, null]], notebookId, [2], null, null];\n }\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: isYouTube,\n });\n\n const sourceId = extractSourceId(result);\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n return {\n id: sourceId,\n title: url,\n url,\n kind: \"web_page\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n async addText(\n notebookId: string,\n text: string,\n title?: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n // Pasted text uses ADD_SOURCE with a special format\n const params = [\n [[null, [title ?? \"\", text], null, null, null, null, null, null]],\n notebookId,\n [2],\n null,\n null,\n ];\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n const sourceId = extractSourceId(result);\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n return {\n id: sourceId,\n title: title ?? null,\n url: null,\n kind: \"pasted_text\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n async addDrive(\n notebookId: string,\n fileId: string,\n title: string,\n mimeType: DriveMimeTypeValue = DriveMimeType.GOOGLE_DOC,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n const sourceData = [\n [fileId, mimeType, 1, title],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n 1,\n ];\n const params = [\n [sourceData],\n notebookId,\n [2],\n [1, null, null, null, null, null, null, null, null, null, [1]],\n ];\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n const sourceId = extractSourceId(result);\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n return {\n id: sourceId,\n title,\n url: null,\n kind: \"unknown\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n async addFile(\n notebookId: string,\n filePath: string,\n mimeType: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n const fileData = readFileSync(filePath);\n const fileName = filePath.split(\"/\").pop() ?? \"file\";\n return this.addFileBuffer(notebookId, fileData, fileName, mimeType, opts);\n }\n\n async addFileBuffer(\n notebookId: string,\n data: Buffer | Uint8Array,\n fileName: string,\n _mimeType: string,\n opts: AddSourceOptions = {},\n ): Promise<Source> {\n // Step 1: Register file source intent to get SOURCE_ID\n const params = [\n [[fileName]],\n notebookId,\n [2],\n [1, null, null, null, null, null, null, null, null, null, [1]],\n ];\n\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE_FILE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n const sourceId = extractSourceId(result);\n\n // Step 2: Start resumable upload session\n const uploadUrl = await this.startResumableUpload(notebookId, fileName, data.length, sourceId);\n\n // Step 3: Stream/upload final file content\n await this.uploadFile(uploadUrl, data);\n\n if (opts.waitUntilReady) {\n return this.waitUntilReady(notebookId, sourceId, opts.waitTimeout);\n }\n\n return {\n id: sourceId,\n title: fileName,\n url: null,\n kind: \"pdf\", // Defaults to generic kind until ready\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n private async startResumableUpload(\n notebookId: string,\n fileName: string,\n fileSize: number,\n sourceId: string,\n ): Promise<string> {\n const startResp = await fetch(`${UPLOAD_URL}?authuser=0`, {\n method: \"POST\",\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n Origin: \"https://notebooklm.google.com\",\n Referer: \"https://notebooklm.google.com/\",\n \"x-goog-authuser\": \"0\",\n \"x-goog-upload-command\": \"start\",\n \"x-goog-upload-header-content-length\": String(fileSize),\n \"x-goog-upload-protocol\": \"resumable\",\n },\n body: JSON.stringify({\n PROJECT_ID: notebookId,\n SOURCE_NAME: fileName,\n SOURCE_ID: sourceId,\n }),\n });\n\n if (!startResp.ok) {\n throw new Error(`Upload initiation failed: HTTP ${startResp.status}`);\n }\n\n const uploadSessionUrl = startResp.headers.get(\"x-goog-upload-url\");\n if (!uploadSessionUrl) {\n throw new Error(\"Failed to get upload URL from response headers\");\n }\n\n return uploadSessionUrl;\n }\n\n private async uploadFile(uploadUrl: string, data: Buffer | Uint8Array): Promise<string> {\n const uploadResp = await fetch(uploadUrl, {\n method: \"POST\",\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=utf-8\",\n Cookie: this.auth.cookieHeader,\n Origin: \"https://notebooklm.google.com\",\n Referer: \"https://notebooklm.google.com/\",\n \"X-Goog-Upload-Command\": \"upload, finalize\",\n \"X-Goog-Upload-Offset\": \"0\",\n },\n body: new Uint8Array(data),\n });\n\n if (!uploadResp.ok) {\n throw new Error(`File upload failed: HTTP ${uploadResp.status}`);\n }\n\n const uploadResult = await uploadResp.text();\n return uploadResult.trim();\n }\n\n /** Get the AI-generated Source Guide (summary + keywords) for a source. */\n async getGuide(notebookId: string, sourceId: string): Promise<SourceGuide> {\n const params = [[[[sourceId]]]];\n const result = await this.rpc.call(RPCMethod.GET_SOURCE_GUIDE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n timeoutMs: 120_000,\n });\n\n let summary = \"\";\n let keywords: string[] = [];\n\n if (Array.isArray(result) && result.length > 0) {\n const outer = result[0];\n if (Array.isArray(outer) && outer.length > 0) {\n const inner = outer[0] as unknown[];\n if (Array.isArray(inner)) {\n if (inner.length > 1 && Array.isArray(inner[1]) && typeof inner[1][0] === \"string\") {\n summary = inner[1][0];\n }\n if (inner.length > 2 && Array.isArray(inner[2]) && Array.isArray(inner[2][0])) {\n keywords = (inner[2][0] as unknown[]).filter((k) => typeof k === \"string\") as string[];\n }\n }\n }\n }\n\n return { summary, keywords };\n }\n\n /** Get the full indexed text content of a source. */\n async getFulltext(notebookId: string, sourceId: string): Promise<SourceFulltext> {\n const params = [[sourceId], [2], [2]];\n const result = await this.rpc.call(RPCMethod.GET_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n\n if (!Array.isArray(result) || !result.length) {\n throw new Error(`Source ${sourceId} not found in notebook ${notebookId}`);\n }\n\n let title = \"\";\n let url: string | null = null;\n\n if (Array.isArray(result[0]) && result[0].length > 1) {\n title = typeof result[0][1] === \"string\" ? result[0][1] : \"\";\n const meta = result[0][2] as unknown[];\n if (\n Array.isArray(meta) &&\n meta.length > 7 &&\n Array.isArray(meta[7]) &&\n typeof meta[7][0] === \"string\"\n ) {\n url = meta[7][0];\n }\n }\n\n let content = \"\";\n if (Array.isArray(result[3]) && result[3].length > 0) {\n const texts = extractAllText(result[3][0] as unknown[]);\n content = texts.join(\"\\n\");\n }\n\n return { sourceId, title, content, url, charCount: content.length };\n }\n\n /** Check if a source has newer content available. Returns true if fresh, false if stale. */\n async checkFreshness(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [null, [sourceId], [2]];\n const result = await this.rpc.call(RPCMethod.CHECK_SOURCE_FRESHNESS, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n if (result === true) return true;\n if (result === false) return false;\n if (Array.isArray(result)) {\n if (result.length === 0) return true;\n const first = result[0];\n if (Array.isArray(first) && first.length > 1 && first[1] === true) return true;\n }\n return false;\n }\n\n async delete(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [notebookId, [sourceId], [2]];\n await this.rpc.call(RPCMethod.DELETE_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async refresh(notebookId: string, sourceId: string): Promise<boolean> {\n const params = [notebookId, sourceId, [2]];\n await this.rpc.call(RPCMethod.REFRESH_SOURCE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n\n async waitUntilReady(\n notebookId: string,\n sourceId: string,\n timeout = 120,\n initialInterval = 1,\n maxInterval = 10,\n backoffFactor = 1.5,\n ): Promise<Source> {\n const deadline = Date.now() + timeout * 1000;\n let interval = initialInterval;\n let lastStatus: number | undefined;\n\n while (Date.now() < deadline) {\n const source = await this.get(notebookId, sourceId);\n if (source) {\n if (source.status === \"ready\") return source;\n if (source.status === \"error\") {\n throw new SourceProcessingError(sourceId, 3);\n }\n lastStatus = source._typeCode ?? undefined;\n }\n\n await sleep(interval * 1000);\n interval = Math.min(interval * backoffFactor, maxInterval);\n }\n\n throw new SourceTimeoutError(sourceId, timeout, lastStatus);\n }\n}\n\nfunction extractSourceId(result: unknown): string {\n // Source ID appears in various positions depending on the RPC\n if (Array.isArray(result)) {\n // Navigate down the first elements to find the deeply nested ID\n // e.g., [[[[[\"id\"], ...]]]], [[[\"id\", title]]]\n let current: unknown = result;\n while (Array.isArray(current) && current.length > 0) {\n if (typeof current[0] === \"string\") {\n // Only return if it's a UUID-like string or long enough\n if (current[0].length > 8) {\n return current[0];\n }\n }\n current = current[0];\n }\n\n // Fallback flat search\n for (const item of result) {\n if (typeof item === \"string\" && item.length > 8) return item;\n }\n }\n if (typeof result === \"string\") return result;\n console.log(\"extractSourceId debug info: could not parse:\", JSON.stringify(result, null, 2));\n throw new Error(\"Could not extract source ID from API response\");\n}\n\nfunction extractAllText(data: unknown[], maxDepth = 100): string[] {\n if (maxDepth <= 0) return [];\n const texts: string[] = [];\n for (const item of data) {\n if (typeof item === \"string\" && item.length > 0) texts.push(item);\n else if (Array.isArray(item)) texts.push(...extractAllText(item, maxDepth - 1));\n }\n return texts;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","// Main client\n\n// API option types\nexport type {\n CreateAudioOptions,\n CreateDataTableOptions,\n CreateInfographicOptions,\n CreateQuizOptions,\n CreateReportOptions,\n CreateSlideDeckOptions,\n CreateVideoOptions,\n DataTableContent,\n} from \"./api/artifacts.js\";\n// API classes (for advanced users)\nexport { ArtifactsAPI } from \"./api/artifacts.js\";\nexport type { AskOptions } from \"./api/chat.js\";\nexport { ChatAPI } from \"./api/chat.js\";\nexport { NotebooksAPI } from \"./api/notebooks.js\";\nexport { NotesAPI } from \"./api/notes.js\";\nexport type {\n ImportedSource,\n ResearchResult,\n ResearchSource,\n ResearchTask,\n} from \"./api/research.js\";\nexport { ResearchAPI } from \"./api/research.js\";\nexport { SettingsAPI } from \"./api/settings.js\";\nexport { SharingAPI } from \"./api/sharing.js\";\nexport type { AddSourceOptions } from \"./api/sources.js\";\nexport { SourcesAPI } from \"./api/sources.js\";\nexport type { AuthTokens, ConnectOptions, CookieMap } from \"./auth.js\";\n// Auth\nexport { connect } from \"./auth.js\";\nexport type { ClientOptions } from \"./client.js\";\nexport { NotebookLMClient } from \"./client.js\";\nexport type {\n AudioFormatValue,\n AudioLengthValue,\n ChatGoalValue,\n ChatModeValue,\n ChatResponseLengthValue,\n DriveMimeTypeValue,\n ExportTypeValue,\n InfographicDetailValue,\n InfographicOrientationValue,\n InfographicStyleValue,\n QuizDifficultyValue,\n QuizQuantityValue,\n RPCMethodId,\n ShareAccessValue,\n SharePermissionValue,\n ShareViewLevelValue,\n SlideDeckFormatValue,\n SlideDeckLengthValue,\n VideoFormatValue,\n VideoStyleValue,\n} from \"./types/enums.js\";\n// Enums (const objects)\nexport {\n ArtifactTypeCode,\n AudioFormat,\n AudioLength,\n ChatGoal,\n ChatMode,\n ChatResponseLength,\n DriveMimeType,\n ExportType,\n InfographicDetail,\n InfographicOrientation,\n InfographicStyle,\n QuizDifficulty,\n QuizQuantity,\n RPCMethod,\n ShareAccess,\n SharePermission,\n ShareViewLevel,\n SlideDeckFormat,\n SlideDeckLength,\n VideoFormat,\n VideoStyle,\n} from \"./types/enums.js\";\n// Errors\nexport {\n ArtifactDownloadError,\n ArtifactError,\n ArtifactNotFoundError,\n ArtifactNotReadyError,\n ArtifactParseError,\n AuthError,\n ChatError,\n ClientError,\n NetworkError,\n NotebookError,\n NotebookLMError,\n NotebookNotFoundError,\n RateLimitError,\n RPCError,\n RPCTimeoutError,\n ServerError,\n SourceAddError,\n SourceError,\n SourceNotFoundError,\n SourceProcessingError,\n SourceTimeoutError,\n} from \"./types/errors.js\";\n// Types / models\nexport type {\n Artifact,\n ArtifactStatus,\n ArtifactType,\n AskResult,\n ChatReference,\n ConversationTurn,\n GenerationStatus,\n Note,\n Notebook,\n NotebookDescription,\n NotebookMetadata,\n ReportSuggestion,\n SharedUser,\n ShareStatus,\n Source,\n SourceFulltext,\n SourceGuide,\n SourceStatus,\n SourceSummary,\n SourceType,\n SuggestedTopic,\n} from \"./types/models.js\";\n","import { ArtifactsAPI } from \"./api/artifacts.js\";\nimport { ChatAPI } from \"./api/chat.js\";\nimport { NotebooksAPI } from \"./api/notebooks.js\";\nimport { NotesAPI } from \"./api/notes.js\";\nimport { ResearchAPI } from \"./api/research.js\";\nimport { SettingsAPI } from \"./api/settings.js\";\nimport { SharingAPI } from \"./api/sharing.js\";\nimport { SourcesAPI } from \"./api/sources.js\";\nimport type { AuthTokens, ConnectOptions } from \"./auth.js\";\nimport { connect } from \"./auth.js\";\nimport { RPCCore } from \"./rpc/core.js\";\n\nexport interface ClientOptions {\n /** HTTP request timeout in milliseconds. Default: 30000 */\n timeoutMs?: number;\n}\n\n/**\n * NotebookLM SDK client.\n *\n * @example\n * ```ts\n * // After running `npx notebooklm-sdk login` once:\n * const client = await NotebookLMClient.connect();\n * const notebooks = await client.notebooks.list();\n *\n * // Or with explicit credentials:\n * const client = await NotebookLMClient.connect({ cookiesFile: './session.json' });\n * ```\n */\nexport class NotebookLMClient {\n readonly notebooks: NotebooksAPI;\n readonly sources: SourcesAPI;\n readonly artifacts: ArtifactsAPI;\n readonly chat: ChatAPI;\n readonly notes: NotesAPI;\n readonly research: ResearchAPI;\n readonly settings: SettingsAPI;\n readonly sharing: SharingAPI;\n\n private constructor(\n private readonly auth: AuthTokens,\n opts: ClientOptions = {},\n ) {\n const rpc = new RPCCore(auth, opts.timeoutMs);\n this.notebooks = new NotebooksAPI(rpc);\n this.sources = new SourcesAPI(rpc, auth);\n this.notes = new NotesAPI(rpc);\n this.artifacts = new ArtifactsAPI(rpc, auth, this.notes);\n this.chat = new ChatAPI(rpc, auth);\n this.research = new ResearchAPI(rpc);\n this.settings = new SettingsAPI(rpc);\n this.sharing = new SharingAPI(rpc);\n }\n\n /**\n * Connect to NotebookLM using cookies.\n * Fetches CSRF and session tokens from the NotebookLM homepage.\n */\n static async connect(\n opts: ConnectOptions = {},\n clientOpts: ClientOptions = {},\n ): Promise<NotebookLMClient> {\n const auth = await connect(opts);\n return new NotebookLMClient(auth, clientOpts);\n }\n\n /**\n * Refresh CSRF and session tokens (e.g. if they expire mid-session).\n */\n async refreshTokens(): Promise<void> {\n const { fetchTokens } = await import(\"./auth.js\");\n const { csrfToken, sessionId } = await fetchTokens(this.auth.cookies);\n (this.auth as { csrfToken: string }).csrfToken = csrfToken;\n (this.auth as { sessionId: string }).sessionId = sessionId;\n }\n}\n","import type { AuthTokens } from \"../auth.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport {\n AuthError,\n ClientError,\n NetworkError,\n RateLimitError,\n RPCError,\n RPCTimeoutError,\n ServerError,\n} from \"../types/errors.js\";\nimport { decodeResponse } from \"./decoder.js\";\nimport { buildRequestBody, buildUrlParams, encodeRPCRequest } from \"./encoder.js\";\n\nconst BATCHEXECUTE_URL = \"https://notebooklm.google.com/_/LabsTailwindUi/data/batchexecute\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport interface RPCCallOptions {\n sourcePath?: string;\n allowNull?: boolean;\n timeoutMs?: number;\n}\n\nexport class RPCCore {\n private readonly auth: AuthTokens;\n private readonly timeoutMs: number;\n\n constructor(auth: AuthTokens, timeoutMs = DEFAULT_TIMEOUT_MS) {\n this.auth = auth;\n this.timeoutMs = timeoutMs;\n }\n\n async call(\n methodId: RPCMethodId,\n params: unknown[],\n opts: RPCCallOptions = {},\n ): Promise<unknown> {\n const sourcePath = opts.sourcePath ?? \"/\";\n const allowNull = opts.allowNull ?? false;\n const timeoutMs = opts.timeoutMs ?? this.timeoutMs;\n\n const rpcRequest = encodeRPCRequest(methodId, params);\n const body = buildRequestBody(rpcRequest, this.auth.csrfToken);\n const urlParams = buildUrlParams(methodId, this.auth.sessionId, sourcePath);\n const url = `${BATCHEXECUTE_URL}?${urlParams.toString()}`;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n Cookie: this.auth.cookieHeader,\n },\n body,\n signal: controller.signal,\n });\n } catch (e) {\n clearTimeout(timer);\n if (e instanceof Error && e.name === \"AbortError\") {\n throw new RPCTimeoutError(`Request timed out calling ${methodId}`, {\n methodId,\n originalError: e,\n });\n }\n throw new NetworkError(`Request failed calling ${methodId}: ${String(e)}`, {\n methodId,\n originalError: e instanceof Error ? e : undefined,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const status = response.status;\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"retry-after\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(`API rate limit exceeded calling ${methodId}`, {\n methodId,\n retryAfter: isNaN(retryAfter ?? NaN) ? undefined : retryAfter,\n });\n }\n if (status === 401 || status === 403) {\n throw new AuthError(`HTTP ${status} calling ${methodId}: authentication required`, {\n methodId,\n });\n }\n if (status >= 500) {\n throw new ServerError(`Server error ${status} calling ${methodId}`, {\n methodId,\n statusCode: status,\n });\n }\n if (status >= 400) {\n throw new ClientError(`Client error ${status} calling ${methodId}`, {\n methodId,\n statusCode: status,\n });\n }\n throw new RPCError(`HTTP ${status} calling ${methodId}`, { methodId });\n }\n\n const text = await response.text();\n return decodeResponse(text, methodId, allowNull);\n }\n\n /** Extract source IDs from a notebook (used by chat/artifact APIs). */\n async getSourceIds(notebookId: string): Promise<string[]> {\n const params = [notebookId, null, [2], null, 0];\n // Inline import to avoid circular — use same methodId constant\n const { RPCMethod } = await import(\"../types/enums.js\");\n const data = await this.call(RPCMethod.GET_NOTEBOOK, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n const sourceIds: string[] = [];\n if (!Array.isArray(data) || !data.length) return sourceIds;\n\n try {\n const nbInfo = data[0] as unknown[];\n if (!Array.isArray(nbInfo) || nbInfo.length <= 1) return sourceIds;\n const sources = nbInfo[1] as unknown[];\n if (!Array.isArray(sources)) return sourceIds;\n for (const src of sources) {\n if (!Array.isArray(src) || !src.length) continue;\n const first = src[0];\n if (Array.isArray(first) && first.length > 0 && typeof first[0] === \"string\") {\n sourceIds.push(first[0] as string);\n }\n }\n } catch {\n // ignore parse errors\n }\n return sourceIds;\n }\n}\n","import { RateLimitError, RPCError } from \"../types/errors.js\";\n\n/**\n * Strip Google's anti-XSSI prefix: )]}'\\n\n */\nexport function stripAntiXSSI(response: string): string {\n if (response.startsWith(\")]}'\")) {\n const match = /\\)\\]\\}'\\r?\\n/.exec(response);\n if (match) return response.slice(match[0].length);\n }\n return response;\n}\n\n/**\n * Parse chunked batchexecute response (rt=c mode).\n * Format: alternating byte_count lines and JSON payload lines.\n */\nexport function parseChunkedResponse(response: string): unknown[][] {\n if (!response || !response.trim()) return [];\n\n const chunks: unknown[][] = [];\n let skippedCount = 0;\n const lines = response.trim().split(\"\\n\");\n let i = 0;\n\n while (i < lines.length) {\n const line = (lines[i] ?? \"\").trim();\n\n if (!line) {\n i++;\n continue;\n }\n\n // Try to parse as byte count (pure digits line)\n if (/^\\d+$/.test(line)) {\n i++;\n if (i < lines.length) {\n try {\n const chunk = JSON.parse(lines[i] ?? \"\");\n chunks.push(chunk as unknown[][]);\n } catch {\n skippedCount++;\n }\n }\n i++;\n } else {\n // Try to parse directly as JSON\n try {\n const chunk = JSON.parse(line);\n chunks.push(chunk as unknown[][]);\n } catch {\n skippedCount++;\n }\n i++;\n }\n }\n\n if (skippedCount > 0 && lines.length > 0) {\n const errorRate = skippedCount / lines.length;\n if (errorRate > 0.1) {\n throw new RPCError(\n `Response parsing failed: ${skippedCount} of ${lines.length} chunks malformed`,\n { rawResponse: response.slice(0, 500) },\n );\n }\n }\n\n return chunks;\n}\n\nfunction containsUserDisplayableError(obj: unknown): boolean {\n if (typeof obj === \"string\") return obj.includes(\"UserDisplayableError\");\n if (Array.isArray(obj)) return obj.some(containsUserDisplayableError);\n if (obj !== null && typeof obj === \"object\") {\n return Object.values(obj as Record<string, unknown>).some(containsUserDisplayableError);\n }\n return false;\n}\n\n/**\n * Collect all RPC IDs found in response chunks (for debugging).\n */\nexport function collectRPCIds(chunks: unknown[][]): string[] {\n const ids: string[] = [];\n for (const chunk of chunks) {\n if (!Array.isArray(chunk)) continue;\n const items: unknown[] = Array.isArray(chunk[0]) ? (chunk as unknown[][]) : [chunk];\n for (const item of items) {\n if (!Array.isArray(item) || item.length < 2) continue;\n if ((item[0] === \"wrb.fr\" || item[0] === \"er\") && typeof item[1] === \"string\") {\n ids.push(item[1] as string);\n }\n }\n }\n return ids;\n}\n\n/**\n * Extract the result for a specific RPC ID from parsed chunks.\n * Returns undefined if not found.\n */\nexport function extractRPCResult(chunks: unknown[][], rpcId: string): unknown {\n for (const chunk of chunks) {\n if (!Array.isArray(chunk)) continue;\n const items: unknown[][] = Array.isArray(chunk[0])\n ? (chunk as unknown[][])\n : [chunk as unknown[]];\n\n for (const item of items) {\n if (!Array.isArray(item) || item.length < 3) continue;\n\n if (item[0] === \"er\" && item[1] === rpcId) {\n const code = item[2] as string | number | undefined;\n let msg = \"Unknown error\";\n if (typeof code === \"number\") {\n if (code === 429) msg = \"API rate limit exceeded. Please wait before retrying.\";\n else if (code === 401 || code === 403) msg = \"Authentication required or forbidden.\";\n else if (code === 404) msg = \"Resource not found.\";\n else if (code >= 500) msg = `Server error ${code}. Try again later.`;\n else msg = `Error code: ${code}`;\n } else if (typeof code === \"string\") {\n msg = code;\n }\n throw new RPCError(msg, { methodId: rpcId, rpcCode: code });\n }\n\n if (item[0] === \"wrb.fr\" && item[1] === rpcId) {\n const resultData = item[2];\n\n // Check for UserDisplayableError (rate limit / quota)\n if (resultData === null && item.length > 5 && item[5] != null) {\n if (containsUserDisplayableError(item[5])) {\n throw new RateLimitError(\n \"API rate limit or quota exceeded. Please wait before retrying.\",\n { methodId: rpcId, rpcCode: \"USER_DISPLAYABLE_ERROR\" },\n );\n }\n }\n\n if (typeof resultData === \"string\") {\n try {\n return JSON.parse(resultData);\n } catch {\n return resultData;\n }\n }\n if (resultData === null) {\n console.log(\n \"decodeResponse debug info: resultData is exactly null. Full item Array:\",\n JSON.stringify(item),\n );\n }\n return resultData;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Full decode pipeline: strip prefix → parse chunks → extract result.\n */\nexport function decodeResponse(rawResponse: string, rpcId: string, allowNull = false): unknown {\n const cleaned = stripAntiXSSI(rawResponse);\n const chunks = parseChunkedResponse(cleaned);\n const responsePreview = cleaned.slice(0, 500);\n const foundIds = collectRPCIds(chunks);\n\n let result: unknown;\n try {\n result = extractRPCResult(chunks, rpcId);\n } catch (e) {\n if (e instanceof RPCError && e.foundIds.length === 0) {\n throw new RPCError(e.message, {\n methodId: e.methodId,\n rpcCode: e.rpcCode,\n foundIds,\n rawResponse: responsePreview,\n });\n }\n throw e;\n }\n\n if (result === undefined && !allowNull) {\n if (foundIds.length > 0 && !foundIds.includes(rpcId)) {\n throw new RPCError(\n `No result for RPC ID '${rpcId}'. Response has IDs: ${foundIds.join(\", \")}. Method ID may have changed.`,\n { methodId: rpcId, foundIds, rawResponse: responsePreview },\n );\n }\n throw new RPCError(`No result found for RPC ID: ${rpcId} (${chunks.length} chunks parsed)`, {\n methodId: rpcId,\n foundIds,\n rawResponse: responsePreview,\n });\n }\n\n return result ?? null;\n}\n","import type { RPCMethodId } from \"../types/enums.js\";\n\n/**\n * Encode RPC params into batchexecute triple-nested format.\n * Result: [[[rpcId, JSON.stringify(params), null, \"generic\"]]]\n */\nexport function encodeRPCRequest(methodId: RPCMethodId, params: unknown[]): unknown[][][] {\n const paramsJson = JSON.stringify(params);\n return [[[methodId, paramsJson, null, \"generic\"]]];\n}\n\n/**\n * Build URL-encoded request body for batchexecute.\n * Format: f.req=<encoded>&at=<csrf>&\n */\nexport function buildRequestBody(rpcRequest: unknown, csrfToken: string): string {\n const fReq = encodeURIComponent(JSON.stringify(rpcRequest));\n const at = encodeURIComponent(csrfToken);\n return `f.req=${fReq}&at=${at}&`;\n}\n\n/**\n * Build URL query params for a batchexecute call.\n */\nexport function buildUrlParams(\n methodId: RPCMethodId,\n sessionId: string,\n sourcePath = \"/\",\n): URLSearchParams {\n return new URLSearchParams({\n rpcids: methodId,\n \"source-path\": sourcePath,\n \"f.sid\": sessionId,\n hl: \"en\",\n rt: \"c\",\n });\n}\n"]}