@pan-sec/notebooklm-mcp 1.6.0 → 1.7.0

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 (111) hide show
  1. package/dist/events/event-emitter.d.ts +45 -0
  2. package/dist/events/event-emitter.d.ts.map +1 -0
  3. package/dist/events/event-emitter.js +100 -0
  4. package/dist/events/event-emitter.js.map +1 -0
  5. package/dist/events/event-types.d.ts +124 -0
  6. package/dist/events/event-types.d.ts.map +1 -0
  7. package/dist/events/event-types.js +18 -0
  8. package/dist/events/event-types.js.map +1 -0
  9. package/dist/index.js +59 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/library/notebook-library.d.ts +25 -2
  12. package/dist/library/notebook-library.d.ts.map +1 -1
  13. package/dist/library/notebook-library.js +142 -2
  14. package/dist/library/notebook-library.js.map +1 -1
  15. package/dist/library/types.d.ts +15 -0
  16. package/dist/library/types.d.ts.map +1 -1
  17. package/dist/notebook-creation/audio-manager.d.ts +56 -0
  18. package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
  19. package/dist/notebook-creation/audio-manager.js +335 -0
  20. package/dist/notebook-creation/audio-manager.js.map +1 -0
  21. package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
  22. package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
  23. package/dist/notebook-creation/discover-creation-flow.js +177 -0
  24. package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
  25. package/dist/notebook-creation/discover-quota.d.ts +8 -0
  26. package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
  27. package/dist/notebook-creation/discover-quota.js +195 -0
  28. package/dist/notebook-creation/discover-quota.js.map +1 -0
  29. package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
  30. package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
  31. package/dist/notebook-creation/discover-source-dialog.js +134 -0
  32. package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
  33. package/dist/notebook-creation/discover-sources.d.ts +8 -0
  34. package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
  35. package/dist/notebook-creation/discover-sources.js +273 -0
  36. package/dist/notebook-creation/discover-sources.js.map +1 -0
  37. package/dist/notebook-creation/discover-text-input.d.ts +7 -0
  38. package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
  39. package/dist/notebook-creation/discover-text-input.js +135 -0
  40. package/dist/notebook-creation/discover-text-input.js.map +1 -0
  41. package/dist/notebook-creation/index.d.ts +12 -0
  42. package/dist/notebook-creation/index.d.ts.map +1 -0
  43. package/dist/notebook-creation/index.js +12 -0
  44. package/dist/notebook-creation/index.js.map +1 -0
  45. package/dist/notebook-creation/notebook-creator.d.ts +95 -0
  46. package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
  47. package/dist/notebook-creation/notebook-creator.js +689 -0
  48. package/dist/notebook-creation/notebook-creator.js.map +1 -0
  49. package/dist/notebook-creation/notebook-sync.d.ts +93 -0
  50. package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
  51. package/dist/notebook-creation/notebook-sync.js +370 -0
  52. package/dist/notebook-creation/notebook-sync.js.map +1 -0
  53. package/dist/notebook-creation/run-discovery.d.ts +11 -0
  54. package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
  55. package/dist/notebook-creation/run-discovery.js +151 -0
  56. package/dist/notebook-creation/run-discovery.js.map +1 -0
  57. package/dist/notebook-creation/selector-discovery.d.ts +65 -0
  58. package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
  59. package/dist/notebook-creation/selector-discovery.js +421 -0
  60. package/dist/notebook-creation/selector-discovery.js.map +1 -0
  61. package/dist/notebook-creation/selectors.d.ts +150 -0
  62. package/dist/notebook-creation/selectors.d.ts.map +1 -0
  63. package/dist/notebook-creation/selectors.js +225 -0
  64. package/dist/notebook-creation/selectors.js.map +1 -0
  65. package/dist/notebook-creation/source-manager.d.ts +73 -0
  66. package/dist/notebook-creation/source-manager.d.ts.map +1 -0
  67. package/dist/notebook-creation/source-manager.js +486 -0
  68. package/dist/notebook-creation/source-manager.js.map +1 -0
  69. package/dist/notebook-creation/test-create.d.ts +8 -0
  70. package/dist/notebook-creation/test-create.d.ts.map +1 -0
  71. package/dist/notebook-creation/test-create.js +72 -0
  72. package/dist/notebook-creation/test-create.js.map +1 -0
  73. package/dist/notebook-creation/types.d.ts +173 -0
  74. package/dist/notebook-creation/types.d.ts.map +1 -0
  75. package/dist/notebook-creation/types.js +5 -0
  76. package/dist/notebook-creation/types.js.map +1 -0
  77. package/dist/quota/index.d.ts +8 -0
  78. package/dist/quota/index.d.ts.map +1 -0
  79. package/dist/quota/index.js +8 -0
  80. package/dist/quota/index.js.map +1 -0
  81. package/dist/quota/quota-manager.d.ts +125 -0
  82. package/dist/quota/quota-manager.d.ts.map +1 -0
  83. package/dist/quota/quota-manager.js +330 -0
  84. package/dist/quota/quota-manager.js.map +1 -0
  85. package/dist/session/session-manager.d.ts +5 -0
  86. package/dist/session/session-manager.d.ts.map +1 -1
  87. package/dist/session/session-manager.js +6 -0
  88. package/dist/session/session-manager.js.map +1 -1
  89. package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
  90. package/dist/tools/definitions/notebook-management.js +525 -0
  91. package/dist/tools/definitions/notebook-management.js.map +1 -1
  92. package/dist/tools/definitions/system.d.ts.map +1 -1
  93. package/dist/tools/definitions/system.js +158 -0
  94. package/dist/tools/definitions/system.js.map +1 -1
  95. package/dist/tools/handlers.d.ts +225 -0
  96. package/dist/tools/handlers.d.ts.map +1 -1
  97. package/dist/tools/handlers.js +911 -0
  98. package/dist/tools/handlers.js.map +1 -1
  99. package/dist/webhooks/index.d.ts +8 -0
  100. package/dist/webhooks/index.d.ts.map +1 -0
  101. package/dist/webhooks/index.js +8 -0
  102. package/dist/webhooks/index.js.map +1 -0
  103. package/dist/webhooks/types.d.ts +57 -0
  104. package/dist/webhooks/types.d.ts.map +1 -0
  105. package/dist/webhooks/types.js +5 -0
  106. package/dist/webhooks/types.js.map +1 -0
  107. package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
  108. package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
  109. package/dist/webhooks/webhook-dispatcher.js +519 -0
  110. package/dist/webhooks/webhook-dispatcher.js.map +1 -0
  111. package/package.json +1 -1
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Discover Source Management UI Elements
3
+ *
4
+ * Finds selectors for listing, adding, and removing sources in NotebookLM.
5
+ * Run: node dist/notebook-creation/discover-sources.js
6
+ */
7
+ import { AuthManager } from "../auth/auth-manager.js";
8
+ import { SharedContextManager } from "../session/shared-context-manager.js";
9
+ import { log } from "../utils/logger.js";
10
+ // Use a notebook URL with existing sources for discovery
11
+ const TEST_NOTEBOOK_URL = process.env.TEST_NOTEBOOK_URL || "";
12
+ // Future: Interface for discovered selectors (when UI discovery is complete)
13
+ // interface DiscoveredSourceSelectors {
14
+ // sourceListContainer: string | null;
15
+ // sourceItems: string[];
16
+ // sourceTitle: string | null;
17
+ // sourceDeleteButton: string | null;
18
+ // sourceOptionsMenu: string | null;
19
+ // sourceCount: string | null;
20
+ // }
21
+ async function dumpSourceElements(page) {
22
+ return await page.evaluate(() => {
23
+ const results = [];
24
+ // Look for source-related elements
25
+ // @ts-expect-error - DOM types
26
+ const allElements = document.querySelectorAll("*");
27
+ for (const el of allElements) {
28
+ const text = el.textContent?.trim().substring(0, 100) || "";
29
+ const ariaLabel = el.getAttribute("aria-label") || "";
30
+ const classes = el.className || "";
31
+ const tag = el.tagName;
32
+ // Skip if no useful info
33
+ if (!text && !ariaLabel && !classes)
34
+ continue;
35
+ // Look for source-related patterns
36
+ const patterns = [
37
+ /source/i,
38
+ /document/i,
39
+ /upload/i,
40
+ /file/i,
41
+ /delete/i,
42
+ /remove/i,
43
+ /trash/i,
44
+ /more.*options/i,
45
+ /\d+\s*(source|file|document)/i,
46
+ ];
47
+ const isRelevant = patterns.some((p) => p.test(text) || p.test(ariaLabel) || p.test(classes));
48
+ if (isRelevant && text.length < 200) {
49
+ // Get data attributes
50
+ const dataAttrs = {};
51
+ for (const attr of Array.from(el.attributes)) {
52
+ if (attr.name.startsWith("data-")) {
53
+ dataAttrs[attr.name] = attr.value;
54
+ }
55
+ }
56
+ results.push({
57
+ selector: el.id ? `#${el.id}` : `.${classes.split(" ")[0]}`,
58
+ text: text.substring(0, 100),
59
+ ariaLabel,
60
+ classes: classes.substring(0, 100),
61
+ tag,
62
+ dataAttrs,
63
+ });
64
+ }
65
+ }
66
+ return results;
67
+ });
68
+ }
69
+ async function findSourceListElements(page) {
70
+ log.info("\n📋 Looking for source list elements...");
71
+ // Look for the sources panel/sidebar
72
+ const sourceElements = await page.evaluate(() => {
73
+ const results = [];
74
+ // Common patterns for source lists
75
+ const listSelectors = [
76
+ '[class*="source-list"]',
77
+ '[class*="sources-panel"]',
78
+ '[class*="sidebar"]',
79
+ '[role="list"]',
80
+ '[role="listbox"]',
81
+ "mat-list",
82
+ "mat-nav-list",
83
+ ];
84
+ for (const selector of listSelectors) {
85
+ // @ts-expect-error - DOM types
86
+ const elements = document.querySelectorAll(selector);
87
+ for (const el of elements) {
88
+ const text = el.textContent?.substring(0, 200) || "";
89
+ if (text.toLowerCase().includes("source")) {
90
+ results.push({
91
+ selector,
92
+ childCount: el.children.length,
93
+ text: text.substring(0, 100),
94
+ });
95
+ }
96
+ }
97
+ }
98
+ return results;
99
+ });
100
+ for (const item of sourceElements) {
101
+ log.dim(` Found: ${item.selector} (${item.childCount} children)`);
102
+ log.dim(` Text: "${item.text}"`);
103
+ }
104
+ }
105
+ async function findSourceItems(page) {
106
+ log.info("\n📋 Looking for individual source items...");
107
+ const items = await page.evaluate(() => {
108
+ const results = [];
109
+ // Look for list items that might be sources
110
+ // @ts-expect-error - DOM types
111
+ const listItems = document.querySelectorAll('mat-list-item, [role="listitem"], .source-item, [class*="source"]');
112
+ for (const item of listItems) {
113
+ const text = item.textContent?.trim().substring(0, 100) || "";
114
+ const classes = item.className || "";
115
+ // Skip if it's clearly not a source item
116
+ if (text.toLowerCase().includes("add") && text.length < 20)
117
+ continue;
118
+ results.push({
119
+ tag: item.tagName,
120
+ classes: classes.substring(0, 80),
121
+ text,
122
+ hasCheckbox: !!item.querySelector('input[type="checkbox"], mat-checkbox'),
123
+ hasDeleteBtn: !!item.querySelector('[aria-label*="delete" i], [aria-label*="remove" i], button[class*="delete"]'),
124
+ hasOptionsBtn: !!item.querySelector('[aria-label*="more" i], [aria-label*="option" i], button[class*="menu"]'),
125
+ });
126
+ }
127
+ return results;
128
+ });
129
+ for (const item of items) {
130
+ log.dim(` [${item.tag}] "${item.text}"`);
131
+ log.dim(` Classes: ${item.classes}`);
132
+ log.dim(` Has: checkbox=${item.hasCheckbox}, delete=${item.hasDeleteBtn}, options=${item.hasOptionsBtn}`);
133
+ }
134
+ }
135
+ async function findDeleteButtons(page) {
136
+ log.info("\n📋 Looking for delete/remove buttons...");
137
+ const buttons = await page.evaluate(() => {
138
+ const results = [];
139
+ // @ts-expect-error - DOM types
140
+ const allButtons = document.querySelectorAll("button, [role='button']");
141
+ for (const btn of allButtons) {
142
+ const ariaLabel = btn.getAttribute("aria-label") || "";
143
+ const text = btn.textContent?.trim() || "";
144
+ const classes = btn.className || "";
145
+ const isDelete = /delete|remove|trash|discard/i.test(ariaLabel) ||
146
+ /delete|remove|trash|discard/i.test(text) ||
147
+ /delete|remove|trash/i.test(classes);
148
+ if (isDelete) {
149
+ results.push({
150
+ tag: btn.tagName,
151
+ ariaLabel,
152
+ text: text.substring(0, 50),
153
+ classes: classes.substring(0, 80),
154
+ });
155
+ }
156
+ }
157
+ return results;
158
+ });
159
+ for (const btn of buttons) {
160
+ log.dim(` [${btn.tag}] aria="${btn.ariaLabel}" text="${btn.text}"`);
161
+ log.dim(` Classes: ${btn.classes}`);
162
+ }
163
+ }
164
+ async function findSourceCount(page) {
165
+ log.info("\n📋 Looking for source count indicator...");
166
+ const counts = await page.evaluate(() => {
167
+ const results = [];
168
+ // Look for "X sources" or "X/Y" patterns
169
+ // @ts-expect-error - DOM types
170
+ const allText = document.body.innerText;
171
+ const matches = allText.match(/(\d+)\s*(source|file|document)s?/gi) || [];
172
+ // Also look for specific elements
173
+ // @ts-expect-error - DOM types
174
+ const spans = document.querySelectorAll("span, div, p");
175
+ for (const el of spans) {
176
+ const text = el.textContent?.trim() || "";
177
+ if (/^\d+\s*(source|file|document)s?$/i.test(text) || /^\d+\s*\/\s*\d+$/.test(text)) {
178
+ results.push({
179
+ tag: el.tagName,
180
+ text,
181
+ classes: (el.className || "").substring(0, 80),
182
+ });
183
+ }
184
+ }
185
+ return { textMatches: matches, elements: results };
186
+ });
187
+ log.dim(` Text matches: ${counts.textMatches.join(", ") || "none"}`);
188
+ for (const el of counts.elements) {
189
+ log.dim(` [${el.tag}] "${el.text}" class="${el.classes}"`);
190
+ }
191
+ }
192
+ async function main() {
193
+ log.info("🔍 Discovering Source Management UI Elements...\n");
194
+ if (!TEST_NOTEBOOK_URL) {
195
+ log.warning("⚠️ No TEST_NOTEBOOK_URL environment variable set.");
196
+ log.warning(" Set it to a notebook URL with existing sources:");
197
+ log.warning(" TEST_NOTEBOOK_URL=https://notebooklm.google.com/notebook/xxx node dist/notebook-creation/discover-sources.js");
198
+ log.warning("\n Continuing without URL - will navigate to homepage first...\n");
199
+ }
200
+ const authManager = new AuthManager();
201
+ const contextManager = new SharedContextManager(authManager);
202
+ try {
203
+ const context = await contextManager.getOrCreateContext(true);
204
+ const isAuth = await authManager.validateCookiesExpiry(context);
205
+ if (!isAuth) {
206
+ log.error("❌ Not authenticated. Run setup_auth first.");
207
+ return;
208
+ }
209
+ const page = await context.newPage();
210
+ // Navigate to notebook or homepage
211
+ const url = TEST_NOTEBOOK_URL || "https://notebooklm.google.com/";
212
+ log.info(`📍 Navigating to: ${url}`);
213
+ await page.goto(url, { waitUntil: "domcontentloaded" });
214
+ await page.waitForLoadState("networkidle").catch(() => { });
215
+ await page.waitForTimeout(3000);
216
+ // If on homepage, try to click on first notebook
217
+ if (!TEST_NOTEBOOK_URL) {
218
+ log.info("📍 Looking for a notebook to open...");
219
+ const clicked = await page.evaluate(() => {
220
+ // @ts-expect-error - DOM types
221
+ const rows = document.querySelectorAll("tr");
222
+ for (const row of rows) {
223
+ if (row.textContent?.includes("Source")) {
224
+ row.click();
225
+ return true;
226
+ }
227
+ }
228
+ return false;
229
+ });
230
+ if (clicked) {
231
+ log.success(" ✅ Clicked on a notebook");
232
+ await page.waitForTimeout(3000);
233
+ }
234
+ else {
235
+ log.warning(" ⚠️ No notebooks found to click");
236
+ }
237
+ }
238
+ // Run discovery
239
+ log.info("\n=== Source UI Discovery ===\n");
240
+ // 1. Dump all source-related elements
241
+ log.info("📋 All source-related elements:");
242
+ const allElements = await dumpSourceElements(page);
243
+ for (const el of allElements.slice(0, 20)) {
244
+ log.dim(` [${el.tag}] "${el.text}" aria="${el.ariaLabel}"`);
245
+ }
246
+ if (allElements.length > 20) {
247
+ log.dim(` ... and ${allElements.length - 20} more`);
248
+ }
249
+ // 2. Find source list container
250
+ await findSourceListElements(page);
251
+ // 3. Find individual source items
252
+ await findSourceItems(page);
253
+ // 4. Find delete buttons
254
+ await findDeleteButtons(page);
255
+ // 5. Find source count
256
+ await findSourceCount(page);
257
+ // Take a screenshot for reference
258
+ const screenshotPath = "/tmp/notebooklm-sources-discovery.png";
259
+ await page.screenshot({ path: screenshotPath, fullPage: true });
260
+ log.info(`\n📸 Screenshot saved: ${screenshotPath}`);
261
+ // Keep browser open for inspection
262
+ log.info("\n✅ Discovery complete. Browser open for 60 seconds...");
263
+ await page.waitForTimeout(60000);
264
+ }
265
+ catch (error) {
266
+ log.error(`❌ Error: ${error}`);
267
+ }
268
+ finally {
269
+ await contextManager.closeContext();
270
+ }
271
+ }
272
+ main().catch(console.error);
273
+ //# sourceMappingURL=discover-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-sources.js","sourceRoot":"","sources":["../../src/notebook-creation/discover-sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Discover Text Input After Clicking "Copied text"
3
+ *
4
+ * Run: node dist/notebook-creation/discover-text-input.js
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=discover-text-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-text-input.d.ts","sourceRoot":"","sources":["../../src/notebook-creation/discover-text-input.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Discover Text Input After Clicking "Copied text"
3
+ *
4
+ * Run: node dist/notebook-creation/discover-text-input.js
5
+ */
6
+ import { AuthManager } from "../auth/auth-manager.js";
7
+ import { SharedContextManager } from "../session/shared-context-manager.js";
8
+ import { log } from "../utils/logger.js";
9
+ const NOTEBOOKLM_URL = "https://notebooklm.google.com/";
10
+ async function dumpInputElements(page, description) {
11
+ log.info(`\n📋 ${description}:`);
12
+ const elements = await page.evaluate(() => {
13
+ const results = [];
14
+ // @ts-expect-error - DOM types
15
+ const els = document.querySelectorAll('input, textarea, [contenteditable="true"], div[role="textbox"]');
16
+ for (const el of els) {
17
+ const visible = el.offsetParent !== null;
18
+ if (!visible)
19
+ continue;
20
+ results.push({
21
+ tag: el.tagName,
22
+ type: el.getAttribute("type") || "",
23
+ placeholder: el.getAttribute("placeholder") || "",
24
+ ariaLabel: el.getAttribute("aria-label") || "",
25
+ classes: el.className?.substring(0, 80) || "",
26
+ id: el.id || "",
27
+ contentEditable: el.contentEditable,
28
+ });
29
+ }
30
+ return results;
31
+ });
32
+ for (const el of elements) {
33
+ const info = [`tag=${el.tag}`];
34
+ if (el.type)
35
+ info.push(`type=${el.type}`);
36
+ if (el.placeholder)
37
+ info.push(`placeholder="${el.placeholder}"`);
38
+ if (el.ariaLabel)
39
+ info.push(`aria="${el.ariaLabel}"`);
40
+ if (el.contentEditable === "true")
41
+ info.push(`contenteditable`);
42
+ if (el.classes)
43
+ info.push(`class="${el.classes}"`);
44
+ log.dim(` ${info.join(", ")}`);
45
+ }
46
+ }
47
+ async function main() {
48
+ log.info("🔍 Discovering Text Input After 'Copied text' Click...\n");
49
+ const authManager = new AuthManager();
50
+ const contextManager = new SharedContextManager(authManager);
51
+ try {
52
+ const context = await contextManager.getOrCreateContext(true);
53
+ const isAuth = await authManager.validateCookiesExpiry(context);
54
+ if (!isAuth) {
55
+ log.error("❌ Not authenticated. Run setup_auth first.");
56
+ return;
57
+ }
58
+ const page = await context.newPage();
59
+ // Navigate and create notebook
60
+ log.info("📍 Navigating to NotebookLM...");
61
+ await page.goto(NOTEBOOKLM_URL, { waitUntil: "domcontentloaded" });
62
+ await page.waitForLoadState("networkidle").catch(() => { });
63
+ await page.waitForTimeout(3000);
64
+ log.info("📍 Creating new notebook...");
65
+ const createButton = await page.$('button[aria-label="Create new notebook"]');
66
+ if (createButton) {
67
+ await createButton.click();
68
+ await page.waitForTimeout(3000);
69
+ log.success("✅ Created new notebook");
70
+ }
71
+ // Show input elements BEFORE clicking "Copied text"
72
+ await dumpInputElements(page, "Input elements BEFORE clicking 'Copied text'");
73
+ // Click "Copied text"
74
+ log.info("\n📍 Clicking 'Copied text'...");
75
+ const clicked = await page.evaluate(() => {
76
+ // @ts-expect-error - DOM types
77
+ const spans = document.querySelectorAll('span');
78
+ for (const span of spans) {
79
+ if (span.textContent?.trim() === "Copied text") {
80
+ span.click();
81
+ return true;
82
+ }
83
+ }
84
+ return false;
85
+ });
86
+ if (clicked) {
87
+ log.success("✅ Clicked 'Copied text'");
88
+ await page.waitForTimeout(2000);
89
+ }
90
+ else {
91
+ log.error("❌ Could not find 'Copied text'");
92
+ }
93
+ // Show input elements AFTER clicking "Copied text"
94
+ await dumpInputElements(page, "Input elements AFTER clicking 'Copied text'");
95
+ // Also dump all visible buttons
96
+ log.info("\n📋 Buttons after clicking 'Copied text':");
97
+ const buttons = await page.evaluate(() => {
98
+ const results = [];
99
+ // @ts-expect-error - DOM types
100
+ const els = document.querySelectorAll('button');
101
+ for (const el of els) {
102
+ const visible = el.offsetParent !== null;
103
+ if (!visible)
104
+ continue;
105
+ results.push({
106
+ text: el.textContent?.trim().substring(0, 40) || "",
107
+ ariaLabel: el.getAttribute("aria-label") || "",
108
+ type: el.type || "",
109
+ });
110
+ }
111
+ return results;
112
+ });
113
+ for (const btn of buttons) {
114
+ const info = [];
115
+ if (btn.text)
116
+ info.push(`"${btn.text}"`);
117
+ if (btn.ariaLabel)
118
+ info.push(`aria="${btn.ariaLabel}"`);
119
+ if (btn.type)
120
+ info.push(`type=${btn.type}`);
121
+ log.dim(` BUTTON: ${info.join(", ")}`);
122
+ }
123
+ // Keep browser open
124
+ log.info("\n✅ Discovery complete. Browser open for 60 seconds...");
125
+ await page.waitForTimeout(60000);
126
+ }
127
+ catch (error) {
128
+ log.error(`❌ Error: ${error}`);
129
+ }
130
+ finally {
131
+ await contextManager.closeContext();
132
+ }
133
+ }
134
+ main().catch(console.error);
135
+ //# sourceMappingURL=discover-text-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-text-input.js","sourceRoot":"","sources":["../../src/notebook-creation/discover-text-input.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC,MAAM,cAAc,GAAG,gCAAgC,CAAC;AAExD,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,WAAmB;IAC9D,GAAG,CAAC,IAAI,CAAC,QAAQ,WAAW,GAAG,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACxC,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,+BAA+B;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,gEAAgE,CAAC,CAAC;QAExG,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,OAAO,GAAI,EAAU,CAAC,YAAY,KAAK,IAAI,CAAC;YAClD,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,EAAE,CAAC,OAAO;gBACf,IAAI,EAAG,EAAU,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5C,WAAW,EAAG,EAAU,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC1D,SAAS,EAAG,EAAU,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;gBACvD,OAAO,EAAG,EAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;gBACtD,EAAE,EAAG,EAAU,CAAC,EAAE,IAAI,EAAE;gBACxB,eAAe,EAAG,EAAU,CAAC,eAAe;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,eAAe,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAErC,+BAA+B;QAC/B,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEhC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;QAC9E,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,oDAAoD;QACpD,MAAM,iBAAiB,CAAC,IAAI,EAAE,8CAA8C,CAAC,CAAC;QAE9E,sBAAsB;QACtB,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACvC,+BAA+B;YAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAK,IAAY,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,CAAC;oBACvD,IAAY,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC;QAED,mDAAmD;QACnD,MAAM,iBAAiB,CAAC,IAAI,EAAE,6CAA6C,CAAC,CAAC;QAE7E,gCAAgC;QAChC,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACvC,MAAM,OAAO,GAAU,EAAE,CAAC;YAC1B,+BAA+B;YAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAChD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAI,EAAU,CAAC,YAAY,KAAK,IAAI,CAAC;gBAClD,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAG,EAAU,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;oBAC5D,SAAS,EAAG,EAAU,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;oBACvD,IAAI,EAAG,EAAU,CAAC,IAAI,IAAI,EAAE;iBAC7B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,GAAG,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACzC,IAAI,GAAG,CAAC,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,oBAAoB;QACpB,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;YAAS,CAAC;QACT,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Notebook Creation Module
3
+ *
4
+ * Provides functionality for programmatically creating NotebookLM notebooks
5
+ * with sources via browser automation.
6
+ */
7
+ export * from "./types.js";
8
+ export * from "./selectors.js";
9
+ export * from "./selector-discovery.js";
10
+ export * from "./notebook-creator.js";
11
+ export * from "./notebook-sync.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notebook-creation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Notebook Creation Module
3
+ *
4
+ * Provides functionality for programmatically creating NotebookLM notebooks
5
+ * with sources via browser automation.
6
+ */
7
+ export * from "./types.js";
8
+ export * from "./selectors.js";
9
+ export * from "./selector-discovery.js";
10
+ export * from "./notebook-creator.js";
11
+ export * from "./notebook-sync.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notebook-creation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * NotebookLM Notebook Creator
3
+ *
4
+ * Creates notebooks programmatically via browser automation.
5
+ * Supports URL, text, and file sources.
6
+ */
7
+ import type { CreateNotebookOptions, CreatedNotebook } from "./types.js";
8
+ import { AuthManager } from "../auth/auth-manager.js";
9
+ import { SharedContextManager } from "../session/shared-context-manager.js";
10
+ /**
11
+ * Creates NotebookLM notebooks with sources
12
+ */
13
+ export declare class NotebookCreator {
14
+ private authManager;
15
+ private contextManager;
16
+ private page;
17
+ constructor(authManager: AuthManager, contextManager: SharedContextManager);
18
+ /**
19
+ * Create a new notebook with sources
20
+ */
21
+ createNotebook(options: CreateNotebookOptions): Promise<CreatedNotebook>;
22
+ /**
23
+ * Initialize browser and navigate to NotebookLM
24
+ */
25
+ private initialize;
26
+ /**
27
+ * Click the "New notebook" button
28
+ */
29
+ private clickNewNotebook;
30
+ /**
31
+ * Set the notebook name
32
+ */
33
+ private setNotebookName;
34
+ /**
35
+ * Add a source to the notebook
36
+ */
37
+ private addSource;
38
+ /**
39
+ * Check if the source dialog is already open
40
+ */
41
+ private isSourceDialogOpen;
42
+ /**
43
+ * Click the "Add source" button
44
+ */
45
+ private clickAddSource;
46
+ /**
47
+ * Add a URL source
48
+ */
49
+ private addUrlSource;
50
+ /**
51
+ * Add a text source
52
+ */
53
+ private addTextSource;
54
+ /**
55
+ * Add a file source
56
+ */
57
+ private addFileSource;
58
+ /**
59
+ * Click a source type by text content (for the new dialog structure)
60
+ */
61
+ private clickSourceTypeByText;
62
+ /**
63
+ * Click the submit/add button
64
+ */
65
+ private clickSubmitButton;
66
+ /**
67
+ * Click the "Insert" button (for text sources)
68
+ */
69
+ private clickInsertButton;
70
+ /**
71
+ * Wait for source processing to complete
72
+ */
73
+ private waitForSourceProcessing;
74
+ /**
75
+ * Lenient version of waitForSourceProcessing that ignores false positive errors
76
+ */
77
+ private waitForSourceProcessingLenient;
78
+ /**
79
+ * Finalize notebook creation and get the URL
80
+ */
81
+ private finalizeAndGetUrl;
82
+ /**
83
+ * Get a human-readable description of a source
84
+ */
85
+ private getSourceDescription;
86
+ /**
87
+ * Cleanup resources
88
+ */
89
+ private cleanup;
90
+ }
91
+ /**
92
+ * Create a notebook with the given options
93
+ */
94
+ export declare function createNotebook(authManager: AuthManager, contextManager: SharedContextManager, options: CreateNotebookOptions): Promise<CreatedNotebook>;
95
+ //# sourceMappingURL=notebook-creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook-creator.d.ts","sourceRoot":"","sources":["../../src/notebook-creation/notebook-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EAGhB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAM5E;;GAEG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IAJxB,OAAO,CAAC,IAAI,CAAqB;gBAGvB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,oBAAoB;IAG9C;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IA+D9E;;OAEG;YACW,UAAU;IAmCxB;;OAEG;YACW,gBAAgB;IAsD9B;;OAEG;YACW,eAAe;IAiC7B;;OAEG;YACW,SAAS;IA6BvB;;OAEG;YACW,kBAAkB;IAoBhC;;OAEG;YACW,cAAc;IA2D5B;;OAEG;YACW,YAAY;IAgC1B;;OAEG;YACW,aAAa;IA4F3B;;OAEG;YACW,aAAa;IAsD3B;;OAEG;YACW,qBAAqB;IAmCnC;;OAEG;YACW,iBAAiB;IAqB/B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;YACW,uBAAuB;IAsCrC;;OAEG;YACW,8BAA8B;IAuC5C;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;YACW,OAAO;CAUtB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,oBAAoB,EACpC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAG1B"}