@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,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
|
+
const activity_1 = __importDefault(require("./activity"));
|
|
7
|
+
const attachment_1 = __importDefault(require("./attachment"));
|
|
8
|
+
const backlink_1 = __importDefault(require("./backlink"));
|
|
9
|
+
const bookmark_1 = __importDefault(require("./bookmark"));
|
|
10
|
+
const comment_1 = __importDefault(require("./comment"));
|
|
11
|
+
// import with allow-js flag
|
|
12
|
+
const config_1 = __importDefault(require("./config"));
|
|
13
|
+
const migration_application_1 = __importDefault(require("./migration-application"));
|
|
14
|
+
const notification_1 = __importDefault(require("./notification"));
|
|
15
|
+
const oauth_authorization_code_1 = __importDefault(require("./oauth-authorization-code"));
|
|
16
|
+
const oauth_client_1 = __importDefault(require("./oauth-client"));
|
|
17
|
+
const oauth_device_code_1 = __importDefault(require("./oauth-device-code"));
|
|
18
|
+
const oauth_refresh_token_1 = __importDefault(require("./oauth-refresh-token"));
|
|
19
|
+
const page_1 = __importDefault(require("./page"));
|
|
20
|
+
const page_yjs_update_1 = __importDefault(require("./page-yjs-update"));
|
|
21
|
+
const personal_access_token_1 = __importDefault(require("./personal-access-token"));
|
|
22
|
+
const plugin_render_cache_1 = __importDefault(require("./plugin-render-cache"));
|
|
23
|
+
const revision_1 = __importDefault(require("./revision"));
|
|
24
|
+
const share_1 = __importDefault(require("./share"));
|
|
25
|
+
const shareAccess_1 = __importDefault(require("./shareAccess"));
|
|
26
|
+
const tracking_1 = __importDefault(require("./tracking"));
|
|
27
|
+
const updatePost_1 = __importDefault(require("./updatePost"));
|
|
28
|
+
const user_1 = __importDefault(require("./user"));
|
|
29
|
+
const watcher_1 = __importDefault(require("./watcher"));
|
|
30
|
+
exports.default = {
|
|
31
|
+
Page: page_1.default,
|
|
32
|
+
User: user_1.default,
|
|
33
|
+
Revision: revision_1.default,
|
|
34
|
+
Backlink: backlink_1.default,
|
|
35
|
+
Bookmark: bookmark_1.default,
|
|
36
|
+
Comment: comment_1.default,
|
|
37
|
+
Attachment: attachment_1.default,
|
|
38
|
+
UpdatePost: updatePost_1.default,
|
|
39
|
+
Share: share_1.default,
|
|
40
|
+
Tracking: tracking_1.default,
|
|
41
|
+
ShareAccess: shareAccess_1.default,
|
|
42
|
+
Activity: activity_1.default,
|
|
43
|
+
Notification: notification_1.default,
|
|
44
|
+
Watcher: watcher_1.default,
|
|
45
|
+
Config: config_1.default,
|
|
46
|
+
MigrationApplication: migration_application_1.default,
|
|
47
|
+
PluginRenderCache: plugin_render_cache_1.default,
|
|
48
|
+
PageYjsUpdate: page_yjs_update_1.default,
|
|
49
|
+
PersonalAccessToken: personal_access_token_1.default,
|
|
50
|
+
OAuthClient: oauth_client_1.default,
|
|
51
|
+
OAuthAuthorizationCode: oauth_authorization_code_1.default,
|
|
52
|
+
OAuthDeviceCode: oauth_device_code_1.default,
|
|
53
|
+
OAuthRefreshToken: oauth_refresh_token_1.default,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAClC,8DAAsC;AACtC,0DAAkC;AAClC,0DAAkC;AAClC,wDAAgC;AAChC,4BAA4B;AAC5B,sDAA8B;AAC9B,oFAA2D;AAC3D,kEAA0C;AAC1C,0FAAgE;AAChE,kEAAyC;AACzC,4EAAkD;AAClD,gFAAsD;AACtD,kDAA0B;AAC1B,wEAA8C;AAC9C,oFAA0D;AAC1D,gFAAsD;AACtD,0DAAkC;AAClC,oDAA4B;AAC5B,gEAAwC;AACxC,0DAAkC;AAClC,8DAAsC;AACtC,kDAA0B;AAC1B,wDAAgC;AAEhC,kBAAe;IACb,IAAI,EAAJ,cAAI;IACJ,IAAI,EAAJ,cAAI;IACJ,QAAQ,EAAR,kBAAQ;IACR,QAAQ,EAAR,kBAAQ;IACR,QAAQ,EAAR,kBAAQ;IACR,OAAO,EAAP,iBAAO;IACP,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,oBAAU;IACV,KAAK,EAAL,eAAK;IACL,QAAQ,EAAR,kBAAQ;IACR,WAAW,EAAX,qBAAW;IACX,QAAQ,EAAR,kBAAQ;IACR,YAAY,EAAZ,sBAAY;IACZ,OAAO,EAAP,iBAAO;IACP,MAAM,EAAN,gBAAM;IACN,oBAAoB,EAApB,+BAAoB;IACpB,iBAAiB,EAAjB,6BAAiB;IACjB,aAAa,EAAb,yBAAa;IACb,mBAAmB,EAAnB,+BAAmB;IACnB,WAAW,EAAX,sBAAW;IACX,sBAAsB,EAAtB,kCAAsB;IACtB,eAAe,EAAf,2BAAe;IACf,iBAAiB,EAAjB,6BAAiB;CAClB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Document, Model, Types } from 'mongoose';
|
|
2
|
+
import Crowi from '../crowi';
|
|
3
|
+
/**
|
|
4
|
+
* RFC-0008 §7 — the `migrationApplications` collection.
|
|
5
|
+
*
|
|
6
|
+
* An **append-only audit log** of every migration run: one document per
|
|
7
|
+
* apply / re-apply / detected-clean / failure. It is NOT the source of
|
|
8
|
+
* truth for "is this migration pending" — that is decided by inspecting
|
|
9
|
+
* the data via each migration's `isPending` probe (§6.1). This log exists
|
|
10
|
+
* to preserve missed-and-rerun history and duration trends, and to power
|
|
11
|
+
* `migrate status`.
|
|
12
|
+
*
|
|
13
|
+
* Self-bootstrapping (§7.3): created from this schema declaration alone
|
|
14
|
+
* (autoIndex builds its indexes at boot), and no migration may modify its
|
|
15
|
+
* schema — this avoids a chicken-and-egg dependency where the framework's
|
|
16
|
+
* own bookkeeping needs a migration to exist.
|
|
17
|
+
*/
|
|
18
|
+
export type MigrationResult = 'applied' | 'detected-clean' | 're-applied' | 'failed';
|
|
19
|
+
export interface MigrationApplicationDocument extends Document {
|
|
20
|
+
_id: Types.ObjectId;
|
|
21
|
+
migrationId: string;
|
|
22
|
+
fromVersion?: string;
|
|
23
|
+
toVersion?: string;
|
|
24
|
+
layer?: 'boot' | 'preflight';
|
|
25
|
+
result: MigrationResult;
|
|
26
|
+
appliedAt: Date;
|
|
27
|
+
durationMs?: number;
|
|
28
|
+
stats?: Record<string, unknown>;
|
|
29
|
+
appliedBy?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
createdAt: Date;
|
|
32
|
+
updatedAt: Date;
|
|
33
|
+
}
|
|
34
|
+
export interface RecordApplicationInput {
|
|
35
|
+
migrationId: string;
|
|
36
|
+
fromVersion?: string;
|
|
37
|
+
toVersion?: string;
|
|
38
|
+
layer?: 'boot' | 'preflight';
|
|
39
|
+
result: MigrationResult;
|
|
40
|
+
durationMs?: number;
|
|
41
|
+
stats?: Record<string, unknown>;
|
|
42
|
+
appliedBy?: string;
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface MigrationApplicationModel extends Model<MigrationApplicationDocument> {
|
|
46
|
+
/** Append one application record (the only write path — append-only). */
|
|
47
|
+
record(input: RecordApplicationInput): Promise<MigrationApplicationDocument>;
|
|
48
|
+
/** The most recent record for a migration id, or null if never run. */
|
|
49
|
+
latestFor(migrationId: string): Promise<MigrationApplicationDocument | null>;
|
|
50
|
+
/** The N most recent records across all migrations (for `migrate status`). */
|
|
51
|
+
recent(limit?: number): Promise<MigrationApplicationDocument[]>;
|
|
52
|
+
}
|
|
53
|
+
declare const _default: (crowi: Crowi) => MigrationApplicationModel;
|
|
54
|
+
export default _default;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mongoose_1 = require("mongoose");
|
|
4
|
+
exports.default = (crowi) => {
|
|
5
|
+
const migrationApplicationSchema = new mongoose_1.Schema({
|
|
6
|
+
migrationId: { type: String, required: true, index: true },
|
|
7
|
+
fromVersion: { type: String },
|
|
8
|
+
toVersion: { type: String },
|
|
9
|
+
layer: { type: String, enum: ['boot', 'preflight'] },
|
|
10
|
+
result: {
|
|
11
|
+
type: String,
|
|
12
|
+
enum: ['applied', 'detected-clean', 're-applied', 'failed'],
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
appliedAt: { type: Date, default: Date.now, index: true },
|
|
16
|
+
durationMs: { type: Number },
|
|
17
|
+
// Free-form per-run stats (detected / transformed counts, etc.).
|
|
18
|
+
stats: { type: mongoose_1.Schema.Types.Mixed },
|
|
19
|
+
// 'boot-auto' | `admin-cli@${hostname}`.
|
|
20
|
+
appliedBy: { type: String },
|
|
21
|
+
// Only populated when `result === 'failed'`.
|
|
22
|
+
error: { type: String },
|
|
23
|
+
}, { timestamps: true });
|
|
24
|
+
migrationApplicationSchema.statics.record = function (input) {
|
|
25
|
+
return MigrationApplication.create({ ...input, appliedAt: new Date() });
|
|
26
|
+
};
|
|
27
|
+
migrationApplicationSchema.statics.latestFor = function (migrationId) {
|
|
28
|
+
return MigrationApplication.findOne({ migrationId }).sort({ appliedAt: -1 }).exec();
|
|
29
|
+
};
|
|
30
|
+
migrationApplicationSchema.statics.recent = function (limit = 10) {
|
|
31
|
+
return MigrationApplication.find({}).sort({ appliedAt: -1 }).limit(limit).exec();
|
|
32
|
+
};
|
|
33
|
+
const MigrationApplication = (0, mongoose_1.model)('MigrationApplication', migrationApplicationSchema);
|
|
34
|
+
return MigrationApplication;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=migration-application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-application.js","sourceRoot":"","sources":["../../src/models/migration-application.ts"],"names":[],"mappings":";;AAAA,uCAAiE;AA2DjE,kBAAe,CAAC,KAAY,EAAE,EAAE;IAC9B,MAAM,0BAA0B,GAAG,IAAI,iBAAM,CAC3C;QACE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;QACpD,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC;YAC3D,QAAQ,EAAE,IAAI;SACf;QACD,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;QACzD,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC5B,iEAAiE;QACjE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK,EAAE;QACnC,yCAAyC;QACzC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3B,6CAA6C;QAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACxB,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;IAEF,0BAA0B,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,KAA6B;QACjF,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,0BAA0B,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,WAAmB;QAC1E,OAAO,oBAAoB,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtF,CAAC,CAAC;IAEF,0BAA0B,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,KAAK,GAAG,EAAE;QAC9D,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,IAAA,gBAAK,EAA0D,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;IAEhJ,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Crowi from '../crowi';
|
|
2
|
+
import { Types, Document, Model } from 'mongoose';
|
|
3
|
+
import { ActivityDocument } from './activity';
|
|
4
|
+
import { UserDocument } from './user';
|
|
5
|
+
export interface NotificationDocument extends Document {
|
|
6
|
+
_id: Types.ObjectId;
|
|
7
|
+
user: Types.ObjectId;
|
|
8
|
+
targetModel: string;
|
|
9
|
+
target: Types.ObjectId;
|
|
10
|
+
action: string;
|
|
11
|
+
activities: Types.ObjectId[];
|
|
12
|
+
status: string;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface NotificationModel extends Model<NotificationDocument> {
|
|
16
|
+
findLatestNotificationsByUser(user: Types.ObjectId, skip: number, offset: number): Promise<NotificationDocument[]>;
|
|
17
|
+
upsertByActivity(user: Types.ObjectId, activity: ActivityDocument, createdAt?: Date | null): Promise<NotificationDocument | null>;
|
|
18
|
+
removeActivity(activity: any): any;
|
|
19
|
+
removeEmpty(): ReturnType<typeof Model.deleteMany>;
|
|
20
|
+
read(user: UserDocument): ReturnType<typeof Model.updateMany>;
|
|
21
|
+
open(user: UserDocument, id: Types.ObjectId): Promise<NotificationDocument | null>;
|
|
22
|
+
getUnreadCountByUser(user: Types.ObjectId): Promise<number | undefined>;
|
|
23
|
+
STATUS_UNREAD: string;
|
|
24
|
+
STATUS_UNOPENED: string;
|
|
25
|
+
STATUS_OPENED: string;
|
|
26
|
+
}
|
|
27
|
+
declare const _default: (crowi: Crowi) => NotificationModel;
|
|
28
|
+
export default _default;
|
|
@@ -0,0 +1,285 @@
|
|
|
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 debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const date_fns_1 = require("date-fns");
|
|
9
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
10
|
+
const activityDefine_1 = __importDefault(require("../util/activityDefine"));
|
|
11
|
+
const channel_1 = require("../notifications/channel");
|
|
12
|
+
// Module-level logger for the module-scope helpers below
|
|
13
|
+
// (`publishNotificationsChange` / `forwardToNotifierPlugins`). The model
|
|
14
|
+
// factory has its own `debug` in closure scope; these helpers run outside
|
|
15
|
+
// it. Redis publish / notifier driver failures during teardown are
|
|
16
|
+
// expected noise, so they log at debug rather than warn.
|
|
17
|
+
const moduleDebug = (0, debug_1.default)('crowi:models:notification');
|
|
18
|
+
const STATUS_UNREAD = 'UNREAD';
|
|
19
|
+
const STATUS_UNOPENED = 'UNOPENED';
|
|
20
|
+
const STATUS_OPENED = 'OPENED';
|
|
21
|
+
const STATUSES = [STATUS_UNREAD, STATUS_UNOPENED, STATUS_OPENED];
|
|
22
|
+
exports.default = (crowi) => {
|
|
23
|
+
const debug = (0, debug_1.default)('crowi:models:notification');
|
|
24
|
+
const notificationEvent = crowi.event('Notification');
|
|
25
|
+
const notificationSchema = new mongoose_1.Schema({
|
|
26
|
+
user: {
|
|
27
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
28
|
+
ref: 'User',
|
|
29
|
+
index: true,
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
targetModel: {
|
|
33
|
+
type: String,
|
|
34
|
+
required: true,
|
|
35
|
+
enum: activityDefine_1.default.getSupportTargetModelNames(),
|
|
36
|
+
},
|
|
37
|
+
target: {
|
|
38
|
+
type: mongoose_1.Schema.Types.Mixed,
|
|
39
|
+
refPath: 'targetModel',
|
|
40
|
+
required: true,
|
|
41
|
+
},
|
|
42
|
+
action: {
|
|
43
|
+
type: String,
|
|
44
|
+
required: true,
|
|
45
|
+
enum: activityDefine_1.default.getSupportActionNames(),
|
|
46
|
+
},
|
|
47
|
+
activities: [
|
|
48
|
+
{
|
|
49
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
50
|
+
ref: 'Activity',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
status: {
|
|
54
|
+
type: String,
|
|
55
|
+
default: STATUS_UNREAD,
|
|
56
|
+
enum: STATUSES,
|
|
57
|
+
index: true,
|
|
58
|
+
required: true,
|
|
59
|
+
},
|
|
60
|
+
createdAt: {
|
|
61
|
+
type: Date,
|
|
62
|
+
default: Date.now,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
notificationSchema.virtual('actionUsers').get(function () {
|
|
66
|
+
const Activity = crowi.model('Activity');
|
|
67
|
+
return Activity.getActionUsersFromActivities(this.activities);
|
|
68
|
+
});
|
|
69
|
+
const transform = (doc, ret) => {
|
|
70
|
+
// delete ret.activities
|
|
71
|
+
};
|
|
72
|
+
notificationSchema.set('toObject', { virtuals: true, transform });
|
|
73
|
+
notificationSchema.set('toJSON', { virtuals: true, transform });
|
|
74
|
+
notificationSchema.index({ user: 1, target: 1, action: 1, createdAt: 1 });
|
|
75
|
+
notificationSchema.statics.findLatestNotificationsByUser = function (user, limit, offset) {
|
|
76
|
+
limit = limit || 10;
|
|
77
|
+
return Notification.find({ user })
|
|
78
|
+
.sort({ createdAt: -1 })
|
|
79
|
+
.skip(offset)
|
|
80
|
+
.limit(limit)
|
|
81
|
+
.populate(['user', 'target'])
|
|
82
|
+
.populate({ path: 'activities', populate: { path: 'user' } })
|
|
83
|
+
.exec();
|
|
84
|
+
};
|
|
85
|
+
notificationSchema.statics.upsertByActivity = async function (user, activity, createdAt = null) {
|
|
86
|
+
const { _id: activityId, targetModel, target, action } = activity;
|
|
87
|
+
const now = createdAt || Date.now();
|
|
88
|
+
const lastWeek = (0, date_fns_1.subDays)(now, 7);
|
|
89
|
+
const query = { user, target, action, createdAt: { $gt: lastWeek } };
|
|
90
|
+
const parameters = {
|
|
91
|
+
user,
|
|
92
|
+
targetModel,
|
|
93
|
+
target,
|
|
94
|
+
action,
|
|
95
|
+
status: STATUS_UNREAD,
|
|
96
|
+
createdAt: now,
|
|
97
|
+
$addToSet: { activities: activityId },
|
|
98
|
+
};
|
|
99
|
+
const options = {
|
|
100
|
+
upsert: true,
|
|
101
|
+
new: true,
|
|
102
|
+
setDefaultsOnInsert: true,
|
|
103
|
+
runValidators: true,
|
|
104
|
+
};
|
|
105
|
+
const notification = await Notification.findOneAndUpdate(query, parameters, options);
|
|
106
|
+
if (notification) {
|
|
107
|
+
notificationEvent.emit('update', notification.user);
|
|
108
|
+
// RFC-0002 Phase 8: forward to registered notifier plugins (Slack /
|
|
109
|
+
// Webhook / ...). Fire-and-forget per-driver: a single misbehaving
|
|
110
|
+
// driver must not block the upsert or other drivers. The plugin
|
|
111
|
+
// manager may not be initialised in some test paths, so we guard.
|
|
112
|
+
forwardToNotifierPlugins(crowi, notification, activity);
|
|
113
|
+
}
|
|
114
|
+
return notification;
|
|
115
|
+
};
|
|
116
|
+
notificationSchema.statics.removeActivity = async function (activity) {
|
|
117
|
+
const { _id, target, action } = activity;
|
|
118
|
+
const query = { target, action };
|
|
119
|
+
const parameters = { $pull: { activities: _id } };
|
|
120
|
+
// Capture the set of recipient users BEFORE the update so we can
|
|
121
|
+
// emit a per-user `update` tick afterwards — once the $pull has
|
|
122
|
+
// emptied the `activities` array, `removeEmpty()` will delete the
|
|
123
|
+
// row and we'd lose the userId. The notifications affected by a
|
|
124
|
+
// single un-comment / un-like can span multiple recipients (one
|
|
125
|
+
// per watcher), so we dedup with a Set and emit once per user.
|
|
126
|
+
const affected = await Notification.find(query, { user: 1 }).lean();
|
|
127
|
+
const result = await Notification.updateMany(query, parameters);
|
|
128
|
+
await Notification.removeEmpty();
|
|
129
|
+
const recipientIds = new Set();
|
|
130
|
+
for (const row of affected) {
|
|
131
|
+
if (row?.user != null)
|
|
132
|
+
recipientIds.add(row.user.toString());
|
|
133
|
+
}
|
|
134
|
+
for (const userId of recipientIds) {
|
|
135
|
+
notificationEvent.emit('update', userId);
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
};
|
|
139
|
+
notificationSchema.statics.removeEmpty = function () {
|
|
140
|
+
return Notification.deleteMany({ activities: { $size: 0 } });
|
|
141
|
+
};
|
|
142
|
+
notificationSchema.statics.read = async function (user) {
|
|
143
|
+
const query = { user, status: STATUS_UNREAD };
|
|
144
|
+
const parameters = { status: STATUS_UNOPENED };
|
|
145
|
+
const result = await Notification.updateMany(query, parameters);
|
|
146
|
+
// Emit even when `modifiedCount === 0` — the realtime invalidation
|
|
147
|
+
// tick is cheap and a mark-all-as-read with nothing to flip should
|
|
148
|
+
// still tell any other tab "your notifications view is fresh now".
|
|
149
|
+
notificationEvent.emit('update', user._id);
|
|
150
|
+
return result;
|
|
151
|
+
};
|
|
152
|
+
notificationSchema.statics.open = async function (user, id) {
|
|
153
|
+
const query = { _id: id, user: user._id };
|
|
154
|
+
const parameters = { status: STATUS_OPENED };
|
|
155
|
+
const options = { new: true };
|
|
156
|
+
const notification = await Notification.findOneAndUpdate(query, parameters, options);
|
|
157
|
+
if (notification) {
|
|
158
|
+
notificationEvent.emit('update', notification.user);
|
|
159
|
+
}
|
|
160
|
+
return notification;
|
|
161
|
+
};
|
|
162
|
+
notificationSchema.statics.getUnreadCountByUser = async function (user) {
|
|
163
|
+
const query = { user, status: STATUS_UNREAD };
|
|
164
|
+
try {
|
|
165
|
+
const count = await Notification.countDocuments(query);
|
|
166
|
+
return count;
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
debug('Error on getUnreadCountByUser', err);
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
notificationEvent.on('update', (user) => {
|
|
174
|
+
// Realtime invalidation fan-out: publish a per-user "changed" tick
|
|
175
|
+
// on the user's notifications Redis channel so the browser's
|
|
176
|
+
// `/notifications/<userId>` WebSocket can drop its 30-second
|
|
177
|
+
// `useUnreadCount` polling loop. Subscribers (this process and
|
|
178
|
+
// every other api replica) wake any locally-connected sockets;
|
|
179
|
+
// the browser invalidates `notificationKeys.all` in react-query
|
|
180
|
+
// and refetches via the existing REST endpoints.
|
|
181
|
+
//
|
|
182
|
+
// The `user` argument is whatever the caller emitted —
|
|
183
|
+
// `Notification.upsertByActivity` and `Notification.read` pass an
|
|
184
|
+
// ObjectId / UserDocument, depending on the call site — so we
|
|
185
|
+
// normalise to a string id here before building the channel name.
|
|
186
|
+
if (!user)
|
|
187
|
+
return;
|
|
188
|
+
const userId = userIdOf(user);
|
|
189
|
+
if (!userId)
|
|
190
|
+
return;
|
|
191
|
+
publishNotificationsChange(crowi, userId);
|
|
192
|
+
});
|
|
193
|
+
const Notification = (0, mongoose_1.model)('Notification', notificationSchema);
|
|
194
|
+
// 静的プロパティをスキーマではなくモデルに直接割り当て
|
|
195
|
+
Notification.STATUS_UNOPENED = STATUS_UNOPENED;
|
|
196
|
+
Notification.STATUS_UNREAD = STATUS_UNREAD;
|
|
197
|
+
Notification.STATUS_OPENED = STATUS_OPENED;
|
|
198
|
+
return Notification;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Normalise the `user` argument that `notificationEvent.emit('update', ...)`
|
|
202
|
+
* receives into a string id. Different call sites historically passed
|
|
203
|
+
* different shapes — an ObjectId, a UserDocument, or a populated user
|
|
204
|
+
* subdocument — so we accept whichever and pick the canonical id.
|
|
205
|
+
* Returns `null` if no usable id can be derived (defensive: never crash
|
|
206
|
+
* the model on a malformed emit).
|
|
207
|
+
*/
|
|
208
|
+
function userIdOf(user) {
|
|
209
|
+
if (!user)
|
|
210
|
+
return null;
|
|
211
|
+
if (typeof user === 'string')
|
|
212
|
+
return user;
|
|
213
|
+
if (user instanceof mongoose_1.Types.ObjectId)
|
|
214
|
+
return user.toString();
|
|
215
|
+
if (typeof user === 'object' && '_id' in user) {
|
|
216
|
+
const id = user._id;
|
|
217
|
+
if (typeof id === 'string')
|
|
218
|
+
return id;
|
|
219
|
+
if (id instanceof mongoose_1.Types.ObjectId)
|
|
220
|
+
return id.toString();
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Publish a `{type:'changed'}` invalidation tick on the user's
|
|
226
|
+
* notifications channel. No-op when `crowi.redis` is null (degrade
|
|
227
|
+
* mode: single-instance dev with `REDIS_URL` unset). Failures are
|
|
228
|
+
* warn-only — the polling-removed UI degrades gracefully (the next
|
|
229
|
+
* user action triggers a react-query refetch).
|
|
230
|
+
*
|
|
231
|
+
* The publish is fire-and-forget on purpose: the model statics that
|
|
232
|
+
* invoke `notificationEvent.emit('update', ...)` are awaited by their
|
|
233
|
+
* REST handlers, and we do not want a transient Redis publish failure
|
|
234
|
+
* to surface as a 500 on the user's write request — the notification
|
|
235
|
+
* itself succeeded.
|
|
236
|
+
*/
|
|
237
|
+
function publishNotificationsChange(crowi, userId) {
|
|
238
|
+
const redis = crowi.redis;
|
|
239
|
+
if (!redis || typeof redis.publish !== 'function')
|
|
240
|
+
return;
|
|
241
|
+
const channel = `${channel_1.NOTIFICATIONS_CHANNEL_PREFIX}${userId}`;
|
|
242
|
+
// Build the payload through the shared schema rather than as a hand-
|
|
243
|
+
// rolled literal so a future evolution of the message contract is
|
|
244
|
+
// caught at compile / parse time on both the publisher and the
|
|
245
|
+
// subscriber. The attach handler validates the inbound side with the
|
|
246
|
+
// same schema (`NotificationsServerMessageSchema`).
|
|
247
|
+
const message = JSON.stringify(api_contract_1.NotificationsChangedMessageSchema.parse({ type: 'changed' }));
|
|
248
|
+
crowi.trackSideEffect(Promise.resolve()
|
|
249
|
+
.then(() => redis.publish(channel, message))
|
|
250
|
+
.catch((err) => {
|
|
251
|
+
const m = err instanceof Error ? err.message : String(err);
|
|
252
|
+
moduleDebug('publish failed for user %s: %s', userId, m);
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* RFC-0002 Phase 8: forward an upserted notification to every active
|
|
257
|
+
* notifier plugin (Slack / Webhook / ...). Driver `send()` is called
|
|
258
|
+
* with a normalised `NotificationPayload`; each call is wrapped so a
|
|
259
|
+
* single failing driver does not break the others.
|
|
260
|
+
*
|
|
261
|
+
* The plugin manager is bootstrapped during `Crowi.init()` and may be
|
|
262
|
+
* absent on early-test code paths — we silently no-op then. Reading
|
|
263
|
+
* `crowi.getPlugins()` would throw in that state; the optional access
|
|
264
|
+
* pattern below keeps both the test and production paths simple.
|
|
265
|
+
*/
|
|
266
|
+
function forwardToNotifierPlugins(crowi, notification, activity) {
|
|
267
|
+
const registries = crowi.pluginRegistries;
|
|
268
|
+
const notifiers = registries?.active?.notifiers ?? [];
|
|
269
|
+
if (notifiers.length === 0)
|
|
270
|
+
return;
|
|
271
|
+
const payload = {
|
|
272
|
+
title: `[${activity.action}] page=${String(notification.target)}`,
|
|
273
|
+
body: `user=${String(notification.user)} activity=${String(activity._id)}`,
|
|
274
|
+
event: `notification:${activity.action}`,
|
|
275
|
+
};
|
|
276
|
+
for (const driver of notifiers) {
|
|
277
|
+
crowi.trackSideEffect(Promise.resolve()
|
|
278
|
+
.then(() => driver.send(payload))
|
|
279
|
+
.catch((err) => {
|
|
280
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
281
|
+
moduleDebug('notifier driver send failed: %s', message);
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/models/notification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Document, Model, Types } from 'mongoose';
|
|
2
|
+
import Crowi from '../crowi';
|
|
3
|
+
export interface OAuthAuthorizationCodeDocument extends Document {
|
|
4
|
+
_id: Types.ObjectId;
|
|
5
|
+
codeHash: string;
|
|
6
|
+
clientId: string;
|
|
7
|
+
userId: Types.ObjectId;
|
|
8
|
+
scopes: string[];
|
|
9
|
+
codeChallenge: string;
|
|
10
|
+
codeChallengeMethod: 'S256';
|
|
11
|
+
redirectUri: string;
|
|
12
|
+
expiresAt: Date;
|
|
13
|
+
consumedAt: Date | null;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
}
|
|
16
|
+
export interface OAuthAuthorizationCodeModel extends Model<OAuthAuthorizationCodeDocument> {
|
|
17
|
+
/** Generate a fresh opaque code plaintext + its SHA-256 hash. */
|
|
18
|
+
generateCode(): {
|
|
19
|
+
code: string;
|
|
20
|
+
codeHash: string;
|
|
21
|
+
};
|
|
22
|
+
/** SHA-256-hex of an opaque code (the form stored in `codeHash`). */
|
|
23
|
+
hashCode(code: string): string;
|
|
24
|
+
/** A usable (= unconsumed, unexpired) code matching `codeHash`, or null. */
|
|
25
|
+
findUsable(codeHash: string): Promise<OAuthAuthorizationCodeDocument | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Atomically mark a usable code consumed and return it, or null if it was
|
|
28
|
+
* already consumed / expired / unknown. Prevents a code from being
|
|
29
|
+
* exchanged twice even under concurrent requests.
|
|
30
|
+
*/
|
|
31
|
+
consume(codeHash: string): Promise<OAuthAuthorizationCodeDocument | null>;
|
|
32
|
+
}
|
|
33
|
+
declare const _default: (_crowi: Crowi) => OAuthAuthorizationCodeModel;
|
|
34
|
+
export default _default;
|
|
@@ -0,0 +1,100 @@
|
|
|
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 node_crypto_1 = __importDefault(require("node:crypto"));
|
|
7
|
+
const mongoose_1 = require("mongoose");
|
|
8
|
+
/**
|
|
9
|
+
* RFC-0010 §Mongoose models — OAuth 2.0 authorization code (Auth Code +
|
|
10
|
+
* PKCE flow).
|
|
11
|
+
*
|
|
12
|
+
* Issued by `POST /oauth/authorize` after the user consents, exchanged
|
|
13
|
+
* once at `POST /oauth/token` for an access + refresh token. Short-lived
|
|
14
|
+
* (~60s) and single-use:
|
|
15
|
+
*
|
|
16
|
+
* - Only the SHA-256 **hash** of the opaque code is stored; the plaintext
|
|
17
|
+
* travels via the redirect URI and is never persisted (same one-way
|
|
18
|
+
* storage as PATs / refresh tokens).
|
|
19
|
+
* - A TTL index on `expiresAt` lets MongoDB sweep stale rows; the query
|
|
20
|
+
* side (`findUsable`) *also* filters `expiresAt > now` because the TTL
|
|
21
|
+
* monitor runs at most once a minute and could lag the ~60s lifetime.
|
|
22
|
+
* - `consume` flips `consumedAt` atomically (`findOneAndUpdate`) so two
|
|
23
|
+
* concurrent token exchanges of the same code cannot both succeed.
|
|
24
|
+
*/
|
|
25
|
+
const CODE_RANDOM_BYTES = 32;
|
|
26
|
+
exports.default = (_crowi) => {
|
|
27
|
+
const schema = new mongoose_1.Schema({
|
|
28
|
+
codeHash: {
|
|
29
|
+
type: String,
|
|
30
|
+
required: true,
|
|
31
|
+
unique: true,
|
|
32
|
+
index: true,
|
|
33
|
+
},
|
|
34
|
+
clientId: {
|
|
35
|
+
type: String,
|
|
36
|
+
required: true,
|
|
37
|
+
index: true,
|
|
38
|
+
},
|
|
39
|
+
userId: {
|
|
40
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
41
|
+
ref: 'User',
|
|
42
|
+
required: true,
|
|
43
|
+
index: true,
|
|
44
|
+
},
|
|
45
|
+
scopes: {
|
|
46
|
+
type: [String],
|
|
47
|
+
required: true,
|
|
48
|
+
default: [],
|
|
49
|
+
},
|
|
50
|
+
codeChallenge: {
|
|
51
|
+
type: String,
|
|
52
|
+
required: true,
|
|
53
|
+
},
|
|
54
|
+
codeChallengeMethod: {
|
|
55
|
+
type: String,
|
|
56
|
+
enum: ['S256'],
|
|
57
|
+
required: true,
|
|
58
|
+
},
|
|
59
|
+
redirectUri: {
|
|
60
|
+
type: String,
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
expiresAt: {
|
|
64
|
+
type: Date,
|
|
65
|
+
required: true,
|
|
66
|
+
},
|
|
67
|
+
consumedAt: {
|
|
68
|
+
type: Date,
|
|
69
|
+
default: null,
|
|
70
|
+
},
|
|
71
|
+
createdAt: {
|
|
72
|
+
type: Date,
|
|
73
|
+
default: Date.now,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
// TTL — MongoDB removes rows once `expiresAt` is in the past
|
|
77
|
+
// (`expireAfterSeconds: 0`). The sweep can lag the ~60s lifetime by up
|
|
78
|
+
// to a minute, so `findUsable` / `consume` re-check `expiresAt` too.
|
|
79
|
+
schema.index({ expiresAt: 1 }, { expireAfterSeconds: 0, name: 'oauthAuthCode_ttl' });
|
|
80
|
+
schema.statics.hashCode = function (code) {
|
|
81
|
+
return node_crypto_1.default.createHash('sha256').update(code).digest('hex');
|
|
82
|
+
};
|
|
83
|
+
schema.statics.generateCode = function () {
|
|
84
|
+
const code = node_crypto_1.default.randomBytes(CODE_RANDOM_BYTES).toString('base64url');
|
|
85
|
+
return { code, codeHash: OAuthAuthorizationCode.hashCode(code) };
|
|
86
|
+
};
|
|
87
|
+
schema.statics.findUsable = function (codeHash) {
|
|
88
|
+
return OAuthAuthorizationCode.findOne({
|
|
89
|
+
codeHash,
|
|
90
|
+
consumedAt: null,
|
|
91
|
+
expiresAt: { $gt: new Date() },
|
|
92
|
+
}).exec();
|
|
93
|
+
};
|
|
94
|
+
schema.statics.consume = function (codeHash) {
|
|
95
|
+
return OAuthAuthorizationCode.findOneAndUpdate({ codeHash, consumedAt: null, expiresAt: { $gt: new Date() } }, { consumedAt: new Date() }, { new: true }).exec();
|
|
96
|
+
};
|
|
97
|
+
const OAuthAuthorizationCode = (0, mongoose_1.model)('OAuthAuthorizationCode', schema);
|
|
98
|
+
return OAuthAuthorizationCode;
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=oauth-authorization-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-authorization-code.js","sourceRoot":"","sources":["../../src/models/oauth-authorization-code.ts"],"names":[],"mappings":"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"}
|