@aloth/olcli 0.1.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.
package/dist/client.js ADDED
@@ -0,0 +1,572 @@
1
+ /**
2
+ * Overleaf API Client
3
+ *
4
+ * Provides programmatic access to Overleaf's REST APIs for project
5
+ * management, file operations, and LaTeX compilation.
6
+ */
7
+ import * as cheerio from 'cheerio';
8
+ const BASE_URL = 'https://www.overleaf.com';
9
+ const PROJECT_URL = `${BASE_URL}/project`;
10
+ const DOWNLOAD_URL = `${BASE_URL}/project/{id}/download/zip`;
11
+ const UPLOAD_URL = `${BASE_URL}/project/{id}/upload`;
12
+ const FOLDER_URL = `${BASE_URL}/project/{id}/folder`;
13
+ const DELETE_URL = `${BASE_URL}/project/{projectId}/{type}/{entityId}`;
14
+ const COMPILE_URL = `${BASE_URL}/project/{id}/compile?enable_pdf_caching=true`;
15
+ export class OverleafClient {
16
+ cookies;
17
+ csrf;
18
+ constructor(credentials) {
19
+ this.cookies = credentials.cookies;
20
+ this.csrf = credentials.csrf;
21
+ }
22
+ /**
23
+ * Create client from session cookie string
24
+ */
25
+ static async fromSessionCookie(sessionCookie) {
26
+ const cookies = {
27
+ 'overleaf_session2': sessionCookie
28
+ };
29
+ // Fetch CSRF token from project page
30
+ const response = await fetch(PROJECT_URL, {
31
+ headers: {
32
+ 'Cookie': Object.entries(cookies).map(([k, v]) => `${k}=${v}`).join('; '),
33
+ 'User-Agent': 'olcli/0.1.0'
34
+ }
35
+ });
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to fetch projects page: ${response.status} ${response.statusText}`);
38
+ }
39
+ // Capture any new cookies from response
40
+ const setCookieHeaders = response.headers.getSetCookie?.() || [];
41
+ for (const setCookie of setCookieHeaders) {
42
+ const match = setCookie.match(/^([^=]+)=([^;]+)/);
43
+ if (match) {
44
+ cookies[match[1]] = match[2];
45
+ }
46
+ }
47
+ const html = await response.text();
48
+ const $ = cheerio.load(html);
49
+ // Try multiple methods to find CSRF token (based on PR #66, #82)
50
+ let csrf;
51
+ // Method 1: ol-csrfToken meta tag
52
+ csrf = $('meta[name="ol-csrfToken"]').attr('content');
53
+ // Method 2: hidden input field
54
+ if (!csrf) {
55
+ csrf = $('input[name="_csrf"]').attr('value');
56
+ }
57
+ // Method 3: Look in script tags for csrfToken
58
+ if (!csrf) {
59
+ const scripts = $('script').toArray();
60
+ for (const script of scripts) {
61
+ const content = $(script).html() || '';
62
+ const match = content.match(/csrfToken["']?\s*[:=]\s*["']([^"']+)["']/);
63
+ if (match) {
64
+ csrf = match[1];
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ if (!csrf) {
70
+ throw new Error('Could not find CSRF token. Session may have expired.');
71
+ }
72
+ return new OverleafClient({ cookies, csrf });
73
+ }
74
+ getCookieHeader() {
75
+ return Object.entries(this.cookies).map(([k, v]) => `${k}=${v}`).join('; ');
76
+ }
77
+ getHeaders(includeContentType = false) {
78
+ const headers = {
79
+ 'Cookie': this.getCookieHeader(),
80
+ 'User-Agent': 'olcli/0.1.0',
81
+ 'X-Csrf-Token': this.csrf
82
+ };
83
+ if (includeContentType) {
84
+ headers['Content-Type'] = 'application/json';
85
+ }
86
+ return headers;
87
+ }
88
+ /**
89
+ * Get all projects (not archived, not trashed)
90
+ */
91
+ async listProjects() {
92
+ const response = await fetch(PROJECT_URL, {
93
+ headers: this.getHeaders()
94
+ });
95
+ if (!response.ok) {
96
+ throw new Error(`Failed to fetch projects: ${response.status}`);
97
+ }
98
+ const html = await response.text();
99
+ const $ = cheerio.load(html);
100
+ // Try new Overleaf structure first (PR #82)
101
+ let projectsData = [];
102
+ // Method 1: ol-prefetchedProjectsBlob (newest Overleaf)
103
+ const prefetchedBlob = $('meta[name="ol-prefetchedProjectsBlob"]').attr('content');
104
+ if (prefetchedBlob) {
105
+ try {
106
+ const data = JSON.parse(prefetchedBlob);
107
+ projectsData = data.projects || data;
108
+ }
109
+ catch (e) {
110
+ // Try next method
111
+ }
112
+ }
113
+ // Method 2: Meta tag with projects content (PR #73)
114
+ if (projectsData.length === 0) {
115
+ const metas = $('meta[content]').toArray();
116
+ for (const meta of metas) {
117
+ const content = $(meta).attr('content') || '';
118
+ if (content.includes('"projects"')) {
119
+ try {
120
+ const data = JSON.parse(content);
121
+ if (data.projects) {
122
+ projectsData = data.projects;
123
+ break;
124
+ }
125
+ }
126
+ catch (e) {
127
+ // Continue
128
+ }
129
+ }
130
+ }
131
+ }
132
+ // Method 3: ol-projects meta tag (legacy)
133
+ if (projectsData.length === 0) {
134
+ const projectsMeta = $('meta[name="ol-projects"]').attr('content');
135
+ if (projectsMeta) {
136
+ try {
137
+ projectsData = JSON.parse(projectsMeta);
138
+ }
139
+ catch (e) {
140
+ // Continue
141
+ }
142
+ }
143
+ }
144
+ // Filter out archived and trashed
145
+ return projectsData
146
+ .filter((p) => !p.archived && !p.trashed)
147
+ .map((p) => ({
148
+ id: p.id || p._id,
149
+ name: p.name,
150
+ lastUpdated: p.lastUpdated,
151
+ lastUpdatedBy: p.lastUpdatedBy,
152
+ owner: p.owner,
153
+ archived: p.archived,
154
+ trashed: p.trashed
155
+ }));
156
+ }
157
+ /**
158
+ * Get project by name
159
+ */
160
+ async getProject(name) {
161
+ const projects = await this.listProjects();
162
+ return projects.find(p => p.name === name);
163
+ }
164
+ /**
165
+ * Get project by ID
166
+ */
167
+ async getProjectById(id) {
168
+ const projects = await this.listProjects();
169
+ return projects.find(p => p.id === id);
170
+ }
171
+ /**
172
+ * Get detailed project info including file tree
173
+ */
174
+ async getProjectInfo(projectId) {
175
+ const response = await fetch(`${PROJECT_URL}/${projectId}`, {
176
+ headers: this.getHeaders()
177
+ });
178
+ if (!response.ok) {
179
+ throw new Error(`Failed to fetch project info: ${response.status}`);
180
+ }
181
+ const html = await response.text();
182
+ const $ = cheerio.load(html);
183
+ // Look for project data in meta tags
184
+ let projectInfo;
185
+ // Try ol-project meta tag
186
+ const projectMeta = $('meta[name="ol-project"]').attr('content');
187
+ if (projectMeta) {
188
+ try {
189
+ projectInfo = JSON.parse(projectMeta);
190
+ }
191
+ catch (e) {
192
+ // Continue
193
+ }
194
+ }
195
+ // Try to find in other meta tags
196
+ if (!projectInfo) {
197
+ const metas = $('meta[content]').toArray();
198
+ for (const meta of metas) {
199
+ const content = $(meta).attr('content') || '';
200
+ if (content.includes('rootFolder')) {
201
+ try {
202
+ projectInfo = JSON.parse(content);
203
+ break;
204
+ }
205
+ catch (e) {
206
+ // Continue
207
+ }
208
+ }
209
+ }
210
+ }
211
+ if (!projectInfo) {
212
+ throw new Error('Could not parse project info');
213
+ }
214
+ return projectInfo;
215
+ }
216
+ /**
217
+ * Download project as zip
218
+ */
219
+ async downloadProject(projectId) {
220
+ const response = await fetch(DOWNLOAD_URL.replace('{id}', projectId), {
221
+ headers: this.getHeaders()
222
+ });
223
+ if (!response.ok) {
224
+ throw new Error(`Failed to download project: ${response.status}`);
225
+ }
226
+ const arrayBuffer = await response.arrayBuffer();
227
+ return Buffer.from(arrayBuffer);
228
+ }
229
+ /**
230
+ * Compile project and get PDF
231
+ */
232
+ async compileProject(projectId) {
233
+ const response = await fetch(COMPILE_URL.replace('{id}', projectId), {
234
+ method: 'POST',
235
+ headers: this.getHeaders(true),
236
+ body: JSON.stringify({
237
+ rootDoc_id: null,
238
+ draft: false,
239
+ check: 'silent',
240
+ incrementalCompilesEnabled: true
241
+ })
242
+ });
243
+ if (!response.ok) {
244
+ throw new Error(`Failed to compile project: ${response.status}`);
245
+ }
246
+ const data = await response.json();
247
+ if (data.status !== 'success') {
248
+ throw new Error(`Compilation failed: ${data.status}`);
249
+ }
250
+ const pdfFile = data.outputFiles?.find((f) => f.type === 'pdf');
251
+ if (!pdfFile) {
252
+ throw new Error('No PDF output found');
253
+ }
254
+ return {
255
+ pdfUrl: `${BASE_URL}${pdfFile.url}`,
256
+ logs: data.compileGroup ? [`Compile group: ${data.compileGroup}`] : []
257
+ };
258
+ }
259
+ /**
260
+ * Download compiled PDF
261
+ */
262
+ async downloadPdf(projectId) {
263
+ const { pdfUrl } = await this.compileProject(projectId);
264
+ const response = await fetch(pdfUrl, {
265
+ headers: this.getHeaders()
266
+ });
267
+ if (!response.ok) {
268
+ throw new Error(`Failed to download PDF: ${response.status}`);
269
+ }
270
+ const arrayBuffer = await response.arrayBuffer();
271
+ return Buffer.from(arrayBuffer);
272
+ }
273
+ /**
274
+ * Create a folder in a project
275
+ */
276
+ async createFolder(projectId, parentFolderId, name) {
277
+ const response = await fetch(FOLDER_URL.replace('{id}', projectId), {
278
+ method: 'POST',
279
+ headers: this.getHeaders(true),
280
+ body: JSON.stringify({
281
+ parent_folder_id: parentFolderId,
282
+ name
283
+ })
284
+ });
285
+ if (response.status === 400) {
286
+ // Folder already exists
287
+ throw new Error('Folder already exists');
288
+ }
289
+ if (!response.ok) {
290
+ throw new Error(`Failed to create folder: ${response.status}`);
291
+ }
292
+ const data = await response.json();
293
+ return data._id;
294
+ }
295
+ /**
296
+ * Compute root folder ID from project ID
297
+ * MongoDB ObjectIDs are 24 hex chars. The root folder ID is typically projectId - 1
298
+ */
299
+ computeRootFolderId(projectId) {
300
+ // Parse the last 8 chars as a hex number (the counter portion)
301
+ const prefix = projectId.slice(0, 16);
302
+ const suffix = projectId.slice(16);
303
+ const counter = parseInt(suffix, 16);
304
+ const newCounter = (counter - 1).toString(16).padStart(8, '0');
305
+ return prefix + newCounter;
306
+ }
307
+ /**
308
+ * Get root folder ID for a project (tries multiple methods)
309
+ */
310
+ async getRootFolderId(projectId) {
311
+ // Method 1: Try to get from project page meta tags
312
+ try {
313
+ const projectInfo = await this.getProjectInfo(projectId);
314
+ if (projectInfo.rootFolder?.[0]?._id) {
315
+ return projectInfo.rootFolder[0]._id;
316
+ }
317
+ }
318
+ catch (e) {
319
+ // Fall through to computed method
320
+ }
321
+ // Method 2: Compute from project ID (projectId - 1)
322
+ return this.computeRootFolderId(projectId);
323
+ }
324
+ /**
325
+ * Upload a file to a project
326
+ */
327
+ async uploadFile(projectId, folderId, fileName, content) {
328
+ // If no folder ID provided, get the root folder
329
+ const targetFolderId = folderId || await this.getRootFolderId(projectId);
330
+ // Extract just the filename without path (PR #73 fix)
331
+ const baseName = fileName.split('/').pop() || fileName;
332
+ // Determine MIME type
333
+ const ext = baseName.split('.').pop()?.toLowerCase() || '';
334
+ const mimeTypes = {
335
+ 'tex': 'text/x-tex',
336
+ 'bib': 'text/x-bibtex',
337
+ 'cls': 'text/x-tex',
338
+ 'sty': 'text/x-tex',
339
+ 'png': 'image/png',
340
+ 'jpg': 'image/jpeg',
341
+ 'jpeg': 'image/jpeg',
342
+ 'gif': 'image/gif',
343
+ 'pdf': 'application/pdf',
344
+ 'svg': 'image/svg+xml',
345
+ 'eps': 'application/postscript'
346
+ };
347
+ const mimeType = mimeTypes[ext] || 'application/octet-stream';
348
+ const formData = new FormData();
349
+ // Match Overleaf-Workshop: include targetFolderId in form data
350
+ formData.append('targetFolderId', targetFolderId);
351
+ formData.append('name', baseName);
352
+ formData.append('type', mimeType);
353
+ formData.append('qqfile', new Blob([content]), baseName);
354
+ const response = await fetch(`${UPLOAD_URL.replace('{id}', projectId)}?folder_id=${targetFolderId}`, {
355
+ method: 'POST',
356
+ headers: {
357
+ 'Cookie': this.getCookieHeader(),
358
+ 'User-Agent': 'olcli/0.1.0',
359
+ 'X-Csrf-Token': this.csrf
360
+ },
361
+ body: formData
362
+ });
363
+ if (!response.ok) {
364
+ const text = await response.text();
365
+ throw new Error(`Failed to upload file: ${response.status} - ${text}`);
366
+ }
367
+ const data = await response.json();
368
+ return {
369
+ success: data.success !== false,
370
+ entityId: data.entity_id,
371
+ entityType: data.entity_type
372
+ };
373
+ }
374
+ /**
375
+ * Delete a file or folder
376
+ */
377
+ async deleteEntity(projectId, entityId, entityType) {
378
+ const url = DELETE_URL
379
+ .replace('{projectId}', projectId)
380
+ .replace('{type}', entityType)
381
+ .replace('{entityId}', entityId);
382
+ const response = await fetch(url, {
383
+ method: 'DELETE',
384
+ headers: this.getHeaders()
385
+ });
386
+ if (!response.ok) {
387
+ throw new Error(`Failed to delete entity: ${response.status}`);
388
+ }
389
+ }
390
+ /**
391
+ * Get list of entities (files/docs) with paths
392
+ */
393
+ async getEntities(projectId) {
394
+ const response = await fetch(`${BASE_URL}/project/${projectId}/entities`, {
395
+ headers: this.getHeaders()
396
+ });
397
+ if (!response.ok) {
398
+ throw new Error(`Failed to get entities: ${response.status}`);
399
+ }
400
+ const data = await response.json();
401
+ return data.entities || [];
402
+ }
403
+ /**
404
+ * Find entity ID by path (searches through project file tree)
405
+ */
406
+ async findEntityByPath(projectId, targetPath) {
407
+ const projectInfo = await this.getProjectInfo(projectId);
408
+ const normalizedTarget = targetPath.replace(/^\//, '');
409
+ function searchFolder(folder, currentPath) {
410
+ // Check docs
411
+ for (const doc of folder.docs || []) {
412
+ const docPath = currentPath ? `${currentPath}/${doc.name}` : doc.name;
413
+ if (docPath === normalizedTarget || doc.name === normalizedTarget) {
414
+ return { id: doc._id, type: 'doc', name: doc.name };
415
+ }
416
+ }
417
+ // Check files
418
+ for (const file of folder.fileRefs || []) {
419
+ const filePath = currentPath ? `${currentPath}/${file.name}` : file.name;
420
+ if (filePath === normalizedTarget || file.name === normalizedTarget) {
421
+ return { id: file._id, type: 'file', name: file.name };
422
+ }
423
+ }
424
+ // Check subfolders
425
+ for (const subfolder of folder.folders || []) {
426
+ const folderPath = currentPath ? `${currentPath}/${subfolder.name}` : subfolder.name;
427
+ if (folderPath === normalizedTarget || subfolder.name === normalizedTarget) {
428
+ return { id: subfolder._id, type: 'folder', name: subfolder.name };
429
+ }
430
+ const found = searchFolder(subfolder, folderPath);
431
+ if (found)
432
+ return found;
433
+ }
434
+ return null;
435
+ }
436
+ if (projectInfo.rootFolder?.[0]) {
437
+ return searchFolder(projectInfo.rootFolder[0], '');
438
+ }
439
+ return null;
440
+ }
441
+ /**
442
+ * Download a single file by ID
443
+ */
444
+ async downloadFile(projectId, fileId, fileType) {
445
+ const endpoint = fileType === 'doc' ? 'doc' : 'file';
446
+ const response = await fetch(`${BASE_URL}/project/${projectId}/${endpoint}/${fileId}`, {
447
+ headers: this.getHeaders()
448
+ });
449
+ if (!response.ok) {
450
+ throw new Error(`Failed to download file: ${response.status}`);
451
+ }
452
+ if (fileType === 'doc') {
453
+ // Docs return JSON with lines array
454
+ const data = await response.json();
455
+ const content = (data.lines || []).join('\n');
456
+ return Buffer.from(content, 'utf-8');
457
+ }
458
+ else {
459
+ const arrayBuffer = await response.arrayBuffer();
460
+ return Buffer.from(arrayBuffer);
461
+ }
462
+ }
463
+ /**
464
+ * Rename a file, doc, or folder
465
+ */
466
+ async renameEntity(projectId, entityId, entityType, newName) {
467
+ const response = await fetch(`${BASE_URL}/project/${projectId}/${entityType}/${entityId}/rename`, {
468
+ method: 'POST',
469
+ headers: this.getHeaders(true),
470
+ body: JSON.stringify({ name: newName })
471
+ });
472
+ if (!response.ok) {
473
+ throw new Error(`Failed to rename entity: ${response.status}`);
474
+ }
475
+ }
476
+ /**
477
+ * Delete a file by path
478
+ */
479
+ async deleteByPath(projectId, path) {
480
+ const entity = await this.findEntityByPath(projectId, path);
481
+ if (!entity) {
482
+ throw new Error(`File not found: ${path}`);
483
+ }
484
+ await this.deleteEntity(projectId, entity.id, entity.type);
485
+ }
486
+ /**
487
+ * Rename a file by path
488
+ */
489
+ async renameByPath(projectId, oldPath, newName) {
490
+ const entity = await this.findEntityByPath(projectId, oldPath);
491
+ if (!entity) {
492
+ throw new Error(`File not found: ${oldPath}`);
493
+ }
494
+ await this.renameEntity(projectId, entity.id, entity.type, newName);
495
+ }
496
+ /**
497
+ * Download a file by path (uses zip as fallback if ID not available)
498
+ */
499
+ async downloadByPath(projectId, path) {
500
+ const normalizedPath = path.replace(/^\//, '');
501
+ // First check if file exists
502
+ const entities = await this.getEntities(projectId);
503
+ const entityExists = entities.find(e => e.path.replace(/^\//, '') === normalizedPath ||
504
+ e.path === `/${normalizedPath}`);
505
+ if (!entityExists) {
506
+ throw new Error(`File not found: ${path}`);
507
+ }
508
+ // Try to find entity with ID for direct download
509
+ try {
510
+ const entity = await this.findEntityByPath(projectId, path);
511
+ if (entity && entity.type !== 'folder') {
512
+ return await this.downloadFile(projectId, entity.id, entity.type);
513
+ }
514
+ }
515
+ catch (e) {
516
+ // Fall through to zip method
517
+ }
518
+ // Fallback: download zip and extract the file
519
+ const zipBuffer = await this.downloadProject(projectId);
520
+ const AdmZip = (await import('adm-zip')).default;
521
+ const zip = new AdmZip(zipBuffer);
522
+ for (const entry of zip.getEntries()) {
523
+ if (entry.entryName === normalizedPath || entry.entryName === path) {
524
+ return entry.getData();
525
+ }
526
+ }
527
+ throw new Error(`File not found in archive: ${path}`);
528
+ }
529
+ /**
530
+ * Compile project and get all output files
531
+ */
532
+ async compileWithOutputs(projectId) {
533
+ const response = await fetch(COMPILE_URL.replace('{id}', projectId), {
534
+ method: 'POST',
535
+ headers: this.getHeaders(true),
536
+ body: JSON.stringify({
537
+ rootDoc_id: null,
538
+ draft: false,
539
+ check: 'silent',
540
+ incrementalCompilesEnabled: true
541
+ })
542
+ });
543
+ if (!response.ok) {
544
+ throw new Error(`Failed to compile project: ${response.status}`);
545
+ }
546
+ const data = await response.json();
547
+ const pdfFile = data.outputFiles?.find((f) => f.type === 'pdf');
548
+ return {
549
+ status: data.status,
550
+ pdfUrl: pdfFile ? `${BASE_URL}${pdfFile.url}` : undefined,
551
+ outputFiles: (data.outputFiles || []).map((f) => ({
552
+ path: f.path,
553
+ type: f.type,
554
+ url: `${BASE_URL}${f.url}`
555
+ }))
556
+ };
557
+ }
558
+ /**
559
+ * Download a compile output file (logs, bbl, aux, etc.)
560
+ */
561
+ async downloadOutputFile(url) {
562
+ const response = await fetch(url, {
563
+ headers: this.getHeaders()
564
+ });
565
+ if (!response.ok) {
566
+ throw new Error(`Failed to download output file: ${response.status}`);
567
+ }
568
+ const arrayBuffer = await response.arrayBuffer();
569
+ return Buffer.from(arrayBuffer);
570
+ }
571
+ }
572
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configuration management for olcli
3
+ */
4
+ export declare function getSessionCookie(): string | undefined;
5
+ export declare function setSessionCookie(cookie: string): void;
6
+ export declare function getCsrf(): string | undefined;
7
+ export declare function setCsrf(csrf: string): void;
8
+ export declare function getLastProject(): string | undefined;
9
+ export declare function setLastProject(projectId: string): void;
10
+ export declare function clearConfig(): void;
11
+ export declare function getConfigPath(): string;
12
+ /**
13
+ * Save session cookie in .olauth format for compatibility
14
+ */
15
+ export declare function saveOlAuth(cookie: string, path?: string): void;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CA2BrD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,OAAO,IAAI,MAAM,GAAG,SAAS,CAE5C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9D"}