@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,681 @@
|
|
|
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.USER_UNIQUE_COLLATION = void 0;
|
|
7
|
+
exports.tombstoneIdentity = tombstoneIdentity;
|
|
8
|
+
const mongoose_1 = require("mongoose");
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
11
|
+
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
12
|
+
const async_1 = __importDefault(require("async"));
|
|
13
|
+
const config_1 = require("../models/config");
|
|
14
|
+
const mail_token_1 = require("../util/mail-token");
|
|
15
|
+
const mongoose_paginate_1 = require("../util/mongoose-paginate");
|
|
16
|
+
const STATUS_REGISTERED = 1;
|
|
17
|
+
const STATUS_ACTIVE = 2;
|
|
18
|
+
const STATUS_SUSPENDED = 3;
|
|
19
|
+
const STATUS_DELETED = 4;
|
|
20
|
+
const STATUS_INVITED = 5;
|
|
21
|
+
/**
|
|
22
|
+
* Case-insensitive collation for the username / email unique indexes
|
|
23
|
+
* (feature-user-identity-uniqueness §b). `strength: 2` folds case (and
|
|
24
|
+
* accents) so `Sotarok` and `sotarok` collide, while the stored value keeps
|
|
25
|
+
* its original casing (display is verbatim). Kept as a module constant so the
|
|
26
|
+
* schema declaration and the migration's duplicate detection use the exact
|
|
27
|
+
* same locale/strength.
|
|
28
|
+
*/
|
|
29
|
+
exports.USER_UNIQUE_COLLATION = { locale: 'en', strength: 2 };
|
|
30
|
+
/**
|
|
31
|
+
* Build the tombstone identity for a user being logically deleted
|
|
32
|
+
* (feature-migration-framework §Phase 5, tombstone approach — 2026-06-04).
|
|
33
|
+
*
|
|
34
|
+
* On STATUS_DELETED we discard the original username / email and replace them
|
|
35
|
+
* with per-id sentinels so the **plain** unique indexes (no
|
|
36
|
+
* `partialFilterExpression`, to stay portable to PostgreSQL) never collide a
|
|
37
|
+
* departed user against a living one, and so a living user can re-claim the
|
|
38
|
+
* freed name. The departed user shows as "deleted user" (Slack-style), so the
|
|
39
|
+
* original values are not preserved anywhere.
|
|
40
|
+
*
|
|
41
|
+
* `email` is `required` so it must always carry a value; `username` is
|
|
42
|
+
* `sparse`-indexed so an unset value would also be index-safe, but we set the
|
|
43
|
+
* tombstone there too for consistency (a deleted user reads back as
|
|
44
|
+
* `deleted-<id>` everywhere rather than sometimes blank).
|
|
45
|
+
*/
|
|
46
|
+
function tombstoneIdentity(id) {
|
|
47
|
+
const suffix = id.toString();
|
|
48
|
+
return { username: `deleted-${suffix}`, email: `deleted-${suffix}@deleted.invalid` };
|
|
49
|
+
}
|
|
50
|
+
const LANG_EN = 'en';
|
|
51
|
+
const LANG_JA = 'ja';
|
|
52
|
+
// Legacy regional variants ('en-US' / 'en-GB') were retired; only 'en' / 'ja'
|
|
53
|
+
// remain. Existing rows carrying a legacy value are coerced to 'en' by the
|
|
54
|
+
// `pre('validate')` hook below, so the tightened enum never rejects them.
|
|
55
|
+
const LEGACY_LANGS = ['en-US', 'en-GB'];
|
|
56
|
+
const THEME_SYSTEM = 'system';
|
|
57
|
+
const THEME_LIGHT = 'light';
|
|
58
|
+
const THEME_DARK = 'dark';
|
|
59
|
+
const PAGE_ITEMS = 50;
|
|
60
|
+
exports.default = (crowi) => {
|
|
61
|
+
const debug = (0, debug_1.default)('crowi:models:user');
|
|
62
|
+
const userEvent = crowi.event('User');
|
|
63
|
+
const userSchema = new mongoose_1.Schema({
|
|
64
|
+
userId: String,
|
|
65
|
+
image: String,
|
|
66
|
+
googleId: String,
|
|
67
|
+
githubId: String,
|
|
68
|
+
name: { type: String, index: true },
|
|
69
|
+
username: { type: String },
|
|
70
|
+
email: { type: String, required: true },
|
|
71
|
+
introduction: { type: String },
|
|
72
|
+
password: { type: String, select: false },
|
|
73
|
+
lang: {
|
|
74
|
+
type: String,
|
|
75
|
+
enum: Object.values(getLanguageLabels()),
|
|
76
|
+
default: LANG_EN,
|
|
77
|
+
},
|
|
78
|
+
theme: {
|
|
79
|
+
type: String,
|
|
80
|
+
enum: [THEME_SYSTEM, THEME_LIGHT, THEME_DARK],
|
|
81
|
+
default: THEME_SYSTEM,
|
|
82
|
+
},
|
|
83
|
+
status: { type: Number, required: true, default: STATUS_ACTIVE, index: true },
|
|
84
|
+
createdAt: { type: Date, default: Date.now },
|
|
85
|
+
admin: { type: Boolean, default: false, index: true },
|
|
86
|
+
emailConfirmedAt: { type: Date, default: null },
|
|
87
|
+
});
|
|
88
|
+
(0, mongoose_paginate_1.applyPaginatePlugin)(userSchema);
|
|
89
|
+
// feature-user-identity-uniqueness — DB-level uniqueness on username / email
|
|
90
|
+
// (the final defence; app-layer findOne pre-checks remain only for UX).
|
|
91
|
+
//
|
|
92
|
+
// Tombstone + plain unique (no partialFilterExpression) so this stays
|
|
93
|
+
// portable to a future PostgreSQL backend (citext / lower() + plain UNIQUE).
|
|
94
|
+
// STATUS_DELETED users are renamed to `deleted-<id>` (see tombstoneIdentity /
|
|
95
|
+
// statusDelete), so they never collide a living user and free their name.
|
|
96
|
+
//
|
|
97
|
+
// - email: required on every user → plain unique + case-insensitive collation.
|
|
98
|
+
// - username: `sparse` so the INVITED rows created without a username
|
|
99
|
+
// (createUsersByInvitation sets no `username` field) stay out of the index
|
|
100
|
+
// and don't collide on a missing value; collation folds case like email.
|
|
101
|
+
//
|
|
102
|
+
// autoIndex is ON (mongoose default) so a fresh install builds these on boot;
|
|
103
|
+
// the `user-unique-prepare` preflight migration dedups + tombstones existing
|
|
104
|
+
// data so the build never hits E11000 on an in-place v1→v2 upgrade.
|
|
105
|
+
userSchema.index({ email: 1 }, { unique: true, collation: exports.USER_UNIQUE_COLLATION });
|
|
106
|
+
userSchema.index({ username: 1 }, { unique: true, sparse: true, collation: exports.USER_UNIQUE_COLLATION });
|
|
107
|
+
// `onActivated` is async but `emit('activated', ...)` (a synchronous
|
|
108
|
+
// EventEmitter dispatch) does not await it. Track the returned promise so
|
|
109
|
+
// the user-page creation it kicks off — which re-fires page events and
|
|
110
|
+
// fans out to backlink / watch / mention — can be drained by the test
|
|
111
|
+
// harness before disconnect. Production never drains, so this only adds
|
|
112
|
+
// the side-effect to the in-flight set.
|
|
113
|
+
//
|
|
114
|
+
// `onActivated` swallows errors only inside `createUserPage`; its own
|
|
115
|
+
// `findPage()` / `rename()` awaits are not caught, so a rejection there
|
|
116
|
+
// would surface as an unhandled rejection. Attach `.catch(debug)` here so
|
|
117
|
+
// the tracked promise can never reject — symmetric with the other
|
|
118
|
+
// fire-and-forget call sites.
|
|
119
|
+
userEvent.on('activated', (user) => {
|
|
120
|
+
crowi.trackSideEffect(Promise.resolve(userEvent.onActivated(user)).catch((err) => {
|
|
121
|
+
debug('userEvent activated handler failed', err);
|
|
122
|
+
}));
|
|
123
|
+
});
|
|
124
|
+
function decideUserStatusOnRegistration() {
|
|
125
|
+
const Config = crowi.model('Config');
|
|
126
|
+
const config = crowi.getConfig();
|
|
127
|
+
if (!config.crowi) {
|
|
128
|
+
return STATUS_ACTIVE; // is this ok?
|
|
129
|
+
}
|
|
130
|
+
// status decided depends on registrationMode
|
|
131
|
+
switch (config.crowi['security:registrationMode']) {
|
|
132
|
+
case Config.SECURITY_REGISTRATION_MODE_OPEN:
|
|
133
|
+
return STATUS_ACTIVE;
|
|
134
|
+
case Config.SECURITY_REGISTRATION_MODE_RESTRICTED:
|
|
135
|
+
case Config.SECURITY_REGISTRATION_MODE_CLOSED: // 一応
|
|
136
|
+
return STATUS_REGISTERED;
|
|
137
|
+
default:
|
|
138
|
+
return STATUS_ACTIVE; // どっちにすんのがいいんだろうな
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function generateRandomTempPassword() {
|
|
142
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!=-_';
|
|
143
|
+
let password = '';
|
|
144
|
+
const len = 12;
|
|
145
|
+
for (let i = 0; i < len; i++) {
|
|
146
|
+
const randomPoz = Math.floor(Math.random() * chars.length);
|
|
147
|
+
password += chars.substring(randomPoz, randomPoz + 1);
|
|
148
|
+
}
|
|
149
|
+
return password;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate password hash using SHA-256 (legacy algorithm)
|
|
153
|
+
* This is kept for backward compatibility with existing passwords
|
|
154
|
+
*/
|
|
155
|
+
function generatePasswordLegacy(password) {
|
|
156
|
+
const hasher = crypto_1.default.createHash('sha256');
|
|
157
|
+
hasher.update(crowi.env.PASSWORD_SEED + password);
|
|
158
|
+
return hasher.digest('hex');
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Generate password hash using bcrypt (recommended)
|
|
162
|
+
* Bcrypt hashes start with $2a$ or $2b$ prefix
|
|
163
|
+
*/
|
|
164
|
+
function generatePasswordHash(password) {
|
|
165
|
+
const saltRounds = 10;
|
|
166
|
+
return bcryptjs_1.default.hashSync(password, saltRounds);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Check if a hash is a bcrypt hash
|
|
170
|
+
* Bcrypt hashes start with $2a$ or $2b$ prefix
|
|
171
|
+
*/
|
|
172
|
+
function isBcryptHash(hash) {
|
|
173
|
+
return hash && (hash.startsWith('$2a$') || hash.startsWith('$2b$'));
|
|
174
|
+
}
|
|
175
|
+
function getLanguageLabels() {
|
|
176
|
+
const lang = {
|
|
177
|
+
LANG_EN,
|
|
178
|
+
LANG_JA,
|
|
179
|
+
};
|
|
180
|
+
return lang;
|
|
181
|
+
}
|
|
182
|
+
// Coerce a legacy regional `lang` ('en-US' / 'en-GB') to 'en' before
|
|
183
|
+
// validation so saving a doc loaded from a pre-existing row never trips the
|
|
184
|
+
// tightened ['en','ja'] enum. Self-healing: the row is normalised on its
|
|
185
|
+
// next save, no separate data migration required.
|
|
186
|
+
userSchema.pre('validate', function (next) {
|
|
187
|
+
if (this.lang && LEGACY_LANGS.includes(this.lang)) {
|
|
188
|
+
this.lang = LANG_EN;
|
|
189
|
+
}
|
|
190
|
+
next();
|
|
191
|
+
});
|
|
192
|
+
userSchema.methods.isPasswordSet = function () {
|
|
193
|
+
if (this.password) {
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
197
|
+
};
|
|
198
|
+
userSchema.methods.isPasswordValid = function (password) {
|
|
199
|
+
debug('Password check - stored hash format:', isBcryptHash(this.password) ? 'bcrypt' : 'legacy SHA-256');
|
|
200
|
+
// Check if stored password is a bcrypt hash
|
|
201
|
+
if (isBcryptHash(this.password)) {
|
|
202
|
+
return bcryptjs_1.default.compareSync(password, this.password);
|
|
203
|
+
}
|
|
204
|
+
// Fall back to legacy SHA-256 verification for backward compatibility
|
|
205
|
+
const inputHash = generatePasswordLegacy(password);
|
|
206
|
+
debug('Password check - stored:', this.password);
|
|
207
|
+
debug('Password check - input hash (legacy):', inputHash);
|
|
208
|
+
debug('Password check - PASSWORD_SEED exists:', !!crowi.env.PASSWORD_SEED);
|
|
209
|
+
return this.password == inputHash;
|
|
210
|
+
};
|
|
211
|
+
userSchema.methods.setPassword = function (password) {
|
|
212
|
+
// Always use bcrypt for new passwords
|
|
213
|
+
this.password = generatePasswordHash(password);
|
|
214
|
+
debug('Password set using bcrypt');
|
|
215
|
+
return this;
|
|
216
|
+
};
|
|
217
|
+
userSchema.methods.isEmailSet = function () {
|
|
218
|
+
if (this.email) {
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
};
|
|
223
|
+
// mongoose 7 dropped the callback form of Document#save(). These public
|
|
224
|
+
// model methods keep their `(err, userData)` callback signature for the
|
|
225
|
+
// handler call sites; only the internal save is switched to the promise
|
|
226
|
+
// form, with this bridge forwarding resolution/rejection to the callback.
|
|
227
|
+
// `doc` is typed by the schema-method `this`, which mongoose 8 hydrates to
|
|
228
|
+
// a richer type than the bare `UserDocument`, so accept any saveable doc.
|
|
229
|
+
function bridgeSave(saving, fallback, callback) {
|
|
230
|
+
saving.then((userData) => callback(null, userData),
|
|
231
|
+
// On a save failure there is no saved document; the legacy callback
|
|
232
|
+
// form also surfaced the in-memory doc, so forward it as the error case.
|
|
233
|
+
(err) => callback(err, fallback));
|
|
234
|
+
}
|
|
235
|
+
userSchema.methods.updatePassword = function (password, callback) {
|
|
236
|
+
this.setPassword(password);
|
|
237
|
+
bridgeSave(this.save(), this, callback);
|
|
238
|
+
};
|
|
239
|
+
userSchema.methods.updateImage = function (image, callback) {
|
|
240
|
+
this.image = image;
|
|
241
|
+
bridgeSave(this.save(), this, callback);
|
|
242
|
+
};
|
|
243
|
+
userSchema.methods.updateEmail = function (email) {
|
|
244
|
+
this.email = email;
|
|
245
|
+
return this.save();
|
|
246
|
+
};
|
|
247
|
+
userSchema.methods.updateNameAndEmail = function (name, email) {
|
|
248
|
+
this.name = name;
|
|
249
|
+
this.email = email;
|
|
250
|
+
return this.save();
|
|
251
|
+
};
|
|
252
|
+
userSchema.methods.deleteImage = function (callback) {
|
|
253
|
+
return this.updateImage(null, callback);
|
|
254
|
+
};
|
|
255
|
+
userSchema.methods.updateGoogleId = function (googleId) {
|
|
256
|
+
this.googleId = googleId;
|
|
257
|
+
return this.save();
|
|
258
|
+
};
|
|
259
|
+
userSchema.methods.deleteGoogleId = function () {
|
|
260
|
+
return this.updateGoogleId(null);
|
|
261
|
+
};
|
|
262
|
+
userSchema.methods.updateGitHubId = function (githubId) {
|
|
263
|
+
this.githubId = githubId;
|
|
264
|
+
return this.save();
|
|
265
|
+
};
|
|
266
|
+
userSchema.methods.deleteGitHubId = function () {
|
|
267
|
+
return this.updateGitHubId(null);
|
|
268
|
+
};
|
|
269
|
+
userSchema.methods.countValidThirdPartyIds = function () {
|
|
270
|
+
const config = crowi.getConfig();
|
|
271
|
+
const googleId = (0, config_1.googleLoginEnabled)(config) && this.googleId;
|
|
272
|
+
const githubId = (0, config_1.githubLoginEnabled)(config) && this.githubId;
|
|
273
|
+
const validIds = [googleId, githubId].filter(Boolean);
|
|
274
|
+
return validIds.length;
|
|
275
|
+
};
|
|
276
|
+
userSchema.methods.hasValidThirdPartyId = function () {
|
|
277
|
+
return this.countValidThirdPartyIds() > 0;
|
|
278
|
+
};
|
|
279
|
+
userSchema.methods.canDisconnectThirdPartyId = function () {
|
|
280
|
+
const config = crowi.getConfig();
|
|
281
|
+
return !(0, config_1.isDisabledPasswordAuth)(config) || this.countValidThirdPartyIds() > 1;
|
|
282
|
+
};
|
|
283
|
+
userSchema.methods.activateInvitedUser = function (username, name, password, callback) {
|
|
284
|
+
this.setPassword(password);
|
|
285
|
+
this.name = name;
|
|
286
|
+
this.username = username;
|
|
287
|
+
this.status = STATUS_ACTIVE;
|
|
288
|
+
// Clicking the invite link proves control of the email address.
|
|
289
|
+
this.emailConfirmedAt = new Date();
|
|
290
|
+
this.save().then((userData) => {
|
|
291
|
+
userEvent.emit('activated', userData);
|
|
292
|
+
return callback(null, userData);
|
|
293
|
+
}, (err) => callback(err, this));
|
|
294
|
+
};
|
|
295
|
+
userSchema.methods.removeFromAdmin = function (callback) {
|
|
296
|
+
debug('Remove from admin', this);
|
|
297
|
+
this.admin = false;
|
|
298
|
+
bridgeSave(this.save(), this, callback);
|
|
299
|
+
};
|
|
300
|
+
userSchema.methods.makeAdmin = function (callback) {
|
|
301
|
+
debug('Admin', this);
|
|
302
|
+
this.admin = true;
|
|
303
|
+
bridgeSave(this.save(), this, callback);
|
|
304
|
+
};
|
|
305
|
+
userSchema.methods.statusActivate = function (callback) {
|
|
306
|
+
debug('Activate User', this);
|
|
307
|
+
this.status = STATUS_ACTIVE;
|
|
308
|
+
this.save().then((userData) => {
|
|
309
|
+
userEvent.emit('activated', userData);
|
|
310
|
+
return callback(null, userData);
|
|
311
|
+
}, (err) => callback(err, this));
|
|
312
|
+
};
|
|
313
|
+
userSchema.methods.statusSuspend = function (callback) {
|
|
314
|
+
debug('Suspend User', this);
|
|
315
|
+
this.status = STATUS_SUSPENDED;
|
|
316
|
+
if (this.email === undefined || this.email === null) {
|
|
317
|
+
// migrate old data
|
|
318
|
+
this.email = '-';
|
|
319
|
+
}
|
|
320
|
+
if (this.name === undefined || this.name === null) {
|
|
321
|
+
// migrate old data
|
|
322
|
+
this.name = '-' + Date.now();
|
|
323
|
+
}
|
|
324
|
+
if (this.username === undefined || this.username === null) {
|
|
325
|
+
// migrate old data
|
|
326
|
+
this.username = '-';
|
|
327
|
+
}
|
|
328
|
+
bridgeSave(this.save(), this, callback);
|
|
329
|
+
};
|
|
330
|
+
userSchema.methods.statusDelete = function (callback) {
|
|
331
|
+
debug('Delete User', this);
|
|
332
|
+
this.status = STATUS_DELETED;
|
|
333
|
+
this.password = '';
|
|
334
|
+
// Tombstone the identity: discard the original username / email and write
|
|
335
|
+
// per-id sentinels so the plain unique indexes free the name for re-use and
|
|
336
|
+
// never collide this departed user against a living one (Phase 5 tombstone
|
|
337
|
+
// approach). The former fixed `deleted@deleted` email collided across every
|
|
338
|
+
// deleted user under a plain unique index.
|
|
339
|
+
const tombstone = tombstoneIdentity(this._id);
|
|
340
|
+
this.username = tombstone.username;
|
|
341
|
+
this.email = tombstone.email;
|
|
342
|
+
this.googleId = null;
|
|
343
|
+
this.image = null;
|
|
344
|
+
bridgeSave(this.save(), this, callback);
|
|
345
|
+
};
|
|
346
|
+
userSchema.methods.populateSecrets = async function () {
|
|
347
|
+
return User.findById(this._id, '+password').exec();
|
|
348
|
+
};
|
|
349
|
+
userSchema.statics.getLanguageLabels = getLanguageLabels;
|
|
350
|
+
userSchema.statics.getUserStatusLabels = function () {
|
|
351
|
+
const userStatus = {};
|
|
352
|
+
userStatus[STATUS_REGISTERED] = '承認待ち';
|
|
353
|
+
userStatus[STATUS_ACTIVE] = 'Active';
|
|
354
|
+
userStatus[STATUS_SUSPENDED] = 'Suspended';
|
|
355
|
+
userStatus[STATUS_DELETED] = 'Deleted';
|
|
356
|
+
userStatus[STATUS_INVITED] = '招待済み';
|
|
357
|
+
return userStatus;
|
|
358
|
+
};
|
|
359
|
+
userSchema.statics.isEmailValid = function (email) {
|
|
360
|
+
const config = crowi.getConfig();
|
|
361
|
+
const whitelist = config.crowi['security:registrationWhiteList'];
|
|
362
|
+
if (!Array.isArray(whitelist) || whitelist.length === 0) {
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
const target = String(email ?? '')
|
|
366
|
+
.trim()
|
|
367
|
+
.toLowerCase();
|
|
368
|
+
if (target.length === 0)
|
|
369
|
+
return false;
|
|
370
|
+
// Each whitelist entry is matched as a literal (no regex), case-insensitively:
|
|
371
|
+
// - 'admin@example.com' → exact full-address match
|
|
372
|
+
// - '@example.com' → any local-part at that domain
|
|
373
|
+
// - 'example.com' → that domain or any subdomain of it
|
|
374
|
+
// This replaces the legacy `new RegExp(entry + '$')`, which left entries
|
|
375
|
+
// unanchored at the start (so 'example.com' also matched 'notexample.com'),
|
|
376
|
+
// unescaped (metachars like '.' matched any char; a bad entry threw), and
|
|
377
|
+
// case-sensitive.
|
|
378
|
+
return whitelist.some(function (allowedEmail) {
|
|
379
|
+
const entry = String(allowedEmail ?? '')
|
|
380
|
+
.trim()
|
|
381
|
+
.toLowerCase();
|
|
382
|
+
if (entry.length === 0)
|
|
383
|
+
return false;
|
|
384
|
+
if (entry.startsWith('@'))
|
|
385
|
+
return target.endsWith(entry);
|
|
386
|
+
if (entry.includes('@'))
|
|
387
|
+
return target === entry;
|
|
388
|
+
return target.endsWith(`@${entry}`) || target.endsWith(`.${entry}`);
|
|
389
|
+
});
|
|
390
|
+
};
|
|
391
|
+
userSchema.statics.isGitHubAccountValid = function (organizations) {
|
|
392
|
+
const config = crowi.getConfig();
|
|
393
|
+
const org = config.crowi['github:organization'];
|
|
394
|
+
const orgs = organizations || [];
|
|
395
|
+
return !org || orgs.includes(org);
|
|
396
|
+
};
|
|
397
|
+
userSchema.statics.findUsers = function (options, callback) {
|
|
398
|
+
const sort = options.sort || { status: 1, createdAt: 1 };
|
|
399
|
+
// mongoose 7 dropped Query#exec(callback); bridge the promise to the
|
|
400
|
+
// existing callback signature.
|
|
401
|
+
this.find()
|
|
402
|
+
.sort(sort)
|
|
403
|
+
.skip(options.skip || 0)
|
|
404
|
+
.limit(options.limit || 21)
|
|
405
|
+
.exec()
|
|
406
|
+
.then((userData) => callback(null, userData), (err) => callback(err, []));
|
|
407
|
+
};
|
|
408
|
+
userSchema.statics.findAllUsers = function (options = {}) {
|
|
409
|
+
const sort = options.sort || { createdAt: -1 };
|
|
410
|
+
let status = options.status || [STATUS_ACTIVE, STATUS_SUSPENDED];
|
|
411
|
+
const fields = options.fields;
|
|
412
|
+
if (!Array.isArray(status)) {
|
|
413
|
+
status = [status];
|
|
414
|
+
}
|
|
415
|
+
return User.find()
|
|
416
|
+
.or(status.map((s) => {
|
|
417
|
+
return { status: s };
|
|
418
|
+
}))
|
|
419
|
+
.select(fields)
|
|
420
|
+
.sort(sort)
|
|
421
|
+
.exec();
|
|
422
|
+
};
|
|
423
|
+
userSchema.statics.findUsersByIds = function (ids, options = {}) {
|
|
424
|
+
const sort = options.sort || { createdAt: -1 };
|
|
425
|
+
const status = options.status || STATUS_ACTIVE;
|
|
426
|
+
const fields = options.fields;
|
|
427
|
+
return User.find({ _id: { $in: ids }, status: status })
|
|
428
|
+
.select(fields)
|
|
429
|
+
.sort(sort)
|
|
430
|
+
.exec();
|
|
431
|
+
};
|
|
432
|
+
userSchema.statics.findAdmins = function (callback) {
|
|
433
|
+
this.find({ admin: true })
|
|
434
|
+
.exec()
|
|
435
|
+
.then((admins) => {
|
|
436
|
+
debug('Admins: ', admins);
|
|
437
|
+
callback(null, admins);
|
|
438
|
+
}, (err) => callback(err, []));
|
|
439
|
+
};
|
|
440
|
+
userSchema.statics.findUsersWithPagination = function (options, query, callback) {
|
|
441
|
+
const sort = options.sort || { status: 1, username: 1, createdAt: 1 };
|
|
442
|
+
// mongoose-paginate-v2 returns a promise; the callback form was removed.
|
|
443
|
+
// Result fields totalDocs/totalPages replace mongoose-paginate's
|
|
444
|
+
// total/pages — callers that need the legacy names absorb the rename.
|
|
445
|
+
this.paginate(query, {
|
|
446
|
+
page: options.page || 1,
|
|
447
|
+
limit: options.limit || PAGE_ITEMS,
|
|
448
|
+
sort,
|
|
449
|
+
// Drop secret fields at the Mongo layer instead of stripping them
|
|
450
|
+
// client-side via toUserPublic. Saves bandwidth between Mongo and
|
|
451
|
+
// Node and ensures no admin handler accidentally leaks a hash.
|
|
452
|
+
select: '-password -googleId -githubId',
|
|
453
|
+
}).then((result) => callback(null, result), (err) => {
|
|
454
|
+
debug('Error on pagination:', err);
|
|
455
|
+
return callback(err, null);
|
|
456
|
+
});
|
|
457
|
+
};
|
|
458
|
+
userSchema.statics.findUsersByPartOfEmail = function (emailPart, options) {
|
|
459
|
+
const status = options.status || null;
|
|
460
|
+
const emailPartRegExp = new RegExp(emailPart.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'));
|
|
461
|
+
const query = User.find({ email: emailPartRegExp });
|
|
462
|
+
if (status) {
|
|
463
|
+
query.and({ status });
|
|
464
|
+
}
|
|
465
|
+
return query.limit(PAGE_ITEMS + 1).exec();
|
|
466
|
+
};
|
|
467
|
+
userSchema.statics.findUserByUsername = function (username) {
|
|
468
|
+
return User.findOne({ username }).exec();
|
|
469
|
+
};
|
|
470
|
+
userSchema.statics.findUserByGoogleId = function (googleId) {
|
|
471
|
+
return User.findOne({ googleId }).exec();
|
|
472
|
+
};
|
|
473
|
+
userSchema.statics.findUserByGitHubId = function (githubId) {
|
|
474
|
+
return User.findOne({ githubId }).exec();
|
|
475
|
+
};
|
|
476
|
+
userSchema.statics.findUserByEmail = function (email) {
|
|
477
|
+
return User.findOne({ email }).exec();
|
|
478
|
+
};
|
|
479
|
+
userSchema.statics.findUserByEmailAndPassword = async function (email, password) {
|
|
480
|
+
// First, try to find user by email and legacy SHA-256 hash (for backward compatibility)
|
|
481
|
+
const hashedPasswordLegacy = generatePasswordLegacy(password);
|
|
482
|
+
let user = await User.findOne({ email, password: hashedPasswordLegacy }).select('+password').exec();
|
|
483
|
+
if (user) {
|
|
484
|
+
debug('User found with legacy SHA-256 password');
|
|
485
|
+
return user;
|
|
486
|
+
}
|
|
487
|
+
// If not found, find user by email and verify bcrypt password
|
|
488
|
+
user = await User.findOne({ email }).select('+password').exec();
|
|
489
|
+
if (user && user.password && isBcryptHash(user.password)) {
|
|
490
|
+
const isValid = bcryptjs_1.default.compareSync(password, user.password);
|
|
491
|
+
if (isValid) {
|
|
492
|
+
debug('User found with bcrypt password');
|
|
493
|
+
return user;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return null;
|
|
497
|
+
};
|
|
498
|
+
userSchema.statics.isRegisterableUsername = async function (username, callback) {
|
|
499
|
+
const userData = await User.findOne({ username });
|
|
500
|
+
if (userData) {
|
|
501
|
+
return callback(false);
|
|
502
|
+
}
|
|
503
|
+
return callback(true);
|
|
504
|
+
};
|
|
505
|
+
userSchema.statics.isRegisterable = async function (email, username, callback) {
|
|
506
|
+
let emailUsable = true;
|
|
507
|
+
let usernameUsable = true;
|
|
508
|
+
let userData = null;
|
|
509
|
+
// username check
|
|
510
|
+
userData = await User.findOne({ username });
|
|
511
|
+
if (userData) {
|
|
512
|
+
usernameUsable = false;
|
|
513
|
+
}
|
|
514
|
+
// email check
|
|
515
|
+
userData = await User.findOne({ email });
|
|
516
|
+
if (userData) {
|
|
517
|
+
emailUsable = false;
|
|
518
|
+
}
|
|
519
|
+
if (!emailUsable || !usernameUsable) {
|
|
520
|
+
return callback(false, { email: emailUsable, username: usernameUsable });
|
|
521
|
+
}
|
|
522
|
+
return callback(true, {});
|
|
523
|
+
};
|
|
524
|
+
userSchema.statics.removeCompletelyById = function (id, callback) {
|
|
525
|
+
// mongoose 7 dropped findById(cb) and Document#remove(); use the promise
|
|
526
|
+
// form + deleteOne(). The public (err, 1|null) callback is preserved.
|
|
527
|
+
User.findById(id)
|
|
528
|
+
.then((userData) => {
|
|
529
|
+
if (!userData) {
|
|
530
|
+
return callback(null, null);
|
|
531
|
+
}
|
|
532
|
+
debug('Removing user:', userData);
|
|
533
|
+
// 物理削除可能なのは、招待中ユーザーのみ
|
|
534
|
+
// 利用を一度開始したユーザーは論理削除のみ可能
|
|
535
|
+
if (userData.status !== STATUS_INVITED) {
|
|
536
|
+
return callback(new Error('Cannot remove completely the user whoes status is not INVITED'), null);
|
|
537
|
+
}
|
|
538
|
+
return userData.deleteOne().then(() => callback(null, 1), (err) => callback(err, null));
|
|
539
|
+
})
|
|
540
|
+
.catch((err) => callback(err, null));
|
|
541
|
+
};
|
|
542
|
+
userSchema.statics.resetPasswordByRandomString = async function (id) {
|
|
543
|
+
const userData = await User.findById(id);
|
|
544
|
+
if (!userData) {
|
|
545
|
+
throw new Error('User not found');
|
|
546
|
+
}
|
|
547
|
+
// is updatable check
|
|
548
|
+
// if (userData.isUp
|
|
549
|
+
const newPassword = generateRandomTempPassword();
|
|
550
|
+
userData.setPassword(newPassword);
|
|
551
|
+
const user = await userData.save();
|
|
552
|
+
return { user, newPassword };
|
|
553
|
+
};
|
|
554
|
+
userSchema.statics.createUsersByInvitation = function (emailList, toSendEmail, callback) {
|
|
555
|
+
const createdUserList = [];
|
|
556
|
+
const config = crowi.getConfig();
|
|
557
|
+
const mailer = crowi.getMailer();
|
|
558
|
+
if (!Array.isArray(emailList)) {
|
|
559
|
+
debug('emailList is not array');
|
|
560
|
+
}
|
|
561
|
+
async_1.default.each(emailList, function (email, next) {
|
|
562
|
+
const newUser = new User();
|
|
563
|
+
let password;
|
|
564
|
+
email = email.trim();
|
|
565
|
+
// email check
|
|
566
|
+
// TODO: 削除済みはチェック対象から外そう〜
|
|
567
|
+
// mongoose 7 dropped the callback forms of findOne()/save(); use
|
|
568
|
+
// promises inside the async.each iteratee, still calling next().
|
|
569
|
+
User.findOne({ email })
|
|
570
|
+
.then((user) => {
|
|
571
|
+
// The user is exists
|
|
572
|
+
if (user) {
|
|
573
|
+
createdUserList.push({ email, password: null, user: null });
|
|
574
|
+
return next();
|
|
575
|
+
}
|
|
576
|
+
password = Math.random().toString(36).slice(-16);
|
|
577
|
+
newUser.email = email;
|
|
578
|
+
newUser.setPassword(password);
|
|
579
|
+
newUser.createdAt = Date.now();
|
|
580
|
+
newUser.status = STATUS_INVITED;
|
|
581
|
+
return newUser.save().then((saved) => {
|
|
582
|
+
createdUserList.push({ email, password, user: saved });
|
|
583
|
+
debug('saved!', email);
|
|
584
|
+
next();
|
|
585
|
+
}, () => {
|
|
586
|
+
createdUserList.push({ email, password: null, user: null });
|
|
587
|
+
debug('save failed!! ', email);
|
|
588
|
+
next();
|
|
589
|
+
});
|
|
590
|
+
})
|
|
591
|
+
.catch(() => {
|
|
592
|
+
createdUserList.push({ email, password: null, user: null });
|
|
593
|
+
debug('save failed!! ', email);
|
|
594
|
+
next();
|
|
595
|
+
});
|
|
596
|
+
}, function (err) {
|
|
597
|
+
if (err) {
|
|
598
|
+
debug('error occured while iterate email list');
|
|
599
|
+
}
|
|
600
|
+
if (toSendEmail) {
|
|
601
|
+
const mailTokenUtil = (0, mail_token_1.createMailTokenUtil)();
|
|
602
|
+
const brand = mailer.brandVars();
|
|
603
|
+
// Absolute base for the invite link (CLIENT_URL).
|
|
604
|
+
const baseUrl = crowi.getBaseUrl() || '';
|
|
605
|
+
async_1.default.each(createdUserList, function (item, next) {
|
|
606
|
+
// Skip rows that already existed or failed to save.
|
|
607
|
+
if (!item.user) {
|
|
608
|
+
return next();
|
|
609
|
+
}
|
|
610
|
+
// Token-based invite link — no plaintext password is ever
|
|
611
|
+
// emailed; the invitee sets their own credentials on accept.
|
|
612
|
+
const { token } = mailTokenUtil.signMailToken({
|
|
613
|
+
purpose: 'invite',
|
|
614
|
+
userId: item.user._id.toString(),
|
|
615
|
+
email: item.email,
|
|
616
|
+
});
|
|
617
|
+
const inviteUrl = `${baseUrl}/invite/accept?token=${token}`;
|
|
618
|
+
mailer
|
|
619
|
+
.send({
|
|
620
|
+
to: item.email,
|
|
621
|
+
htmlTemplate: 'invite',
|
|
622
|
+
vars: { ...brand, inviteUrl, email: item.email },
|
|
623
|
+
})
|
|
624
|
+
// A send failure must not abort user creation — log and
|
|
625
|
+
// continue so the remaining invitations still go out.
|
|
626
|
+
.then(() => debug('completed to send invitation to', item.email))
|
|
627
|
+
.catch((err) => debug('failed to send invitation email: ', err))
|
|
628
|
+
.finally(() => next());
|
|
629
|
+
}, function (err) {
|
|
630
|
+
debug('Sending invitation email completed.', err);
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
debug('createdUserList!!! ', createdUserList);
|
|
634
|
+
return callback(null, createdUserList);
|
|
635
|
+
});
|
|
636
|
+
};
|
|
637
|
+
userSchema.statics.createUserByEmailAndPassword = function (name, username, email, password, lang, callback) {
|
|
638
|
+
const newUser = new User();
|
|
639
|
+
newUser.name = name;
|
|
640
|
+
newUser.username = username;
|
|
641
|
+
newUser.email = email;
|
|
642
|
+
newUser.setPassword(password);
|
|
643
|
+
newUser.lang = lang;
|
|
644
|
+
newUser.createdAt = Date.now();
|
|
645
|
+
newUser.status = decideUserStatusOnRegistration();
|
|
646
|
+
// mongoose 7 dropped Document#save(callback); bridge the promise.
|
|
647
|
+
newUser.save().then((userData) => {
|
|
648
|
+
if (userData.status == STATUS_ACTIVE) {
|
|
649
|
+
userEvent.emit('activated', userData);
|
|
650
|
+
}
|
|
651
|
+
return callback(null, userData);
|
|
652
|
+
}, (err) => callback(err, null));
|
|
653
|
+
};
|
|
654
|
+
userSchema.statics.createUserPictureFilePath = function (user, ext) {
|
|
655
|
+
ext = '.' + ext;
|
|
656
|
+
return 'user/' + user._id + ext;
|
|
657
|
+
};
|
|
658
|
+
userSchema.statics.getUsernameByPath = function (path) {
|
|
659
|
+
let username = null;
|
|
660
|
+
let m;
|
|
661
|
+
if ((m = path.match(/^\/user\/([^/]+)\/?/))) {
|
|
662
|
+
username = m[1];
|
|
663
|
+
}
|
|
664
|
+
return username;
|
|
665
|
+
};
|
|
666
|
+
const User = (0, mongoose_1.model)('User', userSchema);
|
|
667
|
+
// 静的プロパティをスキーマではなくモデルに直接割り当て
|
|
668
|
+
User.STATUS_REGISTERED = STATUS_REGISTERED;
|
|
669
|
+
User.STATUS_ACTIVE = STATUS_ACTIVE;
|
|
670
|
+
User.STATUS_SUSPENDED = STATUS_SUSPENDED;
|
|
671
|
+
User.STATUS_DELETED = STATUS_DELETED;
|
|
672
|
+
User.STATUS_INVITED = STATUS_INVITED;
|
|
673
|
+
User.PAGE_ITEMS = PAGE_ITEMS;
|
|
674
|
+
User.LANG_EN = LANG_EN;
|
|
675
|
+
User.LANG_JA = LANG_JA;
|
|
676
|
+
User.THEME_SYSTEM = THEME_SYSTEM;
|
|
677
|
+
User.THEME_LIGHT = THEME_LIGHT;
|
|
678
|
+
User.THEME_DARK = THEME_DARK;
|
|
679
|
+
return User;
|
|
680
|
+
};
|
|
681
|
+
//# sourceMappingURL=user.js.map
|