@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,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const debug_1 = __importDefault(require("debug"));
|
|
7
|
+
const auth_1 = __importDefault(require("./auth"));
|
|
8
|
+
const passport_1 = __importDefault(require("passport"));
|
|
9
|
+
const passport_github_1 = require("passport-github");
|
|
10
|
+
const url_1 = require("./url");
|
|
11
|
+
// import Octokit from '@octokit/rest'
|
|
12
|
+
const debug = (0, debug_1.default)('crowi:lib:githubAuth');
|
|
13
|
+
exports.default = (config) => {
|
|
14
|
+
const lib = {};
|
|
15
|
+
lib.PROVIDER = 'github';
|
|
16
|
+
function useGitHubStrategy(config, callbackQuery = '') {
|
|
17
|
+
passport_1.default.use(new passport_github_1.Strategy({
|
|
18
|
+
clientID: config.crowi['github:clientId'],
|
|
19
|
+
clientSecret: config.crowi['github:clientSecret'],
|
|
20
|
+
callbackURL: `${config.crowi['app:url']}/github/callback${callbackQuery}`,
|
|
21
|
+
scope: ['user:email', 'read:org'],
|
|
22
|
+
}, async (accessToken, refreshToken, profile, callback) => {
|
|
23
|
+
debug('profile', profile);
|
|
24
|
+
// 一時的に組織情報を取得する機能を無効化
|
|
25
|
+
// const octokit = new Octokit({ auth: accessToken })
|
|
26
|
+
// const { data: orgs } = await octokit.orgs.listForAuthenticatedUser()
|
|
27
|
+
// const orgNames = orgs.map((org) => org.login)
|
|
28
|
+
const orgNames = [];
|
|
29
|
+
debug(orgNames);
|
|
30
|
+
callback(null, {
|
|
31
|
+
token: accessToken,
|
|
32
|
+
user_id: profile.id,
|
|
33
|
+
email: profile.emails.filter((v) => v.primary)[0].value,
|
|
34
|
+
name: profile.displayName || '',
|
|
35
|
+
picture: profile.photos[0].value,
|
|
36
|
+
organizations: orgNames,
|
|
37
|
+
});
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
lib.authenticate = function (req, res, next) {
|
|
41
|
+
const continueUrl = (0, url_1.getContinueUrl)(req);
|
|
42
|
+
const query = continueUrl === '/' ? '' : `?continue=${continueUrl}`;
|
|
43
|
+
useGitHubStrategy(config, query);
|
|
44
|
+
passport_1.default.authenticate('github')(req, res, next);
|
|
45
|
+
};
|
|
46
|
+
lib.getOrganization = () => { };
|
|
47
|
+
lib.reauth = async function (id, { accessToken }) {
|
|
48
|
+
try {
|
|
49
|
+
// 一時的に再認証機能を簡略化
|
|
50
|
+
// const octokit = new Octokit({ auth: accessToken })
|
|
51
|
+
// const {
|
|
52
|
+
// data: { id: userId },
|
|
53
|
+
// } = await octokit.users.getAuthenticated()
|
|
54
|
+
// const { data: orgs } = await octokit.orgs.listForAuthenticatedUser()
|
|
55
|
+
// const orgNames = orgs.map((org) => org.login)
|
|
56
|
+
// const organization = config.crowi['github:organization']
|
|
57
|
+
// const success = id === String(userId) && (!organization || orgNames.includes(organization))
|
|
58
|
+
// 常に成功を返す一時的な実装
|
|
59
|
+
const success = true;
|
|
60
|
+
const tokens = { accessToken };
|
|
61
|
+
return { success, tokens };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
debug('Error on reauthenticating', err);
|
|
65
|
+
return { success: false };
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
lib.handleCallback = function (req, res, next) {
|
|
69
|
+
return function (callback) {
|
|
70
|
+
useGitHubStrategy(config);
|
|
71
|
+
passport_1.default.authenticate('github', function (err, user, info) {
|
|
72
|
+
if (err) {
|
|
73
|
+
return callback(err, null);
|
|
74
|
+
}
|
|
75
|
+
auth_1.default.saveTokenToSession(req, lib.PROVIDER, { accessToken: user.token, refreshToken: null, expiryDate: null });
|
|
76
|
+
return callback(err, user);
|
|
77
|
+
})(req, res, next);
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
return lib;
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=githubAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubAuth.js","sourceRoot":"","sources":["../../src/util/githubAuth.ts"],"names":[],"mappings":";;;;;AACA,kDAA0B;AAC1B,kDAA0B;AAC1B,wDAAgC;AAChC,qDAA6D;AAC7D,+BAAuC;AACvC,sCAAsC;AAEtC,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,sBAAsB,CAAC,CAAC;AAE5C,kBAAe,CAAC,MAAM,EAAE,EAAE;IACxB,MAAM,GAAG,GAAQ,EAAE,CAAC;IAEpB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAExB,SAAS,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,EAAE;QACnD,kBAAQ,CAAC,GAAG,CACV,IAAI,0BAAc,CAChB;YACE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACzC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACjD,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,aAAa,EAAE;YACzE,KAAK,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;SAClC,EACD,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;YACrD,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1B,sBAAsB;YACtB,qDAAqD;YACrD,uEAAuE;YACvE,gDAAgD;YAChD,MAAM,QAAQ,GAAG,EAAE,CAAC;YAEpB,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEhB,QAAQ,CAAC,IAAI,EAAE;gBACb,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;gBACvD,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;gBAC/B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;gBAChC,aAAa,EAAE,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC,CACF,CACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,YAAY,GAAG,UAAU,GAAY,EAAE,GAAa,EAAE,IAAI;QAC5D,MAAM,WAAW,GAAG,IAAA,oBAAc,EAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CAAC;QACpE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,kBAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,GAAG,CAAC,eAAe,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAE/B,GAAG,CAAC,MAAM,GAAG,KAAK,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE;QAC9C,IAAI,CAAC;YACH,gBAAgB;YAChB,qDAAqD;YACrD,UAAU;YACV,0BAA0B;YAC1B,6CAA6C;YAC7C,uEAAuE;YACvE,gDAAgD;YAChD,2DAA2D;YAC3D,8FAA8F;YAE9F,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,cAAc,GAAG,UAAU,GAAY,EAAE,GAAa,EAAE,IAAI;QAC9D,OAAO,UAAU,QAAQ;YACvB,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,kBAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,IAAI;gBACvD,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAED,cAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9G,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const debug_1 = __importDefault(require("debug"));
|
|
7
|
+
const auth_1 = __importDefault(require("./auth"));
|
|
8
|
+
const googleapis_1 = require("googleapis");
|
|
9
|
+
const debug = (0, debug_1.default)('crowi:lib:googleAuth');
|
|
10
|
+
exports.default = (config) => {
|
|
11
|
+
const lib = {};
|
|
12
|
+
lib.PROVIDER = 'google';
|
|
13
|
+
function createOauth2Client() {
|
|
14
|
+
const clientId = config.crowi['google:clientId'];
|
|
15
|
+
const clientSecret = config.crowi['google:clientSecret'];
|
|
16
|
+
const callbackUrl = config.crowi['app:url'] + '/google/callback';
|
|
17
|
+
return new googleapis_1.google.auth.OAuth2(clientId, clientSecret, callbackUrl);
|
|
18
|
+
}
|
|
19
|
+
lib.createAuthUrl = function (req, callback) {
|
|
20
|
+
const oauth2Client = createOauth2Client();
|
|
21
|
+
googleapis_1.google.options({ auth: oauth2Client });
|
|
22
|
+
const redirectUrl = oauth2Client.generateAuthUrl({
|
|
23
|
+
access_type: 'offline',
|
|
24
|
+
scope: ['profile', 'email'],
|
|
25
|
+
state: req.query.continue,
|
|
26
|
+
prompt: 'consent',
|
|
27
|
+
});
|
|
28
|
+
callback(null, redirectUrl);
|
|
29
|
+
};
|
|
30
|
+
lib.refreshAccessToken = async (tokens) => {
|
|
31
|
+
const oauth2Client = createOauth2Client();
|
|
32
|
+
googleapis_1.google.options({ auth: oauth2Client });
|
|
33
|
+
oauth2Client.setCredentials({ access_token: tokens.accessToken, refresh_token: tokens.refreshToken });
|
|
34
|
+
const { res: { data: { access_token: accessToken, refresh_token: refreshToken, expiry_date: expiryDate }, }, } = (await oauth2Client.refreshAccessToken());
|
|
35
|
+
return { accessToken, refreshToken, expiryDate };
|
|
36
|
+
};
|
|
37
|
+
lib.reauth = async (id, { accessToken, refreshToken }) => {
|
|
38
|
+
try {
|
|
39
|
+
const tokens = await lib.refreshAccessToken({ accessToken, refreshToken });
|
|
40
|
+
const oauth2Client = createOauth2Client();
|
|
41
|
+
googleapis_1.google.options({ auth: oauth2Client });
|
|
42
|
+
oauth2Client.setCredentials({ access_token: tokens.accessToken, refresh_token: tokens.refreshToken });
|
|
43
|
+
const { data: { user_id: userId }, } = await googleapis_1.google.oauth2('v2').tokeninfo({ access_token: tokens.accessToken });
|
|
44
|
+
const success = id === userId;
|
|
45
|
+
return { success, tokens };
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
debug('Error on reauthenticating', err);
|
|
49
|
+
return { success: false };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
lib.handleCallback = function (req, callback) {
|
|
53
|
+
const oauth2Client = createOauth2Client();
|
|
54
|
+
googleapis_1.google.options({ auth: oauth2Client });
|
|
55
|
+
const { google = {} } = req.session;
|
|
56
|
+
const { authCode: code } = google;
|
|
57
|
+
if (!code) {
|
|
58
|
+
return callback(new Error('No code exists.'), null);
|
|
59
|
+
}
|
|
60
|
+
debug('Request googleToken by auth code', code);
|
|
61
|
+
oauth2Client.getToken(code, function (err, tokens) {
|
|
62
|
+
debug('Result of google.getToken()', err, tokens);
|
|
63
|
+
if (err) {
|
|
64
|
+
return callback(new Error('[googleAuth.handleCallback] Error to get token.'), null);
|
|
65
|
+
}
|
|
66
|
+
oauth2Client.setCredentials({
|
|
67
|
+
access_token: tokens.access_token,
|
|
68
|
+
});
|
|
69
|
+
const oauth2 = googleapis_1.google.oauth2('v2');
|
|
70
|
+
oauth2.userinfo.get({}, function (err, response) {
|
|
71
|
+
debug('Response of oauth2.userinfo.get', err, response && response.data);
|
|
72
|
+
if (err) {
|
|
73
|
+
return callback(new Error('[googleAuth.handleCallback] Error while proceccing userinfo.get.'), null);
|
|
74
|
+
}
|
|
75
|
+
const { access_token: accessToken, refresh_token: refreshToken, expiry_date: expiryDate } = tokens;
|
|
76
|
+
auth_1.default.saveTokenToSession(req, lib.PROVIDER, { accessToken, refreshToken, expiryDate });
|
|
77
|
+
const { data } = response;
|
|
78
|
+
data.user_id = data.id; // This is for B.C. (tokeninfo をつかっている前提のコードに対してのもの)
|
|
79
|
+
return callback(null, data);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
return lib;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=googleAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleAuth.js","sourceRoot":"","sources":["../../src/util/googleAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Crowi from '../crowi';
|
|
2
|
+
/**
|
|
3
|
+
* Web session tokens (`access` / `refresh`) carry no scope claim and are
|
|
4
|
+
* treated as "all scopes" by the auth middleware. OAuth access tokens
|
|
5
|
+
* (RFC-0010) add a space-delimited `scope` claim (RFC 6749 §3.3) and the
|
|
6
|
+
* issuing `client_id`. Modelled as a discriminated union on `type` so
|
|
7
|
+
* only `oauth_access` payloads expose `scope` / `client_id` — web-session
|
|
8
|
+
* callers can never accidentally read a scope off a session token.
|
|
9
|
+
*/
|
|
10
|
+
export type TokenPayload = {
|
|
11
|
+
userId: string;
|
|
12
|
+
email: string;
|
|
13
|
+
type: 'access' | 'refresh';
|
|
14
|
+
} | {
|
|
15
|
+
userId: string;
|
|
16
|
+
email: string;
|
|
17
|
+
type: 'oauth_access';
|
|
18
|
+
/** space-delimited scope claim (RFC 6749 §3.3) */
|
|
19
|
+
scope: string;
|
|
20
|
+
client_id: string;
|
|
21
|
+
};
|
|
22
|
+
/** Token types a Bearer credential may carry through `verifyToken`. */
|
|
23
|
+
export type VerifiableTokenType = TokenPayload['type'];
|
|
24
|
+
export declare function createJwtUtil(crowi: Crowi): {
|
|
25
|
+
generateTokens: (user: any) => {
|
|
26
|
+
accessToken: string;
|
|
27
|
+
refreshToken: string;
|
|
28
|
+
expiresIn: number;
|
|
29
|
+
};
|
|
30
|
+
signOauthAccessToken: (params: {
|
|
31
|
+
user: {
|
|
32
|
+
_id: {
|
|
33
|
+
toString(): string;
|
|
34
|
+
};
|
|
35
|
+
email: string;
|
|
36
|
+
};
|
|
37
|
+
scopes: readonly string[];
|
|
38
|
+
clientId: string;
|
|
39
|
+
expiresInSec?: number;
|
|
40
|
+
}) => string;
|
|
41
|
+
verifyToken: <T extends VerifiableTokenType>(token: string, type: T | readonly T[]) => (TokenPayload & {
|
|
42
|
+
type: T;
|
|
43
|
+
}) | null;
|
|
44
|
+
extractTokenFromHeader: (authHeader: string | undefined) => string | null;
|
|
45
|
+
refreshAccessToken: (refreshToken: string) => Promise<{
|
|
46
|
+
accessToken: string;
|
|
47
|
+
refreshToken: string;
|
|
48
|
+
expiresIn: number;
|
|
49
|
+
} | null>;
|
|
50
|
+
};
|
package/dist/util/jwt.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
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.createJwtUtil = createJwtUtil;
|
|
7
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
|
+
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
const debug = (0, debug_1.default)('crowi:util:jwt');
|
|
10
|
+
/**
|
|
11
|
+
* Access / refresh token lifetimes in seconds. Env-overridable; the
|
|
12
|
+
* 1h default for access tokens is long enough that brief idle periods
|
|
13
|
+
* don't churn the refresh endpoint and short enough that a leaked
|
|
14
|
+
* token stays useful for at most an hour. The client's 401 interceptor
|
|
15
|
+
* (see `packages/web/src/lib/api-client.ts`) trades the refresh token
|
|
16
|
+
* for a fresh access token whenever a request lands a 401.
|
|
17
|
+
*/
|
|
18
|
+
const ACCESS_TOKEN_TTL_SEC = Number(process.env.JWT_ACCESS_TOKEN_TTL_SECONDS) || 60 * 60; // 1 hour
|
|
19
|
+
const REFRESH_TOKEN_TTL_SEC = Number(process.env.JWT_REFRESH_TOKEN_TTL_SECONDS) || 30 * 24 * 60 * 60; // 30 days
|
|
20
|
+
function createJwtUtil(crowi) {
|
|
21
|
+
const config = crowi.getConfig();
|
|
22
|
+
const secret = config.crowi['app:secret'] || config.crowi['SECRET_TOKEN'] || 'your-secret-key';
|
|
23
|
+
/**
|
|
24
|
+
* Generate access and refresh tokens for a user
|
|
25
|
+
*/
|
|
26
|
+
function generateTokens(user) {
|
|
27
|
+
const payload = {
|
|
28
|
+
userId: user._id.toString(),
|
|
29
|
+
email: user.email,
|
|
30
|
+
};
|
|
31
|
+
const accessToken = jsonwebtoken_1.default.sign({ ...payload, type: 'access' }, secret, {
|
|
32
|
+
expiresIn: ACCESS_TOKEN_TTL_SEC,
|
|
33
|
+
issuer: 'crowi',
|
|
34
|
+
});
|
|
35
|
+
const refreshToken = jsonwebtoken_1.default.sign({ ...payload, type: 'refresh' }, secret, {
|
|
36
|
+
expiresIn: REFRESH_TOKEN_TTL_SEC,
|
|
37
|
+
issuer: 'crowi',
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
accessToken,
|
|
41
|
+
refreshToken,
|
|
42
|
+
expiresIn: ACCESS_TOKEN_TTL_SEC,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Sign a scope-bearing OAuth access token (RFC-0010). The real issuing
|
|
47
|
+
* path (`POST /oauth/token`) lands in Phase 3; this helper exists so
|
|
48
|
+
* Phase 1's scope-aware middleware can be exercised end-to-end in tests
|
|
49
|
+
* (mint a token with a known scope, assert `requireScope` accepts /
|
|
50
|
+
* rejects it). `scopes` is space-joined into the `scope` claim per
|
|
51
|
+
* RFC 6749 §3.3. The web-session `generateTokens` path is untouched.
|
|
52
|
+
*/
|
|
53
|
+
function signOauthAccessToken(params) {
|
|
54
|
+
const { user, scopes, clientId, expiresInSec } = params;
|
|
55
|
+
return jsonwebtoken_1.default.sign({
|
|
56
|
+
userId: user._id.toString(),
|
|
57
|
+
email: user.email,
|
|
58
|
+
type: 'oauth_access',
|
|
59
|
+
scope: scopes.join(' '),
|
|
60
|
+
client_id: clientId,
|
|
61
|
+
}, secret, {
|
|
62
|
+
expiresIn: expiresInSec ?? ACCESS_TOKEN_TTL_SEC,
|
|
63
|
+
issuer: 'crowi',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Verify and decode a token. `type` may be a single accepted type or a
|
|
68
|
+
* list — passing `['access', 'oauth_access']` lets the unified Bearer
|
|
69
|
+
* middleware accept both web-session and OAuth access tokens in one
|
|
70
|
+
* call while still rejecting refresh tokens presented as access. The
|
|
71
|
+
* decoded payload is the `TokenPayload` discriminated union, so callers
|
|
72
|
+
* narrow on `payload.type` to read `scope` / `client_id`.
|
|
73
|
+
*/
|
|
74
|
+
function verifyToken(token, type) {
|
|
75
|
+
const accepted = Array.isArray(type) ? type : [type];
|
|
76
|
+
try {
|
|
77
|
+
const decoded = jsonwebtoken_1.default.verify(token, secret, {
|
|
78
|
+
issuer: 'crowi',
|
|
79
|
+
});
|
|
80
|
+
if (!accepted.includes(decoded.type)) {
|
|
81
|
+
debug(`Invalid token type. Expected ${accepted.join('|')}, got ${decoded.type}`);
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return decoded;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
debug('Token verification failed:', error);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extract token from Authorization header
|
|
93
|
+
*/
|
|
94
|
+
function extractTokenFromHeader(authHeader) {
|
|
95
|
+
if (!authHeader) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const parts = authHeader.split(' ');
|
|
99
|
+
if (parts.length !== 2 || parts[0] !== 'Bearer') {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return parts[1];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate a new access token from a refresh token
|
|
106
|
+
*/
|
|
107
|
+
async function refreshAccessToken(refreshToken) {
|
|
108
|
+
const payload = verifyToken(refreshToken, 'refresh');
|
|
109
|
+
if (!payload) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const User = crowi.model('User');
|
|
113
|
+
const user = await User.findById(payload.userId);
|
|
114
|
+
if (!user || user.status !== User.STATUS_ACTIVE) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return generateTokens(user);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
generateTokens,
|
|
121
|
+
signOauthAccessToken,
|
|
122
|
+
verifyToken,
|
|
123
|
+
extractTokenFromHeader,
|
|
124
|
+
refreshAccessToken,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/util/jwt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const path_1 = require("./path");
|
|
4
|
+
const regex_1 = require("./regex");
|
|
5
|
+
exports.default = (crowi) => {
|
|
6
|
+
// const debug = Debug('crowi:lib:url')
|
|
7
|
+
const linkDetector = {};
|
|
8
|
+
/**
|
|
9
|
+
* Origins that count as "this Crowi instance" when classifying an
|
|
10
|
+
* absolute-URL link as internal. Both are included because they can
|
|
11
|
+
* differ — `getBaseUrl()` is the api's `BASE_URL` / `app:url` config,
|
|
12
|
+
* while `CLIENT_URL` is the web app's public origin, and a user
|
|
13
|
+
* copies page URLs from the latter (e.g. `http://localhost:4302/...`).
|
|
14
|
+
* Trailing slashes are trimmed and duplicates dropped.
|
|
15
|
+
*/
|
|
16
|
+
linkDetector.getAppOrigins = () => {
|
|
17
|
+
const raw = [crowi.getBaseUrl(), process.env.CLIENT_URL];
|
|
18
|
+
const origins = [];
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
for (const candidate of raw) {
|
|
21
|
+
if (!candidate || typeof candidate !== 'string')
|
|
22
|
+
continue;
|
|
23
|
+
const normalized = candidate.replace(/\/+$/, '');
|
|
24
|
+
if (normalized && !seen.has(normalized)) {
|
|
25
|
+
seen.add(normalized);
|
|
26
|
+
origins.push(normalized);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return origins;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Loopback-origin pattern (`http(s)://localhost|127.0.0.1|[::1]` on any
|
|
33
|
+
* port). In development the web app and the api both run on localhost
|
|
34
|
+
* and `CLIENT_URL` is frequently left unset; without this a page URL
|
|
35
|
+
* pasted from the dev address bar (`http://localhost:4302/…`) would
|
|
36
|
+
* not register as a backlink. Restricted to non-production so a
|
|
37
|
+
* production instance only trusts its configured origins.
|
|
38
|
+
*/
|
|
39
|
+
const LOOPBACK_ORIGIN = 'https?://(?:localhost|127\\.0\\.0\\.1|\\[::1\\])(?::\\d+)?';
|
|
40
|
+
linkDetector.getLinkRegexp = () => {
|
|
41
|
+
const alternatives = linkDetector.getAppOrigins().map(regex_1.escapeRegExp);
|
|
42
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
43
|
+
alternatives.push(LOOPBACK_ORIGIN);
|
|
44
|
+
}
|
|
45
|
+
// No origin to match against — return a never-match regexp rather
|
|
46
|
+
// than building `RegExp('null(/…)?')` from a null base url (which
|
|
47
|
+
// would match the literal text "null" in page bodies).
|
|
48
|
+
if (alternatives.length === 0) {
|
|
49
|
+
return /(?!)/g;
|
|
50
|
+
}
|
|
51
|
+
return new RegExp('(?:' + alternatives.join('|') + ')(/[^\\s"?)#]*)?', 'g');
|
|
52
|
+
};
|
|
53
|
+
linkDetector.getObjectIdRegexp = () => new RegExp('/([0-9a-fA-F]{24})');
|
|
54
|
+
// [0] `<...>`: angle-bracket wiki link
|
|
55
|
+
// [1] `[/path]`: bare bracket form, only when NOT followed by `(` (= not a Markdown link)
|
|
56
|
+
// [2] `[label](/path)`: Markdown link whose target is a same-host relative path.
|
|
57
|
+
// Markdown links pointing at full URLs (http://…) are handled by linkRegexp instead.
|
|
58
|
+
linkDetector.getPathRegexps = () => [new RegExp('<(/[^>]+)>', 'g'), /\[(\/[^\]]+)\](?!\()/g, /\[[^\]]+\]\((\/[^)\s#]+)\)/g];
|
|
59
|
+
linkDetector.search = function (text) {
|
|
60
|
+
const unique = function (array) {
|
|
61
|
+
return array.filter(function (x, i, self) {
|
|
62
|
+
return self.indexOf(x) === i;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const objectIds = [];
|
|
66
|
+
const paths = [];
|
|
67
|
+
const linkRegexp = linkDetector.getLinkRegexp();
|
|
68
|
+
const objectIdRegexp = linkDetector.getObjectIdRegexp();
|
|
69
|
+
while (linkRegexp.exec(text)) {
|
|
70
|
+
const path = (0, path_1.decodeSpace)(decodeURIComponent(RegExp.$1));
|
|
71
|
+
if (objectIdRegexp.test(path)) {
|
|
72
|
+
objectIds.push(RegExp.$1);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
paths.push(path);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const pathRegexps = linkDetector.getPathRegexps();
|
|
79
|
+
for (const pathRegexp of pathRegexps) {
|
|
80
|
+
while (pathRegexp.exec(text)) {
|
|
81
|
+
paths.push((0, path_1.decodeSpace)(decodeURIComponent(RegExp.$1)));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
objectIds: unique(objectIds),
|
|
86
|
+
paths: unique(paths),
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
return linkDetector;
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=linkDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkDetector.js","sourceRoot":"","sources":["../../src/util/linkDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type MailTokenPayload, type MailTokenPurpose } from '@crowi/api-contract';
|
|
2
|
+
/** Claims the caller supplies; `iat` / `exp` are added by `signMailToken`. */
|
|
3
|
+
export interface MailTokenClaims {
|
|
4
|
+
purpose: MailTokenPurpose;
|
|
5
|
+
userId: string;
|
|
6
|
+
email: string;
|
|
7
|
+
/** email-change only: the account's email at issue time (single-use binding). */
|
|
8
|
+
fromEmail?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SignMailTokenResult {
|
|
11
|
+
/** Compact JWT to embed in the email link's `?token=` query. */
|
|
12
|
+
token: string;
|
|
13
|
+
/** Absolute expiry; mirrors `exp * 1000`. */
|
|
14
|
+
expiresAt: Date;
|
|
15
|
+
}
|
|
16
|
+
declare function buildMailTokenUtil(): {
|
|
17
|
+
signMailToken: (claims: MailTokenClaims) => SignMailTokenResult;
|
|
18
|
+
verifyMailToken: (token: string, expectedPurpose: MailTokenPurpose) => MailTokenPayload | null;
|
|
19
|
+
issuer: string;
|
|
20
|
+
ttlSeconds: Record<"invite" | "activate" | "reset" | "email-change", number>;
|
|
21
|
+
};
|
|
22
|
+
export type MailTokenUtil = ReturnType<typeof buildMailTokenUtil>;
|
|
23
|
+
export declare function createMailTokenUtil(): MailTokenUtil;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
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.createMailTokenUtil = createMailTokenUtil;
|
|
7
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
8
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
10
|
+
const debug_1 = __importDefault(require("debug"));
|
|
11
|
+
const debug = (0, debug_1.default)('crowi:util:mail-token');
|
|
12
|
+
/**
|
|
13
|
+
* Issuer claim for tokens embedded in transactional email links.
|
|
14
|
+
*
|
|
15
|
+
* Distinct from the WebSocket issuers (`crowi-collab` / `crowi-presence`
|
|
16
|
+
* / `crowi-notifications`, see `util/ws-token.ts` et al.) and the HTTP
|
|
17
|
+
* access/refresh issuer (`crowi`). All of these share the same
|
|
18
|
+
* `WS_TOKEN_SECRET` key material but verify against different `iss`
|
|
19
|
+
* claims, so a token minted for one channel is never replayable against
|
|
20
|
+
* another. A single mail-token issuer is reused across invite /
|
|
21
|
+
* activate / reset; the `purpose` claim (verified per endpoint) scopes
|
|
22
|
+
* each token to one flow, so an invite link cannot be replayed against
|
|
23
|
+
* the password-reset endpoint.
|
|
24
|
+
*/
|
|
25
|
+
const MAIL_TOKEN_ISSUER = 'crowi-mail-token';
|
|
26
|
+
/**
|
|
27
|
+
* Per-purpose token lifetimes (seconds). Invite links are long-lived (a
|
|
28
|
+
* person may not check email immediately); reset links are short to
|
|
29
|
+
* limit the blast radius of a leaked inbox.
|
|
30
|
+
*/
|
|
31
|
+
const MAIL_TOKEN_TTL_SECONDS = {
|
|
32
|
+
invite: 7 * 24 * 60 * 60, // 7 days
|
|
33
|
+
activate: 24 * 60 * 60, // 1 day
|
|
34
|
+
reset: 60 * 60, // 1 hour
|
|
35
|
+
'email-change': 24 * 60 * 60, // 1 day
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Process-wide random fallback secret, generated at most once. Must NOT
|
|
39
|
+
* be per-call: a mail token is signed in one request (e.g. the invite
|
|
40
|
+
* email) and verified in a later, separate request (the accept link) —
|
|
41
|
+
* often by a different `createMailTokenUtil()` instance. If each call
|
|
42
|
+
* minted its own random secret, every cross-handler token would fail
|
|
43
|
+
* verification whenever WS_TOKEN_SECRET is unset.
|
|
44
|
+
*/
|
|
45
|
+
let fallbackSecret = null;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the signing secret. Reads WS_TOKEN_SECRET per call so a test
|
|
48
|
+
* mutating the env between imports still picks up the latest value; the
|
|
49
|
+
* random fallback is memoized process-wide.
|
|
50
|
+
*
|
|
51
|
+
* The "secret missing" warning is emitted here (lazily, on first
|
|
52
|
+
* resolution) rather than at module-load time: this module is imported
|
|
53
|
+
* transitively before `app.ts` runs `dotenv.config()`, so a load-time
|
|
54
|
+
* `process.env` read fires a false warning even when `.env` defines
|
|
55
|
+
* `WS_TOKEN_SECRET`. The memoized `fallbackSecret` makes the warn fire
|
|
56
|
+
* exactly once per process. Silenced under tests.
|
|
57
|
+
*/
|
|
58
|
+
const resolveMailTokenSecret = () => {
|
|
59
|
+
const fromEnv = process.env.WS_TOKEN_SECRET;
|
|
60
|
+
if (fromEnv && fromEnv.length > 0) {
|
|
61
|
+
return fromEnv;
|
|
62
|
+
}
|
|
63
|
+
if (!fallbackSecret) {
|
|
64
|
+
fallbackSecret = node_crypto_1.default.randomBytes(32).toString('base64');
|
|
65
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
66
|
+
console.warn('[crowi] WS_TOKEN_SECRET is not set — mail tokens (invite / activate / reset links) will be signed ' +
|
|
67
|
+
'with a random in-memory secret. Process restarts will invalidate outstanding links, and multi-instance ' +
|
|
68
|
+
'deployments will not be able to cross-verify them. Set WS_TOKEN_SECRET to a stable base64-encoded ' +
|
|
69
|
+
'32-byte value (`openssl rand -base64 32`) in production.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return fallbackSecret;
|
|
73
|
+
};
|
|
74
|
+
function buildMailTokenUtil() {
|
|
75
|
+
const secret = resolveMailTokenSecret();
|
|
76
|
+
function signMailToken(claims) {
|
|
77
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
78
|
+
const exp = iat + MAIL_TOKEN_TTL_SECONDS[claims.purpose];
|
|
79
|
+
const token = jsonwebtoken_1.default.sign({ ...claims, iat, exp }, secret, {
|
|
80
|
+
issuer: MAIL_TOKEN_ISSUER,
|
|
81
|
+
algorithm: 'HS256',
|
|
82
|
+
});
|
|
83
|
+
return { token, expiresAt: new Date(exp * 1000) };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Verify a mail token and require its `purpose` to match. Returns the
|
|
87
|
+
* validated payload, or `null` for any failure (expired, bad
|
|
88
|
+
* signature, wrong issuer, malformed claims, purpose mismatch).
|
|
89
|
+
*/
|
|
90
|
+
function verifyMailToken(token, expectedPurpose) {
|
|
91
|
+
try {
|
|
92
|
+
const decoded = jsonwebtoken_1.default.verify(token, secret, {
|
|
93
|
+
issuer: MAIL_TOKEN_ISSUER,
|
|
94
|
+
algorithms: ['HS256'],
|
|
95
|
+
});
|
|
96
|
+
const parsed = api_contract_1.MailTokenPayloadSchema.safeParse(decoded);
|
|
97
|
+
if (!parsed.success) {
|
|
98
|
+
debug('mail token payload failed schema validation:', parsed.error.issues);
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
if (parsed.data.purpose !== expectedPurpose) {
|
|
102
|
+
debug('mail token purpose mismatch: expected %s, got %s', expectedPurpose, parsed.data.purpose);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return parsed.data;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
debug('mail token verification failed:', err.message);
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { signMailToken, verifyMailToken, issuer: MAIL_TOKEN_ISSUER, ttlSeconds: MAIL_TOKEN_TTL_SECONDS };
|
|
113
|
+
}
|
|
114
|
+
function createMailTokenUtil() {
|
|
115
|
+
return buildMailTokenUtil();
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=mail-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-token.js","sourceRoot":"","sources":["../../src/util/mail-token.ts"],"names":[],"mappings":"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"}
|