@crowi/api-contract 2.0.0-alpha.0 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
23
  ALL_SCOPES: () => ALL_SCOPES,
24
+ API_SURFACE_VERSION: () => API_SURFACE_VERSION,
24
25
  AccessTokenSchema: () => AccessTokenSchema,
25
26
  ActivateRequestSchema: () => ActivateRequestSchema,
26
27
  ActivateValidationResponseSchema: () => ActivateValidationResponseSchema,
@@ -131,6 +132,7 @@ __export(index_exports, {
131
132
  InviteUsersRequestSchema: () => InviteUsersRequestSchema,
132
133
  InviteUsersResponseSchema: () => InviteUsersResponseSchema,
133
134
  InvitedUserResultSchema: () => InvitedUserResultSchema,
135
+ KNOWN_HTML_ELEMENTS: () => KNOWN_HTML_ELEMENTS,
134
136
  LanguageSchema: () => LanguageSchema,
135
137
  LikerSchema: () => LikerSchema,
136
138
  LikersResponseSchema: () => LikersResponseSchema,
@@ -229,6 +231,7 @@ __export(index_exports, {
229
231
  RenameTreeErrorSchema: () => RenameTreeErrorSchema,
230
232
  ResetPasswordRequestSchema: () => ResetPasswordRequestSchema,
231
233
  ResetPasswordResponseSchema: () => ResetPasswordResponseSchema,
234
+ RevertToRevisionRequestSchema: () => RevertToRevisionRequestSchema,
232
235
  RevisionInvalidRequestErrorSchema: () => RevisionInvalidRequestErrorSchema,
233
236
  RevisionMetaSchema: () => RevisionMetaSchema,
234
237
  RevisionMetaSchemaShape: () => RevisionMetaSchemaShape,
@@ -237,6 +240,8 @@ __export(index_exports, {
237
240
  RevokeRequestSchema: () => RevokeRequestSchema,
238
241
  RevokeResponseSchema: () => RevokeResponseSchema,
239
242
  SCOPES: () => SCOPES,
243
+ STATIC_CAPABILITIES: () => STATIC_CAPABILITIES,
244
+ STRIP_KNOWN_HTML_TAGS_MAX_LENGTH: () => STRIP_KNOWN_HTML_TAGS_MAX_LENGTH,
240
245
  SearchAdminUsersByEmailRequestSchema: () => SearchAdminUsersByEmailRequestSchema,
241
246
  SearchAdminUsersByEmailResponseSchema: () => SearchAdminUsersByEmailResponseSchema,
242
247
  SearchDriverEntrySchema: () => SearchDriverEntrySchema,
@@ -417,8 +422,10 @@ __export(index_exports, {
417
422
  removeFromAdminRoute: () => removeFromAdminRoute,
418
423
  renamePageRoute: () => renamePageRoute,
419
424
  renameSubtreeRoute: () => renameSubtreeRoute,
425
+ resendInviteRoute: () => resendInviteRoute,
420
426
  resetPasswordRoute: () => resetPasswordRoute,
421
427
  revertDeletedPageRoute: () => revertDeletedPageRoute,
428
+ revertToRevisionRoute: () => revertToRevisionRoute,
422
429
  revisionRoutes: () => revisionRoutes,
423
430
  revokeRoute: () => revokeRoute,
424
431
  scopeSatisfies: () => scopeSatisfies,
@@ -430,6 +437,7 @@ __export(index_exports, {
430
437
  sendTestMailRoute: () => sendTestMailRoute,
431
438
  setPageGrantRoute: () => setPageGrantRoute,
432
439
  setWatchStatusRoute: () => setWatchStatusRoute,
440
+ stripKnownHtmlTags: () => stripKnownHtmlTags,
433
441
  suspendUserRoute: () => suspendUserRoute,
434
442
  tokenAuthRoutes: () => tokenAuthRoutes,
435
443
  tokenLoginRoute: () => tokenLoginRoute,
@@ -483,6 +491,7 @@ var ERROR_CODES = [
483
491
  "PAGE_NOT_FOUND",
484
492
  "PAGE_NOT_GRANTED",
485
493
  "PAGE_REVISION_ERROR",
494
+ "PAGE_TWIN_EXISTS",
486
495
  "INVALID_GRANT",
487
496
  // --- comment / notification domain ---
488
497
  "COMMENT_NOT_FOUND",
@@ -511,6 +520,152 @@ var ERROR_CODES = [
511
520
  ];
512
521
  var ErrorCodeSchema = import_zod_openapi.z.enum(ERROR_CODES).openapi("ErrorCode");
513
522
 
523
+ // src/util/html-elements.ts
524
+ var KNOWN_HTML_ELEMENTS = /* @__PURE__ */ new Set([
525
+ "a",
526
+ "abbr",
527
+ "acronym",
528
+ "address",
529
+ "applet",
530
+ "area",
531
+ "article",
532
+ "aside",
533
+ "audio",
534
+ "b",
535
+ "base",
536
+ "basefont",
537
+ "bdi",
538
+ "bdo",
539
+ "big",
540
+ "blink",
541
+ "blockquote",
542
+ "body",
543
+ "br",
544
+ "button",
545
+ "canvas",
546
+ "caption",
547
+ "center",
548
+ "cite",
549
+ "code",
550
+ "col",
551
+ "colgroup",
552
+ "data",
553
+ "datalist",
554
+ "dd",
555
+ "del",
556
+ "details",
557
+ "dfn",
558
+ "dialog",
559
+ "dir",
560
+ "div",
561
+ "dl",
562
+ "dt",
563
+ "em",
564
+ "embed",
565
+ "fieldset",
566
+ "figcaption",
567
+ "figure",
568
+ "font",
569
+ "footer",
570
+ "form",
571
+ "frame",
572
+ "frameset",
573
+ "h1",
574
+ "h2",
575
+ "h3",
576
+ "h4",
577
+ "h5",
578
+ "h6",
579
+ "head",
580
+ "header",
581
+ "hgroup",
582
+ "hr",
583
+ "html",
584
+ "i",
585
+ "iframe",
586
+ "img",
587
+ "input",
588
+ "ins",
589
+ "kbd",
590
+ "label",
591
+ "legend",
592
+ "li",
593
+ "link",
594
+ "listing",
595
+ "main",
596
+ "map",
597
+ "mark",
598
+ "marquee",
599
+ "menu",
600
+ "menuitem",
601
+ "meta",
602
+ "meter",
603
+ "nav",
604
+ "nobr",
605
+ "noembed",
606
+ "noframes",
607
+ "noscript",
608
+ "object",
609
+ "ol",
610
+ "optgroup",
611
+ "option",
612
+ "output",
613
+ "p",
614
+ "param",
615
+ "picture",
616
+ "pre",
617
+ "progress",
618
+ "q",
619
+ "rb",
620
+ "rp",
621
+ "rt",
622
+ "rtc",
623
+ "ruby",
624
+ "s",
625
+ "samp",
626
+ "script",
627
+ "search",
628
+ "section",
629
+ "select",
630
+ "slot",
631
+ "small",
632
+ "source",
633
+ "span",
634
+ "strike",
635
+ "strong",
636
+ "style",
637
+ "sub",
638
+ "summary",
639
+ "sup",
640
+ "svg",
641
+ "table",
642
+ "tbody",
643
+ "td",
644
+ "template",
645
+ "textarea",
646
+ "tfoot",
647
+ "th",
648
+ "thead",
649
+ "time",
650
+ "title",
651
+ "tr",
652
+ "track",
653
+ "tt",
654
+ "u",
655
+ "ul",
656
+ "var",
657
+ "video",
658
+ "wbr",
659
+ "xmp"
660
+ ]);
661
+ var KNOWN_HTML_TAG_REGEX = new RegExp(`</?(?:${[...KNOWN_HTML_ELEMENTS].join("|")})(?![\\w-])(?:[^>"']|"[^"]*"|'[^']*')*>`, "gi");
662
+ var STRIP_KNOWN_HTML_TAGS_MAX_LENGTH = 4096;
663
+ function stripKnownHtmlTags(text) {
664
+ if (text.length > STRIP_KNOWN_HTML_TAGS_MAX_LENGTH) return text;
665
+ KNOWN_HTML_TAG_REGEX.lastIndex = 0;
666
+ return text.replace(KNOWN_HTML_TAG_REGEX, "");
667
+ }
668
+
514
669
  // src/contracts/app.ts
515
670
  var import_zod_openapi4 = require("@hono/zod-openapi");
516
671
 
@@ -610,7 +765,11 @@ var ForbiddenErrorSchema = ApiErrorSchema.extend({
610
765
  var import_zod_openapi3 = require("@hono/zod-openapi");
611
766
  var AppInfoResponseSchema = import_zod_openapi3.z.object({
612
767
  title: import_zod_openapi3.z.string().nullable(),
613
- confidential: import_zod_openapi3.z.string().nullable()
768
+ confidential: import_zod_openapi3.z.string().nullable(),
769
+ version: import_zod_openapi3.z.string(),
770
+ apiVersion: import_zod_openapi3.z.string(),
771
+ capabilities: import_zod_openapi3.z.array(import_zod_openapi3.z.string()),
772
+ canSelfRegister: import_zod_openapi3.z.boolean()
614
773
  });
615
774
 
616
775
  // src/contracts/app.ts
@@ -1507,7 +1666,12 @@ var ListPagesRequestSchema = import_zod_openapi19.z.object({
1507
1666
  // "newest-updated first" order so existing callers are unaffected.
1508
1667
  // `path` sorts alphabetically by full page path (≈ name order).
1509
1668
  sort: import_zod_openapi19.z.enum(["updatedAt", "createdAt", "path"]).optional().default("updatedAt"),
1510
- order: import_zod_openapi19.z.enum(["asc", "desc"]).optional().default("desc")
1669
+ order: import_zod_openapi19.z.enum(["asc", "desc"]).optional().default("desc"),
1670
+ // When listing a portal path (`/foo/`), open the portal document at this
1671
+ // past revision so the catch-all can mirror `?revision_id=` on portals.
1672
+ // Only the `portalPage` is rewound — the child rows always reflect the
1673
+ // latest. Absent for normal listings.
1674
+ revision_id: import_zod_openapi19.z.string().optional()
1511
1675
  });
1512
1676
  var PagerSchema = import_zod_openapi19.z.object({
1513
1677
  prev: import_zod_openapi19.z.number().nullable(),
@@ -1517,7 +1681,15 @@ var PagerSchema = import_zod_openapi19.z.object({
1517
1681
  var ListPagesResponseSchema = import_zod_openapi19.z.object({
1518
1682
  pages: import_zod_openapi19.z.array(PageSchema),
1519
1683
  pager: PagerSchema,
1520
- portalPage: PageSchema.nullable().optional()
1684
+ portalPage: PageSchema.nullable().optional(),
1685
+ // When listing a portal path (`/foo/`) that has NO portal document of
1686
+ // its own but a content page DOES live at the stripped path (`/foo`),
1687
+ // this carries that content page. The list view uses it to suppress the
1688
+ // "Create Portal" CTA and surface a "portalize this page" banner instead
1689
+ // (feature-update-pages-list-ux §4). Mutually exclusive with `portalPage`
1690
+ // — only set when `portalPage` is null. Absent / null for ordinary
1691
+ // listings.
1692
+ contentPage: PageSchema.nullable().optional()
1521
1693
  });
1522
1694
  var PageChildSegmentSchema = import_zod_openapi19.z.object({
1523
1695
  // The bare segment name immediately under the queried path
@@ -1558,6 +1730,10 @@ var UpdatePageRequestSchema = import_zod_openapi19.z.object({
1558
1730
  revision_id: import_zod_openapi19.z.string().optional(),
1559
1731
  grant: import_zod_openapi19.z.number().optional()
1560
1732
  });
1733
+ var RevertToRevisionRequestSchema = import_zod_openapi19.z.object({
1734
+ page_id: import_zod_openapi19.z.string(),
1735
+ revision_id: import_zod_openapi19.z.string()
1736
+ });
1561
1737
  var SetPageGrantRequestSchema = import_zod_openapi19.z.object({
1562
1738
  page_id: import_zod_openapi19.z.string(),
1563
1739
  grant: import_zod_openapi19.z.number().int()
@@ -3716,6 +3892,36 @@ var revertDeletedPageRoute = (0, import_zod_openapi39.createRoute)({
3716
3892
  }
3717
3893
  }
3718
3894
  });
3895
+ var revertToRevisionRoute = (0, import_zod_openapi39.createRoute)({
3896
+ method: "post",
3897
+ path: "/pages/revert-to-revision",
3898
+ tags: ["page"],
3899
+ security: [{ bearerAuth: [] }],
3900
+ summary: "Revert a page to one of its past revisions (non-destructive \u2014 stacks a new revision)",
3901
+ request: {
3902
+ body: {
3903
+ content: { "application/json": { schema: RevertToRevisionRequestSchema } }
3904
+ }
3905
+ },
3906
+ responses: {
3907
+ 200: {
3908
+ description: "The page with the reverted body as its new latest revision",
3909
+ content: { "application/json": { schema: PageResponseSchema } }
3910
+ },
3911
+ 400: {
3912
+ description: "PAGE_REVERT_TO_REVISION_FAILED (e.g. the revision does not belong to the page)",
3913
+ content: { "application/json": { schema: PageBadRequestErrorSchema } }
3914
+ },
3915
+ 401: {
3916
+ description: "Authentication required",
3917
+ content: { "application/json": { schema: AuthenticationRequiredErrorSchema } }
3918
+ },
3919
+ 404: {
3920
+ description: "Page not found (also covers grant-denied)",
3921
+ content: { "application/json": { schema: PageNotFoundErrorSchema } }
3922
+ }
3923
+ }
3924
+ });
3719
3925
  var renamePageRoute = (0, import_zod_openapi39.createRoute)({
3720
3926
  method: "post",
3721
3927
  path: "/pages/rename",
@@ -3813,6 +4019,8 @@ var pageRoutes = {
3813
4019
  deletePageRoute,
3814
4020
  // POST /pages/revert — revertDeletedPage
3815
4021
  revertDeletedPageRoute,
4022
+ // POST /pages/revert-to-revision — revertToRevision
4023
+ revertToRevisionRoute,
3816
4024
  // POST /pages/rename — renamePage
3817
4025
  renamePageRoute,
3818
4026
  // POST /pages/rename-subtree — renameSubtree (portal-less folder)
@@ -5959,6 +6167,46 @@ var resetPasswordRoute = (0, import_zod_openapi71.createRoute)({
5959
6167
  }
5960
6168
  }
5961
6169
  });
6170
+ var resendInviteRoute = (0, import_zod_openapi71.createRoute)({
6171
+ method: "post",
6172
+ path: "/admin/users/{id}/resend-invite",
6173
+ tags: ["admin.users"],
6174
+ security: [{ bearerAuth: [] }],
6175
+ summary: "Re-issue an invite token and resend the invitation email (INVITED status only)",
6176
+ request: {
6177
+ params: AdminUserIdParamSchema
6178
+ },
6179
+ responses: {
6180
+ 200: {
6181
+ description: "Invitation email resent; returns the (unchanged) user",
6182
+ content: { "application/json": { schema: AdminUserMutationResponseSchema } }
6183
+ },
6184
+ 400: {
6185
+ description: "Invalid id",
6186
+ content: { "application/json": { schema: ValidationErrorSchema } }
6187
+ },
6188
+ 401: {
6189
+ description: "Authentication required",
6190
+ content: { "application/json": { schema: AuthenticationRequiredErrorSchema } }
6191
+ },
6192
+ 403: {
6193
+ description: "Admin permission required",
6194
+ content: { "application/json": { schema: AdminRequiredErrorSchema } }
6195
+ },
6196
+ 404: {
6197
+ description: "User not found",
6198
+ content: { "application/json": { schema: NotFoundErrorSchema } }
6199
+ },
6200
+ 409: {
6201
+ description: "User is not in the INVITED status, so there is no pending invite to resend",
6202
+ content: { "application/json": { schema: ConflictErrorSchema } }
6203
+ },
6204
+ 500: {
6205
+ description: "Internal server error (e.g. the invitation email failed to send)",
6206
+ content: { "application/json": { schema: InternalServerErrorSchema } }
6207
+ }
6208
+ }
6209
+ });
5962
6210
  var updateUserEmailRoute = (0, import_zod_openapi71.createRoute)({
5963
6211
  method: "put",
5964
6212
  path: "/admin/users/{id}/email",
@@ -6077,6 +6325,7 @@ var adminUsersRoutes = {
6077
6325
  activateUserRoute,
6078
6326
  suspendUserRoute,
6079
6327
  resetPasswordRoute,
6328
+ resendInviteRoute,
6080
6329
  updateUserEmailRoute,
6081
6330
  pendingUsersCountRoute,
6082
6331
  deleteUserRoute
@@ -6342,7 +6591,10 @@ var stubListPlugins = { plugins: [] };
6342
6591
  var stubPluginConfig = { name: "", fields: [], values: {} };
6343
6592
  var stubUpdatePluginConfig = { ok: true, hotReloaded: false, reconfigureFailed: false };
6344
6593
  var stubClearRenderCache = { ok: true, clearedAt: "", removedCount: 0 };
6345
- var appAuthMeUserChain = new import_zod_openapi72.OpenAPIHono().openapi(appRoutes.getAppInfoRoute, (c) => c.json({ title: null, confidential: null }, 200)).openapi(installerRoutes.getInstallerStatusRoute, (c) => c.json({ status: "installer_required" }, 200)).openapi(installerRoutes.createAdminRoute, (c) => c.json({ status: "ok" }, 200)).openapi(tokenAuthRoutes.tokenLoginRoute, (c) => c.json(stubTokens, 200)).openapi(tokenAuthRoutes.tokenRegisterRoute, (c) => c.json({ status: "confirmation_required" }, 200)).openapi(inviteAcceptRoutes.invitePreviewRoute, (c) => c.json({ email: "stub@example.com" }, 200)).openapi(inviteAcceptRoutes.acceptInviteRoute, (c) => c.json(stubTokens, 200)).openapi(passwordResetRoutes.forgotPasswordRoute, (c) => c.json({ ok: true }, 200)).openapi(passwordResetRoutes.validateResetTokenRoute, (c) => c.json({ ok: true }, 200)).openapi(passwordResetRoutes.selfResetPasswordRoute, (c) => c.json(stubTokens, 200)).openapi(activationRoutes.validateActivationTokenRoute, (c) => c.json({ ok: true }, 200)).openapi(activationRoutes.activateAccountRoute, (c) => c.json(stubTokens, 200)).openapi(emailChangeRoutes.validateEmailChangeTokenRoute, (c) => c.json({ ok: true, email: "stub@example.com" }, 200)).openapi(emailChangeRoutes.confirmEmailChangeRoute, (c) => c.json({ ok: true, email: "stub@example.com" }, 200)).openapi(tokenAuthRoutes.tokenRefreshRoute, (c) => c.json(stubTokens, 200)).openapi(tokenAuthRoutes.tokenLogoutRoute, (c) => c.json({ message: "" }, 200)).openapi(
6594
+ var appAuthMeUserChain = new import_zod_openapi72.OpenAPIHono().openapi(
6595
+ appRoutes.getAppInfoRoute,
6596
+ (c) => c.json({ title: null, confidential: null, version: "", apiVersion: "v2", capabilities: [], canSelfRegister: true }, 200)
6597
+ ).openapi(installerRoutes.getInstallerStatusRoute, (c) => c.json({ status: "installer_required" }, 200)).openapi(installerRoutes.createAdminRoute, (c) => c.json({ status: "ok" }, 200)).openapi(tokenAuthRoutes.tokenLoginRoute, (c) => c.json(stubTokens, 200)).openapi(tokenAuthRoutes.tokenRegisterRoute, (c) => c.json({ status: "confirmation_required" }, 200)).openapi(inviteAcceptRoutes.invitePreviewRoute, (c) => c.json({ email: "stub@example.com" }, 200)).openapi(inviteAcceptRoutes.acceptInviteRoute, (c) => c.json(stubTokens, 200)).openapi(passwordResetRoutes.forgotPasswordRoute, (c) => c.json({ ok: true }, 200)).openapi(passwordResetRoutes.validateResetTokenRoute, (c) => c.json({ ok: true }, 200)).openapi(passwordResetRoutes.selfResetPasswordRoute, (c) => c.json(stubTokens, 200)).openapi(activationRoutes.validateActivationTokenRoute, (c) => c.json({ ok: true }, 200)).openapi(activationRoutes.activateAccountRoute, (c) => c.json(stubTokens, 200)).openapi(emailChangeRoutes.validateEmailChangeTokenRoute, (c) => c.json({ ok: true, email: "stub@example.com" }, 200)).openapi(emailChangeRoutes.confirmEmailChangeRoute, (c) => c.json({ ok: true, email: "stub@example.com" }, 200)).openapi(tokenAuthRoutes.tokenRefreshRoute, (c) => c.json(stubTokens, 200)).openapi(tokenAuthRoutes.tokenLogoutRoute, (c) => c.json({ message: "" }, 200)).openapi(
6346
6598
  tokenAuthRoutes.tokenMeRoute,
6347
6599
  (c) => c.json(
6348
6600
  {
@@ -6360,16 +6612,33 @@ var appAuthMeUserChain = new import_zod_openapi72.OpenAPIHono().openapi(appRoute
6360
6612
  )
6361
6613
  ).openapi(meRoutes.getProfileRoute, (c) => c.json(stubProfile, 200)).openapi(meRoutes.updateProfileRoute, (c) => c.json(stubProfile, 200)).openapi(meRoutes.updateThemeRoute, (c) => c.json({ status: "ok", theme: "system" }, 200)).openapi(meRoutes.uploadPictureRoute, (c) => c.json({ status: true }, 200)).openapi(meRoutes.deletePictureRoute, (c) => c.json({ status: "ok" }, 200)).openapi(meRoutes.updatePasswordRoute, (c) => c.json({ status: "ok", message: "" }, 200)).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.listMembersRoute, (c) => c.json(stubListUsers, 200));
6362
6614
  var bookmarkBacklinkCommentRevisionChain = new import_zod_openapi72.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));
6363
- var pageChain = new import_zod_openapi72.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.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.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));
6615
+ var pageChain = new import_zod_openapi72.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.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));
6364
6616
  var lateContractApp = new import_zod_openapi72.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));
6365
6617
  var adminSettingsContractApp = new import_zod_openapi72.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));
6366
- var adminUsersPluginsContractApp = new import_zod_openapi72.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.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));
6618
+ var adminUsersPluginsContractApp = new import_zod_openapi72.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));
6367
6619
  var oauthContractApp = new import_zod_openapi72.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));
6368
6620
  var createClient = (baseUrl, options = {}) => (0, import_client.hc)(baseUrl, {
6369
6621
  headers: options.headers,
6370
6622
  fetch: options.fetch
6371
6623
  });
6372
6624
 
6625
+ // src/schemas/app-capabilities.ts
6626
+ var STATIC_CAPABILITIES = [
6627
+ "oauth",
6628
+ // The oauth:* tags mirror GRANT_TYPES_SUPPORTED + the S256 PKCE method
6629
+ // (schemas/oauth-endpoints.ts / the RFC 8414 discovery doc). Keep in sync.
6630
+ "oauth:auth-code",
6631
+ "oauth:device",
6632
+ "oauth:pkce",
6633
+ "pat",
6634
+ "pages",
6635
+ "comments",
6636
+ "bookmarks",
6637
+ "attachments",
6638
+ "notifications"
6639
+ ];
6640
+ var API_SURFACE_VERSION = "v2";
6641
+
6373
6642
  // src/schemas/mail-token.ts
6374
6643
  var import_zod_openapi73 = require("@hono/zod-openapi");
6375
6644
  var MailTokenPurposeSchema = import_zod_openapi73.z.enum(["invite", "activate", "reset", "email-change"]);
@@ -6391,6 +6660,7 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6391
6660
  // Annotate the CommonJS export names for ESM import in node:
6392
6661
  0 && (module.exports = {
6393
6662
  ALL_SCOPES,
6663
+ API_SURFACE_VERSION,
6394
6664
  AccessTokenSchema,
6395
6665
  ActivateRequestSchema,
6396
6666
  ActivateValidationResponseSchema,
@@ -6501,6 +6771,7 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6501
6771
  InviteUsersRequestSchema,
6502
6772
  InviteUsersResponseSchema,
6503
6773
  InvitedUserResultSchema,
6774
+ KNOWN_HTML_ELEMENTS,
6504
6775
  LanguageSchema,
6505
6776
  LikerSchema,
6506
6777
  LikersResponseSchema,
@@ -6599,6 +6870,7 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6599
6870
  RenameTreeErrorSchema,
6600
6871
  ResetPasswordRequestSchema,
6601
6872
  ResetPasswordResponseSchema,
6873
+ RevertToRevisionRequestSchema,
6602
6874
  RevisionInvalidRequestErrorSchema,
6603
6875
  RevisionMetaSchema,
6604
6876
  RevisionMetaSchemaShape,
@@ -6607,6 +6879,8 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6607
6879
  RevokeRequestSchema,
6608
6880
  RevokeResponseSchema,
6609
6881
  SCOPES,
6882
+ STATIC_CAPABILITIES,
6883
+ STRIP_KNOWN_HTML_TAGS_MAX_LENGTH,
6610
6884
  SearchAdminUsersByEmailRequestSchema,
6611
6885
  SearchAdminUsersByEmailResponseSchema,
6612
6886
  SearchDriverEntrySchema,
@@ -6787,8 +7061,10 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6787
7061
  removeFromAdminRoute,
6788
7062
  renamePageRoute,
6789
7063
  renameSubtreeRoute,
7064
+ resendInviteRoute,
6790
7065
  resetPasswordRoute,
6791
7066
  revertDeletedPageRoute,
7067
+ revertToRevisionRoute,
6792
7068
  revisionRoutes,
6793
7069
  revokeRoute,
6794
7070
  scopeSatisfies,
@@ -6800,6 +7076,7 @@ var MailTokenPayloadSchema = import_zod_openapi73.z.object({
6800
7076
  sendTestMailRoute,
6801
7077
  setPageGrantRoute,
6802
7078
  setWatchStatusRoute,
7079
+ stripKnownHtmlTags,
6803
7080
  suspendUserRoute,
6804
7081
  tokenAuthRoutes,
6805
7082
  tokenLoginRoute,