mcp-server-jotbird 0.1.7 → 0.2.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.
- package/README.md +62 -7
- package/dist/index.js +274 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
An [MCP](https://modelcontextprotocol.io/) server for [JotBird](https://www.jotbird.com) that lets any LLM publish Markdown as beautifully formatted, shareable web pages.
|
|
4
4
|
|
|
5
|
-
Write a document in conversation, publish it with one tool call, and get back a live URL. Supports full Markdown — headings, code blocks, tables, footnotes, math, task lists, and more. Update or delete pages by slug.
|
|
5
|
+
Write a document in conversation, publish it with one tool call, and get back a live URL. Supports full Markdown — headings, code blocks, tables, footnotes, math, task lists, and more. Update or delete pages by slug, and view or change page settings (theme, branding, visibility, password protection).
|
|
6
6
|
|
|
7
7
|
Works with Claude, ChatGPT, Gemini, and any MCP-compatible client.
|
|
8
8
|
|
|
@@ -10,7 +10,9 @@ Works with Claude, ChatGPT, Gemini, and any MCP-compatible client.
|
|
|
10
10
|
|
|
11
11
|
### 1. Get an API key
|
|
12
12
|
|
|
13
|
-
Sign in at [jotbird.com](https://www.jotbird.com), open **Account
|
|
13
|
+
Sign in at [jotbird.com](https://www.jotbird.com), open **Account Settings** from the account menu, and generate a key in the **API Keys** section.
|
|
14
|
+
|
|
15
|
+
Your key starts with `jb_` and is **shown only once** — copy it before closing the dialog.
|
|
14
16
|
|
|
15
17
|
### 2. Add to your client
|
|
16
18
|
|
|
@@ -116,6 +118,10 @@ Ask your LLM things like:
|
|
|
116
118
|
- *"Show me all my published pages"*
|
|
117
119
|
- *"Take down the page with slug 'old-draft'"*
|
|
118
120
|
- *"Publish this at my namespace as 'project-notes'"* (Pro)
|
|
121
|
+
- *"What are the settings on my page 'my-notes'?"*
|
|
122
|
+
- *"Switch my page 'launch-plan' to the essay theme"* (Pro)
|
|
123
|
+
- *"Make my page 'resume' public so search engines can find it"*
|
|
124
|
+
- *"Password-protect my page 'board-deck'"* (Pro)
|
|
119
125
|
|
|
120
126
|
## Tools
|
|
121
127
|
|
|
@@ -127,9 +133,15 @@ Publish Markdown content as a formatted web page with a shareable URL. To update
|
|
|
127
133
|
|-----------|----------|-------------|
|
|
128
134
|
| `markdown` | Yes | Markdown content (max 256 KB). Supports footnotes, task lists, definition lists, math (`$…$` and `$$…$$`), and inline HTML. |
|
|
129
135
|
| `title` | No | Page title. If omitted, the first H1 in the Markdown is used. |
|
|
130
|
-
| `slug` | No |
|
|
136
|
+
| `slug` | No | Slug of an **existing** page to update. Omit to publish a new page. For namespaced pages (`namespaced: true`): required — publishes at `@username/slug`. Use `list_documents` to find slugs. |
|
|
131
137
|
| `namespaced` | No | When `true`, publish at your namespace: `share.jotbird.com/@username/slug`. Requires Pro and a username set in Account Settings. |
|
|
132
138
|
|
|
139
|
+
> ⚠️ **`slug` cannot name a *new* page.** It identifies a page you already own, so that publishing
|
|
140
|
+
> again updates it in place. If you pass a slug that matches no page on your account, it is
|
|
141
|
+
> **silently ignored** and the page is published at an auto-generated slug
|
|
142
|
+
> (`share.jotbird.com/brave-calm-meadow`) — so don't count on getting the URL you asked for.
|
|
143
|
+
> New pages get a random slug; the way to choose a URL is a **namespaced** page (Pro), below.
|
|
144
|
+
|
|
133
145
|
### `list_documents`
|
|
134
146
|
|
|
135
147
|
List the user's published pages. Returns each page's title, URL, slug, expiration date, and username (for namespaced pages).
|
|
@@ -142,8 +154,34 @@ Permanently delete a published page and its shareable URL. Cannot be undone.
|
|
|
142
154
|
|
|
143
155
|
| Parameter | Required | Description |
|
|
144
156
|
|-----------|----------|-------------|
|
|
145
|
-
| `slug` | Yes | Slug of the page to delete. Use `list_documents` to find slugs. |
|
|
146
|
-
| `namespaced` | No | When `true`, delete the document at `@username/slug` instead of the flat URL. Requires Pro and a username. |
|
|
157
|
+
| `slug` | Yes | Slug of the page to delete, or the full `@username/slug` identifier for a namespaced page. Use `list_documents` to find slugs. |
|
|
158
|
+
| `namespaced` | No | When `true`, delete the document at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. Requires Pro and a username. |
|
|
159
|
+
|
|
160
|
+
### `get_settings`
|
|
161
|
+
|
|
162
|
+
Get a published page's settings: theme, branding, visibility, tags, and expiration. The page password is write-only and never returned.
|
|
163
|
+
|
|
164
|
+
| Parameter | Required | Description |
|
|
165
|
+
|-----------|----------|-------------|
|
|
166
|
+
| `slug` | Yes | Slug of the page, or the full `@username/slug` identifier. Use `list_documents` to find slugs. |
|
|
167
|
+
| `namespaced` | No | When `true`, resolve the slug at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. |
|
|
168
|
+
|
|
169
|
+
### `update_settings`
|
|
170
|
+
|
|
171
|
+
Update a published page's settings. Only the fields you pass change; everything else is preserved. Enabling a Pro feature (non-default theme, `hideBranding: true`, password protection) requires a Pro subscription — any account can clear them.
|
|
172
|
+
|
|
173
|
+
| Parameter | Required | Description |
|
|
174
|
+
|-----------|----------|-------------|
|
|
175
|
+
| `slug` | Yes | Slug of the page to update, or the full `@username/slug` identifier. |
|
|
176
|
+
| `namespaced` | No | When `true`, resolve the slug at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. |
|
|
177
|
+
| `theme` | No | `default`, `minimal`, `essay`, or `terminal`. Non-default themes are Pro-only. |
|
|
178
|
+
| `hideBranding` | No | Hide the "Published with JotBird" footer. Enabling is Pro-only. |
|
|
179
|
+
| `visibility` | No | `unlisted` (default), `public` (search-indexable), or `password` (Pro). Setting a visibility clears any previous password. |
|
|
180
|
+
| `password` | No | Required with (and only valid with) `visibility: "password"`. Never echoed back. |
|
|
181
|
+
|
|
182
|
+
At least one of `theme`, `hideBranding`, or `visibility` must be provided. `tags` are reported by `get_settings` but can't be changed here — set them in the web app.
|
|
183
|
+
|
|
184
|
+
Settings changes are reflected in the API immediately, but the live page can take up to about a minute to reflect a visibility change as caches refresh. Theme and branding apply right away. Turning password protection *on* takes effect immediately, so a page is never left readable while the change propagates.
|
|
147
185
|
|
|
148
186
|
## Namespaced URLs (Pro)
|
|
149
187
|
|
|
@@ -160,9 +198,22 @@ Namespaced pages never expire and keep the same URL across updates. Set your use
|
|
|
160
198
|
|--|------|-----|
|
|
161
199
|
| Published pages | 10 | Unlimited |
|
|
162
200
|
| Publishes per hour | 10 | 100 |
|
|
201
|
+
| Settings updates per hour | 10 | 100 |
|
|
163
202
|
| Page expiration | 90 days | Never |
|
|
164
203
|
| Max markdown size | 256 KB | 256 KB |
|
|
165
204
|
|
|
205
|
+
A few things worth knowing:
|
|
206
|
+
|
|
207
|
+
- **The 10-page cap counts *new* pages.** Updating a page you've already published is never blocked
|
|
208
|
+
by it, however many you have. Publishing an 11th new page on a free account fails with a "document
|
|
209
|
+
limit reached" error.
|
|
210
|
+
- **`update_settings` is rate-limited in its own bucket**, separate from publishing, so changing
|
|
211
|
+
settings doesn't eat your publish quota. Reading (`get_settings`, `list_documents`) isn't limited
|
|
212
|
+
at all. When you hit a limit, the tool tells you how long to wait.
|
|
213
|
+
- **Enabling a Pro-only setting on a free account fails and names the setting**, so your AI can tell
|
|
214
|
+
you exactly what needs an upgrade. Free accounts can always *clear* Pro settings
|
|
215
|
+
(`theme: "default"`, `hideBranding: false`) and switch between `unlisted` and `public`.
|
|
216
|
+
|
|
166
217
|
## Environment variables
|
|
167
218
|
|
|
168
219
|
| Variable | Required | Description |
|
|
@@ -174,15 +225,19 @@ Namespaced pages never expire and keep the same URL across updates. Set your use
|
|
|
174
225
|
|
|
175
226
|
```bash
|
|
176
227
|
npm install
|
|
177
|
-
npm run build
|
|
228
|
+
npm run build # tsc → dist/
|
|
229
|
+
npm test # vitest
|
|
178
230
|
```
|
|
179
231
|
|
|
180
|
-
|
|
232
|
+
Run the server against your account (it speaks MCP over stdio, so it will sit waiting for a
|
|
233
|
+
client — that's what a successful start looks like):
|
|
181
234
|
|
|
182
235
|
```bash
|
|
183
236
|
JOTBIRD_API_KEY=jb_your_key node dist/index.js
|
|
184
237
|
```
|
|
185
238
|
|
|
239
|
+
Point it at a different backend with `JOTBIRD_API_URL`.
|
|
240
|
+
|
|
186
241
|
## License
|
|
187
242
|
|
|
188
243
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -32,24 +32,142 @@ const PublishArgs = z.object({
|
|
|
32
32
|
slug: z
|
|
33
33
|
.string()
|
|
34
34
|
.optional()
|
|
35
|
-
.describe("
|
|
36
|
-
"
|
|
37
|
-
"
|
|
35
|
+
.describe("Slug of an existing page to update. A slug that matches no page you own is IGNORED " +
|
|
36
|
+
"(the page publishes at an auto-generated slug) — it cannot name a NEW flat page. " +
|
|
37
|
+
"For namespaced documents (namespaced: true): required — publish at @username/slug."),
|
|
38
38
|
namespaced: z
|
|
39
39
|
.boolean()
|
|
40
40
|
.optional()
|
|
41
41
|
.describe("When true, publish at your namespace: share.jotbird.com/@username/slug. " +
|
|
42
42
|
"Requires a Pro subscription and a username set in Account Settings. " +
|
|
43
43
|
"A slug is required when namespaced is true."),
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
})
|
|
45
|
+
// Strict for the same reason as the settings schemas: a stripped key is a
|
|
46
|
+
// silent partial success. A model that passes `theme` here (settings belong to
|
|
47
|
+
// update_settings) should be told, not quietly published with the default.
|
|
48
|
+
.strict();
|
|
49
|
+
const THEMES = ["default", "minimal", "essay", "terminal"];
|
|
50
|
+
const VISIBILITIES = ["unlisted", "password", "public"];
|
|
51
|
+
/**
|
|
52
|
+
* Split an "@username/slug" identifier into its parts.
|
|
53
|
+
*
|
|
54
|
+
* list_documents reports a namespaced page's identity as "@username/slug", and
|
|
55
|
+
* the tool descriptions point at it to find slugs — so that string is exactly
|
|
56
|
+
* what a model passes back. Taken literally it addresses a FLAT slug that does
|
|
57
|
+
* not exist, and the call 404s on a page that plainly does. Mirrors
|
|
58
|
+
* parseSlugValue/resolveTarget in the CLI.
|
|
59
|
+
*/
|
|
60
|
+
function parseTarget(slug, namespaced) {
|
|
61
|
+
if (slug.startsWith("@") && slug.includes("/")) {
|
|
62
|
+
return { slug: slug.slice(slug.indexOf("/") + 1), namespaced: true };
|
|
63
|
+
}
|
|
64
|
+
return { slug, namespaced: Boolean(namespaced) };
|
|
65
|
+
}
|
|
66
|
+
// Every tool that addresses an existing page shares this target, and it
|
|
67
|
+
// NORMALIZES ITSELF: parsing yields the resolved {slug, namespaced} and nothing
|
|
68
|
+
// else, so a handler cannot forget to call parseTarget (three hand-written call
|
|
69
|
+
// sites is how the "@username/slug" bug shipped in the first place). `target`
|
|
70
|
+
// preserves what the caller actually typed, for echoing back in messages.
|
|
71
|
+
//
|
|
72
|
+
// The post-transform length check is the load-bearing half: "@user/" splits to
|
|
73
|
+
// an EMPTY slug, which would otherwise sail through `z.string()` and request
|
|
74
|
+
// `/api/v1/documents//settings` — and `delete` would then cheerfully confirm a
|
|
75
|
+
// deletion that never happened.
|
|
76
|
+
//
|
|
77
|
+
// `.strict()` matters for the same class of reason: zod's default is to STRIP
|
|
78
|
+
// unknown keys, which would turn a patch the server rejects (its contract 400s
|
|
79
|
+
// on an unknown key) into a silent partial success. `tags` is the trap —
|
|
80
|
+
// get_settings reports them, so a model naturally tries to set them, and a
|
|
81
|
+
// stripped key would come back as "Settings updated".
|
|
82
|
+
const TargetShape = {
|
|
83
|
+
slug: z
|
|
84
|
+
.string()
|
|
85
|
+
.trim()
|
|
86
|
+
.min(1)
|
|
87
|
+
.describe("Slug of the page, or the full @username/slug identifier"),
|
|
47
88
|
namespaced: z
|
|
48
89
|
.boolean()
|
|
49
90
|
.optional()
|
|
50
|
-
.describe("When true,
|
|
51
|
-
|
|
52
|
-
|
|
91
|
+
.describe("When true, resolve the slug at @username/slug instead of the flat URL."),
|
|
92
|
+
};
|
|
93
|
+
function normalizeTarget(a) {
|
|
94
|
+
return { ...a, ...parseTarget(a.slug, a.namespaced), target: a.slug };
|
|
95
|
+
}
|
|
96
|
+
const EMPTY_SLUG = 'slug must name a page, e.g. "my-notes" or "@username/my-notes".';
|
|
97
|
+
const hasSlug = (a) => a.slug.length > 0;
|
|
98
|
+
const TargetArgs = z.object(TargetShape).strict();
|
|
99
|
+
// get_settings and delete take nothing but a target, so they share one schema.
|
|
100
|
+
const NormalizedTargetArgs = TargetArgs.transform(normalizeTarget).refine(hasSlug, { message: EMPTY_SLUG, path: ["slug"] });
|
|
101
|
+
const GetSettingsArgs = NormalizedTargetArgs;
|
|
102
|
+
const DeleteArgs = NormalizedTargetArgs;
|
|
103
|
+
const UpdateSettingsArgs = TargetArgs.extend({
|
|
104
|
+
theme: z.enum(THEMES).optional().describe("Page theme"),
|
|
105
|
+
hideBranding: z
|
|
106
|
+
.boolean()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe("Hide the JotBird footer branding (true is Pro-only)"),
|
|
109
|
+
visibility: z.enum(VISIBILITIES).optional().describe("Page visibility state"),
|
|
110
|
+
password: z
|
|
111
|
+
.string()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Page password; required with (and only valid with) visibility \"password\""),
|
|
114
|
+
})
|
|
115
|
+
// These mirror the server's validation. Rejecting locally matters because a
|
|
116
|
+
// PATCH is charged against the hourly rate limit BEFORE validation — a
|
|
117
|
+
// request the server will always refuse would still burn a write.
|
|
118
|
+
//
|
|
119
|
+
// One superRefine rather than chained .refine()s: chained refinements abort at
|
|
120
|
+
// the first failure, so `{password}` with no visibility reported only the
|
|
121
|
+
// generic "provide at least one setting" and never mentioned the password it
|
|
122
|
+
// was about to drop. superRefine collects every issue, and the explicit paths
|
|
123
|
+
// keep the rendered message field-anchored.
|
|
124
|
+
.superRefine((a, ctx) => {
|
|
125
|
+
if (a.password !== undefined && a.visibility !== "password") {
|
|
126
|
+
ctx.addIssue({
|
|
127
|
+
code: z.ZodIssueCode.custom,
|
|
128
|
+
path: ["password"],
|
|
129
|
+
message: 'password is only valid with visibility "password".',
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (a.visibility === "password" && (a.password ?? "") === "") {
|
|
133
|
+
ctx.addIssue({
|
|
134
|
+
code: z.ZodIssueCode.custom,
|
|
135
|
+
path: ["password"],
|
|
136
|
+
message: 'visibility "password" requires a non-empty password.',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (a.theme === undefined &&
|
|
140
|
+
a.hideBranding === undefined &&
|
|
141
|
+
a.visibility === undefined) {
|
|
142
|
+
ctx.addIssue({
|
|
143
|
+
code: z.ZodIssueCode.custom,
|
|
144
|
+
path: [],
|
|
145
|
+
message: "Provide at least one setting to change: theme, hideBranding, or visibility.",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
})
|
|
149
|
+
.transform(normalizeTarget)
|
|
150
|
+
.refine(hasSlug, { message: EMPTY_SLUG, path: ["slug"] });
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
// Formatting
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
function formatSettings(s) {
|
|
155
|
+
const identifier = s.username ? `@${s.username}/${s.slug}` : s.slug;
|
|
156
|
+
const lines = [
|
|
157
|
+
`Slug: ${identifier}`,
|
|
158
|
+
`URL: ${s.url}`,
|
|
159
|
+
// `||`, not `??`: an untitled page comes back as "" as readily as null, and
|
|
160
|
+
// `??` would render a bare "Title: ".
|
|
161
|
+
`Title: ${s.title || "(untitled)"}`,
|
|
162
|
+
`Theme: ${s.theme}`,
|
|
163
|
+
`Branding: ${s.hideBranding ? "hidden" : "shown"}`,
|
|
164
|
+
`Visibility: ${s.visibility}`,
|
|
165
|
+
];
|
|
166
|
+
if (s.tags?.length)
|
|
167
|
+
lines.push(`Tags: ${s.tags.join(", ")}`);
|
|
168
|
+
lines.push(`Expires: ${s.expiresAt ?? "never"}`);
|
|
169
|
+
return lines.join("\n");
|
|
170
|
+
}
|
|
53
171
|
// ---------------------------------------------------------------------------
|
|
54
172
|
// MCP server factory (exported for testing)
|
|
55
173
|
// ---------------------------------------------------------------------------
|
|
@@ -71,8 +189,14 @@ export function createServer(apiKey, apiBase) {
|
|
|
71
189
|
const retryAfter = res.headers.get("Retry-After");
|
|
72
190
|
throw new Error(`Rate limit exceeded.${retryAfter ? ` Try again in ${retryAfter} seconds.` : ""}`);
|
|
73
191
|
}
|
|
74
|
-
const
|
|
75
|
-
|
|
192
|
+
const body = data;
|
|
193
|
+
let msg = String(body?.error ?? `HTTP ${res.status}`);
|
|
194
|
+
// Pro-gated settings 403s name the offending setting — surface it so the
|
|
195
|
+
// model can tell the user which feature needs Pro instead of guessing.
|
|
196
|
+
if (res.status === 403 && body?.setting) {
|
|
197
|
+
msg += ` (Pro required for: ${String(body.setting)})`;
|
|
198
|
+
}
|
|
199
|
+
throw new Error(msg);
|
|
76
200
|
}
|
|
77
201
|
return data;
|
|
78
202
|
}
|
|
@@ -91,6 +215,21 @@ export function createServer(apiKey, apiBase) {
|
|
|
91
215
|
params.set("namespaced", "true");
|
|
92
216
|
return apiRequest(`/api/v1/documents?${params.toString()}`, { method: "DELETE" });
|
|
93
217
|
}
|
|
218
|
+
function settingsPath(slug, namespaced) {
|
|
219
|
+
let path = `/api/v1/documents/${encodeURIComponent(slug)}/settings`;
|
|
220
|
+
if (namespaced)
|
|
221
|
+
path += "?namespaced=true";
|
|
222
|
+
return path;
|
|
223
|
+
}
|
|
224
|
+
async function getSettings(slug, namespaced) {
|
|
225
|
+
return apiRequest(settingsPath(slug, namespaced));
|
|
226
|
+
}
|
|
227
|
+
async function updateSettings(slug, patch, namespaced) {
|
|
228
|
+
return apiRequest(settingsPath(slug, namespaced), {
|
|
229
|
+
method: "PATCH",
|
|
230
|
+
body: JSON.stringify(patch),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
94
233
|
// -- Server setup --
|
|
95
234
|
const server = new Server({ name: "mcp-server-jotbird", version: VERSION }, { capabilities: { tools: {} } });
|
|
96
235
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -119,10 +258,12 @@ export function createServer(apiKey, apiBase) {
|
|
|
119
258
|
},
|
|
120
259
|
slug: {
|
|
121
260
|
type: "string",
|
|
122
|
-
description: "
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
261
|
+
description: "Slug of an EXISTING page to update — NOT a way to choose the URL of a new " +
|
|
262
|
+
"page. If it does not match a page this account already owns, it is IGNORED " +
|
|
263
|
+
"and the page is published at an auto-generated slug instead, so never promise " +
|
|
264
|
+
"the user a URL you passed here — report the one the tool returns. " +
|
|
265
|
+
"Omit it to publish a new page. To choose a new page's URL, use namespaced: " +
|
|
266
|
+
"true together with a slug (Pro). Use list_documents to find existing slugs.",
|
|
126
267
|
},
|
|
127
268
|
namespaced: {
|
|
128
269
|
type: "boolean",
|
|
@@ -154,18 +295,95 @@ export function createServer(apiKey, apiBase) {
|
|
|
154
295
|
properties: {
|
|
155
296
|
slug: {
|
|
156
297
|
type: "string",
|
|
157
|
-
description: "Slug of the page to delete (e.g. 'my-notes')
|
|
298
|
+
description: "Slug of the page to delete (e.g. 'my-notes'), or the full " +
|
|
299
|
+
"'@username/my-notes' identifier for a namespaced page. " +
|
|
158
300
|
"Use list_documents to find slugs.",
|
|
159
301
|
},
|
|
160
302
|
namespaced: {
|
|
161
303
|
type: "boolean",
|
|
162
304
|
description: "When true, delete the document at @username/slug instead of the flat URL. " +
|
|
305
|
+
"Unnecessary if the slug already starts with '@username/'. " +
|
|
163
306
|
"Requires a Pro subscription and a username set in Account Settings.",
|
|
164
307
|
},
|
|
165
308
|
},
|
|
166
309
|
required: ["slug"],
|
|
167
310
|
},
|
|
168
311
|
},
|
|
312
|
+
{
|
|
313
|
+
name: "get_settings",
|
|
314
|
+
description: "Get a published JotBird page's settings: theme, branding, visibility " +
|
|
315
|
+
"(unlisted/password/public), tags, and expiration. Use before changing " +
|
|
316
|
+
"settings or when the user asks how a page is configured. The page " +
|
|
317
|
+
"password is write-only and never returned.",
|
|
318
|
+
inputSchema: {
|
|
319
|
+
type: "object",
|
|
320
|
+
properties: {
|
|
321
|
+
slug: {
|
|
322
|
+
type: "string",
|
|
323
|
+
description: "Slug of the page (e.g. 'my-notes'), or the full '@username/my-notes' " +
|
|
324
|
+
"identifier for a namespaced page. Use list_documents to find slugs.",
|
|
325
|
+
},
|
|
326
|
+
namespaced: {
|
|
327
|
+
type: "boolean",
|
|
328
|
+
description: "When true, resolve the slug at @username/slug instead of the flat URL. " +
|
|
329
|
+
"Unnecessary if the slug already starts with '@username/'.",
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
required: ["slug"],
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: "update_settings",
|
|
337
|
+
description: "Update a published JotBird page's settings: theme, branding, and " +
|
|
338
|
+
"visibility. Only the provided fields change; others are preserved. " +
|
|
339
|
+
"Pro-only: non-default themes, hiding branding, and password " +
|
|
340
|
+
"protection (free accounts can clear these and switch " +
|
|
341
|
+
"unlisted/public). Visibility semantics: 'unlisted' (default — not " +
|
|
342
|
+
"indexed by search engines), 'public' (indexable, listed in the " +
|
|
343
|
+
"sitemap), 'password' (Pro — requires the password argument; setting " +
|
|
344
|
+
"a visibility clears any previous password). The API reflects changes " +
|
|
345
|
+
"immediately, but the live page can take up to about a minute to " +
|
|
346
|
+
"reflect a visibility change as caches refresh — a briefly stale page " +
|
|
347
|
+
"is not a failed update.",
|
|
348
|
+
inputSchema: {
|
|
349
|
+
type: "object",
|
|
350
|
+
properties: {
|
|
351
|
+
slug: {
|
|
352
|
+
type: "string",
|
|
353
|
+
description: "Slug of the page to update (e.g. 'my-notes'), or the full " +
|
|
354
|
+
"'@username/my-notes' identifier for a namespaced page. " +
|
|
355
|
+
"Use list_documents to find slugs.",
|
|
356
|
+
},
|
|
357
|
+
namespaced: {
|
|
358
|
+
type: "boolean",
|
|
359
|
+
description: "When true, resolve the slug at @username/slug instead of the flat URL. " +
|
|
360
|
+
"Unnecessary if the slug already starts with '@username/'.",
|
|
361
|
+
},
|
|
362
|
+
theme: {
|
|
363
|
+
type: "string",
|
|
364
|
+
enum: [...THEMES],
|
|
365
|
+
description: "Page theme. Any non-default theme requires a Pro subscription.",
|
|
366
|
+
},
|
|
367
|
+
hideBranding: {
|
|
368
|
+
type: "boolean",
|
|
369
|
+
description: "Hide the 'Published with JotBird' footer. Enabling requires Pro; " +
|
|
370
|
+
"any account can set it back to false.",
|
|
371
|
+
},
|
|
372
|
+
visibility: {
|
|
373
|
+
type: "string",
|
|
374
|
+
enum: [...VISIBILITIES],
|
|
375
|
+
description: "Page visibility: 'unlisted' (default), 'public' (search-indexable), " +
|
|
376
|
+
"or 'password' (Pro; requires the password argument).",
|
|
377
|
+
},
|
|
378
|
+
password: {
|
|
379
|
+
type: "string",
|
|
380
|
+
description: "Page password. Required with (and only valid with) visibility " +
|
|
381
|
+
"'password'. Write-only — it is never echoed back.",
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
required: ["slug"],
|
|
385
|
+
},
|
|
386
|
+
},
|
|
169
387
|
],
|
|
170
388
|
}));
|
|
171
389
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
@@ -218,13 +436,48 @@ export function createServer(apiKey, apiBase) {
|
|
|
218
436
|
};
|
|
219
437
|
}
|
|
220
438
|
case "delete": {
|
|
221
|
-
const { slug, namespaced } = DeleteArgs.parse(args);
|
|
439
|
+
const { slug, namespaced, target } = DeleteArgs.parse(args);
|
|
222
440
|
await deleteDocument(slug, namespaced);
|
|
223
441
|
return {
|
|
224
442
|
content: [
|
|
225
443
|
{
|
|
226
444
|
type: "text",
|
|
227
|
-
text: `Deleted document "${
|
|
445
|
+
text: `Deleted document "${target}".`,
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
case "get_settings": {
|
|
451
|
+
const { slug, namespaced } = GetSettingsArgs.parse(args);
|
|
452
|
+
const settings = await getSettings(slug, namespaced);
|
|
453
|
+
return {
|
|
454
|
+
content: [{ type: "text", text: formatSettings(settings) }],
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
case "update_settings": {
|
|
458
|
+
const { slug, namespaced, target: _target, ...patch } = UpdateSettingsArgs.parse(args);
|
|
459
|
+
// Pre-flight every write with the GET (which is not rate-limited):
|
|
460
|
+
// PATCH is charged against the hourly write limit BEFORE validation,
|
|
461
|
+
// even when it 404s, so a mistyped slug would otherwise silently eat
|
|
462
|
+
// one of a free account's 10 writes per hour.
|
|
463
|
+
//
|
|
464
|
+
// The result is deliberately NOT used to skip a PATCH whose values
|
|
465
|
+
// already match. Re-applying identical settings is the documented way
|
|
466
|
+
// to repair drift and to finish a partially-applied patch ("a retry of
|
|
467
|
+
// the same PATCH is idempotent" — PAGE_SETTINGS_ARCHITECTURE.md), and
|
|
468
|
+
// the CLI always writes. Saving a rate-limit unit isn't worth being the
|
|
469
|
+
// one client that can't force a re-apply.
|
|
470
|
+
await getSettings(slug, namespaced);
|
|
471
|
+
const settings = await updateSettings(slug, patch, namespaced);
|
|
472
|
+
const note = patch.visibility !== undefined
|
|
473
|
+
? "\n\nNote: the live page can take up to about a minute to reflect " +
|
|
474
|
+
"a visibility change as caches refresh."
|
|
475
|
+
: "";
|
|
476
|
+
return {
|
|
477
|
+
content: [
|
|
478
|
+
{
|
|
479
|
+
type: "text",
|
|
480
|
+
text: `Settings updated.\n${formatSettings(settings)}${note}`,
|
|
228
481
|
},
|
|
229
482
|
],
|
|
230
483
|
};
|
|
@@ -240,8 +493,10 @@ export function createServer(apiKey, apiBase) {
|
|
|
240
493
|
}
|
|
241
494
|
catch (error) {
|
|
242
495
|
if (error instanceof z.ZodError) {
|
|
496
|
+
// Cross-field refinements can carry an empty path; prefixing those with
|
|
497
|
+
// ": " renders a stray double colon ("Validation error: : Provide …").
|
|
243
498
|
const issues = error.issues
|
|
244
|
-
.map((i) => `${i.path.join(".")}: ${i.message}`)
|
|
499
|
+
.map((i) => (i.path.length ? `${i.path.join(".")}: ${i.message}` : i.message))
|
|
245
500
|
.join("; ");
|
|
246
501
|
return {
|
|
247
502
|
content: [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,kEAAkE;AAClE,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;QACxB,KAAK,EAAE,GAAG,CAAC,OAAO;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,+EAA+E;AAC/E,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AAmD3D,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAChE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qFAAqF;QACrF,mFAAmF;QACnF,oFAAoF,CACrF;IACH,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E;QAC1E,sEAAsE;QACtE,6CAA6C,CAC9C;CACJ,CAAC;IACA,0EAA0E;IAC1E,+EAA+E;IAC/E,2EAA2E;KAC1E,MAAM,EAAE,CAAC;AAEZ,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AACpE,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAEjE;;;;;;;;GAQG;AACH,SAAS,WAAW,CAClB,IAAY,EACZ,UAAoB;IAEpB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,wEAAwE;AACxE,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,gCAAgC;AAChC,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,sDAAsD;AACtD,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yDAAyD,CAAC;IACtE,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;CACtF,CAAC;AAEF,SAAS,eAAe,CAAmD,CAAI;IAC7E,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,GACd,iEAAiE,CAAC;AACpE,MAAM,OAAO,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAE3D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;AAElD,+EAA+E;AAC/E,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,CACvE,OAAO,EACP,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CACxC,CAAC;AAEF,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAC7C,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvD,YAAY,EAAE,CAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC7E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC;IACA,4EAA4E;IAC5E,uEAAuE;IACvE,kEAAkE;IAClE,EAAE;IACF,+EAA+E;IAC/E,0EAA0E;IAC1E,6EAA6E;IAC7E,8EAA8E;IAC9E,4CAA4C;KAC3C,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;IACtB,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5D,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;YAClB,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7D,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;YAClB,OAAO,EAAE,sDAAsD;SAChE,CAAC,CAAC;IACL,CAAC;IACD,IACE,CAAC,CAAC,KAAK,KAAK,SAAS;QACrB,CAAC,CAAC,YAAY,KAAK,SAAS;QAC5B,CAAC,CAAC,UAAU,KAAK,SAAS,EAC1B,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,EAAE;YACR,OAAO,EACL,6EAA6E;SAChF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;KACD,SAAS,CAAC,eAAe,CAAC;KAC1B,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAS5D,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,SAAS,cAAc,CAAC,CAAmB;IACzC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,MAAM,KAAK,GAAG;QACZ,SAAS,UAAU,EAAE;QACrB,QAAQ,CAAC,CAAC,GAAG,EAAE;QACf,4EAA4E;QAC5E,sCAAsC;QACtC,UAAU,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE;QACnC,UAAU,CAAC,CAAC,KAAK,EAAE;QACnB,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE;QAClD,eAAe,CAAC,CAAC,UAAU,EAAE;KAC9B,CAAC;IACF,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAe;IAC1D,iDAAiD;IAEjD,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;YAC3C,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,YAAY,EAAE,sBAAsB,OAAO,EAAE;gBAC7C,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClD,MAAM,IAAI,KAAK,CACb,uBAAuB,UAAU,CAAC,CAAC,CAAC,iBAAiB,UAAU,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAClF,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,IAAsC,CAAC;YACpD,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBACxC,GAAG,IAAI,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAS,CAAC;IACnB,CAAC;IAED,KAAK,UAAU,eAAe,CAC5B,MAAqB;QAErB,OAAO,UAAU,CAAgB,iBAAiB,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,OAAO,UAAU,CAA4B,mBAAmB,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,UAAoB;QAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,UAAU;YAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,UAAU,CACf,qBAAqB,MAAM,CAAC,QAAQ,EAAE,EAAE,EACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;IACJ,CAAC;IAED,SAAS,YAAY,CAAC,IAAY,EAAE,UAAoB;QACtD,IAAI,IAAI,GAAG,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;QACpE,IAAI,UAAU;YAAE,IAAI,IAAI,kBAAkB,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,UAAoB;QAEpB,OAAO,UAAU,CAAmB,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,KAAoB,EACpB,UAAoB;QAEpB,OAAO,UAAU,CAAmB,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YAClE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,EAChD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,sEAAsE;oBACtE,uEAAuE;oBACvE,mEAAmE;oBACnE,6DAA6D;oBAC7D,6CAA6C;oBAC7C,sEAAsE;oBACtE,4EAA4E;gBAC9E,WAAW,EAAE;oBACX,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,+DAA+D;gCAC/D,iEAAiE;gCACjE,8BAA8B;yBACjC;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,+DAA+D;yBAClE;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,4EAA4E;gCAC5E,6EAA6E;gCAC7E,gFAAgF;gCAChF,oEAAoE;gCACpE,6EAA6E;gCAC7E,6EAA6E;yBAChF;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,SAAS;4BACf,WAAW,EACT,0EAA0E;gCAC1E,sEAAsE;gCACtE,0BAA0B;yBAC7B;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;iBACvB;aACF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,uEAAuE;oBACvE,4EAA4E;oBAC5E,uDAAuD;gBACzD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,mEAAmE;oBACnE,sFAAsF;gBACxF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,4DAA4D;gCAC5D,yDAAyD;gCACzD,mCAAmC;yBACtC;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,SAAS;4BACf,WAAW,EACT,4EAA4E;gCAC5E,4DAA4D;gCAC5D,qEAAqE;yBACxE;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,uEAAuE;oBACvE,wEAAwE;oBACxE,oEAAoE;oBACpE,4CAA4C;gBAC9C,WAAW,EAAE;oBACX,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,uEAAuE;gCACvE,qEAAqE;yBACxE;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,SAAS;4BACf,WAAW,EACT,yEAAyE;gCACzE,2DAA2D;yBAC9D;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,mEAAmE;oBACnE,qEAAqE;oBACrE,8DAA8D;oBAC9D,uDAAuD;oBACvD,oEAAoE;oBACpE,iEAAiE;oBACjE,sEAAsE;oBACtE,uEAAuE;oBACvE,kEAAkE;oBAClE,uEAAuE;oBACvE,yBAAyB;gBAC3B,WAAW,EAAE;oBACX,IAAI,EAAE,QAAiB;oBACvB,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,4DAA4D;gCAC5D,yDAAyD;gCACzD,mCAAmC;yBACtC;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,SAAS;4BACf,WAAW,EACT,yEAAyE;gCACzE,2DAA2D;yBAC9D;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;4BACjB,WAAW,EACT,gEAAgE;yBACnE;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,SAAS;4BACf,WAAW,EACT,mEAAmE;gCACnE,uCAAuC;yBAC1C;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC;4BACvB,WAAW,EACT,sEAAsE;gCACtE,sDAAsD;yBACzD;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,gEAAgE;gCAChE,mDAAmD;yBACtD;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;SACF;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEjD,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;oBAE5E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;oBACxD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS;wBAC7B,CAAC,CAAC,cAAc,MAAM,CAAC,SAAS,EAAE;wBAClC,CAAC,CAAC,wBAAwB,CAAC;oBAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ;wBAChC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;wBACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;oBAEhB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EACF,GAAG,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI;oCAC5B,SAAS,UAAU,IAAI;oCACvB,UAAU,MAAM,CAAC,KAAK,IAAI,YAAY,EAAE;oCACxC,MAAM;6BACT;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC;oBAE5C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC3B,OAAO;4BACL,OAAO,EAAE;gCACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;6BACvD;yBACF,CAAC;oBACJ,CAAC;oBAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAChC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;wBACvC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACpE,OAAO,OAAO,CAAC,CAAC,KAAK,IAAI,YAAY,SAAS,CAAC,CAAC,GAAG,aAAa,UAAU,eAAe,OAAO,EAAE,CAAC;oBACrG,CAAC,CAAC,CAAC;oBAEH,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;6BAClE;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5D,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBACvC,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,qBAAqB,MAAM,IAAI;6BACtC;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACzD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBACrD,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;qBACrE,CAAC;gBACJ,CAAC;gBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACvB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GACnD,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAEjC,mEAAmE;oBACnE,qEAAqE;oBACrE,qEAAqE;oBACrE,8CAA8C;oBAC9C,EAAE;oBACF,mEAAmE;oBACnE,sEAAsE;oBACtE,uEAAuE;oBACvE,sEAAsE;oBACtE,wEAAwE;oBACxE,0CAA0C;oBAC1C,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAEpC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;oBAC/D,MAAM,IAAI,GACR,KAAK,CAAC,UAAU,KAAK,SAAS;wBAC5B,CAAC,CAAC,mEAAmE;4BACnE,wCAAwC;wBAC1C,CAAC,CAAC,EAAE,CAAC;oBACT,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,sBAAsB,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;6BAC9D;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE;4BACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE;yBACzD;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,wEAAwE;gBACxE,uEAAuE;gBACvE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;qBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;qBAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qBAAqB,MAAM,EAAE;yBACpC;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBACzE;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,UAAU,KAAK,UAAU,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,IAAI,MAAM,EAAE,CAAC;IACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,4DAA4D;YAC1D,sDAAsD,CACzD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAC;IACzE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,mBAAmB,CAAC,CAAC;AACnE,CAAC"}
|