@pikku/core 0.12.84 → 0.12.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +424 -0
- package/dist/bootstrap-compat/root.d.ts +20 -0
- package/dist/classification/column-form.d.ts +32 -0
- package/dist/classification/column-form.js +42 -0
- package/dist/classification/data-classification.d.ts +64 -0
- package/dist/classification/index.d.ts +13 -0
- package/dist/classification/index.js +2 -0
- package/dist/classification/secret-value.d.ts +56 -0
- package/dist/classification/secret-value.js +46 -0
- package/dist/crypto-utils.d.ts +1 -1
- package/dist/ecosystem/agent-scorer.d.ts +1 -1
- package/dist/ecosystem/agent.d.ts +4 -1
- package/dist/ecosystem/channel/local.d.ts +2 -0
- package/dist/ecosystem/channel/local.js +2 -0
- package/dist/ecosystem/channel/serverless.d.ts +9 -0
- package/dist/ecosystem/channel/serverless.js +1 -0
- package/dist/ecosystem/channel.d.ts +3 -0
- package/dist/ecosystem/channel.js +1 -0
- package/dist/ecosystem/cli.d.ts +1 -1
- package/dist/ecosystem/cli.js +1 -1
- package/dist/ecosystem/credential.d.ts +1 -0
- package/dist/ecosystem/crypto-utils.d.ts +8 -0
- package/dist/ecosystem/crypto-utils.js +1 -0
- package/dist/ecosystem/dev.d.ts +1 -0
- package/dist/ecosystem/dev.js +1 -0
- package/{src/ecosystem/testing.ts → dist/ecosystem/errors.d.ts} +3 -3
- package/dist/ecosystem/errors.js +2 -0
- package/dist/ecosystem/function.d.ts +1 -1
- package/dist/ecosystem/function.js +1 -1
- package/dist/ecosystem/http.d.ts +3 -1
- package/dist/ecosystem/http.js +3 -1
- package/dist/ecosystem/mcp.d.ts +1 -1
- package/dist/ecosystem/mcp.js +1 -1
- package/dist/ecosystem/middleware.d.ts +2 -1
- package/dist/ecosystem/middleware.js +2 -1
- package/dist/ecosystem/persona.d.ts +4 -2
- package/dist/ecosystem/persona.js +2 -1
- package/dist/ecosystem/queue.d.ts +4 -2
- package/dist/ecosystem/queue.js +3 -1
- package/dist/ecosystem/role.d.ts +1 -0
- package/dist/ecosystem/rpc.d.ts +2 -0
- package/dist/ecosystem/rpc.js +1 -0
- package/dist/ecosystem/scenario.d.ts +8 -2
- package/dist/ecosystem/scenario.js +5 -1
- package/dist/ecosystem/scheduler.d.ts +2 -1
- package/dist/ecosystem/scheduler.js +2 -1
- package/dist/ecosystem/schema.d.ts +2 -1
- package/dist/ecosystem/schema.js +1 -1
- package/dist/ecosystem/scope.d.ts +2 -0
- package/dist/ecosystem/scope.js +1 -0
- package/dist/ecosystem/secret.d.ts +2 -0
- package/dist/ecosystem/secret.js +1 -0
- package/dist/ecosystem/services/local-content.d.ts +2 -1
- package/dist/ecosystem/services/local-content.js +1 -1
- package/dist/ecosystem/services/local-meta.d.ts +1 -0
- package/dist/ecosystem/services/local-meta.js +1 -0
- package/dist/ecosystem/services.d.ts +11 -3
- package/dist/ecosystem/services.js +7 -1
- package/dist/ecosystem/trigger.d.ts +1 -0
- package/dist/ecosystem/trigger.js +1 -1
- package/dist/ecosystem/types.d.ts +6 -3
- package/dist/ecosystem/types.js +3 -2
- package/dist/ecosystem/variable.d.ts +1 -0
- package/dist/ecosystem/virtual-user.d.ts +3 -0
- package/dist/ecosystem/virtual-user.js +3 -0
- package/dist/ecosystem/workflow.d.ts +2 -0
- package/dist/ecosystem/workflow.js +2 -0
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/serialized-error.d.ts +7 -0
- package/dist/function/function-meta.types.d.ts +139 -0
- package/dist/function/function-runner.d.ts +3 -2
- package/dist/function/function-runner.js +31 -11
- package/dist/function/functions.types.d.ts +10 -2
- package/dist/function/index.d.ts +8 -2
- package/dist/function/index.js +4 -1
- package/dist/function/pikku-request.d.ts +8 -0
- package/dist/function/pikku-request.js +15 -0
- package/dist/middleware/auth-apikey.d.ts +2 -10
- package/dist/middleware/auth-apikey.js +1 -1
- package/dist/middleware/auth-bearer.d.ts +2 -10
- package/dist/middleware/auth-bearer.js +1 -1
- package/dist/middleware/auth-cookie.d.ts +2 -10
- package/dist/middleware/auth-cookie.js +1 -1
- package/dist/middleware/cors.d.ts +5 -11
- package/dist/middleware/cors.js +13 -6
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/middleware-factories.d.ts +9 -0
- package/dist/middleware/middleware-factories.js +19 -0
- package/dist/middleware/middleware.types.d.ts +27 -0
- package/dist/middleware/middleware.types.js +1 -0
- package/dist/middleware/remote-auth.d.ts +2 -2
- package/dist/middleware/remote-auth.js +1 -1
- package/dist/middleware/telemetry.d.ts +4 -20
- package/dist/middleware/telemetry.js +1 -1
- package/dist/middleware-runner.d.ts +2 -1
- package/dist/pikku-state.d.ts +2 -1
- package/dist/services/audit-service.d.ts +1 -1
- package/dist/services/credential-wire-service.js +1 -1
- package/dist/services/email-service.d.ts +1 -1
- package/dist/services/file-scenario-run-store.d.ts +58 -0
- package/dist/services/file-scenario-run-store.js +214 -0
- package/dist/services/in-memory-workflow-service.d.ts +1 -1
- package/dist/services/index.d.ts +5 -1
- package/dist/services/index.js +3 -0
- package/dist/services/local-secrets.d.ts +1 -1
- package/dist/services/local-secrets.js +1 -1
- package/dist/services/logger.d.ts +7 -7
- package/dist/services/meta-service.d.ts +2 -1
- package/dist/services/scoped-secret-service.d.ts +1 -1
- package/dist/services/secret-service.d.ts +1 -1
- package/dist/services/typed-secret-service.d.ts +16 -2
- package/dist/services/typed-secret-service.js +5 -0
- package/dist/services/webhook-service.d.ts +1 -1
- package/dist/services/workflow-service.d.ts +2 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/types/core.types.d.ts +30 -180
- package/dist/types/core.types.js +1 -19
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/types/state.types.d.ts +3 -1
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +2 -0
- package/dist/wirings/addon/addon-runner.d.ts +17 -0
- package/dist/wirings/addon/addon-runner.js +150 -0
- package/dist/wirings/addon/index.d.ts +6 -0
- package/dist/wirings/addon/index.js +3 -0
- package/dist/wirings/addon/remote-addon-auth.d.ts +16 -0
- package/dist/wirings/addon/remote-addon-auth.js +39 -0
- package/dist/wirings/addon/wire-addon.d.ts +80 -0
- package/dist/wirings/addon/wire-addon.js +120 -0
- package/dist/wirings/addon/wire-remote-addon.d.ts +22 -0
- package/dist/wirings/addon/wire-remote-addon.js +11 -0
- package/dist/wirings/agent/agent-prepare.d.ts +3 -3
- package/dist/wirings/agent/agent-prepare.js +1 -1
- package/dist/wirings/agent/agent-runner.js +2 -3
- package/dist/wirings/agent/agent-stream.js +2 -2
- package/dist/wirings/agent/agent-utils.d.ts +13 -0
- package/dist/wirings/agent/agent-utils.js +16 -0
- package/dist/wirings/agent/agent.types.d.ts +3 -2
- package/dist/wirings/agent/index.d.ts +1 -1
- package/dist/wirings/agent/voice-input.js +1 -1
- package/dist/wirings/agent/voice-output.js +1 -1
- package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +13 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.js +52 -0
- package/dist/wirings/agent-scorer/agent-scorer.d.ts +7 -1
- package/dist/wirings/agent-scorer/agent-scorer.js +1 -0
- package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +20 -0
- package/dist/wirings/agent-scorer/index.d.ts +1 -1
- package/dist/wirings/channel/channel-common.d.ts +2 -1
- package/dist/wirings/channel/channel-middleware-runner.d.ts +2 -1
- package/dist/wirings/channel/channel.types.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.d.ts +1 -0
- package/dist/wirings/cli/channel/index.d.ts +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +2 -1
- package/dist/wirings/cli/cli-runner.js +4 -1
- package/dist/wirings/cli/cli.types.d.ts +21 -2
- package/dist/wirings/cli/command-parser.js +157 -23
- package/dist/wirings/gateway/gateway.types.d.ts +2 -1
- package/dist/wirings/http/http-runner.d.ts +1 -1
- package/dist/wirings/http/http-runner.js +1 -1
- package/dist/wirings/http/http.types.d.ts +2 -2
- package/dist/wirings/http/index.d.ts +1 -0
- package/dist/wirings/http/index.js +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.js +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.js +2 -2
- package/dist/wirings/mcp/mcp.types.d.ts +1 -1
- package/dist/wirings/persona/index.d.ts +1 -1
- package/dist/wirings/persona/index.js +1 -1
- package/dist/wirings/persona/persona.types.d.ts +14 -0
- package/dist/wirings/queue/queue.types.d.ts +1 -1
- package/dist/wirings/queue/signed-queue-service.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +0 -6
- package/dist/wirings/rpc/index.js +0 -3
- package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -1
- package/dist/wirings/rpc/remote-addon-auth.js +1 -1
- package/dist/wirings/rpc/rpc-runner.js +2 -2
- package/dist/wirings/rpc/wire-addon.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -1
- package/dist/wirings/scope/index.d.ts +1 -0
- package/dist/wirings/scope/index.js +1 -0
- package/dist/wirings/secret/secret.types.d.ts +10 -0
- package/dist/wirings/secret/validate-secret-definitions.js +2 -0
- package/dist/wirings/variable/validate-variable-definitions.js +2 -0
- package/dist/wirings/variable/variable.types.d.ts +9 -0
- package/dist/wirings/virtual-user/index.d.ts +1 -1
- package/dist/wirings/virtual-user/index.js +1 -1
- package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +1 -1
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +1 -1
- package/dist/wirings/workflow/graph/graph-node.d.ts +9 -2
- package/dist/wirings/workflow/graph/graph-node.js +2 -0
- package/dist/wirings/workflow/graph/graph-runner.d.ts +1 -0
- package/dist/wirings/workflow/graph/graph-runner.js +283 -31
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +16 -1
- package/dist/wirings/workflow/index.d.ts +2 -0
- package/dist/wirings/workflow/index.js +1 -0
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +14 -4
- package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -1
- package/dist/wirings/workflow/pikku-workflow-service.js +3 -4
- package/dist/wirings/workflow/run-timeline.d.ts +1 -1
- package/dist/wirings/workflow/scenario-run.types.d.ts +171 -0
- package/dist/wirings/workflow/scenario-run.types.js +1 -0
- package/dist/wirings/workflow/scenario-step-guards.d.ts +1 -2
- package/dist/wirings/workflow/scenario-step-guards.js +0 -8
- package/dist/wirings/workflow/scenario-step.types.d.ts +27 -12
- package/dist/wirings/workflow/workflow-approval.js +2 -1
- package/dist/wirings/workflow/workflow-run-engine.types.d.ts +2 -1
- package/dist/wirings/workflow/workflow.types.d.ts +2 -1
- package/knowledge/decisions/index.md +2 -0
- package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +1 -1
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +1 -1
- package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +2 -2
- package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +6 -6
- package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +1 -1
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +1 -1
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +1 -1
- package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +1 -1
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +1 -1
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +1 -1
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +1 -1
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +1 -1
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +1 -1
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +1 -1
- package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +4 -4
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +1 -1
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +3 -3
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +2 -2
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +2 -2
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +1 -1
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +1 -1
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +3 -3
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +1 -1
- package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +4 -4
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +1 -1
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +1 -1
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +1 -1
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +1 -1
- package/knowledge/decisions/internals/index.md +4 -2
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +1 -1
- package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +1 -1
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +1 -1
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +1 -1
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +1 -1
- package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +2 -2
- package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +5 -5
- package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +1 -1
- package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +1 -1
- package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +43 -19
- package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +1 -1
- package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +1 -1
- package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +3 -3
- package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +1 -1
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +1 -1
- package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +1 -1
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +1 -1
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +1 -1
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +1 -1
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +1 -1
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +1 -1
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +1 -1
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +9 -5
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +1 -1
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +2 -2
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +1 -1
- package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +1 -1
- package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +1 -1
- package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +2 -3
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +1 -1
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +1 -1
- package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +1 -1
- package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +3 -3
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +4 -3
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +1 -1
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +2 -2
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +1 -1
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +2 -2
- package/knowledge/decisions/security/index.md +2 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +1 -1
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +3 -3
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +1 -1
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +2 -2
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +1 -1
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +2 -2
- package/knowledge/index.md +3 -1
- package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +1 -1
- package/knowledge/questions/index.md +2 -0
- package/package.json +14 -13
- package/run-tests.sh +0 -0
- package/scripts/generate-api-report.d.mts +1 -1
- package/scripts/generate-api-report.mjs +67 -60
- package/scripts/generate-api-report.mts +11 -45
- package/src/api-report.test.ts +70 -1
- package/src/app-alias-surface.test.ts +179 -0
- package/src/app-leaf-surface.test.ts +217 -0
- package/src/bootstrap-compat/root.ts +20 -0
- package/src/{column-form.test.ts → classification/column-form.test.ts} +2 -2
- package/src/{data-classification.ts → classification/data-classification.ts} +1 -5
- package/src/classification/index.ts +38 -0
- package/src/{secret-value.test.ts → classification/secret-value.test.ts} +2 -2
- package/src/{secret-value.ts → classification/secret-value.ts} +1 -6
- package/src/crypto-utils.ts +1 -1
- package/src/dev/reload-meta.test.ts +1 -1
- package/src/errors/index.ts +9 -0
- package/src/errors/serialized-error.ts +9 -0
- package/src/factory-functions.test.ts +4 -2
- package/src/function/function-meta.types.ts +151 -0
- package/src/function/function-runner.test.ts +4 -2
- package/src/function/function-runner.ts +47 -14
- package/src/function/functions.types.ts +11 -7
- package/src/function/index.ts +24 -5
- package/src/function/list.types.ts +1 -3
- package/src/middleware/auth-apikey.ts +4 -2
- package/src/middleware/auth-bearer.test.ts +1 -1
- package/src/middleware/auth-bearer.ts +4 -2
- package/src/middleware/auth-cookie.ts +4 -1
- package/src/middleware/cors.test.ts +126 -5
- package/src/middleware/cors.ts +19 -8
- package/src/middleware/index.ts +16 -0
- package/src/middleware/middleware-factories.ts +62 -0
- package/src/middleware/middleware.types.ts +61 -0
- package/src/middleware/remote-auth.test.ts +1 -1
- package/src/middleware/remote-auth.ts +1 -1
- package/src/middleware/telemetry.ts +4 -2
- package/src/middleware-runner.test.ts +2 -3
- package/src/middleware-runner.ts +2 -2
- package/src/no-root-barrel.test.ts +114 -0
- package/src/permissions.ts +2 -4
- package/src/pikku-state.ts +3 -1
- package/src/public-surface.json +56 -241
- package/src/public-surface.json.README +3 -3
- package/src/public-surface.test.ts +5 -5
- package/src/remote.test.ts +1 -1
- package/src/removed-legacy-exports.test.ts +5 -1
- package/src/services/audit-service.ts +1 -1
- package/src/services/credential-wire-service.ts +1 -1
- package/src/services/email-service.ts +2 -4
- package/src/services/file-scenario-run-store.test.ts +349 -0
- package/src/services/file-scenario-run-store.ts +282 -0
- package/src/services/in-memory-workflow-service.ts +1 -1
- package/src/services/index.ts +13 -1
- package/src/services/local-content-request-handler.ts +1 -2
- package/src/services/local-secrets.ts +1 -1
- package/src/services/logger.ts +7 -7
- package/src/services/meta-service.ts +2 -2
- package/src/services/queue-webhook-service.test.ts +1 -1
- package/src/services/scoped-secret-service.ts +1 -1
- package/src/services/secret-service.ts +1 -1
- package/src/services/typed-secret-service.test.ts +52 -0
- package/src/services/typed-secret-service.ts +26 -2
- package/src/services/webhook-service.ts +1 -1
- package/src/services/workflow-service.ts +2 -1
- package/src/template-alias-surface.test.ts +240 -0
- package/src/testing/index.ts +1 -0
- package/src/types/core.types.ts +33 -285
- package/src/types/index.ts +2 -0
- package/src/types/state.types.ts +6 -5
- package/src/types/typed-credentials.test.ts +72 -0
- package/src/utils.ts +34 -0
- package/src/wirings/{rpc → addon}/addon-scopes.test.ts +1 -1
- package/src/wirings/addon/index.ts +12 -0
- package/src/wirings/{rpc → addon}/remote-addon-auth.ts +4 -1
- package/src/wirings/{rpc → addon}/wire-addon.ts +37 -2
- package/src/wirings/agent/agent-prepare.ts +8 -5
- package/src/wirings/agent/agent-runner.ts +2 -3
- package/src/wirings/agent/agent-stream.ts +2 -3
- package/src/wirings/agent/agent-utils.ts +19 -0
- package/src/wirings/agent/agent.types.ts +3 -3
- package/src/wirings/agent/index.ts +1 -0
- package/src/wirings/agent/voice-input.ts +1 -1
- package/src/wirings/agent/voice-output.test.ts +2 -4
- package/src/wirings/agent/voice-output.ts +1 -1
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +145 -0
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +60 -0
- package/src/wirings/agent-scorer/agent-scorer.ts +8 -0
- package/src/wirings/agent-scorer/agent-scorer.types.ts +21 -0
- package/src/wirings/agent-scorer/index.ts +1 -0
- package/src/wirings/channel/channel-common.ts +4 -2
- package/src/wirings/channel/channel-handler.ts +2 -5
- package/src/wirings/channel/channel-middleware-runner.ts +1 -1
- package/src/wirings/channel/channel-rpc.types.ts +1 -5
- package/src/wirings/channel/channel.types.ts +1 -2
- package/src/wirings/channel/local/local-channel-runner.test.ts +1 -2
- package/src/wirings/channel/serverless/index.ts +1 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +2 -2
- package/src/wirings/cli/channel/index.ts +1 -3
- package/src/wirings/cli/cli-runner.test.ts +1 -1
- package/src/wirings/cli/cli-runner.ts +11 -7
- package/src/wirings/cli/cli.types.ts +24 -3
- package/src/wirings/cli/command-parser.test.ts +388 -1
- package/src/wirings/cli/command-parser.ts +189 -29
- package/src/wirings/gateway/gateway-runner.test.ts +1 -2
- package/src/wirings/gateway/gateway-runner.ts +3 -6
- package/src/wirings/gateway/gateway.types.ts +5 -4
- package/src/wirings/http/http-routes.test.ts +1 -2
- package/src/wirings/http/http-runner-addon-ref.test.ts +238 -0
- package/src/wirings/http/http-runner.test.ts +3 -8
- package/src/wirings/http/http-runner.ts +9 -3
- package/src/wirings/http/http.types.ts +3 -12
- package/src/wirings/http/index.ts +1 -0
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +3 -2
- package/src/wirings/mcp/mcp-runner.test.ts +1 -1
- package/src/wirings/mcp/mcp.types.ts +1 -2
- package/src/wirings/persona/index.ts +1 -4
- package/src/wirings/persona/persona.types.ts +14 -0
- package/src/wirings/queue/queue-identity.test.ts +1 -1
- package/src/wirings/queue/queue.types.ts +2 -6
- package/src/wirings/queue/signed-queue-service.ts +1 -1
- package/src/wirings/rpc/index.ts +0 -12
- package/src/wirings/rpc/rpc-runner.test.ts +4 -4
- package/src/wirings/rpc/rpc-runner.ts +3 -3
- package/src/wirings/scheduler/scheduler.types.ts +2 -5
- package/src/wirings/scope/index.ts +1 -0
- package/src/wirings/secret/secret.types.ts +10 -0
- package/src/wirings/secret/validate-secret-definitions.test.ts +23 -0
- package/src/wirings/secret/validate-secret-definitions.ts +2 -0
- package/src/wirings/variable/validate-variable-definitions.test.ts +23 -0
- package/src/wirings/variable/validate-variable-definitions.ts +2 -0
- package/src/wirings/variable/variable.types.ts +9 -0
- package/src/wirings/virtual-user/index.ts +1 -4
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +1 -1
- package/src/wirings/virtual-user/virtual-user-derive.ts +1 -1
- package/src/wirings/virtual-user/virtual-user.types.ts +1 -5
- package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +569 -0
- package/src/wirings/workflow/graph/graph-foreach.test.ts +626 -0
- package/src/wirings/workflow/graph/graph-node.ts +16 -1
- package/src/wirings/workflow/graph/graph-runner.ts +387 -61
- package/src/wirings/workflow/graph/workflow-graph.types.ts +28 -3
- package/src/wirings/workflow/index.ts +8 -0
- package/src/wirings/workflow/pikku-scenario-service.ts +59 -19
- package/src/wirings/workflow/pikku-workflow-service.ts +6 -8
- package/src/wirings/workflow/run-timeline.ts +1 -1
- package/src/wirings/workflow/scenario-expectations.test.ts +28 -13
- package/src/wirings/workflow/scenario-run.types.ts +186 -0
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +32 -7
- package/src/wirings/workflow/scenario-step.types.ts +27 -12
- package/src/wirings/workflow/workflow-approval-policy.test.ts +117 -47
- package/src/wirings/workflow/workflow-approval.ts +2 -1
- package/src/wirings/workflow/workflow-run-engine.types.ts +2 -1
- package/src/wirings/workflow/workflow.types.ts +4 -12
- package/src/wirings-stay-decoupled.test.ts +6 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.type-tests.json +3 -2
- package/dist/ecosystem/ai-agent.d.ts +0 -18
- package/dist/ecosystem/ai-agent.js +0 -6
- package/dist/ecosystem/ai-scorer.d.ts +0 -12
- package/dist/ecosystem/ai-scorer.js +0 -5
- package/dist/services/ai-agent-runner-service.d.ts +0 -220
- package/dist/services/ai-run-state-service.d.ts +0 -29
- package/dist/services/ai-storage-service.d.ts +0 -18
- package/dist/services/in-memory-ai-run-state-service.d.ts +0 -19
- package/dist/services/in-memory-ai-run-state-service.js +0 -54
- package/dist/testing/service-tests/ai-storage-service-tests.d.ts +0 -3
- package/dist/testing/service-tests/ai-storage-service-tests.js +0 -302
- package/dist/wirings/ai-agent/agent-rpc.d.ts +0 -15
- package/dist/wirings/ai-agent/agent-rpc.js +0 -53
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -79
- package/dist/wirings/ai-agent/ai-agent-agui.js +0 -327
- package/dist/wirings/ai-agent/ai-agent-finalize.d.ts +0 -58
- package/dist/wirings/ai-agent/ai-agent-finalize.js +0 -138
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +0 -35
- package/dist/wirings/ai-agent/ai-agent-helpers.js +0 -47
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +0 -153
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +0 -257
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +0 -42
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -333
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -16
- package/dist/wirings/ai-agent/ai-agent-model-config.js +0 -51
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +0 -117
- package/dist/wirings/ai-agent/ai-agent-prepare.js +0 -728
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +0 -16
- package/dist/wirings/ai-agent/ai-agent-registry.js +0 -51
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +0 -7
- package/dist/wirings/ai-agent/ai-agent-runner.js +0 -580
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +0 -41
- package/dist/wirings/ai-agent/ai-agent-stream.js +0 -1029
- package/dist/wirings/ai-agent/ai-agent-turn.d.ts +0 -57
- package/dist/wirings/ai-agent/ai-agent-turn.js +0 -82
- package/dist/wirings/ai-agent/ai-agent-utils.d.ts +0 -1
- package/dist/wirings/ai-agent/ai-agent-utils.js +0 -1
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +0 -625
- package/dist/wirings/ai-agent/index.d.ts +0 -12
- package/dist/wirings/ai-agent/index.js +0 -10
- package/dist/wirings/ai-agent/voice-input.d.ts +0 -69
- package/dist/wirings/ai-agent/voice-input.js +0 -150
- package/dist/wirings/ai-agent/voice-output.d.ts +0 -85
- package/dist/wirings/ai-agent/voice-output.js +0 -196
- package/dist/wirings/ai-scorer/ai-scorer-grade.d.ts +0 -26
- package/dist/wirings/ai-scorer/ai-scorer-grade.js +0 -33
- package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +0 -17
- package/dist/wirings/ai-scorer/ai-scorer-judge.js +0 -92
- package/dist/wirings/ai-scorer/ai-scorer-live.d.ts +0 -15
- package/dist/wirings/ai-scorer/ai-scorer-live.js +0 -38
- package/dist/wirings/ai-scorer/ai-scorer-registry.d.ts +0 -18
- package/dist/wirings/ai-scorer/ai-scorer-registry.js +0 -46
- package/dist/wirings/ai-scorer/ai-scorer-sampling.d.ts +0 -8
- package/dist/wirings/ai-scorer/ai-scorer-sampling.js +0 -31
- package/dist/wirings/ai-scorer/ai-scorer-snapshots.d.ts +0 -10
- package/dist/wirings/ai-scorer/ai-scorer-snapshots.js +0 -40
- package/dist/wirings/ai-scorer/ai-scorer-worker.d.ts +0 -15
- package/dist/wirings/ai-scorer/ai-scorer-worker.js +0 -58
- package/dist/wirings/ai-scorer/ai-scorer.d.ts +0 -39
- package/dist/wirings/ai-scorer/ai-scorer.js +0 -40
- package/dist/wirings/ai-scorer/ai-scorer.types.d.ts +0 -90
- package/dist/wirings/ai-scorer/ai-scorer.types.js +0 -4
- package/dist/wirings/ai-scorer/index.d.ts +0 -6
- package/dist/wirings/ai-scorer/index.js +0 -5
- package/src/ecosystem/agent-scorer.ts +0 -24
- package/src/ecosystem/agent.ts +0 -42
- package/src/ecosystem/channel/local.ts +0 -1
- package/src/ecosystem/channel.ts +0 -22
- package/src/ecosystem/cli/channel.ts +0 -25
- package/src/ecosystem/cli.ts +0 -21
- package/src/ecosystem/credential.ts +0 -10
- package/src/ecosystem/dev.ts +0 -12
- package/src/ecosystem/function.ts +0 -28
- package/src/ecosystem/gateway.ts +0 -4
- package/src/ecosystem/hmac.ts +0 -1
- package/src/ecosystem/http.ts +0 -22
- package/src/ecosystem/mcp.ts +0 -17
- package/src/ecosystem/middleware.ts +0 -27
- package/src/ecosystem/node-host-resolver.ts +0 -1
- package/src/ecosystem/node.ts +0 -5
- package/src/ecosystem/oauth2.ts +0 -4
- package/src/ecosystem/persona.ts +0 -30
- package/src/ecosystem/queue.ts +0 -23
- package/src/ecosystem/remote.ts +0 -9
- package/src/ecosystem/role.ts +0 -13
- package/src/ecosystem/rpc.ts +0 -7
- package/src/ecosystem/safe-fetch.ts +0 -8
- package/src/ecosystem/scenario.ts +0 -32
- package/src/ecosystem/scheduler.ts +0 -5
- package/src/ecosystem/schema.ts +0 -1
- package/src/ecosystem/scope.ts +0 -14
- package/src/ecosystem/secret.ts +0 -15
- package/src/ecosystem/services/istanbul-coverage.ts +0 -1
- package/src/ecosystem/services/local-content-request-handler.ts +0 -16
- package/src/ecosystem/services/local-content.ts +0 -1
- package/src/ecosystem/services/v8-coverage.ts +0 -1
- package/src/ecosystem/services.ts +0 -82
- package/src/ecosystem/trigger.ts +0 -7
- package/src/ecosystem/types.ts +0 -34
- package/src/ecosystem/variable.ts +0 -14
- package/src/ecosystem/virtual-user.ts +0 -48
- package/src/ecosystem/workflow.ts +0 -68
- package/src/ecosystem.ts +0 -40
- package/src/index.ts +0 -244
- /package/dist/{services/ai-agent-runner-service.js → bootstrap-compat/root.js} +0 -0
- /package/dist/{services/ai-run-state-service.js → classification/data-classification.js} +0 -0
- /package/dist/{services/ai-storage-service.js → errors/serialized-error.js} +0 -0
- /package/dist/{wirings/ai-agent/ai-agent.types.js → function/function-meta.types.js} +0 -0
- /package/src/{column-form.ts → classification/column-form.ts} +0 -0
- /package/src/{pikku-request.test.ts → function/pikku-request.test.ts} +0 -0
- /package/src/{pikku-request.ts → function/pikku-request.ts} +0 -0
- /package/src/wirings/{rpc → addon}/addon-auth-tags.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/addon-runner.ts +0 -0
- /package/src/wirings/{rpc → addon}/addon-secrets.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/wire-addon.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/wire-remote-addon.ts +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
export { InMemoryWorkflowService } from '../services/in-memory-workflow-service.js';
|
|
1
2
|
export { template } from '../wirings/workflow/graph/template.js';
|
|
2
3
|
export { isRef } from '../wirings/workflow/graph/workflow-graph.types.js';
|
|
4
|
+
export { PikkuWorkflowService } from '../wirings/workflow/pikku-workflow-service.js';
|
|
3
5
|
export { buildRunTimeline, reconstructFinalState, reconstructStateAt, } from '../wirings/workflow/run-timeline.js';
|
|
4
6
|
export { assertWorkflowRunOwner } from '../wirings/workflow/workflow-run-ownership.js';
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
export * from './errors.js';
|
|
2
2
|
export { PikkuError, addError } from './error-handler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Types the exports above mention but do not themselves export. Without
|
|
5
|
+
* them a consumer's declaration emit has no name for the type it infers,
|
|
6
|
+
* and fails with TS2883 rather than reaching for the original entry point.
|
|
7
|
+
*/
|
|
8
|
+
export type { ErrorDetails } from './error-handler.js';
|
|
9
|
+
export { isExpectedError } from './error-handler.js';
|
|
10
|
+
export type { SerializedError } from './serialized-error.js';
|
package/dist/errors/index.js
CHANGED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type { MiddlewareMetadata } from '../middleware/middleware.types.js';
|
|
2
|
+
import type { AuditDurability } from '../services/audit-service.js';
|
|
3
|
+
import type { ScenarioStepKind, ScenarioSurface } from '../wirings/workflow/scenario-step.types.js';
|
|
4
|
+
import type { CommonWireMeta } from '../types/core.types.js';
|
|
5
|
+
export interface FunctionServicesMeta {
|
|
6
|
+
optimized: boolean;
|
|
7
|
+
services: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface FunctionWiresMeta {
|
|
10
|
+
optimized: boolean;
|
|
11
|
+
wires: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A reference to a permission function, resolved by name. Function-scoped
|
|
15
|
+
* only: there are no wire- or tag-level permission references.
|
|
16
|
+
*/
|
|
17
|
+
export type PermissionMetadata = {
|
|
18
|
+
type: 'wire';
|
|
19
|
+
name: string;
|
|
20
|
+
inline?: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type FunctionRuntimeMeta = {
|
|
23
|
+
pikkuFuncId: string;
|
|
24
|
+
inputSchemaName: string | null;
|
|
25
|
+
outputSchemaName: string | null;
|
|
26
|
+
/** Scopes the session must hold to run this function. All are required (AND). */
|
|
27
|
+
scopes?: string[];
|
|
28
|
+
expose?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* A sessionless function's own `auth: true`. `sessionless` carries the
|
|
31
|
+
* baseline — a `pikkuFunc` always requires a session — and this carries the
|
|
32
|
+
* tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
|
|
33
|
+
* know whether a function is gated without running it.
|
|
34
|
+
*/
|
|
35
|
+
auth?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* The author's declaration that this function's permission check lives in its
|
|
38
|
+
* own body. Carries no runtime effect — it records a gate codegen cannot see,
|
|
39
|
+
* so an audit is not left to guess whether a sessionless function is open.
|
|
40
|
+
* Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
|
|
41
|
+
*/
|
|
42
|
+
permissionsInBody?: boolean;
|
|
43
|
+
remote?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* A step RPC: invoked by name only from a scenario run and refused
|
|
46
|
+
* everywhere else, so it is never network-callable.
|
|
47
|
+
*/
|
|
48
|
+
scenarioStep?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
|
|
51
|
+
* so it is held back from the app bootstrap and from every deployed unit.
|
|
52
|
+
*/
|
|
53
|
+
scenario?: boolean;
|
|
54
|
+
mcp?: boolean;
|
|
55
|
+
readonly?: boolean;
|
|
56
|
+
deploy?: 'serverless' | 'server' | 'auto';
|
|
57
|
+
sessionless?: boolean;
|
|
58
|
+
/** When true, workflow steps calling this function are dispatched via the queue. No queue service configured is a hard error. */
|
|
59
|
+
workflowQueued?: boolean;
|
|
60
|
+
/** Retry count when this function is used as a workflow step. */
|
|
61
|
+
workflowRetries?: number;
|
|
62
|
+
/** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
|
|
63
|
+
workflowTimeout?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Scenario steps only: which surfaces this step declares a binding for.
|
|
66
|
+
*
|
|
67
|
+
* The reporter derives coverage from this — a `then` with no binding for the
|
|
68
|
+
* surface the run targeted was never actually witnessed there, which is a gap
|
|
69
|
+
* worth counting rather than excusing.
|
|
70
|
+
*/
|
|
71
|
+
scenarioStepSurfaces?: ScenarioSurface[];
|
|
72
|
+
/**
|
|
73
|
+
* Scenario steps only: this step runs as a persona, so every call site must
|
|
74
|
+
* pass one and the runner injects it as `wire.actor`.
|
|
75
|
+
*
|
|
76
|
+
* Declared by `actor: true`, or implied by a `browser` binding — a window is
|
|
77
|
+
* opened as somebody. Absent on a step with nobody to be: an assertion over
|
|
78
|
+
* what an earlier step returned, or one posting credentials precisely because
|
|
79
|
+
* it must not reuse an actor's session.
|
|
80
|
+
*/
|
|
81
|
+
scenarioStepRequiresActor?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Scenario steps only: who acts. Absent means `persona` — the ordinary step,
|
|
84
|
+
* and the only kind that existed before the other two.
|
|
85
|
+
*
|
|
86
|
+
* A `platform` or `addon` step is the app or a third-party system acting, and
|
|
87
|
+
* it must never reach a virtual user's catalogue. That is not tidiness: a
|
|
88
|
+
* virtual user that can invoke "Stripe's webhook arrives" can forge its own
|
|
89
|
+
* payment success, and every finding downstream of that is worthless.
|
|
90
|
+
*/
|
|
91
|
+
scenarioStepKind?: ScenarioStepKind;
|
|
92
|
+
/** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
|
|
93
|
+
scenarioStepAddon?: string;
|
|
94
|
+
/** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
|
|
95
|
+
scenarioStepTemplate?: string;
|
|
96
|
+
/**
|
|
97
|
+
* The function's `audit` config, resolved — `audit: true` reads as
|
|
98
|
+
* `{ durability: 'best-effort' }`. Absent means the function records nothing:
|
|
99
|
+
* `auditLog.write()` from an unmarked function is dropped with a warning, so
|
|
100
|
+
* this is the only place a reader can see which functions have a trail at all
|
|
101
|
+
* without running them.
|
|
102
|
+
*
|
|
103
|
+
* Informational. The runner resolves audit from the live function config, not
|
|
104
|
+
* from here, so meta and runtime cannot disagree about whether audit is on.
|
|
105
|
+
*/
|
|
106
|
+
audit?: {
|
|
107
|
+
durability: AuditDurability;
|
|
108
|
+
};
|
|
109
|
+
version?: number;
|
|
110
|
+
approvalRequired?: boolean;
|
|
111
|
+
approvalDescription?: string;
|
|
112
|
+
implementationHash?: string;
|
|
113
|
+
contractHash?: string;
|
|
114
|
+
inputHash?: string;
|
|
115
|
+
outputHash?: string;
|
|
116
|
+
};
|
|
117
|
+
export type FunctionMeta = FunctionRuntimeMeta & Partial<{
|
|
118
|
+
name: string;
|
|
119
|
+
/** `remote`: a contract with no local body, answered by a connected client. */
|
|
120
|
+
functionType: 'user' | 'inline' | 'helper' | 'remote';
|
|
121
|
+
funcWrapper: string;
|
|
122
|
+
services: FunctionServicesMeta;
|
|
123
|
+
wires: FunctionWiresMeta;
|
|
124
|
+
inputs: string[] | null;
|
|
125
|
+
outputs: string[] | null;
|
|
126
|
+
middleware: MiddlewareMetadata[];
|
|
127
|
+
permissions: PermissionMetadata[];
|
|
128
|
+
isDirectFunction: boolean;
|
|
129
|
+
sourceFile: string;
|
|
130
|
+
exportedName: string;
|
|
131
|
+
/** File containing the handler body when it differs from sourceFile (imported handlers) */
|
|
132
|
+
bodySourceFile?: string;
|
|
133
|
+
/** 1-indexed first line of the handler body (verbose meta; coverage mapping) */
|
|
134
|
+
bodyStart: number;
|
|
135
|
+
/** 1-indexed last line of the handler body (verbose meta; coverage mapping) */
|
|
136
|
+
bodyEnd: number;
|
|
137
|
+
} & CommonWireMeta>;
|
|
138
|
+
export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>;
|
|
139
|
+
export type FunctionsMeta = Record<string, FunctionMeta>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { CoreUserSession,
|
|
1
|
+
import type { CoreUserSession, PikkuWiringTypes, PikkuRawWire, CoreSingletonServices, CreateWireServices } from '../types/core.types.js';
|
|
2
|
+
import type { CorePikkuMiddleware, MiddlewareMetadata } from '../middleware/middleware.types.js';
|
|
2
3
|
import type { CorePikkuChannelMiddleware } from '../wirings/channel/channel.types.js';
|
|
3
4
|
import type { CorePikkuFunctionConfig } from './functions.types.js';
|
|
4
5
|
import type { SessionService } from '../services/user-session-service.js';
|
|
5
6
|
import { PikkuCredentialWireService } from '../services/credential-wire-service.js';
|
|
6
|
-
import type { AddonInstance } from '../wirings/
|
|
7
|
+
import type { AddonInstance } from '../wirings/addon/addon-runner.js';
|
|
7
8
|
export declare const addFunction: (funcName: string, funcConfig: CorePikkuFunctionConfig<any, any>, packageName?: string | null) => void;
|
|
8
9
|
export declare const getFunctionNames: (packageName?: string | null) => string[];
|
|
9
10
|
export declare const getAllFunctionNames: () => string[];
|
|
@@ -13,8 +13,8 @@ import { PikkuCredentialWireService, createWireServicesCredentialWireProps, } fr
|
|
|
13
13
|
import { defaultPikkuUserIdResolver } from '../services/pikku-user-id.js';
|
|
14
14
|
import { createInvocationAudit, resolveAuditConfig, } from '../services/audit-service.js';
|
|
15
15
|
import { rpcService } from '../wirings/rpc/rpc-runner.js';
|
|
16
|
-
import { getOrCreatePackageSingletonServices } from '../wirings/
|
|
17
|
-
import { resolveAddonAuth, resolveAddonScopes, resolveAddonTagMiddleware, } from '../wirings/
|
|
16
|
+
import { getOrCreatePackageSingletonServices } from '../wirings/addon/addon-runner.js';
|
|
17
|
+
import { resolveAddonAuth, resolveAddonFunctionTarget, resolveAddonScopes, resolveAddonTagMiddleware, } from '../wirings/addon/wire-addon.js';
|
|
18
18
|
import { closeWireServices } from '../utils.js';
|
|
19
19
|
async function resolveSession(wire, singletonServices, sessionService) {
|
|
20
20
|
const pikkuUserId = defaultPikkuUserIdResolver(wire);
|
|
@@ -77,6 +77,26 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* The package the *function* belongs to, which is the wire's own until a
|
|
82
|
+
* `ref()` resolves the target into an addon. The wiring stays the consuming
|
|
83
|
+
* app's — that is what keeps the app's middleware running rather than the
|
|
84
|
+
* addon's — but everything the function is declared with lives in the addon's
|
|
85
|
+
* package state, so its schemas, services and permissions are read from here.
|
|
86
|
+
*/
|
|
87
|
+
let funcPackageName = packageName;
|
|
88
|
+
if (!funcMeta) {
|
|
89
|
+
const addonTarget = resolveAddonFunctionTarget(funcName, packageName);
|
|
90
|
+
if (addonTarget) {
|
|
91
|
+
funcConfig =
|
|
92
|
+
funcConfig ||
|
|
93
|
+
pikkuState(addonTarget.packageName, 'function', 'functions').get(addonTarget.localName);
|
|
94
|
+
funcMeta = pikkuState(addonTarget.packageName, 'function', 'meta')[addonTarget.localName];
|
|
95
|
+
if (funcMeta) {
|
|
96
|
+
funcPackageName = addonTarget.packageName;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
80
100
|
if (!funcConfig) {
|
|
81
101
|
throw new Error(`Function not found: ${funcName}`);
|
|
82
102
|
}
|
|
@@ -84,12 +104,12 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
84
104
|
throw new Error(`Function meta not found: ${funcName}`);
|
|
85
105
|
}
|
|
86
106
|
const resolvedFunctionId = funcMeta.pikkuFuncId ?? funcName;
|
|
87
|
-
const resolvedSingletonServices =
|
|
88
|
-
? await getOrCreatePackageSingletonServices(
|
|
107
|
+
const resolvedSingletonServices = funcPackageName
|
|
108
|
+
? await getOrCreatePackageSingletonServices(funcPackageName, singletonServices, addonInstance)
|
|
89
109
|
: singletonServices;
|
|
90
110
|
let resolvedCreateWireServices = createWireServices;
|
|
91
|
-
if (
|
|
92
|
-
const factories = pikkuState(
|
|
111
|
+
if (funcPackageName) {
|
|
112
|
+
const factories = pikkuState(funcPackageName, 'package', 'factories');
|
|
93
113
|
if (factories?.createWireServices) {
|
|
94
114
|
resolvedCreateWireServices = factories.createWireServices;
|
|
95
115
|
}
|
|
@@ -192,11 +212,11 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
192
212
|
let actualData = await data();
|
|
193
213
|
const inputSchemaName = funcMeta.inputSchemaName;
|
|
194
214
|
if (inputSchemaName) {
|
|
195
|
-
actualData = applyDefaultsFromSchema(inputSchemaName, actualData,
|
|
215
|
+
actualData = applyDefaultsFromSchema(inputSchemaName, actualData, funcPackageName);
|
|
196
216
|
if (coerceDataFromSchema) {
|
|
197
|
-
coerceTopLevelDataFromSchema(inputSchemaName, actualData,
|
|
217
|
+
coerceTopLevelDataFromSchema(inputSchemaName, actualData, funcPackageName);
|
|
198
218
|
}
|
|
199
|
-
await validateSchema(resolvedSingletonServices.logger, resolvedSingletonServices.schema, inputSchemaName, actualData,
|
|
219
|
+
await validateSchema(resolvedSingletonServices.logger, resolvedSingletonServices.schema, inputSchemaName, actualData, funcPackageName);
|
|
200
220
|
}
|
|
201
221
|
await runPermissions({
|
|
202
222
|
funcPermissions: funcConfig.permissions,
|
|
@@ -204,7 +224,7 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
204
224
|
// knowledge: decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md
|
|
205
225
|
wire: invocationWire,
|
|
206
226
|
data: actualData,
|
|
207
|
-
packageName,
|
|
227
|
+
packageName: funcPackageName,
|
|
208
228
|
});
|
|
209
229
|
let wireServices;
|
|
210
230
|
let invocationAuditLog;
|
|
@@ -220,7 +240,7 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
220
240
|
invocationAuditLog = createInvocationAudit(resolvedSingletonServices.audit, invocationWire, resolvedSingletonServices.logger);
|
|
221
241
|
services = { ...services, auditLog: invocationAuditLog };
|
|
222
242
|
}
|
|
223
|
-
const callerPackageName =
|
|
243
|
+
const callerPackageName = funcPackageName;
|
|
224
244
|
Object.defineProperty(invocationWire, 'rpc', {
|
|
225
245
|
get() {
|
|
226
246
|
const rpc = rpcService.getContextRPCService(services, invocationWire, { sessionService }, 0, callerPackageName);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { CoreServices, CoreSecretlessSingletonServices, CoreUserSession,
|
|
1
|
+
import type { CoreServices, CoreSecretlessSingletonServices, CoreUserSession, PikkuWire, SecretlessServices } from '../types/core.types.js';
|
|
2
|
+
import type { CorePikkuMiddleware } from '../middleware/middleware.types.js';
|
|
3
|
+
import type { PickRequired } from '../utils.js';
|
|
2
4
|
import type { PikkuRPC } from '../wirings/rpc/rpc-types.js';
|
|
3
5
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
4
6
|
import type { PikkuError } from '../errors/error-handler.js';
|
|
5
7
|
import type { CoreNodeConfig } from '../wirings/node/node.types.js';
|
|
6
8
|
import type { ScenarioSurface } from '../wirings/workflow/scenario-step.types.js';
|
|
7
|
-
import type { Safe } from '../secret-value.js';
|
|
9
|
+
import type { Safe } from '../classification/secret-value.js';
|
|
8
10
|
export type CorePikkuFunction<In, Out, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Session extends CoreUserSession = CoreUserSession, Wire extends PikkuWire<In, Out, true, Session, PikkuRPC, null, string> = PikkuWire<In, Out, true, Session>> = (services: Services, data: In, wire: Wire) => Wire['channel'] extends null ? Promise<Safe<Out>> : Promise<Safe<Out>> | Promise<void>;
|
|
9
11
|
export type CorePikkuFunctionSessionless<In, Out, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Session extends CoreUserSession = CoreUserSession, Wire extends PikkuWire<In, Out, false, Session, PikkuRPC, null, string> = PikkuWire<In, Out, false, Session>> = (services: Services, data: In, wire: Wire) => Wire['channel'] extends null ? Promise<Safe<Out>> : Promise<Safe<Out>> | Promise<void>;
|
|
10
12
|
export type CorePikkuPermission<In = any, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> = PikkuWire<In, never, false, any, PikkuRPC, never, never>> = (services: Services, data: In, wire: Wire) => Promise<boolean>;
|
|
@@ -83,6 +85,12 @@ export type CorePikkuFunctionConfig<PikkuFunction extends CorePikkuFunction<any,
|
|
|
83
85
|
* and report how much of the flow each surface actually covers.
|
|
84
86
|
*/
|
|
85
87
|
surfaces?: ScenarioSurface[];
|
|
88
|
+
/**
|
|
89
|
+
* Scenario steps only: this step is driven by a persona, so the runner injects
|
|
90
|
+
* `wire.actor` and refuses to dispatch it without one. Set by the definer from
|
|
91
|
+
* a `browser` binding or an explicit `actor: true`, never written by hand.
|
|
92
|
+
*/
|
|
93
|
+
requiresActor?: boolean;
|
|
86
94
|
audit?: boolean | {
|
|
87
95
|
durability?: 'best-effort' | 'transactional';
|
|
88
96
|
};
|
package/dist/function/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export { addFunction, getAllFunctionNames } from './function-runner.js';
|
|
1
|
+
export { addFunction, getAllFunctionNames, runPikkuFunc, } from './function-runner.js';
|
|
2
2
|
export { pikkuAuth, pikkuPermission, pikkuPermissionFactory, pikkuApprovalDescription, } from './functions.types.js';
|
|
3
3
|
export type { CorePikkuFunction, CorePikkuFunctionSessionless, CorePikkuFunctionConfig, CorePikkuSessionlessFunctionConfig, CorePikkuAuth, CorePikkuAuthConfig, CorePikkuPermission, } from './functions.types.js';
|
|
4
|
-
export type { ListInput, ListOutput, Filter
|
|
4
|
+
export type { ListInput, ListOutput, Filter } from './list.types.js';
|
|
5
|
+
export { AbandonedError } from './abort-scope.js';
|
|
6
|
+
export type { AbortScope } from './abort-scope.js';
|
|
7
|
+
export { checkAuthPermissions } from '../permissions.js';
|
|
8
|
+
export type { CorePermissionGroup, CorePikkuApprovalDescription, CorePikkuPermissionConfig, CorePikkuPermissionFactory, } from './functions.types.js';
|
|
9
|
+
export type { FunctionMeta, FunctionRuntimeMeta, FunctionServicesMeta, FunctionWiresMeta, FunctionsMeta, FunctionsRuntimeMeta, PermissionMetadata, } from './function-meta.types.js';
|
|
10
|
+
export { PikkuRequest } from './pikku-request.js';
|
package/dist/function/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export { addFunction, getAllFunctionNames } from './function-runner.js';
|
|
1
|
+
export { addFunction, getAllFunctionNames, runPikkuFunc, } from './function-runner.js';
|
|
2
2
|
export { pikkuAuth, pikkuPermission, pikkuPermissionFactory, pikkuApprovalDescription, } from './functions.types.js';
|
|
3
|
+
export { AbandonedError } from './abort-scope.js';
|
|
4
|
+
export { checkAuthPermissions } from '../permissions.js';
|
|
5
|
+
export { PikkuRequest } from './pikku-request.js';
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
export declare const authAPIKey: import("
|
|
1
|
+
export declare const authAPIKey: import("./middleware.types.js").CorePikkuMiddlewareFactory<{
|
|
2
2
|
source: "header" | "query" | "all";
|
|
3
|
-
}
|
|
4
|
-
logLevel?: import("../services/logger.js").LogLevel;
|
|
5
|
-
secrets?: {
|
|
6
|
-
requireAllowedHosts?: boolean;
|
|
7
|
-
};
|
|
8
|
-
workflow?: import("../ecosystem/agent.js").WorkflowServiceConfig;
|
|
9
|
-
webhook?: import("../services/webhook-service.js").WebhookServiceConfig;
|
|
10
|
-
postgres?: import("../types/core.types.js").PostgresConfig;
|
|
11
|
-
}>, import("../types/core.types.js").CoreUserSession>;
|
|
3
|
+
}>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pikkuMiddleware, pikkuMiddlewareFactory } from '
|
|
1
|
+
import { pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
2
2
|
export const authAPIKey = pikkuMiddlewareFactory(({ source }) => pikkuMiddleware(async ({ jwt: jwtService }, { http, setSession, session }, next) => {
|
|
3
3
|
if (!http?.request || !setSession || session) {
|
|
4
4
|
return next();
|
|
@@ -4,7 +4,7 @@ import type { CoreUserSession } from '../types/core.types.js';
|
|
|
4
4
|
* time against a static `value` or a `secretId` resolved through the secrets
|
|
5
5
|
* service per request.
|
|
6
6
|
*/
|
|
7
|
-
export declare const authBearer: import("
|
|
7
|
+
export declare const authBearer: import("./middleware.types.js").CorePikkuMiddlewareFactory<{
|
|
8
8
|
token?: {
|
|
9
9
|
value: string;
|
|
10
10
|
userSession: CoreUserSession;
|
|
@@ -12,12 +12,4 @@ export declare const authBearer: import("../types/core.types.js").CorePikkuMiddl
|
|
|
12
12
|
secretId: string;
|
|
13
13
|
userSession: CoreUserSession;
|
|
14
14
|
};
|
|
15
|
-
}
|
|
16
|
-
logLevel?: import("../services/logger.js").LogLevel;
|
|
17
|
-
secrets?: {
|
|
18
|
-
requireAllowedHosts?: boolean;
|
|
19
|
-
};
|
|
20
|
-
workflow?: import("../ecosystem/agent.js").WorkflowServiceConfig;
|
|
21
|
-
webhook?: import("../services/webhook-service.js").WebhookServiceConfig;
|
|
22
|
-
postgres?: import("../types/core.types.js").PostgresConfig;
|
|
23
|
-
}>, CoreUserSession>;
|
|
15
|
+
}>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InvalidSessionError } from '../errors/errors.js';
|
|
2
|
-
import { pikkuMiddleware, pikkuMiddlewareFactory } from '
|
|
2
|
+
import { pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
3
3
|
const constantTimeEqual = (a, b) => {
|
|
4
4
|
if (a.length !== b.length)
|
|
5
5
|
return false;
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { SerializeOptions } from 'cookie';
|
|
2
2
|
import type { RelativeTimeInput } from '../time-utils.js';
|
|
3
|
-
export declare const authCookie: import("
|
|
3
|
+
export declare const authCookie: import("./middleware.types.js").CorePikkuMiddlewareFactory<{
|
|
4
4
|
name: string;
|
|
5
5
|
options: SerializeOptions;
|
|
6
6
|
expiresIn: RelativeTimeInput;
|
|
7
|
-
}
|
|
8
|
-
logLevel?: import("../services/logger.js").LogLevel;
|
|
9
|
-
secrets?: {
|
|
10
|
-
requireAllowedHosts?: boolean;
|
|
11
|
-
};
|
|
12
|
-
workflow?: import("../ecosystem/agent.js").WorkflowServiceConfig;
|
|
13
|
-
webhook?: import("../services/webhook-service.js").WebhookServiceConfig;
|
|
14
|
-
postgres?: import("../types/core.types.js").PostgresConfig;
|
|
15
|
-
}>, import("../types/core.types.js").CoreUserSession>;
|
|
7
|
+
}>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pikkuMiddleware, pikkuMiddlewareFactory } from '
|
|
1
|
+
import { pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
2
2
|
import { getRelativeTimeOffsetFromNow } from '../time-utils.js';
|
|
3
3
|
/**
|
|
4
4
|
* Reads a JWT session from a cookie, and re-issues the cookie after the
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sets CORS headers on every response and short-circuits OPTIONS preflight
|
|
3
3
|
* with a 204. `origin: true` reflects the request origin; an array reflects a
|
|
4
|
-
* matching origin and otherwise
|
|
4
|
+
* matching origin and otherwise sends no `Access-Control-Allow-Origin` at all,
|
|
5
|
+
* so the browser reports "origin not allowed" rather than an origin mismatch
|
|
6
|
+
* against whichever entry happened to be first.
|
|
5
7
|
*/
|
|
6
|
-
export declare const cors: import("
|
|
8
|
+
export declare const cors: import("./middleware.types.js").CorePikkuMiddlewareFactory<{
|
|
7
9
|
origin?: string | string[] | true;
|
|
8
10
|
methods?: string[];
|
|
9
11
|
headers?: string[];
|
|
10
12
|
exposeHeaders?: string[];
|
|
11
13
|
credentials?: boolean;
|
|
12
14
|
maxAge?: number;
|
|
13
|
-
}
|
|
14
|
-
logLevel?: import("../services/logger.js").LogLevel;
|
|
15
|
-
secrets?: {
|
|
16
|
-
requireAllowedHosts?: boolean;
|
|
17
|
-
};
|
|
18
|
-
workflow?: import("../ecosystem/agent.js").WorkflowServiceConfig;
|
|
19
|
-
webhook?: import("../services/webhook-service.js").WebhookServiceConfig;
|
|
20
|
-
postgres?: import("../types/core.types.js").PostgresConfig;
|
|
21
|
-
}>, import("../types/core.types.js").CoreUserSession>;
|
|
15
|
+
}>;
|
package/dist/middleware/cors.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { pikkuMiddleware, pikkuMiddlewareFactory } from '
|
|
1
|
+
import { pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
2
2
|
/**
|
|
3
3
|
* Sets CORS headers on every response and short-circuits OPTIONS preflight
|
|
4
4
|
* with a 204. `origin: true` reflects the request origin; an array reflects a
|
|
5
|
-
* matching origin and otherwise
|
|
5
|
+
* matching origin and otherwise sends no `Access-Control-Allow-Origin` at all,
|
|
6
|
+
* so the browser reports "origin not allowed" rather than an origin mismatch
|
|
7
|
+
* against whichever entry happened to be first.
|
|
6
8
|
*/
|
|
7
9
|
export const cors = pikkuMiddlewareFactory(({ origin = '*', methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], headers = ['Content-Type', 'Authorization', 'x-api-key'], exposeHeaders = [], credentials = false, maxAge = 86400, } = {}) => {
|
|
8
10
|
if (origin === '*' && credentials) {
|
|
@@ -11,7 +13,7 @@ export const cors = pikkuMiddlewareFactory(({ origin = '*', methods = ['GET', 'P
|
|
|
11
13
|
return pikkuMiddleware({
|
|
12
14
|
name: 'CORS',
|
|
13
15
|
description: 'Handles cross-origin requests including OPTIONS preflight',
|
|
14
|
-
func: async (
|
|
16
|
+
func: async (services, wires, next) => {
|
|
15
17
|
const request = wires.http?.request;
|
|
16
18
|
const response = wires.http?.response;
|
|
17
19
|
if (!request || !response) {
|
|
@@ -26,18 +28,23 @@ export const cors = pikkuMiddlewareFactory(({ origin = '*', methods = ['GET', 'P
|
|
|
26
28
|
allowedOrigin =
|
|
27
29
|
requestOrigin && origin.includes(requestOrigin)
|
|
28
30
|
? requestOrigin
|
|
29
|
-
:
|
|
31
|
+
: undefined;
|
|
32
|
+
if (requestOrigin && !allowedOrigin) {
|
|
33
|
+
services.logger.debug(`CORS: origin '${requestOrigin}' is not in the allowed list, omitting Access-Control-Allow-Origin`);
|
|
34
|
+
}
|
|
30
35
|
}
|
|
31
36
|
else {
|
|
32
37
|
allowedOrigin = origin;
|
|
33
38
|
}
|
|
34
|
-
|
|
39
|
+
if (allowedOrigin) {
|
|
40
|
+
response.header('Access-Control-Allow-Origin', allowedOrigin);
|
|
41
|
+
}
|
|
35
42
|
response.header('Access-Control-Allow-Methods', methods.join(', '));
|
|
36
43
|
response.header('Access-Control-Allow-Headers', headers.join(', '));
|
|
37
44
|
if (exposeHeaders.length > 0) {
|
|
38
45
|
response.header('Access-Control-Expose-Headers', exposeHeaders.join(', '));
|
|
39
46
|
}
|
|
40
|
-
if (credentials) {
|
|
47
|
+
if (credentials && allowedOrigin) {
|
|
41
48
|
response.header('Access-Control-Allow-Credentials', 'true');
|
|
42
49
|
}
|
|
43
50
|
if (origin === true || Array.isArray(origin)) {
|
|
@@ -6,3 +6,6 @@ export { cors } from './cors.js';
|
|
|
6
6
|
export { telemetryOuter, telemetryInner } from './telemetry.js';
|
|
7
7
|
export { addTagMiddleware, addTagMiddleware as addMiddleware, addGlobalMiddleware, runMiddleware, } from '../middleware-runner.js';
|
|
8
8
|
export { addGlobalPermission } from '../permissions.js';
|
|
9
|
+
export type { CorePikkuMiddleware, CorePikkuMiddlewareConfig, CorePikkuMiddlewareFactory, CorePikkuMiddlewareGroup, MiddlewareMetadata, MiddlewarePriority, } from './middleware.types.js';
|
|
10
|
+
export { pikkuAgentMiddleware, pikkuChannelMiddleware, pikkuChannelMiddlewareFactory, pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
11
|
+
export type { PikkuAgentMiddlewareHooks } from '../wirings/agent/agent.types.js';
|
package/dist/middleware/index.js
CHANGED
|
@@ -6,3 +6,4 @@ export { cors } from './cors.js';
|
|
|
6
6
|
export { telemetryOuter, telemetryInner } from './telemetry.js';
|
|
7
7
|
export { addTagMiddleware, addTagMiddleware as addMiddleware, addGlobalMiddleware, runMiddleware, } from '../middleware-runner.js';
|
|
8
8
|
export { addGlobalPermission } from '../permissions.js';
|
|
9
|
+
export { pikkuAgentMiddleware, pikkuChannelMiddleware, pikkuChannelMiddlewareFactory, pikkuMiddleware, pikkuMiddlewareFactory, } from './middleware-factories.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CoreSingletonServices, CoreUserSession } from '../types/core.types.js';
|
|
2
|
+
import type { CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory } from '../wirings/channel/channel.types.js';
|
|
3
|
+
import type { PikkuAgentMiddlewareHooks } from '../wirings/agent/agent.types.js';
|
|
4
|
+
import type { CorePikkuMiddleware, CorePikkuMiddlewareConfig, CorePikkuMiddlewareFactory } from './middleware.types.js';
|
|
5
|
+
export declare const pikkuMiddleware: <SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession>(middleware: CorePikkuMiddleware<SingletonServices, UserSession> | CorePikkuMiddlewareConfig<SingletonServices, UserSession>) => CorePikkuMiddleware<SingletonServices, UserSession>;
|
|
6
|
+
export declare const pikkuMiddlewareFactory: <In = any>(factory: CorePikkuMiddlewareFactory<In>) => CorePikkuMiddlewareFactory<In>;
|
|
7
|
+
export declare const pikkuChannelMiddleware: <SingletonServices extends CoreSingletonServices = CoreSingletonServices, Event = unknown>(middleware: CorePikkuChannelMiddleware<SingletonServices, Event>) => CorePikkuChannelMiddleware<SingletonServices, Event>;
|
|
8
|
+
export declare const pikkuChannelMiddlewareFactory: <In = any>(factory: CorePikkuChannelMiddlewareFactory<In>) => CorePikkuChannelMiddlewareFactory<In>;
|
|
9
|
+
export declare const pikkuAgentMiddleware: <State extends Record<string, unknown> = Record<string, unknown>, SingletonServices extends CoreSingletonServices = CoreSingletonServices>(hooks: PikkuAgentMiddlewareHooks<State, SingletonServices>) => PikkuAgentMiddlewareHooks<State, SingletonServices>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const pikkuMiddleware = (middleware) => {
|
|
2
|
+
if (typeof middleware === 'function')
|
|
3
|
+
return middleware;
|
|
4
|
+
const func = middleware.func;
|
|
5
|
+
if (middleware.priority) {
|
|
6
|
+
func.__priority = middleware.priority;
|
|
7
|
+
}
|
|
8
|
+
return func;
|
|
9
|
+
};
|
|
10
|
+
export const pikkuMiddlewareFactory = (factory) => {
|
|
11
|
+
return factory;
|
|
12
|
+
};
|
|
13
|
+
export const pikkuChannelMiddleware = (middleware) => {
|
|
14
|
+
return middleware;
|
|
15
|
+
};
|
|
16
|
+
export const pikkuChannelMiddlewareFactory = (factory) => {
|
|
17
|
+
return factory;
|
|
18
|
+
};
|
|
19
|
+
export const pikkuAgentMiddleware = (hooks) => hooks;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CoreSingletonServices, CoreUserSession, PikkuWire } from '../types/core.types.js';
|
|
2
|
+
export type CorePikkuMiddleware<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = (services: SingletonServices, wires: PikkuWire, next: () => Promise<void>) => Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Execution order: `highest` runs first (outermost in the onion), `lowest`
|
|
5
|
+
* runs last, closest to the function.
|
|
6
|
+
*/
|
|
7
|
+
export type MiddlewarePriority = 'highest' | 'high' | 'medium' | 'low' | 'lowest';
|
|
8
|
+
export type CorePikkuMiddlewareConfig<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = {
|
|
9
|
+
func: CorePikkuMiddleware<SingletonServices, UserSession>;
|
|
10
|
+
name?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
/** Execution priority. Lower runs first (outermost). Defaults to 'medium'. */
|
|
13
|
+
priority?: MiddlewarePriority;
|
|
14
|
+
};
|
|
15
|
+
export type CorePikkuMiddlewareFactory<In = any, SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = (input: In) => CorePikkuMiddleware<SingletonServices, UserSession>;
|
|
16
|
+
export type CorePikkuMiddlewareGroup<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = Array<CorePikkuMiddleware<SingletonServices, UserSession> | CorePikkuMiddlewareFactory<any, SingletonServices, UserSession>>;
|
|
17
|
+
export type MiddlewareMetadata = {
|
|
18
|
+
type: 'http';
|
|
19
|
+
route: string;
|
|
20
|
+
} | {
|
|
21
|
+
type: 'tag';
|
|
22
|
+
tag: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'wire';
|
|
25
|
+
name: string;
|
|
26
|
+
inline?: boolean;
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export declare const pikkuRemoteAuthMiddleware: import("
|
|
1
|
+
export declare const pikkuRemoteAuthMiddleware: import("./middleware.types.js").CorePikkuMiddleware<import("../types/core.types.js").CoreSingletonServices<{
|
|
2
2
|
logLevel?: import("../services/logger.js").LogLevel;
|
|
3
3
|
secrets?: {
|
|
4
4
|
requireAllowedHosts?: boolean;
|
|
5
5
|
};
|
|
6
|
-
workflow?: import("../
|
|
6
|
+
workflow?: import("../wirings/workflow/workflow.types.js").WorkflowServiceConfig;
|
|
7
7
|
webhook?: import("../services/webhook-service.js").WebhookServiceConfig;
|
|
8
8
|
postgres?: import("../types/core.types.js").PostgresConfig;
|
|
9
9
|
}>, import("../types/core.types.js").CoreUserSession>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UnauthorizedError } from '../errors/errors.js';
|
|
2
|
-
import { pikkuMiddleware } from '
|
|
2
|
+
import { pikkuMiddleware } from './middleware-factories.js';
|
|
3
3
|
import { assertStrongKeyMaterial, decryptWithKeyMaterial, REMOTE_SESSION_INFO, } from '../crypto-utils.js';
|
|
4
4
|
const REMOTE_RPC_PREFIX = '/remote/rpc/';
|
|
5
5
|
/**
|