@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,202 @@
|
|
|
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.deriveChangedNamespaces = deriveChangedNamespaces;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
const redis_1 = require("redis");
|
|
10
|
+
const plugin_namespace_1 = require("../plugin/plugin-namespace");
|
|
11
|
+
const debug = (0, debug_1.default)('crowi:service:config');
|
|
12
|
+
class ConfigService {
|
|
13
|
+
crowi;
|
|
14
|
+
config;
|
|
15
|
+
configModel;
|
|
16
|
+
pubSub;
|
|
17
|
+
listeners = [];
|
|
18
|
+
constructor(crowi) {
|
|
19
|
+
this.crowi = crowi;
|
|
20
|
+
// this config is a local memory cache
|
|
21
|
+
this.config = {};
|
|
22
|
+
this.configModel = this.crowi.model('Config');
|
|
23
|
+
this.pubSub = {
|
|
24
|
+
id: (0, uuid_1.v4)(),
|
|
25
|
+
publisher: null,
|
|
26
|
+
subscriber: null,
|
|
27
|
+
channel: 'config',
|
|
28
|
+
};
|
|
29
|
+
// setupPubSub will be called from Crowi.setupConfig()
|
|
30
|
+
}
|
|
31
|
+
async load() {
|
|
32
|
+
const Config = this.crowi.model('Config');
|
|
33
|
+
const config = await Config.loadAllConfig();
|
|
34
|
+
this.set(config);
|
|
35
|
+
}
|
|
36
|
+
set(config) {
|
|
37
|
+
// FIXME: Deep copy to avoid deleting itself.
|
|
38
|
+
const newConfig = { ...config };
|
|
39
|
+
// FIXME: Treat as a mutable object always.
|
|
40
|
+
// We should always get config using `crowi.getConfig()` *just before* referencing config.
|
|
41
|
+
for (const key of Object.keys(this.config)) {
|
|
42
|
+
delete this.config[key];
|
|
43
|
+
}
|
|
44
|
+
for (const key of Object.keys(newConfig)) {
|
|
45
|
+
this.config[key] = newConfig[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
get(ns, key) {
|
|
49
|
+
if (ns && key) {
|
|
50
|
+
if (!this.config[ns]) {
|
|
51
|
+
throw new Error(`No such namespace in config: ${ns}`);
|
|
52
|
+
}
|
|
53
|
+
return this.config[ns][key];
|
|
54
|
+
}
|
|
55
|
+
return this.config || {};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Subscribe to config changes. Listeners receive the list of
|
|
59
|
+
* namespaces that contained at least one changed key. Listeners run
|
|
60
|
+
* sequentially and `saveConfig` awaits them, so admin UI responses
|
|
61
|
+
* reflect "all consumers have applied the change". Returns a
|
|
62
|
+
* disposer so long-lived processes (HMR / Crowi.reload) can detach.
|
|
63
|
+
*/
|
|
64
|
+
onConfigChange(listener) {
|
|
65
|
+
this.listeners.push(listener);
|
|
66
|
+
return () => {
|
|
67
|
+
const i = this.listeners.indexOf(listener);
|
|
68
|
+
if (i >= 0)
|
|
69
|
+
this.listeners.splice(i, 1);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async notifyListeners(changedNamespaces, source) {
|
|
73
|
+
if (this.listeners.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
for (const listener of this.listeners) {
|
|
76
|
+
try {
|
|
77
|
+
await listener(changedNamespaces, source);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
debug('config change listener threw:', err.message);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async notifyUpdated(changedNamespaces = [], source = 'local') {
|
|
85
|
+
// To notify config updated to another srever, publish event via pubsub.
|
|
86
|
+
if (source === 'local') {
|
|
87
|
+
const { publisher, channel, id } = this.pubSub;
|
|
88
|
+
if (publisher) {
|
|
89
|
+
try {
|
|
90
|
+
const payload = { id, changedNamespaces };
|
|
91
|
+
await publisher.publish(channel, JSON.stringify(payload));
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
debug('Failed to publish config update:', error.message);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await this.postUpdate(changedNamespaces, source);
|
|
99
|
+
}
|
|
100
|
+
async postUpdate(changedNamespaces = [], source = 'local') {
|
|
101
|
+
debug('Config updated run postUpdate');
|
|
102
|
+
await this.crowi.setupMailer();
|
|
103
|
+
await this.notifyListeners(changedNamespaces, source);
|
|
104
|
+
}
|
|
105
|
+
async saveConfig(ns, config) {
|
|
106
|
+
debug('Save config', ns, config);
|
|
107
|
+
await this.configModel.updateConfigByNamespace(ns, config);
|
|
108
|
+
const changed = deriveChangedNamespaces(ns, Object.keys(config));
|
|
109
|
+
await this.update({ ...this.config, [ns]: { ...this.config[ns], ...config } }, changed);
|
|
110
|
+
}
|
|
111
|
+
async saveConfigValue(ns, key, value) {
|
|
112
|
+
debug('Save config value', ns, key, value);
|
|
113
|
+
await this.configModel.updateConfig(ns, key, value);
|
|
114
|
+
const changed = deriveChangedNamespaces(ns, [key]);
|
|
115
|
+
await this.update({ ...this.config, [ns]: { ...this.config[ns], [key]: value } }, changed);
|
|
116
|
+
}
|
|
117
|
+
async deleteConfig(ns, key) {
|
|
118
|
+
await this.configModel.deleteConfig(ns, key);
|
|
119
|
+
delete this.config[ns][key];
|
|
120
|
+
const changed = deriveChangedNamespaces(ns, [key]);
|
|
121
|
+
await this.update(this.config, changed);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* To update the property of ConfigService,
|
|
125
|
+
* the config serice user (e.g. some controller, model, etc.) must call this update() method.
|
|
126
|
+
* Otherwise,
|
|
127
|
+
* - the config memory cache would not be refreshed,
|
|
128
|
+
* - the service like Slack, Mailer etc. would not be reloaded,
|
|
129
|
+
* - the other server (in multi-server structure) would not be notified the config updated.
|
|
130
|
+
*/
|
|
131
|
+
async update(config, changedNamespaces = [], source = 'local') {
|
|
132
|
+
this.set(config);
|
|
133
|
+
await this.notifyUpdated(changedNamespaces, source);
|
|
134
|
+
}
|
|
135
|
+
async setupPubSub() {
|
|
136
|
+
const { redisOpts } = this.crowi;
|
|
137
|
+
if (redisOpts) {
|
|
138
|
+
try {
|
|
139
|
+
this.pubSub.publisher = (0, redis_1.createClient)(redisOpts);
|
|
140
|
+
this.pubSub.subscriber = (0, redis_1.createClient)(redisOpts);
|
|
141
|
+
await this.pubSub.publisher.connect();
|
|
142
|
+
await this.pubSub.subscriber.connect();
|
|
143
|
+
const { pubSub } = this;
|
|
144
|
+
const { subscriber } = pubSub;
|
|
145
|
+
debug('PubSubId', pubSub.id);
|
|
146
|
+
if (subscriber) {
|
|
147
|
+
// @redis/client v4 takes the message listener as the 2nd argument
|
|
148
|
+
// to `subscribe`. The v3 `.on('message', ...)` pattern leaves no
|
|
149
|
+
// listener registered, so when a message arrives the client tries
|
|
150
|
+
// to invoke `undefined` and crashes the process with
|
|
151
|
+
// "TypeError: listener is not a function".
|
|
152
|
+
await subscriber.subscribe(pubSub.channel, async (message, channel) => {
|
|
153
|
+
if (channel !== pubSub.channel)
|
|
154
|
+
return;
|
|
155
|
+
const payload = JSON.parse(message);
|
|
156
|
+
if (payload.id === pubSub.id)
|
|
157
|
+
return;
|
|
158
|
+
await this.load();
|
|
159
|
+
// Older publishers won't include `changedNamespaces`; treat
|
|
160
|
+
// that as "everything changed" so subscribers default to a
|
|
161
|
+
// safe fan-out instead of skipping reconfigure entirely.
|
|
162
|
+
const changedNamespaces = payload.changedNamespaces ?? ['*'];
|
|
163
|
+
await this.postUpdate(changedNamespaces, 'remote');
|
|
164
|
+
debug(`Config updated by ${payload.id}`);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
debug('Redis pub/sub setup completed');
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
debug('Failed to setup Redis pub/sub:', error.message);
|
|
171
|
+
console.warn('Redis pub/sub setup failed. Config synchronization disabled.');
|
|
172
|
+
this.pubSub.publisher = null;
|
|
173
|
+
this.pubSub.subscriber = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.default = ConfigService;
|
|
179
|
+
/**
|
|
180
|
+
* Plugin configs all live under the `crowi` mongo namespace as
|
|
181
|
+
* `plugin:<name>:<field>` keys, but listeners want "plugin X changed",
|
|
182
|
+
* not "the kitchen-sink `crowi` ns changed". Split here so listeners
|
|
183
|
+
* stay simple.
|
|
184
|
+
*/
|
|
185
|
+
function deriveChangedNamespaces(mongoNs, keys) {
|
|
186
|
+
const out = new Set();
|
|
187
|
+
let sawNonPluginKey = false;
|
|
188
|
+
for (const key of keys) {
|
|
189
|
+
const parsed = (0, plugin_namespace_1.parsePluginConfigKey)(key);
|
|
190
|
+
if (parsed) {
|
|
191
|
+
out.add((0, plugin_namespace_1.formatPluginNamespace)(parsed.pluginName));
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
sawNonPluginKey = true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (sawNonPluginKey || keys.length === 0) {
|
|
198
|
+
out.add(mongoNs);
|
|
199
|
+
}
|
|
200
|
+
return [...out];
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/service/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Crowi from '../crowi';
|
|
2
|
+
export default class LRU {
|
|
3
|
+
crowi: Crowi;
|
|
4
|
+
max: number;
|
|
5
|
+
client: any;
|
|
6
|
+
constructor(crowi: Crowi);
|
|
7
|
+
removeByRange(namespace: any, max: any): Promise<any>;
|
|
8
|
+
add(namespace: any, key: any): Promise<any>;
|
|
9
|
+
range(namespace: any, limit?: number): Promise<any>;
|
|
10
|
+
get(namespace: any, limit: any): Promise<any> | undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class LRU {
|
|
4
|
+
crowi;
|
|
5
|
+
max;
|
|
6
|
+
client;
|
|
7
|
+
constructor(crowi) {
|
|
8
|
+
this.crowi = crowi;
|
|
9
|
+
this.max = 10;
|
|
10
|
+
this.client = null;
|
|
11
|
+
if (this.crowi && this.crowi.redis) {
|
|
12
|
+
this.client = this.crowi.redis;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async removeByRange(namespace, max) {
|
|
16
|
+
const { client } = this;
|
|
17
|
+
if (client) {
|
|
18
|
+
return await client.ZREMRANGEBYRANK(namespace, 0, max);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async add(namespace, key) {
|
|
22
|
+
const { client } = this;
|
|
23
|
+
if (client) {
|
|
24
|
+
// ZREMRANGEBYRANK + ZADD share no read dependency, so pipeline
|
|
25
|
+
// them into a single round-trip. Halves Redis latency on the
|
|
26
|
+
// page-view hot path.
|
|
27
|
+
return await client
|
|
28
|
+
.multi()
|
|
29
|
+
.ZREMRANGEBYRANK(namespace, 0, -this.max - 1)
|
|
30
|
+
.ZADD(namespace, { score: Date.now(), value: key })
|
|
31
|
+
.exec();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async range(namespace, limit = 0) {
|
|
35
|
+
const { client } = this;
|
|
36
|
+
if (client) {
|
|
37
|
+
return await client.ZRANGE(namespace, 0, limit - 1, { REV: true });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
get(namespace, limit) {
|
|
41
|
+
if (this.client) {
|
|
42
|
+
return this.range(namespace, limit);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.default = LRU;
|
|
47
|
+
//# sourceMappingURL=lru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../src/service/lru.ts"],"names":[],"mappings":";;AAGA,MAAqB,GAAG;IACtB,KAAK,CAAQ;IAEb,GAAG,CAAS;IAEZ,MAAM,CAAM;IAEZ,YAAY,KAAY;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG;QACtB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,MAAM,EAAE,CAAC;YACX,+DAA+D;YAC/D,6DAA6D;YAC7D,sBAAsB;YACtB,OAAO,MAAM,MAAM;iBAChB,KAAK,EAAE;iBACP,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC5C,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;iBAClD,IAAI,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,GAAG,CAAC,SAAS,EAAE,KAAK;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AArDD,sBAqDC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type Crowi from '../crowi';
|
|
2
|
+
import { type MailCatalog } from '../mail/i18n';
|
|
3
|
+
/**
|
|
4
|
+
* HTML email types. Each maps 1:1 to a MJML body template
|
|
5
|
+
* (`views/mail/<name>.mjml` + `<name>.text`) AND to a catalog section
|
|
6
|
+
* (`MailCatalog[<name>]`), so the name alone resolves both the template
|
|
7
|
+
* files and the i18n strings — no mapping table. Derived from the catalog
|
|
8
|
+
* keys so a new section automatically extends this union.
|
|
9
|
+
*/
|
|
10
|
+
export type MailTemplateName = Exclude<keyof MailCatalog, 'common'>;
|
|
11
|
+
/**
|
|
12
|
+
* High-level send options accepted by the core. The MailService resolves
|
|
13
|
+
* everything sender-independent here — `from`, the subject, and the
|
|
14
|
+
* rendered body (text + optional html) — so every mail sender driver
|
|
15
|
+
* receives an identical `EmailMessage` and produces the same email
|
|
16
|
+
* regardless of transport.
|
|
17
|
+
*/
|
|
18
|
+
export interface SendMailOptions {
|
|
19
|
+
to: string | string[];
|
|
20
|
+
/**
|
|
21
|
+
* Subject. When omitted: for `htmlTemplate` the localized
|
|
22
|
+
* `MailCatalog[name].subject` is used, otherwise "<app:title>からのメール".
|
|
23
|
+
*/
|
|
24
|
+
subject?: string;
|
|
25
|
+
/**
|
|
26
|
+
* MJML HTML email. Renders `views/mail/<name>.mjml` (wrapped in
|
|
27
|
+
* `layout.mjml`) to html plus `<name>.text` to the text part, and
|
|
28
|
+
* auto-injects the localized catalog as `vars.t`. Takes precedence
|
|
29
|
+
* over `template` / `text`.
|
|
30
|
+
*/
|
|
31
|
+
htmlTemplate?: MailTemplateName;
|
|
32
|
+
/** Recipient language for `htmlTemplate` i18n (falls back to English). */
|
|
33
|
+
lang?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Legacy plain-text template path relative to `views/mail/` (e.g.
|
|
36
|
+
* `'admin/userInvitation.txt'`). When set (and `htmlTemplate` is not),
|
|
37
|
+
* the rendered template becomes the text body.
|
|
38
|
+
*/
|
|
39
|
+
template?: string;
|
|
40
|
+
/** Plain-text body, used when neither `htmlTemplate` nor `template` is given. */
|
|
41
|
+
text?: string;
|
|
42
|
+
/** Variables interpolated into the template (`{{ key }}` / `{{ a.b }}`). */
|
|
43
|
+
vars?: Record<string, unknown>;
|
|
44
|
+
html?: string;
|
|
45
|
+
replyTo?: string;
|
|
46
|
+
cc?: string | string[];
|
|
47
|
+
bcc?: string | string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Render a `{{ key }}` / `{{ nested.key }}` template against `vars`.
|
|
51
|
+
* Intentionally minimal — a full template engine is out of scope; this
|
|
52
|
+
* only replaces the legacy `JSON.stringify(vars)` placeholder so the
|
|
53
|
+
* existing `views/mail/*.txt` templates render properly. Unknown keys
|
|
54
|
+
* resolve to an empty string.
|
|
55
|
+
*/
|
|
56
|
+
export declare function renderTemplateString(template: string, vars?: Record<string, unknown>): string;
|
|
57
|
+
/**
|
|
58
|
+
* Core mail service. Owns *what* is sent; delegates *how* to the active
|
|
59
|
+
* mail sender driver (resolved lazily from the plugin registry, since
|
|
60
|
+
* the PluginManager bootstraps after this module is constructed).
|
|
61
|
+
*/
|
|
62
|
+
export declare class MailService {
|
|
63
|
+
private readonly crowi;
|
|
64
|
+
/** Cache of rendered-template *sources*, keyed by relative path. The
|
|
65
|
+
* files are static after boot, so read each at most once. */
|
|
66
|
+
private templateSourceCache;
|
|
67
|
+
constructor(crowi: Crowi);
|
|
68
|
+
/** The directory holding `views/mail/**` templates. */
|
|
69
|
+
private get templateDir();
|
|
70
|
+
private activeSender;
|
|
71
|
+
/** Resolve the configured `mail:from`. Throws when unset. */
|
|
72
|
+
getFrom(): string;
|
|
73
|
+
private defaultSubject;
|
|
74
|
+
/** Read a template file (relative to `views/mail/`), caching the source. */
|
|
75
|
+
private loadTemplateSource;
|
|
76
|
+
renderTemplate(template: string, vars?: Record<string, unknown>): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Render a MJML email to `{ html, text }`. Order is strict: inject the
|
|
79
|
+
* body template into the layout (plain marker replace) → expand
|
|
80
|
+
* `{{ vars }}` over the merged source → `mjml2html`. Variable expansion
|
|
81
|
+
* must happen on the MJML *source* (not the output HTML) so `mjml`
|
|
82
|
+
* sees only valid markup. The `.text` sibling is expanded separately.
|
|
83
|
+
*/
|
|
84
|
+
private renderMjml;
|
|
85
|
+
/**
|
|
86
|
+
* Assemble and deliver an email through the active sender. Resolves
|
|
87
|
+
* once the driver accepts the message; throws on a missing
|
|
88
|
+
* sender/from or a transport error (the caller decides whether that
|
|
89
|
+
* is fatal to the surrounding operation).
|
|
90
|
+
*/
|
|
91
|
+
send(options: SendMailOptions): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Send the branded HTML test message to `to` through the active
|
|
94
|
+
* sender. Used by the admin mail settings page to verify the
|
|
95
|
+
* currently-configured sender — and that every sender renders the
|
|
96
|
+
* same template — end-to-end.
|
|
97
|
+
*/
|
|
98
|
+
sendTest(to: string, lang?: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Security notification that the recipient's password was changed.
|
|
101
|
+
* Fire-and-forget at the call site (a notification failure must not
|
|
102
|
+
* fail the password change itself).
|
|
103
|
+
*/
|
|
104
|
+
sendPasswordChangedNotice(to: string, lang?: string): Promise<void>;
|
|
105
|
+
/** Brand vars (appTitle / appUrl / logoUrl) shared by every template. */
|
|
106
|
+
brandVars(): Record<string, unknown>;
|
|
107
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.MailService = void 0;
|
|
40
|
+
exports.renderTemplateString = renderTemplateString;
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
+
const debug_1 = __importDefault(require("debug"));
|
|
44
|
+
const i18n_1 = require("../mail/i18n");
|
|
45
|
+
const debug = (0, debug_1.default)('crowi:service:mail');
|
|
46
|
+
/**
|
|
47
|
+
* Lazily-loaded `mjml`. It pulls in a large dependency tree, so we defer
|
|
48
|
+
* the require to the first HTML render rather than paying it at module
|
|
49
|
+
* load (which happens during api boot and in every jest file touching
|
|
50
|
+
* the model layer). The CJS module default-exports the function.
|
|
51
|
+
*/
|
|
52
|
+
let mjml2htmlFn = null;
|
|
53
|
+
async function loadMjml() {
|
|
54
|
+
if (!mjml2htmlFn) {
|
|
55
|
+
const mod = (await Promise.resolve().then(() => __importStar(require('mjml'))));
|
|
56
|
+
mjml2htmlFn = typeof mod === 'function' ? mod : mod.default;
|
|
57
|
+
}
|
|
58
|
+
return mjml2htmlFn;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Render a `{{ key }}` / `{{ nested.key }}` template against `vars`.
|
|
62
|
+
* Intentionally minimal — a full template engine is out of scope; this
|
|
63
|
+
* only replaces the legacy `JSON.stringify(vars)` placeholder so the
|
|
64
|
+
* existing `views/mail/*.txt` templates render properly. Unknown keys
|
|
65
|
+
* resolve to an empty string.
|
|
66
|
+
*/
|
|
67
|
+
function renderTemplateString(template, vars = {}) {
|
|
68
|
+
return template.replace(/\{\{\s*([\w.]+)\s*\}\}/g, (_match, key) => {
|
|
69
|
+
const value = key.split('.').reduce((acc, part) => {
|
|
70
|
+
if (acc != null && typeof acc === 'object' && part in acc) {
|
|
71
|
+
return acc[part];
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}, vars);
|
|
75
|
+
return value == null ? '' : String(value);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const toArray = (value) => {
|
|
79
|
+
if (value == null)
|
|
80
|
+
return undefined;
|
|
81
|
+
return Array.isArray(value) ? value : [value];
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Core mail service. Owns *what* is sent; delegates *how* to the active
|
|
85
|
+
* mail sender driver (resolved lazily from the plugin registry, since
|
|
86
|
+
* the PluginManager bootstraps after this module is constructed).
|
|
87
|
+
*/
|
|
88
|
+
class MailService {
|
|
89
|
+
crowi;
|
|
90
|
+
/** Cache of rendered-template *sources*, keyed by relative path. The
|
|
91
|
+
* files are static after boot, so read each at most once. */
|
|
92
|
+
templateSourceCache = new Map();
|
|
93
|
+
constructor(crowi) {
|
|
94
|
+
this.crowi = crowi;
|
|
95
|
+
}
|
|
96
|
+
/** The directory holding `views/mail/**` templates. */
|
|
97
|
+
get templateDir() {
|
|
98
|
+
return node_path_1.default.join(this.crowi.rootDir, 'views', 'mail');
|
|
99
|
+
}
|
|
100
|
+
activeSender() {
|
|
101
|
+
const driver = this.crowi.getPlugins().active.mail;
|
|
102
|
+
if (!driver) {
|
|
103
|
+
throw new Error('Mail sender not registered. Install @crowi/plugin-mail-smtp (default) or another @crowi/plugin-mail-* plugin.');
|
|
104
|
+
}
|
|
105
|
+
return driver;
|
|
106
|
+
}
|
|
107
|
+
/** Resolve the configured `mail:from`. Throws when unset. */
|
|
108
|
+
getFrom() {
|
|
109
|
+
const config = this.crowi.getConfig();
|
|
110
|
+
const from = config?.crowi?.['mail:from'];
|
|
111
|
+
if (!from) {
|
|
112
|
+
throw new Error('mail:from is not configured. Set it from the admin mail settings.');
|
|
113
|
+
}
|
|
114
|
+
return from;
|
|
115
|
+
}
|
|
116
|
+
defaultSubject() {
|
|
117
|
+
const config = this.crowi.getConfig();
|
|
118
|
+
const appTitle = config?.crowi?.['app:title'] || 'Crowi';
|
|
119
|
+
return `${appTitle}からのメール`;
|
|
120
|
+
}
|
|
121
|
+
/** Read a template file (relative to `views/mail/`), caching the source. */
|
|
122
|
+
async loadTemplateSource(relativePath) {
|
|
123
|
+
let raw = this.templateSourceCache.get(relativePath);
|
|
124
|
+
if (raw === undefined) {
|
|
125
|
+
raw = await node_fs_1.promises.readFile(node_path_1.default.join(this.templateDir, relativePath), 'utf-8');
|
|
126
|
+
this.templateSourceCache.set(relativePath, raw);
|
|
127
|
+
}
|
|
128
|
+
return raw;
|
|
129
|
+
}
|
|
130
|
+
async renderTemplate(template, vars = {}) {
|
|
131
|
+
return renderTemplateString(await this.loadTemplateSource(template), vars);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Render a MJML email to `{ html, text }`. Order is strict: inject the
|
|
135
|
+
* body template into the layout (plain marker replace) → expand
|
|
136
|
+
* `{{ vars }}` over the merged source → `mjml2html`. Variable expansion
|
|
137
|
+
* must happen on the MJML *source* (not the output HTML) so `mjml`
|
|
138
|
+
* sees only valid markup. The `.text` sibling is expanded separately.
|
|
139
|
+
*/
|
|
140
|
+
async renderMjml(name, vars) {
|
|
141
|
+
const [layout, body, textSource] = await Promise.all([
|
|
142
|
+
this.loadTemplateSource('layout.mjml'),
|
|
143
|
+
this.loadTemplateSource(`${name}.mjml`),
|
|
144
|
+
this.loadTemplateSource(`${name}.text`),
|
|
145
|
+
]);
|
|
146
|
+
const mergedSource = renderTemplateString(layout.replace('<!--BODY-->', body), vars);
|
|
147
|
+
const mjml2html = await loadMjml();
|
|
148
|
+
const { html, errors } = await mjml2html(mergedSource, { validationLevel: 'soft' });
|
|
149
|
+
if (errors && errors.length > 0) {
|
|
150
|
+
debug('mjml warnings for %s: %o', name, errors.map((e) => e.formattedMessage ?? e.message));
|
|
151
|
+
}
|
|
152
|
+
return { html, text: renderTemplateString(textSource, vars) };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Assemble and deliver an email through the active sender. Resolves
|
|
156
|
+
* once the driver accepts the message; throws on a missing
|
|
157
|
+
* sender/from or a transport error (the caller decides whether that
|
|
158
|
+
* is fatal to the surrounding operation).
|
|
159
|
+
*/
|
|
160
|
+
async send(options) {
|
|
161
|
+
const from = this.getFrom();
|
|
162
|
+
let subject = options.subject;
|
|
163
|
+
let text;
|
|
164
|
+
let html = options.html;
|
|
165
|
+
if (options.htmlTemplate) {
|
|
166
|
+
const catalog = (0, i18n_1.getMailCatalog)(options.lang);
|
|
167
|
+
const vars = { ...(options.vars ?? {}), t: catalog };
|
|
168
|
+
const rendered = await this.renderMjml(options.htmlTemplate, vars);
|
|
169
|
+
html = rendered.html;
|
|
170
|
+
text = rendered.text;
|
|
171
|
+
// Subject lives in the catalog and may itself reference {{ appTitle }},
|
|
172
|
+
// so render it standalone against the same vars.
|
|
173
|
+
subject = subject ?? renderTemplateString(catalog[options.htmlTemplate].subject, vars);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
text = options.template ? await this.renderTemplate(options.template, options.vars) : (options.text ?? '');
|
|
177
|
+
}
|
|
178
|
+
const message = {
|
|
179
|
+
to: toArray(options.to) ?? [],
|
|
180
|
+
from,
|
|
181
|
+
subject: subject || this.defaultSubject(),
|
|
182
|
+
text,
|
|
183
|
+
html,
|
|
184
|
+
replyTo: options.replyTo,
|
|
185
|
+
cc: toArray(options.cc),
|
|
186
|
+
bcc: toArray(options.bcc),
|
|
187
|
+
};
|
|
188
|
+
debug('sending mail to %o (subject=%s)', message.to, message.subject);
|
|
189
|
+
await this.activeSender().send(message);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Send the branded HTML test message to `to` through the active
|
|
193
|
+
* sender. Used by the admin mail settings page to verify the
|
|
194
|
+
* currently-configured sender — and that every sender renders the
|
|
195
|
+
* same template — end-to-end.
|
|
196
|
+
*/
|
|
197
|
+
async sendTest(to, lang) {
|
|
198
|
+
await this.send({ to, htmlTemplate: 'test', lang, vars: this.brandVars() });
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Security notification that the recipient's password was changed.
|
|
202
|
+
* Fire-and-forget at the call site (a notification failure must not
|
|
203
|
+
* fail the password change itself).
|
|
204
|
+
*/
|
|
205
|
+
async sendPasswordChangedNotice(to, lang) {
|
|
206
|
+
await this.send({ to, htmlTemplate: 'passwordChanged', lang, vars: this.brandVars() });
|
|
207
|
+
}
|
|
208
|
+
/** Brand vars (appTitle / appUrl / logoUrl) shared by every template. */
|
|
209
|
+
brandVars() {
|
|
210
|
+
const config = this.crowi.getConfig();
|
|
211
|
+
const appUrl = this.crowi.getBaseUrl() || '';
|
|
212
|
+
return {
|
|
213
|
+
appTitle: config?.crowi?.['app:title'] || 'Crowi',
|
|
214
|
+
appUrl,
|
|
215
|
+
logoUrl: appUrl ? `${appUrl}/logo/500w.png` : '',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.MailService = MailService;
|
|
220
|
+
//# sourceMappingURL=mail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/service/mail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class Notification {
|
|
4
|
+
crowi;
|
|
5
|
+
config;
|
|
6
|
+
constructor(crowi) {
|
|
7
|
+
this.crowi = crowi;
|
|
8
|
+
this.config = crowi.getConfig();
|
|
9
|
+
}
|
|
10
|
+
hasSlackConfig() {
|
|
11
|
+
if (!this.config.notification.slack) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
noitfyByEmail() { }
|
|
16
|
+
noitfyByChat() { }
|
|
17
|
+
}
|
|
18
|
+
exports.default = Notification;
|
|
19
|
+
//# sourceMappingURL=notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/service/notification.ts"],"names":[],"mappings":";;AAEA,MAAqB,YAAY;IAC/B,KAAK,CAAQ;IAEb,MAAM,CAAM;IAEZ,YAAY,KAAY;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,aAAa,KAAI,CAAC;IAElB,YAAY,KAAI,CAAC;CAClB;AAnBD,+BAmBC"}
|