@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
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
QueueJobDiscardedError,
|
|
10
10
|
} from './queue-runner.js'
|
|
11
11
|
import { resetPikkuState, pikkuState } from '../../pikku-state.js'
|
|
12
|
-
import { CoreQueueWorker, QueueJob } from './queue.types.js'
|
|
12
|
+
import type { CoreQueueWorker, QueueJob } from './queue.types.js'
|
|
13
13
|
|
|
14
14
|
beforeEach(() => {
|
|
15
15
|
resetPikkuState()
|
|
@@ -38,9 +38,9 @@ const createMockJob = (
|
|
|
38
38
|
data,
|
|
39
39
|
})
|
|
40
40
|
|
|
41
|
-
const addTestQueueFunction = (
|
|
42
|
-
pikkuState(null, 'function', 'meta')[
|
|
43
|
-
|
|
41
|
+
const addTestQueueFunction = (pikkuFuncId: string) => {
|
|
42
|
+
pikkuState(null, 'function', 'meta')[pikkuFuncId] = {
|
|
43
|
+
pikkuFuncId,
|
|
44
44
|
inputSchemaName: null,
|
|
45
45
|
outputSchemaName: null,
|
|
46
46
|
middleware: undefined,
|
|
@@ -51,7 +51,7 @@ const addTestQueueFunction = (pikkuFuncName: string) => {
|
|
|
51
51
|
describe('wireQueueWorker', () => {
|
|
52
52
|
test('should successfully wire a queue worker', () => {
|
|
53
53
|
const mockWorker: CoreQueueWorker = {
|
|
54
|
-
|
|
54
|
+
name: 'test-queue',
|
|
55
55
|
func: {
|
|
56
56
|
func: async (services: any, data: any, wire: any) => {
|
|
57
57
|
return { processed: true }
|
|
@@ -60,10 +60,9 @@ describe('wireQueueWorker', () => {
|
|
|
60
60
|
},
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
// Set up metadata first
|
|
64
63
|
pikkuState(null, 'queue', 'meta')['test-queue'] = {
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
pikkuFuncId: 'queue_test-queue',
|
|
65
|
+
name: 'test-queue',
|
|
67
66
|
}
|
|
68
67
|
addTestQueueFunction('queue_test-queue')
|
|
69
68
|
wireQueueWorker(mockWorker)
|
|
@@ -75,7 +74,7 @@ describe('wireQueueWorker', () => {
|
|
|
75
74
|
|
|
76
75
|
test('should throw error when processor metadata not found', () => {
|
|
77
76
|
const mockWorker: CoreQueueWorker = {
|
|
78
|
-
|
|
77
|
+
name: 'missing-meta-queue',
|
|
79
78
|
func: {
|
|
80
79
|
func: async () => {},
|
|
81
80
|
auth: false,
|
|
@@ -85,7 +84,9 @@ describe('wireQueueWorker', () => {
|
|
|
85
84
|
assert.throws(
|
|
86
85
|
() => wireQueueWorker(mockWorker),
|
|
87
86
|
(error: any) => {
|
|
88
|
-
assert(
|
|
87
|
+
assert(
|
|
88
|
+
error.message.includes('Missing generated metadata for queue worker')
|
|
89
|
+
)
|
|
89
90
|
assert(error.message.includes('missing-meta-queue'))
|
|
90
91
|
return true
|
|
91
92
|
}
|
|
@@ -98,7 +99,7 @@ describe('wireQueueWorker', () => {
|
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
const mockWorker: CoreQueueWorker = {
|
|
101
|
-
|
|
102
|
+
name: 'worker-with-middleware',
|
|
102
103
|
func: {
|
|
103
104
|
func: async () => {},
|
|
104
105
|
auth: false,
|
|
@@ -110,8 +111,8 @@ describe('wireQueueWorker', () => {
|
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
pikkuState(null, 'queue', 'meta')['worker-with-middleware'] = {
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
pikkuFuncId: 'queue_worker-with-middleware',
|
|
115
|
+
name: 'worker-with-middleware',
|
|
115
116
|
}
|
|
116
117
|
addTestQueueFunction('queue_worker-with-middleware')
|
|
117
118
|
wireQueueWorker(mockWorker)
|
|
@@ -126,7 +127,7 @@ describe('wireQueueWorker', () => {
|
|
|
126
127
|
describe('getQueueWorkers', () => {
|
|
127
128
|
test('should return the registrations map', () => {
|
|
128
129
|
const mockWorker: CoreQueueWorker = {
|
|
129
|
-
|
|
130
|
+
name: 'test-queue',
|
|
130
131
|
func: {
|
|
131
132
|
func: async () => {},
|
|
132
133
|
auth: false,
|
|
@@ -134,8 +135,8 @@ describe('getQueueWorkers', () => {
|
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
pikkuState(null, 'queue', 'meta')['test-queue'] = {
|
|
137
|
-
|
|
138
|
-
|
|
138
|
+
pikkuFuncId: 'queue_test-queue',
|
|
139
|
+
name: 'test-queue',
|
|
139
140
|
}
|
|
140
141
|
addTestQueueFunction('queue_test-queue')
|
|
141
142
|
wireQueueWorker(mockWorker)
|
|
@@ -155,7 +156,7 @@ describe('getQueueWorkers', () => {
|
|
|
155
156
|
describe('removeQueueWorker', () => {
|
|
156
157
|
test('should successfully remove a queue worker', async () => {
|
|
157
158
|
const mockWorker: CoreQueueWorker = {
|
|
158
|
-
|
|
159
|
+
name: 'removable-queue',
|
|
159
160
|
func: {
|
|
160
161
|
func: async () => {},
|
|
161
162
|
auth: false,
|
|
@@ -163,8 +164,8 @@ describe('removeQueueWorker', () => {
|
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
pikkuState(null, 'queue', 'meta')['removable-queue'] = {
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
pikkuFuncId: 'queue_removable-queue',
|
|
168
|
+
name: 'removable-queue',
|
|
168
169
|
}
|
|
169
170
|
addTestQueueFunction('queue_removable-queue')
|
|
170
171
|
wireQueueWorker(mockWorker)
|
|
@@ -198,7 +199,7 @@ describe('runQueueJob', () => {
|
|
|
198
199
|
let receivedData: any
|
|
199
200
|
|
|
200
201
|
const mockWorker: CoreQueueWorker = {
|
|
201
|
-
|
|
202
|
+
name: 'simple-queue',
|
|
202
203
|
func: {
|
|
203
204
|
func: async (services: any, data: any, wire: any) => {
|
|
204
205
|
jobProcessed = true
|
|
@@ -210,19 +211,21 @@ describe('runQueueJob', () => {
|
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
pikkuState(null, 'queue', 'meta')['simple-queue'] = {
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
pikkuFuncId: 'queue_simple-queue',
|
|
215
|
+
name: 'simple-queue',
|
|
215
216
|
}
|
|
216
217
|
addTestQueueFunction('queue_simple-queue')
|
|
217
218
|
wireQueueWorker(mockWorker)
|
|
218
219
|
|
|
219
220
|
const mockLogger = createMockLogger()
|
|
221
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
222
|
+
logger: mockLogger,
|
|
223
|
+
} as any)
|
|
220
224
|
const job = createMockJob('simple-queue', 'job-123', {
|
|
221
225
|
message: 'test data',
|
|
222
226
|
})
|
|
223
227
|
|
|
224
228
|
const result = await runQueueJob({
|
|
225
|
-
singletonServices: { logger: mockLogger } as any,
|
|
226
229
|
job,
|
|
227
230
|
})
|
|
228
231
|
|
|
@@ -238,7 +241,7 @@ describe('runQueueJob', () => {
|
|
|
238
241
|
|
|
239
242
|
test('should handle job.fail() by throwing QueueJobFailedError', async () => {
|
|
240
243
|
const mockWorker: CoreQueueWorker = {
|
|
241
|
-
|
|
244
|
+
name: 'fail-queue',
|
|
242
245
|
func: {
|
|
243
246
|
func: async (services: any, data: any, wire: any) => {
|
|
244
247
|
await wire.queue.fail('Processing failed')
|
|
@@ -248,19 +251,21 @@ describe('runQueueJob', () => {
|
|
|
248
251
|
}
|
|
249
252
|
|
|
250
253
|
pikkuState(null, 'queue', 'meta')['fail-queue'] = {
|
|
251
|
-
|
|
252
|
-
|
|
254
|
+
pikkuFuncId: 'queue_fail-queue',
|
|
255
|
+
name: 'fail-queue',
|
|
253
256
|
}
|
|
254
257
|
addTestQueueFunction('queue_fail-queue')
|
|
255
258
|
wireQueueWorker(mockWorker)
|
|
256
259
|
|
|
257
260
|
const mockLogger = createMockLogger()
|
|
261
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
262
|
+
logger: mockLogger,
|
|
263
|
+
} as any)
|
|
258
264
|
const job = createMockJob('fail-queue', 'job-fail-123')
|
|
259
265
|
|
|
260
266
|
await assert.rejects(
|
|
261
267
|
async () => {
|
|
262
268
|
await runQueueJob({
|
|
263
|
-
singletonServices: { logger: mockLogger } as any,
|
|
264
269
|
job,
|
|
265
270
|
})
|
|
266
271
|
},
|
|
@@ -276,7 +281,7 @@ describe('runQueueJob', () => {
|
|
|
276
281
|
|
|
277
282
|
test('should handle job.fail() without reason', async () => {
|
|
278
283
|
const mockWorker: CoreQueueWorker = {
|
|
279
|
-
|
|
284
|
+
name: 'fail-no-reason-queue',
|
|
280
285
|
func: {
|
|
281
286
|
func: async (services: any, data: any, wire: any) => {
|
|
282
287
|
await wire.queue.fail()
|
|
@@ -286,19 +291,21 @@ describe('runQueueJob', () => {
|
|
|
286
291
|
}
|
|
287
292
|
|
|
288
293
|
pikkuState(null, 'queue', 'meta')['fail-no-reason-queue'] = {
|
|
289
|
-
|
|
290
|
-
|
|
294
|
+
pikkuFuncId: 'queue_fail-no-reason-queue',
|
|
295
|
+
name: 'fail-no-reason-queue',
|
|
291
296
|
}
|
|
292
297
|
addTestQueueFunction('queue_fail-no-reason-queue')
|
|
293
298
|
wireQueueWorker(mockWorker)
|
|
294
299
|
|
|
295
300
|
const mockLogger = createMockLogger()
|
|
301
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
302
|
+
logger: mockLogger,
|
|
303
|
+
} as any)
|
|
296
304
|
const job = createMockJob('fail-no-reason-queue', 'job-456')
|
|
297
305
|
|
|
298
306
|
await assert.rejects(
|
|
299
307
|
async () => {
|
|
300
308
|
await runQueueJob({
|
|
301
|
-
singletonServices: { logger: mockLogger } as any,
|
|
302
309
|
job,
|
|
303
310
|
})
|
|
304
311
|
},
|
|
@@ -312,7 +319,7 @@ describe('runQueueJob', () => {
|
|
|
312
319
|
|
|
313
320
|
test('should handle job.discard() by throwing QueueJobDiscardedError', async () => {
|
|
314
321
|
const mockWorker: CoreQueueWorker = {
|
|
315
|
-
|
|
322
|
+
name: 'discard-queue',
|
|
316
323
|
func: {
|
|
317
324
|
func: async (services: any, data: any, wire: any) => {
|
|
318
325
|
await wire.queue.discard('Invalid data')
|
|
@@ -322,19 +329,21 @@ describe('runQueueJob', () => {
|
|
|
322
329
|
}
|
|
323
330
|
|
|
324
331
|
pikkuState(null, 'queue', 'meta')['discard-queue'] = {
|
|
325
|
-
|
|
326
|
-
|
|
332
|
+
pikkuFuncId: 'queue_discard-queue',
|
|
333
|
+
name: 'discard-queue',
|
|
327
334
|
}
|
|
328
335
|
addTestQueueFunction('queue_discard-queue')
|
|
329
336
|
wireQueueWorker(mockWorker)
|
|
330
337
|
|
|
331
338
|
const mockLogger = createMockLogger()
|
|
339
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
340
|
+
logger: mockLogger,
|
|
341
|
+
} as any)
|
|
332
342
|
const job = createMockJob('discard-queue', 'job-discard-789')
|
|
333
343
|
|
|
334
344
|
await assert.rejects(
|
|
335
345
|
async () => {
|
|
336
346
|
await runQueueJob({
|
|
337
|
-
singletonServices: { logger: mockLogger } as any,
|
|
338
347
|
job,
|
|
339
348
|
})
|
|
340
349
|
},
|
|
@@ -352,7 +361,7 @@ describe('runQueueJob', () => {
|
|
|
352
361
|
const progressUpdates: Array<number | string | object> = []
|
|
353
362
|
|
|
354
363
|
const mockWorker: CoreQueueWorker = {
|
|
355
|
-
|
|
364
|
+
name: 'progress-queue',
|
|
356
365
|
func: {
|
|
357
366
|
func: async (services: any, data: any, wire: any) => {
|
|
358
367
|
await wire.queue.updateProgress(25)
|
|
@@ -365,17 +374,19 @@ describe('runQueueJob', () => {
|
|
|
365
374
|
}
|
|
366
375
|
|
|
367
376
|
pikkuState(null, 'queue', 'meta')['progress-queue'] = {
|
|
368
|
-
|
|
369
|
-
|
|
377
|
+
pikkuFuncId: 'queue_progress-queue',
|
|
378
|
+
name: 'progress-queue',
|
|
370
379
|
}
|
|
371
380
|
addTestQueueFunction('queue_progress-queue')
|
|
372
381
|
wireQueueWorker(mockWorker)
|
|
373
382
|
|
|
374
383
|
const mockLogger = createMockLogger()
|
|
384
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
385
|
+
logger: mockLogger,
|
|
386
|
+
} as any)
|
|
375
387
|
const job = createMockJob('progress-queue', 'job-progress-999')
|
|
376
388
|
|
|
377
389
|
await runQueueJob({
|
|
378
|
-
singletonServices: { logger: mockLogger } as any,
|
|
379
390
|
job,
|
|
380
391
|
updateProgress: async (progress) => {
|
|
381
392
|
progressUpdates.push(progress)
|
|
@@ -387,7 +398,7 @@ describe('runQueueJob', () => {
|
|
|
387
398
|
|
|
388
399
|
test('should use default updateProgress when not provided', async () => {
|
|
389
400
|
const mockWorker: CoreQueueWorker = {
|
|
390
|
-
|
|
401
|
+
name: 'default-progress-queue',
|
|
391
402
|
func: {
|
|
392
403
|
func: async (services: any, data: any, wire: any) => {
|
|
393
404
|
await wire.queue.updateProgress(50)
|
|
@@ -398,17 +409,19 @@ describe('runQueueJob', () => {
|
|
|
398
409
|
}
|
|
399
410
|
|
|
400
411
|
pikkuState(null, 'queue', 'meta')['default-progress-queue'] = {
|
|
401
|
-
|
|
402
|
-
|
|
412
|
+
pikkuFuncId: 'queue_default-progress-queue',
|
|
413
|
+
name: 'default-progress-queue',
|
|
403
414
|
}
|
|
404
415
|
addTestQueueFunction('queue_default-progress-queue')
|
|
405
416
|
wireQueueWorker(mockWorker)
|
|
406
417
|
|
|
407
418
|
const mockLogger = createMockLogger()
|
|
419
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
420
|
+
logger: mockLogger,
|
|
421
|
+
} as any)
|
|
408
422
|
const job = createMockJob('default-progress-queue', 'job-111')
|
|
409
423
|
|
|
410
424
|
await runQueueJob({
|
|
411
|
-
singletonServices: { logger: mockLogger } as any,
|
|
412
425
|
job,
|
|
413
426
|
})
|
|
414
427
|
|
|
@@ -421,7 +434,7 @@ describe('runQueueJob', () => {
|
|
|
421
434
|
let capturedWire: any
|
|
422
435
|
|
|
423
436
|
const mockWorker: CoreQueueWorker = {
|
|
424
|
-
|
|
437
|
+
name: 'wire-queue',
|
|
425
438
|
func: {
|
|
426
439
|
func: async (services: any, data: any, wire: any) => {
|
|
427
440
|
capturedWire = wire
|
|
@@ -432,17 +445,19 @@ describe('runQueueJob', () => {
|
|
|
432
445
|
}
|
|
433
446
|
|
|
434
447
|
pikkuState(null, 'queue', 'meta')['wire-queue'] = {
|
|
435
|
-
|
|
436
|
-
|
|
448
|
+
pikkuFuncId: 'queue_wire-queue',
|
|
449
|
+
name: 'wire-queue',
|
|
437
450
|
}
|
|
438
451
|
addTestQueueFunction('queue_wire-queue')
|
|
439
452
|
wireQueueWorker(mockWorker)
|
|
440
453
|
|
|
441
454
|
const mockLogger = createMockLogger()
|
|
455
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
456
|
+
logger: mockLogger,
|
|
457
|
+
} as any)
|
|
442
458
|
const job = createMockJob('wire-queue', 'job-int-123')
|
|
443
459
|
|
|
444
460
|
await runQueueJob({
|
|
445
|
-
singletonServices: { logger: mockLogger } as any,
|
|
446
461
|
job,
|
|
447
462
|
})
|
|
448
463
|
|
|
@@ -455,17 +470,21 @@ describe('runQueueJob', () => {
|
|
|
455
470
|
|
|
456
471
|
test('should throw error when processor metadata not found', async () => {
|
|
457
472
|
const mockLogger = createMockLogger()
|
|
473
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
474
|
+
logger: mockLogger,
|
|
475
|
+
} as any)
|
|
458
476
|
const job = createMockJob('missing-meta-queue', 'job-222')
|
|
459
477
|
|
|
460
478
|
await assert.rejects(
|
|
461
479
|
async () => {
|
|
462
480
|
await runQueueJob({
|
|
463
|
-
singletonServices: { logger: mockLogger } as any,
|
|
464
481
|
job,
|
|
465
482
|
})
|
|
466
483
|
},
|
|
467
484
|
(error: any) => {
|
|
468
|
-
assert(
|
|
485
|
+
assert(
|
|
486
|
+
error.message.includes('Missing generated metadata for queue worker')
|
|
487
|
+
)
|
|
469
488
|
assert(error.message.includes('missing-meta-queue'))
|
|
470
489
|
return true
|
|
471
490
|
}
|
|
@@ -473,19 +492,20 @@ describe('runQueueJob', () => {
|
|
|
473
492
|
})
|
|
474
493
|
|
|
475
494
|
test('should throw error when queue worker registration not found', async () => {
|
|
476
|
-
// Add metadata but not registration
|
|
477
495
|
pikkuState(null, 'queue', 'meta')['no-registration-queue'] = {
|
|
478
|
-
|
|
479
|
-
|
|
496
|
+
pikkuFuncId: 'queue_no-registration-queue',
|
|
497
|
+
name: 'no-registration-queue',
|
|
480
498
|
}
|
|
481
499
|
|
|
482
500
|
const mockLogger = createMockLogger()
|
|
501
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
502
|
+
logger: mockLogger,
|
|
503
|
+
} as any)
|
|
483
504
|
const job = createMockJob('no-registration-queue', 'job-333')
|
|
484
505
|
|
|
485
506
|
await assert.rejects(
|
|
486
507
|
async () => {
|
|
487
508
|
await runQueueJob({
|
|
488
|
-
singletonServices: { logger: mockLogger } as any,
|
|
489
509
|
job,
|
|
490
510
|
})
|
|
491
511
|
},
|
|
@@ -502,7 +522,7 @@ describe('runQueueJob', () => {
|
|
|
502
522
|
const mockWireService = { custom: 'service' }
|
|
503
523
|
|
|
504
524
|
const mockWorker: CoreQueueWorker = {
|
|
505
|
-
|
|
525
|
+
name: 'session-services-queue',
|
|
506
526
|
func: {
|
|
507
527
|
func: async () => 'ok',
|
|
508
528
|
auth: false,
|
|
@@ -510,22 +530,26 @@ describe('runQueueJob', () => {
|
|
|
510
530
|
}
|
|
511
531
|
|
|
512
532
|
pikkuState(null, 'queue', 'meta')['session-services-queue'] = {
|
|
513
|
-
|
|
514
|
-
|
|
533
|
+
pikkuFuncId: 'queue_session-services-queue',
|
|
534
|
+
name: 'session-services-queue',
|
|
515
535
|
}
|
|
516
536
|
addTestQueueFunction('queue_session-services-queue')
|
|
517
537
|
wireQueueWorker(mockWorker)
|
|
518
538
|
|
|
519
539
|
const mockLogger = createMockLogger()
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
job,
|
|
540
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
541
|
+
logger: mockLogger,
|
|
542
|
+
} as any)
|
|
543
|
+
pikkuState(null, 'package', 'factories', {
|
|
525
544
|
createWireServices: async () => {
|
|
526
545
|
createWireServicesCalled = true
|
|
527
546
|
return mockWireService as any
|
|
528
547
|
},
|
|
548
|
+
} as any)
|
|
549
|
+
const job = createMockJob('session-services-queue', 'job-444')
|
|
550
|
+
|
|
551
|
+
await runQueueJob({
|
|
552
|
+
job,
|
|
529
553
|
})
|
|
530
554
|
|
|
531
555
|
assert.equal(createWireServicesCalled, true)
|
|
@@ -533,7 +557,7 @@ describe('runQueueJob', () => {
|
|
|
533
557
|
|
|
534
558
|
test('should log errors when job processing fails', async () => {
|
|
535
559
|
const mockWorker: CoreQueueWorker = {
|
|
536
|
-
|
|
560
|
+
name: 'error-queue',
|
|
537
561
|
func: {
|
|
538
562
|
func: async () => {
|
|
539
563
|
throw new Error('Processing error')
|
|
@@ -543,19 +567,21 @@ describe('runQueueJob', () => {
|
|
|
543
567
|
}
|
|
544
568
|
|
|
545
569
|
pikkuState(null, 'queue', 'meta')['error-queue'] = {
|
|
546
|
-
|
|
547
|
-
|
|
570
|
+
pikkuFuncId: 'queue_error-queue',
|
|
571
|
+
name: 'error-queue',
|
|
548
572
|
}
|
|
549
573
|
addTestQueueFunction('queue_error-queue')
|
|
550
574
|
wireQueueWorker(mockWorker)
|
|
551
575
|
|
|
552
576
|
const mockLogger = createMockLogger()
|
|
577
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
578
|
+
logger: mockLogger,
|
|
579
|
+
} as any)
|
|
553
580
|
const job = createMockJob('error-queue', 'job-555')
|
|
554
581
|
|
|
555
582
|
await assert.rejects(
|
|
556
583
|
async () => {
|
|
557
584
|
await runQueueJob({
|
|
558
|
-
singletonServices: { logger: mockLogger } as any,
|
|
559
585
|
job,
|
|
560
586
|
})
|
|
561
587
|
},
|
|
@@ -580,7 +606,7 @@ describe('runQueueJob', () => {
|
|
|
580
606
|
}
|
|
581
607
|
|
|
582
608
|
const mockWorker: CoreQueueWorker = {
|
|
583
|
-
|
|
609
|
+
name: 'middleware-queue',
|
|
584
610
|
func: {
|
|
585
611
|
func: async () => {
|
|
586
612
|
executionOrder.push('job')
|
|
@@ -592,17 +618,19 @@ describe('runQueueJob', () => {
|
|
|
592
618
|
}
|
|
593
619
|
|
|
594
620
|
pikkuState(null, 'queue', 'meta')['middleware-queue'] = {
|
|
595
|
-
|
|
596
|
-
|
|
621
|
+
pikkuFuncId: 'queue_middleware-queue',
|
|
622
|
+
name: 'middleware-queue',
|
|
597
623
|
}
|
|
598
624
|
addTestQueueFunction('queue_middleware-queue')
|
|
599
625
|
wireQueueWorker(mockWorker)
|
|
600
626
|
|
|
601
627
|
const mockLogger = createMockLogger()
|
|
628
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
629
|
+
logger: mockLogger,
|
|
630
|
+
} as any)
|
|
602
631
|
const job = createMockJob('middleware-queue', 'job-666')
|
|
603
632
|
|
|
604
633
|
await runQueueJob({
|
|
605
|
-
singletonServices: { logger: mockLogger } as any,
|
|
606
634
|
job,
|
|
607
635
|
})
|
|
608
636
|
|
|
@@ -611,7 +639,7 @@ describe('runQueueJob', () => {
|
|
|
611
639
|
|
|
612
640
|
test('should log debug message on successful job completion', async () => {
|
|
613
641
|
const mockWorker: CoreQueueWorker = {
|
|
614
|
-
|
|
642
|
+
name: 'debug-queue',
|
|
615
643
|
func: {
|
|
616
644
|
func: async () => 'success',
|
|
617
645
|
auth: false,
|
|
@@ -619,17 +647,19 @@ describe('runQueueJob', () => {
|
|
|
619
647
|
}
|
|
620
648
|
|
|
621
649
|
pikkuState(null, 'queue', 'meta')['debug-queue'] = {
|
|
622
|
-
|
|
623
|
-
|
|
650
|
+
pikkuFuncId: 'queue_debug-queue',
|
|
651
|
+
name: 'debug-queue',
|
|
624
652
|
}
|
|
625
653
|
addTestQueueFunction('queue_debug-queue')
|
|
626
654
|
wireQueueWorker(mockWorker)
|
|
627
655
|
|
|
628
656
|
const mockLogger = createMockLogger()
|
|
657
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
658
|
+
logger: mockLogger,
|
|
659
|
+
} as any)
|
|
629
660
|
const job = createMockJob('debug-queue', 'job-777')
|
|
630
661
|
|
|
631
662
|
await runQueueJob({
|
|
632
|
-
singletonServices: { logger: mockLogger } as any,
|
|
633
663
|
job,
|
|
634
664
|
})
|
|
635
665
|
|
|
@@ -639,3 +669,42 @@ describe('runQueueJob', () => {
|
|
|
639
669
|
assert(debugLogs[0].message.includes('Successfully processed job job-777'))
|
|
640
670
|
})
|
|
641
671
|
})
|
|
672
|
+
|
|
673
|
+
describe('runQueueJob with pikkuState services', () => {
|
|
674
|
+
test('delegates queue job execution using pikkuState services', async () => {
|
|
675
|
+
const mockWorker: CoreQueueWorker = {
|
|
676
|
+
name: 'bound-runner-queue',
|
|
677
|
+
func: {
|
|
678
|
+
func: async (_services: any, data: any) => {
|
|
679
|
+
return data.value + 1
|
|
680
|
+
},
|
|
681
|
+
auth: false,
|
|
682
|
+
},
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
pikkuState(null, 'queue', 'meta')['bound-runner-queue'] = {
|
|
686
|
+
pikkuFuncId: 'queue_bound-runner-queue',
|
|
687
|
+
name: 'bound-runner-queue',
|
|
688
|
+
}
|
|
689
|
+
addTestQueueFunction('queue_bound-runner-queue')
|
|
690
|
+
wireQueueWorker(mockWorker)
|
|
691
|
+
|
|
692
|
+
const mockLogger = createMockLogger()
|
|
693
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
694
|
+
logger: mockLogger,
|
|
695
|
+
} as any)
|
|
696
|
+
|
|
697
|
+
await runQueueJob({
|
|
698
|
+
job: createMockJob('bound-runner-queue', 'job-888', { value: 41 }),
|
|
699
|
+
})
|
|
700
|
+
|
|
701
|
+
const logs = mockLogger.getLogs()
|
|
702
|
+
assert(
|
|
703
|
+
logs.some(
|
|
704
|
+
(log) =>
|
|
705
|
+
log.level === 'debug' &&
|
|
706
|
+
String(log.message).includes('Successfully processed job job-888')
|
|
707
|
+
)
|
|
708
|
+
)
|
|
709
|
+
})
|
|
710
|
+
})
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PikkuWire } from '../../types/core.types.js'
|
|
2
2
|
import type { CoreQueueWorker, QueueJob, PikkuQueue } from './queue.types.js'
|
|
3
3
|
import type {
|
|
4
4
|
CorePikkuFunctionConfig,
|
|
5
5
|
CorePikkuFunctionSessionless,
|
|
6
6
|
} from '../../function/functions.types.js'
|
|
7
7
|
import { getErrorResponse, PikkuError } from '../../errors/error-handler.js'
|
|
8
|
-
import {
|
|
8
|
+
import { PikkuMissingMetaError } from '../../errors/errors.js'
|
|
9
|
+
import {
|
|
10
|
+
getSingletonServices,
|
|
11
|
+
getCreateWireServices,
|
|
12
|
+
pikkuState,
|
|
13
|
+
} from '../../pikku-state.js'
|
|
9
14
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
10
|
-
import { CreateWireServices } from '../../types/core.types.js'
|
|
11
15
|
|
|
12
16
|
/**
|
|
13
17
|
* Error class for queue processor not found
|
|
@@ -53,15 +57,15 @@ export const wireQueueWorker = <
|
|
|
53
57
|
) => {
|
|
54
58
|
// Get processor metadata
|
|
55
59
|
const meta = pikkuState(null, 'queue', 'meta')
|
|
56
|
-
const processorMeta = meta[queueWorker.
|
|
60
|
+
const processorMeta = meta[queueWorker.name]
|
|
57
61
|
if (!processorMeta) {
|
|
58
|
-
throw new
|
|
59
|
-
`
|
|
62
|
+
throw new PikkuMissingMetaError(
|
|
63
|
+
`Missing generated metadata for queue worker '${queueWorker.name}'`
|
|
60
64
|
)
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
// Register the function with pikku
|
|
64
|
-
addFunction(processorMeta.
|
|
68
|
+
addFunction(processorMeta.pikkuFuncId, {
|
|
65
69
|
func: queueWorker.func.func,
|
|
66
70
|
auth: queueWorker.func.auth,
|
|
67
71
|
permissions: queueWorker.func.permissions,
|
|
@@ -71,7 +75,7 @@ export const wireQueueWorker = <
|
|
|
71
75
|
|
|
72
76
|
// Store processor definition in state - runtime adapters will pick this up
|
|
73
77
|
const registrations = pikkuState(null, 'queue', 'registrations')
|
|
74
|
-
registrations.set(queueWorker.
|
|
78
|
+
registrations.set(queueWorker.name, queueWorker)
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
/**
|
|
@@ -99,22 +103,22 @@ export async function removeQueueWorker(name: string): Promise<void> {
|
|
|
99
103
|
* Process a single queue job - this function is called by queue consumers
|
|
100
104
|
*/
|
|
101
105
|
export async function runQueueJob({
|
|
102
|
-
singletonServices,
|
|
103
|
-
createWireServices,
|
|
104
106
|
job,
|
|
105
107
|
updateProgress,
|
|
106
108
|
}: {
|
|
107
|
-
singletonServices: CoreServices
|
|
108
|
-
createWireServices?: CreateWireServices
|
|
109
109
|
job: QueueJob
|
|
110
110
|
updateProgress?: (progress: number | string | object) => Promise<void>
|
|
111
111
|
}): Promise<void> {
|
|
112
|
+
const singletonServices = getSingletonServices()
|
|
113
|
+
const createWireServices = getCreateWireServices()
|
|
112
114
|
const logger = singletonServices.logger
|
|
113
115
|
|
|
114
116
|
const meta = pikkuState(null, 'queue', 'meta')
|
|
115
117
|
const processorMeta = meta[job.queueName]
|
|
116
118
|
if (!processorMeta) {
|
|
117
|
-
throw new
|
|
119
|
+
throw new PikkuMissingMetaError(
|
|
120
|
+
`Missing generated metadata for queue worker '${job.queueName}'`
|
|
121
|
+
)
|
|
118
122
|
}
|
|
119
123
|
|
|
120
124
|
// Get the queue worker registration to access middleware
|
|
@@ -153,7 +157,7 @@ export async function runQueueJob({
|
|
|
153
157
|
const result = await runPikkuFunc(
|
|
154
158
|
'queue',
|
|
155
159
|
job.queueName,
|
|
156
|
-
processorMeta.
|
|
160
|
+
processorMeta.pikkuFuncId,
|
|
157
161
|
{
|
|
158
162
|
singletonServices,
|
|
159
163
|
createWireServices,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CommonWireMeta } from '../../types/core.types.js'
|
|
2
|
-
import { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
3
|
-
import { QueueConfigMapping } from './validate-worker-config.js'
|
|
1
|
+
import type { CommonWireMeta } from '../../types/core.types.js'
|
|
2
|
+
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
3
|
+
import type { QueueConfigMapping } from './validate-worker-config.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for queue workers - how jobs are processed
|
|
@@ -148,7 +148,7 @@ export interface QueueWorkers {
|
|
|
148
148
|
export type QueueWorkersMeta = Record<
|
|
149
149
|
string,
|
|
150
150
|
CommonWireMeta & {
|
|
151
|
-
|
|
151
|
+
name: string
|
|
152
152
|
config?: PikkuWorkerConfig
|
|
153
153
|
}
|
|
154
154
|
>
|
|
@@ -163,7 +163,7 @@ export type CoreQueueWorker<
|
|
|
163
163
|
any
|
|
164
164
|
> = CorePikkuFunctionConfig<any, any, any>,
|
|
165
165
|
> = {
|
|
166
|
-
|
|
166
|
+
name: string
|
|
167
167
|
func: PikkuFunctionConfig
|
|
168
168
|
config?: PikkuWorkerConfig
|
|
169
169
|
errors?: string[]
|