alepha 0.13.7 → 0.14.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/README.md +5 -2
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/assets/swagger-ui/swagger-ui.css +1 -1
- package/dist/{api-audits → api/audits}/index.browser.js +4 -4
- package/dist/api/audits/index.browser.js.map +1 -0
- package/dist/{api-audits → api/audits}/index.d.ts +10 -9
- package/dist/api/audits/index.d.ts.map +1 -0
- package/dist/{api-audits → api/audits}/index.js +8 -8
- package/dist/api/audits/index.js.map +1 -0
- package/dist/{api-files → api/files}/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -0
- package/dist/{api-files → api/files}/index.d.ts +18 -10
- package/dist/api/files/index.d.ts.map +1 -0
- package/dist/{api-files → api/files}/index.js +10 -10
- package/dist/api/files/index.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.d.ts +168 -167
- package/dist/api/jobs/index.d.ts.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.js +9 -9
- package/dist/api/jobs/index.js.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
- package/dist/api/notifications/index.browser.js.map +1 -0
- package/dist/api/notifications/index.d.ts +327 -0
- package/dist/api/notifications/index.d.ts.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.js +11 -11
- package/dist/api/notifications/index.js.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.browser.js +2 -2
- package/dist/api/parameters/index.browser.js.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.d.ts +11 -11
- package/dist/api/parameters/index.d.ts.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.js +7 -7
- package/dist/api/parameters/index.js.map +1 -0
- package/dist/{api-users → api/users}/index.browser.js +6 -6
- package/dist/api/users/index.browser.js.map +1 -0
- package/dist/{api-users → api/users}/index.d.ts +836 -836
- package/dist/api/users/index.d.ts.map +1 -0
- package/dist/{api-users → api/users}/index.js +99 -766
- package/dist/api/users/index.js.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
- package/dist/api/verifications/index.browser.js.map +1 -0
- package/dist/api/verifications/index.d.ts +248 -0
- package/dist/api/verifications/index.d.ts.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.js +11 -11
- package/dist/api/verifications/index.js.map +1 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/bucket/index.d.ts.map +1 -0
- package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
- package/dist/cache/core/index.d.ts.map +1 -0
- package/dist/cache/{index.js → core/index.js} +5 -5
- package/dist/cache/core/index.js.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
- package/dist/cache/redis/index.d.ts.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -0
- package/dist/cli/index.d.ts +78 -58
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +454 -154
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +15 -5
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +45 -6
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +1334 -1318
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +75 -71
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +1337 -1321
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +1337 -1321
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts.map +1 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/fake/index.d.ts.map +1 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
- package/dist/lock/core/index.d.ts.map +1 -0
- package/dist/lock/{index.js → core/index.js} +5 -5
- package/dist/lock/core/index.js.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
- package/dist/lock/redis/index.d.ts.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.js +2 -2
- package/dist/lock/redis/index.js.map +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +820 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +978 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/orm/index.d.ts +180 -107
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +260 -174
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +548 -0
- package/dist/queue/core/index.d.ts.map +1 -0
- package/dist/queue/core/index.js +391 -0
- package/dist/queue/core/index.js.map +1 -0
- package/dist/queue/redis/index.d.ts +28 -0
- package/dist/queue/redis/index.d.ts.map +1 -0
- package/dist/queue/redis/index.js +43 -0
- package/dist/queue/redis/index.js.map +1 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +1 -393
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +2 -1413
- package/dist/security/index.js.map +1 -1
- package/dist/{server-auth → server/auth}/index.browser.js +6 -6
- package/dist/server/auth/index.browser.js.map +1 -0
- package/dist/{server-auth → server/auth}/index.d.ts +167 -167
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +742 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/{server-cache → server/cache}/index.d.ts +2 -2
- package/dist/server/cache/index.d.ts.map +1 -0
- package/dist/{server-cache → server/cache}/index.js +2 -2
- package/dist/server/cache/index.js.map +1 -0
- package/dist/{server-compress → server/compress}/index.d.ts +2 -2
- package/dist/server/compress/index.d.ts.map +1 -0
- package/dist/{server-compress → server/compress}/index.js +2 -2
- package/dist/server/compress/index.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
- package/dist/server/cookies/index.browser.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
- package/dist/server/cookies/index.d.ts.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.js +4 -4
- package/dist/server/cookies/index.js.map +1 -0
- package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
- package/dist/server/core/index.browser.js.map +1 -0
- package/dist/server/{index.d.ts → core/index.d.ts} +36 -36
- package/dist/server/core/index.d.ts.map +1 -0
- package/dist/server/{index.js → core/index.js} +27 -27
- package/dist/server/core/index.js.map +1 -0
- package/dist/{server-cors → server/cors}/index.d.ts +3 -3
- package/dist/server/cors/index.d.ts.map +1 -0
- package/dist/{server-cors → server/cors}/index.js +3 -3
- package/dist/server/cors/index.js.map +1 -0
- package/dist/{server-health → server/health}/index.d.ts +3 -3
- package/dist/server/health/index.d.ts.map +1 -0
- package/dist/{server-health → server/health}/index.js +3 -3
- package/dist/server/health/index.js.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
- package/dist/server/helmet/index.d.ts.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.js +2 -2
- package/dist/server/helmet/index.js.map +1 -0
- package/dist/{server-links → server/links}/index.browser.js +5 -5
- package/dist/server/links/index.browser.js.map +1 -0
- package/dist/{server-links → server/links}/index.d.ts +40 -40
- package/dist/server/links/index.d.ts.map +1 -0
- package/dist/{server-links → server/links}/index.js +7 -7
- package/dist/server/links/index.js.map +1 -0
- package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
- package/dist/server/metrics/index.d.ts.map +1 -0
- package/dist/server/metrics/index.js +74 -0
- package/dist/server/metrics/index.js.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
- package/dist/server/multipart/index.d.ts.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.js +2 -2
- package/dist/server/multipart/index.js.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
- package/dist/server/proxy/index.d.ts.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.js +3 -3
- package/dist/server/proxy/index.js.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
- package/dist/server/rate-limit/index.d.ts.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/{server-security → server/security}/index.browser.js +1 -1
- package/dist/server/security/index.browser.js.map +1 -0
- package/dist/{server-security → server/security}/index.d.ts +4 -4
- package/dist/server/security/index.d.ts.map +1 -0
- package/dist/{server-security → server/security}/index.js +4 -4
- package/dist/server/security/index.js.map +1 -0
- package/dist/{server-static → server/static}/index.d.ts +3 -3
- package/dist/server/static/index.d.ts.map +1 -0
- package/dist/{server-static → server/static}/index.js +3 -3
- package/dist/server/static/index.js.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
- package/dist/server/swagger/index.d.ts.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.js +4 -4
- package/dist/server/swagger/index.js.map +1 -0
- package/dist/sms/index.d.ts.map +1 -0
- package/dist/thread/index.d.ts.map +1 -0
- package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
- package/dist/topic/core/index.d.ts.map +1 -0
- package/dist/topic/{index.js → core/index.js} +6 -6
- package/dist/topic/core/index.js.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
- package/dist/topic/redis/index.d.ts.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -0
- package/dist/vite/index.d.ts +21 -2
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +48 -19
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts.map +1 -0
- package/package.json +162 -158
- package/src/{api-files → api/files}/index.ts +1 -0
- package/src/{api-parameters → api/parameters}/index.ts +1 -1
- package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
- package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
- package/src/{api-verifications → api/verifications}/index.ts +2 -0
- package/src/cli/apps/AlephaCli.ts +2 -0
- package/src/cli/apps/AlephaPackageBuilderCli.ts +83 -54
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/assets/biomeJson.ts +1 -1
- package/src/cli/assets/indexHtml.ts +1 -1
- package/src/cli/assets/mainBrowserTs.ts +1 -1
- package/src/cli/assets/mainTs.ts +9 -10
- package/src/cli/assets/viteConfigTs.ts +1 -1
- package/src/cli/commands/ChangelogCommands.ts +389 -0
- package/src/cli/commands/CoreCommands.ts +10 -6
- package/src/cli/commands/DrizzleCommands.ts +204 -4
- package/src/cli/commands/VerifyCommands.ts +4 -1
- package/src/cli/commands/ViteCommands.ts +46 -25
- package/src/cli/services/AlephaCliUtils.ts +52 -164
- package/src/command/providers/CliProvider.ts +76 -5
- package/src/core/providers/SchemaValidator.ts +24 -2
- package/src/mcp/errors/McpError.ts +72 -0
- package/src/mcp/helpers/jsonrpc.ts +163 -0
- package/src/mcp/index.ts +132 -0
- package/src/mcp/interfaces/McpTypes.ts +248 -0
- package/src/mcp/primitives/$prompt.ts +188 -0
- package/src/mcp/primitives/$resource.ts +171 -0
- package/src/mcp/primitives/$tool.ts +285 -0
- package/src/mcp/providers/McpServerProvider.ts +382 -0
- package/src/mcp/transports/SseMcpTransport.ts +172 -0
- package/src/mcp/transports/StdioMcpTransport.ts +126 -0
- package/src/orm/index.ts +12 -0
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +164 -0
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -1
- package/src/queue/{index.ts → core/index.ts} +2 -3
- package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
- package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
- package/src/queue/core/providers/QueueProvider.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.ts +244 -0
- package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
- package/src/server/{index.ts → core/index.ts} +1 -0
- package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
- package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
- package/src/vite/plugins/viteAlephaBuild.ts +8 -2
- package/src/vite/plugins/viteAlephaDev.ts +6 -2
- package/src/vite/tasks/buildServer.ts +1 -1
- package/src/vite/tasks/copyAssets.ts +32 -8
- package/src/vite/tasks/generateCloudflare.ts +43 -15
- package/src/vite/tasks/runAlepha.ts +1 -0
- package/dist/api-audits/index.browser.js.map +0 -1
- package/dist/api-audits/index.js.map +0 -1
- package/dist/api-files/index.browser.js.map +0 -1
- package/dist/api-files/index.js.map +0 -1
- package/dist/api-jobs/index.browser.js.map +0 -1
- package/dist/api-jobs/index.js.map +0 -1
- package/dist/api-notifications/index.browser.js.map +0 -1
- package/dist/api-notifications/index.d.ts +0 -327
- package/dist/api-notifications/index.js.map +0 -1
- package/dist/api-parameters/index.browser.js.map +0 -1
- package/dist/api-parameters/index.js.map +0 -1
- package/dist/api-users/index.browser.js.map +0 -1
- package/dist/api-users/index.js.map +0 -1
- package/dist/api-verifications/index.browser.js.map +0 -1
- package/dist/api-verifications/index.d.ts +0 -229
- package/dist/api-verifications/index.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache-redis/index.js.map +0 -1
- package/dist/lock/index.js.map +0 -1
- package/dist/lock-redis/index.js.map +0 -1
- package/dist/queue/index.d.ts +0 -1265
- package/dist/queue/index.js +0 -1037
- package/dist/queue/index.js.map +0 -1
- package/dist/queue-redis/index.d.ts +0 -82
- package/dist/queue-redis/index.js +0 -872
- package/dist/queue-redis/index.js.map +0 -1
- package/dist/server/index.browser.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server-auth/index.browser.js.map +0 -1
- package/dist/server-auth/index.js +0 -1973
- package/dist/server-auth/index.js.map +0 -1
- package/dist/server-cache/index.js.map +0 -1
- package/dist/server-compress/index.js.map +0 -1
- package/dist/server-cookies/index.browser.js.map +0 -1
- package/dist/server-cookies/index.js.map +0 -1
- package/dist/server-cors/index.js.map +0 -1
- package/dist/server-health/index.js.map +0 -1
- package/dist/server-helmet/index.js.map +0 -1
- package/dist/server-links/index.browser.js.map +0 -1
- package/dist/server-links/index.js.map +0 -1
- package/dist/server-metrics/index.js +0 -4532
- package/dist/server-metrics/index.js.map +0 -1
- package/dist/server-multipart/index.js.map +0 -1
- package/dist/server-proxy/index.js.map +0 -1
- package/dist/server-rate-limit/index.js.map +0 -1
- package/dist/server-security/index.browser.js.map +0 -1
- package/dist/server-security/index.js.map +0 -1
- package/dist/server-static/index.js.map +0 -1
- package/dist/server-swagger/index.js.map +0 -1
- package/dist/topic/index.js.map +0 -1
- package/dist/topic-redis/index.js.map +0 -1
- package/src/queue/interfaces/QueueJob.ts +0 -459
- package/src/queue/providers/MemoryQueueProvider.ts +0 -850
- package/src/queue/providers/QueueProvider.ts +0 -319
- package/src/queue/providers/WorkerProvider.ts +0 -344
- package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
- /package/src/{api-audits → api/audits}/controllers/AuditController.ts +0 -0
- /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
- /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
- /package/src/{api-audits → api/audits}/index.ts +0 -0
- /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
- /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
- /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
- /package/src/{api-files → api/files}/entities/files.ts +0 -0
- /package/src/{api-files → api/files}/index.browser.ts +0 -0
- /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
- /package/src/{api-files → api/files}/services/FileService.ts +0 -0
- /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
- /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.ts +0 -0
- /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
- /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
- /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.ts +0 -0
- /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
- /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
- /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
- /package/src/{api-parameters → api/parameters}/controllers/ConfigController.ts +0 -0
- /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
- /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
- /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
- /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
- /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
- /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +0 -0
- /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -0
- /package/src/{api-users → api/users}/entities/identities.ts +0 -0
- /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
- /package/src/{api-users → api/users}/entities/users.ts +0 -0
- /package/src/{api-users → api/users}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/index.ts +0 -0
- /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
- /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
- /package/src/{api-users → api/users}/services/RegistrationService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
- /package/src/{api-users → api/users}/services/UserService.ts +0 -0
- /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
- /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
- /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
- /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
- /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
- /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
- /package/src/cache/{index.ts → core/index.ts} +0 -0
- /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
- /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
- /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
- /package/src/{cache-redis → cache/redis}/index.ts +0 -0
- /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
- /package/src/lock/{index.ts → core/index.ts} +0 -0
- /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
- /package/src/{lock-redis → lock/redis}/index.ts +0 -0
- /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
- /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
- /package/src/{queue-redis → queue/redis}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
- /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
- /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
- /package/src/{server-auth → server/auth}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$auth.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
- /package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
- /package/src/{server-cache → server/cache}/index.ts +0 -0
- /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
- /package/src/{server-compress → server/compress}/index.ts +0 -0
- /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
- /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
- /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
- /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
- /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
- /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
- /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
- /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
- /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
- /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
- /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
- /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
- /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
- /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
- /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$action.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
- /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerRouterProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
- /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
- /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
- /package/src/server/{services → core/services}/HttpClient.ts +0 -0
- /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
- /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
- /package/src/{server-cors → server/cors}/index.ts +0 -0
- /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
- /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
- /package/src/{server-health → server/health}/index.ts +0 -0
- /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
- /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
- /package/src/{server-helmet → server/helmet}/index.ts +0 -0
- /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
- /package/src/{server-links → server/links}/index.browser.ts +0 -0
- /package/src/{server-links → server/links}/index.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
- /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
- /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
- /package/src/{server-metrics → server/metrics}/index.ts +0 -0
- /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
- /package/src/{server-multipart → server/multipart}/index.ts +0 -0
- /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
- /package/src/{server-proxy → server/proxy}/index.ts +0 -0
- /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
- /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
- /package/src/{server-security → server/security}/index.browser.ts +0 -0
- /package/src/{server-security → server/security}/index.ts +0 -0
- /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
- /package/src/{server-static → server/static}/index.ts +0 -0
- /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
- /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
- /package/src/{server-swagger → server/swagger}/index.ts +0 -0
- /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
- /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
- /package/src/topic/{index.ts → core/index.ts} +0 -0
- /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
- /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
- /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
- /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
- /package/src/{topic-redis → topic/redis}/index.ts +0 -0
- /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
|
+
import type {
|
|
3
|
+
McpContext,
|
|
4
|
+
McpResourceDescriptor,
|
|
5
|
+
ResourceContent,
|
|
6
|
+
ResourceHandler,
|
|
7
|
+
} from "../interfaces/McpTypes.ts";
|
|
8
|
+
import { McpServerProvider } from "../providers/McpServerProvider.ts";
|
|
9
|
+
|
|
10
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Creates an MCP resource primitive for exposing read-only data.
|
|
14
|
+
*
|
|
15
|
+
* Resources represent any kind of data that an LLM might want to read,
|
|
16
|
+
* such as files, database records, API responses, or computed data.
|
|
17
|
+
*
|
|
18
|
+
* **Key Features**
|
|
19
|
+
* - URI-based identification for resources
|
|
20
|
+
* - Support for text and binary content
|
|
21
|
+
* - MIME type specification
|
|
22
|
+
* - Lazy loading via handler function
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* class ProjectResources {
|
|
27
|
+
* readme = $resource({
|
|
28
|
+
* uri: "file:///readme",
|
|
29
|
+
* description: "Project README file",
|
|
30
|
+
* mimeType: "text/markdown",
|
|
31
|
+
* handler: async () => ({
|
|
32
|
+
* text: await fs.readFile("README.md", "utf-8"),
|
|
33
|
+
* }),
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* config = $resource({
|
|
37
|
+
* uri: "config://app",
|
|
38
|
+
* name: "Application Configuration",
|
|
39
|
+
* mimeType: "application/json",
|
|
40
|
+
* handler: async () => ({
|
|
41
|
+
* text: JSON.stringify(this.configService.getConfig()),
|
|
42
|
+
* }),
|
|
43
|
+
* });
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export const $resource = (
|
|
48
|
+
options: ResourcePrimitiveOptions,
|
|
49
|
+
): ResourcePrimitive => {
|
|
50
|
+
return createPrimitive(ResourcePrimitive, options);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
54
|
+
|
|
55
|
+
export interface ResourcePrimitiveOptions {
|
|
56
|
+
/**
|
|
57
|
+
* The URI that identifies this resource.
|
|
58
|
+
*
|
|
59
|
+
* URIs should follow a consistent scheme for your application.
|
|
60
|
+
* Common patterns:
|
|
61
|
+
* - `file:///path/to/file` - File system resources
|
|
62
|
+
* - `db://table/id` - Database records
|
|
63
|
+
* - `api://endpoint` - API responses
|
|
64
|
+
* - `config://name` - Configuration values
|
|
65
|
+
*
|
|
66
|
+
* @example "file:///readme.md"
|
|
67
|
+
* @example "db://users/123"
|
|
68
|
+
*/
|
|
69
|
+
uri: string;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Human-readable name for the resource.
|
|
73
|
+
*
|
|
74
|
+
* If not provided, defaults to the property key where the resource is declared.
|
|
75
|
+
*
|
|
76
|
+
* @example "Project README"
|
|
77
|
+
* @example "User Profile"
|
|
78
|
+
*/
|
|
79
|
+
name?: string;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Description of what this resource contains.
|
|
83
|
+
*
|
|
84
|
+
* Helps the LLM understand the purpose and content of the resource.
|
|
85
|
+
*
|
|
86
|
+
* @example "The main README file for the project"
|
|
87
|
+
*/
|
|
88
|
+
description?: string;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* MIME type of the resource content.
|
|
92
|
+
*
|
|
93
|
+
* Helps clients understand how to interpret the content.
|
|
94
|
+
*
|
|
95
|
+
* @default "text/plain"
|
|
96
|
+
* @example "text/markdown"
|
|
97
|
+
* @example "application/json"
|
|
98
|
+
*/
|
|
99
|
+
mimeType?: string;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Handler function that returns the resource content.
|
|
103
|
+
*
|
|
104
|
+
* Called when the resource is read. Can return text or binary content.
|
|
105
|
+
*
|
|
106
|
+
* @returns Resource content with either `text` or `blob` property
|
|
107
|
+
*/
|
|
108
|
+
handler: ResourceHandler;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
112
|
+
|
|
113
|
+
export class ResourcePrimitive extends Primitive<ResourcePrimitiveOptions> {
|
|
114
|
+
protected readonly mcpServer = $inject(McpServerProvider);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Returns the name of the resource.
|
|
118
|
+
*/
|
|
119
|
+
public get name(): string {
|
|
120
|
+
return this.options.name ?? this.config.propertyKey;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Returns the URI of the resource.
|
|
125
|
+
*/
|
|
126
|
+
public get uri(): string {
|
|
127
|
+
return this.options.uri;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Returns the description of the resource.
|
|
132
|
+
*/
|
|
133
|
+
public get description(): string | undefined {
|
|
134
|
+
return this.options.description;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Returns the MIME type of the resource.
|
|
139
|
+
*/
|
|
140
|
+
public get mimeType(): string {
|
|
141
|
+
return this.options.mimeType ?? "text/plain";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
protected onInit(): void {
|
|
145
|
+
this.mcpServer.registerResource(this);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Read the resource content.
|
|
150
|
+
*
|
|
151
|
+
* @param context - Optional context from the transport layer
|
|
152
|
+
* @returns The resource content
|
|
153
|
+
*/
|
|
154
|
+
public async read(context?: McpContext): Promise<ResourceContent> {
|
|
155
|
+
return this.options.handler({ context });
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Convert the resource to an MCP resource descriptor for protocol messages.
|
|
160
|
+
*/
|
|
161
|
+
public toDescriptor(): McpResourceDescriptor {
|
|
162
|
+
return {
|
|
163
|
+
uri: this.uri,
|
|
164
|
+
name: this.name,
|
|
165
|
+
description: this.description,
|
|
166
|
+
mimeType: this.mimeType,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
$resource[KIND] = ResourcePrimitive;
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import {
|
|
2
|
+
$inject,
|
|
3
|
+
type Async,
|
|
4
|
+
createPrimitive,
|
|
5
|
+
KIND,
|
|
6
|
+
Primitive,
|
|
7
|
+
type TObject,
|
|
8
|
+
type TSchema,
|
|
9
|
+
t,
|
|
10
|
+
} from "alepha";
|
|
11
|
+
import type {
|
|
12
|
+
McpContext,
|
|
13
|
+
McpJsonSchema,
|
|
14
|
+
McpToolDescriptor,
|
|
15
|
+
ToolHandlerArgs,
|
|
16
|
+
ToolHandlerResult,
|
|
17
|
+
ToolPrimitiveSchema,
|
|
18
|
+
} from "../interfaces/McpTypes.ts";
|
|
19
|
+
import { McpServerProvider } from "../providers/McpServerProvider.ts";
|
|
20
|
+
|
|
21
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Creates an MCP tool primitive for defining callable functions.
|
|
25
|
+
*
|
|
26
|
+
* Tools are the primary way for LLMs to interact with external systems through MCP.
|
|
27
|
+
* Each tool has a name, description, typed parameters, and a handler function.
|
|
28
|
+
*
|
|
29
|
+
* **Key Features**
|
|
30
|
+
* - Full TypeScript inference for parameters and results
|
|
31
|
+
* - Automatic schema validation using TypeBox
|
|
32
|
+
* - JSON Schema generation for MCP protocol
|
|
33
|
+
* - Integration with MCP server provider
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* class CalculatorTools {
|
|
38
|
+
* add = $tool({
|
|
39
|
+
* description: "Add two numbers together",
|
|
40
|
+
* schema: {
|
|
41
|
+
* params: t.object({
|
|
42
|
+
* a: t.number(),
|
|
43
|
+
* b: t.number(),
|
|
44
|
+
* }),
|
|
45
|
+
* result: t.number(),
|
|
46
|
+
* },
|
|
47
|
+
* handler: async ({ params }) => {
|
|
48
|
+
* return params.a + params.b;
|
|
49
|
+
* },
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* greet = $tool({
|
|
53
|
+
* description: "Generate a greeting message",
|
|
54
|
+
* schema: {
|
|
55
|
+
* params: t.object({
|
|
56
|
+
* name: t.text(),
|
|
57
|
+
* }),
|
|
58
|
+
* result: t.text(),
|
|
59
|
+
* },
|
|
60
|
+
* handler: async ({ params }) => {
|
|
61
|
+
* return `Hello, ${params.name}!`;
|
|
62
|
+
* },
|
|
63
|
+
* });
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export const $tool = <T extends ToolPrimitiveSchema>(
|
|
68
|
+
options: ToolPrimitiveOptions<T>,
|
|
69
|
+
): ToolPrimitive<T> => {
|
|
70
|
+
return createPrimitive(ToolPrimitive<T>, options);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
export interface ToolPrimitiveOptions<T extends ToolPrimitiveSchema> {
|
|
76
|
+
/**
|
|
77
|
+
* The name of the tool.
|
|
78
|
+
*
|
|
79
|
+
* If not provided, defaults to the property key where the tool is declared.
|
|
80
|
+
* Names should be descriptive and use kebab-case or snake_case.
|
|
81
|
+
*
|
|
82
|
+
* @example "calculate-sum"
|
|
83
|
+
* @example "get_weather"
|
|
84
|
+
*/
|
|
85
|
+
name?: string;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* A human-readable description of what the tool does.
|
|
89
|
+
*
|
|
90
|
+
* This description is sent to the LLM to help it understand
|
|
91
|
+
* when and how to use the tool. Be clear and specific.
|
|
92
|
+
*
|
|
93
|
+
* @example "Calculate the sum of two numbers"
|
|
94
|
+
* @example "Retrieve current weather data for a given location"
|
|
95
|
+
*/
|
|
96
|
+
description: string;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* TypeBox schema defining the tool's parameters and result type.
|
|
100
|
+
*
|
|
101
|
+
* - **params**: TObject schema for input parameters (optional)
|
|
102
|
+
* - **result**: TSchema for the return value (optional)
|
|
103
|
+
*
|
|
104
|
+
* Schemas provide:
|
|
105
|
+
* - Type inference for handler function
|
|
106
|
+
* - Runtime validation of inputs
|
|
107
|
+
* - JSON Schema generation for MCP protocol
|
|
108
|
+
*/
|
|
109
|
+
schema?: T;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The handler function that executes when the tool is called.
|
|
113
|
+
*
|
|
114
|
+
* Receives validated parameters and returns the result.
|
|
115
|
+
* Errors thrown here are caught and returned as MCP errors.
|
|
116
|
+
*
|
|
117
|
+
* @param args - Object containing validated params
|
|
118
|
+
* @returns The tool result (can be async)
|
|
119
|
+
*/
|
|
120
|
+
handler: (args: ToolHandlerArgs<T>) => Async<ToolHandlerResult<T>>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
124
|
+
|
|
125
|
+
export class ToolPrimitive<T extends ToolPrimitiveSchema> extends Primitive<
|
|
126
|
+
ToolPrimitiveOptions<T>
|
|
127
|
+
> {
|
|
128
|
+
protected readonly mcpServer = $inject(McpServerProvider);
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Returns the name of the tool.
|
|
132
|
+
*/
|
|
133
|
+
public get name(): string {
|
|
134
|
+
return this.options.name ?? this.config.propertyKey;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Returns the description of the tool.
|
|
139
|
+
*/
|
|
140
|
+
public get description(): string {
|
|
141
|
+
return this.options.description;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
protected onInit(): void {
|
|
145
|
+
this.mcpServer.registerTool(this);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Execute the tool with the given parameters.
|
|
150
|
+
*
|
|
151
|
+
* @param params - Raw parameters to validate and pass to the handler
|
|
152
|
+
* @param context - Optional context from the transport layer
|
|
153
|
+
* @returns The tool result
|
|
154
|
+
*/
|
|
155
|
+
public async execute(
|
|
156
|
+
params: unknown,
|
|
157
|
+
context?: McpContext,
|
|
158
|
+
): Promise<ToolHandlerResult<T>> {
|
|
159
|
+
let validatedParams: any = params ?? {};
|
|
160
|
+
|
|
161
|
+
// Validate params using alepha.codec if schema provided
|
|
162
|
+
if (this.options.schema?.params) {
|
|
163
|
+
validatedParams = this.alepha.codec.decode(
|
|
164
|
+
this.options.schema.params,
|
|
165
|
+
validatedParams,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const result = await this.options.handler({
|
|
170
|
+
params: validatedParams,
|
|
171
|
+
context,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Validate and encode result if schema provided
|
|
175
|
+
if (this.options.schema?.result && result !== undefined) {
|
|
176
|
+
return this.alepha.codec.encode(
|
|
177
|
+
this.options.schema.result,
|
|
178
|
+
result,
|
|
179
|
+
) as ToolHandlerResult<T>;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return result as ToolHandlerResult<T>;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Convert the tool to an MCP tool descriptor for protocol messages.
|
|
187
|
+
*/
|
|
188
|
+
public toDescriptor(): McpToolDescriptor {
|
|
189
|
+
return {
|
|
190
|
+
name: this.name,
|
|
191
|
+
description: this.description,
|
|
192
|
+
inputSchema: this.options.schema?.params
|
|
193
|
+
? this.schemaToJsonSchema(this.options.schema.params)
|
|
194
|
+
: { type: "object", properties: {}, required: [] },
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Convert a TypeBox schema to JSON Schema format.
|
|
200
|
+
*/
|
|
201
|
+
protected schemaToJsonSchema(schema: TObject): McpJsonSchema {
|
|
202
|
+
const properties: Record<string, unknown> = {};
|
|
203
|
+
const required: string[] = [];
|
|
204
|
+
|
|
205
|
+
for (const [key, propSchema] of Object.entries(schema.properties)) {
|
|
206
|
+
properties[key] = this.propertyToJsonSchema(propSchema as TSchema);
|
|
207
|
+
|
|
208
|
+
// Check if property is required (not optional)
|
|
209
|
+
if (!t.schema.isOptional(propSchema as TSchema)) {
|
|
210
|
+
required.push(key);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
type: "object",
|
|
216
|
+
properties,
|
|
217
|
+
required,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Convert a single property schema to JSON Schema format.
|
|
223
|
+
*/
|
|
224
|
+
protected propertyToJsonSchema(schema: TSchema): Record<string, unknown> {
|
|
225
|
+
const result: Record<string, unknown> = {};
|
|
226
|
+
|
|
227
|
+
// Check for description on all types
|
|
228
|
+
if ("description" in schema) {
|
|
229
|
+
result.description = schema.description;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (t.schema.isString(schema)) {
|
|
233
|
+
result.type = "string";
|
|
234
|
+
if ("minLength" in schema) result.minLength = schema.minLength;
|
|
235
|
+
if ("maxLength" in schema) result.maxLength = schema.maxLength;
|
|
236
|
+
if ("pattern" in schema) result.pattern = schema.pattern;
|
|
237
|
+
if ("enum" in schema) result.enum = schema.enum;
|
|
238
|
+
} else if (t.schema.isNumber(schema)) {
|
|
239
|
+
result.type = "number";
|
|
240
|
+
if ("minimum" in schema) result.minimum = schema.minimum;
|
|
241
|
+
if ("maximum" in schema) result.maximum = schema.maximum;
|
|
242
|
+
} else if (t.schema.isInteger(schema)) {
|
|
243
|
+
result.type = "integer";
|
|
244
|
+
if ("minimum" in schema) result.minimum = schema.minimum;
|
|
245
|
+
if ("maximum" in schema) result.maximum = schema.maximum;
|
|
246
|
+
} else if (t.schema.isBoolean(schema)) {
|
|
247
|
+
result.type = "boolean";
|
|
248
|
+
} else if (t.schema.isArray(schema)) {
|
|
249
|
+
result.type = "array";
|
|
250
|
+
if ("items" in schema) {
|
|
251
|
+
result.items = this.propertyToJsonSchema(schema.items as TSchema);
|
|
252
|
+
}
|
|
253
|
+
} else if (t.schema.isObject(schema)) {
|
|
254
|
+
Object.assign(result, this.schemaToJsonSchema(schema));
|
|
255
|
+
} else if (t.schema.isUnsafe(schema) || t.schema.isOptional(schema)) {
|
|
256
|
+
// Handle Unsafe types (like t.enum) and optional wrappers by checking the underlying type property
|
|
257
|
+
const schemaAny = schema as { type?: string; enum?: unknown[] };
|
|
258
|
+
if (schemaAny.type === "string") {
|
|
259
|
+
result.type = "string";
|
|
260
|
+
if ("enum" in schema) result.enum = schema.enum;
|
|
261
|
+
if ("pattern" in schema) result.pattern = schema.pattern;
|
|
262
|
+
} else if (schemaAny.type === "number") {
|
|
263
|
+
result.type = "number";
|
|
264
|
+
} else if (schemaAny.type === "integer") {
|
|
265
|
+
result.type = "integer";
|
|
266
|
+
} else if (schemaAny.type === "boolean") {
|
|
267
|
+
result.type = "boolean";
|
|
268
|
+
} else if (schemaAny.type === "array") {
|
|
269
|
+
result.type = "array";
|
|
270
|
+
} else if (schemaAny.type === "object") {
|
|
271
|
+
result.type = "object";
|
|
272
|
+
} else {
|
|
273
|
+
// Fallback
|
|
274
|
+
result.type = "string";
|
|
275
|
+
}
|
|
276
|
+
} else {
|
|
277
|
+
// Fallback for other types
|
|
278
|
+
result.type = "string";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
$tool[KIND] = ToolPrimitive;
|