/ clis / notebooklm / source-list.js
source-list.js
 1  import { cli, Strategy } from '@jackwener/opencli/registry';
 2  import { EmptyResultError } from '@jackwener/opencli/errors';
 3  import { NOTEBOOKLM_DOMAIN, NOTEBOOKLM_SITE } from './shared.js';
 4  import { getNotebooklmPageState, listNotebooklmSourcesFromPage, listNotebooklmSourcesViaRpc, requireNotebooklmSession, } from './utils.js';
 5  cli({
 6      site: NOTEBOOKLM_SITE,
 7      name: 'source-list',
 8      description: 'List sources for the currently opened NotebookLM notebook',
 9      domain: NOTEBOOKLM_DOMAIN,
10      strategy: Strategy.COOKIE,
11      browser: true,
12      navigateBefore: false,
13      args: [],
14      columns: ['title', 'id', 'type', 'size', 'created_at', 'updated_at', 'url', 'source'],
15      func: async (page) => {
16          await requireNotebooklmSession(page);
17          const state = await getNotebooklmPageState(page);
18          if (state.kind !== 'notebook') {
19              throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM notebook is open in the automation workspace. Run `opencli notebooklm open <notebook>` first.');
20          }
21          const rpcRows = await listNotebooklmSourcesViaRpc(page).catch(() => []);
22          if (rpcRows.length > 0)
23              return rpcRows;
24          const domRows = await listNotebooklmSourcesFromPage(page);
25          if (domRows.length > 0)
26              return domRows;
27          throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM sources were found on the current page.');
28      },
29  });