@crowi/api-contract 2.0.0-alpha.10 → 2.0.0-alpha.11

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/dist/index.js CHANGED
@@ -23,6 +23,13 @@ __export(index_exports, {
23
23
  ALL_CAPABILITIES: () => ALL_CAPABILITIES,
24
24
  ALL_SCOPES: () => ALL_SCOPES,
25
25
  API_SURFACE_VERSION: () => API_SURFACE_VERSION,
26
+ AST_INPUT_LIMIT_BYTES: () => AST_INPUT_LIMIT_BYTES,
27
+ AST_MAX_HAST_DEPTH: () => AST_MAX_HAST_DEPTH,
28
+ AST_MAX_IMAGE_BASE64_CHARS: () => AST_MAX_IMAGE_BASE64_CHARS,
29
+ AST_MAX_TREE_DEPTH: () => AST_MAX_TREE_DEPTH,
30
+ AST_MAX_VALUE_CHARS: () => AST_MAX_VALUE_CHARS,
31
+ AST_OUTPUT_BUDGET_BYTES: () => AST_OUTPUT_BUDGET_BYTES,
32
+ AST_OUTPUT_WARN_BYTES: () => AST_OUTPUT_WARN_BYTES,
26
33
  AccessTokenSchema: () => AccessTokenSchema,
27
34
  ActivateRequestSchema: () => ActivateRequestSchema,
28
35
  ActivateValidationResponseSchema: () => ActivateValidationResponseSchema,
@@ -59,6 +66,7 @@ __export(index_exports, {
59
66
  BacklinkSchema: () => BacklinkSchema,
60
67
  BookmarkResponseSchema: () => BookmarkResponseSchema,
61
68
  BookmarkSchema: () => BookmarkSchema,
69
+ CURRENT_AST_VERSION: () => CURRENT_AST_VERSION,
62
70
  CapabilitySchema: () => CapabilitySchema,
63
71
  ClaimPageLinkAccessResponseSchema: () => ClaimPageLinkAccessResponseSchema,
64
72
  ClearRenderCacheResponseSchema: () => ClearRenderCacheResponseSchema,
@@ -81,10 +89,21 @@ __export(index_exports, {
81
89
  CreateDraftRequestSchema: () => CreateDraftRequestSchema,
82
90
  CreateDraftResponseSchema: () => CreateDraftResponseSchema,
83
91
  CreatePageRequestSchema: () => CreatePageRequestSchema,
92
+ CrowiCodeSidecarSchema: () => CrowiCodeSidecarSchema,
93
+ CrowiDiagramNodeSchema: () => CrowiDiagramNodeSchema,
94
+ CrowiDiagramSidecarSchema: () => CrowiDiagramSidecarSchema,
95
+ CrowiDimensionSchema: () => CrowiDimensionSchema,
96
+ CrowiImagePayloadSchema: () => CrowiImagePayloadSchema,
97
+ CrowiLinkCardNodeSchema: () => CrowiLinkCardNodeSchema,
98
+ CrowiLinkCardSidecarSchema: () => CrowiLinkCardSidecarSchema,
99
+ CrowiMathSidecarSchema: () => CrowiMathSidecarSchema,
100
+ CrowiOpaqueNodeSchema: () => CrowiOpaqueNodeSchema,
101
+ CrowiPlaceholderKindSchema: () => CrowiPlaceholderKindSchema,
102
+ CrowiPlaceholderNodeSchema: () => CrowiPlaceholderNodeSchema,
103
+ CrowiPlaceholderSidecarSchema: () => CrowiPlaceholderSidecarSchema,
84
104
  CryptoStatusResponseSchema: () => CryptoStatusResponseSchema,
85
105
  DEVICE_CODE_GRANT_TYPE: () => DEVICE_CODE_GRANT_TYPE,
86
106
  DISCOVERY_SCOPES_SUPPORTED: () => DISCOVERY_SCOPES_SUPPORTED,
87
- DND_EXTRA_UPLOAD_MIME: () => DND_EXTRA_UPLOAD_MIME,
88
107
  DYNAMIC_CAPABILITIES: () => DYNAMIC_CAPABILITIES,
89
108
  DeleteAdminUserResponseSchema: () => DeleteAdminUserResponseSchema,
90
109
  DeleteCommentRequestSchema: () => DeleteCommentRequestSchema,
@@ -125,7 +144,11 @@ __export(index_exports, {
125
144
  GetSeenUsersRequestSchema: () => GetSeenUsersRequestSchema,
126
145
  GetStorageStatusResponseSchema: () => GetStorageStatusResponseSchema,
127
146
  GetWatchStatusRequestSchema: () => GetWatchStatusRequestSchema,
128
- IMAGE_UPLOAD_MIME: () => IMAGE_UPLOAD_MIME,
147
+ HChildSchema: () => HChildSchema,
148
+ HChildrenSchema: () => HChildrenSchema,
149
+ HNameSchema: () => HNameSchema,
150
+ HPropertiesSchema: () => HPropertiesSchema,
151
+ HastHintDataSchema: () => HastHintDataSchema,
129
152
  ISSUABLE_SCOPES: () => ISSUABLE_SCOPES,
130
153
  InstallerStatusResponseSchema: () => InstallerStatusResponseSchema,
131
154
  InsufficientScopeErrorSchema: () => InsufficientScopeErrorSchema,
@@ -160,6 +183,7 @@ __export(index_exports, {
160
183
  ListRevisionsResponseSchema: () => ListRevisionsResponseSchema,
161
184
  ListUsersRequestSchema: () => ListUsersRequestSchema,
162
185
  ListUsersResponseSchema: () => ListUsersResponseSchema,
186
+ LooseRenderedAstRootSchema: () => LooseRenderedAstRootSchema,
163
187
  MailSettingsValidationErrorSchema: () => MailSettingsValidationErrorSchema,
164
188
  MailTokenPayloadSchema: () => MailTokenPayloadSchema,
165
189
  MailTokenPurposeSchema: () => MailTokenPurposeSchema,
@@ -223,6 +247,7 @@ __export(index_exports, {
223
247
  PreviewPageRequestSchema: () => PreviewPageRequestSchema,
224
248
  PreviewPageResponseSchema: () => PreviewPageResponseSchema,
225
249
  ProfileErrorResponseSchema: () => ProfileErrorResponseSchema,
250
+ RENDERED_AST_NODE_DEFS: () => RENDERED_AST_NODE_DEFS,
226
251
  RecentlyViewedPagesResponseSchema: () => RecentlyViewedPagesResponseSchema,
227
252
  ReencryptResponseSchema: () => ReencryptResponseSchema,
228
253
  RefreshTokenRequestSchema: () => RefreshTokenRequestSchema,
@@ -236,6 +261,13 @@ __export(index_exports, {
236
261
  RenameSubtreeRequestSchema: () => RenameSubtreeRequestSchema,
237
262
  RenameSubtreeResponseSchema: () => RenameSubtreeResponseSchema,
238
263
  RenameTreeErrorSchema: () => RenameTreeErrorSchema,
264
+ RenderedAstArtifactKeySchema: () => RenderedAstArtifactKeySchema,
265
+ RenderedAstEnvelopeOpenApiSchema: () => RenderedAstEnvelopeOpenApiSchema,
266
+ RenderedAstEnvelopeSchema: () => RenderedAstEnvelopeSchema,
267
+ RenderedAstNodeSchema: () => RenderedAstNodeSchema,
268
+ RenderedAstRootSchema: () => RenderedAstRootSchema,
269
+ RenderedAstValueSchema: () => RenderedAstValueSchema,
270
+ ReservationSchema: () => ReservationSchema,
239
271
  ResetPasswordRequestSchema: () => ResetPasswordRequestSchema,
240
272
  ResetPasswordResponseSchema: () => ResetPasswordResponseSchema,
241
273
  RevertToRevisionRequestSchema: () => RevertToRevisionRequestSchema,
@@ -247,6 +279,7 @@ __export(index_exports, {
247
279
  RevokeRequestSchema: () => RevokeRequestSchema,
248
280
  RevokeResponseSchema: () => RevokeResponseSchema,
249
281
  SCOPES: () => SCOPES,
282
+ SIDECAR_KEYS: () => SIDECAR_KEYS,
250
283
  STATIC_CAPABILITIES: () => STATIC_CAPABILITIES,
251
284
  STRIP_KNOWN_HTML_TAGS_MAX_LENGTH: () => STRIP_KNOWN_HTML_TAGS_MAX_LENGTH,
252
285
  SearchAdminUsersByEmailRequestSchema: () => SearchAdminUsersByEmailRequestSchema,
@@ -266,6 +299,9 @@ __export(index_exports, {
266
299
  ServiceUnavailableErrorSchema: () => ServiceUnavailableErrorSchema,
267
300
  SetPageGrantRequestSchema: () => SetPageGrantRequestSchema,
268
301
  SetWatchStatusRequestSchema: () => SetWatchStatusRequestSchema,
302
+ ShikiTokenLinesSchema: () => ShikiTokenLinesSchema,
303
+ ShikiTokenSchema: () => ShikiTokenSchema,
304
+ ShikiTokenStyleSchema: () => ShikiTokenStyleSchema,
269
305
  StorageDriverEntrySchema: () => StorageDriverEntrySchema,
270
306
  SuccessResponseSchema: () => SuccessResponseSchema,
271
307
  ThemeSchema: () => ThemeSchema,
@@ -278,6 +314,7 @@ __export(index_exports, {
278
314
  TokenAuthResponseSchema: () => TokenAuthResponseSchema,
279
315
  TokenRequestSchema: () => TokenRequestSchema,
280
316
  TokenResponseSchema: () => TokenResponseSchema,
317
+ UPLOAD_ALLOWED_MIME: () => UPLOAD_ALLOWED_MIME,
281
318
  UpdateAdminUserEmailRequestSchema: () => UpdateAdminUserEmailRequestSchema,
282
319
  UpdateAppSettingsRequestSchema: () => UpdateAppSettingsRequestSchema,
283
320
  UpdateAppSettingsResponseSchema: () => UpdateAppSettingsResponseSchema,
@@ -459,6 +496,7 @@ __export(index_exports, {
459
496
  tokenRegisterRoute: () => tokenRegisterRoute,
460
497
  tokenRoute: () => tokenRoute,
461
498
  unlikePageRoute: () => unlikePageRoute,
499
+ unwrapRenderedAst: () => unwrapRenderedAst,
462
500
  updateAppSettingsRoute: () => updateAppSettingsRoute,
463
501
  updateAuthSettingsRoute: () => updateAuthSettingsRoute,
464
502
  updateMailSettingsRoute: () => updateMailSettingsRoute,
@@ -479,7 +517,7 @@ __export(index_exports, {
479
517
  module.exports = __toCommonJS(index_exports);
480
518
 
481
519
  // src/client.ts
482
- var import_zod_openapi73 = require("@hono/zod-openapi");
520
+ var import_zod_openapi74 = require("@hono/zod-openapi");
483
521
  var import_client = require("hono/client");
484
522
 
485
523
  // src/contracts/admin/app.ts
@@ -2202,14 +2240,51 @@ var UploadAttachmentResponseSchema = import_zod_openapi24.z.object({
2202
2240
  mimeType: import_zod_openapi24.z.string(),
2203
2241
  sizeBytes: import_zod_openapi24.z.number()
2204
2242
  });
2205
- var UploadAttachmentErrorCodeSchema = import_zod_openapi24.z.enum(["too_large", "disallowed_type", "rate_limited", "no_permission"]);
2243
+ var UploadAttachmentErrorCodeSchema = import_zod_openapi24.z.enum(["too_large", "disallowed_type", "DISALLOWED_MIME", "rate_limited", "no_permission"]);
2206
2244
  var UploadAttachmentErrorSchema = import_zod_openapi24.z.object({
2207
2245
  error: UploadAttachmentErrorCodeSchema,
2208
2246
  message: import_zod_openapi24.z.string(),
2209
2247
  details: import_zod_openapi24.z.record(import_zod_openapi24.z.string(), import_zod_openapi24.z.unknown()).optional()
2210
2248
  });
2211
- var IMAGE_UPLOAD_MIME = ["image/png", "image/jpeg", "image/gif", "image/webp", "image/svg+xml"];
2212
- var DND_EXTRA_UPLOAD_MIME = ["application/pdf", "text/plain", "text/markdown", "text/csv", "application/zip"];
2249
+ var UPLOAD_ALLOWED_MIME = [
2250
+ // Raster + vector images.
2251
+ "image/png",
2252
+ "image/jpeg",
2253
+ "image/gif",
2254
+ "image/webp",
2255
+ "image/svg+xml",
2256
+ "image/bmp",
2257
+ "image/avif",
2258
+ "image/apng",
2259
+ "image/x-icon",
2260
+ // Documents / text.
2261
+ "application/pdf",
2262
+ "text/plain",
2263
+ "text/markdown",
2264
+ "text/csv",
2265
+ "application/json",
2266
+ "application/xml",
2267
+ "text/html",
2268
+ // Office documents.
2269
+ "application/msword",
2270
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
2271
+ "application/vnd.ms-excel",
2272
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
2273
+ "application/vnd.ms-powerpoint",
2274
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
2275
+ // Archives.
2276
+ "application/zip",
2277
+ "application/gzip",
2278
+ "application/x-tar",
2279
+ // Audio / video.
2280
+ "audio/mpeg",
2281
+ "audio/wav",
2282
+ "video/mp4",
2283
+ "video/webm",
2284
+ "video/quicktime",
2285
+ // Unknown / unset — see the note above.
2286
+ "application/octet-stream"
2287
+ ];
2213
2288
 
2214
2289
  // src/contracts/attachment.ts
2215
2290
  var PageIdPathParamsSchema = import_zod_openapi25.z.object({
@@ -2291,6 +2366,10 @@ var addAttachmentRoute = (0, import_zod_openapi25.createRoute)({
2291
2366
  description: "Request body exceeds the multipart envelope ceiling",
2292
2367
  content: { "application/json": { schema: AttachmentErrorSchema } }
2293
2368
  },
2369
+ 415: {
2370
+ description: "MIME type not in the unified upload allow-list (feature-attachment-upload-policy)",
2371
+ content: { "application/json": { schema: AttachmentErrorSchema } }
2372
+ },
2294
2373
  500: {
2295
2374
  description: "Upload / storage failure",
2296
2375
  content: { "application/json": { schema: AttachmentErrorSchema } }
@@ -2394,7 +2473,7 @@ var uploadAttachmentRoute = (0, import_zod_openapi25.createRoute)({
2394
2473
  content: { "application/json": { schema: UploadAttachmentErrorSchema } }
2395
2474
  },
2396
2475
  415: {
2397
- description: "MIME type not in the per-intent allow-list",
2476
+ description: "MIME type not in the unified upload allow-list (feature-attachment-upload-policy)",
2398
2477
  content: { "application/json": { schema: UploadAttachmentErrorSchema } }
2399
2478
  },
2400
2479
  429: {
@@ -2555,7 +2634,7 @@ var autocompleteRoutes = {
2555
2634
  };
2556
2635
 
2557
2636
  // src/contracts/backlink.ts
2558
- var import_zod_openapi31 = require("@hono/zod-openapi");
2637
+ var import_zod_openapi32 = require("@hono/zod-openapi");
2559
2638
 
2560
2639
  // src/schemas/backlink.ts
2561
2640
  var import_zod_openapi28 = require("@hono/zod-openapi");
@@ -2589,7 +2668,7 @@ var GetBacklinksResponseSchema = import_zod_openapi28.z.object({
2589
2668
  });
2590
2669
 
2591
2670
  // src/schemas/page.ts
2592
- var import_zod_openapi30 = require("@hono/zod-openapi");
2671
+ var import_zod_openapi31 = require("@hono/zod-openapi");
2593
2672
 
2594
2673
  // src/schemas/collab.ts
2595
2674
  var import_zod_openapi29 = require("@hono/zod-openapi");
@@ -2627,15 +2706,341 @@ var CollabForceReloadMessageSchema = import_zod_openapi29.z.object({
2627
2706
  reason: import_zod_openapi29.z.string().optional()
2628
2707
  });
2629
2708
 
2709
+ // src/schemas/rendered-ast.ts
2710
+ var import_zod_openapi30 = require("@hono/zod-openapi");
2711
+ var CURRENT_AST_VERSION = 1;
2712
+ var AST_INPUT_LIMIT_BYTES = 8 * 1024 * 1024;
2713
+ var AST_OUTPUT_WARN_BYTES = 512 * 1024;
2714
+ var AST_OUTPUT_BUDGET_BYTES = 2 * 1024 * 1024;
2715
+ var AST_MAX_TREE_DEPTH = 64;
2716
+ var AST_MAX_HAST_DEPTH = 16;
2717
+ var AST_MAX_IMAGE_BASE64_CHARS = 14e4;
2718
+ var AST_MAX_VALUE_CHARS = 2e5;
2719
+ var HPropertyValueSchema = import_zod_openapi30.z.union([
2720
+ import_zod_openapi30.z.string().max(4096),
2721
+ import_zod_openapi30.z.number(),
2722
+ import_zod_openapi30.z.boolean(),
2723
+ import_zod_openapi30.z.array(import_zod_openapi30.z.union([import_zod_openapi30.z.string().max(4096), import_zod_openapi30.z.number()])).max(64)
2724
+ // className etc.
2725
+ ]);
2726
+ var HPropertiesSchema = import_zod_openapi30.z.object({
2727
+ id: import_zod_openapi30.z.string().max(256).optional(),
2728
+ className: import_zod_openapi30.z.union([import_zod_openapi30.z.string().max(4096), import_zod_openapi30.z.array(import_zod_openapi30.z.string().max(256)).max(64)]).optional(),
2729
+ role: import_zod_openapi30.z.string().max(64).optional(),
2730
+ ariaLabel: import_zod_openapi30.z.string().max(256).optional(),
2731
+ "data-source-line": import_zod_openapi30.z.union([import_zod_openapi30.z.string().max(32), import_zod_openapi30.z.number()]).optional(),
2732
+ "data-crowi-image-align": import_zod_openapi30.z.string().max(16).optional(),
2733
+ "data-crowi-image-float": import_zod_openapi30.z.string().max(16).optional(),
2734
+ "data-crowi-image-width": import_zod_openapi30.z.string().max(16).optional(),
2735
+ "data-crowi-image-height": import_zod_openapi30.z.string().max(16).optional()
2736
+ }).catchall(HPropertyValueSchema);
2737
+ var HChildSchema = import_zod_openapi30.z.lazy(
2738
+ () => import_zod_openapi30.z.discriminatedUnion("type", [
2739
+ import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("raw"), value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS) }),
2740
+ import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("text"), value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS) }),
2741
+ import_zod_openapi30.z.object({
2742
+ type: import_zod_openapi30.z.literal("element"),
2743
+ tagName: import_zod_openapi30.z.string().max(32).regex(/^[a-zA-Z][a-zA-Z0-9-]*$/),
2744
+ properties: HPropertiesSchema.optional(),
2745
+ children: import_zod_openapi30.z.array(HChildSchema)
2746
+ })
2747
+ ])
2748
+ );
2749
+ var HChildrenSchema = import_zod_openapi30.z.array(HChildSchema).max(256);
2750
+ var HNameSchema = import_zod_openapi30.z.string().max(32).regex(/^[a-zA-Z][a-zA-Z0-9-]*$/);
2751
+ var HastHintDataSchema = import_zod_openapi30.z.object({
2752
+ hName: HNameSchema.optional(),
2753
+ hProperties: HPropertiesSchema.optional(),
2754
+ hChildren: HChildrenSchema.optional()
2755
+ });
2756
+ var CrowiDimensionSchema = import_zod_openapi30.z.number().int().min(1).max(16384);
2757
+ var CrowiImagePayloadSchema = import_zod_openapi30.z.object({
2758
+ mediaType: import_zod_openapi30.z.enum(["image/svg+xml", "image/png"]),
2759
+ base64: import_zod_openapi30.z.string().max(AST_MAX_IMAGE_BASE64_CHARS),
2760
+ /** Intrinsic dimensions — required (parent spec §3). Producers that cannot derive them fall back to html-only. */
2761
+ width: CrowiDimensionSchema,
2762
+ height: CrowiDimensionSchema
2763
+ });
2764
+ var ShikiTokenStyleSchema = import_zod_openapi30.z.object({
2765
+ color: import_zod_openapi30.z.string().max(32),
2766
+ bgColor: import_zod_openapi30.z.string().max(32).optional(),
2767
+ fontStyle: import_zod_openapi30.z.array(import_zod_openapi30.z.enum(["italic", "bold", "underline", "strikethrough"])).max(4).optional()
2768
+ });
2769
+ var ShikiTokenSchema = import_zod_openapi30.z.object({
2770
+ content: import_zod_openapi30.z.string().max(4096),
2771
+ light: ShikiTokenStyleSchema,
2772
+ dark: ShikiTokenStyleSchema
2773
+ });
2774
+ var ShikiTokenLinesSchema = import_zod_openapi30.z.array(import_zod_openapi30.z.array(ShikiTokenSchema)).max(2e4);
2775
+ var CrowiCodeSidecarSchema = import_zod_openapi30.z.object({
2776
+ lang: import_zod_openapi30.z.string().max(64).optional(),
2777
+ value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS),
2778
+ /** Lines of themed tokens (light/dark both, `defaultColor: false`). */
2779
+ tokens: ShikiTokenLinesSchema
2780
+ });
2781
+ var CrowiMathSidecarSchema = import_zod_openapi30.z.object({
2782
+ tex: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS),
2783
+ display: import_zod_openapi30.z.boolean()
2784
+ });
2785
+ var CrowiDiagramSidecarSchema = import_zod_openapi30.z.object({
2786
+ kind: import_zod_openapi30.z.enum(["mermaid", "plantuml"]),
2787
+ /** Mermaid's closed-enum diagram-type keyword (flowchart / sequence / ...). */
2788
+ diagramType: import_zod_openapi30.z.string().max(32).optional(),
2789
+ alt: import_zod_openapi30.z.string().max(256),
2790
+ image: CrowiImagePayloadSchema
2791
+ });
2792
+ var CrowiLinkCardSidecarSchema = import_zod_openapi30.z.object({
2793
+ url: import_zod_openapi30.z.string().max(4096),
2794
+ title: import_zod_openapi30.z.string().max(512).optional(),
2795
+ description: import_zod_openapi30.z.string().max(2048).optional(),
2796
+ /** OGP image stays an external URL (never inlined server-side — parent spec §10). */
2797
+ image: import_zod_openapi30.z.object({ url: import_zod_openapi30.z.string().max(4096) }).optional(),
2798
+ siteName: import_zod_openapi30.z.string().max(256).optional(),
2799
+ domain: import_zod_openapi30.z.string().max(256).optional()
2800
+ });
2801
+ var CrowiPlaceholderKindSchema = import_zod_openapi30.z.enum([
2802
+ "error-auth",
2803
+ "error-rate-limit",
2804
+ "error-not-found",
2805
+ "error-network",
2806
+ "error-timeout",
2807
+ "error-unknown",
2808
+ "error-blocked",
2809
+ "error-busy",
2810
+ "size-limit-entry",
2811
+ "size-limit-page",
2812
+ "dispatch-limit",
2813
+ "validation-failed",
2814
+ "envelope-invalid"
2815
+ ]);
2816
+ var ReservationSchema = import_zod_openapi30.z.discriminatedUnion("variant", [
2817
+ import_zod_openapi30.z.object({ variant: import_zod_openapi30.z.literal("fixed"), widthPx: import_zod_openapi30.z.number().optional(), heightPx: import_zod_openapi30.z.number() }),
2818
+ import_zod_openapi30.z.object({ variant: import_zod_openapi30.z.literal("aspect"), aspectRatio: import_zod_openapi30.z.number() }),
2819
+ import_zod_openapi30.z.object({ variant: import_zod_openapi30.z.literal("card"), size: import_zod_openapi30.z.enum(["small", "medium", "large"]) })
2820
+ ]);
2821
+ var CrowiPlaceholderSidecarSchema = import_zod_openapi30.z.object({
2822
+ kind: CrowiPlaceholderKindSchema,
2823
+ label: import_zod_openapi30.z.string().max(512),
2824
+ reservation: ReservationSchema
2825
+ });
2826
+ var SIDECAR_KEYS = ["crowiCode", "crowiMath", "crowiDiagram", "crowiLinkCard", "crowiPlaceholder"];
2827
+ var noFields = import_zod_openapi30.z.object({});
2828
+ var headingFields = import_zod_openapi30.z.object({ depth: import_zod_openapi30.z.number().int().min(1).max(6) });
2829
+ var valueFields = import_zod_openapi30.z.object({ value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS) });
2830
+ var codeFields = import_zod_openapi30.z.object({
2831
+ value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS),
2832
+ lang: import_zod_openapi30.z.string().max(64).nullable().optional(),
2833
+ meta: import_zod_openapi30.z.string().max(1024).nullable().optional()
2834
+ });
2835
+ var mathFields = import_zod_openapi30.z.object({
2836
+ value: import_zod_openapi30.z.string().max(AST_MAX_VALUE_CHARS),
2837
+ meta: import_zod_openapi30.z.string().max(1024).nullable().optional()
2838
+ });
2839
+ var listFields = import_zod_openapi30.z.object({
2840
+ ordered: import_zod_openapi30.z.boolean().nullable().optional(),
2841
+ start: import_zod_openapi30.z.number().int().nullable().optional(),
2842
+ spread: import_zod_openapi30.z.boolean().nullable().optional()
2843
+ });
2844
+ var listItemFields = import_zod_openapi30.z.object({
2845
+ checked: import_zod_openapi30.z.boolean().nullable().optional(),
2846
+ spread: import_zod_openapi30.z.boolean().nullable().optional()
2847
+ });
2848
+ var linkFields = import_zod_openapi30.z.object({
2849
+ url: import_zod_openapi30.z.string().max(4096),
2850
+ title: import_zod_openapi30.z.string().max(512).nullable().optional()
2851
+ });
2852
+ var imageFields = import_zod_openapi30.z.object({
2853
+ url: import_zod_openapi30.z.string().max(4096),
2854
+ alt: import_zod_openapi30.z.string().max(1024).nullable().optional(),
2855
+ title: import_zod_openapi30.z.string().max(512).nullable().optional()
2856
+ });
2857
+ var tableFields = import_zod_openapi30.z.object({
2858
+ align: import_zod_openapi30.z.array(import_zod_openapi30.z.enum(["left", "right", "center"]).nullable()).max(256).nullable().optional()
2859
+ });
2860
+ var definitionFields = import_zod_openapi30.z.object({
2861
+ identifier: import_zod_openapi30.z.string().max(256),
2862
+ url: import_zod_openapi30.z.string().max(4096),
2863
+ label: import_zod_openapi30.z.string().max(256).optional(),
2864
+ title: import_zod_openapi30.z.string().max(512).nullable().optional()
2865
+ });
2866
+ var footnoteDefinitionFields = import_zod_openapi30.z.object({
2867
+ identifier: import_zod_openapi30.z.string().max(256),
2868
+ label: import_zod_openapi30.z.string().max(256).optional()
2869
+ });
2870
+ var footnoteReferenceFields = footnoteDefinitionFields;
2871
+ var referenceTypeSchema = import_zod_openapi30.z.enum(["shortcut", "collapsed", "full"]);
2872
+ var linkReferenceFields = import_zod_openapi30.z.object({
2873
+ identifier: import_zod_openapi30.z.string().max(256),
2874
+ referenceType: referenceTypeSchema,
2875
+ label: import_zod_openapi30.z.string().max(256).optional()
2876
+ });
2877
+ var imageReferenceFields = import_zod_openapi30.z.object({
2878
+ identifier: import_zod_openapi30.z.string().max(256),
2879
+ referenceType: referenceTypeSchema,
2880
+ label: import_zod_openapi30.z.string().max(256).optional(),
2881
+ alt: import_zod_openapi30.z.string().max(1024).nullable().optional()
2882
+ });
2883
+ var crowiOpaqueFields = import_zod_openapi30.z.object({
2884
+ reason: import_zod_openapi30.z.enum(["unknown-type", "invalid-shape", "invalid-position"]),
2885
+ /** Best-effort diagnostics only — never a rendering hint. Truncated to 64 chars before assignment. */
2886
+ originalType: import_zod_openapi30.z.string().max(64).optional()
2887
+ });
2888
+ var RENDERED_AST_NODE_DEFS = {
2889
+ root: { placement: "flow", childModel: "flow", fields: noFields },
2890
+ paragraph: { placement: "flow", childModel: "phrasing", fields: noFields },
2891
+ heading: { placement: "flow", childModel: "phrasing", fields: headingFields },
2892
+ thematicBreak: { placement: "flow", childModel: "none", fields: noFields },
2893
+ blockquote: { placement: "flow", childModel: "flow", fields: noFields },
2894
+ list: { placement: "flow", childModel: "listItems", fields: listFields },
2895
+ listItem: { placement: "listItems", childModel: "flow", fields: listItemFields },
2896
+ html: { placement: "both", childModel: "none", fields: valueFields },
2897
+ code: { placement: "flow", childModel: "none", fields: codeFields },
2898
+ inlineCode: { placement: "phrasing", childModel: "none", fields: valueFields },
2899
+ math: { placement: "flow", childModel: "none", fields: mathFields },
2900
+ inlineMath: { placement: "phrasing", childModel: "none", fields: mathFields },
2901
+ text: { placement: "phrasing", childModel: "none", fields: valueFields },
2902
+ strong: { placement: "phrasing", childModel: "phrasing", fields: noFields },
2903
+ emphasis: { placement: "phrasing", childModel: "phrasing", fields: noFields },
2904
+ delete: { placement: "phrasing", childModel: "phrasing", fields: noFields },
2905
+ break: { placement: "phrasing", childModel: "none", fields: noFields },
2906
+ link: { placement: "phrasing", childModel: "phrasing", fields: linkFields },
2907
+ image: { placement: "phrasing", childModel: "none", fields: imageFields },
2908
+ table: { placement: "flow", childModel: "tableRows", fields: tableFields },
2909
+ tableRow: { placement: "tableRows", childModel: "tableCells", fields: noFields },
2910
+ tableCell: { placement: "tableCells", childModel: "phrasing", fields: noFields },
2911
+ definition: { placement: "flow", childModel: "none", fields: definitionFields },
2912
+ footnoteDefinition: { placement: "flow", childModel: "flow", fields: footnoteDefinitionFields },
2913
+ footnoteReference: { placement: "phrasing", childModel: "none", fields: footnoteReferenceFields },
2914
+ linkReference: { placement: "phrasing", childModel: "phrasing", fields: linkReferenceFields },
2915
+ imageReference: { placement: "phrasing", childModel: "none", fields: imageReferenceFields },
2916
+ // Crowi-owned types. `crowiFigure` is the only one that also appears
2917
+ // in stored ASTs; the other three only exist as projection outputs
2918
+ // (or as defensively-validated plugin-injected nodes).
2919
+ crowiFigure: { placement: "flow", childModel: "phrasing", fields: noFields },
2920
+ crowiDiagram: { placement: "flow", childModel: "none", fields: CrowiDiagramSidecarSchema },
2921
+ crowiLinkCard: { placement: "flow", childModel: "none", fields: CrowiLinkCardSidecarSchema },
2922
+ crowiPlaceholder: { placement: "both", childModel: "none", fields: CrowiPlaceholderSidecarSchema },
2923
+ crowiOpaque: { placement: "both", childModel: "none", fields: crowiOpaqueFields }
2924
+ };
2925
+ var RenderedAstNodeSchema = import_zod_openapi30.z.lazy(
2926
+ () => import_zod_openapi30.z.discriminatedUnion("type", [
2927
+ RootNodeSchema,
2928
+ ParagraphNodeSchema,
2929
+ HeadingNodeSchema,
2930
+ ThematicBreakNodeSchema,
2931
+ BlockquoteNodeSchema,
2932
+ ListNodeSchema,
2933
+ ListItemNodeSchema,
2934
+ HtmlNodeSchema,
2935
+ CodeNodeSchema,
2936
+ InlineCodeNodeSchema,
2937
+ MathNodeSchema,
2938
+ InlineMathNodeSchema,
2939
+ TextNodeSchema,
2940
+ StrongNodeSchema,
2941
+ EmphasisNodeSchema,
2942
+ DeleteNodeSchema,
2943
+ BreakNodeSchema,
2944
+ LinkNodeSchema,
2945
+ ImageNodeSchema,
2946
+ TableNodeSchema,
2947
+ TableRowNodeSchema,
2948
+ TableCellNodeSchema,
2949
+ DefinitionNodeSchema,
2950
+ FootnoteDefinitionNodeSchema,
2951
+ FootnoteReferenceNodeSchema,
2952
+ LinkReferenceNodeSchema,
2953
+ ImageReferenceNodeSchema,
2954
+ CrowiFigureNodeSchema,
2955
+ CrowiDiagramNodeSchema,
2956
+ CrowiLinkCardNodeSchema,
2957
+ CrowiPlaceholderNodeSchema,
2958
+ CrowiOpaqueNodeSchema
2959
+ ])
2960
+ );
2961
+ var childrenSchema = import_zod_openapi30.z.array(RenderedAstNodeSchema);
2962
+ var dataSchema = HastHintDataSchema.optional();
2963
+ var RootNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("root"), data: dataSchema, children: childrenSchema });
2964
+ var ParagraphNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("paragraph"), data: dataSchema, children: childrenSchema });
2965
+ var HeadingNodeSchema = headingFields.extend({ type: import_zod_openapi30.z.literal("heading"), data: dataSchema, children: childrenSchema });
2966
+ var ThematicBreakNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("thematicBreak"), data: dataSchema });
2967
+ var BlockquoteNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("blockquote"), data: dataSchema, children: childrenSchema });
2968
+ var ListNodeSchema = listFields.extend({ type: import_zod_openapi30.z.literal("list"), data: dataSchema, children: childrenSchema });
2969
+ var ListItemNodeSchema = listItemFields.extend({ type: import_zod_openapi30.z.literal("listItem"), data: dataSchema, children: childrenSchema });
2970
+ var HtmlNodeSchema = valueFields.extend({ type: import_zod_openapi30.z.literal("html"), data: dataSchema });
2971
+ var CodeDataSchema = HastHintDataSchema.extend({
2972
+ renderPending: import_zod_openapi30.z.boolean().optional(),
2973
+ tokens: ShikiTokenLinesSchema.optional()
2974
+ }).optional();
2975
+ var CodeNodeSchema = codeFields.extend({ type: import_zod_openapi30.z.literal("code"), data: CodeDataSchema });
2976
+ var InlineCodeNodeSchema = valueFields.extend({ type: import_zod_openapi30.z.literal("inlineCode"), data: dataSchema });
2977
+ var MathNodeSchema = mathFields.extend({ type: import_zod_openapi30.z.literal("math"), data: dataSchema });
2978
+ var InlineMathNodeSchema = mathFields.extend({ type: import_zod_openapi30.z.literal("inlineMath"), data: dataSchema });
2979
+ var TextNodeSchema = valueFields.extend({ type: import_zod_openapi30.z.literal("text"), data: dataSchema });
2980
+ var StrongNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("strong"), data: dataSchema, children: childrenSchema });
2981
+ var EmphasisNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("emphasis"), data: dataSchema, children: childrenSchema });
2982
+ var DeleteNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("delete"), data: dataSchema, children: childrenSchema });
2983
+ var BreakNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("break"), data: dataSchema });
2984
+ var LinkNodeSchema = linkFields.extend({ type: import_zod_openapi30.z.literal("link"), data: dataSchema, children: childrenSchema });
2985
+ var ImageNodeSchema = imageFields.extend({ type: import_zod_openapi30.z.literal("image"), data: dataSchema });
2986
+ var TableNodeSchema = tableFields.extend({ type: import_zod_openapi30.z.literal("table"), data: dataSchema, children: childrenSchema });
2987
+ var TableRowNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("tableRow"), data: dataSchema, children: childrenSchema });
2988
+ var TableCellNodeSchema = import_zod_openapi30.z.object({ type: import_zod_openapi30.z.literal("tableCell"), data: dataSchema, children: childrenSchema });
2989
+ var DefinitionNodeSchema = definitionFields.extend({ type: import_zod_openapi30.z.literal("definition"), data: dataSchema });
2990
+ var FootnoteDefinitionNodeSchema = footnoteDefinitionFields.extend({
2991
+ type: import_zod_openapi30.z.literal("footnoteDefinition"),
2992
+ data: dataSchema,
2993
+ children: childrenSchema
2994
+ });
2995
+ var FootnoteReferenceNodeSchema = footnoteReferenceFields.extend({ type: import_zod_openapi30.z.literal("footnoteReference"), data: dataSchema });
2996
+ var LinkReferenceNodeSchema = linkReferenceFields.extend({ type: import_zod_openapi30.z.literal("linkReference"), data: dataSchema, children: childrenSchema });
2997
+ var ImageReferenceNodeSchema = imageReferenceFields.extend({ type: import_zod_openapi30.z.literal("imageReference"), data: dataSchema });
2998
+ var CrowiFigureNodeSchema = import_zod_openapi30.z.object({
2999
+ type: import_zod_openapi30.z.literal("crowiFigure"),
3000
+ data: HastHintDataSchema.extend({ hName: import_zod_openapi30.z.literal("figure"), hProperties: HPropertiesSchema }),
3001
+ children: childrenSchema
3002
+ });
3003
+ var CrowiDiagramNodeSchema = CrowiDiagramSidecarSchema.extend({ type: import_zod_openapi30.z.literal("crowiDiagram"), data: dataSchema });
3004
+ var CrowiLinkCardNodeSchema = CrowiLinkCardSidecarSchema.extend({ type: import_zod_openapi30.z.literal("crowiLinkCard"), data: dataSchema });
3005
+ var CrowiPlaceholderNodeSchema = CrowiPlaceholderSidecarSchema.extend({ type: import_zod_openapi30.z.literal("crowiPlaceholder"), data: dataSchema });
3006
+ var CrowiOpaqueNodeSchema = crowiOpaqueFields.extend({ type: import_zod_openapi30.z.literal("crowiOpaque"), data: dataSchema });
3007
+ var RenderedAstRootSchema = RootNodeSchema;
3008
+ var RenderedAstEnvelopeSchema = import_zod_openapi30.z.object({
3009
+ astVersion: import_zod_openapi30.z.literal(CURRENT_AST_VERSION),
3010
+ root: RenderedAstRootSchema
3011
+ });
3012
+ var RenderedAstEnvelopeOpenApiSchema = import_zod_openapi30.z.object({
3013
+ astVersion: import_zod_openapi30.z.literal(CURRENT_AST_VERSION),
3014
+ root: import_zod_openapi30.z.unknown()
3015
+ }).openapi("RenderedAstEnvelope");
3016
+ var LooseRenderedAstRootSchema = import_zod_openapi30.z.object({
3017
+ type: import_zod_openapi30.z.literal("root"),
3018
+ children: import_zod_openapi30.z.array(import_zod_openapi30.z.unknown())
3019
+ }).openapi("LegacyRenderedAstRoot");
3020
+ var RenderedAstValueSchema = import_zod_openapi30.z.union([RenderedAstEnvelopeOpenApiSchema, LooseRenderedAstRootSchema]);
3021
+ var RenderedAstArtifactKeySchema = import_zod_openapi30.z.string().max(64);
3022
+ function unwrapRenderedAst(value) {
3023
+ if (value === void 0 || value === null) return void 0;
3024
+ if (typeof value !== "object") return void 0;
3025
+ if (value.astVersion === CURRENT_AST_VERSION) {
3026
+ const root = value.root;
3027
+ return root === null ? void 0 : root;
3028
+ }
3029
+ if (value.type === "root" && Array.isArray(value.children)) {
3030
+ return value;
3031
+ }
3032
+ return void 0;
3033
+ }
3034
+
2630
3035
  // src/schemas/page.ts
2631
- var PageGrantSchema = import_zod_openapi30.z.enum(["1", "2", "3", "4"]).transform((val) => Number(val));
3036
+ var PageGrantSchema = import_zod_openapi31.z.enum(["1", "2", "3", "4"]).transform((val) => Number(val));
2632
3037
  var PageGrantEnum = {
2633
3038
  PUBLIC: 1,
2634
3039
  RESTRICTED: 2,
2635
3040
  SPECIFIED: 3,
2636
3041
  OWNER: 4
2637
3042
  };
2638
- var PageStatusSchema = import_zod_openapi30.z.enum(["wip", "published", "deleted", "deprecated", "draft"]);
3043
+ var PageStatusSchema = import_zod_openapi31.z.enum(["wip", "published", "deleted", "deprecated", "draft"]);
2639
3044
  var PageStatusEnum = {
2640
3045
  WIP: "wip",
2641
3046
  PUBLISHED: "published",
@@ -2643,43 +3048,43 @@ var PageStatusEnum = {
2643
3048
  DEPRECATED: "deprecated",
2644
3049
  DRAFT: "draft"
2645
3050
  };
2646
- var PageTypeSchema = import_zod_openapi30.z.enum(["portal", "user", "public"]);
3051
+ var PageTypeSchema = import_zod_openapi31.z.enum(["portal", "user", "public"]);
2647
3052
  var PageTypeEnum = {
2648
3053
  PORTAL: "portal",
2649
3054
  USER: "user",
2650
3055
  PUBLIC: "public"
2651
3056
  };
2652
- var PageUserSchema = import_zod_openapi30.z.object({
2653
- _id: import_zod_openapi30.z.string(),
2654
- id: import_zod_openapi30.z.string().optional(),
3057
+ var PageUserSchema = import_zod_openapi31.z.object({
3058
+ _id: import_zod_openapi31.z.string(),
3059
+ id: import_zod_openapi31.z.string().optional(),
2655
3060
  // for compatibility
2656
- username: import_zod_openapi30.z.string(),
2657
- name: import_zod_openapi30.z.string(),
2658
- email: import_zod_openapi30.z.string().email(),
2659
- image: import_zod_openapi30.z.string().nullable().optional(),
2660
- createdAt: import_zod_openapi30.z.string()
2661
- });
2662
- var TocEntrySchema = import_zod_openapi30.z.object({
2663
- level: import_zod_openapi30.z.number().int().min(1).max(6),
2664
- text: import_zod_openapi30.z.string(),
2665
- anchorId: import_zod_openapi30.z.string()
2666
- });
2667
- var WikiLinkSchema = import_zod_openapi30.z.object({
3061
+ username: import_zod_openapi31.z.string(),
3062
+ name: import_zod_openapi31.z.string(),
3063
+ email: import_zod_openapi31.z.string().email(),
3064
+ image: import_zod_openapi31.z.string().nullable().optional(),
3065
+ createdAt: import_zod_openapi31.z.string()
3066
+ });
3067
+ var TocEntrySchema = import_zod_openapi31.z.object({
3068
+ level: import_zod_openapi31.z.number().int().min(1).max(6),
3069
+ text: import_zod_openapi31.z.string(),
3070
+ anchorId: import_zod_openapi31.z.string()
3071
+ });
3072
+ var WikiLinkSchema = import_zod_openapi31.z.object({
2668
3073
  /** Verbatim source between the `[[` `]]` (no surrounding brackets). */
2669
- raw: import_zod_openapi30.z.string(),
3074
+ raw: import_zod_openapi31.z.string(),
2670
3075
  /** Normalised target (left of the `|`, fragment trimmed for resolution). */
2671
- target: import_zod_openapi30.z.string(),
3076
+ target: import_zod_openapi31.z.string(),
2672
3077
  /** Optional pipe-aliased display text (right of the `|`). */
2673
- displayText: import_zod_openapi30.z.string().optional()
3078
+ displayText: import_zod_openapi31.z.string().optional()
2674
3079
  });
2675
- var MentionSchema = import_zod_openapi30.z.object({
2676
- username: import_zod_openapi30.z.string()
3080
+ var MentionSchema = import_zod_openapi31.z.object({
3081
+ username: import_zod_openapi31.z.string()
2677
3082
  });
2678
- var RevisionMetaSchemaShape = import_zod_openapi30.z.object({
2679
- toc: import_zod_openapi30.z.array(TocEntrySchema).optional(),
2680
- wikiLinks: import_zod_openapi30.z.array(WikiLinkSchema).optional(),
2681
- mentions: import_zod_openapi30.z.array(MentionSchema).optional(),
2682
- codeBlockLanguages: import_zod_openapi30.z.array(import_zod_openapi30.z.string()).optional(),
3083
+ var RevisionMetaSchemaShape = import_zod_openapi31.z.object({
3084
+ toc: import_zod_openapi31.z.array(TocEntrySchema).optional(),
3085
+ wikiLinks: import_zod_openapi31.z.array(WikiLinkSchema).optional(),
3086
+ mentions: import_zod_openapi31.z.array(MentionSchema).optional(),
3087
+ codeBlockLanguages: import_zod_openapi31.z.array(import_zod_openapi31.z.string()).optional(),
2683
3088
  // feature-backlink-raw-space-metadata: raw destinations recovered by
2684
3089
  // `renderer/core/raw-space-links.ts` (`[label](/a b)` — a raw-space
2685
3090
  // absolute path CommonMark itself rejects as a link). Verbatim, NOT
@@ -2687,58 +3092,66 @@ var RevisionMetaSchemaShape = import_zod_openapi30.z.object({
2687
3092
  // `stripFragmentAndQuery` -> `decodeLinkPath` pipeline the regex-based
2688
3093
  // extraction path uses. Mirrors `wikiLinks` above: pushed by the core
2689
3094
  // transform into `PipelineMetadata`, persisted verbatim on `revision.meta`.
2690
- rawSpaceLinks: import_zod_openapi30.z.array(import_zod_openapi30.z.string()).optional()
3095
+ rawSpaceLinks: import_zod_openapi31.z.array(import_zod_openapi31.z.string()).optional()
2691
3096
  });
2692
- var RevisionSchema = import_zod_openapi30.z.object({
2693
- _id: import_zod_openapi30.z.string(),
2694
- path: import_zod_openapi30.z.string(),
2695
- body: import_zod_openapi30.z.string(),
2696
- format: import_zod_openapi30.z.string().default("markdown"),
3097
+ var RevisionSchema = import_zod_openapi31.z.object({
3098
+ _id: import_zod_openapi31.z.string(),
3099
+ path: import_zod_openapi31.z.string(),
3100
+ body: import_zod_openapi31.z.string(),
3101
+ format: import_zod_openapi31.z.string().default("markdown"),
2697
3102
  author: PageUserSchema.nullable().optional(),
2698
- createdAt: import_zod_openapi30.z.string(),
3103
+ createdAt: import_zod_openapi31.z.string(),
2699
3104
  meta: RevisionMetaSchemaShape.optional(),
2700
- // RFC-0002 Phase 3: transformed mdast (parse + core plugins +
2701
- // shiki) for the web client to render without re-parsing the body.
2702
- // Typed as opaque `unknown` because mdast is too deep / external-
2703
- // spec to maintain a strict Zod schema for. Only single-page detail
2704
- // (`getPage`) and single-revision detail (`getRevision`) emit it;
2705
- // list endpoints skip it for payload weight.
2706
- renderedAst: import_zod_openapi30.z.unknown().optional(),
3105
+ // RFC-0002 Phase 3 / RFC-0023: transformed mdast. Requests that
3106
+ // declare `X-Crowi-Ast-Version: 1` receive the typed envelope
3107
+ // (`{astVersion, root}`); everyone else (including the web,
3108
+ // permanently) receives the stored bare mdast `Root` verbatim and
3109
+ // unvalidated see `schemas/rendered-ast.ts` for the full contract.
3110
+ // Only single-page detail (`getPage`), the listPages portal document
3111
+ // and single-revision detail (`getRevision`) emit it; list rows skip
3112
+ // it for payload weight.
3113
+ renderedAst: RenderedAstValueSchema.optional(),
3114
+ // RFC-0023 (design doc §14): identity of the served AST artifact —
3115
+ // `rendererVersion` for a verbatim stored AST, a per-response nonce
3116
+ // when the served tree differs from the stored one (pending-marker
3117
+ // retry / freshness-mismatch recompute). The web render memo keys on
3118
+ // `[revisionId, renderedAstArtifactKey]`.
3119
+ renderedAstArtifactKey: RenderedAstArtifactKeySchema.optional(),
2707
3120
  // RFC-0002 round 3.1: semver of the renderer pipeline that produced
2708
3121
  // `renderedAst`. The read path uses this to detect stale entries
2709
3122
  // (rebuilt by `renderer:rebuild` once RFC-0008 lands). Absent on
2710
3123
  // revisions saved before this field was introduced.
2711
- rendererVersion: import_zod_openapi30.z.string().optional(),
3124
+ rendererVersion: import_zod_openapi31.z.string().optional(),
2712
3125
  // RFC-0003 collaborative-save fields. All optional; v1.x revisions
2713
3126
  // emit none of them. See `packages/api/src/models/revision.ts` for
2714
3127
  // semantics. The list-page endpoint currently does not surface
2715
3128
  // these — they only appear on the Phase 5+ checkpoint Revisions
2716
3129
  // produced by Hocuspocus and on the single-revision detail route.
2717
- parentRevisionId: import_zod_openapi30.z.string().nullable().optional(),
3130
+ parentRevisionId: import_zod_openapi31.z.string().nullable().optional(),
2718
3131
  type: RevisionTypeSchema.optional(),
2719
- savedBy: import_zod_openapi30.z.union([import_zod_openapi30.z.string(), PageUserSchema]).nullable().optional(),
2720
- contributors: import_zod_openapi30.z.array(import_zod_openapi30.z.union([import_zod_openapi30.z.string(), PageUserSchema])).optional(),
2721
- message: import_zod_openapi30.z.string().optional(),
3132
+ savedBy: import_zod_openapi31.z.union([import_zod_openapi31.z.string(), PageUserSchema]).nullable().optional(),
3133
+ contributors: import_zod_openapi31.z.array(import_zod_openapi31.z.union([import_zod_openapi31.z.string(), PageUserSchema])).optional(),
3134
+ message: import_zod_openapi31.z.string().optional(),
2722
3135
  // RFC-0010 — edit channel ('web' | 'oauth' | 'pat'); absent on
2723
3136
  // pre-RFC-0010 / collaborative / browser revisions.
2724
- editVia: import_zod_openapi30.z.enum(["web", "oauth", "pat"]).optional()
2725
- });
2726
- var PageExtendedSchema = import_zod_openapi30.z.record(import_zod_openapi30.z.string(), import_zod_openapi30.z.any()).optional();
2727
- var PageSchema = import_zod_openapi30.z.object({
2728
- _id: import_zod_openapi30.z.string(),
2729
- path: import_zod_openapi30.z.string(),
2730
- revision: import_zod_openapi30.z.union([import_zod_openapi30.z.string(), RevisionSchema]).optional(),
2731
- redirectTo: import_zod_openapi30.z.string().nullable().optional(),
3137
+ editVia: import_zod_openapi31.z.enum(["web", "oauth", "pat"]).optional()
3138
+ });
3139
+ var PageExtendedSchema = import_zod_openapi31.z.record(import_zod_openapi31.z.string(), import_zod_openapi31.z.any()).optional();
3140
+ var PageSchema = import_zod_openapi31.z.object({
3141
+ _id: import_zod_openapi31.z.string(),
3142
+ path: import_zod_openapi31.z.string(),
3143
+ revision: import_zod_openapi31.z.union([import_zod_openapi31.z.string(), RevisionSchema]).optional(),
3144
+ redirectTo: import_zod_openapi31.z.string().nullable().optional(),
2732
3145
  status: PageStatusSchema.nullable().optional(),
2733
- grant: import_zod_openapi30.z.number().optional(),
2734
- grantedUsers: import_zod_openapi30.z.array(import_zod_openapi30.z.string()).optional(),
2735
- creator: import_zod_openapi30.z.union([import_zod_openapi30.z.string(), PageUserSchema]).nullable().optional(),
2736
- lastUpdateUser: import_zod_openapi30.z.union([import_zod_openapi30.z.string(), PageUserSchema]).nullable().optional(),
2737
- liker: import_zod_openapi30.z.array(import_zod_openapi30.z.string()).optional(),
2738
- commentCount: import_zod_openapi30.z.number().default(0),
3146
+ grant: import_zod_openapi31.z.number().optional(),
3147
+ grantedUsers: import_zod_openapi31.z.array(import_zod_openapi31.z.string()).optional(),
3148
+ creator: import_zod_openapi31.z.union([import_zod_openapi31.z.string(), PageUserSchema]).nullable().optional(),
3149
+ lastUpdateUser: import_zod_openapi31.z.union([import_zod_openapi31.z.string(), PageUserSchema]).nullable().optional(),
3150
+ liker: import_zod_openapi31.z.array(import_zod_openapi31.z.string()).optional(),
3151
+ commentCount: import_zod_openapi31.z.number().default(0),
2739
3152
  extended: PageExtendedSchema,
2740
- createdAt: import_zod_openapi30.z.string(),
2741
- updatedAt: import_zod_openapi30.z.string().optional(),
3153
+ createdAt: import_zod_openapi31.z.string(),
3154
+ updatedAt: import_zod_openapi31.z.string().optional(),
2742
3155
  // RFC-0003 collaborative-edit fields. All optional; `null` is the
2743
3156
  // "no live state yet" value. Existing read endpoints (list /
2744
3157
  // detail) do not currently emit these — the contract is widened
@@ -2746,32 +3159,32 @@ var PageSchema = import_zod_openapi30.z.object({
2746
3159
  // bump. `yjsState` is intentionally omitted from the contract:
2747
3160
  // the binary blob lives only inside Hocuspocus and never crosses
2748
3161
  // the HTTP API.
2749
- currentRevision: import_zod_openapi30.z.string().nullable().optional(),
2750
- yjsCheckpointAt: import_zod_openapi30.z.string().nullable().optional(),
3162
+ currentRevision: import_zod_openapi31.z.string().nullable().optional(),
3163
+ yjsCheckpointAt: import_zod_openapi31.z.string().nullable().optional(),
2751
3164
  // dynamic fields
2752
- latestRevision: import_zod_openapi30.z.string().optional(),
2753
- likerCount: import_zod_openapi30.z.number().optional(),
2754
- seenUsersCount: import_zod_openapi30.z.number().optional()
3165
+ latestRevision: import_zod_openapi31.z.string().optional(),
3166
+ likerCount: import_zod_openapi31.z.number().optional(),
3167
+ seenUsersCount: import_zod_openapi31.z.number().optional()
2755
3168
  });
2756
3169
  var PageWithRevisionSchema = PageSchema.extend({
2757
3170
  revision: RevisionSchema,
2758
3171
  creator: PageUserSchema.nullable().optional(),
2759
3172
  lastUpdateUser: PageUserSchema.nullable().optional()
2760
3173
  });
2761
- var GetPageRequestSchema = import_zod_openapi30.z.object({
2762
- path: import_zod_openapi30.z.string().optional(),
2763
- page_id: import_zod_openapi30.z.string().optional(),
2764
- revision_id: import_zod_openapi30.z.string().optional()
3174
+ var GetPageRequestSchema = import_zod_openapi31.z.object({
3175
+ path: import_zod_openapi31.z.string().optional(),
3176
+ page_id: import_zod_openapi31.z.string().optional(),
3177
+ revision_id: import_zod_openapi31.z.string().optional()
2765
3178
  });
2766
- var GetPageResponseSchema = import_zod_openapi30.z.object({
3179
+ var GetPageResponseSchema = import_zod_openapi31.z.object({
2767
3180
  page: PageWithRevisionSchema
2768
3181
  });
2769
- var ClaimPageLinkAccessResponseSchema = GetPageResponseSchema.extend({ granted: import_zod_openapi30.z.boolean() });
2770
- var ListPagesRequestSchema = import_zod_openapi30.z.object({
2771
- path: import_zod_openapi30.z.string().optional(),
2772
- user: import_zod_openapi30.z.string().optional(),
2773
- limit: import_zod_openapi30.z.coerce.number().optional().default(50),
2774
- offset: import_zod_openapi30.z.coerce.number().optional().default(0),
3182
+ var ClaimPageLinkAccessResponseSchema = GetPageResponseSchema.extend({ granted: import_zod_openapi31.z.boolean() });
3183
+ var ListPagesRequestSchema = import_zod_openapi31.z.object({
3184
+ path: import_zod_openapi31.z.string().optional(),
3185
+ user: import_zod_openapi31.z.string().optional(),
3186
+ limit: import_zod_openapi31.z.coerce.number().optional().default(50),
3187
+ offset: import_zod_openapi31.z.coerce.number().optional().default(0),
2775
3188
  // NOT `z.coerce.boolean()`: that uses JS `Boolean(v)`, so the string
2776
3189
  // `"false"` (which is how the web client serialises `false` on the
2777
3190
  // query string) coerces to `true`. That silently flipped
@@ -2779,25 +3192,25 @@ var ListPagesRequestSchema = import_zod_openapi30.z.object({
2779
3192
  // filter and leak other users' drafts. Parse the string explicitly so
2780
3193
  // only `"true"` / `true` is truthy; anything else (incl. `"false"`,
2781
3194
  // absent) is `false`.
2782
- include_deleted: import_zod_openapi30.z.preprocess((v) => v === true || v === "true" || v === "1", import_zod_openapi30.z.boolean()).optional().default(false),
3195
+ include_deleted: import_zod_openapi31.z.preprocess((v) => v === true || v === "true" || v === "1", import_zod_openapi31.z.boolean()).optional().default(false),
2783
3196
  // Sort field + direction for the listing. Defaults preserve the legacy
2784
3197
  // "newest-updated first" order so existing callers are unaffected.
2785
3198
  // `path` sorts alphabetically by full page path (≈ name order).
2786
- sort: import_zod_openapi30.z.enum(["updatedAt", "createdAt", "path"]).optional().default("updatedAt"),
2787
- order: import_zod_openapi30.z.enum(["asc", "desc"]).optional().default("desc"),
3199
+ sort: import_zod_openapi31.z.enum(["updatedAt", "createdAt", "path"]).optional().default("updatedAt"),
3200
+ order: import_zod_openapi31.z.enum(["asc", "desc"]).optional().default("desc"),
2788
3201
  // When listing a portal path (`/foo/`), open the portal document at this
2789
3202
  // past revision so the catch-all can mirror `?revision_id=` on portals.
2790
3203
  // Only the `portalPage` is rewound — the child rows always reflect the
2791
3204
  // latest. Absent for normal listings.
2792
- revision_id: import_zod_openapi30.z.string().optional()
3205
+ revision_id: import_zod_openapi31.z.string().optional()
2793
3206
  });
2794
- var PagerSchema = import_zod_openapi30.z.object({
2795
- prev: import_zod_openapi30.z.number().nullable(),
2796
- next: import_zod_openapi30.z.number().nullable(),
2797
- offset: import_zod_openapi30.z.number()
3207
+ var PagerSchema = import_zod_openapi31.z.object({
3208
+ prev: import_zod_openapi31.z.number().nullable(),
3209
+ next: import_zod_openapi31.z.number().nullable(),
3210
+ offset: import_zod_openapi31.z.number()
2798
3211
  });
2799
- var ListPagesResponseSchema = import_zod_openapi30.z.object({
2800
- pages: import_zod_openapi30.z.array(PageSchema),
3212
+ var ListPagesResponseSchema = import_zod_openapi31.z.object({
3213
+ pages: import_zod_openapi31.z.array(PageSchema),
2801
3214
  pager: PagerSchema,
2802
3215
  portalPage: PageSchema.nullable().optional(),
2803
3216
  // When listing a portal path (`/foo/`) that has NO portal document of
@@ -2807,148 +3220,155 @@ var ListPagesResponseSchema = import_zod_openapi30.z.object({
2807
3220
  // (feature-update-pages-list-ux §4). Mutually exclusive with `portalPage`
2808
3221
  // — only set when `portalPage` is null. Absent / null for ordinary
2809
3222
  // listings.
2810
- contentPage: PageSchema.nullable().optional()
2811
- });
2812
- var PageChildSegmentSchema = import_zod_openapi30.z.object({
3223
+ contentPage: PageSchema.nullable().optional(),
3224
+ // feature-profile-stats-and-page-total — the exact count of the viewer-
3225
+ // visible set `pages` pages from (i.e. matching `pages`' visibility
3226
+ // conditions, independent of `limit`/`offset`, and excluding whichever
3227
+ // ids `portalPage`/`contentPage` already removed from `pages`). Not part
3228
+ // of `PagerSchema` — mirrors `ListUsersResponseSchema.total`, a sibling
3229
+ // top-level field alongside `pager`.
3230
+ total: import_zod_openapi31.z.number()
3231
+ });
3232
+ var PageChildSegmentSchema = import_zod_openapi31.z.object({
2813
3233
  // The bare segment name immediately under the queried path
2814
3234
  // (e.g. 'rfc' for /crowi/rfc/... when querying /crowi/).
2815
- segment: import_zod_openapi30.z.string(),
3235
+ segment: import_zod_openapi31.z.string(),
2816
3236
  // Portal-style path for this segment (always trailing-slashed),
2817
3237
  // e.g. '/crowi/rfc/'. Drop the trailing slash for the page path when
2818
3238
  // the segment is a leaf page (see `isPage`).
2819
- path: import_zod_openapi30.z.string(),
3239
+ path: import_zod_openapi31.z.string(),
2820
3240
  // True when a real page is saved at the segment path itself
2821
3241
  // (e.g. `/crowi/rfc`, no trailing slash) — i.e. the segment is a
2822
3242
  // navigable page, not only an inferred directory.
2823
- isPage: import_zod_openapi30.z.boolean(),
3243
+ isPage: import_zod_openapi31.z.boolean(),
2824
3244
  // True when a real portal page is saved at `path` (→ compass icon).
2825
- hasPortal: import_zod_openapi30.z.boolean(),
3245
+ hasPortal: import_zod_openapi31.z.boolean(),
2826
3246
  // Number of descendant content pages strictly under this segment
2827
3247
  // (excludes the segment's own page / portal docs). A rough "how much
2828
3248
  // lives here" hint; > 0 means the segment is an expandable directory.
2829
- count: import_zod_openapi30.z.number(),
3249
+ count: import_zod_openapi31.z.number(),
2830
3250
  // ISO8601 timestamp of the segment's representative page: the segment's
2831
3251
  // own page when `isPage` is true, otherwise the most-recently-updated
2832
3252
  // descendant (including the portal doc itself). `null` when no
2833
3253
  // representative page's timestamp could be derived. Optional so
2834
3254
  // existing clients (web SidebarTree) that don't read it keep working
2835
3255
  // unchanged — additive contract extension, feature-child-segments-metadata.
2836
- lastUpdatedAt: import_zod_openapi30.z.string().nullable().optional(),
3256
+ lastUpdatedAt: import_zod_openapi31.z.string().nullable().optional(),
2837
3257
  // The representative page's last updater (same page as `lastUpdatedAt`
2838
3258
  // above). `null` when the updater can't be resolved (e.g. a deleted
2839
3259
  // user, or legacy rows predating `lastUpdateUser`).
2840
3260
  updater: PageUserSchema.nullable().optional()
2841
3261
  });
2842
- var ListPageChildrenRequestSchema = import_zod_openapi30.z.object({
3262
+ var ListPageChildrenRequestSchema = import_zod_openapi31.z.object({
2843
3263
  // Portal path to list children of. Trailing slash optional — the
2844
3264
  // handler normalises it. '/' lists the top-level segments.
2845
- path: import_zod_openapi30.z.string()
3265
+ path: import_zod_openapi31.z.string()
2846
3266
  });
2847
- var ListPageChildrenResponseSchema = import_zod_openapi30.z.object({
3267
+ var ListPageChildrenResponseSchema = import_zod_openapi31.z.object({
2848
3268
  // Sorted alphabetically by segment.
2849
- children: import_zod_openapi30.z.array(PageChildSegmentSchema)
2850
- });
2851
- var CreatePageRequestSchema = import_zod_openapi30.z.object({
2852
- path: import_zod_openapi30.z.string(),
2853
- body: import_zod_openapi30.z.string(),
2854
- grant: import_zod_openapi30.z.number().optional()
2855
- });
2856
- var UpdatePageRequestSchema = import_zod_openapi30.z.object({
2857
- page_id: import_zod_openapi30.z.string(),
2858
- body: import_zod_openapi30.z.string(),
2859
- revision_id: import_zod_openapi30.z.string().optional(),
2860
- grant: import_zod_openapi30.z.number().optional()
2861
- });
2862
- var RevertToRevisionRequestSchema = import_zod_openapi30.z.object({
2863
- page_id: import_zod_openapi30.z.string(),
2864
- revision_id: import_zod_openapi30.z.string()
2865
- });
2866
- var SetPageGrantRequestSchema = import_zod_openapi30.z.object({
2867
- page_id: import_zod_openapi30.z.string(),
2868
- grant: import_zod_openapi30.z.number().int()
2869
- });
2870
- var RenamePageRequestSchema = import_zod_openapi30.z.object({
2871
- page_id: import_zod_openapi30.z.string(),
2872
- new_path: import_zod_openapi30.z.string(),
2873
- revision_id: import_zod_openapi30.z.string().optional(),
2874
- create_redirect: import_zod_openapi30.z.boolean().optional(),
3269
+ children: import_zod_openapi31.z.array(PageChildSegmentSchema)
3270
+ });
3271
+ var CreatePageRequestSchema = import_zod_openapi31.z.object({
3272
+ path: import_zod_openapi31.z.string(),
3273
+ body: import_zod_openapi31.z.string(),
3274
+ grant: import_zod_openapi31.z.number().optional()
3275
+ });
3276
+ var UpdatePageRequestSchema = import_zod_openapi31.z.object({
3277
+ page_id: import_zod_openapi31.z.string(),
3278
+ body: import_zod_openapi31.z.string(),
3279
+ revision_id: import_zod_openapi31.z.string().optional(),
3280
+ grant: import_zod_openapi31.z.number().optional()
3281
+ });
3282
+ var RevertToRevisionRequestSchema = import_zod_openapi31.z.object({
3283
+ page_id: import_zod_openapi31.z.string(),
3284
+ revision_id: import_zod_openapi31.z.string()
3285
+ });
3286
+ var SetPageGrantRequestSchema = import_zod_openapi31.z.object({
3287
+ page_id: import_zod_openapi31.z.string(),
3288
+ grant: import_zod_openapi31.z.number().int()
3289
+ });
3290
+ var RenamePageRequestSchema = import_zod_openapi31.z.object({
3291
+ page_id: import_zod_openapi31.z.string(),
3292
+ new_path: import_zod_openapi31.z.string(),
3293
+ revision_id: import_zod_openapi31.z.string().optional(),
3294
+ create_redirect: import_zod_openapi31.z.boolean().optional(),
2875
3295
  // When true, rename the page together with its whole (grant-visible)
2876
3296
  // descendant subtree (renameTree) instead of just the single page.
2877
3297
  // Defaults to false — the single-page rename behaviour.
2878
- include_descendants: import_zod_openapi30.z.boolean().optional()
3298
+ include_descendants: import_zod_openapi31.z.boolean().optional()
2879
3299
  });
2880
- var RenamePageResponseSchema = import_zod_openapi30.z.object({
3300
+ var RenamePageResponseSchema = import_zod_openapi31.z.object({
2881
3301
  page: PageSchema,
2882
- renamed_count: import_zod_openapi30.z.number()
2883
- });
2884
- var RenameTreeErrorSchema = import_zod_openapi30.z.object({
2885
- error: import_zod_openapi30.z.object({
2886
- code: import_zod_openapi30.z.literal("PAGE_RENAME_TREE_FAILED"),
2887
- message: import_zod_openapi30.z.string(),
2888
- conflicts: import_zod_openapi30.z.array(
2889
- import_zod_openapi30.z.object({
2890
- path: import_zod_openapi30.z.string(),
2891
- reasons: import_zod_openapi30.z.array(import_zod_openapi30.z.string())
3302
+ renamed_count: import_zod_openapi31.z.number()
3303
+ });
3304
+ var RenameTreeErrorSchema = import_zod_openapi31.z.object({
3305
+ error: import_zod_openapi31.z.object({
3306
+ code: import_zod_openapi31.z.literal("PAGE_RENAME_TREE_FAILED"),
3307
+ message: import_zod_openapi31.z.string(),
3308
+ conflicts: import_zod_openapi31.z.array(
3309
+ import_zod_openapi31.z.object({
3310
+ path: import_zod_openapi31.z.string(),
3311
+ reasons: import_zod_openapi31.z.array(import_zod_openapi31.z.string())
2892
3312
  })
2893
3313
  ),
2894
3314
  // True when the failure happened after some pages were already moved
2895
3315
  // (non-transactional best-effort). When omitted/false the failure was
2896
3316
  // detected up-front and nothing was moved.
2897
- partial: import_zod_openapi30.z.boolean().optional()
3317
+ partial: import_zod_openapi31.z.boolean().optional()
2898
3318
  })
2899
3319
  });
2900
- var RenameSubtreeRequestSchema = import_zod_openapi30.z.object({
2901
- old_path: import_zod_openapi30.z.string(),
2902
- new_path: import_zod_openapi30.z.string(),
2903
- create_redirect: import_zod_openapi30.z.boolean().optional()
3320
+ var RenameSubtreeRequestSchema = import_zod_openapi31.z.object({
3321
+ old_path: import_zod_openapi31.z.string(),
3322
+ new_path: import_zod_openapi31.z.string(),
3323
+ create_redirect: import_zod_openapi31.z.boolean().optional()
2904
3324
  });
2905
- var RenameSubtreeResponseSchema = import_zod_openapi30.z.object({
2906
- renamed_count: import_zod_openapi30.z.number()
3325
+ var RenameSubtreeResponseSchema = import_zod_openapi31.z.object({
3326
+ renamed_count: import_zod_openapi31.z.number()
2907
3327
  });
2908
- var PageNotFoundErrorSchema = import_zod_openapi30.z.object({
2909
- error: import_zod_openapi30.z.object({
2910
- code: import_zod_openapi30.z.literal("PAGE_NOT_FOUND"),
2911
- message: import_zod_openapi30.z.literal("Page not found")
3328
+ var PageNotFoundErrorSchema = import_zod_openapi31.z.object({
3329
+ error: import_zod_openapi31.z.object({
3330
+ code: import_zod_openapi31.z.literal("PAGE_NOT_FOUND"),
3331
+ message: import_zod_openapi31.z.literal("Page not found")
2912
3332
  })
2913
3333
  });
2914
- var PageNotGrantedErrorSchema = import_zod_openapi30.z.object({
2915
- error: import_zod_openapi30.z.object({
2916
- code: import_zod_openapi30.z.literal("PAGE_NOT_GRANTED"),
2917
- message: import_zod_openapi30.z.literal("Page is not granted for the user")
3334
+ var PageNotGrantedErrorSchema = import_zod_openapi31.z.object({
3335
+ error: import_zod_openapi31.z.object({
3336
+ code: import_zod_openapi31.z.literal("PAGE_NOT_GRANTED"),
3337
+ message: import_zod_openapi31.z.literal("Page is not granted for the user")
2918
3338
  })
2919
3339
  });
2920
- var PageRevisionErrorSchema = import_zod_openapi30.z.object({
2921
- error: import_zod_openapi30.z.object({
2922
- code: import_zod_openapi30.z.literal("PAGE_REVISION_ERROR"),
2923
- message: import_zod_openapi30.z.string()
3340
+ var PageRevisionErrorSchema = import_zod_openapi31.z.object({
3341
+ error: import_zod_openapi31.z.object({
3342
+ code: import_zod_openapi31.z.literal("PAGE_REVISION_ERROR"),
3343
+ message: import_zod_openapi31.z.string()
2924
3344
  })
2925
3345
  });
2926
- var SeenPageRequestSchema = import_zod_openapi30.z.object({
2927
- page_id: import_zod_openapi30.z.string()
3346
+ var SeenPageRequestSchema = import_zod_openapi31.z.object({
3347
+ page_id: import_zod_openapi31.z.string()
2928
3348
  });
2929
- var SeenUsersResponseSchema = import_zod_openapi30.z.object({
2930
- seenUsers: import_zod_openapi30.z.array(UserPublicSchema),
2931
- seenUsersCount: import_zod_openapi30.z.number()
3349
+ var SeenUsersResponseSchema = import_zod_openapi31.z.object({
3350
+ seenUsers: import_zod_openapi31.z.array(UserPublicSchema),
3351
+ seenUsersCount: import_zod_openapi31.z.number()
2932
3352
  });
2933
- var GetSeenUsersRequestSchema = import_zod_openapi30.z.object({
2934
- page_id: import_zod_openapi30.z.string(),
3353
+ var GetSeenUsersRequestSchema = import_zod_openapi31.z.object({
3354
+ page_id: import_zod_openapi31.z.string(),
2935
3355
  // Optional cap on returned `seenUsers`. `seenUsersCount` always reflects
2936
3356
  // the full count regardless of `limit`. Omit for the full list.
2937
- limit: import_zod_openapi30.z.coerce.number().int().positive().optional()
3357
+ limit: import_zod_openapi31.z.coerce.number().int().positive().optional()
2938
3358
  });
2939
- var GetWatchStatusRequestSchema = import_zod_openapi30.z.object({
2940
- page_id: import_zod_openapi30.z.string()
3359
+ var GetWatchStatusRequestSchema = import_zod_openapi31.z.object({
3360
+ page_id: import_zod_openapi31.z.string()
2941
3361
  });
2942
- var WatchStatusResponseSchema = import_zod_openapi30.z.object({
2943
- watching: import_zod_openapi30.z.boolean()
3362
+ var WatchStatusResponseSchema = import_zod_openapi31.z.object({
3363
+ watching: import_zod_openapi31.z.boolean()
2944
3364
  });
2945
- var SetWatchStatusRequestSchema = import_zod_openapi30.z.object({
2946
- page_id: import_zod_openapi30.z.string(),
2947
- watching: import_zod_openapi30.z.boolean()
3365
+ var SetWatchStatusRequestSchema = import_zod_openapi31.z.object({
3366
+ page_id: import_zod_openapi31.z.string(),
3367
+ watching: import_zod_openapi31.z.boolean()
2948
3368
  });
2949
3369
 
2950
3370
  // src/contracts/backlink.ts
2951
- var getBacklinksRoute = (0, import_zod_openapi31.createRoute)({
3371
+ var getBacklinksRoute = (0, import_zod_openapi32.createRoute)({
2952
3372
  method: "get",
2953
3373
  path: "/backlinks",
2954
3374
  tags: ["backlink"],
@@ -2981,96 +3401,103 @@ var backlinkRoutes = {
2981
3401
  };
2982
3402
 
2983
3403
  // src/contracts/bookmark.ts
2984
- var import_zod_openapi34 = require("@hono/zod-openapi");
3404
+ var import_zod_openapi35 = require("@hono/zod-openapi");
2985
3405
 
2986
3406
  // src/schemas/bookmark.ts
2987
- var import_zod_openapi32 = require("@hono/zod-openapi");
2988
- var BookmarkSchema = import_zod_openapi32.z.object({
2989
- _id: import_zod_openapi32.z.string(),
3407
+ var import_zod_openapi33 = require("@hono/zod-openapi");
3408
+ var BookmarkSchema = import_zod_openapi33.z.object({
3409
+ _id: import_zod_openapi33.z.string(),
2990
3410
  page: PageSchema,
2991
- user: import_zod_openapi32.z.union([import_zod_openapi32.z.string(), UserPublicSchema]),
2992
- createdAt: import_zod_openapi32.z.string()
3411
+ user: import_zod_openapi33.z.union([import_zod_openapi33.z.string(), UserPublicSchema]),
3412
+ createdAt: import_zod_openapi33.z.string()
2993
3413
  });
2994
- var GetBookmarkRequestSchema = import_zod_openapi32.z.object({
2995
- page_id: import_zod_openapi32.z.string()
3414
+ var GetBookmarkRequestSchema = import_zod_openapi33.z.object({
3415
+ page_id: import_zod_openapi33.z.string()
2996
3416
  });
2997
- var BookmarkResponseSchema = import_zod_openapi32.z.object({
3417
+ var BookmarkResponseSchema = import_zod_openapi33.z.object({
2998
3418
  bookmark: BookmarkSchema.nullable()
2999
3419
  });
3000
- var ListMyBookmarksResponseSchema = import_zod_openapi32.z.object({
3001
- bookmarks: import_zod_openapi32.z.array(BookmarkSchema),
3420
+ var ListMyBookmarksResponseSchema = import_zod_openapi33.z.object({
3421
+ bookmarks: import_zod_openapi33.z.array(BookmarkSchema),
3002
3422
  pager: PagerSchema,
3003
- total: import_zod_openapi32.z.number()
3423
+ total: import_zod_openapi33.z.number()
3004
3424
  });
3005
- var AddBookmarkRequestSchema = import_zod_openapi32.z.object({
3006
- page_id: import_zod_openapi32.z.string()
3425
+ var AddBookmarkRequestSchema = import_zod_openapi33.z.object({
3426
+ page_id: import_zod_openapi33.z.string()
3007
3427
  });
3008
- var RemoveBookmarkRequestSchema = import_zod_openapi32.z.object({
3009
- page_id: import_zod_openapi32.z.string()
3428
+ var RemoveBookmarkRequestSchema = import_zod_openapi33.z.object({
3429
+ page_id: import_zod_openapi33.z.string()
3010
3430
  });
3011
- var RemoveBookmarkResponseSchema = import_zod_openapi32.z.object({
3012
- ok: import_zod_openapi32.z.literal(true)
3431
+ var RemoveBookmarkResponseSchema = import_zod_openapi33.z.object({
3432
+ ok: import_zod_openapi33.z.literal(true)
3013
3433
  });
3014
3434
 
3015
3435
  // src/schemas/user.ts
3016
- var import_zod_openapi33 = require("@hono/zod-openapi");
3017
- var UserStatusSchema = import_zod_openapi33.z.enum(["1", "2", "3", "4", "5"]).transform((val) => Number(val));
3436
+ var import_zod_openapi34 = require("@hono/zod-openapi");
3437
+ var UserStatusSchema = import_zod_openapi34.z.enum(["1", "2", "3", "4", "5"]).transform((val) => Number(val));
3018
3438
  var UserStatusEnum = UserPublicStatus;
3019
- var UserLanguageSchema = import_zod_openapi33.z.enum(["en", "ja"]);
3020
- var PaginationRequestSchema = import_zod_openapi33.z.object({
3021
- limit: import_zod_openapi33.z.coerce.number().optional().default(50),
3022
- offset: import_zod_openapi33.z.coerce.number().optional().default(0)
3023
- });
3024
- var UserListItemSchema = import_zod_openapi33.z.object({
3025
- _id: import_zod_openapi33.z.string(),
3026
- username: import_zod_openapi33.z.string(),
3027
- name: import_zod_openapi33.z.string(),
3028
- image: import_zod_openapi33.z.string().nullable().optional()
3029
- });
3030
- var ListUsersRequestSchema = import_zod_openapi33.z.object({
3031
- q: import_zod_openapi33.z.string().optional(),
3439
+ var UserLanguageSchema = import_zod_openapi34.z.enum(["en", "ja"]);
3440
+ var PaginationRequestSchema = import_zod_openapi34.z.object({
3441
+ limit: import_zod_openapi34.z.coerce.number().optional().default(50),
3442
+ offset: import_zod_openapi34.z.coerce.number().optional().default(0)
3443
+ });
3444
+ var UserListItemSchema = import_zod_openapi34.z.object({
3445
+ _id: import_zod_openapi34.z.string(),
3446
+ username: import_zod_openapi34.z.string(),
3447
+ name: import_zod_openapi34.z.string(),
3448
+ image: import_zod_openapi34.z.string().nullable().optional()
3449
+ });
3450
+ var ListUsersRequestSchema = import_zod_openapi34.z.object({
3451
+ q: import_zod_openapi34.z.string().optional(),
3032
3452
  // Cap the page size so a client can't request the whole user table in one
3033
3453
  // unbounded find+sort (mirrors the page-list `limit` guard).
3034
- limit: import_zod_openapi33.z.coerce.number().int().min(1).max(100).optional().default(24),
3035
- offset: import_zod_openapi33.z.coerce.number().int().min(0).optional().default(0)
3454
+ limit: import_zod_openapi34.z.coerce.number().int().min(1).max(100).optional().default(24),
3455
+ offset: import_zod_openapi34.z.coerce.number().int().min(0).optional().default(0)
3036
3456
  });
3037
- var UserSubpagesRequestSchema = import_zod_openapi33.z.object({
3038
- limit: import_zod_openapi33.z.coerce.number().int().min(1).max(50).optional().default(30),
3039
- offset: import_zod_openapi33.z.coerce.number().int().min(0).optional().default(0)
3457
+ var UserSubpagesRequestSchema = import_zod_openapi34.z.object({
3458
+ limit: import_zod_openapi34.z.coerce.number().int().min(1).max(50).optional().default(30),
3459
+ offset: import_zod_openapi34.z.coerce.number().int().min(0).optional().default(0)
3040
3460
  });
3041
- var ListUsersResponseSchema = import_zod_openapi33.z.object({
3042
- users: import_zod_openapi33.z.array(UserListItemSchema),
3461
+ var ListUsersResponseSchema = import_zod_openapi34.z.object({
3462
+ users: import_zod_openapi34.z.array(UserListItemSchema),
3043
3463
  pager: PagerSchema,
3044
- total: import_zod_openapi33.z.number()
3464
+ total: import_zod_openapi34.z.number()
3045
3465
  });
3046
- var UserPageResponseSchema = import_zod_openapi33.z.object({
3466
+ var UserPageResponseSchema = import_zod_openapi34.z.object({
3047
3467
  user: UserPublicSchema,
3048
3468
  // Page statistics
3049
- createdPagesCount: import_zod_openapi33.z.number(),
3050
- bookmarksCount: import_zod_openapi33.z.number(),
3469
+ createdPagesCount: import_zod_openapi34.z.number(),
3470
+ bookmarksCount: import_zod_openapi34.z.number(),
3471
+ // feature-profile-stats-and-page-total — the target user's OWN actions:
3472
+ // pages they liked (`Page.liker` contains their id) and comments they
3473
+ // wrote (`Comment.creator` is their id). NOT activity their own pages
3474
+ // received from others, and not re-filtered by the viewer's grants —
3475
+ // see the spec's "プロフィール統計の主語と API 契約" section.
3476
+ likesCount: import_zod_openapi34.z.number(),
3477
+ commentsCount: import_zod_openapi34.z.number(),
3051
3478
  // Optionally include recent items for initial display
3052
- recentPages: import_zod_openapi33.z.array(PageSchema).optional(),
3053
- recentBookmarks: import_zod_openapi33.z.array(BookmarkSchema).optional()
3479
+ recentPages: import_zod_openapi34.z.array(PageSchema).optional(),
3480
+ recentBookmarks: import_zod_openapi34.z.array(BookmarkSchema).optional()
3054
3481
  });
3055
- var UserBookmarksResponseSchema = import_zod_openapi33.z.object({
3056
- bookmarks: import_zod_openapi33.z.array(BookmarkSchema),
3482
+ var UserBookmarksResponseSchema = import_zod_openapi34.z.object({
3483
+ bookmarks: import_zod_openapi34.z.array(BookmarkSchema),
3057
3484
  pager: PagerSchema,
3058
- total: import_zod_openapi33.z.number()
3485
+ total: import_zod_openapi34.z.number()
3059
3486
  });
3060
- var UserPagesResponseSchema = import_zod_openapi33.z.object({
3061
- pages: import_zod_openapi33.z.array(PageSchema),
3487
+ var UserPagesResponseSchema = import_zod_openapi34.z.object({
3488
+ pages: import_zod_openapi34.z.array(PageSchema),
3062
3489
  pager: PagerSchema,
3063
- total: import_zod_openapi33.z.number()
3490
+ total: import_zod_openapi34.z.number()
3064
3491
  });
3065
- var UserNotFoundErrorSchema = import_zod_openapi33.z.object({
3066
- error: import_zod_openapi33.z.object({
3067
- code: import_zod_openapi33.z.literal("USER_NOT_FOUND"),
3068
- message: import_zod_openapi33.z.literal("User not found")
3492
+ var UserNotFoundErrorSchema = import_zod_openapi34.z.object({
3493
+ error: import_zod_openapi34.z.object({
3494
+ code: import_zod_openapi34.z.literal("USER_NOT_FOUND"),
3495
+ message: import_zod_openapi34.z.literal("User not found")
3069
3496
  })
3070
3497
  });
3071
3498
 
3072
3499
  // src/contracts/bookmark.ts
3073
- var getBookmarkRoute = (0, import_zod_openapi34.createRoute)({
3500
+ var getBookmarkRoute = (0, import_zod_openapi35.createRoute)({
3074
3501
  method: "get",
3075
3502
  path: "/bookmarks",
3076
3503
  tags: ["bookmark"],
@@ -3098,7 +3525,7 @@ var getBookmarkRoute = (0, import_zod_openapi34.createRoute)({
3098
3525
  }
3099
3526
  }
3100
3527
  });
3101
- var listMyBookmarksRoute = (0, import_zod_openapi34.createRoute)({
3528
+ var listMyBookmarksRoute = (0, import_zod_openapi35.createRoute)({
3102
3529
  method: "get",
3103
3530
  path: "/bookmarks/me",
3104
3531
  tags: ["bookmark"],
@@ -3122,7 +3549,7 @@ var listMyBookmarksRoute = (0, import_zod_openapi34.createRoute)({
3122
3549
  }
3123
3550
  }
3124
3551
  });
3125
- var addBookmarkRoute = (0, import_zod_openapi34.createRoute)({
3552
+ var addBookmarkRoute = (0, import_zod_openapi35.createRoute)({
3126
3553
  method: "post",
3127
3554
  path: "/bookmarks",
3128
3555
  tags: ["bookmark"],
@@ -3152,7 +3579,7 @@ var addBookmarkRoute = (0, import_zod_openapi34.createRoute)({
3152
3579
  }
3153
3580
  }
3154
3581
  });
3155
- var removeBookmarkRoute = (0, import_zod_openapi34.createRoute)({
3582
+ var removeBookmarkRoute = (0, import_zod_openapi35.createRoute)({
3156
3583
  method: "delete",
3157
3584
  path: "/bookmarks",
3158
3585
  tags: ["bookmark"],
@@ -3190,59 +3617,59 @@ var bookmarkRoutes = {
3190
3617
  };
3191
3618
 
3192
3619
  // src/contracts/comment.ts
3193
- var import_zod_openapi36 = require("@hono/zod-openapi");
3620
+ var import_zod_openapi37 = require("@hono/zod-openapi");
3194
3621
 
3195
3622
  // src/schemas/comment.ts
3196
- var import_zod_openapi35 = require("@hono/zod-openapi");
3197
- var CommentSchema = import_zod_openapi35.z.object({
3198
- _id: import_zod_openapi35.z.string(),
3199
- page: import_zod_openapi35.z.string(),
3623
+ var import_zod_openapi36 = require("@hono/zod-openapi");
3624
+ var CommentSchema = import_zod_openapi36.z.object({
3625
+ _id: import_zod_openapi36.z.string(),
3626
+ page: import_zod_openapi36.z.string(),
3200
3627
  // creator is populated to a user object on the API side; allow string fallback for safety
3201
- creator: import_zod_openapi35.z.union([import_zod_openapi35.z.string(), PageUserSchema]).nullable(),
3202
- revision: import_zod_openapi35.z.string(),
3203
- comment: import_zod_openapi35.z.string(),
3204
- commentPosition: import_zod_openapi35.z.number().default(-1),
3205
- createdAt: import_zod_openapi35.z.string()
3206
- });
3207
- var ListCommentsRequestSchema = import_zod_openapi35.z.object({
3208
- page_id: import_zod_openapi35.z.string().optional(),
3209
- revision_id: import_zod_openapi35.z.string().optional()
3210
- });
3211
- var ListCommentsResponseSchema = import_zod_openapi35.z.object({
3212
- comments: import_zod_openapi35.z.array(CommentSchema)
3213
- });
3214
- var AddCommentRequestSchema = import_zod_openapi35.z.object({
3215
- page_id: import_zod_openapi35.z.string().min(1, "page_id is required"),
3216
- revision_id: import_zod_openapi35.z.string().min(1, "revision_id is required"),
3217
- comment: import_zod_openapi35.z.string().min(1, "comment is required"),
3218
- comment_position: import_zod_openapi35.z.number().int().optional()
3219
- });
3220
- var AddCommentResponseSchema = import_zod_openapi35.z.object({
3628
+ creator: import_zod_openapi36.z.union([import_zod_openapi36.z.string(), PageUserSchema]).nullable(),
3629
+ revision: import_zod_openapi36.z.string(),
3630
+ comment: import_zod_openapi36.z.string(),
3631
+ commentPosition: import_zod_openapi36.z.number().default(-1),
3632
+ createdAt: import_zod_openapi36.z.string()
3633
+ });
3634
+ var ListCommentsRequestSchema = import_zod_openapi36.z.object({
3635
+ page_id: import_zod_openapi36.z.string().optional(),
3636
+ revision_id: import_zod_openapi36.z.string().optional()
3637
+ });
3638
+ var ListCommentsResponseSchema = import_zod_openapi36.z.object({
3639
+ comments: import_zod_openapi36.z.array(CommentSchema)
3640
+ });
3641
+ var AddCommentRequestSchema = import_zod_openapi36.z.object({
3642
+ page_id: import_zod_openapi36.z.string().min(1, "page_id is required"),
3643
+ revision_id: import_zod_openapi36.z.string().min(1, "revision_id is required"),
3644
+ comment: import_zod_openapi36.z.string().min(1, "comment is required"),
3645
+ comment_position: import_zod_openapi36.z.number().int().optional()
3646
+ });
3647
+ var AddCommentResponseSchema = import_zod_openapi36.z.object({
3221
3648
  comment: CommentSchema,
3222
- newlyWatching: import_zod_openapi35.z.boolean()
3649
+ newlyWatching: import_zod_openapi36.z.boolean()
3223
3650
  });
3224
- var DeleteCommentRequestSchema = import_zod_openapi35.z.object({
3225
- comment_id: import_zod_openapi35.z.string().min(1, "comment_id is required"),
3226
- page_id: import_zod_openapi35.z.string().min(1, "page_id is required")
3651
+ var DeleteCommentRequestSchema = import_zod_openapi36.z.object({
3652
+ comment_id: import_zod_openapi36.z.string().min(1, "comment_id is required"),
3653
+ page_id: import_zod_openapi36.z.string().min(1, "page_id is required")
3227
3654
  });
3228
- var DeleteCommentResponseSchema = import_zod_openapi35.z.object({
3229
- ok: import_zod_openapi35.z.literal(true)
3655
+ var DeleteCommentResponseSchema = import_zod_openapi36.z.object({
3656
+ ok: import_zod_openapi36.z.literal(true)
3230
3657
  });
3231
- var CommentNotFoundErrorSchema = import_zod_openapi35.z.object({
3232
- error: import_zod_openapi35.z.object({
3233
- code: import_zod_openapi35.z.literal("COMMENT_NOT_FOUND"),
3234
- message: import_zod_openapi35.z.literal("Comment not found")
3658
+ var CommentNotFoundErrorSchema = import_zod_openapi36.z.object({
3659
+ error: import_zod_openapi36.z.object({
3660
+ code: import_zod_openapi36.z.literal("COMMENT_NOT_FOUND"),
3661
+ message: import_zod_openapi36.z.literal("Comment not found")
3235
3662
  })
3236
3663
  });
3237
- var CommentInvalidRequestErrorSchema = import_zod_openapi35.z.object({
3238
- error: import_zod_openapi35.z.object({
3239
- code: import_zod_openapi35.z.literal("INVALID_REQUEST"),
3240
- message: import_zod_openapi35.z.string()
3664
+ var CommentInvalidRequestErrorSchema = import_zod_openapi36.z.object({
3665
+ error: import_zod_openapi36.z.object({
3666
+ code: import_zod_openapi36.z.literal("INVALID_REQUEST"),
3667
+ message: import_zod_openapi36.z.string()
3241
3668
  })
3242
3669
  });
3243
3670
 
3244
3671
  // src/contracts/comment.ts
3245
- var listCommentsRoute = (0, import_zod_openapi36.createRoute)({
3672
+ var listCommentsRoute = (0, import_zod_openapi37.createRoute)({
3246
3673
  method: "get",
3247
3674
  path: "/comments",
3248
3675
  tags: ["comment"],
@@ -3270,7 +3697,7 @@ var listCommentsRoute = (0, import_zod_openapi36.createRoute)({
3270
3697
  }
3271
3698
  }
3272
3699
  });
3273
- var addCommentRoute = (0, import_zod_openapi36.createRoute)({
3700
+ var addCommentRoute = (0, import_zod_openapi37.createRoute)({
3274
3701
  method: "post",
3275
3702
  path: "/comments",
3276
3703
  tags: ["comment"],
@@ -3300,7 +3727,7 @@ var addCommentRoute = (0, import_zod_openapi36.createRoute)({
3300
3727
  }
3301
3728
  }
3302
3729
  });
3303
- var deleteCommentRoute = (0, import_zod_openapi36.createRoute)({
3730
+ var deleteCommentRoute = (0, import_zod_openapi37.createRoute)({
3304
3731
  method: "delete",
3305
3732
  path: "/comments",
3306
3733
  tags: ["comment"],
@@ -3341,50 +3768,50 @@ var commentRoutes = {
3341
3768
  };
3342
3769
 
3343
3770
  // src/contracts/draft.ts
3344
- var import_zod_openapi38 = require("@hono/zod-openapi");
3771
+ var import_zod_openapi39 = require("@hono/zod-openapi");
3345
3772
 
3346
3773
  // src/schemas/draft.ts
3347
- var import_zod_openapi37 = require("@hono/zod-openapi");
3348
- var CreateDraftRequestSchema = import_zod_openapi37.z.object({
3349
- path: import_zod_openapi37.z.string().min(1),
3350
- initialBody: import_zod_openapi37.z.string().optional()
3774
+ var import_zod_openapi38 = require("@hono/zod-openapi");
3775
+ var CreateDraftRequestSchema = import_zod_openapi38.z.object({
3776
+ path: import_zod_openapi38.z.string().min(1),
3777
+ initialBody: import_zod_openapi38.z.string().optional()
3351
3778
  });
3352
- var CreateDraftResponseSchema = import_zod_openapi37.z.object({
3353
- pageId: import_zod_openapi37.z.string()
3779
+ var CreateDraftResponseSchema = import_zod_openapi38.z.object({
3780
+ pageId: import_zod_openapi38.z.string()
3354
3781
  });
3355
- var DraftConflictOwnerSchema = import_zod_openapi37.z.object({
3356
- id: import_zod_openapi37.z.string(),
3357
- username: import_zod_openapi37.z.string(),
3358
- displayName: import_zod_openapi37.z.string()
3782
+ var DraftConflictOwnerSchema = import_zod_openapi38.z.object({
3783
+ id: import_zod_openapi38.z.string(),
3784
+ username: import_zod_openapi38.z.string(),
3785
+ displayName: import_zod_openapi38.z.string()
3359
3786
  });
3360
- var DraftPathConflictErrorSchema = import_zod_openapi37.z.object({
3361
- error: import_zod_openapi37.z.literal("path_taken_by_draft"),
3787
+ var DraftPathConflictErrorSchema = import_zod_openapi38.z.object({
3788
+ error: import_zod_openapi38.z.literal("path_taken_by_draft"),
3362
3789
  owner: DraftConflictOwnerSchema,
3363
- message: import_zod_openapi37.z.string()
3790
+ message: import_zod_openapi38.z.string()
3364
3791
  });
3365
- var DraftBadRequestErrorSchema = import_zod_openapi37.z.object({
3366
- error: import_zod_openapi37.z.enum(["invalid_path", "path_taken"]),
3367
- message: import_zod_openapi37.z.string()
3792
+ var DraftBadRequestErrorSchema = import_zod_openapi38.z.object({
3793
+ error: import_zod_openapi38.z.enum(["invalid_path", "path_taken"]),
3794
+ message: import_zod_openapi38.z.string()
3368
3795
  });
3369
- var DraftNotFoundErrorSchema = import_zod_openapi37.z.object({
3370
- error: import_zod_openapi37.z.literal("draft_not_found"),
3371
- message: import_zod_openapi37.z.string()
3796
+ var DraftNotFoundErrorSchema = import_zod_openapi38.z.object({
3797
+ error: import_zod_openapi38.z.literal("draft_not_found"),
3798
+ message: import_zod_openapi38.z.string()
3372
3799
  });
3373
- var DraftSummarySchema = import_zod_openapi37.z.object({
3374
- pageId: import_zod_openapi37.z.string(),
3375
- path: import_zod_openapi37.z.string(),
3376
- createdAt: import_zod_openapi37.z.string(),
3377
- updatedAt: import_zod_openapi37.z.string()
3800
+ var DraftSummarySchema = import_zod_openapi38.z.object({
3801
+ pageId: import_zod_openapi38.z.string(),
3802
+ path: import_zod_openapi38.z.string(),
3803
+ createdAt: import_zod_openapi38.z.string(),
3804
+ updatedAt: import_zod_openapi38.z.string()
3378
3805
  });
3379
- var ListDraftsResponseSchema = import_zod_openapi37.z.object({
3380
- drafts: import_zod_openapi37.z.array(DraftSummarySchema)
3806
+ var ListDraftsResponseSchema = import_zod_openapi38.z.object({
3807
+ drafts: import_zod_openapi38.z.array(DraftSummarySchema)
3381
3808
  });
3382
3809
 
3383
3810
  // src/contracts/draft.ts
3384
- var DraftIdPathParamsSchema = import_zod_openapi38.z.object({
3385
- id: import_zod_openapi38.z.string().openapi({ description: "Draft page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
3811
+ var DraftIdPathParamsSchema = import_zod_openapi39.z.object({
3812
+ id: import_zod_openapi39.z.string().openapi({ description: "Draft page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
3386
3813
  });
3387
- var createDraftRoute = (0, import_zod_openapi38.createRoute)({
3814
+ var createDraftRoute = (0, import_zod_openapi39.createRoute)({
3388
3815
  method: "post",
3389
3816
  path: "/pages/drafts",
3390
3817
  tags: ["draft"],
@@ -3414,7 +3841,7 @@ var createDraftRoute = (0, import_zod_openapi38.createRoute)({
3414
3841
  }
3415
3842
  }
3416
3843
  });
3417
- var listDraftsRoute = (0, import_zod_openapi38.createRoute)({
3844
+ var listDraftsRoute = (0, import_zod_openapi39.createRoute)({
3418
3845
  method: "get",
3419
3846
  path: "/pages/drafts",
3420
3847
  tags: ["draft"],
@@ -3431,7 +3858,7 @@ var listDraftsRoute = (0, import_zod_openapi38.createRoute)({
3431
3858
  }
3432
3859
  }
3433
3860
  });
3434
- var cancelDraftRoute = (0, import_zod_openapi38.createRoute)({
3861
+ var cancelDraftRoute = (0, import_zod_openapi39.createRoute)({
3435
3862
  method: "delete",
3436
3863
  path: "/pages/drafts/{id}",
3437
3864
  tags: ["draft"],
@@ -3462,29 +3889,29 @@ var draftRoutes = {
3462
3889
  };
3463
3890
 
3464
3891
  // src/contracts/installer.ts
3465
- var import_zod_openapi40 = require("@hono/zod-openapi");
3892
+ var import_zod_openapi41 = require("@hono/zod-openapi");
3466
3893
 
3467
3894
  // src/schemas/installer.ts
3468
- var import_zod_openapi39 = require("@hono/zod-openapi");
3469
- var InstallerStatusResponseSchema = import_zod_openapi39.z.object({
3470
- status: import_zod_openapi39.z.enum(["installer_required", "already_installed"])
3471
- });
3472
- var CreateAdminRequestSchema = import_zod_openapi39.z.object({
3473
- registerForm: import_zod_openapi39.z.object({
3474
- username: import_zod_openapi39.z.string().min(1).regex(/^[\da-zA-Z\-_.]+$/, "username may only contain letters, digits, hyphens, underscores, and dots"),
3475
- name: import_zod_openapi39.z.string().min(1),
3476
- email: import_zod_openapi39.z.string().email(),
3477
- password: import_zod_openapi39.z.string().min(6).regex(/^[\x20-\x7F]{6,}$/, "password must be 6+ printable ASCII characters")
3895
+ var import_zod_openapi40 = require("@hono/zod-openapi");
3896
+ var InstallerStatusResponseSchema = import_zod_openapi40.z.object({
3897
+ status: import_zod_openapi40.z.enum(["installer_required", "already_installed"])
3898
+ });
3899
+ var CreateAdminRequestSchema = import_zod_openapi40.z.object({
3900
+ registerForm: import_zod_openapi40.z.object({
3901
+ username: import_zod_openapi40.z.string().min(1).regex(/^[\da-zA-Z\-_.]+$/, "username may only contain letters, digits, hyphens, underscores, and dots"),
3902
+ name: import_zod_openapi40.z.string().min(1),
3903
+ email: import_zod_openapi40.z.string().email(),
3904
+ password: import_zod_openapi40.z.string().min(6).regex(/^[\x20-\x7F]{6,}$/, "password must be 6+ printable ASCII characters")
3478
3905
  })
3479
3906
  });
3480
- var CreateAdminResponseSchema = import_zod_openapi39.z.object({
3481
- status: import_zod_openapi39.z.enum(["ok", "error"]),
3482
- message: import_zod_openapi39.z.string().optional(),
3483
- errors: import_zod_openapi39.z.array(import_zod_openapi39.z.string()).optional()
3907
+ var CreateAdminResponseSchema = import_zod_openapi40.z.object({
3908
+ status: import_zod_openapi40.z.enum(["ok", "error"]),
3909
+ message: import_zod_openapi40.z.string().optional(),
3910
+ errors: import_zod_openapi40.z.array(import_zod_openapi40.z.string()).optional()
3484
3911
  });
3485
3912
 
3486
3913
  // src/contracts/installer.ts
3487
- var getInstallerStatusRoute = (0, import_zod_openapi40.createRoute)({
3914
+ var getInstallerStatusRoute = (0, import_zod_openapi41.createRoute)({
3488
3915
  method: "get",
3489
3916
  path: "/installer",
3490
3917
  tags: ["installer"],
@@ -3508,7 +3935,7 @@ var getInstallerStatusRoute = (0, import_zod_openapi40.createRoute)({
3508
3935
  }
3509
3936
  }
3510
3937
  });
3511
- var createAdminRoute = (0, import_zod_openapi40.createRoute)({
3938
+ var createAdminRoute = (0, import_zod_openapi41.createRoute)({
3512
3939
  method: "post",
3513
3940
  path: "/installer/createAdmin",
3514
3941
  tags: ["installer"],
@@ -3552,88 +3979,88 @@ var createAdminRoute = (0, import_zod_openapi40.createRoute)({
3552
3979
  var installerRoutes = { getInstallerStatusRoute, createAdminRoute };
3553
3980
 
3554
3981
  // src/contracts/me.ts
3555
- var import_zod_openapi42 = require("@hono/zod-openapi");
3982
+ var import_zod_openapi43 = require("@hono/zod-openapi");
3556
3983
 
3557
3984
  // src/schemas/me.ts
3558
- var import_zod_openapi41 = require("@hono/zod-openapi");
3559
- var LanguageSchema = import_zod_openapi41.z.enum(["en", "ja"]);
3560
- var ThemeSchema = import_zod_openapi41.z.enum(["system", "light", "dark"]);
3561
- var UserProfileResponseSchema = import_zod_openapi41.z.object({
3562
- id: import_zod_openapi41.z.string(),
3563
- username: import_zod_openapi41.z.string(),
3564
- name: import_zod_openapi41.z.string(),
3565
- email: import_zod_openapi41.z.string().email(),
3985
+ var import_zod_openapi42 = require("@hono/zod-openapi");
3986
+ var LanguageSchema = import_zod_openapi42.z.enum(["en", "ja"]);
3987
+ var ThemeSchema = import_zod_openapi42.z.enum(["system", "light", "dark"]);
3988
+ var UserProfileResponseSchema = import_zod_openapi42.z.object({
3989
+ id: import_zod_openapi42.z.string(),
3990
+ username: import_zod_openapi42.z.string(),
3991
+ name: import_zod_openapi42.z.string(),
3992
+ email: import_zod_openapi42.z.string().email(),
3566
3993
  lang: LanguageSchema,
3567
3994
  theme: ThemeSchema,
3568
- image: import_zod_openapi41.z.string().nullable(),
3569
- introduction: import_zod_openapi41.z.string().optional(),
3570
- hasPassword: import_zod_openapi41.z.boolean(),
3571
- createdAt: import_zod_openapi41.z.string(),
3995
+ image: import_zod_openapi42.z.string().nullable(),
3996
+ introduction: import_zod_openapi42.z.string().optional(),
3997
+ hasPassword: import_zod_openapi42.z.boolean(),
3998
+ createdAt: import_zod_openapi42.z.string(),
3572
3999
  /**
3573
4000
  * True when the profile update requested a new email that is awaiting
3574
4001
  * confirmation: the stored `email` is unchanged and a confirmation
3575
4002
  * link was sent to the new address.
3576
4003
  */
3577
- emailChangePending: import_zod_openapi41.z.boolean().optional()
4004
+ emailChangePending: import_zod_openapi42.z.boolean().optional()
3578
4005
  });
3579
- var UpdateProfileRequestSchema = import_zod_openapi41.z.object({
3580
- userForm: import_zod_openapi41.z.object({
3581
- name: import_zod_openapi41.z.string().min(1, "Name is required"),
3582
- email: import_zod_openapi41.z.string().email("Invalid email format"),
4006
+ var UpdateProfileRequestSchema = import_zod_openapi42.z.object({
4007
+ userForm: import_zod_openapi42.z.object({
4008
+ name: import_zod_openapi42.z.string().min(1, "Name is required"),
4009
+ email: import_zod_openapi42.z.string().email("Invalid email format"),
3583
4010
  lang: LanguageSchema
3584
4011
  })
3585
4012
  });
3586
- var UpdateThemeRequestSchema = import_zod_openapi41.z.object({
4013
+ var UpdateThemeRequestSchema = import_zod_openapi42.z.object({
3587
4014
  theme: ThemeSchema
3588
4015
  });
3589
- var ThemeUpdateResponseSchema = import_zod_openapi41.z.object({
3590
- status: import_zod_openapi41.z.literal("ok"),
4016
+ var ThemeUpdateResponseSchema = import_zod_openapi42.z.object({
4017
+ status: import_zod_openapi42.z.literal("ok"),
3591
4018
  theme: ThemeSchema
3592
4019
  });
3593
- var PictureUploadResponseSchema = import_zod_openapi41.z.object({
3594
- status: import_zod_openapi41.z.boolean(),
3595
- url: import_zod_openapi41.z.string().optional(),
3596
- message: import_zod_openapi41.z.string().optional()
4020
+ var PictureUploadResponseSchema = import_zod_openapi42.z.object({
4021
+ status: import_zod_openapi42.z.boolean(),
4022
+ url: import_zod_openapi42.z.string().optional(),
4023
+ message: import_zod_openapi42.z.string().optional()
3597
4024
  });
3598
- var SuccessResponseSchema = import_zod_openapi41.z.object({
3599
- status: import_zod_openapi41.z.literal("ok"),
3600
- message: import_zod_openapi41.z.string().optional()
4025
+ var SuccessResponseSchema = import_zod_openapi42.z.object({
4026
+ status: import_zod_openapi42.z.literal("ok"),
4027
+ message: import_zod_openapi42.z.string().optional()
3601
4028
  });
3602
- var ProfileErrorResponseSchema = import_zod_openapi41.z.object({
3603
- status: import_zod_openapi41.z.literal("error"),
4029
+ var ProfileErrorResponseSchema = import_zod_openapi42.z.object({
4030
+ status: import_zod_openapi42.z.literal("error"),
3604
4031
  /** Stable code so the web can localize the message (e.g. EMAIL_TAKEN). */
3605
- code: import_zod_openapi41.z.string().optional(),
3606
- message: import_zod_openapi41.z.string().optional(),
3607
- errors: import_zod_openapi41.z.array(import_zod_openapi41.z.string()).optional()
4032
+ code: import_zod_openapi42.z.string().optional(),
4033
+ message: import_zod_openapi42.z.string().optional(),
4034
+ errors: import_zod_openapi42.z.array(import_zod_openapi42.z.string()).optional()
3608
4035
  });
3609
4036
  var PASSWORD_REGEX = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?`~])[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?`~]+$/;
3610
- var UpdatePasswordRequestSchema = import_zod_openapi41.z.object({
3611
- oldPassword: import_zod_openapi41.z.string().optional(),
3612
- newPassword: import_zod_openapi41.z.string().min(8, "Password must be at least 8 characters").max(100, "Password must be at most 100 characters").regex(PASSWORD_REGEX, "Password must contain at least one letter, one digit, and one special character"),
3613
- newPasswordConfirm: import_zod_openapi41.z.string()
4037
+ var UpdatePasswordRequestSchema = import_zod_openapi42.z.object({
4038
+ oldPassword: import_zod_openapi42.z.string().optional(),
4039
+ newPassword: import_zod_openapi42.z.string().min(8, "Password must be at least 8 characters").max(100, "Password must be at most 100 characters").regex(PASSWORD_REGEX, "Password must contain at least one letter, one digit, and one special character"),
4040
+ newPasswordConfirm: import_zod_openapi42.z.string()
3614
4041
  }).refine((data) => data.newPassword === data.newPasswordConfirm, {
3615
4042
  message: "Passwords do not match",
3616
4043
  path: ["newPasswordConfirm"]
3617
4044
  });
3618
- var PasswordUpdateSuccessSchema = import_zod_openapi41.z.object({
3619
- status: import_zod_openapi41.z.literal("ok"),
3620
- message: import_zod_openapi41.z.string(),
3621
- accessToken: import_zod_openapi41.z.string(),
3622
- refreshToken: import_zod_openapi41.z.string(),
4045
+ var PasswordUpdateSuccessSchema = import_zod_openapi42.z.object({
4046
+ status: import_zod_openapi42.z.literal("ok"),
4047
+ message: import_zod_openapi42.z.string(),
4048
+ accessToken: import_zod_openapi42.z.string(),
4049
+ refreshToken: import_zod_openapi42.z.string(),
3623
4050
  /** Access-token lifetime in seconds. */
3624
- expiresIn: import_zod_openapi41.z.number()
4051
+ expiresIn: import_zod_openapi42.z.number()
3625
4052
  });
3626
- var PasswordErrorResponseSchema = import_zod_openapi41.z.object({
3627
- status: import_zod_openapi41.z.literal("error"),
3628
- message: import_zod_openapi41.z.string(),
3629
- errors: import_zod_openapi41.z.array(import_zod_openapi41.z.string()).optional()
4053
+ var PasswordErrorResponseSchema = import_zod_openapi42.z.object({
4054
+ status: import_zod_openapi42.z.literal("error"),
4055
+ message: import_zod_openapi42.z.string(),
4056
+ errors: import_zod_openapi42.z.array(import_zod_openapi42.z.string()).optional()
3630
4057
  });
3631
- var RecentlyViewedPagesResponseSchema = import_zod_openapi41.z.object({
3632
- pages: import_zod_openapi41.z.array(PageSchema)
4058
+ var RecentlyViewedPagesResponseSchema = import_zod_openapi42.z.object({
4059
+ pages: import_zod_openapi42.z.array(PageSchema)
3633
4060
  });
3634
4061
 
3635
4062
  // src/contracts/me.ts
3636
- var getProfileRoute = (0, import_zod_openapi42.createRoute)({
4063
+ var getProfileRoute = (0, import_zod_openapi43.createRoute)({
3637
4064
  method: "get",
3638
4065
  path: "/me",
3639
4066
  tags: ["me"],
@@ -3650,7 +4077,7 @@ var getProfileRoute = (0, import_zod_openapi42.createRoute)({
3650
4077
  }
3651
4078
  }
3652
4079
  });
3653
- var updateProfileRoute = (0, import_zod_openapi42.createRoute)({
4080
+ var updateProfileRoute = (0, import_zod_openapi43.createRoute)({
3654
4081
  method: "put",
3655
4082
  path: "/me",
3656
4083
  tags: ["me"],
@@ -3676,7 +4103,7 @@ var updateProfileRoute = (0, import_zod_openapi42.createRoute)({
3676
4103
  }
3677
4104
  }
3678
4105
  });
3679
- var updateThemeRoute = (0, import_zod_openapi42.createRoute)({
4106
+ var updateThemeRoute = (0, import_zod_openapi43.createRoute)({
3680
4107
  method: "patch",
3681
4108
  path: "/me/theme",
3682
4109
  tags: ["me"],
@@ -3702,7 +4129,7 @@ var updateThemeRoute = (0, import_zod_openapi42.createRoute)({
3702
4129
  }
3703
4130
  }
3704
4131
  });
3705
- var uploadPictureRoute = (0, import_zod_openapi42.createRoute)({
4132
+ var uploadPictureRoute = (0, import_zod_openapi43.createRoute)({
3706
4133
  method: "post",
3707
4134
  path: "/me/picture",
3708
4135
  tags: ["me"],
@@ -3712,8 +4139,8 @@ var uploadPictureRoute = (0, import_zod_openapi42.createRoute)({
3712
4139
  body: {
3713
4140
  content: {
3714
4141
  "multipart/form-data": {
3715
- schema: import_zod_openapi42.z.object({
3716
- file: import_zod_openapi42.z.any().optional().describe("Profile picture file")
4142
+ schema: import_zod_openapi43.z.object({
4143
+ file: import_zod_openapi43.z.any().optional().describe("Profile picture file")
3717
4144
  })
3718
4145
  }
3719
4146
  }
@@ -3734,7 +4161,7 @@ var uploadPictureRoute = (0, import_zod_openapi42.createRoute)({
3734
4161
  }
3735
4162
  }
3736
4163
  });
3737
- var deletePictureRoute = (0, import_zod_openapi42.createRoute)({
4164
+ var deletePictureRoute = (0, import_zod_openapi43.createRoute)({
3738
4165
  method: "delete",
3739
4166
  path: "/me/picture",
3740
4167
  tags: ["me"],
@@ -3755,7 +4182,7 @@ var deletePictureRoute = (0, import_zod_openapi42.createRoute)({
3755
4182
  }
3756
4183
  }
3757
4184
  });
3758
- var updatePasswordRoute = (0, import_zod_openapi42.createRoute)({
4185
+ var updatePasswordRoute = (0, import_zod_openapi43.createRoute)({
3759
4186
  method: "put",
3760
4187
  path: "/me/password",
3761
4188
  tags: ["me"],
@@ -3781,7 +4208,7 @@ var updatePasswordRoute = (0, import_zod_openapi42.createRoute)({
3781
4208
  }
3782
4209
  }
3783
4210
  });
3784
- var recentlyViewedPagesRoute = (0, import_zod_openapi42.createRoute)({
4211
+ var recentlyViewedPagesRoute = (0, import_zod_openapi43.createRoute)({
3785
4212
  method: "get",
3786
4213
  path: "/me/recently-viewed-pages",
3787
4214
  tags: ["me"],
@@ -3813,43 +4240,43 @@ var meRoutes = {
3813
4240
  };
3814
4241
 
3815
4242
  // src/contracts/access-token.ts
3816
- var import_zod_openapi44 = require("@hono/zod-openapi");
4243
+ var import_zod_openapi45 = require("@hono/zod-openapi");
3817
4244
 
3818
4245
  // src/schemas/access-token.ts
3819
- var import_zod_openapi43 = require("@hono/zod-openapi");
3820
- var AccessTokenSchema = import_zod_openapi43.z.object({
3821
- id: import_zod_openapi43.z.string(),
3822
- name: import_zod_openapi43.z.string(),
3823
- scopes: import_zod_openapi43.z.array(import_zod_openapi43.z.string()),
4246
+ var import_zod_openapi44 = require("@hono/zod-openapi");
4247
+ var AccessTokenSchema = import_zod_openapi44.z.object({
4248
+ id: import_zod_openapi44.z.string(),
4249
+ name: import_zod_openapi44.z.string(),
4250
+ scopes: import_zod_openapi44.z.array(import_zod_openapi44.z.string()),
3824
4251
  /** ISO-8601 expiry, or `null` for a non-expiring token. */
3825
- expiresAt: import_zod_openapi43.z.string().nullable(),
4252
+ expiresAt: import_zod_openapi44.z.string().nullable(),
3826
4253
  /** ISO-8601 of last successful use, or `null` if never used. */
3827
- lastUsedAt: import_zod_openapi43.z.string().nullable(),
3828
- createdAt: import_zod_openapi43.z.string()
4254
+ lastUsedAt: import_zod_openapi44.z.string().nullable(),
4255
+ createdAt: import_zod_openapi44.z.string()
3829
4256
  });
3830
- var ListAccessTokensResponseSchema = import_zod_openapi43.z.object({
3831
- accessTokens: import_zod_openapi43.z.array(AccessTokenSchema)
4257
+ var ListAccessTokensResponseSchema = import_zod_openapi44.z.object({
4258
+ accessTokens: import_zod_openapi44.z.array(AccessTokenSchema)
3832
4259
  });
3833
- var CreateAccessTokenRequestSchema = import_zod_openapi43.z.object({
3834
- name: import_zod_openapi43.z.string().min(1, "Name is required").max(200),
3835
- scopes: import_zod_openapi43.z.array(import_zod_openapi43.z.string()).min(1, "At least one scope is required"),
3836
- expiresAt: import_zod_openapi43.z.string().datetime().nullable().optional()
4260
+ var CreateAccessTokenRequestSchema = import_zod_openapi44.z.object({
4261
+ name: import_zod_openapi44.z.string().min(1, "Name is required").max(200),
4262
+ scopes: import_zod_openapi44.z.array(import_zod_openapi44.z.string()).min(1, "At least one scope is required"),
4263
+ expiresAt: import_zod_openapi44.z.string().datetime().nullable().optional()
3837
4264
  });
3838
4265
  var CreateAccessTokenResponseSchema = AccessTokenSchema.extend({
3839
- token: import_zod_openapi43.z.string()
3840
- });
3841
- var InvalidScopeErrorSchema = import_zod_openapi43.z.object({
3842
- error: import_zod_openapi43.z.object({
3843
- code: import_zod_openapi43.z.literal("INVALID_SCOPE"),
3844
- message: import_zod_openapi43.z.string(),
3845
- details: import_zod_openapi43.z.object({
3846
- invalidScopes: import_zod_openapi43.z.array(import_zod_openapi43.z.string())
4266
+ token: import_zod_openapi44.z.string()
4267
+ });
4268
+ var InvalidScopeErrorSchema = import_zod_openapi44.z.object({
4269
+ error: import_zod_openapi44.z.object({
4270
+ code: import_zod_openapi44.z.literal("INVALID_SCOPE"),
4271
+ message: import_zod_openapi44.z.string(),
4272
+ details: import_zod_openapi44.z.object({
4273
+ invalidScopes: import_zod_openapi44.z.array(import_zod_openapi44.z.string())
3847
4274
  }).optional()
3848
4275
  })
3849
4276
  });
3850
4277
 
3851
4278
  // src/contracts/access-token.ts
3852
- var listAccessTokensRoute = (0, import_zod_openapi44.createRoute)({
4279
+ var listAccessTokensRoute = (0, import_zod_openapi45.createRoute)({
3853
4280
  method: "get",
3854
4281
  path: "/me/access-tokens",
3855
4282
  tags: ["me"],
@@ -3874,7 +4301,7 @@ var listAccessTokensRoute = (0, import_zod_openapi44.createRoute)({
3874
4301
  }
3875
4302
  }
3876
4303
  });
3877
- var createAccessTokenRoute = (0, import_zod_openapi44.createRoute)({
4304
+ var createAccessTokenRoute = (0, import_zod_openapi45.createRoute)({
3878
4305
  method: "post",
3879
4306
  path: "/me/access-tokens",
3880
4307
  tags: ["me"],
@@ -3908,14 +4335,14 @@ var createAccessTokenRoute = (0, import_zod_openapi44.createRoute)({
3908
4335
  }
3909
4336
  }
3910
4337
  });
3911
- var deleteAccessTokenRoute = (0, import_zod_openapi44.createRoute)({
4338
+ var deleteAccessTokenRoute = (0, import_zod_openapi45.createRoute)({
3912
4339
  method: "delete",
3913
4340
  path: "/me/access-tokens/{id}",
3914
4341
  tags: ["me"],
3915
4342
  security: [{ bearerAuth: [] }],
3916
4343
  summary: "Revoke a personal access token",
3917
4344
  request: {
3918
- params: import_zod_openapi44.z.object({ id: import_zod_openapi44.z.string() })
4345
+ params: import_zod_openapi45.z.object({ id: import_zod_openapi45.z.string() })
3919
4346
  },
3920
4347
  responses: {
3921
4348
  200: {
@@ -3947,13 +4374,13 @@ var accessTokenRoutes = {
3947
4374
  };
3948
4375
 
3949
4376
  // src/contracts/oauth.ts
3950
- var import_zod_openapi47 = require("@hono/zod-openapi");
4377
+ var import_zod_openapi48 = require("@hono/zod-openapi");
3951
4378
 
3952
4379
  // src/schemas/oauth-endpoints.ts
3953
- var import_zod_openapi46 = require("@hono/zod-openapi");
4380
+ var import_zod_openapi47 = require("@hono/zod-openapi");
3954
4381
 
3955
4382
  // src/schemas/oauth.ts
3956
- var import_zod_openapi45 = require("@hono/zod-openapi");
4383
+ var import_zod_openapi46 = require("@hono/zod-openapi");
3957
4384
  var SCOPES = [
3958
4385
  // umbrella
3959
4386
  "read",
@@ -4021,11 +4448,11 @@ function scopeSatisfies(required, granted) {
4021
4448
  return false;
4022
4449
  }
4023
4450
  var InsufficientScopeErrorSchema = ApiErrorSchema.extend({
4024
- error: import_zod_openapi45.z.object({
4025
- code: import_zod_openapi45.z.literal("INSUFFICIENT_SCOPE"),
4026
- message: import_zod_openapi45.z.string(),
4027
- details: import_zod_openapi45.z.object({
4028
- requiredScope: import_zod_openapi45.z.string()
4451
+ error: import_zod_openapi46.z.object({
4452
+ code: import_zod_openapi46.z.literal("INSUFFICIENT_SCOPE"),
4453
+ message: import_zod_openapi46.z.string(),
4454
+ details: import_zod_openapi46.z.object({
4455
+ requiredScope: import_zod_openapi46.z.string()
4029
4456
  }).optional()
4030
4457
  })
4031
4458
  });
@@ -4044,102 +4471,102 @@ var OAUTH_ERROR_CODES = [
4044
4471
  "slow_down",
4045
4472
  "expired_token"
4046
4473
  ];
4047
- var OAuthErrorSchema = import_zod_openapi46.z.object({
4048
- error: import_zod_openapi46.z.enum(OAUTH_ERROR_CODES),
4049
- error_description: import_zod_openapi46.z.string().optional()
4050
- });
4051
- var AuthorizeRequestSchema = import_zod_openapi46.z.object({
4052
- client_id: import_zod_openapi46.z.string().min(1),
4053
- redirect_uri: import_zod_openapi46.z.string().min(1),
4054
- scope: import_zod_openapi46.z.string().min(1),
4055
- code_challenge: import_zod_openapi46.z.string().min(1),
4056
- code_challenge_method: import_zod_openapi46.z.literal("S256"),
4057
- state: import_zod_openapi46.z.string().optional()
4058
- });
4059
- var AuthorizeResponseSchema = import_zod_openapi46.z.object({
4060
- redirectUri: import_zod_openapi46.z.string()
4061
- });
4062
- var TokenRequestSchema = import_zod_openapi46.z.discriminatedUnion("grant_type", [
4063
- import_zod_openapi46.z.object({
4064
- grant_type: import_zod_openapi46.z.literal("authorization_code"),
4065
- code: import_zod_openapi46.z.string().min(1),
4066
- code_verifier: import_zod_openapi46.z.string().min(1),
4067
- redirect_uri: import_zod_openapi46.z.string().min(1),
4068
- client_id: import_zod_openapi46.z.string().min(1)
4474
+ var OAuthErrorSchema = import_zod_openapi47.z.object({
4475
+ error: import_zod_openapi47.z.enum(OAUTH_ERROR_CODES),
4476
+ error_description: import_zod_openapi47.z.string().optional()
4477
+ });
4478
+ var AuthorizeRequestSchema = import_zod_openapi47.z.object({
4479
+ client_id: import_zod_openapi47.z.string().min(1),
4480
+ redirect_uri: import_zod_openapi47.z.string().min(1),
4481
+ scope: import_zod_openapi47.z.string().min(1),
4482
+ code_challenge: import_zod_openapi47.z.string().min(1),
4483
+ code_challenge_method: import_zod_openapi47.z.literal("S256"),
4484
+ state: import_zod_openapi47.z.string().optional()
4485
+ });
4486
+ var AuthorizeResponseSchema = import_zod_openapi47.z.object({
4487
+ redirectUri: import_zod_openapi47.z.string()
4488
+ });
4489
+ var TokenRequestSchema = import_zod_openapi47.z.discriminatedUnion("grant_type", [
4490
+ import_zod_openapi47.z.object({
4491
+ grant_type: import_zod_openapi47.z.literal("authorization_code"),
4492
+ code: import_zod_openapi47.z.string().min(1),
4493
+ code_verifier: import_zod_openapi47.z.string().min(1),
4494
+ redirect_uri: import_zod_openapi47.z.string().min(1),
4495
+ client_id: import_zod_openapi47.z.string().min(1)
4069
4496
  }),
4070
- import_zod_openapi46.z.object({
4071
- grant_type: import_zod_openapi46.z.literal("refresh_token"),
4072
- refresh_token: import_zod_openapi46.z.string().min(1),
4073
- client_id: import_zod_openapi46.z.string().min(1),
4074
- scope: import_zod_openapi46.z.string().optional()
4497
+ import_zod_openapi47.z.object({
4498
+ grant_type: import_zod_openapi47.z.literal("refresh_token"),
4499
+ refresh_token: import_zod_openapi47.z.string().min(1),
4500
+ client_id: import_zod_openapi47.z.string().min(1),
4501
+ scope: import_zod_openapi47.z.string().optional()
4075
4502
  }),
4076
4503
  // RFC 8628 §3.4 — device authorization grant. The client polls with the
4077
4504
  // opaque `device_code` returned by `/oauth/device/authorize`.
4078
- import_zod_openapi46.z.object({
4079
- grant_type: import_zod_openapi46.z.literal("urn:ietf:params:oauth:grant-type:device_code"),
4080
- device_code: import_zod_openapi46.z.string().min(1),
4081
- client_id: import_zod_openapi46.z.string().min(1)
4505
+ import_zod_openapi47.z.object({
4506
+ grant_type: import_zod_openapi47.z.literal("urn:ietf:params:oauth:grant-type:device_code"),
4507
+ device_code: import_zod_openapi47.z.string().min(1),
4508
+ client_id: import_zod_openapi47.z.string().min(1)
4082
4509
  })
4083
4510
  ]);
4084
4511
  var DEVICE_CODE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
4085
- var TokenResponseSchema = import_zod_openapi46.z.object({
4086
- access_token: import_zod_openapi46.z.string(),
4087
- token_type: import_zod_openapi46.z.literal("Bearer"),
4088
- expires_in: import_zod_openapi46.z.number(),
4089
- refresh_token: import_zod_openapi46.z.string(),
4090
- scope: import_zod_openapi46.z.string()
4091
- });
4092
- var RevokeRequestSchema = import_zod_openapi46.z.object({
4093
- token: import_zod_openapi46.z.string().min(1),
4094
- token_type_hint: import_zod_openapi46.z.string().optional()
4095
- });
4096
- var RevokeResponseSchema = import_zod_openapi46.z.object({});
4097
- var DeviceAuthorizeRequestSchema = import_zod_openapi46.z.object({
4098
- client_id: import_zod_openapi46.z.string().min(1),
4099
- scope: import_zod_openapi46.z.string().min(1)
4100
- });
4101
- var DeviceAuthorizeResponseSchema = import_zod_openapi46.z.object({
4102
- device_code: import_zod_openapi46.z.string(),
4103
- user_code: import_zod_openapi46.z.string(),
4104
- verification_uri: import_zod_openapi46.z.string(),
4105
- verification_uri_complete: import_zod_openapi46.z.string(),
4106
- expires_in: import_zod_openapi46.z.number(),
4107
- interval: import_zod_openapi46.z.number()
4108
- });
4109
- var DeviceVerifyRequestSchema = import_zod_openapi46.z.object({
4110
- user_code: import_zod_openapi46.z.string().min(1),
4111
- action: import_zod_openapi46.z.enum(["approve", "deny"])
4112
- });
4113
- var DeviceVerifyResponseSchema = import_zod_openapi46.z.object({
4114
- status: import_zod_openapi46.z.enum(["approved", "denied"])
4115
- });
4116
- var DeviceInfoResponseSchema = import_zod_openapi46.z.object({
4117
- client_id: import_zod_openapi46.z.string(),
4118
- scopes: import_zod_openapi46.z.array(import_zod_openapi46.z.string())
4119
- });
4120
- var ClientInfoResponseSchema = import_zod_openapi46.z.object({
4121
- clientId: import_zod_openapi46.z.string(),
4122
- name: import_zod_openapi46.z.string(),
4123
- firstParty: import_zod_openapi46.z.boolean(),
4124
- trusted: import_zod_openapi46.z.boolean()
4512
+ var TokenResponseSchema = import_zod_openapi47.z.object({
4513
+ access_token: import_zod_openapi47.z.string(),
4514
+ token_type: import_zod_openapi47.z.literal("Bearer"),
4515
+ expires_in: import_zod_openapi47.z.number(),
4516
+ refresh_token: import_zod_openapi47.z.string(),
4517
+ scope: import_zod_openapi47.z.string()
4518
+ });
4519
+ var RevokeRequestSchema = import_zod_openapi47.z.object({
4520
+ token: import_zod_openapi47.z.string().min(1),
4521
+ token_type_hint: import_zod_openapi47.z.string().optional()
4522
+ });
4523
+ var RevokeResponseSchema = import_zod_openapi47.z.object({});
4524
+ var DeviceAuthorizeRequestSchema = import_zod_openapi47.z.object({
4525
+ client_id: import_zod_openapi47.z.string().min(1),
4526
+ scope: import_zod_openapi47.z.string().min(1)
4527
+ });
4528
+ var DeviceAuthorizeResponseSchema = import_zod_openapi47.z.object({
4529
+ device_code: import_zod_openapi47.z.string(),
4530
+ user_code: import_zod_openapi47.z.string(),
4531
+ verification_uri: import_zod_openapi47.z.string(),
4532
+ verification_uri_complete: import_zod_openapi47.z.string(),
4533
+ expires_in: import_zod_openapi47.z.number(),
4534
+ interval: import_zod_openapi47.z.number()
4535
+ });
4536
+ var DeviceVerifyRequestSchema = import_zod_openapi47.z.object({
4537
+ user_code: import_zod_openapi47.z.string().min(1),
4538
+ action: import_zod_openapi47.z.enum(["approve", "deny"])
4539
+ });
4540
+ var DeviceVerifyResponseSchema = import_zod_openapi47.z.object({
4541
+ status: import_zod_openapi47.z.enum(["approved", "denied"])
4542
+ });
4543
+ var DeviceInfoResponseSchema = import_zod_openapi47.z.object({
4544
+ client_id: import_zod_openapi47.z.string(),
4545
+ scopes: import_zod_openapi47.z.array(import_zod_openapi47.z.string())
4546
+ });
4547
+ var ClientInfoResponseSchema = import_zod_openapi47.z.object({
4548
+ clientId: import_zod_openapi47.z.string(),
4549
+ name: import_zod_openapi47.z.string(),
4550
+ firstParty: import_zod_openapi47.z.boolean(),
4551
+ trusted: import_zod_openapi47.z.boolean()
4125
4552
  });
4126
4553
  var GRANT_TYPES_SUPPORTED = ["authorization_code", "refresh_token", DEVICE_CODE_GRANT_TYPE];
4127
- var DiscoveryResponseSchema = import_zod_openapi46.z.object({
4128
- issuer: import_zod_openapi46.z.string(),
4129
- authorization_endpoint: import_zod_openapi46.z.string(),
4130
- token_endpoint: import_zod_openapi46.z.string(),
4131
- revocation_endpoint: import_zod_openapi46.z.string(),
4132
- device_authorization_endpoint: import_zod_openapi46.z.string().optional(),
4133
- scopes_supported: import_zod_openapi46.z.array(import_zod_openapi46.z.string()),
4134
- response_types_supported: import_zod_openapi46.z.array(import_zod_openapi46.z.string()),
4135
- grant_types_supported: import_zod_openapi46.z.array(import_zod_openapi46.z.string()),
4136
- code_challenge_methods_supported: import_zod_openapi46.z.array(import_zod_openapi46.z.string()),
4137
- token_endpoint_auth_methods_supported: import_zod_openapi46.z.array(import_zod_openapi46.z.string())
4554
+ var DiscoveryResponseSchema = import_zod_openapi47.z.object({
4555
+ issuer: import_zod_openapi47.z.string(),
4556
+ authorization_endpoint: import_zod_openapi47.z.string(),
4557
+ token_endpoint: import_zod_openapi47.z.string(),
4558
+ revocation_endpoint: import_zod_openapi47.z.string(),
4559
+ device_authorization_endpoint: import_zod_openapi47.z.string().optional(),
4560
+ scopes_supported: import_zod_openapi47.z.array(import_zod_openapi47.z.string()),
4561
+ response_types_supported: import_zod_openapi47.z.array(import_zod_openapi47.z.string()),
4562
+ grant_types_supported: import_zod_openapi47.z.array(import_zod_openapi47.z.string()),
4563
+ code_challenge_methods_supported: import_zod_openapi47.z.array(import_zod_openapi47.z.string()),
4564
+ token_endpoint_auth_methods_supported: import_zod_openapi47.z.array(import_zod_openapi47.z.string())
4138
4565
  });
4139
4566
  var DISCOVERY_SCOPES_SUPPORTED = ISSUABLE_SCOPES;
4140
4567
 
4141
4568
  // src/contracts/oauth.ts
4142
- var authorizeRoute = (0, import_zod_openapi47.createRoute)({
4569
+ var authorizeRoute = (0, import_zod_openapi48.createRoute)({
4143
4570
  method: "post",
4144
4571
  path: "/oauth/authorize",
4145
4572
  tags: ["oauth"],
@@ -4169,7 +4596,7 @@ var authorizeRoute = (0, import_zod_openapi47.createRoute)({
4169
4596
  }
4170
4597
  }
4171
4598
  });
4172
- var tokenRoute = (0, import_zod_openapi47.createRoute)({
4599
+ var tokenRoute = (0, import_zod_openapi48.createRoute)({
4173
4600
  method: "post",
4174
4601
  path: "/oauth/token",
4175
4602
  tags: ["oauth"],
@@ -4201,7 +4628,7 @@ var tokenRoute = (0, import_zod_openapi47.createRoute)({
4201
4628
  }
4202
4629
  }
4203
4630
  });
4204
- var revokeRoute = (0, import_zod_openapi47.createRoute)({
4631
+ var revokeRoute = (0, import_zod_openapi48.createRoute)({
4205
4632
  method: "post",
4206
4633
  path: "/oauth/revoke",
4207
4634
  tags: ["oauth"],
@@ -4221,7 +4648,7 @@ var revokeRoute = (0, import_zod_openapi47.createRoute)({
4221
4648
  }
4222
4649
  }
4223
4650
  });
4224
- var discoveryRoute = (0, import_zod_openapi47.createRoute)({
4651
+ var discoveryRoute = (0, import_zod_openapi48.createRoute)({
4225
4652
  method: "get",
4226
4653
  path: "/.well-known/oauth-authorization-server",
4227
4654
  tags: ["oauth"],
@@ -4233,7 +4660,7 @@ var discoveryRoute = (0, import_zod_openapi47.createRoute)({
4233
4660
  }
4234
4661
  }
4235
4662
  });
4236
- var deviceAuthorizeRoute = (0, import_zod_openapi47.createRoute)({
4663
+ var deviceAuthorizeRoute = (0, import_zod_openapi48.createRoute)({
4237
4664
  method: "post",
4238
4665
  path: "/oauth/device/authorize",
4239
4666
  tags: ["oauth"],
@@ -4261,7 +4688,7 @@ var deviceAuthorizeRoute = (0, import_zod_openapi47.createRoute)({
4261
4688
  }
4262
4689
  }
4263
4690
  });
4264
- var deviceInfoRoute = (0, import_zod_openapi47.createRoute)({
4691
+ var deviceInfoRoute = (0, import_zod_openapi48.createRoute)({
4265
4692
  method: "get",
4266
4693
  path: "/oauth/device",
4267
4694
  tags: ["oauth"],
@@ -4270,7 +4697,7 @@ var deviceInfoRoute = (0, import_zod_openapi47.createRoute)({
4270
4697
  // scopes so the web consent screen can show them before approval. Reveals
4271
4698
  // no secret. Unknown / expired / non-pending → 404 (PHASE4-Q9 option A).
4272
4699
  request: {
4273
- query: import_zod_openapi47.z.object({ user_code: import_zod_openapi47.z.string().min(1) })
4700
+ query: import_zod_openapi48.z.object({ user_code: import_zod_openapi48.z.string().min(1) })
4274
4701
  },
4275
4702
  responses: {
4276
4703
  200: {
@@ -4283,7 +4710,7 @@ var deviceInfoRoute = (0, import_zod_openapi47.createRoute)({
4283
4710
  }
4284
4711
  }
4285
4712
  });
4286
- var deviceVerifyRoute = (0, import_zod_openapi47.createRoute)({
4713
+ var deviceVerifyRoute = (0, import_zod_openapi48.createRoute)({
4287
4714
  method: "post",
4288
4715
  path: "/oauth/device/verify",
4289
4716
  tags: ["oauth"],
@@ -4313,7 +4740,7 @@ var deviceVerifyRoute = (0, import_zod_openapi47.createRoute)({
4313
4740
  }
4314
4741
  }
4315
4742
  });
4316
- var clientInfoRoute = (0, import_zod_openapi47.createRoute)({
4743
+ var clientInfoRoute = (0, import_zod_openapi48.createRoute)({
4317
4744
  method: "get",
4318
4745
  path: "/oauth/client-info",
4319
4746
  tags: ["oauth"],
@@ -4324,7 +4751,7 @@ var clientInfoRoute = (0, import_zod_openapi47.createRoute)({
4324
4751
  // no redirectUris/allowedScopes — mirroring deviceInfoRoute's own
4325
4752
  // non-secret-lookup shape. Unknown client_id → 404.
4326
4753
  request: {
4327
- query: import_zod_openapi47.z.object({ client_id: import_zod_openapi47.z.string().min(1) })
4754
+ query: import_zod_openapi48.z.object({ client_id: import_zod_openapi48.z.string().min(1) })
4328
4755
  },
4329
4756
  responses: {
4330
4757
  200: {
@@ -4349,24 +4776,24 @@ var oauthRoutes = {
4349
4776
  };
4350
4777
 
4351
4778
  // src/contracts/notification.ts
4352
- var import_zod_openapi49 = require("@hono/zod-openapi");
4779
+ var import_zod_openapi50 = require("@hono/zod-openapi");
4353
4780
 
4354
4781
  // src/schemas/notification.ts
4355
- var import_zod_openapi48 = require("@hono/zod-openapi");
4356
- var NotificationStatusSchema = import_zod_openapi48.z.enum(["UNREAD", "UNOPENED", "OPENED"]);
4782
+ var import_zod_openapi49 = require("@hono/zod-openapi");
4783
+ var NotificationStatusSchema = import_zod_openapi49.z.enum(["UNREAD", "UNOPENED", "OPENED"]);
4357
4784
  var NotificationStatusEnum = {
4358
4785
  UNREAD: "UNREAD",
4359
4786
  UNOPENED: "UNOPENED",
4360
4787
  OPENED: "OPENED"
4361
4788
  };
4362
- var NotificationActionSchema = import_zod_openapi48.z.enum(["COMMENT", "LIKE", "MENTION", "UPDATE"]);
4789
+ var NotificationActionSchema = import_zod_openapi49.z.enum(["COMMENT", "LIKE", "MENTION", "UPDATE"]);
4363
4790
  var NotificationActionEnum = {
4364
4791
  COMMENT: "COMMENT",
4365
4792
  LIKE: "LIKE",
4366
4793
  MENTION: "MENTION",
4367
4794
  UPDATE: "UPDATE"
4368
4795
  };
4369
- var NotificationTargetModelSchema = import_zod_openapi48.z.enum(["Page"]);
4796
+ var NotificationTargetModelSchema = import_zod_openapi49.z.enum(["Page"]);
4370
4797
  var NotificationTargetModelEnum = {
4371
4798
  PAGE: "Page"
4372
4799
  };
@@ -4375,71 +4802,71 @@ var PageRefSchema = PageSchema.pick({
4375
4802
  path: true,
4376
4803
  status: true
4377
4804
  });
4378
- var NotificationSchema = import_zod_openapi48.z.object({
4379
- _id: import_zod_openapi48.z.string(),
4380
- user: import_zod_openapi48.z.string(),
4805
+ var NotificationSchema = import_zod_openapi49.z.object({
4806
+ _id: import_zod_openapi49.z.string(),
4807
+ user: import_zod_openapi49.z.string(),
4381
4808
  targetModel: NotificationTargetModelSchema,
4382
4809
  target: PageRefSchema,
4383
4810
  action: NotificationActionSchema,
4384
4811
  status: NotificationStatusSchema,
4385
- actionUsers: import_zod_openapi48.z.array(UserPublicSchema),
4386
- createdAt: import_zod_openapi48.z.string()
4812
+ actionUsers: import_zod_openapi49.z.array(UserPublicSchema),
4813
+ createdAt: import_zod_openapi49.z.string()
4387
4814
  });
4388
- var ListNotificationsRequestSchema = import_zod_openapi48.z.object({
4389
- limit: import_zod_openapi48.z.coerce.number().optional().default(10),
4390
- offset: import_zod_openapi48.z.coerce.number().optional().default(0)
4815
+ var ListNotificationsRequestSchema = import_zod_openapi49.z.object({
4816
+ limit: import_zod_openapi49.z.coerce.number().optional().default(10),
4817
+ offset: import_zod_openapi49.z.coerce.number().optional().default(0)
4391
4818
  });
4392
- var ListNotificationsResponseSchema = import_zod_openapi48.z.object({
4393
- notifications: import_zod_openapi48.z.array(NotificationSchema),
4819
+ var ListNotificationsResponseSchema = import_zod_openapi49.z.object({
4820
+ notifications: import_zod_openapi49.z.array(NotificationSchema),
4394
4821
  pager: PagerSchema
4395
4822
  });
4396
- var MarkAllAsReadResponseSchema = import_zod_openapi48.z.object({
4397
- ok: import_zod_openapi48.z.literal(true)
4823
+ var MarkAllAsReadResponseSchema = import_zod_openapi49.z.object({
4824
+ ok: import_zod_openapi49.z.literal(true)
4398
4825
  });
4399
- var OpenNotificationParamSchema = import_zod_openapi48.z.object({
4400
- id: import_zod_openapi48.z.string()
4826
+ var OpenNotificationParamSchema = import_zod_openapi49.z.object({
4827
+ id: import_zod_openapi49.z.string()
4401
4828
  });
4402
- var OpenNotificationResponseSchema = import_zod_openapi48.z.object({
4829
+ var OpenNotificationResponseSchema = import_zod_openapi49.z.object({
4403
4830
  notification: NotificationSchema
4404
4831
  });
4405
- var NotificationStatusResponseSchema = import_zod_openapi48.z.object({
4406
- count: import_zod_openapi48.z.number()
4832
+ var NotificationStatusResponseSchema = import_zod_openapi49.z.object({
4833
+ count: import_zod_openapi49.z.number()
4407
4834
  });
4408
- var NotificationNotFoundErrorSchema = import_zod_openapi48.z.object({
4409
- error: import_zod_openapi48.z.object({
4410
- code: import_zod_openapi48.z.literal("NOTIFICATION_NOT_FOUND"),
4411
- message: import_zod_openapi48.z.literal("Notification not found")
4835
+ var NotificationNotFoundErrorSchema = import_zod_openapi49.z.object({
4836
+ error: import_zod_openapi49.z.object({
4837
+ code: import_zod_openapi49.z.literal("NOTIFICATION_NOT_FOUND"),
4838
+ message: import_zod_openapi49.z.literal("Notification not found")
4412
4839
  })
4413
4840
  });
4414
- var NotificationsTokenResponseSchema = import_zod_openapi48.z.object({
4415
- token: import_zod_openapi48.z.string(),
4416
- selfUserId: import_zod_openapi48.z.string(),
4417
- expiresAt: import_zod_openapi48.z.string()
4841
+ var NotificationsTokenResponseSchema = import_zod_openapi49.z.object({
4842
+ token: import_zod_openapi49.z.string(),
4843
+ selfUserId: import_zod_openapi49.z.string(),
4844
+ expiresAt: import_zod_openapi49.z.string()
4418
4845
  });
4419
- var NotificationsTokenPayloadSchema = import_zod_openapi48.z.object({
4420
- selfUserId: import_zod_openapi48.z.string(),
4846
+ var NotificationsTokenPayloadSchema = import_zod_openapi49.z.object({
4847
+ selfUserId: import_zod_openapi49.z.string(),
4421
4848
  // Random UUID mixed into every signed token so two tokens minted
4422
4849
  // within the same second still produce byte-different JWT strings.
4423
4850
  // The browser uses the token as a React effect dependency to drive
4424
4851
  // the WebSocket reconnect — without `jti`, the iat/exp pair is
4425
4852
  // identical at second granularity and the dep stays stable.
4426
- jti: import_zod_openapi48.z.string().uuid(),
4427
- iat: import_zod_openapi48.z.number().int(),
4428
- exp: import_zod_openapi48.z.number().int()
4853
+ jti: import_zod_openapi49.z.string().uuid(),
4854
+ iat: import_zod_openapi49.z.number().int(),
4855
+ exp: import_zod_openapi49.z.number().int()
4429
4856
  });
4430
- var NotificationsChangedMessageSchema = import_zod_openapi48.z.object({
4431
- type: import_zod_openapi48.z.literal("changed")
4857
+ var NotificationsChangedMessageSchema = import_zod_openapi49.z.object({
4858
+ type: import_zod_openapi49.z.literal("changed")
4432
4859
  });
4433
4860
  var NotificationsServerMessageSchema = NotificationsChangedMessageSchema;
4434
4861
 
4435
4862
  // src/contracts/notification.ts
4436
- var NotificationInvalidRequestErrorSchema = import_zod_openapi49.z.object({
4437
- error: import_zod_openapi49.z.object({
4438
- code: import_zod_openapi49.z.literal("INVALID_REQUEST"),
4439
- message: import_zod_openapi49.z.string()
4863
+ var NotificationInvalidRequestErrorSchema = import_zod_openapi50.z.object({
4864
+ error: import_zod_openapi50.z.object({
4865
+ code: import_zod_openapi50.z.literal("INVALID_REQUEST"),
4866
+ message: import_zod_openapi50.z.string()
4440
4867
  })
4441
4868
  });
4442
- var listNotificationsRoute = (0, import_zod_openapi49.createRoute)({
4869
+ var listNotificationsRoute = (0, import_zod_openapi50.createRoute)({
4443
4870
  method: "get",
4444
4871
  path: "/notifications",
4445
4872
  tags: ["notification"],
@@ -4463,7 +4890,7 @@ var listNotificationsRoute = (0, import_zod_openapi49.createRoute)({
4463
4890
  }
4464
4891
  }
4465
4892
  });
4466
- var markAllAsReadRoute = (0, import_zod_openapi49.createRoute)({
4893
+ var markAllAsReadRoute = (0, import_zod_openapi50.createRoute)({
4467
4894
  method: "post",
4468
4895
  path: "/notifications/read",
4469
4896
  tags: ["notification"],
@@ -4484,7 +4911,7 @@ var markAllAsReadRoute = (0, import_zod_openapi49.createRoute)({
4484
4911
  }
4485
4912
  }
4486
4913
  });
4487
- var getUnreadCountRoute = (0, import_zod_openapi49.createRoute)({
4914
+ var getUnreadCountRoute = (0, import_zod_openapi50.createRoute)({
4488
4915
  method: "get",
4489
4916
  path: "/notifications/status",
4490
4917
  tags: ["notification"],
@@ -4505,7 +4932,7 @@ var getUnreadCountRoute = (0, import_zod_openapi49.createRoute)({
4505
4932
  }
4506
4933
  }
4507
4934
  });
4508
- var openNotificationRoute = (0, import_zod_openapi49.createRoute)({
4935
+ var openNotificationRoute = (0, import_zod_openapi50.createRoute)({
4509
4936
  method: "post",
4510
4937
  path: "/notifications/{id}/open",
4511
4938
  tags: ["notification"],
@@ -4537,7 +4964,7 @@ var openNotificationRoute = (0, import_zod_openapi49.createRoute)({
4537
4964
  }
4538
4965
  }
4539
4966
  });
4540
- var getNotificationsTokenRoute = (0, import_zod_openapi49.createRoute)({
4967
+ var getNotificationsTokenRoute = (0, import_zod_openapi50.createRoute)({
4541
4968
  method: "get",
4542
4969
  path: "/notifications/token",
4543
4970
  tags: ["notification"],
@@ -4572,11 +4999,11 @@ var notificationRoutes = {
4572
4999
  };
4573
5000
 
4574
5001
  // src/contracts/page-collab.ts
4575
- var import_zod_openapi50 = require("@hono/zod-openapi");
4576
- var PageIdPathParamsSchema2 = import_zod_openapi50.z.object({
4577
- id: import_zod_openapi50.z.string().openapi({ description: "Page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
5002
+ var import_zod_openapi51 = require("@hono/zod-openapi");
5003
+ var PageIdPathParamsSchema2 = import_zod_openapi51.z.object({
5004
+ id: import_zod_openapi51.z.string().openapi({ description: "Page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
4578
5005
  });
4579
- var getYjsTokenRoute = (0, import_zod_openapi50.createRoute)({
5006
+ var getYjsTokenRoute = (0, import_zod_openapi51.createRoute)({
4580
5007
  method: "get",
4581
5008
  path: "/pages/{id}/yjs-token",
4582
5009
  tags: ["page-collab"],
@@ -4613,26 +5040,26 @@ var pageCollabRoutes = {
4613
5040
  };
4614
5041
 
4615
5042
  // src/contracts/page.ts
4616
- var import_zod_openapi51 = require("@hono/zod-openapi");
4617
- var PageBadRequestErrorSchema = import_zod_openapi51.z.object({
4618
- error: import_zod_openapi51.z.object({
4619
- code: import_zod_openapi51.z.string(),
4620
- message: import_zod_openapi51.z.string()
5043
+ var import_zod_openapi52 = require("@hono/zod-openapi");
5044
+ var PageBadRequestErrorSchema = import_zod_openapi52.z.object({
5045
+ error: import_zod_openapi52.z.object({
5046
+ code: import_zod_openapi52.z.string(),
5047
+ message: import_zod_openapi52.z.string()
4621
5048
  })
4622
5049
  });
4623
- var DeletePageRequestSchema = import_zod_openapi51.z.object({
4624
- page_id: import_zod_openapi51.z.string(),
4625
- revision_id: import_zod_openapi51.z.string().optional(),
4626
- completely: import_zod_openapi51.z.boolean().optional()
5050
+ var DeletePageRequestSchema = import_zod_openapi52.z.object({
5051
+ page_id: import_zod_openapi52.z.string(),
5052
+ revision_id: import_zod_openapi52.z.string().optional(),
5053
+ completely: import_zod_openapi52.z.boolean().optional()
4627
5054
  });
4628
- var RevertDeletedPageRequestSchema = import_zod_openapi51.z.object({
4629
- page_id: import_zod_openapi51.z.string()
5055
+ var RevertDeletedPageRequestSchema = import_zod_openapi52.z.object({
5056
+ page_id: import_zod_openapi52.z.string()
4630
5057
  });
4631
- var PageIdBodySchema = import_zod_openapi51.z.object({
4632
- page_id: import_zod_openapi51.z.string()
5058
+ var PageIdBodySchema = import_zod_openapi52.z.object({
5059
+ page_id: import_zod_openapi52.z.string()
4633
5060
  });
4634
- var PageResponseSchema = import_zod_openapi51.z.object({ page: PageSchema });
4635
- var getPageRoute = (0, import_zod_openapi51.createRoute)({
5061
+ var PageResponseSchema = import_zod_openapi52.z.object({ page: PageSchema });
5062
+ var getPageRoute = (0, import_zod_openapi52.createRoute)({
4636
5063
  method: "get",
4637
5064
  path: "/pages",
4638
5065
  tags: ["page"],
@@ -4643,7 +5070,7 @@ var getPageRoute = (0, import_zod_openapi51.createRoute)({
4643
5070
  },
4644
5071
  responses: {
4645
5072
  200: {
4646
- description: "The requested page with populated revision",
5073
+ description: "The requested page with populated revision. `revision.renderedAst` shape is content-negotiated via the `X-Crowi-Ast-Version` request header (RFC-0023): requests declaring `X-Crowi-Ast-Version: 1` receive the typed `{astVersion, root}` envelope; all other requests receive the stored bare mdast Root verbatim. The response varies on this header (`Vary: X-Crowi-Ast-Version`).",
4647
5074
  content: { "application/json": { schema: GetPageResponseSchema } }
4648
5075
  },
4649
5076
  401: {
@@ -4669,7 +5096,7 @@ var getPageRoute = (0, import_zod_openapi51.createRoute)({
4669
5096
  }
4670
5097
  }
4671
5098
  });
4672
- var listPagesRoute = (0, import_zod_openapi51.createRoute)({
5099
+ var listPagesRoute = (0, import_zod_openapi52.createRoute)({
4673
5100
  method: "get",
4674
5101
  path: "/pages/list",
4675
5102
  tags: ["page"],
@@ -4680,7 +5107,7 @@ var listPagesRoute = (0, import_zod_openapi51.createRoute)({
4680
5107
  },
4681
5108
  responses: {
4682
5109
  200: {
4683
- description: "Page list (newest first) with optional portal page",
5110
+ description: "Page list (newest first) with optional portal page and an accurate `total` (the full, unpaginated count of the same viewer-visible set `pages` is a page of). The portal document is the only row carrying `revision.renderedAst`; its shape is content-negotiated via the `X-Crowi-Ast-Version` request header (RFC-0023, same semantics as GET /pages). The response varies on this header (`Vary: X-Crowi-Ast-Version`).",
4684
5111
  content: { "application/json": { schema: ListPagesResponseSchema } }
4685
5112
  },
4686
5113
  401: {
@@ -4689,7 +5116,7 @@ var listPagesRoute = (0, import_zod_openapi51.createRoute)({
4689
5116
  }
4690
5117
  }
4691
5118
  });
4692
- var listPageChildrenRoute = (0, import_zod_openapi51.createRoute)({
5119
+ var listPageChildrenRoute = (0, import_zod_openapi52.createRoute)({
4693
5120
  method: "get",
4694
5121
  path: "/pages/children",
4695
5122
  tags: ["page"],
@@ -4709,7 +5136,7 @@ var listPageChildrenRoute = (0, import_zod_openapi51.createRoute)({
4709
5136
  }
4710
5137
  }
4711
5138
  });
4712
- var createPageRoute = (0, import_zod_openapi51.createRoute)({
5139
+ var createPageRoute = (0, import_zod_openapi52.createRoute)({
4713
5140
  method: "post",
4714
5141
  path: "/pages",
4715
5142
  tags: ["page"],
@@ -4735,7 +5162,7 @@ var createPageRoute = (0, import_zod_openapi51.createRoute)({
4735
5162
  }
4736
5163
  }
4737
5164
  });
4738
- var updatePageRoute = (0, import_zod_openapi51.createRoute)({
5165
+ var updatePageRoute = (0, import_zod_openapi52.createRoute)({
4739
5166
  method: "put",
4740
5167
  path: "/pages",
4741
5168
  tags: ["page"],
@@ -4769,7 +5196,7 @@ var updatePageRoute = (0, import_zod_openapi51.createRoute)({
4769
5196
  }
4770
5197
  }
4771
5198
  });
4772
- var setPageGrantRoute = (0, import_zod_openapi51.createRoute)({
5199
+ var setPageGrantRoute = (0, import_zod_openapi52.createRoute)({
4773
5200
  method: "put",
4774
5201
  path: "/pages/grant",
4775
5202
  tags: ["page"],
@@ -4799,7 +5226,7 @@ var setPageGrantRoute = (0, import_zod_openapi51.createRoute)({
4799
5226
  }
4800
5227
  }
4801
5228
  });
4802
- var seenPageRoute = (0, import_zod_openapi51.createRoute)({
5229
+ var seenPageRoute = (0, import_zod_openapi52.createRoute)({
4803
5230
  method: "post",
4804
5231
  path: "/pages/seen",
4805
5232
  tags: ["page"],
@@ -4829,7 +5256,7 @@ var seenPageRoute = (0, import_zod_openapi51.createRoute)({
4829
5256
  }
4830
5257
  }
4831
5258
  });
4832
- var getSeenUsersRoute = (0, import_zod_openapi51.createRoute)({
5259
+ var getSeenUsersRoute = (0, import_zod_openapi52.createRoute)({
4833
5260
  method: "get",
4834
5261
  path: "/pages/seen-users",
4835
5262
  tags: ["page"],
@@ -4857,7 +5284,7 @@ var getSeenUsersRoute = (0, import_zod_openapi51.createRoute)({
4857
5284
  }
4858
5285
  }
4859
5286
  });
4860
- var likePageRoute = (0, import_zod_openapi51.createRoute)({
5287
+ var likePageRoute = (0, import_zod_openapi52.createRoute)({
4861
5288
  method: "post",
4862
5289
  path: "/pages/like",
4863
5290
  tags: ["page"],
@@ -4887,7 +5314,7 @@ var likePageRoute = (0, import_zod_openapi51.createRoute)({
4887
5314
  }
4888
5315
  }
4889
5316
  });
4890
- var unlikePageRoute = (0, import_zod_openapi51.createRoute)({
5317
+ var unlikePageRoute = (0, import_zod_openapi52.createRoute)({
4891
5318
  method: "post",
4892
5319
  path: "/pages/unlike",
4893
5320
  tags: ["page"],
@@ -4917,7 +5344,7 @@ var unlikePageRoute = (0, import_zod_openapi51.createRoute)({
4917
5344
  }
4918
5345
  }
4919
5346
  });
4920
- var claimPageLinkAccessRoute = (0, import_zod_openapi51.createRoute)({
5347
+ var claimPageLinkAccessRoute = (0, import_zod_openapi52.createRoute)({
4921
5348
  method: "post",
4922
5349
  path: "/pages/link-access",
4923
5350
  tags: ["page"],
@@ -4945,7 +5372,7 @@ var claimPageLinkAccessRoute = (0, import_zod_openapi51.createRoute)({
4945
5372
  description: "The caller has no access to the page (isGrantedFor is false) or lacks scope / is a non-web session \u2014 403 is about the caller lacking access, never about the page grant type per se",
4946
5373
  content: {
4947
5374
  "application/json": {
4948
- schema: import_zod_openapi51.z.union([PageNotGrantedErrorSchema, InsufficientScopeErrorSchema])
5375
+ schema: import_zod_openapi52.z.union([PageNotGrantedErrorSchema, InsufficientScopeErrorSchema])
4949
5376
  }
4950
5377
  }
4951
5378
  },
@@ -4963,7 +5390,7 @@ var claimPageLinkAccessRoute = (0, import_zod_openapi51.createRoute)({
4963
5390
  }
4964
5391
  }
4965
5392
  });
4966
- var getWatchStatusRoute = (0, import_zod_openapi51.createRoute)({
5393
+ var getWatchStatusRoute = (0, import_zod_openapi52.createRoute)({
4967
5394
  method: "get",
4968
5395
  path: "/pages/watch",
4969
5396
  tags: ["page"],
@@ -4991,7 +5418,7 @@ var getWatchStatusRoute = (0, import_zod_openapi51.createRoute)({
4991
5418
  }
4992
5419
  }
4993
5420
  });
4994
- var setWatchStatusRoute = (0, import_zod_openapi51.createRoute)({
5421
+ var setWatchStatusRoute = (0, import_zod_openapi52.createRoute)({
4995
5422
  method: "put",
4996
5423
  path: "/pages/watch",
4997
5424
  tags: ["page"],
@@ -5021,7 +5448,7 @@ var setWatchStatusRoute = (0, import_zod_openapi51.createRoute)({
5021
5448
  }
5022
5449
  }
5023
5450
  });
5024
- var deletePageRoute = (0, import_zod_openapi51.createRoute)({
5451
+ var deletePageRoute = (0, import_zod_openapi52.createRoute)({
5025
5452
  method: "delete",
5026
5453
  path: "/pages",
5027
5454
  tags: ["page"],
@@ -5055,7 +5482,7 @@ var deletePageRoute = (0, import_zod_openapi51.createRoute)({
5055
5482
  }
5056
5483
  }
5057
5484
  });
5058
- var revertDeletedPageRoute = (0, import_zod_openapi51.createRoute)({
5485
+ var revertDeletedPageRoute = (0, import_zod_openapi52.createRoute)({
5059
5486
  method: "post",
5060
5487
  path: "/pages/revert",
5061
5488
  tags: ["page"],
@@ -5085,7 +5512,7 @@ var revertDeletedPageRoute = (0, import_zod_openapi51.createRoute)({
5085
5512
  }
5086
5513
  }
5087
5514
  });
5088
- var revertToRevisionRoute = (0, import_zod_openapi51.createRoute)({
5515
+ var revertToRevisionRoute = (0, import_zod_openapi52.createRoute)({
5089
5516
  method: "post",
5090
5517
  path: "/pages/revert-to-revision",
5091
5518
  tags: ["page"],
@@ -5115,7 +5542,7 @@ var revertToRevisionRoute = (0, import_zod_openapi51.createRoute)({
5115
5542
  }
5116
5543
  }
5117
5544
  });
5118
- var renamePageRoute = (0, import_zod_openapi51.createRoute)({
5545
+ var renamePageRoute = (0, import_zod_openapi52.createRoute)({
5119
5546
  method: "post",
5120
5547
  path: "/pages/rename",
5121
5548
  tags: ["page"],
@@ -5135,7 +5562,7 @@ var renamePageRoute = (0, import_zod_openapi51.createRoute)({
5135
5562
  description: "PAGE_INVALID_NAME / PAGE_EXISTS / PAGE_RENAME_FAILED / PAGE_RENAME_TREE_FAILED",
5136
5563
  content: {
5137
5564
  "application/json": {
5138
- schema: import_zod_openapi51.z.union([PageBadRequestErrorSchema, RenameTreeErrorSchema])
5565
+ schema: import_zod_openapi52.z.union([PageBadRequestErrorSchema, RenameTreeErrorSchema])
5139
5566
  }
5140
5567
  }
5141
5568
  },
@@ -5153,7 +5580,7 @@ var renamePageRoute = (0, import_zod_openapi51.createRoute)({
5153
5580
  }
5154
5581
  }
5155
5582
  });
5156
- var renameSubtreeRoute = (0, import_zod_openapi51.createRoute)({
5583
+ var renameSubtreeRoute = (0, import_zod_openapi52.createRoute)({
5157
5584
  method: "post",
5158
5585
  path: "/pages/rename-subtree",
5159
5586
  tags: ["page"],
@@ -5173,7 +5600,7 @@ var renameSubtreeRoute = (0, import_zod_openapi51.createRoute)({
5173
5600
  description: "PAGE_INVALID_NAME / PAGE_RENAME_TREE_FAILED (collisions, nothing to move, or partial failure)",
5174
5601
  content: {
5175
5602
  "application/json": {
5176
- schema: import_zod_openapi51.z.union([PageBadRequestErrorSchema, RenameTreeErrorSchema])
5603
+ schema: import_zod_openapi52.z.union([PageBadRequestErrorSchema, RenameTreeErrorSchema])
5177
5604
  }
5178
5605
  }
5179
5606
  },
@@ -5223,19 +5650,20 @@ var pageRoutes = {
5223
5650
  };
5224
5651
 
5225
5652
  // src/contracts/page-preview.ts
5226
- var import_zod_openapi53 = require("@hono/zod-openapi");
5653
+ var import_zod_openapi54 = require("@hono/zod-openapi");
5227
5654
 
5228
5655
  // src/schemas/page-preview.ts
5229
- var import_zod_openapi52 = require("@hono/zod-openapi");
5230
- var PreviewPageRequestSchema = import_zod_openapi52.z.object({
5231
- body: import_zod_openapi52.z.string()
5656
+ var import_zod_openapi53 = require("@hono/zod-openapi");
5657
+ var PreviewPageRequestSchema = import_zod_openapi53.z.object({
5658
+ body: import_zod_openapi53.z.string()
5232
5659
  });
5233
- var PreviewPageResponseSchema = import_zod_openapi52.z.object({
5234
- renderedAst: import_zod_openapi52.z.unknown()
5660
+ var PreviewPageResponseSchema = import_zod_openapi53.z.object({
5661
+ renderedAst: RenderedAstValueSchema.optional(),
5662
+ renderedAstArtifactKey: RenderedAstArtifactKeySchema.optional()
5235
5663
  });
5236
5664
 
5237
5665
  // src/contracts/page-preview.ts
5238
- var previewPageRoute = (0, import_zod_openapi53.createRoute)({
5666
+ var previewPageRoute = (0, import_zod_openapi54.createRoute)({
5239
5667
  method: "post",
5240
5668
  path: "/pages/preview",
5241
5669
  tags: ["page-preview"],
@@ -5248,7 +5676,7 @@ var previewPageRoute = (0, import_zod_openapi53.createRoute)({
5248
5676
  },
5249
5677
  responses: {
5250
5678
  200: {
5251
- description: "Rendered mdast tree (serialised \u2014 same shape as a persisted revision.renderedAst)",
5679
+ description: "Rendered mdast tree (serialised \u2014 same shape as a persisted revision.renderedAst). Content-negotiated via the `X-Crowi-Ast-Version` request header (RFC-0023): requests declaring `X-Crowi-Ast-Version: 1` receive the typed `{astVersion, root}` envelope; all other requests receive the bare mdast Root. The response varies on this header (`Vary: X-Crowi-Ast-Version`).",
5252
5680
  content: { "application/json": { schema: PreviewPageResponseSchema } }
5253
5681
  },
5254
5682
  401: {
@@ -5273,80 +5701,80 @@ var pagePreviewRoutes = {
5273
5701
  };
5274
5702
 
5275
5703
  // src/contracts/presence.ts
5276
- var import_zod_openapi55 = require("@hono/zod-openapi");
5704
+ var import_zod_openapi56 = require("@hono/zod-openapi");
5277
5705
 
5278
5706
  // src/schemas/presence.ts
5279
- var import_zod_openapi54 = require("@hono/zod-openapi");
5280
- var PresenceTokenResponseSchema = import_zod_openapi54.z.object({
5281
- token: import_zod_openapi54.z.string(),
5282
- pageId: import_zod_openapi54.z.string(),
5283
- selfUserId: import_zod_openapi54.z.string(),
5284
- expiresAt: import_zod_openapi54.z.string()
5285
- });
5286
- var PresenceTokenPayloadSchema = import_zod_openapi54.z.object({
5287
- userId: import_zod_openapi54.z.string(),
5288
- pageId: import_zod_openapi54.z.string(),
5289
- iat: import_zod_openapi54.z.number().int(),
5290
- exp: import_zod_openapi54.z.number().int()
5291
- });
5292
- var PresenceViewerSchema = import_zod_openapi54.z.object({
5293
- userId: import_zod_openapi54.z.string(),
5294
- username: import_zod_openapi54.z.string(),
5295
- displayName: import_zod_openapi54.z.string(),
5296
- avatarUrl: import_zod_openapi54.z.string().nullable(),
5297
- isEditing: import_zod_openapi54.z.boolean(),
5298
- joinedAt: import_zod_openapi54.z.number().int()
5299
- });
5300
- var PresenceHeartbeatMessageSchema = import_zod_openapi54.z.object({
5301
- type: import_zod_openapi54.z.literal("heartbeat")
5707
+ var import_zod_openapi55 = require("@hono/zod-openapi");
5708
+ var PresenceTokenResponseSchema = import_zod_openapi55.z.object({
5709
+ token: import_zod_openapi55.z.string(),
5710
+ pageId: import_zod_openapi55.z.string(),
5711
+ selfUserId: import_zod_openapi55.z.string(),
5712
+ expiresAt: import_zod_openapi55.z.string()
5713
+ });
5714
+ var PresenceTokenPayloadSchema = import_zod_openapi55.z.object({
5715
+ userId: import_zod_openapi55.z.string(),
5716
+ pageId: import_zod_openapi55.z.string(),
5717
+ iat: import_zod_openapi55.z.number().int(),
5718
+ exp: import_zod_openapi55.z.number().int()
5719
+ });
5720
+ var PresenceViewerSchema = import_zod_openapi55.z.object({
5721
+ userId: import_zod_openapi55.z.string(),
5722
+ username: import_zod_openapi55.z.string(),
5723
+ displayName: import_zod_openapi55.z.string(),
5724
+ avatarUrl: import_zod_openapi55.z.string().nullable(),
5725
+ isEditing: import_zod_openapi55.z.boolean(),
5726
+ joinedAt: import_zod_openapi55.z.number().int()
5727
+ });
5728
+ var PresenceHeartbeatMessageSchema = import_zod_openapi55.z.object({
5729
+ type: import_zod_openapi55.z.literal("heartbeat")
5302
5730
  });
5303
5731
  var PresenceClientMessageSchema = PresenceHeartbeatMessageSchema;
5304
- var PresenceViewersMessageSchema = import_zod_openapi54.z.object({
5305
- type: import_zod_openapi54.z.literal("viewers"),
5306
- viewers: import_zod_openapi54.z.array(PresenceViewerSchema),
5307
- generation: import_zod_openapi54.z.number().int()
5308
- });
5309
- var PresencePageUpdatedMessageSchema = import_zod_openapi54.z.object({
5310
- type: import_zod_openapi54.z.literal("page-updated"),
5311
- pageId: import_zod_openapi54.z.string(),
5312
- revisionId: import_zod_openapi54.z.string(),
5313
- editorUserId: import_zod_openapi54.z.string(),
5314
- editorDisplayName: import_zod_openapi54.z.string()
5315
- });
5316
- var PresenceCommentChangedMessageSchema = import_zod_openapi54.z.object({
5317
- type: import_zod_openapi54.z.literal("comment-changed"),
5318
- pageId: import_zod_openapi54.z.string(),
5319
- changeType: import_zod_openapi54.z.enum(["added", "removed"]),
5320
- commentId: import_zod_openapi54.z.string(),
5321
- actorUserId: import_zod_openapi54.z.string().optional()
5322
- });
5323
- var PresenceServerMessageSchema = import_zod_openapi54.z.discriminatedUnion("type", [
5732
+ var PresenceViewersMessageSchema = import_zod_openapi55.z.object({
5733
+ type: import_zod_openapi55.z.literal("viewers"),
5734
+ viewers: import_zod_openapi55.z.array(PresenceViewerSchema),
5735
+ generation: import_zod_openapi55.z.number().int()
5736
+ });
5737
+ var PresencePageUpdatedMessageSchema = import_zod_openapi55.z.object({
5738
+ type: import_zod_openapi55.z.literal("page-updated"),
5739
+ pageId: import_zod_openapi55.z.string(),
5740
+ revisionId: import_zod_openapi55.z.string(),
5741
+ editorUserId: import_zod_openapi55.z.string(),
5742
+ editorDisplayName: import_zod_openapi55.z.string()
5743
+ });
5744
+ var PresenceCommentChangedMessageSchema = import_zod_openapi55.z.object({
5745
+ type: import_zod_openapi55.z.literal("comment-changed"),
5746
+ pageId: import_zod_openapi55.z.string(),
5747
+ changeType: import_zod_openapi55.z.enum(["added", "removed"]),
5748
+ commentId: import_zod_openapi55.z.string(),
5749
+ actorUserId: import_zod_openapi55.z.string().optional()
5750
+ });
5751
+ var PresenceServerMessageSchema = import_zod_openapi55.z.discriminatedUnion("type", [
5324
5752
  PresenceViewersMessageSchema,
5325
5753
  PresencePageUpdatedMessageSchema,
5326
5754
  PresenceCommentChangedMessageSchema
5327
5755
  ]);
5328
- var LikerSchema = import_zod_openapi54.z.object({
5329
- id: import_zod_openapi54.z.string(),
5330
- username: import_zod_openapi54.z.string(),
5331
- displayName: import_zod_openapi54.z.string(),
5332
- avatarUrl: import_zod_openapi54.z.string().nullable(),
5333
- likedAt: import_zod_openapi54.z.string().nullable()
5334
- });
5335
- var LikersResponseSchema = import_zod_openapi54.z.object({
5336
- users: import_zod_openapi54.z.array(LikerSchema),
5337
- totalCount: import_zod_openapi54.z.number().int().nonnegative()
5338
- });
5339
- var GetLikersRequestSchema = import_zod_openapi54.z.object({
5756
+ var LikerSchema = import_zod_openapi55.z.object({
5757
+ id: import_zod_openapi55.z.string(),
5758
+ username: import_zod_openapi55.z.string(),
5759
+ displayName: import_zod_openapi55.z.string(),
5760
+ avatarUrl: import_zod_openapi55.z.string().nullable(),
5761
+ likedAt: import_zod_openapi55.z.string().nullable()
5762
+ });
5763
+ var LikersResponseSchema = import_zod_openapi55.z.object({
5764
+ users: import_zod_openapi55.z.array(LikerSchema),
5765
+ totalCount: import_zod_openapi55.z.number().int().nonnegative()
5766
+ });
5767
+ var GetLikersRequestSchema = import_zod_openapi55.z.object({
5340
5768
  // Optional cap on returned `users`. `totalCount` always reflects the
5341
5769
  // full count regardless of `limit`. Omit for the full list.
5342
- limit: import_zod_openapi54.z.coerce.number().int().positive().optional()
5770
+ limit: import_zod_openapi55.z.coerce.number().int().positive().optional()
5343
5771
  });
5344
5772
 
5345
5773
  // src/contracts/presence.ts
5346
- var PageIdPathParamsSchema3 = import_zod_openapi55.z.object({
5347
- id: import_zod_openapi55.z.string().openapi({ description: "Page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
5774
+ var PageIdPathParamsSchema3 = import_zod_openapi56.z.object({
5775
+ id: import_zod_openapi56.z.string().openapi({ description: "Page id (24-char hex ObjectId)", example: "507f1f77bcf86cd799439011" })
5348
5776
  });
5349
- var getPresenceTokenRoute = (0, import_zod_openapi55.createRoute)({
5777
+ var getPresenceTokenRoute = (0, import_zod_openapi56.createRoute)({
5350
5778
  method: "get",
5351
5779
  path: "/pages/{id}/presence-token",
5352
5780
  tags: ["presence"],
@@ -5378,7 +5806,7 @@ var getPresenceTokenRoute = (0, import_zod_openapi55.createRoute)({
5378
5806
  }
5379
5807
  }
5380
5808
  });
5381
- var getLikersRoute = (0, import_zod_openapi55.createRoute)({
5809
+ var getLikersRoute = (0, import_zod_openapi56.createRoute)({
5382
5810
  method: "get",
5383
5811
  path: "/pages/{id}/likers",
5384
5812
  tags: ["presence"],
@@ -5417,50 +5845,50 @@ var presenceRoutes = {
5417
5845
  };
5418
5846
 
5419
5847
  // src/contracts/revision.ts
5420
- var import_zod_openapi57 = require("@hono/zod-openapi");
5848
+ var import_zod_openapi58 = require("@hono/zod-openapi");
5421
5849
 
5422
5850
  // src/schemas/revision.ts
5423
- var import_zod_openapi56 = require("@hono/zod-openapi");
5424
- var RevisionMetaSchema = import_zod_openapi56.z.object({
5425
- _id: import_zod_openapi56.z.string(),
5426
- path: import_zod_openapi56.z.string(),
5851
+ var import_zod_openapi57 = require("@hono/zod-openapi");
5852
+ var RevisionMetaSchema = import_zod_openapi57.z.object({
5853
+ _id: import_zod_openapi57.z.string(),
5854
+ path: import_zod_openapi57.z.string(),
5427
5855
  author: PageUserSchema.nullable().optional(),
5428
5856
  savedBy: PageUserSchema.nullable().optional(),
5429
- contributors: import_zod_openapi56.z.array(PageUserSchema).optional(),
5857
+ contributors: import_zod_openapi57.z.array(PageUserSchema).optional(),
5430
5858
  // RFC-0010 — edit channel. `web` (browser / collab editor) vs the API
5431
5859
  // token paths (`oauth` / `pat`). Absent on pre-RFC-0010 revisions. The
5432
5860
  // history UI shows an "app" chip for the token paths.
5433
- editVia: import_zod_openapi56.z.enum(["web", "oauth", "pat"]).optional(),
5434
- createdAt: import_zod_openapi56.z.string()
5861
+ editVia: import_zod_openapi57.z.enum(["web", "oauth", "pat"]).optional(),
5862
+ createdAt: import_zod_openapi57.z.string()
5435
5863
  });
5436
- var ListRevisionsRequestSchema = import_zod_openapi56.z.object({
5437
- limit: import_zod_openapi56.z.coerce.number().int().positive().max(200).optional().default(50),
5438
- offset: import_zod_openapi56.z.coerce.number().int().min(0).optional().default(0)
5864
+ var ListRevisionsRequestSchema = import_zod_openapi57.z.object({
5865
+ limit: import_zod_openapi57.z.coerce.number().int().positive().max(200).optional().default(50),
5866
+ offset: import_zod_openapi57.z.coerce.number().int().min(0).optional().default(0)
5439
5867
  });
5440
- var ListRevisionsResponseSchema = import_zod_openapi56.z.object({
5441
- revisions: import_zod_openapi56.z.array(RevisionMetaSchema),
5868
+ var ListRevisionsResponseSchema = import_zod_openapi57.z.object({
5869
+ revisions: import_zod_openapi57.z.array(RevisionMetaSchema),
5442
5870
  pager: PagerSchema
5443
5871
  });
5444
- var GetRevisionResponseSchema = import_zod_openapi56.z.object({
5872
+ var GetRevisionResponseSchema = import_zod_openapi57.z.object({
5445
5873
  revision: RevisionSchema
5446
5874
  });
5447
- var GetRevisionsRequestSchema = import_zod_openapi56.z.object({
5448
- ids: import_zod_openapi56.z.string().min(1, "ids is required")
5875
+ var GetRevisionsRequestSchema = import_zod_openapi57.z.object({
5876
+ ids: import_zod_openapi57.z.string().min(1, "ids is required")
5449
5877
  });
5450
- var GetRevisionsResponseSchema = import_zod_openapi56.z.object({
5451
- revisions: import_zod_openapi56.z.array(RevisionSchema)
5878
+ var GetRevisionsResponseSchema = import_zod_openapi57.z.object({
5879
+ revisions: import_zod_openapi57.z.array(RevisionSchema)
5452
5880
  });
5453
- var RevisionInvalidRequestErrorSchema = import_zod_openapi56.z.object({
5454
- error: import_zod_openapi56.z.object({
5455
- code: import_zod_openapi56.z.literal("INVALID_REQUEST"),
5456
- message: import_zod_openapi56.z.string()
5881
+ var RevisionInvalidRequestErrorSchema = import_zod_openapi57.z.object({
5882
+ error: import_zod_openapi57.z.object({
5883
+ code: import_zod_openapi57.z.literal("INVALID_REQUEST"),
5884
+ message: import_zod_openapi57.z.string()
5457
5885
  })
5458
5886
  });
5459
5887
 
5460
5888
  // src/contracts/revision.ts
5461
- var PageIdParamSchema = import_zod_openapi57.z.object({ page_id: import_zod_openapi57.z.string() });
5462
- var RevisionIdParamSchema = import_zod_openapi57.z.object({ id: import_zod_openapi57.z.string() });
5463
- var listRevisionsRoute = (0, import_zod_openapi57.createRoute)({
5889
+ var PageIdParamSchema = import_zod_openapi58.z.object({ page_id: import_zod_openapi58.z.string() });
5890
+ var RevisionIdParamSchema = import_zod_openapi58.z.object({ id: import_zod_openapi58.z.string() });
5891
+ var listRevisionsRoute = (0, import_zod_openapi58.createRoute)({
5464
5892
  method: "get",
5465
5893
  path: "/pages/{page_id}/revisions",
5466
5894
  tags: ["revision"],
@@ -5489,7 +5917,7 @@ var listRevisionsRoute = (0, import_zod_openapi57.createRoute)({
5489
5917
  }
5490
5918
  }
5491
5919
  });
5492
- var getRevisionsRoute = (0, import_zod_openapi57.createRoute)({
5920
+ var getRevisionsRoute = (0, import_zod_openapi58.createRoute)({
5493
5921
  method: "get",
5494
5922
  path: "/pages/revisions",
5495
5923
  tags: ["revision"],
@@ -5517,7 +5945,7 @@ var getRevisionsRoute = (0, import_zod_openapi57.createRoute)({
5517
5945
  }
5518
5946
  }
5519
5947
  });
5520
- var getRevisionRoute = (0, import_zod_openapi57.createRoute)({
5948
+ var getRevisionRoute = (0, import_zod_openapi58.createRoute)({
5521
5949
  method: "get",
5522
5950
  path: "/pages/revisions/{id}",
5523
5951
  tags: ["revision"],
@@ -5528,7 +5956,7 @@ var getRevisionRoute = (0, import_zod_openapi57.createRoute)({
5528
5956
  },
5529
5957
  responses: {
5530
5958
  200: {
5531
- description: "Full revision document",
5959
+ description: "Full revision document. `renderedAst` shape is content-negotiated via the `X-Crowi-Ast-Version` request header (RFC-0023): requests declaring `X-Crowi-Ast-Version: 1` receive the typed `{astVersion, root}` envelope; all other requests receive the stored bare mdast Root verbatim. The response varies on this header (`Vary: X-Crowi-Ast-Version`).",
5532
5960
  content: { "application/json": { schema: GetRevisionResponseSchema } }
5533
5961
  },
5534
5962
  400: {
@@ -5555,39 +5983,39 @@ var revisionRoutes = {
5555
5983
  };
5556
5984
 
5557
5985
  // src/contracts/admin-crypto.ts
5558
- var import_zod_openapi59 = require("@hono/zod-openapi");
5986
+ var import_zod_openapi60 = require("@hono/zod-openapi");
5559
5987
 
5560
5988
  // src/schemas/admin-crypto.ts
5561
- var import_zod_openapi58 = require("@hono/zod-openapi");
5562
- var SensitiveConfigEntrySchema = import_zod_openapi58.z.object({
5563
- ns: import_zod_openapi58.z.string(),
5564
- key: import_zod_openapi58.z.string(),
5565
- present: import_zod_openapi58.z.boolean(),
5566
- encrypted: import_zod_openapi58.z.boolean()
5989
+ var import_zod_openapi59 = require("@hono/zod-openapi");
5990
+ var SensitiveConfigEntrySchema = import_zod_openapi59.z.object({
5991
+ ns: import_zod_openapi59.z.string(),
5992
+ key: import_zod_openapi59.z.string(),
5993
+ present: import_zod_openapi59.z.boolean(),
5994
+ encrypted: import_zod_openapi59.z.boolean()
5567
5995
  });
5568
- var CryptoStatusResponseSchema = import_zod_openapi58.z.object({
5996
+ var CryptoStatusResponseSchema = import_zod_openapi59.z.object({
5569
5997
  /** False when CROWI_ENCRYPTION_KEY is not configured — UI shows a setup hint. */
5570
- encryptionConfigured: import_zod_openapi58.z.boolean(),
5571
- unencryptedCount: import_zod_openapi58.z.number().int().min(0),
5572
- encryptedCount: import_zod_openapi58.z.number().int().min(0),
5573
- entries: import_zod_openapi58.z.array(SensitiveConfigEntrySchema)
5998
+ encryptionConfigured: import_zod_openapi59.z.boolean(),
5999
+ unencryptedCount: import_zod_openapi59.z.number().int().min(0),
6000
+ encryptedCount: import_zod_openapi59.z.number().int().min(0),
6001
+ entries: import_zod_openapi59.z.array(SensitiveConfigEntrySchema)
5574
6002
  });
5575
- var ReencryptResponseSchema = import_zod_openapi58.z.object({
5576
- rewritten: import_zod_openapi58.z.number().int().min(0),
6003
+ var ReencryptResponseSchema = import_zod_openapi59.z.object({
6004
+ rewritten: import_zod_openapi59.z.number().int().min(0),
5577
6005
  /** Already encrypted, skipped on this run. */
5578
- alreadyEncrypted: import_zod_openapi58.z.number().int().min(0),
6006
+ alreadyEncrypted: import_zod_openapi59.z.number().int().min(0),
5579
6007
  /** Sensitive registry entries that had no row in the DB at all. */
5580
- missing: import_zod_openapi58.z.number().int().min(0)
6008
+ missing: import_zod_openapi59.z.number().int().min(0)
5581
6009
  });
5582
- var EncryptionNotConfiguredErrorSchema = import_zod_openapi58.z.object({
5583
- error: import_zod_openapi58.z.object({
5584
- code: import_zod_openapi58.z.literal("ENCRYPTION_NOT_CONFIGURED"),
5585
- message: import_zod_openapi58.z.string()
6010
+ var EncryptionNotConfiguredErrorSchema = import_zod_openapi59.z.object({
6011
+ error: import_zod_openapi59.z.object({
6012
+ code: import_zod_openapi59.z.literal("ENCRYPTION_NOT_CONFIGURED"),
6013
+ message: import_zod_openapi59.z.string()
5586
6014
  })
5587
6015
  });
5588
6016
 
5589
6017
  // src/contracts/admin-crypto.ts
5590
- var getCryptoStatusRoute = (0, import_zod_openapi59.createRoute)({
6018
+ var getCryptoStatusRoute = (0, import_zod_openapi60.createRoute)({
5591
6019
  method: "get",
5592
6020
  path: "/admin/crypto/status",
5593
6021
  tags: ["adminCrypto"],
@@ -5612,7 +6040,7 @@ var getCryptoStatusRoute = (0, import_zod_openapi59.createRoute)({
5612
6040
  }
5613
6041
  }
5614
6042
  });
5615
- var reencryptAllRoute = (0, import_zod_openapi59.createRoute)({
6043
+ var reencryptAllRoute = (0, import_zod_openapi60.createRoute)({
5616
6044
  method: "post",
5617
6045
  path: "/admin/crypto/reencrypt",
5618
6046
  tags: ["adminCrypto"],
@@ -5647,37 +6075,37 @@ var adminCryptoRoutes = {
5647
6075
  };
5648
6076
 
5649
6077
  // src/contracts/search.ts
5650
- var import_zod_openapi61 = require("@hono/zod-openapi");
6078
+ var import_zod_openapi62 = require("@hono/zod-openapi");
5651
6079
 
5652
6080
  // src/schemas/search.ts
5653
- var import_zod_openapi60 = require("@hono/zod-openapi");
5654
- var SearchPageTypeSchema = import_zod_openapi60.z.enum(["portal", "public", "user"]);
5655
- var SearchPagesRequestSchema = import_zod_openapi60.z.object({
5656
- q: import_zod_openapi60.z.string().min(1),
5657
- tree: import_zod_openapi60.z.string().optional(),
6081
+ var import_zod_openapi61 = require("@hono/zod-openapi");
6082
+ var SearchPageTypeSchema = import_zod_openapi61.z.enum(["portal", "public", "user"]);
6083
+ var SearchPagesRequestSchema = import_zod_openapi61.z.object({
6084
+ q: import_zod_openapi61.z.string().min(1),
6085
+ tree: import_zod_openapi61.z.string().optional(),
5658
6086
  type: SearchPageTypeSchema.optional(),
5659
- page: import_zod_openapi60.z.coerce.number().int().min(1).default(1),
5660
- limit: import_zod_openapi60.z.coerce.number().int().min(1).max(100).default(50)
5661
- });
5662
- var SearchHitSchema = import_zod_openapi60.z.object({
5663
- pageId: import_zod_openapi60.z.string(),
5664
- path: import_zod_openapi60.z.string(),
5665
- score: import_zod_openapi60.z.number().optional(),
5666
- snippet: import_zod_openapi60.z.string().optional(),
5667
- bookmarkCount: import_zod_openapi60.z.number(),
6087
+ page: import_zod_openapi61.z.coerce.number().int().min(1).default(1),
6088
+ limit: import_zod_openapi61.z.coerce.number().int().min(1).max(100).default(50)
6089
+ });
6090
+ var SearchHitSchema = import_zod_openapi61.z.object({
6091
+ pageId: import_zod_openapi61.z.string(),
6092
+ path: import_zod_openapi61.z.string(),
6093
+ score: import_zod_openapi61.z.number().optional(),
6094
+ snippet: import_zod_openapi61.z.string().optional(),
6095
+ bookmarkCount: import_zod_openapi61.z.number(),
5668
6096
  page: PageSchema
5669
6097
  });
5670
- var SearchPagesResponseSchema = import_zod_openapi60.z.object({
5671
- meta: import_zod_openapi60.z.object({
5672
- took: import_zod_openapi60.z.number().optional(),
5673
- total: import_zod_openapi60.z.number(),
5674
- results: import_zod_openapi60.z.number()
6098
+ var SearchPagesResponseSchema = import_zod_openapi61.z.object({
6099
+ meta: import_zod_openapi61.z.object({
6100
+ took: import_zod_openapi61.z.number().optional(),
6101
+ total: import_zod_openapi61.z.number(),
6102
+ results: import_zod_openapi61.z.number()
5675
6103
  }),
5676
- data: import_zod_openapi60.z.array(SearchHitSchema)
6104
+ data: import_zod_openapi61.z.array(SearchHitSchema)
5677
6105
  });
5678
6106
 
5679
6107
  // src/contracts/search.ts
5680
- var searchPagesRoute = (0, import_zod_openapi61.createRoute)({
6108
+ var searchPagesRoute = (0, import_zod_openapi62.createRoute)({
5681
6109
  method: "get",
5682
6110
  path: "/search",
5683
6111
  tags: ["search"],
@@ -5714,56 +6142,56 @@ var searchRoutes = {
5714
6142
  };
5715
6143
 
5716
6144
  // src/contracts/token-auth.ts
5717
- var import_zod_openapi63 = require("@hono/zod-openapi");
6145
+ var import_zod_openapi64 = require("@hono/zod-openapi");
5718
6146
 
5719
6147
  // src/schemas/auth.ts
5720
- var import_zod_openapi62 = require("@hono/zod-openapi");
5721
- var TokenAuthLoginRequestSchema = import_zod_openapi62.z.object({
5722
- email: import_zod_openapi62.z.string().email(),
5723
- password: import_zod_openapi62.z.string().min(6)
5724
- });
5725
- var TokenAuthResponseSchema = import_zod_openapi62.z.object({
5726
- accessToken: import_zod_openapi62.z.string(),
5727
- refreshToken: import_zod_openapi62.z.string(),
5728
- expiresIn: import_zod_openapi62.z.number(),
6148
+ var import_zod_openapi63 = require("@hono/zod-openapi");
6149
+ var TokenAuthLoginRequestSchema = import_zod_openapi63.z.object({
6150
+ email: import_zod_openapi63.z.string().email(),
6151
+ password: import_zod_openapi63.z.string().min(6)
6152
+ });
6153
+ var TokenAuthResponseSchema = import_zod_openapi63.z.object({
6154
+ accessToken: import_zod_openapi63.z.string(),
6155
+ refreshToken: import_zod_openapi63.z.string(),
6156
+ expiresIn: import_zod_openapi63.z.number(),
5729
6157
  // seconds until expiration
5730
- user: import_zod_openapi62.z.object({
5731
- id: import_zod_openapi62.z.string(),
5732
- username: import_zod_openapi62.z.string(),
5733
- email: import_zod_openapi62.z.string().email(),
5734
- name: import_zod_openapi62.z.string(),
5735
- image: import_zod_openapi62.z.string().optional(),
5736
- admin: import_zod_openapi62.z.boolean().optional()
6158
+ user: import_zod_openapi63.z.object({
6159
+ id: import_zod_openapi63.z.string(),
6160
+ username: import_zod_openapi63.z.string(),
6161
+ email: import_zod_openapi63.z.string().email(),
6162
+ name: import_zod_openapi63.z.string(),
6163
+ image: import_zod_openapi63.z.string().optional(),
6164
+ admin: import_zod_openapi63.z.boolean().optional()
5737
6165
  })
5738
6166
  });
5739
- var RefreshTokenRequestSchema = import_zod_openapi62.z.object({
5740
- refreshToken: import_zod_openapi62.z.string()
6167
+ var RefreshTokenRequestSchema = import_zod_openapi63.z.object({
6168
+ refreshToken: import_zod_openapi63.z.string()
5741
6169
  });
5742
- var TokenAuthRegisterRequestSchema = import_zod_openapi62.z.object({
5743
- username: import_zod_openapi62.z.string(),
5744
- name: import_zod_openapi62.z.string(),
5745
- email: import_zod_openapi62.z.string().email(),
5746
- password: import_zod_openapi62.z.string().min(6)
6170
+ var TokenAuthRegisterRequestSchema = import_zod_openapi63.z.object({
6171
+ username: import_zod_openapi63.z.string(),
6172
+ name: import_zod_openapi63.z.string(),
6173
+ email: import_zod_openapi63.z.string().email(),
6174
+ password: import_zod_openapi63.z.string().min(6)
5747
6175
  });
5748
- var RegisterPendingResponseSchema = import_zod_openapi62.z.object({
5749
- status: import_zod_openapi62.z.enum(["confirmation_required", "approval_required"])
6176
+ var RegisterPendingResponseSchema = import_zod_openapi63.z.object({
6177
+ status: import_zod_openapi63.z.enum(["confirmation_required", "approval_required"])
5750
6178
  });
5751
6179
 
5752
6180
  // src/contracts/token-auth.ts
5753
- var TokenLogoutResponseSchema = import_zod_openapi63.z.object({ message: import_zod_openapi63.z.string() });
5754
- var TokenMeResponseSchema = import_zod_openapi63.z.object({
5755
- user: import_zod_openapi63.z.object({
5756
- id: import_zod_openapi63.z.string(),
5757
- username: import_zod_openapi63.z.string(),
5758
- email: import_zod_openapi63.z.string().email(),
5759
- name: import_zod_openapi63.z.string(),
5760
- image: import_zod_openapi63.z.string().optional(),
5761
- status: import_zod_openapi63.z.number(),
5762
- admin: import_zod_openapi63.z.boolean().optional(),
5763
- createdAt: import_zod_openapi63.z.string()
6181
+ var TokenLogoutResponseSchema = import_zod_openapi64.z.object({ message: import_zod_openapi64.z.string() });
6182
+ var TokenMeResponseSchema = import_zod_openapi64.z.object({
6183
+ user: import_zod_openapi64.z.object({
6184
+ id: import_zod_openapi64.z.string(),
6185
+ username: import_zod_openapi64.z.string(),
6186
+ email: import_zod_openapi64.z.string().email(),
6187
+ name: import_zod_openapi64.z.string(),
6188
+ image: import_zod_openapi64.z.string().optional(),
6189
+ status: import_zod_openapi64.z.number(),
6190
+ admin: import_zod_openapi64.z.boolean().optional(),
6191
+ createdAt: import_zod_openapi64.z.string()
5764
6192
  })
5765
6193
  });
5766
- var tokenLoginRoute = (0, import_zod_openapi63.createRoute)({
6194
+ var tokenLoginRoute = (0, import_zod_openapi64.createRoute)({
5767
6195
  method: "post",
5768
6196
  path: "/auth/login",
5769
6197
  tags: ["tokenAuth"],
@@ -5800,7 +6228,7 @@ var tokenLoginRoute = (0, import_zod_openapi63.createRoute)({
5800
6228
  }
5801
6229
  }
5802
6230
  });
5803
- var tokenRegisterRoute = (0, import_zod_openapi63.createRoute)({
6231
+ var tokenRegisterRoute = (0, import_zod_openapi64.createRoute)({
5804
6232
  method: "post",
5805
6233
  path: "/auth/register",
5806
6234
  tags: ["tokenAuth"],
@@ -5841,7 +6269,7 @@ var tokenRegisterRoute = (0, import_zod_openapi63.createRoute)({
5841
6269
  }
5842
6270
  }
5843
6271
  });
5844
- var tokenRefreshRoute = (0, import_zod_openapi63.createRoute)({
6272
+ var tokenRefreshRoute = (0, import_zod_openapi64.createRoute)({
5845
6273
  method: "post",
5846
6274
  path: "/auth/refresh",
5847
6275
  tags: ["tokenAuth"],
@@ -5878,7 +6306,7 @@ var tokenRefreshRoute = (0, import_zod_openapi63.createRoute)({
5878
6306
  }
5879
6307
  }
5880
6308
  });
5881
- var tokenLogoutRoute = (0, import_zod_openapi63.createRoute)({
6309
+ var tokenLogoutRoute = (0, import_zod_openapi64.createRoute)({
5882
6310
  method: "post",
5883
6311
  path: "/auth/logout",
5884
6312
  tags: ["tokenAuth"],
@@ -5888,7 +6316,7 @@ var tokenLogoutRoute = (0, import_zod_openapi63.createRoute)({
5888
6316
  body: {
5889
6317
  content: {
5890
6318
  "application/json": {
5891
- schema: import_zod_openapi63.z.object({ refreshToken: import_zod_openapi63.z.string().optional() })
6319
+ schema: import_zod_openapi64.z.object({ refreshToken: import_zod_openapi64.z.string().optional() })
5892
6320
  }
5893
6321
  }
5894
6322
  }
@@ -5908,7 +6336,7 @@ var tokenLogoutRoute = (0, import_zod_openapi63.createRoute)({
5908
6336
  }
5909
6337
  }
5910
6338
  });
5911
- var tokenMeRoute = (0, import_zod_openapi63.createRoute)({
6339
+ var tokenMeRoute = (0, import_zod_openapi64.createRoute)({
5912
6340
  method: "get",
5913
6341
  path: "/auth/me",
5914
6342
  tags: ["tokenAuth"],
@@ -5938,22 +6366,22 @@ var tokenAuthRoutes = {
5938
6366
  };
5939
6367
 
5940
6368
  // src/contracts/invite-accept.ts
5941
- var import_zod_openapi65 = require("@hono/zod-openapi");
6369
+ var import_zod_openapi66 = require("@hono/zod-openapi");
5942
6370
 
5943
6371
  // src/schemas/invite-accept.ts
5944
- var import_zod_openapi64 = require("@hono/zod-openapi");
5945
- var InviteAcceptRequestSchema = import_zod_openapi64.z.object({
5946
- token: import_zod_openapi64.z.string(),
5947
- username: import_zod_openapi64.z.string().min(1),
5948
- name: import_zod_openapi64.z.string().min(1),
5949
- password: import_zod_openapi64.z.string().min(6)
6372
+ var import_zod_openapi65 = require("@hono/zod-openapi");
6373
+ var InviteAcceptRequestSchema = import_zod_openapi65.z.object({
6374
+ token: import_zod_openapi65.z.string(),
6375
+ username: import_zod_openapi65.z.string().min(1),
6376
+ name: import_zod_openapi65.z.string().min(1),
6377
+ password: import_zod_openapi65.z.string().min(6)
5950
6378
  });
5951
- var InvitePreviewResponseSchema = import_zod_openapi64.z.object({
5952
- email: import_zod_openapi64.z.string().email()
6379
+ var InvitePreviewResponseSchema = import_zod_openapi65.z.object({
6380
+ email: import_zod_openapi65.z.string().email()
5953
6381
  });
5954
6382
 
5955
6383
  // src/contracts/invite-accept.ts
5956
- var invitePreviewRoute = (0, import_zod_openapi65.createRoute)({
6384
+ var invitePreviewRoute = (0, import_zod_openapi66.createRoute)({
5957
6385
  method: "get",
5958
6386
  path: "/invite/accept",
5959
6387
  tags: ["inviteAccept"],
@@ -5980,7 +6408,7 @@ var invitePreviewRoute = (0, import_zod_openapi65.createRoute)({
5980
6408
  }
5981
6409
  }
5982
6410
  });
5983
- var acceptInviteRoute = (0, import_zod_openapi65.createRoute)({
6411
+ var acceptInviteRoute = (0, import_zod_openapi66.createRoute)({
5984
6412
  method: "post",
5985
6413
  path: "/invite/accept",
5986
6414
  tags: ["inviteAccept"],
@@ -6023,23 +6451,23 @@ var inviteAcceptRoutes = {
6023
6451
  };
6024
6452
 
6025
6453
  // src/contracts/password-reset.ts
6026
- var import_zod_openapi67 = require("@hono/zod-openapi");
6454
+ var import_zod_openapi68 = require("@hono/zod-openapi");
6027
6455
 
6028
6456
  // src/schemas/password-reset.ts
6029
- var import_zod_openapi66 = require("@hono/zod-openapi");
6030
- var ForgotPasswordRequestSchema = import_zod_openapi66.z.object({
6031
- email: import_zod_openapi66.z.string().email()
6457
+ var import_zod_openapi67 = require("@hono/zod-openapi");
6458
+ var ForgotPasswordRequestSchema = import_zod_openapi67.z.object({
6459
+ email: import_zod_openapi67.z.string().email()
6032
6460
  });
6033
- var ForgotPasswordResponseSchema = import_zod_openapi66.z.object({
6034
- ok: import_zod_openapi66.z.literal(true)
6461
+ var ForgotPasswordResponseSchema = import_zod_openapi67.z.object({
6462
+ ok: import_zod_openapi67.z.literal(true)
6035
6463
  });
6036
- var ResetPasswordRequestSchema = import_zod_openapi66.z.object({
6037
- token: import_zod_openapi66.z.string(),
6038
- password: import_zod_openapi66.z.string().min(6)
6464
+ var ResetPasswordRequestSchema = import_zod_openapi67.z.object({
6465
+ token: import_zod_openapi67.z.string(),
6466
+ password: import_zod_openapi67.z.string().min(6)
6039
6467
  });
6040
6468
 
6041
6469
  // src/contracts/password-reset.ts
6042
- var forgotPasswordRoute = (0, import_zod_openapi67.createRoute)({
6470
+ var forgotPasswordRoute = (0, import_zod_openapi68.createRoute)({
6043
6471
  method: "post",
6044
6472
  path: "/auth/forgot-password",
6045
6473
  tags: ["passwordReset"],
@@ -6064,7 +6492,7 @@ var forgotPasswordRoute = (0, import_zod_openapi67.createRoute)({
6064
6492
  }
6065
6493
  }
6066
6494
  });
6067
- var validateResetTokenRoute = (0, import_zod_openapi67.createRoute)({
6495
+ var validateResetTokenRoute = (0, import_zod_openapi68.createRoute)({
6068
6496
  method: "get",
6069
6497
  path: "/auth/reset-password",
6070
6498
  tags: ["passwordReset"],
@@ -6087,7 +6515,7 @@ var validateResetTokenRoute = (0, import_zod_openapi67.createRoute)({
6087
6515
  }
6088
6516
  }
6089
6517
  });
6090
- var selfResetPasswordRoute = (0, import_zod_openapi67.createRoute)({
6518
+ var selfResetPasswordRoute = (0, import_zod_openapi68.createRoute)({
6091
6519
  method: "post",
6092
6520
  path: "/auth/reset-password",
6093
6521
  tags: ["passwordReset"],
@@ -6127,19 +6555,19 @@ var passwordResetRoutes = {
6127
6555
  };
6128
6556
 
6129
6557
  // src/contracts/activation.ts
6130
- var import_zod_openapi69 = require("@hono/zod-openapi");
6558
+ var import_zod_openapi70 = require("@hono/zod-openapi");
6131
6559
 
6132
6560
  // src/schemas/activation.ts
6133
- var import_zod_openapi68 = require("@hono/zod-openapi");
6134
- var ActivateRequestSchema = import_zod_openapi68.z.object({
6135
- token: import_zod_openapi68.z.string()
6561
+ var import_zod_openapi69 = require("@hono/zod-openapi");
6562
+ var ActivateRequestSchema = import_zod_openapi69.z.object({
6563
+ token: import_zod_openapi69.z.string()
6136
6564
  });
6137
- var ActivateValidationResponseSchema = import_zod_openapi68.z.object({
6138
- ok: import_zod_openapi68.z.literal(true)
6565
+ var ActivateValidationResponseSchema = import_zod_openapi69.z.object({
6566
+ ok: import_zod_openapi69.z.literal(true)
6139
6567
  });
6140
6568
 
6141
6569
  // src/contracts/activation.ts
6142
- var validateActivationTokenRoute = (0, import_zod_openapi69.createRoute)({
6570
+ var validateActivationTokenRoute = (0, import_zod_openapi70.createRoute)({
6143
6571
  method: "get",
6144
6572
  path: "/auth/activate",
6145
6573
  tags: ["activation"],
@@ -6162,7 +6590,7 @@ var validateActivationTokenRoute = (0, import_zod_openapi69.createRoute)({
6162
6590
  }
6163
6591
  }
6164
6592
  });
6165
- var activateAccountRoute = (0, import_zod_openapi69.createRoute)({
6593
+ var activateAccountRoute = (0, import_zod_openapi70.createRoute)({
6166
6594
  method: "post",
6167
6595
  path: "/auth/activate",
6168
6596
  tags: ["activation"],
@@ -6197,21 +6625,21 @@ var activationRoutes = {
6197
6625
  };
6198
6626
 
6199
6627
  // src/contracts/email-change.ts
6200
- var import_zod_openapi71 = require("@hono/zod-openapi");
6628
+ var import_zod_openapi72 = require("@hono/zod-openapi");
6201
6629
 
6202
6630
  // src/schemas/email-change.ts
6203
- var import_zod_openapi70 = require("@hono/zod-openapi");
6204
- var ConfirmEmailChangeRequestSchema = import_zod_openapi70.z.object({
6205
- token: import_zod_openapi70.z.string()
6631
+ var import_zod_openapi71 = require("@hono/zod-openapi");
6632
+ var ConfirmEmailChangeRequestSchema = import_zod_openapi71.z.object({
6633
+ token: import_zod_openapi71.z.string()
6206
6634
  });
6207
- var ConfirmEmailChangeResponseSchema = import_zod_openapi70.z.object({
6208
- ok: import_zod_openapi70.z.literal(true),
6635
+ var ConfirmEmailChangeResponseSchema = import_zod_openapi71.z.object({
6636
+ ok: import_zod_openapi71.z.literal(true),
6209
6637
  /** The newly-confirmed email address. */
6210
- email: import_zod_openapi70.z.string().email()
6638
+ email: import_zod_openapi71.z.string().email()
6211
6639
  });
6212
6640
 
6213
6641
  // src/contracts/email-change.ts
6214
- var validateEmailChangeTokenRoute = (0, import_zod_openapi71.createRoute)({
6642
+ var validateEmailChangeTokenRoute = (0, import_zod_openapi72.createRoute)({
6215
6643
  method: "get",
6216
6644
  path: "/auth/confirm-email-change",
6217
6645
  tags: ["emailChange"],
@@ -6234,7 +6662,7 @@ var validateEmailChangeTokenRoute = (0, import_zod_openapi71.createRoute)({
6234
6662
  }
6235
6663
  }
6236
6664
  });
6237
- var confirmEmailChangeRoute = (0, import_zod_openapi71.createRoute)({
6665
+ var confirmEmailChangeRoute = (0, import_zod_openapi72.createRoute)({
6238
6666
  method: "post",
6239
6667
  path: "/auth/confirm-email-change",
6240
6668
  tags: ["emailChange"],
@@ -6273,9 +6701,9 @@ var emailChangeRoutes = {
6273
6701
  };
6274
6702
 
6275
6703
  // src/contracts/user.ts
6276
- var import_zod_openapi72 = require("@hono/zod-openapi");
6277
- var UsernameParamSchema = import_zod_openapi72.z.object({ username: import_zod_openapi72.z.string() });
6278
- var getUserPageRoute = (0, import_zod_openapi72.createRoute)({
6704
+ var import_zod_openapi73 = require("@hono/zod-openapi");
6705
+ var UsernameParamSchema = import_zod_openapi73.z.object({ username: import_zod_openapi73.z.string() });
6706
+ var getUserPageRoute = (0, import_zod_openapi73.createRoute)({
6279
6707
  method: "get",
6280
6708
  path: "/user/{username}",
6281
6709
  tags: ["user"],
@@ -6286,7 +6714,7 @@ var getUserPageRoute = (0, import_zod_openapi72.createRoute)({
6286
6714
  },
6287
6715
  responses: {
6288
6716
  200: {
6289
- description: "User profile with statistics + recent activity",
6717
+ description: "User profile with statistics (createdPagesCount, bookmarksCount, likesCount, commentsCount \u2014 the last two are the target user's OWN likes/comments, not activity their pages received) + recent activity",
6290
6718
  content: { "application/json": { schema: UserPageResponseSchema } }
6291
6719
  },
6292
6720
  401: {
@@ -6303,7 +6731,7 @@ var getUserPageRoute = (0, import_zod_openapi72.createRoute)({
6303
6731
  }
6304
6732
  }
6305
6733
  });
6306
- var getUserBookmarksRoute = (0, import_zod_openapi72.createRoute)({
6734
+ var getUserBookmarksRoute = (0, import_zod_openapi73.createRoute)({
6307
6735
  method: "get",
6308
6736
  path: "/user/{username}/bookmarks",
6309
6737
  tags: ["user"],
@@ -6332,7 +6760,7 @@ var getUserBookmarksRoute = (0, import_zod_openapi72.createRoute)({
6332
6760
  }
6333
6761
  }
6334
6762
  });
6335
- var getUserPagesRoute = (0, import_zod_openapi72.createRoute)({
6763
+ var getUserPagesRoute = (0, import_zod_openapi73.createRoute)({
6336
6764
  method: "get",
6337
6765
  path: "/user/{username}/pages",
6338
6766
  tags: ["user"],
@@ -6361,7 +6789,7 @@ var getUserPagesRoute = (0, import_zod_openapi72.createRoute)({
6361
6789
  }
6362
6790
  }
6363
6791
  });
6364
- var getUserSubpagesRoute = (0, import_zod_openapi72.createRoute)({
6792
+ var getUserSubpagesRoute = (0, import_zod_openapi73.createRoute)({
6365
6793
  method: "get",
6366
6794
  path: "/user/{username}/subpages",
6367
6795
  tags: ["user"],
@@ -6398,7 +6826,7 @@ var getUserSubpagesRoute = (0, import_zod_openapi72.createRoute)({
6398
6826
  }
6399
6827
  }
6400
6828
  });
6401
- var listMembersRoute = (0, import_zod_openapi72.createRoute)({
6829
+ var listMembersRoute = (0, import_zod_openapi73.createRoute)({
6402
6830
  method: "get",
6403
6831
  path: "/users",
6404
6832
  tags: ["user"],
@@ -6509,7 +6937,9 @@ var stubUserPublic = {
6509
6937
  var stubUserPage = {
6510
6938
  user: stubUserPublic,
6511
6939
  createdPagesCount: 0,
6512
- bookmarksCount: 0
6940
+ bookmarksCount: 0,
6941
+ likesCount: 0,
6942
+ commentsCount: 0
6513
6943
  };
6514
6944
  var stubPager = { prev: null, next: null, offset: 0 };
6515
6945
  var stubUserBookmarks = {
@@ -6596,11 +7026,11 @@ var stubPageWithRevision = {
6596
7026
  }
6597
7027
  };
6598
7028
  var stubPageResponse = { page: stubPage };
6599
- var stubListPages = { pages: [], pager: stubPager, portalPage: null };
7029
+ var stubListPages = { pages: [], pager: stubPager, portalPage: null, total: 0 };
6600
7030
  var stubListPageChildren = { children: [] };
6601
7031
  var stubSeenUsers = { seenUsers: [], seenUsersCount: 0 };
6602
7032
  var stubWatchStatus = { watching: false };
6603
- var stubPreview = { renderedAst: null };
7033
+ var stubPreview = {};
6604
7034
  var stubWsToken = {
6605
7035
  wsToken: "",
6606
7036
  pageId: "",
@@ -6691,7 +7121,7 @@ var stubListPlugins = { plugins: [] };
6691
7121
  var stubPluginConfig = { name: "", fields: [], values: {} };
6692
7122
  var stubUpdatePluginConfig = { ok: true, hotReloaded: false, reconfigureFailed: false };
6693
7123
  var stubClearRenderCache = { ok: true, clearedAt: "", removedCount: 0 };
6694
- var appAuthMeUserChain = new import_zod_openapi73.OpenAPIHono().openapi(
7124
+ var appAuthMeUserChain = new import_zod_openapi74.OpenAPIHono().openapi(
6695
7125
  appRoutes.getAppInfoRoute,
6696
7126
  (c) => c.json(
6697
7127
  {
@@ -6725,31 +7155,31 @@ var appAuthMeUserChain = new import_zod_openapi73.OpenAPIHono().openapi(
6725
7155
  meRoutes.updatePasswordRoute,
6726
7156
  (c) => c.json({ status: "ok", message: "", accessToken: "", refreshToken: "", expiresIn: 0 }, 200)
6727
7157
  ).openapi(meRoutes.recentlyViewedPagesRoute, (c) => c.json({ pages: [] }, 200)).openapi(accessTokenRoutes.listAccessTokensRoute, (c) => c.json({ accessTokens: [] }, 200)).openapi(accessTokenRoutes.createAccessTokenRoute, (c) => c.json(stubCreateAccessToken, 201)).openapi(accessTokenRoutes.deleteAccessTokenRoute, (c) => c.json(stubAccessToken, 200)).openapi(userRoutes.getUserPageRoute, (c) => c.json(stubUserPage, 200)).openapi(userRoutes.getUserBookmarksRoute, (c) => c.json(stubUserBookmarks, 200)).openapi(userRoutes.getUserPagesRoute, (c) => c.json(stubUserPages, 200)).openapi(userRoutes.getUserSubpagesRoute, (c) => c.json(stubUserPages, 200)).openapi(userRoutes.listMembersRoute, (c) => c.json(stubListUsers, 200));
6728
- var bookmarkBacklinkCommentRevisionChain = new import_zod_openapi73.OpenAPIHono().openapi(bookmarkRoutes.getBookmarkRoute, (c) => c.json(stubBookmarkResponse, 200)).openapi(bookmarkRoutes.listMyBookmarksRoute, (c) => c.json(stubListMyBookmarks, 200)).openapi(bookmarkRoutes.addBookmarkRoute, (c) => c.json(stubBookmarkResponse, 200)).openapi(bookmarkRoutes.removeBookmarkRoute, (c) => c.json(stubRemoveBookmark, 200)).openapi(backlinkRoutes.getBacklinksRoute, (c) => c.json(stubBacklinks, 200)).openapi(commentRoutes.listCommentsRoute, (c) => c.json(stubListComments, 200)).openapi(commentRoutes.addCommentRoute, (c) => c.json(stubAddComment, 200)).openapi(commentRoutes.deleteCommentRoute, (c) => c.json(stubDeleteComment, 200)).openapi(revisionRoutes.listRevisionsRoute, (c) => c.json(stubListRevisions, 200)).openapi(revisionRoutes.getRevisionsRoute, (c) => c.json(stubGetRevisions, 200)).openapi(revisionRoutes.getRevisionRoute, (c) => c.json(stubGetRevision, 200));
6729
- var pageChain = new import_zod_openapi73.OpenAPIHono().openapi(pageRoutes.getPageRoute, (c) => c.json(stubPageWithRevision, 200)).openapi(pageRoutes.listPagesRoute, (c) => c.json(stubListPages, 200)).openapi(pageRoutes.listPageChildrenRoute, (c) => c.json(stubListPageChildren, 200)).openapi(pageRoutes.createPageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.updatePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.setPageGrantRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.seenPageRoute, (c) => c.json(stubSeenUsers, 200)).openapi(pageRoutes.getSeenUsersRoute, (c) => c.json(stubSeenUsers, 200)).openapi(pageRoutes.likePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.unlikePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.claimPageLinkAccessRoute, (c) => c.json({ ...stubPageWithRevision, granted: false }, 200)).openapi(pageRoutes.getWatchStatusRoute, (c) => c.json(stubWatchStatus, 200)).openapi(pageRoutes.setWatchStatusRoute, (c) => c.json(stubWatchStatus, 200)).openapi(pageRoutes.deletePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.revertDeletedPageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.revertToRevisionRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.renamePageRoute, (c) => c.json({ ...stubPageResponse, renamed_count: 1 }, 200)).openapi(pageRoutes.renameSubtreeRoute, (c) => c.json({ renamed_count: 0 }, 200)).openapi(pagePreviewRoutes.previewPageRoute, (c) => c.json(stubPreview, 200)).openapi(pageCollabRoutes.getYjsTokenRoute, (c) => c.json(stubWsToken, 200)).openapi(presenceRoutes.getPresenceTokenRoute, (c) => c.json(stubPresenceToken, 200)).openapi(presenceRoutes.getLikersRoute, (c) => c.json(stubLikers, 200));
6730
- var lateContractApp = new import_zod_openapi73.OpenAPIHono().openapi(draftRoutes.createDraftRoute, (c) => c.json(stubCreateDraft, 201)).openapi(draftRoutes.listDraftsRoute, (c) => c.json(stubListDrafts, 200)).openapi(draftRoutes.cancelDraftRoute, (c) => c.json(stubCreateDraft, 200)).openapi(autocompleteRoutes.autocompleteUsersRoute, (c) => c.json(stubAutocomplete, 200)).openapi(autocompleteRoutes.autocompletePagesRoute, (c) => c.json(stubAutocomplete, 200)).openapi(attachmentRoutes.getAttachmentUsageRoute, (c) => c.json(stubAttachmentUsage, 200)).openapi(attachmentRoutes.listAttachmentsRoute, (c) => c.json(stubListAttachments, 200)).openapi(attachmentRoutes.addAttachmentRoute, (c) => c.json(stubAddAttachment, 200)).openapi(attachmentRoutes.uploadAttachmentRoute, (c) => c.json(stubUploadAttachment, 200)).openapi(attachmentRoutes.getAttachmentMetaRoute, (c) => c.json(stubAttachmentMeta, 200)).openapi(attachmentRoutes.removeAttachmentRoute, (c) => c.json(stubRemoveAttachment, 200)).openapi(searchRoutes.searchPagesRoute, (c) => c.json(stubSearchPages, 200)).openapi(adminCryptoRoutes.getCryptoStatusRoute, (c) => c.json(stubCryptoStatus, 200)).openapi(adminCryptoRoutes.reencryptAllRoute, (c) => c.json(stubReencrypt, 200)).openapi(notificationRoutes.listNotificationsRoute, (c) => c.json(stubListNotifications, 200)).openapi(notificationRoutes.markAllAsReadRoute, (c) => c.json(stubMarkAllAsRead, 200)).openapi(notificationRoutes.getNotificationsTokenRoute, (c) => c.json(stubNotificationsToken, 200)).openapi(notificationRoutes.getUnreadCountRoute, (c) => c.json(stubNotificationStatus, 200)).openapi(notificationRoutes.openNotificationRoute, (c) => c.json(stubOpenNotification, 200));
6731
- var adminSettingsContractApp = new import_zod_openapi73.OpenAPIHono().openapi(adminAppRoutes.getAppSettingsRoute, (c) => c.json(stubGetAppSettings, 200)).openapi(adminAppRoutes.updateAppSettingsRoute, (c) => c.json(stubUpdateAppSettings, 200)).openapi(adminAuthRoutes.getAuthSettingsRoute, (c) => c.json(stubAuthSettings, 200)).openapi(adminAuthRoutes.updateAuthSettingsRoute, (c) => c.json(stubAuthSettings, 200)).openapi(adminSecurityRoutes.getSecuritySettingsRoute, (c) => c.json(stubSecuritySettings, 200)).openapi(adminSecurityRoutes.updateSecuritySettingsRoute, (c) => c.json(stubSecuritySettings, 200)).openapi(adminMailRoutes.getMailSettingsRoute, (c) => c.json(stubMailSettings, 200)).openapi(adminMailRoutes.updateMailSettingsRoute, (c) => c.json(stubUpdateMailSettings, 200)).openapi(adminMailRoutes.sendTestMailRoute, (c) => c.json(stubSendTestMail, 200)).openapi(adminStorageRoutes.getStorageStatusRoute, (c) => c.json(stubStorageStatus, 200)).openapi(adminSearchRoutes.getSearchStatusRoute, (c) => c.json(stubSearchStatus, 200));
6732
- var adminUsersPluginsContractApp = new import_zod_openapi73.OpenAPIHono().openapi(adminUsersRoutes.listUsersRoute, (c) => c.json(stubListAdminUsers, 200)).openapi(adminUsersRoutes.searchUsersByEmailRoute, (c) => c.json(stubSearchAdminUsersByEmail, 200)).openapi(adminUsersRoutes.pendingUsersCountRoute, (c) => c.json(stubPendingUsersCount, 200)).openapi(adminUsersRoutes.inviteUsersRoute, (c) => c.json(stubInviteUsers, 200)).openapi(adminUsersRoutes.editUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.makeAdminRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.removeFromAdminRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.activateUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.suspendUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.resetPasswordRoute, (c) => c.json(stubResetPassword, 200)).openapi(adminUsersRoutes.resendInviteRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.updateUserEmailRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.deleteUserRoute, (c) => c.json(stubDeleteAdminUser, 200)).openapi(adminPluginsRoutes.listPluginsRoute, (c) => c.json(stubListPlugins, 200)).openapi(adminPluginsRoutes.getPluginConfigRoute, (c) => c.json(stubPluginConfig, 200)).openapi(adminPluginsRoutes.updatePluginConfigRoute, (c) => c.json(stubUpdatePluginConfig, 200)).openapi(adminPluginsRoutes.clearRenderCacheAllRoute, (c) => c.json(stubClearRenderCache, 200)).openapi(adminPluginsRoutes.clearRenderCachePluginRoute, (c) => c.json(stubClearRenderCache, 200));
6733
- var oauthContractApp = new import_zod_openapi73.OpenAPIHono().openapi(oauthRoutes.authorizeRoute, (c) => c.json(stubAuthorize, 200)).openapi(oauthRoutes.tokenRoute, (c) => c.json(stubToken, 200)).openapi(oauthRoutes.revokeRoute, (c) => c.json(stubRevoke, 200)).openapi(oauthRoutes.discoveryRoute, (c) => c.json(stubDiscovery, 200)).openapi(oauthRoutes.deviceAuthorizeRoute, (c) => c.json(stubDeviceAuthorize, 200)).openapi(oauthRoutes.deviceInfoRoute, (c) => c.json(stubDeviceInfo, 200)).openapi(oauthRoutes.deviceVerifyRoute, (c) => c.json(stubDeviceVerify, 200)).openapi(oauthRoutes.clientInfoRoute, (c) => c.json(stubClientInfo, 200));
7158
+ var bookmarkBacklinkCommentRevisionChain = new import_zod_openapi74.OpenAPIHono().openapi(bookmarkRoutes.getBookmarkRoute, (c) => c.json(stubBookmarkResponse, 200)).openapi(bookmarkRoutes.listMyBookmarksRoute, (c) => c.json(stubListMyBookmarks, 200)).openapi(bookmarkRoutes.addBookmarkRoute, (c) => c.json(stubBookmarkResponse, 200)).openapi(bookmarkRoutes.removeBookmarkRoute, (c) => c.json(stubRemoveBookmark, 200)).openapi(backlinkRoutes.getBacklinksRoute, (c) => c.json(stubBacklinks, 200)).openapi(commentRoutes.listCommentsRoute, (c) => c.json(stubListComments, 200)).openapi(commentRoutes.addCommentRoute, (c) => c.json(stubAddComment, 200)).openapi(commentRoutes.deleteCommentRoute, (c) => c.json(stubDeleteComment, 200)).openapi(revisionRoutes.listRevisionsRoute, (c) => c.json(stubListRevisions, 200)).openapi(revisionRoutes.getRevisionsRoute, (c) => c.json(stubGetRevisions, 200)).openapi(revisionRoutes.getRevisionRoute, (c) => c.json(stubGetRevision, 200));
7159
+ var pageChain = new import_zod_openapi74.OpenAPIHono().openapi(pageRoutes.getPageRoute, (c) => c.json(stubPageWithRevision, 200)).openapi(pageRoutes.listPagesRoute, (c) => c.json(stubListPages, 200)).openapi(pageRoutes.listPageChildrenRoute, (c) => c.json(stubListPageChildren, 200)).openapi(pageRoutes.createPageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.updatePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.setPageGrantRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.seenPageRoute, (c) => c.json(stubSeenUsers, 200)).openapi(pageRoutes.getSeenUsersRoute, (c) => c.json(stubSeenUsers, 200)).openapi(pageRoutes.likePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.unlikePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.claimPageLinkAccessRoute, (c) => c.json({ ...stubPageWithRevision, granted: false }, 200)).openapi(pageRoutes.getWatchStatusRoute, (c) => c.json(stubWatchStatus, 200)).openapi(pageRoutes.setWatchStatusRoute, (c) => c.json(stubWatchStatus, 200)).openapi(pageRoutes.deletePageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.revertDeletedPageRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.revertToRevisionRoute, (c) => c.json(stubPageResponse, 200)).openapi(pageRoutes.renamePageRoute, (c) => c.json({ ...stubPageResponse, renamed_count: 1 }, 200)).openapi(pageRoutes.renameSubtreeRoute, (c) => c.json({ renamed_count: 0 }, 200)).openapi(pagePreviewRoutes.previewPageRoute, (c) => c.json(stubPreview, 200)).openapi(pageCollabRoutes.getYjsTokenRoute, (c) => c.json(stubWsToken, 200)).openapi(presenceRoutes.getPresenceTokenRoute, (c) => c.json(stubPresenceToken, 200)).openapi(presenceRoutes.getLikersRoute, (c) => c.json(stubLikers, 200));
7160
+ var lateContractApp = new import_zod_openapi74.OpenAPIHono().openapi(draftRoutes.createDraftRoute, (c) => c.json(stubCreateDraft, 201)).openapi(draftRoutes.listDraftsRoute, (c) => c.json(stubListDrafts, 200)).openapi(draftRoutes.cancelDraftRoute, (c) => c.json(stubCreateDraft, 200)).openapi(autocompleteRoutes.autocompleteUsersRoute, (c) => c.json(stubAutocomplete, 200)).openapi(autocompleteRoutes.autocompletePagesRoute, (c) => c.json(stubAutocomplete, 200)).openapi(attachmentRoutes.getAttachmentUsageRoute, (c) => c.json(stubAttachmentUsage, 200)).openapi(attachmentRoutes.listAttachmentsRoute, (c) => c.json(stubListAttachments, 200)).openapi(attachmentRoutes.addAttachmentRoute, (c) => c.json(stubAddAttachment, 200)).openapi(attachmentRoutes.uploadAttachmentRoute, (c) => c.json(stubUploadAttachment, 200)).openapi(attachmentRoutes.getAttachmentMetaRoute, (c) => c.json(stubAttachmentMeta, 200)).openapi(attachmentRoutes.removeAttachmentRoute, (c) => c.json(stubRemoveAttachment, 200)).openapi(searchRoutes.searchPagesRoute, (c) => c.json(stubSearchPages, 200)).openapi(adminCryptoRoutes.getCryptoStatusRoute, (c) => c.json(stubCryptoStatus, 200)).openapi(adminCryptoRoutes.reencryptAllRoute, (c) => c.json(stubReencrypt, 200)).openapi(notificationRoutes.listNotificationsRoute, (c) => c.json(stubListNotifications, 200)).openapi(notificationRoutes.markAllAsReadRoute, (c) => c.json(stubMarkAllAsRead, 200)).openapi(notificationRoutes.getNotificationsTokenRoute, (c) => c.json(stubNotificationsToken, 200)).openapi(notificationRoutes.getUnreadCountRoute, (c) => c.json(stubNotificationStatus, 200)).openapi(notificationRoutes.openNotificationRoute, (c) => c.json(stubOpenNotification, 200));
7161
+ var adminSettingsContractApp = new import_zod_openapi74.OpenAPIHono().openapi(adminAppRoutes.getAppSettingsRoute, (c) => c.json(stubGetAppSettings, 200)).openapi(adminAppRoutes.updateAppSettingsRoute, (c) => c.json(stubUpdateAppSettings, 200)).openapi(adminAuthRoutes.getAuthSettingsRoute, (c) => c.json(stubAuthSettings, 200)).openapi(adminAuthRoutes.updateAuthSettingsRoute, (c) => c.json(stubAuthSettings, 200)).openapi(adminSecurityRoutes.getSecuritySettingsRoute, (c) => c.json(stubSecuritySettings, 200)).openapi(adminSecurityRoutes.updateSecuritySettingsRoute, (c) => c.json(stubSecuritySettings, 200)).openapi(adminMailRoutes.getMailSettingsRoute, (c) => c.json(stubMailSettings, 200)).openapi(adminMailRoutes.updateMailSettingsRoute, (c) => c.json(stubUpdateMailSettings, 200)).openapi(adminMailRoutes.sendTestMailRoute, (c) => c.json(stubSendTestMail, 200)).openapi(adminStorageRoutes.getStorageStatusRoute, (c) => c.json(stubStorageStatus, 200)).openapi(adminSearchRoutes.getSearchStatusRoute, (c) => c.json(stubSearchStatus, 200));
7162
+ var adminUsersPluginsContractApp = new import_zod_openapi74.OpenAPIHono().openapi(adminUsersRoutes.listUsersRoute, (c) => c.json(stubListAdminUsers, 200)).openapi(adminUsersRoutes.searchUsersByEmailRoute, (c) => c.json(stubSearchAdminUsersByEmail, 200)).openapi(adminUsersRoutes.pendingUsersCountRoute, (c) => c.json(stubPendingUsersCount, 200)).openapi(adminUsersRoutes.inviteUsersRoute, (c) => c.json(stubInviteUsers, 200)).openapi(adminUsersRoutes.editUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.makeAdminRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.removeFromAdminRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.activateUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.suspendUserRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.resetPasswordRoute, (c) => c.json(stubResetPassword, 200)).openapi(adminUsersRoutes.resendInviteRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.updateUserEmailRoute, (c) => c.json(stubAdminUserMutation, 200)).openapi(adminUsersRoutes.deleteUserRoute, (c) => c.json(stubDeleteAdminUser, 200)).openapi(adminPluginsRoutes.listPluginsRoute, (c) => c.json(stubListPlugins, 200)).openapi(adminPluginsRoutes.getPluginConfigRoute, (c) => c.json(stubPluginConfig, 200)).openapi(adminPluginsRoutes.updatePluginConfigRoute, (c) => c.json(stubUpdatePluginConfig, 200)).openapi(adminPluginsRoutes.clearRenderCacheAllRoute, (c) => c.json(stubClearRenderCache, 200)).openapi(adminPluginsRoutes.clearRenderCachePluginRoute, (c) => c.json(stubClearRenderCache, 200));
7163
+ var oauthContractApp = new import_zod_openapi74.OpenAPIHono().openapi(oauthRoutes.authorizeRoute, (c) => c.json(stubAuthorize, 200)).openapi(oauthRoutes.tokenRoute, (c) => c.json(stubToken, 200)).openapi(oauthRoutes.revokeRoute, (c) => c.json(stubRevoke, 200)).openapi(oauthRoutes.discoveryRoute, (c) => c.json(stubDiscovery, 200)).openapi(oauthRoutes.deviceAuthorizeRoute, (c) => c.json(stubDeviceAuthorize, 200)).openapi(oauthRoutes.deviceInfoRoute, (c) => c.json(stubDeviceInfo, 200)).openapi(oauthRoutes.deviceVerifyRoute, (c) => c.json(stubDeviceVerify, 200)).openapi(oauthRoutes.clientInfoRoute, (c) => c.json(stubClientInfo, 200));
6734
7164
  var createClient = (baseUrl, options = {}) => (0, import_client.hc)(baseUrl, {
6735
7165
  headers: options.headers,
6736
7166
  fetch: options.fetch
6737
7167
  });
6738
7168
 
6739
7169
  // src/schemas/mail-token.ts
6740
- var import_zod_openapi74 = require("@hono/zod-openapi");
6741
- var MailTokenPurposeSchema = import_zod_openapi74.z.enum(["invite", "activate", "reset", "email-change"]);
6742
- var MailTokenPayloadSchema = import_zod_openapi74.z.object({
7170
+ var import_zod_openapi75 = require("@hono/zod-openapi");
7171
+ var MailTokenPurposeSchema = import_zod_openapi75.z.enum(["invite", "activate", "reset", "email-change"]);
7172
+ var MailTokenPayloadSchema = import_zod_openapi75.z.object({
6743
7173
  purpose: MailTokenPurposeSchema,
6744
- userId: import_zod_openapi74.z.string(),
7174
+ userId: import_zod_openapi75.z.string(),
6745
7175
  /** Target address. For `email-change` this is the NEW address. */
6746
- email: import_zod_openapi74.z.string().email(),
7176
+ email: import_zod_openapi75.z.string().email(),
6747
7177
  /**
6748
7178
  * For `email-change`: the account's email at issue time. The confirm
6749
7179
  * endpoint rejects the token unless it still matches, making the token
6750
7180
  * single-use (a stale token cannot revert a later change).
6751
7181
  */
6752
- fromEmail: import_zod_openapi74.z.string().email().optional(),
7182
+ fromEmail: import_zod_openapi75.z.string().email().optional(),
6753
7183
  /**
6754
7184
  * For `reset`: the account's `passwordResetGeneration` at issue time.
6755
7185
  * Consuming the link increments that counter, so the token only matches
@@ -6758,7 +7188,7 @@ var MailTokenPayloadSchema = import_zod_openapi74.z.object({
6758
7188
  * schema because the other purposes don't carry it (and links minted
6759
7189
  * before the claim existed simply no longer match).
6760
7190
  */
6761
- resetGeneration: import_zod_openapi74.z.number().int().nonnegative().optional(),
7191
+ resetGeneration: import_zod_openapi75.z.number().int().nonnegative().optional(),
6762
7192
  /**
6763
7193
  * For `email-change`: the account's `authVersion` at issue time. The
6764
7194
  * confirm endpoint requires it to still match, so a pending address change
@@ -6770,10 +7200,10 @@ var MailTokenPayloadSchema = import_zod_openapi74.z.object({
6770
7200
  * semantics wanted are exactly "the session that asked for this is gone",
6771
7201
  * and that is what every bump of it already means.
6772
7202
  */
6773
- authVersion: import_zod_openapi74.z.number().int().nonnegative().optional(),
7203
+ authVersion: import_zod_openapi75.z.number().int().nonnegative().optional(),
6774
7204
  // iat / exp are injected and verified by the JWT layer.
6775
- iat: import_zod_openapi74.z.number().optional(),
6776
- exp: import_zod_openapi74.z.number().optional()
7205
+ iat: import_zod_openapi75.z.number().optional(),
7206
+ exp: import_zod_openapi75.z.number().optional()
6777
7207
  });
6778
7208
 
6779
7209
  // src/util/html-elements.ts
@@ -6934,6 +7364,13 @@ var WS_CLOSE_CODES = {
6934
7364
  ALL_CAPABILITIES,
6935
7365
  ALL_SCOPES,
6936
7366
  API_SURFACE_VERSION,
7367
+ AST_INPUT_LIMIT_BYTES,
7368
+ AST_MAX_HAST_DEPTH,
7369
+ AST_MAX_IMAGE_BASE64_CHARS,
7370
+ AST_MAX_TREE_DEPTH,
7371
+ AST_MAX_VALUE_CHARS,
7372
+ AST_OUTPUT_BUDGET_BYTES,
7373
+ AST_OUTPUT_WARN_BYTES,
6937
7374
  AccessTokenSchema,
6938
7375
  ActivateRequestSchema,
6939
7376
  ActivateValidationResponseSchema,
@@ -6970,6 +7407,7 @@ var WS_CLOSE_CODES = {
6970
7407
  BacklinkSchema,
6971
7408
  BookmarkResponseSchema,
6972
7409
  BookmarkSchema,
7410
+ CURRENT_AST_VERSION,
6973
7411
  CapabilitySchema,
6974
7412
  ClaimPageLinkAccessResponseSchema,
6975
7413
  ClearRenderCacheResponseSchema,
@@ -6992,10 +7430,21 @@ var WS_CLOSE_CODES = {
6992
7430
  CreateDraftRequestSchema,
6993
7431
  CreateDraftResponseSchema,
6994
7432
  CreatePageRequestSchema,
7433
+ CrowiCodeSidecarSchema,
7434
+ CrowiDiagramNodeSchema,
7435
+ CrowiDiagramSidecarSchema,
7436
+ CrowiDimensionSchema,
7437
+ CrowiImagePayloadSchema,
7438
+ CrowiLinkCardNodeSchema,
7439
+ CrowiLinkCardSidecarSchema,
7440
+ CrowiMathSidecarSchema,
7441
+ CrowiOpaqueNodeSchema,
7442
+ CrowiPlaceholderKindSchema,
7443
+ CrowiPlaceholderNodeSchema,
7444
+ CrowiPlaceholderSidecarSchema,
6995
7445
  CryptoStatusResponseSchema,
6996
7446
  DEVICE_CODE_GRANT_TYPE,
6997
7447
  DISCOVERY_SCOPES_SUPPORTED,
6998
- DND_EXTRA_UPLOAD_MIME,
6999
7448
  DYNAMIC_CAPABILITIES,
7000
7449
  DeleteAdminUserResponseSchema,
7001
7450
  DeleteCommentRequestSchema,
@@ -7036,7 +7485,11 @@ var WS_CLOSE_CODES = {
7036
7485
  GetSeenUsersRequestSchema,
7037
7486
  GetStorageStatusResponseSchema,
7038
7487
  GetWatchStatusRequestSchema,
7039
- IMAGE_UPLOAD_MIME,
7488
+ HChildSchema,
7489
+ HChildrenSchema,
7490
+ HNameSchema,
7491
+ HPropertiesSchema,
7492
+ HastHintDataSchema,
7040
7493
  ISSUABLE_SCOPES,
7041
7494
  InstallerStatusResponseSchema,
7042
7495
  InsufficientScopeErrorSchema,
@@ -7071,6 +7524,7 @@ var WS_CLOSE_CODES = {
7071
7524
  ListRevisionsResponseSchema,
7072
7525
  ListUsersRequestSchema,
7073
7526
  ListUsersResponseSchema,
7527
+ LooseRenderedAstRootSchema,
7074
7528
  MailSettingsValidationErrorSchema,
7075
7529
  MailTokenPayloadSchema,
7076
7530
  MailTokenPurposeSchema,
@@ -7134,6 +7588,7 @@ var WS_CLOSE_CODES = {
7134
7588
  PreviewPageRequestSchema,
7135
7589
  PreviewPageResponseSchema,
7136
7590
  ProfileErrorResponseSchema,
7591
+ RENDERED_AST_NODE_DEFS,
7137
7592
  RecentlyViewedPagesResponseSchema,
7138
7593
  ReencryptResponseSchema,
7139
7594
  RefreshTokenRequestSchema,
@@ -7147,6 +7602,13 @@ var WS_CLOSE_CODES = {
7147
7602
  RenameSubtreeRequestSchema,
7148
7603
  RenameSubtreeResponseSchema,
7149
7604
  RenameTreeErrorSchema,
7605
+ RenderedAstArtifactKeySchema,
7606
+ RenderedAstEnvelopeOpenApiSchema,
7607
+ RenderedAstEnvelopeSchema,
7608
+ RenderedAstNodeSchema,
7609
+ RenderedAstRootSchema,
7610
+ RenderedAstValueSchema,
7611
+ ReservationSchema,
7150
7612
  ResetPasswordRequestSchema,
7151
7613
  ResetPasswordResponseSchema,
7152
7614
  RevertToRevisionRequestSchema,
@@ -7158,6 +7620,7 @@ var WS_CLOSE_CODES = {
7158
7620
  RevokeRequestSchema,
7159
7621
  RevokeResponseSchema,
7160
7622
  SCOPES,
7623
+ SIDECAR_KEYS,
7161
7624
  STATIC_CAPABILITIES,
7162
7625
  STRIP_KNOWN_HTML_TAGS_MAX_LENGTH,
7163
7626
  SearchAdminUsersByEmailRequestSchema,
@@ -7177,6 +7640,9 @@ var WS_CLOSE_CODES = {
7177
7640
  ServiceUnavailableErrorSchema,
7178
7641
  SetPageGrantRequestSchema,
7179
7642
  SetWatchStatusRequestSchema,
7643
+ ShikiTokenLinesSchema,
7644
+ ShikiTokenSchema,
7645
+ ShikiTokenStyleSchema,
7180
7646
  StorageDriverEntrySchema,
7181
7647
  SuccessResponseSchema,
7182
7648
  ThemeSchema,
@@ -7189,6 +7655,7 @@ var WS_CLOSE_CODES = {
7189
7655
  TokenAuthResponseSchema,
7190
7656
  TokenRequestSchema,
7191
7657
  TokenResponseSchema,
7658
+ UPLOAD_ALLOWED_MIME,
7192
7659
  UpdateAdminUserEmailRequestSchema,
7193
7660
  UpdateAppSettingsRequestSchema,
7194
7661
  UpdateAppSettingsResponseSchema,
@@ -7370,6 +7837,7 @@ var WS_CLOSE_CODES = {
7370
7837
  tokenRegisterRoute,
7371
7838
  tokenRoute,
7372
7839
  unlikePageRoute,
7840
+ unwrapRenderedAst,
7373
7841
  updateAppSettingsRoute,
7374
7842
  updateAuthSettingsRoute,
7375
7843
  updateMailSettingsRoute,