@pcontext/api 0.0.1
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/README.md +151 -0
- package/dist/app.d.mts +44779 -0
- package/dist/app.d.mts.map +1 -0
- package/dist/app.mjs +37 -0
- package/dist/app.mjs.map +1 -0
- package/dist/client.d.mts +22428 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +15 -0
- package/dist/client.mjs.map +1 -0
- package/dist/dev.d.mts +11 -0
- package/dist/dev.d.mts.map +1 -0
- package/dist/dev.mjs +16 -0
- package/dist/dev.mjs.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/modules/doc/chat.route.d.mts +18 -0
- package/dist/modules/doc/chat.route.d.mts.map +1 -0
- package/dist/modules/doc/chat.route.mjs +20 -0
- package/dist/modules/doc/chat.route.mjs.map +1 -0
- package/dist/modules/doc/chat.service.d.mts +10 -0
- package/dist/modules/doc/chat.service.d.mts.map +1 -0
- package/dist/modules/doc/chat.service.mjs +29 -0
- package/dist/modules/doc/chat.service.mjs.map +1 -0
- package/dist/modules/doc/doc.dto.d.mts +67 -0
- package/dist/modules/doc/doc.dto.d.mts.map +1 -0
- package/dist/modules/doc/doc.dto.mjs +43 -0
- package/dist/modules/doc/doc.dto.mjs.map +1 -0
- package/dist/modules/doc/doc.entity.d.mts +19 -0
- package/dist/modules/doc/doc.entity.d.mts.map +1 -0
- package/dist/modules/doc/doc.entity.mjs +1 -0
- package/dist/modules/doc/doc.repo.interface.d.mts +28 -0
- package/dist/modules/doc/doc.repo.interface.d.mts.map +1 -0
- package/dist/modules/doc/doc.repo.interface.mjs +1 -0
- package/dist/modules/doc/doc.route.d.mts +14193 -0
- package/dist/modules/doc/doc.route.d.mts.map +1 -0
- package/dist/modules/doc/doc.route.mjs +100 -0
- package/dist/modules/doc/doc.route.mjs.map +1 -0
- package/dist/modules/doc/doc.service.d.mts +38 -0
- package/dist/modules/doc/doc.service.d.mts.map +1 -0
- package/dist/modules/doc/doc.service.mjs +134 -0
- package/dist/modules/doc/doc.service.mjs.map +1 -0
- package/dist/modules/doc/doc.vo.d.mts +17 -0
- package/dist/modules/doc/doc.vo.d.mts.map +1 -0
- package/dist/modules/doc/doc.vo.mjs +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts +21 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.mjs +36 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts +28 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.mjs +135 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts +7 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs +12 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts +54 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs +142 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/index.d.mts +3 -0
- package/dist/modules/doc/infrastructure/agent/loaders/index.mjs +4 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts +42 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs +104 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/settings.d.mts +5 -0
- package/dist/modules/doc/infrastructure/agent/settings.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/settings.mjs +72 -0
- package/dist/modules/doc/infrastructure/agent/settings.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.d.mts +7 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.mjs +12 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts +14 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs +35 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.po.d.mts +570 -0
- package/dist/modules/doc/infrastructure/doc.po.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.po.mjs +54 -0
- package/dist/modules/doc/infrastructure/doc.po.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts +32 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.mjs +157 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts +32 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs +153 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs.map +1 -0
- package/dist/modules/doc/mcp.route.d.mts +18 -0
- package/dist/modules/doc/mcp.route.d.mts.map +1 -0
- package/dist/modules/doc/mcp.route.mjs +39 -0
- package/dist/modules/doc/mcp.route.mjs.map +1 -0
- package/dist/modules/doc/mcp.service.d.mts +22 -0
- package/dist/modules/doc/mcp.service.d.mts.map +1 -0
- package/dist/modules/doc/mcp.service.mjs +119 -0
- package/dist/modules/doc/mcp.service.mjs.map +1 -0
- package/dist/modules/rank/rank.dto.d.mts +10 -0
- package/dist/modules/rank/rank.dto.d.mts.map +1 -0
- package/dist/modules/rank/rank.dto.mjs +8 -0
- package/dist/modules/rank/rank.dto.mjs.map +1 -0
- package/dist/modules/rank/rank.route.d.mts +2033 -0
- package/dist/modules/rank/rank.route.d.mts.map +1 -0
- package/dist/modules/rank/rank.route.mjs +20 -0
- package/dist/modules/rank/rank.route.mjs.map +1 -0
- package/dist/modules/rank/rank.service.d.mts +32 -0
- package/dist/modules/rank/rank.service.d.mts.map +1 -0
- package/dist/modules/rank/rank.service.mjs +3 -0
- package/dist/modules/rank/rank.vo.d.mts +9 -0
- package/dist/modules/rank/rank.vo.d.mts.map +1 -0
- package/dist/modules/rank/rank.vo.mjs +1 -0
- package/dist/modules/task/infrastructure/mq/task-context.d.mts +29 -0
- package/dist/modules/task/infrastructure/mq/task-context.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-context.mjs +70 -0
- package/dist/modules/task/infrastructure/mq/task-context.mjs.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-queue.d.mts +10 -0
- package/dist/modules/task/infrastructure/mq/task-queue.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-queue.mjs +12 -0
- package/dist/modules/task/infrastructure/mq/task-queue.mjs.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-worker.d.mts +13 -0
- package/dist/modules/task/infrastructure/mq/task-worker.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-worker.mjs +35 -0
- package/dist/modules/task/infrastructure/mq/task-worker.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.po.d.mts +1147 -0
- package/dist/modules/task/infrastructure/task.po.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.po.mjs +55 -0
- package/dist/modules/task/infrastructure/task.po.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.pg.d.mts +21 -0
- package/dist/modules/task/infrastructure/task.repo.pg.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.pg.mjs +86 -0
- package/dist/modules/task/infrastructure/task.repo.pg.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts +21 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.mjs +89 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.mjs.map +1 -0
- package/dist/modules/task/task.dto.d.mts +26 -0
- package/dist/modules/task/task.dto.d.mts.map +1 -0
- package/dist/modules/task/task.dto.mjs +25 -0
- package/dist/modules/task/task.dto.mjs.map +1 -0
- package/dist/modules/task/task.entity.d.mts +43 -0
- package/dist/modules/task/task.entity.d.mts.map +1 -0
- package/dist/modules/task/task.entity.mjs +1 -0
- package/dist/modules/task/task.repo.interface.d.mts +17 -0
- package/dist/modules/task/task.repo.interface.d.mts.map +1 -0
- package/dist/modules/task/task.repo.interface.mjs +1 -0
- package/dist/modules/task/task.route.d.mts +4087 -0
- package/dist/modules/task/task.route.d.mts.map +1 -0
- package/dist/modules/task/task.route.mjs +63 -0
- package/dist/modules/task/task.route.mjs.map +1 -0
- package/dist/modules/task/task.service.d.mts +28 -0
- package/dist/modules/task/task.service.d.mts.map +1 -0
- package/dist/modules/task/task.service.mjs +202 -0
- package/dist/modules/task/task.service.mjs.map +1 -0
- package/dist/modules/task/task.vo.d.mts +18 -0
- package/dist/modules/task/task.vo.d.mts.map +1 -0
- package/dist/modules/task/task.vo.mjs +1 -0
- package/dist/modules/user/application/user.service.d.mts +24 -0
- package/dist/modules/user/application/user.service.d.mts.map +1 -0
- package/dist/modules/user/application/user.service.mjs +153 -0
- package/dist/modules/user/application/user.service.mjs.map +1 -0
- package/dist/modules/user/domain/user.entity.d.mts +24 -0
- package/dist/modules/user/domain/user.entity.d.mts.map +1 -0
- package/dist/modules/user/domain/user.entity.mjs +35 -0
- package/dist/modules/user/domain/user.entity.mjs.map +1 -0
- package/dist/modules/user/domain/user.repo.interface.d.mts +27 -0
- package/dist/modules/user/domain/user.repo.interface.d.mts.map +1 -0
- package/dist/modules/user/domain/user.repo.interface.mjs +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.d.mts +7 -0
- package/dist/modules/user/infrastructure/casbin/adapter.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.mjs +13 -0
- package/dist/modules/user/infrastructure/casbin/adapter.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts +19 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs +129 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts +19 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs +129 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.d.mts +9 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.mjs +150 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.d.mts +643 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.mjs +30 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.po.d.mts +392 -0
- package/dist/modules/user/infrastructure/user.po.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.po.mjs +34 -0
- package/dist/modules/user/infrastructure/user.po.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.pg.d.mts +24 -0
- package/dist/modules/user/infrastructure/user.repo.pg.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.pg.mjs +90 -0
- package/dist/modules/user/infrastructure/user.repo.pg.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts +24 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.mjs +88 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.mjs.map +1 -0
- package/dist/modules/user/interfaces/admin.route.d.mts +8270 -0
- package/dist/modules/user/interfaces/admin.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/admin.route.mjs +74 -0
- package/dist/modules/user/interfaces/admin.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/role.route.d.mts +102 -0
- package/dist/modules/user/interfaces/role.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/role.route.mjs +60 -0
- package/dist/modules/user/interfaces/role.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.dto.d.mts +106 -0
- package/dist/modules/user/interfaces/user.dto.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.dto.mjs +32 -0
- package/dist/modules/user/interfaces/user.dto.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.route.d.mts +2093 -0
- package/dist/modules/user/interfaces/user.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.route.mjs +69 -0
- package/dist/modules/user/interfaces/user.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.vo.d.mts +28 -0
- package/dist/modules/user/interfaces/user.vo.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.vo.mjs +18 -0
- package/dist/modules/user/interfaces/user.vo.mjs.map +1 -0
- package/dist/rank.service-D2h-2iJA.mjs +109 -0
- package/dist/rank.service-D2h-2iJA.mjs.map +1 -0
- package/dist/settings.d.mts +12 -0
- package/dist/settings.d.mts.map +1 -0
- package/dist/settings.mjs +27 -0
- package/dist/settings.mjs.map +1 -0
- package/dist/shared/create-app.d.mts +13 -0
- package/dist/shared/create-app.d.mts.map +1 -0
- package/dist/shared/create-app.mjs +45 -0
- package/dist/shared/create-app.mjs.map +1 -0
- package/dist/shared/db/bootstrap.d.mts +5 -0
- package/dist/shared/db/bootstrap.d.mts.map +1 -0
- package/dist/shared/db/bootstrap.mjs +51 -0
- package/dist/shared/db/bootstrap.mjs.map +1 -0
- package/dist/shared/db/connection.d.mts +1567 -0
- package/dist/shared/db/connection.d.mts.map +1 -0
- package/dist/shared/db/connection.mjs +59 -0
- package/dist/shared/db/connection.mjs.map +1 -0
- package/dist/shared/db/migrations/pg/0000_init.sql +74 -0
- package/dist/shared/db/migrations/pg/0001_snippets & tokens.sql +6 -0
- package/dist/shared/db/migrations/pg/0002_change_task_id_to_uuid_v7.sql +3 -0
- package/dist/shared/db/migrations/pg/meta/0000_snapshot.json +498 -0
- package/dist/shared/db/migrations/pg/meta/0001_snapshot.json +513 -0
- package/dist/shared/db/migrations/pg/meta/0002_snapshot.json +514 -0
- package/dist/shared/db/migrations/pg/meta/_journal.json +27 -0
- package/dist/shared/db/migrations/sqlite/0000_init.sql +72 -0
- package/dist/shared/db/migrations/sqlite/0001_snippets & tokens.sql +2 -0
- package/dist/shared/db/migrations/sqlite/0002_change_task_id_to_uuid_v7.sql +35 -0
- package/dist/shared/db/migrations/sqlite/meta/0000_snapshot.json +493 -0
- package/dist/shared/db/migrations/sqlite/meta/0001_snapshot.json +509 -0
- package/dist/shared/db/migrations/sqlite/meta/0002_snapshot.json +509 -0
- package/dist/shared/db/migrations/sqlite/meta/_journal.json +27 -0
- package/dist/shared/db/seed.d.mts +5 -0
- package/dist/shared/db/seed.d.mts.map +1 -0
- package/dist/shared/db/seed.mjs +42 -0
- package/dist/shared/db/seed.mjs.map +1 -0
- package/dist/shared/deps.d.mts +28 -0
- package/dist/shared/deps.d.mts.map +1 -0
- package/dist/shared/deps.mjs +69 -0
- package/dist/shared/deps.mjs.map +1 -0
- package/dist/shared/dto/index.d.mts +11 -0
- package/dist/shared/dto/index.d.mts.map +1 -0
- package/dist/shared/dto/index.mjs +11 -0
- package/dist/shared/dto/index.mjs.map +1 -0
- package/dist/shared/logger.d.mts +14 -0
- package/dist/shared/logger.d.mts.map +1 -0
- package/dist/shared/logger.mjs +37 -0
- package/dist/shared/logger.mjs.map +1 -0
- package/dist/shared/mcp/createTool.d.mts +15 -0
- package/dist/shared/mcp/createTool.d.mts.map +1 -0
- package/dist/shared/mcp/createTool.mjs +8 -0
- package/dist/shared/mcp/createTool.mjs.map +1 -0
- package/dist/shared/middleware/authorization.d.mts +15 -0
- package/dist/shared/middleware/authorization.d.mts.map +1 -0
- package/dist/shared/middleware/authorization.mjs +46 -0
- package/dist/shared/middleware/authorization.mjs.map +1 -0
- package/dist/shared/middleware/http-logger.d.mts +7 -0
- package/dist/shared/middleware/http-logger.d.mts.map +1 -0
- package/dist/shared/middleware/http-logger.mjs +40 -0
- package/dist/shared/middleware/http-logger.mjs.map +1 -0
- package/dist/shared/middleware/jwt.d.mts +7 -0
- package/dist/shared/middleware/jwt.d.mts.map +1 -0
- package/dist/shared/middleware/jwt.mjs +34 -0
- package/dist/shared/middleware/jwt.mjs.map +1 -0
- package/dist/shared/middleware/limiter.d.mts +7 -0
- package/dist/shared/middleware/limiter.d.mts.map +1 -0
- package/dist/shared/middleware/limiter.mjs +10 -0
- package/dist/shared/middleware/limiter.mjs.map +1 -0
- package/dist/shared/middleware/services.d.mts +8 -0
- package/dist/shared/middleware/services.d.mts.map +1 -0
- package/dist/shared/middleware/services.mjs +19 -0
- package/dist/shared/middleware/services.mjs.map +1 -0
- package/dist/shared/redis/decorator.d.mts +113 -0
- package/dist/shared/redis/decorator.d.mts.map +1 -0
- package/dist/shared/redis/decorator.mjs +203 -0
- package/dist/shared/redis/decorator.mjs.map +1 -0
- package/dist/shared/redis/factory.d.mts +18 -0
- package/dist/shared/redis/factory.d.mts.map +1 -0
- package/dist/shared/redis/factory.mjs +41 -0
- package/dist/shared/redis/factory.mjs.map +1 -0
- package/dist/shared/redis/index.d.mts +12 -0
- package/dist/shared/redis/index.d.mts.map +1 -0
- package/dist/shared/redis/index.mjs +14 -0
- package/dist/shared/redis/index.mjs.map +1 -0
- package/dist/shared/types.d.mts +36 -0
- package/dist/shared/types.d.mts.map +1 -0
- package/dist/shared/types.mjs +1 -0
- package/dist/shared/utils/date.d.mts +1 -0
- package/dist/shared/utils/date.mjs +1 -0
- package/dist/shared/utils/error-handler.d.mts +7 -0
- package/dist/shared/utils/error-handler.d.mts.map +1 -0
- package/dist/shared/utils/error-handler.mjs +22 -0
- package/dist/shared/utils/error-handler.mjs.map +1 -0
- package/dist/shared/utils/format.d.mts +8 -0
- package/dist/shared/utils/format.d.mts.map +1 -0
- package/dist/shared/utils/format.mjs +24 -0
- package/dist/shared/utils/format.mjs.map +1 -0
- package/dist/shared/utils/pagination.d.mts +9 -0
- package/dist/shared/utils/pagination.d.mts.map +1 -0
- package/dist/shared/utils/pagination.mjs +12 -0
- package/dist/shared/utils/pagination.mjs.map +1 -0
- package/dist/shared/utils/response-template.d.mts +69 -0
- package/dist/shared/utils/response-template.d.mts.map +1 -0
- package/dist/shared/utils/response-template.mjs +96 -0
- package/dist/shared/utils/response-template.mjs.map +1 -0
- package/dist/shared/utils/url.d.mts +18 -0
- package/dist/shared/utils/url.d.mts.map +1 -0
- package/dist/shared/utils/url.mjs +39 -0
- package/dist/shared/utils/url.mjs.map +1 -0
- package/dist/shared/utils/user.d.mts +8 -0
- package/dist/shared/utils/user.d.mts.map +1 -0
- package/dist/shared/utils/user.mjs +11 -0
- package/dist/shared/utils/user.mjs.map +1 -0
- package/dist/shared/utils/validator.d.mts +5984 -0
- package/dist/shared/utils/validator.d.mts.map +1 -0
- package/dist/shared/utils/validator.mjs +34 -0
- package/dist/shared/utils/validator.mjs.map +1 -0
- package/dist/shared/vo/index.d.mts +11 -0
- package/dist/shared/vo/index.d.mts.map +1 -0
- package/dist/shared/vo/index.mjs +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps.mjs","names":[],"sources":["../../src/shared/deps.ts"],"sourcesContent":["import type { IDocRepository } from '@/modules/doc/doc.repo.interface'\nimport type { ITaskRepository } from '@/modules/task/task.repo.interface'\nimport type { IUserRepository } from '@/modules/user/domain/user.repo.interface'\n\nimport { ChatService } from '@/modules/doc/chat.service'\nimport { DocService } from '@/modules/doc/doc.service'\nimport { PgDocRepository } from '@/modules/doc/infrastructure/doc.repo.pg'\nimport { SqliteDocRepository } from '@/modules/doc/infrastructure/doc.repo.sqlite'\nimport { RankService } from '@/modules/rank/rank.service'\nimport { PgTaskRepository } from '@/modules/task/infrastructure/task.repo.pg'\nimport { SqliteTaskRepository } from '@/modules/task/infrastructure/task.repo.sqlite'\nimport { TaskService } from '@/modules/task/task.service'\nimport { userPg, userSqlite } from '@/modules/user/infrastructure/user.po'\nimport { PgUserRepository } from '@/modules/user/infrastructure/user.repo.pg'\nimport { SqliteUserRepository } from '@/modules/user/infrastructure/user.repo.sqlite'\nimport { getDbProvider, getPgDb, getSqliteDb } from '@/shared/db/connection'\n\nexport type DatabaseProvider = 'postgresql' | 'sqlite'\n\nexport interface RepoDeps {\n provider: DatabaseProvider\n userRepo: IUserRepository\n docRepo: IDocRepository\n taskRepo: ITaskRepository\n ping: () => Promise<boolean>\n}\n\nexport interface ServiceDeps {\n taskService: TaskService\n rankService: RankService\n chatService: ChatService\n docService: DocService\n}\n\nlet repoDeps: RepoDeps | null = null\n\nlet serviceDeps: ServiceDeps | null = null\n\nexport function getRepoDeps(): RepoDeps {\n if (repoDeps)\n return repoDeps\n\n const provider = getDbProvider()\n\n if (provider === 'postgresql') {\n const db = getPgDb()\n const userRepo = new PgUserRepository(db)\n const docRepo = new PgDocRepository(db)\n const taskRepo = new PgTaskRepository(db)\n\n repoDeps = {\n provider,\n userRepo,\n docRepo,\n taskRepo,\n async ping() {\n try {\n await db.select().from(userPg).limit(1)\n return true\n }\n catch {\n return false\n }\n },\n }\n\n return repoDeps\n }\n\n const db = getSqliteDb()\n const userRepo = new SqliteUserRepository(db)\n const docRepo = new SqliteDocRepository(db)\n const taskRepo = new SqliteTaskRepository(db)\n\n repoDeps = {\n provider,\n userRepo,\n docRepo,\n taskRepo,\n async ping() {\n try {\n await db.select().from(userSqlite).limit(1)\n return true\n }\n catch {\n return false\n }\n },\n }\n\n return repoDeps\n}\n\nexport function getServiceDeps() {\n if (serviceDeps)\n return serviceDeps\n\n const docRepo = getRepoDeps().docRepo\n\n serviceDeps = {\n taskService: new TaskService(),\n rankService: new RankService(docRepo),\n chatService: new ChatService(),\n docService: new DocService(),\n }\n\n return serviceDeps\n}\n"],"mappings":";;;;;;;;;;;;;;AAkCA,IAAI,WAA4B;AAEhC,IAAI,cAAkC;AAEtC,SAAgB,cAAwB;AACtC,KAAI,SACF,QAAO;CAET,MAAM,WAAW,eAAe;AAEhC,KAAI,aAAa,cAAc;EAC7B,MAAM,KAAK,SAAS;AAKpB,aAAW;GACT;GACA,UANe,IAAI,iBAAiB,GAAG;GAOvC,SANc,IAAI,gBAAgB,GAAG;GAOrC,UANe,IAAI,iBAAiB,GAAG;GAOvC,MAAM,OAAO;AACX,QAAI;AACF,WAAM,GAAG,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE;AACvC,YAAO;YAEH;AACJ,YAAO;;;GAGZ;AAED,SAAO;;CAGT,MAAM,KAAK,aAAa;AAKxB,YAAW;EACT;EACA,UANe,IAAI,qBAAqB,GAAG;EAO3C,SANc,IAAI,oBAAoB,GAAG;EAOzC,UANe,IAAI,qBAAqB,GAAG;EAO3C,MAAM,OAAO;AACX,OAAI;AACF,UAAM,GAAG,QAAQ,CAAC,KAAK,WAAW,CAAC,MAAM,EAAE;AAC3C,WAAO;WAEH;AACJ,WAAO;;;EAGZ;AAED,QAAO;;AAGT,SAAgB,iBAAiB;AAC/B,KAAI,YACF,QAAO;CAET,MAAM,UAAU,aAAa,CAAC;AAE9B,eAAc;EACZ,aAAa,IAAI,aAAa;EAC9B,aAAa,IAAI,YAAY,QAAQ;EACrC,aAAa,IAAI,aAAa;EAC9B,YAAY,IAAI,YAAY;EAC7B;AAED,QAAO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z as z$1 } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/dto/index.d.ts
|
|
4
|
+
declare const paginationQuerySchema: z$1.ZodObject<{
|
|
5
|
+
page: z$1.ZodDefault<z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>>;
|
|
6
|
+
pageSize: z$1.ZodDefault<z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>>;
|
|
7
|
+
}, z$1.core.$strip>;
|
|
8
|
+
type PaginationQueryDTO = z$1.infer<typeof paginationQuerySchema>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { PaginationQueryDTO, paginationQuerySchema };
|
|
11
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/shared/dto/index.ts"],"mappings":";;;cAEa,qBAAA,EAAqB,GAAA,CAAA,SAAA;;;;KAKtB,kBAAA,GAAqB,GAAA,CAAE,KAAA,QAAa,qBAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z as z$1 } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/dto/index.ts
|
|
4
|
+
const paginationQuerySchema = z$1.object({
|
|
5
|
+
page: z$1.coerce.number().int().min(1).optional().default(1),
|
|
6
|
+
pageSize: z$1.coerce.number().int().min(1).max(100).optional().default(10)
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { paginationQuerySchema };
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["z"],"sources":["../../../src/shared/dto/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const paginationQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional().default(1),\n pageSize: z.coerce.number().int().min(1).max(100).optional().default(10),\n})\n\nexport type PaginationQueryDTO = z.infer<typeof paginationQuerySchema>\n"],"mappings":";;;AAEA,MAAa,wBAAwBA,IAAE,OAAO;CAC5C,MAAMA,IAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;CAC1D,UAAUA,IAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG;CACzE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import pino from "pino";
|
|
3
|
+
|
|
4
|
+
//#region src/shared/logger.d.ts
|
|
5
|
+
interface TraceContext {
|
|
6
|
+
traceId: string;
|
|
7
|
+
taskId?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const traceStorage: AsyncLocalStorage<TraceContext>;
|
|
10
|
+
declare const logger: pino.Logger<never, boolean>;
|
|
11
|
+
declare function runInContext<T>(traceId: string, fn: () => T, taskId?: string): T;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { logger, runInContext, traceStorage };
|
|
14
|
+
//# sourceMappingURL=logger.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/shared/logger.ts"],"mappings":";;;;UAMU,YAAA;EACR,OAAA;EACA,MAAA;AAAA;AAAA,cAGW,YAAA,EAAY,iBAAA,CAAA,YAAA;AAAA,cAaZ,MAAA,EAAM,IAAA,CAAA,MAAA;AAAA,iBAeH,YAAA,GAAA,CAAgB,OAAA,UAAiB,EAAA,QAAU,CAAA,EAAG,MAAA,YAAkB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import AppSettings from "../settings.mjs";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import pino from "pino";
|
|
4
|
+
|
|
5
|
+
//#region src/shared/logger.ts
|
|
6
|
+
const { config } = AppSettings;
|
|
7
|
+
const traceStorage = new AsyncLocalStorage();
|
|
8
|
+
const transport = config.log.pretty && config.is_dev ? pino.transport({
|
|
9
|
+
target: "pino-pretty",
|
|
10
|
+
options: {
|
|
11
|
+
colorize: true,
|
|
12
|
+
translateTime: "SYS:standard",
|
|
13
|
+
singleLine: false
|
|
14
|
+
}
|
|
15
|
+
}) : void 0;
|
|
16
|
+
const logger = pino({
|
|
17
|
+
level: config.log.level,
|
|
18
|
+
enabled: config.log.enabled,
|
|
19
|
+
redact: config.log.redact,
|
|
20
|
+
mixin() {
|
|
21
|
+
const store = traceStorage.getStore();
|
|
22
|
+
if (!store) return {};
|
|
23
|
+
const base = {};
|
|
24
|
+
if (store.traceId) base.traceId = store.traceId;
|
|
25
|
+
return base;
|
|
26
|
+
}
|
|
27
|
+
}, transport);
|
|
28
|
+
function runInContext(traceId, fn, taskId) {
|
|
29
|
+
return traceStorage.run({
|
|
30
|
+
traceId,
|
|
31
|
+
taskId
|
|
32
|
+
}, fn);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { logger, runInContext, traceStorage };
|
|
37
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.mjs","names":[],"sources":["../../src/shared/logger.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport pino from 'pino'\nimport AppSettings from '@/settings'\n\nconst { config } = AppSettings\n\ninterface TraceContext {\n traceId: string\n taskId?: string\n}\n\nexport const traceStorage = new AsyncLocalStorage<TraceContext>()\n\nconst transport = config.log.pretty && config.is_dev\n ? pino.transport({\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n },\n })\n : undefined\n\nexport const logger = pino({\n level: config.log.level,\n enabled: config.log.enabled,\n redact: config.log.redact,\n mixin() {\n const store = traceStorage.getStore()\n if (!store)\n return {}\n const base: Record<string, string> = {}\n if (store.traceId)\n base.traceId = store.traceId\n return base\n },\n}, transport)\n\nexport function runInContext<T>(traceId: string, fn: () => T, taskId?: string): T {\n return traceStorage.run({ traceId, taskId }, fn)\n}\n"],"mappings":";;;;;AAIA,MAAM,EAAE,WAAW;AAOnB,MAAa,eAAe,IAAI,mBAAiC;AAEjE,MAAM,YAAY,OAAO,IAAI,UAAU,OAAO,SAC1C,KAAK,UAAU;CACb,QAAQ;CACR,SAAS;EACP,UAAU;EACV,eAAe;EACf,YAAY;EACb;CACF,CAAC,GACF;AAEJ,MAAa,SAAS,KAAK;CACzB,OAAO,OAAO,IAAI;CAClB,SAAS,OAAO,IAAI;CACpB,QAAQ,OAAO,IAAI;CACnB,QAAQ;EACN,MAAM,QAAQ,aAAa,UAAU;AACrC,MAAI,CAAC,MACH,QAAO,EAAE;EACX,MAAM,OAA+B,EAAE;AACvC,MAAI,MAAM,QACR,MAAK,UAAU,MAAM;AACvB,SAAO;;CAEV,EAAE,UAAU;AAEb,SAAgB,aAAgB,SAAiB,IAAa,QAAoB;AAChF,QAAO,aAAa,IAAI;EAAE;EAAS;EAAQ,EAAE,GAAG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ZodTypeAny, infer as __Infer } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/mcp/createTool.d.ts
|
|
4
|
+
interface ToolDefinition<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodTypeAny | undefined = undefined> {
|
|
5
|
+
name: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
description: string;
|
|
8
|
+
schema: TInputSchema;
|
|
9
|
+
outputSchema?: TOutputSchema;
|
|
10
|
+
handler: (input: __Infer<TInputSchema>) => Promise<unknown> | unknown;
|
|
11
|
+
}
|
|
12
|
+
declare function createTool<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodTypeAny | undefined = undefined>(tool: ToolDefinition<TInputSchema, TOutputSchema>): ToolDefinition<TInputSchema, TOutputSchema>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { ToolDefinition, createTool };
|
|
15
|
+
//# sourceMappingURL=createTool.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTool.d.mts","names":[],"sources":["../../../src/shared/mcp/createTool.ts"],"mappings":";;;UAEiB,cAAA,sBACM,UAAA,wBACC,UAAA;EAEtB,IAAA;EACA,KAAA;EACA,WAAA;EACA,MAAA,EAAQ,YAAA;EACR,YAAA,GAAe,aAAA;EACf,OAAA,GAAU,KAAA,EAAO,OAAA,CAAS,YAAA,MAAkB,OAAA;AAAA;AAAA,iBAG9B,UAAA,sBACO,UAAA,wBACC,UAAA,yBAAA,CACtB,IAAA,EAAM,cAAA,CAAe,YAAA,EAAc,aAAA,IAAc,cAAA,CAAA,YAAA,EAAA,aAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTool.mjs","names":[],"sources":["../../../src/shared/mcp/createTool.ts"],"sourcesContent":["import type { infer as ZodInfer, ZodTypeAny } from 'zod'\n\nexport interface ToolDefinition<\n TInputSchema extends ZodTypeAny,\n TOutputSchema extends ZodTypeAny | undefined = undefined,\n> {\n name: string\n title?: string\n description: string\n schema: TInputSchema\n outputSchema?: TOutputSchema\n handler: (input: ZodInfer<TInputSchema>) => Promise<unknown> | unknown\n}\n\nexport function createTool<\n TInputSchema extends ZodTypeAny,\n TOutputSchema extends ZodTypeAny | undefined = undefined,\n>(tool: ToolDefinition<TInputSchema, TOutputSchema>) {\n return tool\n}\n"],"mappings":";AAcA,SAAgB,WAGd,MAAmD;AACnD,QAAO"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as hono from "hono";
|
|
2
|
+
import { Context, Next } from "hono";
|
|
3
|
+
|
|
4
|
+
//#region src/shared/middleware/authorization.d.ts
|
|
5
|
+
declare function authorization(config?: {
|
|
6
|
+
safeMethods?: string[];
|
|
7
|
+
safePaths?: string[];
|
|
8
|
+
}): (c: Context, next: Next) => Promise<void | (Response & hono.TypedResponse<{
|
|
9
|
+
message: string;
|
|
10
|
+
}, 403, "json">) | (Response & hono.TypedResponse<{
|
|
11
|
+
message: string;
|
|
12
|
+
}, 401, "json">)>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { authorization };
|
|
15
|
+
//# sourceMappingURL=authorization.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.d.mts","names":[],"sources":["../../../src/shared/middleware/authorization.ts"],"mappings":";;;;iBAQgB,aAAA,CAAc,MAAA;EAC5B,WAAA;EACA,SAAA;AAAA,KAMc,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,IAAA,KAAI,OAAA,SAAA,QAAA,GAAA,IAAA,CAAA,aAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { logger } from "../logger.mjs";
|
|
2
|
+
import { getEnforcer } from "../../modules/user/infrastructure/casbin/enforcer.mjs";
|
|
3
|
+
import { getCookie } from "hono/cookie";
|
|
4
|
+
|
|
5
|
+
//#region src/shared/middleware/authorization.ts
|
|
6
|
+
const SAFE_METHODS = [
|
|
7
|
+
"GET",
|
|
8
|
+
"HEAD",
|
|
9
|
+
"OPTIONS"
|
|
10
|
+
];
|
|
11
|
+
const SAFE_PATHS = [
|
|
12
|
+
"/api/users/login",
|
|
13
|
+
"/api/chat",
|
|
14
|
+
"/api/ranking/docs",
|
|
15
|
+
"/mcp"
|
|
16
|
+
];
|
|
17
|
+
function authorization(config) {
|
|
18
|
+
const { safeMethods = SAFE_METHODS, safePaths = SAFE_PATHS } = config || {};
|
|
19
|
+
return async (c, next) => {
|
|
20
|
+
if (c.req.method === "OPTIONS") return next();
|
|
21
|
+
const user = c.get("user");
|
|
22
|
+
const hasRole = typeof user?.role === "string" && user.role.length > 0;
|
|
23
|
+
if (!safeMethods.includes(c.req.method) && !safePaths.includes(c.req.path)) {
|
|
24
|
+
const csrfCookie = getCookie(c, "csrf_token");
|
|
25
|
+
const csrfHeader = c.req.header("X-CSRF-Token");
|
|
26
|
+
if (!csrfCookie || !csrfHeader || csrfCookie !== csrfHeader) {
|
|
27
|
+
logger.warn(`CSRF Token Mismatch, cookie csrf_token: ${csrfCookie}, header X-CSRF-Token: ${csrfHeader}`);
|
|
28
|
+
return c.json({ message: "CSRF Token Mismatch" }, 403);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const enforcer = getEnforcer();
|
|
32
|
+
const role = hasRole ? user.role : "guest";
|
|
33
|
+
const obj = c.req.path;
|
|
34
|
+
const act = c.req.method;
|
|
35
|
+
logger.info(`Authorization, role: ${role}, obj: ${obj}, act: ${act}`);
|
|
36
|
+
if (!await enforcer.enforce(role, obj, act)) {
|
|
37
|
+
if (hasRole) return c.json({ message: "无权限" }, 403);
|
|
38
|
+
return c.json({ message: "未登录或登录状态异常" }, 401);
|
|
39
|
+
}
|
|
40
|
+
return next();
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
export { authorization };
|
|
46
|
+
//# sourceMappingURL=authorization.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.mjs","names":[],"sources":["../../../src/shared/middleware/authorization.ts"],"sourcesContent":["import type { Context, Next } from 'hono'\nimport { getCookie } from 'hono/cookie'\nimport { getEnforcer } from '@/modules/user/infrastructure/casbin/enforcer'\nimport { logger } from '@/shared/logger'\n\nconst SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']\nconst SAFE_PATHS = ['/api/users/login', '/api/chat', '/api/ranking/docs', '/mcp']\n\nexport function authorization(config?: {\n safeMethods?: string[]\n safePaths?: string[]\n}) {\n const {\n safeMethods = SAFE_METHODS,\n safePaths = SAFE_PATHS,\n } = config || {}\n return async (c: Context, next: Next) => {\n if (c.req.method === 'OPTIONS')\n return next()\n const user = c.get('user') as { id: number, username: string, role: string | null } | undefined\n const hasRole = typeof user?.role === 'string' && user.role.length > 0\n // TODO: 进一步考虑guest 身份 和 资源权限\n if (!safeMethods.includes(c.req.method) && !safePaths.includes(c.req.path)) {\n const csrfCookie = getCookie(c, 'csrf_token')\n const csrfHeader = c.req.header('X-CSRF-Token')\n if (!csrfCookie || !csrfHeader || csrfCookie !== csrfHeader) {\n logger.warn(`CSRF Token Mismatch, cookie csrf_token: ${csrfCookie}, header X-CSRF-Token: ${csrfHeader}`)\n return c.json({ message: 'CSRF Token Mismatch' }, 403)\n }\n }\n\n const enforcer = getEnforcer()\n const role = hasRole ? user!.role : 'guest'\n const obj = c.req.path\n const act = c.req.method\n logger.info(`Authorization, role: ${role}, obj: ${obj}, act: ${act}`)\n\n const allowed = await enforcer.enforce(role, obj, act)\n if (!allowed) {\n if (hasRole) {\n return c.json({ message: '无权限' }, 403)\n }\n return c.json({ message: '未登录或登录状态异常' }, 401)\n }\n return next()\n }\n}\n"],"mappings":";;;;;AAKA,MAAM,eAAe;CAAC;CAAO;CAAQ;CAAU;AAC/C,MAAM,aAAa;CAAC;CAAoB;CAAa;CAAqB;CAAO;AAEjF,SAAgB,cAAc,QAG3B;CACD,MAAM,EACJ,cAAc,cACd,YAAY,eACV,UAAU,EAAE;AAChB,QAAO,OAAO,GAAY,SAAe;AACvC,MAAI,EAAE,IAAI,WAAW,UACnB,QAAO,MAAM;EACf,MAAM,OAAO,EAAE,IAAI,OAAO;EAC1B,MAAM,UAAU,OAAO,MAAM,SAAS,YAAY,KAAK,KAAK,SAAS;AAErE,MAAI,CAAC,YAAY,SAAS,EAAE,IAAI,OAAO,IAAI,CAAC,UAAU,SAAS,EAAE,IAAI,KAAK,EAAE;GAC1E,MAAM,aAAa,UAAU,GAAG,aAAa;GAC7C,MAAM,aAAa,EAAE,IAAI,OAAO,eAAe;AAC/C,OAAI,CAAC,cAAc,CAAC,cAAc,eAAe,YAAY;AAC3D,WAAO,KAAK,2CAA2C,WAAW,yBAAyB,aAAa;AACxG,WAAO,EAAE,KAAK,EAAE,SAAS,uBAAuB,EAAE,IAAI;;;EAI1D,MAAM,WAAW,aAAa;EAC9B,MAAM,OAAO,UAAU,KAAM,OAAO;EACpC,MAAM,MAAM,EAAE,IAAI;EAClB,MAAM,MAAM,EAAE,IAAI;AAClB,SAAO,KAAK,wBAAwB,KAAK,SAAS,IAAI,SAAS,MAAM;AAGrE,MAAI,CADY,MAAM,SAAS,QAAQ,MAAM,KAAK,IAAI,EACxC;AACZ,OAAI,QACF,QAAO,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,IAAI;AAExC,UAAO,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,IAAI;;AAE/C,SAAO,MAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-logger.d.mts","names":[],"sources":["../../../src/shared/middleware/http-logger.ts"],"mappings":";;;iBAOgB,UAAA,CAAA,GAAc,iBAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import AppSettings from "../../settings.mjs";
|
|
2
|
+
import { logger, runInContext } from "../logger.mjs";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
|
|
5
|
+
//#region src/shared/middleware/http-logger.ts
|
|
6
|
+
const { config } = AppSettings;
|
|
7
|
+
function httpLogger() {
|
|
8
|
+
return async (c, next) => {
|
|
9
|
+
const start = Date.now();
|
|
10
|
+
const requestId = c.get("requestId");
|
|
11
|
+
const traceId = typeof requestId === "string" && requestId.length > 0 ? requestId : randomUUID();
|
|
12
|
+
return runInContext(traceId, async () => {
|
|
13
|
+
const scoped = logger.child({});
|
|
14
|
+
c.set("logger", scoped);
|
|
15
|
+
c.set("traceId", traceId);
|
|
16
|
+
await next();
|
|
17
|
+
const url = c.req.path;
|
|
18
|
+
const method = c.req.method;
|
|
19
|
+
const status = c.res.status;
|
|
20
|
+
const duration = Date.now() - start;
|
|
21
|
+
if (!config.log.autoLoggingIgnorePaths.some((path) => url.startsWith(path))) {
|
|
22
|
+
const user = c.get("user");
|
|
23
|
+
scoped.info({
|
|
24
|
+
method,
|
|
25
|
+
url,
|
|
26
|
+
status,
|
|
27
|
+
duration,
|
|
28
|
+
user: {
|
|
29
|
+
name: user?.username,
|
|
30
|
+
role: user?.role || "guest"
|
|
31
|
+
}
|
|
32
|
+
}, "request completed");
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { httpLogger };
|
|
40
|
+
//# sourceMappingURL=http-logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-logger.mjs","names":[],"sources":["../../../src/shared/middleware/http-logger.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono'\nimport { randomUUID } from 'node:crypto'\nimport AppSettings from '@/settings'\nimport { logger, runInContext } from '@/shared/logger'\n\nconst { config } = AppSettings\n\nexport function httpLogger(): MiddlewareHandler {\n return async (c, next) => {\n const start = Date.now()\n const requestId = c.get('requestId')\n const traceId = typeof requestId === 'string' && requestId.length > 0 ? requestId : randomUUID()\n\n return runInContext(traceId, async () => {\n const scoped = logger.child({})\n c.set('logger', scoped)\n c.set('traceId', traceId)\n\n await next()\n\n const url = c.req.path\n const method = c.req.method\n const status = c.res.status\n const duration = Date.now() - start\n\n const ignore = config.log.autoLoggingIgnorePaths.some((path: string) => url.startsWith(path))\n if (!ignore) {\n const user = c.get('user')\n scoped.info({ method, url, status, duration, user: {\n name: user?.username,\n role: user?.role || 'guest',\n } }, 'request completed')\n }\n })\n }\n}\n"],"mappings":";;;;;AAKA,MAAM,EAAE,WAAW;AAEnB,SAAgB,aAAgC;AAC9C,QAAO,OAAO,GAAG,SAAS;EACxB,MAAM,QAAQ,KAAK,KAAK;EACxB,MAAM,YAAY,EAAE,IAAI,YAAY;EACpC,MAAM,UAAU,OAAO,cAAc,YAAY,UAAU,SAAS,IAAI,YAAY,YAAY;AAEhG,SAAO,aAAa,SAAS,YAAY;GACvC,MAAM,SAAS,OAAO,MAAM,EAAE,CAAC;AAC/B,KAAE,IAAI,UAAU,OAAO;AACvB,KAAE,IAAI,WAAW,QAAQ;AAEzB,SAAM,MAAM;GAEZ,MAAM,MAAM,EAAE,IAAI;GAClB,MAAM,SAAS,EAAE,IAAI;GACrB,MAAM,SAAS,EAAE,IAAI;GACrB,MAAM,WAAW,KAAK,KAAK,GAAG;AAG9B,OAAI,CADW,OAAO,IAAI,uBAAuB,MAAM,SAAiB,IAAI,WAAW,KAAK,CAAC,EAChF;IACX,MAAM,OAAO,EAAE,IAAI,OAAO;AAC1B,WAAO,KAAK;KAAE;KAAQ;KAAK;KAAQ;KAAU,MAAM;MACjD,MAAM,MAAM;MACZ,MAAM,MAAM,QAAQ;MACrB;KAAE,EAAE,oBAAoB;;IAE3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.mts","names":[],"sources":["../../../src/shared/middleware/jwt.ts"],"mappings":";;;iBAMgB,GAAA,CAAA,GAAO,iBAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import AppSettings from "../../settings.mjs";
|
|
2
|
+
import { logger } from "../logger.mjs";
|
|
3
|
+
import { getCookie } from "hono/cookie";
|
|
4
|
+
import { verify } from "hono/jwt";
|
|
5
|
+
|
|
6
|
+
//#region src/shared/middleware/jwt.ts
|
|
7
|
+
function jwt() {
|
|
8
|
+
return async (c, next) => {
|
|
9
|
+
const accessToken = getCookie(c, "access_token");
|
|
10
|
+
if (accessToken) try {
|
|
11
|
+
const payload = await verify(accessToken, AppSettings.config.jwt_secret, "HS256");
|
|
12
|
+
if (payload && typeof payload === "object") {
|
|
13
|
+
const sub = typeof payload.sub === "string" ? Number.parseInt(payload.sub, 10) : typeof payload.sub === "number" ? payload.sub : NaN;
|
|
14
|
+
const id = Number.isFinite(sub) ? sub : null;
|
|
15
|
+
const username = typeof payload.username === "string" ? payload.username : "";
|
|
16
|
+
const role = payload.role === "admin" || payload.role === "user" ? payload.role : null;
|
|
17
|
+
if (id) c.set("user", {
|
|
18
|
+
id,
|
|
19
|
+
username,
|
|
20
|
+
role
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
} catch (err) {
|
|
24
|
+
c.set("user", null);
|
|
25
|
+
logger.error("JWT verification failed:", err);
|
|
26
|
+
}
|
|
27
|
+
else c.set("user", null);
|
|
28
|
+
await next();
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { jwt };
|
|
34
|
+
//# sourceMappingURL=jwt.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.mjs","names":[],"sources":["../../../src/shared/middleware/jwt.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono'\nimport { getCookie } from 'hono/cookie'\nimport { verify } from 'hono/jwt'\nimport AppSettings from '@/settings'\nimport { logger } from '@/shared/logger'\n\nexport function jwt(): MiddlewareHandler {\n return async (c, next) => {\n const accessToken = getCookie(c, 'access_token')\n // console.log('JWT Middleware, access_token:', accessToken)\n if (accessToken) {\n try {\n const payload = await verify(accessToken, AppSettings.config.jwt_secret, 'HS256')\n if (payload && typeof payload === 'object') {\n const sub = typeof payload.sub === 'string'\n ? Number.parseInt(payload.sub, 10)\n : (typeof payload.sub === 'number' ? payload.sub : Number.NaN)\n const id = Number.isFinite(sub) ? sub : null\n const username = typeof (payload as any).username === 'string' ? (payload as any).username : ''\n const role = (payload as any).role === 'admin' || (payload as any).role === 'user' ? (payload as any).role : null\n if (id) {\n c.set('user', { id, username, role })\n }\n }\n }\n catch (err: any) {\n c.set('user', null)\n logger.error('JWT verification failed:', err)\n }\n }\n else {\n c.set('user', null)\n }\n\n await next()\n }\n}\n"],"mappings":";;;;;;AAMA,SAAgB,MAAyB;AACvC,QAAO,OAAO,GAAG,SAAS;EACxB,MAAM,cAAc,UAAU,GAAG,eAAe;AAEhD,MAAI,YACF,KAAI;GACF,MAAM,UAAU,MAAM,OAAO,aAAa,YAAY,OAAO,YAAY,QAAQ;AACjF,OAAI,WAAW,OAAO,YAAY,UAAU;IAC1C,MAAM,MAAM,OAAO,QAAQ,QAAQ,WAC/B,OAAO,SAAS,QAAQ,KAAK,GAAG,GAC/B,OAAO,QAAQ,QAAQ,WAAW,QAAQ,MAAM;IACrD,MAAM,KAAK,OAAO,SAAS,IAAI,GAAG,MAAM;IACxC,MAAM,WAAW,OAAQ,QAAgB,aAAa,WAAY,QAAgB,WAAW;IAC7F,MAAM,OAAQ,QAAgB,SAAS,WAAY,QAAgB,SAAS,SAAU,QAAgB,OAAO;AAC7G,QAAI,GACF,GAAE,IAAI,QAAQ;KAAE;KAAI;KAAU;KAAM,CAAC;;WAIpC,KAAU;AACf,KAAE,IAAI,QAAQ,KAAK;AACnB,UAAO,MAAM,4BAA4B,IAAI;;MAI/C,GAAE,IAAI,QAAQ,KAAK;AAGrB,QAAM,MAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limiter.d.mts","names":[],"sources":["../../../src/shared/middleware/limiter.ts"],"mappings":";;;iBAEgB,OAAA,CAAQ,MAAA,WAAiB,iBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limiter.mjs","names":[],"sources":["../../../src/shared/middleware/limiter.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono'\n\nexport function limiter(_limit: number): MiddlewareHandler {\n return async (_c, next) => {\n await next()\n }\n}\n"],"mappings":";AAEA,SAAgB,QAAQ,QAAmC;AACzD,QAAO,OAAO,IAAI,SAAS;AACzB,QAAM,MAAM"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AppBindings } from "../types.mjs";
|
|
2
|
+
import * as hono from "hono";
|
|
3
|
+
|
|
4
|
+
//#region src/shared/middleware/services.d.ts
|
|
5
|
+
declare function services(): hono.MiddlewareHandler<AppBindings, string, {}, Response>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { services };
|
|
8
|
+
//# sourceMappingURL=services.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.mts","names":[],"sources":["../../../src/shared/middleware/services.ts"],"mappings":";;;;iBAIgB,QAAA,CAAA,GAAQ,IAAA,CAAA,iBAAA,CAAA,WAAA,cAAA,QAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "../../rank.service-D2h-2iJA.mjs";
|
|
2
|
+
import { getServiceDeps } from "../deps.mjs";
|
|
3
|
+
import { createMiddleware } from "hono/factory";
|
|
4
|
+
|
|
5
|
+
//#region src/shared/middleware/services.ts
|
|
6
|
+
function services() {
|
|
7
|
+
return createMiddleware(async (c, next) => {
|
|
8
|
+
const serviceDeps = getServiceDeps();
|
|
9
|
+
c.set("taskService", serviceDeps.taskService);
|
|
10
|
+
c.set("rankService", serviceDeps.rankService);
|
|
11
|
+
c.set("chatService", serviceDeps.chatService);
|
|
12
|
+
c.set("docService", serviceDeps.docService);
|
|
13
|
+
await next();
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { services };
|
|
19
|
+
//# sourceMappingURL=services.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.mjs","names":[],"sources":["../../../src/shared/middleware/services.ts"],"sourcesContent":["import type { AppBindings } from '../types'\nimport { createMiddleware } from 'hono/factory'\nimport { getServiceDeps } from '@/shared/deps'\n\nexport function services() {\n return createMiddleware<AppBindings>(async (c, next) => {\n const serviceDeps = getServiceDeps()\n c.set('taskService', serviceDeps.taskService)\n c.set('rankService', serviceDeps.rankService)\n c.set('chatService', serviceDeps.chatService)\n c.set('docService', serviceDeps.docService)\n await next()\n })\n}\n"],"mappings":";;;;;AAIA,SAAgB,WAAW;AACzB,QAAO,iBAA8B,OAAO,GAAG,SAAS;EACtD,MAAM,cAAc,gBAAgB;AACpC,IAAE,IAAI,eAAe,YAAY,YAAY;AAC7C,IAAE,IAAI,eAAe,YAAY,YAAY;AAC7C,IAAE,IAAI,eAAe,YAAY,YAAY;AAC7C,IAAE,IAAI,cAAc,YAAY,WAAW;AAC3C,QAAM,MAAM;GACZ"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
//#region src/shared/redis/decorator.d.ts
|
|
2
|
+
interface CacheOptions {
|
|
3
|
+
/** 缓存 key,优先级高于 keyGenerator */
|
|
4
|
+
key?: string | ((...args: any[]) => string);
|
|
5
|
+
/** TTL 秒数,默认 3600 (1小时) */
|
|
6
|
+
ttl?: number;
|
|
7
|
+
/** 缓存标签,用于批量失效 */
|
|
8
|
+
tags?: (...args: any[]) => string[];
|
|
9
|
+
}
|
|
10
|
+
interface InvalidateOptions {
|
|
11
|
+
/** 要失效的缓存 key 列表 */
|
|
12
|
+
keys?: (...args: any[]) => string[];
|
|
13
|
+
/** 是否清除该 service 下所有缓存 */
|
|
14
|
+
all?: boolean;
|
|
15
|
+
/** 要失效的标签(推荐使用 tag 机制) */
|
|
16
|
+
tags?: (...args: any[]) => string[];
|
|
17
|
+
/** 目标命名空间,指定要失效哪些 namespace 下的缓存 */
|
|
18
|
+
namespace?: string | string[] | '*';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 标记为缓存服务
|
|
22
|
+
* - 为每个 service 创建 cache namespace
|
|
23
|
+
* - 提供统一 key 生成器
|
|
24
|
+
*
|
|
25
|
+
* @param namespace 自定义命名空间,默认使用类名
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* @CacheableService()
|
|
30
|
+
* class UserService {
|
|
31
|
+
* @Cache({ key: (id) => `user:${id}` })
|
|
32
|
+
* async getUser(id: number) { ... }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* @CacheableService('customNamespace')
|
|
39
|
+
* class CustomService { ... }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
declare function CacheableService(namespace?: string): <T extends new (...args: any[]) => any>(constructor: T) => T;
|
|
43
|
+
/**
|
|
44
|
+
* 缓存装饰器
|
|
45
|
+
* - 从 Redis 获取/存储缓存
|
|
46
|
+
* - 支持自定义 key 和 TTL
|
|
47
|
+
* - 支持标签机制
|
|
48
|
+
*
|
|
49
|
+
* @param options 配置选项
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // 基础用法
|
|
53
|
+
* @Cache()
|
|
54
|
+
* async getUser(id: number) { ... }
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* // 自定义 TTL
|
|
58
|
+
* @Cache({ ttl: 600 })
|
|
59
|
+
* async getData() { ... }
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* // 自定义 key 函数
|
|
63
|
+
* @Cache({ key: (id, name) => `user:${id}:${name}` })
|
|
64
|
+
* async getUser(id: number, name: string) { ... }
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // 使用标签(推荐)
|
|
68
|
+
* @Cache({ tags: (id) => [`user:${id}`] })
|
|
69
|
+
* async getUser(id: number) { ... }
|
|
70
|
+
*/
|
|
71
|
+
declare function Cache(options?: CacheOptions): (target: any, _key: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
72
|
+
/**
|
|
73
|
+
* 缓存失效装饰器
|
|
74
|
+
* - 支持指定 key 失效(仅当前 namespace)
|
|
75
|
+
* - 支持清除该 service 下所有缓存
|
|
76
|
+
* - 支持标签失效(推荐,支持跨 namespace)
|
|
77
|
+
*
|
|
78
|
+
* @param options 配置选项
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* // 指定 key 失效(仅当前 namespace)
|
|
82
|
+
* @Invalidate({ keys: (id) => [`getUser:${id}`] })
|
|
83
|
+
* async updateUser(id: number) { ... }
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* // 使用标签失效(推荐,仅当前 namespace)
|
|
87
|
+
* @Invalidate({ tags: (id) => [`user:${id}`] })
|
|
88
|
+
* async updateUser(id: number) { ... }
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* // 清除该 service 下所有缓存
|
|
92
|
+
* @Invalidate({ all: true })
|
|
93
|
+
* async clearAllCache() { ... }
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* // 跨 namespace 失效 - 使用标签失效指定 namespace 的缓存
|
|
97
|
+
* @Invalidate({ tags: (id) => ['task:123'], namespace: 'DocService' })
|
|
98
|
+
* async updateTask(id: number) { ... }
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* // 跨 namespace 失效 - 使用标签失效多个 namespace 的缓存
|
|
102
|
+
* @Invalidate({ tags: (id) => ['task:123'], namespace: ['DocService', 'RankService'] })
|
|
103
|
+
* async updateTask(id: number) { ... }
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* // 跨 namespace 失效 - 使用标签失效所有 namespace 的缓存
|
|
107
|
+
* @Invalidate({ tags: (id) => ['task:123'], namespace: '*' })
|
|
108
|
+
* async updateTask(id: number) { ... }
|
|
109
|
+
*/
|
|
110
|
+
declare function Invalidate(options?: InvalidateOptions): (target: any, _key: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
111
|
+
//#endregion
|
|
112
|
+
export { Cache, type CacheOptions, CacheableService, Invalidate, type InvalidateOptions };
|
|
113
|
+
//# sourceMappingURL=decorator.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.d.mts","names":[],"sources":["../../../src/shared/redis/decorator.ts"],"mappings":";UAIU,YAAA;EAAA;EAER,GAAA,iBAAoB,IAAA;;EAEpB,GAAA;EAFA;EAIA,IAAA,OAAW,IAAA;AAAA;AAAA,UAGH,iBAAA;EAHG;EAKX,IAAA,OAAW,IAAA;EALI;EAOf,GAAA;EAJyB;EAMzB,IAAA,OAAW,IAAA;EANc;EAQzB,SAAA;AAAA;;;;;;;AAAS;;;;;;;;;;;;AAiH6D;;;;iBAD/D,gBAAA,CAAiB,SAAA,+BACW,IAAA,iBAAqB,WAAA,EAAa,CAAA,KAAC,CAAA;;;;;;;;;;;;;AAwCI;;;;;;;;;;;;;;;;iBAHnE,KAAA,CAAM,OAAA,GAAS,YAAA,IAGL,MAAA,OAAa,IAAA,UAAc,UAAA,EAAY,kBAAA,KAAkB,kBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyFnE,UAAA,CAAW,OAAA,GAAS,iBAAA,IACV,MAAA,OAAa,IAAA,UAAc,UAAA,EAAY,kBAAA,KAAkB,kBAAA"}
|