@pikku/cli 0.11.1 → 0.11.2
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/.pikku/channel/pikku-channel-types.gen.ts +11 -12
- package/.pikku/channel/pikku-channels-map.gen.d.ts +8 -8
- package/.pikku/channel/pikku-channels-meta.gen.ts +1 -1
- package/.pikku/channel/pikku-channels.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-channel.ts +2 -2
- package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
- package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
- package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
- package/.pikku/cli/pikku-cli.gen.ts +3 -3
- package/.pikku/function/pikku-function-types.gen.ts +49 -63
- package/.pikku/function/pikku-functions-meta.gen.json +988 -0
- package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
- package/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
- package/.pikku/function/pikku-functions-meta.min.gen.ts +4 -209
- package/.pikku/http/pikku-http-types.gen.ts +2 -2
- package/.pikku/http/pikku-http-wirings-map.gen.d.ts +8 -8
- package/.pikku/http/pikku-http-wirings-meta.gen.ts +1 -1
- package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
- package/.pikku/mcp/pikku-mcp-types.gen.ts +13 -13
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
- package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
- package/.pikku/pikku-bootstrap.gen.ts +1 -4
- package/.pikku/pikku-services.gen.ts +4 -6
- package/.pikku/pikku-types.gen.ts +1 -1
- package/.pikku/pikku-websocket.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
- package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +8 -8
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
- package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
- package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +2 -2
- package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +8 -8
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +34 -33
- package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
- package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
- package/.pikku/schemas/register.gen.ts +25 -25
- package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/.pikku/services/config.gen.json +99 -0
- package/.pikku/services/getInspectorState.gen.json +10 -0
- package/.pikku/services/jwt.gen.json +13 -0
- package/.pikku/services/logger.gen.json +25 -0
- package/.pikku/services/queueService.gen.json +14 -0
- package/.pikku/services/schedulerService.gen.json +17 -0
- package/.pikku/services/schema.gen.json +14 -0
- package/.pikku/services/variables.gen.json +13 -0
- package/.pikku/services/workflowService.gen.json +31 -0
- package/.pikku/workflow/pikku-workflow-map.gen.d.ts +8 -8
- package/.pikku/workflow/pikku-workflow-types.gen.ts +36 -31
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -2
- package/.pikku/workflow/pikku-workflow-wirings.gen.ts +6 -2
- package/CHANGELOG.md +21 -0
- package/bin/pikku.ts +6 -32
- package/build.sh +53 -31
- package/cli.schema.json +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +6 -7
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/channel/pikku-channels-meta.gen.js +1 -1
- package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +29 -79
- package/dist/.pikku/function/pikku-function-types.gen.js +19 -15
- package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
- package/dist/.pikku/function/pikku-functions-meta.gen.json +988 -0
- package/dist/.pikku/function/pikku-functions-meta.min.gen.js +3 -208
- package/dist/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -2
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +13 -13
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -4
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -4
- package/dist/.pikku/pikku-services.gen.d.ts +3 -6
- package/dist/.pikku/pikku-services.gen.js +2 -5
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
- package/dist/.pikku/pikku-websocket.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +6 -9
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +2 -2
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +15 -15
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -25
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +22 -8
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +6 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +6 -3
- package/dist/bin/pikku.js +5 -26
- package/dist/src/cli.wiring.js +4 -4
- package/dist/src/functions/commands/all.js +82 -42
- package/dist/src/functions/commands/bootstrap.js +22 -10
- package/dist/src/functions/commands/watch.js +6 -3
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -7
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +42 -4
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +40 -2
- package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
- package/dist/src/functions/wirings/channels/serialize-channel-types.js +10 -11
- package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
- package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli.js +9 -3
- package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
- package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
- package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
- package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +15 -5
- package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-services.js +23 -23
- package/dist/src/functions/wirings/functions/schemas.js +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +50 -64
- package/dist/src/functions/wirings/http/openapi-spec-generator.js +4 -4
- package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
- package/dist/src/functions/wirings/http/serialize-http-types.js +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +18 -4
- package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +12 -12
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +26 -2
- package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
- package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
- package/dist/src/functions/wirings/queue/pikku-command-queue.js +9 -3
- package/dist/src/functions/wirings/queue/pikku-queue.js +9 -3
- package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
- package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
- package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
- package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +1 -1
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +6 -3
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
- package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
- package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +3 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +12 -8
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +2 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +11 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -31
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +8 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +30 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +2 -2
- package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
- package/dist/src/middleware/log-command-info-and-time.js +1 -4
- package/dist/src/services/cli-logger-forwarder.service.js +1 -1
- package/dist/src/services.d.ts +2 -7
- package/dist/src/services.js +14 -12
- package/dist/src/utils/check-required-types.d.ts +2 -2
- package/dist/src/utils/check-required-types.js +2 -3
- package/dist/src/utils/pikku-cli-config.js +35 -2
- package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
- package/dist/src/utils/pikku-files-and-methods.js +4 -4
- package/dist/src/utils/schema-generator.d.ts +1 -1
- package/dist/src/utils/schema-generator.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -8
- package/src/cli.wiring.ts +4 -4
- package/src/functions/commands/all.ts +94 -45
- package/src/functions/commands/bootstrap.ts +25 -10
- package/src/functions/commands/watch.ts +6 -3
- package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -5
- package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +43 -4
- package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +40 -1
- package/src/functions/wirings/channels/pikku-channels.ts +27 -3
- package/src/functions/wirings/channels/serialize-channel-types.ts +10 -11
- package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
- package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
- package/src/functions/wirings/cli/pikku-command-cli.ts +26 -3
- package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
- package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
- package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
- package/src/functions/wirings/functions/pikku-command-function-types-split.ts +6 -6
- package/src/functions/wirings/functions/pikku-command-functions.ts +39 -4
- package/src/functions/wirings/functions/pikku-command-services.ts +25 -25
- package/src/functions/wirings/functions/schemas.ts +2 -2
- package/src/functions/wirings/functions/serialize-function-types.ts +51 -65
- package/src/functions/wirings/http/openapi-spec-generator.ts +14 -5
- package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
- package/src/functions/wirings/http/serialize-http-types.ts +1 -1
- package/src/functions/wirings/mcp/pikku-command-mcp.ts +30 -4
- package/src/functions/wirings/mcp/serialize-mcp-types.ts +12 -12
- package/src/functions/wirings/middleware/pikku-command-middleware.ts +35 -2
- package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
- package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
- package/src/functions/wirings/queue/pikku-command-queue.ts +27 -2
- package/src/functions/wirings/queue/pikku-queue.ts +27 -2
- package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
- package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
- package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
- package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
- package/src/functions/wirings/rpc/serialize-remote-rpc.ts +1 -1
- package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
- package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +30 -4
- package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
- package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
- package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
- package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +8 -1
- package/src/functions/wirings/workflow/pikku-command-workflow.ts +36 -8
- package/src/functions/wirings/workflow/serialize-workflow-meta.ts +18 -1
- package/src/functions/wirings/workflow/serialize-workflow-types.ts +39 -31
- package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +47 -0
- package/src/functions/wirings/workflow/serialize-workflow-workers.ts +2 -2
- package/src/middleware/log-command-info-and-time.ts +3 -6
- package/src/services/cli-logger-forwarder.service.ts +1 -1
- package/src/services.ts +15 -15
- package/src/utils/check-required-types.ts +4 -7
- package/src/utils/pikku-cli-config.ts +69 -2
- package/src/utils/pikku-files-and-methods.ts +10 -13
- package/src/utils/schema-generator.ts +2 -2
- package/types/application-types.d.ts +1 -1
- package/types/config.d.ts +12 -1
- package/.pikku/function/pikku-functions.gen.ts +0 -84
- package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
- package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions.gen.js +0 -83
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
- package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
|
@@ -6,8 +6,8 @@ export const serializeFunctionTypes = (
|
|
|
6
6
|
userSessionTypeName: string,
|
|
7
7
|
singletonServicesTypeImport: string,
|
|
8
8
|
singletonServicesTypeName: string,
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
wireServicesTypeImport: string,
|
|
10
|
+
wireServicesTypeName: string,
|
|
11
11
|
rpcMapTypeImport: string,
|
|
12
12
|
requiredServicesTypeImport: string,
|
|
13
13
|
configTypeImport: string
|
|
@@ -16,20 +16,18 @@ export const serializeFunctionTypes = (
|
|
|
16
16
|
* Core function, middleware, and permission types for all wirings
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore } from '@pikku/core'
|
|
19
|
+
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired } from '@pikku/core'
|
|
20
20
|
import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
|
|
21
|
-
import { PikkuChannel } from '@pikku/core/channel'
|
|
22
|
-
import { PikkuMCP } from '@pikku/core/mcp'
|
|
23
21
|
|
|
24
22
|
${userSessionTypeImport}
|
|
25
23
|
${singletonServicesTypeImport}
|
|
26
|
-
${
|
|
24
|
+
${wireServicesTypeImport}
|
|
27
25
|
${configTypeImport}
|
|
28
26
|
${rpcMapTypeImport}
|
|
29
27
|
${requiredServicesTypeImport}
|
|
30
28
|
|
|
31
29
|
${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
|
|
32
|
-
${
|
|
30
|
+
${wireServicesTypeName !== 'Services' ? `type Services = ${wireServicesTypeName}` : ''}
|
|
33
31
|
${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
|
|
34
32
|
${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
|
|
35
33
|
|
|
@@ -40,7 +38,7 @@ ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
|
|
|
40
38
|
* @template In - The input type that the permission check will receive
|
|
41
39
|
* @template RequiredServices - The services required for this permission check
|
|
42
40
|
*/
|
|
43
|
-
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session
|
|
41
|
+
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
|
|
44
42
|
|
|
45
43
|
/**
|
|
46
44
|
* Type-safe middleware definition that can access your application's services and session.
|
|
@@ -48,7 +46,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
|
|
|
48
46
|
*
|
|
49
47
|
* @template RequiredServices - The services required for this middleware
|
|
50
48
|
*/
|
|
51
|
-
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices
|
|
49
|
+
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
|
|
52
50
|
|
|
53
51
|
/**
|
|
54
52
|
* Configuration object for creating a permission with metadata
|
|
@@ -69,7 +67,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
69
67
|
* @example
|
|
70
68
|
* \`\`\`typescript
|
|
71
69
|
* // Direct function syntax
|
|
72
|
-
* const permission = pikkuPermission(({ logger }, data, session) => {
|
|
70
|
+
* const permission = pikkuPermission(async ({ logger }, data, { session }) => {
|
|
71
|
+
* const session = await session?.get()
|
|
73
72
|
* return session?.role === 'admin'
|
|
74
73
|
* })
|
|
75
74
|
*
|
|
@@ -77,7 +76,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
77
76
|
* const adminPermission = pikkuPermission({
|
|
78
77
|
* name: 'Admin Permission',
|
|
79
78
|
* description: 'Checks if user has admin role',
|
|
80
|
-
* func: async ({ logger }, data, session) => {
|
|
79
|
+
* func: async ({ logger }, data, { session }) => {
|
|
80
|
+
* const session = await session?.get()
|
|
81
81
|
* return session?.role === 'admin'
|
|
82
82
|
* }
|
|
83
83
|
* })
|
|
@@ -108,7 +108,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
108
108
|
* @example
|
|
109
109
|
* \`\`\`typescript
|
|
110
110
|
* // Direct function syntax
|
|
111
|
-
* const middleware = pikkuMiddleware(({ logger },
|
|
111
|
+
* const middleware = pikkuMiddleware(({ logger }, wires, next) => {
|
|
112
112
|
* logger.info('Middleware executed')
|
|
113
113
|
* await next()
|
|
114
114
|
* })
|
|
@@ -117,7 +117,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
117
117
|
* const logMiddleware = pikkuMiddleware({
|
|
118
118
|
* name: 'Request Logger',
|
|
119
119
|
* description: 'Logs all incoming requests',
|
|
120
|
-
* func: async ({ logger },
|
|
120
|
+
* func: async ({ logger }, wires, next) => {
|
|
121
121
|
* logger.info('Request started')
|
|
122
122
|
* await next()
|
|
123
123
|
* }
|
|
@@ -140,7 +140,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
|
|
|
140
140
|
* message,
|
|
141
141
|
* level = 'info'
|
|
142
142
|
* }) => {
|
|
143
|
-
* return pikkuMiddleware(async ({ logger },
|
|
143
|
+
* return pikkuMiddleware(async ({ logger }, next) => {
|
|
144
144
|
* logger[level](message)
|
|
145
145
|
* await next()
|
|
146
146
|
* })
|
|
@@ -162,8 +162,8 @@ export const pikkuMiddlewareFactory = <In = any>(
|
|
|
162
162
|
* export const requireRole = pikkuPermissionFactory<{ role: string }>(({
|
|
163
163
|
* role
|
|
164
164
|
* }) => {
|
|
165
|
-
* return pikkuPermission(async ({ logger }, data,
|
|
166
|
-
* if (!
|
|
165
|
+
* return pikkuPermission(async ({ logger }, data, { initialSession }) => {
|
|
166
|
+
* if (!initialSession || initialSession.role !== role) {
|
|
167
167
|
* logger.warn(\`Permission denied: required role '\${role}'\`)
|
|
168
168
|
* return false
|
|
169
169
|
* }
|
|
@@ -184,25 +184,19 @@ export const pikkuPermissionFactory = <In = any>(
|
|
|
184
184
|
*
|
|
185
185
|
* @template In - The input type
|
|
186
186
|
* @template Out - The output type that the function returns
|
|
187
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
188
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
189
187
|
* @template RequiredServices - Services required by this function
|
|
190
188
|
*/
|
|
191
189
|
export type PikkuFunctionSessionless<
|
|
192
190
|
In = unknown,
|
|
193
191
|
Out = never,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
? { mcp?: PikkuMCP } // Optional MCP
|
|
203
|
-
: { mcp: PikkuMCP } // Required MCP
|
|
204
|
-
)
|
|
205
|
-
> = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
|
|
192
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
193
|
+
RequiredServices extends Services = Services
|
|
194
|
+
> = CorePikkuFunctionSessionless<
|
|
195
|
+
In,
|
|
196
|
+
Out,
|
|
197
|
+
RequiredServices,
|
|
198
|
+
PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
199
|
+
>
|
|
206
200
|
|
|
207
201
|
/**
|
|
208
202
|
* A session-aware API function that requires user authentication.
|
|
@@ -210,25 +204,19 @@ export type PikkuFunctionSessionless<
|
|
|
210
204
|
*
|
|
211
205
|
* @template In - The input type
|
|
212
206
|
* @template Out - The output type that the function returns
|
|
213
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
214
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
215
207
|
* @template RequiredServices - Services required by this function
|
|
216
208
|
*/
|
|
217
209
|
export type PikkuFunction<
|
|
218
210
|
In = unknown,
|
|
219
211
|
Out = never,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
? { mcp?: PikkuMCP } // Optional MCP
|
|
229
|
-
: { mcp: PikkuMCP } // Required MCP
|
|
230
|
-
)
|
|
231
|
-
> = CorePikkuFunction<In, Out, ChannelData, RequiredServices, Session>
|
|
212
|
+
RequiredWires extends keyof PikkuWire = 'session',
|
|
213
|
+
RequiredServices extends Services = Services
|
|
214
|
+
> = CorePikkuFunction<
|
|
215
|
+
In,
|
|
216
|
+
Out,
|
|
217
|
+
RequiredServices,
|
|
218
|
+
PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
219
|
+
>
|
|
232
220
|
|
|
233
221
|
/**
|
|
234
222
|
* Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
|
|
@@ -236,16 +224,13 @@ export type PikkuFunction<
|
|
|
236
224
|
*
|
|
237
225
|
* @template In - The input type
|
|
238
226
|
* @template Out - The output type
|
|
239
|
-
* @template ChannelData - Channel data type
|
|
240
|
-
* @template MCPData - MCP data type
|
|
241
227
|
* @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
|
|
242
228
|
*/
|
|
243
229
|
export type PikkuFunctionConfig<
|
|
244
230
|
In = unknown,
|
|
245
231
|
Out = unknown,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
PikkuFunc extends PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData> = PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData>
|
|
232
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
233
|
+
PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>
|
|
249
234
|
> = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
|
|
250
235
|
|
|
251
236
|
/**
|
|
@@ -260,7 +245,8 @@ export type PikkuFunctionConfig<
|
|
|
260
245
|
* @example
|
|
261
246
|
* \\\`\\\`\\\`typescript
|
|
262
247
|
* const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
|
|
263
|
-
* func: async ({db, logger}, input) => {
|
|
248
|
+
* func: async ({db, logger}, input, wire) => {
|
|
249
|
+
* const session = await wire.session.get()
|
|
264
250
|
* logger.info('Creating user', input.name)
|
|
265
251
|
* const user = await db.users.create(input)
|
|
266
252
|
* return {id: user.id, message: \\\`User \\\${input.name} created successfully\\\`}
|
|
@@ -271,8 +257,8 @@ export type PikkuFunctionConfig<
|
|
|
271
257
|
*/
|
|
272
258
|
export const pikkuFunc = <In, Out = unknown>(
|
|
273
259
|
func:
|
|
274
|
-
| PikkuFunction<In, Out>
|
|
275
|
-
|
|
|
260
|
+
| PikkuFunction<In, Out, 'session' | 'rpc'>
|
|
261
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
276
262
|
) => {
|
|
277
263
|
return typeof func === 'function' ? { func } : func
|
|
278
264
|
}
|
|
@@ -289,7 +275,7 @@ export const pikkuFunc = <In, Out = unknown>(
|
|
|
289
275
|
* @example
|
|
290
276
|
* \\\`\\\`\\\`typescript
|
|
291
277
|
* const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
|
|
292
|
-
* func: async ({logger}) => {
|
|
278
|
+
* func: async ({logger}, input) => {
|
|
293
279
|
* logger.info('Health check requested')
|
|
294
280
|
* return {status: 'healthy', timestamp: new Date().toISOString()}
|
|
295
281
|
* },
|
|
@@ -299,8 +285,8 @@ export const pikkuFunc = <In, Out = unknown>(
|
|
|
299
285
|
*/
|
|
300
286
|
export const pikkuSessionlessFunc = <In, Out = unknown>(
|
|
301
287
|
func:
|
|
302
|
-
| PikkuFunctionSessionless<In, Out>
|
|
303
|
-
|
|
|
288
|
+
| PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
|
|
289
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
304
290
|
) => {
|
|
305
291
|
return typeof func === 'function' ? { func } : func
|
|
306
292
|
}
|
|
@@ -323,8 +309,8 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
|
|
|
323
309
|
*/
|
|
324
310
|
export const pikkuVoidFunc = (
|
|
325
311
|
func:
|
|
326
|
-
| PikkuFunctionSessionless<void, void>
|
|
327
|
-
|
|
|
312
|
+
| PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
|
|
313
|
+
| PikkuFunctionConfig<void, void, 'session' | 'rpc'>
|
|
328
314
|
) => {
|
|
329
315
|
return typeof func === 'function' ? { func } : func
|
|
330
316
|
}
|
|
@@ -373,27 +359,27 @@ export const pikkuServices = (
|
|
|
373
359
|
) => func
|
|
374
360
|
|
|
375
361
|
/**
|
|
376
|
-
* Creates a Pikku
|
|
362
|
+
* Creates a Pikku wire services factory.
|
|
377
363
|
* Use this to define services that are created per-request/session.
|
|
378
364
|
*
|
|
379
|
-
* @param func -
|
|
380
|
-
* @returns The
|
|
365
|
+
* @param func - Wire services factory function
|
|
366
|
+
* @returns The wire services factory function
|
|
381
367
|
*
|
|
382
368
|
* @example
|
|
383
369
|
* \`\`\`typescript
|
|
384
|
-
* export const
|
|
370
|
+
* export const createWireServices = pikkuWireServices(async (services, wire) => {
|
|
371
|
+
* const session = await wire.session?.get()
|
|
385
372
|
* return {
|
|
386
373
|
* userCache: new UserCache(session?.userId)
|
|
387
374
|
* }
|
|
388
375
|
* })
|
|
389
376
|
* \`\`\`
|
|
390
377
|
*/
|
|
391
|
-
export const
|
|
378
|
+
export const pikkuWireServices = (
|
|
392
379
|
func: (
|
|
393
380
|
services: SingletonServices,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
) => Promise<RequiredSessionServices>
|
|
381
|
+
wire: any
|
|
382
|
+
) => Promise<RequiredWireServices>
|
|
397
383
|
) => func
|
|
398
384
|
|
|
399
385
|
/**
|
|
@@ -120,8 +120,17 @@ export async function generateOpenAPISpec(
|
|
|
120
120
|
|
|
121
121
|
for (const routeMeta of Object.values(httpMeta)) {
|
|
122
122
|
for (const meta of Object.values(routeMeta)) {
|
|
123
|
-
const {
|
|
124
|
-
|
|
123
|
+
const {
|
|
124
|
+
route,
|
|
125
|
+
method,
|
|
126
|
+
inputTypes,
|
|
127
|
+
pikkuFuncName,
|
|
128
|
+
params,
|
|
129
|
+
query,
|
|
130
|
+
errors,
|
|
131
|
+
description,
|
|
132
|
+
tags,
|
|
133
|
+
} = meta
|
|
125
134
|
const functionMeta = functionsMeta[pikkuFuncName]
|
|
126
135
|
if (!functionMeta) {
|
|
127
136
|
logger.error(
|
|
@@ -139,7 +148,7 @@ export async function generateOpenAPISpec(
|
|
|
139
148
|
}
|
|
140
149
|
|
|
141
150
|
const responses = {}
|
|
142
|
-
|
|
151
|
+
errors?.forEach((error) => {
|
|
143
152
|
const errorResponse = getErrorResponseForConstructorName(error)
|
|
144
153
|
if (errorResponse) {
|
|
145
154
|
responses[errorResponse.status] = {
|
|
@@ -150,9 +159,9 @@ export async function generateOpenAPISpec(
|
|
|
150
159
|
|
|
151
160
|
const operation: any = {
|
|
152
161
|
description:
|
|
153
|
-
|
|
162
|
+
description ||
|
|
154
163
|
`This endpoint handles the ${method.toUpperCase()} request for the route ${route}.`,
|
|
155
|
-
tags:
|
|
164
|
+
tags: tags || [route.split('/')[1] || 'default'],
|
|
156
165
|
parameters: [],
|
|
157
166
|
responses: {
|
|
158
167
|
...responses,
|
|
@@ -2,11 +2,18 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
|
|
|
2
2
|
import { serializeFileImports } from '../../../utils/file-imports-serializer.js'
|
|
3
3
|
import { writeFileInDir } from '../../../utils/file-writer.js'
|
|
4
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
|
|
5
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
5
6
|
|
|
6
7
|
export const pikkuHTTP: any = pikkuSessionlessFunc<void, boolean>({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const visitState = await getInspectorState()
|
|
9
|
-
const {
|
|
10
|
+
const {
|
|
11
|
+
httpWiringsFile,
|
|
12
|
+
httpWiringMetaFile,
|
|
13
|
+
httpWiringMetaJsonFile,
|
|
14
|
+
packageMappings,
|
|
15
|
+
schema,
|
|
16
|
+
} = config
|
|
10
17
|
const { http } = visitState
|
|
11
18
|
|
|
12
19
|
await writeFileInDir(
|
|
@@ -19,11 +26,30 @@ export const pikkuHTTP: any = pikkuSessionlessFunc<void, boolean>({
|
|
|
19
26
|
packageMappings
|
|
20
27
|
)
|
|
21
28
|
)
|
|
29
|
+
|
|
30
|
+
await writeFileInDir(
|
|
31
|
+
logger,
|
|
32
|
+
httpWiringMetaJsonFile,
|
|
33
|
+
JSON.stringify(http.meta, null, 2)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
const jsonImportPath = getFileImportRelativePath(
|
|
37
|
+
httpWiringMetaFile,
|
|
38
|
+
httpWiringMetaJsonFile,
|
|
39
|
+
packageMappings
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false
|
|
43
|
+
const importStatement = supportsImportAttributes
|
|
44
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
45
|
+
: `import metaData from '${jsonImportPath}'`
|
|
46
|
+
|
|
22
47
|
await writeFileInDir(
|
|
23
48
|
logger,
|
|
24
49
|
httpWiringMetaFile,
|
|
25
|
-
`import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta',
|
|
50
|
+
`import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState('http', 'meta', metaData as HTTPWiringsMeta)`
|
|
26
51
|
)
|
|
52
|
+
|
|
27
53
|
return true
|
|
28
54
|
},
|
|
29
55
|
middleware: [
|
|
@@ -18,7 +18,7 @@ import type { CoreHTTPFunctionWiring } from '@pikku/core/http'
|
|
|
18
18
|
* @template Out - Output type for the HTTP wiring
|
|
19
19
|
* @template Route - String literal type for the HTTP path (e.g., "/users/:id")
|
|
20
20
|
*/
|
|
21
|
-
type HTTPWiring<In, Out, Route extends string> = CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction<In, Out>, PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
|
|
21
|
+
type HTTPWiring<In, Out, Route extends string> = CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction<In, Out, 'rpc' | 'session'>, PikkuFunctionSessionless<In, Out, 'rpc' | 'session'>, PikkuPermission<In>, PikkuMiddleware>
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Registers an HTTP wiring with the Pikku framework.
|
|
@@ -4,6 +4,7 @@ import { writeFileInDir } from '../../../utils/file-writer.js'
|
|
|
4
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
|
|
5
5
|
import { readFile } from 'fs/promises'
|
|
6
6
|
import { join } from 'path'
|
|
7
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
7
8
|
|
|
8
9
|
// Helper function to generate arguments from schema
|
|
9
10
|
const generateArgumentsFromSchema = async (
|
|
@@ -66,6 +67,7 @@ export const pikkuMCP: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
|
66
67
|
mcpWiringsMetaFile,
|
|
67
68
|
packageMappings,
|
|
68
69
|
schemaDirectory,
|
|
70
|
+
schema,
|
|
69
71
|
} = config
|
|
70
72
|
|
|
71
73
|
await writeFileInDir(
|
|
@@ -81,7 +83,7 @@ export const pikkuMCP: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
|
81
83
|
|
|
82
84
|
// Populate arguments for prompts meta before serializing
|
|
83
85
|
const promptsMetaWithArguments = { ...mcpEndpoints.promptsMeta }
|
|
84
|
-
for (const promptMeta of Object.values(promptsMetaWithArguments)) {
|
|
86
|
+
for (const promptMeta of Object.values(promptsMetaWithArguments) as any[]) {
|
|
85
87
|
const functionMeta = functions.meta[promptMeta.pikkuFuncName]
|
|
86
88
|
if (functionMeta) {
|
|
87
89
|
const inputType = functionMeta.inputs?.[0]
|
|
@@ -94,13 +96,37 @@ export const pikkuMCP: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
|
|
99
|
+
const metaData = {
|
|
100
|
+
resourcesMeta: mcpEndpoints.resourcesMeta,
|
|
101
|
+
toolsMeta: mcpEndpoints.toolsMeta,
|
|
102
|
+
promptsMeta: promptsMetaWithArguments,
|
|
103
|
+
}
|
|
104
|
+
await writeFileInDir(
|
|
105
|
+
logger,
|
|
106
|
+
config.mcpWiringsMetaJsonFile,
|
|
107
|
+
JSON.stringify(metaData, null, 2)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
const jsonImportPath = getFileImportRelativePath(
|
|
111
|
+
mcpWiringsMetaFile,
|
|
112
|
+
config.mcpWiringsMetaJsonFile,
|
|
113
|
+
packageMappings
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false
|
|
117
|
+
const importStatement = supportsImportAttributes
|
|
118
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
119
|
+
: `import metaData from '${jsonImportPath}'`
|
|
120
|
+
|
|
97
121
|
await writeFileInDir(
|
|
98
122
|
logger,
|
|
99
123
|
mcpWiringsMetaFile,
|
|
100
124
|
`import { pikkuState } from '@pikku/core'
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
pikkuState('mcp', '
|
|
125
|
+
import type { MCPResourceMeta, MCPToolMeta, MCPPromptMeta } from '@pikku/core/mcp'
|
|
126
|
+
${importStatement}
|
|
127
|
+
pikkuState('mcp', 'resourcesMeta', metaData.resourcesMeta as MCPResourceMeta)
|
|
128
|
+
pikkuState('mcp', 'toolsMeta', metaData.toolsMeta as MCPToolMeta)
|
|
129
|
+
pikkuState('mcp', 'promptsMeta', metaData.promptsMeta as MCPPromptMeta)`
|
|
104
130
|
)
|
|
105
131
|
|
|
106
132
|
return true
|
|
@@ -27,21 +27,21 @@ import type { PikkuFunctionConfig, PikkuFunctionSessionless } from '${functionTy
|
|
|
27
27
|
* @template In - Input type for the resource request
|
|
28
28
|
* @template URI - URI template string type for compile-time parameter validation
|
|
29
29
|
*/
|
|
30
|
-
type MCPResourceWiring<In, URI extends string> = CoreMCPResource<PikkuFunctionConfig<In, MCPResourceResponse>> & { uri: URI }
|
|
30
|
+
type MCPResourceWiring<In, URI extends string> = CoreMCPResource<PikkuFunctionConfig<In, MCPResourceResponse, 'rpc' | 'session' | 'mcp'>> & { uri: URI }
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Type definition for MCP tools that AI models can invoke.
|
|
34
34
|
*
|
|
35
35
|
* @template In - Input type for the tool invocation
|
|
36
36
|
*/
|
|
37
|
-
type MCPToolWiring<In> = CoreMCPTool<PikkuFunctionConfig<In, MCPToolResponse>>
|
|
37
|
+
type MCPToolWiring<In> = CoreMCPTool<PikkuFunctionConfig<In, MCPToolResponse, 'rpc' | 'session' | 'mcp'>>
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Type definition for MCP prompts that provide templates to AI models.
|
|
41
41
|
*
|
|
42
42
|
* @template In - Input type for the prompt parameters
|
|
43
43
|
*/
|
|
44
|
-
type MCPPromptWiring<In> = CoreMCPPrompt<PikkuFunctionConfig<In, MCPPromptResponse>>
|
|
44
|
+
type MCPPromptWiring<In> = CoreMCPPrompt<PikkuFunctionConfig<In, MCPPromptResponse, 'rpc' | 'session' | 'mcp'>>
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* Registers an MCP resource with the Pikku framework.
|
|
@@ -93,12 +93,12 @@ export const wireMCPPrompt = <In>(
|
|
|
93
93
|
*/
|
|
94
94
|
export const pikkuMCPPromptFunc = <In>(
|
|
95
95
|
func:
|
|
96
|
-
| PikkuFunctionSessionless<In, MCPPromptResponse>
|
|
96
|
+
| PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
97
97
|
| {
|
|
98
|
-
func: PikkuFunctionSessionless<In, MCPPromptResponse>
|
|
98
|
+
func: PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
99
99
|
name?: string
|
|
100
100
|
}
|
|
101
|
-
): PikkuFunctionConfig<In, MCPPromptResponse> => {
|
|
101
|
+
): PikkuFunctionConfig<In, MCPPromptResponse, 'mcp'> => {
|
|
102
102
|
return typeof func === 'function' ? { func } : func
|
|
103
103
|
}
|
|
104
104
|
|
|
@@ -112,12 +112,12 @@ export const pikkuMCPPromptFunc = <In>(
|
|
|
112
112
|
*/
|
|
113
113
|
export const pikkuMCPToolFunc = <In>(
|
|
114
114
|
func:
|
|
115
|
-
| PikkuFunctionSessionless<In, MCPToolResponse,
|
|
115
|
+
| PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
116
116
|
| {
|
|
117
|
-
func: PikkuFunctionSessionless<In, MCPToolResponse,
|
|
117
|
+
func: PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
118
118
|
name?: string
|
|
119
119
|
}
|
|
120
|
-
): PikkuFunctionConfig<In, MCPToolResponse> => {
|
|
120
|
+
): PikkuFunctionConfig<In, MCPToolResponse, 'mcp'> => {
|
|
121
121
|
return typeof func === 'function' ? { func } : func
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -131,12 +131,12 @@ export const pikkuMCPToolFunc = <In>(
|
|
|
131
131
|
*/
|
|
132
132
|
export const pikkuMCPResourceFunc = <In>(
|
|
133
133
|
func:
|
|
134
|
-
| PikkuFunctionSessionless<In, MCPResourceResponse,
|
|
134
|
+
| PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
135
135
|
| {
|
|
136
|
-
func: PikkuFunctionSessionless<In, MCPResourceResponse,
|
|
136
|
+
func: PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
137
137
|
name?: string
|
|
138
138
|
}
|
|
139
|
-
): PikkuFunctionConfig<In, MCPResourceResponse> => {
|
|
139
|
+
): PikkuFunctionConfig<In, MCPResourceResponse, 'mcp'> => {
|
|
140
140
|
return typeof func === 'function' ? { func } : func
|
|
141
141
|
}
|
|
142
142
|
`
|
|
@@ -3,6 +3,7 @@ import { writeFileInDir } from '../../../utils/file-writer.js'
|
|
|
3
3
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
|
|
4
4
|
import { serializeMiddlewareImports } from './serialize-middleware-imports.js'
|
|
5
5
|
import { serializeMiddlewareGroupsMeta } from './serialize-middleware-groups-meta.js'
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
6
7
|
|
|
7
8
|
export const pikkuMiddleware: any = pikkuSessionlessFunc<
|
|
8
9
|
void,
|
|
@@ -11,7 +12,7 @@ export const pikkuMiddleware: any = pikkuSessionlessFunc<
|
|
|
11
12
|
func: async ({ logger, config, getInspectorState }) => {
|
|
12
13
|
const state = await getInspectorState()
|
|
13
14
|
const { middleware } = state
|
|
14
|
-
const { middlewareFile, packageMappings } = config
|
|
15
|
+
const { middlewareFile, packageMappings, schema } = config
|
|
15
16
|
|
|
16
17
|
let filesGenerated = false
|
|
17
18
|
|
|
@@ -20,12 +21,44 @@ export const pikkuMiddleware: any = pikkuSessionlessFunc<
|
|
|
20
21
|
const hasTagGroups = state.middleware.tagMiddleware.size > 0
|
|
21
22
|
|
|
22
23
|
if (hasHTTPGroups || hasTagGroups) {
|
|
24
|
+
const metaData = serializeMiddlewareGroupsMeta(state)
|
|
25
|
+
|
|
26
|
+
// Write JSON file
|
|
23
27
|
await writeFileInDir(
|
|
24
28
|
logger,
|
|
29
|
+
config.middlewareGroupsMetaJsonFile,
|
|
30
|
+
JSON.stringify(metaData, null, 2)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
// Calculate relative path from TS file to JSON file
|
|
34
|
+
const jsonImportPath = getFileImportRelativePath(
|
|
25
35
|
config.middlewareGroupsMetaFile,
|
|
26
|
-
|
|
36
|
+
config.middlewareGroupsMetaJsonFile,
|
|
37
|
+
packageMappings
|
|
27
38
|
)
|
|
28
39
|
|
|
40
|
+
// Write TypeScript file that imports JSON
|
|
41
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false
|
|
42
|
+
const importStatement = supportsImportAttributes
|
|
43
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
44
|
+
: `import metaData from '${jsonImportPath}'`
|
|
45
|
+
|
|
46
|
+
const tsContent = `import { pikkuState } from '@pikku/core'
|
|
47
|
+
${importStatement}
|
|
48
|
+
|
|
49
|
+
// HTTP middleware groups metadata
|
|
50
|
+
if (metaData.httpGroups && Object.keys(metaData.httpGroups).length > 0) {
|
|
51
|
+
pikkuState('middleware', 'httpGroupMeta', metaData.httpGroups)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Tag middleware groups metadata
|
|
55
|
+
if (metaData.tagGroups && Object.keys(metaData.tagGroups).length > 0) {
|
|
56
|
+
pikkuState('middleware', 'tagGroupMeta', metaData.tagGroups)
|
|
57
|
+
}
|
|
58
|
+
`
|
|
59
|
+
|
|
60
|
+
await writeFileInDir(logger, config.middlewareGroupsMetaFile, tsContent)
|
|
61
|
+
|
|
29
62
|
// Always generate middleware imports file when groups exist (even if empty)
|
|
30
63
|
await writeFileInDir(
|
|
31
64
|
logger,
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { InspectorState } from '@pikku/inspector'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Generates the middleware groups metadata
|
|
4
|
+
* Generates the middleware groups metadata that stores metadata about
|
|
5
5
|
* tag-based and HTTP middleware groups for visualization and inspection.
|
|
6
6
|
*
|
|
7
7
|
* This includes services, middleware count, factory status, etc.
|
|
8
8
|
*/
|
|
9
9
|
export const serializeMiddlewareGroupsMeta = (state: InspectorState) => {
|
|
10
|
-
const lines: string[] = [`import { pikkuState } from '@pikku/core'`, ``]
|
|
11
|
-
|
|
12
10
|
// Serialize HTTP middleware groups metadata
|
|
13
11
|
const httpGroups: Record<string, any> = {}
|
|
14
12
|
for (const [pattern, meta] of state.http.routeMiddleware.entries()) {
|
|
@@ -22,14 +20,6 @@ export const serializeMiddlewareGroupsMeta = (state: InspectorState) => {
|
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
22
|
|
|
25
|
-
if (Object.keys(httpGroups).length > 0) {
|
|
26
|
-
lines.push(`// HTTP middleware groups metadata`)
|
|
27
|
-
lines.push(
|
|
28
|
-
`pikkuState('middleware', 'httpGroupMeta', ${JSON.stringify(httpGroups, null, 2)})`
|
|
29
|
-
)
|
|
30
|
-
lines.push(``)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
23
|
// Serialize tag middleware groups metadata
|
|
34
24
|
const tagGroups: Record<string, any> = {}
|
|
35
25
|
for (const [tag, meta] of state.middleware.tagMiddleware.entries()) {
|
|
@@ -43,13 +33,8 @@ export const serializeMiddlewareGroupsMeta = (state: InspectorState) => {
|
|
|
43
33
|
}
|
|
44
34
|
}
|
|
45
35
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
`pikkuState('middleware', 'tagGroupMeta', ${JSON.stringify(tagGroups, null, 2)})`
|
|
50
|
-
)
|
|
51
|
-
lines.push(``)
|
|
36
|
+
return {
|
|
37
|
+
httpGroups,
|
|
38
|
+
tagGroups,
|
|
52
39
|
}
|
|
53
|
-
|
|
54
|
-
return lines.join('\n')
|
|
55
40
|
}
|
|
@@ -17,10 +17,10 @@ export const pikkuPermissions: any = pikkuSessionlessFunc<
|
|
|
17
17
|
// Check if there are any permission group factories
|
|
18
18
|
const hasHTTPFactories = Array.from(
|
|
19
19
|
state.http.routePermissions.values()
|
|
20
|
-
).some((meta) => meta.exportName && meta.isFactory)
|
|
20
|
+
).some((meta: any) => meta.exportName && meta.isFactory)
|
|
21
21
|
const hasTagFactories = Array.from(
|
|
22
22
|
state.permissions.tagPermissions.values()
|
|
23
|
-
).some((meta) => meta.exportName && meta.isFactory)
|
|
23
|
+
).some((meta: any) => meta.exportName && meta.isFactory)
|
|
24
24
|
const hasFactories = hasHTTPFactories || hasTagFactories
|
|
25
25
|
|
|
26
26
|
// Generate permissions imports file if there are factories
|