@pikku/core 0.12.72 → 0.12.77
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 +1171 -0
- package/dist/column-form.d.ts +32 -0
- package/dist/column-form.js +42 -0
- package/dist/crypto-utils.d.ts +43 -7
- package/dist/crypto-utils.js +163 -42
- package/dist/data-classification.d.ts +44 -0
- package/dist/dev/hot-reload.js +11 -30
- package/dist/dev/module-runner.d.ts +3 -7
- package/dist/dev/module-runner.js +4 -10
- package/dist/dev/reload-meta.d.ts +8 -20
- package/dist/dev/reload-meta.js +9 -29
- package/dist/errors/error-handler.d.ts +5 -30
- package/dist/errors/error-handler.js +16 -32
- package/dist/errors/errors.d.ts +32 -151
- package/dist/errors/errors.js +55 -157
- package/dist/function/abort-scope.d.ts +47 -0
- package/dist/function/abort-scope.js +63 -0
- package/dist/function/function-runner.js +37 -32
- package/dist/function/functions.types.d.ts +57 -136
- package/dist/function/functions.types.js +0 -58
- package/dist/function/index.d.ts +1 -1
- package/dist/function/list.types.d.ts +12 -62
- package/dist/function/list.types.js +4 -25
- package/dist/handle-error.d.ts +0 -13
- package/dist/handle-error.js +0 -18
- package/dist/index.d.ts +11 -5
- package/dist/index.js +7 -2
- package/dist/middleware/auth-apikey.d.ts +3 -18
- package/dist/middleware/auth-apikey.js +0 -17
- package/dist/middleware/auth-bearer.d.ts +6 -41
- package/dist/middleware/auth-bearer.js +5 -41
- package/dist/middleware/auth-cookie.d.ts +5 -27
- package/dist/middleware/auth-cookie.js +2 -26
- package/dist/middleware/cors.d.ts +7 -34
- package/dist/middleware/cors.js +7 -34
- package/dist/middleware/remote-auth.d.ts +3 -1
- package/dist/middleware/remote-auth.js +4 -3
- package/dist/middleware/telemetry.d.ts +8 -33
- package/dist/middleware/telemetry.js +2 -31
- package/dist/middleware-runner.d.ts +4 -55
- package/dist/middleware-runner.js +5 -74
- package/dist/permissions.d.ts +3 -44
- package/dist/permissions.js +19 -71
- package/dist/pikku-request.d.ts +0 -6
- package/dist/pikku-request.js +0 -6
- package/dist/pikku-state.d.ts +0 -26
- package/dist/pikku-state.js +2 -30
- package/dist/remote.d.ts +3 -5
- package/dist/remote.js +9 -8
- package/dist/schema.d.ts +5 -39
- package/dist/schema.js +5 -39
- package/dist/scopes.d.ts +4 -23
- package/dist/scopes.js +7 -48
- package/dist/secret-value.d.ts +56 -0
- package/dist/secret-value.js +46 -0
- package/dist/services/ai-agent-runner-service.d.ts +20 -0
- package/dist/services/ai-embedding-service.d.ts +2 -25
- package/dist/services/audit-service.d.ts +74 -4
- package/dist/services/audit-service.js +8 -7
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/credential-wire-service.d.ts +5 -0
- package/dist/services/credential-wire-service.js +9 -1
- package/dist/services/deployment-service.d.ts +3 -9
- package/dist/services/email-service.d.ts +2 -1
- package/dist/services/gateway-service.d.ts +0 -15
- package/dist/services/http-personas.d.ts +80 -0
- package/dist/services/http-personas.js +233 -0
- package/dist/services/in-memory-queue-service.d.ts +0 -14
- package/dist/services/in-memory-queue-service.js +1 -15
- package/dist/services/in-memory-trigger-service.d.ts +0 -18
- package/dist/services/in-memory-trigger-service.js +1 -18
- package/dist/services/in-memory-workflow-service.d.ts +0 -16
- package/dist/services/in-memory-workflow-service.js +4 -33
- package/dist/services/index.d.ts +8 -9
- package/dist/services/index.js +3 -6
- package/dist/services/istanbul-coverage-service.d.ts +1 -5
- package/dist/services/istanbul-coverage-service.js +2 -8
- package/dist/services/jwt-service.d.ts +1 -16
- package/dist/services/local-content-request-handler.d.ts +29 -0
- package/dist/services/local-content-request-handler.js +176 -0
- package/dist/services/local-content.d.ts +13 -2
- package/dist/services/local-content.js +40 -13
- package/dist/services/local-gateway-service.d.ts +0 -16
- package/dist/services/local-gateway-service.js +2 -17
- package/dist/services/local-secrets.d.ts +4 -7
- package/dist/services/local-secrets.js +7 -7
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +22 -40
- package/dist/services/meta-service.d.ts +23 -26
- package/dist/services/meta-service.js +22 -36
- package/dist/services/personas-service.d.ts +134 -0
- package/dist/services/personas-service.js +40 -0
- package/dist/services/pikku-user-id.js +0 -4
- package/dist/services/queue-webhook-service.d.ts +2 -36
- package/dist/services/queue-webhook-service.js +10 -42
- package/dist/services/scheduler-service.d.ts +1 -50
- package/dist/services/scheduler-service.js +0 -10
- package/dist/services/schema-service.d.ts +1 -24
- package/dist/services/scope-service.d.ts +49 -34
- package/dist/services/scoped-secret-service.d.ts +4 -7
- package/dist/services/scoped-secret-service.js +0 -4
- package/dist/services/secret-host-binding.d.ts +8 -0
- package/dist/services/secret-host-binding.js +36 -0
- package/dist/services/secret-service.d.ts +12 -35
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +21 -0
- package/dist/services/stub-tracker.d.ts +7 -18
- package/dist/services/stub-tracker.js +8 -18
- package/dist/services/system-role-guard.d.ts +33 -0
- package/dist/services/system-role-guard.js +38 -0
- package/dist/services/trigger-service.d.ts +0 -12
- package/dist/services/typed-secret-service.d.ts +5 -11
- package/dist/services/typed-secret-service.js +1 -7
- package/dist/services/v8-coverage-service.d.ts +2 -3
- package/dist/services/v8-coverage-service.js +1 -2
- package/dist/services/variables-service.d.ts +1 -8
- package/dist/services/webhook-service.d.ts +21 -64
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +6 -23
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +120 -219
- package/dist/types/core.types.js +0 -42
- package/dist/types/state.types.d.ts +4 -9
- package/dist/utils/hmac.d.ts +4 -10
- package/dist/utils/hmac.js +4 -10
- package/dist/utils/safe-fetch.d.ts +7 -35
- package/dist/utils/safe-fetch.js +13 -53
- package/dist/utils.d.ts +1 -6
- package/dist/utils.js +6 -15
- package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
- package/dist/wirings/actor-flow/index.d.ts +0 -9
- package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
- package/dist/wirings/actor-flow/run-conversation.js +14 -7
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
- package/dist/wirings/ai-agent/ai-agent-agui.js +46 -12
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
- package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
- package/dist/wirings/ai-agent/ai-agent-prepare.js +65 -132
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
- package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
- package/dist/wirings/ai-agent/ai-agent-runner.js +63 -22
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +180 -64
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +124 -4
- package/dist/wirings/ai-agent/index.d.ts +6 -4
- package/dist/wirings/ai-agent/index.js +5 -4
- package/dist/wirings/ai-agent/voice-input.d.ts +59 -1
- package/dist/wirings/ai-agent/voice-input.js +90 -12
- package/dist/wirings/ai-agent/voice-output.d.ts +69 -1
- package/dist/wirings/ai-agent/voice-output.js +162 -50
- package/dist/wirings/channel/channel-common.d.ts +7 -20
- package/dist/wirings/channel/channel-common.js +7 -21
- package/dist/wirings/channel/channel-handler.js +25 -6
- package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
- package/dist/wirings/channel/channel-host-rpc.js +38 -0
- package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
- package/dist/wirings/channel/channel-middleware-runner.js +0 -12
- package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
- package/dist/wirings/channel/channel-rpc-registry.js +89 -0
- package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
- package/dist/wirings/channel/channel-rpc-responder.js +71 -0
- package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
- package/dist/wirings/channel/channel-rpc-service.js +106 -0
- package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
- package/dist/wirings/channel/channel-rpc-validators.js +30 -0
- package/dist/wirings/channel/channel-rpc.d.ts +5 -0
- package/dist/wirings/channel/channel-rpc.js +5 -0
- package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
- package/dist/wirings/channel/channel-rpc.types.js +50 -0
- package/dist/wirings/channel/channel-runner.d.ts +0 -4
- package/dist/wirings/channel/channel-runner.js +0 -14
- package/dist/wirings/channel/channel-store.d.ts +0 -10
- package/dist/wirings/channel/channel.types.d.ts +12 -1
- package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
- package/dist/wirings/channel/define-channel-routes.js +0 -20
- package/dist/wirings/channel/eventhub-service.d.ts +0 -18
- package/dist/wirings/channel/index.d.ts +4 -1
- package/dist/wirings/channel/index.js +2 -0
- package/dist/wirings/channel/local/local-channel-runner.js +3 -1
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
- package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
- package/dist/wirings/channel/log-channels.d.ts +0 -4
- package/dist/wirings/channel/log-channels.js +0 -4
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
- package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
- package/dist/wirings/cli/channel/cli-approval.js +81 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
- package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
- package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +38 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +129 -0
- package/dist/wirings/cli/channel/index.d.ts +5 -0
- package/dist/wirings/cli/channel/index.js +2 -0
- package/dist/wirings/cli/cli-runner.d.ts +20 -20
- package/dist/wirings/cli/cli-runner.js +28 -89
- package/dist/wirings/cli/cli.types.d.ts +14 -3
- package/dist/wirings/cli/command-parser.d.ts +1 -10
- package/dist/wirings/cli/command-parser.js +10 -87
- package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
- package/dist/wirings/cli/define-cli-commands.js +1 -17
- package/dist/wirings/credential/credential.types.d.ts +0 -12
- package/dist/wirings/credential/define-credential.d.ts +48 -0
- package/dist/wirings/credential/define-credential.js +47 -0
- package/dist/wirings/credential/index.d.ts +1 -1
- package/dist/wirings/credential/index.js +1 -1
- package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
- package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
- package/dist/wirings/gateway/gateway-runner.js +8 -105
- package/dist/wirings/gateway/gateway.types.d.ts +7 -80
- package/dist/wirings/http/http-routes.d.ts +0 -63
- package/dist/wirings/http/http-routes.js +0 -63
- package/dist/wirings/http/http-runner.d.ts +0 -99
- package/dist/wirings/http/http-runner.js +9 -165
- package/dist/wirings/http/http.types.d.ts +14 -55
- package/dist/wirings/http/log-http-routes.d.ts +0 -4
- package/dist/wirings/http/log-http-routes.js +0 -4
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +0 -40
- package/dist/wirings/http/pikku-fetch-http-request.js +0 -58
- package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
- package/dist/wirings/http/routers/path-to-regex.js +2 -13
- package/dist/wirings/http/web-request.d.ts +0 -8
- package/dist/wirings/http/web-request.js +25 -17
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -4
- package/dist/wirings/mcp/mcp-runner.js +1 -14
- package/dist/wirings/mcp/mcp.types.d.ts +2 -35
- package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
- package/dist/wirings/oauth2/oauth2.types.js +0 -3
- package/dist/wirings/persona/define-personas.d.ts +32 -0
- package/dist/wirings/persona/define-personas.js +31 -0
- package/dist/wirings/persona/index.d.ts +21 -0
- package/dist/wirings/persona/index.js +17 -0
- package/dist/wirings/persona/persona-email.d.ts +37 -0
- package/dist/wirings/persona/persona-email.js +69 -0
- package/dist/wirings/persona/persona-environments.d.ts +45 -0
- package/dist/wirings/persona/persona-environments.js +81 -0
- package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
- package/dist/wirings/persona/persona-mailbox.js +53 -0
- package/dist/wirings/persona/persona.types.d.ts +136 -0
- package/dist/wirings/persona/persona.types.js +1 -0
- package/dist/wirings/persona/validate-personas.d.ts +53 -0
- package/dist/wirings/persona/validate-personas.js +94 -0
- package/dist/wirings/queue/index.d.ts +3 -0
- package/dist/wirings/queue/index.js +2 -3
- package/dist/wirings/queue/queue-identity.d.ts +28 -0
- package/dist/wirings/queue/queue-identity.js +103 -0
- package/dist/wirings/queue/queue-runner.d.ts +0 -19
- package/dist/wirings/queue/queue-runner.js +9 -30
- package/dist/wirings/queue/queue.types.d.ts +20 -90
- package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
- package/dist/wirings/queue/register-queue-helper.js +0 -11
- package/dist/wirings/queue/signed-queue-service.d.ts +17 -0
- package/dist/wirings/queue/signed-queue-service.js +42 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
- package/dist/wirings/queue/validate-worker-config.js +0 -14
- package/dist/wirings/role/define-system-role.d.ts +32 -0
- package/dist/wirings/role/define-system-role.js +31 -0
- package/dist/wirings/role/index.d.ts +3 -0
- package/dist/wirings/role/index.js +2 -0
- package/dist/wirings/role/role.types.d.ts +43 -0
- package/dist/wirings/role/role.types.js +1 -0
- package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
- package/dist/wirings/role/validate-role-definitions.js +71 -0
- package/dist/wirings/rpc/addon-runner.d.ts +0 -19
- package/dist/wirings/rpc/addon-runner.js +0 -51
- package/dist/wirings/rpc/remote-addon-auth.d.ts +3 -13
- package/dist/wirings/rpc/remote-addon-auth.js +7 -11
- package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
- package/dist/wirings/rpc/rpc-runner.js +88 -105
- package/dist/wirings/rpc/rpc-types.d.ts +7 -6
- package/dist/wirings/rpc/wire-addon.d.ts +25 -0
- package/dist/wirings/rpc/wire-addon.js +62 -0
- package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
- package/dist/wirings/rpc/wire-remote-addon.js +0 -8
- package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
- package/dist/wirings/scheduler/log-schedulers.js +0 -4
- package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
- package/dist/wirings/scheduler/scheduler-runner.js +0 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
- package/dist/wirings/scope/define-scope.d.ts +32 -0
- package/dist/wirings/scope/define-scope.js +31 -0
- package/dist/wirings/scope/index.d.ts +1 -1
- package/dist/wirings/scope/index.js +1 -1
- package/dist/wirings/scope/scope.types.d.ts +7 -9
- package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
- package/dist/wirings/scope/validate-scope-definitions.js +3 -21
- package/dist/wirings/secret/index.d.ts +1 -1
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +19 -15
- package/dist/wirings/secret/secret.types.js +1 -1
- package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
- package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
- package/dist/wirings/trigger/trigger-runner.js +1 -24
- package/dist/wirings/trigger/trigger.types.d.ts +1 -82
- package/dist/wirings/trigger/trigger.types.js +0 -34
- package/dist/wirings/variable/index.d.ts +1 -1
- package/dist/wirings/variable/index.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
- package/dist/wirings/variable/variable.types.d.ts +1 -13
- package/dist/wirings/variable/variable.types.js +1 -1
- package/dist/wirings/virtual-user/index.d.ts +30 -0
- package/dist/wirings/virtual-user/index.js +10 -0
- package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +54 -0
- package/dist/wirings/virtual-user/prepare-virtual-user-run.js +49 -0
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
- package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
- package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
- package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
- package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
- package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
- package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
- package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
- package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
- package/dist/wirings/virtual-user/virtual-user-run-store.d.ts +90 -0
- package/dist/wirings/virtual-user/virtual-user-run-store.js +1 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
- package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
- package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
- package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +19 -15
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
- package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
- package/dist/wirings/workflow/feature.d.ts +0 -19
- package/dist/wirings/workflow/feature.js +0 -19
- package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
- package/dist/wirings/workflow/graph/graph-node.js +0 -34
- package/dist/wirings/workflow/graph/graph-runner.js +6 -41
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
- package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
- package/dist/wirings/workflow/index.d.ts +5 -7
- package/dist/wirings/workflow/index.js +3 -17
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +204 -43
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
- package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
- package/dist/wirings/workflow/run-timeline.d.ts +0 -47
- package/dist/wirings/workflow/run-timeline.js +0 -22
- package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
- package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
- package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
- package/dist/wirings/workflow/scenario-poll.js +0 -12
- package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
- package/dist/wirings/workflow/scenario-prose.js +1 -19
- package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
- package/dist/wirings/workflow/scenario-step-guards.js +1 -14
- package/dist/wirings/workflow/scenario-step.types.d.ts +84 -12
- package/dist/wirings/workflow/scenario-step.types.js +5 -1
- package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
- package/dist/wirings/workflow/scenario-surface.js +56 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
- package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
- package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
- package/dist/wirings/workflow/workflow.types.d.ts +5 -195
- package/knowledge/decisions/index.md +19 -0
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
- package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +48 -0
- package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
- package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
- package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
- package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
- package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
- package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
- package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
- package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
- package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
- package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
- package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
- package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
- package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
- package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
- package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
- package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
- package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +84 -0
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +41 -0
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
- package/knowledge/decisions/internals/index.md +117 -0
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
- package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +53 -0
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
- package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +48 -0
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
- package/knowledge/decisions/internals/validate-checks-personas-through-a-shared-module.md +43 -0
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
- package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
- package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
- package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
- package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
- package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
- package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
- package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
- package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
- package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
- package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
- package/knowledge/decisions/security/index.md +55 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
- package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
- package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
- package/knowledge/index.md +24 -0
- package/knowledge/questions/index.md +15 -0
- package/package.json +6 -2
- package/run-tests.sh +0 -0
- package/src/column-form.test.ts +97 -0
- package/src/column-form.ts +58 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +306 -59
- package/src/data-classification.ts +45 -7
- package/src/dev/hot-reload.test.ts +0 -4
- package/src/dev/hot-reload.ts +11 -30
- package/src/dev/module-runner.ts +7 -32
- package/src/dev/reload-meta.ts +9 -29
- package/src/errors/error-handler.ts +20 -35
- package/src/errors/error.test.ts +30 -1
- package/src/errors/errors.ts +73 -157
- package/src/function/abort-scope.test.ts +97 -0
- package/src/function/abort-scope.ts +80 -0
- package/src/function/function-runner.test.ts +0 -7
- package/src/function/function-runner.ts +62 -32
- package/src/function/functions.types.ts +95 -138
- package/src/function/index.ts +1 -0
- package/src/function/list.types.test.ts +3 -25
- package/src/function/list.types.ts +12 -62
- package/src/handle-error.ts +0 -18
- package/src/index.ts +84 -3
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +3 -5
- package/src/middleware/auth-bearer.ts +5 -41
- package/src/middleware/auth-cookie.test.ts +0 -6
- package/src/middleware/auth-cookie.ts +2 -26
- package/src/middleware/cors.test.ts +34 -0
- package/src/middleware/cors.ts +12 -33
- package/src/middleware/remote-auth.test.ts +26 -10
- package/src/middleware/remote-auth.ts +11 -3
- package/src/middleware/telemetry.ts +2 -31
- package/src/middleware-runner.test.ts +0 -2
- package/src/middleware-runner.ts +5 -74
- package/src/permissions.test.ts +30 -0
- package/src/permissions.ts +24 -74
- package/src/pikku-request.ts +0 -6
- package/src/pikku-state.ts +2 -30
- package/src/production-barrels-stay-lean.test.ts +110 -0
- package/src/remote.test.ts +173 -0
- package/src/remote.ts +18 -8
- package/src/schema.ts +5 -39
- package/src/scopes.ts +7 -48
- package/src/secret-value.test.ts +204 -0
- package/src/secret-value.ts +111 -0
- package/src/services/ai-agent-runner-service.ts +20 -0
- package/src/services/ai-embedding-service.ts +3 -25
- package/src/services/audit-service.ts +88 -11
- package/src/services/content-service.ts +1 -46
- package/src/services/credential-service.ts +3 -40
- package/src/services/credential-wire-service.test.ts +0 -2
- package/src/services/credential-wire-service.ts +9 -1
- package/src/services/deployment-service.ts +3 -9
- package/src/services/email-service.ts +3 -1
- package/src/services/gateway-service.ts +0 -15
- package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
- package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
- package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
- package/src/services/in-memory-queue-service.ts +1 -15
- package/src/services/in-memory-trigger-service.ts +1 -18
- package/src/services/in-memory-workflow-service.test.ts +0 -13
- package/src/services/in-memory-workflow-service.ts +4 -38
- package/src/services/index.ts +23 -18
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- package/src/services/local-content-request-handler.test.ts +202 -0
- package/src/services/local-content-request-handler.ts +267 -0
- package/src/services/local-content.test.ts +159 -27
- package/src/services/local-content.ts +55 -23
- package/src/services/local-gateway-service.ts +2 -17
- package/src/services/local-secrets.test.ts +20 -5
- package/src/services/local-secrets.ts +15 -11
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +31 -46
- package/src/services/meta-service.test.ts +1 -5
- package/src/services/meta-service.ts +41 -61
- package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
- package/src/services/pikku-user-id.ts +0 -4
- package/src/services/queue-webhook-service.test.ts +2 -1
- package/src/services/queue-webhook-service.ts +10 -42
- package/src/services/scheduler-service.ts +1 -50
- package/src/services/schema-service.ts +1 -24
- package/src/services/scope-service.ts +50 -34
- package/src/services/scoped-secret-service.ts +4 -7
- package/src/services/secret-host-binding.test.ts +138 -0
- package/src/services/secret-host-binding.ts +51 -0
- package/src/services/secret-service.ts +12 -35
- package/src/services/secretless.test.ts +54 -0
- package/src/services/secretless.ts +29 -0
- package/src/services/stub-tracker.ts +8 -18
- package/src/services/system-role-guard.test.ts +93 -0
- package/src/services/system-role-guard.ts +71 -0
- package/src/services/trigger-service.ts +0 -12
- package/src/services/typed-secret-service.ts +12 -14
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +23 -64
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +6 -32
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +137 -229
- package/src/types/state.types.ts +7 -9
- package/src/utils/hmac.ts +4 -10
- package/src/utils/safe-fetch.ts +13 -54
- package/src/utils.test.ts +11 -2
- package/src/utils.ts +6 -15
- package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
- package/src/wirings/actor-flow/index.ts +0 -9
- package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
- package/src/wirings/actor-flow/run-conversation.ts +19 -12
- package/src/wirings/ai-agent/ai-agent-agui.test.ts +91 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +49 -17
- package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
- package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
- package/src/wirings/ai-agent/ai-agent-prepare.ts +89 -139
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
- package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
- package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
- package/src/wirings/ai-agent/ai-agent-runner.ts +85 -35
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +224 -76
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +130 -5
- package/src/wirings/ai-agent/index.ts +37 -3
- package/src/wirings/ai-agent/voice-input.test.ts +137 -7
- package/src/wirings/ai-agent/voice-input.ts +96 -12
- package/src/wirings/ai-agent/voice-output.test.ts +512 -0
- package/src/wirings/ai-agent/voice-output.ts +243 -56
- package/src/wirings/channel/channel-common.ts +15 -20
- package/src/wirings/channel/channel-handler.test.ts +50 -0
- package/src/wirings/channel/channel-handler.ts +32 -11
- package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
- package/src/wirings/channel/channel-host-rpc.ts +69 -0
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
- package/src/wirings/channel/channel-middleware-runner.ts +0 -12
- package/src/wirings/channel/channel-rpc-registry.ts +116 -0
- package/src/wirings/channel/channel-rpc-responder.ts +117 -0
- package/src/wirings/channel/channel-rpc-service.ts +146 -0
- package/src/wirings/channel/channel-rpc-validators.ts +65 -0
- package/src/wirings/channel/channel-rpc.test.ts +820 -0
- package/src/wirings/channel/channel-rpc.ts +5 -0
- package/src/wirings/channel/channel-rpc.types.ts +150 -0
- package/src/wirings/channel/channel-runner.ts +0 -14
- package/src/wirings/channel/channel-store.ts +0 -10
- package/src/wirings/channel/channel.types.ts +19 -8
- package/src/wirings/channel/define-channel-routes.ts +0 -20
- package/src/wirings/channel/eventhub-service.ts +0 -18
- package/src/wirings/channel/index.ts +35 -0
- package/src/wirings/channel/local/local-channel-handler.ts +3 -1
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
- package/src/wirings/channel/local/local-channel-runner.ts +3 -1
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
- package/src/wirings/channel/log-channels.ts +0 -4
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
- package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
- package/src/wirings/cli/channel/cli-approval.ts +135 -0
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +185 -0
- package/src/wirings/cli/channel/index.ts +13 -0
- package/src/wirings/cli/cli-runner.test.ts +0 -1
- package/src/wirings/cli/cli-runner.ts +46 -88
- package/src/wirings/cli/cli.types.ts +14 -3
- package/src/wirings/cli/command-parser.test.ts +0 -4
- package/src/wirings/cli/command-parser.ts +11 -91
- package/src/wirings/cli/define-cli-commands.ts +1 -17
- package/src/wirings/credential/credential.types.ts +0 -12
- package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
- package/src/wirings/credential/index.ts +1 -1
- package/src/wirings/credential/validate-credential-definitions.ts +2 -4
- package/src/wirings/gateway/gateway-runner.test.ts +1 -21
- package/src/wirings/gateway/gateway-runner.ts +8 -110
- package/src/wirings/gateway/gateway.types.ts +7 -80
- package/src/wirings/http/http-routes.test.ts +0 -3
- package/src/wirings/http/http-routes.ts +0 -86
- package/src/wirings/http/http-runner.test.ts +0 -1
- package/src/wirings/http/http-runner.ts +8 -167
- package/src/wirings/http/http.types.ts +15 -62
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +2 -10
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -58
- package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
- package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
- package/src/wirings/http/routers/path-to-regex.ts +2 -13
- package/src/wirings/http/web-request.test.ts +33 -2
- package/src/wirings/http/web-request.ts +30 -17
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
- package/src/wirings/mcp/mcp-runner.ts +2 -17
- package/src/wirings/mcp/mcp.types.ts +7 -42
- package/src/wirings/oauth2/oauth2.types.ts +0 -30
- package/src/wirings/persona/define-personas.ts +33 -0
- package/src/wirings/persona/index.ts +62 -0
- package/src/wirings/persona/persona-email.ts +87 -0
- package/src/wirings/persona/persona-environments.test.ts +183 -0
- package/src/wirings/persona/persona-environments.ts +138 -0
- package/src/wirings/persona/persona-mailbox.ts +156 -0
- package/src/wirings/persona/persona.test.ts +220 -0
- package/src/wirings/persona/persona.types.ts +142 -0
- package/src/wirings/persona/validate-personas.ts +133 -0
- package/src/wirings/queue/index.ts +13 -3
- package/src/wirings/queue/queue-identity.test.ts +454 -0
- package/src/wirings/queue/queue-identity.ts +176 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +25 -90
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +60 -0
- package/src/wirings/queue/validate-worker-config.ts +2 -28
- package/src/wirings/role/define-system-role.ts +33 -0
- package/src/wirings/role/index.ts +13 -0
- package/src/wirings/role/role.test.ts +104 -0
- package/src/wirings/role/role.types.ts +47 -0
- package/src/wirings/role/validate-role-definitions.ts +93 -0
- package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
- package/src/wirings/rpc/addon-runner.ts +0 -56
- package/src/wirings/rpc/addon-scopes.test.ts +225 -0
- package/src/wirings/rpc/remote-addon-auth.ts +9 -16
- package/src/wirings/rpc/rpc-runner.test.ts +192 -6
- package/src/wirings/rpc/rpc-runner.ts +145 -127
- package/src/wirings/rpc/rpc-types.ts +11 -6
- package/src/wirings/rpc/wire-addon.test.ts +43 -1
- package/src/wirings/rpc/wire-addon.ts +99 -0
- package/src/wirings/rpc/wire-remote-addon.ts +9 -29
- package/src/wirings/scheduler/log-schedulers.ts +0 -4
- package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
- package/src/wirings/scheduler/scheduler-runner.ts +0 -2
- package/src/wirings/scheduler/scheduler.types.ts +1 -14
- package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
- package/src/wirings/scope/index.ts +1 -1
- package/src/wirings/scope/scope.test.ts +1 -2
- package/src/wirings/scope/scope.types.ts +7 -9
- package/src/wirings/scope/validate-scope-definitions.ts +3 -21
- package/src/wirings/secret/index.ts +1 -1
- package/src/wirings/secret/secret.types.ts +19 -15
- package/src/wirings/secret/validate-secret-definitions.ts +2 -4
- package/src/wirings/trigger/trigger-runner.ts +1 -27
- package/src/wirings/trigger/trigger.types.ts +1 -82
- package/src/wirings/variable/index.ts +1 -1
- package/src/wirings/variable/validate-variable-definitions.ts +2 -4
- package/src/wirings/variable/variable.types.ts +1 -13
- package/src/wirings/virtual-user/index.ts +88 -0
- package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +115 -0
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +95 -0
- package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
- package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
- package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
- package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
- package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
- package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
- package/src/wirings/virtual-user/virtual-user-run-store.ts +98 -0
- package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
- package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +19 -20
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
- package/src/wirings/workflow/feature.ts +0 -19
- package/src/wirings/workflow/graph/graph-node.ts +0 -136
- package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
- package/src/wirings/workflow/graph/graph-runner.ts +6 -41
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
- package/src/wirings/workflow/index.ts +10 -44
- package/src/wirings/workflow/pikku-scenario-service.ts +235 -61
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
- package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
- package/src/wirings/workflow/run-timeline.test.ts +7 -19
- package/src/wirings/workflow/run-timeline.ts +0 -56
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
- package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
- package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
- package/src/wirings/workflow/scenario-poll.test.ts +0 -2
- package/src/wirings/workflow/scenario-poll.ts +0 -15
- package/src/wirings/workflow/scenario-prose.test.ts +5 -7
- package/src/wirings/workflow/scenario-prose.ts +1 -29
- package/src/wirings/workflow/scenario-service.test.ts +2 -10
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +163 -19
- package/src/wirings/workflow/scenario-step.types.ts +94 -12
- package/src/wirings/workflow/scenario-surface.test.ts +146 -0
- package/src/wirings/workflow/scenario-surface.ts +71 -0
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
- package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
- package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
- package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
- package/src/wirings/workflow/workflow.types.ts +5 -201
- package/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.type-tests.json +12 -0
- package/src/middleware/timeout.ts +0 -22
- package/src/pikku-response.ts +0 -5
- package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
- package/src/wirings/workflow/dsl/index.ts +0 -36
- package/src/wirings/workflow/graph/index.ts +0 -15
|
@@ -16,17 +16,12 @@ import type {
|
|
|
16
16
|
CoreUserSession,
|
|
17
17
|
CorePikkuMiddleware,
|
|
18
18
|
CorePikkuMiddlewareGroup,
|
|
19
|
-
WireServices,
|
|
20
19
|
PikkuRawWire,
|
|
21
20
|
PikkuWire,
|
|
22
21
|
PikkuWiringTypes,
|
|
23
22
|
} from '../../types/core.types.js'
|
|
24
23
|
import { NotFoundError } from '../../errors/errors.js'
|
|
25
|
-
import {
|
|
26
|
-
closeWireServices,
|
|
27
|
-
createWeakUID,
|
|
28
|
-
isSerializable,
|
|
29
|
-
} from '../../utils.js'
|
|
24
|
+
import { createWeakUID, isSerializable } from '../../utils.js'
|
|
30
25
|
import {
|
|
31
26
|
getSingletonServices,
|
|
32
27
|
getCreateWireServices,
|
|
@@ -39,15 +34,13 @@ import { pikkuState } from '../../pikku-state.js'
|
|
|
39
34
|
import { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js'
|
|
40
35
|
import { PikkuFetchHTTPRequest } from './pikku-fetch-http-request.js'
|
|
41
36
|
import type { PikkuChannel } from '../channel/channel.types.js'
|
|
37
|
+
import { unsupportedChannelRemote } from '../channel/channel-rpc.js'
|
|
42
38
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
43
39
|
import { applyWebResponse } from './web-request.js'
|
|
44
40
|
import { httpRouter } from './routers/http-router.js'
|
|
45
41
|
import { validateSchema } from '../../schema.js'
|
|
46
42
|
import { runMiddleware } from '../../middleware-runner.js'
|
|
47
43
|
|
|
48
|
-
/**
|
|
49
|
-
* Extract headers from a PikkuHTTPRequest based on the schema keys
|
|
50
|
-
*/
|
|
51
44
|
function extractHeadersFromRequest(
|
|
52
45
|
request: PikkuHTTPRequest,
|
|
53
46
|
headerKeys: string[]
|
|
@@ -62,35 +55,6 @@ function extractHeadersFromRequest(
|
|
|
62
55
|
return headers
|
|
63
56
|
}
|
|
64
57
|
|
|
65
|
-
/**
|
|
66
|
-
* Registers HTTP middleware for a specific route pattern.
|
|
67
|
-
*
|
|
68
|
-
* This function registers middleware at runtime that will be applied to
|
|
69
|
-
* HTTP routes matching the specified pattern.
|
|
70
|
-
*
|
|
71
|
-
* For tree-shaking benefits, wrap in a factory function:
|
|
72
|
-
* `export const x = () => addHTTPMiddleware('pattern', [...])`
|
|
73
|
-
*
|
|
74
|
-
* @template PikkuMiddleware The middleware type.
|
|
75
|
-
* @param {string} pattern - Route pattern (e.g., '*' for all routes, '/api/*' for specific routes).
|
|
76
|
-
* @param {CorePikkuMiddlewareGroup} middleware - Array of middleware for this route pattern.
|
|
77
|
-
*
|
|
78
|
-
* @returns {CorePikkuMiddlewareGroup} The middleware array (for chaining/wrapping).
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```typescript
|
|
82
|
-
* // Recommended: tree-shakeable
|
|
83
|
-
* export const httpGlobal = () => addHTTPMiddleware('*', [
|
|
84
|
-
* corsMiddleware,
|
|
85
|
-
* loggingMiddleware
|
|
86
|
-
* ])
|
|
87
|
-
*
|
|
88
|
-
* // Also works: no tree-shaking
|
|
89
|
-
* export const apiMiddleware = addHTTPMiddleware('/api/*', [
|
|
90
|
-
* authMiddleware
|
|
91
|
-
* ])
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
58
|
export const addHTTPMiddleware = <PikkuMiddleware extends CorePikkuMiddleware>(
|
|
95
59
|
pattern: string,
|
|
96
60
|
middleware: CorePikkuMiddlewareGroup,
|
|
@@ -124,21 +88,6 @@ export const addHTTPPermission = (
|
|
|
124
88
|
)
|
|
125
89
|
}
|
|
126
90
|
|
|
127
|
-
/**
|
|
128
|
-
* Adds a new route to the global HTTP route registry.
|
|
129
|
-
*
|
|
130
|
-
* The route configuration includes the HTTP method, route path, permissions,
|
|
131
|
-
* middleware, and the handler function that implements the route's logic.
|
|
132
|
-
*
|
|
133
|
-
* @template In Expected input type.
|
|
134
|
-
* @template Out Expected output type.
|
|
135
|
-
* @template Route Route pattern as a string.
|
|
136
|
-
* @template PikkuFunction Type for the route handler function.
|
|
137
|
-
* @template PikkuFunctionSessionless Type for a sessionless handler.
|
|
138
|
-
* @template PikkuPermissionGroup Type representing required permissions.
|
|
139
|
-
* @template PikkuMiddleware Middleware type to be used with the route.
|
|
140
|
-
* @param {CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware>} httpWiring - The HTTP wiring configuration object.
|
|
141
|
-
*/
|
|
142
91
|
export const wireHTTP = <
|
|
143
92
|
In,
|
|
144
93
|
Out,
|
|
@@ -163,10 +112,6 @@ export const wireHTTP = <
|
|
|
163
112
|
const httpMeta = pikkuState(null, 'http', 'meta')
|
|
164
113
|
const routeMeta = httpMeta[httpWiring.method][httpWiring.route]
|
|
165
114
|
if (!routeMeta) {
|
|
166
|
-
// In deploy units with filtered metadata, wiring files may include
|
|
167
|
-
// routes for functions not in this unit. This happens when multiple
|
|
168
|
-
// wirings share a file — split them into separate files for better
|
|
169
|
-
// tree-shaking.
|
|
170
115
|
console.warn(
|
|
171
116
|
`[pikku] Skipping HTTP route '${httpWiring.method.toUpperCase()} ${httpWiring.route}' — metadata not found. Consider moving this wiring to its own file.`
|
|
172
117
|
)
|
|
@@ -184,17 +129,6 @@ export const wireHTTP = <
|
|
|
184
129
|
?.set(httpWiring.route, httpWiring as any)
|
|
185
130
|
}
|
|
186
131
|
|
|
187
|
-
/**
|
|
188
|
-
* Finds a matching route based on the HTTP method and URL path.
|
|
189
|
-
*
|
|
190
|
-
* Iterates over all registered routes, skipping those with a mismatched method.
|
|
191
|
-
* When a route pattern matches the incoming request path, this function aggregates
|
|
192
|
-
* any global middleware along with route-specific middleware and identifies any input schema.
|
|
193
|
-
*
|
|
194
|
-
* @param {string} requestType - The HTTP method (e.g., GET, POST).
|
|
195
|
-
* @param {string} requestPath - The URL path of the incoming request.
|
|
196
|
-
* @returns {Object | undefined} An object with matched route details or undefined if no match.
|
|
197
|
-
*/
|
|
198
132
|
const getMatchingRoute = (requestType: string, requestPath: string) => {
|
|
199
133
|
const matchedPath = httpRouter.match(
|
|
200
134
|
requestType.toLowerCase() as HTTPMethod,
|
|
@@ -218,16 +152,6 @@ const getMatchingRoute = (requestType: string, requestPath: string) => {
|
|
|
218
152
|
}
|
|
219
153
|
}
|
|
220
154
|
|
|
221
|
-
/**
|
|
222
|
-
* Combines the request and response objects into a single HTTP wire object.
|
|
223
|
-
*
|
|
224
|
-
* This utility function creates an object that holds both the HTTP request and response,
|
|
225
|
-
* which simplifies passing these around through middleware and route execution.
|
|
226
|
-
*
|
|
227
|
-
* @param {PikkuHTTPRequest | undefined} request - The HTTP request object.
|
|
228
|
-
* @param {PikkuHTTPResponse | undefined} response - The HTTP response object.
|
|
229
|
-
* @returns {PikkuHTTP | undefined} The combined HTTP wire object or undefined if none provided.
|
|
230
|
-
*/
|
|
231
155
|
export const createHTTPWire = (
|
|
232
156
|
request: PikkuHTTPRequest | undefined,
|
|
233
157
|
response: PikkuHTTPResponse | undefined
|
|
@@ -247,26 +171,6 @@ export const createHTTPWire = (
|
|
|
247
171
|
return http
|
|
248
172
|
}
|
|
249
173
|
|
|
250
|
-
/**
|
|
251
|
-
* Validates the input data and executes the route handler
|
|
252
|
-
*
|
|
253
|
-
* This function performs these steps:
|
|
254
|
-
* 1. Sets URL parameters on the request.
|
|
255
|
-
* 2. Validates the user session if required.
|
|
256
|
-
* 3. Creates session-specific services.
|
|
257
|
-
* 4. Validates the incoming data against a schema.
|
|
258
|
-
* 5. Optionally coerces query string values to arrays.
|
|
259
|
-
* 6. Checks route-specific permissions.
|
|
260
|
-
* 7. Executes the route handler.
|
|
261
|
-
* 8. Sends the appropriate response.
|
|
262
|
-
*
|
|
263
|
-
* @param {Object} services - A collection of shared services and utilities.
|
|
264
|
-
* @param {Object} matchedRoute - Contains route details, URL parameters, and optional schema.
|
|
265
|
-
* @param {PikkuHTTP | undefined} http - The HTTP wire object.
|
|
266
|
-
* @param {Object} options - Options for route execution (e.g., whether to coerce query strings to arrays).
|
|
267
|
-
* @returns {Promise<any>} An object containing the route handler result and wire services (if any).
|
|
268
|
-
* @throws Throws errors like MissingSessionError or ForbiddenError on validation failures.
|
|
269
|
-
*/
|
|
270
174
|
const executeRoute = async (
|
|
271
175
|
services: {
|
|
272
176
|
singletonServices: any
|
|
@@ -292,10 +196,8 @@ const executeRoute = async (
|
|
|
292
196
|
singletonServices.sessionStore
|
|
293
197
|
)
|
|
294
198
|
|
|
295
|
-
// Attach URL parameters to the request object
|
|
296
199
|
http?.request?.setParams(params)
|
|
297
200
|
|
|
298
|
-
// Validate request headers if schema is defined
|
|
299
201
|
if (meta.headersSchemaName && http.request && singletonServices.schema) {
|
|
300
202
|
const headerKeys = singletonServices.schema.getSchemaKeys(
|
|
301
203
|
meta.headersSchemaName
|
|
@@ -310,14 +212,12 @@ const executeRoute = async (
|
|
|
310
212
|
}
|
|
311
213
|
|
|
312
214
|
const requiresSession = route.auth !== false
|
|
313
|
-
let wireServices: any
|
|
314
215
|
let result: any
|
|
315
216
|
|
|
316
217
|
singletonServices.logger.info(
|
|
317
218
|
`Matched route: ${route.route} | method: ${route.method.toUpperCase()} | auth: ${requiresSession.toString()}`
|
|
318
219
|
)
|
|
319
220
|
|
|
320
|
-
// Ensure session is available when required
|
|
321
221
|
if (skipUserSession && requiresSession) {
|
|
322
222
|
throw new Error("Can't skip trying to get user session if auth is required")
|
|
323
223
|
}
|
|
@@ -365,11 +265,11 @@ const executeRoute = async (
|
|
|
365
265
|
clearState: () => {
|
|
366
266
|
sseState = undefined
|
|
367
267
|
},
|
|
268
|
+
// SSE only flows server to client — the client has no way to answer on
|
|
269
|
+
// this channel, so a remote call could never be replied to.
|
|
270
|
+
remote: unsupportedChannelRemote,
|
|
368
271
|
}
|
|
369
272
|
|
|
370
|
-
// Register the SSE channel with the eventHub (if present) so that
|
|
371
|
-
// eventHub.publish() can deliver messages to SSE subscribers.
|
|
372
|
-
// The channel handler wraps the SSE channel to match PikkuChannelHandler.
|
|
373
273
|
if (singletonServices.eventHub?.onChannelOpened) {
|
|
374
274
|
const channelRef = channel
|
|
375
275
|
const channelHandler = {
|
|
@@ -432,12 +332,11 @@ const executeRoute = async (
|
|
|
432
332
|
http?.response?.arrayBuffer(JSON.stringify({ type: 'done' }))
|
|
433
333
|
} catch {}
|
|
434
334
|
channel?.close()
|
|
435
|
-
return
|
|
335
|
+
return { result }
|
|
436
336
|
}
|
|
437
337
|
throw e
|
|
438
338
|
}
|
|
439
339
|
if (matchedRoute.route.sse) {
|
|
440
|
-
// Flush headers after middleware has run so CORS/auth headers are included
|
|
441
340
|
http?.response?.flushHeaders?.()
|
|
442
341
|
} else {
|
|
443
342
|
if (result instanceof Response) {
|
|
@@ -452,24 +351,9 @@ const executeRoute = async (
|
|
|
452
351
|
}
|
|
453
352
|
}
|
|
454
353
|
|
|
455
|
-
return
|
|
354
|
+
return { result }
|
|
456
355
|
}
|
|
457
356
|
|
|
458
|
-
/**
|
|
459
|
-
* Executes an HTTP route for a given Fetch API request.
|
|
460
|
-
*
|
|
461
|
-
* This function wraps the entire lifecycle of handling an HTTP request:
|
|
462
|
-
* - Matching the request to a registered route.
|
|
463
|
-
* - Validating input and session state.
|
|
464
|
-
* - Running middleware and the route handler.
|
|
465
|
-
* - Handling errors and forming the response.
|
|
466
|
-
*
|
|
467
|
-
* @template In Expected input data type.
|
|
468
|
-
* @template Out Expected output data type.
|
|
469
|
-
* @param {Request} request - The native Fetch API Request object.
|
|
470
|
-
* @param {RunHTTPWiringOptions} params - Additional options including services and session management.
|
|
471
|
-
* @returns {Promise<Response>} A promise that resolves to a Fetch API Response object.
|
|
472
|
-
*/
|
|
473
357
|
export const fetch = async <In, Out>(
|
|
474
358
|
request: Request,
|
|
475
359
|
params: RunHTTPWiringOptions = {}
|
|
@@ -479,18 +363,6 @@ export const fetch = async <In, Out>(
|
|
|
479
363
|
return pikkuResponse.toResponse()
|
|
480
364
|
}
|
|
481
365
|
|
|
482
|
-
/**
|
|
483
|
-
* Executes an HTTP route using a Pikku-specific request wrapper.
|
|
484
|
-
*
|
|
485
|
-
* This variant accepts either a native Request or a PikkuHTTPRequest object and returns
|
|
486
|
-
* a PikkuFetchHTTPResponse for further manipulation if needed.
|
|
487
|
-
*
|
|
488
|
-
* @template In Expected input data type.
|
|
489
|
-
* @template Out Expected output data type.
|
|
490
|
-
* @param {Request | PikkuHTTPRequest} request - The request object.
|
|
491
|
-
* @param {RunHTTPWiringOptions} params - Execution options including services and session configuration.
|
|
492
|
-
* @returns {Promise<PikkuFetchHTTPResponse>} A promise that resolves to a PikkuFetchHTTPResponse object.
|
|
493
|
-
*/
|
|
494
366
|
export const pikkuFetch = async <In, Out>(
|
|
495
367
|
request: Request | PikkuHTTPRequest,
|
|
496
368
|
params: RunHTTPWiringOptions = {}
|
|
@@ -500,24 +372,6 @@ export const pikkuFetch = async <In, Out>(
|
|
|
500
372
|
return pikkuResponse
|
|
501
373
|
}
|
|
502
374
|
|
|
503
|
-
/**
|
|
504
|
-
* Core function to process an HTTP request through route matching, validation,
|
|
505
|
-
* middleware execution, error handling, and session service cleanup.
|
|
506
|
-
*
|
|
507
|
-
* This function does the following:
|
|
508
|
-
* - Wraps the incoming request and response into an HTTP wire object.
|
|
509
|
-
* - Determines the correct route based on HTTP method and path.
|
|
510
|
-
* - Executes middleware and the route handler.
|
|
511
|
-
* - Catches and handles errors, optionally bubbling them if configured.
|
|
512
|
-
* - Cleans up any wire services created during processing.
|
|
513
|
-
*
|
|
514
|
-
* @template In Expected input data type.
|
|
515
|
-
* @template Out Expected output data type.
|
|
516
|
-
* @param {Request | PikkuHTTPRequest} request - The incoming HTTP request.
|
|
517
|
-
* @param {PikkuHTTPResponse} response - The response object to be populated.
|
|
518
|
-
* @param {RunHTTPWiringOptions} options - Options such as singleton services, session handling, and error configuration.
|
|
519
|
-
* @returns {Promise<Out | void>} The output from the route handler or void if an error occurred.
|
|
520
|
-
*/
|
|
521
375
|
export const fetchData = async <In, Out>(
|
|
522
376
|
request: Request | PikkuHTTPRequest,
|
|
523
377
|
response: PikkuHTTPResponse,
|
|
@@ -527,7 +381,6 @@ export const fetchData = async <In, Out>(
|
|
|
527
381
|
logWarningsForStatusCodes = [],
|
|
528
382
|
coerceDataFromSchema = true,
|
|
529
383
|
bubbleErrors = false,
|
|
530
|
-
// Surface the error message + stack on unexpected 500s unless in production.
|
|
531
384
|
exposeErrors = !isProduction(),
|
|
532
385
|
generateRequestId,
|
|
533
386
|
traceId: externalTraceId,
|
|
@@ -536,16 +389,13 @@ export const fetchData = async <In, Out>(
|
|
|
536
389
|
): Promise<Out | void> => {
|
|
537
390
|
const singletonServices = getSingletonServices()
|
|
538
391
|
const createWireServices = getCreateWireServices()
|
|
539
|
-
let wireServices: WireServices<typeof singletonServices> | undefined
|
|
540
392
|
let result: Out
|
|
541
393
|
|
|
542
|
-
// Combine the request and response into one wire object
|
|
543
394
|
const pikkuRequest =
|
|
544
395
|
request instanceof Request
|
|
545
396
|
? new PikkuFetchHTTPRequest(request, { maxBodySize })
|
|
546
397
|
: request
|
|
547
398
|
|
|
548
|
-
// Resolve traceId: external (e.g. CF-Ray) > x-request-id header > generated
|
|
549
399
|
let requestId: string | null = externalTraceId ?? null
|
|
550
400
|
if (!requestId) {
|
|
551
401
|
try {
|
|
@@ -554,15 +404,12 @@ export const fetchData = async <In, Out>(
|
|
|
554
404
|
}
|
|
555
405
|
requestId = requestId || generateRequestId?.() || createWeakUID()
|
|
556
406
|
|
|
557
|
-
// Scoped logger for HTTP runner internal logging (error handling, route matching)
|
|
558
|
-
// Functions/middleware receive singletonServices.logger directly for compatibility
|
|
559
407
|
const scopedLogger =
|
|
560
408
|
singletonServices.logger.scope?.(requestId) ?? singletonServices.logger
|
|
561
409
|
const http = createHTTPWire(pikkuRequest, response)
|
|
562
410
|
const apiType = http!.request!.method()
|
|
563
411
|
const apiRoute = http!.request!.path()
|
|
564
412
|
|
|
565
|
-
// Locate the matching route based on the HTTP method and path
|
|
566
413
|
const matchedRoute = getMatchingRoute(apiType, apiRoute)
|
|
567
414
|
try {
|
|
568
415
|
if (!matchedRoute) {
|
|
@@ -588,8 +435,7 @@ export const fetchData = async <In, Out>(
|
|
|
588
435
|
throw new NotFoundError()
|
|
589
436
|
}
|
|
590
437
|
|
|
591
|
-
|
|
592
|
-
;({ result, wireServices } = await executeRoute(
|
|
438
|
+
;({ result } = await executeRoute(
|
|
593
439
|
{
|
|
594
440
|
singletonServices,
|
|
595
441
|
createWireServices,
|
|
@@ -613,10 +459,5 @@ export const fetchData = async <In, Out>(
|
|
|
613
459
|
bubbleErrors,
|
|
614
460
|
exposeErrors
|
|
615
461
|
)
|
|
616
|
-
} finally {
|
|
617
|
-
// Clean up any session-specific services created during processing
|
|
618
|
-
if (wireServices) {
|
|
619
|
-
await closeWireServices(singletonServices.logger, wireServices)
|
|
620
|
-
}
|
|
621
462
|
}
|
|
622
463
|
}
|
|
@@ -42,9 +42,6 @@ export type RunHTTPWiringOptions = Partial<{
|
|
|
42
42
|
maxBodySize: number
|
|
43
43
|
}>
|
|
44
44
|
|
|
45
|
-
/**
|
|
46
|
-
* Represents the HTTP methods supported for API HTTP wirings.
|
|
47
|
-
*/
|
|
48
45
|
export type HTTPMethod =
|
|
49
46
|
| 'post'
|
|
50
47
|
| 'get'
|
|
@@ -54,17 +51,10 @@ export type HTTPMethod =
|
|
|
54
51
|
| 'put'
|
|
55
52
|
| 'options'
|
|
56
53
|
|
|
57
|
-
/**
|
|
58
|
-
* Header schema type for request header validation.
|
|
59
|
-
* Uses Standard Schema interface - works with Zod, Valibot, ArkType, Effect Schema, etc.
|
|
60
|
-
*/
|
|
61
54
|
export type HTTPHeadersSchema = StandardSchemaV1<
|
|
62
55
|
Record<string, string | string[] | undefined>
|
|
63
56
|
>
|
|
64
57
|
|
|
65
|
-
/**
|
|
66
|
-
* Common HTTP route configuration shared between wireHTTP and wireHTTPRoutes
|
|
67
|
-
*/
|
|
68
58
|
export type HTTPRouteBaseConfig = {
|
|
69
59
|
contentType?: 'xml' | 'json'
|
|
70
60
|
timeout?: number
|
|
@@ -72,47 +62,26 @@ export type HTTPRouteBaseConfig = {
|
|
|
72
62
|
headers?: HTTPHeadersSchema
|
|
73
63
|
}
|
|
74
64
|
|
|
75
|
-
/**
|
|
76
|
-
* Represents an API HTTP wiring without a function, including metadata such as content type, route, and timeout settings.
|
|
77
|
-
*/
|
|
78
65
|
export type CoreHTTPFunction = HTTPRouteBaseConfig & {
|
|
79
66
|
route: string
|
|
80
67
|
eventChannel?: false
|
|
81
68
|
returnsJSON?: false
|
|
82
69
|
}
|
|
83
|
-
|
|
84
|
-
* Represents a http wire within Pikku, including a request and response.
|
|
85
|
-
*/
|
|
70
|
+
|
|
86
71
|
export interface PikkuHTTP<In = unknown> {
|
|
87
72
|
request?: PikkuHTTPRequest<In>
|
|
88
73
|
response?: PikkuHTTPResponse
|
|
89
74
|
}
|
|
90
75
|
|
|
91
|
-
/**
|
|
92
|
-
* Represents request headers as either a record or a function to get headers by name.
|
|
93
|
-
*/
|
|
94
76
|
export type RequestHeaders =
|
|
95
77
|
| Record<string, string | string[] | undefined>
|
|
96
78
|
| ((headerName: string) => string | string[] | undefined)
|
|
97
79
|
|
|
98
|
-
/**
|
|
99
|
-
* Represents a query object for Pikku, where each key can be a string, a value, or an array of values.
|
|
100
|
-
*/
|
|
101
80
|
export type PikkuQuery<T = Record<string, string | undefined>> = Record<
|
|
102
81
|
string,
|
|
103
82
|
string | T | null | Array<T | null>
|
|
104
83
|
>
|
|
105
84
|
|
|
106
|
-
/**
|
|
107
|
-
* Represents a core API HTTP wiring, which can have different configurations depending on whether it requires authentication and permissions.
|
|
108
|
-
*
|
|
109
|
-
* @template In - The input type.
|
|
110
|
-
* @template Out - The output type.
|
|
111
|
-
* @template R - The route string type.
|
|
112
|
-
* @template PikkuFunction - The API function type, defaults to `CorePikkuFunction`.
|
|
113
|
-
* @template PikkuFunctionSessionless - The sessionless API function type, defaults to `CorePikkuFunctionSessionless`.
|
|
114
|
-
* @template PikkuPermission - The permission function type, defaults to `CorePikkuPermission`.
|
|
115
|
-
*/
|
|
116
85
|
export type CoreHTTPFunctionWiring<
|
|
117
86
|
In,
|
|
118
87
|
Out,
|
|
@@ -208,21 +177,26 @@ export type CoreHTTPFunctionWiring<
|
|
|
208
177
|
sse?: undefined
|
|
209
178
|
})
|
|
210
179
|
|
|
211
|
-
/**
|
|
212
|
-
* Represents the input types for HTTP wiring metadata, including parameters, query, and body types.
|
|
213
|
-
*/
|
|
214
180
|
export type HTTPFunctionMetaInputTypes = {
|
|
215
181
|
params?: string
|
|
216
182
|
query?: string
|
|
217
183
|
body?: string
|
|
218
184
|
}
|
|
219
185
|
|
|
220
|
-
/**
|
|
221
|
-
* Represents metadata for a set of HTTP wirings, including HTTP wiring details, methods, input/output types, and documentation.
|
|
222
|
-
*/
|
|
223
186
|
export type HTTPWiringMeta = CommonWireMeta & {
|
|
224
187
|
route: string
|
|
225
188
|
method: HTTPMethod
|
|
189
|
+
/** The route's own `auth`, or the group's if the route did not set one. */
|
|
190
|
+
auth?: boolean
|
|
191
|
+
/**
|
|
192
|
+
* Whether reaching this route requires a session, resolved at codegen time
|
|
193
|
+
* across every layer that can demand one: the function's `sessionless`, its
|
|
194
|
+
* own `auth`, this route's `auth`, and the auth flag of the addon the
|
|
195
|
+
* function belongs to. Answering "which routes are open?" used to mean
|
|
196
|
+
* joining four separate places and knowing which of them wins; getting that
|
|
197
|
+
* join wrong reads an open route as a closed one.
|
|
198
|
+
*/
|
|
199
|
+
requiresSession?: boolean
|
|
226
200
|
refTarget?: string
|
|
227
201
|
params?: string[]
|
|
228
202
|
query?: string[]
|
|
@@ -274,16 +248,15 @@ export interface PikkuHTTPResponse<Out = unknown> {
|
|
|
274
248
|
| ReadableStream
|
|
275
249
|
): this
|
|
276
250
|
json(data: Out): this
|
|
277
|
-
|
|
251
|
+
/** `ArrayBufferView` covers `Buffer` and `Uint8Array`, which is how a body
|
|
252
|
+
* that is not text reaches here without being decoded on the way. */
|
|
253
|
+
send?(data: string | ArrayBuffer | ArrayBufferView): this
|
|
278
254
|
redirect(location: string, status?: number): this
|
|
279
255
|
close?: () => void
|
|
280
256
|
setMode?: (mode: 'stream') => void
|
|
281
257
|
flushHeaders?: () => void
|
|
282
258
|
}
|
|
283
259
|
|
|
284
|
-
/**
|
|
285
|
-
* Single route configuration - supports all wireHTTP options
|
|
286
|
-
*/
|
|
287
260
|
export type HTTPRouteConfig<
|
|
288
261
|
PikkuFunction extends
|
|
289
262
|
| CorePikkuFunction<any, any, any, any, any>
|
|
@@ -297,24 +270,14 @@ export type HTTPRouteConfig<
|
|
|
297
270
|
any
|
|
298
271
|
>,
|
|
299
272
|
> = HTTPRouteBaseConfig & {
|
|
300
|
-
// Required
|
|
301
273
|
method: HTTPMethod
|
|
302
274
|
route: string
|
|
303
275
|
func: CorePikkuFunctionConfig<PikkuFunction, PikkuPermission, PikkuMiddleware>
|
|
304
|
-
|
|
305
|
-
// Auth
|
|
306
276
|
auth?: boolean
|
|
307
|
-
|
|
308
|
-
// Middleware
|
|
309
277
|
middleware?: PikkuMiddleware[]
|
|
310
|
-
|
|
311
|
-
// SSE support
|
|
312
278
|
sse?: boolean
|
|
313
279
|
}
|
|
314
280
|
|
|
315
|
-
/**
|
|
316
|
-
* Group-level configuration applied to all routes
|
|
317
|
-
*/
|
|
318
281
|
export type HTTPRoutesGroupConfig<
|
|
319
282
|
PikkuPermission extends CorePikkuPermission<any, any, any> =
|
|
320
283
|
CorePikkuPermission<any, any, any>,
|
|
@@ -329,25 +292,15 @@ export type HTTPRoutesGroupConfig<
|
|
|
329
292
|
middleware?: PikkuMiddleware[]
|
|
330
293
|
}
|
|
331
294
|
|
|
332
|
-
/**
|
|
333
|
-
* Nested route map - allows hierarchical organization
|
|
334
|
-
* Can contain individual routes, nested maps, or contracts with config
|
|
335
|
-
*/
|
|
336
295
|
export type HTTPRouteMap = {
|
|
337
296
|
[key: string]: HTTPRouteConfig | HTTPRouteMap | HTTPRouteContract
|
|
338
297
|
}
|
|
339
298
|
|
|
340
|
-
/**
|
|
341
|
-
* A route contract with optional group config (returned by defineRoutes)
|
|
342
|
-
*/
|
|
343
299
|
export type HTTPRouteContract<T extends HTTPRouteMap = HTTPRouteMap> =
|
|
344
300
|
HTTPRoutesGroupConfig & {
|
|
345
301
|
routes: T
|
|
346
302
|
}
|
|
347
303
|
|
|
348
|
-
/**
|
|
349
|
-
* Full configuration for wireHTTPRoutes
|
|
350
|
-
*/
|
|
351
304
|
export type WireHTTPRoutesConfig = HTTPRoutesGroupConfig & {
|
|
352
305
|
routes: HTTPRouteMap | HTTPRouteConfig[]
|
|
353
306
|
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js'
|
|
2
2
|
import type { Logger } from '../../services/index.js'
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Logs all the loaded routes.
|
|
6
|
-
* @param logger - A logger for logging information.
|
|
7
|
-
*/
|
|
8
4
|
export const logRoutes = (logger: Logger) => {
|
|
9
5
|
const routesByType = pikkuState(null, 'http', 'routes')
|
|
10
6
|
if (routesByType.size === 0) {
|
|
@@ -147,8 +147,6 @@ test('data() parses application/x-www-form-urlencoded correctly', async () => {
|
|
|
147
147
|
})
|
|
148
148
|
})
|
|
149
149
|
|
|
150
|
-
// --- Compatible types
|
|
151
|
-
|
|
152
150
|
test('data() treats "123" and 123 as equivalent', async () => {
|
|
153
151
|
const req = createRequest(
|
|
154
152
|
'POST',
|
|
@@ -160,7 +158,7 @@ test('data() treats "123" and 123 as equivalent', async () => {
|
|
|
160
158
|
)
|
|
161
159
|
|
|
162
160
|
const r = new PikkuFetchHTTPRequest(req)
|
|
163
|
-
r.setParams({ id: '123' })
|
|
161
|
+
r.setParams({ id: '123' })
|
|
164
162
|
const result = await r.data()
|
|
165
163
|
assert.deepEqual(result, { id: '123' })
|
|
166
164
|
})
|
|
@@ -176,13 +174,11 @@ test('data() treats "true" and true as equivalent', async () => {
|
|
|
176
174
|
)
|
|
177
175
|
|
|
178
176
|
const r = new PikkuFetchHTTPRequest(req)
|
|
179
|
-
r.setParams({ flag: 'true' })
|
|
177
|
+
r.setParams({ flag: 'true' })
|
|
180
178
|
const result = await r.data()
|
|
181
179
|
assert.deepEqual(result, { flag: 'true' })
|
|
182
180
|
})
|
|
183
181
|
|
|
184
|
-
// --- Conflicts
|
|
185
|
-
|
|
186
182
|
test('data() throws on conflicting values', async () => {
|
|
187
183
|
const req = createRequest(
|
|
188
184
|
'POST',
|
|
@@ -219,10 +215,6 @@ test('data() throws on boolean conflict', async () => {
|
|
|
219
215
|
})
|
|
220
216
|
})
|
|
221
217
|
|
|
222
|
-
// --- Safe fallback: only one source
|
|
223
|
-
|
|
224
|
-
// --- Body size limits
|
|
225
|
-
|
|
226
218
|
const streamedRequest = (chunks) =>
|
|
227
219
|
new Request('http://localhost', {
|
|
228
220
|
method: 'POST',
|