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.
Files changed (100) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +4102 -0
  3. package/dist/src/auth/auth.d.ts +46 -0
  4. package/dist/src/auth/auth.d.ts.map +1 -0
  5. package/dist/src/auth/auth.js +323 -0
  6. package/dist/src/auth/auth.js.map +1 -0
  7. package/dist/src/auth/refresh.d.ts +150 -0
  8. package/dist/src/auth/refresh.d.ts.map +1 -0
  9. package/dist/src/auth/refresh.js +433 -0
  10. package/dist/src/auth/refresh.js.map +1 -0
  11. package/dist/src/client/notebooklm-client.d.ts +372 -0
  12. package/dist/src/client/notebooklm-client.d.ts.map +1 -0
  13. package/dist/src/client/notebooklm-client.js +550 -0
  14. package/dist/src/client/notebooklm-client.js.map +1 -0
  15. package/dist/src/index.d.ts +50 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +45 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/rpc/rpc-client.d.ts +48 -0
  20. package/dist/src/rpc/rpc-client.d.ts.map +1 -0
  21. package/dist/src/rpc/rpc-client.js +94 -0
  22. package/dist/src/rpc/rpc-client.js.map +1 -0
  23. package/dist/src/rpc/rpc-methods.d.ts +127 -0
  24. package/dist/src/rpc/rpc-methods.d.ts.map +1 -0
  25. package/dist/src/rpc/rpc-methods.js +169 -0
  26. package/dist/src/rpc/rpc-methods.js.map +1 -0
  27. package/dist/src/services/artifacts.d.ts +1017 -0
  28. package/dist/src/services/artifacts.d.ts.map +1 -0
  29. package/dist/src/services/artifacts.js +5413 -0
  30. package/dist/src/services/artifacts.js.map +1 -0
  31. package/dist/src/services/generation.d.ts +147 -0
  32. package/dist/src/services/generation.d.ts.map +1 -0
  33. package/dist/src/services/generation.js +479 -0
  34. package/dist/src/services/generation.js.map +1 -0
  35. package/dist/src/services/notebook-language.d.ts +109 -0
  36. package/dist/src/services/notebook-language.d.ts.map +1 -0
  37. package/dist/src/services/notebook-language.js +204 -0
  38. package/dist/src/services/notebook-language.js.map +1 -0
  39. package/dist/src/services/notebooks.d.ts +26 -0
  40. package/dist/src/services/notebooks.d.ts.map +1 -0
  41. package/dist/src/services/notebooks.js +539 -0
  42. package/dist/src/services/notebooks.js.map +1 -0
  43. package/dist/src/services/notes.d.ts +72 -0
  44. package/dist/src/services/notes.d.ts.map +1 -0
  45. package/dist/src/services/notes.js +340 -0
  46. package/dist/src/services/notes.js.map +1 -0
  47. package/dist/src/services/sources.d.ts +1085 -0
  48. package/dist/src/services/sources.d.ts.map +1 -0
  49. package/dist/src/services/sources.js +2675 -0
  50. package/dist/src/services/sources.js.map +1 -0
  51. package/dist/src/types/artifact.d.ts +258 -0
  52. package/dist/src/types/artifact.d.ts.map +1 -0
  53. package/dist/src/types/artifact.js +42 -0
  54. package/dist/src/types/artifact.js.map +1 -0
  55. package/dist/src/types/common.d.ts +226 -0
  56. package/dist/src/types/common.d.ts.map +1 -0
  57. package/dist/src/types/common.js +80 -0
  58. package/dist/src/types/common.js.map +1 -0
  59. package/dist/src/types/languages.d.ts +179 -0
  60. package/dist/src/types/languages.d.ts.map +1 -0
  61. package/dist/src/types/languages.js +254 -0
  62. package/dist/src/types/languages.js.map +1 -0
  63. package/dist/src/types/note.d.ts +41 -0
  64. package/dist/src/types/note.d.ts.map +1 -0
  65. package/dist/src/types/note.js +12 -0
  66. package/dist/src/types/note.js.map +1 -0
  67. package/dist/src/types/notebook.d.ts +81 -0
  68. package/dist/src/types/notebook.d.ts.map +1 -0
  69. package/dist/src/types/notebook.js +5 -0
  70. package/dist/src/types/notebook.js.map +1 -0
  71. package/dist/src/types/source.d.ts +241 -0
  72. package/dist/src/types/source.d.ts.map +1 -0
  73. package/dist/src/types/source.js +60 -0
  74. package/dist/src/types/source.js.map +1 -0
  75. package/dist/src/utils/batch-execute.d.ts +58 -0
  76. package/dist/src/utils/batch-execute.d.ts.map +1 -0
  77. package/dist/src/utils/batch-execute.js +398 -0
  78. package/dist/src/utils/batch-execute.js.map +1 -0
  79. package/dist/src/utils/chunked-decoder.d.ts +11 -0
  80. package/dist/src/utils/chunked-decoder.d.ts.map +1 -0
  81. package/dist/src/utils/chunked-decoder.js +326 -0
  82. package/dist/src/utils/chunked-decoder.js.map +1 -0
  83. package/dist/src/utils/chunked-parser.d.ts +61 -0
  84. package/dist/src/utils/chunked-parser.d.ts.map +1 -0
  85. package/dist/src/utils/chunked-parser.js +609 -0
  86. package/dist/src/utils/chunked-parser.js.map +1 -0
  87. package/dist/src/utils/errors.d.ts +58 -0
  88. package/dist/src/utils/errors.d.ts.map +1 -0
  89. package/dist/src/utils/errors.js +357 -0
  90. package/dist/src/utils/errors.js.map +1 -0
  91. package/dist/src/utils/quota.d.ts +213 -0
  92. package/dist/src/utils/quota.d.ts.map +1 -0
  93. package/dist/src/utils/quota.js +518 -0
  94. package/dist/src/utils/quota.js.map +1 -0
  95. package/dist/src/utils/streaming-client.d.ts +129 -0
  96. package/dist/src/utils/streaming-client.d.ts.map +1 -0
  97. package/dist/src/utils/streaming-client.js +559 -0
  98. package/dist/src/utils/streaming-client.js.map +1 -0
  99. package/package.json +85 -7
  100. package/index.js +0 -2
