@pikku/cli 0.11.2 → 0.11.3
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 +63 -6
- package/.pikku/channel/pikku-channels-map.gen.d.ts +4 -4
- package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
- package/.pikku/channel/pikku-channels.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-channel.ts +1 -1
- package/.pikku/cli/pikku-cli-client.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-types.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +2 -2
- package/.pikku/cli/pikku-cli-wirings.gen.ts +1 -1
- package/.pikku/cli/pikku-cli.gen.ts +1 -1
- package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
- package/.pikku/function/pikku-function-types.gen.ts +181 -35
- package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
- package/.pikku/function/pikku-functions-meta.gen.json +88 -420
- package/.pikku/function/pikku-functions-meta.gen.ts +2 -2
- package/.pikku/http/pikku-http-types.gen.ts +19 -3
- package/.pikku/http/pikku-http-wirings-map.gen.d.ts +4 -4
- package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
- package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
- package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
- package/.pikku/mcp/pikku-mcp-types.gen.ts +69 -17
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +4 -4
- package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
- package/.pikku/pikku-bootstrap.gen.ts +7 -9
- package/.pikku/pikku-services.gen.ts +3 -2
- package/.pikku/pikku-types.gen.ts +4 -1
- package/.pikku/pikku-websocket.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +4 -4
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +2 -2
- package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
- package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +4 -1
- package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +12 -7
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +15 -9
- package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +2 -2
- package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
- package/.pikku/schemas/register.gen.ts +9 -1
- package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
- package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
- package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
- package/.pikku/services/config.gen.json +11 -6
- package/.pikku/services/getInspectorState.gen.json +2 -2
- package/.pikku/services/jwt.gen.json +2 -2
- package/.pikku/services/logger.gen.json +2 -2
- package/.pikku/services/queueService.gen.json +2 -2
- package/.pikku/services/schedulerService.gen.json +2 -2
- package/.pikku/services/schema.gen.json +2 -2
- package/.pikku/services/secrets.gen.json +13 -0
- package/.pikku/services/variables.gen.json +2 -2
- package/.pikku/services/workflowService.gen.json +6 -6
- package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
- package/.pikku/workflow/pikku-workflow-types.gen.ts +297 -45
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -4
- package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -6
- package/CHANGELOG.md +23 -1
- package/cli.schema.json +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +47 -5
- package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
- package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
- 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 +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
- package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +123 -31
- package/dist/.pikku/function/pikku-function-types.gen.js +37 -51
- package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
- package/dist/.pikku/function/pikku-functions-meta.gen.json +88 -420
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +18 -3
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
- 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 +54 -14
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +4 -4
- 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 +7 -9
- package/dist/.pikku/pikku-bootstrap.gen.js +7 -9
- package/dist/.pikku/pikku-services.gen.d.ts +3 -2
- package/dist/.pikku/pikku-services.gen.js +1 -0
- package/dist/.pikku/pikku-types.gen.d.ts +2 -1
- package/dist/.pikku/pikku-types.gen.js +3 -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 +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
- 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 +4 -1
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +4 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +2 -2
- 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 +5 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +207 -37
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +104 -28
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -3
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -6
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +2 -6
- package/dist/src/functions/commands/all.js +117 -79
- package/dist/src/functions/commands/bootstrap.js +2 -9
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +0 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +49 -35
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +49 -35
- package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
- package/dist/src/functions/wirings/channels/serialize-channel-types.js +62 -5
- package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
- package/dist/src/functions/wirings/cli/pikku-command-cli.js +10 -2
- package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
- package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
- package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +33 -18
- package/dist/src/functions/wirings/functions/pikku-command-services.js +1 -1
- package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
- package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
- package/dist/src/functions/wirings/functions/schemas.js +5 -4
- package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
- package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
- package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +181 -34
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
- package/dist/src/functions/wirings/http/openapi-spec-generator.js +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
- package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
- package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
- package/dist/src/functions/wirings/http/serialize-http-types.js +18 -2
- package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +15 -6
- package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
- package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +68 -16
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +5 -2
- package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
- package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
- package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
- package/dist/src/functions/wirings/package/serialize-package.js +32 -0
- package/dist/src/functions/wirings/queue/pikku-command-queue.js +10 -2
- package/dist/src/functions/wirings/queue/pikku-queue.js +1 -9
- package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
- package/dist/src/functions/wirings/queue/serialize-queue-meta.js +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +3 -0
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +1 -1
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +10 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +56 -18
- package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -3
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -18
- package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +3 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +299 -45
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +14 -27
- package/dist/src/services.js +4 -1
- package/dist/src/utils/command-summary.d.ts +2 -0
- package/dist/src/utils/command-summary.js +2 -0
- package/dist/src/utils/custom-types-generator.js +13 -15
- package/dist/src/utils/generate-bootstrap-file.js +1 -1
- package/dist/src/utils/pikku-cli-config.js +37 -9
- package/dist/src/utils/schema-generator.d.ts +4 -3
- package/dist/src/utils/schema-generator.js +135 -15
- package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
- package/dist/src/utils/strip-verbose-meta.js +210 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -4
- package/src/functions/commands/all.ts +144 -97
- package/src/functions/commands/bootstrap.ts +2 -10
- package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +0 -1
- package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +49 -35
- package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +49 -35
- package/src/functions/wirings/channels/pikku-channels.ts +1 -1
- package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
- package/src/functions/wirings/channels/serialize-channel-types.ts +62 -5
- package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
- package/src/functions/wirings/cli/pikku-command-cli.ts +21 -2
- package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
- package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
- package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
- package/src/functions/wirings/functions/pikku-command-function-types-split.ts +3 -2
- package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
- package/src/functions/wirings/functions/pikku-command-functions.ts +47 -37
- package/src/functions/wirings/functions/pikku-command-services.ts +1 -1
- package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
- package/src/functions/wirings/functions/schemas.ts +14 -4
- package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
- package/src/functions/wirings/functions/serialize-function-types.ts +182 -34
- package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
- package/src/functions/wirings/http/openapi-spec-generator.ts +1 -1
- package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
- package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
- package/src/functions/wirings/http/pikku-http-routes.ts +1 -1
- package/src/functions/wirings/http/serialize-http-types.ts +18 -2
- package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
- package/src/functions/wirings/mcp/pikku-command-mcp.ts +32 -10
- package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
- package/src/functions/wirings/mcp/serialize-mcp-types.ts +68 -16
- package/src/functions/wirings/middleware/pikku-command-middleware.ts +6 -2
- package/src/functions/wirings/package/pikku-command-package.ts +81 -0
- package/src/functions/wirings/package/serialize-package.ts +69 -0
- package/src/functions/wirings/queue/pikku-command-queue.ts +22 -2
- package/src/functions/wirings/queue/pikku-queue.ts +1 -10
- package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
- package/src/functions/wirings/queue/serialize-queue-meta.ts +1 -1
- package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
- package/src/functions/wirings/rpc/pikku-command-rpc.ts +1 -1
- package/src/functions/wirings/rpc/serialize-remote-rpc.ts +3 -0
- package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +1 -1
- package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
- package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +22 -1
- package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +1 -1
- package/src/functions/wirings/workflow/pikku-command-workflow.ts +104 -37
- package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
- package/src/functions/wirings/workflow/serialize-workflow-meta.ts +66 -26
- package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
- package/src/functions/wirings/workflow/serialize-workflow-types.ts +299 -45
- package/src/functions/wirings/workflow/serialize-workflow-workers.ts +14 -27
- package/src/services.ts +8 -1
- package/src/utils/command-summary.ts +4 -0
- package/src/utils/custom-types-generator.ts +15 -15
- package/src/utils/generate-bootstrap-file.ts +1 -1
- package/src/utils/pikku-cli-config.ts +51 -18
- package/src/utils/schema-generator.ts +185 -22
- package/src/utils/strip-verbose-meta.ts +254 -0
- package/types/config.d.ts +37 -3
- package/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
- package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -6
- package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -6
- package/dist/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -13
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +0 -8
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +0 -30
- package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
- package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -29
- package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +0 -47
- /package/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
- /package/dist/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
|
@@ -44,16 +44,18 @@ export const serializeMCPJson = async (
|
|
|
44
44
|
return undefined
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
const schemaPath = join(
|
|
48
|
+
schemaDirectory,
|
|
49
|
+
'schemas',
|
|
50
|
+
`${uniqueName}.schema.json`
|
|
51
|
+
)
|
|
52
|
+
|
|
47
53
|
try {
|
|
48
|
-
const schemaPath = join(
|
|
49
|
-
schemaDirectory,
|
|
50
|
-
'schemas',
|
|
51
|
-
`${uniqueName}.schema.json`
|
|
52
|
-
)
|
|
53
54
|
const schemaContent = await readFile(schemaPath, 'utf-8')
|
|
54
55
|
return JSON.parse(schemaContent)
|
|
55
56
|
} catch (e) {
|
|
56
|
-
logger.warn(`Could not load schema for type: ${uniqueName}`)
|
|
57
|
+
logger.warn(`Serialize MCP: Could not load schema for type: ${uniqueName} from ${schemaPath}`)
|
|
58
|
+
console.error(e)
|
|
57
59
|
return undefined
|
|
58
60
|
}
|
|
59
61
|
}
|
|
@@ -19,7 +19,8 @@ import {
|
|
|
19
19
|
AssertMCPResourceURIParams
|
|
20
20
|
} from '@pikku/core/mcp'
|
|
21
21
|
|
|
22
|
-
import type { PikkuFunctionConfig, PikkuFunctionSessionless } from '${functionTypesImportPath}'
|
|
22
|
+
import type { PikkuFunctionConfig, PikkuFunctionSessionless, InferZodOutput } from '${functionTypesImportPath}'
|
|
23
|
+
import type { ZodLike } from '@pikku/core'
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Type definition for MCP resources that provide data to AI models.
|
|
@@ -83,60 +84,111 @@ export const wireMCPPrompt = <In>(
|
|
|
83
84
|
wireMCPPromptCore(mcpPrompt as any)
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Configuration for MCP prompt with Zod schema input validation.
|
|
89
|
+
*/
|
|
90
|
+
type MCPPromptFuncConfigWithSchema<InputSchema extends ZodLike> = {
|
|
91
|
+
func: PikkuFunctionSessionless<InferZodOutput<InputSchema>, MCPPromptResponse, 'mcp' | 'rpc'>
|
|
92
|
+
name?: string
|
|
93
|
+
input: InputSchema
|
|
94
|
+
}
|
|
95
|
+
|
|
86
96
|
/**
|
|
87
97
|
* Creates a function for handling MCP prompt requests.
|
|
88
98
|
* These functions generate prompt templates for AI models.
|
|
89
99
|
*
|
|
90
|
-
*
|
|
100
|
+
* Supports two patterns:
|
|
101
|
+
* 1. Generic types: \`pikkuMCPPromptFunc<Input>({ func: ... })\`
|
|
102
|
+
* 2. Zod schemas: \`pikkuMCPPromptFunc({ input: z.object(...), func: ... })\`
|
|
103
|
+
*
|
|
104
|
+
* @template In - Input type for the prompt parameters (inferred from schema if provided)
|
|
91
105
|
* @param func - Function definition, either direct function or configuration object
|
|
92
106
|
* @returns The unwrapped function for internal use
|
|
93
107
|
*/
|
|
94
|
-
export
|
|
108
|
+
export function pikkuMCPPromptFunc<InputSchema extends ZodLike>(
|
|
109
|
+
config: MCPPromptFuncConfigWithSchema<InputSchema>
|
|
110
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, MCPPromptResponse, 'mcp' | 'rpc'>
|
|
111
|
+
export function pikkuMCPPromptFunc<In>(
|
|
95
112
|
func:
|
|
96
|
-
| PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
113
|
+
| PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp' | 'rpc'>
|
|
97
114
|
| {
|
|
98
|
-
func: PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
115
|
+
func: PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp' | 'rpc'>
|
|
99
116
|
name?: string
|
|
100
117
|
}
|
|
101
|
-
): PikkuFunctionConfig<In, MCPPromptResponse, 'mcp'
|
|
118
|
+
): PikkuFunctionConfig<In, MCPPromptResponse, 'mcp' | 'rpc'>
|
|
119
|
+
export function pikkuMCPPromptFunc(func: any): any {
|
|
102
120
|
return typeof func === 'function' ? { func } : func
|
|
103
121
|
}
|
|
104
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Configuration for MCP tool with Zod schema input validation.
|
|
125
|
+
*/
|
|
126
|
+
type MCPToolFuncConfigWithSchema<InputSchema extends ZodLike> = {
|
|
127
|
+
func: PikkuFunctionSessionless<InferZodOutput<InputSchema>, MCPToolResponse, 'mcp' | 'rpc'>
|
|
128
|
+
name?: string
|
|
129
|
+
input: InputSchema
|
|
130
|
+
}
|
|
131
|
+
|
|
105
132
|
/**
|
|
106
133
|
* Creates a function for handling MCP tool invocations.
|
|
107
134
|
* These functions perform actions that AI models can request.
|
|
108
135
|
*
|
|
109
|
-
*
|
|
136
|
+
* Supports two patterns:
|
|
137
|
+
* 1. Generic types: \`pikkuMCPToolFunc<Input>({ func: ... })\`
|
|
138
|
+
* 2. Zod schemas: \`pikkuMCPToolFunc({ input: z.object(...), func: ... })\`
|
|
139
|
+
*
|
|
140
|
+
* @template In - Input type for the tool invocation (inferred from schema if provided)
|
|
110
141
|
* @param func - Function definition, either direct function or configuration object
|
|
111
142
|
* @returns The unwrapped function for internal use
|
|
112
143
|
*/
|
|
113
|
-
export
|
|
144
|
+
export function pikkuMCPToolFunc<InputSchema extends ZodLike>(
|
|
145
|
+
config: MCPToolFuncConfigWithSchema<InputSchema>
|
|
146
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, MCPToolResponse, 'mcp' | 'rpc'>
|
|
147
|
+
export function pikkuMCPToolFunc<In>(
|
|
114
148
|
func:
|
|
115
|
-
| PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
149
|
+
| PikkuFunctionSessionless<In, MCPToolResponse, 'mcp' | 'rpc'>
|
|
116
150
|
| {
|
|
117
|
-
func: PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
151
|
+
func: PikkuFunctionSessionless<In, MCPToolResponse, 'mcp' | 'rpc'>
|
|
118
152
|
name?: string
|
|
119
153
|
}
|
|
120
|
-
): PikkuFunctionConfig<In, MCPToolResponse, 'mcp'
|
|
154
|
+
): PikkuFunctionConfig<In, MCPToolResponse, 'mcp' | 'rpc'>
|
|
155
|
+
export function pikkuMCPToolFunc(func: any): any {
|
|
121
156
|
return typeof func === 'function' ? { func } : func
|
|
122
157
|
}
|
|
123
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Configuration for MCP resource with Zod schema input validation.
|
|
161
|
+
*/
|
|
162
|
+
type MCPResourceFuncConfigWithSchema<InputSchema extends ZodLike> = {
|
|
163
|
+
func: PikkuFunctionSessionless<InferZodOutput<InputSchema>, MCPResourceResponse, 'mcp' | 'rpc'>
|
|
164
|
+
name?: string
|
|
165
|
+
input: InputSchema
|
|
166
|
+
}
|
|
167
|
+
|
|
124
168
|
/**
|
|
125
169
|
* Creates a function for handling MCP resource requests.
|
|
126
170
|
* These functions provide data that AI models can access.
|
|
127
171
|
*
|
|
128
|
-
*
|
|
172
|
+
* Supports two patterns:
|
|
173
|
+
* 1. Generic types: \`pikkuMCPResourceFunc<Input>({ func: ... })\`
|
|
174
|
+
* 2. Zod schemas: \`pikkuMCPResourceFunc({ input: z.object(...), func: ... })\`
|
|
175
|
+
*
|
|
176
|
+
* @template In - Input type for the resource request (inferred from schema if provided)
|
|
129
177
|
* @param func - Function definition, either direct function or configuration object
|
|
130
178
|
* @returns The unwrapped function for internal use
|
|
131
179
|
*/
|
|
132
|
-
export
|
|
180
|
+
export function pikkuMCPResourceFunc<InputSchema extends ZodLike>(
|
|
181
|
+
config: MCPResourceFuncConfigWithSchema<InputSchema>
|
|
182
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, MCPResourceResponse, 'mcp' | 'rpc'>
|
|
183
|
+
export function pikkuMCPResourceFunc<In>(
|
|
133
184
|
func:
|
|
134
|
-
| PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
185
|
+
| PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp' | 'rpc'>
|
|
135
186
|
| {
|
|
136
|
-
func: PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
187
|
+
func: PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp' | 'rpc'>
|
|
137
188
|
name?: string
|
|
138
189
|
}
|
|
139
|
-
): PikkuFunctionConfig<In, MCPResourceResponse, 'mcp'
|
|
190
|
+
): PikkuFunctionConfig<In, MCPResourceResponse, 'mcp' | 'rpc'>
|
|
191
|
+
export function pikkuMCPResourceFunc(func: any): any {
|
|
140
192
|
return typeof func === 'function' ? { func } : func
|
|
141
193
|
}
|
|
142
194
|
`
|
|
@@ -43,17 +43,21 @@ export const pikkuMiddleware: any = pikkuSessionlessFunc<
|
|
|
43
43
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
44
44
|
: `import metaData from '${jsonImportPath}'`
|
|
45
45
|
|
|
46
|
+
const packageNameValue = config.externalPackageName
|
|
47
|
+
? `'${config.externalPackageName}'`
|
|
48
|
+
: 'null'
|
|
49
|
+
|
|
46
50
|
const tsContent = `import { pikkuState } from '@pikku/core'
|
|
47
51
|
${importStatement}
|
|
48
52
|
|
|
49
53
|
// HTTP middleware groups metadata
|
|
50
54
|
if (metaData.httpGroups && Object.keys(metaData.httpGroups).length > 0) {
|
|
51
|
-
pikkuState('middleware', 'httpGroupMeta', metaData.httpGroups)
|
|
55
|
+
pikkuState(${packageNameValue}, 'middleware', 'httpGroupMeta', metaData.httpGroups)
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
// Tag middleware groups metadata
|
|
55
59
|
if (metaData.tagGroups && Object.keys(metaData.tagGroups).length > 0) {
|
|
56
|
-
pikkuState('middleware', 'tagGroupMeta', metaData.tagGroups)
|
|
60
|
+
pikkuState(${packageNameValue}, 'middleware', 'tagGroupMeta', metaData.tagGroups)
|
|
57
61
|
}
|
|
58
62
|
`
|
|
59
63
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
|
|
2
|
+
import { writeFileInDir } from '../../../utils/file-writer.js'
|
|
3
|
+
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
|
|
4
|
+
import { serializePackageFactories } from './serialize-package.js'
|
|
5
|
+
|
|
6
|
+
export const pikkuPackage: any = pikkuSessionlessFunc<
|
|
7
|
+
void,
|
|
8
|
+
boolean | undefined
|
|
9
|
+
>({
|
|
10
|
+
func: async ({ logger, config, getInspectorState }) => {
|
|
11
|
+
const { externalPackageName, packageMappings, packageFile } = config
|
|
12
|
+
|
|
13
|
+
// Only generate for external packages
|
|
14
|
+
if (!externalPackageName) {
|
|
15
|
+
logger.info({
|
|
16
|
+
message:
|
|
17
|
+
'Skipping package factories - not an external package (externalPackageName not set)',
|
|
18
|
+
type: 'skip',
|
|
19
|
+
})
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!packageFile) {
|
|
24
|
+
logger.info({
|
|
25
|
+
message: 'Skipping package factories - packageFile not configured',
|
|
26
|
+
type: 'skip',
|
|
27
|
+
})
|
|
28
|
+
return false
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const state = await getInspectorState()
|
|
32
|
+
const { filesAndMethods } = state
|
|
33
|
+
|
|
34
|
+
const {
|
|
35
|
+
pikkuConfigFactory,
|
|
36
|
+
singletonServicesFactory,
|
|
37
|
+
wireServicesFactory,
|
|
38
|
+
} = filesAndMethods
|
|
39
|
+
|
|
40
|
+
const content = serializePackageFactories(
|
|
41
|
+
packageFile,
|
|
42
|
+
externalPackageName,
|
|
43
|
+
pikkuConfigFactory
|
|
44
|
+
? {
|
|
45
|
+
file: pikkuConfigFactory.file,
|
|
46
|
+
variable: pikkuConfigFactory.variable,
|
|
47
|
+
}
|
|
48
|
+
: undefined,
|
|
49
|
+
singletonServicesFactory
|
|
50
|
+
? {
|
|
51
|
+
file: singletonServicesFactory.file,
|
|
52
|
+
variable: singletonServicesFactory.variable,
|
|
53
|
+
}
|
|
54
|
+
: undefined,
|
|
55
|
+
wireServicesFactory
|
|
56
|
+
? {
|
|
57
|
+
file: wireServicesFactory.file,
|
|
58
|
+
variable: wireServicesFactory.variable,
|
|
59
|
+
}
|
|
60
|
+
: undefined,
|
|
61
|
+
packageMappings
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if (!content) {
|
|
65
|
+
logger.info({
|
|
66
|
+
message: 'Skipping package factories - no service factories found',
|
|
67
|
+
type: 'skip',
|
|
68
|
+
})
|
|
69
|
+
return false
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
await writeFileInDir(logger, packageFile, content)
|
|
73
|
+
return true
|
|
74
|
+
},
|
|
75
|
+
middleware: [
|
|
76
|
+
logCommandInfoAndTime({
|
|
77
|
+
commandStart: 'Generating package service factories',
|
|
78
|
+
commandEnd: 'Generated package service factories',
|
|
79
|
+
}),
|
|
80
|
+
],
|
|
81
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
2
|
+
|
|
3
|
+
export interface PackageFactoryInfo {
|
|
4
|
+
file: string
|
|
5
|
+
variable: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const serializePackageFactories = (
|
|
9
|
+
outputPath: string,
|
|
10
|
+
packageName: string,
|
|
11
|
+
configFactory: PackageFactoryInfo | undefined,
|
|
12
|
+
singletonServicesFactory: PackageFactoryInfo | undefined,
|
|
13
|
+
wireServicesFactory: PackageFactoryInfo | undefined,
|
|
14
|
+
packageMappings: Record<string, string> = {}
|
|
15
|
+
) => {
|
|
16
|
+
const imports: string[] = [
|
|
17
|
+
`import { addPackageServiceFactories } from '@pikku/core'`,
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
const factoryEntries: string[] = []
|
|
21
|
+
|
|
22
|
+
if (configFactory) {
|
|
23
|
+
const filePath = getFileImportRelativePath(
|
|
24
|
+
outputPath,
|
|
25
|
+
configFactory.file,
|
|
26
|
+
packageMappings
|
|
27
|
+
)
|
|
28
|
+
imports.push(
|
|
29
|
+
`import { ${configFactory.variable} as createConfig } from '${filePath}'`
|
|
30
|
+
)
|
|
31
|
+
factoryEntries.push(` createConfig,`)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (singletonServicesFactory) {
|
|
35
|
+
const filePath = getFileImportRelativePath(
|
|
36
|
+
outputPath,
|
|
37
|
+
singletonServicesFactory.file,
|
|
38
|
+
packageMappings
|
|
39
|
+
)
|
|
40
|
+
imports.push(
|
|
41
|
+
`import { ${singletonServicesFactory.variable} as createSingletonServices } from '${filePath}'`
|
|
42
|
+
)
|
|
43
|
+
factoryEntries.push(` createSingletonServices,`)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (wireServicesFactory) {
|
|
47
|
+
const filePath = getFileImportRelativePath(
|
|
48
|
+
outputPath,
|
|
49
|
+
wireServicesFactory.file,
|
|
50
|
+
packageMappings
|
|
51
|
+
)
|
|
52
|
+
imports.push(
|
|
53
|
+
`import { ${wireServicesFactory.variable} as createWireServices } from '${filePath}'`
|
|
54
|
+
)
|
|
55
|
+
factoryEntries.push(` createWireServices,`)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Only generate if at least one factory is defined
|
|
59
|
+
if (factoryEntries.length === 0) {
|
|
60
|
+
return null
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return `${imports.join('\n')}
|
|
64
|
+
|
|
65
|
+
addPackageServiceFactories('${packageName}', {
|
|
66
|
+
${factoryEntries.join('\n')}
|
|
67
|
+
})
|
|
68
|
+
`
|
|
69
|
+
}
|
|
@@ -7,6 +7,10 @@ import {
|
|
|
7
7
|
serializeQueueMetaTS,
|
|
8
8
|
} from './serialize-queue-meta.js'
|
|
9
9
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
10
|
+
import {
|
|
11
|
+
stripVerboseFields,
|
|
12
|
+
hasVerboseFields,
|
|
13
|
+
} from '../../../utils/strip-verbose-meta.js'
|
|
10
14
|
|
|
11
15
|
export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
12
16
|
func: async ({ logger, config, getInspectorState }) => {
|
|
@@ -20,13 +24,29 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
|
20
24
|
} = config
|
|
21
25
|
const { queueWorkers } = visitState
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
const fullMeta = serializeQueueMeta(queueWorkers.meta)
|
|
28
|
+
|
|
29
|
+
// Write minimal JSON file (runtime-only fields)
|
|
30
|
+
const minimalMeta = stripVerboseFields(fullMeta)
|
|
24
31
|
await writeFileInDir(
|
|
25
32
|
logger,
|
|
26
33
|
queueWorkersWiringMetaJsonFile,
|
|
27
|
-
JSON.stringify(
|
|
34
|
+
JSON.stringify(minimalMeta, null, 2)
|
|
28
35
|
)
|
|
29
36
|
|
|
37
|
+
// Write verbose JSON only if it has additional fields
|
|
38
|
+
if (hasVerboseFields(fullMeta)) {
|
|
39
|
+
const verbosePath = queueWorkersWiringMetaJsonFile.replace(
|
|
40
|
+
/\.gen\.json$/,
|
|
41
|
+
'-verbose.gen.json'
|
|
42
|
+
)
|
|
43
|
+
await writeFileInDir(
|
|
44
|
+
logger,
|
|
45
|
+
verbosePath,
|
|
46
|
+
JSON.stringify(fullMeta, null, 2)
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
30
50
|
// Calculate relative path from TS file to JSON file
|
|
31
51
|
const jsonImportPath = getFileImportRelativePath(
|
|
32
52
|
queueWorkersWiringMetaFile,
|
|
@@ -20,20 +20,11 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
|
|
|
20
20
|
} = config
|
|
21
21
|
const { queueWorkers } = visitState
|
|
22
22
|
|
|
23
|
-
// Add remote RPC worker to queue metadata if it exists
|
|
24
|
-
const queueMeta = { ...queueWorkers.meta }
|
|
25
|
-
if (config.rpc?.remoteRpcWorkersPath) {
|
|
26
|
-
queueMeta['pikku-remote-internal-rpc'] = {
|
|
27
|
-
pikkuFuncName: 'pikkuRemoteInternalRPC',
|
|
28
|
-
queueName: 'pikku-remote-internal-rpc',
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
23
|
// Write JSON file
|
|
33
24
|
await writeFileInDir(
|
|
34
25
|
logger,
|
|
35
26
|
queueWorkersWiringMetaJsonFile,
|
|
36
|
-
JSON.stringify(serializeQueueMeta(
|
|
27
|
+
JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2)
|
|
37
28
|
)
|
|
38
29
|
|
|
39
30
|
// Calculate relative path from TS file to JSON file
|
|
@@ -30,7 +30,7 @@ export const serializeQueueMap = (
|
|
|
30
30
|
return `/**
|
|
31
31
|
* This provides the structure needed for typescript to be aware of Queue workers and their input/output types
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
${serializedImportMap}
|
|
35
35
|
${serializedCustomTypes}
|
|
36
36
|
|
|
@@ -93,8 +93,23 @@ function generateQueues(
|
|
|
93
93
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
|
|
94
94
|
|
|
95
95
|
// Store the input and output types for QueueHandler
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
97
|
+
let inputType = 'null'
|
|
98
|
+
if (input) {
|
|
99
|
+
try {
|
|
100
|
+
inputType = typesMap.getTypeMeta(input).uniqueName
|
|
101
|
+
} catch {
|
|
102
|
+
inputType = input
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
let outputType = 'null'
|
|
106
|
+
if (output) {
|
|
107
|
+
try {
|
|
108
|
+
outputType = typesMap.getTypeMeta(output).uniqueName
|
|
109
|
+
} catch {
|
|
110
|
+
outputType = output
|
|
111
|
+
}
|
|
112
|
+
}
|
|
98
113
|
|
|
99
114
|
requiredTypes.add(inputType)
|
|
100
115
|
requiredTypes.add(outputType)
|
|
@@ -18,7 +18,7 @@ export const serializeQueueMetaTS = (
|
|
|
18
18
|
serializedOutput.push(importStatement)
|
|
19
19
|
serializedOutput.push('')
|
|
20
20
|
serializedOutput.push(
|
|
21
|
-
"pikkuState('queue', 'meta', metaData as QueueWorkersMeta)"
|
|
21
|
+
"pikkuState(null, 'queue', 'meta', metaData as QueueWorkersMeta)"
|
|
22
22
|
)
|
|
23
23
|
return serializedOutput.join('\n')
|
|
24
24
|
}
|
|
@@ -6,14 +6,16 @@ import { serializeTypedRPCMap } from './serialize-typed-rpc-map.js'
|
|
|
6
6
|
export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
|
|
7
7
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
8
|
const { functions, rpc } = await getInspectorState()
|
|
9
|
-
const { rpcInternalMapDeclarationFile, packageMappings } =
|
|
9
|
+
const { rpcInternalMapDeclarationFile, packageMappings, externalPackages } =
|
|
10
|
+
config
|
|
10
11
|
|
|
11
12
|
const content = serializeTypedRPCMap(
|
|
12
13
|
rpcInternalMapDeclarationFile,
|
|
13
14
|
packageMappings,
|
|
14
15
|
functions.typesMap,
|
|
15
16
|
functions.meta,
|
|
16
|
-
rpc.internalMeta
|
|
17
|
+
rpc.internalMeta,
|
|
18
|
+
externalPackages
|
|
17
19
|
)
|
|
18
20
|
await writeFileInDir(logger, rpcInternalMapDeclarationFile, content)
|
|
19
21
|
},
|
|
@@ -28,14 +30,15 @@ export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
|
|
|
28
30
|
export const pikkuRPCExposedMap: any = pikkuSessionlessFunc<void, void>({
|
|
29
31
|
func: async ({ logger, config, getInspectorState }) => {
|
|
30
32
|
const { functions, rpc } = await getInspectorState()
|
|
31
|
-
const { rpcMapDeclarationFile, packageMappings } = config
|
|
33
|
+
const { rpcMapDeclarationFile, packageMappings, externalPackages } = config
|
|
32
34
|
|
|
33
35
|
const content = serializeTypedRPCMap(
|
|
34
36
|
rpcMapDeclarationFile,
|
|
35
37
|
packageMappings,
|
|
36
38
|
functions.typesMap,
|
|
37
39
|
functions.meta,
|
|
38
|
-
rpc.exposedMeta
|
|
40
|
+
rpc.exposedMeta,
|
|
41
|
+
externalPackages
|
|
39
42
|
)
|
|
40
43
|
await writeFileInDir(logger, rpcMapDeclarationFile, content)
|
|
41
44
|
},
|
|
@@ -34,7 +34,7 @@ export const pikkuRPC: any = pikkuSessionlessFunc<void, boolean>({
|
|
|
34
34
|
await writeFileInDir(
|
|
35
35
|
logger,
|
|
36
36
|
rpcInternalWiringMetaFile,
|
|
37
|
-
`import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState('rpc', 'meta', metaData as Record<string, string>)`
|
|
37
|
+
`import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState(null, 'rpc', 'meta', metaData as Record<string, string>)`
|
|
38
38
|
)
|
|
39
39
|
return true
|
|
40
40
|
}
|
|
@@ -11,6 +11,9 @@ import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
|
|
|
11
11
|
/**
|
|
12
12
|
* Generic remote RPC worker that invokes any internal RPC by name
|
|
13
13
|
* This is used for executing internal RPCs via a queue or HTTP (e.g., scheduled tasks, background jobs, internal services)
|
|
14
|
+
*
|
|
15
|
+
* TODO: Security risk - this allows any RPC to be invoked by name. Should validate
|
|
16
|
+
* that rpcName is in an allowlist of permitted internal RPCs to prevent unauthorized access.
|
|
14
17
|
*/
|
|
15
18
|
export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
|
|
16
19
|
{ rpcName: string, data?: any },
|
|
@@ -59,7 +59,7 @@ export class PikkuRPC {
|
|
|
59
59
|
* @returns A promise that resolves with the function's return value
|
|
60
60
|
*/
|
|
61
61
|
invoke: RPCInvoke = async (rpcName, data) => {
|
|
62
|
-
return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName, data }) as any
|
|
62
|
+
return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName: String(rpcName), data }) as any
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -8,7 +8,8 @@ export const serializeTypedRPCMap = (
|
|
|
8
8
|
packageMappings: Record<string, string>,
|
|
9
9
|
typesMap: TypesMap,
|
|
10
10
|
functionsMeta: FunctionsMeta,
|
|
11
|
-
rpcMeta: Record<string, string
|
|
11
|
+
rpcMeta: Record<string, string>,
|
|
12
|
+
externalPackages?: Record<string, string>
|
|
12
13
|
) => {
|
|
13
14
|
const requiredTypes = new Set<string>()
|
|
14
15
|
const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes)
|
|
@@ -26,10 +27,17 @@ export const serializeTypedRPCMap = (
|
|
|
26
27
|
requiredTypes
|
|
27
28
|
)
|
|
28
29
|
|
|
30
|
+
const externalPackageImports = generateExternalPackageImports(
|
|
31
|
+
externalPackages,
|
|
32
|
+
relativeToPath
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
const mergedRPCMap = generateMergedRPCMap(externalPackages)
|
|
36
|
+
|
|
29
37
|
return `/**
|
|
30
38
|
* This provides the structure needed for typescript to be aware of RPCs and their return types
|
|
31
39
|
*/
|
|
32
|
-
|
|
40
|
+
|
|
33
41
|
${serializedImportMap}
|
|
34
42
|
${serializedCustomTypes}
|
|
35
43
|
|
|
@@ -39,14 +47,16 @@ interface RPCHandler<I, O> {
|
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
${serializedRPCs}
|
|
50
|
+
${externalPackageImports}
|
|
51
|
+
${mergedRPCMap}
|
|
42
52
|
|
|
43
|
-
export type RPCInvoke = <Name extends keyof
|
|
53
|
+
export type RPCInvoke = <Name extends keyof FlattenedRPCMap>(
|
|
44
54
|
name: Name,
|
|
45
|
-
data:
|
|
55
|
+
data: FlattenedRPCMap[Name]['input'],
|
|
46
56
|
options?: {
|
|
47
57
|
location?: 'local' | 'remote' | 'auto'
|
|
48
58
|
}
|
|
49
|
-
) => Promise<
|
|
59
|
+
) => Promise<FlattenedRPCMap[Name]['output']>
|
|
50
60
|
|
|
51
61
|
// Import WorkflowMap for workflow typing
|
|
52
62
|
import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
|
|
@@ -64,6 +74,60 @@ export type TypedPikkuRPC = {
|
|
|
64
74
|
`
|
|
65
75
|
}
|
|
66
76
|
|
|
77
|
+
function generateExternalPackageImports(
|
|
78
|
+
externalPackages: Record<string, string> | undefined,
|
|
79
|
+
relativeToPath: string
|
|
80
|
+
): string {
|
|
81
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
82
|
+
return ''
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let imports = '\n// External package RPC maps\n'
|
|
86
|
+
for (const [namespace, packageName] of Object.entries(externalPackages)) {
|
|
87
|
+
// Import the RPCMap from each external package's internal RPC map
|
|
88
|
+
// Use .js extension - package.json exports will resolve to .d.ts for types
|
|
89
|
+
imports += `import type { RPCMap as ${toPascalCase(namespace)}RPCMap } from '${packageName}/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.js'\n`
|
|
90
|
+
}
|
|
91
|
+
return imports
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function generateMergedRPCMap(
|
|
95
|
+
externalPackages: Record<string, string> | undefined
|
|
96
|
+
): string {
|
|
97
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
98
|
+
return `
|
|
99
|
+
// No external packages, use RPCMap directly
|
|
100
|
+
export type FlattenedRPCMap = RPCMap
|
|
101
|
+
`
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// TypeScript utility to flatten namespaced RPC maps
|
|
105
|
+
const utilityTypes = `
|
|
106
|
+
// Utility type to prefix keys with namespace
|
|
107
|
+
type PrefixKeys<T, Prefix extends string> = {
|
|
108
|
+
[K in keyof T as \`\${Prefix}:\${string & K}\`]: T[K]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Merge all RPC maps with namespace prefixes
|
|
112
|
+
export type FlattenedRPCMap =
|
|
113
|
+
RPCMap${Object.keys(externalPackages)
|
|
114
|
+
.map(
|
|
115
|
+
(namespace) =>
|
|
116
|
+
` & PrefixKeys<${toPascalCase(namespace)}RPCMap, '${namespace}'>`
|
|
117
|
+
)
|
|
118
|
+
.join('')}
|
|
119
|
+
`
|
|
120
|
+
|
|
121
|
+
return utilityTypes
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function toPascalCase(str: string): string {
|
|
125
|
+
return str
|
|
126
|
+
.split(/[-_]/)
|
|
127
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
128
|
+
.join('')
|
|
129
|
+
}
|
|
130
|
+
|
|
67
131
|
function generateRPCs(
|
|
68
132
|
rpcMeta: Record<string, string>,
|
|
69
133
|
functionsMeta: FunctionsMeta,
|
|
@@ -86,13 +150,14 @@ function generateRPCs(
|
|
|
86
150
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
|
|
87
151
|
|
|
88
152
|
// Store the input and output types for RPCHandler
|
|
89
|
-
//
|
|
153
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
90
154
|
let inputType = 'null'
|
|
91
155
|
if (input) {
|
|
92
156
|
try {
|
|
93
157
|
inputType = typesMap.getTypeMeta(input).uniqueName
|
|
94
158
|
} catch {
|
|
95
|
-
|
|
159
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
160
|
+
inputType = input
|
|
96
161
|
}
|
|
97
162
|
}
|
|
98
163
|
|
|
@@ -101,7 +166,8 @@ function generateRPCs(
|
|
|
101
166
|
try {
|
|
102
167
|
outputType = typesMap.getTypeMeta(output).uniqueName
|
|
103
168
|
} catch {
|
|
104
|
-
|
|
169
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
170
|
+
outputType = output
|
|
105
171
|
}
|
|
106
172
|
}
|
|
107
173
|
|