@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,87 @@
|
|
|
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
|
+
exports.createRateLimiter = createRateLimiter;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const debug = (0, debug_1.default)('crowi:util:rate-limit');
|
|
9
|
+
const KEY_PREFIX = 'crowi:ratelimit';
|
|
10
|
+
/** Current fixed-window index for `now`. */
|
|
11
|
+
const windowIndex = (now, windowMs) => Math.floor(now / windowMs);
|
|
12
|
+
/** Milliseconds remaining until the window containing `now` resets. */
|
|
13
|
+
const msUntilReset = (now, windowMs) => windowMs - (now % windowMs);
|
|
14
|
+
const toRetryAfterSeconds = (ms) => Math.max(1, Math.ceil(ms / 1000));
|
|
15
|
+
/**
|
|
16
|
+
* In-memory fallback store. One entry per `(name, userId, window)`
|
|
17
|
+
* triple; the value is the running count. Entries from elapsed windows
|
|
18
|
+
* are purged lazily and by a periodic sweep.
|
|
19
|
+
*/
|
|
20
|
+
class InMemoryWindowStore {
|
|
21
|
+
counts = new Map();
|
|
22
|
+
lastSweep = 0;
|
|
23
|
+
hit(key, window, windowMs) {
|
|
24
|
+
this.maybeSweep(window);
|
|
25
|
+
const entry = this.counts.get(key);
|
|
26
|
+
if (!entry || entry.window !== window) {
|
|
27
|
+
this.counts.set(key, { count: 1, window });
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
entry.count += 1;
|
|
31
|
+
return entry.count;
|
|
32
|
+
}
|
|
33
|
+
/** Drop entries whose window has elapsed. Cheap enough to run inline. */
|
|
34
|
+
maybeSweep(currentWindow) {
|
|
35
|
+
// Sweep at most once per ~window so a burst of hits doesn't walk
|
|
36
|
+
// the whole map on every request.
|
|
37
|
+
if (currentWindow === this.lastSweep)
|
|
38
|
+
return;
|
|
39
|
+
this.lastSweep = currentWindow;
|
|
40
|
+
for (const [key, entry] of this.counts) {
|
|
41
|
+
if (entry.window < currentWindow)
|
|
42
|
+
this.counts.delete(key);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a per-user rate limiter. Same API whether it is Redis-backed or
|
|
48
|
+
* in-memory, so callers never branch.
|
|
49
|
+
*/
|
|
50
|
+
function createRateLimiter(options) {
|
|
51
|
+
const { name, limit, windowMs, redisClient } = options;
|
|
52
|
+
const memory = new InMemoryWindowStore();
|
|
53
|
+
const evaluate = (count, now) => ({
|
|
54
|
+
allowed: count <= limit,
|
|
55
|
+
count,
|
|
56
|
+
limit,
|
|
57
|
+
retryAfterSeconds: toRetryAfterSeconds(msUntilReset(now, windowMs)),
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
async hit(userId) {
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
const window = windowIndex(now, windowMs);
|
|
63
|
+
if (redisClient) {
|
|
64
|
+
const key = `${KEY_PREFIX}:${name}:${userId}:${window}`;
|
|
65
|
+
try {
|
|
66
|
+
const count = await redisClient.incr(key);
|
|
67
|
+
// Set the TTL once, when the window is first opened. A small
|
|
68
|
+
// grace beyond `windowMs` avoids a race where the key expires
|
|
69
|
+
// a hair before the window boundary.
|
|
70
|
+
if (count === 1) {
|
|
71
|
+
await redisClient.pExpire(key, windowMs + 1000);
|
|
72
|
+
}
|
|
73
|
+
return evaluate(count, now);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// Fail open — a Redis blip must not take the feature down.
|
|
77
|
+
debug('redis hit failed for %s — failing open: %s', key, err.message);
|
|
78
|
+
return { allowed: true, count: 0, limit, retryAfterSeconds: toRetryAfterSeconds(msUntilReset(now, windowMs)) };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const key = `${name}:${userId}`;
|
|
82
|
+
const count = memory.hit(key, window, windowMs);
|
|
83
|
+
return evaluate(count, now);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/util/rate-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
/**
|
|
3
|
+
* RFC-0008 §8.5 — `crowi-admin rebuild backlink`.
|
|
4
|
+
*
|
|
5
|
+
* Rebuild the backlink index across all pages (the `Backlink` collection,
|
|
6
|
+
* which maps fromPage/fromRevision → toPage by scanning page bodies). This is
|
|
7
|
+
* a derived-data rebuild: version-independent, runnable any time (§3).
|
|
8
|
+
*
|
|
9
|
+
* NOT YET IMPLEMENTED (planner-confirmed: no legacy implementation exists as a
|
|
10
|
+
* CLI command). Phase 4 only registers the dispatcher entry so `rebuild --help`
|
|
11
|
+
* lists the full surface; the actual rebuild is left as explicit work.
|
|
12
|
+
*
|
|
13
|
+
* TODO(rfc-0008): implement. The primitive already exists on the model —
|
|
14
|
+
* `Backlink.createByAllPages()` (models/backlink.ts) drops + recreates the
|
|
15
|
+
* whole index. The rebuild wrapper should:
|
|
16
|
+
* - iterate published pages through `runner.mapBounded` rather than the
|
|
17
|
+
* model's all-at-once helper, so progress + SIGINT + concurrency are
|
|
18
|
+
* honoured on large installs,
|
|
19
|
+
* - report a candidate count and write nothing when `ctx.dryRun` is true.
|
|
20
|
+
*/
|
|
21
|
+
export interface BacklinkRebuildSummary {
|
|
22
|
+
pagesScanned: number;
|
|
23
|
+
backlinksWritten: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function runBacklinkRebuild(_crowi: Crowi): Promise<BacklinkRebuildSummary>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runBacklinkRebuild = runBacklinkRebuild;
|
|
4
|
+
async function runBacklinkRebuild(_crowi) {
|
|
5
|
+
throw new Error('rebuild backlink is not implemented yet (RFC-0008 §8.5). No legacy implementation exists to port; see util/rebuild-backlink.ts TODO.');
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=rebuild-backlink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebuild-backlink.js","sourceRoot":"","sources":["../../src/util/rebuild-backlink.ts"],"names":[],"mappings":";;AA0BA,gDAEC;AAFM,KAAK,UAAU,kBAAkB,CAAC,MAAa;IACpD,MAAM,IAAI,KAAK,CAAC,sIAAsI,CAAC,CAAC;AAC1J,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
/**
|
|
3
|
+
* RFC-0008 §8.5 — `crowi-admin rebuild renderer`.
|
|
4
|
+
*
|
|
5
|
+
* Regenerate cached rendered HTML for pages (the `PluginRenderCache`
|
|
6
|
+
* collection populated by `src/renderer/` + plugin render scopes). This is a
|
|
7
|
+
* derived-data rebuild: version-independent, runnable any time (§3).
|
|
8
|
+
*
|
|
9
|
+
* NOT YET IMPLEMENTED (planner-confirmed: no legacy implementation exists —
|
|
10
|
+
* unlike `rebuild search`, which ported `runSearchRebuild`). Phase 4 only
|
|
11
|
+
* registers the dispatcher entry so `rebuild --help` lists the full surface;
|
|
12
|
+
* the actual rebuild is left as explicit work.
|
|
13
|
+
*
|
|
14
|
+
* TODO(rfc-0008): implement. The shape should mirror `runSearchRebuild`:
|
|
15
|
+
* - resolve the active renderer scopes (`crowi.getRenderer()` /
|
|
16
|
+
* the `PluginRenderCache` model registered by `src/renderer/index.ts`),
|
|
17
|
+
* - with `--only-stale`, re-render only pages whose cache entry is older
|
|
18
|
+
* than the page's `updatedAt` / current revision,
|
|
19
|
+
* - otherwise drop + repopulate the cache,
|
|
20
|
+
* - fan work out through `runner.mapBounded` for embed-plugin rate limits,
|
|
21
|
+
* - honour `ctx.dryRun` (report candidate count, write nothing).
|
|
22
|
+
*/
|
|
23
|
+
export interface RendererRebuildOptions {
|
|
24
|
+
/** Only re-render pages whose cached HTML is stale. */
|
|
25
|
+
onlyStale: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface RendererRebuildSummary {
|
|
28
|
+
rerendered: number;
|
|
29
|
+
skipped: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function runRendererRebuild(_crowi: Crowi, _opts: RendererRebuildOptions): Promise<RendererRebuildSummary>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runRendererRebuild = runRendererRebuild;
|
|
4
|
+
async function runRendererRebuild(_crowi, _opts) {
|
|
5
|
+
throw new Error('rebuild renderer is not implemented yet (RFC-0008 §8.5). No legacy implementation exists to port; see util/rebuild-renderer.ts TODO.');
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=rebuild-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebuild-renderer.js","sourceRoot":"","sources":["../../src/util/rebuild-renderer.ts"],"names":[],"mappings":";;AAiCA,gDAEC;AAFM,KAAK,UAAU,kBAAkB,CAAC,MAAa,EAAE,KAA6B;IACnF,MAAM,IAAI,KAAK,CAAC,sIAAsI,CAAC,CAAC;AAC1J,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translate a Crowi-style `REDIS_URL` (`redis://` or `rediss://` with
|
|
3
|
+
* optional `user:password@host:port`) into a node-redis v4
|
|
4
|
+
* `socket`-shaped config.
|
|
5
|
+
*
|
|
6
|
+
* The shape is intentionally compatible with `redis@4`'s
|
|
7
|
+
* `createClient(opts)` so collab and api can negotiate identical TLS /
|
|
8
|
+
* port / password semantics when both processes connect to the same
|
|
9
|
+
* Redis instance. Returns `null` for an empty `redisUrl` so callers can
|
|
10
|
+
* branch on "Redis not configured" without inventing a sentinel
|
|
11
|
+
* elsewhere.
|
|
12
|
+
*
|
|
13
|
+
* Lives in `packages/api/src/util/` (not `service/`) so the collab
|
|
14
|
+
* package can pull it through `api-dist.ts` without dragging in any
|
|
15
|
+
* Crowi-class context.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildRedisOpts(redisUrl: string | null, rejectUnauthorized: boolean): Record<string, unknown> | null;
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
exports.buildRedisOpts = buildRedisOpts;
|
|
7
|
+
const node_url_1 = __importDefault(require("node:url"));
|
|
8
|
+
/**
|
|
9
|
+
* Translate a Crowi-style `REDIS_URL` (`redis://` or `rediss://` with
|
|
10
|
+
* optional `user:password@host:port`) into a node-redis v4
|
|
11
|
+
* `socket`-shaped config.
|
|
12
|
+
*
|
|
13
|
+
* The shape is intentionally compatible with `redis@4`'s
|
|
14
|
+
* `createClient(opts)` so collab and api can negotiate identical TLS /
|
|
15
|
+
* port / password semantics when both processes connect to the same
|
|
16
|
+
* Redis instance. Returns `null` for an empty `redisUrl` so callers can
|
|
17
|
+
* branch on "Redis not configured" without inventing a sentinel
|
|
18
|
+
* elsewhere.
|
|
19
|
+
*
|
|
20
|
+
* Lives in `packages/api/src/util/` (not `service/`) so the collab
|
|
21
|
+
* package can pull it through `api-dist.ts` without dragging in any
|
|
22
|
+
* Crowi-class context.
|
|
23
|
+
*/
|
|
24
|
+
function buildRedisOpts(redisUrl, rejectUnauthorized) {
|
|
25
|
+
if (!redisUrl)
|
|
26
|
+
return null;
|
|
27
|
+
const { hostname: host, port, auth, protocol } = node_url_1.default.parse(redisUrl);
|
|
28
|
+
const password = auth ? { password: auth.split(':')[1] } : {};
|
|
29
|
+
const portNumber = port ? parseInt(port, 10) : 6379;
|
|
30
|
+
const tls = protocol === 'rediss:' ? { requestCert: true, rejectUnauthorized } : null;
|
|
31
|
+
return {
|
|
32
|
+
socket: {
|
|
33
|
+
host,
|
|
34
|
+
port: portNumber,
|
|
35
|
+
...(tls && { tls }),
|
|
36
|
+
},
|
|
37
|
+
...password,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=redis-opts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-opts.js","sourceRoot":"","sources":["../../src/util/redis-opts.ts"],"names":[],"mappings":";;;;;AAkBA,wCAcC;AAhCD,wDAA2B;AAE3B;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,cAAc,CAAC,QAAuB,EAAE,kBAA2B;IACjF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,GAAG,GAAkB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrG,OAAO;QACL,MAAM,EAAE;YACN,IAAI;YACJ,IAAI,EAAE,UAAU;YAChB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;SACpB;QACD,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeRegExp = escapeRegExp;
|
|
4
|
+
/** Escape a string so it can be embedded literally inside a `RegExp`. */
|
|
5
|
+
function escapeRegExp(value) {
|
|
6
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.js","sourceRoot":"","sources":["../../src/util/regex.ts"],"names":[],"mappings":";;AACA,oCAEC;AAHD,yEAAyE;AACzE,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
/**
|
|
3
|
+
* Plugin-agnostic dispatcher for `crowi-admin search rebuild`. Resolves
|
|
4
|
+
* the active search driver and delegates to its `rebuild()` method.
|
|
5
|
+
*
|
|
6
|
+
* The actual rebuild semantics live in each plugin's driver
|
|
7
|
+
* (`packages/plugin-search-elasticsearch/src/driver.ts:rebuild` and
|
|
8
|
+
* future opensearch / algolia drivers). Keeping this wrapper to a
|
|
9
|
+
* single delegating call means new search backends don't have to touch
|
|
10
|
+
* admin-cli or the api repo to wire up `crowi-admin search rebuild` —
|
|
11
|
+
* they only have to implement the `SearchDriver.rebuild?()` contract
|
|
12
|
+
* declared in `@crowi/plugin-api`.
|
|
13
|
+
*/
|
|
14
|
+
export interface SearchRebuildSummary {
|
|
15
|
+
driverName: string;
|
|
16
|
+
pluginName: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function runSearchRebuild(crowi: Crowi): Promise<SearchRebuildSummary>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runSearchRebuild = runSearchRebuild;
|
|
4
|
+
async function runSearchRebuild(crowi) {
|
|
5
|
+
const plugins = crowi.getPlugins();
|
|
6
|
+
const driver = plugins.active.search;
|
|
7
|
+
if (!driver) {
|
|
8
|
+
throw new Error('No active search driver. Set `search.driver` in crowi.config.json and install the matching plugin.');
|
|
9
|
+
}
|
|
10
|
+
if (typeof driver.rebuild !== 'function') {
|
|
11
|
+
throw new Error('The active search driver does not support rebuild. (Plugins without a persistent index — e.g. Mongo regex — are read-only.)');
|
|
12
|
+
}
|
|
13
|
+
// Resolve the (driverName, pluginName) for the summary by walking the
|
|
14
|
+
// registry list and matching by reference. Same approach the admin
|
|
15
|
+
// status endpoint uses — see `routes/ts-rest/admin/search.ts`.
|
|
16
|
+
let driverName = '<unknown>';
|
|
17
|
+
let pluginName = '<unknown>';
|
|
18
|
+
for (const entry of plugins.search.list()) {
|
|
19
|
+
if (plugins.search.get(entry.driverName) === driver) {
|
|
20
|
+
driverName = entry.driverName;
|
|
21
|
+
pluginName = entry.plugin;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
await driver.rebuild();
|
|
26
|
+
return { driverName, pluginName };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=search-rebuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-rebuild.js","sourceRoot":"","sources":["../../src/util/search-rebuild.ts"],"names":[],"mappings":";;AAmBA,4CAyBC;AAzBM,KAAK,UAAU,gBAAgB,CAAC,KAAY;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,6HAA6H,CAAC,CAAC;IACjJ,CAAC;IAED,sEAAsE;IACtE,mEAAmE;IACnE,+DAA+D;IAC/D,IAAI,UAAU,GAAG,WAAW,CAAC;IAC7B,IAAI,UAAU,GAAG,WAAW,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;YACpD,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAC1B,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/util/ssr.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assetPath = exports.getPath = void 0;
|
|
4
|
+
const getPath = (crowi, path) => (crowi.node_env === 'development' ? `${path}.tsx` : `${path}.js`);
|
|
5
|
+
exports.getPath = getPath;
|
|
6
|
+
// FIXME: Use webpack mainfest in production
|
|
7
|
+
const assetPath = (path) => path;
|
|
8
|
+
exports.assetPath = assetPath;
|
|
9
|
+
//# sourceMappingURL=ssr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../../src/util/ssr.ts"],"names":[],"mappings":";;;AAEO,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAA5G,QAAA,OAAO,WAAqG;AAEzH,4CAA4C;AACrC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC;AAAnC,QAAA,SAAS,aAA0B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
export interface StorageCopyProgress {
|
|
3
|
+
current: number;
|
|
4
|
+
total: number | null;
|
|
5
|
+
key: string;
|
|
6
|
+
stage: 'start' | 'ok' | 'failed' | 'skipped';
|
|
7
|
+
reason?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface StorageCopyOptions {
|
|
10
|
+
from: string;
|
|
11
|
+
to: string;
|
|
12
|
+
/** When true, enumerate candidate keys but never call `to.put`. */
|
|
13
|
+
dryRun: boolean;
|
|
14
|
+
onProgress?: (event: StorageCopyProgress) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface StorageCopySummary {
|
|
17
|
+
ok: number;
|
|
18
|
+
failed: number;
|
|
19
|
+
skipped: number;
|
|
20
|
+
total: number;
|
|
21
|
+
/** Up to DRY_RUN_SAMPLE_LIMIT keys, populated only on dry-run. */
|
|
22
|
+
sampleKeys: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Copy every stored object from `opts.from` to `opts.to`. Both drivers
|
|
26
|
+
* must be loaded by some plugin; the active-driver concept is irrelevant
|
|
27
|
+
* (an operator can stage data on the new driver while the old one is
|
|
28
|
+
* still active, then flip `crowi.config.json` and restart).
|
|
29
|
+
*
|
|
30
|
+
* Re-running is safe: per-key errors increment `summary.failed` without
|
|
31
|
+
* aborting the iteration, and the local + S3 drivers overwrite by key.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runStorageCopy(crowi: Crowi, opts: StorageCopyOptions): Promise<StorageCopySummary>;
|
|
34
|
+
/**
|
|
35
|
+
* Two URL shapes produced by `fileUploader.generateUrl()`:
|
|
36
|
+
* 1. Local driver: `<BY_KEY_URL_PREFIX>user%2F<id>.<ext>`
|
|
37
|
+
* 2. S3 signed URL with the raw `user/<id>.<ext>` segment in the path.
|
|
38
|
+
* Returns null for external URLs (e.g. OAuth-captured Google avatars).
|
|
39
|
+
*/
|
|
40
|
+
export declare function extractUserPictureKey(image: string | null | undefined): string | null;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runStorageCopy = runStorageCopy;
|
|
4
|
+
exports.extractUserPictureKey = extractUserPictureKey;
|
|
5
|
+
const fileUploader_1 = require("../util/fileUploader");
|
|
6
|
+
const DRY_RUN_SAMPLE_LIMIT = 20;
|
|
7
|
+
/**
|
|
8
|
+
* Copy every stored object from `opts.from` to `opts.to`. Both drivers
|
|
9
|
+
* must be loaded by some plugin; the active-driver concept is irrelevant
|
|
10
|
+
* (an operator can stage data on the new driver while the old one is
|
|
11
|
+
* still active, then flip `crowi.config.json` and restart).
|
|
12
|
+
*
|
|
13
|
+
* Re-running is safe: per-key errors increment `summary.failed` without
|
|
14
|
+
* aborting the iteration, and the local + S3 drivers overwrite by key.
|
|
15
|
+
*/
|
|
16
|
+
async function runStorageCopy(crowi, opts) {
|
|
17
|
+
const fromDriver = (0, fileUploader_1.getStorageDriverByName)(crowi, opts.from);
|
|
18
|
+
const toDriver = (0, fileUploader_1.getStorageDriverByName)(crowi, opts.to);
|
|
19
|
+
if (opts.from === opts.to) {
|
|
20
|
+
throw new Error(`Source and destination drivers must differ (both '${opts.from}').`);
|
|
21
|
+
}
|
|
22
|
+
const Attachment = crowi.model('Attachment');
|
|
23
|
+
const User = crowi.model('User');
|
|
24
|
+
const summary = { ok: 0, failed: 0, skipped: 0, total: 0, sampleKeys: [] };
|
|
25
|
+
// Cursor (not toArray) so memory stays constant on installations with
|
|
26
|
+
// millions of attachment rows.
|
|
27
|
+
const attachmentCursor = Attachment.find({}, { filePath: 1, fileFormat: 1 }).cursor();
|
|
28
|
+
for await (const doc of attachmentCursor) {
|
|
29
|
+
if (!doc.filePath)
|
|
30
|
+
continue;
|
|
31
|
+
summary.total += 1;
|
|
32
|
+
if (opts.dryRun) {
|
|
33
|
+
recordSkipped(doc.filePath, summary, opts);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
await copyOne(fromDriver, toDriver, doc.filePath, doc.fileFormat || 'application/octet-stream', summary, opts);
|
|
37
|
+
}
|
|
38
|
+
// Profile pictures live outside the Attachment collection — they're
|
|
39
|
+
// referenced from `User.image`. The regex pre-filters in Mongo so we
|
|
40
|
+
// don't fetch every user just to skip non-storage URLs (Google avatars
|
|
41
|
+
// etc. captured at OAuth login). Both URL shapes that
|
|
42
|
+
// `fileUploader.generateUrl()` can produce — the by-key proxy form
|
|
43
|
+
// (`/api/v2/attachments/by-key/user%2F<id>.<ext>`) and any signed URL
|
|
44
|
+
// containing the raw `user/<id>.<ext>` segment — match this filter.
|
|
45
|
+
const userCursor = User.find({ image: { $regex: 'user(%2F|/)', $options: 'i' } }, { image: 1 }).cursor();
|
|
46
|
+
for await (const user of userCursor) {
|
|
47
|
+
const key = extractUserPictureKey(user.image);
|
|
48
|
+
if (!key)
|
|
49
|
+
continue;
|
|
50
|
+
summary.total += 1;
|
|
51
|
+
if (opts.dryRun) {
|
|
52
|
+
recordSkipped(key, summary, opts);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// contentType isn't stored alongside `User.image`; derive from the
|
|
56
|
+
// file extension so S3 still records something sensible in object
|
|
57
|
+
// metadata (no-op on local).
|
|
58
|
+
await copyOne(fromDriver, toDriver, key, contentTypeFromKey(key), summary, opts);
|
|
59
|
+
}
|
|
60
|
+
return summary;
|
|
61
|
+
}
|
|
62
|
+
function recordSkipped(key, summary, opts) {
|
|
63
|
+
if (summary.sampleKeys.length < DRY_RUN_SAMPLE_LIMIT)
|
|
64
|
+
summary.sampleKeys.push(key);
|
|
65
|
+
opts.onProgress?.({ current: summary.total, total: null, key, stage: 'skipped' });
|
|
66
|
+
summary.skipped += 1;
|
|
67
|
+
}
|
|
68
|
+
async function copyOne(fromDriver, toDriver, key, contentType, summary, opts) {
|
|
69
|
+
opts.onProgress?.({ current: summary.total, total: null, key, stage: 'start' });
|
|
70
|
+
let stream = null;
|
|
71
|
+
try {
|
|
72
|
+
stream = (await fromDriver.get(key));
|
|
73
|
+
await toDriver.put(key, stream, { contentType });
|
|
74
|
+
summary.ok += 1;
|
|
75
|
+
opts.onProgress?.({ current: summary.total, total: null, key, stage: 'ok' });
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// Destroy the source on failure — local `get()` returns an open file
|
|
79
|
+
// descriptor and S3 returns an open socket. Without this, a long run
|
|
80
|
+
// with intermittent failures leaks fds / sockets until GC.
|
|
81
|
+
if (stream && typeof stream.destroy === 'function')
|
|
82
|
+
stream.destroy();
|
|
83
|
+
summary.failed += 1;
|
|
84
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
85
|
+
opts.onProgress?.({ current: summary.total, total: null, key, stage: 'failed', reason });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Two URL shapes produced by `fileUploader.generateUrl()`:
|
|
90
|
+
* 1. Local driver: `<BY_KEY_URL_PREFIX>user%2F<id>.<ext>`
|
|
91
|
+
* 2. S3 signed URL with the raw `user/<id>.<ext>` segment in the path.
|
|
92
|
+
* Returns null for external URLs (e.g. OAuth-captured Google avatars).
|
|
93
|
+
*/
|
|
94
|
+
function extractUserPictureKey(image) {
|
|
95
|
+
if (!image)
|
|
96
|
+
return null;
|
|
97
|
+
if (image.includes(fileUploader_1.BY_KEY_URL_PREFIX)) {
|
|
98
|
+
const encoded = image.match(/user%2F([\w.-]+)/i);
|
|
99
|
+
if (encoded)
|
|
100
|
+
return `user/${encoded[1]}`;
|
|
101
|
+
}
|
|
102
|
+
const raw = image.match(/user\/([\w.-]+)/);
|
|
103
|
+
if (raw)
|
|
104
|
+
return `user/${raw[1]}`;
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function contentTypeFromKey(key) {
|
|
108
|
+
const ext = key.toLowerCase().split('.').pop();
|
|
109
|
+
switch (ext) {
|
|
110
|
+
case 'png':
|
|
111
|
+
return 'image/png';
|
|
112
|
+
case 'jpg':
|
|
113
|
+
case 'jpeg':
|
|
114
|
+
return 'image/jpeg';
|
|
115
|
+
case 'gif':
|
|
116
|
+
return 'image/gif';
|
|
117
|
+
case 'webp':
|
|
118
|
+
return 'image/webp';
|
|
119
|
+
default:
|
|
120
|
+
return 'application/octet-stream';
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=storage-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-copy.js","sourceRoot":"","sources":["../../src/util/storage-copy.ts"],"names":[],"mappings":";;AAyCA,wCAiDC;AAwCD,sDAYC;AA3ID,wDAAkF;AA2BlF,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;;GAQG;AACI,KAAK,UAAU,cAAc,CAAC,KAAY,EAAE,IAAwB;IACzE,MAAM,UAAU,GAAG,IAAA,qCAAsB,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAA,qCAAsB,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAExD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAuB,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAE/F,sEAAsE;IACtE,+BAA+B;IAC/B,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACtF,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,SAAS;QAC5B,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,MAAM,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,IAAI,0BAA0B,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjH,CAAC;IAED,oEAAoE;IACpE,qEAAqE;IACrE,uEAAuE;IACvE,sDAAsD;IACtD,mEAAmE;IACnE,sEAAsE;IACtE,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACzG,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,mEAAmE;QACnE,kEAAkE;QAClE,6BAA6B;QAC7B,MAAM,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,OAA2B,EAAE,IAAwB;IACvF,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,oBAAoB;QAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnF,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,UAAyB,EACzB,QAAuB,EACvB,GAAW,EACX,WAAmB,EACnB,OAA2B,EAC3B,IAAwB;IAExB,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAChF,IAAI,MAAM,GAAoB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAa,CAAC;QACjD,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qEAAqE;QACrE,qEAAqE;QACrE,2DAA2D;QAC3D,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACrE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAgC;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,KAAK,CAAC,QAAQ,CAAC,gCAAiB,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjD,IAAI,OAAO;YAAE,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAI,GAAG;QAAE,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,0BAA0B,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Types } from 'mongoose';
|
|
2
|
+
import type { PageUser, UserPublic } from '@crowi/api-contract';
|
|
3
|
+
import type { UserDocument } from '../models/user';
|
|
4
|
+
import type { PageDocument } from '../models/page';
|
|
5
|
+
/**
|
|
6
|
+
* Shape of a populated User as it appears on Mongoose documents that have
|
|
7
|
+
* `creator` / `lastUpdateUser` / `revision.author` populated.
|
|
8
|
+
*/
|
|
9
|
+
export interface PopulatedUser {
|
|
10
|
+
_id: Types.ObjectId;
|
|
11
|
+
username: string;
|
|
12
|
+
name: string;
|
|
13
|
+
email: string;
|
|
14
|
+
image?: string | null;
|
|
15
|
+
createdAt?: Date;
|
|
16
|
+
}
|
|
17
|
+
export declare const toISOStringOrNull: (date: Date | undefined | null) => string | null;
|
|
18
|
+
export declare const toStringId: (id: Types.ObjectId | string) => string;
|
|
19
|
+
export declare const toPageUser: (user: PopulatedUser) => PageUser;
|
|
20
|
+
/**
|
|
21
|
+
* Looser shape than UserDocument: covers populated subdocuments where _id may
|
|
22
|
+
* already be a string and most fields can be missing. Falls back gracefully so
|
|
23
|
+
* the response payload always satisfies UserPublicSchema.
|
|
24
|
+
*/
|
|
25
|
+
export interface PopulatedUserPublic {
|
|
26
|
+
_id: Types.ObjectId | string;
|
|
27
|
+
username?: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
email?: string;
|
|
30
|
+
image?: string | null;
|
|
31
|
+
introduction?: string;
|
|
32
|
+
createdAt?: Date;
|
|
33
|
+
admin?: boolean;
|
|
34
|
+
status?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare const toUserPublic: (user: UserDocument | PopulatedUserPublic) => UserPublic;
|
|
37
|
+
/**
|
|
38
|
+
* Strict 24-character hex string check for Mongo ObjectId.
|
|
39
|
+
* `Types.ObjectId.isValid()` accepts 12-byte buffers and other formats; we
|
|
40
|
+
* only accept the canonical hex string used in URLs and request bodies.
|
|
41
|
+
*/
|
|
42
|
+
export declare const isValidObjectId: (id: string | undefined | null) => id is string;
|
|
43
|
+
/**
|
|
44
|
+
* Heuristic for "this is a populated user document, not just an ObjectId".
|
|
45
|
+
* The 4 ts-rest routes all need this; the loose form (only _id + username +
|
|
46
|
+
* email) covers all current call sites.
|
|
47
|
+
*/
|
|
48
|
+
export declare const isPopulatedUser: (value: unknown) => value is PopulatedUser;
|
|
49
|
+
/**
|
|
50
|
+
* Standard 404 for "page not found OR not granted". Mapped to 404 (not 403)
|
|
51
|
+
* so we do not leak page existence to callers without grant.
|
|
52
|
+
*/
|
|
53
|
+
export declare const pageNotFoundResponse: {
|
|
54
|
+
readonly status: 404;
|
|
55
|
+
readonly body: {
|
|
56
|
+
readonly error: {
|
|
57
|
+
readonly code: "PAGE_NOT_FOUND";
|
|
58
|
+
readonly message: "Page not found";
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Standard 400 for an invalid page_id (not 24-char hex).
|
|
64
|
+
*/
|
|
65
|
+
export declare const invalidPageIdResponse: {
|
|
66
|
+
readonly status: 400;
|
|
67
|
+
readonly body: {
|
|
68
|
+
readonly error: {
|
|
69
|
+
readonly code: "INVALID_PAGE_ID";
|
|
70
|
+
readonly message: "Invalid page_id";
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Standard 500 for an unexpected handler failure. Used by every admin
|
|
76
|
+
* handler that wraps its body in try/catch and needs to surface a typed
|
|
77
|
+
* `InternalServerError` shape (see `schemas/common.ts:InternalServerErrorSchema`).
|
|
78
|
+
*/
|
|
79
|
+
export declare const internalServerErrorResponse: {
|
|
80
|
+
readonly status: 500;
|
|
81
|
+
readonly body: {
|
|
82
|
+
readonly error: {
|
|
83
|
+
readonly code: "INTERNAL_ERROR";
|
|
84
|
+
readonly message: "Internal server error";
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Minimum surface of the Page model that loadGrantedPage needs. We avoid
|
|
90
|
+
* importing the full Page model type because crowi.model('Page') returns
|
|
91
|
+
* a Mongoose Model with deeply-nested generics that would force every
|
|
92
|
+
* caller to mirror the same type.
|
|
93
|
+
*/
|
|
94
|
+
interface PageModelLike {
|
|
95
|
+
findPageByIdAndGrantedUser(pageId: string, user: UserDocument): Promise<PageDocument | null>;
|
|
96
|
+
}
|
|
97
|
+
export type LoadedGrantedPage = {
|
|
98
|
+
page: PageDocument;
|
|
99
|
+
} | {
|
|
100
|
+
error: typeof pageNotFoundResponse | typeof invalidPageIdResponse;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Validate `pageId` and resolve a granted Page document, or return the
|
|
104
|
+
* standard 400 / 404 response otherwise. Centralises the
|
|
105
|
+
* isValidObjectId + findPageByIdAndGrantedUser + leak-prevention catch
|
|
106
|
+
* pattern that ts-rest page-related routes (page / bookmark / comment /
|
|
107
|
+
* revision / notification) all need.
|
|
108
|
+
*/
|
|
109
|
+
export declare const loadGrantedPage: (Page: PageModelLike, pageId: string, user: UserDocument) => Promise<LoadedGrantedPage>;
|
|
110
|
+
export {};
|