10x-chat 0.2.3 → 0.3.1
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/dist/core/bundle.d.ts.map +1 -1
- package/dist/core/bundle.js +0 -2
- package/dist/core/bundle.js.map +1 -1
- package/dist/notebooklm/api/artifacts.d.ts +60 -0
- package/dist/notebooklm/api/artifacts.d.ts.map +1 -0
- package/dist/notebooklm/api/artifacts.js +1246 -0
- package/dist/notebooklm/api/artifacts.js.map +1 -0
- package/dist/notebooklm/api/chat.d.ts +21 -0
- package/dist/notebooklm/api/chat.d.ts.map +1 -0
- package/dist/notebooklm/api/chat.js +353 -0
- package/dist/notebooklm/api/chat.js.map +1 -0
- package/dist/notebooklm/api/notebooks.d.ts +22 -0
- package/dist/notebooklm/api/notebooks.d.ts.map +1 -0
- package/dist/notebooklm/api/notebooks.js +109 -0
- package/dist/notebooklm/api/notebooks.js.map +1 -0
- package/dist/notebooklm/api/notes.d.ts +18 -0
- package/dist/notebooklm/api/notes.d.ts.map +1 -0
- package/dist/notebooklm/api/notes.js +140 -0
- package/dist/notebooklm/api/notes.js.map +1 -0
- package/dist/notebooklm/api/research.d.ts +12 -0
- package/dist/notebooklm/api/research.d.ts.map +1 -0
- package/dist/notebooklm/api/research.js +168 -0
- package/dist/notebooklm/api/research.js.map +1 -0
- package/dist/notebooklm/api/settings.d.ts +11 -0
- package/dist/notebooklm/api/settings.d.ts.map +1 -0
- package/dist/notebooklm/api/settings.js +55 -0
- package/dist/notebooklm/api/settings.js.map +1 -0
- package/dist/notebooklm/api/sharing.d.ts +14 -0
- package/dist/notebooklm/api/sharing.d.ts.map +1 -0
- package/dist/notebooklm/api/sharing.js +70 -0
- package/dist/notebooklm/api/sharing.js.map +1 -0
- package/dist/notebooklm/api/sources.d.ts +34 -0
- package/dist/notebooklm/api/sources.d.ts.map +1 -0
- package/dist/notebooklm/api/sources.js +539 -0
- package/dist/notebooklm/api/sources.js.map +1 -0
- package/dist/notebooklm/auth.d.ts +30 -0
- package/dist/notebooklm/auth.d.ts.map +1 -0
- package/dist/notebooklm/auth.js +265 -0
- package/dist/notebooklm/auth.js.map +1 -0
- package/dist/notebooklm/client.d.ts +29 -0
- package/dist/notebooklm/client.d.ts.map +1 -0
- package/dist/notebooklm/client.js +94 -0
- package/dist/notebooklm/client.js.map +1 -0
- package/dist/notebooklm/core.d.ts +52 -0
- package/dist/notebooklm/core.d.ts.map +1 -0
- package/dist/notebooklm/core.js +330 -0
- package/dist/notebooklm/core.js.map +1 -0
- package/dist/notebooklm/errors.d.ts +189 -0
- package/dist/notebooklm/errors.d.ts.map +1 -0
- package/dist/notebooklm/errors.js +325 -0
- package/dist/notebooklm/errors.js.map +1 -0
- package/dist/notebooklm/index.d.ts +16 -0
- package/dist/notebooklm/index.d.ts.map +1 -0
- package/dist/notebooklm/index.js +16 -0
- package/dist/notebooklm/index.js.map +1 -0
- package/dist/notebooklm/paths.d.ts +12 -0
- package/dist/notebooklm/paths.d.ts.map +1 -0
- package/dist/notebooklm/paths.js +49 -0
- package/dist/notebooklm/paths.js.map +1 -0
- package/dist/notebooklm/rpc/decoder.d.ts +8 -0
- package/dist/notebooklm/rpc/decoder.d.ts.map +1 -0
- package/dist/notebooklm/rpc/decoder.js +182 -0
- package/dist/notebooklm/rpc/decoder.js.map +1 -0
- package/dist/notebooklm/rpc/encoder.d.ts +12 -0
- package/dist/notebooklm/rpc/encoder.d.ts.map +1 -0
- package/dist/notebooklm/rpc/encoder.js +36 -0
- package/dist/notebooklm/rpc/encoder.js.map +1 -0
- package/dist/notebooklm/rpc/index.d.ts +4 -0
- package/dist/notebooklm/rpc/index.d.ts.map +1 -0
- package/dist/notebooklm/rpc/index.js +4 -0
- package/dist/notebooklm/rpc/index.js.map +1 -0
- package/dist/notebooklm/rpc/types.d.ts +168 -0
- package/dist/notebooklm/rpc/types.d.ts.map +1 -0
- package/dist/notebooklm/rpc/types.js +206 -0
- package/dist/notebooklm/rpc/types.js.map +1 -0
- package/dist/notebooklm/types.d.ts +220 -0
- package/dist/notebooklm/types.d.ts.map +1 -0
- package/dist/notebooklm/types.js +488 -0
- package/dist/notebooklm/types.js.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/notebooklm.d.ts +4 -0
- package/dist/providers/notebooklm.d.ts.map +1 -0
- package/dist/providers/notebooklm.js +98 -0
- package/dist/providers/notebooklm.js.map +1 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { chromium } from 'playwright';
|
|
4
|
+
import { ConfigurationError } from './errors.js';
|
|
5
|
+
const MINIMUM_REQUIRED_COOKIES = new Set(['SID']);
|
|
6
|
+
const ALLOWED_COOKIE_DOMAINS = new Set([
|
|
7
|
+
'.google.com',
|
|
8
|
+
'notebooklm.google.com',
|
|
9
|
+
'.googleusercontent.com',
|
|
10
|
+
]);
|
|
11
|
+
const GOOGLE_REGIONAL_CCTLDS = new Set([
|
|
12
|
+
'com.sg',
|
|
13
|
+
'com.au',
|
|
14
|
+
'com.br',
|
|
15
|
+
'com.mx',
|
|
16
|
+
'com.ar',
|
|
17
|
+
'com.hk',
|
|
18
|
+
'com.tw',
|
|
19
|
+
'com.my',
|
|
20
|
+
'com.ph',
|
|
21
|
+
'com.vn',
|
|
22
|
+
'com.pk',
|
|
23
|
+
'com.bd',
|
|
24
|
+
'com.ng',
|
|
25
|
+
'com.eg',
|
|
26
|
+
'com.tr',
|
|
27
|
+
'com.ua',
|
|
28
|
+
'com.co',
|
|
29
|
+
'com.pe',
|
|
30
|
+
'com.sa',
|
|
31
|
+
'com.ae',
|
|
32
|
+
'co.uk',
|
|
33
|
+
'co.jp',
|
|
34
|
+
'co.in',
|
|
35
|
+
'co.kr',
|
|
36
|
+
'co.za',
|
|
37
|
+
'co.nz',
|
|
38
|
+
'co.id',
|
|
39
|
+
'co.th',
|
|
40
|
+
'co.il',
|
|
41
|
+
'co.ve',
|
|
42
|
+
'co.cr',
|
|
43
|
+
'co.ke',
|
|
44
|
+
'co.ug',
|
|
45
|
+
'co.tz',
|
|
46
|
+
'co.ma',
|
|
47
|
+
'co.ao',
|
|
48
|
+
'co.mz',
|
|
49
|
+
'co.zw',
|
|
50
|
+
'co.bw',
|
|
51
|
+
'cn',
|
|
52
|
+
'de',
|
|
53
|
+
'fr',
|
|
54
|
+
'it',
|
|
55
|
+
'es',
|
|
56
|
+
'nl',
|
|
57
|
+
'pl',
|
|
58
|
+
'ru',
|
|
59
|
+
'ca',
|
|
60
|
+
'be',
|
|
61
|
+
'at',
|
|
62
|
+
'ch',
|
|
63
|
+
'se',
|
|
64
|
+
'no',
|
|
65
|
+
'dk',
|
|
66
|
+
'fi',
|
|
67
|
+
'pt',
|
|
68
|
+
'gr',
|
|
69
|
+
'cz',
|
|
70
|
+
'ro',
|
|
71
|
+
'hu',
|
|
72
|
+
'ie',
|
|
73
|
+
'sk',
|
|
74
|
+
'bg',
|
|
75
|
+
'hr',
|
|
76
|
+
'si',
|
|
77
|
+
'lt',
|
|
78
|
+
'lv',
|
|
79
|
+
'ee',
|
|
80
|
+
'lu',
|
|
81
|
+
'cl',
|
|
82
|
+
'cat',
|
|
83
|
+
]);
|
|
84
|
+
function isGoogleDomain(domain) {
|
|
85
|
+
if (domain === '.google.com') {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
if (domain.startsWith('.google.')) {
|
|
89
|
+
return GOOGLE_REGIONAL_CCTLDS.has(domain.slice(8));
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
function isAllowedAuthDomain(domain) {
|
|
94
|
+
return ALLOWED_COOKIE_DOMAINS.has(domain) || isGoogleDomain(domain);
|
|
95
|
+
}
|
|
96
|
+
function isAllowedCookieDomain(domain) {
|
|
97
|
+
if (ALLOWED_COOKIE_DOMAINS.has(domain)) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
if (isGoogleDomain(domain)) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return (domain.endsWith('.google.com') ||
|
|
104
|
+
domain.endsWith('.googleusercontent.com') ||
|
|
105
|
+
domain.endsWith('.usercontent.google.com'));
|
|
106
|
+
}
|
|
107
|
+
function getGeminiProfileDir() {
|
|
108
|
+
const home = process.env.TEN_X_CHAT_HOME
|
|
109
|
+
? process.env.TEN_X_CHAT_HOME.replace(/^~(?=$|[/])/, process.env.HOME ?? '')
|
|
110
|
+
: path.join(process.env.HOME ?? '', '.10x-chat');
|
|
111
|
+
return process.env.NOTEBOOKLM_PROFILE_DIR ?? path.join(home, 'profiles', 'gemini');
|
|
112
|
+
}
|
|
113
|
+
function isGoogleAuthRedirect(url) {
|
|
114
|
+
try {
|
|
115
|
+
const hostname = new URL(url).hostname.toLowerCase();
|
|
116
|
+
return hostname === 'accounts.google.com' || hostname.endsWith('.accounts.google.com');
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function containsGoogleAuthRedirect(text) {
|
|
123
|
+
const regex = /https?:\/\/[^\s"'<>]+/g;
|
|
124
|
+
const urls = text.match(regex) ?? [];
|
|
125
|
+
return urls.some((value) => isGoogleAuthRedirect(value));
|
|
126
|
+
}
|
|
127
|
+
async function readProfileStorageState(profileDir) {
|
|
128
|
+
const dir = profileDir ?? getGeminiProfileDir();
|
|
129
|
+
const storageStatePath = path.join(dir, 'storage_state.json');
|
|
130
|
+
try {
|
|
131
|
+
const raw = await readFile(storageStatePath, 'utf-8');
|
|
132
|
+
const parsed = JSON.parse(raw);
|
|
133
|
+
if (Array.isArray(parsed.cookies)) {
|
|
134
|
+
return parsed;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Fall back to extracting storage state from the persistent profile.
|
|
139
|
+
}
|
|
140
|
+
const context = await chromium.launchPersistentContext(dir, {
|
|
141
|
+
headless: true,
|
|
142
|
+
viewport: { width: 1280, height: 900 },
|
|
143
|
+
args: ['--disable-blink-features=AutomationControlled', '--no-first-run'],
|
|
144
|
+
});
|
|
145
|
+
try {
|
|
146
|
+
return (await context.storageState());
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
await context.close();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export function extractCookiesFromStorage(storageState) {
|
|
153
|
+
const cookies = {};
|
|
154
|
+
const cookieDomains = {};
|
|
155
|
+
for (const cookie of storageState.cookies ?? []) {
|
|
156
|
+
const domain = cookie.domain ?? '';
|
|
157
|
+
const name = cookie.name;
|
|
158
|
+
if (!name || !isAllowedAuthDomain(domain)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const isBaseDomain = domain === '.google.com';
|
|
162
|
+
if (!(name in cookies) || isBaseDomain) {
|
|
163
|
+
cookies[name] = cookie.value ?? '';
|
|
164
|
+
cookieDomains[name] = domain;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const missing = [...MINIMUM_REQUIRED_COOKIES].filter((cookie) => !(cookie in cookies));
|
|
168
|
+
if (missing.length > 0) {
|
|
169
|
+
const allDomains = new Set((storageState.cookies ?? []).map((cookie) => cookie.domain ?? ''));
|
|
170
|
+
const googleDomains = [...allDomains].filter((domain) => domain.toLowerCase().includes('google'));
|
|
171
|
+
const foundNames = Object.keys(cookies).slice(0, 5);
|
|
172
|
+
const parts = [`Missing required cookies: ${missing.join(', ')}`];
|
|
173
|
+
if (foundNames.length > 0) {
|
|
174
|
+
parts.push(`Found cookies: ${foundNames.join(', ')}${Object.keys(cookies).length > 5 ? '...' : ''}`);
|
|
175
|
+
}
|
|
176
|
+
if (googleDomains.length > 0) {
|
|
177
|
+
parts.push(`Google domains in storage: ${googleDomains.join(', ')}`);
|
|
178
|
+
}
|
|
179
|
+
parts.push('Re-authenticate Gemini profile if needed (10x-chat login gemini).');
|
|
180
|
+
throw new ConfigurationError(parts.join('\n'));
|
|
181
|
+
}
|
|
182
|
+
return cookies;
|
|
183
|
+
}
|
|
184
|
+
export function extractCsrfFromHtml(html, finalUrl = '') {
|
|
185
|
+
const match = /"SNlM0e"\s*:\s*"([^"]+)"/.exec(html);
|
|
186
|
+
if (!match) {
|
|
187
|
+
if (isGoogleAuthRedirect(finalUrl) || containsGoogleAuthRedirect(html)) {
|
|
188
|
+
throw new ConfigurationError('Authentication expired or invalid. Re-authenticate Gemini.');
|
|
189
|
+
}
|
|
190
|
+
throw new ConfigurationError(`CSRF token not found in HTML. Final URL: ${finalUrl}. Page structure may have changed.`);
|
|
191
|
+
}
|
|
192
|
+
return match[1] ?? '';
|
|
193
|
+
}
|
|
194
|
+
export function extractSessionIdFromHtml(html, finalUrl = '') {
|
|
195
|
+
const match = /"FdrFJe"\s*:\s*"([^"]+)"/.exec(html);
|
|
196
|
+
if (!match) {
|
|
197
|
+
if (isGoogleAuthRedirect(finalUrl) || containsGoogleAuthRedirect(html)) {
|
|
198
|
+
throw new ConfigurationError('Authentication expired or invalid. Re-authenticate Gemini.');
|
|
199
|
+
}
|
|
200
|
+
throw new ConfigurationError(`Session ID not found in HTML. Final URL: ${finalUrl}. Page structure may have changed.`);
|
|
201
|
+
}
|
|
202
|
+
return match[1] ?? '';
|
|
203
|
+
}
|
|
204
|
+
function buildCookieHeader(cookies) {
|
|
205
|
+
return Object.entries(cookies)
|
|
206
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
207
|
+
.join('; ');
|
|
208
|
+
}
|
|
209
|
+
async function fetchWithTimeout(url, init, timeoutMs) {
|
|
210
|
+
const controller = new AbortController();
|
|
211
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
212
|
+
try {
|
|
213
|
+
return await fetch(url, { ...init, signal: controller.signal });
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
clearTimeout(timeout);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export async function loadStorageCookies(profileDir) {
|
|
220
|
+
const state = await readProfileStorageState(profileDir);
|
|
221
|
+
return (state.cookies ?? []).filter((cookie) => {
|
|
222
|
+
if (!cookie.name || !cookie.value) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
const domain = cookie.domain ?? '';
|
|
226
|
+
return isAllowedCookieDomain(domain);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
export async function loadAuthFromStorage(profileDir) {
|
|
230
|
+
const storageState = await readProfileStorageState(profileDir);
|
|
231
|
+
return extractCookiesFromStorage(storageState);
|
|
232
|
+
}
|
|
233
|
+
export async function fetchTokens(cookies) {
|
|
234
|
+
const response = await fetchWithTimeout('https://notebooklm.google.com/', {
|
|
235
|
+
method: 'GET',
|
|
236
|
+
headers: {
|
|
237
|
+
Cookie: buildCookieHeader(cookies),
|
|
238
|
+
},
|
|
239
|
+
redirect: 'follow',
|
|
240
|
+
}, 30_000);
|
|
241
|
+
if (!response.ok) {
|
|
242
|
+
throw new ConfigurationError(`Failed to fetch NotebookLM tokens. HTTP ${response.status} ${response.statusText}`);
|
|
243
|
+
}
|
|
244
|
+
const finalUrl = response.url;
|
|
245
|
+
if (isGoogleAuthRedirect(finalUrl)) {
|
|
246
|
+
throw new ConfigurationError(`Authentication expired or invalid. Redirected to: ${finalUrl}. Re-authenticate Gemini profile.`);
|
|
247
|
+
}
|
|
248
|
+
const html = await response.text();
|
|
249
|
+
const csrfToken = extractCsrfFromHtml(html, finalUrl);
|
|
250
|
+
const sessionId = extractSessionIdFromHtml(html, finalUrl);
|
|
251
|
+
return [csrfToken, sessionId];
|
|
252
|
+
}
|
|
253
|
+
export const AuthTokens = {
|
|
254
|
+
async fromStorage(profileDir) {
|
|
255
|
+
const cookies = await loadAuthFromStorage(profileDir);
|
|
256
|
+
const [csrfToken, sessionId] = await fetchTokens(cookies);
|
|
257
|
+
return {
|
|
258
|
+
cookies,
|
|
259
|
+
csrfToken,
|
|
260
|
+
sessionId,
|
|
261
|
+
cookieHeader: buildCookieHeader(cookies),
|
|
262
|
+
};
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/notebooklm/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ArtifactsAPI } from './api/artifacts.js';
|
|
2
|
+
import { ChatAPI } from './api/chat.js';
|
|
3
|
+
import { NotebooksAPI } from './api/notebooks.js';
|
|
4
|
+
import { NotesAPI } from './api/notes.js';
|
|
5
|
+
import { ResearchAPI } from './api/research.js';
|
|
6
|
+
import { SettingsAPI } from './api/settings.js';
|
|
7
|
+
import { SharingAPI } from './api/sharing.js';
|
|
8
|
+
import { SourcesAPI } from './api/sources.js';
|
|
9
|
+
import { type AuthTokens as AuthTokensType } from './auth.js';
|
|
10
|
+
export declare class NotebookLMClient {
|
|
11
|
+
private readonly core;
|
|
12
|
+
readonly notebooks: NotebooksAPI;
|
|
13
|
+
readonly sources: SourcesAPI;
|
|
14
|
+
readonly notes: NotesAPI;
|
|
15
|
+
readonly artifacts: ArtifactsAPI;
|
|
16
|
+
readonly chat: ChatAPI;
|
|
17
|
+
readonly research: ResearchAPI;
|
|
18
|
+
readonly settings: SettingsAPI;
|
|
19
|
+
readonly sharing: SharingAPI;
|
|
20
|
+
constructor(auth: AuthTokensType, timeoutMs?: number);
|
|
21
|
+
get auth(): AuthTokensType;
|
|
22
|
+
get isConnected(): boolean;
|
|
23
|
+
open(): Promise<void>;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
withClient<T>(fn: (client: NotebookLMClient) => Promise<T>): Promise<T>;
|
|
26
|
+
static fromStorage(profileDir?: string, timeoutMs?: number): Promise<NotebookLMClient>;
|
|
27
|
+
refreshAuth(): Promise<AuthTokensType>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/notebooklm/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAEL,KAAK,UAAU,IAAI,cAAc,EAGlC,MAAM,WAAW,CAAC;AAYnB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAElC,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,OAAO,EAAE,UAAU,CAAC;IACpC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,OAAO,EAAE,UAAU,CAAC;gBAEjB,IAAI,EAAE,cAAc,EAAE,SAAS,SAAkB;IAgBpE,IAAW,IAAI,IAAI,cAAc,CAEhC;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;WAShE,WAAW,CAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,SAAkB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAKf,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;CA2BpD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ArtifactsAPI } from './api/artifacts.js';
|
|
2
|
+
import { ChatAPI } from './api/chat.js';
|
|
3
|
+
import { NotebooksAPI } from './api/notebooks.js';
|
|
4
|
+
import { NotesAPI } from './api/notes.js';
|
|
5
|
+
import { ResearchAPI } from './api/research.js';
|
|
6
|
+
import { SettingsAPI } from './api/settings.js';
|
|
7
|
+
import { SharingAPI } from './api/sharing.js';
|
|
8
|
+
import { SourcesAPI } from './api/sources.js';
|
|
9
|
+
import { AuthTokens, extractCsrfFromHtml, extractSessionIdFromHtml, } from './auth.js';
|
|
10
|
+
import { ClientCore, DEFAULT_TIMEOUT } from './core.js';
|
|
11
|
+
function isGoogleAuthRedirect(url) {
|
|
12
|
+
try {
|
|
13
|
+
const hostname = new URL(url).hostname.toLowerCase();
|
|
14
|
+
return hostname === 'accounts.google.com' || hostname.endsWith('.accounts.google.com');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class NotebookLMClient {
|
|
21
|
+
core;
|
|
22
|
+
notebooks;
|
|
23
|
+
sources;
|
|
24
|
+
notes;
|
|
25
|
+
artifacts;
|
|
26
|
+
chat;
|
|
27
|
+
research;
|
|
28
|
+
settings;
|
|
29
|
+
sharing;
|
|
30
|
+
constructor(auth, timeoutMs = DEFAULT_TIMEOUT) {
|
|
31
|
+
this.core = new ClientCore(auth, {
|
|
32
|
+
timeoutMs,
|
|
33
|
+
refreshCallback: () => this.refreshAuth(),
|
|
34
|
+
});
|
|
35
|
+
this.notebooks = new NotebooksAPI(this.core);
|
|
36
|
+
this.sources = new SourcesAPI(this.core);
|
|
37
|
+
this.notes = new NotesAPI(this.core);
|
|
38
|
+
this.artifacts = new ArtifactsAPI(this.core, this.notes);
|
|
39
|
+
this.chat = new ChatAPI(this.core);
|
|
40
|
+
this.research = new ResearchAPI(this.core);
|
|
41
|
+
this.settings = new SettingsAPI(this.core);
|
|
42
|
+
this.sharing = new SharingAPI(this.core);
|
|
43
|
+
}
|
|
44
|
+
get auth() {
|
|
45
|
+
return this.core.auth;
|
|
46
|
+
}
|
|
47
|
+
get isConnected() {
|
|
48
|
+
return this.core.isOpen;
|
|
49
|
+
}
|
|
50
|
+
async open() {
|
|
51
|
+
console.debug('Opening NotebookLM client');
|
|
52
|
+
await this.core.open();
|
|
53
|
+
}
|
|
54
|
+
async close() {
|
|
55
|
+
console.debug('Closing NotebookLM client');
|
|
56
|
+
await this.core.close();
|
|
57
|
+
}
|
|
58
|
+
async withClient(fn) {
|
|
59
|
+
await this.open();
|
|
60
|
+
try {
|
|
61
|
+
return await fn(this);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await this.close();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
static async fromStorage(profileDir, timeoutMs = DEFAULT_TIMEOUT) {
|
|
68
|
+
const auth = await AuthTokens.fromStorage(profileDir);
|
|
69
|
+
return new NotebookLMClient(auth, timeoutMs);
|
|
70
|
+
}
|
|
71
|
+
async refreshAuth() {
|
|
72
|
+
const httpClient = this.core.getHttpClient();
|
|
73
|
+
const response = await httpClient.get('https://notebooklm.google.com/', {
|
|
74
|
+
headers: {
|
|
75
|
+
Cookie: this.core.auth.cookieHeader,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error(`Failed to refresh auth: HTTP ${response.status} ${response.statusText}`);
|
|
80
|
+
}
|
|
81
|
+
const finalUrl = response.url;
|
|
82
|
+
if (isGoogleAuthRedirect(finalUrl)) {
|
|
83
|
+
throw new Error('Authentication expired. Re-authenticate your Gemini profile.');
|
|
84
|
+
}
|
|
85
|
+
const html = await response.text();
|
|
86
|
+
const csrfToken = extractCsrfFromHtml(html, finalUrl);
|
|
87
|
+
const sessionId = extractSessionIdFromHtml(html, finalUrl);
|
|
88
|
+
this.core.auth.csrfToken = csrfToken;
|
|
89
|
+
this.core.auth.sessionId = sessionId;
|
|
90
|
+
this.core.updateAuthHeaders();
|
|
91
|
+
return this.core.auth;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/notebooklm/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AuthTokens } from './auth.js';
|
|
2
|
+
import { RPCMethod } from './rpc/index.js';
|
|
3
|
+
export declare const MAX_CONVERSATION_CACHE_SIZE = 100;
|
|
4
|
+
export declare const DEFAULT_TIMEOUT = 30000;
|
|
5
|
+
export declare const DEFAULT_CONNECT_TIMEOUT = 10000;
|
|
6
|
+
export declare function isAuthError(error: unknown): boolean;
|
|
7
|
+
export interface NotebookHttpClient {
|
|
8
|
+
fetch(url: string, init?: RequestInit): Promise<Response>;
|
|
9
|
+
get(url: string, init?: RequestInit): Promise<Response>;
|
|
10
|
+
post(url: string, body: BodyInit, init?: RequestInit): Promise<Response>;
|
|
11
|
+
}
|
|
12
|
+
interface CachedTurn {
|
|
13
|
+
query: string;
|
|
14
|
+
answer: string;
|
|
15
|
+
turnNumber: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class ClientCore {
|
|
18
|
+
auth: AuthTokens;
|
|
19
|
+
private readonly timeoutMs;
|
|
20
|
+
private readonly connectTimeoutMs;
|
|
21
|
+
private readonly refreshCallback;
|
|
22
|
+
private readonly refreshRetryDelayMs;
|
|
23
|
+
private refreshTask;
|
|
24
|
+
private openState;
|
|
25
|
+
private reqidCounter;
|
|
26
|
+
private readonly conversationCache;
|
|
27
|
+
private readonly httpClient;
|
|
28
|
+
constructor(auth: AuthTokens, opts?: {
|
|
29
|
+
timeoutMs?: number;
|
|
30
|
+
connectTimeoutMs?: number;
|
|
31
|
+
refreshCallback?: (() => Promise<AuthTokens>) | null;
|
|
32
|
+
refreshRetryDelayMs?: number;
|
|
33
|
+
});
|
|
34
|
+
open(): Promise<void>;
|
|
35
|
+
close(): Promise<void>;
|
|
36
|
+
get isOpen(): boolean;
|
|
37
|
+
updateAuthHeaders(): void;
|
|
38
|
+
private buildUrl;
|
|
39
|
+
private request;
|
|
40
|
+
rpcCall(method: RPCMethod, params: unknown[], sourcePath?: string, allowNull?: boolean, isRetry?: boolean): Promise<unknown>;
|
|
41
|
+
private tryRefreshAndRetry;
|
|
42
|
+
getHttpClient(): NotebookHttpClient;
|
|
43
|
+
cacheConversationTurn(conversationId: string, query: string, answer: string, turnNumber: number): void;
|
|
44
|
+
getCachedConversation(conversationId: string): CachedTurn[];
|
|
45
|
+
clearConversationCache(conversationId?: string | null): boolean;
|
|
46
|
+
getSourceIds(notebookId: string): Promise<string[]>;
|
|
47
|
+
nextReqIdStep(): number;
|
|
48
|
+
getConnectTimeoutMs(): number;
|
|
49
|
+
getTimeoutMs(): number;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/notebooklm/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAS5C,OAAO,EAKL,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAc9C,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoBnD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC1E;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACd,IAAI,EAAE,UAAU,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAE7C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IAErE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAG9C,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;QACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;KACzB;IAwBK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,IAAW,MAAM,IAAI,OAAO,CAE3B;IAEM,iBAAiB,IAAI,IAAI;IAMhC,OAAO,CAAC,QAAQ;YAWF,OAAO;IAyCR,OAAO,CAClB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,OAAO,EAAE,EACjB,UAAU,SAAM,EAChB,SAAS,UAAQ,EACjB,OAAO,UAAQ,GACd,OAAO,CAAC,OAAO,CAAC;YA0IL,kBAAkB;IA4CzB,aAAa,IAAI,kBAAkB;IAUnC,qBAAqB,CAC1B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,IAAI;IAwBA,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,EAAE;IAI3D,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAczD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CzD,aAAa,IAAI,MAAM;IAKvB,mBAAmB,IAAI,MAAM;IAI7B,YAAY,IAAI,MAAM;CAG9B"}
|