notebooklm-mcp-ultimate 2.2.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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +420 -0
  3. package/dist/api/batch-execute-client.d.ts +232 -0
  4. package/dist/api/batch-execute-client.d.ts.map +1 -0
  5. package/dist/api/batch-execute-client.js +672 -0
  6. package/dist/api/batch-execute-client.js.map +1 -0
  7. package/dist/api/content-types.d.ts +44 -0
  8. package/dist/api/content-types.d.ts.map +1 -0
  9. package/dist/api/content-types.js +89 -0
  10. package/dist/api/content-types.js.map +1 -0
  11. package/dist/api/csrf-manager.d.ts +94 -0
  12. package/dist/api/csrf-manager.d.ts.map +1 -0
  13. package/dist/api/csrf-manager.js +178 -0
  14. package/dist/api/csrf-manager.js.map +1 -0
  15. package/dist/api/index.d.ts +27 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +56 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/operation-poller.d.ts +67 -0
  20. package/dist/api/operation-poller.d.ts.map +1 -0
  21. package/dist/api/operation-poller.js +132 -0
  22. package/dist/api/operation-poller.js.map +1 -0
  23. package/dist/api/request-builder.d.ts +196 -0
  24. package/dist/api/request-builder.d.ts.map +1 -0
  25. package/dist/api/request-builder.js +371 -0
  26. package/dist/api/request-builder.js.map +1 -0
  27. package/dist/api/response-parser.d.ts +124 -0
  28. package/dist/api/response-parser.d.ts.map +1 -0
  29. package/dist/api/response-parser.js +595 -0
  30. package/dist/api/response-parser.js.map +1 -0
  31. package/dist/api/rpc-ids.d.ts +92 -0
  32. package/dist/api/rpc-ids.d.ts.map +1 -0
  33. package/dist/api/rpc-ids.js +138 -0
  34. package/dist/api/rpc-ids.js.map +1 -0
  35. package/dist/api/streaming-chat-client.d.ts +50 -0
  36. package/dist/api/streaming-chat-client.d.ts.map +1 -0
  37. package/dist/api/streaming-chat-client.js +198 -0
  38. package/dist/api/streaming-chat-client.js.map +1 -0
  39. package/dist/api/types.d.ts +318 -0
  40. package/dist/api/types.d.ts.map +1 -0
  41. package/dist/api/types.js +22 -0
  42. package/dist/api/types.js.map +1 -0
  43. package/dist/auth/auth-manager.d.ts +163 -0
  44. package/dist/auth/auth-manager.d.ts.map +1 -0
  45. package/dist/auth/auth-manager.js +1055 -0
  46. package/dist/auth/auth-manager.js.map +1 -0
  47. package/dist/auth/cookie-store.d.ts +121 -0
  48. package/dist/auth/cookie-store.d.ts.map +1 -0
  49. package/dist/auth/cookie-store.js +283 -0
  50. package/dist/auth/cookie-store.js.map +1 -0
  51. package/dist/config.d.ts +89 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +217 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/errors.d.ts +26 -0
  56. package/dist/errors.d.ts.map +1 -0
  57. package/dist/errors.js +41 -0
  58. package/dist/errors.js.map +1 -0
  59. package/dist/index.d.ts +32 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +439 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/library/notebook-library.d.ts +79 -0
  64. package/dist/library/notebook-library.d.ts.map +1 -0
  65. package/dist/library/notebook-library.js +296 -0
  66. package/dist/library/notebook-library.js.map +1 -0
  67. package/dist/library/types.d.ts +67 -0
  68. package/dist/library/types.d.ts.map +1 -0
  69. package/dist/library/types.js +8 -0
  70. package/dist/library/types.js.map +1 -0
  71. package/dist/operations/content-operations.d.ts +78 -0
  72. package/dist/operations/content-operations.d.ts.map +1 -0
  73. package/dist/operations/content-operations.js +162 -0
  74. package/dist/operations/content-operations.js.map +1 -0
  75. package/dist/operations/hybrid-executor.d.ts +47 -0
  76. package/dist/operations/hybrid-executor.d.ts.map +1 -0
  77. package/dist/operations/hybrid-executor.js +114 -0
  78. package/dist/operations/hybrid-executor.js.map +1 -0
  79. package/dist/operations/notebook-crud-operations.d.ts +52 -0
  80. package/dist/operations/notebook-crud-operations.d.ts.map +1 -0
  81. package/dist/operations/notebook-crud-operations.js +248 -0
  82. package/dist/operations/notebook-crud-operations.js.map +1 -0
  83. package/dist/operations/research-operations.d.ts +42 -0
  84. package/dist/operations/research-operations.d.ts.map +1 -0
  85. package/dist/operations/research-operations.js +189 -0
  86. package/dist/operations/research-operations.js.map +1 -0
  87. package/dist/operations/source-operations.d.ts +59 -0
  88. package/dist/operations/source-operations.d.ts.map +1 -0
  89. package/dist/operations/source-operations.js +280 -0
  90. package/dist/operations/source-operations.js.map +1 -0
  91. package/dist/operations/studio-operations.d.ts +98 -0
  92. package/dist/operations/studio-operations.d.ts.map +1 -0
  93. package/dist/operations/studio-operations.js +309 -0
  94. package/dist/operations/studio-operations.js.map +1 -0
  95. package/dist/resources/resource-handlers.d.ts +22 -0
  96. package/dist/resources/resource-handlers.d.ts.map +1 -0
  97. package/dist/resources/resource-handlers.js +216 -0
  98. package/dist/resources/resource-handlers.js.map +1 -0
  99. package/dist/session/browser-session.d.ts +113 -0
  100. package/dist/session/browser-session.d.ts.map +1 -0
  101. package/dist/session/browser-session.js +670 -0
  102. package/dist/session/browser-session.js.map +1 -0
  103. package/dist/session/session-manager.d.ts +88 -0
  104. package/dist/session/session-manager.d.ts.map +1 -0
  105. package/dist/session/session-manager.js +314 -0
  106. package/dist/session/session-manager.js.map +1 -0
  107. package/dist/session/shared-context-manager.d.ts +107 -0
  108. package/dist/session/shared-context-manager.d.ts.map +1 -0
  109. package/dist/session/shared-context-manager.js +447 -0
  110. package/dist/session/shared-context-manager.js.map +1 -0
  111. package/dist/tools/definitions/ask-question.d.ts +8 -0
  112. package/dist/tools/definitions/ask-question.d.ts.map +1 -0
  113. package/dist/tools/definitions/ask-question.js +213 -0
  114. package/dist/tools/definitions/ask-question.js.map +1 -0
  115. package/dist/tools/definitions/content-generation.d.ts +52 -0
  116. package/dist/tools/definitions/content-generation.d.ts.map +1 -0
  117. package/dist/tools/definitions/content-generation.js +236 -0
  118. package/dist/tools/definitions/content-generation.js.map +1 -0
  119. package/dist/tools/definitions/notebook-crud.d.ts +9 -0
  120. package/dist/tools/definitions/notebook-crud.d.ts.map +1 -0
  121. package/dist/tools/definitions/notebook-crud.js +156 -0
  122. package/dist/tools/definitions/notebook-crud.js.map +1 -0
  123. package/dist/tools/definitions/notebook-management.d.ts +3 -0
  124. package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
  125. package/dist/tools/definitions/notebook-management.js +243 -0
  126. package/dist/tools/definitions/notebook-management.js.map +1 -0
  127. package/dist/tools/definitions/research.d.ts +23 -0
  128. package/dist/tools/definitions/research.d.ts.map +1 -0
  129. package/dist/tools/definitions/research.js +108 -0
  130. package/dist/tools/definitions/research.js.map +1 -0
  131. package/dist/tools/definitions/session-management.d.ts +3 -0
  132. package/dist/tools/definitions/session-management.d.ts.map +1 -0
  133. package/dist/tools/definitions/session-management.js +41 -0
  134. package/dist/tools/definitions/session-management.js.map +1 -0
  135. package/dist/tools/definitions/source-management.d.ts +39 -0
  136. package/dist/tools/definitions/source-management.d.ts.map +1 -0
  137. package/dist/tools/definitions/source-management.js +224 -0
  138. package/dist/tools/definitions/source-management.js.map +1 -0
  139. package/dist/tools/definitions/studio.d.ts +36 -0
  140. package/dist/tools/definitions/studio.d.ts.map +1 -0
  141. package/dist/tools/definitions/studio.js +153 -0
  142. package/dist/tools/definitions/studio.js.map +1 -0
  143. package/dist/tools/definitions/system.d.ts +3 -0
  144. package/dist/tools/definitions/system.d.ts.map +1 -0
  145. package/dist/tools/definitions/system.js +143 -0
  146. package/dist/tools/definitions/system.js.map +1 -0
  147. package/dist/tools/definitions.d.ts +12 -0
  148. package/dist/tools/definitions.d.ts.map +1 -0
  149. package/dist/tools/definitions.js +36 -0
  150. package/dist/tools/definitions.js.map +1 -0
  151. package/dist/tools/handlers/content-handlers.d.ts +287 -0
  152. package/dist/tools/handlers/content-handlers.d.ts.map +1 -0
  153. package/dist/tools/handlers/content-handlers.js +244 -0
  154. package/dist/tools/handlers/content-handlers.js.map +1 -0
  155. package/dist/tools/handlers/notebook-crud-handlers.d.ts +69 -0
  156. package/dist/tools/handlers/notebook-crud-handlers.d.ts.map +1 -0
  157. package/dist/tools/handlers/notebook-crud-handlers.js +117 -0
  158. package/dist/tools/handlers/notebook-crud-handlers.js.map +1 -0
  159. package/dist/tools/handlers/research-handlers.d.ts +37 -0
  160. package/dist/tools/handlers/research-handlers.d.ts.map +1 -0
  161. package/dist/tools/handlers/research-handlers.js +87 -0
  162. package/dist/tools/handlers/research-handlers.js.map +1 -0
  163. package/dist/tools/handlers/source-handlers.d.ts +52 -0
  164. package/dist/tools/handlers/source-handlers.d.ts.map +1 -0
  165. package/dist/tools/handlers/source-handlers.js +177 -0
  166. package/dist/tools/handlers/source-handlers.js.map +1 -0
  167. package/dist/tools/handlers/studio-handlers.d.ts +125 -0
  168. package/dist/tools/handlers/studio-handlers.d.ts.map +1 -0
  169. package/dist/tools/handlers/studio-handlers.js +183 -0
  170. package/dist/tools/handlers/studio-handlers.js.map +1 -0
  171. package/dist/tools/handlers.d.ts +629 -0
  172. package/dist/tools/handlers.d.ts.map +1 -0
  173. package/dist/tools/handlers.js +833 -0
  174. package/dist/tools/handlers.js.map +1 -0
  175. package/dist/tools/index.d.ts +8 -0
  176. package/dist/tools/index.d.ts.map +1 -0
  177. package/dist/tools/index.js +8 -0
  178. package/dist/tools/index.js.map +1 -0
  179. package/dist/types.d.ts +82 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +5 -0
  182. package/dist/types.js.map +1 -0
  183. package/dist/utils/cleanup-manager.d.ts +133 -0
  184. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  185. package/dist/utils/cleanup-manager.js +673 -0
  186. package/dist/utils/cleanup-manager.js.map +1 -0
  187. package/dist/utils/cli-handler.d.ts +16 -0
  188. package/dist/utils/cli-handler.d.ts.map +1 -0
  189. package/dist/utils/cli-handler.js +102 -0
  190. package/dist/utils/cli-handler.js.map +1 -0
  191. package/dist/utils/logger.d.ts +61 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +92 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/page-utils.d.ts +54 -0
  196. package/dist/utils/page-utils.d.ts.map +1 -0
  197. package/dist/utils/page-utils.js +405 -0
  198. package/dist/utils/page-utils.js.map +1 -0
  199. package/dist/utils/settings-manager.d.ts +37 -0
  200. package/dist/utils/settings-manager.d.ts.map +1 -0
  201. package/dist/utils/settings-manager.js +120 -0
  202. package/dist/utils/settings-manager.js.map +1 -0
  203. package/dist/utils/stealth-utils.d.ts +135 -0
  204. package/dist/utils/stealth-utils.d.ts.map +1 -0
  205. package/dist/utils/stealth-utils.js +398 -0
  206. package/dist/utils/stealth-utils.js.map +1 -0
  207. package/package.json +63 -0
