@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,7 +1,9 @@
|
|
|
1
|
-
import { PikkuError } from '../../errors/error-handler.js';
|
|
2
|
-
import { HTTPFunctionMetaInputTypes, PikkuHTTPRequest, PikkuHTTPResponse } from '../http/http.types.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import type { PikkuError } from '../../errors/error-handler.js';
|
|
2
|
+
import type { HTTPFunctionMetaInputTypes, PikkuHTTPRequest, PikkuHTTPResponse } from '../http/http.types.js';
|
|
3
|
+
import type { CorePikkuMiddleware, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
4
|
+
export type CorePikkuChannelMiddleware<Services = any, Event = unknown> = (services: Services, event: Event, next: (event: Event | Event[] | null) => Promise<void> | void) => Promise<void> | void;
|
|
5
|
+
export type CorePikkuChannelMiddlewareFactory<In = any, Services = any, Event = unknown> = (input: In) => CorePikkuChannelMiddleware<Services, Event>;
|
|
6
|
+
import type { CorePermissionGroup, CorePikkuFunction, CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
5
7
|
export type RunChannelOptions = Partial<{
|
|
6
8
|
skipUserSession: boolean;
|
|
7
9
|
respondWith404: boolean;
|
|
@@ -11,13 +13,11 @@ export type RunChannelOptions = Partial<{
|
|
|
11
13
|
}>;
|
|
12
14
|
export type RunChannelParams<ChannelData> = {
|
|
13
15
|
channelId: string;
|
|
14
|
-
singletonServices: CoreSingletonServices;
|
|
15
16
|
request?: PikkuHTTPRequest<ChannelData>;
|
|
16
17
|
response?: PikkuHTTPResponse;
|
|
17
|
-
createWireServices?: CreateWireServices;
|
|
18
18
|
};
|
|
19
19
|
export interface ChannelMessageMeta {
|
|
20
|
-
|
|
20
|
+
pikkuFuncId: string;
|
|
21
21
|
summary?: string;
|
|
22
22
|
description?: string;
|
|
23
23
|
errors?: string[];
|
|
@@ -42,6 +42,7 @@ export interface ChannelMeta {
|
|
|
42
42
|
tags?: string[];
|
|
43
43
|
middleware?: MiddlewareMetadata[];
|
|
44
44
|
permissions?: PermissionMetadata[];
|
|
45
|
+
channelMiddleware?: MiddlewareMetadata[];
|
|
45
46
|
}
|
|
46
47
|
export type ChannelsMeta = Record<string, ChannelMeta>;
|
|
47
48
|
export type CoreChannel<ChannelData, Channel extends string, ChannelConnect = CorePikkuFunctionConfig<CorePikkuFunction<void, unknown> | CorePikkuFunctionSessionless<void, unknown>, CorePikkuPermission<void>, CorePikkuMiddleware>, ChannelDisconnect = CorePikkuFunctionConfig<CorePikkuFunction<void, void> | CorePikkuFunctionSessionless<void, void>, CorePikkuPermission<void>, CorePikkuMiddleware>, ChannelFunctionMessage = CorePikkuFunctionConfig<CorePikkuFunction<unknown, unknown> | CorePikkuFunctionSessionless<unknown, unknown>, CorePikkuPermission<unknown>, CorePikkuMiddleware>, PikkuPermission = CorePikkuPermission<ChannelData>, PikkuMiddleware = CorePikkuMiddleware> = {
|
|
@@ -63,6 +64,7 @@ export type CoreChannel<ChannelData, Channel extends string, ChannelConnect = Co
|
|
|
63
64
|
middleware?: PikkuMiddleware[];
|
|
64
65
|
}>>;
|
|
65
66
|
middleware?: PikkuMiddleware[];
|
|
67
|
+
channelMiddleware?: Array<CorePikkuChannelMiddleware | CorePikkuChannelMiddlewareFactory>;
|
|
66
68
|
permissions?: CorePermissionGroup<PikkuPermission>;
|
|
67
69
|
auth?: boolean;
|
|
68
70
|
docs?: Partial<{
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe helper for defining channel message routes that can be composed.
|
|
3
|
+
* Returns the routes record as-is (identity function) for use with `wireChannel`.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* export const chatRoutes = defineChannelRoutes({
|
|
8
|
+
* greet: pikkuChannelFunc({ func: greetFunc }),
|
|
9
|
+
* farewell: pikkuChannelFunc({ func: farewellFunc }),
|
|
10
|
+
* })
|
|
11
|
+
*
|
|
12
|
+
* wireChannel({
|
|
13
|
+
* name: 'chat',
|
|
14
|
+
* route: '/ws/chat',
|
|
15
|
+
* onMessageWiring: {
|
|
16
|
+
* command: chatRoutes,
|
|
17
|
+
* }
|
|
18
|
+
* })
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function defineChannelRoutes<T extends Record<string, any>>(routes: T): T;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe helper for defining channel message routes that can be composed.
|
|
3
|
+
* Returns the routes record as-is (identity function) for use with `wireChannel`.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* export const chatRoutes = defineChannelRoutes({
|
|
8
|
+
* greet: pikkuChannelFunc({ func: greetFunc }),
|
|
9
|
+
* farewell: pikkuChannelFunc({ func: farewellFunc }),
|
|
10
|
+
* })
|
|
11
|
+
*
|
|
12
|
+
* wireChannel({
|
|
13
|
+
* name: 'chat',
|
|
14
|
+
* route: '/ws/chat',
|
|
15
|
+
* onMessageWiring: {
|
|
16
|
+
* command: chatRoutes,
|
|
17
|
+
* }
|
|
18
|
+
* })
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function defineChannelRoutes(routes) {
|
|
22
|
+
return routes;
|
|
23
|
+
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
1
|
+
export { wireChannel, openChannel } from './channel-runner.js';
|
|
2
|
+
export { addChannelMiddleware, combineChannelMiddleware, wrapChannelWithMiddleware, } from './channel-middleware-runner.js';
|
|
3
|
+
export { logChannels } from './log-channels.js';
|
|
4
|
+
export { PikkuAbstractChannelHandler } from './pikku-abstract-channel-handler.js';
|
|
5
|
+
export type { EventHubService } from './eventhub-service.js';
|
|
6
|
+
export { ChannelStore } from './channel-store.js';
|
|
7
|
+
export type { Channel } from './channel-store.js';
|
|
8
|
+
export { EventHubStore } from './eventhub-store.js';
|
|
9
|
+
export type { ChannelsMeta, CoreChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory, ChannelMessageMeta, ChannelMeta, PikkuChannel, PikkuChannelHandlerFactory, } from './channel.types.js';
|
|
10
|
+
export { defineChannelRoutes } from './define-channel-routes.js';
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export * from './eventhub-store.js';
|
|
1
|
+
export { wireChannel, openChannel } from './channel-runner.js';
|
|
2
|
+
export { addChannelMiddleware, combineChannelMiddleware, wrapChannelWithMiddleware, } from './channel-middleware-runner.js';
|
|
3
|
+
export { logChannels } from './log-channels.js';
|
|
4
|
+
export { PikkuAbstractChannelHandler } from './pikku-abstract-channel-handler.js';
|
|
5
|
+
export { ChannelStore } from './channel-store.js';
|
|
6
|
+
export { EventHubStore } from './eventhub-store.js';
|
|
7
|
+
export { defineChannelRoutes } from './define-channel-routes.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
2
|
+
export { runLocalChannel } from './local-channel-runner.js';
|
|
3
|
+
export { LocalEventHubService } from './local-eventhub-service.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
2
|
+
export { runLocalChannel } from './local-channel-runner.js';
|
|
3
|
+
export { LocalEventHubService } from './local-eventhub-service.js';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
import { CoreChannel, RunChannelOptions
|
|
1
|
+
import type { CoreChannel, RunChannelOptions } from '../channel.types.js';
|
|
2
2
|
import { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
3
|
-
|
|
3
|
+
import type { PikkuHTTPRequest, PikkuHTTPResponse } from '../../http/http.types.js';
|
|
4
|
+
export declare const runLocalChannel: ({ channelId, request, response, route, skipUserSession, respondWith404, coerceDataFromSchema, logWarningsForStatusCodes, bubbleErrors, }: Partial<Pick<CoreChannel<unknown, any>, "route">> & RunChannelOptions & {
|
|
5
|
+
channelId: string;
|
|
6
|
+
request?: PikkuHTTPRequest;
|
|
7
|
+
response?: PikkuHTTPResponse;
|
|
8
|
+
}) => Promise<PikkuLocalChannelHandler | void>;
|
|
@@ -4,10 +4,14 @@ import { closeWireServices } from '../../../utils.js';
|
|
|
4
4
|
import { processMessageHandlers } from '../channel-handler.js';
|
|
5
5
|
import { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
6
6
|
import { handleHTTPError } from '../../../handle-error.js';
|
|
7
|
-
import { PikkuSessionService } from '../../../services/user-session-service.js';
|
|
7
|
+
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../../services/user-session-service.js';
|
|
8
8
|
import { runChannelLifecycleWithMiddleware } from '../channel-common.js';
|
|
9
|
-
|
|
9
|
+
import { getSingletonServices, getCreateWireServices, } from '../../../pikku-state.js';
|
|
10
|
+
export const runLocalChannel = async ({ channelId, request, response, route, skipUserSession = false, respondWith404 = true, coerceDataFromSchema = true, logWarningsForStatusCodes = [], bubbleErrors = false, }) => {
|
|
11
|
+
const singletonServices = getSingletonServices();
|
|
12
|
+
const createWireServices = getCreateWireServices();
|
|
10
13
|
let wireServices;
|
|
14
|
+
let closedWireServices = false;
|
|
11
15
|
let channelHandler;
|
|
12
16
|
const userSession = new PikkuSessionService();
|
|
13
17
|
let http;
|
|
@@ -20,12 +24,10 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
20
24
|
;
|
|
21
25
|
({ openingData, channelConfig, meta } = await openChannel({
|
|
22
26
|
channelId,
|
|
23
|
-
createWireServices,
|
|
24
27
|
respondWith404,
|
|
25
28
|
request,
|
|
26
29
|
response,
|
|
27
30
|
route,
|
|
28
|
-
singletonServices,
|
|
29
31
|
skipUserSession,
|
|
30
32
|
coerceDataFromSchema,
|
|
31
33
|
userSession,
|
|
@@ -39,10 +41,20 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
39
41
|
try {
|
|
40
42
|
channelHandler = new PikkuLocalChannelHandler(channelId, channelConfig.name, openingData);
|
|
41
43
|
const channel = channelHandler.getChannel();
|
|
42
|
-
const wire = {
|
|
44
|
+
const wire = {
|
|
45
|
+
channel,
|
|
46
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
47
|
+
};
|
|
43
48
|
if (createWireServices) {
|
|
44
49
|
wireServices = await createWireServices(singletonServices, wire);
|
|
45
50
|
}
|
|
51
|
+
const closeServices = async () => {
|
|
52
|
+
if (!wireServices || closedWireServices) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
closedWireServices = true;
|
|
56
|
+
await closeWireServices(singletonServices.logger, wireServices);
|
|
57
|
+
};
|
|
46
58
|
const services = { ...singletonServices, ...wireServices };
|
|
47
59
|
channelHandler.registerOnOpen(async () => {
|
|
48
60
|
if (channelConfig.onConnect && meta.connect) {
|
|
@@ -55,6 +67,7 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
55
67
|
services,
|
|
56
68
|
channel,
|
|
57
69
|
data: openingData,
|
|
70
|
+
channelMiddlewareMeta: meta.channelMiddleware,
|
|
58
71
|
});
|
|
59
72
|
if (result !== undefined) {
|
|
60
73
|
await channel.send(result);
|
|
@@ -76,6 +89,7 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
76
89
|
lifecycleType: 'disconnect',
|
|
77
90
|
services,
|
|
78
91
|
channel,
|
|
92
|
+
channelMiddlewareMeta: meta.channelMiddleware,
|
|
79
93
|
});
|
|
80
94
|
}
|
|
81
95
|
catch (e) {
|
|
@@ -83,9 +97,7 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
83
97
|
channel.send({ error: e.message || 'Unknown error' });
|
|
84
98
|
}
|
|
85
99
|
}
|
|
86
|
-
|
|
87
|
-
await closeWireServices(singletonServices.logger, wireServices);
|
|
88
|
-
}
|
|
100
|
+
await closeServices();
|
|
89
101
|
});
|
|
90
102
|
const onMessage = processMessageHandlers(services, channelConfig, channelHandler, userSession);
|
|
91
103
|
channelHandler.registerOnMessage(async (data) => {
|
|
@@ -103,7 +115,8 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
103
115
|
handleHTTPError(e, http, channelId, singletonServices.logger, logWarningsForStatusCodes, respondWith404, bubbleErrors);
|
|
104
116
|
}
|
|
105
117
|
finally {
|
|
106
|
-
if (wireServices) {
|
|
118
|
+
if (!channelHandler && wireServices && !closedWireServices) {
|
|
119
|
+
closedWireServices = true;
|
|
107
120
|
await closeWireServices(singletonServices.logger, wireServices);
|
|
108
121
|
}
|
|
109
122
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PikkuChannelHandler } from '../channel.types.js';
|
|
2
|
-
import { EventHubService } from '../eventhub-service.js';
|
|
1
|
+
import type { PikkuChannelHandler } from '../channel.types.js';
|
|
2
|
+
import type { EventHubService } from '../eventhub-service.js';
|
|
3
3
|
/**
|
|
4
4
|
* Implementation of the SubscriptionService interface.
|
|
5
5
|
* Manages subscriptions and publishes messages to subscribers.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PikkuChannel, PikkuChannelHandler } from './channel.types.js';
|
|
1
|
+
import type { PikkuChannel, PikkuChannelHandler } from './channel.types.js';
|
|
2
2
|
export declare abstract class PikkuAbstractChannelHandler<OpeningData = unknown, Out = unknown> implements PikkuChannelHandler<OpeningData, Out> {
|
|
3
3
|
channelId: string;
|
|
4
4
|
channelName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { runChannelConnect, runChannelDisconnect, runChannelMessage, } from './serverless-channel-runner.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { runChannelConnect, runChannelDisconnect, runChannelMessage, } from './serverless-channel-runner.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { CoreChannel, RunChannelOptions, RunChannelParams, PikkuChannelHandlerFactory } from '../channel.types.js';
|
|
2
|
-
import { ChannelStore } from '../channel-store.js';
|
|
2
|
+
import type { ChannelStore } from '../channel-store.js';
|
|
3
3
|
export interface RunServerlessChannelParams<ChannelData> extends RunChannelParams<ChannelData> {
|
|
4
4
|
channelStore: ChannelStore;
|
|
5
5
|
channelHandlerFactory: PikkuChannelHandlerFactory;
|
|
6
6
|
channelObject?: unknown;
|
|
7
7
|
}
|
|
8
|
-
export declare const runChannelConnect: ({
|
|
9
|
-
export declare const runChannelDisconnect: ({
|
|
10
|
-
export declare const runChannelMessage: ({
|
|
8
|
+
export declare const runChannelConnect: ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema, logWarningsForStatusCodes, respondWith404, bubbleErrors, }: Pick<CoreChannel<unknown, any>, "route"> & RunChannelOptions & RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
9
|
+
export declare const runChannelDisconnect: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
10
|
+
export declare const runChannelMessage: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>, data: unknown) => Promise<unknown>;
|
|
@@ -3,8 +3,8 @@ import { processMessageHandlers } from '../channel-handler.js';
|
|
|
3
3
|
import { openChannel } from '../channel-runner.js';
|
|
4
4
|
import { createHTTPWire } from '../../http/http-runner.js';
|
|
5
5
|
import { handleHTTPError } from '../../../handle-error.js';
|
|
6
|
-
import { PikkuSessionService } from '../../../services/user-session-service.js';
|
|
7
|
-
import { pikkuState } from '../../../pikku-state.js';
|
|
6
|
+
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../../services/user-session-service.js';
|
|
7
|
+
import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../../pikku-state.js';
|
|
8
8
|
import { PikkuFetchHTTPRequest } from '../../http/pikku-fetch-http-request.js';
|
|
9
9
|
import { runChannelLifecycleWithMiddleware } from '../channel-common.js';
|
|
10
10
|
const getVariablesForChannel = ({ channelId, channelName, channelHandlerFactory, openingData, }) => {
|
|
@@ -26,7 +26,9 @@ const getVariablesForChannel = ({ channelId, channelName, channelHandlerFactory,
|
|
|
26
26
|
meta,
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
-
export const runChannelConnect = async ({
|
|
29
|
+
export const runChannelConnect = async ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema = true, logWarningsForStatusCodes = [], respondWith404 = true, bubbleErrors = false, }) => {
|
|
30
|
+
const singletonServices = getSingletonServices();
|
|
31
|
+
const createWireServices = getCreateWireServices();
|
|
30
32
|
let wireServices;
|
|
31
33
|
let http;
|
|
32
34
|
if (request instanceof Request) {
|
|
@@ -35,10 +37,8 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
35
37
|
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
36
38
|
const { channelConfig, openingData, meta } = await openChannel({
|
|
37
39
|
channelId,
|
|
38
|
-
createWireServices,
|
|
39
40
|
request,
|
|
40
41
|
route,
|
|
41
|
-
singletonServices,
|
|
42
42
|
coerceDataFromSchema,
|
|
43
43
|
userSession,
|
|
44
44
|
});
|
|
@@ -54,7 +54,10 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
54
54
|
channelHandlerFactory,
|
|
55
55
|
channelName: channelConfig.name,
|
|
56
56
|
});
|
|
57
|
-
const wire = {
|
|
57
|
+
const wire = {
|
|
58
|
+
channel,
|
|
59
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
60
|
+
};
|
|
58
61
|
if (createWireServices) {
|
|
59
62
|
wireServices = await createWireServices(singletonServices, wire);
|
|
60
63
|
}
|
|
@@ -71,6 +74,7 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
71
74
|
services,
|
|
72
75
|
channel,
|
|
73
76
|
data: openingData,
|
|
77
|
+
channelMiddlewareMeta: meta.channelMiddleware,
|
|
74
78
|
});
|
|
75
79
|
}
|
|
76
80
|
http?.response?.status(101);
|
|
@@ -84,7 +88,9 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
84
88
|
}
|
|
85
89
|
}
|
|
86
90
|
};
|
|
87
|
-
export const runChannelDisconnect = async ({
|
|
91
|
+
export const runChannelDisconnect = async ({ channelId, channelStore, channelHandlerFactory, }) => {
|
|
92
|
+
const singletonServices = getSingletonServices();
|
|
93
|
+
const createWireServices = getCreateWireServices();
|
|
88
94
|
let wireServices;
|
|
89
95
|
// Try to get channel from store. In serverless environments (especially with
|
|
90
96
|
// serverless-offline or worker threads), disconnect can be called multiple times
|
|
@@ -92,23 +98,27 @@ export const runChannelDisconnect = async ({ singletonServices, ...params }) =>
|
|
|
92
98
|
// there's nothing to disconnect, so we can return early.
|
|
93
99
|
let channelData;
|
|
94
100
|
try {
|
|
95
|
-
channelData = await
|
|
101
|
+
channelData = await channelStore.getChannelAndSession(channelId);
|
|
96
102
|
}
|
|
97
|
-
catch
|
|
98
|
-
singletonServices.logger.info(`Channel ${
|
|
103
|
+
catch {
|
|
104
|
+
singletonServices.logger.info(`Channel ${channelId} not found during disconnect - already cleaned up`);
|
|
99
105
|
return;
|
|
100
106
|
}
|
|
101
107
|
const { openingData, channelName, session } = channelData;
|
|
102
108
|
const { channel, channelConfig, meta } = getVariablesForChannel({
|
|
103
|
-
|
|
109
|
+
channelId,
|
|
110
|
+
channelHandlerFactory,
|
|
104
111
|
openingData,
|
|
105
112
|
channelName,
|
|
106
113
|
});
|
|
107
|
-
const userSession = new PikkuSessionService(
|
|
114
|
+
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
108
115
|
userSession.setInitial(session);
|
|
109
|
-
const wire = {
|
|
110
|
-
|
|
111
|
-
|
|
116
|
+
const wire = {
|
|
117
|
+
channel,
|
|
118
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
119
|
+
};
|
|
120
|
+
if (createWireServices) {
|
|
121
|
+
wireServices = await createWireServices(singletonServices, wire);
|
|
112
122
|
}
|
|
113
123
|
const services = {
|
|
114
124
|
...singletonServices,
|
|
@@ -123,30 +133,37 @@ export const runChannelDisconnect = async ({ singletonServices, ...params }) =>
|
|
|
123
133
|
lifecycleType: 'disconnect',
|
|
124
134
|
services,
|
|
125
135
|
channel,
|
|
136
|
+
channelMiddlewareMeta: meta.channelMiddleware,
|
|
126
137
|
});
|
|
127
138
|
}
|
|
128
139
|
catch (e) {
|
|
129
140
|
singletonServices.logger.error(`Error handling onDisconnect: ${e.message || e}`);
|
|
130
141
|
}
|
|
131
142
|
}
|
|
132
|
-
await
|
|
143
|
+
await channelStore.removeChannels([channel.channelId]);
|
|
133
144
|
if (wireServices) {
|
|
134
145
|
await closeWireServices(singletonServices.logger, wireServices);
|
|
135
146
|
}
|
|
136
147
|
};
|
|
137
|
-
export const runChannelMessage = async ({
|
|
148
|
+
export const runChannelMessage = async ({ channelId, channelStore, channelHandlerFactory, }, data) => {
|
|
149
|
+
const singletonServices = getSingletonServices();
|
|
150
|
+
const createWireServices = getCreateWireServices();
|
|
138
151
|
let wireServices;
|
|
139
|
-
const { openingData, channelName, session } = await
|
|
152
|
+
const { openingData, channelName, session } = await channelStore.getChannelAndSession(channelId);
|
|
140
153
|
const { channel, channelHandler, channelConfig } = getVariablesForChannel({
|
|
141
|
-
|
|
154
|
+
channelId,
|
|
155
|
+
channelHandlerFactory,
|
|
142
156
|
openingData,
|
|
143
157
|
channelName,
|
|
144
158
|
});
|
|
145
|
-
const userSession = new PikkuSessionService(
|
|
159
|
+
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
146
160
|
userSession.setInitial(session);
|
|
147
|
-
const wire = {
|
|
148
|
-
|
|
149
|
-
|
|
161
|
+
const wire = {
|
|
162
|
+
channel,
|
|
163
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
164
|
+
};
|
|
165
|
+
if (createWireServices) {
|
|
166
|
+
wireServices = await createWireServices(singletonServices, wire);
|
|
150
167
|
}
|
|
151
168
|
const services = {
|
|
152
169
|
...singletonServices,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { executeCLIViaChannel } from './cli-channel-runner.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { executeCLIViaChannel } from './cli-channel-runner.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CorePikkuMiddleware, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
-
import { CoreCLI, CorePikkuCLIRender, CoreCLICommandConfig } from './cli.types.js';
|
|
1
|
+
import type { CorePikkuMiddleware, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
+
import type { CoreCLI, CorePikkuCLIRender, CoreCLICommandConfig } from './cli.types.js';
|
|
3
3
|
import type { CoreSingletonServices, CoreServices, CreateWireServices, CreateConfig, CreateSingletonServices } from '../../types/core.types.js';
|
|
4
4
|
/**
|
|
5
5
|
* CLI command execution error - thrown when CLI execution fails
|
|
@@ -36,7 +36,7 @@ export declare const pikkuCLIRender: <Data, Services extends CoreSingletonServic
|
|
|
36
36
|
export declare function executeCLI({ programName, args, createConfig, createSingletonServices, createWireServices, }: {
|
|
37
37
|
programName: string;
|
|
38
38
|
args?: string[];
|
|
39
|
-
createConfig
|
|
39
|
+
createConfig?: CreateConfig<any, any>;
|
|
40
40
|
createSingletonServices: CreateSingletonServices<any, any>;
|
|
41
41
|
createWireServices?: CreateWireServices<any, any, any>;
|
|
42
42
|
}): Promise<void>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { NotFoundError } from '../../errors/errors.js';
|
|
1
|
+
import { NotFoundError, PikkuMissingMetaError } from '../../errors/errors.js';
|
|
2
2
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
|
|
3
3
|
import { pikkuState } from '../../pikku-state.js';
|
|
4
|
-
import { PikkuSessionService } from '../../services/user-session-service.js';
|
|
4
|
+
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../services/user-session-service.js';
|
|
5
5
|
import { LocalVariablesService } from '../../services/local-variables.js';
|
|
6
6
|
import { generateCommandHelp, parseCLIArguments } from './command-parser.js';
|
|
7
7
|
/**
|
|
@@ -29,7 +29,7 @@ export const wireCLI = (cli) => {
|
|
|
29
29
|
// Get the existing metadata that was generated during inspection
|
|
30
30
|
const cliMeta = pikkuState(null, 'cli', 'meta') || {};
|
|
31
31
|
if (!cliMeta.programs?.[cli.program]) {
|
|
32
|
-
throw new
|
|
32
|
+
throw new PikkuMissingMetaError(`CLI metadata not found for program '${cli.program}'`);
|
|
33
33
|
}
|
|
34
34
|
// Get existing programs state and add this program
|
|
35
35
|
const programs = pikkuState(null, 'cli', 'programs') || {};
|
|
@@ -81,7 +81,7 @@ function registerCLICommands(commands, path = [], inheritedOptions = {}, program
|
|
|
81
81
|
for (let i = 1; i < fullPath.length; i++) {
|
|
82
82
|
currentMeta = currentMeta?.subcommands?.[fullPath[i]];
|
|
83
83
|
}
|
|
84
|
-
const funcName = currentMeta?.
|
|
84
|
+
const funcName = currentMeta?.pikkuFuncId;
|
|
85
85
|
// Skip if no function name (could be a command group)
|
|
86
86
|
if (!funcName) {
|
|
87
87
|
// Recursively register subcommands if they exist
|
|
@@ -173,7 +173,7 @@ export async function runCLICommand({ program, commandPath, data, singletonServi
|
|
|
173
173
|
}
|
|
174
174
|
currentCommand = currentCommand.subcommands[commandPath[i]];
|
|
175
175
|
}
|
|
176
|
-
const funcName = currentCommand.
|
|
176
|
+
const funcName = currentCommand.pikkuFuncId;
|
|
177
177
|
// Get program-specific data
|
|
178
178
|
const programs = pikkuState(null, 'cli', 'programs') || {};
|
|
179
179
|
const programData = programs[program];
|
|
@@ -222,7 +222,7 @@ export async function runCLICommand({ program, commandPath, data, singletonServi
|
|
|
222
222
|
data: pluckedData,
|
|
223
223
|
channel,
|
|
224
224
|
},
|
|
225
|
-
|
|
225
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
226
226
|
};
|
|
227
227
|
try {
|
|
228
228
|
const result = await runPikkuFunc('cli', commandId, funcName, {
|
|
@@ -236,9 +236,11 @@ export async function runCLICommand({ program, commandPath, data, singletonServi
|
|
|
236
236
|
wirePermissions: undefined,
|
|
237
237
|
tags: programData?.tags,
|
|
238
238
|
wire,
|
|
239
|
+
sessionService: userSession,
|
|
239
240
|
});
|
|
240
241
|
// Apply renderer one final time with the final output (if renderer exists)
|
|
241
|
-
if (
|
|
242
|
+
// Skip if result is undefined (void functions handle their own output)
|
|
243
|
+
if (renderer && result !== undefined) {
|
|
242
244
|
await Promise.resolve(renderer(singletonServices, result, userSession.get()));
|
|
243
245
|
}
|
|
244
246
|
return result;
|
|
@@ -306,7 +308,9 @@ export async function executeCLI({ programName, args, createConfig, createSingle
|
|
|
306
308
|
// Merge positionals and options into single data object
|
|
307
309
|
const data = { ...parsed.positionals, ...parsed.options };
|
|
308
310
|
// Create config (pass data in case it needs to use any parsed options)
|
|
309
|
-
const config =
|
|
311
|
+
const config = createConfig
|
|
312
|
+
? await createConfig(new LocalVariablesService(), data)
|
|
313
|
+
: {};
|
|
310
314
|
// Create services with config
|
|
311
315
|
const singletonServices = await createSingletonServices(config);
|
|
312
316
|
// Execute the command
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CorePikkuMiddleware, CoreSingletonServices, CoreUserSession, CoreServices, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
2
|
-
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuFunction, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
|
-
import { PikkuChannel } from '../channel/channel.types.js';
|
|
1
|
+
import type { CorePikkuMiddleware, CoreSingletonServices, CoreUserSession, CoreServices, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
2
|
+
import type { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuFunction, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
|
+
import type { PikkuChannel } from '../channel/channel.types.js';
|
|
4
4
|
/**
|
|
5
5
|
* CLI option definition
|
|
6
6
|
*/
|
|
@@ -51,7 +51,7 @@ export interface CLIProgramState {
|
|
|
51
51
|
*/
|
|
52
52
|
export interface CLICommandMeta {
|
|
53
53
|
parameters?: string;
|
|
54
|
-
|
|
54
|
+
pikkuFuncId: string;
|
|
55
55
|
positionals: CLIPositional[];
|
|
56
56
|
options: Record<string, CLIOption>;
|
|
57
57
|
renderName?: string;
|
|
@@ -100,7 +100,7 @@ export type CorePikkuCLIRender<Data, Services extends CoreSingletonServices = Co
|
|
|
100
100
|
/**
|
|
101
101
|
* Extract input parameters from a Pikku function config type
|
|
102
102
|
*/
|
|
103
|
-
export type ExtractFunctionInput<Func> = Func extends CorePikkuFunctionConfig<infer FuncType, any, any> ? FuncType extends CorePikkuFunction<infer Input, any, any, any> | CorePikkuFunctionSessionless<infer Input, any, any, any> ? Input : never : never;
|
|
103
|
+
export type ExtractFunctionInput<Func> = Func extends CorePikkuFunctionConfig<infer FuncType, any, any> ? FuncType extends CorePikkuFunction<infer Input, any, any, any, any> | CorePikkuFunctionSessionless<infer Input, any, any, any, any> ? Input : never : never;
|
|
104
104
|
/**
|
|
105
105
|
* Strip < > [ ] characters from a string
|
|
106
106
|
*/
|
|
@@ -132,7 +132,7 @@ export type ValidateParameters<Params extends string, Input> = AllParamsValid<Ex
|
|
|
132
132
|
/**
|
|
133
133
|
* Extract output type from a Pikku function config type
|
|
134
134
|
*/
|
|
135
|
-
export type ExtractFunctionOutput<Func> = Func extends CorePikkuFunctionConfig<infer FuncType, any, any> ? FuncType extends CorePikkuFunction<any, infer Output, any, any> | CorePikkuFunctionSessionless<any, infer Output, any, any> ? Output : never : never;
|
|
135
|
+
export type ExtractFunctionOutput<Func> = Func extends CorePikkuFunctionConfig<infer FuncType, any, any> ? FuncType extends CorePikkuFunction<any, infer Output, any, any, any> | CorePikkuFunctionSessionless<any, infer Output, any, any, any> ? Output : never : never;
|
|
136
136
|
/**
|
|
137
137
|
* CLI command configuration that infers options from function input type.
|
|
138
138
|
* This is a helper type for creating type-safe CLI commands.
|
|
@@ -159,7 +159,7 @@ export type CoreCLICommandConfig<FuncConfig, PikkuMiddleware extends CorePikkuMi
|
|
|
159
159
|
/**
|
|
160
160
|
* CLI command definition
|
|
161
161
|
*/
|
|
162
|
-
export interface CoreCLICommand<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any> | CorePikkuFunctionSessionless<In, Out, any, any>>, PikkuPermission extends CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware, Options = any, Subcommands extends Record<string, CoreCLICommandConfig<any, any, any>> = Record<string, CoreCLICommandConfig<any, any, any>>> {
|
|
162
|
+
export interface CoreCLICommand<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any, any> | CorePikkuFunctionSessionless<In, Out, any, any, any>>, PikkuPermission extends CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware, Options = any, Subcommands extends Record<string, CoreCLICommandConfig<any, any, any>> = Record<string, CoreCLICommandConfig<any, any, any>>> {
|
|
163
163
|
parameters?: string;
|
|
164
164
|
func: PikkuFunctionConfig;
|
|
165
165
|
render?: CorePikkuCLIRender<Out>;
|
|
@@ -177,11 +177,11 @@ export interface CoreCLICommand<In, Out, PikkuFunctionConfig extends CorePikkuFu
|
|
|
177
177
|
/**
|
|
178
178
|
* Shorthand command definition (just a function)
|
|
179
179
|
*/
|
|
180
|
-
export type CLICommandShorthand<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any> | CorePikkuFunctionSessionless<In, Out, any, any>>> = PikkuFunctionConfig;
|
|
180
|
+
export type CLICommandShorthand<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any, any> | CorePikkuFunctionSessionless<In, Out, any, any, any>>> = PikkuFunctionConfig;
|
|
181
181
|
/**
|
|
182
182
|
* Command definition (either full or shorthand)
|
|
183
183
|
*/
|
|
184
|
-
export type CLICommandDefinition<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any> | CorePikkuFunctionSessionless<In, Out, any, any>>, PikkuPermission extends CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware, Options = any, Subcommands extends Record<string, CoreCLICommandConfig<any, any, any>> = Record<string, CoreCLICommandConfig<any, any, any>>> = CoreCLICommand<In, Out, PikkuFunctionConfig, PikkuPermission, PikkuMiddleware, Options, Subcommands> | CLICommandShorthand<In, Out, PikkuFunctionConfig>;
|
|
184
|
+
export type CLICommandDefinition<In, Out, PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunction<In, Out, any, any, any> | CorePikkuFunctionSessionless<In, Out, any, any, any>>, PikkuPermission extends CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware, Options = any, Subcommands extends Record<string, CoreCLICommandConfig<any, any, any>> = Record<string, CoreCLICommandConfig<any, any, any>>> = CoreCLICommand<In, Out, PikkuFunctionConfig, PikkuPermission, PikkuMiddleware, Options, Subcommands> | CLICommandShorthand<In, Out, PikkuFunctionConfig>;
|
|
185
185
|
/**
|
|
186
186
|
* CLI wiring configuration
|
|
187
187
|
*/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CoreCLICommandConfig } from './cli.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe helper for defining CLI commands that can be composed.
|
|
4
|
+
* Returns the commands record as-is (identity function) for use with `wireCLI`.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* export const chatCommands = defineCLICommands({
|
|
9
|
+
* chat: pikkuCLICommand({ func: chatFunc }),
|
|
10
|
+
* 'chat:history': pikkuCLICommand({ func: historyFunc }),
|
|
11
|
+
* })
|
|
12
|
+
*
|
|
13
|
+
* wireCLI({
|
|
14
|
+
* program: 'my-app',
|
|
15
|
+
* commands: { ...chatCommands, other: pikkuCLICommand({ func: otherFunc }) }
|
|
16
|
+
* })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function defineCLICommands<T extends Record<string, CoreCLICommandConfig<any, any, any, any>>>(commands: T): T;
|