@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
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
getScheduledTasks,
|
|
7
7
|
} from './scheduler-runner.js'
|
|
8
8
|
import { resetPikkuState, pikkuState } from '../../pikku-state.js'
|
|
9
|
-
import { CoreScheduledTask } from './scheduler.types.js'
|
|
10
|
-
import { CoreUserSession } from '../../types/core.types.js'
|
|
9
|
+
import type { CoreScheduledTask } from './scheduler.types.js'
|
|
10
|
+
import type { CoreUserSession } from '../../types/core.types.js'
|
|
11
11
|
|
|
12
12
|
beforeEach(() => {
|
|
13
13
|
resetPikkuState()
|
|
@@ -38,7 +38,7 @@ describe('wireScheduler', () => {
|
|
|
38
38
|
|
|
39
39
|
// Set up metadata first
|
|
40
40
|
pikkuState(null, 'scheduler', 'meta')['test-task'] = {
|
|
41
|
-
|
|
41
|
+
pikkuFuncId: 'scheduler_test-task',
|
|
42
42
|
name: 'test-task',
|
|
43
43
|
schedule: '0 0 * * *',
|
|
44
44
|
}
|
|
@@ -63,7 +63,10 @@ describe('wireScheduler', () => {
|
|
|
63
63
|
assert.throws(
|
|
64
64
|
() => wireScheduler(mockTask),
|
|
65
65
|
(error: any) => {
|
|
66
|
-
assert.equal(
|
|
66
|
+
assert.equal(
|
|
67
|
+
error.message,
|
|
68
|
+
"Missing generated metadata for scheduled task 'missing-meta-task'"
|
|
69
|
+
)
|
|
67
70
|
return true
|
|
68
71
|
}
|
|
69
72
|
)
|
|
@@ -81,7 +84,7 @@ describe('wireScheduler', () => {
|
|
|
81
84
|
|
|
82
85
|
// Set up metadata
|
|
83
86
|
pikkuState(null, 'scheduler', 'meta')['duplicate-task'] = {
|
|
84
|
-
|
|
87
|
+
pikkuFuncId: 'scheduler_duplicate-task',
|
|
85
88
|
name: 'duplicate-task',
|
|
86
89
|
schedule: '0 0 * * *',
|
|
87
90
|
}
|
|
@@ -121,7 +124,7 @@ describe('wireScheduler', () => {
|
|
|
121
124
|
}
|
|
122
125
|
|
|
123
126
|
pikkuState(null, 'scheduler', 'meta')['task-with-middleware'] = {
|
|
124
|
-
|
|
127
|
+
pikkuFuncId: 'scheduler_task-with-middleware',
|
|
125
128
|
name: 'task-with-middleware',
|
|
126
129
|
schedule: '0 0 * * *',
|
|
127
130
|
}
|
|
@@ -152,21 +155,23 @@ describe('runScheduledTask', () => {
|
|
|
152
155
|
|
|
153
156
|
// Set up metadata and task
|
|
154
157
|
pikkuState(null, 'scheduler', 'meta')['simple-task'] = {
|
|
155
|
-
|
|
158
|
+
pikkuFuncId: 'scheduler_simple-task',
|
|
156
159
|
name: 'simple-task',
|
|
157
160
|
schedule: '0 0 * * *',
|
|
158
161
|
}
|
|
159
162
|
pikkuState(null, 'function', 'meta')['scheduler_simple-task'] = {
|
|
160
|
-
|
|
163
|
+
pikkuFuncId: 'scheduler_simple-task',
|
|
161
164
|
inputSchemaName: null,
|
|
162
165
|
outputSchemaName: null,
|
|
163
166
|
}
|
|
164
167
|
wireScheduler(mockTask)
|
|
165
168
|
|
|
166
169
|
const mockLogger = createMockLogger()
|
|
170
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
171
|
+
logger: mockLogger,
|
|
172
|
+
} as any)
|
|
167
173
|
await runScheduledTask({
|
|
168
174
|
name: 'simple-task',
|
|
169
|
-
singletonServices: { logger: mockLogger } as any,
|
|
170
175
|
})
|
|
171
176
|
|
|
172
177
|
assert.equal(taskExecuted, true)
|
|
@@ -185,31 +190,33 @@ describe('runScheduledTask', () => {
|
|
|
185
190
|
schedule: '0 0 * * *',
|
|
186
191
|
func: {
|
|
187
192
|
func: async (services: any, data: any, wire: any) => {
|
|
188
|
-
receivedSession = await wire.
|
|
193
|
+
receivedSession = await wire.getSession()
|
|
189
194
|
},
|
|
190
195
|
auth: false,
|
|
191
196
|
},
|
|
192
197
|
}
|
|
193
198
|
|
|
194
199
|
pikkuState(null, 'scheduler', 'meta')['task-with-session'] = {
|
|
195
|
-
|
|
200
|
+
pikkuFuncId: 'scheduler_task-with-session',
|
|
196
201
|
name: 'task-with-session',
|
|
197
202
|
schedule: '0 0 * * *',
|
|
198
203
|
}
|
|
199
204
|
pikkuState(null, 'function', 'meta')['scheduler_task-with-session'] = {
|
|
200
|
-
|
|
205
|
+
pikkuFuncId: 'scheduler_task-with-session',
|
|
201
206
|
inputSchemaName: null,
|
|
202
207
|
outputSchemaName: null,
|
|
203
208
|
}
|
|
204
209
|
wireScheduler(mockTask)
|
|
205
210
|
|
|
206
211
|
const mockLogger = createMockLogger()
|
|
212
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
213
|
+
logger: mockLogger,
|
|
214
|
+
} as any)
|
|
207
215
|
const session: CoreUserSession = { userId: 'user123' }
|
|
208
216
|
|
|
209
217
|
await runScheduledTask({
|
|
210
218
|
name: 'task-with-session',
|
|
211
219
|
session,
|
|
212
|
-
singletonServices: { logger: mockLogger } as any,
|
|
213
220
|
})
|
|
214
221
|
|
|
215
222
|
assert.deepEqual(receivedSession, session)
|
|
@@ -217,12 +224,14 @@ describe('runScheduledTask', () => {
|
|
|
217
224
|
|
|
218
225
|
test('should throw ScheduledTaskNotFoundError when task not found', async () => {
|
|
219
226
|
const mockLogger = createMockLogger()
|
|
227
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
228
|
+
logger: mockLogger,
|
|
229
|
+
} as any)
|
|
220
230
|
|
|
221
231
|
await assert.rejects(
|
|
222
232
|
async () => {
|
|
223
233
|
await runScheduledTask({
|
|
224
234
|
name: 'non-existent-task',
|
|
225
|
-
singletonServices: { logger: mockLogger } as any,
|
|
226
235
|
})
|
|
227
236
|
},
|
|
228
237
|
(error: any) => {
|
|
@@ -246,12 +255,14 @@ describe('runScheduledTask', () => {
|
|
|
246
255
|
pikkuState(null, 'scheduler', 'tasks').set('task-without-meta', mockTask)
|
|
247
256
|
|
|
248
257
|
const mockLogger = createMockLogger()
|
|
258
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
259
|
+
logger: mockLogger,
|
|
260
|
+
} as any)
|
|
249
261
|
|
|
250
262
|
await assert.rejects(
|
|
251
263
|
async () => {
|
|
252
264
|
await runScheduledTask({
|
|
253
265
|
name: 'task-without-meta',
|
|
254
|
-
singletonServices: { logger: mockLogger } as any,
|
|
255
266
|
})
|
|
256
267
|
},
|
|
257
268
|
(error: any) => {
|
|
@@ -274,24 +285,26 @@ describe('runScheduledTask', () => {
|
|
|
274
285
|
}
|
|
275
286
|
|
|
276
287
|
pikkuState(null, 'scheduler', 'meta')['skipped-task'] = {
|
|
277
|
-
|
|
288
|
+
pikkuFuncId: 'scheduler_skipped-task',
|
|
278
289
|
name: 'skipped-task',
|
|
279
290
|
schedule: '0 0 * * *',
|
|
280
291
|
}
|
|
281
292
|
pikkuState(null, 'function', 'meta')['scheduler_skipped-task'] = {
|
|
282
|
-
|
|
293
|
+
pikkuFuncId: 'scheduler_skipped-task',
|
|
283
294
|
inputSchemaName: null,
|
|
284
295
|
outputSchemaName: null,
|
|
285
296
|
}
|
|
286
297
|
wireScheduler(mockTask)
|
|
287
298
|
|
|
288
299
|
const mockLogger = createMockLogger()
|
|
300
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
301
|
+
logger: mockLogger,
|
|
302
|
+
} as any)
|
|
289
303
|
|
|
290
304
|
await assert.rejects(
|
|
291
305
|
async () => {
|
|
292
306
|
await runScheduledTask({
|
|
293
307
|
name: 'skipped-task',
|
|
294
|
-
singletonServices: { logger: mockLogger } as any,
|
|
295
308
|
})
|
|
296
309
|
},
|
|
297
310
|
(error: any) => {
|
|
@@ -317,24 +330,26 @@ describe('runScheduledTask', () => {
|
|
|
317
330
|
}
|
|
318
331
|
|
|
319
332
|
pikkuState(null, 'scheduler', 'meta')['skipped-task-no-reason'] = {
|
|
320
|
-
|
|
333
|
+
pikkuFuncId: 'scheduler_skipped-task-no-reason',
|
|
321
334
|
name: 'skipped-task-no-reason',
|
|
322
335
|
schedule: '0 0 * * *',
|
|
323
336
|
}
|
|
324
337
|
pikkuState(null, 'function', 'meta')['scheduler_skipped-task-no-reason'] = {
|
|
325
|
-
|
|
338
|
+
pikkuFuncId: 'scheduler_skipped-task-no-reason',
|
|
326
339
|
inputSchemaName: null,
|
|
327
340
|
outputSchemaName: null,
|
|
328
341
|
}
|
|
329
342
|
wireScheduler(mockTask)
|
|
330
343
|
|
|
331
344
|
const mockLogger = createMockLogger()
|
|
345
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
346
|
+
logger: mockLogger,
|
|
347
|
+
} as any)
|
|
332
348
|
|
|
333
349
|
await assert.rejects(
|
|
334
350
|
async () => {
|
|
335
351
|
await runScheduledTask({
|
|
336
352
|
name: 'skipped-task-no-reason',
|
|
337
|
-
singletonServices: { logger: mockLogger } as any,
|
|
338
353
|
})
|
|
339
354
|
},
|
|
340
355
|
(error: any) => {
|
|
@@ -363,22 +378,24 @@ describe('runScheduledTask', () => {
|
|
|
363
378
|
}
|
|
364
379
|
|
|
365
380
|
pikkuState(null, 'scheduler', 'meta')['wire-task'] = {
|
|
366
|
-
|
|
381
|
+
pikkuFuncId: 'scheduler_wire-task',
|
|
367
382
|
name: 'wire-task',
|
|
368
383
|
schedule: '*/5 * * * *',
|
|
369
384
|
}
|
|
370
385
|
pikkuState(null, 'function', 'meta')['scheduler_wire-task'] = {
|
|
371
|
-
|
|
386
|
+
pikkuFuncId: 'scheduler_wire-task',
|
|
372
387
|
inputSchemaName: null,
|
|
373
388
|
outputSchemaName: null,
|
|
374
389
|
}
|
|
375
390
|
wireScheduler(mockTask)
|
|
376
391
|
|
|
377
392
|
const mockLogger = createMockLogger()
|
|
393
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
394
|
+
logger: mockLogger,
|
|
395
|
+
} as any)
|
|
378
396
|
|
|
379
397
|
await runScheduledTask({
|
|
380
398
|
name: 'wire-task',
|
|
381
|
-
singletonServices: { logger: mockLogger } as any,
|
|
382
399
|
})
|
|
383
400
|
|
|
384
401
|
assert.equal(capturedWire.scheduledTask.name, 'wire-task')
|
|
@@ -401,26 +418,30 @@ describe('runScheduledTask', () => {
|
|
|
401
418
|
}
|
|
402
419
|
|
|
403
420
|
pikkuState(null, 'scheduler', 'meta')['session-services-task'] = {
|
|
404
|
-
|
|
421
|
+
pikkuFuncId: 'scheduler_session-services-task',
|
|
405
422
|
name: 'session-services-task',
|
|
406
423
|
schedule: '0 0 * * *',
|
|
407
424
|
}
|
|
408
425
|
pikkuState(null, 'function', 'meta')['scheduler_session-services-task'] = {
|
|
409
|
-
|
|
426
|
+
pikkuFuncId: 'scheduler_session-services-task',
|
|
410
427
|
inputSchemaName: null,
|
|
411
428
|
outputSchemaName: null,
|
|
412
429
|
}
|
|
413
430
|
wireScheduler(mockTask)
|
|
414
431
|
|
|
415
432
|
const mockLogger = createMockLogger()
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
433
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
434
|
+
logger: mockLogger,
|
|
435
|
+
} as any)
|
|
436
|
+
pikkuState(null, 'package', 'factories', {
|
|
420
437
|
createWireServices: async () => {
|
|
421
438
|
createWireServicesCalled = true
|
|
422
439
|
return mockWireService as any
|
|
423
440
|
},
|
|
441
|
+
} as any)
|
|
442
|
+
|
|
443
|
+
await runScheduledTask({
|
|
444
|
+
name: 'session-services-task',
|
|
424
445
|
})
|
|
425
446
|
|
|
426
447
|
assert.equal(createWireServicesCalled, true)
|
|
@@ -446,23 +467,27 @@ describe('runScheduledTask', () => {
|
|
|
446
467
|
}
|
|
447
468
|
|
|
448
469
|
pikkuState(null, 'scheduler', 'meta')['cleanup-task'] = {
|
|
449
|
-
|
|
470
|
+
pikkuFuncId: 'scheduler_cleanup-task',
|
|
450
471
|
name: 'cleanup-task',
|
|
451
472
|
schedule: '0 0 * * *',
|
|
452
473
|
}
|
|
453
474
|
pikkuState(null, 'function', 'meta')['scheduler_cleanup-task'] = {
|
|
454
|
-
|
|
475
|
+
pikkuFuncId: 'scheduler_cleanup-task',
|
|
455
476
|
inputSchemaName: null,
|
|
456
477
|
outputSchemaName: null,
|
|
457
478
|
}
|
|
458
479
|
wireScheduler(mockTask)
|
|
459
480
|
|
|
460
481
|
const mockLogger = createMockLogger()
|
|
482
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
483
|
+
logger: mockLogger,
|
|
484
|
+
} as any)
|
|
485
|
+
pikkuState(null, 'package', 'factories', {
|
|
486
|
+
createWireServices: async () => mockWireService as any,
|
|
487
|
+
} as any)
|
|
461
488
|
|
|
462
489
|
await runScheduledTask({
|
|
463
490
|
name: 'cleanup-task',
|
|
464
|
-
singletonServices: { logger: mockLogger } as any,
|
|
465
|
-
createWireServices: async () => mockWireService as any,
|
|
466
491
|
})
|
|
467
492
|
|
|
468
493
|
assert.equal(closeCalled, true)
|
|
@@ -490,24 +515,28 @@ describe('runScheduledTask', () => {
|
|
|
490
515
|
}
|
|
491
516
|
|
|
492
517
|
pikkuState(null, 'scheduler', 'meta')['error-cleanup-task'] = {
|
|
493
|
-
|
|
518
|
+
pikkuFuncId: 'scheduler_error-cleanup-task',
|
|
494
519
|
name: 'error-cleanup-task',
|
|
495
520
|
schedule: '0 0 * * *',
|
|
496
521
|
}
|
|
497
522
|
pikkuState(null, 'function', 'meta')['scheduler_error-cleanup-task'] = {
|
|
498
|
-
|
|
523
|
+
pikkuFuncId: 'scheduler_error-cleanup-task',
|
|
499
524
|
inputSchemaName: null,
|
|
500
525
|
outputSchemaName: null,
|
|
501
526
|
}
|
|
502
527
|
wireScheduler(mockTask)
|
|
503
528
|
|
|
504
529
|
const mockLogger = createMockLogger()
|
|
530
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
531
|
+
logger: mockLogger,
|
|
532
|
+
} as any)
|
|
533
|
+
pikkuState(null, 'package', 'factories', {
|
|
534
|
+
createWireServices: async () => mockWireService as any,
|
|
535
|
+
} as any)
|
|
505
536
|
|
|
506
537
|
await assert.rejects(async () => {
|
|
507
538
|
await runScheduledTask({
|
|
508
539
|
name: 'error-cleanup-task',
|
|
509
|
-
singletonServices: { logger: mockLogger } as any,
|
|
510
|
-
createWireServices: async () => mockWireService as any,
|
|
511
540
|
})
|
|
512
541
|
})
|
|
513
542
|
|
|
@@ -527,23 +556,25 @@ describe('runScheduledTask', () => {
|
|
|
527
556
|
}
|
|
528
557
|
|
|
529
558
|
pikkuState(null, 'scheduler', 'meta')['error-task'] = {
|
|
530
|
-
|
|
559
|
+
pikkuFuncId: 'scheduler_error-task',
|
|
531
560
|
name: 'error-task',
|
|
532
561
|
schedule: '0 0 * * *',
|
|
533
562
|
}
|
|
534
563
|
pikkuState(null, 'function', 'meta')['scheduler_error-task'] = {
|
|
535
|
-
|
|
564
|
+
pikkuFuncId: 'scheduler_error-task',
|
|
536
565
|
inputSchemaName: null,
|
|
537
566
|
outputSchemaName: null,
|
|
538
567
|
}
|
|
539
568
|
wireScheduler(mockTask)
|
|
540
569
|
|
|
541
570
|
const mockLogger = createMockLogger()
|
|
571
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
572
|
+
logger: mockLogger,
|
|
573
|
+
} as any)
|
|
542
574
|
|
|
543
575
|
await assert.rejects(async () => {
|
|
544
576
|
await runScheduledTask({
|
|
545
577
|
name: 'error-task',
|
|
546
|
-
singletonServices: { logger: mockLogger } as any,
|
|
547
578
|
})
|
|
548
579
|
})
|
|
549
580
|
|
|
@@ -574,22 +605,24 @@ describe('runScheduledTask', () => {
|
|
|
574
605
|
}
|
|
575
606
|
|
|
576
607
|
pikkuState(null, 'scheduler', 'meta')['middleware-task'] = {
|
|
577
|
-
|
|
608
|
+
pikkuFuncId: 'scheduler_middleware-task',
|
|
578
609
|
name: 'middleware-task',
|
|
579
610
|
schedule: '0 0 * * *',
|
|
580
611
|
}
|
|
581
612
|
pikkuState(null, 'function', 'meta')['scheduler_middleware-task'] = {
|
|
582
|
-
|
|
613
|
+
pikkuFuncId: 'scheduler_middleware-task',
|
|
583
614
|
inputSchemaName: null,
|
|
584
615
|
outputSchemaName: null,
|
|
585
616
|
}
|
|
586
617
|
wireScheduler(mockTask)
|
|
587
618
|
|
|
588
619
|
const mockLogger = createMockLogger()
|
|
620
|
+
pikkuState(null, 'package', 'singletonServices', {
|
|
621
|
+
logger: mockLogger,
|
|
622
|
+
} as any)
|
|
589
623
|
|
|
590
624
|
await runScheduledTask({
|
|
591
625
|
name: 'middleware-task',
|
|
592
|
-
singletonServices: { logger: mockLogger } as any,
|
|
593
626
|
})
|
|
594
627
|
|
|
595
628
|
assert.deepEqual(executionOrder, ['middleware', 'task'])
|
|
@@ -608,7 +641,7 @@ describe('getScheduledTasks', () => {
|
|
|
608
641
|
}
|
|
609
642
|
|
|
610
643
|
pikkuState(null, 'scheduler', 'meta')['test-task'] = {
|
|
611
|
-
|
|
644
|
+
pikkuFuncId: 'scheduler_test-task',
|
|
612
645
|
name: 'test-task',
|
|
613
646
|
schedule: '0 0 * * *',
|
|
614
647
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PikkuWire,
|
|
3
|
-
type CoreServices,
|
|
4
|
-
type CoreSingletonServices,
|
|
5
|
-
type CoreUserSession,
|
|
6
|
-
type CreateWireServices,
|
|
7
|
-
} from '../../types/core.types.js'
|
|
1
|
+
import type { PikkuWire, CoreUserSession } from '../../types/core.types.js'
|
|
8
2
|
import type { CoreScheduledTask } from './scheduler.types.js'
|
|
9
3
|
import { getErrorResponse, PikkuError } from '../../errors/error-handler.js'
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
4
|
+
import { PikkuMissingMetaError } from '../../errors/errors.js'
|
|
5
|
+
import {
|
|
6
|
+
getSingletonServices,
|
|
7
|
+
getCreateWireServices,
|
|
8
|
+
pikkuState,
|
|
9
|
+
} from '../../pikku-state.js'
|
|
12
10
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
13
|
-
import { PikkuSessionService } from '../../services/user-session-service.js'
|
|
14
11
|
import {
|
|
12
|
+
PikkuSessionService,
|
|
13
|
+
createMiddlewareSessionWireProps,
|
|
14
|
+
} from '../../services/user-session-service.js'
|
|
15
|
+
import type {
|
|
15
16
|
CorePikkuFunctionConfig,
|
|
16
17
|
CorePikkuFunctionSessionless,
|
|
17
18
|
} from '../../function/functions.types.js'
|
|
@@ -19,12 +20,6 @@ import {
|
|
|
19
20
|
export type RunScheduledTasksParams = {
|
|
20
21
|
name: string
|
|
21
22
|
session?: CoreUserSession
|
|
22
|
-
singletonServices: CoreSingletonServices
|
|
23
|
-
createWireServices?: CreateWireServices<
|
|
24
|
-
CoreSingletonServices,
|
|
25
|
-
CoreServices<CoreSingletonServices>,
|
|
26
|
-
CoreUserSession
|
|
27
|
-
>
|
|
28
23
|
}
|
|
29
24
|
|
|
30
25
|
export const wireScheduler = <
|
|
@@ -37,9 +32,11 @@ export const wireScheduler = <
|
|
|
37
32
|
const meta = pikkuState(null, 'scheduler', 'meta')
|
|
38
33
|
const taskMeta = meta[scheduledTask.name]
|
|
39
34
|
if (!taskMeta) {
|
|
40
|
-
throw new
|
|
35
|
+
throw new PikkuMissingMetaError(
|
|
36
|
+
`Missing generated metadata for scheduled task '${scheduledTask.name}'`
|
|
37
|
+
)
|
|
41
38
|
}
|
|
42
|
-
addFunction(taskMeta.
|
|
39
|
+
addFunction(taskMeta.pikkuFuncId, {
|
|
43
40
|
func: scheduledTask.func.func,
|
|
44
41
|
auth: scheduledTask.func.auth,
|
|
45
42
|
permissions: scheduledTask.func.permissions,
|
|
@@ -72,10 +69,9 @@ class ScheduledTaskSkippedError extends PikkuError {
|
|
|
72
69
|
export async function runScheduledTask({
|
|
73
70
|
name,
|
|
74
71
|
session,
|
|
75
|
-
singletonServices,
|
|
76
|
-
createWireServices,
|
|
77
72
|
}: RunScheduledTasksParams): Promise<void> {
|
|
78
|
-
|
|
73
|
+
const singletonServices = getSingletonServices()
|
|
74
|
+
const createWireServices = getCreateWireServices()
|
|
79
75
|
const task = pikkuState(null, 'scheduler', 'tasks').get(name)
|
|
80
76
|
const meta = pikkuState(null, 'scheduler', 'meta')[name]
|
|
81
77
|
|
|
@@ -103,7 +99,7 @@ export async function runScheduledTask({
|
|
|
103
99
|
throw new ScheduledTaskSkippedError(name, reason)
|
|
104
100
|
},
|
|
105
101
|
},
|
|
106
|
-
|
|
102
|
+
...createMiddlewareSessionWireProps(userSession),
|
|
107
103
|
}
|
|
108
104
|
|
|
109
105
|
try {
|
|
@@ -111,7 +107,7 @@ export async function runScheduledTask({
|
|
|
111
107
|
`Running schedule task: ${name} | schedule: ${task.schedule}`
|
|
112
108
|
)
|
|
113
109
|
|
|
114
|
-
await runPikkuFunc('scheduler', meta.name, meta.
|
|
110
|
+
await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncId, {
|
|
115
111
|
singletonServices,
|
|
116
112
|
createWireServices,
|
|
117
113
|
auth: false,
|
|
@@ -120,6 +116,7 @@ export async function runScheduledTask({
|
|
|
120
116
|
wireMiddleware: task.middleware,
|
|
121
117
|
tags: task.tags,
|
|
122
118
|
wire,
|
|
119
|
+
sessionService: userSession,
|
|
123
120
|
})
|
|
124
121
|
} catch (e: any) {
|
|
125
122
|
const errorResponse = getErrorResponse(e)
|
|
@@ -127,10 +124,6 @@ export async function runScheduledTask({
|
|
|
127
124
|
singletonServices.logger.error(e)
|
|
128
125
|
}
|
|
129
126
|
throw e
|
|
130
|
-
} finally {
|
|
131
|
-
if (wireServices) {
|
|
132
|
-
await closeWireServices(singletonServices.logger, wireServices)
|
|
133
|
-
}
|
|
134
127
|
}
|
|
135
128
|
}
|
|
136
129
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { wireSecret } from './secret.types.js'
|
|
2
|
+
export type {
|
|
3
|
+
CoreSecret,
|
|
4
|
+
OAuth2CredentialConfig,
|
|
5
|
+
SecretDefinitionMeta,
|
|
6
|
+
SecretDefinitionsMeta,
|
|
7
|
+
SecretDefinitions,
|
|
8
|
+
} from './secret.types.js'
|
|
9
|
+
export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js'
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type CoreSecret<T = unknown> = {
|
|
2
|
+
name: string
|
|
3
|
+
displayName: string
|
|
4
|
+
description?: string
|
|
5
|
+
secretId: string
|
|
6
|
+
schema: T
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type OAuth2CredentialConfig = {
|
|
10
|
+
tokenSecretId: string
|
|
11
|
+
authorizationUrl: string
|
|
12
|
+
tokenUrl: string
|
|
13
|
+
scopes: string[]
|
|
14
|
+
pkce?: boolean
|
|
15
|
+
additionalParams?: Record<string, string>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type SecretDefinitionMeta = {
|
|
19
|
+
name: string
|
|
20
|
+
displayName: string
|
|
21
|
+
description?: string
|
|
22
|
+
secretId: string
|
|
23
|
+
schema?: Record<string, unknown> | string
|
|
24
|
+
oauth2?: OAuth2CredentialConfig
|
|
25
|
+
sourceFile?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type SecretDefinitionsMeta = Record<string, SecretDefinitionMeta>
|
|
29
|
+
|
|
30
|
+
export type SecretDefinitions = SecretDefinitionMeta[]
|
|
31
|
+
|
|
32
|
+
export const wireSecret = <T>(_config: CoreSecret<T>): void => {}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { describe, test } from 'node:test'
|
|
2
|
+
import assert from 'node:assert'
|
|
3
|
+
import { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js'
|
|
4
|
+
|
|
5
|
+
describe('validateAndBuildSecretDefinitionsMeta', () => {
|
|
6
|
+
test('should build meta from single definition', () => {
|
|
7
|
+
const definitions = [
|
|
8
|
+
{
|
|
9
|
+
name: 'stripe',
|
|
10
|
+
displayName: 'Stripe',
|
|
11
|
+
description: 'API key',
|
|
12
|
+
secretId: 'STRIPE_KEY',
|
|
13
|
+
sourceFile: 'a.ts',
|
|
14
|
+
},
|
|
15
|
+
]
|
|
16
|
+
const result = validateAndBuildSecretDefinitionsMeta(
|
|
17
|
+
definitions as any,
|
|
18
|
+
new Map()
|
|
19
|
+
)
|
|
20
|
+
assert.ok(result['stripe'])
|
|
21
|
+
assert.strictEqual(result['stripe'].secretId, 'STRIPE_KEY')
|
|
22
|
+
assert.strictEqual(result['stripe'].displayName, 'Stripe')
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('should allow duplicate secretId with same schema', () => {
|
|
26
|
+
const schemaLookup = new Map([
|
|
27
|
+
['schema1', { variableName: 'Schema', sourceFile: 'types.ts' }],
|
|
28
|
+
])
|
|
29
|
+
const definitions = [
|
|
30
|
+
{
|
|
31
|
+
name: 'cred1',
|
|
32
|
+
displayName: 'Cred 1',
|
|
33
|
+
description: 'd',
|
|
34
|
+
secretId: 'SHARED',
|
|
35
|
+
schema: 'schema1',
|
|
36
|
+
sourceFile: 'a.ts',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'cred2',
|
|
40
|
+
displayName: 'Cred 2',
|
|
41
|
+
description: 'd',
|
|
42
|
+
secretId: 'SHARED',
|
|
43
|
+
schema: 'schema1',
|
|
44
|
+
sourceFile: 'b.ts',
|
|
45
|
+
},
|
|
46
|
+
]
|
|
47
|
+
const result = validateAndBuildSecretDefinitionsMeta(
|
|
48
|
+
definitions as any,
|
|
49
|
+
schemaLookup
|
|
50
|
+
)
|
|
51
|
+
assert.ok(result['cred1'])
|
|
52
|
+
assert.ok(result['cred2'])
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
test('should throw when duplicate secretId has different schemas', () => {
|
|
56
|
+
const schemaLookup = new Map([
|
|
57
|
+
['schema1', { variableName: 'SchemaA', sourceFile: 'types.ts' }],
|
|
58
|
+
['schema2', { variableName: 'SchemaB', sourceFile: 'types2.ts' }],
|
|
59
|
+
])
|
|
60
|
+
const definitions = [
|
|
61
|
+
{
|
|
62
|
+
name: 'cred1',
|
|
63
|
+
displayName: 'Cred 1',
|
|
64
|
+
description: 'd',
|
|
65
|
+
secretId: 'SHARED',
|
|
66
|
+
schema: 'schema1',
|
|
67
|
+
sourceFile: 'a.ts',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'cred2',
|
|
71
|
+
displayName: 'Cred 2',
|
|
72
|
+
description: 'd',
|
|
73
|
+
secretId: 'SHARED',
|
|
74
|
+
schema: 'schema2',
|
|
75
|
+
sourceFile: 'b.ts',
|
|
76
|
+
},
|
|
77
|
+
]
|
|
78
|
+
assert.throws(
|
|
79
|
+
() =>
|
|
80
|
+
validateAndBuildSecretDefinitionsMeta(definitions as any, schemaLookup),
|
|
81
|
+
(err: any) => err.message.includes('different schemas')
|
|
82
|
+
)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
test('should throw when duplicate secretId has different oauth2 configs', () => {
|
|
86
|
+
const definitions = [
|
|
87
|
+
{
|
|
88
|
+
name: 'cred1',
|
|
89
|
+
displayName: 'C1',
|
|
90
|
+
description: 'd',
|
|
91
|
+
secretId: 'OAUTH',
|
|
92
|
+
oauth2: { provider: 'google' },
|
|
93
|
+
sourceFile: 'a.ts',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'cred2',
|
|
97
|
+
displayName: 'C2',
|
|
98
|
+
description: 'd',
|
|
99
|
+
secretId: 'OAUTH',
|
|
100
|
+
oauth2: { provider: 'github' },
|
|
101
|
+
sourceFile: 'b.ts',
|
|
102
|
+
},
|
|
103
|
+
]
|
|
104
|
+
assert.throws(
|
|
105
|
+
() =>
|
|
106
|
+
validateAndBuildSecretDefinitionsMeta(definitions as any, new Map()),
|
|
107
|
+
(err: any) => err.message.includes('different configurations')
|
|
108
|
+
)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
test('should handle empty definitions', () => {
|
|
112
|
+
const result = validateAndBuildSecretDefinitionsMeta([], new Map())
|
|
113
|
+
assert.deepStrictEqual(result, {})
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
test('should not duplicate names in meta', () => {
|
|
117
|
+
const definitions = [
|
|
118
|
+
{
|
|
119
|
+
name: 'same',
|
|
120
|
+
displayName: 'Same',
|
|
121
|
+
description: 'd',
|
|
122
|
+
secretId: 'KEY1',
|
|
123
|
+
sourceFile: 'a.ts',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'same',
|
|
127
|
+
displayName: 'Same',
|
|
128
|
+
description: 'd',
|
|
129
|
+
secretId: 'KEY2',
|
|
130
|
+
sourceFile: 'b.ts',
|
|
131
|
+
},
|
|
132
|
+
]
|
|
133
|
+
const result = validateAndBuildSecretDefinitionsMeta(
|
|
134
|
+
definitions as any,
|
|
135
|
+
new Map()
|
|
136
|
+
)
|
|
137
|
+
assert.ok(result['same'])
|
|
138
|
+
assert.strictEqual(result['same'].secretId, 'KEY1')
|
|
139
|
+
})
|
|
140
|
+
})
|