@@ -0,0 +1,595 @@
1
+ /**
2
+ * Response Parser for NotebookLM batchexecute API
3
+ * PARSER VERSION: v3-fixed-unwrap (2026-03-21 15:05)
4
+ *
5
+ * Parses the specific response format used by Google's batchexecute endpoint.
6
+ * The format is a custom streaming protocol with multiple lines of JSON.
7
+ *
8
+ * Response format:
9
+ * )]}'\n
10
+ * [length]\n
11
+ * [[json_array]]\n
12
+ * [length]\n
13
+ * [[json_array]]\n
14
+ * ...
15
+ *
16
+ * Each JSON array contains response data for one or more RPC calls.
17
+ */
18
+ import { log } from '../utils/logger.js';
19
+ /**
20
+ * Parse a batchexecute response
21
+ *
22
+ * @param responseText - Raw response text from the API
23
+ * @returns Parsed response with individual RPC results
24
+ */
25
+ export function parseBatchExecuteResponse(responseText) {
26
+ const responses = new Map();
27
+ try {
28
+ // Remove the security prefix )]}' if present
29
+ let cleaned = responseText;
30
+ if (cleaned.startsWith(")]}'")) {
31
+ cleaned = cleaned.slice(4);
32
+ }
33
+ cleaned = cleaned.trim();
34
+ // Split into lines and try to parse each as JSON
35
+ // The format is: length\nJSON\nlength\nJSON\n...
36
+ // But length indicators can be unreliable after split, so we
37
+ // simply try to parse every non-numeric line as JSON.
38
+ const lines = cleaned.split('\n');
39
+ for (const line of lines) {
40
+ const trimmed = line.trim();
41
+ if (!trimmed)
42
+ continue;
43
+ // Skip pure numeric lines (length indicators)
44
+ if (/^\d+$/.test(trimmed))
45
+ continue;
46
+ // Try to parse as JSON
47
+ try {
48
+ const parsed = JSON.parse(trimmed);
49
+ processResponseChunk(parsed, responses);
50
+ }
51
+ catch {
52
+ // Not valid JSON, skip
53
+ }
54
+ }
55
+ return {
56
+ success: responses.size > 0,
57
+ responses,
58
+ rawResponse: responseText,
59
+ };
60
+ }
61
+ catch (error) {
62
+ return {
63
+ success: false,
64
+ responses,
65
+ rawResponse: responseText,
66
+ error: `Parse error: ${error}`,
67
+ };
68
+ }
69
+ }
70
+ /**
71
+ * Process a single response chunk
72
+ *
73
+ * @param data - Parsed JSON data
74
+ * @param responses - Map to store responses
75
+ */
76
+ function processResponseChunk(data, responses) {
77
+ if (!Array.isArray(data)) {
78
+ return;
79
+ }
80
+ // Response format varies:
81
+ // Single-wrapped: [["wrb.fr","rpcId","[data]",...], ["di",N], ...]
82
+ // Double-wrapped: [[["wrb.fr","rpcId","[data]",...], ["di",N], ...]]
83
+ // Detect by checking if data[0][0] is a string (single) or array (double)
84
+ const firstElement = data[0];
85
+ const items = Array.isArray(firstElement) && typeof firstElement[0] === 'string'
86
+ ? data // single-wrapped: data itself contains the items
87
+ : (Array.isArray(firstElement) ? firstElement : data); // double-wrapped: unwrap one level
88
+ for (const item of items) {
89
+ if (!Array.isArray(item)) {
90
+ continue;
91
+ }
92
+ // Check for the "wrb.fr" marker which indicates a response
93
+ if (item[0] === 'wrb.fr') {
94
+ const rpcId = item[1];
95
+ const responseJson = item[2];
96
+ if (typeof rpcId === 'string') {
97
+ try {
98
+ const responseData = typeof responseJson === 'string'
99
+ ? JSON.parse(responseJson)
100
+ : responseJson;
101
+ responses.set(rpcId, {
102
+ success: true,
103
+ data: responseData,
104
+ rawData: item,
105
+ });
106
+ }
107
+ catch {
108
+ responses.set(rpcId, {
109
+ success: true,
110
+ data: responseJson,
111
+ rawData: item,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ // Check for error responses
117
+ if (item[0] === 'er') {
118
+ const rpcId = item[1];
119
+ const errorInfo = item[2];
120
+ if (typeof rpcId === 'string') {
121
+ responses.set(rpcId, {
122
+ success: false,
123
+ error: `RPC error: ${JSON.stringify(errorInfo)}`,
124
+ rawData: item,
125
+ });
126
+ }
127
+ }
128
+ // Check for di.dr (another response format)
129
+ if (item[0] === 'di' && Array.isArray(item[1])) {
130
+ // Direct response data
131
+ }
132
+ }
133
+ }
134
+ /**
135
+ * Extract a specific response from a BatchExecuteResponse
136
+ *
137
+ * @param response - The batch response
138
+ * @param rpcId - The RPC ID to extract
139
+ * @returns The specific RPC response or undefined
140
+ */
141
+ export function extractResponse(response, rpcId) {
142
+ return response.responses.get(rpcId);
143
+ }
144
+ /**
145
+ * Get first successful response from a BatchExecuteResponse
146
+ *
147
+ * @param response - The batch response
148
+ * @returns First successful response or undefined
149
+ */
150
+ export function getFirstSuccessfulResponse(response) {
151
+ for (const [, rpcResponse] of response.responses) {
152
+ if (rpcResponse.success) {
153
+ return rpcResponse;
154
+ }
155
+ }
156
+ return undefined;
157
+ }
158
+ // ============================================================================
159
+ // Notebook Parsing
160
+ // ============================================================================
161
+ /**
162
+ * Parse notebook list response
163
+ *
164
+ * @param data - Raw response data
165
+ * @returns Array of notebooks
166
+ */
167
+ export function parseNotebookList(data) {
168
+ const notebooks = [];
169
+ if (!Array.isArray(data)) {
170
+ return notebooks;
171
+ }
172
+ // Notebook list is typically in the first array element
173
+ const notebookArray = data[0];
174
+ if (!Array.isArray(notebookArray)) {
175
+ return notebooks;
176
+ }
177
+ for (const item of notebookArray) {
178
+ if (!Array.isArray(item)) {
179
+ continue;
180
+ }
181
+ const notebook = parseNotebookItem(item);
182
+ if (notebook) {
183
+ notebooks.push(notebook);
184
+ }
185
+ }
186
+ return notebooks;
187
+ }
188
+ /**
189
+ * Parse a single notebook item from the response
190
+ *
191
+ * @param item - Raw notebook data array
192
+ * @returns Parsed notebook or null
193
+ */
194
+ export function parseNotebookItem(item) {
195
+ try {
196
+ // Typical structure: [id, title, null, null, timestamp_created, timestamp_modified, ...]
197
+ const id = item[0];
198
+ const title = item[1] || 'Untitled notebook';
199
+ if (typeof id !== 'string') {
200
+ return null;
201
+ }
202
+ const notebook = {
203
+ id,
204
+ title: String(title),
205
+ };
206
+ // Try to extract timestamps (positions may vary)
207
+ // They're typically in microseconds
208
+ if (typeof item[4] === 'number') {
209
+ notebook.createdAt = item[4];
210
+ }
211
+ if (typeof item[5] === 'number') {
212
+ notebook.modifiedAt = item[5];
213
+ }
214
+ // Try to find source count
215
+ for (let i = 6; i < item.length; i++) {
216
+ const element = item[i];
217
+ if (Array.isArray(element) && typeof element[0] === 'number') {
218
+ notebook.sourceCount = element[0];
219
+ break;
220
+ }
221
+ }
222
+ return notebook;
223
+ }
224
+ catch {
225
+ return null;
226
+ }
227
+ }
228
+ /**
229
+ * Parse notebook creation response
230
+ *
231
+ * @param data - Raw response data
232
+ * @returns Created notebook ID or null
233
+ */
234
+ export function parseCreateNotebookResponse(data) {
235
+ if (!Array.isArray(data)) {
236
+ return null;
237
+ }
238
+ // Notebook ID is at index 2 (index 0 is title, which can be empty string)
239
+ if (typeof data[2] === 'string' && data[2].length > 0) {
240
+ return data[2];
241
+ }
242
+ // Fallback: check index 0 if non-empty
243
+ if (typeof data[0] === 'string' && data[0].length > 0) {
244
+ return data[0];
245
+ }
246
+ // Fallback: nested array
247
+ if (Array.isArray(data[0]) && typeof data[0][0] === 'string') {
248
+ return data[0][0];
249
+ }
250
+ return null;
251
+ }
252
+ // ============================================================================
253
+ // Source Parsing
254
+ // ============================================================================
255
+ /**
256
+ * Parse source list response
257
+ *
258
+ * @param data - Raw response data
259
+ * @returns Array of sources
260
+ */
261
+ export function parseSourceList(data) {
262
+ const sources = [];
263
+ if (!Array.isArray(data)) {
264
+ return sources;
265
+ }
266
+ // Sources are typically in the first array
267
+ const sourceArray = data[0];
268
+ if (!Array.isArray(sourceArray)) {
269
+ return sources;
270
+ }
271
+ for (const item of sourceArray) {
272
+ if (!Array.isArray(item)) {
273
+ continue;
274
+ }
275
+ const source = parseSourceItem(item);
276
+ if (source) {
277
+ sources.push(source);
278
+ }
279
+ }
280
+ return sources;
281
+ }
282
+ /**
283
+ * Parse a single source item
284
+ *
285
+ * @param item - Raw source data array
286
+ * @returns Parsed source or null
287
+ */
288
+ export function parseSourceItem(item) {
289
+ try {
290
+ const id = item[0];
291
+ const title = item[1] || item[2] || 'Untitled source';
292
+ if (typeof id !== 'string') {
293
+ return null;
294
+ }
295
+ // Determine source type from various indicators
296
+ let type = 'text';
297
+ let url;
298
+ // Check for URL-like content
299
+ for (const field of item) {
300
+ if (typeof field === 'string') {
301
+ if (field.startsWith('http://') || field.startsWith('https://')) {
302
+ url = field;
303
+ if (field.includes('youtube.com') || field.includes('youtu.be')) {
304
+ type = 'youtube';
305
+ }
306
+ else if (field.includes('drive.google.com')) {
307
+ type = 'drive';
308
+ }
309
+ else {
310
+ type = 'url';
311
+ }
312
+ break;
313
+ }
314
+ }
315
+ }
316
+ // Check for type indicators — use the FIRST numeric field after index 1 (the ID/title
317
+ // positions) and stop after the first match to avoid later numbers overwriting the type.
318
+ for (let i = 2; i < item.length; i++) {
319
+ const field = item[i];
320
+ if (typeof field === 'number' && field >= 1 && field <= 5) {
321
+ switch (field) {
322
+ case 1:
323
+ type = 'pdf';
324
+ break;
325
+ case 2:
326
+ type = 'url';
327
+ break;
328
+ case 3:
329
+ type = 'youtube';
330
+ break;
331
+ case 4:
332
+ type = 'drive';
333
+ break;
334
+ case 5:
335
+ type = 'text';
336
+ break;
337
+ }
338
+ break; // Use first match only — later numbers are not type codes
339
+ }
340
+ }
341
+ // Determine status
342
+ let status = 'ready';
343
+ // Check for status indicators (typically numeric codes)
344
+ for (const field of item) {
345
+ if (Array.isArray(field) && field.length > 0) {
346
+ const statusCode = field[0];
347
+ if (statusCode === 0 || statusCode === 1) {
348
+ status = 'processing';
349
+ }
350
+ else if (statusCode === 2) {
351
+ status = 'ready';
352
+ }
353
+ else if (statusCode === 3 || statusCode === -1) {
354
+ status = 'error';
355
+ }
356
+ }
357
+ }
358
+ const source = {
359
+ id,
360
+ title: String(title),
361
+ type,
362
+ url,
363
+ status,
364
+ };
365
+ return source;
366
+ }
367
+ catch {
368
+ return null;
369
+ }
370
+ }
371
+ // ============================================================================
372
+ // Audio Parsing
373
+ // ============================================================================
374
+ /**
375
+ * Parse audio status response
376
+ *
377
+ * @param data - Raw response data
378
+ * @returns Audio overview status
379
+ */
380
+ export function parseAudioStatus(data) {
381
+ const result = {
382
+ status: 'not_created',
383
+ };
384
+ if (!Array.isArray(data)) {
385
+ return result;
386
+ }
387
+ try {
388
+ // Check for audio ID
389
+ if (typeof data[0] === 'string' && data[0].length > 0) {
390
+ result.id = data[0];
391
+ result.status = 'ready';
392
+ }
393
+ // Check for status code
394
+ for (const field of data) {
395
+ if (typeof field === 'number') {
396
+ switch (field) {
397
+ case 0:
398
+ result.status = 'not_created';
399
+ break;
400
+ case 1:
401
+ result.status = 'generating';
402
+ break;
403
+ case 2:
404
+ result.status = 'ready';
405
+ break;
406
+ case 3:
407
+ result.status = 'error';
408
+ break;
409
+ }
410
+ }
411
+ }
412
+ // Check for audio URL
413
+ for (const field of data) {
414
+ if (typeof field === 'string' && field.includes('googleusercontent.com')) {
415
+ result.audioUrl = field;
416
+ result.status = 'ready';
417
+ }
418
+ }
419
+ // Check for progress
420
+ for (const field of data) {
421
+ if (Array.isArray(field) && typeof field[0] === 'number') {
422
+ result.progress = field[0];
423
+ }
424
+ }
425
+ // Check for duration
426
+ for (const field of data) {
427
+ if (typeof field === 'number' && field > 60 && field < 3600) {
428
+ // Likely duration in seconds
429
+ result.durationSeconds = field;
430
+ }
431
+ }
432
+ return result;
433
+ }
434
+ catch {
435
+ return result;
436
+ }
437
+ }
438
+ /**
439
+ * Parse audio download URL response
440
+ *
441
+ * @param data - Raw response data
442
+ * @returns Audio URL or null
443
+ */
444
+ export function parseAudioURL(data) {
445
+ if (!Array.isArray(data)) {
446
+ return null;
447
+ }
448
+ // Search for URL in the response
449
+ const findUrl = (arr) => {
450
+ for (const item of arr) {
451
+ if (typeof item === 'string' && item.includes('googleusercontent.com')) {
452
+ return item;
453
+ }
454
+ if (Array.isArray(item)) {
455
+ const found = findUrl(item);
456
+ if (found)
457
+ return found;
458
+ }
459
+ }
460
+ return null;
461
+ };
462
+ return findUrl(data);
463
+ }
464
+ // ============================================================================
465
+ // Content Generation Parsing
466
+ // ============================================================================
467
+ /**
468
+ * Parse generated content response
469
+ *
470
+ * @param data - Raw response data
471
+ * @returns Generated content string or null
472
+ */
473
+ export function parseGeneratedContent(data) {
474
+ if (!Array.isArray(data)) {
475
+ return null;
476
+ }
477
+ // Content is typically a long string in the response.
478
+ // Skip URLs and JSON-like strings that could be false positives.
479
+ const findContent = (arr) => {
480
+ for (const item of arr) {
481
+ if (typeof item === 'string' && item.length > 100) {
482
+ // Skip URLs and serialized JSON — not generated content
483
+ if (item.startsWith('http://') ||
484
+ item.startsWith('https://') ||
485
+ item.startsWith('{') ||
486
+ item.startsWith('[')) {
487
+ continue;
488
+ }
489
+ return item;
490
+ }
491
+ if (Array.isArray(item)) {
492
+ const found = findContent(item);
493
+ if (found)
494
+ return found;
495
+ }
496
+ }
497
+ return null;
498
+ };
499
+ return findContent(data);
500
+ }
501
+ // ============================================================================
502
+ // Q&A Parsing
503
+ // ============================================================================
504
+ /**
505
+ * Parse suggested questions response
506
+ *
507
+ * @param data - Raw response data
508
+ * @returns Array of suggested questions
509
+ */
510
+ export function parseSuggestedQuestions(data) {
511
+ const questions = [];
512
+ if (!Array.isArray(data)) {
513
+ return questions;
514
+ }
515
+ const findQuestions = (arr) => {
516
+ for (const item of arr) {
517
+ if (typeof item === 'string' && item.endsWith('?') && item.length > 10) {
518
+ questions.push(item);
519
+ }
520
+ if (Array.isArray(item)) {
521
+ findQuestions(item);
522
+ }
523
+ }
524
+ };
525
+ findQuestions(data);
526
+ return questions;
527
+ }
528
+ // ============================================================================
529
+ // Error Parsing
530
+ // ============================================================================
531
+ /**
532
+ * Check if response indicates an authentication error
533
+ *
534
+ * @param response - The batch response
535
+ * @returns True if auth error detected
536
+ */
537
+ export function isAuthError(response) {
538
+ // Check raw response for auth-related errors using specific phrases only,
539
+ // not bare numeric codes like "401" which can appear in IDs or timestamps.
540
+ if (response.rawResponse) {
541
+ const raw = response.rawResponse.toLowerCase();
542
+ if (raw.includes('unauthorized') ||
543
+ raw.includes('login required') ||
544
+ raw.includes('not authenticated')) {
545
+ return true;
546
+ }
547
+ }
548
+ // Check individual responses for errors
549
+ for (const [, rpcResponse] of response.responses) {
550
+ if (rpcResponse.error) {
551
+ const error = rpcResponse.error.toLowerCase();
552
+ if (error.includes('auth') ||
553
+ error.includes('login') ||
554
+ error.includes('permission')) {
555
+ return true;
556
+ }
557
+ }
558
+ }
559
+ return false;
560
+ }
561
+ /**
562
+ * Check if response indicates a rate limit error
563
+ *
564
+ * @param response - The batch response
565
+ * @returns True if rate limited
566
+ */
567
+ export function isRateLimited(response) {
568
+ // Use specific phrases only — not bare "429" which can match IDs or timestamps.
569
+ if (response.rawResponse) {
570
+ const raw = response.rawResponse.toLowerCase();
571
+ if (raw.includes('rate limit') ||
572
+ raw.includes('too many requests') ||
573
+ raw.includes('quota exceeded')) {
574
+ return true;
575
+ }
576
+ }
577
+ return false;
578
+ }
579
+ /**
580
+ * Log response for debugging
581
+ *
582
+ * @param response - The batch response
583
+ */
584
+ export function logResponse(response) {
585
+ log.dim(`📥 Received response (success: ${response.success})`);
586
+ log.dim(` Responses: ${response.responses.size}`);
587
+ for (const [rpcId, rpcResponse] of response.responses) {
588
+ const status = rpcResponse.success ? '✓' : '✗';
589
+ log.dim(` ${status} ${rpcId}`);
590
+ if (rpcResponse.error) {
591
+ log.dim(` Error: ${rpcResponse.error}`);
592
+ }
593
+ }
594
+ }
595
+ //# sourceMappingURL=response-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-parser.js","sourceRoot":"","sources":["../../src/api/response-parser.ts"],"names":[],"mappings":"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"}