@pikku/core 0.12.72 → 0.12.74
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 +793 -0
- package/dist/crypto-utils.d.ts +30 -5
- package/dist/crypto-utils.js +146 -41
- 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 +44 -136
- package/dist/function/functions.types.js +0 -58
- 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 +5 -2
- package/dist/index.js +4 -1
- 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 +3 -40
- 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 +3 -2
- 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 +8 -7
- 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/services/ai-agent-runner-service.d.ts +20 -0
- package/dist/services/ai-embedding-service.d.ts +2 -25
- package/dist/services/audit-service.js +1 -2
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/deployment-service.d.ts +3 -9
- 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 +5 -6
- package/dist/services/index.js +2 -5
- 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.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 +0 -4
- package/dist/services/local-secrets.js +0 -4
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +2 -37
- 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 +9 -41
- 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 +0 -4
- 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 +5 -33
- 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 +0 -7
- 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 +19 -63
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +0 -17
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +99 -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 +34 -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 +58 -131
- 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 +49 -20
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -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 +39 -1
- package/dist/wirings/ai-agent/voice-input.js +46 -3
- package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
- package/dist/wirings/ai-agent/voice-output.js +153 -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 +20 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
- package/dist/wirings/cli/channel/index.d.ts +4 -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 +28 -0
- package/dist/wirings/persona/define-personas.js +27 -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 +125 -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 +102 -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 +18 -89
- 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 +16 -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 +1 -12
- package/dist/wirings/rpc/remote-addon-auth.js +1 -9
- 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 +27 -0
- package/dist/wirings/virtual-user/index.js +8 -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-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 +5 -5
- 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 -42
- 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 +0 -18
- 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 +72 -6
- 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 +0 -197
- 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/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-data-classification-brand-is-an-optional-property.md +34 -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 +113 -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/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/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/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 +4 -1
- package/run-tests.sh +0 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +283 -55
- package/src/data-classification.ts +1 -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 +56 -136
- 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 +60 -1
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +0 -3
- package/src/middleware/auth-bearer.ts +3 -40
- 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 +24 -9
- package/src/middleware/remote-auth.ts +10 -2
- 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 +172 -0
- package/src/remote.ts +17 -7
- package/src/schema.ts +5 -39
- package/src/scopes.ts +7 -48
- 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 +1 -2
- 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/deployment-service.ts +3 -9
- 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 +20 -15
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- 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.ts +0 -4
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +2 -37
- 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.ts +9 -41
- 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 +0 -4
- 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 +5 -33
- 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 +1 -7
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +19 -63
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +0 -26
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +116 -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 +75 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +36 -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 +82 -138
- 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 +67 -33
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
- package/src/wirings/ai-agent/index.ts +35 -3
- package/src/wirings/ai-agent/voice-input.test.ts +72 -7
- package/src/wirings/ai-agent/voice-input.ts +48 -3
- package/src/wirings/ai-agent/voice-output.test.ts +422 -0
- package/src/wirings/ai-agent/voice-output.ts +216 -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 +155 -0
- package/src/wirings/cli/channel/index.ts +9 -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 +29 -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 +131 -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 +453 -0
- package/src/wirings/queue/queue-identity.ts +173 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +19 -89
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +59 -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 +1 -13
- package/src/wirings/rpc/rpc-runner.test.ts +186 -2
- 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 +76 -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-target.ts +47 -0
- package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
- 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 -52
- 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.ts +0 -28
- package/src/wirings/workflow/scenario-service.test.ts +2 -9
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +159 -14
- package/src/wirings/workflow/scenario-step.types.ts +82 -6
- package/src/wirings/workflow/scenario-surface.test.ts +145 -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 +0 -203
- package/tsconfig.tsbuildinfo +1 -1
- 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
|
@@ -2,35 +2,6 @@ import type { CoreHTTPFunctionWiring, RunHTTPWiringOptions, PikkuHTTP, PikkuHTTP
|
|
|
2
2
|
import type { CorePikkuFunction, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
3
3
|
import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup } from '../../types/core.types.js';
|
|
4
4
|
import { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js';
|
|
5
|
-
/**
|
|
6
|
-
* Registers HTTP middleware for a specific route pattern.
|
|
7
|
-
*
|
|
8
|
-
* This function registers middleware at runtime that will be applied to
|
|
9
|
-
* HTTP routes matching the specified pattern.
|
|
10
|
-
*
|
|
11
|
-
* For tree-shaking benefits, wrap in a factory function:
|
|
12
|
-
* `export const x = () => addHTTPMiddleware('pattern', [...])`
|
|
13
|
-
*
|
|
14
|
-
* @template PikkuMiddleware The middleware type.
|
|
15
|
-
* @param {string} pattern - Route pattern (e.g., '*' for all routes, '/api/*' for specific routes).
|
|
16
|
-
* @param {CorePikkuMiddlewareGroup} middleware - Array of middleware for this route pattern.
|
|
17
|
-
*
|
|
18
|
-
* @returns {CorePikkuMiddlewareGroup} The middleware array (for chaining/wrapping).
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // Recommended: tree-shakeable
|
|
23
|
-
* export const httpGlobal = () => addHTTPMiddleware('*', [
|
|
24
|
-
* corsMiddleware,
|
|
25
|
-
* loggingMiddleware
|
|
26
|
-
* ])
|
|
27
|
-
*
|
|
28
|
-
* // Also works: no tree-shaking
|
|
29
|
-
* export const apiMiddleware = addHTTPMiddleware('/api/*', [
|
|
30
|
-
* authMiddleware
|
|
31
|
-
* ])
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
5
|
export declare const addHTTPMiddleware: <PikkuMiddleware extends CorePikkuMiddleware>(pattern: string, middleware: CorePikkuMiddlewareGroup, packageName?: string | null) => CorePikkuMiddlewareGroup;
|
|
35
6
|
/**
|
|
36
7
|
* @deprecated HTTP-route-level permissions were removed in #972 — permissions
|
|
@@ -42,78 +13,8 @@ export declare const addHTTPMiddleware: <PikkuMiddleware extends CorePikkuMiddle
|
|
|
42
13
|
* HTTP-route permissions.
|
|
43
14
|
*/
|
|
44
15
|
export declare const addHTTPPermission: (_pattern: string, _permissions: Record<string, CorePikkuPermission | CorePikkuPermission[]> | CorePikkuPermission[]) => never;
|
|
45
|
-
/**
|
|
46
|
-
* Adds a new route to the global HTTP route registry.
|
|
47
|
-
*
|
|
48
|
-
* The route configuration includes the HTTP method, route path, permissions,
|
|
49
|
-
* middleware, and the handler function that implements the route's logic.
|
|
50
|
-
*
|
|
51
|
-
* @template In Expected input type.
|
|
52
|
-
* @template Out Expected output type.
|
|
53
|
-
* @template Route Route pattern as a string.
|
|
54
|
-
* @template PikkuFunction Type for the route handler function.
|
|
55
|
-
* @template PikkuFunctionSessionless Type for a sessionless handler.
|
|
56
|
-
* @template PikkuPermissionGroup Type representing required permissions.
|
|
57
|
-
* @template PikkuMiddleware Middleware type to be used with the route.
|
|
58
|
-
* @param {CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware>} httpWiring - The HTTP wiring configuration object.
|
|
59
|
-
*/
|
|
60
16
|
export declare const wireHTTP: <In, Out, Route extends string, PikkuFunction extends CorePikkuFunction<In, Out> = CorePikkuFunction<In, Out>, PikkuFunctionSessionless extends CorePikkuFunctionSessionless<In, Out> = CorePikkuFunctionSessionless<In, Out>, PikkuPermissionGroup extends CorePikkuPermission<In> = CorePikkuPermission<In>, PikkuMiddleware extends CorePikkuMiddleware = CorePikkuMiddleware>(httpWiring: CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction, PikkuFunctionSessionless, PikkuPermissionGroup, PikkuMiddleware>) => void;
|
|
61
|
-
/**
|
|
62
|
-
* Combines the request and response objects into a single HTTP wire object.
|
|
63
|
-
*
|
|
64
|
-
* This utility function creates an object that holds both the HTTP request and response,
|
|
65
|
-
* which simplifies passing these around through middleware and route execution.
|
|
66
|
-
*
|
|
67
|
-
* @param {PikkuHTTPRequest | undefined} request - The HTTP request object.
|
|
68
|
-
* @param {PikkuHTTPResponse | undefined} response - The HTTP response object.
|
|
69
|
-
* @returns {PikkuHTTP | undefined} The combined HTTP wire object or undefined if none provided.
|
|
70
|
-
*/
|
|
71
17
|
export declare const createHTTPWire: (request: PikkuHTTPRequest | undefined, response: PikkuHTTPResponse | undefined) => PikkuHTTP | undefined;
|
|
72
|
-
/**
|
|
73
|
-
* Executes an HTTP route for a given Fetch API request.
|
|
74
|
-
*
|
|
75
|
-
* This function wraps the entire lifecycle of handling an HTTP request:
|
|
76
|
-
* - Matching the request to a registered route.
|
|
77
|
-
* - Validating input and session state.
|
|
78
|
-
* - Running middleware and the route handler.
|
|
79
|
-
* - Handling errors and forming the response.
|
|
80
|
-
*
|
|
81
|
-
* @template In Expected input data type.
|
|
82
|
-
* @template Out Expected output data type.
|
|
83
|
-
* @param {Request} request - The native Fetch API Request object.
|
|
84
|
-
* @param {RunHTTPWiringOptions} params - Additional options including services and session management.
|
|
85
|
-
* @returns {Promise<Response>} A promise that resolves to a Fetch API Response object.
|
|
86
|
-
*/
|
|
87
18
|
export declare const fetch: <In, Out>(request: Request, params?: RunHTTPWiringOptions) => Promise<Response>;
|
|
88
|
-
/**
|
|
89
|
-
* Executes an HTTP route using a Pikku-specific request wrapper.
|
|
90
|
-
*
|
|
91
|
-
* This variant accepts either a native Request or a PikkuHTTPRequest object and returns
|
|
92
|
-
* a PikkuFetchHTTPResponse for further manipulation if needed.
|
|
93
|
-
*
|
|
94
|
-
* @template In Expected input data type.
|
|
95
|
-
* @template Out Expected output data type.
|
|
96
|
-
* @param {Request | PikkuHTTPRequest} request - The request object.
|
|
97
|
-
* @param {RunHTTPWiringOptions} params - Execution options including services and session configuration.
|
|
98
|
-
* @returns {Promise<PikkuFetchHTTPResponse>} A promise that resolves to a PikkuFetchHTTPResponse object.
|
|
99
|
-
*/
|
|
100
19
|
export declare const pikkuFetch: <In, Out>(request: Request | PikkuHTTPRequest, params?: RunHTTPWiringOptions) => Promise<PikkuFetchHTTPResponse>;
|
|
101
|
-
/**
|
|
102
|
-
* Core function to process an HTTP request through route matching, validation,
|
|
103
|
-
* middleware execution, error handling, and session service cleanup.
|
|
104
|
-
*
|
|
105
|
-
* This function does the following:
|
|
106
|
-
* - Wraps the incoming request and response into an HTTP wire object.
|
|
107
|
-
* - Determines the correct route based on HTTP method and path.
|
|
108
|
-
* - Executes middleware and the route handler.
|
|
109
|
-
* - Catches and handles errors, optionally bubbling them if configured.
|
|
110
|
-
* - Cleans up any wire services created during processing.
|
|
111
|
-
*
|
|
112
|
-
* @template In Expected input data type.
|
|
113
|
-
* @template Out Expected output data type.
|
|
114
|
-
* @param {Request | PikkuHTTPRequest} request - The incoming HTTP request.
|
|
115
|
-
* @param {PikkuHTTPResponse} response - The response object to be populated.
|
|
116
|
-
* @param {RunHTTPWiringOptions} options - Options such as singleton services, session handling, and error configuration.
|
|
117
|
-
* @returns {Promise<Out | void>} The output from the route handler or void if an error occurred.
|
|
118
|
-
*/
|
|
119
20
|
export declare const fetchData: <In, Out>(request: Request | PikkuHTTPRequest, response: PikkuHTTPResponse, { skipUserSession, respondWith404, logWarningsForStatusCodes, coerceDataFromSchema, bubbleErrors, exposeErrors, generateRequestId, traceId: externalTraceId, maxBodySize, }?: RunHTTPWiringOptions) => Promise<Out | void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NotFoundError } from '../../errors/errors.js';
|
|
2
|
-
import {
|
|
2
|
+
import { createWeakUID, isSerializable } from '../../utils.js';
|
|
3
3
|
import { getSingletonServices, getCreateWireServices, } from '../../pikku-state.js';
|
|
4
4
|
import { PikkuSessionService } from '../../services/user-session-service.js';
|
|
5
5
|
import { getErrorResponse } from '../../errors/error-handler.js';
|
|
@@ -8,14 +8,12 @@ import { isProduction } from '../../env.js';
|
|
|
8
8
|
import { pikkuState } from '../../pikku-state.js';
|
|
9
9
|
import { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js';
|
|
10
10
|
import { PikkuFetchHTTPRequest } from './pikku-fetch-http-request.js';
|
|
11
|
+
import { unsupportedChannelRemote } from '../channel/channel-rpc.js';
|
|
11
12
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
|
|
12
13
|
import { applyWebResponse } from './web-request.js';
|
|
13
14
|
import { httpRouter } from './routers/http-router.js';
|
|
14
15
|
import { validateSchema } from '../../schema.js';
|
|
15
16
|
import { runMiddleware } from '../../middleware-runner.js';
|
|
16
|
-
/**
|
|
17
|
-
* Extract headers from a PikkuHTTPRequest based on the schema keys
|
|
18
|
-
*/
|
|
19
17
|
function extractHeadersFromRequest(request, headerKeys) {
|
|
20
18
|
const headers = {};
|
|
21
19
|
for (const headerName of headerKeys) {
|
|
@@ -26,35 +24,6 @@ function extractHeadersFromRequest(request, headerKeys) {
|
|
|
26
24
|
}
|
|
27
25
|
return headers;
|
|
28
26
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Registers HTTP middleware for a specific route pattern.
|
|
31
|
-
*
|
|
32
|
-
* This function registers middleware at runtime that will be applied to
|
|
33
|
-
* HTTP routes matching the specified pattern.
|
|
34
|
-
*
|
|
35
|
-
* For tree-shaking benefits, wrap in a factory function:
|
|
36
|
-
* `export const x = () => addHTTPMiddleware('pattern', [...])`
|
|
37
|
-
*
|
|
38
|
-
* @template PikkuMiddleware The middleware type.
|
|
39
|
-
* @param {string} pattern - Route pattern (e.g., '*' for all routes, '/api/*' for specific routes).
|
|
40
|
-
* @param {CorePikkuMiddlewareGroup} middleware - Array of middleware for this route pattern.
|
|
41
|
-
*
|
|
42
|
-
* @returns {CorePikkuMiddlewareGroup} The middleware array (for chaining/wrapping).
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```typescript
|
|
46
|
-
* // Recommended: tree-shakeable
|
|
47
|
-
* export const httpGlobal = () => addHTTPMiddleware('*', [
|
|
48
|
-
* corsMiddleware,
|
|
49
|
-
* loggingMiddleware
|
|
50
|
-
* ])
|
|
51
|
-
*
|
|
52
|
-
* // Also works: no tree-shaking
|
|
53
|
-
* export const apiMiddleware = addHTTPMiddleware('/api/*', [
|
|
54
|
-
* authMiddleware
|
|
55
|
-
* ])
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
27
|
export const addHTTPMiddleware = (pattern, middleware, packageName = null) => {
|
|
59
28
|
const httpGroups = pikkuState(packageName, 'middleware', 'httpGroup');
|
|
60
29
|
const existing = httpGroups[pattern];
|
|
@@ -75,29 +44,10 @@ export const addHTTPMiddleware = (pattern, middleware, packageName = null) => {
|
|
|
75
44
|
export const addHTTPPermission = (_pattern, _permissions) => {
|
|
76
45
|
throw new Error('addHTTPPermission was removed in #972 — HTTP-route-level permissions no longer exist. Declare permissions on the function definition instead: pikkuFunc({ permissions }).');
|
|
77
46
|
};
|
|
78
|
-
/**
|
|
79
|
-
* Adds a new route to the global HTTP route registry.
|
|
80
|
-
*
|
|
81
|
-
* The route configuration includes the HTTP method, route path, permissions,
|
|
82
|
-
* middleware, and the handler function that implements the route's logic.
|
|
83
|
-
*
|
|
84
|
-
* @template In Expected input type.
|
|
85
|
-
* @template Out Expected output type.
|
|
86
|
-
* @template Route Route pattern as a string.
|
|
87
|
-
* @template PikkuFunction Type for the route handler function.
|
|
88
|
-
* @template PikkuFunctionSessionless Type for a sessionless handler.
|
|
89
|
-
* @template PikkuPermissionGroup Type representing required permissions.
|
|
90
|
-
* @template PikkuMiddleware Middleware type to be used with the route.
|
|
91
|
-
* @param {CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware>} httpWiring - The HTTP wiring configuration object.
|
|
92
|
-
*/
|
|
93
47
|
export const wireHTTP = (httpWiring) => {
|
|
94
48
|
const httpMeta = pikkuState(null, 'http', 'meta');
|
|
95
49
|
const routeMeta = httpMeta[httpWiring.method][httpWiring.route];
|
|
96
50
|
if (!routeMeta) {
|
|
97
|
-
// In deploy units with filtered metadata, wiring files may include
|
|
98
|
-
// routes for functions not in this unit. This happens when multiple
|
|
99
|
-
// wirings share a file — split them into separate files for better
|
|
100
|
-
// tree-shaking.
|
|
101
51
|
console.warn(`[pikku] Skipping HTTP route '${httpWiring.method.toUpperCase()} ${httpWiring.route}' — metadata not found. Consider moving this wiring to its own file.`);
|
|
102
52
|
return;
|
|
103
53
|
}
|
|
@@ -112,17 +62,6 @@ export const wireHTTP = (httpWiring) => {
|
|
|
112
62
|
.get(httpWiring.method)
|
|
113
63
|
?.set(httpWiring.route, httpWiring);
|
|
114
64
|
};
|
|
115
|
-
/**
|
|
116
|
-
* Finds a matching route based on the HTTP method and URL path.
|
|
117
|
-
*
|
|
118
|
-
* Iterates over all registered routes, skipping those with a mismatched method.
|
|
119
|
-
* When a route pattern matches the incoming request path, this function aggregates
|
|
120
|
-
* any global middleware along with route-specific middleware and identifies any input schema.
|
|
121
|
-
*
|
|
122
|
-
* @param {string} requestType - The HTTP method (e.g., GET, POST).
|
|
123
|
-
* @param {string} requestPath - The URL path of the incoming request.
|
|
124
|
-
* @returns {Object | undefined} An object with matched route details or undefined if no match.
|
|
125
|
-
*/
|
|
126
65
|
const getMatchingRoute = (requestType, requestPath) => {
|
|
127
66
|
const matchedPath = httpRouter.match(requestType.toLowerCase(), requestPath);
|
|
128
67
|
if (matchedPath) {
|
|
@@ -138,16 +77,6 @@ const getMatchingRoute = (requestType, requestPath) => {
|
|
|
138
77
|
};
|
|
139
78
|
}
|
|
140
79
|
};
|
|
141
|
-
/**
|
|
142
|
-
* Combines the request and response objects into a single HTTP wire object.
|
|
143
|
-
*
|
|
144
|
-
* This utility function creates an object that holds both the HTTP request and response,
|
|
145
|
-
* which simplifies passing these around through middleware and route execution.
|
|
146
|
-
*
|
|
147
|
-
* @param {PikkuHTTPRequest | undefined} request - The HTTP request object.
|
|
148
|
-
* @param {PikkuHTTPResponse | undefined} response - The HTTP response object.
|
|
149
|
-
* @returns {PikkuHTTP | undefined} The combined HTTP wire object or undefined if none provided.
|
|
150
|
-
*/
|
|
151
80
|
export const createHTTPWire = (request, response) => {
|
|
152
81
|
let http = undefined;
|
|
153
82
|
if (request || response) {
|
|
@@ -161,43 +90,19 @@ export const createHTTPWire = (request, response) => {
|
|
|
161
90
|
}
|
|
162
91
|
return http;
|
|
163
92
|
};
|
|
164
|
-
/**
|
|
165
|
-
* Validates the input data and executes the route handler
|
|
166
|
-
*
|
|
167
|
-
* This function performs these steps:
|
|
168
|
-
* 1. Sets URL parameters on the request.
|
|
169
|
-
* 2. Validates the user session if required.
|
|
170
|
-
* 3. Creates session-specific services.
|
|
171
|
-
* 4. Validates the incoming data against a schema.
|
|
172
|
-
* 5. Optionally coerces query string values to arrays.
|
|
173
|
-
* 6. Checks route-specific permissions.
|
|
174
|
-
* 7. Executes the route handler.
|
|
175
|
-
* 8. Sends the appropriate response.
|
|
176
|
-
*
|
|
177
|
-
* @param {Object} services - A collection of shared services and utilities.
|
|
178
|
-
* @param {Object} matchedRoute - Contains route details, URL parameters, and optional schema.
|
|
179
|
-
* @param {PikkuHTTP | undefined} http - The HTTP wire object.
|
|
180
|
-
* @param {Object} options - Options for route execution (e.g., whether to coerce query strings to arrays).
|
|
181
|
-
* @returns {Promise<any>} An object containing the route handler result and wire services (if any).
|
|
182
|
-
* @throws Throws errors like MissingSessionError or ForbiddenError on validation failures.
|
|
183
|
-
*/
|
|
184
93
|
const executeRoute = async (services, matchedRoute, http, options) => {
|
|
185
94
|
const { params, route, meta } = matchedRoute;
|
|
186
95
|
const { singletonServices, createWireServices, skipUserSession, requestId } = services;
|
|
187
96
|
const userSession = new PikkuSessionService(singletonServices.sessionStore);
|
|
188
|
-
// Attach URL parameters to the request object
|
|
189
97
|
http?.request?.setParams(params);
|
|
190
|
-
// Validate request headers if schema is defined
|
|
191
98
|
if (meta.headersSchemaName && http.request && singletonServices.schema) {
|
|
192
99
|
const headerKeys = singletonServices.schema.getSchemaKeys(meta.headersSchemaName);
|
|
193
100
|
const rawHeaders = extractHeadersFromRequest(http.request, headerKeys);
|
|
194
101
|
await validateSchema(singletonServices.logger, singletonServices.schema, meta.headersSchemaName, rawHeaders);
|
|
195
102
|
}
|
|
196
103
|
const requiresSession = route.auth !== false;
|
|
197
|
-
let wireServices;
|
|
198
104
|
let result;
|
|
199
105
|
singletonServices.logger.info(`Matched route: ${route.route} | method: ${route.method.toUpperCase()} | auth: ${requiresSession.toString()}`);
|
|
200
|
-
// Ensure session is available when required
|
|
201
106
|
if (skipUserSession && requiresSession) {
|
|
202
107
|
throw new Error("Can't skip trying to get user session if auth is required");
|
|
203
108
|
}
|
|
@@ -243,10 +148,10 @@ const executeRoute = async (services, matchedRoute, http, options) => {
|
|
|
243
148
|
clearState: () => {
|
|
244
149
|
sseState = undefined;
|
|
245
150
|
},
|
|
151
|
+
// SSE only flows server to client — the client has no way to answer on
|
|
152
|
+
// this channel, so a remote call could never be replied to.
|
|
153
|
+
remote: unsupportedChannelRemote,
|
|
246
154
|
};
|
|
247
|
-
// Register the SSE channel with the eventHub (if present) so that
|
|
248
|
-
// eventHub.publish() can deliver messages to SSE subscribers.
|
|
249
|
-
// The channel handler wraps the SSE channel to match PikkuChannelHandler.
|
|
250
155
|
if (singletonServices.eventHub?.onChannelOpened) {
|
|
251
156
|
const channelRef = channel;
|
|
252
157
|
const channelHandler = {
|
|
@@ -304,12 +209,11 @@ const executeRoute = async (services, matchedRoute, http, options) => {
|
|
|
304
209
|
}
|
|
305
210
|
catch { }
|
|
306
211
|
channel?.close();
|
|
307
|
-
return
|
|
212
|
+
return { result };
|
|
308
213
|
}
|
|
309
214
|
throw e;
|
|
310
215
|
}
|
|
311
216
|
if (matchedRoute.route.sse) {
|
|
312
|
-
// Flush headers after middleware has run so CORS/auth headers are included
|
|
313
217
|
http?.response?.flushHeaders?.();
|
|
314
218
|
}
|
|
315
219
|
else {
|
|
@@ -327,75 +231,25 @@ const executeRoute = async (services, matchedRoute, http, options) => {
|
|
|
327
231
|
http?.response?.json(result);
|
|
328
232
|
}
|
|
329
233
|
}
|
|
330
|
-
return
|
|
234
|
+
return { result };
|
|
331
235
|
};
|
|
332
|
-
/**
|
|
333
|
-
* Executes an HTTP route for a given Fetch API request.
|
|
334
|
-
*
|
|
335
|
-
* This function wraps the entire lifecycle of handling an HTTP request:
|
|
336
|
-
* - Matching the request to a registered route.
|
|
337
|
-
* - Validating input and session state.
|
|
338
|
-
* - Running middleware and the route handler.
|
|
339
|
-
* - Handling errors and forming the response.
|
|
340
|
-
*
|
|
341
|
-
* @template In Expected input data type.
|
|
342
|
-
* @template Out Expected output data type.
|
|
343
|
-
* @param {Request} request - The native Fetch API Request object.
|
|
344
|
-
* @param {RunHTTPWiringOptions} params - Additional options including services and session management.
|
|
345
|
-
* @returns {Promise<Response>} A promise that resolves to a Fetch API Response object.
|
|
346
|
-
*/
|
|
347
236
|
export const fetch = async (request, params = {}) => {
|
|
348
237
|
const pikkuResponse = new PikkuFetchHTTPResponse();
|
|
349
238
|
await fetchData(request, pikkuResponse, params);
|
|
350
239
|
return pikkuResponse.toResponse();
|
|
351
240
|
};
|
|
352
|
-
/**
|
|
353
|
-
* Executes an HTTP route using a Pikku-specific request wrapper.
|
|
354
|
-
*
|
|
355
|
-
* This variant accepts either a native Request or a PikkuHTTPRequest object and returns
|
|
356
|
-
* a PikkuFetchHTTPResponse for further manipulation if needed.
|
|
357
|
-
*
|
|
358
|
-
* @template In Expected input data type.
|
|
359
|
-
* @template Out Expected output data type.
|
|
360
|
-
* @param {Request | PikkuHTTPRequest} request - The request object.
|
|
361
|
-
* @param {RunHTTPWiringOptions} params - Execution options including services and session configuration.
|
|
362
|
-
* @returns {Promise<PikkuFetchHTTPResponse>} A promise that resolves to a PikkuFetchHTTPResponse object.
|
|
363
|
-
*/
|
|
364
241
|
export const pikkuFetch = async (request, params = {}) => {
|
|
365
242
|
const pikkuResponse = new PikkuFetchHTTPResponse();
|
|
366
243
|
await fetchData(request, pikkuResponse, params);
|
|
367
244
|
return pikkuResponse;
|
|
368
245
|
};
|
|
369
|
-
|
|
370
|
-
* Core function to process an HTTP request through route matching, validation,
|
|
371
|
-
* middleware execution, error handling, and session service cleanup.
|
|
372
|
-
*
|
|
373
|
-
* This function does the following:
|
|
374
|
-
* - Wraps the incoming request and response into an HTTP wire object.
|
|
375
|
-
* - Determines the correct route based on HTTP method and path.
|
|
376
|
-
* - Executes middleware and the route handler.
|
|
377
|
-
* - Catches and handles errors, optionally bubbling them if configured.
|
|
378
|
-
* - Cleans up any wire services created during processing.
|
|
379
|
-
*
|
|
380
|
-
* @template In Expected input data type.
|
|
381
|
-
* @template Out Expected output data type.
|
|
382
|
-
* @param {Request | PikkuHTTPRequest} request - The incoming HTTP request.
|
|
383
|
-
* @param {PikkuHTTPResponse} response - The response object to be populated.
|
|
384
|
-
* @param {RunHTTPWiringOptions} options - Options such as singleton services, session handling, and error configuration.
|
|
385
|
-
* @returns {Promise<Out | void>} The output from the route handler or void if an error occurred.
|
|
386
|
-
*/
|
|
387
|
-
export const fetchData = async (request, response, { skipUserSession = false, respondWith404 = true, logWarningsForStatusCodes = [], coerceDataFromSchema = true, bubbleErrors = false,
|
|
388
|
-
// Surface the error message + stack on unexpected 500s unless in production.
|
|
389
|
-
exposeErrors = !isProduction(), generateRequestId, traceId: externalTraceId, maxBodySize, } = {}) => {
|
|
246
|
+
export const fetchData = async (request, response, { skipUserSession = false, respondWith404 = true, logWarningsForStatusCodes = [], coerceDataFromSchema = true, bubbleErrors = false, exposeErrors = !isProduction(), generateRequestId, traceId: externalTraceId, maxBodySize, } = {}) => {
|
|
390
247
|
const singletonServices = getSingletonServices();
|
|
391
248
|
const createWireServices = getCreateWireServices();
|
|
392
|
-
let wireServices;
|
|
393
249
|
let result;
|
|
394
|
-
// Combine the request and response into one wire object
|
|
395
250
|
const pikkuRequest = request instanceof Request
|
|
396
251
|
? new PikkuFetchHTTPRequest(request, { maxBodySize })
|
|
397
252
|
: request;
|
|
398
|
-
// Resolve traceId: external (e.g. CF-Ray) > x-request-id header > generated
|
|
399
253
|
let requestId = externalTraceId ?? null;
|
|
400
254
|
if (!requestId) {
|
|
401
255
|
try {
|
|
@@ -404,13 +258,10 @@ exposeErrors = !isProduction(), generateRequestId, traceId: externalTraceId, max
|
|
|
404
258
|
catch { }
|
|
405
259
|
}
|
|
406
260
|
requestId = requestId || generateRequestId?.() || createWeakUID();
|
|
407
|
-
// Scoped logger for HTTP runner internal logging (error handling, route matching)
|
|
408
|
-
// Functions/middleware receive singletonServices.logger directly for compatibility
|
|
409
261
|
const scopedLogger = singletonServices.logger.scope?.(requestId) ?? singletonServices.logger;
|
|
410
262
|
const http = createHTTPWire(pikkuRequest, response);
|
|
411
263
|
const apiType = http.request.method();
|
|
412
264
|
const apiRoute = http.request.path();
|
|
413
|
-
// Locate the matching route based on the HTTP method and path
|
|
414
265
|
const matchedRoute = getMatchingRoute(apiType, apiRoute);
|
|
415
266
|
try {
|
|
416
267
|
if (!matchedRoute) {
|
|
@@ -431,9 +282,8 @@ exposeErrors = !isProduction(), generateRequestId, traceId: externalTraceId, max
|
|
|
431
282
|
});
|
|
432
283
|
throw new NotFoundError();
|
|
433
284
|
}
|
|
434
|
-
// Execute the matched route along with its middleware and session management
|
|
435
285
|
;
|
|
436
|
-
({ result
|
|
286
|
+
({ result } = await executeRoute({
|
|
437
287
|
singletonServices,
|
|
438
288
|
createWireServices,
|
|
439
289
|
skipUserSession,
|
|
@@ -444,10 +294,4 @@ exposeErrors = !isProduction(), generateRequestId, traceId: externalTraceId, max
|
|
|
444
294
|
catch (e) {
|
|
445
295
|
handleHTTPError(e, http, requestId, scopedLogger, logWarningsForStatusCodes, respondWith404, bubbleErrors, exposeErrors);
|
|
446
296
|
}
|
|
447
|
-
finally {
|
|
448
|
-
// Clean up any session-specific services created during processing
|
|
449
|
-
if (wireServices) {
|
|
450
|
-
await closeWireServices(singletonServices.logger, wireServices);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
297
|
};
|
|
@@ -22,57 +22,25 @@ export type RunHTTPWiringOptions = Partial<{
|
|
|
22
22
|
/** Maximum request body size in bytes, applied when pikku wraps a fetch `Request`. */
|
|
23
23
|
maxBodySize: number;
|
|
24
24
|
}>;
|
|
25
|
-
/**
|
|
26
|
-
* Represents the HTTP methods supported for API HTTP wirings.
|
|
27
|
-
*/
|
|
28
25
|
export type HTTPMethod = 'post' | 'get' | 'delete' | 'patch' | 'head' | 'put' | 'options';
|
|
29
|
-
/**
|
|
30
|
-
* Header schema type for request header validation.
|
|
31
|
-
* Uses Standard Schema interface - works with Zod, Valibot, ArkType, Effect Schema, etc.
|
|
32
|
-
*/
|
|
33
26
|
export type HTTPHeadersSchema = StandardSchemaV1<Record<string, string | string[] | undefined>>;
|
|
34
|
-
/**
|
|
35
|
-
* Common HTTP route configuration shared between wireHTTP and wireHTTPRoutes
|
|
36
|
-
*/
|
|
37
27
|
export type HTTPRouteBaseConfig = {
|
|
38
28
|
contentType?: 'xml' | 'json';
|
|
39
29
|
timeout?: number;
|
|
40
30
|
tags?: string[];
|
|
41
31
|
headers?: HTTPHeadersSchema;
|
|
42
32
|
};
|
|
43
|
-
/**
|
|
44
|
-
* Represents an API HTTP wiring without a function, including metadata such as content type, route, and timeout settings.
|
|
45
|
-
*/
|
|
46
33
|
export type CoreHTTPFunction = HTTPRouteBaseConfig & {
|
|
47
34
|
route: string;
|
|
48
35
|
eventChannel?: false;
|
|
49
36
|
returnsJSON?: false;
|
|
50
37
|
};
|
|
51
|
-
/**
|
|
52
|
-
* Represents a http wire within Pikku, including a request and response.
|
|
53
|
-
*/
|
|
54
38
|
export interface PikkuHTTP<In = unknown> {
|
|
55
39
|
request?: PikkuHTTPRequest<In>;
|
|
56
40
|
response?: PikkuHTTPResponse;
|
|
57
41
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Represents request headers as either a record or a function to get headers by name.
|
|
60
|
-
*/
|
|
61
42
|
export type RequestHeaders = Record<string, string | string[] | undefined> | ((headerName: string) => string | string[] | undefined);
|
|
62
|
-
/**
|
|
63
|
-
* Represents a query object for Pikku, where each key can be a string, a value, or an array of values.
|
|
64
|
-
*/
|
|
65
43
|
export type PikkuQuery<T = Record<string, string | undefined>> = Record<string, string | T | null | Array<T | null>>;
|
|
66
|
-
/**
|
|
67
|
-
* Represents a core API HTTP wiring, which can have different configurations depending on whether it requires authentication and permissions.
|
|
68
|
-
*
|
|
69
|
-
* @template In - The input type.
|
|
70
|
-
* @template Out - The output type.
|
|
71
|
-
* @template R - The route string type.
|
|
72
|
-
* @template PikkuFunction - The API function type, defaults to `CorePikkuFunction`.
|
|
73
|
-
* @template PikkuFunctionSessionless - The sessionless API function type, defaults to `CorePikkuFunctionSessionless`.
|
|
74
|
-
* @template PikkuPermission - The permission function type, defaults to `CorePikkuPermission`.
|
|
75
|
-
*/
|
|
76
44
|
export type CoreHTTPFunctionWiring<In, Out, R extends string, PikkuFunction extends CorePikkuFunction<In, Out, any, any, any> = CorePikkuFunction<In, Out>, PikkuFunctionSessionless extends CorePikkuFunctionSessionless<In, Out, any, any, any> = CorePikkuFunctionSessionless<In, Out>, PikkuPermission extends CorePikkuPermission<In, any, any> = CorePikkuPermission<In, any, any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>> = (CoreHTTPFunction & {
|
|
77
45
|
route: R;
|
|
78
46
|
method: HTTPMethod;
|
|
@@ -118,20 +86,25 @@ export type CoreHTTPFunctionWiring<In, Out, R extends string, PikkuFunction exte
|
|
|
118
86
|
query?: Array<keyof In>;
|
|
119
87
|
sse?: undefined;
|
|
120
88
|
});
|
|
121
|
-
/**
|
|
122
|
-
* Represents the input types for HTTP wiring metadata, including parameters, query, and body types.
|
|
123
|
-
*/
|
|
124
89
|
export type HTTPFunctionMetaInputTypes = {
|
|
125
90
|
params?: string;
|
|
126
91
|
query?: string;
|
|
127
92
|
body?: string;
|
|
128
93
|
};
|
|
129
|
-
/**
|
|
130
|
-
* Represents metadata for a set of HTTP wirings, including HTTP wiring details, methods, input/output types, and documentation.
|
|
131
|
-
*/
|
|
132
94
|
export type HTTPWiringMeta = CommonWireMeta & {
|
|
133
95
|
route: string;
|
|
134
96
|
method: HTTPMethod;
|
|
97
|
+
/** The route's own `auth`, or the group's if the route did not set one. */
|
|
98
|
+
auth?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Whether reaching this route requires a session, resolved at codegen time
|
|
101
|
+
* across every layer that can demand one: the function's `sessionless`, its
|
|
102
|
+
* own `auth`, this route's `auth`, and the auth flag of the addon the
|
|
103
|
+
* function belongs to. Answering "which routes are open?" used to mean
|
|
104
|
+
* joining four separate places and knowing which of them wins; getting that
|
|
105
|
+
* join wrong reads an open route as a closed one.
|
|
106
|
+
*/
|
|
107
|
+
requiresSession?: boolean;
|
|
135
108
|
refTarget?: string;
|
|
136
109
|
params?: string[];
|
|
137
110
|
query?: string[];
|
|
@@ -170,15 +143,14 @@ export interface PikkuHTTPResponse<Out = unknown> {
|
|
|
170
143
|
header(name: string, value: string | string[]): this;
|
|
171
144
|
arrayBuffer(data: ArrayBuffer | ArrayBufferView | Blob | string | FormData | URLSearchParams | ReadableStream): this;
|
|
172
145
|
json(data: Out): this;
|
|
173
|
-
|
|
146
|
+
/** `ArrayBufferView` covers `Buffer` and `Uint8Array`, which is how a body
|
|
147
|
+
* that is not text reaches here without being decoded on the way. */
|
|
148
|
+
send?(data: string | ArrayBuffer | ArrayBufferView): this;
|
|
174
149
|
redirect(location: string, status?: number): this;
|
|
175
150
|
close?: () => void;
|
|
176
151
|
setMode?: (mode: 'stream') => void;
|
|
177
152
|
flushHeaders?: () => void;
|
|
178
153
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Single route configuration - supports all wireHTTP options
|
|
181
|
-
*/
|
|
182
154
|
export type HTTPRouteConfig<PikkuFunction extends CorePikkuFunction<any, any, any, any, any> | CorePikkuFunctionSessionless<any, any, any, any, any> = CorePikkuFunction<any, any, any, any, any> | CorePikkuFunctionSessionless<any, any, any, any, any>, PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>> = HTTPRouteBaseConfig & {
|
|
183
155
|
method: HTTPMethod;
|
|
184
156
|
route: string;
|
|
@@ -187,31 +159,18 @@ export type HTTPRouteConfig<PikkuFunction extends CorePikkuFunction<any, any, an
|
|
|
187
159
|
middleware?: PikkuMiddleware[];
|
|
188
160
|
sse?: boolean;
|
|
189
161
|
};
|
|
190
|
-
/**
|
|
191
|
-
* Group-level configuration applied to all routes
|
|
192
|
-
*/
|
|
193
162
|
export type HTTPRoutesGroupConfig<PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any, any, any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>> = {
|
|
194
163
|
basePath?: string;
|
|
195
164
|
tags?: string[];
|
|
196
165
|
auth?: boolean;
|
|
197
166
|
middleware?: PikkuMiddleware[];
|
|
198
167
|
};
|
|
199
|
-
/**
|
|
200
|
-
* Nested route map - allows hierarchical organization
|
|
201
|
-
* Can contain individual routes, nested maps, or contracts with config
|
|
202
|
-
*/
|
|
203
168
|
export type HTTPRouteMap = {
|
|
204
169
|
[key: string]: HTTPRouteConfig | HTTPRouteMap | HTTPRouteContract;
|
|
205
170
|
};
|
|
206
|
-
/**
|
|
207
|
-
* A route contract with optional group config (returned by defineRoutes)
|
|
208
|
-
*/
|
|
209
171
|
export type HTTPRouteContract<T extends HTTPRouteMap = HTTPRouteMap> = HTTPRoutesGroupConfig & {
|
|
210
172
|
routes: T;
|
|
211
173
|
};
|
|
212
|
-
/**
|
|
213
|
-
* Full configuration for wireHTTPRoutes
|
|
214
|
-
*/
|
|
215
174
|
export type WireHTTPRoutesConfig = HTTPRoutesGroupConfig & {
|
|
216
175
|
routes: HTTPRouteMap | HTTPRouteConfig[];
|
|
217
176
|
};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
-
/**
|
|
3
|
-
* Logs all the loaded routes.
|
|
4
|
-
* @param logger - A logger for logging information.
|
|
5
|
-
*/
|
|
6
2
|
export const logRoutes = (logger) => {
|
|
7
3
|
const routesByType = pikkuState(null, 'http', 'routes');
|
|
8
4
|
if (routesByType.size === 0) {
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import type { HTTPMethod, PikkuHTTPRequest, PikkuQuery } from './http.types.js';
|
|
2
|
-
/**
|
|
3
|
-
* The largest request body read into memory when no limit is configured. Ample
|
|
4
|
-
* for JSON APIs and typical uploads while keeping a single request's memory
|
|
5
|
-
* footprint bounded.
|
|
6
|
-
*/
|
|
7
2
|
export declare const DEFAULT_MAX_BODY_SIZE: number;
|
|
8
3
|
export type PikkuFetchHTTPRequestOptions = Partial<{
|
|
9
4
|
/** Maximum request body size in bytes. Defaults to {@link DEFAULT_MAX_BODY_SIZE}. */
|
|
10
5
|
maxBodySize: number;
|
|
11
6
|
}>;
|
|
12
7
|
/**
|
|
13
|
-
* Abstract class representing a pikku request.
|
|
14
|
-
* @template In - The type of the request body.
|
|
15
8
|
* @group RequestResponse
|
|
16
9
|
*/
|
|
17
10
|
export declare class PikkuFetchHTTPRequest<In = unknown> implements PikkuHTTPRequest<In> {
|
|
@@ -20,47 +13,14 @@ export declare class PikkuFetchHTTPRequest<In = unknown> implements PikkuHTTPReq
|
|
|
20
13
|
constructor(request: Request, { maxBodySize }?: PikkuFetchHTTPRequestOptions);
|
|
21
14
|
method(): HTTPMethod;
|
|
22
15
|
path(): string;
|
|
23
|
-
/**
|
|
24
|
-
* Retrieves the request body.
|
|
25
|
-
* @returns A promise that resolves to the request body.
|
|
26
|
-
*/
|
|
27
16
|
json(): Promise<In>;
|
|
28
|
-
/**
|
|
29
|
-
* Retrieves the raw request body as a Buffer.
|
|
30
|
-
* @returns A promise that resolves to the raw request body.
|
|
31
|
-
*/
|
|
32
17
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
33
18
|
headers(): Record<string, string>;
|
|
34
|
-
/**
|
|
35
|
-
* Retrieves the value of a specific header.
|
|
36
|
-
* @param headerName - The name of the header to retrieve.
|
|
37
|
-
* @returns The value of the header, or undefined if the header is not found.
|
|
38
|
-
*/
|
|
39
19
|
header(headerName: string): string | null;
|
|
40
|
-
/**
|
|
41
|
-
* Retrieves the cookies from the request.
|
|
42
|
-
* @returns An object containing the cookies.
|
|
43
|
-
*/
|
|
44
20
|
cookie(cookieName: string): string | null;
|
|
45
|
-
/**
|
|
46
|
-
* Retrieves the request parameters.
|
|
47
|
-
* @returns An object containing the request parameters.
|
|
48
|
-
*/
|
|
49
21
|
params(): Partial<Record<string, string | string[]>>;
|
|
50
|
-
/**
|
|
51
|
-
* Sets the request parameters.
|
|
52
|
-
* @param params - An object containing the request parameters to set.
|
|
53
|
-
*/
|
|
54
22
|
setParams(params: Record<string, string | string[] | undefined>): void;
|
|
55
|
-
/**
|
|
56
|
-
* Retrieves the query parameters from the request.
|
|
57
|
-
* @returns An object containing the query parameters.
|
|
58
|
-
*/
|
|
59
23
|
query(): PikkuQuery;
|
|
60
|
-
/**
|
|
61
|
-
* Retrieves the combined data from the request, including parameters, query, and body.
|
|
62
|
-
* @returns A promise that resolves to an object containing the combined data.
|
|
63
|
-
*/
|
|
64
24
|
data(): Promise<In>;
|
|
65
25
|
private body;
|
|
66
26
|
}
|