notebooklm-kit 0.0.1 → 2.1.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/LICENSE +22 -0
- package/README.md +4102 -0
- package/dist/src/auth/auth.d.ts +46 -0
- package/dist/src/auth/auth.d.ts.map +1 -0
- package/dist/src/auth/auth.js +323 -0
- package/dist/src/auth/auth.js.map +1 -0
- package/dist/src/auth/refresh.d.ts +150 -0
- package/dist/src/auth/refresh.d.ts.map +1 -0
- package/dist/src/auth/refresh.js +433 -0
- package/dist/src/auth/refresh.js.map +1 -0
- package/dist/src/client/notebooklm-client.d.ts +372 -0
- package/dist/src/client/notebooklm-client.d.ts.map +1 -0
- package/dist/src/client/notebooklm-client.js +550 -0
- package/dist/src/client/notebooklm-client.js.map +1 -0
- package/dist/src/index.d.ts +50 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/rpc/rpc-client.d.ts +48 -0
- package/dist/src/rpc/rpc-client.d.ts.map +1 -0
- package/dist/src/rpc/rpc-client.js +94 -0
- package/dist/src/rpc/rpc-client.js.map +1 -0
- package/dist/src/rpc/rpc-methods.d.ts +127 -0
- package/dist/src/rpc/rpc-methods.d.ts.map +1 -0
- package/dist/src/rpc/rpc-methods.js +169 -0
- package/dist/src/rpc/rpc-methods.js.map +1 -0
- package/dist/src/services/artifacts.d.ts +1017 -0
- package/dist/src/services/artifacts.d.ts.map +1 -0
- package/dist/src/services/artifacts.js +5413 -0
- package/dist/src/services/artifacts.js.map +1 -0
- package/dist/src/services/generation.d.ts +147 -0
- package/dist/src/services/generation.d.ts.map +1 -0
- package/dist/src/services/generation.js +479 -0
- package/dist/src/services/generation.js.map +1 -0
- package/dist/src/services/notebook-language.d.ts +109 -0
- package/dist/src/services/notebook-language.d.ts.map +1 -0
- package/dist/src/services/notebook-language.js +204 -0
- package/dist/src/services/notebook-language.js.map +1 -0
- package/dist/src/services/notebooks.d.ts +26 -0
- package/dist/src/services/notebooks.d.ts.map +1 -0
- package/dist/src/services/notebooks.js +539 -0
- package/dist/src/services/notebooks.js.map +1 -0
- package/dist/src/services/notes.d.ts +72 -0
- package/dist/src/services/notes.d.ts.map +1 -0
- package/dist/src/services/notes.js +340 -0
- package/dist/src/services/notes.js.map +1 -0
- package/dist/src/services/sources.d.ts +1085 -0
- package/dist/src/services/sources.d.ts.map +1 -0
- package/dist/src/services/sources.js +2675 -0
- package/dist/src/services/sources.js.map +1 -0
- package/dist/src/types/artifact.d.ts +258 -0
- package/dist/src/types/artifact.d.ts.map +1 -0
- package/dist/src/types/artifact.js +42 -0
- package/dist/src/types/artifact.js.map +1 -0
- package/dist/src/types/common.d.ts +226 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/common.js +80 -0
- package/dist/src/types/common.js.map +1 -0
- package/dist/src/types/languages.d.ts +179 -0
- package/dist/src/types/languages.d.ts.map +1 -0
- package/dist/src/types/languages.js +254 -0
- package/dist/src/types/languages.js.map +1 -0
- package/dist/src/types/note.d.ts +41 -0
- package/dist/src/types/note.d.ts.map +1 -0
- package/dist/src/types/note.js +12 -0
- package/dist/src/types/note.js.map +1 -0
- package/dist/src/types/notebook.d.ts +81 -0
- package/dist/src/types/notebook.d.ts.map +1 -0
- package/dist/src/types/notebook.js +5 -0
- package/dist/src/types/notebook.js.map +1 -0
- package/dist/src/types/source.d.ts +241 -0
- package/dist/src/types/source.d.ts.map +1 -0
- package/dist/src/types/source.js +60 -0
- package/dist/src/types/source.js.map +1 -0
- package/dist/src/utils/batch-execute.d.ts +58 -0
- package/dist/src/utils/batch-execute.d.ts.map +1 -0
- package/dist/src/utils/batch-execute.js +398 -0
- package/dist/src/utils/batch-execute.js.map +1 -0
- package/dist/src/utils/chunked-decoder.d.ts +11 -0
- package/dist/src/utils/chunked-decoder.d.ts.map +1 -0
- package/dist/src/utils/chunked-decoder.js +326 -0
- package/dist/src/utils/chunked-decoder.js.map +1 -0
- package/dist/src/utils/chunked-parser.d.ts +61 -0
- package/dist/src/utils/chunked-parser.d.ts.map +1 -0
- package/dist/src/utils/chunked-parser.js +609 -0
- package/dist/src/utils/chunked-parser.js.map +1 -0
- package/dist/src/utils/errors.d.ts +58 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +357 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/quota.d.ts +213 -0
- package/dist/src/utils/quota.d.ts.map +1 -0
- package/dist/src/utils/quota.js +518 -0
- package/dist/src/utils/quota.js.map +1 -0
- package/dist/src/utils/streaming-client.d.ts +129 -0
- package/dist/src/utils/streaming-client.d.ts.map +1 -0
- package/dist/src/utils/streaming-client.js +559 -0
- package/dist/src/utils/streaming-client.js.map +1 -0
- package/package.json +85 -7
- package/index.js +0 -2
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication management for NotebookLM
|
|
3
|
+
* Handles auto-login, credential extraction, and credential storage
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Credentials structure
|
|
7
|
+
*/
|
|
8
|
+
export interface Credentials {
|
|
9
|
+
authToken: string;
|
|
10
|
+
cookies: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Authentication configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface AuthConfig {
|
|
16
|
+
/** Google email for auto-login */
|
|
17
|
+
email?: string;
|
|
18
|
+
/** Google password for auto-login */
|
|
19
|
+
password?: string;
|
|
20
|
+
/** Enable headless mode for browser (default: true) */
|
|
21
|
+
headless?: boolean;
|
|
22
|
+
/** Enable debug logging */
|
|
23
|
+
debug?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Save credentials to disk
|
|
27
|
+
*/
|
|
28
|
+
export declare function saveCredentials(credentials: Credentials): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Load credentials from disk
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadCredentials(): Promise<Credentials | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete saved credentials
|
|
35
|
+
*/
|
|
36
|
+
export declare function deleteCredentials(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Auto-login and extract credentials using Playwright
|
|
39
|
+
*/
|
|
40
|
+
export declare function autoLogin(config?: AuthConfig): Promise<Credentials>;
|
|
41
|
+
/**
|
|
42
|
+
* Get credentials from various sources
|
|
43
|
+
* Priority: 1. Provided credentials 2. Environment variables 3. Saved credentials 4. Auto-login
|
|
44
|
+
*/
|
|
45
|
+
export declare function getCredentials(providedCredentials?: Partial<Credentials>, config?: AuthConfig): Promise<Credentials>;
|
|
46
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CASnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOvD;AA4ND;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC7E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAC1C,MAAM,GAAE,UAAe,GACtB,OAAO,CAAC,WAAW,CAAC,CA0CtB"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication management for NotebookLM
|
|
3
|
+
* Handles auto-login, credential extraction, and credential storage
|
|
4
|
+
*/
|
|
5
|
+
import { chromium } from 'playwright';
|
|
6
|
+
import { NotebookLMAuthError } from '../types/common.js';
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as readline from 'readline';
|
|
10
|
+
const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36';
|
|
11
|
+
/**
|
|
12
|
+
* Get credentials storage path
|
|
13
|
+
* Saves to project root (current working directory) for easy access
|
|
14
|
+
*/
|
|
15
|
+
function getCredentialsPath() {
|
|
16
|
+
// Save in project root (current working directory)
|
|
17
|
+
// This is where you run the script from (e.g., notebooklm-kit/)
|
|
18
|
+
const projectRoot = process.cwd();
|
|
19
|
+
return path.join(projectRoot, 'credentials.json');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Ensure credentials directory exists
|
|
23
|
+
*/
|
|
24
|
+
async function ensureCredentialsDir() {
|
|
25
|
+
const credsPath = getCredentialsPath();
|
|
26
|
+
const dir = path.dirname(credsPath);
|
|
27
|
+
await fs.mkdir(dir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Save credentials to disk
|
|
31
|
+
*/
|
|
32
|
+
export async function saveCredentials(credentials) {
|
|
33
|
+
await ensureCredentialsDir();
|
|
34
|
+
const credsPath = getCredentialsPath();
|
|
35
|
+
await fs.writeFile(credsPath, JSON.stringify(credentials, null, 2), 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load credentials from disk
|
|
39
|
+
*/
|
|
40
|
+
export async function loadCredentials() {
|
|
41
|
+
try {
|
|
42
|
+
const credsPath = getCredentialsPath();
|
|
43
|
+
const data = await fs.readFile(credsPath, 'utf-8');
|
|
44
|
+
return JSON.parse(data);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
// File doesn't exist or invalid
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Delete saved credentials
|
|
53
|
+
*/
|
|
54
|
+
export async function deleteCredentials() {
|
|
55
|
+
try {
|
|
56
|
+
const credsPath = getCredentialsPath();
|
|
57
|
+
await fs.unlink(credsPath);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
// File doesn't exist, ignore
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Authenticate with Google using Playwright
|
|
65
|
+
*/
|
|
66
|
+
async function authenticateWithGoogle(page, email, password, debug = false) {
|
|
67
|
+
if (debug) {
|
|
68
|
+
console.log('Authenticating with Google...');
|
|
69
|
+
}
|
|
70
|
+
// Navigate to Google sign-in
|
|
71
|
+
await page.goto('https://accounts.google.com/signin', { waitUntil: 'domcontentloaded', timeout: 60000 });
|
|
72
|
+
// Enter email
|
|
73
|
+
await page.fill('input[type="email"]', email);
|
|
74
|
+
await page.click('button:has-text("Next"), #identifierNext, button[type="button"]:has-text("Next")');
|
|
75
|
+
await page.waitForTimeout(2000);
|
|
76
|
+
// Enter password
|
|
77
|
+
await page.fill('input[type="password"]', password);
|
|
78
|
+
await page.click('button:has-text("Next"), #passwordNext, button[type="button"]:has-text("Next")');
|
|
79
|
+
// Wait for authentication to complete (including 2FA)
|
|
80
|
+
await page.waitForTimeout(3000); // 3 seconds
|
|
81
|
+
// Check if we're still on sign-in page (2FA or other issues)
|
|
82
|
+
const currentUrl = page.url();
|
|
83
|
+
if (currentUrl.includes('accounts.google.com/signin') || currentUrl.includes('challenge')) {
|
|
84
|
+
// Give additional time for 2FA if still on sign-in page
|
|
85
|
+
console.log('⚠️ Still on sign-in page - waiting additional 10 seconds for 2FA completion...');
|
|
86
|
+
await page.waitForTimeout(10000); // 10 seconds - reduced from 30 seconds
|
|
87
|
+
const finalUrl = page.url();
|
|
88
|
+
if (finalUrl.includes('accounts.google.com/signin') || finalUrl.includes('challenge')) {
|
|
89
|
+
throw new NotebookLMAuthError('Authentication requires additional steps (2FA, verification, etc.). ' +
|
|
90
|
+
'Please use manual authentication with NOTEBOOKLM_AUTH_TOKEN and NOTEBOOKLM_COOKIES environment variables instead.');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (debug) {
|
|
94
|
+
console.log('✓ Google authentication successful');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Extract credentials from NotebookLM page
|
|
99
|
+
*/
|
|
100
|
+
async function extractCredentials(page, debug = false) {
|
|
101
|
+
if (debug) {
|
|
102
|
+
console.log('Navigating to NotebookLM...');
|
|
103
|
+
}
|
|
104
|
+
// Navigate to NotebookLM
|
|
105
|
+
await page.goto('https://notebooklm.google.com/', {
|
|
106
|
+
waitUntil: 'domcontentloaded',
|
|
107
|
+
timeout: 60000
|
|
108
|
+
});
|
|
109
|
+
// Wait for page to load
|
|
110
|
+
await page.waitForTimeout(5000);
|
|
111
|
+
// Check if we're still on sign-in page
|
|
112
|
+
const currentUrl = page.url();
|
|
113
|
+
if (currentUrl.includes('accounts.google.com/signin')) {
|
|
114
|
+
throw new NotebookLMAuthError('Failed to access NotebookLM - authentication may have failed');
|
|
115
|
+
}
|
|
116
|
+
// Extract auth token from window.WIZ_global_data.SNlM0e
|
|
117
|
+
if (debug) {
|
|
118
|
+
console.log('Extracting auth token...');
|
|
119
|
+
}
|
|
120
|
+
let authToken = null;
|
|
121
|
+
for (let attempt = 0; attempt < 10; attempt++) {
|
|
122
|
+
authToken = await page.evaluate(() => {
|
|
123
|
+
// @ts-ignore
|
|
124
|
+
return window.WIZ_global_data?.SNlM0e || null;
|
|
125
|
+
});
|
|
126
|
+
if (authToken) {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
if (debug && attempt < 5) {
|
|
130
|
+
console.log(`Waiting for auth token... (attempt ${attempt + 1}/10)`);
|
|
131
|
+
}
|
|
132
|
+
await page.waitForTimeout(2000);
|
|
133
|
+
}
|
|
134
|
+
if (!authToken) {
|
|
135
|
+
// Try one more time with longer wait
|
|
136
|
+
await page.waitForTimeout(5000);
|
|
137
|
+
authToken = await page.evaluate(() => {
|
|
138
|
+
// @ts-ignore
|
|
139
|
+
return window.WIZ_global_data?.SNlM0e || null;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (!authToken) {
|
|
143
|
+
throw new NotebookLMAuthError('Failed to extract auth token. The page may still be loading.');
|
|
144
|
+
}
|
|
145
|
+
// Automatically extract cookies from browser context
|
|
146
|
+
// Get cookies that would be sent to notebooklm.google.com
|
|
147
|
+
if (debug) {
|
|
148
|
+
console.log('Extracting cookies from browser context...');
|
|
149
|
+
}
|
|
150
|
+
let cookieString = '';
|
|
151
|
+
try {
|
|
152
|
+
// Method 1: Get cookies from the page's document.cookie (JavaScript accessible cookies)
|
|
153
|
+
let documentCookies = '';
|
|
154
|
+
try {
|
|
155
|
+
documentCookies = await page.evaluate(() => document.cookie);
|
|
156
|
+
if (debug && documentCookies) {
|
|
157
|
+
console.log(`Document cookies length: ${documentCookies.length}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
// Ignore if document.cookie is not accessible
|
|
162
|
+
}
|
|
163
|
+
// Method 2: Get cookies from browser context for notebooklm.google.com
|
|
164
|
+
const contextCookies = await page.context().cookies('https://notebooklm.google.com');
|
|
165
|
+
if (debug) {
|
|
166
|
+
console.log(`Found ${contextCookies.length} cookies from context for notebooklm.google.com`);
|
|
167
|
+
}
|
|
168
|
+
// Build a map of unique cookies (prefer context cookies as they're more complete)
|
|
169
|
+
const cookieMap = new Map();
|
|
170
|
+
// First, add cookies from document.cookie if available (these are the ones JavaScript can access)
|
|
171
|
+
if (documentCookies) {
|
|
172
|
+
const docCookiePairs = documentCookies.split(';').map(c => c.trim());
|
|
173
|
+
for (const pair of docCookiePairs) {
|
|
174
|
+
const [name, ...valueParts] = pair.split('=');
|
|
175
|
+
if (name && valueParts.length > 0) {
|
|
176
|
+
cookieMap.set(name.trim(), valueParts.join('='));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Then, add/override with context cookies (these include HttpOnly cookies)
|
|
181
|
+
for (const cookie of contextCookies) {
|
|
182
|
+
// Only include cookies that are relevant for notebooklm.google.com
|
|
183
|
+
const domain = cookie.domain || '';
|
|
184
|
+
if (domain.includes('notebooklm.google.com') ||
|
|
185
|
+
domain.includes('.google.com') ||
|
|
186
|
+
domain === '' ||
|
|
187
|
+
!domain) {
|
|
188
|
+
cookieMap.set(cookie.name, cookie.value);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Build cookie string
|
|
192
|
+
cookieString = Array.from(cookieMap.entries())
|
|
193
|
+
.map(([name, value]) => `${name}=${value}`)
|
|
194
|
+
.join('; ');
|
|
195
|
+
if (debug) {
|
|
196
|
+
console.log(`Extracted ${cookieMap.size} unique cookies (${cookieString.length} characters)`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (debug) {
|
|
201
|
+
console.warn('Failed to extract cookies automatically:', error.message);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Validate extracted cookies
|
|
205
|
+
if (!cookieString || cookieString.length < 100) {
|
|
206
|
+
if (debug) {
|
|
207
|
+
console.warn('⚠️ Automatic cookie extraction failed or cookies too short');
|
|
208
|
+
console.warn(` Cookie length: ${cookieString.length} (minimum: 100)`);
|
|
209
|
+
console.log('Falling back to manual cookie input...');
|
|
210
|
+
}
|
|
211
|
+
// Fall back to manual input
|
|
212
|
+
cookieString = await promptForCookies();
|
|
213
|
+
if (!cookieString || cookieString.length < 100) {
|
|
214
|
+
throw new NotebookLMAuthError('Invalid cookies - cookie string too short or empty');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
if (debug) {
|
|
219
|
+
console.log('✓ Cookies extracted successfully');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
authToken,
|
|
224
|
+
cookies: cookieString,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Prompt for cookies input from terminal
|
|
229
|
+
*/
|
|
230
|
+
function promptForCookies() {
|
|
231
|
+
const rl = readline.createInterface({
|
|
232
|
+
input: process.stdin,
|
|
233
|
+
output: process.stdout,
|
|
234
|
+
});
|
|
235
|
+
return new Promise((resolve) => {
|
|
236
|
+
console.log('\n📋 Please copy cookies from your browser:');
|
|
237
|
+
console.log(' 1. Open DevTools (F12) in the browser');
|
|
238
|
+
console.log(' 2. Go to Network tab');
|
|
239
|
+
console.log(' 3. Click on any request to notebooklm.google.com');
|
|
240
|
+
console.log(' 4. Copy the "Cookie" header value');
|
|
241
|
+
console.log(' 5. Paste it below\n');
|
|
242
|
+
rl.question('Enter cookies: ', (cookies) => {
|
|
243
|
+
rl.close();
|
|
244
|
+
resolve(cookies.trim());
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Auto-login and extract credentials using Playwright
|
|
250
|
+
*/
|
|
251
|
+
export async function autoLogin(config = {}) {
|
|
252
|
+
const { email, password, headless = true, debug = false } = config;
|
|
253
|
+
if (!email || !password) {
|
|
254
|
+
throw new NotebookLMAuthError('Email and password are required for auto-login. ' +
|
|
255
|
+
'Provide them via environment variables (GOOGLE_EMAIL, GOOGLE_PASSWORD) or config.');
|
|
256
|
+
}
|
|
257
|
+
let browser;
|
|
258
|
+
try {
|
|
259
|
+
// Launch browser
|
|
260
|
+
browser = await chromium.launch({ headless });
|
|
261
|
+
const context = await browser.newContext({
|
|
262
|
+
userAgent: USER_AGENT,
|
|
263
|
+
viewport: { width: 1280, height: 800 }
|
|
264
|
+
});
|
|
265
|
+
const page = await context.newPage();
|
|
266
|
+
// Authenticate with Google
|
|
267
|
+
await authenticateWithGoogle(page, email, password, debug);
|
|
268
|
+
// Extract both auth token and cookies from NotebookLM automatically
|
|
269
|
+
// Falls back to manual input if automatic extraction fails
|
|
270
|
+
const credentials = await extractCredentials(page, debug);
|
|
271
|
+
// Save credentials for future use
|
|
272
|
+
await saveCredentials(credentials);
|
|
273
|
+
return credentials;
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
if (browser) {
|
|
280
|
+
await browser.close();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Get credentials from various sources
|
|
286
|
+
* Priority: 1. Provided credentials 2. Environment variables 3. Saved credentials 4. Auto-login
|
|
287
|
+
*/
|
|
288
|
+
export async function getCredentials(providedCredentials, config = {}) {
|
|
289
|
+
// 1. Use provided credentials if complete
|
|
290
|
+
if (providedCredentials?.authToken && providedCredentials?.cookies) {
|
|
291
|
+
return providedCredentials;
|
|
292
|
+
}
|
|
293
|
+
// 2. Try environment variables
|
|
294
|
+
const envAuthToken = process.env.NOTEBOOKLM_AUTH_TOKEN;
|
|
295
|
+
const envCookies = process.env.NOTEBOOKLM_COOKIES;
|
|
296
|
+
if (envAuthToken && envCookies) {
|
|
297
|
+
return {
|
|
298
|
+
authToken: envAuthToken,
|
|
299
|
+
cookies: envCookies,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// 3. Try saved credentials first (before auto-login)
|
|
303
|
+
// This allows saved credentials to be reused without re-authenticating
|
|
304
|
+
// Skip if FORCE_REAUTH=true is set
|
|
305
|
+
if (process.env.FORCE_REAUTH !== 'true') {
|
|
306
|
+
const savedCredentials = await loadCredentials();
|
|
307
|
+
if (savedCredentials && savedCredentials.authToken && savedCredentials.cookies) {
|
|
308
|
+
return savedCredentials;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// 4. Try auto-login if email/password available (only if no saved credentials)
|
|
312
|
+
const email = config.email || process.env.GOOGLE_EMAIL;
|
|
313
|
+
const password = config.password || process.env.GOOGLE_PASSWORD;
|
|
314
|
+
if (email && password) {
|
|
315
|
+
return await autoLogin({ ...config, email, password });
|
|
316
|
+
}
|
|
317
|
+
throw new NotebookLMAuthError('No credentials available. Provide credentials via:\n' +
|
|
318
|
+
' - Config: { authToken, cookies }\n' +
|
|
319
|
+
' - Environment: NOTEBOOKLM_AUTH_TOKEN, NOTEBOOKLM_COOKIES\n' +
|
|
320
|
+
' - Saved credentials: credentials.json in project root\n' +
|
|
321
|
+
' - Auto-login: GOOGLE_EMAIL, GOOGLE_PASSWORD (no 2FA)');
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication refresh utilities
|
|
3
|
+
* Keeps NotebookLM sessions alive by refreshing credentials
|
|
4
|
+
* Implements hybrid refresh strategy: expiration-based (primary) + time-based (fallback)
|
|
5
|
+
*/
|
|
6
|
+
import type { Credentials } from './auth.js';
|
|
7
|
+
/**
|
|
8
|
+
* Refresh client for credential refresh
|
|
9
|
+
*/
|
|
10
|
+
export declare class RefreshClient {
|
|
11
|
+
private sapisid;
|
|
12
|
+
private debug;
|
|
13
|
+
private cookies;
|
|
14
|
+
private onCredentialsUpdate?;
|
|
15
|
+
constructor(cookies: string, debug?: boolean, onCredentialsUpdate?: (cookies: string) => void);
|
|
16
|
+
/**
|
|
17
|
+
* Update cookies (called after refresh to keep credentials in sync)
|
|
18
|
+
*/
|
|
19
|
+
updateCookies(cookies: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get current cookies
|
|
22
|
+
*/
|
|
23
|
+
getCookies(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Refresh credentials
|
|
26
|
+
*
|
|
27
|
+
* @param gsessionId - Google session ID (optional)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const refreshClient = new RefreshClient(cookies);
|
|
32
|
+
* await refreshClient.refreshCredentials();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
refreshCredentials(gsessionId?: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Generate SAPISIDHASH
|
|
38
|
+
* Format: SHA1(timestamp + " " + SAPISID + " " + origin)
|
|
39
|
+
*/
|
|
40
|
+
private generateSAPISIDHASH;
|
|
41
|
+
/**
|
|
42
|
+
* Extract cookie value by name
|
|
43
|
+
*/
|
|
44
|
+
private extractCookieValue;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parse auth token to extract expiration time
|
|
48
|
+
* Token format: "tokenValue:timestamp" where timestamp is Unix milliseconds
|
|
49
|
+
* Expiry: timestamp + 1 hour
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseAuthToken(token: string): {
|
|
52
|
+
tokenValue: string;
|
|
53
|
+
expiryTime: Date;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Extract gsessionid from NotebookLM page
|
|
57
|
+
*/
|
|
58
|
+
export declare function extractGSessionId(cookies: string): Promise<string | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Auto-refresh configuration
|
|
61
|
+
*/
|
|
62
|
+
export interface AutoRefreshConfig {
|
|
63
|
+
/** Enable auto-refresh */
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
/** Refresh strategy: 'auto' | 'time' | 'expiration' */
|
|
66
|
+
strategy?: 'auto' | 'time' | 'expiration';
|
|
67
|
+
/** Refresh interval for time-based strategy (ms) - default: 10 minutes */
|
|
68
|
+
interval?: number;
|
|
69
|
+
/** Refresh ahead time for expiration-based strategy (ms) - default: 5 minutes before expiry */
|
|
70
|
+
refreshAhead?: number;
|
|
71
|
+
/** Check interval for expiration-based strategy (ms) - default: 1 minute */
|
|
72
|
+
checkInterval?: number;
|
|
73
|
+
/** Enable debug logging */
|
|
74
|
+
debug?: boolean;
|
|
75
|
+
/** Google session ID (will be extracted if not provided) */
|
|
76
|
+
gsessionId?: string;
|
|
77
|
+
/** Auth token (for expiration-based refresh) */
|
|
78
|
+
authToken?: string;
|
|
79
|
+
/** Callback when credentials are updated after refresh */
|
|
80
|
+
onCredentialsUpdate?: (credentials: Credentials) => void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Default auto-refresh configuration
|
|
84
|
+
*/
|
|
85
|
+
export declare function defaultAutoRefreshConfig(): AutoRefreshConfig;
|
|
86
|
+
/**
|
|
87
|
+
* Auto-refresh manager
|
|
88
|
+
* Automatically refreshes credentials in the background
|
|
89
|
+
* Supports three strategies: 'auto' (expiration-based + time-based fallback), 'time', 'expiration'
|
|
90
|
+
*/
|
|
91
|
+
export declare class AutoRefreshManager {
|
|
92
|
+
private config;
|
|
93
|
+
private refreshClient;
|
|
94
|
+
private timeIntervalId;
|
|
95
|
+
private checkIntervalId;
|
|
96
|
+
private running;
|
|
97
|
+
private gsessionId?;
|
|
98
|
+
private authToken?;
|
|
99
|
+
private lastRefreshTime;
|
|
100
|
+
constructor(cookies: string, config: AutoRefreshConfig);
|
|
101
|
+
/**
|
|
102
|
+
* Update auth token (for expiration-based refresh)
|
|
103
|
+
*/
|
|
104
|
+
updateAuthToken(authToken: string): void;
|
|
105
|
+
/**
|
|
106
|
+
* Update cookies
|
|
107
|
+
*/
|
|
108
|
+
updateCookies(cookies: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Start auto-refresh
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const manager = new AutoRefreshManager(cookies, {
|
|
115
|
+
* enabled: true,
|
|
116
|
+
* strategy: 'auto', // or 'time' or 'expiration'
|
|
117
|
+
* interval: 10 * 60 * 1000, // 10 minutes (time-based)
|
|
118
|
+
* refreshAhead: 5 * 60 * 1000, // 5 minutes before expiry (expiration-based)
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* await manager.start();
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
start(): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Check if token needs refresh based on expiration
|
|
127
|
+
*/
|
|
128
|
+
private checkAndRefreshExpiration;
|
|
129
|
+
/**
|
|
130
|
+
* Perform actual refresh operation
|
|
131
|
+
*/
|
|
132
|
+
private performRefresh;
|
|
133
|
+
/**
|
|
134
|
+
* Stop auto-refresh
|
|
135
|
+
*/
|
|
136
|
+
stop(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Check if auto-refresh is running
|
|
139
|
+
*/
|
|
140
|
+
isRunning(): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Manually trigger a refresh
|
|
143
|
+
*/
|
|
144
|
+
refresh(): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Get last refresh time
|
|
147
|
+
*/
|
|
148
|
+
getLastRefreshTime(): number;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/auth/refresh.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAe7C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAC,CAA4B;gBAGtD,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,OAAe,EACtB,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAYjD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkE5D;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAU3B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAiBtF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgC/E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,OAAO,EAAE,OAAO,CAAC;IAEjB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;IAE1C,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAS5D;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAW3B,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAa;gBAGlC,OAAO,EAAE,MAAM,EACP,MAAM,EAAE,iBAAiB;IAmBnC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC;;;;;;;;;;;;;;OAcG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2F5B;;OAEG;YACW,yBAAyB;IAwCvC;;OAEG;YACW,cAAc;IAI5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAkBZ;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG7B"}
|