@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 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/models/user.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Crowi from '../crowi';
|
|
2
|
+
import { Types, Document, Model } from 'mongoose';
|
|
3
|
+
export interface WatcherDocument extends Document {
|
|
4
|
+
_id: Types.ObjectId;
|
|
5
|
+
user: Types.ObjectId;
|
|
6
|
+
targetModel: string;
|
|
7
|
+
target: Types.ObjectId;
|
|
8
|
+
status: string;
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
isWatching(): boolean;
|
|
11
|
+
isIgnoring(): boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface WatcherModel extends Model<WatcherDocument> {
|
|
14
|
+
findByUserIdAndTargetId(userId: Types.ObjectId, targetId: Types.ObjectId): any;
|
|
15
|
+
upsertWatcher(user: Types.ObjectId, targetModel: string, target: Types.ObjectId, status: string): any;
|
|
16
|
+
watchByPageId(user: Types.ObjectId, pageId: Types.ObjectId, status: string): any;
|
|
17
|
+
getWatchers(target: Types.ObjectId): Promise<Types.ObjectId[]>;
|
|
18
|
+
getIgnorers(target: Types.ObjectId): Promise<Types.ObjectId[]>;
|
|
19
|
+
STATUS_WATCH: string;
|
|
20
|
+
STATUS_IGNORE: string;
|
|
21
|
+
}
|
|
22
|
+
declare const _default: (crowi: Crowi) => WatcherModel;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1,75 @@
|
|
|
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 mongoose_1 = require("mongoose");
|
|
7
|
+
const activityDefine_1 = __importDefault(require("../util/activityDefine"));
|
|
8
|
+
// import Debug from 'debug'
|
|
9
|
+
const STATUS_WATCH = 'WATCH';
|
|
10
|
+
const STATUS_IGNORE = 'IGNORE';
|
|
11
|
+
const STATUSES = [STATUS_WATCH, STATUS_IGNORE];
|
|
12
|
+
exports.default = (crowi) => {
|
|
13
|
+
// const debug = Debug('crowi:models:watcher')
|
|
14
|
+
const watcherSchema = new mongoose_1.Schema({
|
|
15
|
+
user: {
|
|
16
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
17
|
+
ref: 'User',
|
|
18
|
+
index: true,
|
|
19
|
+
required: true,
|
|
20
|
+
},
|
|
21
|
+
targetModel: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: true,
|
|
24
|
+
enum: activityDefine_1.default.getSupportTargetModelNames(),
|
|
25
|
+
},
|
|
26
|
+
target: {
|
|
27
|
+
type: mongoose_1.Schema.Types.Mixed,
|
|
28
|
+
refPath: 'targetModel',
|
|
29
|
+
required: true,
|
|
30
|
+
},
|
|
31
|
+
status: {
|
|
32
|
+
type: String,
|
|
33
|
+
required: true,
|
|
34
|
+
enum: STATUSES,
|
|
35
|
+
},
|
|
36
|
+
createdAt: { type: Date, default: Date.now },
|
|
37
|
+
});
|
|
38
|
+
watcherSchema.methods.isWatching = function () {
|
|
39
|
+
return this.status === STATUS_WATCH;
|
|
40
|
+
};
|
|
41
|
+
watcherSchema.methods.isIgnoring = function () {
|
|
42
|
+
return this.status === STATUS_IGNORE;
|
|
43
|
+
};
|
|
44
|
+
watcherSchema.statics.findByUserIdAndTargetId = function (userId, targetId) {
|
|
45
|
+
return this.findOne({ user: userId, target: targetId });
|
|
46
|
+
};
|
|
47
|
+
watcherSchema.statics.upsertWatcher = function (user, targetModel, target, status) {
|
|
48
|
+
const query = { user, targetModel, target };
|
|
49
|
+
const doc = { ...query, status };
|
|
50
|
+
const options = { upsert: true, new: true, setDefaultsOnInsert: true, runValidators: true };
|
|
51
|
+
return Watcher.findOneAndUpdate(query, doc, options);
|
|
52
|
+
};
|
|
53
|
+
watcherSchema.statics.watchByPageId = function (user, pageId, status) {
|
|
54
|
+
return this.upsertWatcher(user, 'Page', pageId, status);
|
|
55
|
+
};
|
|
56
|
+
watcherSchema.statics.getWatchers = async function (target) {
|
|
57
|
+
return Watcher.find({ target, status: STATUS_WATCH }).distinct('user');
|
|
58
|
+
};
|
|
59
|
+
watcherSchema.statics.getIgnorers = async function (target) {
|
|
60
|
+
return Watcher.find({ target, status: STATUS_IGNORE }).distinct('user');
|
|
61
|
+
};
|
|
62
|
+
// 静的プロパティの定義方法を修正
|
|
63
|
+
Object.defineProperty(watcherSchema.statics, 'STATUS_WATCH', {
|
|
64
|
+
value: STATUS_WATCH,
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(watcherSchema.statics, 'STATUS_IGNORE', {
|
|
67
|
+
value: STATUS_IGNORE,
|
|
68
|
+
});
|
|
69
|
+
const Watcher = (0, mongoose_1.model)('Watcher', watcherSchema);
|
|
70
|
+
// Set static properties on the model instance as well
|
|
71
|
+
Watcher.STATUS_WATCH = STATUS_WATCH;
|
|
72
|
+
Watcher.STATUS_IGNORE = STATUS_IGNORE;
|
|
73
|
+
return Watcher;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/models/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Server as HttpServer } from 'node:http';
|
|
2
|
+
import type Crowi from '../crowi';
|
|
3
|
+
/**
|
|
4
|
+
* Minimum node-redis v4 surface the notifications handler leans on.
|
|
5
|
+
* Keeping this structural interface narrow lets the attach test inject
|
|
6
|
+
* a deterministic in-memory fake without pulling in the real redis
|
|
7
|
+
* client. The shape matches `PresenceRedisClient` (service/presence.ts)
|
|
8
|
+
* so a future skeleton-extract pass can dedupe them — see the spec's
|
|
9
|
+
* "■ Skeleton 抽出は今回スコープ外" note for why that does not happen
|
|
10
|
+
* in this task.
|
|
11
|
+
*/
|
|
12
|
+
export interface NotificationsRedisClient {
|
|
13
|
+
publish(channel: string, message: string): Promise<number>;
|
|
14
|
+
duplicate(): NotificationsRedisClient;
|
|
15
|
+
connect(): Promise<unknown>;
|
|
16
|
+
disconnect(): Promise<unknown>;
|
|
17
|
+
subscribe(channel: string, listener: (message: string) => void): Promise<void>;
|
|
18
|
+
unsubscribe(channel: string): Promise<void>;
|
|
19
|
+
isOpen?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Public surface returned from `attachNotificationsServer`. The api
|
|
23
|
+
* boot keeps the handle so SIGINT teardown can drain sockets and tear
|
|
24
|
+
* down the Redis subscriber.
|
|
25
|
+
*/
|
|
26
|
+
export interface AttachedNotifications {
|
|
27
|
+
/** Detach + tear down. Idempotent; safe to call from a SIGINT handler. */
|
|
28
|
+
shutdown(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Wire the RFC `/notifications` WebSocket into the api's existing
|
|
32
|
+
* `http.Server`, using `ws`'s `noServer` mode — same process, same
|
|
33
|
+
* event loop, same Redis client as `/collab` and `/presence`.
|
|
34
|
+
*
|
|
35
|
+
* Connection lifecycle:
|
|
36
|
+
* 1. Upgrade filter accepts `/notifications` / `/notifications/*`.
|
|
37
|
+
* 2. Verify the `?token=` notifications JWT (signature + issuer).
|
|
38
|
+
* 3. Verify `token.selfUserId` matches the `/notifications/<userId>`
|
|
39
|
+
* path segment — a token for user A cannot subscribe to user B's
|
|
40
|
+
* channel even when validly signed.
|
|
41
|
+
* 4. The first connection for a given userId in this process
|
|
42
|
+
* `subscribe`s that user's Redis channel; later connections for
|
|
43
|
+
* the same userId reuse the subscription (one Redis subscribe
|
|
44
|
+
* regardless of tab count).
|
|
45
|
+
* 5. On message receive, fan the `{type:'changed'}` payload out to
|
|
46
|
+
* every locally-connected socket for that userId.
|
|
47
|
+
* 6. On close, unregister the connection; the last `close` for a
|
|
48
|
+
* userId `unsubscribe`s the Redis channel so the subscriber's
|
|
49
|
+
* working set stays bounded.
|
|
50
|
+
*
|
|
51
|
+
* Degrade: when `crowi.redis === null` (single-instance dev with
|
|
52
|
+
* `REDIS_URL` unset) we skip subscribe/unsubscribe entirely. The
|
|
53
|
+
* WebSocket still accepts connections — the model layer's publish
|
|
54
|
+
* also no-ops — so the channel is silent but the API + handler boot
|
|
55
|
+
* cleanly and the dev experience is "no realtime invalidation, next
|
|
56
|
+
* user action triggers react-query refetch".
|
|
57
|
+
*
|
|
58
|
+
* Boot order: call after `setupModels` + `setupRedisClient`. The api's
|
|
59
|
+
* `Crowi.start` invokes this right next to `attachCollabServer` /
|
|
60
|
+
* `attachPresenceServer`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function attachNotificationsServer(httpServer: HttpServer, crowi: Crowi): Promise<AttachedNotifications>;
|
|
63
|
+
export { NOTIFICATIONS_CHANNEL_PREFIX, channelForUser } from './channel';
|
|
@@ -0,0 +1,426 @@
|
|
|
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.channelForUser = exports.NOTIFICATIONS_CHANNEL_PREFIX = void 0;
|
|
7
|
+
exports.attachNotificationsServer = attachNotificationsServer;
|
|
8
|
+
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
const ws_1 = require("ws");
|
|
10
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
11
|
+
const notifications_token_1 = require("../util/notifications-token");
|
|
12
|
+
const channel_1 = require("./channel");
|
|
13
|
+
const debug = (0, debug_1.default)('crowi:notifications:attach');
|
|
14
|
+
/**
|
|
15
|
+
* Path namespace the notifications WebSocket answers on. The browser
|
|
16
|
+
* dials `/notifications/<userId>?token=<notificationsToken>`; the
|
|
17
|
+
* upgrade filter accepts both the bare `/notifications` and
|
|
18
|
+
* `/notifications/...` so the design mirrors `presence/attach.ts` /
|
|
19
|
+
* `collab/attach.ts` exactly (sibling upgrade handlers coexist on one
|
|
20
|
+
* http.Server listener).
|
|
21
|
+
*/
|
|
22
|
+
const NOTIFICATIONS_PATH = '/notifications';
|
|
23
|
+
/**
|
|
24
|
+
* WebSocket close codes the notifications handler uses. 4401 / 4403
|
|
25
|
+
* are in the 4000–4999 application-private range and mirror the
|
|
26
|
+
* presence handler so a shared client backoff layer can interpret
|
|
27
|
+
* them consistently; 1001 ("going away") is the standard code for a
|
|
28
|
+
* graceful server shutdown.
|
|
29
|
+
*/
|
|
30
|
+
const WS_CLOSE = {
|
|
31
|
+
INVALID_TOKEN: 4401,
|
|
32
|
+
FORBIDDEN: 4403,
|
|
33
|
+
SHUTDOWN: 1001,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Grace window between asking sockets to close politely and force-
|
|
37
|
+
* terminating stragglers on shutdown. Mirrors presence / collab.
|
|
38
|
+
*/
|
|
39
|
+
const SHUTDOWN_DRAIN_MS = 500;
|
|
40
|
+
/** Split a request URL into its pathname and raw query string. */
|
|
41
|
+
const splitUrl = (rawUrl) => {
|
|
42
|
+
const queryIdx = rawUrl.indexOf('?');
|
|
43
|
+
return queryIdx < 0 ? { pathname: rawUrl, query: '' } : { pathname: rawUrl.slice(0, queryIdx), query: rawUrl.slice(queryIdx + 1) };
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Wire the RFC `/notifications` WebSocket into the api's existing
|
|
47
|
+
* `http.Server`, using `ws`'s `noServer` mode — same process, same
|
|
48
|
+
* event loop, same Redis client as `/collab` and `/presence`.
|
|
49
|
+
*
|
|
50
|
+
* Connection lifecycle:
|
|
51
|
+
* 1. Upgrade filter accepts `/notifications` / `/notifications/*`.
|
|
52
|
+
* 2. Verify the `?token=` notifications JWT (signature + issuer).
|
|
53
|
+
* 3. Verify `token.selfUserId` matches the `/notifications/<userId>`
|
|
54
|
+
* path segment — a token for user A cannot subscribe to user B's
|
|
55
|
+
* channel even when validly signed.
|
|
56
|
+
* 4. The first connection for a given userId in this process
|
|
57
|
+
* `subscribe`s that user's Redis channel; later connections for
|
|
58
|
+
* the same userId reuse the subscription (one Redis subscribe
|
|
59
|
+
* regardless of tab count).
|
|
60
|
+
* 5. On message receive, fan the `{type:'changed'}` payload out to
|
|
61
|
+
* every locally-connected socket for that userId.
|
|
62
|
+
* 6. On close, unregister the connection; the last `close` for a
|
|
63
|
+
* userId `unsubscribe`s the Redis channel so the subscriber's
|
|
64
|
+
* working set stays bounded.
|
|
65
|
+
*
|
|
66
|
+
* Degrade: when `crowi.redis === null` (single-instance dev with
|
|
67
|
+
* `REDIS_URL` unset) we skip subscribe/unsubscribe entirely. The
|
|
68
|
+
* WebSocket still accepts connections — the model layer's publish
|
|
69
|
+
* also no-ops — so the channel is silent but the API + handler boot
|
|
70
|
+
* cleanly and the dev experience is "no realtime invalidation, next
|
|
71
|
+
* user action triggers react-query refetch".
|
|
72
|
+
*
|
|
73
|
+
* Boot order: call after `setupModels` + `setupRedisClient`. The api's
|
|
74
|
+
* `Crowi.start` invokes this right next to `attachCollabServer` /
|
|
75
|
+
* `attachPresenceServer`.
|
|
76
|
+
*/
|
|
77
|
+
async function attachNotificationsServer(httpServer, crowi) {
|
|
78
|
+
const tokenUtil = (0, notifications_token_1.createNotificationsTokenUtil)();
|
|
79
|
+
// `crowi.redis` is typed `any` on the Crowi class; narrow to the
|
|
80
|
+
// structural client surface (or null) the handler expects. When
|
|
81
|
+
// Redis is unavailable the handler runs in degraded mode (no pub/sub).
|
|
82
|
+
const primaryRedis = crowi.redis ?? null;
|
|
83
|
+
// Dedicated subscriber client — node-redis v4 puts a connection into
|
|
84
|
+
// subscriber mode on `subscribe`, after which it can no longer issue
|
|
85
|
+
// regular commands. publish happens on the original `crowi.redis`
|
|
86
|
+
// (see `models/notification.ts`), subscribe on this duplicate.
|
|
87
|
+
let subscriber = null;
|
|
88
|
+
if (primaryRedis !== null) {
|
|
89
|
+
try {
|
|
90
|
+
const dup = primaryRedis.duplicate();
|
|
91
|
+
await dup.connect();
|
|
92
|
+
subscriber = dup;
|
|
93
|
+
debug('notifications pub/sub subscriber connected');
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
// A subscriber failure degrades notifications to single-instance
|
|
97
|
+
// behaviour for *this* process — locally-connected clients still
|
|
98
|
+
// miss invalidations published from elsewhere. Never fatal.
|
|
99
|
+
console.warn('[crowi:notifications] pub/sub subscriber setup failed — cross-instance fan-out disabled:', err.message);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// `noServer: true` — the upgrade handshake is owned by the api
|
|
103
|
+
// process; we forward only `/notifications/*` upgrades here.
|
|
104
|
+
const wss = new ws_1.WebSocketServer({ noServer: true });
|
|
105
|
+
// userId → set of live sockets for that user (multi-tab). Drives:
|
|
106
|
+
// - the lazy subscribe/unsubscribe of Redis channels (first/last
|
|
107
|
+
// socket for a userId triggers it),
|
|
108
|
+
// - the per-channel fan-out (resolve receiver sockets by userId),
|
|
109
|
+
// - the shutdown drain (iterate every socket once).
|
|
110
|
+
const connectionsByUser = new Map();
|
|
111
|
+
/**
|
|
112
|
+
* Per-user serialisation chain for Redis subscribe / unsubscribe.
|
|
113
|
+
*
|
|
114
|
+
* Race scenario we are guarding against:
|
|
115
|
+
* 1. User A's last tab closes → handleClose schedules an async
|
|
116
|
+
* `unsubscribe`.
|
|
117
|
+
* 2. Before that unsubscribe completes, user A's NEW tab opens →
|
|
118
|
+
* wireConnection sees an empty set and schedules a `subscribe`.
|
|
119
|
+
* 3. The two ops can land in any order on the Redis subscriber;
|
|
120
|
+
* if unsubscribe wins, the new tab is left without a live
|
|
121
|
+
* subscription and silently misses every invalidation.
|
|
122
|
+
*
|
|
123
|
+
* Fix: chain every subscribe/unsubscribe for a given userId through
|
|
124
|
+
* a single promise so they run FIFO. The chain entry is deleted
|
|
125
|
+
* after the op resolves and the chain is empty, so the map does
|
|
126
|
+
* not leak. We do not care about retaining the resolved value —
|
|
127
|
+
* `.then(() => actualOp())` is enough to ensure ordering.
|
|
128
|
+
*/
|
|
129
|
+
const channelOps = new Map();
|
|
130
|
+
const chainChannelOp = (userId, op) => {
|
|
131
|
+
const prev = channelOps.get(userId) ?? Promise.resolve();
|
|
132
|
+
// `.then(op)` schedules `op` after `prev` settles successfully;
|
|
133
|
+
// since every chain link below catches its own errors, the
|
|
134
|
+
// previous link always resolves, so the next link always runs.
|
|
135
|
+
const next = prev.then(op).catch(() => {
|
|
136
|
+
// Errors are already logged inside ensureSubscribed /
|
|
137
|
+
// ensureUnsubscribed — swallow here so a single failure does
|
|
138
|
+
// not break the chain for subsequent ops on the same user.
|
|
139
|
+
});
|
|
140
|
+
channelOps.set(userId, next);
|
|
141
|
+
void next.finally(() => {
|
|
142
|
+
// Best-effort cleanup so a long-lived process does not retain
|
|
143
|
+
// a settled promise per user forever.
|
|
144
|
+
if (channelOps.get(userId) === next) {
|
|
145
|
+
channelOps.delete(userId);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return next;
|
|
149
|
+
};
|
|
150
|
+
/** Send a JSON message to one socket; ignore a dead socket. */
|
|
151
|
+
const sendJson = (ws, payload) => {
|
|
152
|
+
if (ws.readyState !== ws.OPEN)
|
|
153
|
+
return;
|
|
154
|
+
try {
|
|
155
|
+
ws.send(JSON.stringify(payload));
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
debug('send failed: %s', err.message);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Redis subscriber message handler — fan the `changed` signal out
|
|
163
|
+
* to every locally-connected socket for the receiving userId. The
|
|
164
|
+
* payload from Redis is the JSON `{type:'changed'}` string the
|
|
165
|
+
* model layer publishes; we parse it once as a JSON-validation gate
|
|
166
|
+
* (a non-JSON publish is necessarily not ours and is dropped) and
|
|
167
|
+
* then schema-validate against `NotificationsServerMessageSchema`
|
|
168
|
+
* before re-serialising via `sendJson` for each receiver. Defence
|
|
169
|
+
* in depth: a foreign / malformed publish on the channel never
|
|
170
|
+
* reaches the browser, regardless of what put it there.
|
|
171
|
+
*/
|
|
172
|
+
const handleRedisMessage = (userId, message) => {
|
|
173
|
+
const sockets = connectionsByUser.get(userId);
|
|
174
|
+
if (!sockets || sockets.size === 0)
|
|
175
|
+
return;
|
|
176
|
+
let payload;
|
|
177
|
+
try {
|
|
178
|
+
payload = JSON.parse(message);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Drop a malformed publish — the broadcast contract is JSON, so
|
|
182
|
+
// a non-JSON message is necessarily not ours.
|
|
183
|
+
debug('drop non-JSON publish on user %s channel', userId);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const parsed = api_contract_1.NotificationsServerMessageSchema.safeParse(payload);
|
|
187
|
+
if (!parsed.success) {
|
|
188
|
+
// A shape that doesn't match the contract is necessarily not the
|
|
189
|
+
// model layer's publish — drop it rather than leaking arbitrary
|
|
190
|
+
// JSON to the browser.
|
|
191
|
+
debug('drop schema-invalid publish on user %s channel: %s', userId, parsed.error.issues.map((i) => i.message).join('; '));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
for (const conn of sockets) {
|
|
195
|
+
sendJson(conn.ws, parsed.data);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Subscribe this process to a user's channel on first connection.
|
|
200
|
+
* No-ops when the subscriber is unavailable (degrade mode).
|
|
201
|
+
*
|
|
202
|
+
* Serialised through the per-user `channelOps` chain so a pending
|
|
203
|
+
* unsubscribe completes before we attempt the subscribe — see the
|
|
204
|
+
* `channelOps` block above for the race rationale.
|
|
205
|
+
*/
|
|
206
|
+
const ensureSubscribed = (userId) => {
|
|
207
|
+
if (subscriber === null)
|
|
208
|
+
return Promise.resolve();
|
|
209
|
+
return chainChannelOp(userId, async () => {
|
|
210
|
+
try {
|
|
211
|
+
await subscriber.subscribe((0, channel_1.channelForUser)(userId), (message) => {
|
|
212
|
+
handleRedisMessage(userId, message);
|
|
213
|
+
});
|
|
214
|
+
debug('subscribed user %s channel', userId);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
console.warn(`[crowi:notifications] subscribe failed for user ${userId}:`, err.message);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Unsubscribe a user's channel when the last connection closes.
|
|
223
|
+
* No-ops when the subscriber is unavailable (degrade mode).
|
|
224
|
+
*
|
|
225
|
+
* Serialised through the per-user `channelOps` chain (see
|
|
226
|
+
* `ensureSubscribed`).
|
|
227
|
+
*/
|
|
228
|
+
const ensureUnsubscribed = (userId) => {
|
|
229
|
+
if (subscriber === null)
|
|
230
|
+
return Promise.resolve();
|
|
231
|
+
return chainChannelOp(userId, async () => {
|
|
232
|
+
try {
|
|
233
|
+
await subscriber.unsubscribe((0, channel_1.channelForUser)(userId));
|
|
234
|
+
debug('unsubscribed user %s channel', userId);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
debug('unsubscribe failed for user %s: %s', userId, err.message);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* Wire one freshly-upgraded `ws.WebSocket`. Authentication runs
|
|
243
|
+
* inline: a bad token / userId mismatch closes the socket
|
|
244
|
+
* immediately. A clean connection is registered and the user's
|
|
245
|
+
* Redis channel is (lazily) subscribed.
|
|
246
|
+
*/
|
|
247
|
+
const wireConnection = async (ws, request) => {
|
|
248
|
+
const { pathname, query } = splitUrl(request.url ?? '');
|
|
249
|
+
const token = new URLSearchParams(query).get('token') ?? '';
|
|
250
|
+
// 1. Token must verify (signature + issuer + schema).
|
|
251
|
+
const claims = token.length > 0 ? tokenUtil.verifyNotificationsToken(token) : null;
|
|
252
|
+
if (!claims) {
|
|
253
|
+
debug('reject: notifications token missing / invalid');
|
|
254
|
+
ws.close(WS_CLOSE.INVALID_TOKEN, 'invalid token');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
// 2. `/notifications/<userId>` path segment, when present, must
|
|
258
|
+
// match the token. The bare `/notifications` form is also
|
|
259
|
+
// accepted (the token is the authoritative userId source).
|
|
260
|
+
//
|
|
261
|
+
// Path handling:
|
|
262
|
+
// - decodeURIComponent on the raw segment so a userId that
|
|
263
|
+
// contains URI-reserved characters (e.g. SSO ids like
|
|
264
|
+
// `user%40foo`) is compared to `selfUserId` in its decoded
|
|
265
|
+
// form (otherwise an encoded form would never match a
|
|
266
|
+
// plain-text token claim).
|
|
267
|
+
// - Strip a trailing slash so `/notifications/<id>/` (some
|
|
268
|
+
// reverse proxies normalise to this) is accepted as
|
|
269
|
+
// equivalent to `/notifications/<id>`.
|
|
270
|
+
// - Reject any extra path segment (`/notifications/<id>/...`)
|
|
271
|
+
// — it is outside the spec and we'd rather be explicit
|
|
272
|
+
// than silently accept whatever a misbehaving proxy sends.
|
|
273
|
+
const rawSegment = pathname.startsWith(`${NOTIFICATIONS_PATH}/`) ? pathname.slice(NOTIFICATIONS_PATH.length + 1) : '';
|
|
274
|
+
let pathSegment = '';
|
|
275
|
+
if (rawSegment.length > 0) {
|
|
276
|
+
let decoded;
|
|
277
|
+
try {
|
|
278
|
+
decoded = decodeURIComponent(rawSegment);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
debug('reject: malformed percent-encoding in path segment %s', rawSegment);
|
|
282
|
+
ws.close(WS_CLOSE.FORBIDDEN, 'forbidden');
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const normalised = decoded.replace(/\/+$/, '');
|
|
286
|
+
if (normalised.includes('/')) {
|
|
287
|
+
debug('reject: extra path segment after userId: %s', normalised);
|
|
288
|
+
ws.close(WS_CLOSE.FORBIDDEN, 'forbidden');
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
pathSegment = normalised;
|
|
292
|
+
}
|
|
293
|
+
if (pathSegment.length > 0 && pathSegment !== claims.selfUserId) {
|
|
294
|
+
debug('reject: path userId %s != token selfUserId %s', pathSegment, claims.selfUserId);
|
|
295
|
+
ws.close(WS_CLOSE.FORBIDDEN, 'forbidden');
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const userId = claims.selfUserId;
|
|
299
|
+
const conn = { ws, userId };
|
|
300
|
+
// Register the close handler BEFORE the await on
|
|
301
|
+
// `ensureSubscribed` so a socket that closes during the subscribe
|
|
302
|
+
// round-trip is reconciled cleanly — same race-window fix as
|
|
303
|
+
// presence/attach.ts (see the rationale comment there).
|
|
304
|
+
let closed = false;
|
|
305
|
+
ws.on('close', () => {
|
|
306
|
+
closed = true;
|
|
307
|
+
void handleClose(conn);
|
|
308
|
+
});
|
|
309
|
+
ws.on('error', (err) => {
|
|
310
|
+
// A single bad socket must not crash the api process.
|
|
311
|
+
console.error('[crowi:notifications] websocket error', err);
|
|
312
|
+
});
|
|
313
|
+
const sockets = connectionsByUser.get(userId);
|
|
314
|
+
const isFirstForUser = !sockets || sockets.size === 0;
|
|
315
|
+
if (sockets) {
|
|
316
|
+
sockets.add(conn);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
connectionsByUser.set(userId, new Set([conn]));
|
|
320
|
+
}
|
|
321
|
+
if (isFirstForUser) {
|
|
322
|
+
await ensureSubscribed(userId);
|
|
323
|
+
}
|
|
324
|
+
// The socket closed while subscribe was in flight — the close
|
|
325
|
+
// handler may have already run before the connection was tracked.
|
|
326
|
+
// Reconcile by running close cleanup once: deleting an absent
|
|
327
|
+
// socket from the set is a no-op, and `handleClose` does the
|
|
328
|
+
// unsubscribe when the set empties.
|
|
329
|
+
if (closed) {
|
|
330
|
+
debug('notifications socket closed during setup user=%s', userId);
|
|
331
|
+
void handleClose(conn);
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
debug('notifications connected user=%s', userId);
|
|
335
|
+
};
|
|
336
|
+
/** Handle a socket close — drop the connection and maybe unsubscribe. */
|
|
337
|
+
const handleClose = async (conn) => {
|
|
338
|
+
const sockets = connectionsByUser.get(conn.userId);
|
|
339
|
+
if (!sockets)
|
|
340
|
+
return;
|
|
341
|
+
sockets.delete(conn);
|
|
342
|
+
if (sockets.size > 0)
|
|
343
|
+
return;
|
|
344
|
+
connectionsByUser.delete(conn.userId);
|
|
345
|
+
await ensureUnsubscribed(conn.userId);
|
|
346
|
+
};
|
|
347
|
+
/**
|
|
348
|
+
* `'upgrade'` handler. Path-filter first so the sibling `/collab` /
|
|
349
|
+
* `/presence` handlers keep their slot; `socket.destroy()` is
|
|
350
|
+
* intentionally NOT called on a no-match so Node moves on to the
|
|
351
|
+
* next listener.
|
|
352
|
+
*/
|
|
353
|
+
const upgradeHandler = (request, socket, head) => {
|
|
354
|
+
const { pathname } = splitUrl(request.url ?? '');
|
|
355
|
+
if (pathname !== NOTIFICATIONS_PATH && !pathname.startsWith(`${NOTIFICATIONS_PATH}/`)) {
|
|
356
|
+
return; // not ours — let other upgrade handlers try.
|
|
357
|
+
}
|
|
358
|
+
wss.handleUpgrade(request, socket, head, (ws) => {
|
|
359
|
+
void wireConnection(ws, request);
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
httpServer.on('upgrade', upgradeHandler);
|
|
363
|
+
debug('notifications attached to http.Server (path=%s, redis=%s)', NOTIFICATIONS_PATH, subscriber !== null ? 'on' : 'off');
|
|
364
|
+
let didShutdown = false;
|
|
365
|
+
return {
|
|
366
|
+
async shutdown() {
|
|
367
|
+
if (didShutdown)
|
|
368
|
+
return;
|
|
369
|
+
didShutdown = true;
|
|
370
|
+
// 1. Refuse new upgrades.
|
|
371
|
+
try {
|
|
372
|
+
httpServer.off('upgrade', upgradeHandler);
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// best-effort — server may already be tearing down.
|
|
376
|
+
}
|
|
377
|
+
// 2. Politely close every live socket.
|
|
378
|
+
for (const sockets of connectionsByUser.values()) {
|
|
379
|
+
for (const conn of sockets) {
|
|
380
|
+
try {
|
|
381
|
+
conn.ws.close(WS_CLOSE.SHUTDOWN, 'server shutting down');
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
// ignore — best-effort
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// 3. Brief drain so close frames flush.
|
|
389
|
+
if (connectionsByUser.size > 0) {
|
|
390
|
+
await new Promise((resolveDrain) => setTimeout(resolveDrain, SHUTDOWN_DRAIN_MS));
|
|
391
|
+
}
|
|
392
|
+
// 4. Force-terminate stragglers.
|
|
393
|
+
try {
|
|
394
|
+
for (const sockets of connectionsByUser.values()) {
|
|
395
|
+
for (const conn of sockets) {
|
|
396
|
+
try {
|
|
397
|
+
conn.ws.terminate();
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
// ignore
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
connectionsByUser.clear();
|
|
405
|
+
wss.close();
|
|
406
|
+
}
|
|
407
|
+
catch (err) {
|
|
408
|
+
console.error('[crowi:notifications] wss.close failed during shutdown:', err);
|
|
409
|
+
}
|
|
410
|
+
// 5. Tear down the Redis subscriber (when one was built).
|
|
411
|
+
if (subscriber !== null) {
|
|
412
|
+
try {
|
|
413
|
+
await subscriber.disconnect();
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
debug('subscriber disconnect failed: %s', err.message);
|
|
417
|
+
}
|
|
418
|
+
subscriber = null;
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
var channel_2 = require("./channel");
|
|
424
|
+
Object.defineProperty(exports, "NOTIFICATIONS_CHANNEL_PREFIX", { enumerable: true, get: function () { return channel_2.NOTIFICATIONS_CHANNEL_PREFIX; } });
|
|
425
|
+
Object.defineProperty(exports, "channelForUser", { enumerable: true, get: function () { return channel_2.channelForUser; } });
|
|
426
|
+
//# sourceMappingURL=attach.js.map
|