@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.mjs CHANGED
@@ -23,6 +23,7 @@ var ERROR_CODES = [
23
23
  "PAGE_NOT_FOUND",
24
24
  "PAGE_NOT_GRANTED",
25
25
  "PAGE_REVISION_ERROR",
26
+ "PAGE_TWIN_EXISTS",
26
27
  "INVALID_GRANT",
27
28
  // --- comment / notification domain ---
28
29
  "COMMENT_NOT_FOUND",
@@ -51,6 +52,152 @@ var ERROR_CODES = [
51
52
  ];
52
53
  var ErrorCodeSchema = z.enum(ERROR_CODES).openapi("ErrorCode");
53
54
 
55
+ // src/util/html-elements.ts
56
+ var KNOWN_HTML_ELEMENTS = /* @__PURE__ */ new Set([
57
+ "a",
58
+ "abbr",
59
+ "acronym",
60
+ "address",
61
+ "applet",
62
+ "area",
63
+ "article",
64
+ "aside",
65
+ "audio",
66
+ "b",
67
+ "base",
68
+ "basefont",
69
+ "bdi",
70
+ "bdo",
71
+ "big",
72
+ "blink",
73
+ "blockquote",
74
+ "body",
75
+ "br",
76
+ "button",
77
+ "canvas",
78
+ "caption",
79
+ "center",
80
+ "cite",
81
+ "code",
82
+ "col",
83
+ "colgroup",
84
+ "data",
85
+ "datalist",
86
+ "dd",
87
+ "del",
88
+ "details",
89
+ "dfn",
90
+ "dialog",
91
+ "dir",
92
+ "div",
93
+ "dl",
94
+ "dt",
95
+ "em",
96
+ "embed",
97
+ "fieldset",
98
+ "figcaption",
99
+ "figure",
100
+ "font",
101
+ "footer",
102
+ "form",
103
+ "frame",
104
+ "frameset",
105
+ "h1",
106
+ "h2",
107
+ "h3",
108
+ "h4",
109
+ "h5",
110
+ "h6",
111
+ "head",
112
+ "header",
113
+ "hgroup",
114
+ "hr",
115
+ "html",
116
+ "i",
117
+ "iframe",
118
+ "img",
119
+ "input",
120
+ "ins",
121
+ "kbd",
122
+ "label",
123
+ "legend",
124
+ "li",
125
+ "link",
126
+ "listing",
127
+ "main",
128
+ "map",
129
+ "mark",
130
+ "marquee",
131
+ "menu",
132
+ "menuitem",
133
+ "meta",
134
+ "meter",
135
+ "nav",
136
+ "nobr",
137
+ "noembed",
138
+ "noframes",
139
+ "noscript",
140
+ "object",
141
+ "ol",
142
+ "optgroup",
143
+ "option",
144
+ "output",
145
+ "p",
146
+ "param",
147
+ "picture",
148
+ "pre",
149
+ "progress",
150
+ "q",
151
+ "rb",
152
+ "rp",
153
+ "rt",
154
+ "rtc",
155
+ "ruby",
156
+ "s",
157
+ "samp",
158
+ "script",
159
+ "search",
160
+ "section",
161
+ "select",
162
+ "slot",
163
+ "small",
164
+ "source",
165
+ "span",
166
+ "strike",
167
+ "strong",
168
+ "style",
169
+ "sub",
170
+ "summary",
171
+ "sup",
172
+ "svg",
173
+ "table",
174
+ "tbody",
175
+ "td",
176
+ "template",
177
+ "textarea",
178
+ "tfoot",
179
+ "th",
180
+ "thead",
181
+ "time",
182
+ "title",
183
+ "tr",
184
+ "track",
185
+ "tt",
186
+ "u",
187
+ "ul",
188
+ "var",
189
+ "video",
190
+ "wbr",
191
+ "xmp"
192
+ ]);
193
+ var KNOWN_HTML_TAG_REGEX = new RegExp(`</?(?:${[...KNOWN_HTML_ELEMENTS].join("|")})(?![\\w-])(?:[^>"']|"[^"]*"|'[^']*')*>`, "gi");
194
+ var STRIP_KNOWN_HTML_TAGS_MAX_LENGTH = 4096;
195
+ function stripKnownHtmlTags(text) {
196
+ if (text.length > STRIP_KNOWN_HTML_TAGS_MAX_LENGTH) return text;
197
+ KNOWN_HTML_TAG_REGEX.lastIndex = 0;
198
+ return text.replace(KNOWN_HTML_TAG_REGEX, "");
199
+ }
200
+
54
201
  // src/contracts/app.ts
55
202
  import { createRoute } from "@hono/zod-openapi";
56
203
 
@@ -150,7 +297,11 @@ var ForbiddenErrorSchema = ApiErrorSchema.extend({
150
297
  import { z as z3 } from "@hono/zod-openapi";
151
298
  var AppInfoResponseSchema = z3.object({
152
299
  title: z3.string().nullable(),
153
- confidential: z3.string().nullable()
300
+ confidential: z3.string().nullable(),
301
+ version: z3.string(),
302
+ apiVersion: z3.string(),
303
+ capabilities: z3.array(z3.string()),
304
+ canSelfRegister: z3.boolean()
154
305
  });
155
306
 
156
307
  // src/contracts/app.ts
@@ -1047,7 +1198,12 @@ var ListPagesRequestSchema = z13.object({
1047
1198
  // "newest-updated first" order so existing callers are unaffected.
1048
1199
  // `path` sorts alphabetically by full page path (≈ name order).
1049
1200
  sort: z13.enum(["updatedAt", "createdAt", "path"]).optional().default("updatedAt"),
1050
- order: z13.enum(["asc", "desc"]).optional().default("desc")
1201
+ order: z13.enum(["asc", "desc"]).optional().default("desc"),
1202
+ // When listing a portal path (`/foo/`), open the portal document at this
1203
+ // past revision so the catch-all can mirror `?revision_id=` on portals.
1204
+ // Only the `portalPage` is rewound — the child rows always reflect the
1205
+ // latest. Absent for normal listings.
1206
+ revision_id: z13.string().optional()
1051
1207
  });
1052
1208
  var PagerSchema = z13.object({
1053
1209
  prev: z13.number().nullable(),
@@ -1057,7 +1213,15 @@ var PagerSchema = z13.object({
1057
1213
  var ListPagesResponseSchema = z13.object({
1058
1214
  pages: z13.array(PageSchema),
1059
1215
  pager: PagerSchema,
1060
- portalPage: PageSchema.nullable().optional()
1216
+ portalPage: PageSchema.nullable().optional(),
1217
+ // When listing a portal path (`/foo/`) that has NO portal document of
1218
+ // its own but a content page DOES live at the stripped path (`/foo`),
1219
+ // this carries that content page. The list view uses it to suppress the
1220
+ // "Create Portal" CTA and surface a "portalize this page" banner instead
1221
+ // (feature-update-pages-list-ux §4). Mutually exclusive with `portalPage`
1222
+ // — only set when `portalPage` is null. Absent / null for ordinary
1223
+ // listings.
1224
+ contentPage: PageSchema.nullable().optional()
1061
1225
  });
1062
1226
  var PageChildSegmentSchema = z13.object({
1063
1227
  // The bare segment name immediately under the queried path
@@ -1098,6 +1262,10 @@ var UpdatePageRequestSchema = z13.object({
1098
1262
  revision_id: z13.string().optional(),
1099
1263
  grant: z13.number().optional()
1100
1264
  });
1265
+ var RevertToRevisionRequestSchema = z13.object({
1266
+ page_id: z13.string(),
1267
+ revision_id: z13.string()
1268
+ });
1101
1269
  var SetPageGrantRequestSchema = z13.object({
1102
1270
  page_id: z13.string(),
1103
1271
  grant: z13.number().int()
@@ -3256,6 +3424,36 @@ var revertDeletedPageRoute = createRoute17({
3256
3424
  }
3257
3425
  }
3258
3426
  });
3427
+ var revertToRevisionRoute = createRoute17({
3428
+ method: "post",
3429
+ path: "/pages/revert-to-revision",
3430
+ tags: ["page"],
3431
+ security: [{ bearerAuth: [] }],
3432
+ summary: "Revert a page to one of its past revisions (non-destructive \u2014 stacks a new revision)",
3433
+ request: {
3434
+ body: {
3435
+ content: { "application/json": { schema: RevertToRevisionRequestSchema } }
3436
+ }
3437
+ },
3438
+ responses: {
3439
+ 200: {
3440
+ description: "The page with the reverted body as its new latest revision",
3441
+ content: { "application/json": { schema: PageResponseSchema } }
3442
+ },
3443
+ 400: {
3444
+ description: "PAGE_REVERT_TO_REVISION_FAILED (e.g. the revision does not belong to the page)",
3445
+ content: { "application/json": { schema: PageBadRequestErrorSchema } }
3446
+ },
3447
+ 401: {
3448
+ description: "Authentication required",
3449
+ content: { "application/json": { schema: AuthenticationRequiredErrorSchema } }
3450
+ },
3451
+ 404: {
3452
+ description: "Page not found (also covers grant-denied)",
3453
+ content: { "application/json": { schema: PageNotFoundErrorSchema } }
3454
+ }
3455
+ }
3456
+ });
3259
3457
  var renamePageRoute = createRoute17({
3260
3458
  method: "post",
3261
3459
  path: "/pages/rename",
@@ -3353,6 +3551,8 @@ var pageRoutes = {
3353
3551
  deletePageRoute,
3354
3552
  // POST /pages/revert — revertDeletedPage
3355
3553
  revertDeletedPageRoute,
3554
+ // POST /pages/revert-to-revision — revertToRevision
3555
+ revertToRevisionRoute,
3356
3556
  // POST /pages/rename — renamePage
3357
3557
  renamePageRoute,
3358
3558
  // POST /pages/rename-subtree — renameSubtree (portal-less folder)
@@ -5499,6 +5699,46 @@ var resetPasswordRoute = createRoute33({
5499
5699
  }
5500
5700
  }
5501
5701
  });
5702
+ var resendInviteRoute = createRoute33({
5703
+ method: "post",
5704
+ path: "/admin/users/{id}/resend-invite",
5705
+ tags: ["admin.users"],
5706
+ security: [{ bearerAuth: [] }],
5707
+ summary: "Re-issue an invite token and resend the invitation email (INVITED status only)",
5708
+ request: {
5709
+ params: AdminUserIdParamSchema
5710
+ },
5711
+ responses: {
5712
+ 200: {
5713
+ description: "Invitation email resent; returns the (unchanged) user",
5714
+ content: { "application/json": { schema: AdminUserMutationResponseSchema } }
5715
+ },
5716
+ 400: {
5717
+ description: "Invalid id",
5718
+ content: { "application/json": { schema: ValidationErrorSchema } }
5719
+ },
5720
+ 401: {
5721
+ description: "Authentication required",
5722
+ content: { "application/json": { schema: AuthenticationRequiredErrorSchema } }
5723
+ },
5724
+ 403: {
5725
+ description: "Admin permission required",
5726
+ content: { "application/json": { schema: AdminRequiredErrorSchema } }
5727
+ },
5728
+ 404: {
5729
+ description: "User not found",
5730
+ content: { "application/json": { schema: NotFoundErrorSchema } }
5731
+ },
5732
+ 409: {
5733
+ description: "User is not in the INVITED status, so there is no pending invite to resend",
5734
+ content: { "application/json": { schema: ConflictErrorSchema } }
5735
+ },
5736
+ 500: {
5737
+ description: "Internal server error (e.g. the invitation email failed to send)",
5738
+ content: { "application/json": { schema: InternalServerErrorSchema } }
5739
+ }
5740
+ }
5741
+ });
5502
5742
  var updateUserEmailRoute = createRoute33({
5503
5743
  method: "put",
5504
5744
  path: "/admin/users/{id}/email",
@@ -5617,6 +5857,7 @@ var adminUsersRoutes = {
5617
5857
  activateUserRoute,
5618
5858
  suspendUserRoute,
5619
5859
  resetPasswordRoute,
5860
+ resendInviteRoute,
5620
5861
  updateUserEmailRoute,
5621
5862
  pendingUsersCountRoute,
5622
5863
  deleteUserRoute
@@ -5882,7 +6123,10 @@ var stubListPlugins = { plugins: [] };
5882
6123
  var stubPluginConfig = { name: "", fields: [], values: {} };
5883
6124
  var stubUpdatePluginConfig = { ok: true, hotReloaded: false, reconfigureFailed: false };
5884
6125
  var stubClearRenderCache = { ok: true, clearedAt: "", removedCount: 0 };
5885
- var appAuthMeUserChain = new 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(
6126
+ var appAuthMeUserChain = new OpenAPIHono().openapi(
6127
+ appRoutes.getAppInfoRoute,
6128
+ (c) => c.json({ title: null, confidential: null, version: "", apiVersion: "v2", capabilities: [], canSelfRegister: true }, 200)
6129
+ ).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(
5886
6130
  tokenAuthRoutes.tokenMeRoute,
5887
6131
  (c) => c.json(
5888
6132
  {
@@ -5900,16 +6144,33 @@ var appAuthMeUserChain = new OpenAPIHono().openapi(appRoutes.getAppInfoRoute, (c
5900
6144
  )
5901
6145
  ).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));
5902
6146
  var bookmarkBacklinkCommentRevisionChain = new 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));
5903
- var pageChain = new 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));
6147
+ var pageChain = new 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));
5904
6148
  var lateContractApp = new 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));
5905
6149
  var adminSettingsContractApp = new 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));
5906
- var adminUsersPluginsContractApp = new 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));
6150
+ var adminUsersPluginsContractApp = new 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));
5907
6151
  var oauthContractApp = new 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));
