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,340 @@
1
+ /**
2
+ * Notes service
3
+ * Handles note operations
4
+ */
5
+ import * as RPC from '../rpc/rpc-methods.js';
6
+ import { NotebookLMError } from '../types/common.js';
7
+ /**
8
+ * Service for note operations
9
+ */
10
+ export class NotesService {
11
+ rpc;
12
+ quota;
13
+ constructor(rpc, quota) {
14
+ this.rpc = rpc;
15
+ this.quota = quota;
16
+ }
17
+ /**
18
+ * Get notes for a notebook
19
+ *
20
+ * @param notebookId - The notebook ID
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const notes = await client.notes.list('notebook-id');
25
+ * console.log(`Found ${notes.length} notes`);
26
+ * ```
27
+ */
28
+ async list(notebookId) {
29
+ const response = await this.rpc.call(RPC.RPC_GET_NOTES, [notebookId], notebookId);
30
+ return this.parseListResponse(response);
31
+ }
32
+ /**
33
+ * Create a new note
34
+ *
35
+ * @param notebookId - The notebook ID
36
+ * @param options - Note options
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const note = await client.notes.create('notebook-id', {
41
+ * title: 'My Note',
42
+ * content: 'Note content here',
43
+ * });
44
+ * ```
45
+ */
46
+ async create(notebookId, options) {
47
+ const { title, content = '', noteType = [1], tags = [] } = options;
48
+ // Format: [notebookId, content, [noteType], null, title]
49
+ const request = [
50
+ notebookId,
51
+ content,
52
+ noteType,
53
+ null,
54
+ title
55
+ ];
56
+ const response = await this.rpc.call(RPC.RPC_CREATE_NOTE, request, notebookId);
57
+ return this.parseNoteResponse(response, title);
58
+ }
59
+ /**
60
+ * Update a note
61
+ *
62
+ * @param notebookId - The notebook ID
63
+ * @param noteId - The note ID
64
+ * @param options - Update options
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const note = await client.notes.update('notebook-id', 'note-id', {
69
+ * title: 'Updated Title',
70
+ * content: 'Updated content',
71
+ * });
72
+ * ```
73
+ */
74
+ async update(notebookId, noteId, options) {
75
+ // Format: [notebookId, noteId, [[[content, title, tags, 0]]]]
76
+ // Note: content and title must always be provided (can be empty string)
77
+ // The 0 at the end is always 0
78
+ const content = options.content ?? '';
79
+ const title = options.title ?? '';
80
+ const tags = options.tags || [];
81
+ const request = [
82
+ notebookId,
83
+ noteId,
84
+ [[[content, title, tags, 0]]]
85
+ ];
86
+ const response = await this.rpc.call(RPC.RPC_MUTATE_NOTE, request, notebookId);
87
+ return this.parseNoteResponse(response, title || '');
88
+ }
89
+ /**
90
+ * Delete notes
91
+ *
92
+ * @param notebookId - The notebook ID
93
+ * @param noteIds - Note IDs to delete
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * await client.notes.delete('notebook-id', ['note-id-1', 'note-id-2']);
98
+ * ```
99
+ */
100
+ async delete(notebookId, noteIds) {
101
+ const ids = Array.isArray(noteIds) ? noteIds : [noteIds];
102
+ // Format: [notebookId, null, [noteIds]]
103
+ const request = [
104
+ notebookId,
105
+ null,
106
+ ids
107
+ ];
108
+ await this.rpc.call(RPC.RPC_DELETE_NOTES, request, notebookId);
109
+ }
110
+ // ========================================================================
111
+ // Response parsers
112
+ // ========================================================================
113
+ parseListResponse(response) {
114
+ try {
115
+ const notes = [];
116
+ // Parse JSON string if response is a string
117
+ let parsedResponse = response;
118
+ if (typeof response === 'string') {
119
+ // Check if it's a JSON string (starts with [ or {)
120
+ if (response.trim().startsWith('[') || response.trim().startsWith('{')) {
121
+ try {
122
+ parsedResponse = JSON.parse(response);
123
+ }
124
+ catch (e) {
125
+ // If parsing fails, return empty array
126
+ if (process.env.DEBUG || process.env.NODE_ENV === 'development') {
127
+ console.warn('Failed to parse notes list response as JSON:', response);
128
+ }
129
+ return [];
130
+ }
131
+ }
132
+ }
133
+ if (Array.isArray(parsedResponse) && parsedResponse.length > 0) {
134
+ // Response structure: [[notes_array], [timestamp]]
135
+ // The first element is the array of notes
136
+ const notesArray = parsedResponse[0];
137
+ if (Array.isArray(notesArray)) {
138
+ for (const noteItem of notesArray) {
139
+ if (!Array.isArray(noteItem) || noteItem.length < 2) {
140
+ continue;
141
+ }
142
+ // Structure: [noteId, [noteId, content, metadata, null, title]]
143
+ // noteItem[0] = noteId (outer)
144
+ // noteItem[1] = [noteId, content, metadata, null, title] (details array)
145
+ const noteId = typeof noteItem[0] === 'string' ? noteItem[0] : '';
146
+ const details = Array.isArray(noteItem[1]) ? noteItem[1] : [];
147
+ if (!noteId || !noteId.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)) {
148
+ continue; // Skip if noteId is not valid
149
+ }
150
+ // Skip deleted notes - if details array is empty or too short, the note is likely deleted
151
+ if (!details || details.length < 2) {
152
+ continue; // Deleted notes have empty or minimal details
153
+ }
154
+ // Extract from details array: [noteId, content, metadata, null, title]
155
+ const content = details.length > 1 && typeof details[1] === 'string' ? details[1] : '';
156
+ const metadata = details.length > 2 && Array.isArray(details[2]) ? details[2] : null;
157
+ const title = details.length > 4 && typeof details[4] === 'string' ? details[4] : '';
158
+ // Skip deleted notes - if there's no metadata and no title/content, it's likely deleted
159
+ if (!metadata && !title && !content) {
160
+ continue; // Deleted notes have no metadata, title, or content
161
+ }
162
+ // Skip mind maps - they have metadata[3] === 5 or content is JSON mind map structure
163
+ if (metadata && Array.isArray(metadata) && metadata.length > 3 && metadata[3] === 5) {
164
+ continue; // This is a mind map, skip it
165
+ }
166
+ // Also check if content is a JSON mind map structure (starts with {"name": and has "children")
167
+ if (content && typeof content === 'string') {
168
+ const trimmedContent = content.trim();
169
+ if (trimmedContent.startsWith('{"name":') && trimmedContent.includes('"children"')) {
170
+ continue; // This is a mind map, skip it
171
+ }
172
+ }
173
+ // Extract tags from metadata if available
174
+ // Metadata structure: [noteType, projectId, timestamp, ...]
175
+ // Tags might be in a different position, but for now we'll extract what we can
176
+ let tags = [];
177
+ if (Array.isArray(metadata) && metadata.length > 4 && Array.isArray(metadata[4])) {
178
+ // Tags might be in metadata[4] as an array of arrays: [[tagId], [tagId], ...]
179
+ tags = metadata[4]
180
+ .filter((tag) => Array.isArray(tag) && tag.length > 0 && typeof tag[0] === 'string')
181
+ .map((tag) => tag[0]);
182
+ }
183
+ // Build note object with metadata
184
+ const note = {
185
+ noteId,
186
+ title,
187
+ content,
188
+ tags,
189
+ };
190
+ // Add metadata if available
191
+ if (metadata) {
192
+ // Extract noteType from metadata[0]
193
+ if (typeof metadata[0] === 'number') {
194
+ note.noteType = [metadata[0]];
195
+ }
196
+ // Extract projectId from metadata[1] if it's a string
197
+ if (typeof metadata[1] === 'string') {
198
+ note.projectId = metadata[1];
199
+ }
200
+ // Extract timestamps if available
201
+ if (Array.isArray(metadata[2]) && metadata[2].length >= 2) {
202
+ // Convert timestamp [seconds, nanoseconds] to ISO string
203
+ const seconds = metadata[2][0];
204
+ const nanoseconds = metadata[2][1];
205
+ if (typeof seconds === 'number') {
206
+ const date = new Date(seconds * 1000 + (nanoseconds || 0) / 1000000);
207
+ note.updatedAt = date.toISOString();
208
+ note.createdAt = date.toISOString(); // Use same timestamp for both if only one available
209
+ }
210
+ }
211
+ }
212
+ notes.push(note);
213
+ }
214
+ }
215
+ }
216
+ // Debug logging if no notes found
217
+ if (notes.length === 0 && (process.env.DEBUG || process.env.NODE_ENV === 'development')) {
218
+ console.warn('No notes parsed from response. Original response:', typeof response === 'string' ? response.substring(0, 200) + '...' : JSON.stringify(response).substring(0, 200) + '...');
219
+ console.warn('Parsed response structure (first 500 chars):', JSON.stringify(parsedResponse).substring(0, 500) + '...');
220
+ }
221
+ return notes;
222
+ }
223
+ catch (error) {
224
+ throw new NotebookLMError(`Failed to parse notes list: ${error.message}`);
225
+ }
226
+ }
227
+ parseNoteResponse(response, title) {
228
+ try {
229
+ let noteId = '';
230
+ // Parse JSON string if response is a string
231
+ let parsedResponse = response;
232
+ if (typeof response === 'string') {
233
+ // Check if it's a JSON string (starts with [ or {)
234
+ if (response.trim().startsWith('[') || response.trim().startsWith('{')) {
235
+ try {
236
+ parsedResponse = JSON.parse(response);
237
+ }
238
+ catch (e) {
239
+ // If parsing fails, check if it's just the note ID
240
+ if (response.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)) {
241
+ noteId = response;
242
+ }
243
+ }
244
+ }
245
+ else if (response.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)) {
246
+ // Simple string that's just the note ID
247
+ noteId = response;
248
+ }
249
+ }
250
+ // If we already found the note ID, skip further parsing
251
+ if (!noteId) {
252
+ // Check if parsed response is an array with note ID as first element (similar to list format)
253
+ if (Array.isArray(parsedResponse) && parsedResponse.length > 0) {
254
+ // Pattern 1: [[noteId, content, metadata, null, title], ...] - create note response format
255
+ if (Array.isArray(parsedResponse[0]) && parsedResponse[0].length > 0) {
256
+ const firstItem = parsedResponse[0];
257
+ // Note ID is at index 0: [noteId, content, ...]
258
+ if (typeof firstItem[0] === 'string' && firstItem[0].match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)) {
259
+ noteId = firstItem[0];
260
+ }
261
+ }
262
+ // Pattern 2: [noteId, ...] - single note array
263
+ else if (typeof parsedResponse[0] === 'string' && parsedResponse[0].match(/^[a-f0-9-]{8,}$/i)) {
264
+ noteId = parsedResponse[0];
265
+ }
266
+ }
267
+ }
268
+ // If still not found, use recursive search on parsed response
269
+ if (!noteId) {
270
+ // Extract note ID from response
271
+ // The response can be in various formats, so we need to search recursively
272
+ const findId = (data, depth = 0) => {
273
+ // Prevent infinite recursion
274
+ if (depth > 10)
275
+ return null;
276
+ // Check if it's a UUID-like string (with or without dashes)
277
+ if (typeof data === 'string') {
278
+ // Match UUID format: 8-4-4-4-12 hex digits
279
+ const uuidMatch = data.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i);
280
+ if (uuidMatch) {
281
+ return uuidMatch[0];
282
+ }
283
+ // Also check for hex strings that might be IDs (at least 8 characters, typical UUID length)
284
+ if (data.match(/^[a-f0-9]{8,}$/i) && data.length <= 36) {
285
+ return data;
286
+ }
287
+ }
288
+ // If it's an array, search recursively
289
+ if (Array.isArray(data)) {
290
+ // Check first element if it's a string (common pattern: [noteId, ...])
291
+ if (data.length > 0 && typeof data[0] === 'string' && data[0].match(/^[a-f0-9-]{8,}$/i)) {
292
+ return data[0];
293
+ }
294
+ // Otherwise search all items
295
+ for (const item of data) {
296
+ const id = findId(item, depth + 1);
297
+ if (id)
298
+ return id;
299
+ }
300
+ }
301
+ // If it's an object, search its values
302
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
303
+ // Check common ID field names first
304
+ const idFields = ['id', 'noteId', 'note_id', 'noteID'];
305
+ for (const field of idFields) {
306
+ if (data[field] && typeof data[field] === 'string') {
307
+ const id = findId(data[field], depth + 1);
308
+ if (id)
309
+ return id;
310
+ }
311
+ }
312
+ // Then search all values recursively
313
+ for (const key in data) {
314
+ const id = findId(data[key], depth + 1);
315
+ if (id)
316
+ return id;
317
+ }
318
+ }
319
+ return null;
320
+ };
321
+ noteId = findId(parsedResponse) || '';
322
+ }
323
+ // If note ID is still empty, log the response structure for debugging
324
+ // (only in development - check for NODE_ENV or DEBUG env var)
325
+ if (!noteId && (process.env.DEBUG || process.env.NODE_ENV === 'development')) {
326
+ console.warn('Note ID not found in response. Original response:', typeof response === 'string' ? response : JSON.stringify(response));
327
+ console.warn('Parsed response structure:', JSON.stringify(parsedResponse, null, 2));
328
+ }
329
+ return {
330
+ noteId,
331
+ title,
332
+ content: '',
333
+ };
334
+ }
335
+ catch (error) {
336
+ throw new NotebookLMError(`Failed to parse note response: ${error.message}`);
337
+ }
338
+ }
339
+ }
340
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../../src/services/notes.ts"],"names":[],"mappings":"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"}