notebooklm-sdk 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +249 -0
- package/dist/errors.cjs +193 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +134 -0
- package/dist/errors.d.ts +134 -0
- package/dist/errors.js +171 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.cjs +2390 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +578 -0
- package/dist/index.d.ts +578 -0
- package/dist/index.js +2379 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/errors.ts","../src/auth.ts","../src/types/enums.ts","../src/client.ts","../src/rpc/core.ts","../src/rpc/encoder.ts","../src/rpc/decoder.ts","../src/api/notebooks.ts","../src/types/models.ts","../src/api/sources.ts","../src/api/artifacts.ts","../src/api/chat.ts","../src/api/notes.ts","../src/api/research.ts","../src/api/settings.ts","../src/api/sharing.ts","../src/index.ts"],"names":["RPCMethod","readFileSync","sleep","fetchTokens"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 { readFileSync } from \"node:fs\";\nimport { AuthError } from \"./types/errors.js\";\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(\n `Cookie file not found: ${filePath}\\n` + \"Provide valid Playwright storage state JSON.\",\n );\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. \" +\n \"Provide valid Playwright storage state with Google cookies.\",\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(\"Authentication expired or invalid. Cookies may need to be refreshed.\");\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(\"Authentication expired or invalid. Cookies may need to be refreshed.\");\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 // Fallback: check environment variable\n const envCookies = process.env[\"NOTEBOOKLM_COOKIES\"];\n if (envCookies) {\n cookieMap = loadCookiesFromString(envCookies);\n } else {\n throw new AuthError(\n \"No cookies provided. Pass cookies, cookiesFile, or cookiesObject to connect().\",\n );\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","/** 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// 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","import { connect } from \"./auth.js\";\nimport type { AuthTokens, ConnectOptions } from \"./auth.js\";\nimport { RPCCore } from \"./rpc/core.js\";\nimport { NotebooksAPI } from \"./api/notebooks.js\";\nimport { SourcesAPI } from \"./api/sources.js\";\nimport { ArtifactsAPI } from \"./api/artifacts.js\";\nimport { ChatAPI } from \"./api/chat.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\";\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 * const client = await NotebookLMClient.connect({\n * cookies: process.env.NOTEBOOKLM_COOKIES,\n * });\n * const notebooks = await client.notebooks.list();\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.artifacts = new ArtifactsAPI(rpc, auth);\n this.chat = new ChatAPI(rpc, auth);\n this.notes = new NotesAPI(rpc);\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 {\n AuthError,\n ClientError,\n NetworkError,\n RPCError,\n RPCTimeoutError,\n RateLimitError,\n ServerError,\n} from \"../types/errors.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport type { AuthTokens } from \"../auth.js\";\nimport { buildRequestBody, buildUrlParams, encodeRPCRequest } from \"./encoder.js\";\nimport { decodeResponse } from \"./decoder.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 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","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 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 { RPCMethod } from \"../types/enums.js\";\nimport type { Notebook, NotebookDescription, SuggestedTopic } from \"../types/models.js\";\nimport { parseNotebook } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.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 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 {\n ArtifactStatus,\n ArtifactType,\n SourceStatus,\n SourceType,\n artifactStatusFromCode,\n artifactTypeFromCode,\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 text: string;\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 MindMap {\n id: string;\n title: string | null;\n content: string;\n createdAt: Date | null;\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 { readFileSync } from \"node:fs\";\nimport { RPCMethod } from \"../types/enums.js\";\nimport { SourceProcessingError, SourceTimeoutError } from \"../types/errors.js\";\nimport { parseSource } from \"../types/models.js\";\nimport type { Source } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type { AuthTokens } from \"../auth.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 params = [notebookId, [[url]], null, null, [2]];\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: 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 = [notebookId, null, [[null, null, null, text, title ?? null]], null, [2]];\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: Upload file\n const uploadUrl = await this.uploadFile(notebookId, data, fileName, mimeType);\n\n // Step 2: Register as source\n const params = [notebookId, null, null, [[uploadUrl, fileName, mimeType]], [2]];\n const result = await this.rpc.call(RPCMethod.ADD_SOURCE_FILE, 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: fileName,\n url: null,\n kind: \"pdf\",\n createdAt: null,\n status: \"processing\",\n _typeCode: null,\n };\n }\n\n private async uploadFile(\n notebookId: string,\n data: Buffer | Uint8Array,\n fileName: string,\n mimeType: string,\n ): Promise<string> {\n const params = new URLSearchParams({\n \"source-path\": `/notebook/${notebookId}`,\n upload_id: `${Date.now()}`,\n upload_protocol: \"resumable\",\n });\n\n // Initiate resumable upload\n const initResp = await fetch(`${UPLOAD_URL}?${params}`, {\n method: \"POST\",\n headers: {\n Cookie: this.auth.cookieHeader,\n \"X-Goog-Upload-Command\": \"start\",\n \"X-Goog-Upload-Header-Content-Length\": String(data.length),\n \"X-Goog-Upload-Header-Content-Type\": mimeType,\n \"X-Upload-Content-Type\": mimeType,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ title: fileName }),\n });\n\n if (!initResp.ok) {\n throw new Error(`Upload initiation failed: HTTP ${initResp.status}`);\n }\n\n const uploadSessionUrl = initResp.headers.get(\"x-goog-upload-url\") ?? `${UPLOAD_URL}?${params}`;\n\n // Upload the file data\n const uploadResp = await fetch(uploadSessionUrl, {\n method: \"POST\",\n headers: {\n Cookie: this.auth.cookieHeader,\n \"X-Goog-Upload-Command\": \"upload, finalize\",\n \"X-Goog-Upload-Offset\": \"0\",\n \"Content-Type\": mimeType,\n \"Content-Length\": String(data.length),\n },\n body: data instanceof Buffer ? (data.buffer as ArrayBuffer) : (data.buffer as ArrayBuffer),\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 // The response contains the file URL\n return uploadResult.trim();\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 // Try result[0][0][0] or result[0][0][0][0] pattern\n try {\n const v0 = result[0];\n if (Array.isArray(v0)) {\n const v00 = v0[0];\n if (Array.isArray(v00)) {\n const v000 = v00[0];\n if (Array.isArray(v000) && typeof v000[0] === \"string\") return v000[0];\n if (typeof v000 === \"string\") return v000;\n }\n if (typeof v00 === \"string\") return v00;\n }\n if (typeof v0 === \"string\") return v0;\n } catch {\n // ignore\n }\n // Flat string in result\n for (const item of result as unknown[]) {\n if (typeof item === \"string\" && item.length > 8) return item;\n }\n }\n if (typeof result === \"string\") return result;\n throw new Error(\"Could not extract source ID from API response\");\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import {\n AudioFormat,\n AudioLength,\n ArtifactTypeCode,\n InfographicDetail,\n InfographicOrientation,\n InfographicStyle,\n QuizDifficulty,\n QuizQuantity,\n RPCMethod,\n SlideDeckFormat,\n SlideDeckLength,\n VideoFormat,\n VideoStyle,\n artifactStatusFromCode,\n} from \"../types/enums.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 { ArtifactNotReadyError } from \"../types/errors.js\";\nimport { parseArtifact } from \"../types/models.js\";\nimport type { Artifact, GenerationStatus } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type { AuthTokens } from \"../auth.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 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 ) {}\n\n async list(notebookId: string): Promise<Artifact[]> {\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\n if (!Array.isArray(result) || !result.length) return [];\n const rawList = Array.isArray(result[0]) ? (result[0] as unknown[][]) : (result as unknown[][]);\n\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 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 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<GenerationStatus> {\n const ids = sourceIds ?? (await this.rpc.getSourceIds(notebookId));\n const triple = tripleNest(ids);\n\n // Mind map uses GENERATE_MIND_MAP RPC with a completely different param layout\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 return this._parseGenerationResult(result);\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 // ---------------------------------------------------------------------------\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 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 { RPCMethod } from \"../types/enums.js\";\nimport { ChatError } from \"../types/errors.js\";\nimport type { AskResult, ChatReference, ConversationTurn } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\nimport type { AuthTokens } from \"../auth.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 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 { RPCMethod } from \"../types/enums.js\";\nimport { parseNote } from \"../types/models.js\";\nimport type { MindMap, Note } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.js\";\n\nexport class NotesAPI {\n constructor(private readonly rpc: RPCCore) {}\n\n async list(notebookId: string): Promise<{ notes: Note[]; mindMaps: MindMap[] }> {\n const params = [notebookId, [2]];\n const result = await this.rpc.call(RPCMethod.GET_NOTES_AND_MIND_MAPS, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n const notes: Note[] = [];\n const mindMaps: MindMap[] = [];\n\n if (!Array.isArray(result)) return { notes, mindMaps };\n\n try {\n // Notes at result[0], mind maps at result[1]\n const notesData = result[0] as unknown[][];\n if (Array.isArray(notesData)) {\n for (const n of notesData) {\n if (Array.isArray(n)) notes.push(parseNote(n));\n }\n }\n\n const mapsData = result[1] as unknown[][];\n if (Array.isArray(mapsData)) {\n for (const m of mapsData) {\n if (Array.isArray(m)) {\n mindMaps.push({\n id: typeof m[0] === \"string\" ? (m[0] as string) : \"\",\n title: typeof m[2] === \"string\" ? (m[2] as string) : null,\n content: typeof m[1] === \"string\" ? (m[1] as string) : \"\",\n createdAt:\n Array.isArray(m[3]) && typeof m[3][0] === \"number\"\n ? new Date((m[3][0] as number) * 1000)\n : null,\n });\n }\n }\n }\n } catch {\n // ignore parse errors\n }\n\n return { notes, mindMaps };\n }\n\n async create(notebookId: string, content: string, title?: string): Promise<Note> {\n const params = [notebookId, content, title ?? null, [2]];\n const result = await this.rpc.call(RPCMethod.CREATE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n if (Array.isArray(result)) return parseNote(result as unknown[]);\n throw new Error(\"Could not parse note creation response\");\n }\n\n async update(notebookId: string, noteId: string, content: string, title?: string): Promise<Note> {\n const params = [notebookId, noteId, content, title ?? null, [2]];\n const result = await this.rpc.call(RPCMethod.UPDATE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n });\n\n if (Array.isArray(result)) return parseNote(result as unknown[]);\n // If update returns null/void, return a stub\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, noteId, [2]];\n await this.rpc.call(RPCMethod.DELETE_NOTE, params, {\n sourcePath: `/notebook/${notebookId}`,\n allowNull: true,\n });\n return true;\n }\n}\n","import { RPCMethod } from \"../types/enums.js\";\nimport type { RPCMethodId } from \"../types/enums.js\";\nimport type { RPCCore } from \"../rpc/core.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.map((s) => buildReportEntry(s.title, s.reportMarkdown!)),\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 { RPCMethod } from \"../types/enums.js\";\nimport type { RPCCore } from \"../rpc/core.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 { RPCMethod, ShareAccess, SharePermission, ShareViewLevel } from \"../types/enums.js\";\nimport type {\n ShareAccessValue,\n SharePermissionValue,\n ShareViewLevelValue,\n} from \"../types/enums.js\";\nimport type { SharedUser, ShareStatus } from \"../types/models.js\";\nimport type { RPCCore } from \"../rpc/core.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","// Main client\nexport { NotebookLMClient } from \"./client.js\";\nexport type { ClientOptions } from \"./client.js\";\n\n// Auth\nexport { connect } from \"./auth.js\";\nexport type { AuthTokens, ConnectOptions, CookieMap } from \"./auth.js\";\n\n// Types / models\nexport type {\n Artifact,\n ArtifactStatus,\n ArtifactType,\n AskResult,\n ChatReference,\n ConversationTurn,\n GenerationStatus,\n MindMap,\n Note,\n Notebook,\n NotebookDescription,\n NotebookMetadata,\n ShareStatus,\n SharedUser,\n Source,\n SourceStatus,\n SourceSummary,\n SourceType,\n SuggestedTopic,\n} from \"./types/models.js\";\n\n// Enums (const objects)\nexport {\n AudioFormat,\n AudioLength,\n ArtifactTypeCode,\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\nexport type {\n AudioFormatValue,\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\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 RPCError,\n RPCTimeoutError,\n RateLimitError,\n ServerError,\n SourceAddError,\n SourceError,\n SourceNotFoundError,\n SourceProcessingError,\n SourceTimeoutError,\n} from \"./types/errors.js\";\n\n// API classes (for advanced users)\nexport { ArtifactsAPI } from \"./api/artifacts.js\";\nexport { ChatAPI } from \"./api/chat.js\";\nexport { NotebooksAPI } from \"./api/notebooks.js\";\nexport { NotesAPI } from \"./api/notes.js\";\nexport { ResearchAPI } from \"./api/research.js\";\nexport { SettingsAPI } from \"./api/settings.js\";\nexport { SharingAPI } from \"./api/sharing.js\";\nexport { SourcesAPI } from \"./api/sources.js\";\n\n// API option types\nexport type {\n CreateAudioOptions,\n CreateVideoOptions,\n CreateQuizOptions,\n CreateInfographicOptions,\n CreateSlideDeckOptions,\n CreateReportOptions,\n} from \"./api/artifacts.js\";\nexport type { AskOptions } from \"./api/chat.js\";\nexport type {\n ResearchTask,\n ResearchResult,\n ResearchSource,\n ImportedSource,\n} from \"./api/research.js\";\nexport type { AddSourceOptions } from \"./api/sources.js\";\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "notebooklm-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript SDK for NotebookLM.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"./errors": {
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/errors.d.ts",
|
|
23
|
+
"default": "./dist/errors.js"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/errors.d.cts",
|
|
27
|
+
"default": "./dist/errors.cjs"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsup",
|
|
36
|
+
"dev": "tsup --watch",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"test:watch": "vitest",
|
|
39
|
+
"lint": "biome check .",
|
|
40
|
+
"lint:fix": "biome check --write .",
|
|
41
|
+
"format": "biome format --write .",
|
|
42
|
+
"format:check": "biome format .",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"example:basic": "tsx examples/basic.ts",
|
|
45
|
+
"example:report": "tsx examples/report.ts",
|
|
46
|
+
"prepublishOnly": "bun run build"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@biomejs/biome": "^2.4.7",
|
|
50
|
+
"@types/node": "^25.5.0",
|
|
51
|
+
"@vitest/coverage-v8": "4.1.0",
|
|
52
|
+
"dotenv-cli": "^11.0.0",
|
|
53
|
+
"tsup": "^8.5.1",
|
|
54
|
+
"tsx": "^4.21.0",
|
|
55
|
+
"typescript": "^5.9.3",
|
|
56
|
+
"vitest": "^4.1.0"
|
|
57
|
+
},
|
|
58
|
+
"engines": {
|
|
59
|
+
"node": ">=18"
|
|
60
|
+
},
|
|
61
|
+
"license": "MIT"
|
|
62
|
+
}
|