5908
6152
  var createClient = (baseUrl, options = {}) => hc(baseUrl, {
5909
6153
  headers: options.headers,
5910
6154
  fetch: options.fetch
5911
6155
  });
5912
6156
 
6157
+ // src/schemas/app-capabilities.ts
6158
+ var STATIC_CAPABILITIES = [
6159
+ "oauth",
6160
+ // The oauth:* tags mirror GRANT_TYPES_SUPPORTED + the S256 PKCE method
6161
+ // (schemas/oauth-endpoints.ts / the RFC 8414 discovery doc). Keep in sync.
6162
+ "oauth:auth-code",
6163
+ "oauth:device",
6164
+ "oauth:pkce",
6165
+ "pat",
6166
+ "pages",
6167
+ "comments",
6168
+ "bookmarks",
6169
+ "attachments",
6170
+ "notifications"
6171
+ ];
6172
+ var API_SURFACE_VERSION = "v2";
6173
+
5913
6174
  // src/schemas/mail-token.ts
5914
6175
  import { z as z54 } from "@hono/zod-openapi";
5915
6176
  var MailTokenPurposeSchema = z54.enum(["invite", "activate", "reset", "email-change"]);
@@ -5930,6 +6191,7 @@ var MailTokenPayloadSchema = z54.object({
5930
6191
  });
