@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/LICENSE +21 -0
- package/README.md +226 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +873 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +163 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +572 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/package.json +59 -0
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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|