@netique/overleaf-mcp 0.1.0 → 0.2.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/README.md +47 -21
- package/dist/api/http.js +56 -28
- package/dist/api/http.js.map +1 -1
- package/dist/api/socket.js +129 -28
- package/dist/api/socket.js.map +1 -1
- package/dist/auth/browserLogin.js +148 -0
- package/dist/auth/browserLogin.js.map +1 -0
- package/dist/auth/cdp.js +124 -0
- package/dist/auth/cdp.js.map +1 -0
- package/dist/auth/chromeFinder.js +91 -0
- package/dist/auth/chromeFinder.js.map +1 -0
- package/dist/auth/cli.js +102 -0
- package/dist/auth/cli.js.map +1 -0
- package/dist/auth/cookieStore.js +65 -0
- package/dist/auth/cookieStore.js.map +1 -0
- package/dist/auth/discover.js +39 -0
- package/dist/auth/discover.js.map +1 -0
- package/dist/config.js +6 -8
- package/dist/config.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/session/identity.js +12 -5
- package/dist/session/identity.js.map +1 -1
- package/dist/session/recovery.js +28 -0
- package/dist/session/recovery.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,22 +60,40 @@ Things to ask Claude once `overleaf-mcp` is connected:
|
|
|
60
60
|
|
|
61
61
|
No local install needed — `npx` fetches and runs the latest version. Add this to your Claude Desktop / Claude Code MCP config:
|
|
62
62
|
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"mcpServers": {
|
|
66
|
+
"overleaf": {
|
|
67
|
+
"command": "npx",
|
|
68
|
+
"args": ["-y", "@netique/overleaf-mcp"]
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The first MCP tool call (or `npx @netique/overleaf-mcp login` run ahead of time) opens a Chrome window pointed at Overleaf — log in normally and the session cookie is captured and saved to a file under your config dir. No DevTools paste, no cookie in your MCP config. When the cookie expires (~5 days), the next tool call re-opens the window and refreshes it.
|
|
75
|
+
|
|
76
|
+
For self-hosted Community Edition: set `OL_BASE_URL`:
|
|
77
|
+
|
|
63
78
|
```json
|
|
64
79
|
{
|
|
65
80
|
"mcpServers": {
|
|
66
81
|
"overleaf": {
|
|
67
82
|
"command": "npx",
|
|
68
83
|
"args": ["-y", "@netique/overleaf-mcp"],
|
|
69
|
-
"env": {
|
|
70
|
-
"OL_BASE_URL": "https://www.overleaf.com",
|
|
71
|
-
"OL_COOKIE": "overleaf_session2=s%3A...."
|
|
72
|
-
}
|
|
84
|
+
"env": { "OL_BASE_URL": "https://overleaf.mylab.edu" }
|
|
73
85
|
}
|
|
74
86
|
}
|
|
75
87
|
}
|
|
76
88
|
```
|
|
77
89
|
|
|
78
|
-
|
|
90
|
+
Useful one-shot commands:
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
npx @netique/overleaf-mcp login # opens Chrome, captures cookie
|
|
94
|
+
npx @netique/overleaf-mcp status # who am I logged in as
|
|
95
|
+
npx @netique/overleaf-mcp logout --confirm # clear the saved cookie
|
|
96
|
+
```
|
|
79
97
|
|
|
80
98
|
<details>
|
|
81
99
|
<summary>From source (for development)</summary>
|
|
@@ -94,8 +112,7 @@ Then point your MCP config at the built file:
|
|
|
94
112
|
"mcpServers": {
|
|
95
113
|
"overleaf": {
|
|
96
114
|
"command": "node",
|
|
97
|
-
"args": ["/absolute/path/to/overleaf-mcp/dist/index.js"]
|
|
98
|
-
"env": { "OL_COOKIE": "overleaf_session2=s%3A...." }
|
|
115
|
+
"args": ["/absolute/path/to/overleaf-mcp/dist/index.js"]
|
|
99
116
|
}
|
|
100
117
|
}
|
|
101
118
|
}
|
|
@@ -104,30 +121,39 @@ Then point your MCP config at the built file:
|
|
|
104
121
|
|
|
105
122
|
## Authentication
|
|
106
123
|
|
|
107
|
-
overleaf-mcp
|
|
124
|
+
The session cookie lives in a plaintext file at `<configDir>/overleaf-mcp/cookie.json` (mode 0600), where `<configDir>` is `~/Library/Application Support` on macOS, `$XDG_CONFIG_HOME` (or `~/.config`) on Linux, `%APPDATA%` on Windows. The CSRF token is auto-discovered from the `/project` page on each session — no separate copy needed.
|
|
108
125
|
|
|
109
|
-
###
|
|
126
|
+
### How the cookie gets there
|
|
110
127
|
|
|
111
|
-
|
|
112
|
-
2. Open DevTools → **Application** (Chrome/Edge) or **Storage** (Firefox) → **Cookies** → `https://www.overleaf.com`.
|
|
113
|
-
3. Copy the **value** of `overleaf_session2` — it starts with `s%3A` and is long. That's your `OL_COOKIE` (format: `overleaf_session2=s%3A...`).
|
|
128
|
+
`npx @netique/overleaf-mcp login` — or an MCP tool call that finds no stored cookie — spawns Chrome with a **dedicated browser profile** at `<configDir>/overleaf-mcp/chrome-profile/`, points it at `${OL_BASE_URL}/project`, and reads the session cookie via the Chrome DevTools Protocol once the dashboard loads. Why a dedicated profile:
|
|
114
129
|
|
|
115
|
-
|
|
130
|
+
- We don't touch your real Chrome profile, so there's no macOS Keychain prompt for your everyday browser.
|
|
131
|
+
- It's a real interactive Chrome window, so captcha, Google OAuth, ORCID, institutional SSO and 2FA all work out of the box.
|
|
132
|
+
- The profile persists. Re-logins are usually a flash: window opens → /project loads → cookie captured → window closes.
|
|
133
|
+
|
|
134
|
+
When the cookie expires (Overleaf cookies last ~5 days), the next request hits a 302 to `/login`, overleaf-mcp evicts the stale entry, re-launches Chrome and captures a fresh one. If your browser session also expired, the Chrome window waits for you to log in (up to 5 minutes).
|
|
135
|
+
|
|
136
|
+
Any Chromium-family browser works — Chrome, Brave, Edge, Arc, Chromium. If `findChrome` can't locate one automatically, set `OL_BROWSER` to a binary path.
|
|
137
|
+
|
|
138
|
+
> ⚠️ The session cookie grants full account access. The cookie file is mode 0600 but plaintext on disk. Treat it like a password. Remove it with `overleaf-mcp logout --confirm`.
|
|
116
139
|
|
|
117
140
|
### Environment variables
|
|
118
141
|
|
|
119
|
-
| Var |
|
|
120
|
-
|
|
121
|
-
| `
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
142
|
+
| Var | Default | Notes |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| `OL_BASE_URL` | `https://www.overleaf.com` | Override for self-hosted Overleaf. |
|
|
145
|
+
| `OL_BROWSER` | auto-detected | Path to a Chromium-family browser if auto-detection fails (Chrome / Brave / Edge / Arc / Chromium). |
|
|
146
|
+
| `OL_INSECURE` | — | Set to `1` to pass `--ignore-certificate-errors` to the captured Chrome instance — for self-hosted CE with a self-signed cert. |
|
|
147
|
+
| `OL_CSRF` | auto-discovered | Force a specific CSRF token. Only needed if your server doesn't ship the `ol-csrfToken` meta tag. |
|
|
148
|
+
| `OL_MCP_LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error`. Goes to stderr; stdout is reserved for MCP JSON-RPC. |
|
|
125
149
|
|
|
126
150
|
## Troubleshooting
|
|
127
151
|
|
|
128
|
-
**`OverleafAuthError: Session cookie rejected (redirected to /login)`** — your
|
|
152
|
+
**`OverleafAuthError: Session cookie rejected (redirected to /login)`** — your stored cookie has expired. overleaf-mcp relaunches Chrome automatically on the next tool call to refresh; you should only see this surface as a user-facing error if Chrome itself failed to start.
|
|
153
|
+
|
|
154
|
+
**`No Chromium-family browser found`** — install Chrome (or Brave/Edge/Arc/Chromium), or set `OL_BROWSER` to a binary path.
|
|
129
155
|
|
|
130
|
-
**`Socket.IO handshake returned 502`** — Overleaf's load balancer rejected the WebSocket upgrade.
|
|
156
|
+
**`Socket.IO handshake returned 502`** — Overleaf's load balancer rejected the WebSocket upgrade. Usually means the cookie was rejected — `overleaf-mcp` should auto-recover on the next tool call.
|
|
131
157
|
|
|
132
158
|
**`Could not find ol-csrfToken meta tag`** — your Overleaf server doesn't expose the CSRF meta tag (rare; mostly very old Community Edition). Set `OL_CSRF` explicitly.
|
|
133
159
|
|
package/dist/api/http.js
CHANGED
|
@@ -1,47 +1,75 @@
|
|
|
1
1
|
import { getIdentity } from "../session/identity.js";
|
|
2
|
-
import {
|
|
2
|
+
import { withAuthRetry } from "../session/recovery.js";
|
|
3
|
+
import { OverleafApiError, OverleafAuthError } from "./errors.js";
|
|
3
4
|
function joinUrl(base, path) {
|
|
4
5
|
return `${base}/${path.replace(/^\/+/, "")}`;
|
|
5
6
|
}
|
|
7
|
+
function throwIfAuthBad(res) {
|
|
8
|
+
if (res.status === 401 || res.status === 403) {
|
|
9
|
+
throw new OverleafAuthError(`HTTP ${res.status} on ${res.url || "request"}`);
|
|
10
|
+
}
|
|
11
|
+
if (res.status >= 300 && res.status < 400) {
|
|
12
|
+
const loc = res.headers.get("location") ?? "";
|
|
13
|
+
if (/\/login(\?|$|\/)/i.test(loc)) {
|
|
14
|
+
throw new OverleafAuthError(`redirected to ${loc} — session expired`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
6
18
|
export async function olGet(path, extraHeaders = {}) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
return withAuthRetry(async () => {
|
|
20
|
+
const id = await getIdentity();
|
|
21
|
+
const res = await fetch(joinUrl(id.baseUrl, path), {
|
|
22
|
+
method: "GET",
|
|
23
|
+
redirect: "manual",
|
|
24
|
+
headers: { Cookie: id.cookie, Connection: "keep-alive", ...extraHeaders },
|
|
25
|
+
});
|
|
26
|
+
throwIfAuthBad(res);
|
|
27
|
+
return res;
|
|
12
28
|
});
|
|
13
29
|
}
|
|
14
30
|
export async function olPostJson(path, body = {}, extraHeaders = {}) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
return withAuthRetry(async () => {
|
|
32
|
+
const id = await getIdentity();
|
|
33
|
+
const res = await fetch(joinUrl(id.baseUrl, path), {
|
|
34
|
+
method: "POST",
|
|
35
|
+
redirect: "manual",
|
|
36
|
+
headers: {
|
|
37
|
+
Cookie: id.cookie,
|
|
38
|
+
Connection: "keep-alive",
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
"X-Csrf-Token": id.csrf,
|
|
41
|
+
...extraHeaders,
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify({ _csrf: id.csrf, ...body }),
|
|
44
|
+
});
|
|
45
|
+
throwIfAuthBad(res);
|
|
46
|
+
return res;
|
|
27
47
|
});
|
|
28
48
|
}
|
|
29
49
|
export async function olDelete(path, extraHeaders = {}) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
50
|
+
return withAuthRetry(async () => {
|
|
51
|
+
const id = await getIdentity();
|
|
52
|
+
const res = await fetch(joinUrl(id.baseUrl, path), {
|
|
53
|
+
method: "DELETE",
|
|
54
|
+
redirect: "manual",
|
|
55
|
+
headers: {
|
|
56
|
+
Cookie: id.cookie,
|
|
57
|
+
Connection: "keep-alive",
|
|
58
|
+
"X-Csrf-Token": id.csrf,
|
|
59
|
+
...extraHeaders,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
throwIfAuthBad(res);
|
|
63
|
+
return res;
|
|
40
64
|
});
|
|
41
65
|
}
|
|
42
66
|
export async function expectOk(res, hint) {
|
|
43
67
|
if (res.ok)
|
|
44
68
|
return res;
|
|
69
|
+
// Defensive: primitives above already throw on auth-bad responses, but a
|
|
70
|
+
// caller that constructed its own fetch (or bypassed throwIfAuthBad) still
|
|
71
|
+
// benefits from the same classification here.
|
|
72
|
+
throwIfAuthBad(res);
|
|
45
73
|
const body = await res.text().catch(() => "");
|
|
46
74
|
throw new OverleafApiError(res.status, body, hint);
|
|
47
75
|
}
|
package/dist/api/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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"}
|
package/dist/api/socket.js
CHANGED
|
@@ -17,10 +17,35 @@
|
|
|
17
17
|
import WebSocket from "ws";
|
|
18
18
|
import { OverleafApiError, OverleafAuthError } from "./errors.js";
|
|
19
19
|
import { getIdentity } from "../session/identity.js";
|
|
20
|
+
import { withAuthRetry } from "../session/recovery.js";
|
|
20
21
|
import { logger } from "../util/logger.js";
|
|
21
22
|
function decodePackedUtf8(line) {
|
|
22
23
|
return Buffer.from(line, "latin1").toString("utf8");
|
|
23
24
|
}
|
|
25
|
+
function mergeSetCookies(existing, responseHeaders) {
|
|
26
|
+
// Use undici's getSetCookie when available (Node 22+); fall back to parsing
|
|
27
|
+
// the raw header for Node 20.
|
|
28
|
+
const headersAny = responseHeaders;
|
|
29
|
+
const raw = headersAny.getSetCookie?.() ?? [];
|
|
30
|
+
if (!raw.length) {
|
|
31
|
+
const single = responseHeaders.get("set-cookie");
|
|
32
|
+
if (single)
|
|
33
|
+
raw.push(single);
|
|
34
|
+
}
|
|
35
|
+
const existingNames = new Set(existing.split(";").map((p) => p.split("=")[0].trim().toLowerCase()));
|
|
36
|
+
const adds = [];
|
|
37
|
+
for (const sc of raw) {
|
|
38
|
+
const first = sc.split(";")[0].trim();
|
|
39
|
+
const name = first.split("=")[0].trim().toLowerCase();
|
|
40
|
+
if (!name || existingNames.has(name))
|
|
41
|
+
continue;
|
|
42
|
+
adds.push(first);
|
|
43
|
+
existingNames.add(name);
|
|
44
|
+
}
|
|
45
|
+
if (!adds.length)
|
|
46
|
+
return existing;
|
|
47
|
+
return `${existing}; ${adds.join("; ")}`;
|
|
48
|
+
}
|
|
24
49
|
class OverleafSocket {
|
|
25
50
|
projectId;
|
|
26
51
|
identity;
|
|
@@ -52,6 +77,13 @@ class OverleafSocket {
|
|
|
52
77
|
Connection: "keep-alive",
|
|
53
78
|
},
|
|
54
79
|
});
|
|
80
|
+
if (hsRes.status >= 300 && hsRes.status < 400) {
|
|
81
|
+
const loc = hsRes.headers.get("location") ?? "";
|
|
82
|
+
if (/\/login(\?|$|\/)/i.test(loc)) {
|
|
83
|
+
throw new OverleafAuthError(`Socket.IO handshake redirected to ${loc} — session expired`);
|
|
84
|
+
}
|
|
85
|
+
throw new OverleafAuthError(`Socket.IO handshake returned ${hsRes.status} -> ${loc}`);
|
|
86
|
+
}
|
|
55
87
|
if (hsRes.status !== 200) {
|
|
56
88
|
const body = await hsRes.text().catch(() => "");
|
|
57
89
|
throw new OverleafAuthError(`Socket.IO handshake returned ${hsRes.status}: ${body.slice(0, 200)}`);
|
|
@@ -62,9 +94,16 @@ class OverleafSocket {
|
|
|
62
94
|
throw new OverleafApiError(0, hsBody, "handshake response did not include a sid or websocket transport");
|
|
63
95
|
}
|
|
64
96
|
this.heartbeatInterval = Math.max(15_000, (Number(hbStr) || 60) * 1000 - 5_000);
|
|
97
|
+
// The Overleaf SaaS sits behind a GCP load balancer that pins requests to
|
|
98
|
+
// a backend via a `GCLB` cookie set on the handshake response. The WS
|
|
99
|
+
// upgrade MUST land on the same backend (it carries the in-memory sid),
|
|
100
|
+
// so we extract any Set-Cookie from the handshake and merge it into the
|
|
101
|
+
// Cookie header we send on the upgrade. Without this the upgrade routes
|
|
102
|
+
// randomly and intermittently returns 502.
|
|
103
|
+
const upgradeCookie = mergeSetCookies(this.identity.cookie, hsRes.headers);
|
|
65
104
|
const wsUrl = `${base.replace(/^http/, "ws")}/socket.io/1/websocket/${sid}`;
|
|
66
105
|
const ws = new WebSocket(wsUrl, {
|
|
67
|
-
headers: { Cookie:
|
|
106
|
+
headers: { Cookie: upgradeCookie, Origin: new URL(base).origin },
|
|
68
107
|
handshakeTimeout: timeoutMs,
|
|
69
108
|
});
|
|
70
109
|
this.ws = ws;
|
|
@@ -226,13 +265,23 @@ class OverleafSocket {
|
|
|
226
265
|
return;
|
|
227
266
|
}
|
|
228
267
|
case "7": {
|
|
229
|
-
//
|
|
230
|
-
|
|
268
|
+
// Type-7 frames are rare and usually mean the server invalidated our
|
|
269
|
+
// session (cookie expired server-side, etc). Reject all pending acks
|
|
270
|
+
// with an OverleafAuthError so the reconnect/retry wrapper picks them
|
|
271
|
+
// up, and close the WS so the next ensureSocketForProject doesn't
|
|
272
|
+
// hand back this broken instance.
|
|
273
|
+
logger.error("server error frame, treating as auth-recoverable", data);
|
|
274
|
+
const authErr = new OverleafAuthError(`server error frame: ${data}`);
|
|
231
275
|
for (const [, p] of this.pending) {
|
|
232
276
|
clearTimeout(p.timer);
|
|
233
|
-
p.reject(
|
|
277
|
+
p.reject(authErr);
|
|
234
278
|
}
|
|
235
279
|
this.pending.clear();
|
|
280
|
+
this.closed = true;
|
|
281
|
+
try {
|
|
282
|
+
this.ws?.close();
|
|
283
|
+
}
|
|
284
|
+
catch { /* ignore */ }
|
|
236
285
|
return;
|
|
237
286
|
}
|
|
238
287
|
default:
|
|
@@ -302,42 +351,94 @@ class OverleafSocket {
|
|
|
302
351
|
}
|
|
303
352
|
let active = null;
|
|
304
353
|
export async function ensureSocketForProject(projectId) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
354
|
+
return withAuthRetry(async () => {
|
|
355
|
+
if (active && active.projectId === projectId && active.isOpen()) {
|
|
356
|
+
return { socket: active, publicId: active.publicId ?? undefined, joinedProject: active.joinedProject ?? undefined };
|
|
357
|
+
}
|
|
358
|
+
if (active) {
|
|
359
|
+
logger.info(`switching project: ${active.projectId} -> ${projectId}`);
|
|
360
|
+
active.disconnect();
|
|
361
|
+
active = null;
|
|
362
|
+
}
|
|
363
|
+
const identity = await getIdentity();
|
|
364
|
+
const s = new OverleafSocket(projectId, identity);
|
|
365
|
+
await s.connect();
|
|
366
|
+
active = s;
|
|
367
|
+
return { socket: s, publicId: s.publicId ?? undefined, joinedProject: s.joinedProject ?? undefined };
|
|
368
|
+
});
|
|
318
369
|
}
|
|
319
370
|
export function getActiveSocket() {
|
|
320
371
|
return active;
|
|
321
372
|
}
|
|
373
|
+
// Snapshot the active project, run an emit, and if it fails because the
|
|
374
|
+
// socket got torn down (auth-shaped error or "socket closed"), evict the
|
|
375
|
+
// cookie if needed, re-establish the socket on the same project, and retry
|
|
376
|
+
// the emit exactly once. Callers should pass a prep step (e.g. re-join the
|
|
377
|
+
// doc) if the operation requires per-doc state that the new socket lacks.
|
|
378
|
+
async function withReconnectingSocket(op, prep) {
|
|
379
|
+
const projectId = active?.projectId;
|
|
380
|
+
try {
|
|
381
|
+
return await op();
|
|
382
|
+
}
|
|
383
|
+
catch (err) {
|
|
384
|
+
if (!projectId)
|
|
385
|
+
throw err;
|
|
386
|
+
const isAuth = err instanceof OverleafAuthError;
|
|
387
|
+
const isClosed = err instanceof Error && /socket closed|socket not open/i.test(err.message);
|
|
388
|
+
if (!isAuth && !isClosed)
|
|
389
|
+
throw err;
|
|
390
|
+
logger.info(`socket op failed (${err.message}); reconnecting to project ${projectId}`);
|
|
391
|
+
if (active) {
|
|
392
|
+
try {
|
|
393
|
+
active.disconnect();
|
|
394
|
+
}
|
|
395
|
+
catch { /* ignore */ }
|
|
396
|
+
active = null;
|
|
397
|
+
}
|
|
398
|
+
if (isAuth) {
|
|
399
|
+
const { evictAndRediscover } = await import("../auth/discover.js");
|
|
400
|
+
const { loadConfig } = await import("../config.js");
|
|
401
|
+
const { clearIdentity } = await import("../session/identity.js");
|
|
402
|
+
clearIdentity();
|
|
403
|
+
await evictAndRediscover(loadConfig().baseUrl);
|
|
404
|
+
}
|
|
405
|
+
await ensureSocketForProject(projectId);
|
|
406
|
+
if (prep)
|
|
407
|
+
await prep();
|
|
408
|
+
return await op();
|
|
409
|
+
}
|
|
410
|
+
}
|
|
322
411
|
export async function joinDoc(docId) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
412
|
+
return withReconnectingSocket(async () => {
|
|
413
|
+
if (!active)
|
|
414
|
+
throw new OverleafApiError(0, "", "no active project — call open_project first");
|
|
415
|
+
// The ack returns `[docLinesAscii, version, updates, ranges]`.
|
|
416
|
+
const ret = await active.emit("joinDoc", [docId, { encodeRanges: true }]);
|
|
417
|
+
const tuple = Array.isArray(ret) ? ret : [ret];
|
|
418
|
+
const [docLinesAscii, version, updates, ranges] = tuple;
|
|
419
|
+
const docLines = (docLinesAscii ?? []).map(decodePackedUtf8);
|
|
420
|
+
return { docLines, version: version ?? 0, updates: updates ?? [], ranges };
|
|
421
|
+
});
|
|
331
422
|
}
|
|
332
423
|
export async function leaveDoc(docId) {
|
|
424
|
+
// Best-effort; if the socket is gone, the doc is already implicitly left.
|
|
333
425
|
if (!active)
|
|
334
426
|
return;
|
|
335
427
|
await active.emit("leaveDoc", [docId]).catch(() => undefined);
|
|
336
428
|
}
|
|
337
429
|
export async function applyOtUpdate(docId, update) {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
430
|
+
await withReconnectingSocket(async () => {
|
|
431
|
+
if (!active)
|
|
432
|
+
throw new OverleafApiError(0, "", "no active project — call open_project first");
|
|
433
|
+
await active.emit("applyOtUpdate", [docId, update]);
|
|
434
|
+
},
|
|
435
|
+
// After a reconnect, the fresh socket has no docs joined. Re-join so the
|
|
436
|
+
// retried applyOtUpdate hits a socket that knows about this doc. Note:
|
|
437
|
+
// joinDoc returns the current version, but our `update.v` was computed
|
|
438
|
+
// against the pre-reconnect version. The server's OT layer either accepts
|
|
439
|
+
// (if the version matches) or rejects with a version-conflict, which we
|
|
440
|
+
// propagate to the caller — same as if the original emit had failed.
|
|
441
|
+
async () => { await joinDoc(docId); });
|
|
341
442
|
}
|
|
342
443
|
export function disconnectActive() {
|
|
343
444
|
if (active) {
|
package/dist/api/socket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/api/socket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/api/socket.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,mFAAmF;AACnF,gEAAgE;AAChE,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,0DAA0D;AAC1D,EAAE;AACF,4EAA4E;AAC5E,gDAAgD;AAChD,gEAAgE;AAChE,8DAA8D;AAC9D,EAAE;AACF,wDAAwD;AAExD,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,WAAW,EAAiB,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0B3C,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,eAAwB;IACjE,4EAA4E;IAC5E,8BAA8B;IAC9B,MAAM,UAAU,GAAG,eAA8D,CAAC;IAClF,MAAM,GAAG,GAAa,UAAU,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpG,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,cAAc;IAaU;IAAmC;IAZvD,EAAE,GAAqB,IAAI,CAAC;IAC5B,SAAS,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,iBAAiB,GAAW,MAAM,CAAC;IACnC,cAAc,GAA0B,IAAI,CAAC;IAC7C,MAAM,GAAG,KAAK,CAAC;IACvB,aAAa,GAAyB,IAAI,CAAC;IAC3C,QAAQ,GAAkB,IAAI,CAAC;IAC/B,gBAAgB,GAAkB,IAAI,CAAC;IACvC,eAAe,GAAkB,IAAI,CAAC;IAEtC,YAA4B,SAAiB,EAAkB,QAAkB;QAArD,cAAS,GAAT,SAAS,CAAQ;QAAkB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAErF,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,IAAI,2BAA2B,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;YAC/B,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC5B,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC5B,UAAU,EAAE,YAAY;aACzB;SACF,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,iBAAiB,CAAC,qCAAqC,GAAG,oBAAoB,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,KAAK,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,AAAD,EAAG,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,iEAAiE,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;QAChF,0EAA0E;QAC1E,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,2CAA2C;QAC3C,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QAC5E,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE;YAC9B,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAChE,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,WAAW,GAAG,UAAU,CAC5B,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,6CAA6C,SAAS,IAAI,CAAC,CAAC,EACrG,SAAS,CACV,CAAC;YACF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnB,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,8DAA8D;gBAC9D,MAAM,IAAI,GAAG,CAAC,IAAe,EAAE,EAAE;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAOT,CAAC;oBACd,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;wBAC7C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;wBACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;wBACzD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;oBACzD,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;gBACvC,uEAAuE;gBACvE,oEAAoE;gBACpE,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxB,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;wBAC1F,IAAI,CAAC,IAAI,CAAkD,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;6BACxG,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;4BACZ,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC/C,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,KAAwC,CAAC;4BACxE,IAAI,CAAC,aAAa,GAAG,OAAO,IAAI,IAAI,CAAC;4BACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,IAAI,CAAC;4BACrC,IAAI,CAAC,eAAe,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;4BAChE,OAAO,EAAE,CAAC;wBACZ,CAAC,CAAC;6BACD,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC,EAAE,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC1B,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAChC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,MAAM,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtD,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;IACO,cAAc;QACpB,IAAI,IAAI,CAAC,cAAc;YAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,2EAA2E;QAC3E,2BAA2B;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG,EAAE,aAAa;gBACrB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAChD,OAAO;YACT,KAAK,GAAG,EAAE,4CAA4C;gBACpD,OAAO;YACT,KAAK,GAAG,EAAE,mCAAmC;gBAC3C,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBACpD,OAAO;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,oDAAoD;gBACpD,IAAI,GAAG,GAAwC,EAAE,CAAC;gBAClD,IAAI,CAAC;oBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,EAAE;oBAAE,KAAK,MAAM,CAAC,IAAI,EAAE;wBAAE,IAAI,CAAC;4BAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAAC,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;wBAAC,CAAC;gBACzG,uEAAuE;gBACvE,mEAAmE;gBACnE,8CAA8C;gBAC9C,OAAO;YACT,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,oEAAoE;gBACpE,gEAAgE;gBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,GAAG,GAAc,EAAE,CAAC;gBACxB,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC;wBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;oBAAC,CAAC;oBACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;wBAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,CAAC;gBACD,iEAAiE;gBACjE,+CAA+C;gBAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;oBAChH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,qEAAqE;gBACrE,qEAAqE;gBACrE,sEAAsE;gBACtE,kEAAkE;gBAClE,kCAAkC;gBAClC,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,IAAI,CAAC,CAAC;gBACvE,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBACrE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,QAAuB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,KAAa,EAAE,QAAuB;QACzC,MAAM,IAAI,GAAkB,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,KAAa,EAAE,QAAuB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAc,IAAY,EAAE,OAAkB,EAAE,EAAE,SAAS,GAAG,MAAM;QAC5E,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,OAAO,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,qBAAqB,SAAS,IAAI,CAAC,CAAC,CAAC;YACtE,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACtB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAM,CAAC;gBACpE,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,IAAI,CAAC;gBAAC,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC;IAChE,CAAC;IAED,UAAU;QACR,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF;AAED,IAAI,MAAM,GAA0B,IAAI,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAK5D,OAAO,aAAa,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC;QACtH,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC;IACvG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,KAAK,UAAU,sBAAsB,CACnC,EAAoB,EACpB,IAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS;YAAE,MAAM,GAAG,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,YAAY,iBAAiB,CAAC;QAChD,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,IAAI,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,MAAM,GAAG,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,qBAAsB,GAAa,CAAC,OAAO,8BAA8B,SAAS,EAAE,CAAC,CAAC;QAClG,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACnE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACjE,aAAa,EAAE,CAAC;YAChB,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,IAAI;YAAE,MAAM,IAAI,EAAE,CAAC;QACvB,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,OAAO,sBAAsB,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,6CAA6C,CAAC,CAAC;QAC9F,+DAA+D;QAC/D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,EACT,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAChC,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,KAA+C,CAAC;QAClG,MAAM,QAAQ,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAa;IAC1C,0EAA0E;IAC1E,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,MAAgB;IACjE,MAAM,sBAAsB,CAC1B,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,6CAA6C,CAAC,CAAC;QAC9F,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,KAAK,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|