@pikku/core 0.12.84 → 0.12.88
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 +503 -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/dev/hot-reload.d.ts +1 -1
- package/dist/dev/hot-reload.js +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-memory.d.ts +11 -0
- package/dist/wirings/agent/agent-memory.js +17 -2
- 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 +117 -93
- 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 +12 -10
- 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 +15 -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 +15 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +22 -7
- package/dist/wirings/workflow/pikku-workflow-service.js +28 -29
- 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-step-claim.d.ts +16 -0
- package/dist/wirings/workflow/workflow-step-claim.js +27 -0
- 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-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +47 -0
- 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 +4 -1
- 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 +8 -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/hot-reload.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 +25 -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-memory.test.ts +73 -0
- package/src/wirings/agent/agent-memory.ts +16 -2
- package/src/wirings/agent/agent-middleware.types.test.ts +41 -0
- package/src/wirings/agent/agent-prepare.ts +8 -5
- package/src/wirings/agent/agent-runner.ts +2 -3
- package/src/wirings/agent/agent-stream-delegate.test.ts +381 -0
- package/src/wirings/agent/agent-stream.ts +160 -81
- package/src/wirings/agent/agent-utils.ts +19 -0
- package/src/wirings/agent/agent.types.ts +12 -11
- 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 +24 -0
- package/src/wirings/variable/validate-variable-definitions.ts +2 -0
- package/src/wirings/variable/variable.types.ts +15 -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 +83 -20
- package/src/wirings/workflow/pikku-workflow-service.ts +37 -35
- 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-step-claim.ts +46 -0
- 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 +4 -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
package/src/types/core.types.ts
CHANGED
|
@@ -4,11 +4,7 @@ import type { SecretService } from '../services/secret-service.js'
|
|
|
4
4
|
import type { SchemaService } from '../services/schema-service.js'
|
|
5
5
|
import type { JWTService } from '../services/jwt-service.js'
|
|
6
6
|
import type { PikkuHTTP } from '../wirings/http/http.types.js'
|
|
7
|
-
import type {
|
|
8
|
-
PikkuChannel,
|
|
9
|
-
CorePikkuChannelMiddleware,
|
|
10
|
-
CorePikkuChannelMiddlewareFactory,
|
|
11
|
-
} from '../wirings/channel/channel.types.js'
|
|
7
|
+
import type { PikkuChannel } from '../wirings/channel/channel.types.js'
|
|
12
8
|
import type { EventHubService } from '../wirings/channel/eventhub-service.js'
|
|
13
9
|
import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
|
|
14
10
|
import type { PikkuMCP } from '../wirings/mcp/mcp.types.js'
|
|
@@ -25,8 +21,6 @@ import type { PikkuScenarioWire } from '../wirings/workflow/scenario.types.js'
|
|
|
25
21
|
import type {
|
|
26
22
|
PikkuBrowserWire,
|
|
27
23
|
PikkuScenarioStepWire,
|
|
28
|
-
ScenarioStepKind,
|
|
29
|
-
ScenarioSurface,
|
|
30
24
|
} from '../wirings/workflow/scenario-step.types.js'
|
|
31
25
|
import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js'
|
|
32
26
|
import type { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
|
|
@@ -44,8 +38,9 @@ import type { AgentRunnerService } from '../services/agent-runner-service.js'
|
|
|
44
38
|
import type { AIEmbeddingService } from '../services/ai-embedding-service.js'
|
|
45
39
|
import type { AgentRunStateService } from '../services/agent-run-state-service.js'
|
|
46
40
|
import type { AgentRunService } from '../wirings/agent/agent.types.js'
|
|
41
|
+
import type { MiddlewareMetadata } from '../middleware/middleware.types.js'
|
|
42
|
+
import type { PermissionMetadata } from '../function/function-meta.types.js'
|
|
47
43
|
import type { VirtualUserRunStore } from '../wirings/virtual-user/virtual-user-run-store.js'
|
|
48
|
-
import type { PikkuAgentMiddlewareHooks } from '../wirings/agent/agent.types.js'
|
|
49
44
|
import type { WorkflowRunService } from '../wirings/workflow/workflow.types.js'
|
|
50
45
|
import type { CredentialService } from '../services/credential-service.js'
|
|
51
46
|
import type { EmailService } from '../services/email-service.js'
|
|
@@ -76,175 +71,6 @@ export type PikkuWiringTypes =
|
|
|
76
71
|
| 'agent'
|
|
77
72
|
| 'gateway'
|
|
78
73
|
|
|
79
|
-
export interface FunctionServicesMeta {
|
|
80
|
-
optimized: boolean
|
|
81
|
-
services: string[]
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface FunctionWiresMeta {
|
|
85
|
-
optimized: boolean
|
|
86
|
-
wires: string[]
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export type MiddlewareMetadata =
|
|
90
|
-
| {
|
|
91
|
-
type: 'http'
|
|
92
|
-
route: string // Route pattern (e.g., '*' for all, '/api/*' for specific)
|
|
93
|
-
}
|
|
94
|
-
| {
|
|
95
|
-
type: 'tag'
|
|
96
|
-
tag: string
|
|
97
|
-
}
|
|
98
|
-
| {
|
|
99
|
-
type: 'wire'
|
|
100
|
-
name: string
|
|
101
|
-
inline?: boolean
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* A reference to a permission function, resolved by name. Function-scoped
|
|
106
|
-
* only: there are no wire- or tag-level permission references.
|
|
107
|
-
*/
|
|
108
|
-
export type PermissionMetadata = {
|
|
109
|
-
type: 'wire'
|
|
110
|
-
name: string
|
|
111
|
-
inline?: boolean
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export type FunctionRuntimeMeta = {
|
|
115
|
-
pikkuFuncId: string
|
|
116
|
-
inputSchemaName: string | null
|
|
117
|
-
outputSchemaName: string | null
|
|
118
|
-
/** Scopes the session must hold to run this function. All are required (AND). */
|
|
119
|
-
scopes?: string[]
|
|
120
|
-
expose?: boolean
|
|
121
|
-
/**
|
|
122
|
-
* A sessionless function's own `auth: true`. `sessionless` carries the
|
|
123
|
-
* baseline — a `pikkuFunc` always requires a session — and this carries the
|
|
124
|
-
* tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
|
|
125
|
-
* know whether a function is gated without running it.
|
|
126
|
-
*/
|
|
127
|
-
auth?: boolean
|
|
128
|
-
/**
|
|
129
|
-
* The author's declaration that this function's permission check lives in its
|
|
130
|
-
* own body. Carries no runtime effect — it records a gate codegen cannot see,
|
|
131
|
-
* so an audit is not left to guess whether a sessionless function is open.
|
|
132
|
-
* Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
|
|
133
|
-
*/
|
|
134
|
-
permissionsInBody?: boolean
|
|
135
|
-
remote?: boolean
|
|
136
|
-
/**
|
|
137
|
-
* A step RPC: invoked by name only from a scenario run and refused
|
|
138
|
-
* everywhere else, so it is never network-callable.
|
|
139
|
-
*/
|
|
140
|
-
scenarioStep?: boolean
|
|
141
|
-
/**
|
|
142
|
-
* The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
|
|
143
|
-
* so it is held back from the app bootstrap and from every deployed unit.
|
|
144
|
-
*/
|
|
145
|
-
scenario?: boolean
|
|
146
|
-
mcp?: boolean
|
|
147
|
-
readonly?: boolean
|
|
148
|
-
deploy?: 'serverless' | 'server' | 'auto'
|
|
149
|
-
sessionless?: boolean
|
|
150
|
-
/** When true, workflow steps calling this function are dispatched via the queue. No queue service configured is a hard error. */
|
|
151
|
-
workflowQueued?: boolean
|
|
152
|
-
/** Retry count when this function is used as a workflow step. */
|
|
153
|
-
workflowRetries?: number
|
|
154
|
-
/** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
|
|
155
|
-
workflowTimeout?: string
|
|
156
|
-
/**
|
|
157
|
-
* Scenario steps only: which surfaces this step declares a binding for.
|
|
158
|
-
*
|
|
159
|
-
* The reporter derives coverage from this — a `then` with no binding for the
|
|
160
|
-
* surface the run targeted was never actually witnessed there, which is a gap
|
|
161
|
-
* worth counting rather than excusing.
|
|
162
|
-
*/
|
|
163
|
-
scenarioStepSurfaces?: ScenarioSurface[]
|
|
164
|
-
/**
|
|
165
|
-
* Scenario steps only: who acts. Absent means `persona` — the ordinary step,
|
|
166
|
-
* and the only kind that existed before the other two.
|
|
167
|
-
*
|
|
168
|
-
* A `platform` or `addon` step is the app or a third-party system acting, and
|
|
169
|
-
* it must never reach a virtual user's catalogue. That is not tidiness: a
|
|
170
|
-
* virtual user that can invoke "Stripe's webhook arrives" can forge its own
|
|
171
|
-
* payment success, and every finding downstream of that is worthless.
|
|
172
|
-
*/
|
|
173
|
-
scenarioStepKind?: ScenarioStepKind
|
|
174
|
-
/** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
|
|
175
|
-
scenarioStepAddon?: string
|
|
176
|
-
/** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
|
|
177
|
-
scenarioStepTemplate?: string
|
|
178
|
-
/**
|
|
179
|
-
* The function's `audit` config, resolved — `audit: true` reads as
|
|
180
|
-
* `{ durability: 'best-effort' }`. Absent means the function records nothing:
|
|
181
|
-
* `auditLog.write()` from an unmarked function is dropped with a warning, so
|
|
182
|
-
* this is the only place a reader can see which functions have a trail at all
|
|
183
|
-
* without running them.
|
|
184
|
-
*
|
|
185
|
-
* Informational. The runner resolves audit from the live function config, not
|
|
186
|
-
* from here, so meta and runtime cannot disagree about whether audit is on.
|
|
187
|
-
*/
|
|
188
|
-
audit?: {
|
|
189
|
-
durability: AuditDurability
|
|
190
|
-
}
|
|
191
|
-
version?: number
|
|
192
|
-
approvalRequired?: boolean
|
|
193
|
-
approvalDescription?: string
|
|
194
|
-
implementationHash?: string
|
|
195
|
-
contractHash?: string
|
|
196
|
-
inputHash?: string
|
|
197
|
-
outputHash?: string
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export type FunctionMeta = FunctionRuntimeMeta &
|
|
201
|
-
Partial<
|
|
202
|
-
{
|
|
203
|
-
name: string
|
|
204
|
-
/** `remote`: a contract with no local body, answered by a connected client. */
|
|
205
|
-
functionType: 'user' | 'inline' | 'helper' | 'remote'
|
|
206
|
-
funcWrapper: string
|
|
207
|
-
services: FunctionServicesMeta
|
|
208
|
-
wires: FunctionWiresMeta
|
|
209
|
-
inputs: string[] | null
|
|
210
|
-
outputs: string[] | null
|
|
211
|
-
middleware: MiddlewareMetadata[]
|
|
212
|
-
permissions: PermissionMetadata[]
|
|
213
|
-
isDirectFunction: boolean
|
|
214
|
-
sourceFile: string
|
|
215
|
-
exportedName: string
|
|
216
|
-
/** File containing the handler body when it differs from sourceFile (imported handlers) */
|
|
217
|
-
bodySourceFile?: string
|
|
218
|
-
/** 1-indexed first line of the handler body (verbose meta; coverage mapping) */
|
|
219
|
-
bodyStart: number
|
|
220
|
-
/** 1-indexed last line of the handler body (verbose meta; coverage mapping) */
|
|
221
|
-
bodyEnd: number
|
|
222
|
-
} & CommonWireMeta
|
|
223
|
-
>
|
|
224
|
-
|
|
225
|
-
export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>
|
|
226
|
-
export type FunctionsMeta = Record<string, FunctionMeta>
|
|
227
|
-
|
|
228
|
-
export type MakeRequired<T, K extends keyof T> = Omit<T, K> &
|
|
229
|
-
Required<Pick<T, K>>
|
|
230
|
-
|
|
231
|
-
export type JSONPrimitive = string | number | boolean | null | undefined
|
|
232
|
-
|
|
233
|
-
export type JSONValue =
|
|
234
|
-
| JSONPrimitive
|
|
235
|
-
| JSONValue[]
|
|
236
|
-
| {
|
|
237
|
-
[key: string]: JSONValue
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>
|
|
241
|
-
|
|
242
|
-
export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>
|
|
243
|
-
|
|
244
|
-
export type RequireAtLeastOne<T> = {
|
|
245
|
-
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
|
|
246
|
-
}[keyof T]
|
|
247
|
-
|
|
248
74
|
/**
|
|
249
75
|
* Runtime pool tuning for the Postgres adapter. The connection string stays
|
|
250
76
|
* the flat `postgresUrl` config field — the contract the CLI's db commands read.
|
|
@@ -371,6 +197,22 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
|
|
|
371
197
|
auth?: () => Promise<AuthInstance>
|
|
372
198
|
}
|
|
373
199
|
|
|
200
|
+
/**
|
|
201
|
+
* Reads a single credential. The first signature resolves the value type from
|
|
202
|
+
* the project's generated `CredentialsMap`; the second keeps a name the map
|
|
203
|
+
* does not know callable with an explicit type.
|
|
204
|
+
*
|
|
205
|
+
* `TCredentials` is unconstrained because the generated map is an interface,
|
|
206
|
+
* which has no implicit index signature and so cannot satisfy
|
|
207
|
+
* `Record<string, unknown>`.
|
|
208
|
+
*/
|
|
209
|
+
export type GetCredential<TCredentials = Record<string, unknown>> = {
|
|
210
|
+
<K extends keyof TCredentials & string>(
|
|
211
|
+
name: K
|
|
212
|
+
): TCredentials[K] | null | Promise<TCredentials[K] | null>
|
|
213
|
+
<T = unknown>(name: string): T | null | Promise<T | null>
|
|
214
|
+
}
|
|
215
|
+
|
|
374
216
|
export type PikkuWire<
|
|
375
217
|
In = unknown,
|
|
376
218
|
Out = unknown,
|
|
@@ -386,6 +228,7 @@ export type PikkuWire<
|
|
|
386
228
|
// `ScenarioContext`.
|
|
387
229
|
TypedScenario extends PikkuScenarioWire<any> | never = PikkuScenarioWire<any>,
|
|
388
230
|
TypedActors extends ScenarioPersonas = ScenarioPersonas,
|
|
231
|
+
TypedCredentials = Record<string, unknown>,
|
|
389
232
|
> = {
|
|
390
233
|
/** Always present — lazily initialised on first access for every function invocation */
|
|
391
234
|
rpc: TypedRPC
|
|
@@ -415,8 +258,18 @@ export type PikkuWire<
|
|
|
415
258
|
workflow: TypedWorkflow
|
|
416
259
|
scenario: TypedScenario
|
|
417
260
|
actors: TypedActors
|
|
261
|
+
/**
|
|
262
|
+
* The persona this step runs as, injected by the runner.
|
|
263
|
+
*
|
|
264
|
+
* Required on a `browser` binding, which cannot be provisioned without one,
|
|
265
|
+
* and on any binding whose step declares `actor: true`. A step that declares
|
|
266
|
+
* neither has no `actor` on its wire at all rather than an optional one —
|
|
267
|
+
* a pure assertion has nobody to be, and `attemptsSignIn` deliberately posts
|
|
268
|
+
* credentials instead of reusing an actor's session.
|
|
269
|
+
*/
|
|
270
|
+
actor: ScenarioPersonaOf<TypedActors>
|
|
418
271
|
/** Present on every scenario step invocation */
|
|
419
|
-
scenarioStep: PikkuScenarioStepWire
|
|
272
|
+
scenarioStep: PikkuScenarioStepWire
|
|
420
273
|
/** Present only when the runner provisioned a browser for this step */
|
|
421
274
|
browser: PikkuBrowserWire
|
|
422
275
|
workflowStep: WorkflowStepWire
|
|
@@ -435,11 +288,10 @@ export type PikkuWire<
|
|
|
435
288
|
/** Set a credential value (available in middleware) */
|
|
436
289
|
setCredential: (name: string, value: unknown) => void
|
|
437
290
|
/** Get a single credential by name — lazy-loads from CredentialService on first call, sync thereafter */
|
|
438
|
-
getCredential: <
|
|
291
|
+
getCredential: GetCredential<TypedCredentials>
|
|
439
292
|
/** Get all resolved credentials — lazy-loads from CredentialService on first call, sync thereafter */
|
|
440
293
|
getCredentials: () =>
|
|
441
|
-
| Record<string, unknown
|
|
442
|
-
| Promise<Record<string, unknown>>
|
|
294
|
+
Record<string, unknown> | Promise<Record<string, unknown>>
|
|
443
295
|
audit: {
|
|
444
296
|
durability: AuditDurability
|
|
445
297
|
}
|
|
@@ -462,100 +314,6 @@ export type PikkuWire<
|
|
|
462
314
|
/** Wire as constructed by runners, before the function runner lazily adds `rpc`. */
|
|
463
315
|
export type PikkuRawWire = Omit<PikkuWire, 'rpc'>
|
|
464
316
|
|
|
465
|
-
export type CorePikkuMiddleware<
|
|
466
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
467
|
-
UserSession extends CoreUserSession = CoreUserSession,
|
|
468
|
-
> = (
|
|
469
|
-
services: SingletonServices,
|
|
470
|
-
wires: PikkuWire,
|
|
471
|
-
next: () => Promise<void>
|
|
472
|
-
) => Promise<void>
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Execution order: `highest` runs first (outermost in the onion), `lowest`
|
|
476
|
-
* runs last, closest to the function.
|
|
477
|
-
*/
|
|
478
|
-
export type MiddlewarePriority =
|
|
479
|
-
| 'highest'
|
|
480
|
-
| 'high'
|
|
481
|
-
| 'medium'
|
|
482
|
-
| 'low'
|
|
483
|
-
| 'lowest'
|
|
484
|
-
|
|
485
|
-
export type CorePikkuMiddlewareConfig<
|
|
486
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
487
|
-
UserSession extends CoreUserSession = CoreUserSession,
|
|
488
|
-
> = {
|
|
489
|
-
func: CorePikkuMiddleware<SingletonServices, UserSession>
|
|
490
|
-
name?: string
|
|
491
|
-
description?: string
|
|
492
|
-
/** Execution priority. Lower runs first (outermost). Defaults to 'medium'. */
|
|
493
|
-
priority?: MiddlewarePriority
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
export type CorePikkuMiddlewareFactory<
|
|
497
|
-
In = any,
|
|
498
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
499
|
-
UserSession extends CoreUserSession = CoreUserSession,
|
|
500
|
-
> = (input: In) => CorePikkuMiddleware<SingletonServices, UserSession>
|
|
501
|
-
|
|
502
|
-
export type CorePikkuMiddlewareGroup<
|
|
503
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
504
|
-
UserSession extends CoreUserSession = CoreUserSession,
|
|
505
|
-
> = Array<
|
|
506
|
-
| CorePikkuMiddleware<SingletonServices, UserSession>
|
|
507
|
-
| CorePikkuMiddlewareFactory<any, SingletonServices, UserSession>
|
|
508
|
-
>
|
|
509
|
-
|
|
510
|
-
export const pikkuMiddleware = <
|
|
511
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
512
|
-
UserSession extends CoreUserSession = CoreUserSession,
|
|
513
|
-
>(
|
|
514
|
-
middleware:
|
|
515
|
-
| CorePikkuMiddleware<SingletonServices, UserSession>
|
|
516
|
-
| CorePikkuMiddlewareConfig<SingletonServices, UserSession>
|
|
517
|
-
): CorePikkuMiddleware<SingletonServices, UserSession> => {
|
|
518
|
-
if (typeof middleware === 'function') return middleware
|
|
519
|
-
const func = middleware.func as CorePikkuMiddleware<
|
|
520
|
-
SingletonServices,
|
|
521
|
-
UserSession
|
|
522
|
-
> & { __priority?: MiddlewarePriority }
|
|
523
|
-
if (middleware.priority) {
|
|
524
|
-
func.__priority = middleware.priority
|
|
525
|
-
}
|
|
526
|
-
return func
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
export const pikkuMiddlewareFactory = <In = any>(
|
|
530
|
-
factory: CorePikkuMiddlewareFactory<In>
|
|
531
|
-
): CorePikkuMiddlewareFactory<In> => {
|
|
532
|
-
return factory
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
export const pikkuChannelMiddleware = <
|
|
536
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
537
|
-
Event = unknown,
|
|
538
|
-
>(
|
|
539
|
-
middleware: CorePikkuChannelMiddleware<SingletonServices, Event>
|
|
540
|
-
): CorePikkuChannelMiddleware<SingletonServices, Event> => {
|
|
541
|
-
return middleware
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
export const pikkuChannelMiddlewareFactory = <In = any>(
|
|
545
|
-
factory: CorePikkuChannelMiddlewareFactory<In>
|
|
546
|
-
): CorePikkuChannelMiddlewareFactory<In> => {
|
|
547
|
-
return factory
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
export type { PikkuAgentMiddlewareHooks } from '../wirings/agent/agent.types.js'
|
|
551
|
-
|
|
552
|
-
export const pikkuAgentMiddleware = <
|
|
553
|
-
State extends Record<string, unknown> = Record<string, unknown>,
|
|
554
|
-
SingletonServices extends CoreSingletonServices = CoreSingletonServices,
|
|
555
|
-
>(
|
|
556
|
-
hooks: PikkuAgentMiddlewareHooks<State, SingletonServices>
|
|
557
|
-
): PikkuAgentMiddlewareHooks<State, SingletonServices> => hooks
|
|
558
|
-
|
|
559
317
|
export type CoreServices<SingletonServices = CoreSingletonServices> =
|
|
560
318
|
SingletonServices
|
|
561
319
|
|
|
@@ -666,16 +424,6 @@ export interface SecurityAuditReport {
|
|
|
666
424
|
summary: SecurityAuditSummary
|
|
667
425
|
}
|
|
668
426
|
|
|
669
|
-
export interface SerializedError {
|
|
670
|
-
message: string
|
|
671
|
-
stack?: string
|
|
672
|
-
code?: string
|
|
673
|
-
// Set for a deliberate PikkuError; survives step-boundary rehydration so
|
|
674
|
-
// the workflow runner logs the message alone rather than a stack trace.
|
|
675
|
-
expected?: boolean
|
|
676
|
-
[key: string]: any
|
|
677
|
-
}
|
|
678
|
-
|
|
679
427
|
/**
|
|
680
428
|
* A generated schema's declaration site, used by the credential/secret/variable
|
|
681
429
|
* definition validators to point conflicting definitions at their source.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
AuthInstance,
|
|
3
|
+
CommonWireMeta,
|
|
4
|
+
CoreConfig,
|
|
5
|
+
CoreServices,
|
|
6
|
+
CoreSingletonServices,
|
|
7
|
+
CoreUserSession,
|
|
8
|
+
CreateConfig,
|
|
9
|
+
CreateSingletonServices,
|
|
10
|
+
CreateWireServices,
|
|
11
|
+
GetCredential,
|
|
12
|
+
PikkuWire,
|
|
13
|
+
PikkuWiringTypes,
|
|
14
|
+
PostgresConfig,
|
|
15
|
+
SecretlessServices,
|
|
16
|
+
SecurityAuditIssue,
|
|
17
|
+
SecurityAuditReport,
|
|
18
|
+
SecurityAuditSummary,
|
|
19
|
+
SecurityAuditUpdate,
|
|
20
|
+
SecuritySeverity,
|
|
21
|
+
SecurityUpdateLevel,
|
|
22
|
+
ServerLifecycle,
|
|
23
|
+
WireServices,
|
|
24
|
+
} from './core.types.js'
|
|
25
|
+
export type * from './state.types.js'
|
package/src/types/state.types.ts
CHANGED
|
@@ -54,9 +54,6 @@ import type {
|
|
|
54
54
|
TriggerSourceMeta,
|
|
55
55
|
} from '../wirings/trigger/trigger.types.js'
|
|
56
56
|
import type {
|
|
57
|
-
FunctionsMeta,
|
|
58
|
-
CorePikkuMiddleware,
|
|
59
|
-
CorePikkuMiddlewareGroup,
|
|
60
57
|
CreateConfig,
|
|
61
58
|
CreateSingletonServices,
|
|
62
59
|
CreateWireServices,
|
|
@@ -65,6 +62,11 @@ import type {
|
|
|
65
62
|
CoreServices,
|
|
66
63
|
CoreUserSession,
|
|
67
64
|
} from './core.types.js'
|
|
65
|
+
import type { FunctionsMeta } from '../function/function-meta.types.js'
|
|
66
|
+
import type {
|
|
67
|
+
CorePikkuMiddleware,
|
|
68
|
+
CorePikkuMiddlewareGroup,
|
|
69
|
+
} from '../middleware/middleware.types.js'
|
|
68
70
|
import type { CorePikkuChannelMiddleware } from '../wirings/channel/channel.types.js'
|
|
69
71
|
|
|
70
72
|
export interface PikkuPackageState {
|
|
@@ -210,8 +212,7 @@ export interface PikkuPackageState {
|
|
|
210
212
|
/** The pikkuBetterAuth factory, self-registered when auth.ts is evaluated.
|
|
211
213
|
* pikkuServices reads it to build and inject the `auth` singleton. */
|
|
212
214
|
authFactory:
|
|
213
|
-
|
|
214
|
-
| null
|
|
215
|
+
((services: CoreSingletonServices) => unknown | Promise<unknown>) | null
|
|
215
216
|
credentialsMeta: Record<
|
|
216
217
|
string,
|
|
217
218
|
{ name: string; displayName: string; type: string; oauth2?: boolean }
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { describe, test } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
import type { CoreUserSession, GetCredential, PikkuWire } from './core.types.js'
|
|
4
|
+
import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
|
|
5
|
+
import type { PikkuWorkflowWire } from '../wirings/workflow/workflow.types.js'
|
|
6
|
+
import type { PikkuScenarioWire } from '../wirings/workflow/scenario.types.js'
|
|
7
|
+
import type { ScenarioPersonas } from '../services/personas-service.js'
|
|
8
|
+
|
|
9
|
+
interface CredentialsMap {
|
|
10
|
+
slack: { token: string }
|
|
11
|
+
stripe: { apiKey: string; accountId: string }
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type TypedWire = PikkuWire<
|
|
15
|
+
unknown,
|
|
16
|
+
unknown,
|
|
17
|
+
false,
|
|
18
|
+
CoreUserSession,
|
|
19
|
+
PikkuRPC,
|
|
20
|
+
null,
|
|
21
|
+
never,
|
|
22
|
+
PikkuWorkflowWire,
|
|
23
|
+
unknown,
|
|
24
|
+
PikkuScenarioWire<any>,
|
|
25
|
+
ScenarioPersonas,
|
|
26
|
+
CredentialsMap
|
|
27
|
+
>
|
|
28
|
+
|
|
29
|
+
const VALUES: Record<string, unknown> = {
|
|
30
|
+
slack: { token: 'xoxb-1' },
|
|
31
|
+
stripe: { apiKey: 'sk-1', accountId: 'acct-1' },
|
|
32
|
+
'not-in-the-map': { anything: true },
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Mirrors `createWireServicesCredentialWireProps`, so this also pins that a
|
|
36
|
+
// generic single-signature implementation still satisfies the overload pair.
|
|
37
|
+
const getCredential: NonNullable<TypedWire['getCredential']> = <T = unknown>(
|
|
38
|
+
name: string
|
|
39
|
+
) => (VALUES[name] ?? null) as T | null
|
|
40
|
+
|
|
41
|
+
describe('wire.getCredential is typed by the generated CredentialsMap', () => {
|
|
42
|
+
test('resolves a mapped name without an explicit type argument', async () => {
|
|
43
|
+
const slack: { token: string } | null | Promise<{ token: string } | null> =
|
|
44
|
+
getCredential('slack')
|
|
45
|
+
assert.deepEqual(await slack, { token: 'xoxb-1' })
|
|
46
|
+
|
|
47
|
+
const stripe = await getCredential('stripe')
|
|
48
|
+
assert.equal(stripe?.accountId, 'acct-1')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('rejects the wrong type for a mapped name', () => {
|
|
52
|
+
// @ts-expect-error 'slack' resolves to { token: string }, not a string
|
|
53
|
+
const wrong: string | null | Promise<string | null> = getCredential('slack')
|
|
54
|
+
assert.ok(wrong)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
test('keeps an unmapped name callable with an explicit type argument', async () => {
|
|
58
|
+
const other = await getCredential<{ anything: boolean }>('not-in-the-map')
|
|
59
|
+
assert.equal(other?.anything, true)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
test('falls back to unknown when no map is bound', async () => {
|
|
63
|
+
const untyped: GetCredential = <T = unknown>(name: string) =>
|
|
64
|
+
(VALUES[name] ?? null) as T | null
|
|
65
|
+
// @ts-expect-error no map is bound, so the value is unknown
|
|
66
|
+
const wrong: { token: string } | null = await untyped('slack')
|
|
67
|
+
assert.deepEqual(wrong, { token: 'xoxb-1' })
|
|
68
|
+
assert.deepEqual(await untyped<{ token: string }>('slack'), {
|
|
69
|
+
token: 'xoxb-1',
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
})
|
package/src/utils.ts
CHANGED
|
@@ -129,3 +129,37 @@ export const pikkuServerLifecycle = <
|
|
|
129
129
|
>(
|
|
130
130
|
lifecycle: ServerLifecycle<SS>
|
|
131
131
|
): ServerLifecycle<SS> => lifecycle
|
|
132
|
+
|
|
133
|
+
export type MakeRequired<T, K extends keyof T> = Omit<T, K> &
|
|
134
|
+
Required<Pick<T, K>>
|
|
135
|
+
|
|
136
|
+
export type JSONPrimitive = string | number | boolean | null | undefined
|
|
137
|
+
|
|
138
|
+
export type JSONValue =
|
|
139
|
+
| JSONPrimitive
|
|
140
|
+
| JSONValue[]
|
|
141
|
+
| {
|
|
142
|
+
[key: string]: JSONValue
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>
|
|
146
|
+
|
|
147
|
+
export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>
|
|
148
|
+
|
|
149
|
+
export type RequireAtLeastOne<T> = {
|
|
150
|
+
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
|
|
151
|
+
}[keyof T]
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
getDurationInMilliseconds,
|
|
155
|
+
getRelativeTimeOffset,
|
|
156
|
+
getRelativeTimeOffsetFromNow,
|
|
157
|
+
parseDurationString,
|
|
158
|
+
} from './time-utils.js'
|
|
159
|
+
export type { RelativeTimeInput } from './time-utils.js'
|
|
160
|
+
|
|
161
|
+
export {
|
|
162
|
+
formatVersionedId,
|
|
163
|
+
isVersionedId,
|
|
164
|
+
parseVersionedId,
|
|
165
|
+
} from './version.js'
|
|
@@ -4,7 +4,7 @@ import assert from 'node:assert/strict'
|
|
|
4
4
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
5
5
|
import { pikkuState, resetPikkuState } from '../../pikku-state.js'
|
|
6
6
|
import { MissingScopeError } from '../../errors/errors.js'
|
|
7
|
-
import { ContextAwareRPCService } from '
|
|
7
|
+
import { ContextAwareRPCService } from '../rpc/rpc-runner.js'
|
|
8
8
|
import { wireAddon } from './wire-addon.js'
|
|
9
9
|
|
|
10
10
|
const ADDON_PACKAGE = '@addon/console'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { wireAddon } from './wire-addon.js'
|
|
2
|
+
export type { WireAddonConfig } from './wire-addon.js'
|
|
3
|
+
export { wireRemoteAddon } from './wire-remote-addon.js'
|
|
4
|
+
export type {
|
|
5
|
+
WireRemoteAddonConfig,
|
|
6
|
+
RemoteAddonAuth,
|
|
7
|
+
} from './wire-remote-addon.js'
|
|
8
|
+
export {
|
|
9
|
+
resolveRemoteAddonToken,
|
|
10
|
+
RemoteAddonAuthError,
|
|
11
|
+
} from './remote-addon-auth.js'
|
|
12
|
+
export type { RemoteAddonAuthBinding } from './remote-addon-auth.js'
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { CoreServices, PikkuRawWire } from '../../types/core.types.js'
|
|
2
2
|
import { PikkuError, addError } from '../../errors/error-handler.js'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
isSecretValue,
|
|
5
|
+
type SecretValue,
|
|
6
|
+
} from '../../classification/secret-value.js'
|
|
4
7
|
|
|
5
8
|
export type RemoteAddonAuthBinding =
|
|
6
9
|
| { credentialId: string }
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js'
|
|
2
2
|
import { getTagGroups } from '../../utils.js'
|
|
3
|
-
import type { CorePikkuMiddleware } from '../../
|
|
4
|
-
|
|
3
|
+
import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js'
|
|
5
4
|
export type WireAddonConfig = {
|
|
6
5
|
name: string
|
|
7
6
|
package: string
|
|
@@ -143,6 +142,42 @@ export const resolveAddonAuth = (
|
|
|
143
142
|
(config) => config.auth === true
|
|
144
143
|
)
|
|
145
144
|
|
|
145
|
+
/**
|
|
146
|
+
* The package a namespaced function id belongs to, and the name that package
|
|
147
|
+
* publishes it under.
|
|
148
|
+
*
|
|
149
|
+
* A wiring that points at an addon function through `ref('ns:fn')` records
|
|
150
|
+
* `ns:fn` as its own function id — the same id every other wire type records —
|
|
151
|
+
* but the addon publishes its metadata under the bare `fn`, in its own package
|
|
152
|
+
* state. Without this the wire finds the function it registered and no metadata
|
|
153
|
+
* to run it by.
|
|
154
|
+
*
|
|
155
|
+
* The wiring itself stays the consuming app's, so `packageName` is the package
|
|
156
|
+
* the *wire* runs in, not the target's: it is null for a `ref()` the app wired,
|
|
157
|
+
* and only narrows the lookup when a wire really does run inside the addon.
|
|
158
|
+
*/
|
|
159
|
+
export const resolveAddonFunctionTarget = (
|
|
160
|
+
funcName: string,
|
|
161
|
+
packageName: string | null
|
|
162
|
+
): { packageName: string; localName: string } | null => {
|
|
163
|
+
const separator = funcName.indexOf(':')
|
|
164
|
+
if (separator === -1) {
|
|
165
|
+
return null
|
|
166
|
+
}
|
|
167
|
+
const namespace = funcName.slice(0, separator)
|
|
168
|
+
const config = pikkuState(null, 'addons', 'packages').get(namespace)
|
|
169
|
+
if (!config) {
|
|
170
|
+
return null
|
|
171
|
+
}
|
|
172
|
+
if (packageName && config.package !== packageName) {
|
|
173
|
+
return null
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
packageName: config.package,
|
|
177
|
+
localName: funcName.slice(separator + 1),
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
146
181
|
/**
|
|
147
182
|
* Addon tags name middleware the *consuming app* registered, so they resolve
|
|
148
183
|
* against the root tag groups rather than the addon package's own.
|