overleaf-codex 0.1.0-rc.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.
Potentially problematic release.
This version of overleaf-codex might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/NOTICE.md +25 -0
- package/README.md +217 -0
- package/assets/olcx-mark.svg +22 -0
- package/dist/auth/projectAuth.d.ts +19 -0
- package/dist/auth/projectAuth.js +163 -0
- package/dist/auth/projectAuth.js.map +1 -0
- package/dist/auth/redact.d.ts +3 -0
- package/dist/auth/redact.js +7 -0
- package/dist/auth/redact.js.map +1 -0
- package/dist/auth/types.d.ts +10 -0
- package/dist/auth/types.js +4 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/backend/index.d.ts +6 -0
- package/dist/backend/index.js +2 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/olcli/client.d.ts +329 -0
- package/dist/backend/olcli/client.js +1757 -0
- package/dist/backend/olcli/client.js.map +1 -0
- package/dist/backend/olcli/index.d.ts +2 -0
- package/dist/backend/olcli/index.js +2 -0
- package/dist/backend/olcli/index.js.map +1 -0
- package/dist/backend/overleafBackend.d.ts +41 -0
- package/dist/backend/overleafBackend.js +200 -0
- package/dist/backend/overleafBackend.js.map +1 -0
- package/dist/backend/types.d.ts +73 -0
- package/dist/backend/types.js +2 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/cli-behavior.d.ts +14 -0
- package/dist/cli-behavior.js +59 -0
- package/dist/cli-behavior.js.map +1 -0
- package/dist/cli.d.ts +30 -0
- package/dist/cli.js +441 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +21 -0
- package/dist/commands/auth.js +104 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/compile.d.ts +7 -0
- package/dist/commands/compile.js +73 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.js +9 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/endpoint.d.ts +23 -0
- package/dist/commands/endpoint.js +69 -0
- package/dist/commands/endpoint.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.js +48 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.js +5 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +26 -0
- package/dist/commands/sync.js +139 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/watch.d.ts +28 -0
- package/dist/commands/watch.js +124 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/compile/compileFlow.d.ts +32 -0
- package/dist/compile/compileFlow.js +290 -0
- package/dist/compile/compileFlow.js.map +1 -0
- package/dist/compile/pdfOutput.d.ts +12 -0
- package/dist/compile/pdfOutput.js +64 -0
- package/dist/compile/pdfOutput.js.map +1 -0
- package/dist/config/ignoreRules.d.ts +5 -0
- package/dist/config/ignoreRules.js +53 -0
- package/dist/config/ignoreRules.js.map +1 -0
- package/dist/config/overleafProject.d.ts +9 -0
- package/dist/config/overleafProject.js +61 -0
- package/dist/config/overleafProject.js.map +1 -0
- package/dist/config/projectConfig.d.ts +6 -0
- package/dist/config/projectConfig.js +180 -0
- package/dist/config/projectConfig.js.map +1 -0
- package/dist/config/projectRoot.d.ts +1 -0
- package/dist/config/projectRoot.js +36 -0
- package/dist/config/projectRoot.js.map +1 -0
- package/dist/config/types.d.ts +50 -0
- package/dist/config/types.js +34 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/vscode.d.ts +10 -0
- package/dist/config/vscode.js +134 -0
- package/dist/config/vscode.js.map +1 -0
- package/dist/diagnostics/doctor.d.ts +8 -0
- package/dist/diagnostics/doctor.js +209 -0
- package/dist/diagnostics/doctor.js.map +1 -0
- package/dist/diagnostics/status.d.ts +6 -0
- package/dist/diagnostics/status.js +110 -0
- package/dist/diagnostics/status.js.map +1 -0
- package/dist/diagnostics/types.d.ts +33 -0
- package/dist/diagnostics/types.js +2 -0
- package/dist/diagnostics/types.js.map +1 -0
- package/dist/endpoint/overleafEndpoint.d.ts +36 -0
- package/dist/endpoint/overleafEndpoint.js +105 -0
- package/dist/endpoint/overleafEndpoint.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/sync/apply.d.ts +14 -0
- package/dist/sync/apply.js +92 -0
- package/dist/sync/apply.js.map +1 -0
- package/dist/sync/conflicts.d.ts +7 -0
- package/dist/sync/conflicts.js +59 -0
- package/dist/sync/conflicts.js.map +1 -0
- package/dist/sync/ignore.d.ts +5 -0
- package/dist/sync/ignore.js +74 -0
- package/dist/sync/ignore.js.map +1 -0
- package/dist/sync/plan.d.ts +3 -0
- package/dist/sync/plan.js +197 -0
- package/dist/sync/plan.js.map +1 -0
- package/dist/sync/snapshot.d.ts +13 -0
- package/dist/sync/snapshot.js +82 -0
- package/dist/sync/snapshot.js.map +1 -0
- package/dist/sync/state.d.ts +16 -0
- package/dist/sync/state.js +214 -0
- package/dist/sync/state.js.map +1 -0
- package/dist/sync/types.d.ts +113 -0
- package/dist/sync/types.js +4 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/testing/fakeBackend.d.ts +27 -0
- package/dist/testing/fakeBackend.js +213 -0
- package/dist/testing/fakeBackend.js.map +1 -0
- package/dist/watch/queue.d.ts +2 -0
- package/dist/watch/queue.js +91 -0
- package/dist/watch/queue.js.map +1 -0
- package/dist/watch/types.d.ts +52 -0
- package/dist/watch/types.js +2 -0
- package/dist/watch/types.js.map +1 -0
- package/dist/watch/watcher.d.ts +6 -0
- package/dist/watch/watcher.js +58 -0
- package/dist/watch/watcher.js.map +1 -0
- package/dist/watch/workflow.d.ts +30 -0
- package/dist/watch/workflow.js +62 -0
- package/dist/watch/workflow.js.map +1 -0
- package/docs/architecture.md +603 -0
- package/docs/auth.md +65 -0
- package/docs/cli-behavior.md +95 -0
- package/docs/compile.md +51 -0
- package/docs/design.md +82 -0
- package/docs/endpoint.md +84 -0
- package/docs/npm-packaging.md +148 -0
- package/docs/quickdev-queue-audit.md +193 -0
- package/docs/release-gates.md +119 -0
- package/docs/release-notes-v1.md +97 -0
- package/docs/security.md +61 -0
- package/docs/sync-state.md +305 -0
- package/docs/sync.md +50 -0
- package/docs/troubleshooting.md +124 -0
- package/docs/usage.md +184 -0
- package/examples/minimal-paper/.olcx/auth.local.example.json +7 -0
- package/examples/minimal-paper/.olcx/config.json +23 -0
- package/examples/minimal-paper/README.md +88 -0
- package/examples/minimal-paper/main.tex +23 -0
- package/package.json +66 -0
- package/src/backend/olcli/LICENSE +21 -0
- package/src/backend/olcli/README.md +26 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapted from @aloth/olcli v0.5.0 src/client.ts.
|
|
3
|
+
* Source: https://github.com/aloth/olcli
|
|
4
|
+
* Tag: v0.5.0
|
|
5
|
+
* Commit: 524c30b11328a847a9c0bcf4447d2b3468160f8c
|
|
6
|
+
* Copyright (c) 2026 Alexander Loth
|
|
7
|
+
* Licensed under the MIT License. See ./LICENSE.
|
|
8
|
+
*
|
|
9
|
+
* olcx adaptations:
|
|
10
|
+
* - moved into backend-private src/backend/olcli/
|
|
11
|
+
* - removed import-time package.json version lookup
|
|
12
|
+
* - exported a fixed olcx/olcli user agent for built-package imports
|
|
13
|
+
*/
|
|
14
|
+
export declare const USER_AGENT = "olcx/0.1.0 olcli/0.5.0";
|
|
15
|
+
export interface Project {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
lastUpdated: string;
|
|
19
|
+
lastUpdatedBy?: string;
|
|
20
|
+
owner?: {
|
|
21
|
+
email: string;
|
|
22
|
+
firstName?: string;
|
|
23
|
+
lastName?: string;
|
|
24
|
+
};
|
|
25
|
+
archived?: boolean;
|
|
26
|
+
trashed?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface ProjectInfo {
|
|
29
|
+
_id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
rootDoc_id?: string;
|
|
32
|
+
rootFolder: FolderEntry[];
|
|
33
|
+
}
|
|
34
|
+
export interface FolderEntry {
|
|
35
|
+
_id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
folders: FolderEntry[];
|
|
38
|
+
docs: DocEntry[];
|
|
39
|
+
fileRefs: FileEntry[];
|
|
40
|
+
}
|
|
41
|
+
export interface DocEntry {
|
|
42
|
+
_id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
}
|
|
45
|
+
export interface FileEntry {
|
|
46
|
+
_id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
}
|
|
49
|
+
export interface CommentMessage {
|
|
50
|
+
id: string;
|
|
51
|
+
content: string;
|
|
52
|
+
timestamp?: string | number;
|
|
53
|
+
user_id?: string;
|
|
54
|
+
user?: {
|
|
55
|
+
email?: string;
|
|
56
|
+
first_name?: string;
|
|
57
|
+
last_name?: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
};
|
|
60
|
+
edited_at?: string | number;
|
|
61
|
+
}
|
|
62
|
+
export interface ProjectComment {
|
|
63
|
+
threadId: string;
|
|
64
|
+
docId: string;
|
|
65
|
+
path: string;
|
|
66
|
+
position: number;
|
|
67
|
+
line: number;
|
|
68
|
+
column: number;
|
|
69
|
+
selectedText: string;
|
|
70
|
+
resolved: boolean;
|
|
71
|
+
messages: CommentMessage[];
|
|
72
|
+
context?: CommentContext;
|
|
73
|
+
}
|
|
74
|
+
export interface CommentContext {
|
|
75
|
+
startLine: number;
|
|
76
|
+
endLine: number;
|
|
77
|
+
before: string[];
|
|
78
|
+
line: string;
|
|
79
|
+
after: string[];
|
|
80
|
+
}
|
|
81
|
+
export type CommentStatus = 'all' | 'open' | 'resolved';
|
|
82
|
+
export interface ListCommentsOptions {
|
|
83
|
+
status?: CommentStatus;
|
|
84
|
+
contextLines?: number;
|
|
85
|
+
}
|
|
86
|
+
export interface AddCommentOptions {
|
|
87
|
+
filePath: string;
|
|
88
|
+
content: string;
|
|
89
|
+
selectedText?: string;
|
|
90
|
+
position?: number;
|
|
91
|
+
line?: number;
|
|
92
|
+
column?: number;
|
|
93
|
+
length?: number;
|
|
94
|
+
occurrence?: number;
|
|
95
|
+
}
|
|
96
|
+
export interface Credentials {
|
|
97
|
+
cookies: Record<string, string>;
|
|
98
|
+
csrf: string;
|
|
99
|
+
baseUrl?: string;
|
|
100
|
+
}
|
|
101
|
+
export declare class OverleafClient {
|
|
102
|
+
private cookies;
|
|
103
|
+
private csrf;
|
|
104
|
+
private baseUrl;
|
|
105
|
+
private verbose;
|
|
106
|
+
private folderTreeCache;
|
|
107
|
+
constructor(credentials: Credentials);
|
|
108
|
+
/** Enable or disable verbose request/response logging to stderr. */
|
|
109
|
+
setVerbose(v: boolean): void;
|
|
110
|
+
/**
|
|
111
|
+
* Resolve (and cache) the folder tree for a project. Falls back to a
|
|
112
|
+
* minimal tree containing only the root folder when the Socket.IO probe
|
|
113
|
+
* fails (e.g. self-hosted Overleaf without that endpoint).
|
|
114
|
+
*/
|
|
115
|
+
getOrLoadFolderTree(projectId: string): Promise<Record<string, string>>;
|
|
116
|
+
/** Drop the cached folder tree for a project (e.g. after rename/delete). */
|
|
117
|
+
invalidateFolderTree(projectId: string): void;
|
|
118
|
+
private projectUrl;
|
|
119
|
+
private downloadUrl;
|
|
120
|
+
private uploadUrl;
|
|
121
|
+
private folderUrl;
|
|
122
|
+
private deleteUrl;
|
|
123
|
+
private compileUrl;
|
|
124
|
+
/**
|
|
125
|
+
* Create client from session cookie string
|
|
126
|
+
*/
|
|
127
|
+
static fromSessionCookie(sessionCookie: string, baseUrl?: string, cookieName?: string): Promise<OverleafClient>;
|
|
128
|
+
private getCookieHeader;
|
|
129
|
+
private getHeaders;
|
|
130
|
+
private normalizeHeaders;
|
|
131
|
+
private applySetCookieHeaders;
|
|
132
|
+
private logVerbose;
|
|
133
|
+
private httpRequest;
|
|
134
|
+
/**
|
|
135
|
+
* Get all projects (not archived, not trashed)
|
|
136
|
+
*/
|
|
137
|
+
listProjects(): Promise<Project[]>;
|
|
138
|
+
/**
|
|
139
|
+
* Get project by name
|
|
140
|
+
*/
|
|
141
|
+
getProject(name: string): Promise<Project | undefined>;
|
|
142
|
+
/**
|
|
143
|
+
* Get project by ID
|
|
144
|
+
*/
|
|
145
|
+
getProjectById(id: string): Promise<Project | undefined>;
|
|
146
|
+
/**
|
|
147
|
+
* Get detailed project info including file tree
|
|
148
|
+
*/
|
|
149
|
+
getProjectInfo(projectId: string): Promise<ProjectInfo>;
|
|
150
|
+
/**
|
|
151
|
+
* Fetch the full project object via the collaboration socket.
|
|
152
|
+
* Returns the `project` field of the joinProjectResponse, which contains
|
|
153
|
+
* the rootFolder tree and other metadata that used to live in ol-project.
|
|
154
|
+
*/
|
|
155
|
+
private getProjectFromSocket;
|
|
156
|
+
/**
|
|
157
|
+
* Download a URL as a Buffer using Node.js http/https modules.
|
|
158
|
+
*
|
|
159
|
+
* This avoids fetch's strict header validation which rejects non-Latin1
|
|
160
|
+
* characters in response headers (e.g. Content-Disposition with Unicode
|
|
161
|
+
* project names). See: https://github.com/aloth/olcli/issues/2
|
|
162
|
+
*/
|
|
163
|
+
private downloadBuffer;
|
|
164
|
+
/**
|
|
165
|
+
* Download project as zip
|
|
166
|
+
*
|
|
167
|
+
* Uses downloadBuffer to avoid ByteString errors from non-Latin1
|
|
168
|
+
* Content-Disposition headers. See: https://github.com/aloth/olcli/issues/2
|
|
169
|
+
*/
|
|
170
|
+
downloadProject(projectId: string): Promise<Buffer>;
|
|
171
|
+
/**
|
|
172
|
+
* Compile project and get PDF
|
|
173
|
+
*/
|
|
174
|
+
compileProject(projectId: string, options?: {
|
|
175
|
+
timeoutMs?: number;
|
|
176
|
+
draft?: boolean;
|
|
177
|
+
}): Promise<{
|
|
178
|
+
pdfUrl: string;
|
|
179
|
+
logs: string[];
|
|
180
|
+
}>;
|
|
181
|
+
/**
|
|
182
|
+
* Download compiled PDF
|
|
183
|
+
*/
|
|
184
|
+
downloadPdf(projectId: string): Promise<Buffer>;
|
|
185
|
+
/**
|
|
186
|
+
* Create a folder in a project
|
|
187
|
+
*/
|
|
188
|
+
createFolder(projectId: string, parentFolderId: string, name: string): Promise<string>;
|
|
189
|
+
/**
|
|
190
|
+
* Compute root folder ID from project ID
|
|
191
|
+
* MongoDB ObjectIDs are 24 hex chars. The root folder ID is typically projectId - 1
|
|
192
|
+
*/
|
|
193
|
+
computeRootFolderId(projectId: string): string;
|
|
194
|
+
/**
|
|
195
|
+
* Decode Socket.IO 0.9 payloads. Frames may be a single packet or \ufffd-length framed packets.
|
|
196
|
+
*/
|
|
197
|
+
private decodeSocketIoPayload;
|
|
198
|
+
private encodeSocketIoEvent;
|
|
199
|
+
private parseSocketIoAck;
|
|
200
|
+
private decodeOverleafUtf8;
|
|
201
|
+
private generateCommentThreadId;
|
|
202
|
+
private positionToLineColumn;
|
|
203
|
+
private buildCommentContext;
|
|
204
|
+
private collectProjectDocs;
|
|
205
|
+
private openProjectSocket;
|
|
206
|
+
private pollProjectSocket;
|
|
207
|
+
private postProjectSocketPacket;
|
|
208
|
+
private socketRpc;
|
|
209
|
+
private closeProjectSocket;
|
|
210
|
+
private normalizeJoinedDocument;
|
|
211
|
+
private joinDocument;
|
|
212
|
+
/**
|
|
213
|
+
* Extract root folder ID from a Socket.IO event packet (joinProjectResponse).
|
|
214
|
+
*/
|
|
215
|
+
private extractRootFolderIdFromSocketPacket;
|
|
216
|
+
/**
|
|
217
|
+
* Extract full folder tree from a Socket.IO joinProjectResponse packet.
|
|
218
|
+
* Returns a map of folder path -> folder ID, e.g. { '': rootId, 'figures': figuresId }
|
|
219
|
+
*/
|
|
220
|
+
private extractFolderTreeFromSocketPacket;
|
|
221
|
+
/**
|
|
222
|
+
* main problem to resolve root folder ID from Overleaf's collaboration join payload
|
|
223
|
+
* authoritative for projects where ObjectID arithmetic does not apply
|
|
224
|
+
*/
|
|
225
|
+
private getRootFolderIdFromSocket;
|
|
226
|
+
/**
|
|
227
|
+
* Get full folder tree for a project via Socket.IO.
|
|
228
|
+
* Returns a map of folder path -> folder ID, e.g. { '': rootId, 'figures': figuresId }
|
|
229
|
+
*/
|
|
230
|
+
getFolderTreeFromSocket(projectId: string): Promise<Record<string, string> | null>;
|
|
231
|
+
/**
|
|
232
|
+
* Resolve a folder path to a folder ID, creating missing folders as needed.
|
|
233
|
+
* folderTree is a map of path -> ID (fetched once per push session).
|
|
234
|
+
* folderPath is e.g. 'figures' or 'a/b/c'.
|
|
235
|
+
*/
|
|
236
|
+
resolveFolderId(projectId: string, folderTree: Record<string, string>, folderPath: string): Promise<string>;
|
|
237
|
+
/**
|
|
238
|
+
* Get root folder ID for a project (tries multiple methods)
|
|
239
|
+
*/
|
|
240
|
+
getRootFolderId(projectId: string): Promise<string>;
|
|
241
|
+
/**
|
|
242
|
+
* Find root folder ID by probing multiple candidates
|
|
243
|
+
* This handles cases where projectId - 1 doesn't work
|
|
244
|
+
*/
|
|
245
|
+
probeRootFolderId(projectId: string): Promise<string | null>;
|
|
246
|
+
/**
|
|
247
|
+
* Upload a file to a project.
|
|
248
|
+
* If folderTree is provided and fileName contains a path (e.g. 'figures/img.png'),
|
|
249
|
+
* the file will be uploaded into the correct subfolder, creating it if needed.
|
|
250
|
+
*/
|
|
251
|
+
uploadFile(projectId: string, folderId: string | null, fileName: string, content: Buffer, folderTree?: Record<string, string>): Promise<{
|
|
252
|
+
success: boolean;
|
|
253
|
+
entityId?: string;
|
|
254
|
+
entityType?: string;
|
|
255
|
+
}>;
|
|
256
|
+
/**
|
|
257
|
+
* Delete a file or folder
|
|
258
|
+
*/
|
|
259
|
+
deleteEntity(projectId: string, entityId: string, entityType: 'doc' | 'file' | 'folder'): Promise<void>;
|
|
260
|
+
/**
|
|
261
|
+
* Get list of entities (files/docs) with paths
|
|
262
|
+
*/
|
|
263
|
+
getEntities(projectId: string): Promise<{
|
|
264
|
+
path: string;
|
|
265
|
+
type: 'doc' | 'file';
|
|
266
|
+
}[]>;
|
|
267
|
+
/**
|
|
268
|
+
* Find entity ID by path (searches through project file tree)
|
|
269
|
+
*/
|
|
270
|
+
findEntityByPath(projectId: string, targetPath: string): Promise<{
|
|
271
|
+
id: string;
|
|
272
|
+
type: 'doc' | 'file' | 'folder';
|
|
273
|
+
name: string;
|
|
274
|
+
} | null>;
|
|
275
|
+
/**
|
|
276
|
+
* Download a single file by ID
|
|
277
|
+
*/
|
|
278
|
+
downloadFile(projectId: string, fileId: string, fileType: 'doc' | 'file'): Promise<Buffer>;
|
|
279
|
+
/**
|
|
280
|
+
* Rename a file, doc, or folder
|
|
281
|
+
*/
|
|
282
|
+
renameEntity(projectId: string, entityId: string, entityType: 'doc' | 'file' | 'folder', newName: string): Promise<void>;
|
|
283
|
+
/**
|
|
284
|
+
* Delete a file by path
|
|
285
|
+
*/
|
|
286
|
+
deleteByPath(projectId: string, path: string): Promise<void>;
|
|
287
|
+
/**
|
|
288
|
+
* Rename a file by path
|
|
289
|
+
*/
|
|
290
|
+
renameByPath(projectId: string, oldPath: string, newName: string): Promise<void>;
|
|
291
|
+
/**
|
|
292
|
+
* Download a file by path (uses zip as fallback if ID not available)
|
|
293
|
+
*/
|
|
294
|
+
downloadByPath(projectId: string, path: string): Promise<Buffer>;
|
|
295
|
+
private downloadDocFromSocket;
|
|
296
|
+
getCommentThreads(projectId: string): Promise<Record<string, {
|
|
297
|
+
messages: CommentMessage[];
|
|
298
|
+
resolved?: boolean;
|
|
299
|
+
resolved_at?: string;
|
|
300
|
+
resolved_by_user_id?: string;
|
|
301
|
+
}>>;
|
|
302
|
+
listComments(projectId: string, options?: ListCommentsOptions): Promise<ProjectComment[]>;
|
|
303
|
+
resolveComment(projectId: string, threadId: string): Promise<ProjectComment>;
|
|
304
|
+
reopenComment(projectId: string, threadId: string): Promise<ProjectComment>;
|
|
305
|
+
deleteComment(projectId: string, threadId: string): Promise<ProjectComment>;
|
|
306
|
+
private findComment;
|
|
307
|
+
private resolveCommentSelection;
|
|
308
|
+
addComment(projectId: string, options: AddCommentOptions): Promise<ProjectComment>;
|
|
309
|
+
postCommentMessage(projectId: string, threadId: string, content: string): Promise<CommentMessage | null>;
|
|
310
|
+
/**
|
|
311
|
+
* Compile project and get all output files
|
|
312
|
+
*/
|
|
313
|
+
compileWithOutputs(projectId: string, options?: {
|
|
314
|
+
timeoutMs?: number;
|
|
315
|
+
draft?: boolean;
|
|
316
|
+
}): Promise<{
|
|
317
|
+
status: 'success' | 'failure' | 'error';
|
|
318
|
+
pdfUrl?: string;
|
|
319
|
+
outputFiles: {
|
|
320
|
+
path: string;
|
|
321
|
+
type: string;
|
|
322
|
+
url: string;
|
|
323
|
+
}[];
|
|
324
|
+
}>;
|
|
325
|
+
/**
|
|
326
|
+
* Download a compile output file (logs, bbl, aux, etc.)
|
|
327
|
+
*/
|
|
328
|
+
downloadOutputFile(url: string): Promise<Buffer>;
|
|
329
|
+
}
|