notion-mcp-server 1.0.0 → 2.4.2
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 +383 -192
- package/build/config/index.js +3 -1
- package/build/dispatch/concurrency.js +15 -0
- package/build/dispatch/idempotency.js +38 -0
- package/build/dispatch/index.js +175 -0
- package/build/dispatch/rate-limit.js +56 -0
- package/build/dispatch/retry.js +97 -0
- package/build/index.js +1 -1
- package/build/markdown/parse.js +265 -0
- package/build/operations/blocks.js +331 -0
- package/build/operations/comments.js +191 -0
- package/build/operations/data-sources.js +85 -0
- package/build/operations/databases.js +345 -0
- package/build/operations/files.js +239 -0
- package/build/operations/index.js +19 -0
- package/build/operations/pages.js +486 -0
- package/build/operations/registry.js +16 -0
- package/build/operations/users.js +101 -0
- package/build/prompts/index.js +105 -0
- package/build/schema/blocks.js +19 -77
- package/build/schema/database.js +27 -86
- package/build/schema/emit.js +68 -0
- package/build/schema/file.js +1 -1
- package/build/schema/filter-dsl.js +333 -0
- package/build/schema/icon.js +1 -1
- package/build/schema/page-properties.js +17 -3
- package/build/schema/page.js +12 -88
- package/build/schema/refs.js +16 -0
- package/build/schema/rich-text.js +1 -1
- package/build/server/index.js +15 -2
- package/build/services/auth.js +19 -0
- package/build/services/notion.js +14 -17
- package/build/tools/index.js +119 -51
- package/build/utils/error.js +125 -86
- package/build/utils/handler.js +11 -0
- package/build/utils/learning-error.js +40 -0
- package/build/utils/notion-types.js +16 -0
- package/build/utils/paginate.js +35 -0
- package/build/utils/schema-slice.js +156 -0
- package/build/utils/slim.js +269 -0
- package/package.json +13 -7
- package/build/resources/imageList.js +0 -62
- package/build/resources/index.js +0 -1
- package/build/resources/predictionList.js +0 -43
- package/build/resources/svgList.js +0 -69
- package/build/schema/comments.js +0 -34
- package/build/schema/notion.js +0 -57
- package/build/schema/richText.js +0 -757
- package/build/schema/tools.js +0 -17
- package/build/schema/users.js +0 -13
- package/build/services/replicate.js +0 -23
- package/build/tools/appendBlockChildren.js +0 -25
- package/build/tools/batchAppendBlockChildren.js +0 -33
- package/build/tools/batchDeleteBlocks.js +0 -32
- package/build/tools/batchMixedOperations.js +0 -58
- package/build/tools/batchUpdateBlocks.js +0 -33
- package/build/tools/comments.js +0 -62
- package/build/tools/createDatabase.js +0 -18
- package/build/tools/createPage.js +0 -18
- package/build/tools/createPrediction.js +0 -28
- package/build/tools/deleteBlock.js +0 -24
- package/build/tools/formatRichText.js +0 -83
- package/build/tools/generateImage.js +0 -48
- package/build/tools/generateImageVariants.js +0 -105
- package/build/tools/generateMultipleImages.js +0 -60
- package/build/tools/generateSVG.js +0 -43
- package/build/tools/getPrediction.js +0 -22
- package/build/tools/predictionList.js +0 -30
- package/build/tools/queryDatabase.js +0 -22
- package/build/tools/retrieveBlock.js +0 -24
- package/build/tools/retrieveBlockChildren.js +0 -32
- package/build/tools/searchPage.js +0 -24
- package/build/tools/updateBlock.js +0 -25
- package/build/tools/updateDatabase.js +0 -18
- package/build/tools/updatePage.js +0 -40
- package/build/tools/updatePageProperties.js +0 -21
- package/build/tools/users.js +0 -62
- package/build/types/blocks.js +0 -11
- package/build/types/comments.js +0 -6
- package/build/types/database.js +0 -5
- package/build/types/notion.js +0 -1
- package/build/types/page.js +0 -7
- package/build/types/richText.js +0 -1
- package/build/types/tools.js +0 -1
- package/build/types/users.js +0 -5
- package/build/utils/blob.js +0 -5
- package/build/utils/image.js +0 -34
- package/build/utils/index.js +0 -1
- package/build/utils/richText.js +0 -174
- package/build/validation/blocks.js +0 -568
- package/build/validation/notion.js +0 -51
- package/build/validation/page.js +0 -262
- package/build/validation/richText.js +0 -744
- package/build/validation/tools.js +0 -16
- /package/build/{types/index.js → operations/types.js} +0 -0
|
@@ -1,568 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { richTextSchema } from "./richText.js";
|
|
3
|
-
// Define children array type using a schema reference
|
|
4
|
-
// It will be properly populated once blockSchema is defined
|
|
5
|
-
const childrenSchema = z.array(z.lazy(() => blockSchema)).optional();
|
|
6
|
-
// Define color schema based on Notion API types
|
|
7
|
-
const colorSchema = z
|
|
8
|
-
.enum([
|
|
9
|
-
"default",
|
|
10
|
-
"gray",
|
|
11
|
-
"brown",
|
|
12
|
-
"orange",
|
|
13
|
-
"yellow",
|
|
14
|
-
"green",
|
|
15
|
-
"blue",
|
|
16
|
-
"purple",
|
|
17
|
-
"pink",
|
|
18
|
-
"red",
|
|
19
|
-
"gray_background",
|
|
20
|
-
"brown_background",
|
|
21
|
-
"orange_background",
|
|
22
|
-
"yellow_background",
|
|
23
|
-
"green_background",
|
|
24
|
-
"blue_background",
|
|
25
|
-
"purple_background",
|
|
26
|
-
"pink_background",
|
|
27
|
-
"red_background",
|
|
28
|
-
])
|
|
29
|
-
.optional();
|
|
30
|
-
// Common fields for all blocks
|
|
31
|
-
const blockBaseSchema = z.object({
|
|
32
|
-
object: z.literal("block"),
|
|
33
|
-
id: z.string(),
|
|
34
|
-
parent: z.object({
|
|
35
|
-
type: z.enum(["page_id", "database_id", "block_id", "workspace"]),
|
|
36
|
-
page_id: z.string().optional(),
|
|
37
|
-
database_id: z.string().optional(),
|
|
38
|
-
block_id: z.string().optional(),
|
|
39
|
-
workspace: z.boolean().optional(),
|
|
40
|
-
}),
|
|
41
|
-
type: z.string(),
|
|
42
|
-
created_time: z.string(),
|
|
43
|
-
created_by: z.object({
|
|
44
|
-
object: z.literal("user"),
|
|
45
|
-
id: z.string(),
|
|
46
|
-
}),
|
|
47
|
-
last_edited_time: z.string(),
|
|
48
|
-
last_edited_by: z.object({
|
|
49
|
-
object: z.literal("user"),
|
|
50
|
-
id: z.string(),
|
|
51
|
-
}),
|
|
52
|
-
has_children: z.boolean(),
|
|
53
|
-
archived: z.boolean(),
|
|
54
|
-
});
|
|
55
|
-
// ----- Block type specific schemas -----
|
|
56
|
-
// Paragraph block
|
|
57
|
-
export const paragraphBlockSchema = blockBaseSchema.extend({
|
|
58
|
-
type: z.literal("paragraph"),
|
|
59
|
-
paragraph: z.object({
|
|
60
|
-
rich_text: richTextSchema,
|
|
61
|
-
color: colorSchema,
|
|
62
|
-
children: childrenSchema,
|
|
63
|
-
}),
|
|
64
|
-
});
|
|
65
|
-
// Heading blocks
|
|
66
|
-
export const heading1BlockSchema = blockBaseSchema.extend({
|
|
67
|
-
type: z.literal("heading_1"),
|
|
68
|
-
heading_1: z.object({
|
|
69
|
-
rich_text: richTextSchema,
|
|
70
|
-
color: colorSchema,
|
|
71
|
-
is_toggleable: z.boolean(),
|
|
72
|
-
children: childrenSchema,
|
|
73
|
-
}),
|
|
74
|
-
});
|
|
75
|
-
export const heading2BlockSchema = blockBaseSchema.extend({
|
|
76
|
-
type: z.literal("heading_2"),
|
|
77
|
-
heading_2: z.object({
|
|
78
|
-
rich_text: richTextSchema,
|
|
79
|
-
color: colorSchema,
|
|
80
|
-
is_toggleable: z.boolean(),
|
|
81
|
-
children: childrenSchema,
|
|
82
|
-
}),
|
|
83
|
-
});
|
|
84
|
-
export const heading3BlockSchema = blockBaseSchema.extend({
|
|
85
|
-
type: z.literal("heading_3"),
|
|
86
|
-
heading_3: z.object({
|
|
87
|
-
rich_text: richTextSchema,
|
|
88
|
-
color: colorSchema,
|
|
89
|
-
is_toggleable: z.boolean(),
|
|
90
|
-
children: childrenSchema,
|
|
91
|
-
}),
|
|
92
|
-
});
|
|
93
|
-
// Bulleted list item
|
|
94
|
-
export const bulletedListItemBlockSchema = blockBaseSchema.extend({
|
|
95
|
-
type: z.literal("bulleted_list_item"),
|
|
96
|
-
bulleted_list_item: z.object({
|
|
97
|
-
rich_text: richTextSchema,
|
|
98
|
-
color: colorSchema,
|
|
99
|
-
children: childrenSchema,
|
|
100
|
-
}),
|
|
101
|
-
});
|
|
102
|
-
// Numbered list item
|
|
103
|
-
export const numberedListItemBlockSchema = blockBaseSchema.extend({
|
|
104
|
-
type: z.literal("numbered_list_item"),
|
|
105
|
-
numbered_list_item: z.object({
|
|
106
|
-
rich_text: richTextSchema,
|
|
107
|
-
color: colorSchema,
|
|
108
|
-
children: childrenSchema,
|
|
109
|
-
}),
|
|
110
|
-
});
|
|
111
|
-
// To-do block
|
|
112
|
-
export const todoBlockSchema = blockBaseSchema.extend({
|
|
113
|
-
type: z.literal("to_do"),
|
|
114
|
-
to_do: z.object({
|
|
115
|
-
rich_text: richTextSchema,
|
|
116
|
-
color: colorSchema,
|
|
117
|
-
checked: z.boolean(),
|
|
118
|
-
children: childrenSchema,
|
|
119
|
-
}),
|
|
120
|
-
});
|
|
121
|
-
// Toggle block
|
|
122
|
-
export const toggleBlockSchema = blockBaseSchema.extend({
|
|
123
|
-
type: z.literal("toggle"),
|
|
124
|
-
toggle: z.object({
|
|
125
|
-
rich_text: richTextSchema,
|
|
126
|
-
color: colorSchema,
|
|
127
|
-
children: childrenSchema,
|
|
128
|
-
}),
|
|
129
|
-
});
|
|
130
|
-
// Code block
|
|
131
|
-
export const codeBlockSchema = blockBaseSchema.extend({
|
|
132
|
-
type: z.literal("code"),
|
|
133
|
-
code: z.object({
|
|
134
|
-
rich_text: richTextSchema,
|
|
135
|
-
caption: richTextSchema.optional(),
|
|
136
|
-
language: z.enum([
|
|
137
|
-
"abap",
|
|
138
|
-
"arduino",
|
|
139
|
-
"bash",
|
|
140
|
-
"basic",
|
|
141
|
-
"c",
|
|
142
|
-
"clojure",
|
|
143
|
-
"coffeescript",
|
|
144
|
-
"c++",
|
|
145
|
-
"c#",
|
|
146
|
-
"css",
|
|
147
|
-
"dart",
|
|
148
|
-
"diff",
|
|
149
|
-
"docker",
|
|
150
|
-
"elixir",
|
|
151
|
-
"elm",
|
|
152
|
-
"erlang",
|
|
153
|
-
"flow",
|
|
154
|
-
"fortran",
|
|
155
|
-
"f#",
|
|
156
|
-
"gherkin",
|
|
157
|
-
"glsl",
|
|
158
|
-
"go",
|
|
159
|
-
"graphql",
|
|
160
|
-
"groovy",
|
|
161
|
-
"haskell",
|
|
162
|
-
"html",
|
|
163
|
-
"java",
|
|
164
|
-
"javascript",
|
|
165
|
-
"json",
|
|
166
|
-
"julia",
|
|
167
|
-
"kotlin",
|
|
168
|
-
"latex",
|
|
169
|
-
"less",
|
|
170
|
-
"lisp",
|
|
171
|
-
"livescript",
|
|
172
|
-
"lua",
|
|
173
|
-
"makefile",
|
|
174
|
-
"markdown",
|
|
175
|
-
"markup",
|
|
176
|
-
"matlab",
|
|
177
|
-
"mermaid",
|
|
178
|
-
"nix",
|
|
179
|
-
"objective-c",
|
|
180
|
-
"ocaml",
|
|
181
|
-
"pascal",
|
|
182
|
-
"perl",
|
|
183
|
-
"php",
|
|
184
|
-
"plain text",
|
|
185
|
-
"powershell",
|
|
186
|
-
"prolog",
|
|
187
|
-
"protobuf",
|
|
188
|
-
"python",
|
|
189
|
-
"r",
|
|
190
|
-
"reason",
|
|
191
|
-
"ruby",
|
|
192
|
-
"rust",
|
|
193
|
-
"sass",
|
|
194
|
-
"scala",
|
|
195
|
-
"scheme",
|
|
196
|
-
"scss",
|
|
197
|
-
"shell",
|
|
198
|
-
"sql",
|
|
199
|
-
"swift",
|
|
200
|
-
"typescript",
|
|
201
|
-
"vb.net",
|
|
202
|
-
"verilog",
|
|
203
|
-
"vhdl",
|
|
204
|
-
"visual basic",
|
|
205
|
-
"webassembly",
|
|
206
|
-
"xml",
|
|
207
|
-
"yaml",
|
|
208
|
-
"java/c/c++/c#",
|
|
209
|
-
]),
|
|
210
|
-
}),
|
|
211
|
-
});
|
|
212
|
-
// Child page block
|
|
213
|
-
export const childPageBlockSchema = blockBaseSchema.extend({
|
|
214
|
-
type: z.literal("child_page"),
|
|
215
|
-
child_page: z.object({
|
|
216
|
-
title: z.string(),
|
|
217
|
-
children: childrenSchema,
|
|
218
|
-
}),
|
|
219
|
-
});
|
|
220
|
-
// Child database block
|
|
221
|
-
export const childDatabaseBlockSchema = blockBaseSchema.extend({
|
|
222
|
-
type: z.literal("child_database"),
|
|
223
|
-
child_database: z.object({
|
|
224
|
-
title: z.string(),
|
|
225
|
-
children: childrenSchema,
|
|
226
|
-
}),
|
|
227
|
-
});
|
|
228
|
-
// Embed block
|
|
229
|
-
export const embedBlockSchema = blockBaseSchema.extend({
|
|
230
|
-
type: z.literal("embed"),
|
|
231
|
-
embed: z.object({
|
|
232
|
-
url: z.string().url(),
|
|
233
|
-
caption: richTextSchema,
|
|
234
|
-
}),
|
|
235
|
-
});
|
|
236
|
-
// Image block
|
|
237
|
-
export const imageBlockSchema = blockBaseSchema.extend({
|
|
238
|
-
type: z.literal("image"),
|
|
239
|
-
image: z.object({
|
|
240
|
-
caption: richTextSchema.optional(),
|
|
241
|
-
type: z.enum(["external", "file"]),
|
|
242
|
-
external: z.object({ url: z.string().url() }).optional(),
|
|
243
|
-
file: z
|
|
244
|
-
.object({ url: z.string(), expiry_time: z.string().optional() })
|
|
245
|
-
.optional(),
|
|
246
|
-
}),
|
|
247
|
-
});
|
|
248
|
-
// Video block
|
|
249
|
-
export const videoBlockSchema = blockBaseSchema.extend({
|
|
250
|
-
type: z.literal("video"),
|
|
251
|
-
video: z.object({
|
|
252
|
-
caption: richTextSchema.optional(),
|
|
253
|
-
type: z.enum(["external", "file"]),
|
|
254
|
-
external: z.object({ url: z.string().url() }).optional(),
|
|
255
|
-
file: z
|
|
256
|
-
.object({ url: z.string(), expiry_time: z.string().optional() })
|
|
257
|
-
.optional(),
|
|
258
|
-
}),
|
|
259
|
-
});
|
|
260
|
-
// File block
|
|
261
|
-
export const fileBlockSchema = blockBaseSchema.extend({
|
|
262
|
-
type: z.literal("file"),
|
|
263
|
-
file: z.object({
|
|
264
|
-
caption: richTextSchema.optional(),
|
|
265
|
-
type: z.enum(["external", "file"]),
|
|
266
|
-
external: z.object({ url: z.string().url() }).optional(),
|
|
267
|
-
file: z
|
|
268
|
-
.object({ url: z.string(), expiry_time: z.string().optional() })
|
|
269
|
-
.optional(),
|
|
270
|
-
}),
|
|
271
|
-
});
|
|
272
|
-
// PDF block
|
|
273
|
-
export const pdfBlockSchema = blockBaseSchema.extend({
|
|
274
|
-
type: z.literal("pdf"),
|
|
275
|
-
pdf: z.object({
|
|
276
|
-
caption: richTextSchema.optional(),
|
|
277
|
-
type: z.enum(["external", "file"]),
|
|
278
|
-
external: z.object({ url: z.string().url() }).optional(),
|
|
279
|
-
file: z
|
|
280
|
-
.object({ url: z.string(), expiry_time: z.string().optional() })
|
|
281
|
-
.optional(),
|
|
282
|
-
}),
|
|
283
|
-
});
|
|
284
|
-
// Bookmark block
|
|
285
|
-
export const bookmarkBlockSchema = blockBaseSchema.extend({
|
|
286
|
-
type: z.literal("bookmark"),
|
|
287
|
-
bookmark: z.object({
|
|
288
|
-
url: z.string().url(),
|
|
289
|
-
caption: richTextSchema.optional(),
|
|
290
|
-
}),
|
|
291
|
-
});
|
|
292
|
-
// Emoji schema
|
|
293
|
-
export const emojiSchema = z.enum([
|
|
294
|
-
"😀",
|
|
295
|
-
"😃",
|
|
296
|
-
"😄",
|
|
297
|
-
"😁",
|
|
298
|
-
"😆",
|
|
299
|
-
"😅",
|
|
300
|
-
"🤣",
|
|
301
|
-
"😂",
|
|
302
|
-
"🙂",
|
|
303
|
-
"🙃",
|
|
304
|
-
"🫠",
|
|
305
|
-
"😉",
|
|
306
|
-
"😊",
|
|
307
|
-
"😇",
|
|
308
|
-
"🥰",
|
|
309
|
-
"😍",
|
|
310
|
-
"🤩",
|
|
311
|
-
"😘",
|
|
312
|
-
"😗",
|
|
313
|
-
"☺️",
|
|
314
|
-
"☺",
|
|
315
|
-
"😚",
|
|
316
|
-
"😙",
|
|
317
|
-
"🥲",
|
|
318
|
-
"😋",
|
|
319
|
-
"😛",
|
|
320
|
-
"😜",
|
|
321
|
-
"🤪",
|
|
322
|
-
"😝",
|
|
323
|
-
"🤑",
|
|
324
|
-
"🤗",
|
|
325
|
-
"🤭",
|
|
326
|
-
"🫢",
|
|
327
|
-
"🫣",
|
|
328
|
-
"🤫",
|
|
329
|
-
"🤔",
|
|
330
|
-
"🫡",
|
|
331
|
-
"🤐",
|
|
332
|
-
"🤨",
|
|
333
|
-
"😐",
|
|
334
|
-
"😑",
|
|
335
|
-
"😶",
|
|
336
|
-
"🫥",
|
|
337
|
-
"😶🌫️",
|
|
338
|
-
"😶🌫",
|
|
339
|
-
"😏",
|
|
340
|
-
"😒",
|
|
341
|
-
"🙄",
|
|
342
|
-
"😬",
|
|
343
|
-
"😮💨",
|
|
344
|
-
"🤥",
|
|
345
|
-
"😌",
|
|
346
|
-
"😔",
|
|
347
|
-
"😪",
|
|
348
|
-
"🤤",
|
|
349
|
-
"😴",
|
|
350
|
-
"😷",
|
|
351
|
-
"🤒",
|
|
352
|
-
"🤕",
|
|
353
|
-
"🤢",
|
|
354
|
-
"🤮",
|
|
355
|
-
"🤧",
|
|
356
|
-
"🥵",
|
|
357
|
-
"🥶",
|
|
358
|
-
"🥴",
|
|
359
|
-
"😵",
|
|
360
|
-
"😵💫",
|
|
361
|
-
"🤯",
|
|
362
|
-
"🤠",
|
|
363
|
-
"🥳",
|
|
364
|
-
"🥸",
|
|
365
|
-
"😎",
|
|
366
|
-
"🤓",
|
|
367
|
-
"🧐",
|
|
368
|
-
"😕",
|
|
369
|
-
"🫤",
|
|
370
|
-
"😟",
|
|
371
|
-
"🙁",
|
|
372
|
-
"☹️",
|
|
373
|
-
"☹",
|
|
374
|
-
"😮",
|
|
375
|
-
"😯",
|
|
376
|
-
"😲",
|
|
377
|
-
"😳",
|
|
378
|
-
"🥺",
|
|
379
|
-
"🥹",
|
|
380
|
-
"😦",
|
|
381
|
-
"😧",
|
|
382
|
-
"😨",
|
|
383
|
-
"😰",
|
|
384
|
-
"😥",
|
|
385
|
-
"😢",
|
|
386
|
-
"😭",
|
|
387
|
-
"😱",
|
|
388
|
-
"😖",
|
|
389
|
-
"😣",
|
|
390
|
-
"😞",
|
|
391
|
-
"😓",
|
|
392
|
-
"😩",
|
|
393
|
-
"😫",
|
|
394
|
-
"🥱",
|
|
395
|
-
"😤",
|
|
396
|
-
"😡",
|
|
397
|
-
"😠",
|
|
398
|
-
"🤬",
|
|
399
|
-
"😈",
|
|
400
|
-
"👿",
|
|
401
|
-
"💀",
|
|
402
|
-
"☠️",
|
|
403
|
-
"☠",
|
|
404
|
-
"💩",
|
|
405
|
-
"🤡",
|
|
406
|
-
"👹",
|
|
407
|
-
"👺",
|
|
408
|
-
"👻",
|
|
409
|
-
"👽",
|
|
410
|
-
"👾",
|
|
411
|
-
"🤖",
|
|
412
|
-
"😺",
|
|
413
|
-
"😸",
|
|
414
|
-
"😹",
|
|
415
|
-
"😻",
|
|
416
|
-
"😼",
|
|
417
|
-
"😽",
|
|
418
|
-
"🙀",
|
|
419
|
-
"😿",
|
|
420
|
-
"😾",
|
|
421
|
-
"🙈",
|
|
422
|
-
"🙉",
|
|
423
|
-
"🙊",
|
|
424
|
-
]);
|
|
425
|
-
// Callout block
|
|
426
|
-
export const calloutBlockSchema = blockBaseSchema.extend({
|
|
427
|
-
type: z.literal("callout"),
|
|
428
|
-
callout: z.object({
|
|
429
|
-
rich_text: richTextSchema,
|
|
430
|
-
icon: z.union([
|
|
431
|
-
z.object({ type: z.literal("emoji"), emoji: emojiSchema }),
|
|
432
|
-
z.object({
|
|
433
|
-
type: z.literal("external"),
|
|
434
|
-
external: z.object({ url: z.string().url() }),
|
|
435
|
-
}),
|
|
436
|
-
z.object({
|
|
437
|
-
type: z.literal("file"),
|
|
438
|
-
file: z.object({ url: z.string(), expiry_time: z.string().optional() }),
|
|
439
|
-
}),
|
|
440
|
-
z.any(),
|
|
441
|
-
]),
|
|
442
|
-
color: colorSchema,
|
|
443
|
-
children: childrenSchema,
|
|
444
|
-
}),
|
|
445
|
-
});
|
|
446
|
-
// Quote block
|
|
447
|
-
export const quoteBlockSchema = blockBaseSchema.extend({
|
|
448
|
-
type: z.literal("quote"),
|
|
449
|
-
quote: z.object({
|
|
450
|
-
rich_text: richTextSchema,
|
|
451
|
-
color: colorSchema,
|
|
452
|
-
children: childrenSchema,
|
|
453
|
-
}),
|
|
454
|
-
});
|
|
455
|
-
// Divider block
|
|
456
|
-
export const dividerBlockSchema = blockBaseSchema.extend({
|
|
457
|
-
type: z.literal("divider"),
|
|
458
|
-
divider: z.object({}),
|
|
459
|
-
});
|
|
460
|
-
// Table of contents block
|
|
461
|
-
export const tableOfContentsBlockSchema = blockBaseSchema.extend({
|
|
462
|
-
type: z.literal("table_of_contents"),
|
|
463
|
-
table_of_contents: z.object({
|
|
464
|
-
color: colorSchema,
|
|
465
|
-
}),
|
|
466
|
-
});
|
|
467
|
-
// Breadcrumb block
|
|
468
|
-
export const breadcrumbBlockSchema = blockBaseSchema.extend({
|
|
469
|
-
type: z.literal("breadcrumb"),
|
|
470
|
-
breadcrumb: z.object({}),
|
|
471
|
-
});
|
|
472
|
-
// Column list and Column blocks
|
|
473
|
-
export const columnBlockSchema = blockBaseSchema.extend({
|
|
474
|
-
type: z.literal("column"),
|
|
475
|
-
column: z.object({
|
|
476
|
-
children: childrenSchema,
|
|
477
|
-
}),
|
|
478
|
-
});
|
|
479
|
-
export const columnListBlockSchema = blockBaseSchema.extend({
|
|
480
|
-
type: z.literal("column_list"),
|
|
481
|
-
column_list: z.object({
|
|
482
|
-
children: z.array(columnBlockSchema),
|
|
483
|
-
}),
|
|
484
|
-
});
|
|
485
|
-
// Link preview block
|
|
486
|
-
export const linkPreviewBlockSchema = blockBaseSchema.extend({
|
|
487
|
-
type: z.literal("link_preview"),
|
|
488
|
-
link_preview: z.object({
|
|
489
|
-
url: z.string().url(),
|
|
490
|
-
}),
|
|
491
|
-
});
|
|
492
|
-
// Template block
|
|
493
|
-
export const templateBlockSchema = blockBaseSchema.extend({
|
|
494
|
-
type: z.literal("template"),
|
|
495
|
-
template: z.object({
|
|
496
|
-
rich_text: richTextSchema,
|
|
497
|
-
children: childrenSchema,
|
|
498
|
-
}),
|
|
499
|
-
});
|
|
500
|
-
// Synced block
|
|
501
|
-
export const syncedBlockSchema = blockBaseSchema.extend({
|
|
502
|
-
type: z.literal("synced_block"),
|
|
503
|
-
synced_block: z.object({
|
|
504
|
-
synced_from: z
|
|
505
|
-
.object({
|
|
506
|
-
type: z.literal("block_id"),
|
|
507
|
-
block_id: z.string(),
|
|
508
|
-
})
|
|
509
|
-
.optional(),
|
|
510
|
-
children: childrenSchema,
|
|
511
|
-
}),
|
|
512
|
-
});
|
|
513
|
-
// Table block and row
|
|
514
|
-
export const tableRowBlockSchema = blockBaseSchema.extend({
|
|
515
|
-
type: z.literal("table_row"),
|
|
516
|
-
table_row: z.object({
|
|
517
|
-
cells: z.array(richTextSchema),
|
|
518
|
-
}),
|
|
519
|
-
});
|
|
520
|
-
export const tableBlockSchema = blockBaseSchema.extend({
|
|
521
|
-
type: z.literal("table"),
|
|
522
|
-
table: z.object({
|
|
523
|
-
table_width: z.number(),
|
|
524
|
-
has_column_header: z.boolean().optional(),
|
|
525
|
-
has_row_header: z.boolean().optional(),
|
|
526
|
-
children: z.array(tableRowBlockSchema),
|
|
527
|
-
}),
|
|
528
|
-
});
|
|
529
|
-
// Equation block
|
|
530
|
-
export const equationBlockSchema = blockBaseSchema.extend({
|
|
531
|
-
type: z.literal("equation"),
|
|
532
|
-
equation: z.object({
|
|
533
|
-
expression: z.string(),
|
|
534
|
-
}),
|
|
535
|
-
});
|
|
536
|
-
// The comprehensive block schema that combines all block types
|
|
537
|
-
export const blockSchema = z.discriminatedUnion("type", [
|
|
538
|
-
paragraphBlockSchema,
|
|
539
|
-
heading1BlockSchema,
|
|
540
|
-
heading2BlockSchema,
|
|
541
|
-
heading3BlockSchema,
|
|
542
|
-
bulletedListItemBlockSchema,
|
|
543
|
-
numberedListItemBlockSchema,
|
|
544
|
-
todoBlockSchema,
|
|
545
|
-
toggleBlockSchema,
|
|
546
|
-
codeBlockSchema,
|
|
547
|
-
childPageBlockSchema,
|
|
548
|
-
childDatabaseBlockSchema,
|
|
549
|
-
embedBlockSchema,
|
|
550
|
-
imageBlockSchema,
|
|
551
|
-
videoBlockSchema,
|
|
552
|
-
fileBlockSchema,
|
|
553
|
-
pdfBlockSchema,
|
|
554
|
-
bookmarkBlockSchema,
|
|
555
|
-
calloutBlockSchema,
|
|
556
|
-
quoteBlockSchema,
|
|
557
|
-
dividerBlockSchema,
|
|
558
|
-
tableOfContentsBlockSchema,
|
|
559
|
-
breadcrumbBlockSchema,
|
|
560
|
-
columnBlockSchema,
|
|
561
|
-
columnListBlockSchema,
|
|
562
|
-
linkPreviewBlockSchema,
|
|
563
|
-
templateBlockSchema,
|
|
564
|
-
syncedBlockSchema,
|
|
565
|
-
tableBlockSchema,
|
|
566
|
-
tableRowBlockSchema,
|
|
567
|
-
equationBlockSchema,
|
|
568
|
-
]);
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { richTextSchema } from "./richText.js";
|
|
3
|
-
export const parentSchema = z
|
|
4
|
-
.object({
|
|
5
|
-
type: z.enum(["page_id", "database_id"]),
|
|
6
|
-
page_id: z.string().optional(),
|
|
7
|
-
database_id: z.string().optional(),
|
|
8
|
-
})
|
|
9
|
-
.refine((data) => {
|
|
10
|
-
if (data.type === "page_id" && !data.page_id)
|
|
11
|
-
return false;
|
|
12
|
-
if (data.type === "database_id" && !data.database_id)
|
|
13
|
-
return false;
|
|
14
|
-
return true;
|
|
15
|
-
}, {
|
|
16
|
-
message: "page_id must be provided when type is page_id, database_id must be provided when type is database_id",
|
|
17
|
-
});
|
|
18
|
-
export const pageParentPropertiesSchema = z.object({
|
|
19
|
-
title: z.object({
|
|
20
|
-
title: richTextSchema,
|
|
21
|
-
}),
|
|
22
|
-
});
|
|
23
|
-
export const databaseParentPropertiesSchema = z.record(z.string(), z.union([
|
|
24
|
-
z.object({ title: richTextSchema }),
|
|
25
|
-
z.object({ rich_text: richTextSchema }),
|
|
26
|
-
z.object({ number: z.number().optional().nullable() }),
|
|
27
|
-
z.object({ select: z.object({ name: z.string() }).optional().nullable() }),
|
|
28
|
-
z.object({
|
|
29
|
-
multi_select: z.array(z.object({ name: z.string() })).optional(),
|
|
30
|
-
}),
|
|
31
|
-
z.object({
|
|
32
|
-
date: z
|
|
33
|
-
.object({
|
|
34
|
-
start: z.string(),
|
|
35
|
-
end: z.string().optional(),
|
|
36
|
-
time_zone: z.string().optional(),
|
|
37
|
-
})
|
|
38
|
-
.optional()
|
|
39
|
-
.nullable(),
|
|
40
|
-
}),
|
|
41
|
-
z.object({ checkbox: z.boolean().optional() }),
|
|
42
|
-
z.object({ url: z.string().url().optional().nullable() }),
|
|
43
|
-
z.object({ email: z.string().email().optional().nullable() }),
|
|
44
|
-
z.object({ phone_number: z.string().optional().nullable() }),
|
|
45
|
-
]));
|
|
46
|
-
export const blockSchema = z
|
|
47
|
-
.object({
|
|
48
|
-
object: z.literal("block"),
|
|
49
|
-
type: z.string(),
|
|
50
|
-
})
|
|
51
|
-
.and(z.record(z.string(), z.any()));
|