@crowi/api 2.0.0-alpha.0
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/LICENSE +21 -0
- package/dist/app.d.ts +8 -0
- package/dist/app.js +65 -0
- package/dist/app.js.map +1 -0
- package/dist/collab/attach.d.ts +33 -0
- package/dist/collab/attach.js +341 -0
- package/dist/collab/attach.js.map +1 -0
- package/dist/collab/extension-redis.d.ts +25 -0
- package/dist/collab/extension-redis.js +133 -0
- package/dist/collab/extension-redis.js.map +1 -0
- package/dist/common/functions/path2name.d.ts +1 -0
- package/dist/common/functions/path2name.js +22 -0
- package/dist/common/functions/path2name.js.map +1 -0
- package/dist/common/functions/renderIcon.d.ts +1 -0
- package/dist/common/functions/renderIcon.js +9 -0
- package/dist/common/functions/renderIcon.js.map +1 -0
- package/dist/controllers/admin.d.ts +3 -0
- package/dist/controllers/admin.js +474 -0
- package/dist/controllers/admin.js.map +1 -0
- package/dist/controllers/attachment.d.ts +4 -0
- package/dist/controllers/attachment.js +200 -0
- package/dist/controllers/attachment.js.map +1 -0
- package/dist/controllers/backlink.d.ts +3 -0
- package/dist/controllers/backlink.js +42 -0
- package/dist/controllers/backlink.js.map +1 -0
- package/dist/controllers/bookmark.d.ts +3 -0
- package/dist/controllers/bookmark.js +100 -0
- package/dist/controllers/bookmark.js.map +1 -0
- package/dist/controllers/comment.d.ts +3 -0
- package/dist/controllers/comment.js +111 -0
- package/dist/controllers/comment.js.map +1 -0
- package/dist/controllers/index.d.ts +25 -0
- package/dist/controllers/index.js +44 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/installer.d.ts +3 -0
- package/dist/controllers/installer.js +48 -0
- package/dist/controllers/installer.js.map +1 -0
- package/dist/controllers/login.d.ts +4 -0
- package/dist/controllers/login.js +438 -0
- package/dist/controllers/login.js.map +1 -0
- package/dist/controllers/logout.d.ts +5 -0
- package/dist/controllers/logout.js +11 -0
- package/dist/controllers/logout.js.map +1 -0
- package/dist/controllers/me.d.ts +4 -0
- package/dist/controllers/me.js +369 -0
- package/dist/controllers/me.js.map +1 -0
- package/dist/controllers/notification.d.ts +3 -0
- package/dist/controllers/notification.js +88 -0
- package/dist/controllers/notification.js.map +1 -0
- package/dist/controllers/page.d.ts +3 -0
- package/dist/controllers/page.js +881 -0
- package/dist/controllers/page.js.map +1 -0
- package/dist/controllers/revision.d.ts +3 -0
- package/dist/controllers/revision.js +91 -0
- package/dist/controllers/revision.js.map +1 -0
- package/dist/controllers/search.d.ts +3 -0
- package/dist/controllers/search.js +93 -0
- package/dist/controllers/search.js.map +1 -0
- package/dist/controllers/share.d.ts +3 -0
- package/dist/controllers/share.js +207 -0
- package/dist/controllers/share.js.map +1 -0
- package/dist/controllers/shareAccess.d.ts +3 -0
- package/dist/controllers/shareAccess.js +28 -0
- package/dist/controllers/shareAccess.js.map +1 -0
- package/dist/controllers/slack.d.ts +3 -0
- package/dist/controllers/slack.js +87 -0
- package/dist/controllers/slack.js.map +1 -0
- package/dist/controllers/tokenAuth.d.ts +10 -0
- package/dist/controllers/tokenAuth.js +292 -0
- package/dist/controllers/tokenAuth.js.map +1 -0
- package/dist/controllers/user.d.ts +3 -0
- package/dist/controllers/user.js +67 -0
- package/dist/controllers/user.js.map +1 -0
- package/dist/controllers/version.d.ts +4 -0
- package/dist/controllers/version.js +19 -0
- package/dist/controllers/version.js.map +1 -0
- package/dist/crowi/express-init.d.ts +4 -0
- package/dist/crowi/express-init.js +101 -0
- package/dist/crowi/express-init.js.map +1 -0
- package/dist/crowi/index.d.ts +245 -0
- package/dist/crowi/index.js +726 -0
- package/dist/crowi/index.js.map +1 -0
- package/dist/events/activity.d.ts +7 -0
- package/dist/events/activity.js +15 -0
- package/dist/events/activity.js.map +1 -0
- package/dist/events/bookmark.d.ts +8 -0
- package/dist/events/bookmark.js +16 -0
- package/dist/events/bookmark.js.map +1 -0
- package/dist/events/comment.d.ts +6 -0
- package/dist/events/comment.js +14 -0
- package/dist/events/comment.js.map +1 -0
- package/dist/events/config.d.ts +6 -0
- package/dist/events/config.js +12 -0
- package/dist/events/config.js.map +1 -0
- package/dist/events/index.d.ts +17 -0
- package/dist/events/index.js +22 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/mention-dispatch.d.ts +44 -0
- package/dist/events/mention-dispatch.js +151 -0
- package/dist/events/mention-dispatch.js.map +1 -0
- package/dist/events/notification.d.ts +7 -0
- package/dist/events/notification.js +15 -0
- package/dist/events/notification.js.map +1 -0
- package/dist/events/page.d.ts +44 -0
- package/dist/events/page.js +134 -0
- package/dist/events/page.js.map +1 -0
- package/dist/events/render-cache.d.ts +24 -0
- package/dist/events/render-cache.js +63 -0
- package/dist/events/render-cache.js.map +1 -0
- package/dist/events/user.d.ts +9 -0
- package/dist/events/user.js +39 -0
- package/dist/events/user.js.map +1 -0
- package/dist/form/admin/app.d.ts +2 -0
- package/dist/form/admin/app.js +9 -0
- package/dist/form/admin/app.js.map +1 -0
- package/dist/form/admin/auth.d.ts +2 -0
- package/dist/form/admin/auth.js +9 -0
- package/dist/form/admin/auth.js.map +1 -0
- package/dist/form/admin/aws.d.ts +2 -0
- package/dist/form/admin/aws.js +13 -0
- package/dist/form/admin/aws.js.map +1 -0
- package/dist/form/admin/github.d.ts +2 -0
- package/dist/form/admin/github.js +15 -0
- package/dist/form/admin/github.js.map +1 -0
- package/dist/form/admin/google.d.ts +2 -0
- package/dist/form/admin/google.js +13 -0
- package/dist/form/admin/google.js.map +1 -0
- package/dist/form/admin/mail.d.ts +2 -0
- package/dist/form/admin/mail.js +13 -0
- package/dist/form/admin/mail.js.map +1 -0
- package/dist/form/admin/sec.d.ts +2 -0
- package/dist/form/admin/sec.js +10 -0
- package/dist/form/admin/sec.js.map +1 -0
- package/dist/form/admin/slackSetting.d.ts +2 -0
- package/dist/form/admin/slackSetting.js +13 -0
- package/dist/form/admin/slackSetting.js.map +1 -0
- package/dist/form/admin/userEdit.d.ts +2 -0
- package/dist/form/admin/userEdit.js +9 -0
- package/dist/form/admin/userEdit.js.map +1 -0
- package/dist/form/admin/userInvite.d.ts +2 -0
- package/dist/form/admin/userInvite.js +9 -0
- package/dist/form/admin/userInvite.js.map +1 -0
- package/dist/form/comment.d.ts +2 -0
- package/dist/form/comment.js +9 -0
- package/dist/form/comment.js.map +1 -0
- package/dist/form/index.d.ts +25 -0
- package/dist/form/index.js +48 -0
- package/dist/form/index.js.map +1 -0
- package/dist/form/invited.d.ts +2 -0
- package/dist/form/invited.js +13 -0
- package/dist/form/invited.js.map +1 -0
- package/dist/form/login.d.ts +2 -0
- package/dist/form/login.js +11 -0
- package/dist/form/login.js.map +1 -0
- package/dist/form/me/apiToken.d.ts +2 -0
- package/dist/form/me/apiToken.js +9 -0
- package/dist/form/me/apiToken.js.map +1 -0
- package/dist/form/me/password.d.ts +2 -0
- package/dist/form/me/password.js +11 -0
- package/dist/form/me/password.js.map +1 -0
- package/dist/form/me/user.d.ts +2 -0
- package/dist/form/me/user.js +9 -0
- package/dist/form/me/user.js.map +1 -0
- package/dist/form/register.d.ts +2 -0
- package/dist/form/register.js +13 -0
- package/dist/form/register.js.map +1 -0
- package/dist/form/revision.d.ts +2 -0
- package/dist/form/revision.js +13 -0
- package/dist/form/revision.js.map +1 -0
- package/dist/hono/app.d.ts +19 -0
- package/dist/hono/app.js +21 -0
- package/dist/hono/app.js.map +1 -0
- package/dist/hono/handlers/_helpers/errors.d.ts +61 -0
- package/dist/hono/handlers/_helpers/errors.js +51 -0
- package/dist/hono/handlers/_helpers/errors.js.map +1 -0
- package/dist/hono/handlers/_helpers/user-shape.d.ts +46 -0
- package/dist/hono/handlers/_helpers/user-shape.js +23 -0
- package/dist/hono/handlers/_helpers/user-shape.js.map +1 -0
- package/dist/hono/handlers/access-token.d.ts +221 -0
- package/dist/hono/handlers/access-token.js +113 -0
- package/dist/hono/handlers/access-token.js.map +1 -0
- package/dist/hono/handlers/activation.d.ts +117 -0
- package/dist/hono/handlers/activation.js +77 -0
- package/dist/hono/handlers/activation.js.map +1 -0
- package/dist/hono/handlers/admin/app.d.ts +123 -0
- package/dist/hono/handlers/admin/app.js +76 -0
- package/dist/hono/handlers/admin/app.js.map +1 -0
- package/dist/hono/handlers/admin/auth.d.ts +127 -0
- package/dist/hono/handlers/admin/auth.js +91 -0
- package/dist/hono/handlers/admin/auth.js.map +1 -0
- package/dist/hono/handlers/admin/mail.d.ts +168 -0
- package/dist/hono/handlers/admin/mail.js +76 -0
- package/dist/hono/handlers/admin/mail.js.map +1 -0
- package/dist/hono/handlers/admin/plugins.d.ts +409 -0
- package/dist/hono/handlers/admin/plugins.js +257 -0
- package/dist/hono/handlers/admin/plugins.js.map +1 -0
- package/dist/hono/handlers/admin/search.d.ts +57 -0
- package/dist/hono/handlers/admin/search.js +55 -0
- package/dist/hono/handlers/admin/search.js.map +1 -0
- package/dist/hono/handlers/admin/security.d.ts +112 -0
- package/dist/hono/handlers/admin/security.js +71 -0
- package/dist/hono/handlers/admin/security.js.map +1 -0
- package/dist/hono/handlers/admin/share.d.ts +106 -0
- package/dist/hono/handlers/admin/share.js +55 -0
- package/dist/hono/handlers/admin/share.js.map +1 -0
- package/dist/hono/handlers/admin/storage.d.ts +55 -0
- package/dist/hono/handlers/admin/storage.js +40 -0
- package/dist/hono/handlers/admin/storage.js.map +1 -0
- package/dist/hono/handlers/admin/users.d.ts +1230 -0
- package/dist/hono/handlers/admin/users.js +316 -0
- package/dist/hono/handlers/admin/users.js.map +1 -0
- package/dist/hono/handlers/adminCrypto.d.ts +110 -0
- package/dist/hono/handlers/adminCrypto.js +151 -0
- package/dist/hono/handlers/adminCrypto.js.map +1 -0
- package/dist/hono/handlers/app.d.ts +26 -0
- package/dist/hono/handlers/app.js +34 -0
- package/dist/hono/handlers/app.js.map +1 -0
- package/dist/hono/handlers/attachment-stream.d.ts +4 -0
- package/dist/hono/handlers/attachment-stream.js +211 -0
- package/dist/hono/handlers/attachment-stream.js.map +1 -0
- package/dist/hono/handlers/attachment.d.ts +687 -0
- package/dist/hono/handlers/attachment.js +566 -0
- package/dist/hono/handlers/attachment.js.map +1 -0
- package/dist/hono/handlers/autocomplete.d.ts +160 -0
- package/dist/hono/handlers/autocomplete.js +181 -0
- package/dist/hono/handlers/autocomplete.js.map +1 -0
- package/dist/hono/handlers/backlink.d.ts +78 -0
- package/dist/hono/handlers/backlink.js +93 -0
- package/dist/hono/handlers/backlink.js.map +1 -0
- package/dist/hono/handlers/bookmark.d.ts +558 -0
- package/dist/hono/handlers/bookmark.js +166 -0
- package/dist/hono/handlers/bookmark.js.map +1 -0
- package/dist/hono/handlers/comment.d.ts +231 -0
- package/dist/hono/handlers/comment.js +191 -0
- package/dist/hono/handlers/comment.js.map +1 -0
- package/dist/hono/handlers/draft.d.ts +136 -0
- package/dist/hono/handlers/draft.js +191 -0
- package/dist/hono/handlers/draft.js.map +1 -0
- package/dist/hono/handlers/emailChange.d.ts +124 -0
- package/dist/hono/handlers/emailChange.js +79 -0
- package/dist/hono/handlers/emailChange.js.map +1 -0
- package/dist/hono/handlers/installer.d.ts +94 -0
- package/dist/hono/handlers/installer.js +93 -0
- package/dist/hono/handlers/installer.js.map +1 -0
- package/dist/hono/handlers/inviteAccept.d.ts +180 -0
- package/dist/hono/handlers/inviteAccept.js +94 -0
- package/dist/hono/handlers/inviteAccept.js.map +1 -0
- package/dist/hono/handlers/me.d.ts +401 -0
- package/dist/hono/handlers/me.js +390 -0
- package/dist/hono/handlers/me.js.map +1 -0
- package/dist/hono/handlers/notification.d.ts +274 -0
- package/dist/hono/handlers/notification.js +224 -0
- package/dist/hono/handlers/notification.js.map +1 -0
- package/dist/hono/handlers/oauth.d.ts +299 -0
- package/dist/hono/handlers/oauth.js +443 -0
- package/dist/hono/handlers/oauth.js.map +1 -0
- package/dist/hono/handlers/page-collab.d.ts +79 -0
- package/dist/hono/handlers/page-collab.js +98 -0
- package/dist/hono/handlers/page-collab.js.map +1 -0
- package/dist/hono/handlers/page-preview.d.ts +48 -0
- package/dist/hono/handlers/page-preview.js +83 -0
- package/dist/hono/handlers/page-preview.js.map +1 -0
- package/dist/hono/handlers/page.d.ts +2059 -0
- package/dist/hono/handlers/page.js +793 -0
- package/dist/hono/handlers/page.js.map +1 -0
- package/dist/hono/handlers/passwordReset.d.ts +181 -0
- package/dist/hono/handlers/passwordReset.js +101 -0
- package/dist/hono/handlers/passwordReset.js.map +1 -0
- package/dist/hono/handlers/presence.d.ts +178 -0
- package/dist/hono/handlers/presence.js +163 -0
- package/dist/hono/handlers/presence.js.map +1 -0
- package/dist/hono/handlers/revision.d.ts +345 -0
- package/dist/hono/handlers/revision.js +202 -0
- package/dist/hono/handlers/revision.js.map +1 -0
- package/dist/hono/handlers/search.d.ts +208 -0
- package/dist/hono/handlers/search.js +152 -0
- package/dist/hono/handlers/search.js.map +1 -0
- package/dist/hono/handlers/tokenAuth.d.ts +369 -0
- package/dist/hono/handlers/tokenAuth.js +240 -0
- package/dist/hono/handlers/tokenAuth.js.map +1 -0
- package/dist/hono/handlers/user.d.ts +710 -0
- package/dist/hono/handlers/user.js +212 -0
- package/dist/hono/handlers/user.js.map +1 -0
- package/dist/hono/index.d.ts +289 -0
- package/dist/hono/index.js +240 -0
- package/dist/hono/index.js.map +1 -0
- package/dist/hono/middleware/admin.d.ts +5 -0
- package/dist/hono/middleware/admin.js +34 -0
- package/dist/hono/middleware/admin.js.map +1 -0
- package/dist/hono/middleware/auth.d.ts +54 -0
- package/dist/hono/middleware/auth.js +142 -0
- package/dist/hono/middleware/auth.js.map +1 -0
- package/dist/hono/middleware/cors.d.ts +3 -0
- package/dist/hono/middleware/cors.js +86 -0
- package/dist/hono/middleware/cors.js.map +1 -0
- package/dist/hono/middleware/default-hook.d.ts +8 -0
- package/dist/hono/middleware/default-hook.js +17 -0
- package/dist/hono/middleware/default-hook.js.map +1 -0
- package/dist/hono/middleware/error-handler.d.ts +2 -0
- package/dist/hono/middleware/error-handler.js +20 -0
- package/dist/hono/middleware/error-handler.js.map +1 -0
- package/dist/hono/middleware/rate-limit.d.ts +57 -0
- package/dist/hono/middleware/rate-limit.js +42 -0
- package/dist/hono/middleware/rate-limit.js.map +1 -0
- package/dist/hono/middleware/require-scope.d.ts +50 -0
- package/dist/hono/middleware/require-scope.js +64 -0
- package/dist/hono/middleware/require-scope.js.map +1 -0
- package/dist/hono/path-rewrite.d.ts +15 -0
- package/dist/hono/path-rewrite.js +59 -0
- package/dist/hono/path-rewrite.js.map +1 -0
- package/dist/mail/i18n/en.d.ts +2 -0
- package/dist/mail/i18n/en.js +66 -0
- package/dist/mail/i18n/en.js.map +1 -0
- package/dist/mail/i18n/index.d.ts +46 -0
- package/dist/mail/i18n/index.js +31 -0
- package/dist/mail/i18n/index.js.map +1 -0
- package/dist/mail/i18n/ja.d.ts +2 -0
- package/dist/mail/i18n/ja.js +66 -0
- package/dist/mail/i18n/ja.js.map +1 -0
- package/dist/mcp/attach.d.ts +25 -0
- package/dist/mcp/attach.js +104 -0
- package/dist/mcp/attach.js.map +1 -0
- package/dist/mcp/dispatch.d.ts +59 -0
- package/dist/mcp/dispatch.js +70 -0
- package/dist/mcp/dispatch.js.map +1 -0
- package/dist/mcp/result.d.ts +40 -0
- package/dist/mcp/result.js +78 -0
- package/dist/mcp/result.js.map +1 -0
- package/dist/mcp/server.d.ts +67 -0
- package/dist/mcp/server.js +113 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/page.d.ts +2 -0
- package/dist/mcp/tools/page.js +256 -0
- package/dist/mcp/tools/page.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +2 -0
- package/dist/mcp/tools/search.js +36 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/middlewares/accessTokenParser.d.ts +4 -0
- package/dist/middlewares/accessTokenParser.js +29 -0
- package/dist/middlewares/accessTokenParser.js.map +1 -0
- package/dist/middlewares/adminRequired.d.ts +10 -0
- package/dist/middlewares/adminRequired.js +35 -0
- package/dist/middlewares/adminRequired.js.map +1 -0
- package/dist/middlewares/applicationInstalled.d.ts +3 -0
- package/dist/middlewares/applicationInstalled.js +20 -0
- package/dist/middlewares/applicationInstalled.js.map +1 -0
- package/dist/middlewares/applicationNotInstalled.d.ts +3 -0
- package/dist/middlewares/applicationNotInstalled.js +13 -0
- package/dist/middlewares/applicationNotInstalled.js.map +1 -0
- package/dist/middlewares/basicAuth.d.ts +4 -0
- package/dist/middlewares/basicAuth.js +23 -0
- package/dist/middlewares/basicAuth.js.map +1 -0
- package/dist/middlewares/csrfVerify.d.ts +4 -0
- package/dist/middlewares/csrfVerify.js +24 -0
- package/dist/middlewares/csrfVerify.js.map +1 -0
- package/dist/middlewares/encodeSpace.d.ts +3 -0
- package/dist/middlewares/encodeSpace.js +14 -0
- package/dist/middlewares/encodeSpace.js.map +1 -0
- package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +4 -0
- package/dist/middlewares/fileAccessRightOrLoginRequired.js +29 -0
- package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +1 -0
- package/dist/middlewares/index.d.ts +16 -0
- package/dist/middlewares/index.js +30 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/jwtAdminRequired.d.ts +8 -0
- package/dist/middlewares/jwtAdminRequired.js +35 -0
- package/dist/middlewares/jwtAdminRequired.js.map +1 -0
- package/dist/middlewares/jwtAuth.d.ts +4 -0
- package/dist/middlewares/jwtAuth.js +104 -0
- package/dist/middlewares/jwtAuth.js.map +1 -0
- package/dist/middlewares/loginChecker.d.ts +4 -0
- package/dist/middlewares/loginChecker.js +32 -0
- package/dist/middlewares/loginChecker.js.map +1 -0
- package/dist/middlewares/loginRequired.d.ts +4 -0
- package/dist/middlewares/loginRequired.js +88 -0
- package/dist/middlewares/loginRequired.js.map +1 -0
- package/dist/migration/cli-api.d.ts +83 -0
- package/dist/migration/cli-api.js +128 -0
- package/dist/migration/cli-api.js.map +1 -0
- package/dist/migration/migrations/index.d.ts +12 -0
- package/dist/migration/migrations/index.js +24 -0
- package/dist/migration/migrations/index.js.map +1 -0
- package/dist/migration/migrations/page-status-default.d.ts +25 -0
- package/dist/migration/migrations/page-status-default.js +79 -0
- package/dist/migration/migrations/page-status-default.js.map +1 -0
- package/dist/migration/migrations/revisions-schema-unify.d.ts +33 -0
- package/dist/migration/migrations/revisions-schema-unify.js +88 -0
- package/dist/migration/migrations/revisions-schema-unify.js.map +1 -0
- package/dist/migration/migrations/user-unique-prepare.d.ts +1 -0
- package/dist/migration/migrations/user-unique-prepare.js +214 -0
- package/dist/migration/migrations/user-unique-prepare.js.map +1 -0
- package/dist/migration/migrations/wikilink-format.d.ts +97 -0
- package/dist/migration/migrations/wikilink-format.js +418 -0
- package/dist/migration/migrations/wikilink-format.js.map +1 -0
- package/dist/migration/rebuild-api.d.ts +50 -0
- package/dist/migration/rebuild-api.js +45 -0
- package/dist/migration/rebuild-api.js.map +1 -0
- package/dist/migration/rebuild-runner.d.ts +64 -0
- package/dist/migration/rebuild-runner.js +42 -0
- package/dist/migration/rebuild-runner.js.map +1 -0
- package/dist/migration/rebuilds/index.d.ts +26 -0
- package/dist/migration/rebuilds/index.js +69 -0
- package/dist/migration/rebuilds/index.js.map +1 -0
- package/dist/migration/registry.d.ts +15 -0
- package/dist/migration/registry.js +96 -0
- package/dist/migration/registry.js.map +1 -0
- package/dist/migration/run-boot-migrations.d.ts +31 -0
- package/dist/migration/run-boot-migrations.js +95 -0
- package/dist/migration/run-boot-migrations.js.map +1 -0
- package/dist/migration/runner.d.ts +120 -0
- package/dist/migration/runner.js +276 -0
- package/dist/migration/runner.js.map +1 -0
- package/dist/migration/types.d.ts +153 -0
- package/dist/migration/types.js +13 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/models/activity.d.ts +34 -0
- package/dist/models/activity.js +263 -0
- package/dist/models/activity.js.map +1 -0
- package/dist/models/attachment.d.ts +25 -0
- package/dist/models/attachment.js +82 -0
- package/dist/models/attachment.js.map +1 -0
- package/dist/models/backlink.d.ts +19 -0
- package/dist/models/backlink.js +138 -0
- package/dist/models/backlink.js.map +1 -0
- package/dist/models/bookmark.d.ts +28 -0
- package/dist/models/bookmark.js +136 -0
- package/dist/models/bookmark.js.map +1 -0
- package/dist/models/comment.d.ts +21 -0
- package/dist/models/comment.js +87 -0
- package/dist/models/comment.js.map +1 -0
- package/dist/models/config-sensitive.d.ts +21 -0
- package/dist/models/config-sensitive.js +71 -0
- package/dist/models/config-sensitive.js.map +1 -0
- package/dist/models/config.d.ts +34 -0
- package/dist/models/config.js +161 -0
- package/dist/models/config.js.map +1 -0
- package/dist/models/index.d.ts +30 -0
- package/dist/models/index.js +55 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/migration-application.d.ts +54 -0
- package/dist/models/migration-application.js +36 -0
- package/dist/models/migration-application.js.map +1 -0
- package/dist/models/notification.d.ts +28 -0
- package/dist/models/notification.js +285 -0
- package/dist/models/notification.js.map +1 -0
- package/dist/models/oauth-authorization-code.d.ts +34 -0
- package/dist/models/oauth-authorization-code.js +100 -0
- package/dist/models/oauth-authorization-code.js.map +1 -0
- package/dist/models/oauth-client.d.ts +36 -0
- package/dist/models/oauth-client.js +56 -0
- package/dist/models/oauth-client.js.map +1 -0
- package/dist/models/oauth-device-code.d.ts +55 -0
- package/dist/models/oauth-device-code.js +158 -0
- package/dist/models/oauth-device-code.js.map +1 -0
- package/dist/models/oauth-refresh-token.d.ts +31 -0
- package/dist/models/oauth-refresh-token.js +118 -0
- package/dist/models/oauth-refresh-token.js.map +1 -0
- package/dist/models/page-yjs-update.d.ts +35 -0
- package/dist/models/page-yjs-update.js +33 -0
- package/dist/models/page-yjs-update.js.map +1 -0
- package/dist/models/page.d.ts +200 -0
- package/dist/models/page.js +1117 -0
- package/dist/models/page.js.map +1 -0
- package/dist/models/personal-access-token.d.ts +30 -0
- package/dist/models/personal-access-token.js +107 -0
- package/dist/models/personal-access-token.js.map +1 -0
- package/dist/models/plugin-render-cache.d.ts +40 -0
- package/dist/models/plugin-render-cache.js +39 -0
- package/dist/models/plugin-render-cache.js.map +1 -0
- package/dist/models/revision.d.ts +145 -0
- package/dist/models/revision.js +241 -0
- package/dist/models/revision.js.map +1 -0
- package/dist/models/share.d.ts +38 -0
- package/dist/models/share.js +137 -0
- package/dist/models/share.js.map +1 -0
- package/dist/models/shareAccess.d.ts +20 -0
- package/dist/models/shareAccess.js +45 -0
- package/dist/models/shareAccess.js.map +1 -0
- package/dist/models/tracking.d.ts +14 -0
- package/dist/models/tracking.js +14 -0
- package/dist/models/tracking.js.map +1 -0
- package/dist/models/updatePost.d.ts +25 -0
- package/dist/models/updatePost.js +87 -0
- package/dist/models/updatePost.js.map +1 -0
- package/dist/models/user.d.ts +144 -0
- package/dist/models/user.js +681 -0
- package/dist/models/user.js.map +1 -0
- package/dist/models/watcher.d.ts +23 -0
- package/dist/models/watcher.js +75 -0
- package/dist/models/watcher.js.map +1 -0
- package/dist/notifications/attach.d.ts +63 -0
- package/dist/notifications/attach.js +426 -0
- package/dist/notifications/attach.js.map +1 -0
- package/dist/notifications/channel.d.ts +13 -0
- package/dist/notifications/channel.js +18 -0
- package/dist/notifications/channel.js.map +1 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.js +6 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/plugin-context.d.ts +22 -0
- package/dist/plugin/plugin-context.js +126 -0
- package/dist/plugin/plugin-context.js.map +1 -0
- package/dist/plugin/plugin-manager.d.ts +164 -0
- package/dist/plugin/plugin-manager.js +328 -0
- package/dist/plugin/plugin-manager.js.map +1 -0
- package/dist/plugin/plugin-namespace.d.ts +28 -0
- package/dist/plugin/plugin-namespace.js +53 -0
- package/dist/plugin/plugin-namespace.js.map +1 -0
- package/dist/plugin/registries.d.ts +38 -0
- package/dist/plugin/registries.js +71 -0
- package/dist/plugin/registries.js.map +1 -0
- package/dist/plugin/schema-serializer.d.ts +34 -0
- package/dist/plugin/schema-serializer.js +122 -0
- package/dist/plugin/schema-serializer.js.map +1 -0
- package/dist/plugin/topo-sort.d.ts +15 -0
- package/dist/plugin/topo-sort.js +59 -0
- package/dist/plugin/topo-sort.js.map +1 -0
- package/dist/presence/attach.d.ts +36 -0
- package/dist/presence/attach.js +399 -0
- package/dist/presence/attach.js.map +1 -0
- package/dist/renderer/__fixtures__/echo-embed.d.ts +27 -0
- package/dist/renderer/__fixtures__/echo-embed.js +24 -0
- package/dist/renderer/__fixtures__/echo-embed.js.map +1 -0
- package/dist/renderer/cache/index.d.ts +60 -0
- package/dist/renderer/cache/index.js +219 -0
- package/dist/renderer/cache/index.js.map +1 -0
- package/dist/renderer/cache/mongodb-cache.d.ts +82 -0
- package/dist/renderer/cache/mongodb-cache.js +180 -0
- package/dist/renderer/cache/mongodb-cache.js.map +1 -0
- package/dist/renderer/cache/reservation.d.ts +20 -0
- package/dist/renderer/cache/reservation.js +115 -0
- package/dist/renderer/cache/reservation.js.map +1 -0
- package/dist/renderer/core/_mdast-walk.d.ts +35 -0
- package/dist/renderer/core/_mdast-walk.js +45 -0
- package/dist/renderer/core/_mdast-walk.js.map +1 -0
- package/dist/renderer/core/code-block-dispatch.d.ts +31 -0
- package/dist/renderer/core/code-block-dispatch.js +166 -0
- package/dist/renderer/core/code-block-dispatch.js.map +1 -0
- package/dist/renderer/core/code-blocks.d.ts +12 -0
- package/dist/renderer/core/code-blocks.js +32 -0
- package/dist/renderer/core/code-blocks.js.map +1 -0
- package/dist/renderer/core/embed-tags.d.ts +14 -0
- package/dist/renderer/core/embed-tags.js +154 -0
- package/dist/renderer/core/embed-tags.js.map +1 -0
- package/dist/renderer/core/headings.d.ts +16 -0
- package/dist/renderer/core/headings.js +31 -0
- package/dist/renderer/core/headings.js.map +1 -0
- package/dist/renderer/core/index.d.ts +65 -0
- package/dist/renderer/core/index.js +83 -0
- package/dist/renderer/core/index.js.map +1 -0
- package/dist/renderer/core/mention-resolve.d.ts +39 -0
- package/dist/renderer/core/mention-resolve.js +75 -0
- package/dist/renderer/core/mention-resolve.js.map +1 -0
- package/dist/renderer/core/mentions.d.ts +2 -0
- package/dist/renderer/core/mentions.js +83 -0
- package/dist/renderer/core/mentions.js.map +1 -0
- package/dist/renderer/core/syntax-highlight.d.ts +21 -0
- package/dist/renderer/core/syntax-highlight.js +64 -0
- package/dist/renderer/core/syntax-highlight.js.map +1 -0
- package/dist/renderer/core/url-inline-expand.d.ts +9 -0
- package/dist/renderer/core/url-inline-expand.js +157 -0
- package/dist/renderer/core/url-inline-expand.js.map +1 -0
- package/dist/renderer/core/wikilinks.d.ts +2 -0
- package/dist/renderer/core/wikilinks.js +118 -0
- package/dist/renderer/core/wikilinks.js.map +1 -0
- package/dist/renderer/index.d.ts +67 -0
- package/dist/renderer/index.js +99 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/pipeline.d.ts +134 -0
- package/dist/renderer/pipeline.js +203 -0
- package/dist/renderer/pipeline.js.map +1 -0
- package/dist/renderer/registry.d.ts +83 -0
- package/dist/renderer/registry.js +130 -0
- package/dist/renderer/registry.js.map +1 -0
- package/dist/renderer/serialize.d.ts +27 -0
- package/dist/renderer/serialize.js +46 -0
- package/dist/renderer/serialize.js.map +1 -0
- package/dist/renderer/version.d.ts +30 -0
- package/dist/renderer/version.js +34 -0
- package/dist/renderer/version.js.map +1 -0
- package/dist/routes/admin.d.ts +4 -0
- package/dist/routes/admin.js +17 -0
- package/dist/routes/admin.js.map +1 -0
- package/dist/routes/api/admin.d.ts +4 -0
- package/dist/routes/api/admin.js +37 -0
- package/dist/routes/api/admin.js.map +1 -0
- package/dist/routes/api/attachment.d.ts +4 -0
- package/dist/routes/api/attachment.js +19 -0
- package/dist/routes/api/attachment.js.map +1 -0
- package/dist/routes/api/bookmark.d.ts +4 -0
- package/dist/routes/api/bookmark.js +15 -0
- package/dist/routes/api/bookmark.js.map +1 -0
- package/dist/routes/api/comment.d.ts +4 -0
- package/dist/routes/api/comment.js +14 -0
- package/dist/routes/api/comment.js.map +1 -0
- package/dist/routes/api/index.d.ts +4 -0
- package/dist/routes/api/index.js +36 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/like.d.ts +4 -0
- package/dist/routes/api/like.js +13 -0
- package/dist/routes/api/like.js.map +1 -0
- package/dist/routes/api/notification.d.ts +4 -0
- package/dist/routes/api/notification.js +15 -0
- package/dist/routes/api/notification.js.map +1 -0
- package/dist/routes/api/page.d.ts +4 -0
- package/dist/routes/api/page.js +24 -0
- package/dist/routes/api/page.js.map +1 -0
- package/dist/routes/api/revision.d.ts +4 -0
- package/dist/routes/api/revision.js +14 -0
- package/dist/routes/api/revision.js.map +1 -0
- package/dist/routes/api/share.d.ts +4 -0
- package/dist/routes/api/share.js +16 -0
- package/dist/routes/api/share.js.map +1 -0
- package/dist/routes/api/version.d.ts +4 -0
- package/dist/routes/api/version.js +10 -0
- package/dist/routes/api/version.js.map +1 -0
- package/dist/routes/index.d.ts +4 -0
- package/dist/routes/index.js +71 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/login.d.ts +4 -0
- package/dist/routes/login.js +18 -0
- package/dist/routes/login.js.map +1 -0
- package/dist/routes/me.d.ts +4 -0
- package/dist/routes/me.js +24 -0
- package/dist/routes/me.js.map +1 -0
- package/dist/routes/ts-rest/admin/app.d.ts +4 -0
- package/dist/routes/ts-rest/admin/app.js +67 -0
- package/dist/routes/ts-rest/admin/app.js.map +1 -0
- package/dist/routes/ts-rest/admin/auth.d.ts +4 -0
- package/dist/routes/ts-rest/admin/auth.js +95 -0
- package/dist/routes/ts-rest/admin/auth.js.map +1 -0
- package/dist/routes/ts-rest/admin/index.d.ts +10 -0
- package/dist/routes/ts-rest/admin/index.js +35 -0
- package/dist/routes/ts-rest/admin/index.js.map +1 -0
- package/dist/routes/ts-rest/admin/mail.d.ts +4 -0
- package/dist/routes/ts-rest/admin/mail.js +156 -0
- package/dist/routes/ts-rest/admin/mail.js.map +1 -0
- package/dist/routes/ts-rest/admin/plugins.d.ts +4 -0
- package/dist/routes/ts-rest/admin/plugins.js +317 -0
- package/dist/routes/ts-rest/admin/plugins.js.map +1 -0
- package/dist/routes/ts-rest/admin/search.d.ts +4 -0
- package/dist/routes/ts-rest/admin/search.js +67 -0
- package/dist/routes/ts-rest/admin/search.js.map +1 -0
- package/dist/routes/ts-rest/admin/security.d.ts +4 -0
- package/dist/routes/ts-rest/admin/security.js +114 -0
- package/dist/routes/ts-rest/admin/security.js.map +1 -0
- package/dist/routes/ts-rest/admin/share.d.ts +4 -0
- package/dist/routes/ts-rest/admin/share.js +69 -0
- package/dist/routes/ts-rest/admin/share.js.map +1 -0
- package/dist/routes/ts-rest/admin/storage.d.ts +4 -0
- package/dist/routes/ts-rest/admin/storage.js +59 -0
- package/dist/routes/ts-rest/admin/storage.js.map +1 -0
- package/dist/routes/ts-rest/admin/users.d.ts +4 -0
- package/dist/routes/ts-rest/admin/users.js +215 -0
- package/dist/routes/ts-rest/admin/users.js.map +1 -0
- package/dist/routes/ts-rest/adminCrypto.d.ts +4 -0
- package/dist/routes/ts-rest/adminCrypto.js +111 -0
- package/dist/routes/ts-rest/adminCrypto.js.map +1 -0
- package/dist/routes/ts-rest/app.d.ts +4 -0
- package/dist/routes/ts-rest/app.js +23 -0
- package/dist/routes/ts-rest/app.js.map +1 -0
- package/dist/routes/ts-rest/attachment.d.ts +4 -0
- package/dist/routes/ts-rest/attachment.js +830 -0
- package/dist/routes/ts-rest/attachment.js.map +1 -0
- package/dist/routes/ts-rest/auth.d.ts +4 -0
- package/dist/routes/ts-rest/auth.js +70 -0
- package/dist/routes/ts-rest/auth.js.map +1 -0
- package/dist/routes/ts-rest/autocomplete.d.ts +30 -0
- package/dist/routes/ts-rest/autocomplete.js +189 -0
- package/dist/routes/ts-rest/autocomplete.js.map +1 -0
- package/dist/routes/ts-rest/backlink.d.ts +4 -0
- package/dist/routes/ts-rest/backlink.js +106 -0
- package/dist/routes/ts-rest/backlink.js.map +1 -0
- package/dist/routes/ts-rest/bookmark.d.ts +4 -0
- package/dist/routes/ts-rest/bookmark.js +189 -0
- package/dist/routes/ts-rest/bookmark.js.map +1 -0
- package/dist/routes/ts-rest/comment.d.ts +4 -0
- package/dist/routes/ts-rest/comment.js +217 -0
- package/dist/routes/ts-rest/comment.js.map +1 -0
- package/dist/routes/ts-rest/draft.d.ts +22 -0
- package/dist/routes/ts-rest/draft.js +200 -0
- package/dist/routes/ts-rest/draft.js.map +1 -0
- package/dist/routes/ts-rest/index.d.ts +4 -0
- package/dist/routes/ts-rest/index.js +103 -0
- package/dist/routes/ts-rest/index.js.map +1 -0
- package/dist/routes/ts-rest/installer.d.ts +4 -0
- package/dist/routes/ts-rest/installer.js +77 -0
- package/dist/routes/ts-rest/installer.js.map +1 -0
- package/dist/routes/ts-rest/me.d.ts +4 -0
- package/dist/routes/ts-rest/me.js +410 -0
- package/dist/routes/ts-rest/me.js.map +1 -0
- package/dist/routes/ts-rest/notification.d.ts +4 -0
- package/dist/routes/ts-rest/notification.js +241 -0
- package/dist/routes/ts-rest/notification.js.map +1 -0
- package/dist/routes/ts-rest/page-collab.d.ts +29 -0
- package/dist/routes/ts-rest/page-collab.js +90 -0
- package/dist/routes/ts-rest/page-collab.js.map +1 -0
- package/dist/routes/ts-rest/page-preview.d.ts +26 -0
- package/dist/routes/ts-rest/page-preview.js +80 -0
- package/dist/routes/ts-rest/page-preview.js.map +1 -0
- package/dist/routes/ts-rest/page.d.ts +4 -0
- package/dist/routes/ts-rest/page.js +676 -0
- package/dist/routes/ts-rest/page.js.map +1 -0
- package/dist/routes/ts-rest/presence.d.ts +30 -0
- package/dist/routes/ts-rest/presence.js +155 -0
- package/dist/routes/ts-rest/presence.js.map +1 -0
- package/dist/routes/ts-rest/revision.d.ts +4 -0
- package/dist/routes/ts-rest/revision.js +240 -0
- package/dist/routes/ts-rest/revision.js.map +1 -0
- package/dist/routes/ts-rest/search.d.ts +4 -0
- package/dist/routes/ts-rest/search.js +121 -0
- package/dist/routes/ts-rest/search.js.map +1 -0
- package/dist/routes/ts-rest/tokenAuth.d.ts +4 -0
- package/dist/routes/ts-rest/tokenAuth.js +94 -0
- package/dist/routes/ts-rest/tokenAuth.js.map +1 -0
- package/dist/routes/ts-rest/user.d.ts +4 -0
- package/dist/routes/ts-rest/user.js +307 -0
- package/dist/routes/ts-rest/user.js.map +1 -0
- package/dist/service/config.d.ts +50 -0
- package/dist/service/config.js +202 -0
- package/dist/service/config.js.map +1 -0
- package/dist/service/lru.d.ts +11 -0
- package/dist/service/lru.js +47 -0
- package/dist/service/lru.js.map +1 -0
- package/dist/service/mail.d.ts +107 -0
- package/dist/service/mail.js +220 -0
- package/dist/service/mail.js.map +1 -0
- package/dist/service/notification.d.ts +9 -0
- package/dist/service/notification.js +19 -0
- package/dist/service/notification.js.map +1 -0
- package/dist/service/presence.d.ts +219 -0
- package/dist/service/presence.js +602 -0
- package/dist/service/presence.js.map +1 -0
- package/dist/types/error.d.ts +13 -0
- package/dist/types/error.js +13 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/express.d.ts +34 -0
- package/dist/types/express.js +50 -0
- package/dist/types/express.js.map +1 -0
- package/dist/types/mongoose-extensions.d.ts +8 -0
- package/dist/types/mongoose-extensions.js +24 -0
- package/dist/types/mongoose-extensions.js.map +1 -0
- package/dist/util/accessTokenParser.d.ts +1 -0
- package/dist/util/accessTokenParser.js +34 -0
- package/dist/util/accessTokenParser.js.map +1 -0
- package/dist/util/activityDefine.d.ts +15 -0
- package/dist/util/activityDefine.js +52 -0
- package/dist/util/activityDefine.js.map +1 -0
- package/dist/util/admin-config.d.ts +57 -0
- package/dist/util/admin-config.js +99 -0
- package/dist/util/admin-config.js.map +1 -0
- package/dist/util/admin-pager.d.ts +24 -0
- package/dist/util/admin-pager.js +73 -0
- package/dist/util/admin-pager.js.map +1 -0
- package/dist/util/apiPaginate.d.ts +11 -0
- package/dist/util/apiPaginate.js +33 -0
- package/dist/util/apiPaginate.js.map +1 -0
- package/dist/util/apiResponse.d.ts +9 -0
- package/dist/util/apiResponse.js +23 -0
- package/dist/util/apiResponse.js.map +1 -0
- package/dist/util/auth.d.ts +11 -0
- package/dist/util/auth.js +48 -0
- package/dist/util/auth.js.map +1 -0
- package/dist/util/auto-watch.d.ts +35 -0
- package/dist/util/auto-watch.js +24 -0
- package/dist/util/auto-watch.js.map +1 -0
- package/dist/util/autocomplete-match.d.ts +44 -0
- package/dist/util/autocomplete-match.js +80 -0
- package/dist/util/autocomplete-match.js.map +1 -0
- package/dist/util/aws-config-migration.d.ts +11 -0
- package/dist/util/aws-config-migration.js +68 -0
- package/dist/util/aws-config-migration.js.map +1 -0
- package/dist/util/boot-reporter.d.ts +130 -0
- package/dist/util/boot-reporter.js +242 -0
- package/dist/util/boot-reporter.js.map +1 -0
- package/dist/util/collab-cap.d.ts +39 -0
- package/dist/util/collab-cap.js +90 -0
- package/dist/util/collab-cap.js.map +1 -0
- package/dist/util/crypto.d.ts +39 -0
- package/dist/util/crypto.js +105 -0
- package/dist/util/crypto.js.map +1 -0
- package/dist/util/dedup-users.d.ts +96 -0
- package/dist/util/dedup-users.js +149 -0
- package/dist/util/dedup-users.js.map +1 -0
- package/dist/util/editor-cap-counter.d.ts +90 -0
- package/dist/util/editor-cap-counter.js +175 -0
- package/dist/util/editor-cap-counter.js.map +1 -0
- package/dist/util/fileUploader.d.ts +55 -0
- package/dist/util/fileUploader.js +70 -0
- package/dist/util/fileUploader.js.map +1 -0
- package/dist/util/formUtil.d.ts +2 -0
- package/dist/util/formUtil.js +15 -0
- package/dist/util/formUtil.js.map +1 -0
- package/dist/util/githubAuth.d.ts +2 -0
- package/dist/util/githubAuth.js +82 -0
- package/dist/util/githubAuth.js.map +1 -0
- package/dist/util/googleAuth.d.ts +2 -0
- package/dist/util/googleAuth.js +85 -0
- package/dist/util/googleAuth.js.map +1 -0
- package/dist/util/jwt.d.ts +50 -0
- package/dist/util/jwt.js +127 -0
- package/dist/util/jwt.js.map +1 -0
- package/dist/util/linkDetector.d.ts +3 -0
- package/dist/util/linkDetector.js +91 -0
- package/dist/util/linkDetector.js.map +1 -0
- package/dist/util/mail-token.d.ts +24 -0
- package/dist/util/mail-token.js +117 -0
- package/dist/util/mail-token.js.map +1 -0
- package/dist/util/mailer.d.ts +7 -0
- package/dist/util/mailer.js +98 -0
- package/dist/util/mailer.js.map +1 -0
- package/dist/util/map-duplicate-key-error.d.ts +26 -0
- package/dist/util/map-duplicate-key-error.js +41 -0
- package/dist/util/map-duplicate-key-error.js.map +1 -0
- package/dist/util/mongoose-paginate.d.ts +10 -0
- package/dist/util/mongoose-paginate.js +23 -0
- package/dist/util/mongoose-paginate.js.map +1 -0
- package/dist/util/notifications-token.d.ts +35 -0
- package/dist/util/notifications-token.js +140 -0
- package/dist/util/notifications-token.js.map +1 -0
- package/dist/util/oauth-client-seed.d.ts +2 -0
- package/dist/util/oauth-client-seed.js +48 -0
- package/dist/util/oauth-client-seed.js.map +1 -0
- package/dist/util/oauth-redirect-uri.d.ts +2 -0
- package/dist/util/oauth-redirect-uri.js +55 -0
- package/dist/util/oauth-redirect-uri.js.map +1 -0
- package/dist/util/page-response.d.ts +113 -0
- package/dist/util/page-response.js +154 -0
- package/dist/util/page-response.js.map +1 -0
- package/dist/util/page-search-index.d.ts +19 -0
- package/dist/util/page-search-index.js +91 -0
- package/dist/util/page-search-index.js.map +1 -0
- package/dist/util/page-status-migration.d.ts +23 -0
- package/dist/util/page-status-migration.js +48 -0
- package/dist/util/page-status-migration.js.map +1 -0
- package/dist/util/path.d.ts +2 -0
- package/dist/util/path.js +12 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/pkce.d.ts +13 -0
- package/dist/util/pkce.js +30 -0
- package/dist/util/pkce.js.map +1 -0
- package/dist/util/presence-token.d.ts +21 -0
- package/dist/util/presence-token.js +120 -0
- package/dist/util/presence-token.js.map +1 -0
- package/dist/util/rate-limit.d.ts +67 -0
- package/dist/util/rate-limit.js +87 -0
- package/dist/util/rate-limit.js.map +1 -0
- package/dist/util/rebuild-backlink.d.ts +25 -0
- package/dist/util/rebuild-backlink.js +7 -0
- package/dist/util/rebuild-backlink.js.map +1 -0
- package/dist/util/rebuild-renderer.d.ts +31 -0
- package/dist/util/rebuild-renderer.js +7 -0
- package/dist/util/rebuild-renderer.js.map +1 -0
- package/dist/util/redis-opts.d.ts +17 -0
- package/dist/util/redis-opts.js +40 -0
- package/dist/util/redis-opts.js.map +1 -0
- package/dist/util/regex.d.ts +2 -0
- package/dist/util/regex.js +8 -0
- package/dist/util/regex.js.map +1 -0
- package/dist/util/search-rebuild.d.ts +18 -0
- package/dist/util/search-rebuild.js +28 -0
- package/dist/util/search-rebuild.js.map +1 -0
- package/dist/util/ssr.d.ts +3 -0
- package/dist/util/ssr.js +9 -0
- package/dist/util/ssr.js.map +1 -0
- package/dist/util/storage-copy.d.ts +40 -0
- package/dist/util/storage-copy.js +123 -0
- package/dist/util/storage-copy.js.map +1 -0
- package/dist/util/ts-rest-helpers.d.ts +110 -0
- package/dist/util/ts-rest-helpers.js +110 -0
- package/dist/util/ts-rest-helpers.js.map +1 -0
- package/dist/util/url.d.ts +1 -0
- package/dist/util/url.js +11 -0
- package/dist/util/url.js.map +1 -0
- package/dist/util/user-code.d.ts +10 -0
- package/dist/util/user-code.js +55 -0
- package/dist/util/user-code.js.map +1 -0
- package/dist/util/view.d.ts +10 -0
- package/dist/util/view.js +99 -0
- package/dist/util/view.js.map +1 -0
- package/dist/util/watcher-backfill.d.ts +30 -0
- package/dist/util/watcher-backfill.js +43 -0
- package/dist/util/watcher-backfill.js.map +1 -0
- package/dist/util/ws-token.d.ts +24 -0
- package/dist/util/ws-token.js +134 -0
- package/dist/util/ws-token.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,676 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = require("@ts-rest/express");
|
|
7
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
8
|
+
const express_2 = require("express");
|
|
9
|
+
const page_1 = require("../../models/page");
|
|
10
|
+
const ts_rest_helpers_1 = require("../../util/ts-rest-helpers");
|
|
11
|
+
const page_response_1 = require("../../util/page-response");
|
|
12
|
+
const debug_1 = __importDefault(require("debug"));
|
|
13
|
+
const debug = (0, debug_1.default)('crowi:routes:ts-rest:page');
|
|
14
|
+
const VALID_GRANTS = Object.values(api_contract_1.PageGrantEnum);
|
|
15
|
+
const invalidGrantResponse = () => ({
|
|
16
|
+
status: 400,
|
|
17
|
+
body: {
|
|
18
|
+
error: {
|
|
19
|
+
code: 'INVALID_GRANT',
|
|
20
|
+
message: 'grant must be one of 1 (public), 2 (restricted), 3 (specified), 4 (owner)',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
exports.default = (crowi, _app) => {
|
|
25
|
+
const s = (0, express_1.initServer)();
|
|
26
|
+
const router = (0, express_2.Router)();
|
|
27
|
+
const Page = crowi.model('Page');
|
|
28
|
+
const User = crowi.model('User');
|
|
29
|
+
const Watcher = crowi.model('Watcher');
|
|
30
|
+
// seenUsersCount stays at the raw ID-array length (matching legacy
|
|
31
|
+
// populatePageData) so inactive users dropped by findUsersByIds' status
|
|
32
|
+
// filter do not deflate the count. `limit` only caps the returned
|
|
33
|
+
// `seenUsers` list; the count always reflects the full set.
|
|
34
|
+
const buildSeenUsersResponse = async (seenUserIds, limit) => {
|
|
35
|
+
const ids = seenUserIds.filter((id) => id != null);
|
|
36
|
+
const seenUsersCount = ids.length;
|
|
37
|
+
if (ids.length === 0) {
|
|
38
|
+
return { seenUsers: [], seenUsersCount };
|
|
39
|
+
}
|
|
40
|
+
const idsToFetch = limit !== undefined ? ids.slice(0, limit) : ids;
|
|
41
|
+
const populated = (await User.findUsersByIds(idsToFetch));
|
|
42
|
+
return {
|
|
43
|
+
seenUsers: populated.map(ts_rest_helpers_1.toUserPublic),
|
|
44
|
+
seenUsersCount,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const pageRouter = s.router(api_contract_1.apiContract.page, {
|
|
48
|
+
/**
|
|
49
|
+
* GET /api/v2/pages
|
|
50
|
+
* Get page data by path or page_id
|
|
51
|
+
* - Supports optional revision_id for historical revisions
|
|
52
|
+
* - Requires authentication (loginRequired middleware applied at router level)
|
|
53
|
+
* - Checks page permissions (grant)
|
|
54
|
+
*/
|
|
55
|
+
getPage: async ({ query, req }) => {
|
|
56
|
+
const user = req.user;
|
|
57
|
+
const { path, page_id, revision_id } = query;
|
|
58
|
+
debug('getPage called with:', { path, page_id, revision_id, userId: user._id });
|
|
59
|
+
// Validate that at least one of path or page_id is provided
|
|
60
|
+
if (!path && !page_id) {
|
|
61
|
+
return {
|
|
62
|
+
status: 404,
|
|
63
|
+
body: {
|
|
64
|
+
error: {
|
|
65
|
+
code: 'PAGE_NOT_FOUND',
|
|
66
|
+
message: 'Page not found',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
let page = null;
|
|
73
|
+
// Priority: page_id parameter takes precedence over path
|
|
74
|
+
// This matches the original controller logic (lines 651-657)
|
|
75
|
+
if (page_id) {
|
|
76
|
+
debug('Finding page by page_id:', page_id);
|
|
77
|
+
page = await Page.findPageByIdAndGrantedUser(page_id, user);
|
|
78
|
+
}
|
|
79
|
+
else if (path) {
|
|
80
|
+
debug('Finding page by path:', path);
|
|
81
|
+
page = await Page.findPage(path, user, revision_id || null);
|
|
82
|
+
}
|
|
83
|
+
// Ensure page was found
|
|
84
|
+
if (!page) {
|
|
85
|
+
return {
|
|
86
|
+
status: 404,
|
|
87
|
+
body: {
|
|
88
|
+
error: {
|
|
89
|
+
code: 'PAGE_NOT_FOUND',
|
|
90
|
+
message: 'Page not found',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Check if page has redirect
|
|
96
|
+
if (page.redirectTo) {
|
|
97
|
+
debug('Page has redirect to:', page.redirectTo);
|
|
98
|
+
// For now, return the page with redirectTo field
|
|
99
|
+
// Client can handle the redirect
|
|
100
|
+
// TODO: Consider if we should follow the redirect automatically
|
|
101
|
+
}
|
|
102
|
+
const pageResponse = (0, page_response_1.pageToResponse)(page, { withMeta: true, withRenderedAst: true });
|
|
103
|
+
// On-the-fly fallback for legacy revisions: one pipeline run
|
|
104
|
+
// produces both meta + renderedAst, so use the combined helper
|
|
105
|
+
// to avoid running parse+transform+shiki twice. Stored values
|
|
106
|
+
// win on merge (anchor ids match page-content's stamper).
|
|
107
|
+
if (pageResponse.revision && (0, page_response_1.isPopulatedRevision)(page.revision)) {
|
|
108
|
+
const { meta, renderedAst } = await (0, page_response_1.computeRevisionRenderArtifactsAsync)(crowi, page.revision.meta, page.revision.renderedAst, page.revision.body, page.revision.rendererVersion, page._id?.toString());
|
|
109
|
+
pageResponse.revision.meta = meta;
|
|
110
|
+
pageResponse.revision.renderedAst = renderedAst;
|
|
111
|
+
}
|
|
112
|
+
// Fire-and-forget recently-viewed touch. Hiccups on the Redis
|
|
113
|
+
// side mustn't break the page read.
|
|
114
|
+
crowi.lru.add(user._id.toString(), page._id.toString())?.catch?.((err) => {
|
|
115
|
+
debug('lru.add failed (non-fatal):', err);
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
status: 200,
|
|
119
|
+
body: {
|
|
120
|
+
page: pageResponse,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
const error = err;
|
|
126
|
+
debug('Error fetching page:', error.message);
|
|
127
|
+
// Handle specific error types
|
|
128
|
+
if (error.message === 'Page not found' || error.name === 'Crowi:Page:NotFound') {
|
|
129
|
+
return {
|
|
130
|
+
status: 404,
|
|
131
|
+
body: {
|
|
132
|
+
error: {
|
|
133
|
+
code: 'PAGE_NOT_FOUND',
|
|
134
|
+
message: 'Page not found',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (error.message === 'Page is not granted for the user') {
|
|
140
|
+
return {
|
|
141
|
+
status: 403,
|
|
142
|
+
body: {
|
|
143
|
+
error: {
|
|
144
|
+
code: 'PAGE_NOT_GRANTED',
|
|
145
|
+
message: 'Page is not granted for the user',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Generic error fallback
|
|
151
|
+
debug('Unexpected error:', error);
|
|
152
|
+
return {
|
|
153
|
+
status: 404,
|
|
154
|
+
body: {
|
|
155
|
+
error: {
|
|
156
|
+
code: 'PAGE_NOT_FOUND',
|
|
157
|
+
message: 'Page not found',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* GET /api/v2/pages/list
|
|
165
|
+
* List pages by path or user
|
|
166
|
+
* - Supports pagination with limit and offset
|
|
167
|
+
* - Returns pages with populated creator and lastUpdateUser
|
|
168
|
+
*/
|
|
169
|
+
listPages: async ({ query, req }) => {
|
|
170
|
+
const user = req.user;
|
|
171
|
+
const { path, user: userParam, limit = 50, offset = 0, include_deleted = false } = query;
|
|
172
|
+
// Force-enable include_deleted for /trash and /trash/<sub> requests so the
|
|
173
|
+
// legacy deletedPageListShow semantics are preserved even when the client
|
|
174
|
+
// omits the query flag (matches old controllers/page.ts behavior).
|
|
175
|
+
const isTrashPath = !!path && (path === '/trash' || path.startsWith('/trash/'));
|
|
176
|
+
const includeDeletedPage = include_deleted || isTrashPath;
|
|
177
|
+
debug('listPages called with:', { path, user: userParam, limit, offset, includeDeletedPage, userId: user._id });
|
|
178
|
+
try {
|
|
179
|
+
let pages = [];
|
|
180
|
+
let portalPage = null;
|
|
181
|
+
if (userParam) {
|
|
182
|
+
// List pages by creator
|
|
183
|
+
debug('Finding pages by creator:', userParam);
|
|
184
|
+
const targetUser = await crowi.model('User').findById(userParam);
|
|
185
|
+
if (!targetUser) {
|
|
186
|
+
return {
|
|
187
|
+
status: 200,
|
|
188
|
+
body: {
|
|
189
|
+
pages: [],
|
|
190
|
+
pager: {
|
|
191
|
+
prev: null,
|
|
192
|
+
next: null,
|
|
193
|
+
offset: 0,
|
|
194
|
+
},
|
|
195
|
+
portalPage: null,
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// findListByCreator doesn't populate creator/lastUpdateUser, so we need to do it manually
|
|
200
|
+
const rawPages = await Page.findListByCreator(targetUser, { limit, offset }, user);
|
|
201
|
+
pages = (await Page.populate(rawPages, [{ path: 'creator' }, { path: 'lastUpdateUser' }]));
|
|
202
|
+
}
|
|
203
|
+
else if (path && path !== '/') {
|
|
204
|
+
// List pages by path. /trash subtrees skip findPortalPage to mirror the
|
|
205
|
+
// legacy deletedPageListShow which always rendered with page=null.
|
|
206
|
+
debug('Finding pages by path:', path);
|
|
207
|
+
debug('Query params:', { limit, offset, path, userParam, includeDeletedPage });
|
|
208
|
+
const portalPagePromise = isTrashPath ? Promise.resolve(null) : Page.findPortalPage(path, user);
|
|
209
|
+
const listPromise = Page.findListByStartWith(path, user, { limit, offset, includeDeletedPage });
|
|
210
|
+
const [rawPortalPage, rawPages] = await Promise.all([portalPagePromise, listPromise]);
|
|
211
|
+
// findListByStartWith doesn't populate creator/lastUpdateUser, so we need to do it manually
|
|
212
|
+
[portalPage, pages] = (await Promise.all([
|
|
213
|
+
rawPortalPage ? Page.populate(rawPortalPage, [{ path: 'creator' }, { path: 'lastUpdateUser' }]) : null,
|
|
214
|
+
Page.populate(rawPages, [{ path: 'creator' }, { path: 'lastUpdateUser' }]),
|
|
215
|
+
]));
|
|
216
|
+
debug('Found pages:', pages.length);
|
|
217
|
+
debug('Found portal page:', !!portalPage);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// List all pages the user can access (including path='/')
|
|
221
|
+
debug('Finding all accessible pages', { path });
|
|
222
|
+
const conditions = {
|
|
223
|
+
redirectTo: null,
|
|
224
|
+
$or: (0, page_1.visiblePageStatusOr)(user._id),
|
|
225
|
+
grant: { $in: [1, 2] }, // PUBLIC or RESTRICTED
|
|
226
|
+
};
|
|
227
|
+
// If path='/', also get portal page
|
|
228
|
+
if (path === '/') {
|
|
229
|
+
[portalPage, pages] = await Promise.all([
|
|
230
|
+
Page.findPortalPage(path, user),
|
|
231
|
+
Page.find(conditions)
|
|
232
|
+
.sort({ updatedAt: -1 })
|
|
233
|
+
.skip(offset)
|
|
234
|
+
.limit(limit)
|
|
235
|
+
.populate({ path: 'revision', populate: { path: 'author' } })
|
|
236
|
+
.populate('creator')
|
|
237
|
+
.populate('lastUpdateUser')
|
|
238
|
+
.exec(),
|
|
239
|
+
]);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
pages = await Page.find(conditions)
|
|
243
|
+
.sort({ updatedAt: -1 })
|
|
244
|
+
.skip(offset)
|
|
245
|
+
.limit(limit)
|
|
246
|
+
.populate({ path: 'revision', populate: { path: 'author' } })
|
|
247
|
+
.populate('creator')
|
|
248
|
+
.populate('lastUpdateUser')
|
|
249
|
+
.exec();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Convert pages to response format
|
|
253
|
+
const pageResponses = pages.map((page) => (0, page_response_1.pageToResponse)(page));
|
|
254
|
+
const portalPageResponse = portalPage ? (0, page_response_1.pageToResponse)(portalPage) : null;
|
|
255
|
+
// Calculate pagination
|
|
256
|
+
const prev = offset > 0 ? Math.max(0, offset - limit) : null;
|
|
257
|
+
const next = pages.length === limit ? offset + limit : null;
|
|
258
|
+
return {
|
|
259
|
+
status: 200,
|
|
260
|
+
body: {
|
|
261
|
+
pages: pageResponses,
|
|
262
|
+
pager: {
|
|
263
|
+
prev,
|
|
264
|
+
next,
|
|
265
|
+
offset,
|
|
266
|
+
},
|
|
267
|
+
portalPage: portalPageResponse,
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
const error = err;
|
|
273
|
+
debug('Error listing pages:', error.message);
|
|
274
|
+
// Return empty list on error
|
|
275
|
+
return {
|
|
276
|
+
status: 200,
|
|
277
|
+
body: {
|
|
278
|
+
pages: [],
|
|
279
|
+
pager: {
|
|
280
|
+
prev: null,
|
|
281
|
+
next: null,
|
|
282
|
+
offset: 0,
|
|
283
|
+
},
|
|
284
|
+
portalPage: null,
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
createPage: async ({ body: requestBody, req }) => {
|
|
290
|
+
const user = req.user;
|
|
291
|
+
const { path, body, grant } = requestBody;
|
|
292
|
+
debug('createPage called with:', { path, grant, userId: user._id });
|
|
293
|
+
if (grant !== undefined && !VALID_GRANTS.includes(grant)) {
|
|
294
|
+
return invalidGrantResponse();
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
const existing = await Page.findPage(path, user, null, /* ignoreNotFound */ true);
|
|
298
|
+
if (existing !== null) {
|
|
299
|
+
return {
|
|
300
|
+
status: 400,
|
|
301
|
+
body: { error: { code: 'PAGE_EXISTS', message: 'Page exists' } },
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
const createOptions = grant !== undefined ? { grant } : {};
|
|
305
|
+
const created = (await Page.createPage(path, body, user, createOptions));
|
|
306
|
+
if (!created) {
|
|
307
|
+
throw new Error('Failed to create page.');
|
|
308
|
+
}
|
|
309
|
+
const populated = await Page.populatePageData(created, null);
|
|
310
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
const error = err;
|
|
314
|
+
debug('Error creating page:', error.message);
|
|
315
|
+
if (error.message === 'Cannot create non existent user page.') {
|
|
316
|
+
return {
|
|
317
|
+
status: 400,
|
|
318
|
+
body: { error: { code: 'NON_EXISTENT_USER_PAGE', message: error.message } },
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
// Both 'existed path' and 'not granted' map to PAGE_EXISTS: the latter
|
|
322
|
+
// can occur as a race when a stricter-grant page is created between
|
|
323
|
+
// findPage and createPage, and we should not leak that distinction.
|
|
324
|
+
if (error.message === 'Cannot create new page to existed path' || error.message === 'Page is not granted for the user') {
|
|
325
|
+
return {
|
|
326
|
+
status: 400,
|
|
327
|
+
body: { error: { code: 'PAGE_EXISTS', message: 'Page exists' } },
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
status: 400,
|
|
332
|
+
body: { error: { code: 'PAGE_CREATE_FAILED', message: error.message || 'Failed to create page' } },
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
updatePage: async ({ body: requestBody, req }) => {
|
|
337
|
+
const user = req.user;
|
|
338
|
+
const { page_id, body, revision_id, grant } = requestBody;
|
|
339
|
+
debug('updatePage called with:', { page_id, revision_id, grant, userId: user._id });
|
|
340
|
+
if (grant !== undefined && !VALID_GRANTS.includes(grant)) {
|
|
341
|
+
return invalidGrantResponse();
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
const pageData = (await Page.findPageByIdAndGrantedUser(page_id, user));
|
|
345
|
+
if (!pageData) {
|
|
346
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
347
|
+
}
|
|
348
|
+
if (revision_id && !pageData.isUpdatable(revision_id)) {
|
|
349
|
+
return {
|
|
350
|
+
status: 409,
|
|
351
|
+
body: { error: { code: 'PAGE_REVISION_ERROR', message: 'Revision error.' } },
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
const grantOption = { grant: grant ?? pageData.grant };
|
|
355
|
+
const updated = (await Page.updatePage(pageData, body, user, grantOption));
|
|
356
|
+
const populated = await Page.populatePageData(updated, null);
|
|
357
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
358
|
+
}
|
|
359
|
+
catch (err) {
|
|
360
|
+
const error = err;
|
|
361
|
+
debug('Error updating page:', error.message);
|
|
362
|
+
if (error.message === 'Page not found' || error.message === 'Page is not granted for the user') {
|
|
363
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
364
|
+
}
|
|
365
|
+
return {
|
|
366
|
+
status: 400,
|
|
367
|
+
body: { error: { code: 'PAGE_UPDATE_FAILED', message: error.message || 'Failed to update page' } },
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
/**
|
|
372
|
+
* PUT /api/v2/pages/grant
|
|
373
|
+
*
|
|
374
|
+
* Grant-only update. Mutates `page.grant` / `grantedUsers` via
|
|
375
|
+
* Page.updateGrant — no revision is pushed, so changing a page's
|
|
376
|
+
* visibility never lands a no-op entry in the page history.
|
|
377
|
+
* Authorization mirrors updatePage (findPageByIdAndGrantedUser).
|
|
378
|
+
*/
|
|
379
|
+
setPageGrant: async ({ body: requestBody, req }) => {
|
|
380
|
+
const user = req.user;
|
|
381
|
+
const { page_id, grant } = requestBody;
|
|
382
|
+
debug('setPageGrant called with:', { page_id, grant, userId: user._id });
|
|
383
|
+
if (!VALID_GRANTS.includes(grant)) {
|
|
384
|
+
return invalidGrantResponse();
|
|
385
|
+
}
|
|
386
|
+
try {
|
|
387
|
+
const pageData = (await Page.findPageByIdAndGrantedUser(page_id, user));
|
|
388
|
+
if (!pageData) {
|
|
389
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
390
|
+
}
|
|
391
|
+
const updated = (await Page.updateGrant(pageData, grant, user));
|
|
392
|
+
const populated = await Page.populatePageData(updated, null);
|
|
393
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
394
|
+
}
|
|
395
|
+
catch (err) {
|
|
396
|
+
const error = err;
|
|
397
|
+
debug('Error updating page grant:', error.message);
|
|
398
|
+
if (error.message === 'Page not found' || error.message === 'Page is not granted for the user') {
|
|
399
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
status: 400,
|
|
403
|
+
body: { error: { code: 'PAGE_GRANT_UPDATE_FAILED', message: error.message || 'Failed to update page grant' } },
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
// Idempotent: Page.seen uses addToSet so re-posting from the same user
|
|
408
|
+
// does not inflate seenUsers / seenUsersCount.
|
|
409
|
+
seenPage: async ({ body: requestBody, req }) => {
|
|
410
|
+
const user = req.user;
|
|
411
|
+
const { page_id } = requestBody;
|
|
412
|
+
debug('seenPage called with:', { page_id, userId: user._id });
|
|
413
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
414
|
+
if ('error' in loaded)
|
|
415
|
+
return loaded.error;
|
|
416
|
+
const updated = (await loaded.page.seen(user));
|
|
417
|
+
return { status: 200, body: await buildSeenUsersResponse(updated.seenUsers) };
|
|
418
|
+
},
|
|
419
|
+
getSeenUsers: async ({ query, req }) => {
|
|
420
|
+
const user = req.user;
|
|
421
|
+
const { page_id, limit } = query;
|
|
422
|
+
debug('getSeenUsers called with:', { page_id, limit, userId: user._id });
|
|
423
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
424
|
+
if ('error' in loaded)
|
|
425
|
+
return loaded.error;
|
|
426
|
+
return { status: 200, body: await buildSeenUsersResponse(loaded.page.seenUsers, limit) };
|
|
427
|
+
},
|
|
428
|
+
/**
|
|
429
|
+
* POST /api/v2/pages/like
|
|
430
|
+
* Add the current user to the page's `liker` list.
|
|
431
|
+
* - Idempotent: liking an already-liked page returns the page unchanged.
|
|
432
|
+
* - Returns 404 (not 200 with no-op) when the page does not exist or
|
|
433
|
+
* the caller has no grant, matching the rest of the page contract
|
|
434
|
+
* (cf. updatePage / renamePage). The legacy /_api/likes.add returned
|
|
435
|
+
* ApiResponse.success() on errors, but that path was effectively
|
|
436
|
+
* unreachable in the legacy UI; see openQuestions in the task plan.
|
|
437
|
+
*/
|
|
438
|
+
likePage: async ({ body: requestBody, req }) => {
|
|
439
|
+
const user = req.user;
|
|
440
|
+
const { page_id } = requestBody;
|
|
441
|
+
debug('likePage called with:', { page_id, userId: user._id });
|
|
442
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
443
|
+
if ('error' in loaded)
|
|
444
|
+
return loaded.error;
|
|
445
|
+
// pageData.like is a no-op when the user already liked the page. Always
|
|
446
|
+
// re-populate so the response shape stays stable either way.
|
|
447
|
+
await loaded.page.like(user);
|
|
448
|
+
const populated = await Page.populatePageData(loaded.page, null);
|
|
449
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
450
|
+
},
|
|
451
|
+
/**
|
|
452
|
+
* POST /api/v2/pages/unlike
|
|
453
|
+
* Remove the current user from the page's `liker` list.
|
|
454
|
+
* - Idempotent: unliking a not-liked page returns the page unchanged.
|
|
455
|
+
* - Returns 404 for not-found / not-granted, mirroring likePage.
|
|
456
|
+
*/
|
|
457
|
+
unlikePage: async ({ body: requestBody, req }) => {
|
|
458
|
+
const user = req.user;
|
|
459
|
+
const { page_id } = requestBody;
|
|
460
|
+
debug('unlikePage called with:', { page_id, userId: user._id });
|
|
461
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
462
|
+
if ('error' in loaded)
|
|
463
|
+
return loaded.error;
|
|
464
|
+
// unlike is a no-op when the user had not liked the page. Always
|
|
465
|
+
// re-populate so the response shape stays stable either way.
|
|
466
|
+
await loaded.page.unlike(user);
|
|
467
|
+
const populated = await Page.populatePageData(loaded.page, null);
|
|
468
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
469
|
+
},
|
|
470
|
+
/**
|
|
471
|
+
* Resolution order matches legacy controllers/page.ts api.watchStatus:
|
|
472
|
+
* 1. If a Watcher record exists for (user, page), use watcher.isWatching().
|
|
473
|
+
* 2. Otherwise derive a default from page.getNotificationTargetUsers()
|
|
474
|
+
* (creator + comment authors + revision authors). The user is
|
|
475
|
+
* "watching by default" iff their id appears in that list.
|
|
476
|
+
*/
|
|
477
|
+
getWatchStatus: async ({ query, req }) => {
|
|
478
|
+
const user = req.user;
|
|
479
|
+
const { page_id } = query;
|
|
480
|
+
debug('getWatchStatus called with:', { page_id, userId: user._id });
|
|
481
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
482
|
+
if ('error' in loaded)
|
|
483
|
+
return loaded.error;
|
|
484
|
+
const watcher = await Watcher.findByUserIdAndTargetId(user._id, loaded.page._id);
|
|
485
|
+
if (watcher) {
|
|
486
|
+
return { status: 200, body: { watching: watcher.isWatching() } };
|
|
487
|
+
}
|
|
488
|
+
// Default: include user when they appear in the page's notification
|
|
489
|
+
// target users (creator + comment authors + revision authors).
|
|
490
|
+
const targetUsers = await loaded.page.getNotificationTargetUsers();
|
|
491
|
+
const userIdStr = user._id.toString();
|
|
492
|
+
const watching = targetUsers.some((id) => id.toString() === userIdStr);
|
|
493
|
+
return { status: 200, body: { watching } };
|
|
494
|
+
},
|
|
495
|
+
/**
|
|
496
|
+
* - watching=true -> status=WATCH
|
|
497
|
+
* - watching=false -> status=IGNORE
|
|
498
|
+
*
|
|
499
|
+
* This 2-state API cannot remove the Watcher (i.e. revert to the
|
|
500
|
+
* default-derived behaviour). If a 3-state UI is needed later, the
|
|
501
|
+
* contract will be extended.
|
|
502
|
+
*/
|
|
503
|
+
setWatchStatus: async ({ body: requestBody, req }) => {
|
|
504
|
+
const user = req.user;
|
|
505
|
+
const { page_id, watching } = requestBody;
|
|
506
|
+
debug('setWatchStatus called with:', { page_id, watching, userId: user._id });
|
|
507
|
+
const loaded = await (0, ts_rest_helpers_1.loadGrantedPage)(Page, page_id, user);
|
|
508
|
+
if ('error' in loaded)
|
|
509
|
+
return loaded.error;
|
|
510
|
+
const status = watching ? Watcher.STATUS_WATCH : Watcher.STATUS_IGNORE;
|
|
511
|
+
await Watcher.watchByPageId(user._id, loaded.page._id, status);
|
|
512
|
+
return { status: 200, body: { watching } };
|
|
513
|
+
},
|
|
514
|
+
deletePage: async ({ body: requestBody, req }) => {
|
|
515
|
+
const user = req.user;
|
|
516
|
+
const { page_id, revision_id, completely } = requestBody;
|
|
517
|
+
debug('deletePage called with:', { page_id, revision_id, completely, userId: user._id });
|
|
518
|
+
try {
|
|
519
|
+
const pageData = (await Page.findPageByIdAndGrantedUser(page_id, user));
|
|
520
|
+
if (!pageData) {
|
|
521
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
522
|
+
}
|
|
523
|
+
// Hard delete bypasses revision check (matches old controllers/page.ts api.remove).
|
|
524
|
+
if (completely === true) {
|
|
525
|
+
await Page.completelyDeletePage(pageData, user);
|
|
526
|
+
// After completelyDeletePage the document is gone from Mongo; we still
|
|
527
|
+
// return the in-memory pageData so the client knows what was deleted.
|
|
528
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(pageData) } };
|
|
529
|
+
}
|
|
530
|
+
if (revision_id && !pageData.isUpdatable(revision_id)) {
|
|
531
|
+
return {
|
|
532
|
+
status: 409,
|
|
533
|
+
body: { error: { code: 'PAGE_REVISION_ERROR', message: 'Revision error.' } },
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
// Page.deletePage mutates pageData (status -> deleted, path -> /trash/<path>)
|
|
537
|
+
// and internally calls Page.rename which returns the *redirect* page (a quirk
|
|
538
|
+
// of the old model). We re-populate the mutated pageData so the response
|
|
539
|
+
// reflects the soft-deleted page itself, which is what callers actually want.
|
|
540
|
+
await Page.deletePage(pageData, user);
|
|
541
|
+
const populated = await Page.populatePageData(pageData, null);
|
|
542
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
543
|
+
}
|
|
544
|
+
catch (err) {
|
|
545
|
+
const error = err;
|
|
546
|
+
debug('Error deleting page:', error.message);
|
|
547
|
+
if (error.message === 'Page not found' || error.message === 'Page is not granted for the user') {
|
|
548
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
549
|
+
}
|
|
550
|
+
return {
|
|
551
|
+
status: 400,
|
|
552
|
+
body: { error: { code: 'PAGE_DELETE_FAILED', message: error.message || 'Failed to delete page' } },
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
revertDeletedPage: async ({ body: requestBody, req }) => {
|
|
557
|
+
const user = req.user;
|
|
558
|
+
const { page_id } = requestBody;
|
|
559
|
+
debug('revertDeletedPage called with:', { page_id, userId: user._id });
|
|
560
|
+
try {
|
|
561
|
+
const pageData = (await Page.findPageByIdAndGrantedUser(page_id, user));
|
|
562
|
+
if (!pageData) {
|
|
563
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
564
|
+
}
|
|
565
|
+
// Page.revertDeletedPage mutates pageData (path -> non-trash, status -> published)
|
|
566
|
+
// and removes the redirect stub at the original /trash path. The function returns
|
|
567
|
+
// pageData itself, but we re-populate to ensure creator/lastUpdateUser/revision are
|
|
568
|
+
// resolved for the response.
|
|
569
|
+
await Page.revertDeletedPage(pageData, user);
|
|
570
|
+
const populated = await Page.populatePageData(pageData, null);
|
|
571
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
const error = err;
|
|
575
|
+
debug('Error reverting deleted page:', error.message);
|
|
576
|
+
if (error.message === 'Page not found' || error.message === 'Page is not granted for the user') {
|
|
577
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
578
|
+
}
|
|
579
|
+
return {
|
|
580
|
+
status: 400,
|
|
581
|
+
body: { error: { code: 'PAGE_REVERT_FAILED', message: error.message || 'Failed to revert deleted page' } },
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
},
|
|
585
|
+
renamePage: async ({ body: requestBody, req }) => {
|
|
586
|
+
const user = req.user;
|
|
587
|
+
const { page_id, new_path, revision_id, create_redirect } = requestBody;
|
|
588
|
+
debug('renamePage called with:', { page_id, new_path, revision_id, create_redirect, userId: user._id });
|
|
589
|
+
// Normalize the destination path and validate the name first so we can
|
|
590
|
+
// reject obviously bad inputs without touching the DB.
|
|
591
|
+
const newPagePath = Page.normalizePath(new_path);
|
|
592
|
+
const newPageIsPortal = newPagePath.endsWith('/');
|
|
593
|
+
if (!Page.isCreatableName(newPagePath)) {
|
|
594
|
+
return {
|
|
595
|
+
status: 400,
|
|
596
|
+
body: {
|
|
597
|
+
error: {
|
|
598
|
+
code: 'PAGE_INVALID_NAME',
|
|
599
|
+
message: `Cannot rename to this page name (${newPagePath})`,
|
|
600
|
+
},
|
|
601
|
+
},
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
try {
|
|
605
|
+
// Authorization: same pattern as updatePage. Hide existence from
|
|
606
|
+
// callers without grant by returning 404.
|
|
607
|
+
const pageData = (await Page.findPageByIdAndGrantedUser(page_id, user));
|
|
608
|
+
if (!pageData) {
|
|
609
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
610
|
+
}
|
|
611
|
+
if (revision_id && !pageData.isUpdatable(revision_id)) {
|
|
612
|
+
return {
|
|
613
|
+
status: 409,
|
|
614
|
+
body: { error: { code: 'PAGE_REVISION_ERROR', message: 'Revision error.' } },
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
// Detect collision at the destination path. If the existing page is a
|
|
618
|
+
// redirect that the user is allowed to remove, unlink it first;
|
|
619
|
+
// otherwise refuse the rename. This mirrors controllers/page.ts.
|
|
620
|
+
const existingAtNewPath = await Page.findOne({ path: newPagePath });
|
|
621
|
+
if (existingAtNewPath) {
|
|
622
|
+
if (existingAtNewPath.isUnlinkable(user)) {
|
|
623
|
+
try {
|
|
624
|
+
await existingAtNewPath.unlink(user);
|
|
625
|
+
}
|
|
626
|
+
catch (err) {
|
|
627
|
+
const error = err;
|
|
628
|
+
return {
|
|
629
|
+
status: 400,
|
|
630
|
+
body: {
|
|
631
|
+
error: {
|
|
632
|
+
code: 'PAGE_RENAME_FAILED',
|
|
633
|
+
message: error.message || 'Failed to unlink redirect page at destination',
|
|
634
|
+
},
|
|
635
|
+
},
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
else {
|
|
640
|
+
return {
|
|
641
|
+
status: 400,
|
|
642
|
+
body: {
|
|
643
|
+
error: {
|
|
644
|
+
code: 'PAGE_EXISTS',
|
|
645
|
+
message: `Cannot rename to this page name (${newPagePath}). Page exists.`,
|
|
646
|
+
},
|
|
647
|
+
},
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
// Old controller: `(!newPageIsPortal && createRedirect) || 0` — portal
|
|
652
|
+
// paths (ending in '/') never get a redirect page even if requested.
|
|
653
|
+
const options = {
|
|
654
|
+
createRedirectPage: !newPageIsPortal && Boolean(create_redirect),
|
|
655
|
+
};
|
|
656
|
+
await Page.rename(pageData, newPagePath, user, options);
|
|
657
|
+
const populated = await Page.populatePageData(pageData, null);
|
|
658
|
+
return { status: 200, body: { page: (0, page_response_1.pageToResponse)(populated) } };
|
|
659
|
+
}
|
|
660
|
+
catch (err) {
|
|
661
|
+
const error = err;
|
|
662
|
+
debug('Error renaming page:', error.message);
|
|
663
|
+
if (error.message === 'Page not found' || error.message === 'Page is not granted for the user') {
|
|
664
|
+
return ts_rest_helpers_1.pageNotFoundResponse;
|
|
665
|
+
}
|
|
666
|
+
return {
|
|
667
|
+
status: 400,
|
|
668
|
+
body: { error: { code: 'PAGE_RENAME_FAILED', message: error.message || 'Failed to rename page' } },
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
});
|
|
673
|
+
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.page, pageRouter, router);
|
|
674
|
+
return router;
|
|
675
|
+
};
|
|
676
|
+
//# sourceMappingURL=page.js.map
|