@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,98 @@
|
|
|
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 debug_1 = __importDefault(require("debug"));
|
|
7
|
+
const nodemailer_1 = __importDefault(require("nodemailer"));
|
|
8
|
+
const nodemailer_ses_transport_1 = __importDefault(require("nodemailer-ses-transport"));
|
|
9
|
+
const debug = (0, debug_1.default)('crowi:lib:mailer');
|
|
10
|
+
exports.default = (crowi) => {
|
|
11
|
+
'use strict';
|
|
12
|
+
const config = crowi.getConfig();
|
|
13
|
+
const mailConfig = {};
|
|
14
|
+
let mailer = {};
|
|
15
|
+
function createSMTPClient(option) {
|
|
16
|
+
debug('createSMTPClient option', option);
|
|
17
|
+
if (!option) {
|
|
18
|
+
option = {
|
|
19
|
+
host: config.crowi['mail:smtpHost'],
|
|
20
|
+
port: config.crowi['mail:smtpPort'],
|
|
21
|
+
};
|
|
22
|
+
if (config.crowi['mail:smtpUser'] && config.crowi['mail:smtpPassword']) {
|
|
23
|
+
option.auth = {
|
|
24
|
+
user: config.crowi['mail:smtpUser'],
|
|
25
|
+
pass: config.crowi['mail:smtpPassword'],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (option.port === 465) {
|
|
29
|
+
option.secure = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
option.tls = { rejectUnauthorized: false };
|
|
33
|
+
const client = nodemailer_1.default.createTransport(option);
|
|
34
|
+
debug('mailer set up for SMTP', client);
|
|
35
|
+
return client;
|
|
36
|
+
}
|
|
37
|
+
function createSESClient(option) {
|
|
38
|
+
if (!option) {
|
|
39
|
+
option = {
|
|
40
|
+
accessKeyId: config.crowi['mail:aws:accessKeyId'],
|
|
41
|
+
secretAccessKey: config.crowi['mail:aws:secretAccessKey'],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const client = nodemailer_1.default.createTransport((0, nodemailer_ses_transport_1.default)(option));
|
|
45
|
+
debug('mailer set up for SES', client);
|
|
46
|
+
return client;
|
|
47
|
+
}
|
|
48
|
+
function initialize() {
|
|
49
|
+
if (!config.crowi || !config.crowi['mail:from']) {
|
|
50
|
+
mailer = undefined;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (config.crowi['mail:smtpHost'] && config.crowi['mail:smtpPort']) {
|
|
54
|
+
// SMTP 設定がある場合はそれを優先
|
|
55
|
+
mailer = createSMTPClient();
|
|
56
|
+
}
|
|
57
|
+
else if (config.crowi['mail:aws:accessKeyId'] && config.crowi['mail:aws:secretAccessKey']) {
|
|
58
|
+
// AWS 設定がある場合はSESを設定
|
|
59
|
+
mailer = createSESClient();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
mailer = undefined;
|
|
63
|
+
}
|
|
64
|
+
mailConfig.from = config.crowi['mail:from'];
|
|
65
|
+
mailConfig.subject = config.crowi['app:title'] + 'からのメール';
|
|
66
|
+
debug('mailer initialized');
|
|
67
|
+
}
|
|
68
|
+
function setupMailConfig(overrideConfig) {
|
|
69
|
+
const c = overrideConfig;
|
|
70
|
+
let mc = {};
|
|
71
|
+
mc = mailConfig;
|
|
72
|
+
mc.to = c.to;
|
|
73
|
+
mc.from = c.from || mailConfig.from;
|
|
74
|
+
mc.text = c.text;
|
|
75
|
+
mc.subject = c.subject || mailConfig.subject;
|
|
76
|
+
return mc;
|
|
77
|
+
}
|
|
78
|
+
function send(config, callback) {
|
|
79
|
+
if (mailer) {
|
|
80
|
+
// テンプレート処理をシンプルなテキスト代入に変更
|
|
81
|
+
// 将来的には別のメールテンプレートエンジンに置き換える必要があります
|
|
82
|
+
config.text = config.vars ? JSON.stringify(config.vars) : 'メール本文(テンプレートエンジン削除のため詳細は表示できません)';
|
|
83
|
+
return mailer.sendMail(setupMailConfig(config), callback);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
debug('Mailer is not completed to set up. Please set up SMTP or AWS setting.');
|
|
87
|
+
return callback(new Error('Mailer is not completed to set up. Please set up SMTP or AWS setting.'), null);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
initialize();
|
|
91
|
+
return {
|
|
92
|
+
createSMTPClient: createSMTPClient,
|
|
93
|
+
createSESClient: createSESClient,
|
|
94
|
+
mailer: mailer,
|
|
95
|
+
send: send,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=mailer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailer.js","sourceRoot":"","sources":["../../src/util/mailer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* feature-user-identity-uniqueness §d — map a MongoDB duplicate-key error
|
|
3
|
+
* (E11000) raised by the `users.username` / `users.email` unique indexes to a
|
|
4
|
+
* caller-facing error code.
|
|
5
|
+
*
|
|
6
|
+
* The unique indexes are the final defence: the write paths pre-check with a
|
|
7
|
+
* `findOne`, but a race between that check and the `save()` can still land two
|
|
8
|
+
* concurrent inserts/updates, in which case the second one fails with E11000.
|
|
9
|
+
* Without this mapping it would surface as a generic 500; with it the handler
|
|
10
|
+
* returns the same `USERNAME_TAKEN` / `EMAIL_TAKEN` it would have returned from
|
|
11
|
+
* the pre-check.
|
|
12
|
+
*
|
|
13
|
+
* Detection prefers `err.keyPattern` (the driver populates it with the index's
|
|
14
|
+
* key spec, e.g. `{ email: 1 }`), falling back to scanning the message for the
|
|
15
|
+
* index/key name when an older driver omits `keyPattern`.
|
|
16
|
+
*/
|
|
17
|
+
import type { ErrorCode } from '@crowi/api-contract';
|
|
18
|
+
/** True iff `err` is a MongoDB duplicate-key (E11000) error. */
|
|
19
|
+
export declare function isDuplicateKeyError(err: unknown): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Map a duplicate-key error on the user identity indexes to `USERNAME_TAKEN` /
|
|
22
|
+
* `EMAIL_TAKEN`. Returns `null` when `err` is not an E11000 error, or is on a
|
|
23
|
+
* field this util doesn't own (so the caller can fall through to its generic
|
|
24
|
+
* 500 handling rather than mislabel an unrelated conflict).
|
|
25
|
+
*/
|
|
26
|
+
export declare function mapDuplicateKeyError(err: unknown): ErrorCode | null;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDuplicateKeyError = isDuplicateKeyError;
|
|
4
|
+
exports.mapDuplicateKeyError = mapDuplicateKeyError;
|
|
5
|
+
/** Mongo duplicate-key errors carry `code === 11000`. */
|
|
6
|
+
const DUPLICATE_KEY_CODE = 11000;
|
|
7
|
+
const asMongoError = (err) => {
|
|
8
|
+
if (typeof err !== 'object' || err === null)
|
|
9
|
+
return null;
|
|
10
|
+
return err;
|
|
11
|
+
};
|
|
12
|
+
/** True iff `err` is a MongoDB duplicate-key (E11000) error. */
|
|
13
|
+
function isDuplicateKeyError(err) {
|
|
14
|
+
return asMongoError(err)?.code === DUPLICATE_KEY_CODE;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Map a duplicate-key error on the user identity indexes to `USERNAME_TAKEN` /
|
|
18
|
+
* `EMAIL_TAKEN`. Returns `null` when `err` is not an E11000 error, or is on a
|
|
19
|
+
* field this util doesn't own (so the caller can fall through to its generic
|
|
20
|
+
* 500 handling rather than mislabel an unrelated conflict).
|
|
21
|
+
*/
|
|
22
|
+
function mapDuplicateKeyError(err) {
|
|
23
|
+
const mongoErr = asMongoError(err);
|
|
24
|
+
if (!mongoErr || mongoErr.code !== DUPLICATE_KEY_CODE)
|
|
25
|
+
return null;
|
|
26
|
+
// Preferred: the driver's structured key spec (`{ email: 1 }` etc.).
|
|
27
|
+
const keys = mongoErr.keyPattern ? Object.keys(mongoErr.keyPattern) : Object.keys(mongoErr.keyValue ?? {});
|
|
28
|
+
if (keys.includes('email'))
|
|
29
|
+
return 'EMAIL_TAKEN';
|
|
30
|
+
if (keys.includes('username'))
|
|
31
|
+
return 'USERNAME_TAKEN';
|
|
32
|
+
// Fallback: parse the index name out of the message
|
|
33
|
+
// (`... index: email_1 dup key: ...`).
|
|
34
|
+
const message = mongoErr.message ?? '';
|
|
35
|
+
if (/index:\s*email/i.test(message))
|
|
36
|
+
return 'EMAIL_TAKEN';
|
|
37
|
+
if (/index:\s*username/i.test(message))
|
|
38
|
+
return 'USERNAME_TAKEN';
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=map-duplicate-key-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-duplicate-key-error.js","sourceRoot":"","sources":["../../src/util/map-duplicate-key-error.ts"],"names":[],"mappings":";;AAkCA,kDAEC;AAQD,oDAgBC;AA1CD,yDAAyD;AACzD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AASjC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAiC,EAAE;IACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,GAA6B,CAAC;AACvC,CAAC,CAAC;AAEF,gEAAgE;AAChE,SAAgB,mBAAmB,CAAC,GAAY;IAC9C,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,kBAAkB,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAEnE,qEAAqE;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3G,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAEvD,oDAAoD;IACpD,uCAAuC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IAC1D,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAEhE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply the `mongoose-paginate-v2` plugin to a schema.
|
|
3
|
+
*
|
|
4
|
+
* mongoose-paginate-v2 types its default export as `(schema: Schema) => void`,
|
|
5
|
+
* which mongoose 8's generic `Schema.plugin()` does not accept directly; the
|
|
6
|
+
* plugin only augments the schema with `paginate`, so apply it against the
|
|
7
|
+
* schema's loosened base type. Centralized here so the cast + rationale live
|
|
8
|
+
* in one place rather than being repeated per model.
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyPaginatePlugin<TSchema>(schema: TSchema): void;
|
|
@@ -0,0 +1,23 @@
|
|
|
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.applyPaginatePlugin = applyPaginatePlugin;
|
|
7
|
+
const mongoose_paginate_v2_1 = __importDefault(require("mongoose-paginate-v2"));
|
|
8
|
+
/**
|
|
9
|
+
* Apply the `mongoose-paginate-v2` plugin to a schema.
|
|
10
|
+
*
|
|
11
|
+
* mongoose-paginate-v2 types its default export as `(schema: Schema) => void`,
|
|
12
|
+
* which mongoose 8's generic `Schema.plugin()` does not accept directly; the
|
|
13
|
+
* plugin only augments the schema with `paginate`, so apply it against the
|
|
14
|
+
* schema's loosened base type. Centralized here so the cast + rationale live
|
|
15
|
+
* in one place rather than being repeated per model.
|
|
16
|
+
*/
|
|
17
|
+
function applyPaginatePlugin(schema) {
|
|
18
|
+
// Widen the model's concrete schema to the base `Schema` so mongoose 8's
|
|
19
|
+
// generic `plugin()` accepts mongoose-paginate-v2's loosely-typed export.
|
|
20
|
+
// (Centralizes the cast that each model previously repeated inline.)
|
|
21
|
+
schema.plugin(mongoose_paginate_v2_1.default);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mongoose-paginate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoose-paginate.js","sourceRoot":"","sources":["../../src/util/mongoose-paginate.ts"],"names":[],"mappings":";;;;;AAYA,kDAKC;AAhBD,gFAAoD;AAEpD;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAU,MAAe;IAC1D,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACpE,MAA4B,CAAC,MAAM,CAAC,8BAAgB,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type NotificationsTokenPayload } from '@crowi/api-contract';
|
|
2
|
+
/** Claims signed into a notifications token. */
|
|
3
|
+
export interface NotificationsTokenClaims {
|
|
4
|
+
/**
|
|
5
|
+
* The requesting user's `_id`. The `/notifications/<userId>` WS
|
|
6
|
+
* handshake rejects a token whose `selfUserId` does not match the
|
|
7
|
+
* URL path segment so one user can never subscribe to another's
|
|
8
|
+
* channel even with a valid token.
|
|
9
|
+
*/
|
|
10
|
+
selfUserId: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SignNotificationsTokenResult {
|
|
13
|
+
/** Compact JWT string presented by the browser on the WebSocket connect. */
|
|
14
|
+
token: string;
|
|
15
|
+
/** Absolute expiry timestamp; mirrors `exp * 1000` as a Date. */
|
|
16
|
+
expiresAt: Date;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a sign / verify pair bound to a freshly resolved secret. Each
|
|
20
|
+
* `createNotificationsTokenUtil()` call returns a new instance — the
|
|
21
|
+
* util's surface (sign / verify) is cheap (a single jsonwebtoken call)
|
|
22
|
+
* so memoising is unnecessary, and the previous cached-singleton
|
|
23
|
+
* implementation pinned the secret to whatever env state existed at the
|
|
24
|
+
* first call (a problem for test / boot ordering: a `WS_TOKEN_SECRET`
|
|
25
|
+
* set after first util construction would be ignored).
|
|
26
|
+
*/
|
|
27
|
+
declare function buildNotificationsTokenUtil(): {
|
|
28
|
+
signNotificationsToken: (claims: NotificationsTokenClaims) => SignNotificationsTokenResult;
|
|
29
|
+
verifyNotificationsToken: (token: string) => NotificationsTokenPayload | null;
|
|
30
|
+
ttlSeconds: number;
|
|
31
|
+
issuer: string;
|
|
32
|
+
};
|
|
33
|
+
export type NotificationsTokenUtil = ReturnType<typeof buildNotificationsTokenUtil>;
|
|
34
|
+
export declare function createNotificationsTokenUtil(): NotificationsTokenUtil;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
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.createNotificationsTokenUtil = createNotificationsTokenUtil;
|
|
7
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
8
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
10
|
+
const debug_1 = __importDefault(require("debug"));
|
|
11
|
+
const debug = (0, debug_1.default)('crowi:util:notifications-token');
|
|
12
|
+
/**
|
|
13
|
+
* Issuer claim used to sign / verify notifications tokens.
|
|
14
|
+
*
|
|
15
|
+
* Distinct from the collab wsToken issuer (`'crowi-collab'`, see
|
|
16
|
+
* `util/ws-token.ts`), the presence token issuer (`'crowi-presence'`,
|
|
17
|
+
* see `util/presence-token.ts`), and the HTTP access/refresh token
|
|
18
|
+
* issuer (`'crowi'`). The three WebSocket issuers all share the same
|
|
19
|
+
* `WS_TOKEN_SECRET` key material but verify against different `iss`
|
|
20
|
+
* claims, so a leaked token for one channel is never replayable
|
|
21
|
+
* against the others — `/collab` carries write access to the Y.Doc,
|
|
22
|
+
* `/presence` is per-page viewer tracking, `/notifications` is the
|
|
23
|
+
* per-user invalidation channel.
|
|
24
|
+
*/
|
|
25
|
+
const NOTIFICATIONS_TOKEN_ISSUER = 'crowi-notifications';
|
|
26
|
+
/**
|
|
27
|
+
* Lifetime of an issued notifications token. 60 seconds — short enough
|
|
28
|
+
* that a leaked token has minimal blast radius (the notifications
|
|
29
|
+
* channel only carries `{type:'changed'}` ticks, no notification data,
|
|
30
|
+
* so a hijacked subscription is a low-value target but the principle
|
|
31
|
+
* of least privilege still applies). The browser uses `expiresAt` to
|
|
32
|
+
* proactively re-fetch ~30s before expiry; the realistic refresh
|
|
33
|
+
* cadence becomes ~30s rather than the 5-minute presence cadence.
|
|
34
|
+
*/
|
|
35
|
+
const NOTIFICATIONS_TOKEN_TTL_SECONDS = 60;
|
|
36
|
+
/**
|
|
37
|
+
* Tracks whether the "secret missing" warning has already been emitted,
|
|
38
|
+
* so it fires at most once per process regardless of how many
|
|
39
|
+
* `createNotificationsTokenUtil()` calls the handler / model layer makes.
|
|
40
|
+
*/
|
|
41
|
+
let warnedMissingSecret = false;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the signing secret. Reads `WS_TOKEN_SECRET` per call so a test
|
|
44
|
+
* that mutates the env between imports / util constructions still picks
|
|
45
|
+
* up the latest value.
|
|
46
|
+
*
|
|
47
|
+
* The "secret missing" warning is emitted here (lazily, on first
|
|
48
|
+
* resolution) rather than at module-load time: this module is imported
|
|
49
|
+
* transitively before `app.ts` runs `dotenv.config()`, so a load-time
|
|
50
|
+
* `process.env` read fires a false warning even when `.env` defines
|
|
51
|
+
* `WS_TOKEN_SECRET`. `warnedMissingSecret` keeps it to once per process.
|
|
52
|
+
* Silenced under tests.
|
|
53
|
+
*/
|
|
54
|
+
const resolveNotificationsTokenSecret = () => {
|
|
55
|
+
const fromEnv = process.env.WS_TOKEN_SECRET;
|
|
56
|
+
if (fromEnv && fromEnv.length > 0) {
|
|
57
|
+
debug('notifications token secret resolved from WS_TOKEN_SECRET');
|
|
58
|
+
return fromEnv;
|
|
59
|
+
}
|
|
60
|
+
if (!warnedMissingSecret && process.env.NODE_ENV !== 'test') {
|
|
61
|
+
warnedMissingSecret = true;
|
|
62
|
+
console.warn('[crowi] WS_TOKEN_SECRET is not set — notifications tokens will be signed with a random in-memory secret. ' +
|
|
63
|
+
'Process restarts will invalidate outstanding notifications tokens, and multi-instance deployments ' +
|
|
64
|
+
'will not be able to cross-verify them. Set WS_TOKEN_SECRET to a stable base64-encoded 32-byte ' +
|
|
65
|
+
'value (`openssl rand -base64 32`) in production.');
|
|
66
|
+
}
|
|
67
|
+
return node_crypto_1.default.randomBytes(32).toString('base64');
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Build a sign / verify pair bound to a freshly resolved secret. Each
|
|
71
|
+
* `createNotificationsTokenUtil()` call returns a new instance — the
|
|
72
|
+
* util's surface (sign / verify) is cheap (a single jsonwebtoken call)
|
|
73
|
+
* so memoising is unnecessary, and the previous cached-singleton
|
|
74
|
+
* implementation pinned the secret to whatever env state existed at the
|
|
75
|
+
* first call (a problem for test / boot ordering: a `WS_TOKEN_SECRET`
|
|
76
|
+
* set after first util construction would be ignored).
|
|
77
|
+
*/
|
|
78
|
+
function buildNotificationsTokenUtil() {
|
|
79
|
+
const secret = resolveNotificationsTokenSecret();
|
|
80
|
+
/**
|
|
81
|
+
* Sign a notifications token for the given claims. Returns the
|
|
82
|
+
* compact JWT plus the absolute expiry; the handler serialises the
|
|
83
|
+
* timestamp into `NotificationsTokenResponseSchema.expiresAt`.
|
|
84
|
+
*
|
|
85
|
+
* A fresh `jti` (random UUID) is mixed into the payload so two
|
|
86
|
+
* tokens minted within the same second are byte-different. The
|
|
87
|
+
* browser uses the token string as a react `useEffect` dependency
|
|
88
|
+
* (it dials the WebSocket whenever the token changes) — without a
|
|
89
|
+
* `jti`, the iat/exp pair is identical and the dep stays stable, so
|
|
90
|
+
* a re-mint at the same second does not trigger the effect. The
|
|
91
|
+
* verifier ignores `jti`, keeping the token stateless.
|
|
92
|
+
*/
|
|
93
|
+
function signNotificationsToken(claims) {
|
|
94
|
+
// Pin `iat` ourselves so the response's `expiresAt` is exactly the
|
|
95
|
+
// same instant as the JWT's `exp` claim (same rationale as the
|
|
96
|
+
// collab / presence token utils).
|
|
97
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
98
|
+
const exp = iat + NOTIFICATIONS_TOKEN_TTL_SECONDS;
|
|
99
|
+
const jti = node_crypto_1.default.randomUUID();
|
|
100
|
+
const token = jsonwebtoken_1.default.sign({ ...claims, jti, iat, exp }, secret, {
|
|
101
|
+
issuer: NOTIFICATIONS_TOKEN_ISSUER,
|
|
102
|
+
algorithm: 'HS256',
|
|
103
|
+
});
|
|
104
|
+
return { token, expiresAt: new Date(exp * 1000) };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Verify a notifications token. Returns the validated payload, or
|
|
108
|
+
* `null` for any failure (expired, bad signature, wrong issuer,
|
|
109
|
+
* malformed claims). Callers must treat `null` as "reject the
|
|
110
|
+
* connection".
|
|
111
|
+
*/
|
|
112
|
+
function verifyNotificationsToken(token) {
|
|
113
|
+
try {
|
|
114
|
+
const decoded = jsonwebtoken_1.default.verify(token, secret, {
|
|
115
|
+
issuer: NOTIFICATIONS_TOKEN_ISSUER,
|
|
116
|
+
algorithms: ['HS256'],
|
|
117
|
+
});
|
|
118
|
+
const parsed = api_contract_1.NotificationsTokenPayloadSchema.safeParse(decoded);
|
|
119
|
+
if (!parsed.success) {
|
|
120
|
+
debug('notifications token payload failed schema validation:', parsed.error.issues);
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return parsed.data;
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
debug('notifications token verification failed:', err.message);
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
signNotificationsToken,
|
|
132
|
+
verifyNotificationsToken,
|
|
133
|
+
ttlSeconds: NOTIFICATIONS_TOKEN_TTL_SECONDS,
|
|
134
|
+
issuer: NOTIFICATIONS_TOKEN_ISSUER,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function createNotificationsTokenUtil() {
|
|
138
|
+
return buildNotificationsTokenUtil();
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=notifications-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications-token.js","sourceRoot":"","sources":["../../src/util/notifications-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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.runOAuthClientSeed = runOAuthClientSeed;
|
|
7
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
8
|
+
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
const debug = (0, debug_1.default)('crowi:util:oauth-client-seed');
|
|
10
|
+
/**
|
|
11
|
+
* RFC-0010 Phase 3 — seed the first-party `crowi-cli` OAuth client.
|
|
12
|
+
*
|
|
13
|
+
* Idempotent boot step (PHASE3-Q2): `$setOnInsert` only writes on the very
|
|
14
|
+
* first run, so re-running boot — or upgrading an instance that already
|
|
15
|
+
* has the row — never clobbers an operator's later edits to the client.
|
|
16
|
+
* Modelled on the other boot-time init steps (it runs alongside the
|
|
17
|
+
* migration framework's `runBootMigrations`, but stays framework-external
|
|
18
|
+
* per RFC-0008 §12.6 — OAuth client seeding is a seed, not a migration).
|
|
19
|
+
*
|
|
20
|
+
* `crowi-cli` is a **public** client (no secret, PKCE-only). Its
|
|
21
|
+
* `redirectUris` list the loopback hosts; the per-login ephemeral port is
|
|
22
|
+
* matched at request time by `util/oauth-redirect-uri.ts`. It may request
|
|
23
|
+
* any issuable scope (catalog minus `admin:*`).
|
|
24
|
+
*/
|
|
25
|
+
const CROWI_CLI_CLIENT_ID = 'crowi-cli';
|
|
26
|
+
async function runOAuthClientSeed(crowi) {
|
|
27
|
+
const OAuthClient = crowi.model('OAuthClient');
|
|
28
|
+
const result = await OAuthClient.updateOne({ clientId: CROWI_CLI_CLIENT_ID }, {
|
|
29
|
+
$setOnInsert: {
|
|
30
|
+
clientId: CROWI_CLI_CLIENT_ID,
|
|
31
|
+
name: 'Crowi CLI',
|
|
32
|
+
type: 'public',
|
|
33
|
+
secretHash: null,
|
|
34
|
+
redirectUris: ['http://127.0.0.1', 'http://localhost'],
|
|
35
|
+
allowedScopes: [...api_contract_1.ISSUABLE_SCOPES],
|
|
36
|
+
firstParty: true,
|
|
37
|
+
trusted: false,
|
|
38
|
+
createdAt: new Date(),
|
|
39
|
+
},
|
|
40
|
+
}, { upsert: true });
|
|
41
|
+
if (result.upsertedCount) {
|
|
42
|
+
console.log(`[crowi] Seeded first-party OAuth client '${CROWI_CLI_CLIENT_ID}'.`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
debug('crowi-cli client already present — nothing to seed');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=oauth-client-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-client-seed.js","sourceRoot":"","sources":["../../src/util/oauth-client-seed.ts"],"names":[],"mappings":";;;;;AAwBA,gDA0BC;AAlDD,sDAAsD;AACtD,kDAA0B;AAI1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,8BAA8B,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAEjC,KAAK,UAAU,kBAAkB,CAAC,KAAY;IACnD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CACxC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EACjC;QACE,YAAY,EAAE;YACZ,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;YACtD,aAAa,EAAE,CAAC,GAAG,8BAAe,CAAC;YACnC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;KACF,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IAEF,IAAK,MAAqC,CAAC,aAAa,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,4CAA4C,mBAAmB,IAAI,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isRedirectUriAllowed = isRedirectUriAllowed;
|
|
4
|
+
/**
|
|
5
|
+
* RFC-0010 §Security — redirect_uri validation for the Auth Code flow.
|
|
6
|
+
*
|
|
7
|
+
* Two rules:
|
|
8
|
+
*
|
|
9
|
+
* - **Loopback** (`127.0.0.1` / `localhost`, http): allowed if the client
|
|
10
|
+
* registered a matching loopback host, *regardless of port*. Native /
|
|
11
|
+
* CLI clients bind an ephemeral loopback port per login (RFC 8252
|
|
12
|
+
* §7.3), so the port cannot be pre-registered; the host match is the
|
|
13
|
+
* security boundary.
|
|
14
|
+
* - **Everything else**: must match one of the client's `redirectUris`
|
|
15
|
+
* exactly (string equality), preventing open-redirect to an attacker
|
|
16
|
+
* origin.
|
|
17
|
+
*
|
|
18
|
+
* Anything that does not parse as a URL, or uses a non-http(s) scheme, is
|
|
19
|
+
* rejected.
|
|
20
|
+
*/
|
|
21
|
+
const LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '[::1]', '::1']);
|
|
22
|
+
function isLoopbackHost(hostname) {
|
|
23
|
+
return LOOPBACK_HOSTS.has(hostname);
|
|
24
|
+
}
|
|
25
|
+
function isRedirectUriAllowed(client, requestedUri) {
|
|
26
|
+
let requested;
|
|
27
|
+
try {
|
|
28
|
+
requested = new URL(requestedUri);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// Only http(s) callbacks. (Loopback CLI callbacks are http.)
|
|
34
|
+
if (requested.protocol !== 'http:' && requested.protocol !== 'https:') {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (isLoopbackHost(requested.hostname)) {
|
|
38
|
+
// Loopback: any registered loopback host of the same hostname matches,
|
|
39
|
+
// ignoring the (ephemeral) port. Path must still match if registered,
|
|
40
|
+
// but the seeded crowi-cli registers bare hosts so any path on the
|
|
41
|
+
// loopback host is accepted.
|
|
42
|
+
return client.redirectUris.some((registered) => {
|
|
43
|
+
try {
|
|
44
|
+
const reg = new URL(registered);
|
|
45
|
+
return isLoopbackHost(reg.hostname) && reg.hostname === requested.hostname && reg.protocol === requested.protocol;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Non-loopback: exact string match against a registered URI.
|
|
53
|
+
return client.redirectUris.includes(requestedUri);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=oauth-redirect-uri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-redirect-uri.js","sourceRoot":"","sources":["../../src/util/oauth-redirect-uri.ts"],"names":[],"mappings":";;AA0BA,oDA8BC;AAtDD;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3E,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAiD,EAAE,YAAoB;IAC1G,IAAI,SAAc,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,6BAA6B;QAC7B,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC;YACpH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { Revision, RevisionMetaShape } from '@crowi/api-contract';
|
|
2
|
+
import { Types } from 'mongoose';
|
|
3
|
+
import type Crowi from '../crowi';
|
|
4
|
+
import type { PageDocument } from '../models/page';
|
|
5
|
+
import { type RevisionMetaContent } from '../models/revision';
|
|
6
|
+
import { type PopulatedUser } from './ts-rest-helpers';
|
|
7
|
+
/**
|
|
8
|
+
* Shape of a populated `revision` field as it appears on Mongoose documents
|
|
9
|
+
* after `.populate('revision', ...)`. `path` mirrors `Page.path` and `body`
|
|
10
|
+
* is the markdown source. `author` may itself be populated (full user) or
|
|
11
|
+
* remain an `ObjectId` ref — we narrow with `isPopulatedUser` at the call
|
|
12
|
+
* site.
|
|
13
|
+
*/
|
|
14
|
+
export interface PopulatedRevision {
|
|
15
|
+
_id: Types.ObjectId;
|
|
16
|
+
path: string;
|
|
17
|
+
body: string;
|
|
18
|
+
format?: string;
|
|
19
|
+
author?: PopulatedUser | null;
|
|
20
|
+
createdAt?: Date;
|
|
21
|
+
meta?: RevisionMetaContent;
|
|
22
|
+
/** RFC-0002 Phase 3 — transformed mdast persisted verbatim. */
|
|
23
|
+
renderedAst?: unknown;
|
|
24
|
+
/** RFC-0002 round 3.1 — semver of the pipeline that produced `renderedAst`. */
|
|
25
|
+
rendererVersion?: string;
|
|
26
|
+
/** RFC-0010 — edit channel ('web' | 'oauth' | 'pat'); absent = web. */
|
|
27
|
+
editVia?: 'web' | 'oauth' | 'pat';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Looser shape than `PageDocument`: covers both Mongoose documents and the
|
|
31
|
+
* plain objects produced by `.toObject()` / `.lean()`. Every field is
|
|
32
|
+
* optional except `_id` + `path` so populated and unpopulated views (e.g.
|
|
33
|
+
* search hit pre-populate) both fit.
|
|
34
|
+
*/
|
|
35
|
+
export interface PageLike {
|
|
36
|
+
_id: Types.ObjectId | string;
|
|
37
|
+
path: string;
|
|
38
|
+
revision?: PopulatedRevision | Types.ObjectId | null;
|
|
39
|
+
redirectTo?: string | null;
|
|
40
|
+
status?: string | null;
|
|
41
|
+
grant?: number;
|
|
42
|
+
grantedUsers?: (Types.ObjectId | string)[];
|
|
43
|
+
creator?: PopulatedUser | Types.ObjectId | null;
|
|
44
|
+
lastUpdateUser?: PopulatedUser | Types.ObjectId | null;
|
|
45
|
+
liker?: (Types.ObjectId | string)[];
|
|
46
|
+
commentCount?: number;
|
|
47
|
+
extended?: Record<string, unknown>;
|
|
48
|
+
createdAt?: Date;
|
|
49
|
+
updatedAt?: Date;
|
|
50
|
+
latestRevision?: Types.ObjectId | string;
|
|
51
|
+
likerCount?: number;
|
|
52
|
+
seenUsersCount?: number;
|
|
53
|
+
toObject?: () => PageLike;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Heuristic: a `revision` field is populated when it has the `_id` + `path`
|
|
57
|
+
* + `body` triplet. Plain `ObjectId` refs only carry `_id`.
|
|
58
|
+
*/
|
|
59
|
+
export declare const isPopulatedRevision: (value: unknown) => value is PopulatedRevision;
|
|
60
|
+
export interface RevisionResponseOptions {
|
|
61
|
+
/**
|
|
62
|
+
* Emit `revision.meta` (currently just `meta.toc`). Off by default —
|
|
63
|
+
* only single-revision read paths (getPage, getRevision) consume it.
|
|
64
|
+
* List endpoints (listPages, search hits, recently-viewed, bookmarks,
|
|
65
|
+
* me) skip it: the TOC adds payload weight without being rendered.
|
|
66
|
+
*/
|
|
67
|
+
withMeta?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* RFC-0002 Phase 3: emit `revision.renderedAst` (transformed mdast
|
|
70
|
+
* the web client renders directly). Off by default — list endpoints
|
|
71
|
+
* skip it because the AST is 5-10x the body size in JSON form.
|
|
72
|
+
* Only single-page detail (getPage) and single-revision detail
|
|
73
|
+
* (getRevision) opt in. Legacy revisions without a stored
|
|
74
|
+
* `renderedAst` are filled in by `computeRevisionRenderedAstAsync`.
|
|
75
|
+
*/
|
|
76
|
+
withRenderedAst?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export declare const toRevisionResponse: (revision: PopulatedRevision, options?: RevisionResponseOptions) => Revision;
|
|
79
|
+
export declare const resolveRevisionMeta: (stored: RevisionMetaContent | undefined, emit: boolean | undefined) => RevisionMetaShape | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Async fallback compute for revision render artifacts (meta +
|
|
82
|
+
* renderedAst). Detail endpoints (getPage, getRevision) call this AFTER
|
|
83
|
+
* `pageToResponse` so the projection path stays sync; meta + AST get
|
|
84
|
+
* attached to the populated revision response in one go.
|
|
85
|
+
*
|
|
86
|
+
* Why one call instead of two: legacy revisions (Phase 1: only `toc`
|
|
87
|
+
* stored / Phase 2: meta but no `renderedAst`) would otherwise trigger
|
|
88
|
+
* back-to-back `runMetadata` + `runRender` invocations, each running a
|
|
89
|
+
* full parse+transform+shiki pipeline on the same body. `runRender`
|
|
90
|
+
* already produces both, so fold the calls into one and pull the
|
|
91
|
+
* needed pieces out.
|
|
92
|
+
*
|
|
93
|
+
* Stored values stay authoritative on merge: Phase 1's `toc` (the
|
|
94
|
+
* anchor ids the heading stamper aligns against) wins over recomputed
|
|
95
|
+
* ones, and a stored `renderedAst` is returned verbatim without
|
|
96
|
+
* re-rendering.
|
|
97
|
+
*/
|
|
98
|
+
export declare const computeRevisionRenderArtifactsAsync: (crowi: Crowi, storedMeta: RevisionMetaContent | undefined, storedAst: unknown, body: string, storedRendererVersion?: string, pageId?: string) => Promise<{
|
|
99
|
+
meta?: RevisionMetaShape;
|
|
100
|
+
renderedAst?: unknown;
|
|
101
|
+
}>;
|
|
102
|
+
export type PageToResponseOptions = RevisionResponseOptions;
|
|
103
|
+
/**
|
|
104
|
+
* Project a populated Page document (or plain `PageLike`) into the contract
|
|
105
|
+
* Page shape. Unpopulated refs collapse safely:
|
|
106
|
+
* - revision: ObjectId-ref → undefined
|
|
107
|
+
* - creator / lastUpdateUser: ObjectId-ref → null
|
|
108
|
+
*
|
|
109
|
+
* Returns `any` because the runtime shape satisfies either `Page` or
|
|
110
|
+
* `PageWithRevision` depending on whether revision was populated; ts-rest
|
|
111
|
+
* contracts pin one or the other and each handler narrows at its return.
|
|
112
|
+
*/
|
|
113
|
+
export declare const pageToResponse: (page: PageDocument | PageLike, options?: PageToResponseOptions) => any;
|