@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,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadGrantedPage = exports.internalServerErrorResponse = exports.invalidPageIdResponse = exports.pageNotFoundResponse = exports.isPopulatedUser = exports.isValidObjectId = exports.toUserPublic = exports.toPageUser = exports.toStringId = exports.toISOStringOrNull = void 0;
|
|
4
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
5
|
+
const toISOStringOrNull = (date) => {
|
|
6
|
+
if (!date)
|
|
7
|
+
return null;
|
|
8
|
+
return date instanceof Date ? date.toISOString() : String(date);
|
|
9
|
+
};
|
|
10
|
+
exports.toISOStringOrNull = toISOStringOrNull;
|
|
11
|
+
const toStringId = (id) => {
|
|
12
|
+
return typeof id === 'string' ? id : id.toString();
|
|
13
|
+
};
|
|
14
|
+
exports.toStringId = toStringId;
|
|
15
|
+
const toPageUser = (user) => ({
|
|
16
|
+
_id: user._id.toString(),
|
|
17
|
+
id: user._id.toString(),
|
|
18
|
+
username: user.username,
|
|
19
|
+
name: user.name,
|
|
20
|
+
email: user.email,
|
|
21
|
+
image: user.image || null,
|
|
22
|
+
createdAt: (0, exports.toISOStringOrNull)(user.createdAt) || new Date().toISOString(),
|
|
23
|
+
});
|
|
24
|
+
exports.toPageUser = toPageUser;
|
|
25
|
+
const KNOWN_USER_STATUSES = new Set(Object.values(api_contract_1.UserPublicStatus));
|
|
26
|
+
/**
|
|
27
|
+
* Narrow Mongo's `status: number` to the typed enum on the wire. Hand-edited
|
|
28
|
+
* rows or pre-migration data outside 1..5 collapse to `undefined` so the
|
|
29
|
+
* response still satisfies the schema instead of 500-ing in the response
|
|
30
|
+
* validator.
|
|
31
|
+
*/
|
|
32
|
+
const toUserStatus = (status) => {
|
|
33
|
+
return status !== undefined && KNOWN_USER_STATUSES.has(status) ? status : undefined;
|
|
34
|
+
};
|
|
35
|
+
const toUserPublic = (user) => ({
|
|
36
|
+
_id: (0, exports.toStringId)(user._id),
|
|
37
|
+
id: (0, exports.toStringId)(user._id),
|
|
38
|
+
username: user.username ?? '',
|
|
39
|
+
name: user.name ?? '',
|
|
40
|
+
email: user.email ?? '',
|
|
41
|
+
image: user.image ?? null,
|
|
42
|
+
introduction: user.introduction ?? '',
|
|
43
|
+
createdAt: (0, exports.toISOStringOrNull)(user.createdAt) ?? new Date().toISOString(),
|
|
44
|
+
admin: user.admin ?? false,
|
|
45
|
+
status: toUserStatus(user.status),
|
|
46
|
+
});
|
|
47
|
+
exports.toUserPublic = toUserPublic;
|
|
48
|
+
/**
|
|
49
|
+
* Strict 24-character hex string check for Mongo ObjectId.
|
|
50
|
+
* `Types.ObjectId.isValid()` accepts 12-byte buffers and other formats; we
|
|
51
|
+
* only accept the canonical hex string used in URLs and request bodies.
|
|
52
|
+
*/
|
|
53
|
+
const isValidObjectId = (id) => typeof id === 'string' && /^[0-9a-f]{24}$/.test(id);
|
|
54
|
+
exports.isValidObjectId = isValidObjectId;
|
|
55
|
+
/**
|
|
56
|
+
* Heuristic for "this is a populated user document, not just an ObjectId".
|
|
57
|
+
* The 4 ts-rest routes all need this; the loose form (only _id + username +
|
|
58
|
+
* email) covers all current call sites.
|
|
59
|
+
*/
|
|
60
|
+
const isPopulatedUser = (value) => {
|
|
61
|
+
return !!value && typeof value === 'object' && '_id' in value && 'username' in value && 'email' in value;
|
|
62
|
+
};
|
|
63
|
+
exports.isPopulatedUser = isPopulatedUser;
|
|
64
|
+
/**
|
|
65
|
+
* Standard 404 for "page not found OR not granted". Mapped to 404 (not 403)
|
|
66
|
+
* so we do not leak page existence to callers without grant.
|
|
67
|
+
*/
|
|
68
|
+
exports.pageNotFoundResponse = {
|
|
69
|
+
status: 404,
|
|
70
|
+
body: { error: { code: 'PAGE_NOT_FOUND', message: 'Page not found' } },
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Standard 400 for an invalid page_id (not 24-char hex).
|
|
74
|
+
*/
|
|
75
|
+
exports.invalidPageIdResponse = {
|
|
76
|
+
status: 400,
|
|
77
|
+
body: { error: { code: 'INVALID_PAGE_ID', message: 'Invalid page_id' } },
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Standard 500 for an unexpected handler failure. Used by every admin
|
|
81
|
+
* handler that wraps its body in try/catch and needs to surface a typed
|
|
82
|
+
* `InternalServerError` shape (see `schemas/common.ts:InternalServerErrorSchema`).
|
|
83
|
+
*/
|
|
84
|
+
exports.internalServerErrorResponse = {
|
|
85
|
+
status: 500,
|
|
86
|
+
body: { error: { code: 'INTERNAL_ERROR', message: 'Internal server error' } },
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Validate `pageId` and resolve a granted Page document, or return the
|
|
90
|
+
* standard 400 / 404 response otherwise. Centralises the
|
|
91
|
+
* isValidObjectId + findPageByIdAndGrantedUser + leak-prevention catch
|
|
92
|
+
* pattern that ts-rest page-related routes (page / bookmark / comment /
|
|
93
|
+
* revision / notification) all need.
|
|
94
|
+
*/
|
|
95
|
+
const loadGrantedPage = async (Page, pageId, user) => {
|
|
96
|
+
if (!(0, exports.isValidObjectId)(pageId)) {
|
|
97
|
+
return { error: exports.invalidPageIdResponse };
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const page = await Page.findPageByIdAndGrantedUser(pageId, user);
|
|
101
|
+
if (!page)
|
|
102
|
+
return { error: exports.pageNotFoundResponse };
|
|
103
|
+
return { page };
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return { error: exports.pageNotFoundResponse };
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.loadGrantedPage = loadGrantedPage;
|
|
110
|
+
//# sourceMappingURL=ts-rest-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-rest-helpers.js","sourceRoot":"","sources":["../../src/util/ts-rest-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getContinueUrl: (req?: any) => any;
|
package/dist/util/url.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getContinueUrl = void 0;
|
|
4
|
+
const getContinueUrl = (req = {}) => {
|
|
5
|
+
const { body = {}, query = {} } = req;
|
|
6
|
+
const url = body.continue || query.continue;
|
|
7
|
+
const continueUrl = /^(?![/\\]{2,})\/.*$/.test(url) ? url : '/';
|
|
8
|
+
return continueUrl;
|
|
9
|
+
};
|
|
10
|
+
exports.getContinueUrl = getContinueUrl;
|
|
11
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/util/url.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,MAAW,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;IAC5C,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEhE,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Generate a fresh `ABCD-1234`-form user code (uniqueness enforced by caller). */
|
|
2
|
+
export declare function generateUserCode(): string;
|
|
3
|
+
/**
|
|
4
|
+
* Normalise a user-entered code for lookup: upper-case, strip everything that
|
|
5
|
+
* is not an allowed letter/digit (spaces, dashes, etc.), then re-insert the
|
|
6
|
+
* canonical dash after the 4th character when the length matches. This lets a
|
|
7
|
+
* user type `abcd1234`, `abcd-1234`, or `ABCD 1234` and still match the
|
|
8
|
+
* stored `ABCD-1234`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeUserCode(input: string): string;
|
|
@@ -0,0 +1,55 @@
|
|
|
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.generateUserCode = generateUserCode;
|
|
7
|
+
exports.normalizeUserCode = normalizeUserCode;
|
|
8
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
9
|
+
/**
|
|
10
|
+
* RFC-0010 Phase 4 (RFC 8628 §6.1) — human-typed `user_code` generation.
|
|
11
|
+
*
|
|
12
|
+
* The user types this code into `/oauth/device` on a second device, so the
|
|
13
|
+
* alphabet deliberately drops ambiguous glyphs:
|
|
14
|
+
*
|
|
15
|
+
* - vowels (A E I O U) — avoids accidentally spelling words.
|
|
16
|
+
* - look-alikes 0/O, 1/I/L — removed from the letter set; digits 0-9 are
|
|
17
|
+
* kept but the letters that resemble them are not, so a `0` is always a
|
|
18
|
+
* digit and an `I` never appears.
|
|
19
|
+
*
|
|
20
|
+
* Format is `ABCD-1234` (4 letters + dash + 4 digits). Uniqueness is the
|
|
21
|
+
* caller's responsibility: the `OAuthDeviceCode` model has a unique index on
|
|
22
|
+
* `userCode` and retries generation on a duplicate-key error.
|
|
23
|
+
*/
|
|
24
|
+
/** Consonant-only letters, ambiguous glyphs removed (RFC 8628 §6.1). `L` is
|
|
25
|
+
* dropped too — it reads as `1`/`I` in many fonts. */
|
|
26
|
+
const USER_CODE_LETTERS = 'BCDFGHJKMNPQRSTVWXZ';
|
|
27
|
+
const USER_CODE_DIGITS = '0123456789';
|
|
28
|
+
const LETTER_COUNT = 4;
|
|
29
|
+
const DIGIT_COUNT = 4;
|
|
30
|
+
function pick(alphabet, count) {
|
|
31
|
+
let out = '';
|
|
32
|
+
for (let i = 0; i < count; i += 1) {
|
|
33
|
+
out += alphabet[node_crypto_1.default.randomInt(alphabet.length)];
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
/** Generate a fresh `ABCD-1234`-form user code (uniqueness enforced by caller). */
|
|
38
|
+
function generateUserCode() {
|
|
39
|
+
return `${pick(USER_CODE_LETTERS, LETTER_COUNT)}-${pick(USER_CODE_DIGITS, DIGIT_COUNT)}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Normalise a user-entered code for lookup: upper-case, strip everything that
|
|
43
|
+
* is not an allowed letter/digit (spaces, dashes, etc.), then re-insert the
|
|
44
|
+
* canonical dash after the 4th character when the length matches. This lets a
|
|
45
|
+
* user type `abcd1234`, `abcd-1234`, or `ABCD 1234` and still match the
|
|
46
|
+
* stored `ABCD-1234`.
|
|
47
|
+
*/
|
|
48
|
+
function normalizeUserCode(input) {
|
|
49
|
+
const cleaned = input.toUpperCase().replace(/[^A-Z0-9]/g, '');
|
|
50
|
+
if (cleaned.length === LETTER_COUNT + DIGIT_COUNT) {
|
|
51
|
+
return `${cleaned.slice(0, LETTER_COUNT)}-${cleaned.slice(LETTER_COUNT)}`;
|
|
52
|
+
}
|
|
53
|
+
return cleaned;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=user-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-code.js","sourceRoot":"","sources":["../../src/util/user-code.ts"],"names":[],"mappings":";;;;;AAkCA,4CAEC;AASD,8CAMC;AAnDD,8DAAiC;AAEjC;;;;;;;;;;;;;;GAcG;AAEH;sDACsD;AACtD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAChD,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,IAAI,CAAC,QAAgB,EAAE,KAAa;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,GAAG,IAAI,QAAQ,CAAC,qBAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mFAAmF;AACnF,SAAgB,gBAAgB;IAC9B,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,GAAG,WAAW,EAAE,CAAC;QAClD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Crowi from '../crowi';
|
|
2
|
+
import { AppContext } from 'src/types/appContext';
|
|
3
|
+
export declare const parentPath: (path: string) => string;
|
|
4
|
+
export declare const isUserPageList: (path: string) => boolean;
|
|
5
|
+
export declare const isUserPage: (path: string) => boolean;
|
|
6
|
+
export declare const isTopPage: (path: string) => path is "/";
|
|
7
|
+
export declare const isTrashPage: (path: string) => boolean;
|
|
8
|
+
export declare const userPageRoot: (user: any) => string;
|
|
9
|
+
export declare const picture: (user: any) => any;
|
|
10
|
+
export declare const getAppContext: (crowi: Crowi, req: any) => AppContext;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAppContext = exports.picture = exports.userPageRoot = exports.isTrashPage = exports.isTopPage = exports.isUserPage = exports.isUserPageList = exports.parentPath = void 0;
|
|
4
|
+
const config_1 = require("../models/config");
|
|
5
|
+
// Static functions related to view used by swig (functions and filters) and react
|
|
6
|
+
const parentPath = (path) => {
|
|
7
|
+
if (path === '/' || path.match(/.+\/$/)) {
|
|
8
|
+
return path;
|
|
9
|
+
}
|
|
10
|
+
return path + '/';
|
|
11
|
+
};
|
|
12
|
+
exports.parentPath = parentPath;
|
|
13
|
+
const isUserPageList = (path) => /^\/user\/[^/]+\/$/.test(path) || /^\/user\/$/.test(path);
|
|
14
|
+
exports.isUserPageList = isUserPageList;
|
|
15
|
+
const isUserPage = (path) => /^\/user\/[^/]+$/.test(path);
|
|
16
|
+
exports.isUserPage = isUserPage;
|
|
17
|
+
const isTopPage = (path) => path === '/';
|
|
18
|
+
exports.isTopPage = isTopPage;
|
|
19
|
+
const isTrashPage = (path) => /^\/trash\/.*/.test(path);
|
|
20
|
+
exports.isTrashPage = isTrashPage;
|
|
21
|
+
const userPageRoot = (user) => {
|
|
22
|
+
if (!user || !user.username) {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
return '/user/' + user.username;
|
|
26
|
+
};
|
|
27
|
+
exports.userPageRoot = userPageRoot;
|
|
28
|
+
const picture = (user) => {
|
|
29
|
+
if (!user) {
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
if (user.image && user.image != '/images/userpicture.png') {
|
|
33
|
+
return user.image;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return '/images/userpicture.png';
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.picture = picture;
|
|
40
|
+
const getUserContext = (req) => {
|
|
41
|
+
const { _id = null, name = '', username = '', image = '', email = null, googleId = null, githubId = null, admin = false, lang = '' } = req.user || {};
|
|
42
|
+
return {
|
|
43
|
+
_id,
|
|
44
|
+
name,
|
|
45
|
+
username,
|
|
46
|
+
image,
|
|
47
|
+
email,
|
|
48
|
+
googleId,
|
|
49
|
+
githubId,
|
|
50
|
+
admin,
|
|
51
|
+
language: lang,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const getConfigContext = (config) => {
|
|
55
|
+
const { crowi } = config || {};
|
|
56
|
+
return {
|
|
57
|
+
crowi: {
|
|
58
|
+
'app:confidential': crowi['app:confidential'] || null,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const getAppContext = (crowi, req) => {
|
|
63
|
+
const config = req.config;
|
|
64
|
+
const env = crowi.getEnv();
|
|
65
|
+
const Config = crowi.model('Config');
|
|
66
|
+
return {
|
|
67
|
+
title: (config.crowi['app:title'] || 'Crowi'),
|
|
68
|
+
path: req.path || '',
|
|
69
|
+
url: config.crowi['app:url'] || '',
|
|
70
|
+
auth: {
|
|
71
|
+
requireThirdPartyAuth: (0, config_1.isRequiredThirdPartyAuth)(config),
|
|
72
|
+
canDisconnectThirdPartyId: req.user ? req.user.canDisconnectThirdPartyId() : false,
|
|
73
|
+
disablePasswordAuth: (0, config_1.isDisabledPasswordAuth)(config),
|
|
74
|
+
providers: {
|
|
75
|
+
google: (0, config_1.googleLoginEnabled)(config),
|
|
76
|
+
github: (0, config_1.githubLoginEnabled)(config),
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
upload: {
|
|
80
|
+
image: Config.isUploadable(),
|
|
81
|
+
file: Config.isUploadable(),
|
|
82
|
+
},
|
|
83
|
+
search: {
|
|
84
|
+
isConfigured: !!crowi.getSearcher(),
|
|
85
|
+
},
|
|
86
|
+
security: {
|
|
87
|
+
registrationWhiteList: config.crowi['security:registrationWhiteList'] || [],
|
|
88
|
+
},
|
|
89
|
+
user: getUserContext(req),
|
|
90
|
+
env: {
|
|
91
|
+
PLANTUML_URI: env.PLANTUML_URI || null,
|
|
92
|
+
MATHJAX: env.MATHJAX || null,
|
|
93
|
+
},
|
|
94
|
+
config: getConfigContext(config),
|
|
95
|
+
csrfToken: req.csrfToken,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
exports.getAppContext = getAppContext;
|
|
99
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/util/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
/**
|
|
3
|
+
* feature-watch-autosubscribe — one-shot WATCH backfill for pages that
|
|
4
|
+
* predate auto-watch.
|
|
5
|
+
*
|
|
6
|
+
* Auto-watch only materialises `Watcher(STATUS_WATCH)` rows for *future*
|
|
7
|
+
* participation (create / edit / comment — see `util/auto-watch.ts`). The
|
|
8
|
+
* notification fan-out is now watcher-only
|
|
9
|
+
* (`models/activity.ts:getNotificationTargetUsers`), so pages created
|
|
10
|
+
* before auto-watch landed have no watcher rows and their past
|
|
11
|
+
* participants silently stop being notified.
|
|
12
|
+
*
|
|
13
|
+
* This walks every non-redirect page and materialises a WATCH row for its
|
|
14
|
+
* implicit pre-watcher notification set — creator + comment authors +
|
|
15
|
+
* revision authors, exactly what `Page.getNotificationTargetUsers()`
|
|
16
|
+
* returned and the old fan-out used. It reuses `autoWatchPage`, so an
|
|
17
|
+
* existing IGNORE opt-out is respected and existing WATCH rows are left
|
|
18
|
+
* untouched. Idempotent: a second run creates nothing.
|
|
19
|
+
*
|
|
20
|
+
* Run via `crowi-admin watcher backfill [--dry-run]`.
|
|
21
|
+
*/
|
|
22
|
+
export interface WatcherBackfillSummary {
|
|
23
|
+
pagesScanned: number;
|
|
24
|
+
/** WATCH rows created — or, in dry-run, that WOULD be created. */
|
|
25
|
+
watchersCreated: number;
|
|
26
|
+
dryRun: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function runWatcherBackfill(crowi: Crowi, opts?: {
|
|
29
|
+
dryRun?: boolean;
|
|
30
|
+
}): Promise<WatcherBackfillSummary>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runWatcherBackfill = runWatcherBackfill;
|
|
4
|
+
const auto_watch_1 = require("./auto-watch");
|
|
5
|
+
async function runWatcherBackfill(crowi, opts = {}) {
|
|
6
|
+
const dryRun = Boolean(opts.dryRun);
|
|
7
|
+
const Page = crowi.model('Page');
|
|
8
|
+
const Watcher = crowi.model('Watcher');
|
|
9
|
+
let pagesScanned = 0;
|
|
10
|
+
let watchersCreated = 0;
|
|
11
|
+
// Redirect stubs never notify, so skip them. Cursor so a large
|
|
12
|
+
// collection doesn't have to fit in memory.
|
|
13
|
+
const cursor = Page.find({ redirectTo: null }).cursor();
|
|
14
|
+
for (let page = await cursor.next(); page != null; page = await cursor.next()) {
|
|
15
|
+
pagesScanned++;
|
|
16
|
+
// creator + comment authors + revision authors (already de-duped).
|
|
17
|
+
const targets = (await page.getNotificationTargetUsers());
|
|
18
|
+
const seen = new Set();
|
|
19
|
+
const pageId = page._id;
|
|
20
|
+
for (const userId of targets) {
|
|
21
|
+
if (!userId)
|
|
22
|
+
continue;
|
|
23
|
+
const key = String(userId);
|
|
24
|
+
if (seen.has(key))
|
|
25
|
+
continue;
|
|
26
|
+
seen.add(key);
|
|
27
|
+
if (dryRun) {
|
|
28
|
+
// Mirror autoWatchPage's predicate without writing: a WATCH would
|
|
29
|
+
// be created only when no Watcher row (WATCH or IGNORE) exists.
|
|
30
|
+
const existing = await Watcher.findByUserIdAndTargetId(userId, pageId);
|
|
31
|
+
if (!existing)
|
|
32
|
+
watchersCreated++;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const { newlyWatching } = await (0, auto_watch_1.autoWatchPage)(Watcher, userId, pageId);
|
|
36
|
+
if (newlyWatching)
|
|
37
|
+
watchersCreated++;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { pagesScanned, watchersCreated, dryRun };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=watcher-backfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher-backfill.js","sourceRoot":"","sources":["../../src/util/watcher-backfill.ts"],"names":[],"mappings":";;AA+BA,gDAsCC;AAnED,6CAA6C;AA6BtC,KAAK,UAAU,kBAAkB,CAAC,KAAY,EAAE,OAA6B,EAAE;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,+DAA+D;IAC/D,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,KAAK,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9E,YAAY,EAAE,CAAC;QAEf,mEAAmE;QACnE,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAA6C,CAAC;QACtG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAqB,CAAC;QAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEd,IAAI,MAAM,EAAE,CAAC;gBACX,kEAAkE;gBAClE,gEAAgE;gBAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,CAAC,QAAQ;oBAAE,eAAe,EAAE,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,0BAAa,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,aAAa;oBAAE,eAAe,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type WsTokenPayload } from '@crowi/api-contract';
|
|
2
|
+
/**
|
|
3
|
+
* Claims signed into the wsToken. The exported runtime schema lives in
|
|
4
|
+
* `@crowi/api-contract` (`WsTokenPayloadSchema`) — Phase 3 Hocuspocus
|
|
5
|
+
* code parses the verified payload through the same schema, so the
|
|
6
|
+
* shape only has one source of truth.
|
|
7
|
+
*/
|
|
8
|
+
export interface WsTokenClaims {
|
|
9
|
+
userId: string;
|
|
10
|
+
pageId: string;
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface SignWsTokenResult {
|
|
14
|
+
/** Compact JWT string presented by the browser provider on connect. */
|
|
15
|
+
token: string;
|
|
16
|
+
/** ISO 8601 expiry timestamp, mirrors `exp * 1000` as a Date. */
|
|
17
|
+
expiresAt: Date;
|
|
18
|
+
}
|
|
19
|
+
export declare function createWsTokenUtil(): {
|
|
20
|
+
signWsToken: (claims: WsTokenClaims) => SignWsTokenResult;
|
|
21
|
+
verifyWsToken: (token: string) => WsTokenPayload | null;
|
|
22
|
+
ttlSeconds: number;
|
|
23
|
+
issuer: string;
|
|
24
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
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.createWsTokenUtil = createWsTokenUtil;
|
|
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:ws-token');
|
|
12
|
+
/**
|
|
13
|
+
* Issuer claim used to sign / verify wsTokens. Distinct from the
|
|
14
|
+
* access/refresh token issuer (`'crowi'`) so a leaked access-token
|
|
15
|
+
* secret can never be replayed against Hocuspocus, and a leaked
|
|
16
|
+
* wsToken secret can never be replayed against the HTTP JWT auth.
|
|
17
|
+
*/
|
|
18
|
+
const WS_TOKEN_ISSUER = 'crowi-collab';
|
|
19
|
+
/**
|
|
20
|
+
* Lifetime of an issued wsToken. Hocuspocus refuses tokens whose `exp`
|
|
21
|
+
* has passed; the browser provider uses `expiresAt` to proactively
|
|
22
|
+
* refresh well before the WebSocket would otherwise be torn down.
|
|
23
|
+
* Five minutes is short enough that a leaked token has limited blast
|
|
24
|
+
* radius and long enough to cover typical reconnect storms.
|
|
25
|
+
*/
|
|
26
|
+
const WS_TOKEN_TTL_SECONDS = 300;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the WS_TOKEN_SECRET once per util instance:
|
|
29
|
+
*
|
|
30
|
+
* - If `WS_TOKEN_SECRET` is set in the env, use it as-is. Operators
|
|
31
|
+
* are expected to share the same value across api + Hocuspocus +
|
|
32
|
+
* all multi-instance deployments (see RFC-0003 §Phase 9 docs).
|
|
33
|
+
* - Otherwise, generate a 32-byte random secret in-memory and log a
|
|
34
|
+
* warning. The process can still sign and verify its own tokens
|
|
35
|
+
* (closure-stable), but **process restarts invalidate all
|
|
36
|
+
* outstanding tokens** and **other instances cannot verify them**.
|
|
37
|
+
*
|
|
38
|
+
* The base64 encoding matches the existing `CROWI_ENCRYPTION_KEY`
|
|
39
|
+
* convention so operators have a single mental model for "key
|
|
40
|
+
* material" envs.
|
|
41
|
+
*/
|
|
42
|
+
const resolveWsTokenSecret = () => {
|
|
43
|
+
const fromEnv = process.env.WS_TOKEN_SECRET;
|
|
44
|
+
if (fromEnv && fromEnv.length > 0) {
|
|
45
|
+
debug('WS_TOKEN_SECRET resolved from env');
|
|
46
|
+
return fromEnv;
|
|
47
|
+
}
|
|
48
|
+
const generated = node_crypto_1.default.randomBytes(32).toString('base64');
|
|
49
|
+
console.warn('[crowi] WS_TOKEN_SECRET is not set — generated a random secret in-memory. ' +
|
|
50
|
+
'Process restarts will invalidate all outstanding wsTokens, and multi-instance ' +
|
|
51
|
+
'deployments will not be able to cross-verify tokens. Set WS_TOKEN_SECRET to ' +
|
|
52
|
+
'a stable base64-encoded 32-byte value (`openssl rand -base64 32`) in production.');
|
|
53
|
+
return generated;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Build a sign / verify pair bound to a single resolved secret. Crowi
|
|
57
|
+
* boots once per process, so the closure-captured secret is stable for
|
|
58
|
+
* the lifetime of the process; both the HTTP handler and the Hocuspocus
|
|
59
|
+
* `onAuthenticate` hook use the same factory so sign / verify can never
|
|
60
|
+
* drift apart in a single process.
|
|
61
|
+
*
|
|
62
|
+
* When `WS_TOKEN_SECRET` is unset, `resolveWsTokenSecret` generates a
|
|
63
|
+
* fresh random secret per invocation. Two `createWsTokenUtil()` calls in
|
|
64
|
+
* the same process would otherwise close over *different* random
|
|
65
|
+
* secrets, which silently breaks HTTP-sign / Hocuspocus-verify in dev.
|
|
66
|
+
* Memoise the factory result so every caller in the process shares one
|
|
67
|
+
* closure (= one secret) regardless of when they call.
|
|
68
|
+
*
|
|
69
|
+
* The secret is read directly from `process.env.WS_TOKEN_SECRET` (not
|
|
70
|
+
* via `crowi.getConfig()`) on purpose — out-of-band Hocuspocus
|
|
71
|
+
* deployments read the same env, so env is the single source of truth
|
|
72
|
+
* for cross-process secret distribution. This intentionally diverges
|
|
73
|
+
* from `createJwtUtil(crowi)`, which reads from config to allow
|
|
74
|
+
* admin-UI rotation.
|
|
75
|
+
*/
|
|
76
|
+
let cachedUtil = null;
|
|
77
|
+
function buildWsTokenUtil() {
|
|
78
|
+
const secret = resolveWsTokenSecret();
|
|
79
|
+
/**
|
|
80
|
+
* Sign a wsToken for the given claims. Returns the compact JWT plus
|
|
81
|
+
* the absolute ISO expiry; callers serialise the timestamp into the
|
|
82
|
+
* wire payload (`WsTokenResponseSchema.expiresAt`).
|
|
83
|
+
*/
|
|
84
|
+
function signWsToken(claims) {
|
|
85
|
+
// Pin `iat` ourselves so the response's `expiresAt` is **exactly**
|
|
86
|
+
// the same instant as the JWT's `exp` claim — recomputing from
|
|
87
|
+
// `Date.now()` after `jwt.sign(...)` would drift by ~1ms and made
|
|
88
|
+
// proactive-refresh logic harder to reason about.
|
|
89
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
90
|
+
const exp = iat + WS_TOKEN_TTL_SECONDS;
|
|
91
|
+
const token = jsonwebtoken_1.default.sign({ ...claims, iat, exp }, secret, {
|
|
92
|
+
issuer: WS_TOKEN_ISSUER,
|
|
93
|
+
algorithm: 'HS256',
|
|
94
|
+
});
|
|
95
|
+
return { token, expiresAt: new Date(exp * 1000) };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Verify a wsToken. Returns the validated payload, or `null` for any
|
|
99
|
+
* failure (expired, bad signature, wrong issuer, malformed claims).
|
|
100
|
+
* Callers must treat `null` as "reject the connection" — never log
|
|
101
|
+
* the raw token (it is a bearer credential until `exp`).
|
|
102
|
+
*/
|
|
103
|
+
function verifyWsToken(token) {
|
|
104
|
+
try {
|
|
105
|
+
const decoded = jsonwebtoken_1.default.verify(token, secret, {
|
|
106
|
+
issuer: WS_TOKEN_ISSUER,
|
|
107
|
+
algorithms: ['HS256'],
|
|
108
|
+
});
|
|
109
|
+
const parsed = api_contract_1.WsTokenPayloadSchema.safeParse(decoded);
|
|
110
|
+
if (!parsed.success) {
|
|
111
|
+
debug('wsToken payload failed schema validation:', parsed.error.issues);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return parsed.data;
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
debug('wsToken verification failed:', err.message);
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
signWsToken,
|
|
123
|
+
verifyWsToken,
|
|
124
|
+
ttlSeconds: WS_TOKEN_TTL_SECONDS,
|
|
125
|
+
issuer: WS_TOKEN_ISSUER,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function createWsTokenUtil() {
|
|
129
|
+
if (cachedUtil === null) {
|
|
130
|
+
cachedUtil = buildWsTokenUtil();
|
|
131
|
+
}
|
|
132
|
+
return cachedUtil;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=ws-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-token.js","sourceRoot":"","sources":["../../src/util/ws-token.ts"],"names":[],"mappings":";;;;;AAuJA,8CAKC;AA5JD,8DAAiC;AACjC,gEAA+B;AAC/B,sDAAgF;AAChF,kDAA0B;AAE1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,qBAAqB,CAAC,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAqBjC;;;;;;;;;;;;;;GAcG;AACH,MAAM,oBAAoB,GAAG,GAAW,EAAE;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,SAAS,GAAG,qBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CACV,4EAA4E;QAC1E,gFAAgF;QAChF,8EAA8E;QAC9E,kFAAkF,CACrF,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,IAAI,UAAU,GAA+C,IAAI,CAAC;AAElE,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC;;;;OAIG;IACH,SAAS,WAAW,CAAC,MAAqB;QACxC,mEAAmE;QACnE,+DAA+D;QAC/D,kEAAkE;QAClE,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,GAAG,GAAG,oBAAoB,CAAC;QACvC,MAAM,KAAK,GAAG,sBAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE;YACtD,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,OAAO;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,KAAa;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;gBACxC,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,CAAC,OAAO,CAAC;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,mCAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,2CAA2C,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,8BAA8B,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW;QACX,aAAa;QACb,UAAU,EAAE,oBAAoB;QAChC,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|