@pikku/core 0.12.142 → 0.12.144
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/dist/analytics/analytics.d.ts +14 -0
- package/dist/analytics/analytics.js +14 -0
- package/dist/analytics/analytics.types.d.ts +1 -0
- package/dist/analytics/anonymous-analytics-identity.d.ts +1 -0
- package/dist/analytics/cookie-analytics-identity.d.ts +1 -0
- package/dist/analytics/mint-cookie.d.ts +1 -0
- package/dist/{wirings/channel/channel-middleware-runner.d.ts → channel-middleware-runner.d.ts} +17 -3
- package/dist/{wirings/channel/channel-middleware-runner.js → channel-middleware-runner.js} +24 -8
- package/dist/classification/data-classification.d.ts +13 -0
- package/dist/classification/secret-value.d.ts +7 -0
- package/dist/classification/secret-value.js +7 -0
- package/dist/crypto-utils.d.ts +93 -0
- package/dist/crypto-utils.js +92 -0
- package/dist/dev/hot-reload.d.ts +16 -0
- package/dist/dev/hot-reload.js +16 -1
- package/dist/dev/module-runner.js +7 -3
- package/dist/dev/reload-meta.js +1 -1
- package/dist/errors/error-handler.d.ts +9 -0
- package/dist/errors/error-handler.js +8 -0
- package/dist/errors/errors.d.ts +219 -0
- package/dist/errors/errors.js +227 -0
- package/dist/errors/serialized-error.d.ts +4 -0
- package/dist/function/abort-scope.d.ts +5 -0
- package/dist/function/function-meta.types.d.ts +20 -0
- package/dist/function/function-runner.d.ts +41 -0
- package/dist/function/function-runner.js +57 -11
- package/dist/function/functions.types.d.ts +59 -0
- package/dist/function/functions.types.js +23 -0
- package/dist/function/list.types.d.ts +4 -0
- package/dist/lifecycle.d.ts +12 -1
- package/dist/lifecycle.js +12 -1
- package/dist/middleware/addon-scope-cap.d.ts +4 -0
- package/dist/middleware/addon-scope-cap.js +7 -3
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.js +5 -13
- package/dist/middleware/auth-cookie.js +3 -3
- package/dist/middleware/middleware-factories.d.ts +17 -0
- package/dist/middleware/middleware-factories.js +17 -0
- package/dist/middleware/middleware.types.d.ts +23 -0
- package/dist/middleware/remote-auth.d.ts +15 -0
- package/dist/middleware/remote-auth.js +18 -3
- package/dist/middleware/remote-jobs-secret.js +2 -10
- package/dist/middleware-runner.d.ts +7 -0
- package/dist/middleware-runner.js +23 -7
- package/dist/permissions.d.ts +13 -0
- package/dist/permissions.js +13 -0
- package/dist/pikku-state.d.ts +49 -0
- package/dist/pikku-state.js +49 -0
- package/dist/remote.js +20 -5
- package/dist/schema.d.ts +36 -0
- package/dist/schema.js +36 -0
- package/dist/services/agent-run-state-service.d.ts +8 -0
- package/dist/services/agent-runner-service.d.ts +24 -0
- package/dist/services/agent-storage-service.d.ts +8 -0
- package/dist/services/ai-embedding-service.d.ts +4 -0
- package/dist/services/audit-service.d.ts +48 -0
- package/dist/services/audit-service.js +22 -0
- package/dist/services/content-service.d.ts +34 -0
- package/dist/services/credential-wire-service.d.ts +9 -0
- package/dist/services/credential-wire-service.js +9 -0
- package/dist/services/deployment-service.d.ts +14 -0
- package/dist/services/email-service.d.ts +20 -0
- package/dist/services/email-template.d.ts +24 -0
- package/dist/services/email-template.js +12 -0
- package/dist/services/file-scenario-run-store.d.ts +5 -0
- package/dist/services/file-scenario-run-store.js +4 -0
- package/dist/services/gateway-service.d.ts +5 -0
- package/dist/services/in-memory-agent-run-state-service.d.ts +5 -0
- package/dist/services/in-memory-agent-run-state-service.js +5 -0
- package/dist/services/in-memory-lease-service.d.ts +5 -0
- package/dist/services/in-memory-lease-service.js +5 -0
- package/dist/services/in-memory-session-store.d.ts +4 -0
- package/dist/services/in-memory-session-store.js +4 -0
- package/dist/services/incoming-webhook-queue.d.ts +2 -0
- package/dist/services/incoming-webhook-queue.js +2 -0
- package/dist/services/incoming-webhook-service.d.ts +11 -1
- package/dist/services/incoming-webhook-service.js +5 -1
- package/dist/services/index.d.ts +1 -5
- package/dist/services/index.js +1 -5
- package/dist/services/jwt-service.d.ts +8 -0
- package/dist/services/lease-service.d.ts +5 -0
- package/dist/services/lease-service.js +1 -0
- package/dist/services/local-content-request-handler.d.ts +20 -0
- package/dist/services/local-content-request-handler.js +11 -0
- package/dist/services/local-content.d.ts +45 -0
- package/dist/services/local-content.js +35 -0
- package/dist/services/local-credential-service.d.ts +5 -0
- package/dist/services/local-credential-service.js +5 -0
- package/dist/services/local-email-service.d.ts +7 -0
- package/dist/services/local-email-service.js +7 -0
- package/dist/services/local-secrets.d.ts +8 -0
- package/dist/services/local-secrets.js +8 -0
- package/dist/services/local-variables.d.ts +6 -0
- package/dist/services/local-variables.js +6 -0
- package/dist/services/logger.d.ts +4 -0
- package/dist/services/logger.js +4 -0
- package/dist/services/meta-service.d.ts +38 -0
- package/dist/services/meta-service.js +6 -0
- package/dist/services/queue-webhook-service.d.ts +19 -0
- package/dist/services/queue-webhook-service.js +19 -0
- package/dist/services/remote-jobs.d.ts +8 -13
- package/dist/services/remote-jobs.js +3 -54
- package/dist/services/scenario-cookie-jar.d.ts +4 -0
- package/dist/services/scheduler-service.d.ts +16 -0
- package/dist/services/scheduler-service.js +12 -0
- package/dist/services/schema-service.d.ts +9 -0
- package/dist/services/scope-service.d.ts +10 -0
- package/dist/services/scoped-secret-service.d.ts +5 -0
- package/dist/services/scoped-secret-service.js +5 -0
- package/dist/services/secret-host-binding.d.ts +5 -0
- package/dist/services/secret-host-binding.js +5 -0
- package/dist/services/secret-service.d.ts +19 -1
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +6 -0
- package/dist/services/session-store.d.ts +5 -0
- package/dist/services/stub-tracker.d.ts +1 -0
- package/dist/services/temporary-file-service.d.ts +9 -0
- package/dist/services/temporary-file-service.js +9 -0
- package/dist/services/trigger-service.d.ts +4 -0
- package/dist/services/trigger-source-store.d.ts +13 -0
- package/dist/services/trigger-source-store.js +7 -0
- package/dist/services/typed-credential-service.d.ts +6 -0
- package/dist/services/typed-credential-service.js +5 -0
- package/dist/services/typed-secret-service.d.ts +12 -0
- package/dist/services/typed-secret-service.js +11 -0
- package/dist/services/typed-variables-service.d.ts +1 -0
- package/dist/services/user-session-service.d.ts +31 -1
- package/dist/services/user-session-service.js +29 -3
- package/dist/services/v8-coverage-service.d.ts +27 -0
- package/dist/services/v8-coverage-service.js +5 -0
- package/dist/services/variables-service.d.ts +8 -0
- package/dist/services/virtual-user-sign-in.d.ts +1 -0
- package/dist/services/virtual-user-statement.d.ts +8 -0
- package/dist/services/virtual-user-statement.js +4 -0
- package/dist/services/webhook-service.d.ts +25 -0
- package/dist/services/webhook-service.js +15 -0
- package/dist/services/workflow-service.d.ts +6 -0
- package/dist/test-utils.js +1 -1
- package/dist/testing/service-tests.d.ts +4 -0
- package/dist/time-utils.d.ts +15 -0
- package/dist/time-utils.js +14 -0
- package/dist/types/core.types.d.ts +80 -0
- package/dist/types/state.types.d.ts +4 -0
- package/dist/utils/hmac.d.ts +3 -0
- package/dist/utils/safe-fetch.d.ts +14 -0
- package/dist/utils/safe-fetch.js +13 -0
- package/dist/utils/stable-stringify.d.ts +11 -0
- package/dist/utils/stable-stringify.js +33 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.js +22 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.js +7 -0
- package/dist/wirings/addon/define-screens.d.ts +2 -0
- package/dist/wirings/addon/remote-addon-auth.d.ts +9 -0
- package/dist/wirings/addon/remote-addon-auth.js +5 -0
- package/dist/wirings/addon/wire-addon.d.ts +4 -0
- package/dist/wirings/addon/wire-remote-addon.d.ts +1 -0
- package/dist/wirings/agent/agent-agui.d.ts +14 -5
- package/dist/wirings/agent/agent-agui.js +17 -6
- package/dist/wirings/agent/agent-helpers.d.ts +61 -1
- package/dist/wirings/agent/agent-helpers.js +62 -2
- package/dist/wirings/agent/agent-interrupt.d.ts +5 -0
- package/dist/wirings/agent/agent-output.d.ts +20 -0
- package/dist/wirings/agent/agent-output.js +69 -0
- package/dist/wirings/agent/agent-prepare.d.ts +41 -0
- package/dist/wirings/agent/agent-prepare.js +38 -2
- package/dist/wirings/agent/agent-registry.d.ts +8 -0
- package/dist/wirings/agent/agent-registry.js +10 -4
- package/dist/wirings/agent/agent-runner.d.ts +33 -0
- package/dist/wirings/agent/agent-runner.js +40 -7
- package/dist/wirings/agent/agent-stream.d.ts +30 -0
- package/dist/wirings/agent/agent-stream.js +33 -11
- package/dist/wirings/agent/agent.types.d.ts +43 -0
- package/dist/wirings/agent/voice-input.d.ts +12 -0
- package/dist/wirings/agent/voice-input.js +12 -0
- package/dist/wirings/agent/voice-output.d.ts +14 -0
- package/dist/wirings/agent/voice-output.js +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.js +1 -2
- package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-registry.js +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +1 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +1 -0
- package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +7 -0
- package/dist/wirings/channel/channel-common.js +1 -1
- package/dist/wirings/channel/channel-rpc.types.d.ts +5 -0
- package/dist/wirings/channel/channel-runner.d.ts +22 -0
- package/dist/wirings/channel/channel-runner.js +22 -0
- package/dist/wirings/channel/channel-store.d.ts +8 -0
- package/dist/wirings/channel/channel-store.js +7 -0
- package/dist/wirings/channel/channel.types.d.ts +18 -0
- package/dist/wirings/channel/define-channel-routes.d.ts +5 -0
- package/dist/wirings/channel/define-channel-routes.js +5 -0
- package/dist/wirings/channel/eventhub-service.d.ts +9 -0
- package/dist/wirings/channel/eventhub-store.d.ts +1 -0
- package/dist/wirings/channel/eventhub-store.js +1 -0
- package/dist/wirings/channel/index.d.ts +1 -1
- package/dist/wirings/channel/index.js +1 -1
- package/dist/wirings/channel/local/local-channel-handler.d.ts +1 -0
- package/dist/wirings/channel/local/local-channel-handler.js +1 -0
- package/dist/wirings/channel/local/local-channel-runner.d.ts +13 -0
- package/dist/wirings/channel/local/local-channel-runner.js +13 -0
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +1 -0
- package/dist/wirings/channel/local/local-eventhub-service.js +1 -0
- package/dist/wirings/channel/log-channels.d.ts +1 -0
- package/dist/wirings/channel/log-channels.js +1 -0
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +5 -0
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +5 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +32 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +31 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +8 -0
- package/dist/wirings/cli/channel/cli-channel-runner.js +8 -0
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +1 -0
- package/dist/wirings/cli/cli-runner.d.ts +43 -0
- package/dist/wirings/cli/cli-runner.js +43 -0
- package/dist/wirings/cli/command-parser.d.ts +13 -0
- package/dist/wirings/cli/command-parser.js +12 -0
- package/dist/wirings/credential/credential-overrides.d.ts +1 -0
- package/dist/wirings/credential/credential.types.d.ts +7 -0
- package/dist/wirings/credential/validate-credential-definitions.d.ts +7 -0
- package/dist/wirings/credential/validate-credential-definitions.js +7 -0
- package/dist/wirings/flag/cached-flag-source.d.ts +1 -0
- package/dist/wirings/flag/flag.types.d.ts +3 -0
- package/dist/wirings/gateway/gateway-runner.d.ts +23 -0
- package/dist/wirings/gateway/gateway-runner.js +23 -0
- package/dist/wirings/gateway/gateway.types.d.ts +3 -0
- package/dist/wirings/gateway/local-gateway-service.d.ts +10 -0
- package/dist/{services → wirings/gateway}/local-gateway-service.js +6 -2
- package/dist/wirings/http/http-routes.d.ts +21 -0
- package/dist/wirings/http/http-routes.js +11 -0
- package/dist/wirings/http/http-runner.d.ts +71 -0
- package/dist/wirings/http/http-runner.js +73 -5
- package/dist/wirings/http/http.types.d.ts +27 -0
- package/dist/wirings/http/index.d.ts +1 -0
- package/dist/wirings/http/index.js +1 -0
- package/dist/wirings/http/log-http-routes.d.ts +1 -0
- package/dist/wirings/http/log-http-routes.js +1 -0
- package/dist/wirings/http/merge-request-data.d.ts +12 -0
- package/dist/wirings/http/merge-request-data.js +42 -0
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.js +3 -32
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-response.js +1 -0
- package/dist/wirings/http/routers/http-router.d.ts +6 -0
- package/dist/wirings/http/routers/http-router.js +6 -0
- package/dist/wirings/http/web-request.d.ts +17 -0
- package/dist/wirings/http/web-request.js +17 -0
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +7 -0
- package/dist/wirings/mcp/mcp-endpoint-registry.js +7 -0
- package/dist/wirings/mcp/mcp-runner.d.ts +63 -0
- package/dist/wirings/mcp/mcp-runner.js +62 -0
- package/dist/wirings/mcp/mcp.types.d.ts +12 -0
- package/dist/wirings/node/node.types.d.ts +4 -0
- package/dist/wirings/oauth2/oauth2.types.d.ts +2 -0
- package/dist/wirings/queue/in-memory-queue-service.d.ts +23 -0
- package/dist/wirings/queue/in-memory-queue-service.js +129 -0
- package/dist/wirings/queue/index.d.ts +2 -1
- package/dist/wirings/queue/index.js +1 -0
- package/dist/wirings/queue/queue-identity.js +2 -14
- package/dist/wirings/queue/queue-runner.d.ts +37 -0
- package/dist/wirings/queue/queue-runner.js +37 -0
- package/dist/wirings/queue/queue.types.d.ts +56 -0
- package/dist/wirings/queue/register-queue-helper.d.ts +12 -0
- package/dist/wirings/queue/register-queue-helper.js +11 -0
- package/dist/wirings/queue/remote-queue-job.d.ts +11 -0
- package/dist/wirings/queue/remote-queue-job.js +41 -0
- package/dist/wirings/queue/signed-queue-service.d.ts +4 -1
- package/dist/wirings/queue/signed-queue-service.js +3 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -0
- package/dist/wirings/role/role.types.d.ts +3 -0
- package/dist/wirings/rpc/rpc-runner.d.ts +24 -0
- package/dist/wirings/rpc/rpc-runner.js +37 -2
- package/dist/wirings/rpc/rpc-types.d.ts +2 -0
- package/dist/wirings/scheduler/index.d.ts +2 -1
- package/dist/wirings/scheduler/index.js +1 -0
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -0
- package/dist/wirings/scheduler/log-schedulers.js +1 -0
- package/dist/wirings/scheduler/remote-scheduled-job.d.ts +11 -0
- package/dist/wirings/scheduler/remote-scheduled-job.js +20 -0
- package/dist/wirings/scheduler/scheduler-runner.d.ts +29 -0
- package/dist/wirings/scheduler/scheduler-runner.js +28 -0
- package/dist/wirings/scheduler/scheduler.types.d.ts +15 -0
- package/dist/wirings/scope/scope.types.d.ts +5 -0
- package/dist/wirings/secret/index.d.ts +2 -2
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +26 -1
- package/dist/wirings/secret/secret.types.js +1 -0
- package/dist/wirings/secret/validate-secret-definitions.d.ts +8 -0
- package/dist/wirings/secret/validate-secret-definitions.js +15 -0
- package/dist/wirings/trigger/in-memory-trigger-service.d.ts +11 -0
- package/dist/{services → wirings/trigger}/in-memory-trigger-service.js +10 -3
- package/dist/wirings/trigger/index.d.ts +1 -1
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +8 -3
- package/dist/wirings/trigger/pikku-trigger-service.js +14 -3
- package/dist/wirings/trigger/trigger-runner.d.ts +27 -2
- package/dist/wirings/trigger/trigger-runner.js +35 -2
- package/dist/wirings/trigger/trigger.types.d.ts +26 -4
- package/dist/wirings/trigger/webhook-source-runner.d.ts +24 -0
- package/dist/wirings/trigger/webhook-source-runner.js +19 -0
- package/dist/wirings/trigger/webhook-source.types.d.ts +12 -2
- package/dist/wirings/trigger/webhook-source.types.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +7 -0
- package/dist/wirings/variable/validate-variable-definitions.js +7 -0
- package/dist/wirings/variable/variable.types.d.ts +7 -0
- package/dist/wirings/virtual-user/conversation/conversation.types.d.ts +5 -0
- package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +6 -0
- package/dist/wirings/virtual-user/conversation/run-conversation.js +1 -1
- package/dist/{services → wirings/virtual-user}/http-virtual-users.d.ts +4 -3
- package/dist/{services → wirings/virtual-user}/http-virtual-users.js +6 -6
- package/dist/wirings/virtual-user/index.d.ts +1 -1
- package/dist/wirings/virtual-user/index.js +1 -1
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +2 -1
- package/dist/wirings/virtual-user/run-virtual-user.js +1 -14
- package/dist/wirings/virtual-user/virtual-user-declaration.types.d.ts +4 -0
- package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +10 -1
- package/dist/wirings/virtual-user/virtual-user-scaffold.js +5 -0
- package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +5 -0
- package/dist/wirings/virtual-user/virtual-user-schedule.js +1 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +1 -0
- package/dist/wirings/webhook/define-outgoing-webhook.d.ts +20 -0
- package/dist/wirings/webhook/define-outgoing-webhook.js +9 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +8 -4
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +7 -0
- package/dist/wirings/workflow/dsl/workflow-runner.js +7 -0
- package/dist/wirings/workflow/feature.d.ts +12 -0
- package/dist/wirings/workflow/feature.js +12 -0
- package/dist/wirings/workflow/graph/graph-node.d.ts +5 -0
- package/dist/wirings/workflow/graph/graph-node.js +5 -0
- package/dist/wirings/workflow/graph/template.d.ts +6 -0
- package/dist/wirings/workflow/graph/template.js +5 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +12 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.js +10 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +11 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.js +1 -0
- package/dist/{services → wirings/workflow}/in-memory-workflow-service.d.ts +8 -3
- package/dist/{services → wirings/workflow}/in-memory-workflow-service.js +9 -4
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +1 -1
- package/dist/wirings/workflow/pikku-scenario-service.js +2 -2
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +1 -0
- package/dist/wirings/workflow/pikku-workflow-service.js +1 -0
- package/dist/wirings/workflow/run-timeline.d.ts +21 -0
- package/dist/wirings/workflow/run-timeline.js +15 -7
- package/dist/wirings/workflow/scenario-coverage.d.ts +1 -0
- package/dist/wirings/workflow/scenario-poll.d.ts +1 -0
- package/dist/wirings/workflow/scenario-prose.d.ts +6 -0
- package/dist/wirings/workflow/scenario-prose.js +6 -0
- package/dist/wirings/workflow/scenario-run.types.d.ts +3 -0
- package/dist/wirings/workflow/scenario-step.types.d.ts +1 -0
- package/dist/wirings/workflow/scenario-step.types.js +1 -0
- package/dist/wirings/workflow/scenario-surface.js +1 -13
- package/dist/wirings/workflow/scenario.types.d.ts +6 -0
- package/dist/wirings/workflow/workflow-approval-policy.d.ts +6 -0
- package/dist/wirings/workflow/workflow-approval-policy.js +6 -0
- package/dist/wirings/workflow/workflow-constants.d.ts +7 -1
- package/dist/wirings/workflow/workflow-constants.js +10 -1
- package/dist/wirings/workflow/workflow-errors.d.ts +13 -0
- package/dist/wirings/workflow/workflow-errors.js +13 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +4 -0
- package/dist/wirings/workflow/workflow-invocation-id.js +4 -0
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +3 -0
- package/dist/wirings/workflow/workflow-run-ownership.d.ts +1 -0
- package/dist/wirings/workflow/workflow-run-ownership.js +1 -0
- package/dist/wirings/workflow/workflow-status-stream.d.ts +1 -0
- package/dist/wirings/workflow/workflow-unwind-plan.js +2 -7
- package/dist/wirings/workflow/workflow.types.d.ts +40 -0
- package/package.json +26 -9
- package/CHANGELOG.md +0 -6961
- package/dist/services/in-memory-queue-service.d.ts +0 -8
- package/dist/services/in-memory-queue-service.js +0 -54
- package/dist/services/in-memory-trigger-service.d.ts +0 -4
- package/dist/services/local-gateway-service.d.ts +0 -6
- package/dist/utils/hash.d.ts +0 -2
- package/dist/utils/hash.js +0 -23
- package/knowledge/decisions/index.md +0 -19
- package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +0 -29
- package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +0 -29
- package/knowledge/decisions/internals/a-held-run-is-woken-later-not-retried.md +0 -28
- package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-agentrunstate-too.md +0 -22
- package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +0 -50
- package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +0 -20
- package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +0 -21
- package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +0 -22
- package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +0 -28
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +0 -49
- package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +0 -32
- package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +0 -66
- package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +0 -24
- package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +0 -21
- package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +0 -34
- package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +0 -65
- package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +0 -46
- package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +0 -45
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +0 -26
- package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +0 -32
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +0 -33
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +0 -28
- package/knowledge/decisions/internals/agent-agui-bridge-obeys-the-client-ordering-contract.md +0 -29
- package/knowledge/decisions/internals/agent-audio-chunks-carry-the-format-the-provider-returned.md +0 -20
- package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +0 -21
- package/knowledge/decisions/internals/agent-credential-suspensions-hide-the-tool-result.md +0 -26
- package/knowledge/decisions/internals/agent-delegate-and-supervise-hide-different-text.md +0 -26
- package/knowledge/decisions/internals/agent-llm-tool-arguments-have-nulls-stripped.md +0 -23
- package/knowledge/decisions/internals/agent-model-config-stays-a-single-resolution-seam.md +0 -25
- package/knowledge/decisions/internals/agent-onerror-hooks-cannot-change-the-failure.md +0 -22
- package/knowledge/decisions/internals/agent-runner-methods-must-keep-their-receiver.md +0 -22
- package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +0 -22
- package/knowledge/decisions/internals/agent-stream-persistence-is-best-effort.md +0 -27
- package/knowledge/decisions/internals/agent-sub-agents-inherit-the-parent-context-block.md +0 -26
- package/knowledge/decisions/internals/agent-tool-execute-failures-are-logged-unconditionally.md +0 -25
- package/knowledge/decisions/internals/agent-voice-input-transcribes-audio-parts-in-place.md +0 -22
- package/knowledge/decisions/internals/agent-working-memory-is-persisted-only-when-valid.md +0 -25
- package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +0 -39
- package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +0 -23
- package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +0 -27
- package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +0 -25
- package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +0 -22
- package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +0 -20
- package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +0 -22
- package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +0 -26
- package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +0 -66
- package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +0 -22
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +0 -30
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +0 -31
- package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +0 -33
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +0 -29
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +0 -28
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +0 -27
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +0 -28
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +0 -34
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +0 -29
- package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +0 -84
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +0 -41
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +0 -44
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +0 -39
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +0 -42
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +0 -39
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +0 -43
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +0 -38
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +0 -44
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +0 -27
- package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +0 -22
- package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +0 -28
- package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +0 -24
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +0 -32
- package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +0 -43
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +0 -28
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +0 -31
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +0 -26
- package/knowledge/decisions/internals/global-middleware-resolves-from-the-root-namespace-too.md +0 -32
- package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +0 -38
- package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +0 -26
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +0 -32
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +0 -28
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +0 -30
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +0 -26
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +0 -28
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +0 -32
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +0 -26
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +0 -25
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +0 -26
- package/knowledge/decisions/internals/index.md +0 -181
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +0 -25
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +0 -26
- package/knowledge/decisions/internals/mcp-wire-names-are-assigned-over-the-whole-registry.md +0 -39
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +0 -24
- package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +0 -53
- package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +0 -21
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +0 -28
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +0 -27
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +0 -31
- package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +0 -30
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +0 -32
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +0 -31
- package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +0 -24
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +0 -26
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +0 -27
- package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +0 -48
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +0 -30
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +0 -28
- package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +0 -34
- package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +0 -24
- package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +0 -26
- package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +0 -43
- package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +0 -22
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +0 -30
- package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +0 -83
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +0 -29
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +0 -27
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +0 -40
- package/knowledge/decisions/internals/the-mcp-handshake-is-challenged-only-when-every-target-is-gated.md +0 -29
- package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +0 -40
- package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +0 -40
- package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +0 -24
- package/knowledge/decisions/internals/the-runner-resolves-wire-services-itself.md +0 -31
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +0 -26
- package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +0 -25
- package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +0 -21
- package/knowledge/decisions/internals/the-virtual-user-prompt-says-json-because-of-json-object-mode.md +0 -22
- package/knowledge/decisions/internals/the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md +0 -28
- package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +0 -22
- package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +0 -25
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +0 -33
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +0 -26
- package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +0 -43
- package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +0 -115
- package/knowledge/decisions/internals/virtual-user-conversation-drives-the-target-through-a-transport-seam.md +0 -24
- package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +0 -25
- package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +0 -23
- package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +0 -21
- package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +0 -30
- package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +0 -24
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +0 -26
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +0 -25
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +0 -58
- package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +0 -35
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +0 -34
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +0 -42
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +0 -38
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +0 -29
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +0 -42
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +0 -25
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +0 -29
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +0 -43
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +0 -29
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +0 -42
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +0 -33
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +0 -32
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +0 -31
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +0 -39
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +0 -29
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +0 -33
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +0 -37
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +0 -54
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +0 -43
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +0 -32
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +0 -18
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +0 -34
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +0 -29
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +0 -33
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +0 -34
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +0 -34
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +0 -38
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +0 -30
- package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +0 -26
- package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +0 -20
- package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +0 -23
- package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +0 -16
- package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +0 -26
- package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +0 -32
- package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +0 -27
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +0 -28
- package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +0 -33
- package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +0 -37
- package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +0 -33
- package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +0 -33
- package/knowledge/decisions/security/a-public-function-says-so-with-auth-false.md +0 -34
- package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +0 -25
- package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +0 -52
- package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +0 -27
- package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +0 -26
- package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +0 -25
- package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +0 -29
- package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +0 -25
- package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +0 -37
- package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +0 -24
- package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +0 -29
- package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +0 -30
- package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +0 -38
- package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +0 -27
- package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +0 -23
- package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +0 -27
- package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +0 -41
- package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +0 -25
- package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +0 -32
- package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +0 -50
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +0 -43
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +0 -52
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +0 -46
- package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +0 -20
- package/knowledge/decisions/security/agent-approval-forwarding-requires-a-symbol-brand.md +0 -27
- package/knowledge/decisions/security/agent-credential-requests-are-symbol-branded.md +0 -37
- package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +0 -31
- package/knowledge/decisions/security/agent-ownership-failures-never-echo-the-resource.md +0 -23
- package/knowledge/decisions/security/agent-resume-re-runs-the-authorization-gate.md +0 -22
- package/knowledge/decisions/security/agent-sessionless-deployments-have-no-thread-ownership.md +0 -39
- package/knowledge/decisions/security/agent-thread-ownership-composes-the-session-principal.md +0 -30
- package/knowledge/decisions/security/agent-tool-filtering-reads-the-live-function-config.md +0 -24
- package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +0 -26
- package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +0 -33
- package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +0 -16
- package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +0 -33
- package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +0 -26
- package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +0 -59
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +0 -30
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +0 -52
- package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +0 -38
- package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +0 -31
- package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +0 -18
- package/knowledge/decisions/security/an-mcp-refusal-is-decided-before-dispatch.md +0 -48
- package/knowledge/decisions/security/an-oauth2-credential-is-read-by-its-account-row.md +0 -40
- package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +0 -32
- package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +0 -24
- package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +0 -24
- package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +0 -26
- package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +0 -27
- package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +0 -25
- package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +0 -18
- package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +0 -29
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +0 -84
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +0 -39
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +0 -37
- package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +0 -22
- package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +0 -29
- package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +0 -27
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +0 -41
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +0 -30
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +0 -40
- package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +0 -25
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +0 -33
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +0 -46
- package/knowledge/decisions/security/index.md +0 -135
- package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +0 -21
- package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +0 -38
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +0 -27
- package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +0 -18
- package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +0 -22
- package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +0 -26
- package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +0 -24
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +0 -40
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +0 -31
- package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +0 -35
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +0 -69
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +0 -39
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +0 -34
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +0 -55
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +0 -30
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +0 -28
- package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +0 -31
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +0 -34
- package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +0 -22
- package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +0 -34
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +0 -37
- package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +0 -26
- package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +0 -24
- package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +0 -16
- package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +0 -21
- package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +0 -24
- package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +0 -34
- package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +0 -16
- package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +0 -29
- package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +0 -23
- package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +0 -25
- package/knowledge/decisions/security/virtual-user-conversation-missing-approval-decisions-default-to-denied.md +0 -22
- package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +0 -18
- package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +0 -25
- package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +0 -42
- package/knowledge/decisions/security/virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +0 -29
- package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +0 -29
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +0 -25
- package/knowledge/decisions/security/wire-addon-expose-selects-the-rpc-surface.md +0 -51
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +0 -40
- package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +0 -18
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +0 -32
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md +0 -32
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +0 -31
- package/knowledge/decisions/security/workflow-virtual-user-steps-always-use-the-real-transport.md +0 -34
- package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +0 -18
- package/knowledge/index.md +0 -24
- package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +0 -24
- package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +0 -35
- package/knowledge/questions/dev-quick-login-as-impersonation.md +0 -25
- package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +0 -26
- package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +0 -27
- package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +0 -26
- package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +0 -26
- package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +0 -34
- package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +0 -20
- package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +0 -24
- package/knowledge/questions/does-the-store-session-match-the-other-two.md +0 -19
- package/knowledge/questions/index.md +0 -41
- package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +0 -21
- package/knowledge/questions/live-scheduled-tests-may-write.md +0 -19
- package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +0 -23
- package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +0 -32
- package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +0 -25
- package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +0 -23
- package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +0 -35
- package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +0 -23
- package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +0 -27
- package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +0 -26
- package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +0 -20
- package/knowledge/questions/staging-impersonation-rules.md +0 -27
- package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +0 -44
- package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +0 -34
- package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +0 -20
- package/knowledge/questions/what-an-impersonated-session-carries.md +0 -22
- package/run-tests.sh +0 -68
- package/scripts/generate-api-report.d.mts +0 -1
- package/scripts/generate-api-report.mjs +0 -96
- package/scripts/generate-api-report.mts +0 -333
- package/src/public-surface.json +0 -637
- package/src/public-surface.json.README +0 -43
- /package/dist/{function/compensation-name.d.ts → compensation-name.d.ts} +0 -0
- /package/dist/{function/compensation-name.js → compensation-name.js} +0 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { HTTPFunctionMetaInputTypes, PikkuHTTPRequest, PikkuHTTPResponse } from '../http/http.types.js';
|
|
2
2
|
import type { CorePikkuMiddleware, MiddlewareMetadata } from '../../middleware/middleware.types.js';
|
|
3
|
+
/** A binary channel frame. */
|
|
3
4
|
export type BinaryData = ArrayBuffer | Uint8Array;
|
|
5
|
+
/** Middleware that runs around each channel message. Call `next` with the event to pass it on, with several events to fan it out, or with `null` to drop it. */
|
|
4
6
|
export type CorePikkuChannelMiddleware<Services = any, Event = unknown> = (services: Services, event: Event, next: (event: Event | Event[] | null) => Promise<void> | void) => Promise<void> | void;
|
|
7
|
+
/** Builds a {@link CorePikkuChannelMiddleware} from configuration, so the same middleware can be reused with different settings. */
|
|
5
8
|
export type CorePikkuChannelMiddlewareFactory<In = any, Services = any, Event = unknown> = (input: In) => CorePikkuChannelMiddleware<Services, Event>;
|
|
6
9
|
import type { CorePikkuFunction, CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
10
|
+
/** Options for running a channel connection. They mean the same as the matching {@link RunHTTPWiringOptions}. */
|
|
7
11
|
export type RunChannelOptions = Partial<{
|
|
8
12
|
skipUserSession: boolean;
|
|
9
13
|
respondWith404: boolean;
|
|
@@ -11,11 +15,13 @@ export type RunChannelOptions = Partial<{
|
|
|
11
15
|
logWarningsForStatusCodes: number[];
|
|
12
16
|
bubbleErrors: boolean;
|
|
13
17
|
}>;
|
|
18
|
+
/** The connection a channel runner is handed: its id and, when it came over HTTP, the upgrade request and response. */
|
|
14
19
|
export type RunChannelParams<ChannelData> = {
|
|
15
20
|
channelId: string;
|
|
16
21
|
request?: PikkuHTTPRequest<ChannelData>;
|
|
17
22
|
response?: PikkuHTTPResponse;
|
|
18
23
|
};
|
|
24
|
+
/** Generated metadata for one channel handler: the function it runs and its resolved middleware. */
|
|
19
25
|
export interface ChannelMessageMeta {
|
|
20
26
|
pikkuFuncId: string;
|
|
21
27
|
packageName?: string;
|
|
@@ -25,6 +31,7 @@ export interface ChannelMessageMeta {
|
|
|
25
31
|
tags?: string[];
|
|
26
32
|
middleware?: MiddlewareMetadata[];
|
|
27
33
|
}
|
|
34
|
+
/** Generated metadata for one wired channel: its route, input schema, handlers and message routing. */
|
|
28
35
|
export interface ChannelMeta {
|
|
29
36
|
name: string;
|
|
30
37
|
route: string;
|
|
@@ -57,7 +64,9 @@ export interface ChannelMeta {
|
|
|
57
64
|
middleware?: MiddlewareMetadata[];
|
|
58
65
|
channelMiddleware?: MiddlewareMetadata[];
|
|
59
66
|
}
|
|
67
|
+
/** Generated metadata for every wired channel, keyed by name. */
|
|
60
68
|
export type ChannelsMeta = Record<string, ChannelMeta>;
|
|
69
|
+
/** The configuration {@link wireChannel} takes. An app's generated `wireChannel` narrows the function, permission and middleware types to its own. */
|
|
61
70
|
export type CoreChannel<ChannelData, Channel extends string, ChannelConnect = CorePikkuFunctionConfig<CorePikkuFunction<void, unknown> | CorePikkuFunctionSessionless<void, unknown>, CorePikkuPermission<void>, CorePikkuMiddleware>, ChannelDisconnect = CorePikkuFunctionConfig<CorePikkuFunction<void, void> | CorePikkuFunctionSessionless<void, void>, CorePikkuPermission<void>, CorePikkuMiddleware>, ChannelFunctionMessage = CorePikkuFunctionConfig<CorePikkuFunction<unknown, unknown> | CorePikkuFunctionSessionless<unknown, unknown>, CorePikkuPermission<unknown>, CorePikkuMiddleware>, PikkuPermission = CorePikkuPermission<ChannelData>, PikkuMiddleware = CorePikkuMiddleware> = {
|
|
62
71
|
/** Unique across the project. It is how the channel is addressed in `pikku meta` and by the generated client. */
|
|
63
72
|
name: string;
|
|
@@ -99,6 +108,13 @@ export type CoreChannel<ChannelData, Channel extends string, ChannelConnect = Co
|
|
|
99
108
|
* own functions. Loose on purpose: core cannot know the names.
|
|
100
109
|
*/
|
|
101
110
|
export type ChannelRemote = (funcName: string, data?: any) => Promise<any>;
|
|
111
|
+
/**
|
|
112
|
+
* The `channel` part of a function's wire when it runs on a channel: the connection's id and opening data, ways to send to and close it, per-connection state, and `remote` to call the peer.
|
|
113
|
+
*
|
|
114
|
+
* In serverless runtimes `setState`/`getState` go through the {@link ChannelStore},
|
|
115
|
+
* so state survives between invocations; elsewhere it lives in memory for the
|
|
116
|
+
* connection's lifetime.
|
|
117
|
+
*/
|
|
102
118
|
export interface PikkuChannel<OpeningData, out Out, Remote extends (...args: any[]) => any = ChannelRemote> {
|
|
103
119
|
channelId: string;
|
|
104
120
|
openingData: OpeningData;
|
|
@@ -116,9 +132,11 @@ export interface PikkuChannel<OpeningData, out Out, Remote extends (...args: any
|
|
|
116
132
|
*/
|
|
117
133
|
remote: Remote;
|
|
118
134
|
}
|
|
135
|
+
/** The runtime side of one connection: how a channel's sends reach the actual socket. */
|
|
119
136
|
export interface PikkuChannelHandler<OpeningData = unknown, Out = unknown> {
|
|
120
137
|
send(message: Out, isBinary?: boolean): Promise<void> | void;
|
|
121
138
|
sendBinary(data: BinaryData): Promise<void> | void;
|
|
122
139
|
getChannel(): PikkuChannel<OpeningData, Out>;
|
|
123
140
|
}
|
|
141
|
+
/** Creates the {@link PikkuChannelHandler} for a connection. Serverless runtimes pass one so the channel can send back through the platform's API. */
|
|
124
142
|
export type PikkuChannelHandlerFactory<OpeningData = unknown, Out = unknown> = (channelId: string, channelName: string, openingData: OpeningData) => PikkuChannelHandler<OpeningData, Out>;
|
|
@@ -1 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declares a set of message handlers for one `onMessageWiring` key, so they can be defined apart from the channel and keep their types. Returns the routes unchanged.
|
|
3
|
+
*
|
|
4
|
+
* @example snippet: channelRoutes
|
|
5
|
+
*/
|
|
1
6
|
export declare function defineChannelRoutes<T extends Record<string, any>>(routes: T): T;
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declares a set of message handlers for one `onMessageWiring` key, so they can be defined apart from the channel and keep their types. Returns the routes unchanged.
|
|
3
|
+
*
|
|
4
|
+
* @example snippet: channelRoutes
|
|
5
|
+
*/
|
|
1
6
|
export function defineChannelRoutes(routes) {
|
|
2
7
|
return routes;
|
|
3
8
|
}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pub/sub between channels, available as `eventHub` on singleton services.
|
|
3
|
+
*
|
|
4
|
+
* Channels `subscribe` to topics, and `publish` sends to every subscriber of a
|
|
5
|
+
* topic. Passing the publishing channel's id as `channelId` excludes it from
|
|
6
|
+
* delivery; `null` sends to all.
|
|
7
|
+
*
|
|
8
|
+
* @example snippet: channelPubSub
|
|
9
|
+
*/
|
|
1
10
|
export interface EventHubService<Topics extends Record<string, any>> {
|
|
2
11
|
subscribe<T extends keyof Topics>(topic: T, channelId: string): Promise<void> | void;
|
|
3
12
|
unsubscribe<T extends keyof Topics>(topic: T, channelId: string): Promise<void> | void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** Persists topic subscriptions for serverless runtimes, where the subscribing and publishing invocations do not share memory. */
|
|
1
2
|
export declare abstract class EventHubStore<EventTopics extends Record<string, any> = {}> {
|
|
2
3
|
abstract getChannelIdsForTopic(topic: string): Promise<string[]>;
|
|
3
4
|
abstract subscribe<T extends keyof EventTopics>(topic: T, channelId: string): Promise<boolean>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { wireChannel } from './channel-runner.js';
|
|
2
|
-
export { addChannelMiddleware, combineChannelMiddleware, } from '
|
|
2
|
+
export { addChannelMiddleware, combineChannelMiddleware, } from '../../channel-middleware-runner.js';
|
|
3
3
|
export { logChannels } from './log-channels.js';
|
|
4
4
|
export { PikkuAbstractChannelHandler } from './pikku-abstract-channel-handler.js';
|
|
5
5
|
export type { EventHubService } from './eventhub-service.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { wireChannel } from './channel-runner.js';
|
|
2
|
-
export { addChannelMiddleware, combineChannelMiddleware, } from '
|
|
2
|
+
export { addChannelMiddleware, combineChannelMiddleware, } from '../../channel-middleware-runner.js';
|
|
3
3
|
export { logChannels } from './log-channels.js';
|
|
4
4
|
export { PikkuAbstractChannelHandler } from './pikku-abstract-channel-handler.js';
|
|
5
5
|
export { ChannelStore } from './channel-store.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Logger } from '../../../services/logger.js';
|
|
2
2
|
import type { BinaryData } from '../channel.types.js';
|
|
3
3
|
import { PikkuAbstractChannelHandler } from '../pikku-abstract-channel-handler.js';
|
|
4
|
+
/** The {@link PikkuChannelHandler} for runtimes that hold the socket in-process (Node WebSocket servers, uWS, Bun). The runtime registers callbacks for sending, opening, messages and closing. */
|
|
4
5
|
export declare class PikkuLocalChannelHandler<OpeningData = unknown, Out = unknown> extends PikkuAbstractChannelHandler<OpeningData, Out> {
|
|
5
6
|
private onMessageCallback?;
|
|
6
7
|
private onBinaryMessageCallback?;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PikkuAbstractChannelHandler } from '../pikku-abstract-channel-handler.js';
|
|
2
|
+
/** The {@link PikkuChannelHandler} for runtimes that hold the socket in-process (Node WebSocket servers, uWS, Bun). The runtime registers callbacks for sending, opening, messages and closing. */
|
|
2
3
|
export class PikkuLocalChannelHandler extends PikkuAbstractChannelHandler {
|
|
3
4
|
onMessageCallback;
|
|
4
5
|
onBinaryMessageCallback;
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { CoreChannel, RunChannelOptions } from '../channel.types.js';
|
|
2
2
|
import { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
3
3
|
import type { PikkuHTTPRequest, PikkuHTTPResponse } from '../../http/http.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Opens a channel connection in-process and returns the handler the runtime drives the socket through.
|
|
6
|
+
*
|
|
7
|
+
* For an HTTP upgrade, the HTTP middleware registered for `'*'` and the
|
|
8
|
+
* channel's upgrade middleware run first, then the opening data is validated.
|
|
9
|
+
* Lookup and validation failures are written to `response` as an HTTP error
|
|
10
|
+
* rather than thrown, and resolve `undefined`.
|
|
11
|
+
*
|
|
12
|
+
* @param params.channelId - A unique id for the connection.
|
|
13
|
+
* @param params.request - The upgrade request; its path selects the channel.
|
|
14
|
+
* @param params.route - The path to match when there is no request.
|
|
15
|
+
* @returns The handler, or `undefined` when the channel could not be opened.
|
|
16
|
+
*/
|
|
4
17
|
export declare const runLocalChannel: ({ channelId, request, response, route, skipUserSession, respondWith404, coerceDataFromSchema, logWarningsForStatusCodes, bubbleErrors, }: Partial<Pick<CoreChannel<unknown, any>, 'route'>> & RunChannelOptions & {
|
|
5
18
|
channelId: string;
|
|
6
19
|
request?: PikkuHTTPRequest;
|
|
@@ -27,6 +27,19 @@ const runUpgradeMiddleware = async (singletonServices, request, response, userSe
|
|
|
27
27
|
}
|
|
28
28
|
return http;
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Opens a channel connection in-process and returns the handler the runtime drives the socket through.
|
|
32
|
+
*
|
|
33
|
+
* For an HTTP upgrade, the HTTP middleware registered for `'*'` and the
|
|
34
|
+
* channel's upgrade middleware run first, then the opening data is validated.
|
|
35
|
+
* Lookup and validation failures are written to `response` as an HTTP error
|
|
36
|
+
* rather than thrown, and resolve `undefined`.
|
|
37
|
+
*
|
|
38
|
+
* @param params.channelId - A unique id for the connection.
|
|
39
|
+
* @param params.request - The upgrade request; its path selects the channel.
|
|
40
|
+
* @param params.route - The path to match when there is no request.
|
|
41
|
+
* @returns The handler, or `undefined` when the channel could not be opened.
|
|
42
|
+
*/
|
|
30
43
|
export const runLocalChannel = async ({ channelId, request, response, route, skipUserSession = false, respondWith404 = true, coerceDataFromSchema = true, logWarningsForStatusCodes = [], bubbleErrors = false, }) => {
|
|
31
44
|
const singletonServices = getSingletonServices();
|
|
32
45
|
const createWireServices = getCreateWireServices();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PikkuChannelHandler } from '../channel.types.js';
|
|
2
2
|
import type { EventHubService } from '../eventhub-service.js';
|
|
3
|
+
/** An {@link EventHubService} that keeps subscriptions in memory, for a single process. A channel that fails to receive is dropped from all its topics. */
|
|
3
4
|
export declare class LocalEventHubService<Data extends Record<string, any> = {}> implements EventHubService<Data> {
|
|
4
5
|
private channels;
|
|
5
6
|
private subscriptions;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
+
/** Logs every wired channel and its route at info level, typically once at startup. */
|
|
2
3
|
export const logChannels = (logger) => {
|
|
3
4
|
const channels = pikkuState(null, 'channel', 'channels');
|
|
4
5
|
if (channels.size === 0) {
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { BinaryData, PikkuChannel, PikkuChannelHandler } from './channel.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for a runtime's {@link PikkuChannelHandler}. A runtime implements `send` and `sendBinary`; this builds the {@link PikkuChannel} on top, with in-memory state and `remote`.
|
|
4
|
+
*
|
|
5
|
+
* Closing the channel fails any `remote` calls still waiting on the peer.
|
|
6
|
+
*/
|
|
2
7
|
export declare abstract class PikkuAbstractChannelHandler<OpeningData = unknown, Out = unknown> implements PikkuChannelHandler<OpeningData, Out> {
|
|
3
8
|
channelId: string;
|
|
4
9
|
channelName: string;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { channelRemote, releaseChannelHostRPC } from './channel-host-rpc.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for a runtime's {@link PikkuChannelHandler}. A runtime implements `send` and `sendBinary`; this builds the {@link PikkuChannel} on top, with in-memory state and `remote`.
|
|
4
|
+
*
|
|
5
|
+
* Closing the channel fails any `remote` calls still waiting on the peer.
|
|
6
|
+
*/
|
|
2
7
|
export class PikkuAbstractChannelHandler {
|
|
3
8
|
channelId;
|
|
4
9
|
channelName;
|
|
@@ -1,10 +1,42 @@
|
|
|
1
1
|
import type { CoreChannel, RunChannelOptions, RunChannelParams, PikkuChannelHandlerFactory } from '../channel.types.js';
|
|
2
2
|
import type { ChannelStore } from '../channel-store.js';
|
|
3
|
+
/** Parameters for the serverless channel runners: the connection, the {@link ChannelStore} that persists it, and the factory that builds a handler able to send through the platform. */
|
|
3
4
|
export interface RunServerlessChannelParams<ChannelData> extends RunChannelParams<ChannelData> {
|
|
4
5
|
channelStore: ChannelStore;
|
|
5
6
|
channelHandlerFactory: PikkuChannelHandlerFactory;
|
|
6
7
|
channelObject?: unknown;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Handles a serverless connect event: opens the channel, stores it, and runs `onConnect`.
|
|
11
|
+
*
|
|
12
|
+
* The opening data is validated against the channel's input schema. If
|
|
13
|
+
* `onConnect` (or its middleware) established a session, its `pikkuUserId` is
|
|
14
|
+
* stored with the channel, and later messages and the disconnect reload the
|
|
15
|
+
* session from `sessionStore` by that id. On success the response status is 101.
|
|
16
|
+
*
|
|
17
|
+
* Errors from `onConnect` are written to `response` as an HTTP error unless
|
|
18
|
+
* `bubbleErrors` is set.
|
|
19
|
+
*
|
|
20
|
+
* @throws {NotFoundError} When no channel is wired at `route`.
|
|
21
|
+
* @throws When the opening data fails validation.
|
|
22
|
+
*/
|
|
8
23
|
export declare const runChannelConnect: ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema, logWarningsForStatusCodes, respondWith404, bubbleErrors, }: Pick<CoreChannel<unknown, any>, 'route'> & RunChannelOptions & RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Handles a serverless disconnect event: runs `onDisconnect` with the stored session, then removes the channel from the store.
|
|
26
|
+
*
|
|
27
|
+
* A channel already missing from the store is logged and ignored, and an error
|
|
28
|
+
* from `onDisconnect` is logged rather than thrown, so the channel is always
|
|
29
|
+
* removed.
|
|
30
|
+
*/
|
|
9
31
|
export declare const runChannelDisconnect: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Handles one message on a serverless channel, with the session reloaded from `sessionStore` by the `pikkuUserId` stored on connect.
|
|
34
|
+
*
|
|
35
|
+
* @param params - The connection and its store.
|
|
36
|
+
* @param data - The message as received.
|
|
37
|
+
* @returns The handler's reply. When the handler throws, the error is logged and
|
|
38
|
+
* `{ error, errorName }` is returned with the error's message, so the runtime
|
|
39
|
+
* can send it to the client. Throw errors whose messages are safe to show.
|
|
40
|
+
* @throws Whatever the store throws for a channel it does not hold.
|
|
41
|
+
*/
|
|
10
42
|
export declare const runChannelMessage: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>, data: unknown) => Promise<unknown>;
|
|
@@ -26,6 +26,20 @@ const getVariablesForChannel = ({ channelId, channelName, channelHandlerFactory,
|
|
|
26
26
|
meta,
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Handles a serverless connect event: opens the channel, stores it, and runs `onConnect`.
|
|
31
|
+
*
|
|
32
|
+
* The opening data is validated against the channel's input schema. If
|
|
33
|
+
* `onConnect` (or its middleware) established a session, its `pikkuUserId` is
|
|
34
|
+
* stored with the channel, and later messages and the disconnect reload the
|
|
35
|
+
* session from `sessionStore` by that id. On success the response status is 101.
|
|
36
|
+
*
|
|
37
|
+
* Errors from `onConnect` are written to `response` as an HTTP error unless
|
|
38
|
+
* `bubbleErrors` is set.
|
|
39
|
+
*
|
|
40
|
+
* @throws {NotFoundError} When no channel is wired at `route`.
|
|
41
|
+
* @throws When the opening data fails validation.
|
|
42
|
+
*/
|
|
29
43
|
export const runChannelConnect = async ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema = true, logWarningsForStatusCodes = [], respondWith404 = true, bubbleErrors = false, }) => {
|
|
30
44
|
const singletonServices = getSingletonServices();
|
|
31
45
|
const createWireServices = getCreateWireServices();
|
|
@@ -98,6 +112,13 @@ export const runChannelConnect = async ({ channelId, channelObject, request, res
|
|
|
98
112
|
}
|
|
99
113
|
}
|
|
100
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* Handles a serverless disconnect event: runs `onDisconnect` with the stored session, then removes the channel from the store.
|
|
117
|
+
*
|
|
118
|
+
* A channel already missing from the store is logged and ignored, and an error
|
|
119
|
+
* from `onDisconnect` is logged rather than thrown, so the channel is always
|
|
120
|
+
* removed.
|
|
121
|
+
*/
|
|
101
122
|
export const runChannelDisconnect = async ({ channelId, channelStore, channelHandlerFactory, }) => {
|
|
102
123
|
const singletonServices = getSingletonServices();
|
|
103
124
|
const createWireServices = getCreateWireServices();
|
|
@@ -163,6 +184,16 @@ export const runChannelDisconnect = async ({ channelId, channelStore, channelHan
|
|
|
163
184
|
await closeWireServices(singletonServices.logger, wireServices);
|
|
164
185
|
}
|
|
165
186
|
};
|
|
187
|
+
/**
|
|
188
|
+
* Handles one message on a serverless channel, with the session reloaded from `sessionStore` by the `pikkuUserId` stored on connect.
|
|
189
|
+
*
|
|
190
|
+
* @param params - The connection and its store.
|
|
191
|
+
* @param data - The message as received.
|
|
192
|
+
* @returns The handler's reply. When the handler throws, the error is logged and
|
|
193
|
+
* `{ error, errorName }` is returned with the error's message, so the runtime
|
|
194
|
+
* can send it to the client. Throw errors whose messages are safe to show.
|
|
195
|
+
* @throws Whatever the store throws for a channel it does not hold.
|
|
196
|
+
*/
|
|
166
197
|
export const runChannelMessage = async ({ channelId, channelStore, channelHandlerFactory, }, data) => {
|
|
167
198
|
const singletonServices = getSingletonServices();
|
|
168
199
|
const createWireServices = getCreateWireServices();
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { CorePikkuCLIRender } from '../cli.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runs a CLI program whose commands execute on a server, sending each parsed command over a pikku WebSocket and rendering the result locally.
|
|
4
|
+
*
|
|
5
|
+
* Parsing and help happen on the client. Exits the process with status 1 when
|
|
6
|
+
* the program does not exist or the arguments do not parse; resolves when the
|
|
7
|
+
* server reports the command complete or the socket closes, and rejects on a
|
|
8
|
+
* socket or renderer error.
|
|
9
|
+
*/
|
|
2
10
|
export declare function executeCLIViaChannel({ programName, pikkuWS, args, renderers, defaultRenderer, }: {
|
|
3
11
|
programName: string;
|
|
4
12
|
pikkuWS: any;
|
|
@@ -4,6 +4,14 @@ import { generateCommandHelp, parseCLIArguments } from '../command-parser.js';
|
|
|
4
4
|
const defaultJSONRenderer = (_services, data) => {
|
|
5
5
|
console.log(JSON.stringify(data));
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* Runs a CLI program whose commands execute on a server, sending each parsed command over a pikku WebSocket and rendering the result locally.
|
|
9
|
+
*
|
|
10
|
+
* Parsing and help happen on the client. Exits the process with status 1 when
|
|
11
|
+
* the program does not exist or the arguments do not parse; resolves when the
|
|
12
|
+
* server reports the command complete or the socket closes, and rejects on a
|
|
13
|
+
* socket or renderer error.
|
|
14
|
+
*/
|
|
7
15
|
export async function executeCLIViaChannel({ programName, pikkuWS, args = process.argv.slice(2), renderers = {}, defaultRenderer, }) {
|
|
8
16
|
const cliMeta = pikkuState(null, 'cli', 'meta');
|
|
9
17
|
if (!cliMeta || !('programs' in cliMeta)) {
|
|
@@ -24,6 +24,7 @@ export type RawCLIFrame = {
|
|
|
24
24
|
event: 'complete';
|
|
25
25
|
exitCode: number;
|
|
26
26
|
};
|
|
27
|
+
/** What the server produces for one raw CLI invocation: help text, a result, or an error, plus the exit code the client should exit with. */
|
|
27
28
|
export interface RawCLIResult {
|
|
28
29
|
help?: string;
|
|
29
30
|
result?: unknown;
|
|
@@ -8,7 +8,32 @@ export declare class CLIError extends Error {
|
|
|
8
8
|
exitCode: number;
|
|
9
9
|
constructor(message: string, exitCode?: number);
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Wires a command-line program: its commands, nested subcommands, options, renderers and middleware.
|
|
13
|
+
*
|
|
14
|
+
* Each command runs a pikku function with its positionals and options as input.
|
|
15
|
+
* The result is printed by the command's renderer, the program's `render`, or
|
|
16
|
+
* as JSON (also forced by `--json`). Run the program locally with
|
|
17
|
+
* {@link executeCLI}, or remotely over a channel.
|
|
18
|
+
*
|
|
19
|
+
* Registration needs the metadata `pikku` generates for the program. When none
|
|
20
|
+
* is found the wiring is skipped with a warning rather than throwing.
|
|
21
|
+
*
|
|
22
|
+
* @param cli - The program name, its commands, global options, renderer and middleware.
|
|
23
|
+
*
|
|
24
|
+
* @example snippet: wireCli
|
|
25
|
+
*/
|
|
11
26
|
export declare const wireCLI: <Commands extends Record<string, CoreCLICommandConfig<any, any, any>>, GlobalOptions, PikkuMiddleware extends CorePikkuMiddleware, GlobalOutput>(cli: CoreCLI<Commands, GlobalOptions, PikkuMiddleware, GlobalOutput>) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Runs one already-parsed CLI command. {@link executeCLI} calls this locally; the CLI channel runners call it for remote clients.
|
|
29
|
+
*
|
|
30
|
+
* Program middleware runs first, then the middleware of each command along the
|
|
31
|
+
* path. A local run has no session; over a channel, pass the session the
|
|
32
|
+
* connection authenticated as.
|
|
33
|
+
*
|
|
34
|
+
* @returns The command's result. It is also rendered, unless `onOutput` is set.
|
|
35
|
+
* @throws {NotFoundError} When the program or command path does not exist.
|
|
36
|
+
*/
|
|
12
37
|
export declare function runCLICommand({ program, commandPath, data, singletonServices, createWireServices, onOutput, session, transport, }: {
|
|
13
38
|
program: string;
|
|
14
39
|
commandPath: string[];
|
|
@@ -33,7 +58,25 @@ export declare function runCLICommand({ program, commandPath, data, singletonSer
|
|
|
33
58
|
*/
|
|
34
59
|
transport?: PikkuChannel<unknown, any, any>;
|
|
35
60
|
}): Promise<any>;
|
|
61
|
+
/**
|
|
62
|
+
* Declares a renderer that prints a CLI command's result, typed against the command's output. Returns the renderer unchanged.
|
|
63
|
+
*
|
|
64
|
+
* Write to stdout only what the user should see; stdout is reserved for the
|
|
65
|
+
* command's output.
|
|
66
|
+
*
|
|
67
|
+
* @example snippet: cliRenderer
|
|
68
|
+
*/
|
|
36
69
|
export declare const pikkuCLIRender: <Data, Services extends CoreSingletonServices = CoreServices, Session extends CoreUserSession = CoreUserSession>(renderer: (services: Services, data: Data, session?: Session) => void | Promise<void>) => CorePikkuCLIRender<Data, Services, Session>;
|
|
70
|
+
/**
|
|
71
|
+
* Runs a wired CLI program in this process: parses `args`, prints help when asked, builds config and singleton services, and runs the command.
|
|
72
|
+
*
|
|
73
|
+
* Config and services are created only after parsing succeeds, so `--help` and
|
|
74
|
+
* argument errors never touch the project. Parse warnings go to stderr.
|
|
75
|
+
*
|
|
76
|
+
* @param params.programName - The program passed to {@link wireCLI}.
|
|
77
|
+
* @param params.args - The arguments after the program name, usually `process.argv.slice(2)`.
|
|
78
|
+
* @throws {CLIError} On an unknown program or command, invalid arguments, or a failed command. The caller should exit with its `exitCode`.
|
|
79
|
+
*/
|
|
37
80
|
export declare function executeCLI({ programName, args, createConfig, createSingletonServices, createWireServices, }: {
|
|
38
81
|
programName: string;
|
|
39
82
|
args?: string[];
|
|
@@ -19,6 +19,21 @@ export class CLIError extends Error {
|
|
|
19
19
|
const defaultJSONRenderer = (_services, data) => {
|
|
20
20
|
console.log(JSON.stringify(data));
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Wires a command-line program: its commands, nested subcommands, options, renderers and middleware.
|
|
24
|
+
*
|
|
25
|
+
* Each command runs a pikku function with its positionals and options as input.
|
|
26
|
+
* The result is printed by the command's renderer, the program's `render`, or
|
|
27
|
+
* as JSON (also forced by `--json`). Run the program locally with
|
|
28
|
+
* {@link executeCLI}, or remotely over a channel.
|
|
29
|
+
*
|
|
30
|
+
* Registration needs the metadata `pikku` generates for the program. When none
|
|
31
|
+
* is found the wiring is skipped with a warning rather than throwing.
|
|
32
|
+
*
|
|
33
|
+
* @param cli - The program name, its commands, global options, renderer and middleware.
|
|
34
|
+
*
|
|
35
|
+
* @example snippet: wireCli
|
|
36
|
+
*/
|
|
22
37
|
export const wireCLI = (cli) => {
|
|
23
38
|
const cliMeta = pikkuState(null, 'cli', 'meta') || {};
|
|
24
39
|
if (!cliMeta.programs?.[cli.program]) {
|
|
@@ -153,6 +168,16 @@ function pluckCLIData(mergedData, funcName, availableOptions, packageName) {
|
|
|
153
168
|
return { ...mergedData };
|
|
154
169
|
}
|
|
155
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Runs one already-parsed CLI command. {@link executeCLI} calls this locally; the CLI channel runners call it for remote clients.
|
|
173
|
+
*
|
|
174
|
+
* Program middleware runs first, then the middleware of each command along the
|
|
175
|
+
* path. A local run has no session; over a channel, pass the session the
|
|
176
|
+
* connection authenticated as.
|
|
177
|
+
*
|
|
178
|
+
* @returns The command's result. It is also rendered, unless `onOutput` is set.
|
|
179
|
+
* @throws {NotFoundError} When the program or command path does not exist.
|
|
180
|
+
*/
|
|
156
181
|
export async function runCLICommand({ program, commandPath, data, singletonServices, createWireServices, onOutput, session, transport, }) {
|
|
157
182
|
const cliMeta = pikkuState(null, 'cli', 'meta');
|
|
158
183
|
const programMeta = cliMeta.programs?.[program];
|
|
@@ -273,9 +298,27 @@ export async function runCLICommand({ program, commandPath, data, singletonServi
|
|
|
273
298
|
await channel.close();
|
|
274
299
|
}
|
|
275
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Declares a renderer that prints a CLI command's result, typed against the command's output. Returns the renderer unchanged.
|
|
303
|
+
*
|
|
304
|
+
* Write to stdout only what the user should see; stdout is reserved for the
|
|
305
|
+
* command's output.
|
|
306
|
+
*
|
|
307
|
+
* @example snippet: cliRenderer
|
|
308
|
+
*/
|
|
276
309
|
export const pikkuCLIRender = (renderer) => {
|
|
277
310
|
return renderer;
|
|
278
311
|
};
|
|
312
|
+
/**
|
|
313
|
+
* Runs a wired CLI program in this process: parses `args`, prints help when asked, builds config and singleton services, and runs the command.
|
|
314
|
+
*
|
|
315
|
+
* Config and services are created only after parsing succeeds, so `--help` and
|
|
316
|
+
* argument errors never touch the project. Parse warnings go to stderr.
|
|
317
|
+
*
|
|
318
|
+
* @param params.programName - The program passed to {@link wireCLI}.
|
|
319
|
+
* @param params.args - The arguments after the program name, usually `process.argv.slice(2)`.
|
|
320
|
+
* @throws {CLIError} On an unknown program or command, invalid arguments, or a failed command. The caller should exit with its `exitCode`.
|
|
321
|
+
*/
|
|
279
322
|
export async function executeCLI({ programName, args, createConfig, createSingletonServices, createWireServices, }) {
|
|
280
323
|
if (!args) {
|
|
281
324
|
throw new Error('CLI arguments are required, this is to satisfy release diffs');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CLIMeta } from './cli.types.js';
|
|
2
|
+
/** The result of {@link parseCLIArguments}: which command was named, its positionals and options, and any errors that stop it running. */
|
|
2
3
|
export interface ParsedCommand {
|
|
3
4
|
program: string;
|
|
4
5
|
commandPath: string[];
|
|
@@ -8,5 +9,17 @@ export interface ParsedCommand {
|
|
|
8
9
|
/** Non-fatal: the command still runs. */
|
|
9
10
|
warnings: string[];
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Parses argv against a program's generated CLI metadata.
|
|
14
|
+
*
|
|
15
|
+
* Never throws on bad input: unknown commands and invalid values are returned in
|
|
16
|
+
* `errors`, unknown options in `warnings`. Safe to run on argv from a remote
|
|
17
|
+
* client, since the work done is bounded by the input's length.
|
|
18
|
+
*
|
|
19
|
+
* @param args - The arguments after the program name.
|
|
20
|
+
* @param programName - The program to parse for.
|
|
21
|
+
* @param allMeta - Generated CLI metadata.
|
|
22
|
+
*/
|
|
11
23
|
export declare function parseCLIArguments(args: string[], programName: string, allMeta: CLIMeta): ParsedCommand;
|
|
24
|
+
/** Builds the help text for a program, or for the command at `commandPath`, from its generated metadata. */
|
|
12
25
|
export declare function generateCommandHelp(programName: string, allMeta: CLIMeta, commandPath?: string[]): string;
|
|
@@ -166,6 +166,17 @@ function assignOptionValue(optionArgs, key, value) {
|
|
|
166
166
|
optionArgs[key] = value;
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Parses argv against a program's generated CLI metadata.
|
|
171
|
+
*
|
|
172
|
+
* Never throws on bad input: unknown commands and invalid values are returned in
|
|
173
|
+
* `errors`, unknown options in `warnings`. Safe to run on argv from a remote
|
|
174
|
+
* client, since the work done is bounded by the input's length.
|
|
175
|
+
*
|
|
176
|
+
* @param args - The arguments after the program name.
|
|
177
|
+
* @param programName - The program to parse for.
|
|
178
|
+
* @param allMeta - Generated CLI metadata.
|
|
179
|
+
*/
|
|
169
180
|
export function parseCLIArguments(args, programName, allMeta) {
|
|
170
181
|
const result = {
|
|
171
182
|
program: programName,
|
|
@@ -471,6 +482,7 @@ function applyOptionDefaults(optionDefs, options, result) {
|
|
|
471
482
|
}
|
|
472
483
|
}
|
|
473
484
|
}
|
|
485
|
+
/** Builds the help text for a program, or for the command at `commandPath`, from its generated metadata. */
|
|
474
486
|
export function generateCommandHelp(programName, allMeta, commandPath = []) {
|
|
475
487
|
const lines = [];
|
|
476
488
|
const meta = allMeta.programs[programName];
|
|
@@ -11,6 +11,7 @@ export type CredentialOverride = string | {
|
|
|
11
11
|
/** `wire` is per user, `singleton` is one value for the deployment. */
|
|
12
12
|
mode?: 'singleton' | 'wire';
|
|
13
13
|
};
|
|
14
|
+
/** Per-credential overrides for a wired package, keyed by the name the package declared. */
|
|
14
15
|
export type CredentialOverrides = Record<string, CredentialOverride>;
|
|
15
16
|
/** The rename half, in the `Record<string, string>` shape the alias path wants. */
|
|
16
17
|
export declare const credentialOverrideAliases: (overrides: CredentialOverrides | undefined) => Record<string, string>;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { OAuth2CredentialConfig } from '../secret/secret.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The declaration {@link defineCredential} takes: a credential a user or the
|
|
4
|
+
* deployment has to supply, such as an API key or an OAuth connection. Values are
|
|
5
|
+
* stored by the `CredentialService`, never in code or generated meta.
|
|
6
|
+
*/
|
|
2
7
|
export type CoreCredential<T = unknown> = {
|
|
3
8
|
/** How the credential is asked for in code. Generated into `CredentialsMap`, so it is what `credentials.get` autocompletes. */
|
|
4
9
|
name: string;
|
|
@@ -29,5 +34,7 @@ export type CredentialDefinitionMeta = {
|
|
|
29
34
|
};
|
|
30
35
|
sourceFile?: string;
|
|
31
36
|
};
|
|
37
|
+
/** Credential declarations collected by the CLI, keyed by name. */
|
|
32
38
|
export type CredentialDefinitionsMeta = Record<string, CredentialDefinitionMeta>;
|
|
39
|
+
/** Credential declarations as the inspector found them, before de-duplication. */
|
|
33
40
|
export type CredentialDefinitions = CredentialDefinitionMeta[];
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { CredentialDefinitions, CredentialDefinitionsMeta } from './credential.types.js';
|
|
2
2
|
import type { SchemaRefLike } from '../../types/core.types.js';
|
|
3
3
|
export type { SchemaRefLike };
|
|
4
|
+
/**
|
|
5
|
+
* Merges the credential declarations the inspector found into meta keyed by name.
|
|
6
|
+
* A name declared more than once must agree on type and schema.
|
|
7
|
+
*
|
|
8
|
+
* @throws Error when two declarations of one name disagree on `type` or schema.
|
|
9
|
+
* @internal Called by the CLI when generating meta.
|
|
10
|
+
*/
|
|
4
11
|
export declare function validateAndBuildCredentialDefinitionsMeta(definitions: CredentialDefinitions, schemaLookup: Map<string, SchemaRefLike>): CredentialDefinitionsMeta;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merges the credential declarations the inspector found into meta keyed by name.
|
|
3
|
+
* A name declared more than once must agree on type and schema.
|
|
4
|
+
*
|
|
5
|
+
* @throws Error when two declarations of one name disagree on `type` or schema.
|
|
6
|
+
* @internal Called by the CLI when generating meta.
|
|
7
|
+
*/
|
|
1
8
|
export function validateAndBuildCredentialDefinitionsMeta(definitions, schemaLookup) {
|
|
2
9
|
const meta = {};
|
|
3
10
|
for (const def of definitions) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FeatureFlagSource } from '../../services/feature-flag-service.js';
|
|
2
2
|
import type { DeclaredFlag, FlagConfigSnapshot } from './flag.types.js';
|
|
3
|
+
/** Tuning for a {@link CachedFlagSource}. */
|
|
3
4
|
export interface CachedFlagSourceOptions {
|
|
4
5
|
/**
|
|
5
6
|
* How long a snapshot is served before it is refreshed, in milliseconds.
|
|
@@ -33,13 +33,16 @@ export type CoreFeatureFlag = {
|
|
|
33
33
|
* like a scope id invites exactly the confusion this exists to prevent.
|
|
34
34
|
*/
|
|
35
35
|
export type CoreFeatureFlags = Record<string, CoreFeatureFlag>;
|
|
36
|
+
/** A feature flag declaration as recorded in generated meta. */
|
|
36
37
|
export type FeatureFlagDefinitionMeta = {
|
|
37
38
|
name: string;
|
|
38
39
|
description?: string;
|
|
39
40
|
anyOf?: string[];
|
|
40
41
|
sourceFile?: string;
|
|
41
42
|
};
|
|
43
|
+
/** Feature flag declarations as the inspector found them. */
|
|
42
44
|
export type FeatureFlagDefinitions = FeatureFlagDefinitionMeta[];
|
|
45
|
+
/** Feature flag declarations collected by the CLI, keyed by name. */
|
|
43
46
|
export type FeatureFlagDefinitionsMeta = Record<string, FeatureFlagDefinitionMeta>;
|
|
44
47
|
/** A declared flag, ready to sync into a flag store. */
|
|
45
48
|
export type DeclaredFlag = {
|