@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,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachMcp = void 0;
|
|
4
|
+
const mcp_1 = require("@hono/mcp");
|
|
5
|
+
const http_exception_1 = require("hono/http-exception");
|
|
6
|
+
const rate_limit_1 = require("../util/rate-limit");
|
|
7
|
+
const auth_1 = require("../hono/middleware/auth");
|
|
8
|
+
const dispatch_1 = require("./dispatch");
|
|
9
|
+
const server_1 = require("./server");
|
|
10
|
+
/**
|
|
11
|
+
* Per-user budget for the `/mcp` endpoint. A single budget covers all
|
|
12
|
+
* tool calls (reads + writes); a runaway agent cannot hammer the wiki.
|
|
13
|
+
* Note the dispatched routes that have their own limiter (autocomplete)
|
|
14
|
+
* are double-counted — accepted for v1 (RFC-0011 open question).
|
|
15
|
+
*/
|
|
16
|
+
const RATE_LIMIT = 120;
|
|
17
|
+
const RATE_WINDOW_MS = 60_000;
|
|
18
|
+
/**
|
|
19
|
+
* JSON-RPC error codes for the few responses we emit before the MCP
|
|
20
|
+
* transport takes over (rate-limit / missing-bearer). `-32000` is the
|
|
21
|
+
* JSON-RPC "server error" range; `-32001` distinguishes the auth case.
|
|
22
|
+
*/
|
|
23
|
+
const JSONRPC_RATE_LIMITED = -32000;
|
|
24
|
+
const JSONRPC_AUTH_REQUIRED = -32001;
|
|
25
|
+
/** A bare JSON-RPC error envelope (`id: null` — pre-dispatch, no request id). */
|
|
26
|
+
const jsonRpcError = (code, message) => ({ jsonrpc: '2.0', error: { code, message }, id: null });
|
|
27
|
+
const attachMcp = (app, crowi) => {
|
|
28
|
+
// One shared limiter per process (Redis-backed when `crowi.redis !==
|
|
29
|
+
// null`, in-memory fallback otherwise — same pattern as autocomplete).
|
|
30
|
+
const limiter = (0, rate_limit_1.createRateLimiter)({
|
|
31
|
+
name: 'mcp',
|
|
32
|
+
limit: RATE_LIMIT,
|
|
33
|
+
windowMs: RATE_WINDOW_MS,
|
|
34
|
+
redisClient: crowi.redis ?? null,
|
|
35
|
+
});
|
|
36
|
+
// Auth gate: a valid PAT / OAuth token is required to reach the
|
|
37
|
+
// endpoint at all. Per-tool scope is enforced downstream.
|
|
38
|
+
app.use('/mcp', (0, auth_1.createJwtAuth)(crowi));
|
|
39
|
+
// Rate limit AFTER jwtAuth so `c.get('user')` is populated. The 429 is
|
|
40
|
+
// emitted as a JSON-RPC-ish error envelope (an MCP client speaks
|
|
41
|
+
// JSON-RPC; a bare HTTP 429 with a `Retry-After` header is still
|
|
42
|
+
// honoured by well-behaved clients, and the body is informational).
|
|
43
|
+
app.use('/mcp', async (c, next) => {
|
|
44
|
+
const user = c.get('user');
|
|
45
|
+
// Defensive: jwtAuth always populates `user` before this runs.
|
|
46
|
+
if (user) {
|
|
47
|
+
const result = await limiter.hit(user._id.toString());
|
|
48
|
+
if (!result.allowed) {
|
|
49
|
+
c.header('Retry-After', String(result.retryAfterSeconds));
|
|
50
|
+
return c.json(jsonRpcError(JSONRPC_RATE_LIMITED, `Rate limit exceeded. Retry after ${result.retryAfterSeconds}s.`), 429);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
await next();
|
|
54
|
+
return;
|
|
55
|
+
});
|
|
56
|
+
// The MCP route itself: a fresh server + transport per request.
|
|
57
|
+
app.all('/mcp', async (c) => {
|
|
58
|
+
const authorization = c.req.header('authorization');
|
|
59
|
+
if (!authorization) {
|
|
60
|
+
// jwtAuth would have rejected a missing header already; this is a
|
|
61
|
+
// type-narrowing guard (a cookie-authenticated request has no
|
|
62
|
+
// header to forward, which the MCP transport does not support).
|
|
63
|
+
return c.json(jsonRpcError(JSONRPC_AUTH_REQUIRED, 'MCP requires a Bearer Authorization header.'), 401);
|
|
64
|
+
}
|
|
65
|
+
const dispatch = (0, dispatch_1.makeDispatch)(app, authorization);
|
|
66
|
+
const server = (0, server_1.buildMcpServer)({ dispatch });
|
|
67
|
+
const transport = new mcp_1.StreamableHTTPTransport({
|
|
68
|
+
// Stateless: no session id, no long-lived session map.
|
|
69
|
+
sessionIdGenerator: undefined,
|
|
70
|
+
// DNS-rebinding protection is intentionally OFF. It is a defence for
|
|
71
|
+
// unauthenticated / ambient-authority (browser) servers; `/mcp` is
|
|
72
|
+
// Bearer-gated (a rebinding attacker cannot mint the user's PAT — the
|
|
73
|
+
// custom Authorization header forces a CORS preflight) and is hit by
|
|
74
|
+
// non-browser clients (Claude Code, the SDK), so Host pinning adds
|
|
75
|
+
// nothing here. Browser cross-origin access is governed by `createCors`.
|
|
76
|
+
// Pinning to a host (e.g. `CLIENT_URL`, the web origin) would instead
|
|
77
|
+
// reject every legitimate client whenever the api runs on its own
|
|
78
|
+
// host/port (dev's :4301 vs web :4302, or any split api/web deploy).
|
|
79
|
+
enableDnsRebindingProtection: false,
|
|
80
|
+
});
|
|
81
|
+
await server.connect(transport);
|
|
82
|
+
let response;
|
|
83
|
+
try {
|
|
84
|
+
response = await transport.handleRequest(c);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
// `@hono/mcp` signals protocol-level rejections (DNS-rebinding /
|
|
88
|
+
// Accept-header / unsupported method) by throwing an `HTTPException`
|
|
89
|
+
// that already carries a fully-formed JSON-RPC error response.
|
|
90
|
+
// Crowi's global `onError` would flatten that into a generic 500, so
|
|
91
|
+
// we return the exception's own response here to preserve the
|
|
92
|
+
// correct status (403 / 406 / 405) and JSON-RPC body.
|
|
93
|
+
if (err instanceof http_exception_1.HTTPException) {
|
|
94
|
+
return err.getResponse();
|
|
95
|
+
}
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
98
|
+
// `handleRequest` returns `Response | undefined`; a defined Response
|
|
99
|
+
// is always produced for POST/GET MCP traffic.
|
|
100
|
+
return response ?? c.body(null, 204);
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
exports.attachMcp = attachMcp;
|
|
104
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/mcp/attach.ts"],"names":[],"mappings":";;;AAsBA,mCAAoD;AACpD,wDAAoD;AAGpD,oDAAwD;AAGxD,kDAAwD;AACxD,yCAA0C;AAC1C,qCAA0C;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAK,CAAC;AACpC,MAAM,qBAAqB,GAAG,CAAC,KAAK,CAAC;AAErC,iFAAiF;AACjF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAEnH,MAAM,SAAS,GAAG,CAAC,GAAmC,EAAE,KAAY,EAAQ,EAAE;IACnF,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,OAAO,GAAG,IAAA,8BAAiB,EAAC;QAChC,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;KACjC,CAAC,CAAC;IAEH,gEAAgE;IAChE,0DAA0D;IAC1D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAA,oBAAa,EAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,uEAAuE;IACvE,iEAAiE;IACjE,iEAAiE;IACjE,oEAAoE;IACpE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,+DAA+D;QAC/D,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,oCAAoC,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3H,CAAC;QACH,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACT,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,kEAAkE;YAClE,8DAA8D;YAC9D,gEAAgE;YAChE,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,6CAA6C,CAAC,EAAE,GAAG,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,IAAI,6BAAuB,CAAC;YAC5C,uDAAuD;YACvD,kBAAkB,EAAE,SAAS;YAC7B,qEAAqE;YACrE,mEAAmE;YACnE,sEAAsE;YACtE,qEAAqE;YACrE,mEAAmE;YACnE,yEAAyE;YACzE,sEAAsE;YACtE,kEAAkE;YAClE,qEAAqE;YACrE,4BAA4B,EAAE,KAAK;SACpC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,QAA8B,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iEAAiE;YACjE,qEAAqE;YACrE,+DAA+D;YAC/D,qEAAqE;YACrE,8DAA8D;YAC9D,sDAAsD;YACtD,IAAI,GAAG,YAAY,8BAAa,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,qEAAqE;QACrE,+CAA+C;QAC/C,OAAO,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhFW,QAAA,SAAS,aAgFpB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC-0011 — in-process dispatch helper for the MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Each MCP tool reuses the existing API by dispatching **in-process** to
|
|
5
|
+
* the same Hono routes the HTTP server serves, so validation, scope
|
|
6
|
+
* enforcement, and business logic stay single-source-of-truth. The MCP
|
|
7
|
+
* layer is a thin protocol translator — see RFC-0011 §3.1.
|
|
8
|
+
*
|
|
9
|
+
* Two boundary facts make this safe and simple:
|
|
10
|
+
* - Routes are registered on the Hono app at **root** (`/pages`,
|
|
11
|
+
* `/search`, …). The `/api/v2` prefix is a boundary concern stripped
|
|
12
|
+
* by `stripApiV2Prefix` before `honoApp.fetch` (`hono/path-rewrite.ts`,
|
|
13
|
+
* `crowi/index.ts`). So internal dispatch uses the **bare** route path
|
|
14
|
+
* (`/pages`), never `/api/v2/pages`.
|
|
15
|
+
* - We forward the caller's `Authorization` header verbatim, so the
|
|
16
|
+
* dispatched route re-runs `createJwtAuth` + `requireScope` for the
|
|
17
|
+
* same principal (RFC-0011 §10.4 "forward-the-header"; the optional
|
|
18
|
+
* fast-path that injects the resolved context is deferred).
|
|
19
|
+
*
|
|
20
|
+
* Non-2xx responses are surfaced as a typed `ApiToolError(status, body)`
|
|
21
|
+
* so the tool layer can map them to an MCP `isError` result that carries
|
|
22
|
+
* the API error envelope's `error.code` / `error.message` (RFC-0011 §9).
|
|
23
|
+
*/
|
|
24
|
+
import type { OpenAPIHono } from '@hono/zod-openapi';
|
|
25
|
+
import type { CrowiHonoBindings } from '../hono/app';
|
|
26
|
+
/**
|
|
27
|
+
* Thrown by `dispatch` when the in-process route returns a non-2xx
|
|
28
|
+
* status. Carries the parsed JSON body (the API error envelope) so the
|
|
29
|
+
* tool layer can extract `error.code` / `error.message`.
|
|
30
|
+
*/
|
|
31
|
+
export declare class ApiToolError extends Error {
|
|
32
|
+
readonly status: number;
|
|
33
|
+
readonly body: unknown;
|
|
34
|
+
constructor(status: number, body: unknown);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A query value bag. Values are coerced to strings; `undefined` entries
|
|
38
|
+
* are dropped so optional contract fields (which Zod fills with defaults
|
|
39
|
+
* server-side) don't serialise as the literal string `"undefined"`.
|
|
40
|
+
*/
|
|
41
|
+
export type DispatchQuery = Record<string, string | number | boolean | undefined | null>;
|
|
42
|
+
export interface DispatchInit {
|
|
43
|
+
/** Query parameters for GET dispatches. */
|
|
44
|
+
query?: DispatchQuery;
|
|
45
|
+
/** JSON body for POST / PUT / DELETE dispatches. */
|
|
46
|
+
json?: unknown;
|
|
47
|
+
}
|
|
48
|
+
export type Dispatch = (method: string, path: string, init?: DispatchInit) => Promise<unknown>;
|
|
49
|
+
/**
|
|
50
|
+
* Build a dispatcher bound to a single request's authorization. The
|
|
51
|
+
* `honoApp` is captured at attach time (the same app `buildHonoApp`
|
|
52
|
+
* builds); `authorization` is the caller's verbatim `Authorization`
|
|
53
|
+
* header so the dispatched route authenticates as the MCP caller.
|
|
54
|
+
*
|
|
55
|
+
* The host is irrelevant for in-process dispatch (no socket is opened),
|
|
56
|
+
* but `honoApp.request` needs an absolute-or-rooted URL; a rooted path
|
|
57
|
+
* is what we pass, matching the test harness (`hono/path-rewrite.ts`).
|
|
58
|
+
*/
|
|
59
|
+
export declare const makeDispatch: (honoApp: OpenAPIHono<CrowiHonoBindings>, authorization: string) => Dispatch;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeDispatch = exports.ApiToolError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Thrown by `dispatch` when the in-process route returns a non-2xx
|
|
6
|
+
* status. Carries the parsed JSON body (the API error envelope) so the
|
|
7
|
+
* tool layer can extract `error.code` / `error.message`.
|
|
8
|
+
*/
|
|
9
|
+
class ApiToolError extends Error {
|
|
10
|
+
status;
|
|
11
|
+
body;
|
|
12
|
+
constructor(status, body) {
|
|
13
|
+
super(`MCP dispatch failed with status ${status}`);
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.body = body;
|
|
16
|
+
this.name = 'ApiToolError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ApiToolError = ApiToolError;
|
|
20
|
+
/** Serialise a query bag, skipping `undefined` / `null`. */
|
|
21
|
+
const buildQueryString = (query) => {
|
|
22
|
+
const params = new URLSearchParams();
|
|
23
|
+
for (const [key, value] of Object.entries(query)) {
|
|
24
|
+
if (value === undefined || value === null)
|
|
25
|
+
continue;
|
|
26
|
+
params.set(key, String(value));
|
|
27
|
+
}
|
|
28
|
+
const qs = params.toString();
|
|
29
|
+
return qs ? `?${qs}` : '';
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Build a dispatcher bound to a single request's authorization. The
|
|
33
|
+
* `honoApp` is captured at attach time (the same app `buildHonoApp`
|
|
34
|
+
* builds); `authorization` is the caller's verbatim `Authorization`
|
|
35
|
+
* header so the dispatched route authenticates as the MCP caller.
|
|
36
|
+
*
|
|
37
|
+
* The host is irrelevant for in-process dispatch (no socket is opened),
|
|
38
|
+
* but `honoApp.request` needs an absolute-or-rooted URL; a rooted path
|
|
39
|
+
* is what we pass, matching the test harness (`hono/path-rewrite.ts`).
|
|
40
|
+
*/
|
|
41
|
+
const makeDispatch = (honoApp, authorization) => {
|
|
42
|
+
return async (method, path, init) => {
|
|
43
|
+
const url = `${path}${init?.query ? buildQueryString(init.query) : ''}`;
|
|
44
|
+
const hasJsonBody = init?.json !== undefined;
|
|
45
|
+
const res = await honoApp.request(url, {
|
|
46
|
+
method,
|
|
47
|
+
headers: {
|
|
48
|
+
Authorization: authorization,
|
|
49
|
+
...(hasJsonBody ? { 'content-type': 'application/json' } : {}),
|
|
50
|
+
},
|
|
51
|
+
body: hasJsonBody ? JSON.stringify(init?.json) : undefined,
|
|
52
|
+
});
|
|
53
|
+
// Every Crowi API route replies JSON (success envelopes + error
|
|
54
|
+
// envelopes). A non-JSON body would be an unexpected 5xx; parse
|
|
55
|
+
// defensively so a malformed body still surfaces as an ApiToolError.
|
|
56
|
+
let body;
|
|
57
|
+
try {
|
|
58
|
+
body = await res.json();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
body = { error: { code: 'INTERNAL_ERROR', message: `Non-JSON response (status ${res.status})` } };
|
|
62
|
+
}
|
|
63
|
+
if (!res.ok) {
|
|
64
|
+
throw new ApiToolError(res.status, body);
|
|
65
|
+
}
|
|
66
|
+
return body;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
exports.makeDispatch = makeDispatch;
|
|
70
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/mcp/dispatch.ts"],"names":[],"mappings":";;;AA2BA;;;;GAIG;AACH,MAAa,YAAa,SAAQ,KAAK;IAEnB;IACA;IAFlB,YACkB,MAAc,EACd,IAAa;QAE7B,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;QAHnC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAS;QAG7B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AARD,oCAQC;AAgBD,4DAA4D;AAC5D,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAU,EAAE;IACxD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC,CAAC;AAIF;;;;;;;;;GASG;AACI,MAAM,YAAY,GAAG,CAAC,OAAuC,EAAE,aAAqB,EAAY,EAAE;IACvG,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAExE,MAAM,WAAW,GAAG,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACrC,MAAM;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,aAAa;gBAC5B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D;YACD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC3D,CAAC,CAAC;QAEH,gEAAgE;QAChE,gEAAgE;QAChE,qEAAqE;QACrE,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,6BAA6B,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,YAAY,gBA6BvB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC-0011 §9 — mapping in-process dispatch results into MCP tool
|
|
3
|
+
* results.
|
|
4
|
+
*
|
|
5
|
+
* MCP tool results carry `content` (an array of typed blocks; the model
|
|
6
|
+
* reads `text`) plus optional `structuredContent` (machine-readable
|
|
7
|
+
* data) and an `isError` flag. The helpers here turn the JSON envelope a
|
|
8
|
+
* dispatched route returns into that shape, and turn an `ApiToolError`
|
|
9
|
+
* (non-2xx) into an `isError` result whose text is derived from the API
|
|
10
|
+
* error envelope so the model can recover (e.g. re-fetch on a 409).
|
|
11
|
+
*/
|
|
12
|
+
import { ApiToolError } from './dispatch';
|
|
13
|
+
/** Minimal MCP tool-result shape (subset of the SDK's `CallToolResult`). */
|
|
14
|
+
export interface McpToolResult {
|
|
15
|
+
content: Array<{
|
|
16
|
+
type: 'text';
|
|
17
|
+
text: string;
|
|
18
|
+
}>;
|
|
19
|
+
structuredContent?: Record<string, unknown>;
|
|
20
|
+
isError?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** A plain object whose values we want as `structuredContent`. */
|
|
23
|
+
type Structured = Record<string, unknown>;
|
|
24
|
+
/** Build a success result: a text block plus optional structured data. */
|
|
25
|
+
export declare const okResult: (text: string, structuredContent?: Structured) => McpToolResult;
|
|
26
|
+
/**
|
|
27
|
+
* Build an error result from an `ApiToolError`. The text is the API
|
|
28
|
+
* error envelope's `code` + `message` (RFC-0011 §9) so the model gets a
|
|
29
|
+
* human-readable, recoverable signal. The full body is echoed in
|
|
30
|
+
* `structuredContent` for clients that introspect it.
|
|
31
|
+
*/
|
|
32
|
+
export declare const errorResult: (err: ApiToolError) => McpToolResult;
|
|
33
|
+
/**
|
|
34
|
+
* Run a tool body and convert a thrown `ApiToolError` into an `isError`
|
|
35
|
+
* result. Any other throw is rethrown — the SDK turns an uncaught throw
|
|
36
|
+
* into a protocol-level error, which is the right behaviour for genuine
|
|
37
|
+
* bugs (vs. an expected 4xx from the dispatched route).
|
|
38
|
+
*/
|
|
39
|
+
export declare const runTool: (body: () => Promise<McpToolResult>) => Promise<McpToolResult>;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runTool = exports.errorResult = exports.okResult = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* RFC-0011 §9 — mapping in-process dispatch results into MCP tool
|
|
6
|
+
* results.
|
|
7
|
+
*
|
|
8
|
+
* MCP tool results carry `content` (an array of typed blocks; the model
|
|
9
|
+
* reads `text`) plus optional `structuredContent` (machine-readable
|
|
10
|
+
* data) and an `isError` flag. The helpers here turn the JSON envelope a
|
|
11
|
+
* dispatched route returns into that shape, and turn an `ApiToolError`
|
|
12
|
+
* (non-2xx) into an `isError` result whose text is derived from the API
|
|
13
|
+
* error envelope so the model can recover (e.g. re-fetch on a 409).
|
|
14
|
+
*/
|
|
15
|
+
const dispatch_1 = require("./dispatch");
|
|
16
|
+
/** Build a success result: a text block plus optional structured data. */
|
|
17
|
+
const okResult = (text, structuredContent) => ({
|
|
18
|
+
content: [{ type: 'text', text }],
|
|
19
|
+
...(structuredContent ? { structuredContent } : {}),
|
|
20
|
+
});
|
|
21
|
+
exports.okResult = okResult;
|
|
22
|
+
/**
|
|
23
|
+
* Build an error result from an `ApiToolError`. The text is the API
|
|
24
|
+
* error envelope's `code` + `message` (RFC-0011 §9) so the model gets a
|
|
25
|
+
* human-readable, recoverable signal. The full body is echoed in
|
|
26
|
+
* `structuredContent` for clients that introspect it.
|
|
27
|
+
*/
|
|
28
|
+
const errorResult = (err) => {
|
|
29
|
+
const envelope = extractErrorEnvelope(err.body);
|
|
30
|
+
const code = envelope.code ?? `HTTP_${err.status}`;
|
|
31
|
+
const message = envelope.message ?? 'The Crowi API rejected the request.';
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: 'text', text: `Error (${code}): ${message}` }],
|
|
34
|
+
structuredContent: { status: err.status, error: { code, message } },
|
|
35
|
+
isError: true,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.errorResult = errorResult;
|
|
39
|
+
/**
|
|
40
|
+
* Run a tool body and convert a thrown `ApiToolError` into an `isError`
|
|
41
|
+
* result. Any other throw is rethrown — the SDK turns an uncaught throw
|
|
42
|
+
* into a protocol-level error, which is the right behaviour for genuine
|
|
43
|
+
* bugs (vs. an expected 4xx from the dispatched route).
|
|
44
|
+
*/
|
|
45
|
+
const runTool = async (body) => {
|
|
46
|
+
try {
|
|
47
|
+
return await body();
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err instanceof dispatch_1.ApiToolError) {
|
|
51
|
+
return (0, exports.errorResult)(err);
|
|
52
|
+
}
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.runTool = runTool;
|
|
57
|
+
/** Best-effort extraction of `{ error: { code, message } }`. */
|
|
58
|
+
const extractErrorEnvelope = (body) => {
|
|
59
|
+
if (body && typeof body === 'object' && 'error' in body) {
|
|
60
|
+
const error = body.error;
|
|
61
|
+
// Most routes use the nested `{ error: { code, message } }` shape;
|
|
62
|
+
// the rate-limit envelopes use a flat `{ error: 'rate_limited',
|
|
63
|
+
// message }`. Handle both.
|
|
64
|
+
if (error && typeof error === 'object') {
|
|
65
|
+
const e = error;
|
|
66
|
+
return {
|
|
67
|
+
code: typeof e.code === 'string' ? e.code : undefined,
|
|
68
|
+
message: typeof e.message === 'string' ? e.message : undefined,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (typeof error === 'string') {
|
|
72
|
+
const message = body.message;
|
|
73
|
+
return { code: error, message: typeof message === 'string' ? message : undefined };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {};
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/mcp/result.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACH,yCAA0C;AAY1C,0EAA0E;AACnE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,iBAA8B,EAAiB,EAAE,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC;AAHU,QAAA,QAAQ,YAGlB;AAEH;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CAAC,GAAiB,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,qCAAqC,CAAC;IAC1E,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,IAAI,MAAM,OAAO,EAAE,EAAE,CAAC;QAChE,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACnE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,WAAW,eAStB;AAEF;;;;;GAKG;AACI,MAAM,OAAO,GAAG,KAAK,EAAE,IAAkC,EAA0B,EAAE;IAC1F,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAY,EAAE,CAAC;YAChC,OAAO,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AATW,QAAA,OAAO,WASlB;AAEF,gEAAgE;AAChE,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAuC,EAAE;IAClF,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACxD,MAAM,KAAK,GAAI,IAA2B,CAAC,KAAK,CAAC;QACjD,mEAAmE;QACnE,gEAAgE;QAChE,2BAA2B;QAC3B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,KAA8C,CAAC;YACzD,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACrD,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAC/D,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAI,IAA8B,CAAC,OAAO,CAAC;YACxD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC-0011 §7 — per-request MCP server factory + data-driven tool table.
|
|
3
|
+
*
|
|
4
|
+
* `buildMcpServer(ctx)` builds a fresh `McpServer` per request (stateless
|
|
5
|
+
* transport, RFC-0011 §4). The server registers the static tool catalog,
|
|
6
|
+
* but every tool closes over the request's `dispatch` (which carries the
|
|
7
|
+
* caller's `Authorization`), so tool calls run with the caller's identity
|
|
8
|
+
* and inherit the dispatched route's scope enforcement (RFC-0011 §5.2).
|
|
9
|
+
*
|
|
10
|
+
* The tool catalog is **data-driven**: each tool is a `ToolDescriptor`
|
|
11
|
+
* row `{ name, method, path, ... }`, so adding a tool is one row, not a
|
|
12
|
+
* new code path (RFC-0011 §8). Three request shapes are supported:
|
|
13
|
+
* - **query** tools (GET): the validated input becomes the query bag.
|
|
14
|
+
* - **body** tools (POST/PUT/DELETE): the validated input becomes the
|
|
15
|
+
* JSON body.
|
|
16
|
+
* - **path-param** tools: one or more input fields are spliced into the
|
|
17
|
+
* route path (e.g. `/pages/{page_id}/revisions`) and the remainder
|
|
18
|
+
* becomes the query / body.
|
|
19
|
+
*/
|
|
20
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
21
|
+
import type { ZodRawShape } from 'zod';
|
|
22
|
+
import type { Dispatch } from './dispatch';
|
|
23
|
+
import { type McpToolResult, okResult } from './result';
|
|
24
|
+
/** How a tool's validated input is turned into a dispatch request. */
|
|
25
|
+
export type ToolKind = 'query' | 'body';
|
|
26
|
+
/**
|
|
27
|
+
* A single tool definition. The dispatched route is `method path` (bare,
|
|
28
|
+
* no `/api/v2`); the route enforces scope, so the `scope` field here is
|
|
29
|
+
* documentation only (it is never re-checked in the MCP layer).
|
|
30
|
+
*/
|
|
31
|
+
export interface ToolDescriptor {
|
|
32
|
+
/** MCP tool name, `crowi_<verb>_<noun>`. */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Human + model-facing description. Documents revision_id etc. */
|
|
35
|
+
description: string;
|
|
36
|
+
/** HTTP method of the dispatched route. */
|
|
37
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
38
|
+
/**
|
|
39
|
+
* Route path with optional `{param}` placeholders filled from the
|
|
40
|
+
* input (e.g. `/pages/{page_id}/revisions`). Placeholder fields are
|
|
41
|
+
* removed from the query / body after substitution.
|
|
42
|
+
*/
|
|
43
|
+
path: string;
|
|
44
|
+
/** Input schema shape passed to `registerTool` for boundary validation. */
|
|
45
|
+
schema: ZodRawShape;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the non-path input becomes the query string (GET) or the
|
|
48
|
+
* JSON body (POST/PUT/DELETE).
|
|
49
|
+
*/
|
|
50
|
+
kind: ToolKind;
|
|
51
|
+
/** Scope the dispatched route requires (documentation only). */
|
|
52
|
+
scope: string;
|
|
53
|
+
/** Map the dispatched route's JSON result into an MCP tool result. */
|
|
54
|
+
resultMapper: (body: unknown) => McpToolResult;
|
|
55
|
+
}
|
|
56
|
+
/** Context captured per request and closed over by every tool. */
|
|
57
|
+
export interface McpServerContext {
|
|
58
|
+
dispatch: Dispatch;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build a per-request `McpServer` with the full tool catalog registered.
|
|
62
|
+
* Stateless: a fresh server is connected to a fresh transport per request
|
|
63
|
+
* by `attachMcp`.
|
|
64
|
+
*/
|
|
65
|
+
export declare const buildMcpServer: (ctx: McpServerContext) => McpServer;
|
|
66
|
+
/** Re-export the result helper so tool tables can build success results. */
|
|
67
|
+
export { okResult };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.okResult = exports.buildMcpServer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* RFC-0011 §7 — per-request MCP server factory + data-driven tool table.
|
|
6
|
+
*
|
|
7
|
+
* `buildMcpServer(ctx)` builds a fresh `McpServer` per request (stateless
|
|
8
|
+
* transport, RFC-0011 §4). The server registers the static tool catalog,
|
|
9
|
+
* but every tool closes over the request's `dispatch` (which carries the
|
|
10
|
+
* caller's `Authorization`), so tool calls run with the caller's identity
|
|
11
|
+
* and inherit the dispatched route's scope enforcement (RFC-0011 §5.2).
|
|
12
|
+
*
|
|
13
|
+
* The tool catalog is **data-driven**: each tool is a `ToolDescriptor`
|
|
14
|
+
* row `{ name, method, path, ... }`, so adding a tool is one row, not a
|
|
15
|
+
* new code path (RFC-0011 §8). Three request shapes are supported:
|
|
16
|
+
* - **query** tools (GET): the validated input becomes the query bag.
|
|
17
|
+
* - **body** tools (POST/PUT/DELETE): the validated input becomes the
|
|
18
|
+
* JSON body.
|
|
19
|
+
* - **path-param** tools: one or more input fields are spliced into the
|
|
20
|
+
* route path (e.g. `/pages/{page_id}/revisions`) and the remainder
|
|
21
|
+
* becomes the query / body.
|
|
22
|
+
*/
|
|
23
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
24
|
+
const result_1 = require("./result");
|
|
25
|
+
Object.defineProperty(exports, "okResult", { enumerable: true, get: function () { return result_1.okResult; } });
|
|
26
|
+
const page_1 = require("./tools/page");
|
|
27
|
+
const search_1 = require("./tools/search");
|
|
28
|
+
/** Server identity advertised to MCP clients (`initialize` response). */
|
|
29
|
+
const SERVER_INFO = {
|
|
30
|
+
name: 'crowi',
|
|
31
|
+
version: '1.0.0',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Server-level usage guidance returned in the `initialize` response. MCP
|
|
35
|
+
* clients surface this to the model as a system-prompt-style hint (MCP
|
|
36
|
+
* spec: `instructions`), so it is the place for cross-cutting Crowi
|
|
37
|
+
* conventions that no single tool owns — path shape, date-page nesting,
|
|
38
|
+
* the get-before-update lock dance, and grant values.
|
|
39
|
+
*/
|
|
40
|
+
const SERVER_INSTRUCTIONS = `This server exposes a Crowi wiki (team knowledge base). When the user asks to
|
|
41
|
+
search/read/create/update wiki pages, use these crowi_* tools — they operate on
|
|
42
|
+
the wiki, not the local filesystem or codebase.
|
|
43
|
+
|
|
44
|
+
Path conventions:
|
|
45
|
+
- Paths are slash-separated hierarchies. A trailing slash means a portal
|
|
46
|
+
(directory) page; no trailing slash is the page itself.
|
|
47
|
+
- Date-based pages nest by slash, NOT hyphens: \`/parent/YYYY/MM/DD/title\`
|
|
48
|
+
(e.g. /crowi/qa/2026/06/08/mcp-server), never \`/parent/2026-06-08-title\`.
|
|
49
|
+
|
|
50
|
+
Choosing where to create a page:
|
|
51
|
+
- Personal notes / daily memos belong under the author's own user page:
|
|
52
|
+
\`/user/<username>/memo/YYYY/MM/DD/title\`. If you do not know the username, ask
|
|
53
|
+
the user rather than guessing.
|
|
54
|
+
- Project / team content follows the existing structure of that project. Before
|
|
55
|
+
creating, explore with crowi_search_pages / crowi_list_child_pages /
|
|
56
|
+
crowi_autocomplete_pages to see where similar pages already live, then place the
|
|
57
|
+
new page to match that hierarchy instead of inventing a new top-level path.
|
|
58
|
+
|
|
59
|
+
Editing:
|
|
60
|
+
- Before crowi_update_page, call crowi_get_page to read the current revision_id
|
|
61
|
+
(optimistic lock). A stale revision_id returns a 409 conflict — refetch and retry.
|
|
62
|
+
|
|
63
|
+
Visibility (\`grant\` on create): 1 = public, 2 = restricted, 3 = specified users,
|
|
64
|
+
4 = owner only. Omit to default to public.`;
|
|
65
|
+
/** Names of `{param}` placeholders in a path template. */
|
|
66
|
+
const pathParamNames = (path) => [...path.matchAll(/\{([^}]+)\}/g)].map((m) => m[1]);
|
|
67
|
+
/**
|
|
68
|
+
* Substitute `{param}` placeholders in `path` from `input`, returning the
|
|
69
|
+
* concrete path plus the remaining (non-path) input fields.
|
|
70
|
+
*/
|
|
71
|
+
const splicePathParams = (path, input) => {
|
|
72
|
+
const names = pathParamNames(path);
|
|
73
|
+
if (names.length === 0)
|
|
74
|
+
return { path, rest: input };
|
|
75
|
+
let concrete = path;
|
|
76
|
+
const rest = { ...input };
|
|
77
|
+
for (const name of names) {
|
|
78
|
+
const value = rest[name];
|
|
79
|
+
concrete = concrete.replace(`{${name}}`, encodeURIComponent(String(value ?? '')));
|
|
80
|
+
delete rest[name];
|
|
81
|
+
}
|
|
82
|
+
return { path: concrete, rest };
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Build a per-request `McpServer` with the full tool catalog registered.
|
|
86
|
+
* Stateless: a fresh server is connected to a fresh transport per request
|
|
87
|
+
* by `attachMcp`.
|
|
88
|
+
*/
|
|
89
|
+
const buildMcpServer = (ctx) => {
|
|
90
|
+
const server = new mcp_js_1.McpServer(SERVER_INFO, { instructions: SERVER_INSTRUCTIONS });
|
|
91
|
+
const descriptors = [...page_1.pageTools, ...search_1.searchTools];
|
|
92
|
+
for (const tool of descriptors) {
|
|
93
|
+
// The SDK validates `args` against `tool.schema` before invoking the
|
|
94
|
+
// callback, so `args` is the parsed input — invalid input never
|
|
95
|
+
// reaches here (it is rejected at the MCP boundary as `isError`,
|
|
96
|
+
// RFC §6). The handler return type (`McpToolResult`) is structurally
|
|
97
|
+
// a `CallToolResult` but lacks the SDK type's `[x: string]: unknown`
|
|
98
|
+
// index signature, so we cast at the registration boundary.
|
|
99
|
+
const handler = async (args) => (0, result_1.runTool)(async () => {
|
|
100
|
+
const { path, rest } = splicePathParams(tool.path, args ?? {});
|
|
101
|
+
const init = tool.kind === 'query' ? { query: rest } : { json: rest };
|
|
102
|
+
const body = await ctx.dispatch(tool.method, path, init);
|
|
103
|
+
return tool.resultMapper(body);
|
|
104
|
+
});
|
|
105
|
+
server.registerTool(tool.name, {
|
|
106
|
+
description: tool.description,
|
|
107
|
+
inputSchema: tool.schema,
|
|
108
|
+
}, handler);
|
|
109
|
+
}
|
|
110
|
+
return server;
|
|
111
|
+
};
|
|
112
|
+
exports.buildMcpServer = buildMcpServer;
|
|
113
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|