5931
6192
  export {
5932
6193
  ALL_SCOPES,
6194
+ API_SURFACE_VERSION,
5933
6195
  AccessTokenSchema,
5934
6196
  ActivateRequestSchema,
5935
6197
  ActivateValidationResponseSchema,
@@ -6040,6 +6302,7 @@ export {
6040
6302
  InviteUsersRequestSchema,
6041
6303
  InviteUsersResponseSchema,
6042
6304
  InvitedUserResultSchema,
6305
+ KNOWN_HTML_ELEMENTS,
6043
6306
  LanguageSchema,
6044
6307
  LikerSchema,
6045
6308
  LikersResponseSchema,
@@ -6138,6 +6401,7 @@ export {
6138
6401
  RenameTreeErrorSchema,
6139
6402
  ResetPasswordRequestSchema,
6140
6403
  ResetPasswordResponseSchema,
6404
+ RevertToRevisionRequestSchema,
6141
6405
  RevisionInvalidRequestErrorSchema,
6142
6406
  RevisionMetaSchema,
6143
6407
  RevisionMetaSchemaShape,
@@ -6146,6 +6410,8 @@ export {
6146
6410
  RevokeRequestSchema,
6147
6411
  RevokeResponseSchema,
6148
6412
  SCOPES,
6413
+ STATIC_CAPABILITIES,
6414
+ STRIP_KNOWN_HTML_TAGS_MAX_LENGTH,
6149
6415
  SearchAdminUsersByEmailRequestSchema,
6150
6416
  SearchAdminUsersByEmailResponseSchema,
6151
6417
  SearchDriverEntrySchema,
@@ -6326,8 +6592,10 @@ export {
6326
6592
  removeFromAdminRoute,
6327
6593
  renamePageRoute,
6328
6594
  renameSubtreeRoute,
6595
+ resendInviteRoute,
6329
6596
  resetPasswordRoute,
6330
6597
  revertDeletedPageRoute,
6598
+ revertToRevisionRoute,
6331
6599
  revisionRoutes,
6332
6600
  revokeRoute,
6333
6601
  scopeSatisfies,
@@ -6339,6 +6607,7 @@ export {
6339
6607
  sendTestMailRoute,
6340
6608
  setPageGrantRoute,
6341
6609
  setWatchStatusRoute,
6610
+ stripKnownHtmlTags,
6342
6611
  suspendUserRoute,
6343
6612
  tokenAuthRoutes,
6344
6613
  tokenLoginRoute,