@@ -0,0 +1,559 @@
1
+ /**
2
+ * Streaming client for NotebookLM chat
3
+ * Handles chunked streaming responses from GenerateFreeFormStreamed endpoint
4
+ *
5
+ * REWRITTEN VERSION with improved buffer draining logic
6
+ * ======================================================
7
+ *
8
+ * Key improvements:
9
+ * 1. Simplified buffer processing logic
10
+ * 2. More aggressive buffer draining after stream ends
11
+ * 3. Better handling of incomplete frames
12
+ * 4. Cleaner code structure with same interfaces
13
+ *
14
+ * CRITICAL FIXES MAINTAINED:
15
+ * ==========================
16
+ * 1. ✅ source-path parameter in URL
17
+ * 2. ✅ Single URL encoding (no double encoding)
18
+ * 3. ✅ notebookId as last parameter in request body
19
+ *
20
+ * Response Format:
21
+ * ----------------
22
+ * Chunks arrive in this format:
23
+ * <byte_count>
24
+ * [["wrb.fr", null, "<escaped_json>"]]
25
+ */
26
+ /**
27
+ * Streaming client for NotebookLM chat
28
+ * Handles chunked streaming responses with improved buffer draining
29
+ */
30
+ export class StreamingClient {
31
+ config;
32
+ requestCounter = 3114440;
33
+ buffer = '';
34
+ chunkCount = 0;
35
+ constructor(config) {
36
+ this.config = config;
37
+ this.requestCounter = Math.floor(Math.random() * 9000) + 3114440;
38
+ }
39
+ /**
40
+ * Log message (disabled by default)
41
+ */
42
+ log(_message) {
43
+ // Debug logging disabled
44
+ }
45
+ /**
46
+ * Log error (disabled by default)
47
+ */
48
+ logError(_message) {
49
+ // Debug logging disabled
50
+ }
51
+ /**
52
+ * Reset parser state for new stream
53
+ */
54
+ reset() {
55
+ this.buffer = '';
56
+ this.chunkCount = 0;
57
+ }
58
+ /**
59
+ * Stream a chat request
60
+ *
61
+ * @param notebookId - The notebook UUID
62
+ * @param prompt - User's question
63
+ * @param sourceIds - List of source IDs to query
64
+ * @param conversationId - Conversation UUID
65
+ * @param conversationHistory - Message history (always null)
66
+ * @param options - Streaming options
67
+ */
68
+ async *streamChat(notebookId, prompt, sourceIds, conversationId, conversationHistory, options) {
69
+ const url = this.buildStreamingURL(notebookId);
70
+ const headers = this.buildHeaders();
71
+ const body = this.buildRequestBody(prompt, sourceIds, conversationId, conversationHistory, notebookId);
72
+ if (this.config.debug) {
73
+ const decodedBody = this.decodeRequestBody(body);
74
+ this.log('\n🌊 Streaming Chat Request:');
75
+ this.log('📝 URL: ' + url);
76
+ this.log('📝 Body length: ' + body.length + ' bytes');
77
+ this.log('\n📦 Request Body (decoded):');
78
+ this.log(JSON.stringify(decodedBody, null, 2));
79
+ }
80
+ try {
81
+ const response = await fetch(url, {
82
+ method: 'POST',
83
+ headers,
84
+ body,
85
+ });
86
+ if (!response.ok) {
87
+ const errorText = await response.text();
88
+ throw new Error(`Streaming request failed: ${response.status} ${response.statusText}\n${errorText}`);
89
+ }
90
+ const reader = response.body?.getReader();
91
+ if (!reader) {
92
+ throw new Error('Response body is not readable');
93
+ }
94
+ const decoder = new TextDecoder();
95
+ this.reset();
96
+ let totalBytesReceived = 0;
97
+ let chunkIndex = 0;
98
+ if (this.config.debug) {
99
+ this.log('\n📥 Starting to receive response chunks...');
100
+ }
101
+ // Main streaming loop
102
+ while (true) {
103
+ const { done, value } = await reader.read();
104
+ if (done) {
105
+ if (this.config.debug && this.buffer.length > 0) {
106
+ this.log(`\n📥 Stream ended, buffer has ${this.buffer.length} bytes remaining`);
107
+ }
108
+ // Decode any remaining data from decoder
109
+ try {
110
+ const remainingDecoded = decoder.decode(undefined, { stream: false });
111
+ if (remainingDecoded) {
112
+ totalBytesReceived += remainingDecoded.length;
113
+ this.buffer += remainingDecoded;
114
+ if (this.config.debug) {
115
+ this.log(`📥 Decoded ${remainingDecoded.length} remaining bytes from decoder`);
116
+ }
117
+ }
118
+ }
119
+ catch (decodeError) {
120
+ // Ignore decode errors
121
+ }
122
+ // ✅ CRITICAL: Aggressively drain ALL remaining buffer
123
+ // Keep processing until no more complete frames can be extracted
124
+ let drainIterations = 0;
125
+ const MAX_DRAIN_ITERATIONS = 100;
126
+ if (this.config.debug) {
127
+ this.log(`\n🔄 Starting aggressive buffer drain (buffer size: ${this.buffer.length} bytes)`);
128
+ }
129
+ while (drainIterations < MAX_DRAIN_ITERATIONS) {
130
+ const chunks = this.extractCompleteFrames();
131
+ if (chunks.length === 0) {
132
+ // No more complete frames found
133
+ break;
134
+ }
135
+ if (this.config.debug) {
136
+ this.log(`🔄 Drain iteration ${drainIterations + 1}: extracted ${chunks.length} chunk(s)`);
137
+ }
138
+ for (const parsed of chunks) {
139
+ this.chunkCount++;
140
+ const streamChunk = this.createStreamChunk(parsed);
141
+ if (options?.onChunk) {
142
+ options.onChunk(streamChunk);
143
+ }
144
+ yield streamChunk;
145
+ }
146
+ drainIterations++;
147
+ }
148
+ if (this.config.debug) {
149
+ this.log(`\n✅ Buffer drain complete after ${drainIterations} iterations`);
150
+ this.log(` Final buffer size: ${this.buffer.length} bytes`);
151
+ if (this.buffer.length > 0) {
152
+ this.log(` Remaining buffer: ${this.buffer.substring(0, 200)}`);
153
+ }
154
+ }
155
+ break;
156
+ }
157
+ // Process incoming data
158
+ if (value && value.length > 0) {
159
+ const newData = decoder.decode(value, { stream: true });
160
+ totalBytesReceived += value.length;
161
+ this.buffer += newData;
162
+ if (this.config.debug) {
163
+ this.log(`\n📥 Received chunk #${++chunkIndex}: ${value.length} bytes (total: ${totalBytesReceived} bytes)`);
164
+ }
165
+ // Extract and yield complete frames from buffer
166
+ const chunks = this.extractCompleteFrames();
167
+ for (const parsed of chunks) {
168
+ this.chunkCount++;
169
+ const streamChunk = this.createStreamChunk(parsed);
170
+ if (this.config.debug) {
171
+ this.log(`\n📦 Parsed Chunk #${this.chunkCount}:`);
172
+ this.log(` Text Length: ${parsed.text?.length || 0}`);
173
+ this.log(` Citations: [${parsed.citations?.join(', ') || 'none'}]`);
174
+ }
175
+ if (options?.onChunk) {
176
+ options.onChunk(streamChunk);
177
+ }
178
+ yield streamChunk;
179
+ }
180
+ }
181
+ }
182
+ if (this.config.debug) {
183
+ this.log(`\n✅ Stream complete: ${this.chunkCount} chunks received, ${totalBytesReceived} total bytes`);
184
+ }
185
+ }
186
+ catch (error) {
187
+ if (this.config.debug) {
188
+ this.logError(`\n❌ Streaming Error: ${error}`);
189
+ }
190
+ throw error;
191
+ }
192
+ }
193
+ /**
194
+ * Extract all complete frames from buffer
195
+ * This is the core buffer processing logic - simplified and foolproof
196
+ */
197
+ extractCompleteFrames() {
198
+ const frames = [];
199
+ // Remove XSSI prefix if present
200
+ if (this.buffer.startsWith(")]}'")) {
201
+ this.buffer = this.buffer.substring(4).trimStart();
202
+ }
203
+ // Keep extracting frames until buffer is exhausted
204
+ let iterations = 0;
205
+ const MAX_ITERATIONS = 1000;
206
+ while (this.buffer.length > 0 && iterations < MAX_ITERATIONS) {
207
+ iterations++;
208
+ // Trim leading whitespace
209
+ this.buffer = this.buffer.trimStart();
210
+ if (this.buffer.length === 0) {
211
+ break;
212
+ }
213
+ // Look for byte count pattern: digits followed by newline
214
+ const byteCountMatch = this.buffer.match(/^(\d+)\n/);
215
+ if (!byteCountMatch) {
216
+ // No valid frame header at start - try to find next frame
217
+ const nextFrameMatch = this.buffer.match(/(\d+)\n\[\["wrb\.fr"/);
218
+ if (nextFrameMatch && nextFrameMatch.index !== undefined && nextFrameMatch.index > 0) {
219
+ // Skip invalid content before next frame
220
+ if (this.config.debug) {
221
+ this.log(`⚠️ Skipping ${nextFrameMatch.index} bytes of invalid content`);
222
+ }
223
+ this.buffer = this.buffer.substring(nextFrameMatch.index);
224
+ continue;
225
+ }
226
+ else {
227
+ // No more frames found
228
+ break;
229
+ }
230
+ }
231
+ const byteCount = parseInt(byteCountMatch[1], 10);
232
+ const headerLength = byteCountMatch[0].length;
233
+ const requiredLength = headerLength + byteCount;
234
+ // Check if we have the complete frame
235
+ if (this.buffer.length < requiredLength) {
236
+ // Incomplete frame - wait for more data
237
+ if (this.config.debug) {
238
+ this.log(`⏳ Incomplete frame: need ${requiredLength} bytes, have ${this.buffer.length} bytes`);
239
+ }
240
+ break;
241
+ }
242
+ // Extract the complete frame
243
+ const frameText = this.buffer.substring(headerLength, requiredLength);
244
+ // Parse the frame
245
+ try {
246
+ const parsed = this.parseFrame(byteCount, frameText);
247
+ if (parsed) {
248
+ frames.push(parsed);
249
+ if (this.config.debug) {
250
+ this.log(`✅ Parsed frame: ${parsed.text?.length || 0} chars`);
251
+ }
252
+ }
253
+ else {
254
+ // Incomplete frame (incremental update) - skip it
255
+ if (this.config.debug) {
256
+ this.log(`⏭️ Skipping incomplete frame (${byteCount} bytes)`);
257
+ }
258
+ }
259
+ }
260
+ catch (error) {
261
+ // Parsing error - log and continue
262
+ if (this.config.debug) {
263
+ this.logError(`❌ Error parsing frame: ${error}`);
264
+ }
265
+ }
266
+ // ALWAYS remove the frame from buffer (even if parsing failed)
267
+ this.buffer = this.buffer.substring(requiredLength).trimStart();
268
+ }
269
+ return frames;
270
+ }
271
+ /**
272
+ * Parse a single frame
273
+ * Returns null for incomplete frames (incremental updates)
274
+ */
275
+ parseFrame(byteCount, frameText) {
276
+ try {
277
+ // Trim trailing whitespace
278
+ let jsonText = frameText.trimEnd();
279
+ // Try to find valid JSON by removing trailing protocol markers
280
+ try {
281
+ JSON.parse(jsonText);
282
+ }
283
+ catch (e) {
284
+ // Try removing trailing digits/whitespace (protocol markers)
285
+ let testText = jsonText;
286
+ let foundValid = false;
287
+ for (let i = 0; i < 10 && testText.length > 0; i++) {
288
+ const lastChar = testText[testText.length - 1];
289
+ if (/[\d\n\r\s]/.test(lastChar)) {
290
+ testText = testText.slice(0, -1);
291
+ try {
292
+ JSON.parse(testText);
293
+ jsonText = testText;
294
+ foundValid = true;
295
+ break;
296
+ }
297
+ catch {
298
+ // Continue
299
+ }
300
+ }
301
+ else {
302
+ break;
303
+ }
304
+ }
305
+ if (!foundValid) {
306
+ // Check if it's an incomplete frame
307
+ if (e instanceof SyntaxError &&
308
+ (e.message.includes('Unterminated string') ||
309
+ e.message.includes('Unexpected non-whitespace'))) {
310
+ return null; // Skip incomplete frame
311
+ }
312
+ return null;
313
+ }
314
+ }
315
+ // Parse outer wrapper: [["wrb.fr", null, "<escaped_json>"]]
316
+ const outerParsed = JSON.parse(jsonText);
317
+ if (!Array.isArray(outerParsed) || outerParsed.length === 0) {
318
+ return null;
319
+ }
320
+ const wrbFrame = outerParsed[0];
321
+ if (!Array.isArray(wrbFrame) || wrbFrame[0] !== 'wrb.fr') {
322
+ return null;
323
+ }
324
+ // Extract escaped JSON
325
+ const escapedJson = wrbFrame[2];
326
+ if (typeof escapedJson !== 'string') {
327
+ // Check for error frames
328
+ if (wrbFrame.length > 5 && Array.isArray(wrbFrame[5]) && wrbFrame[5].length > 0) {
329
+ return {
330
+ byteCount,
331
+ text: '',
332
+ thinking: [],
333
+ response: '',
334
+ isError: true,
335
+ errorCode: wrbFrame[5][0],
336
+ citations: [],
337
+ };
338
+ }
339
+ return null;
340
+ }
341
+ // Parse inner JSON
342
+ let innerData;
343
+ try {
344
+ innerData = JSON.parse(escapedJson);
345
+ }
346
+ catch (parseError) {
347
+ if (parseError instanceof SyntaxError &&
348
+ (parseError.message.includes('Unterminated string') ||
349
+ parseError.message.includes('Unexpected non-whitespace'))) {
350
+ return null; // Skip incomplete frame
351
+ }
352
+ throw parseError;
353
+ }
354
+ if (!Array.isArray(innerData) || innerData.length === 0) {
355
+ return null;
356
+ }
357
+ // Extract data
358
+ const dataArray = innerData[0];
359
+ if (!Array.isArray(dataArray) || dataArray.length === 0) {
360
+ return null;
361
+ }
362
+ // Extract text (full accumulated text)
363
+ let text = dataArray[0] || '';
364
+ if (typeof text !== 'string') {
365
+ text = text === null || text === undefined ? '' : String(text);
366
+ }
367
+ const metadata = dataArray[2];
368
+ const formatting = dataArray[4];
369
+ const statusCode = dataArray[8];
370
+ // Extract metadata
371
+ let conversationId;
372
+ let messageId;
373
+ let timestamp;
374
+ if (Array.isArray(metadata) && metadata.length >= 3) {
375
+ conversationId = metadata[0];
376
+ messageId = metadata[1];
377
+ timestamp = metadata[2];
378
+ }
379
+ // Extract thinking headers (**Header**)
380
+ const thinking = [];
381
+ const thinkingMatches = text.match(/\*\*([^*]+)\*\*/g);
382
+ if (thinkingMatches) {
383
+ for (const match of thinkingMatches) {
384
+ thinking.push(match.slice(2, -2).trim());
385
+ }
386
+ }
387
+ // Extract response (non-bold text)
388
+ const response = text.replace(/\*\*[^*]+\*\*/g, '');
389
+ // Extract citations [1], [2], etc.
390
+ const citations = [];
391
+ const citationMatches = text.match(/\[(\d+)\]/g);
392
+ if (citationMatches) {
393
+ for (const match of citationMatches) {
394
+ const num = parseInt(match.slice(1, -1), 10);
395
+ if (!citations.includes(num)) {
396
+ citations.push(num);
397
+ }
398
+ }
399
+ }
400
+ return {
401
+ byteCount,
402
+ text,
403
+ thinking,
404
+ response,
405
+ metadata: conversationId && messageId && timestamp ? [conversationId, messageId, timestamp] : undefined,
406
+ messageIds: conversationId && messageId ? [conversationId, messageId] : undefined,
407
+ timestamp,
408
+ isThinking: thinking.length > 0,
409
+ isResponse: response.length > 0,
410
+ formatting,
411
+ citations: citations.length > 0 ? citations : undefined,
412
+ rawData: innerData,
413
+ isError: statusCode === 4 || statusCode === 139,
414
+ errorCode: statusCode,
415
+ };
416
+ }
417
+ catch (error) {
418
+ // Check for incomplete frame
419
+ if (error instanceof SyntaxError &&
420
+ (error.message.includes('Unterminated string') ||
421
+ error.message.includes('Unexpected non-whitespace'))) {
422
+ return null;
423
+ }
424
+ if (this.config.debug) {
425
+ this.logError(`Error parsing frame: ${error}`);
426
+ }
427
+ throw error;
428
+ }
429
+ }
430
+ /**
431
+ * Create StreamChunk from ParsedChunk
432
+ */
433
+ createStreamChunk(parsed) {
434
+ return {
435
+ chunkNumber: this.chunkCount,
436
+ byteCount: parsed.byteCount,
437
+ text: parsed.text || '',
438
+ thinking: parsed.thinking || [],
439
+ response: parsed.response || '',
440
+ metadata: parsed.metadata,
441
+ messageIds: parsed.messageIds,
442
+ timestamp: parsed.timestamp,
443
+ isThinking: parsed.isThinking,
444
+ isResponse: parsed.isResponse,
445
+ formatting: parsed.formatting,
446
+ citations: parsed.citations || [],
447
+ rawData: parsed.rawData,
448
+ isError: parsed.isError,
449
+ errorCode: parsed.errorCode,
450
+ };
451
+ }
452
+ /**
453
+ * Build streaming URL
454
+ */
455
+ buildStreamingURL(notebookId) {
456
+ this.requestCounter++;
457
+ const batchClient = this.config.batchClient;
458
+ // Default fSid value (fallback if not provided via config)
459
+ // This is a public constant used by Google's streaming API
460
+ let fSid = '-7958112141384765164';
461
+ if (batchClient?.config?.urlParams?.['f.sid']) {
462
+ fSid = batchClient.config.urlParams['f.sid'];
463
+ }
464
+ else if (this.config.urlParams?.['f.sid']) {
465
+ fSid = this.config.urlParams['f.sid'];
466
+ }
467
+ const sourcePath = `/notebook/${notebookId}`;
468
+ const params = new URLSearchParams({
469
+ bl: 'boq_labs-tailwind-frontend_20260101.17_p0',
470
+ 'f.sid': fSid,
471
+ hl: 'en',
472
+ authuser: this.config.authUser || '0',
473
+ pageId: 'none',
474
+ _reqid: this.requestCounter.toString(),
475
+ rt: 'c',
476
+ 'source-path': sourcePath,
477
+ });
478
+ return `https://notebooklm.google.com/_/LabsTailwindUi/data/google.internal.labs.tailwind.orchestration.v1.LabsTailwindOrchestrationService/GenerateFreeFormStreamed?${params.toString()}`;
479
+ }
480
+ /**
481
+ * Build request headers
482
+ */
483
+ buildHeaders() {
484
+ return {
485
+ 'accept': '*/*',
486
+ 'accept-language': 'en-US,en;q=0.9',
487
+ 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
488
+ 'origin': 'https://notebooklm.google.com',
489
+ 'referer': 'https://notebooklm.google.com/',
490
+ 'sec-fetch-dest': 'empty',
491
+ 'sec-fetch-mode': 'cors',
492
+ 'sec-fetch-site': 'same-origin',
493
+ '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',
494
+ 'x-goog-ext-353267353-jspb': '[null,null,null,282611]',
495
+ 'x-same-domain': '1',
496
+ 'cookie': this.config.cookies,
497
+ ...this.config.headers,
498
+ };
499
+ }
500
+ /**
501
+ * Build request body
502
+ */
503
+ buildRequestBody(prompt, sourceIds, conversationId, conversationHistory, notebookId) {
504
+ const contextItems = [];
505
+ if (sourceIds && sourceIds.length > 0) {
506
+ for (const sourceId of sourceIds) {
507
+ contextItems.push([[sourceId]]);
508
+ }
509
+ }
510
+ else {
511
+ contextItems.push([[conversationId]]);
512
+ }
513
+ const innerRequest = [
514
+ contextItems,
515
+ prompt,
516
+ null,
517
+ [2, null, [1]],
518
+ notebookId,
519
+ ];
520
+ const fReq = [null, JSON.stringify(innerRequest)];
521
+ const formData = new URLSearchParams();
522
+ formData.append('f.req', JSON.stringify(fReq));
523
+ formData.append('at', this.config.authToken);
524
+ return formData.toString();
525
+ }
526
+ /**
527
+ * Decode request body for logging
528
+ */
529
+ decodeRequestBody(body) {
530
+ try {
531
+ const params = new URLSearchParams(body);
532
+ const fReqStr = params.get('f.req');
533
+ if (fReqStr) {
534
+ const fReq = JSON.parse(fReqStr);
535
+ if (Array.isArray(fReq) && fReq.length >= 2 && typeof fReq[1] === 'string') {
536
+ const innerRequest = JSON.parse(fReq[1]);
537
+ return {
538
+ 'f.req': fReq,
539
+ 'at': params.get('at')?.substring(0, 20) + '...',
540
+ decoded: {
541
+ innerRequest: innerRequest,
542
+ contextItems: innerRequest[0],
543
+ prompt: innerRequest[1],
544
+ thirdParam: innerRequest[2],
545
+ metadata: innerRequest[3],
546
+ notebookId: innerRequest[4],
547
+ }
548
+ };
549
+ }
550
+ return { 'f.req': fReq, 'at': params.get('at')?.substring(0, 20) + '...' };
551
+ }
552
+ return { raw: body };
553
+ }
554
+ catch (error) {
555
+ return { error: 'Failed to decode', raw: body.substring(0, 500) };
556
+ }
557
+ }
558
+ }
559
+ //# sourceMappingURL=streaming-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-client.js","sourceRoot":"","sources":["../../../src/utils/streaming-client.ts"],"names":[],"mappings":"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"}