@pikku/core 0.11.2 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -2
- package/dist/crypto-utils.d.ts +2 -0
- package/dist/crypto-utils.js +78 -0
- package/dist/errors/errors.d.ts +14 -0
- package/dist/errors/errors.js +26 -0
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/function/function-runner.d.ts +10 -4
- package/dist/function/function-runner.js +126 -45
- package/dist/function/functions.types.d.ts +32 -87
- package/dist/function/functions.types.js +16 -46
- package/dist/function/index.d.ts +2 -2
- package/dist/function/index.js +1 -2
- package/dist/handle-error.d.ts +2 -2
- package/dist/handle-error.js +3 -12
- package/dist/index.d.ts +30 -26
- package/dist/index.js +19 -29
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +2 -0
- package/dist/middleware/auth-apikey.d.ts +2 -2
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +3 -3
- package/dist/middleware/auth-bearer.js +4 -7
- package/dist/middleware/auth-cookie.d.ts +4 -4
- package/dist/middleware/auth-cookie.js +7 -9
- package/dist/middleware/cors.d.ts +46 -0
- package/dist/middleware/cors.js +81 -0
- package/dist/middleware/index.d.ts +5 -3
- package/dist/middleware/index.js +5 -3
- package/dist/middleware/remote-auth.d.ts +5 -0
- package/dist/middleware/remote-auth.js +55 -0
- package/dist/middleware/timeout.d.ts +2 -2
- package/dist/middleware-runner.d.ts +1 -1
- package/dist/middleware-runner.js +8 -10
- package/dist/permissions.d.ts +2 -2
- package/dist/permissions.js +11 -15
- package/dist/pikku-state.d.ts +10 -8
- package/dist/pikku-state.js +48 -25
- package/dist/schema.d.ts +4 -4
- package/dist/schema.js +20 -15
- package/dist/services/ai-agent-runner-service.d.ts +43 -0
- package/dist/services/ai-agent-runner-service.js +1 -0
- package/dist/services/ai-run-state-service.d.ts +13 -0
- package/dist/services/ai-run-state-service.js +1 -0
- package/dist/services/ai-storage-service.d.ts +18 -0
- package/dist/services/ai-storage-service.js +1 -0
- package/dist/services/content-service.d.ts +6 -0
- package/dist/services/deployment-service.d.ts +19 -0
- package/dist/services/deployment-service.js +1 -0
- package/dist/services/gopass-secrets.d.ts +47 -0
- package/dist/services/gopass-secrets.js +97 -0
- package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
- package/dist/services/in-memory-ai-run-state-service.js +44 -0
- package/dist/services/in-memory-trigger-service.d.ts +22 -0
- package/dist/services/in-memory-trigger-service.js +48 -0
- package/dist/services/in-memory-workflow-service.d.ts +59 -0
- package/dist/services/in-memory-workflow-service.js +287 -0
- package/dist/services/index.d.ts +26 -11
- package/dist/services/index.js +11 -13
- package/dist/services/local-content.d.ts +2 -1
- package/dist/services/local-content.js +6 -1
- package/dist/services/local-secrets.d.ts +25 -2
- package/dist/services/local-secrets.js +45 -0
- package/dist/services/local-variables.d.ts +6 -1
- package/dist/services/local-variables.js +18 -0
- package/dist/services/logger-console.d.ts +2 -1
- package/dist/services/scheduler-service.d.ts +9 -1
- package/dist/services/scheduler-service.js +8 -0
- package/dist/services/schema-service.d.ts +6 -0
- package/dist/services/scoped-secret-service.d.ts +16 -0
- package/dist/services/scoped-secret-service.js +35 -0
- package/dist/services/secret-service.d.ts +25 -4
- package/dist/services/trigger-service.d.ts +16 -0
- package/dist/services/trigger-service.js +1 -0
- package/dist/services/typed-secret-service.d.ts +30 -0
- package/dist/services/typed-secret-service.js +40 -0
- package/dist/services/typed-variables-service.d.ts +27 -0
- package/dist/services/typed-variables-service.js +46 -0
- package/dist/services/user-session-service.d.ts +15 -2
- package/dist/services/user-session-service.js +17 -0
- package/dist/services/variables-service.d.ts +5 -0
- package/dist/services/workflow-service.d.ts +9 -5
- package/dist/types/core.types.d.ts +67 -25
- package/dist/types/core.types.js +8 -1
- package/dist/types/state.types.d.ts +53 -59
- package/dist/utils.d.ts +7 -6
- package/dist/utils.js +27 -12
- package/dist/version.d.ts +6 -0
- package/dist/version.js +19 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
- package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
- package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
- package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
- package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
- package/dist/wirings/ai-agent/index.d.ts +7 -0
- package/dist/wirings/ai-agent/index.js +6 -0
- package/dist/wirings/channel/channel-common.d.ts +8 -5
- package/dist/wirings/channel/channel-common.js +15 -8
- package/dist/wirings/channel/channel-handler.d.ts +3 -3
- package/dist/wirings/channel/channel-handler.js +15 -6
- package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
- package/dist/wirings/channel/channel-middleware-runner.js +73 -0
- package/dist/wirings/channel/channel-runner.d.ts +5 -5
- package/dist/wirings/channel/channel-runner.js +10 -9
- package/dist/wirings/channel/channel-store.d.ts +1 -1
- package/dist/wirings/channel/channel.types.d.ts +9 -7
- package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
- package/dist/wirings/channel/define-channel-routes.js +23 -0
- package/dist/wirings/channel/index.d.ts +10 -8
- package/dist/wirings/channel/index.js +7 -8
- package/dist/wirings/channel/local/index.d.ts +3 -3
- package/dist/wirings/channel/local/index.js +3 -3
- package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
- package/dist/wirings/channel/local/local-channel-runner.js +22 -9
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
- package/dist/wirings/channel/log-channels.d.ts +1 -1
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.js +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/index.d.ts +1 -1
- package/dist/wirings/cli/channel/index.js +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +3 -3
- package/dist/wirings/cli/cli-runner.js +12 -8
- package/dist/wirings/cli/cli.types.d.ts +9 -9
- package/dist/wirings/cli/command-parser.d.ts +1 -1
- package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
- package/dist/wirings/cli/define-cli-commands.js +20 -0
- package/dist/wirings/cli/index.d.ts +2 -3
- package/dist/wirings/cli/index.js +1 -3
- package/dist/wirings/http/http-routes.d.ts +69 -0
- package/dist/wirings/http/http-routes.js +139 -0
- package/dist/wirings/http/http-runner.d.ts +9 -9
- package/dist/wirings/http/http-runner.js +79 -34
- package/dist/wirings/http/http.types.d.ts +77 -41
- package/dist/wirings/http/index.d.ts +5 -4
- package/dist/wirings/http/index.js +4 -3
- package/dist/wirings/http/log-http-routes.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
- package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
- package/dist/wirings/http/routers/http-router.d.ts +1 -1
- package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
- package/dist/wirings/mcp/index.d.ts +4 -3
- package/dist/wirings/mcp/index.js +3 -3
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
- package/dist/wirings/mcp/mcp-runner.js +28 -40
- package/dist/wirings/mcp/mcp.types.d.ts +5 -5
- package/dist/wirings/node/index.d.ts +2 -0
- package/dist/wirings/node/index.js +1 -0
- package/dist/wirings/node/node.types.d.ts +20 -0
- package/dist/wirings/node/node.types.js +1 -0
- package/dist/wirings/oauth2/index.d.ts +3 -0
- package/dist/wirings/oauth2/index.js +2 -0
- package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
- package/dist/wirings/oauth2/oauth2-client.js +267 -0
- package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
- package/dist/wirings/oauth2/oauth2.types.js +4 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
- package/dist/wirings/queue/index.d.ts +1 -1
- package/dist/wirings/queue/queue-runner.d.ts +1 -5
- package/dist/wirings/queue/queue-runner.js +11 -8
- package/dist/wirings/queue/queue.types.d.ts +5 -5
- package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
- package/dist/wirings/queue/register-queue-helper.js +1 -1
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +3 -1
- package/dist/wirings/rpc/index.js +2 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
- package/dist/wirings/rpc/rpc-runner.js +177 -31
- package/dist/wirings/rpc/rpc-types.d.ts +20 -4
- package/dist/wirings/rpc/wire-addon.d.ts +10 -0
- package/dist/wirings/rpc/wire-addon.js +9 -0
- package/dist/wirings/scheduler/index.d.ts +2 -2
- package/dist/wirings/scheduler/index.js +1 -2
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
- package/dist/wirings/scheduler/scheduler-runner.js +11 -14
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
- package/dist/wirings/secret/index.d.ts +3 -0
- package/dist/wirings/secret/index.js +2 -0
- package/dist/wirings/secret/secret.types.d.ts +27 -0
- package/dist/wirings/secret/secret.types.js +1 -0
- package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
- package/dist/wirings/secret/validate-secret-definitions.js +55 -0
- package/dist/wirings/trigger/index.d.ts +3 -2
- package/dist/wirings/trigger/index.js +2 -2
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
- package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
- package/dist/wirings/trigger/trigger-runner.js +48 -19
- package/dist/wirings/trigger/trigger.types.d.ts +99 -11
- package/dist/wirings/trigger/trigger.types.js +40 -1
- package/dist/wirings/variable/index.d.ts +3 -0
- package/dist/wirings/variable/index.js +2 -0
- package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
- package/dist/wirings/variable/validate-variable-definitions.js +45 -0
- package/dist/wirings/variable/variable.types.d.ts +18 -0
- package/dist/wirings/variable/variable.types.js +1 -0
- package/dist/wirings/workflow/dsl/index.d.ts +1 -1
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
- package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
- package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
- package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
- package/dist/wirings/workflow/graph/graph-runner.js +384 -296
- package/dist/wirings/workflow/graph/index.d.ts +4 -3
- package/dist/wirings/workflow/graph/index.js +3 -3
- package/dist/wirings/workflow/graph/template.d.ts +15 -0
- package/dist/wirings/workflow/graph/template.js +27 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
- package/dist/wirings/workflow/index.d.ts +6 -6
- package/dist/wirings/workflow/index.js +6 -4
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
- package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
- package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
- package/dist/wirings/workflow/workflow-helpers.js +38 -0
- package/dist/wirings/workflow/workflow.types.d.ts +42 -95
- package/package.json +14 -15
- package/run-tests.sh +4 -1
- package/src/crypto-utils.test.ts +116 -0
- package/src/crypto-utils.ts +99 -0
- package/src/errors/error.test.ts +143 -2
- package/src/errors/errors.ts +27 -0
- package/src/errors/index.ts +1 -1
- package/src/factory-functions.test.ts +42 -2
- package/src/function/function-runner.test.ts +6 -13
- package/src/function/function-runner.ts +161 -53
- package/src/function/functions.types.ts +63 -132
- package/src/function/index.ts +5 -2
- package/src/handle-error.test.ts +361 -0
- package/src/handle-error.ts +6 -14
- package/src/index.ts +97 -30
- package/src/internal.ts +6 -0
- package/src/middleware/auth-apikey.test.ts +16 -13
- package/src/middleware/auth-apikey.ts +3 -3
- package/src/middleware/auth-bearer.test.ts +18 -15
- package/src/middleware/auth-bearer.ts +27 -32
- package/src/middleware/auth-cookie.test.ts +17 -14
- package/src/middleware/auth-cookie.ts +9 -13
- package/src/middleware/cors.test.ts +424 -0
- package/src/middleware/cors.ts +104 -0
- package/src/middleware/index.ts +5 -3
- package/src/middleware/remote-auth.test.ts +488 -0
- package/src/middleware/remote-auth.ts +68 -0
- package/src/middleware-runner.test.ts +123 -1
- package/src/middleware-runner.ts +13 -13
- package/src/permissions.test.ts +83 -9
- package/src/permissions.ts +17 -19
- package/src/pikku-state.test.ts +224 -0
- package/src/pikku-state.ts +59 -35
- package/src/run-tests-script.test.ts +49 -0
- package/src/schema.test.ts +198 -6
- package/src/schema.ts +28 -21
- package/src/services/ai-agent-runner-service.ts +41 -0
- package/src/services/ai-run-state-service.ts +20 -0
- package/src/services/ai-storage-service.ts +39 -0
- package/src/services/content-service.ts +7 -0
- package/src/services/deployment-service.ts +22 -0
- package/src/services/gopass-secrets.ts +98 -0
- package/src/services/in-memory-ai-run-state-service.ts +73 -0
- package/src/services/in-memory-trigger-service.ts +64 -0
- package/src/services/in-memory-workflow-service.test.ts +351 -0
- package/src/services/in-memory-workflow-service.ts +395 -0
- package/src/services/index.ts +50 -14
- package/src/services/local-content.ts +9 -3
- package/src/services/local-secrets.test.ts +80 -0
- package/src/services/local-secrets.ts +53 -2
- package/src/services/local-variables.test.ts +61 -0
- package/src/services/local-variables.ts +23 -1
- package/src/services/logger-console.test.ts +118 -0
- package/src/services/logger-console.ts +2 -1
- package/src/services/scheduler-service.ts +11 -1
- package/src/services/schema-service.ts +7 -0
- package/src/services/scoped-secret-service.test.ts +74 -0
- package/src/services/scoped-secret-service.ts +41 -0
- package/src/services/secret-service.ts +25 -4
- package/src/services/trigger-service.ts +17 -0
- package/src/services/typed-secret-service.test.ts +93 -0
- package/src/services/typed-secret-service.ts +70 -0
- package/src/services/typed-variables-service.test.ts +73 -0
- package/src/services/typed-variables-service.ts +81 -0
- package/src/services/user-session-service.test.ts +113 -0
- package/src/services/user-session-service.ts +25 -2
- package/src/services/variables-service.ts +5 -0
- package/src/services/workflow-service.ts +23 -13
- package/src/time-utils.test.ts +1 -1
- package/src/types/core.types.ts +95 -24
- package/src/types/state.types.ts +56 -73
- package/src/utils.test.ts +350 -0
- package/src/utils.ts +33 -18
- package/src/version.test.ts +80 -0
- package/src/version.ts +25 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
- package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
- package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
- package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
- package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
- package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
- package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
- package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
- package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
- package/src/wirings/ai-agent/index.ts +39 -0
- package/src/wirings/channel/channel-common.ts +33 -20
- package/src/wirings/channel/channel-handler.ts +26 -9
- package/src/wirings/channel/channel-middleware-runner.ts +119 -0
- package/src/wirings/channel/channel-runner.ts +15 -16
- package/src/wirings/channel/channel-store.ts +1 -1
- package/src/wirings/channel/channel.types.ts +21 -9
- package/src/wirings/channel/define-channel-routes.ts +25 -0
- package/src/wirings/channel/index.ts +23 -8
- package/src/wirings/channel/local/index.ts +3 -3
- package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
- package/src/wirings/channel/local/local-channel-runner.ts +40 -19
- package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
- package/src/wirings/channel/serverless/index.ts +5 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
- package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
- package/src/wirings/cli/channel/index.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +10 -10
- package/src/wirings/cli/cli-runner.ts +28 -14
- package/src/wirings/cli/cli.types.ts +14 -14
- package/src/wirings/cli/command-parser.test.ts +9 -9
- package/src/wirings/cli/command-parser.ts +1 -1
- package/src/wirings/cli/define-cli-commands.ts +24 -0
- package/src/wirings/cli/index.ts +10 -4
- package/src/wirings/http/http-routes.test.ts +322 -0
- package/src/wirings/http/http-routes.ts +198 -0
- package/src/wirings/http/http-runner.test.ts +12 -20
- package/src/wirings/http/http-runner.ts +101 -51
- package/src/wirings/http/http.types.ts +119 -48
- package/src/wirings/http/index.ts +16 -4
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
- package/src/wirings/http/routers/http-router.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.ts +4 -3
- package/src/wirings/mcp/index.ts +27 -3
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
- package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
- package/src/wirings/mcp/mcp-runner.ts +48 -65
- package/src/wirings/mcp/mcp.types.ts +5 -5
- package/src/wirings/node/index.ts +2 -0
- package/src/wirings/node/node.types.ts +23 -0
- package/src/wirings/oauth2/index.ts +3 -0
- package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
- package/src/wirings/oauth2/oauth2-client.ts +335 -0
- package/src/wirings/oauth2/oauth2.types.ts +69 -0
- package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
- package/src/wirings/queue/index.ts +13 -2
- package/src/wirings/queue/queue-runner.test.ts +142 -73
- package/src/wirings/queue/queue-runner.ts +18 -14
- package/src/wirings/queue/queue.types.ts +5 -5
- package/src/wirings/queue/register-queue-helper.ts +3 -5
- package/src/wirings/queue/validate-worker-config.test.ts +108 -0
- package/src/wirings/queue/validate-worker-config.ts +4 -1
- package/src/wirings/rpc/index.ts +3 -1
- package/src/wirings/rpc/rpc-runner.ts +254 -41
- package/src/wirings/rpc/rpc-types.ts +28 -4
- package/src/wirings/rpc/wire-addon.ts +20 -0
- package/src/wirings/scheduler/index.ts +6 -4
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
- package/src/wirings/scheduler/scheduler-runner.ts +20 -27
- package/src/wirings/scheduler/scheduler.types.ts +2 -2
- package/src/wirings/secret/index.ts +9 -0
- package/src/wirings/secret/secret.types.ts +32 -0
- package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
- package/src/wirings/secret/validate-secret-definitions.ts +82 -0
- package/src/wirings/trigger/index.ts +10 -2
- package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
- package/src/wirings/trigger/trigger-runner.test.ts +79 -0
- package/src/wirings/trigger/trigger-runner.ts +80 -41
- package/src/wirings/trigger/trigger.types.ts +144 -22
- package/src/wirings/variable/index.ts +8 -0
- package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
- package/src/wirings/variable/validate-variable-definitions.ts +69 -0
- package/src/wirings/variable/variable.types.ts +22 -0
- package/src/wirings/workflow/dsl/index.ts +1 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
- package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
- package/src/wirings/workflow/graph/graph-node.ts +1 -6
- package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
- package/src/wirings/workflow/graph/graph-runner.ts +496 -374
- package/src/wirings/workflow/graph/index.ts +14 -3
- package/src/wirings/workflow/graph/template.test.ts +49 -0
- package/src/wirings/workflow/graph/template.ts +42 -0
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
- package/src/wirings/workflow/index.ts +21 -10
- package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
- package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
- package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
- package/src/wirings/workflow/workflow-helpers.ts +79 -0
- package/src/wirings/workflow/workflow.types.ts +47 -92
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
- package/dist/wirings/forge-node/forge-node.types.js +0 -38
- package/dist/wirings/forge-node/index.d.ts +0 -1
- package/dist/wirings/forge-node/index.js +0 -1
- package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
- package/dist/wirings/workflow/wire-workflow.js +0 -53
- package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
- package/dist/wirings/workflow/workflow-utils.js +0 -66
- package/src/wirings/forge-node/forge-node.types.ts +0 -135
- package/src/wirings/forge-node/index.ts +0 -1
- package/src/wirings/workflow/wire-workflow.ts +0 -94
- package/src/wirings/workflow/workflow-utils.ts +0 -120
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
2
|
CoreHTTPFunctionWiring,
|
|
3
3
|
RunHTTPWiringOptions,
|
|
4
|
-
RunHTTPWiringParams,
|
|
5
4
|
PikkuHTTP,
|
|
6
5
|
PikkuHTTPRequest,
|
|
7
6
|
PikkuHTTPResponse,
|
|
8
7
|
HTTPWiringMeta,
|
|
9
8
|
HTTPMethod,
|
|
10
9
|
} from './http.types.js'
|
|
11
|
-
import {
|
|
10
|
+
import type {
|
|
12
11
|
CorePikkuFunction,
|
|
13
12
|
CorePikkuFunctionSessionless,
|
|
14
13
|
CorePikkuPermission,
|
|
15
14
|
CorePermissionGroup,
|
|
16
15
|
} from '../../function/functions.types.js'
|
|
17
|
-
import {
|
|
16
|
+
import type {
|
|
18
17
|
CoreUserSession,
|
|
19
18
|
CorePikkuMiddleware,
|
|
20
19
|
CorePikkuMiddlewareGroup,
|
|
@@ -22,21 +21,43 @@ import {
|
|
|
22
21
|
PikkuWire,
|
|
23
22
|
PikkuWiringTypes,
|
|
24
23
|
} from '../../types/core.types.js'
|
|
25
|
-
import { NotFoundError } from '../../errors/errors.js'
|
|
24
|
+
import { NotFoundError, PikkuMissingMetaError } from '../../errors/errors.js'
|
|
26
25
|
import {
|
|
27
26
|
closeWireServices,
|
|
28
27
|
createWeakUID,
|
|
29
28
|
isSerializable,
|
|
30
29
|
} from '../../utils.js'
|
|
30
|
+
import {
|
|
31
|
+
getSingletonServices,
|
|
32
|
+
getCreateWireServices,
|
|
33
|
+
} from '../../pikku-state.js'
|
|
31
34
|
import { PikkuSessionService } from '../../services/user-session-service.js'
|
|
32
35
|
import { handleHTTPError } from '../../handle-error.js'
|
|
33
36
|
import { pikkuState } from '../../pikku-state.js'
|
|
34
37
|
import { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js'
|
|
35
38
|
import { PikkuFetchHTTPRequest } from './pikku-fetch-http-request.js'
|
|
36
|
-
import { PikkuChannel } from '../channel/channel.types.js'
|
|
39
|
+
import type { PikkuChannel } from '../channel/channel.types.js'
|
|
37
40
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
38
41
|
import { httpRouter } from './routers/http-router.js'
|
|
39
|
-
import {
|
|
42
|
+
import { validateSchema } from '../../schema.js'
|
|
43
|
+
import { runMiddleware } from '../../middleware-runner.js'
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Extract headers from a PikkuHTTPRequest based on the schema keys
|
|
47
|
+
*/
|
|
48
|
+
function extractHeadersFromRequest(
|
|
49
|
+
request: PikkuHTTPRequest,
|
|
50
|
+
headerKeys: string[]
|
|
51
|
+
): Record<string, string | string[] | undefined> {
|
|
52
|
+
const headers: Record<string, string | string[] | undefined> = {}
|
|
53
|
+
for (const headerName of headerKeys) {
|
|
54
|
+
const value = request.header(headerName)
|
|
55
|
+
if (value !== null) {
|
|
56
|
+
headers[headerName] = value
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return headers
|
|
60
|
+
}
|
|
40
61
|
|
|
41
62
|
/**
|
|
42
63
|
* Registers HTTP middleware for a specific route pattern.
|
|
@@ -157,10 +178,12 @@ export const wireHTTP = <
|
|
|
157
178
|
const httpMeta = pikkuState(null, 'http', 'meta')
|
|
158
179
|
const routeMeta = httpMeta[httpWiring.method][httpWiring.route]
|
|
159
180
|
if (!routeMeta) {
|
|
160
|
-
throw new
|
|
181
|
+
throw new PikkuMissingMetaError(
|
|
182
|
+
`Missing generated metadata for HTTP route '${httpWiring.method.toUpperCase()} ${httpWiring.route}'`
|
|
183
|
+
)
|
|
161
184
|
}
|
|
162
185
|
if (httpWiring.func) {
|
|
163
|
-
addFunction(routeMeta.
|
|
186
|
+
addFunction(routeMeta.pikkuFuncId, httpWiring.func)
|
|
164
187
|
}
|
|
165
188
|
const routes = pikkuState(null, 'http', 'routes')
|
|
166
189
|
if (!routes.has(httpWiring.method)) {
|
|
@@ -281,6 +304,20 @@ const executeRoute = async (
|
|
|
281
304
|
// Attach URL parameters to the request object
|
|
282
305
|
http?.request?.setParams(params)
|
|
283
306
|
|
|
307
|
+
// Validate request headers if schema is defined
|
|
308
|
+
if (meta.headersSchemaName && http.request && singletonServices.schema) {
|
|
309
|
+
const headerKeys = singletonServices.schema.getSchemaKeys(
|
|
310
|
+
meta.headersSchemaName
|
|
311
|
+
)
|
|
312
|
+
const rawHeaders = extractHeadersFromRequest(http.request, headerKeys)
|
|
313
|
+
await validateSchema(
|
|
314
|
+
singletonServices.logger,
|
|
315
|
+
singletonServices.schema,
|
|
316
|
+
meta.headersSchemaName,
|
|
317
|
+
rawHeaders
|
|
318
|
+
)
|
|
319
|
+
}
|
|
320
|
+
|
|
284
321
|
const requiresSession = route.auth !== false
|
|
285
322
|
let wireServices: any
|
|
286
323
|
let result: any
|
|
@@ -294,7 +331,13 @@ const executeRoute = async (
|
|
|
294
331
|
throw new Error("Can't skip trying to get user session if auth is required")
|
|
295
332
|
}
|
|
296
333
|
|
|
297
|
-
|
|
334
|
+
let cachedData: unknown | undefined
|
|
335
|
+
const data = async () => {
|
|
336
|
+
if (cachedData === undefined) {
|
|
337
|
+
cachedData = await http.request!.data()
|
|
338
|
+
}
|
|
339
|
+
return cachedData
|
|
340
|
+
}
|
|
298
341
|
let channel: PikkuChannel<unknown, unknown> | undefined
|
|
299
342
|
|
|
300
343
|
if (matchedRoute.route.sse) {
|
|
@@ -324,24 +367,19 @@ const executeRoute = async (
|
|
|
324
367
|
}
|
|
325
368
|
}
|
|
326
369
|
|
|
327
|
-
const wire: PikkuWire = {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
wire
|
|
335
|
-
)
|
|
336
|
-
return wireServices
|
|
337
|
-
? { wireServices, result: http.response }
|
|
338
|
-
: { result: http.response }
|
|
370
|
+
const wire: PikkuWire = {
|
|
371
|
+
http,
|
|
372
|
+
channel,
|
|
373
|
+
session: userSession.get() as CoreUserSession | undefined,
|
|
374
|
+
setSession: (s: any) => userSession.setInitial(s),
|
|
375
|
+
getSession: () => userSession.get(),
|
|
376
|
+
hasSessionChanged: () => userSession.sessionChanged,
|
|
339
377
|
}
|
|
340
378
|
|
|
341
379
|
result = await runPikkuFunc(
|
|
342
380
|
'http',
|
|
343
381
|
`${meta.method}:${meta.route}`,
|
|
344
|
-
meta.
|
|
382
|
+
meta.pikkuFuncId,
|
|
345
383
|
{
|
|
346
384
|
singletonServices,
|
|
347
385
|
createWireServices,
|
|
@@ -354,20 +392,20 @@ const executeRoute = async (
|
|
|
354
392
|
coerceDataFromSchema: options.coerceDataFromSchema,
|
|
355
393
|
tags: route.tags,
|
|
356
394
|
wire,
|
|
395
|
+
sessionService: userSession,
|
|
357
396
|
}
|
|
358
397
|
)
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
398
|
+
if (!matchedRoute.route.sse) {
|
|
399
|
+
if (result === undefined || result === null) {
|
|
400
|
+
http?.response?.status(204)
|
|
401
|
+
} else if (route.returnsJSON === false) {
|
|
402
|
+
http?.response?.arrayBuffer(result)
|
|
403
|
+
} else {
|
|
404
|
+
http?.response?.status(200)
|
|
405
|
+
http?.response?.json(result)
|
|
406
|
+
}
|
|
365
407
|
}
|
|
366
408
|
|
|
367
|
-
http?.response?.status(200)
|
|
368
|
-
// TODO: Evaluate if the response stream should be explicitly ended.
|
|
369
|
-
// http?.response?.end()
|
|
370
|
-
|
|
371
409
|
return wireServices ? { result, wireServices } : { result }
|
|
372
410
|
}
|
|
373
411
|
|
|
@@ -383,12 +421,12 @@ const executeRoute = async (
|
|
|
383
421
|
* @template In Expected input data type.
|
|
384
422
|
* @template Out Expected output data type.
|
|
385
423
|
* @param {Request} request - The native Fetch API Request object.
|
|
386
|
-
* @param {RunHTTPWiringOptions
|
|
424
|
+
* @param {RunHTTPWiringOptions} params - Additional options including services and session management.
|
|
387
425
|
* @returns {Promise<Response>} A promise that resolves to a Fetch API Response object.
|
|
388
426
|
*/
|
|
389
427
|
export const fetch = async <In, Out>(
|
|
390
428
|
request: Request,
|
|
391
|
-
params: RunHTTPWiringOptions
|
|
429
|
+
params: RunHTTPWiringOptions = {}
|
|
392
430
|
): Promise<Response> => {
|
|
393
431
|
const pikkuResponse = new PikkuFetchHTTPResponse()
|
|
394
432
|
await fetchData<In, Out>(request, pikkuResponse, params)
|
|
@@ -404,12 +442,12 @@ export const fetch = async <In, Out>(
|
|
|
404
442
|
* @template In Expected input data type.
|
|
405
443
|
* @template Out Expected output data type.
|
|
406
444
|
* @param {Request | PikkuHTTPRequest} request - The request object.
|
|
407
|
-
* @param {RunHTTPWiringOptions
|
|
445
|
+
* @param {RunHTTPWiringOptions} params - Execution options including services and session configuration.
|
|
408
446
|
* @returns {Promise<PikkuFetchHTTPResponse>} A promise that resolves to a PikkuFetchHTTPResponse object.
|
|
409
447
|
*/
|
|
410
448
|
export const pikkuFetch = async <In, Out>(
|
|
411
449
|
request: Request | PikkuHTTPRequest,
|
|
412
|
-
params: RunHTTPWiringOptions
|
|
450
|
+
params: RunHTTPWiringOptions = {}
|
|
413
451
|
): Promise<PikkuFetchHTTPResponse> => {
|
|
414
452
|
const pikkuResponse = new PikkuFetchHTTPResponse()
|
|
415
453
|
await fetchData<In, Out>(request, pikkuResponse, params)
|
|
@@ -431,43 +469,56 @@ export const pikkuFetch = async <In, Out>(
|
|
|
431
469
|
* @template Out Expected output data type.
|
|
432
470
|
* @param {Request | PikkuHTTPRequest} request - The incoming HTTP request.
|
|
433
471
|
* @param {PikkuHTTPResponse} response - The response object to be populated.
|
|
434
|
-
* @param {RunHTTPWiringOptions
|
|
472
|
+
* @param {RunHTTPWiringOptions} options - Options such as singleton services, session handling, and error configuration.
|
|
435
473
|
* @returns {Promise<Out | void>} The output from the route handler or void if an error occurred.
|
|
436
474
|
*/
|
|
437
475
|
export const fetchData = async <In, Out>(
|
|
438
476
|
request: Request | PikkuHTTPRequest,
|
|
439
477
|
response: PikkuHTTPResponse,
|
|
440
478
|
{
|
|
441
|
-
singletonServices,
|
|
442
|
-
createWireServices,
|
|
443
479
|
skipUserSession = false,
|
|
444
480
|
respondWith404 = true,
|
|
445
481
|
logWarningsForStatusCodes = [],
|
|
446
482
|
coerceDataFromSchema = true,
|
|
447
483
|
bubbleErrors = false,
|
|
448
484
|
generateRequestId,
|
|
449
|
-
}: RunHTTPWiringOptions
|
|
485
|
+
}: RunHTTPWiringOptions = {}
|
|
450
486
|
): Promise<Out | void> => {
|
|
451
|
-
const
|
|
452
|
-
|
|
453
|
-
generateRequestId?.() ||
|
|
454
|
-
createWeakUID()
|
|
487
|
+
const singletonServices = getSingletonServices()
|
|
488
|
+
const createWireServices = getCreateWireServices()
|
|
455
489
|
let wireServices: WireServices<typeof singletonServices> | undefined
|
|
456
490
|
let result: Out
|
|
457
491
|
|
|
458
492
|
// Combine the request and response into one wire object
|
|
459
|
-
const
|
|
460
|
-
request instanceof Request ? new PikkuFetchHTTPRequest(request) : request
|
|
461
|
-
|
|
462
|
-
|
|
493
|
+
const pikkuRequest =
|
|
494
|
+
request instanceof Request ? new PikkuFetchHTTPRequest(request) : request
|
|
495
|
+
let requestId: string | null = null
|
|
496
|
+
try {
|
|
497
|
+
requestId = pikkuRequest.header('x-request-id')
|
|
498
|
+
} catch {}
|
|
499
|
+
requestId = requestId || generateRequestId?.() || createWeakUID()
|
|
500
|
+
const http = createHTTPWire(pikkuRequest, response)
|
|
463
501
|
const apiType = http!.request!.method()
|
|
464
502
|
const apiRoute = http!.request!.path()
|
|
465
503
|
|
|
466
504
|
// Locate the matching route based on the HTTP method and path
|
|
467
505
|
const matchedRoute = getMatchingRoute(apiType, apiRoute)
|
|
468
506
|
try {
|
|
469
|
-
// If no route matches, log the occurrence and throw a NotFoundError
|
|
470
507
|
if (!matchedRoute) {
|
|
508
|
+
if (apiType.toLowerCase() === 'options') {
|
|
509
|
+
const httpGroups = pikkuState(null, 'middleware', 'httpGroup')
|
|
510
|
+
const globalMiddleware = httpGroups['*']
|
|
511
|
+
const wire: PikkuWire = { http: http! }
|
|
512
|
+
if (globalMiddleware) {
|
|
513
|
+
await runMiddleware(
|
|
514
|
+
singletonServices,
|
|
515
|
+
wire,
|
|
516
|
+
globalMiddleware as CorePikkuMiddleware[]
|
|
517
|
+
)
|
|
518
|
+
}
|
|
519
|
+
response.status(204).json(undefined as any)
|
|
520
|
+
return
|
|
521
|
+
}
|
|
471
522
|
singletonServices.logger.info({
|
|
472
523
|
message: 'Route not found',
|
|
473
524
|
apiRoute,
|
|
@@ -491,7 +542,6 @@ export const fetchData = async <In, Out>(
|
|
|
491
542
|
|
|
492
543
|
return result
|
|
493
544
|
} catch (e: any) {
|
|
494
|
-
// Handle errors and, depending on configuration, bubble them up or respond with an error
|
|
495
545
|
handleHTTPError(
|
|
496
546
|
e,
|
|
497
547
|
http,
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { SerializeOptions } from 'cookie'
|
|
2
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
2
3
|
import type { PikkuError } from '../../errors/error-handler.js'
|
|
3
4
|
import type {
|
|
4
|
-
CoreServices,
|
|
5
|
-
CoreSingletonServices,
|
|
6
|
-
CoreUserSession,
|
|
7
|
-
CreateWireServices,
|
|
8
5
|
CorePikkuMiddleware,
|
|
9
6
|
CommonWireMeta,
|
|
10
7
|
} from '../../types/core.types.js'
|
|
@@ -42,18 +39,9 @@ export type RunHTTPWiringOptions = Partial<{
|
|
|
42
39
|
generateRequestId: () => string
|
|
43
40
|
}>
|
|
44
41
|
|
|
45
|
-
export type RunHTTPWiringParams = {
|
|
46
|
-
singletonServices: CoreSingletonServices
|
|
47
|
-
createWireServices: CreateWireServices<
|
|
48
|
-
CoreSingletonServices,
|
|
49
|
-
CoreServices<CoreSingletonServices>,
|
|
50
|
-
CoreUserSession
|
|
51
|
-
>
|
|
52
|
-
}
|
|
53
|
-
|
|
54
42
|
/**
|
|
55
43
|
* Represents the HTTP methods supported for API HTTP wirings.
|
|
56
|
-
|
|
44
|
+
*/
|
|
57
45
|
export type HTTPMethod =
|
|
58
46
|
| 'post'
|
|
59
47
|
| 'get'
|
|
@@ -64,21 +52,41 @@ export type HTTPMethod =
|
|
|
64
52
|
| 'options'
|
|
65
53
|
|
|
66
54
|
/**
|
|
67
|
-
*
|
|
55
|
+
* Header schema type for request header validation.
|
|
56
|
+
* Uses Standard Schema interface - works with Zod, Valibot, ArkType, Effect Schema, etc.
|
|
57
|
+
*/
|
|
58
|
+
export type HTTPHeadersSchema = StandardSchemaV1<
|
|
59
|
+
Record<string, string | string[] | undefined>
|
|
60
|
+
>
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Documentation config for OpenAPI generation
|
|
68
64
|
*/
|
|
69
|
-
export type
|
|
65
|
+
export type HTTPRouteDocsConfig = {
|
|
66
|
+
description?: string
|
|
67
|
+
response?: string
|
|
68
|
+
errors?: Array<typeof PikkuError>
|
|
69
|
+
tags?: string[]
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Common HTTP route configuration shared between wireHTTP and wireHTTPRoutes
|
|
74
|
+
*/
|
|
75
|
+
export type HTTPRouteBaseConfig = {
|
|
70
76
|
contentType?: 'xml' | 'json'
|
|
77
|
+
timeout?: number
|
|
78
|
+
tags?: string[]
|
|
79
|
+
headers?: HTTPHeadersSchema
|
|
80
|
+
docs?: HTTPRouteDocsConfig
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Represents an API HTTP wiring without a function, including metadata such as content type, route, and timeout settings.
|
|
85
|
+
*/
|
|
86
|
+
export type CoreHTTPFunction = HTTPRouteBaseConfig & {
|
|
71
87
|
route: string
|
|
72
88
|
eventChannel?: false
|
|
73
89
|
returnsJSON?: false
|
|
74
|
-
timeout?: number
|
|
75
|
-
tags?: string[]
|
|
76
|
-
docs?: Partial<{
|
|
77
|
-
description: string
|
|
78
|
-
response: string
|
|
79
|
-
errors: Array<typeof PikkuError>
|
|
80
|
-
tags: string[]
|
|
81
|
-
}>
|
|
82
90
|
}
|
|
83
91
|
/**
|
|
84
92
|
* Represents a http wire within Pikku, including a request and response.
|
|
@@ -121,12 +129,14 @@ export type CoreHTTPFunctionWiring<
|
|
|
121
129
|
In,
|
|
122
130
|
Out,
|
|
123
131
|
any,
|
|
132
|
+
any,
|
|
124
133
|
any
|
|
125
134
|
> = CorePikkuFunction<In, Out>,
|
|
126
135
|
PikkuFunctionSessionless extends CorePikkuFunctionSessionless<
|
|
127
136
|
In,
|
|
128
137
|
Out,
|
|
129
138
|
any,
|
|
139
|
+
any,
|
|
130
140
|
any
|
|
131
141
|
> = CorePikkuFunctionSessionless<In, Out>,
|
|
132
142
|
PikkuPermission extends CorePikkuPermission<
|
|
@@ -149,7 +159,6 @@ export type CoreHTTPFunctionWiring<
|
|
|
149
159
|
>
|
|
150
160
|
permissions?: CorePermissionGroup<PikkuPermission>
|
|
151
161
|
auth?: true
|
|
152
|
-
tags?: string[]
|
|
153
162
|
middleware?: PikkuMiddleware[]
|
|
154
163
|
sse?: undefined
|
|
155
164
|
})
|
|
@@ -163,7 +172,6 @@ export type CoreHTTPFunctionWiring<
|
|
|
163
172
|
>
|
|
164
173
|
permissions?: undefined
|
|
165
174
|
auth?: false
|
|
166
|
-
tags?: string[]
|
|
167
175
|
middleware?: PikkuMiddleware[]
|
|
168
176
|
sse?: undefined
|
|
169
177
|
})
|
|
@@ -177,9 +185,8 @@ export type CoreHTTPFunctionWiring<
|
|
|
177
185
|
>
|
|
178
186
|
permissions?: CorePermissionGroup<PikkuPermission>
|
|
179
187
|
auth?: true
|
|
180
|
-
sse?: boolean
|
|
181
|
-
tags?: string[]
|
|
182
188
|
middleware?: PikkuMiddleware[]
|
|
189
|
+
sse?: boolean
|
|
183
190
|
})
|
|
184
191
|
| (CoreHTTPFunction & {
|
|
185
192
|
route: R
|
|
@@ -191,9 +198,8 @@ export type CoreHTTPFunctionWiring<
|
|
|
191
198
|
>
|
|
192
199
|
permissions?: undefined
|
|
193
200
|
auth?: false
|
|
194
|
-
sse?: boolean
|
|
195
|
-
tags?: string[]
|
|
196
201
|
middleware?: PikkuMiddleware[]
|
|
202
|
+
sse?: boolean
|
|
197
203
|
})
|
|
198
204
|
| (CoreHTTPFunction & {
|
|
199
205
|
route: R
|
|
@@ -205,9 +211,8 @@ export type CoreHTTPFunctionWiring<
|
|
|
205
211
|
>
|
|
206
212
|
permissions?: CorePermissionGroup<PikkuPermission>
|
|
207
213
|
auth?: true
|
|
208
|
-
query?: Array<keyof In>
|
|
209
|
-
tags?: string[]
|
|
210
214
|
middleware?: PikkuMiddleware[]
|
|
215
|
+
query?: Array<keyof In>
|
|
211
216
|
sse?: undefined
|
|
212
217
|
})
|
|
213
218
|
| (CoreHTTPFunction & {
|
|
@@ -220,24 +225,10 @@ export type CoreHTTPFunctionWiring<
|
|
|
220
225
|
>
|
|
221
226
|
permissions?: undefined
|
|
222
227
|
auth?: false
|
|
223
|
-
query?: Array<keyof In>
|
|
224
|
-
tags?: string[]
|
|
225
228
|
middleware?: PikkuMiddleware[]
|
|
229
|
+
query?: Array<keyof In>
|
|
226
230
|
sse?: undefined
|
|
227
231
|
})
|
|
228
|
-
| {
|
|
229
|
-
/** Route triggers a workflow matched by route/method from workflow wires.http */
|
|
230
|
-
route: R
|
|
231
|
-
method: HTTPMethod
|
|
232
|
-
workflow: true
|
|
233
|
-
func?: undefined
|
|
234
|
-
permissions?: undefined
|
|
235
|
-
auth?: undefined
|
|
236
|
-
tags?: undefined
|
|
237
|
-
middleware?: undefined
|
|
238
|
-
returnsJSON?: undefined
|
|
239
|
-
sse?: boolean
|
|
240
|
-
}
|
|
241
232
|
|
|
242
233
|
/**
|
|
243
234
|
* Represents the input types for HTTP wiring metadata, including parameters, query, and body types.
|
|
@@ -257,8 +248,9 @@ export type HTTPWiringMeta = CommonWireMeta & {
|
|
|
257
248
|
params?: string[]
|
|
258
249
|
query?: string[]
|
|
259
250
|
inputTypes?: HTTPFunctionMetaInputTypes
|
|
251
|
+
headersSchemaName?: string
|
|
260
252
|
sse?: true
|
|
261
|
-
|
|
253
|
+
groupBasePath?: string
|
|
262
254
|
}
|
|
263
255
|
export type HTTPWiringsMeta = Record<HTTPMethod, Record<string, HTTPWiringMeta>>
|
|
264
256
|
|
|
@@ -305,3 +297,82 @@ export interface PikkuHTTPResponse<Out = unknown> {
|
|
|
305
297
|
close?: () => void
|
|
306
298
|
setMode?: (mode: 'stream') => void
|
|
307
299
|
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Single route configuration - supports all wireHTTP options
|
|
303
|
+
*/
|
|
304
|
+
export type HTTPRouteConfig<
|
|
305
|
+
PikkuFunction extends
|
|
306
|
+
| CorePikkuFunction<any, any, any, any, any>
|
|
307
|
+
| CorePikkuFunctionSessionless<any, any, any, any, any> =
|
|
308
|
+
| CorePikkuFunction<any, any, any, any, any>
|
|
309
|
+
| CorePikkuFunctionSessionless<any, any, any, any, any>,
|
|
310
|
+
PikkuPermission extends CorePikkuPermission<
|
|
311
|
+
any,
|
|
312
|
+
any,
|
|
313
|
+
any
|
|
314
|
+
> = CorePikkuPermission<any>,
|
|
315
|
+
PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<
|
|
316
|
+
any,
|
|
317
|
+
any
|
|
318
|
+
>,
|
|
319
|
+
> = HTTPRouteBaseConfig & {
|
|
320
|
+
// Required
|
|
321
|
+
method: HTTPMethod
|
|
322
|
+
route: string
|
|
323
|
+
func: CorePikkuFunctionConfig<PikkuFunction, PikkuPermission, PikkuMiddleware>
|
|
324
|
+
|
|
325
|
+
// Auth & permissions
|
|
326
|
+
auth?: boolean
|
|
327
|
+
permissions?: CorePermissionGroup<PikkuPermission>
|
|
328
|
+
|
|
329
|
+
// Middleware
|
|
330
|
+
middleware?: PikkuMiddleware[]
|
|
331
|
+
|
|
332
|
+
// SSE support
|
|
333
|
+
sse?: boolean
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Group-level configuration applied to all routes
|
|
338
|
+
*/
|
|
339
|
+
export type HTTPRoutesGroupConfig<
|
|
340
|
+
PikkuPermission extends CorePikkuPermission<
|
|
341
|
+
any,
|
|
342
|
+
any,
|
|
343
|
+
any
|
|
344
|
+
> = CorePikkuPermission<any>,
|
|
345
|
+
PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<
|
|
346
|
+
any,
|
|
347
|
+
any
|
|
348
|
+
>,
|
|
349
|
+
> = {
|
|
350
|
+
basePath?: string
|
|
351
|
+
tags?: string[]
|
|
352
|
+
auth?: boolean
|
|
353
|
+
middleware?: PikkuMiddleware[]
|
|
354
|
+
permissions?: CorePermissionGroup<PikkuPermission>
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Nested route map - allows hierarchical organization
|
|
359
|
+
* Can contain individual routes, nested maps, or contracts with config
|
|
360
|
+
*/
|
|
361
|
+
export type HTTPRouteMap = {
|
|
362
|
+
[key: string]: HTTPRouteConfig | HTTPRouteMap | HTTPRouteContract
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* A route contract with optional group config (returned by defineRoutes)
|
|
367
|
+
*/
|
|
368
|
+
export type HTTPRouteContract<T extends HTTPRouteMap = HTTPRouteMap> =
|
|
369
|
+
HTTPRoutesGroupConfig & {
|
|
370
|
+
routes: T
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Full configuration for wireHTTPRoutes
|
|
375
|
+
*/
|
|
376
|
+
export type WireHTTPRoutesConfig = HTTPRoutesGroupConfig & {
|
|
377
|
+
routes: HTTPRouteMap | HTTPRouteConfig[]
|
|
378
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { PikkuFetchHTTPRequest } from './pikku-fetch-http-request.js'
|
|
2
|
+
export { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js'
|
|
3
|
+
export { logRoutes } from './log-http-routes.js'
|
|
4
4
|
|
|
5
5
|
export {
|
|
6
6
|
fetch,
|
|
@@ -10,4 +10,16 @@ export {
|
|
|
10
10
|
addHTTPPermission,
|
|
11
11
|
} from './http-runner.js'
|
|
12
12
|
|
|
13
|
-
export
|
|
13
|
+
export { wireHTTPRoutes, defineHTTPRoutes } from './http-routes.js'
|
|
14
|
+
|
|
15
|
+
export type {
|
|
16
|
+
AssertHTTPWiringParams,
|
|
17
|
+
CoreHTTPFunctionWiring,
|
|
18
|
+
HTTPMethod,
|
|
19
|
+
HTTPRouteBaseConfig,
|
|
20
|
+
HTTPWiringsMeta,
|
|
21
|
+
PikkuHTTPRequest,
|
|
22
|
+
PikkuHTTPResponse,
|
|
23
|
+
PikkuQuery,
|
|
24
|
+
RunHTTPWiringOptions,
|
|
25
|
+
} from './http.types.js'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parse as parseQuery } from 'picoquery'
|
|
2
2
|
import { parse as parseCookie } from 'cookie'
|
|
3
|
-
import { HTTPMethod, PikkuHTTPRequest, PikkuQuery } from './http.types.js'
|
|
3
|
+
import type { HTTPMethod, PikkuHTTPRequest, PikkuQuery } from './http.types.js'
|
|
4
4
|
import { UnprocessableContentError } from '../../errors/errors.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { PikkuHTTPResponse } from './http.types.js'
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
serialize as serializeCookie,
|
|
5
|
-
} from 'cookie'
|
|
1
|
+
import type { PikkuHTTPResponse } from './http.types.js'
|
|
2
|
+
import type { SerializeOptions as CookieSerializeOptions } from 'cookie'
|
|
3
|
+
import { serialize as serializeCookie } from 'cookie'
|
|
6
4
|
|
|
7
5
|
export class PikkuFetchHTTPResponse implements PikkuHTTPResponse {
|
|
8
6
|
#statusCode: number = 200
|
|
@@ -91,6 +89,15 @@ export class PikkuFetchHTTPResponse implements PikkuHTTPResponse {
|
|
|
91
89
|
// }
|
|
92
90
|
|
|
93
91
|
public redirect(location: string, status: number = 302): this {
|
|
92
|
+
if (
|
|
93
|
+
!location.startsWith('/') &&
|
|
94
|
+
!location.startsWith('https://') &&
|
|
95
|
+
!location.startsWith('http://')
|
|
96
|
+
) {
|
|
97
|
+
throw new Error(
|
|
98
|
+
'Invalid redirect location: must be a relative path or absolute URL'
|
|
99
|
+
)
|
|
100
|
+
}
|
|
94
101
|
this.#statusCode = status
|
|
95
102
|
this.header('Location', location)
|
|
96
103
|
return this
|
|
@@ -2,7 +2,7 @@ import { test, describe, beforeEach } from 'node:test'
|
|
|
2
2
|
import * as assert from 'node:assert/strict'
|
|
3
3
|
import { PathToRegexRouter } from './path-to-regex.js'
|
|
4
4
|
import { resetPikkuState, pikkuState } from '../../../pikku-state.js'
|
|
5
|
-
import { HTTPMethod } from '../http.types.js'
|
|
5
|
+
import type { HTTPMethod } from '../http.types.js'
|
|
6
6
|
|
|
7
7
|
describe('PathToRegexRouter', () => {
|
|
8
8
|
let router: PathToRegexRouter
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { MatchFunction } from 'path-to-regexp'
|
|
2
|
+
import { match } from 'path-to-regexp'
|
|
3
|
+
import type { MatchResult, Router } from './http-router.js'
|
|
4
|
+
import type { HTTPMethod } from '../http.types.js'
|
|
4
5
|
import { pikkuState } from '../../../pikku-state.js'
|
|
5
6
|
|
|
6
7
|
interface CompiledRoute {
|
package/src/wirings/mcp/index.ts
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
|
|
1
|
+
export { MCPEndpointRegistry } from './mcp-endpoint-registry.js'
|
|
2
|
+
export {
|
|
3
|
+
MCPError,
|
|
4
|
+
wireMCPResource,
|
|
5
|
+
wireMCPPrompt,
|
|
6
|
+
runMCPResource,
|
|
7
|
+
runMCPTool,
|
|
8
|
+
runMCPPrompt,
|
|
9
|
+
} from './mcp-runner.js'
|
|
10
|
+
export {
|
|
11
|
+
getMCPResourcesMeta,
|
|
12
|
+
getMCPToolsMeta,
|
|
13
|
+
getMCPPromptsMeta,
|
|
14
|
+
} from './mcp-runner.js'
|
|
15
|
+
export type {
|
|
16
|
+
AssertMCPResourceURIParams,
|
|
17
|
+
CoreMCPPrompt,
|
|
18
|
+
CoreMCPResource,
|
|
19
|
+
CoreMCPTool,
|
|
20
|
+
MCPPromptResponse,
|
|
21
|
+
MCPResourceMeta,
|
|
22
|
+
MCPResourceResponse,
|
|
23
|
+
MCPToolMeta,
|
|
24
|
+
MCPToolResponse,
|
|
25
|
+
MCPPromptMeta,
|
|
26
|
+
PikkuMCP,
|
|
27
|
+
} from './mcp.types.js'
|