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,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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"}
|