@pikku/core 0.12.106 → 0.12.111
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 +358 -0
- package/dist/analytics/analytics.d.ts +6 -0
- package/dist/analytics/analytics.js +58 -0
- package/dist/analytics/analytics.types.d.ts +156 -0
- package/dist/analytics/analytics.types.js +1 -0
- package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
- package/dist/analytics/anonymous-analytics-identity.js +27 -0
- package/dist/analytics/compose-analytics-identity.d.ts +14 -0
- package/dist/analytics/compose-analytics-identity.js +33 -0
- package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
- package/dist/analytics/cookie-analytics-identity.js +37 -0
- package/dist/analytics/define-analytics-events.d.ts +22 -0
- package/dist/analytics/define-analytics-events.js +9 -0
- package/dist/analytics/fan-out-analytics.d.ts +15 -0
- package/dist/analytics/fan-out-analytics.js +36 -0
- package/dist/analytics/index.d.ts +13 -0
- package/dist/analytics/index.js +8 -0
- package/dist/analytics/logger-analytics-service.d.ts +14 -0
- package/dist/analytics/logger-analytics-service.js +23 -0
- package/dist/analytics/mint-cookie.d.ts +44 -0
- package/dist/analytics/mint-cookie.js +55 -0
- package/dist/errors/errors.d.ts +7 -0
- package/dist/errors/errors.js +17 -0
- package/dist/function/function-meta.types.d.ts +2 -0
- package/dist/function/function-runner.js +29 -0
- package/dist/function/functions.types.d.ts +22 -3
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/pikku-state.d.ts +1 -1
- package/dist/scopes.d.ts +11 -0
- package/dist/scopes.js +17 -0
- package/dist/services/credential-wire-service.d.ts +1 -1
- package/dist/services/feature-flag-service.d.ts +100 -0
- package/dist/services/feature-flag-service.js +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/meta-service.d.ts +16 -0
- package/dist/services/meta-service.js +19 -0
- package/dist/services/webhook-service.d.ts +7 -2
- package/dist/services/webhook-service.js +11 -6
- package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
- package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
- package/dist/types/core.types.d.ts +23 -0
- package/dist/wirings/agent/agent-rpc.d.ts +1 -1
- package/dist/wirings/agent/agent-turn.d.ts +1 -1
- package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
- package/dist/wirings/channel/channel-common.d.ts +1 -1
- package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
- package/dist/wirings/channel/channel-runner.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
- package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
- package/dist/wirings/flag/assert-feature-available.js +23 -0
- package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
- package/dist/wirings/flag/cached-flag-source.js +96 -0
- package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
- package/dist/wirings/flag/define-feature-flags.js +32 -0
- package/dist/wirings/flag/flag.types.d.ts +97 -0
- package/dist/wirings/flag/flag.types.js +1 -0
- package/dist/wirings/flag/index.d.ts +7 -0
- package/dist/wirings/flag/index.js +5 -0
- package/dist/wirings/flag/resolve-flag.d.ts +52 -0
- package/dist/wirings/flag/resolve-flag.js +90 -0
- package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
- package/dist/wirings/flag/validate-flag-definitions.js +103 -0
- package/dist/wirings/rpc/rpc-runner.js +3 -0
- package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
- package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
- package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
- package/package.json +11 -5
- package/run-tests.sh +17 -9
- package/src/public-surface.json +26 -0
- package/src/agent-naming.test.ts +0 -68
- package/src/api-report.test.ts +0 -138
- package/src/app-alias-surface.test.ts +0 -179
- package/src/app-leaf-surface.test.ts +0 -222
- package/src/bootstrap-compat/root.ts +0 -20
- package/src/classification/column-form.test.ts +0 -97
- package/src/classification/column-form.ts +0 -55
- package/src/classification/data-classification.ts +0 -73
- package/src/classification/index.ts +0 -40
- package/src/classification/key-ids.ts +0 -2
- package/src/classification/secret-value.test.ts +0 -204
- package/src/classification/secret-value.ts +0 -106
- package/src/crypto-utils.test.ts +0 -668
- package/src/crypto-utils.ts +0 -460
- package/src/dev/hot-reload.test.ts +0 -587
- package/src/dev/hot-reload.ts +0 -225
- package/src/dev/module-runner.test.ts +0 -235
- package/src/dev/module-runner.ts +0 -138
- package/src/dev/reload-meta.test.ts +0 -183
- package/src/dev/reload-meta.ts +0 -144
- package/src/ecosystem-tier-removed.test.ts +0 -72
- package/src/env.ts +0 -1
- package/src/errors/error-handler.ts +0 -77
- package/src/errors/error.test.ts +0 -229
- package/src/errors/errors.ts +0 -393
- package/src/errors/index.ts +0 -11
- package/src/errors/serialized-error.ts +0 -12
- package/src/factory-functions.test.ts +0 -111
- package/src/function/abort-scope.test.ts +0 -97
- package/src/function/abort-scope.ts +0 -80
- package/src/function/function-meta.types.ts +0 -151
- package/src/function/function-runner.test.ts +0 -1619
- package/src/function/function-runner.ts +0 -499
- package/src/function/functions.types.ts +0 -319
- package/src/function/index.ts +0 -40
- package/src/function/list.types.test.ts +0 -100
- package/src/function/list.types.ts +0 -69
- package/src/function/pikku-request.test.ts +0 -35
- package/src/function/pikku-request.ts +0 -17
- package/src/gopass-secrets-removed.test.ts +0 -51
- package/src/handle-error.test.ts +0 -532
- package/src/handle-error.ts +0 -64
- package/src/middleware/auth-apikey.test.ts +0 -362
- package/src/middleware/auth-apikey.ts +0 -39
- package/src/middleware/auth-bearer.test.ts +0 -566
- package/src/middleware/auth-bearer.ts +0 -83
- package/src/middleware/auth-cookie.test.ts +0 -572
- package/src/middleware/auth-cookie.ts +0 -107
- package/src/middleware/cors.test.ts +0 -579
- package/src/middleware/cors.ts +0 -103
- package/src/middleware/index.ts +0 -30
- package/src/middleware/middleware-factories.ts +0 -76
- package/src/middleware/middleware.types.ts +0 -61
- package/src/middleware/remote-auth.test.ts +0 -547
- package/src/middleware/remote-auth.ts +0 -95
- package/src/middleware/remote-jobs-secret.ts +0 -35
- package/src/middleware/require-origin.test.ts +0 -115
- package/src/middleware/require-origin.ts +0 -79
- package/src/middleware/telemetry.ts +0 -83
- package/src/middleware-runner.test.ts +0 -578
- package/src/middleware-runner.ts +0 -232
- package/src/no-any-casts.test.ts +0 -57
- package/src/no-root-barrel.test.ts +0 -122
- package/src/permissions.test.ts +0 -256
- package/src/permissions.ts +0 -217
- package/src/pikku-state.test.ts +0 -198
- package/src/pikku-state.ts +0 -206
- package/src/production-barrels-stay-lean.test.ts +0 -110
- package/src/public-surface.test.ts +0 -133
- package/src/remote.test.ts +0 -173
- package/src/remote.ts +0 -56
- package/src/removed-legacy-exports.test.ts +0 -66
- package/src/run-tests-script.test.ts +0 -67
- package/src/schema.test.ts +0 -430
- package/src/schema.ts +0 -204
- package/src/scopes.test.ts +0 -203
- package/src/scopes.ts +0 -67
- package/src/services/agent-run-state-service.ts +0 -37
- package/src/services/agent-runner-service.ts +0 -238
- package/src/services/agent-storage-service.ts +0 -39
- package/src/services/ai-embedding-service.ts +0 -9
- package/src/services/audit-service.test.ts +0 -44
- package/src/services/audit-service.ts +0 -280
- package/src/services/content-service.ts +0 -65
- package/src/services/credential-service.ts +0 -20
- package/src/services/credential-wire-service.test.ts +0 -235
- package/src/services/credential-wire-service.ts +0 -120
- package/src/services/deployment-service.ts +0 -32
- package/src/services/email-service.test.ts +0 -100
- package/src/services/email-service.ts +0 -60
- package/src/services/email-template.test.ts +0 -311
- package/src/services/email-template.ts +0 -254
- package/src/services/file-scenario-run-store.test.ts +0 -349
- package/src/services/file-scenario-run-store.ts +0 -282
- package/src/services/gateway-service.ts +0 -5
- package/src/services/http-personas-converse.test.ts +0 -274
- package/src/services/http-personas.test.ts +0 -379
- package/src/services/http-personas.ts +0 -508
- package/src/services/in-memory-agent-run-state-service.ts +0 -87
- package/src/services/in-memory-queue-service.test.ts +0 -162
- package/src/services/in-memory-queue-service.ts +0 -78
- package/src/services/in-memory-session-store.test.ts +0 -58
- package/src/services/in-memory-session-store.ts +0 -20
- package/src/services/in-memory-trigger-service.ts +0 -47
- package/src/services/in-memory-workflow-service.test.ts +0 -430
- package/src/services/in-memory-workflow-service.ts +0 -595
- package/src/services/index.ts +0 -192
- package/src/services/istanbul-coverage-service.test.ts +0 -66
- package/src/services/istanbul-coverage-service.ts +0 -59
- package/src/services/jwt-service.ts +0 -15
- package/src/services/local-content-request-handler.test.ts +0 -240
- package/src/services/local-content-request-handler.ts +0 -295
- package/src/services/local-content.test.ts +0 -186
- package/src/services/local-content.ts +0 -242
- package/src/services/local-credential-service.ts +0 -63
- package/src/services/local-email-service.test.ts +0 -182
- package/src/services/local-email-service.ts +0 -43
- package/src/services/local-gateway-service.ts +0 -51
- package/src/services/local-secrets.test.ts +0 -95
- package/src/services/local-secrets.ts +0 -71
- package/src/services/local-variables.test.ts +0 -61
- package/src/services/local-variables.ts +0 -45
- package/src/services/logger-console.test.ts +0 -117
- package/src/services/logger-console.ts +0 -174
- package/src/services/logger.ts +0 -48
- package/src/services/meta-service.test.ts +0 -75
- package/src/services/meta-service.ts +0 -767
- package/src/services/persona-actor-secret.test.ts +0 -68
- package/src/services/persona-actor-secret.ts +0 -70
- package/src/services/persona-sign-in.test.ts +0 -219
- package/src/services/persona-sign-in.ts +0 -238
- package/src/services/personas-service.ts +0 -191
- package/src/services/pikku-user-id.test.ts +0 -62
- package/src/services/pikku-user-id.ts +0 -13
- package/src/services/queue-webhook-service.test.ts +0 -409
- package/src/services/queue-webhook-service.ts +0 -150
- package/src/services/remote-jobs.test.ts +0 -106
- package/src/services/remote-jobs.ts +0 -92
- package/src/services/scheduler-service.ts +0 -37
- package/src/services/schema-service.ts +0 -10
- package/src/services/scope-service.ts +0 -91
- package/src/services/scoped-credential-service.test.ts +0 -86
- package/src/services/scoped-credential-service.ts +0 -63
- package/src/services/scoped-secret-service.test.ts +0 -93
- package/src/services/scoped-secret-service.ts +0 -40
- package/src/services/secret-host-binding.test.ts +0 -138
- package/src/services/secret-host-binding.ts +0 -51
- package/src/services/secret-service.ts +0 -25
- package/src/services/secretless.test.ts +0 -54
- package/src/services/secretless.ts +0 -29
- package/src/services/session-store.ts +0 -9
- package/src/services/stub-tracker.test.ts +0 -104
- package/src/services/stub-tracker.ts +0 -175
- package/src/services/system-role-guard.test.ts +0 -96
- package/src/services/system-role-guard.ts +0 -71
- package/src/services/temporary-file-service.ts +0 -76
- package/src/services/trigger-service.ts +0 -5
- package/src/services/typed-credential-service.ts +0 -83
- package/src/services/typed-secret-service.test.ts +0 -204
- package/src/services/typed-secret-service.ts +0 -132
- package/src/services/typed-variables-service.test.ts +0 -166
- package/src/services/typed-variables-service.ts +0 -166
- package/src/services/user-session-service.test.ts +0 -147
- package/src/services/user-session-service.ts +0 -85
- package/src/services/v8-coverage-service.test.ts +0 -69
- package/src/services/v8-coverage-service.ts +0 -163
- package/src/services/variables-service.ts +0 -13
- package/src/services/webhook-service.ts +0 -147
- package/src/services/workflow-service.ts +0 -120
- package/src/side-effects-are-declared.test.ts +0 -84
- package/src/source-files-stay-composable.test.ts +0 -41
- package/src/template-alias-surface.test.ts +0 -240
- package/src/test-utils.ts +0 -38
- package/src/testing/index.ts +0 -3
- package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
- package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
- package/src/testing/service-tests/channel-store-tests.ts +0 -98
- package/src/testing/service-tests/credential-service-tests.ts +0 -143
- package/src/testing/service-tests/deployment-service-tests.ts +0 -33
- package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
- package/src/testing/service-tests/secret-service-tests.ts +0 -105
- package/src/testing/service-tests/session-store-tests.ts +0 -62
- package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
- package/src/testing/service-tests/workflow-service-tests.ts +0 -308
- package/src/testing/service-tests.ts +0 -95
- package/src/time-utils.test.ts +0 -56
- package/src/time-utils.ts +0 -89
- package/src/types/core.types.ts +0 -446
- package/src/types/index.ts +0 -25
- package/src/types/state.types.ts +0 -226
- package/src/types/typed-credentials.test.ts +0 -72
- package/src/utils/hash.test.ts +0 -68
- package/src/utils/hash.ts +0 -26
- package/src/utils/hmac.ts +0 -21
- package/src/utils/node-host-resolver.ts +0 -20
- package/src/utils/safe-fetch.test.ts +0 -515
- package/src/utils/safe-fetch.ts +0 -347
- package/src/utils.test.ts +0 -359
- package/src/utils.ts +0 -165
- package/src/version.test.ts +0 -80
- package/src/version.ts +0 -25
- package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
- package/src/wirings/actor-flow/index.ts +0 -10
- package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
- package/src/wirings/actor-flow/run-conversation.ts +0 -280
- package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
- package/src/wirings/addon/addon-runner.ts +0 -236
- package/src/wirings/addon/addon-scopes.test.ts +0 -225
- package/src/wirings/addon/addon-secrets.test.ts +0 -391
- package/src/wirings/addon/index.ts +0 -12
- package/src/wirings/addon/remote-addon-auth.ts +0 -65
- package/src/wirings/addon/wire-addon.test.ts +0 -102
- package/src/wirings/addon/wire-addon.ts +0 -202
- package/src/wirings/addon/wire-remote-addon.ts +0 -41
- package/src/wirings/agent/agent-agui.test.ts +0 -1213
- package/src/wirings/agent/agent-agui.ts +0 -405
- package/src/wirings/agent/agent-authorization.test.ts +0 -208
- package/src/wirings/agent/agent-finalize.test.ts +0 -187
- package/src/wirings/agent/agent-finalize.ts +0 -197
- package/src/wirings/agent/agent-helpers.test.ts +0 -215
- package/src/wirings/agent/agent-helpers.ts +0 -96
- package/src/wirings/agent/agent-interrupt.test.ts +0 -833
- package/src/wirings/agent/agent-interrupt.ts +0 -400
- package/src/wirings/agent/agent-memory.test.ts +0 -397
- package/src/wirings/agent/agent-memory.ts +0 -496
- package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
- package/src/wirings/agent/agent-model-config.test.ts +0 -103
- package/src/wirings/agent/agent-model-config.ts +0 -59
- package/src/wirings/agent/agent-prepare.test.ts +0 -977
- package/src/wirings/agent/agent-prepare.ts +0 -1083
- package/src/wirings/agent/agent-registry.test.ts +0 -455
- package/src/wirings/agent/agent-registry.ts +0 -99
- package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
- package/src/wirings/agent/agent-rpc.ts +0 -116
- package/src/wirings/agent/agent-runner.test.ts +0 -1229
- package/src/wirings/agent/agent-runner.ts +0 -858
- package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
- package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
- package/src/wirings/agent/agent-stream.test.ts +0 -1800
- package/src/wirings/agent/agent-stream.ts +0 -1639
- package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
- package/src/wirings/agent/agent-turn.test.ts +0 -65
- package/src/wirings/agent/agent-turn.ts +0 -122
- package/src/wirings/agent/agent-utils.ts +0 -20
- package/src/wirings/agent/agent.types.ts +0 -676
- package/src/wirings/agent/index.ts +0 -58
- package/src/wirings/agent/voice-input.test.ts +0 -220
- package/src/wirings/agent/voice-input.ts +0 -180
- package/src/wirings/agent/voice-output.test.ts +0 -510
- package/src/wirings/agent/voice-output.ts +0 -311
- package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
- package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
- package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
- package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
- package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
- package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
- package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
- package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
- package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
- package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
- package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
- package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
- package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
- package/src/wirings/agent-scorer/index.ts +0 -23
- package/src/wirings/channel/channel-common.ts +0 -102
- package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
- package/src/wirings/channel/channel-handler.test.ts +0 -322
- package/src/wirings/channel/channel-handler.ts +0 -259
- package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
- package/src/wirings/channel/channel-host-rpc.ts +0 -69
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
- package/src/wirings/channel/channel-middleware-runner.ts +0 -126
- package/src/wirings/channel/channel-rpc-registry.ts +0 -116
- package/src/wirings/channel/channel-rpc-responder.ts +0 -117
- package/src/wirings/channel/channel-rpc-service.ts +0 -132
- package/src/wirings/channel/channel-rpc-validators.ts +0 -65
- package/src/wirings/channel/channel-rpc.test.ts +0 -841
- package/src/wirings/channel/channel-rpc.ts +0 -5
- package/src/wirings/channel/channel-rpc.types.ts +0 -160
- package/src/wirings/channel/channel-runner.ts +0 -164
- package/src/wirings/channel/channel-store.ts +0 -35
- package/src/wirings/channel/channel.types.ts +0 -193
- package/src/wirings/channel/define-channel-routes.ts +0 -5
- package/src/wirings/channel/eventhub-service.ts +0 -16
- package/src/wirings/channel/eventhub-store.ts +0 -13
- package/src/wirings/channel/index.ts +0 -40
- package/src/wirings/channel/local/index.ts +0 -3
- package/src/wirings/channel/local/local-channel-handler.ts +0 -98
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
- package/src/wirings/channel/local/local-channel-runner.ts +0 -271
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
- package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
- package/src/wirings/channel/log-channels.ts +0 -16
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
- package/src/wirings/channel/serverless/index.ts +0 -6
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
- package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
- package/src/wirings/cli/channel/cli-approval.ts +0 -135
- package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
- package/src/wirings/cli/channel/index.ts +0 -6
- package/src/wirings/cli/cli-runner.test.ts +0 -969
- package/src/wirings/cli/cli-runner.ts +0 -538
- package/src/wirings/cli/cli.types.ts +0 -388
- package/src/wirings/cli/command-parser.test.ts +0 -1120
- package/src/wirings/cli/command-parser.ts +0 -713
- package/src/wirings/cli/define-cli-commands.ts +0 -13
- package/src/wirings/cli/format-cli-error.test.ts +0 -91
- package/src/wirings/cli/format-cli-error.ts +0 -96
- package/src/wirings/cli/index.ts +0 -19
- package/src/wirings/credential/credential.types.ts +0 -37
- package/src/wirings/credential/define-credential.ts +0 -49
- package/src/wirings/credential/index.ts +0 -7
- package/src/wirings/credential/validate-credential-definitions.ts +0 -63
- package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
- package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
- package/src/wirings/gateway/gateway-runner.test.ts +0 -581
- package/src/wirings/gateway/gateway-runner.ts +0 -411
- package/src/wirings/gateway/gateway.types.ts +0 -137
- package/src/wirings/gateway/index.ts +0 -15
- package/src/wirings/http/http-routes.test.ts +0 -318
- package/src/wirings/http/http-routes.ts +0 -111
- package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
- package/src/wirings/http/http-runner.test.ts +0 -503
- package/src/wirings/http/http-runner.ts +0 -462
- package/src/wirings/http/http.types.ts +0 -307
- package/src/wirings/http/index.ts +0 -27
- package/src/wirings/http/log-http-routes.ts +0 -18
- package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
- package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
- package/src/wirings/http/routers/http-router.ts +0 -13
- package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
- package/src/wirings/http/routers/path-to-regex.ts +0 -115
- package/src/wirings/http/web-request.test.ts +0 -382
- package/src/wirings/http/web-request.ts +0 -162
- package/src/wirings/mcp/index.ts +0 -26
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
- package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
- package/src/wirings/mcp/mcp-runner.test.ts +0 -588
- package/src/wirings/mcp/mcp-runner.ts +0 -330
- package/src/wirings/mcp/mcp.types.ts +0 -199
- package/src/wirings/node/index.ts +0 -2
- package/src/wirings/node/node.types.ts +0 -23
- package/src/wirings/oauth2/index.ts +0 -1
- package/src/wirings/oauth2/oauth2.types.ts +0 -12
- package/src/wirings/persona/define-personas.ts +0 -33
- package/src/wirings/persona/index.ts +0 -75
- package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
- package/src/wirings/persona/persona-app-scopes.ts +0 -74
- package/src/wirings/persona/persona-email.ts +0 -87
- package/src/wirings/persona/persona-environments.test.ts +0 -194
- package/src/wirings/persona/persona-environments.ts +0 -138
- package/src/wirings/persona/persona-mailbox.ts +0 -156
- package/src/wirings/persona/persona.test.ts +0 -230
- package/src/wirings/persona/persona.types.ts +0 -156
- package/src/wirings/persona/validate-personas.ts +0 -137
- package/src/wirings/queue/index.ts +0 -29
- package/src/wirings/queue/queue-identity.test.ts +0 -454
- package/src/wirings/queue/queue-identity.ts +0 -176
- package/src/wirings/queue/queue-runner.test.ts +0 -705
- package/src/wirings/queue/queue-runner.ts +0 -181
- package/src/wirings/queue/queue.types.ts +0 -161
- package/src/wirings/queue/register-queue-helper.ts +0 -46
- package/src/wirings/queue/signed-queue-service.ts +0 -60
- package/src/wirings/queue/validate-worker-config.test.ts +0 -108
- package/src/wirings/queue/validate-worker-config.ts +0 -90
- package/src/wirings/role/define-system-role.ts +0 -33
- package/src/wirings/role/index.ts +0 -13
- package/src/wirings/role/role.test.ts +0 -104
- package/src/wirings/role/role.types.ts +0 -47
- package/src/wirings/role/validate-role-definitions.ts +0 -93
- package/src/wirings/rpc/index.ts +0 -8
- package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
- package/src/wirings/rpc/rpc-runner.ts +0 -566
- package/src/wirings/rpc/rpc-types.ts +0 -87
- package/src/wirings/scheduler/index.ts +0 -11
- package/src/wirings/scheduler/log-schedulers.ts +0 -16
- package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
- package/src/wirings/scheduler/scheduler-runner.ts +0 -138
- package/src/wirings/scheduler/scheduler.types.ts +0 -42
- package/src/wirings/scope/define-scope.ts +0 -33
- package/src/wirings/scope/index.ts +0 -15
- package/src/wirings/scope/scope.test.ts +0 -159
- package/src/wirings/scope/scope.types.ts +0 -42
- package/src/wirings/scope/validate-scope-definitions.ts +0 -107
- package/src/wirings/secret/index.ts +0 -9
- package/src/wirings/secret/secret.types.ts +0 -70
- package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
- package/src/wirings/secret/validate-secret-definitions.ts +0 -88
- package/src/wirings/trigger/index.ts +0 -9
- package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
- package/src/wirings/trigger/trigger-runner.test.ts +0 -78
- package/src/wirings/trigger/trigger-runner.ts +0 -113
- package/src/wirings/trigger/trigger.types.ts +0 -100
- package/src/wirings/variable/index.ts +0 -8
- package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
- package/src/wirings/variable/validate-variable-definitions.ts +0 -71
- package/src/wirings/variable/variable.types.ts +0 -40
- package/src/wirings/virtual-user/index.ts +0 -107
- package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
- package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
- package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
- package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
- package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
- package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
- package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
- package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
- package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
- package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
- package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
- package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
- package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
- package/src/wirings/workflow/feature.test.ts +0 -131
- package/src/wirings/workflow/feature.ts +0 -59
- package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
- package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
- package/src/wirings/workflow/graph/graph-node.ts +0 -115
- package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
- package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
- package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
- package/src/wirings/workflow/graph/graph-validation.ts +0 -41
- package/src/wirings/workflow/graph/template.test.ts +0 -49
- package/src/wirings/workflow/graph/template.ts +0 -42
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
- package/src/wirings/workflow/index.ts +0 -107
- package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
- package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
- package/src/wirings/workflow/run-timeline.test.ts +0 -199
- package/src/wirings/workflow/run-timeline.ts +0 -185
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
- package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
- package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
- package/src/wirings/workflow/scenario-poll.test.ts +0 -64
- package/src/wirings/workflow/scenario-poll.ts +0 -27
- package/src/wirings/workflow/scenario-prose.test.ts +0 -275
- package/src/wirings/workflow/scenario-prose.ts +0 -86
- package/src/wirings/workflow/scenario-run.types.ts +0 -193
- package/src/wirings/workflow/scenario-service.test.ts +0 -147
- package/src/wirings/workflow/scenario-step-guards.ts +0 -23
- package/src/wirings/workflow/scenario-step.test.ts +0 -800
- package/src/wirings/workflow/scenario-step.types.ts +0 -262
- package/src/wirings/workflow/scenario-surface.test.ts +0 -146
- package/src/wirings/workflow/scenario-surface.ts +0 -71
- package/src/wirings/workflow/scenario.types.ts +0 -63
- package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
- package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
- package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
- package/src/wirings/workflow/workflow-approval.ts +0 -290
- package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
- package/src/wirings/workflow/workflow-constants.ts +0 -66
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
- package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
- package/src/wirings/workflow/workflow-errors.ts +0 -132
- package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
- package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
- package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
- package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
- package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
- package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
- package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
- package/src/wirings/workflow/workflow-recovery.ts +0 -192
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
- package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
- package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
- package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
- package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
- package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
- package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
- package/src/wirings/workflow/workflow-status-stream.ts +0 -144
- package/src/wirings/workflow/workflow-step-claim.ts +0 -46
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
- package/src/wirings/workflow/workflow-suspend.ts +0 -61
- package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
- package/src/wirings/workflow/workflow.types.ts +0 -268
- package/src/wirings-stay-decoupled.test.ts +0 -130
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.type-tests.json +0 -15
package/src/middleware-runner.ts
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import type { PikkuWiringTypes } from './types/core.types.js'
|
|
2
|
-
import type {
|
|
3
|
-
CorePikkuMiddleware,
|
|
4
|
-
CorePikkuMiddlewareGroup,
|
|
5
|
-
MiddlewareMetadata,
|
|
6
|
-
MiddlewarePriority,
|
|
7
|
-
} from './middleware/middleware.types.js'
|
|
8
|
-
import { pikkuState } from './pikku-state.js'
|
|
9
|
-
import { freezeDedupe, getTagGroups } from './utils.js'
|
|
10
|
-
|
|
11
|
-
const PRIORITY_ORDER: Record<MiddlewarePriority, number> = {
|
|
12
|
-
highest: 0,
|
|
13
|
-
high: 1,
|
|
14
|
-
medium: 2,
|
|
15
|
-
low: 3,
|
|
16
|
-
lowest: 4,
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const getMiddlewarePriority = (fn: CorePikkuMiddleware<any, any>): number => {
|
|
20
|
-
const priority = (
|
|
21
|
-
fn as CorePikkuMiddleware<any, any> & { __priority?: MiddlewarePriority }
|
|
22
|
-
).__priority
|
|
23
|
-
return PRIORITY_ORDER[priority ?? 'medium']
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const sortByPriority = (
|
|
27
|
-
middlewares: CorePikkuMiddleware<any, any>[]
|
|
28
|
-
): CorePikkuMiddleware<any, any>[] => {
|
|
29
|
-
return middlewares.sort(
|
|
30
|
-
(a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b)
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export const runMiddleware = async <
|
|
35
|
-
Middleware extends CorePikkuMiddleware<any, any>,
|
|
36
|
-
>(
|
|
37
|
-
services: Parameters<Middleware>[0],
|
|
38
|
-
wire: Parameters<Middleware>[1],
|
|
39
|
-
middlewares: readonly Middleware[],
|
|
40
|
-
main?: () => Promise<unknown>
|
|
41
|
-
): Promise<unknown> => {
|
|
42
|
-
const sorted = isSortedByPriority(middlewares)
|
|
43
|
-
? middlewares
|
|
44
|
-
: ([...middlewares].sort(
|
|
45
|
-
(a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b)
|
|
46
|
-
) as readonly Middleware[])
|
|
47
|
-
let result: any
|
|
48
|
-
const dispatch = async (index: number): Promise<any> => {
|
|
49
|
-
if (sorted && index < sorted.length) {
|
|
50
|
-
return await sorted[index]!(
|
|
51
|
-
services as Parameters<Middleware>[0],
|
|
52
|
-
wire,
|
|
53
|
-
() => dispatch(index + 1)
|
|
54
|
-
)
|
|
55
|
-
} else if (main) {
|
|
56
|
-
result = await main()
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
await dispatch(0)
|
|
60
|
-
return result
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const isSortedByPriority = (
|
|
64
|
-
middlewares: readonly CorePikkuMiddleware<any, any>[]
|
|
65
|
-
): boolean => {
|
|
66
|
-
for (let i = 1; i < middlewares.length; i++) {
|
|
67
|
-
if (
|
|
68
|
-
getMiddlewarePriority(middlewares[i]) <
|
|
69
|
-
getMiddlewarePriority(middlewares[i - 1])
|
|
70
|
-
) {
|
|
71
|
-
return false
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return true
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Registers tag-scoped middleware for any wiring carrying the tag. Wrap in a
|
|
79
|
-
* factory (`export const x = () => addTagMiddleware(...)`) for tree-shaking.
|
|
80
|
-
*/
|
|
81
|
-
export const addTagMiddleware = <PikkuMiddleware extends CorePikkuMiddleware>(
|
|
82
|
-
tag: string,
|
|
83
|
-
middleware: CorePikkuMiddlewareGroup,
|
|
84
|
-
packageName: string | null = null
|
|
85
|
-
): CorePikkuMiddlewareGroup => {
|
|
86
|
-
const tagGroups = pikkuState(packageName, 'middleware', 'tagGroup')
|
|
87
|
-
const existing = tagGroups[tag] as CorePikkuMiddleware[] | undefined
|
|
88
|
-
tagGroups[tag] = existing
|
|
89
|
-
? [...existing, ...(middleware as CorePikkuMiddleware[])]
|
|
90
|
-
: middleware
|
|
91
|
-
return middleware
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Registers wire-agnostic global middleware, which runs at the top of every
|
|
96
|
-
* wiring's chain — before wire-, tag- and function-level entries.
|
|
97
|
-
*/
|
|
98
|
-
export const addGlobalMiddleware = <
|
|
99
|
-
PikkuMiddleware extends CorePikkuMiddleware,
|
|
100
|
-
>(
|
|
101
|
-
middleware: CorePikkuMiddlewareGroup,
|
|
102
|
-
packageName: string | null = null
|
|
103
|
-
): CorePikkuMiddlewareGroup => {
|
|
104
|
-
const state = pikkuState(
|
|
105
|
-
packageName,
|
|
106
|
-
'middleware',
|
|
107
|
-
'global'
|
|
108
|
-
) as unknown as CorePikkuMiddlewareGroup
|
|
109
|
-
;(state as CorePikkuMiddleware[]).push(
|
|
110
|
-
...(middleware as CorePikkuMiddleware[])
|
|
111
|
-
)
|
|
112
|
-
return middleware
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const getMiddlewareByName = (name: string): CorePikkuMiddleware | undefined => {
|
|
116
|
-
const middlewareStore = pikkuState(null, 'misc', 'middleware')
|
|
117
|
-
const middleware = middlewareStore[name]
|
|
118
|
-
return middleware?.[0]
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const middlewareCache: Record<
|
|
122
|
-
PikkuWiringTypes,
|
|
123
|
-
Record<string, readonly CorePikkuMiddleware[]>
|
|
124
|
-
> = {
|
|
125
|
-
http: {},
|
|
126
|
-
rpc: {},
|
|
127
|
-
channel: {},
|
|
128
|
-
queue: {},
|
|
129
|
-
scheduler: {},
|
|
130
|
-
trigger: {},
|
|
131
|
-
mcp: {},
|
|
132
|
-
agent: {},
|
|
133
|
-
cli: {},
|
|
134
|
-
workflow: {},
|
|
135
|
-
gateway: {},
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export const clearMiddlewareCache = () => {
|
|
139
|
-
for (const key of Object.keys(middlewareCache) as PikkuWiringTypes[]) {
|
|
140
|
-
middlewareCache[key] = {}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export const combineMiddleware = (
|
|
145
|
-
wireType: PikkuWiringTypes,
|
|
146
|
-
uid: string,
|
|
147
|
-
{
|
|
148
|
-
wireInheritedMiddleware,
|
|
149
|
-
wireMiddleware,
|
|
150
|
-
funcInheritedMiddleware,
|
|
151
|
-
funcMiddleware,
|
|
152
|
-
packageName = null,
|
|
153
|
-
}: {
|
|
154
|
-
wireInheritedMiddleware?: MiddlewareMetadata[]
|
|
155
|
-
wireMiddleware?: CorePikkuMiddleware[]
|
|
156
|
-
funcInheritedMiddleware?: MiddlewareMetadata[]
|
|
157
|
-
funcMiddleware?: CorePikkuMiddleware[]
|
|
158
|
-
packageName?: string | null
|
|
159
|
-
} = {}
|
|
160
|
-
): readonly CorePikkuMiddleware[] => {
|
|
161
|
-
if (middlewareCache[wireType][uid]) {
|
|
162
|
-
return middlewareCache[wireType][uid]
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const resolved: CorePikkuMiddleware[] = []
|
|
166
|
-
|
|
167
|
-
const globals = pikkuState(
|
|
168
|
-
packageName,
|
|
169
|
-
'middleware',
|
|
170
|
-
'global'
|
|
171
|
-
) as unknown as CorePikkuMiddleware[]
|
|
172
|
-
if (globals && globals.length > 0) {
|
|
173
|
-
resolved.push(...globals)
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (wireInheritedMiddleware) {
|
|
177
|
-
for (const meta of wireInheritedMiddleware) {
|
|
178
|
-
if (meta.type === 'http') {
|
|
179
|
-
const group = pikkuState(packageName, 'middleware', 'httpGroup')[
|
|
180
|
-
meta.route
|
|
181
|
-
]
|
|
182
|
-
if (group) {
|
|
183
|
-
// At runtime, all factories should be resolved to middleware
|
|
184
|
-
resolved.push(...(group as CorePikkuMiddleware[]))
|
|
185
|
-
}
|
|
186
|
-
} else if (meta.type === 'tag') {
|
|
187
|
-
const groups = getTagGroups(
|
|
188
|
-
pikkuState(packageName, 'middleware', 'tagGroup'),
|
|
189
|
-
meta.tag
|
|
190
|
-
)
|
|
191
|
-
for (const group of groups) {
|
|
192
|
-
resolved.push(...(group as CorePikkuMiddleware[]))
|
|
193
|
-
}
|
|
194
|
-
} else if (meta.type === 'wire') {
|
|
195
|
-
const middleware = getMiddlewareByName(meta.name)
|
|
196
|
-
if (middleware) {
|
|
197
|
-
resolved.push(middleware)
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (wireMiddleware) {
|
|
204
|
-
resolved.push(...wireMiddleware)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Only tags here; wire middleware is resolved via wireInheritedMiddleware.
|
|
208
|
-
if (funcInheritedMiddleware) {
|
|
209
|
-
for (const meta of funcInheritedMiddleware) {
|
|
210
|
-
if (meta.type === 'tag') {
|
|
211
|
-
const groups = getTagGroups(
|
|
212
|
-
pikkuState(packageName, 'middleware', 'tagGroup'),
|
|
213
|
-
meta.tag
|
|
214
|
-
)
|
|
215
|
-
for (const group of groups) {
|
|
216
|
-
resolved.push(...(group as CorePikkuMiddleware[]))
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (funcMiddleware) {
|
|
223
|
-
resolved.push(...funcMiddleware)
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
sortByPriority(resolved)
|
|
227
|
-
middlewareCache[wireType][uid] = freezeDedupe(
|
|
228
|
-
resolved
|
|
229
|
-
) as readonly CorePikkuMiddleware[]
|
|
230
|
-
|
|
231
|
-
return middlewareCache[wireType][uid]
|
|
232
|
-
}
|
package/src/no-any-casts.test.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
import { readFileSync, readdirSync } from 'node:fs'
|
|
4
|
-
import { fileURLToPath } from 'node:url'
|
|
5
|
-
import { join, dirname, relative } from 'node:path'
|
|
6
|
-
|
|
7
|
-
const srcRoot = dirname(fileURLToPath(import.meta.url))
|
|
8
|
-
const thisFile = fileURLToPath(import.meta.url)
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* `as any` in a cast position. The word boundary and the following delimiter
|
|
12
|
-
* keep prose such as "as any URL a browser can load" out of the match.
|
|
13
|
-
*/
|
|
14
|
-
const AS_ANY = /\bas any\b(?!\s+[A-Za-z])/
|
|
15
|
-
|
|
16
|
-
const collectSourceFiles = (directory: string): string[] =>
|
|
17
|
-
readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
|
|
18
|
-
const entryPath = join(directory, entry.name)
|
|
19
|
-
if (entry.isDirectory()) {
|
|
20
|
-
return entry.name === 'dist' ? [] : collectSourceFiles(entryPath)
|
|
21
|
-
}
|
|
22
|
-
return entry.name.endsWith('.ts') && !entry.name.endsWith('.test.ts')
|
|
23
|
-
? [entryPath]
|
|
24
|
-
: []
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
describe('core asserts to named types, never to any', () => {
|
|
28
|
-
test('no non-test module casts through `as any`', () => {
|
|
29
|
-
const offenders = collectSourceFiles(srcRoot)
|
|
30
|
-
.filter((file) => file !== thisFile)
|
|
31
|
-
.flatMap((file) =>
|
|
32
|
-
readFileSync(file, 'utf-8')
|
|
33
|
-
.split('\n')
|
|
34
|
-
.flatMap((line, index) =>
|
|
35
|
-
AS_ANY.test(line)
|
|
36
|
-
? [`${relative(srcRoot, file)}:${index + 1} ${line.trim()}`]
|
|
37
|
-
: []
|
|
38
|
-
)
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
assert.deepEqual(
|
|
42
|
-
offenders,
|
|
43
|
-
[],
|
|
44
|
-
'`as any` discards the target type, so a wrong value passes as readily as ' +
|
|
45
|
-
'a right one. Assert to the type actually wanted — and if the narrowing ' +
|
|
46
|
-
'cannot be expressed, say why in a knowledge note and point at it:\n' +
|
|
47
|
-
offenders.join('\n')
|
|
48
|
-
)
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
test('the matcher finds a cast and ignores the prose that reads like one', () => {
|
|
52
|
-
// Guards the test above: a regex that matched nothing would pass forever.
|
|
53
|
-
assert.equal(AS_ANY.test('const x = y as any'), true)
|
|
54
|
-
assert.equal(AS_ANY.test('foo(bar as any)'), true)
|
|
55
|
-
assert.equal(AS_ANY.test('a picture, as any URL a browser can load'), false)
|
|
56
|
-
})
|
|
57
|
-
})
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { test, describe } from 'node:test'
|
|
2
|
-
import * as assert from 'assert'
|
|
3
|
-
import ts from 'typescript'
|
|
4
|
-
import { readFileSync, readdirSync, statSync } from 'node:fs'
|
|
5
|
-
import { dirname, join, relative } from 'node:path'
|
|
6
|
-
import { fileURLToPath } from 'node:url'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The package root was one barrel of 206 names that no bundler could take
|
|
10
|
-
* apart, and the one specifier that revealed nothing about what a consumer
|
|
11
|
-
* actually used.
|
|
12
|
-
*
|
|
13
|
-
* It is gone. Every name lives on the subpath that owns it, and every import
|
|
14
|
-
* carries that subpath. What survives is a bootstrap shim, which the second
|
|
15
|
-
* test here holds to its exact contents.
|
|
16
|
-
*/
|
|
17
|
-
const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '../../..')
|
|
18
|
-
|
|
19
|
-
const skipDirectory = new Set([
|
|
20
|
-
'node_modules',
|
|
21
|
-
'dist',
|
|
22
|
-
'.git',
|
|
23
|
-
'build',
|
|
24
|
-
'coverage',
|
|
25
|
-
// Agent scratch worktrees are whole Pikku projects scaffolded by whatever CLI
|
|
26
|
-
// version happened to write them, so they carry specifiers this repo does not
|
|
27
|
-
// own. They are gitignored and belong to no workspace, which is what puts them
|
|
28
|
-
// out of scope rather than merely making them noisy.
|
|
29
|
-
'.claude',
|
|
30
|
-
])
|
|
31
|
-
|
|
32
|
-
/** A verifier's scratch project, left behind by a run that did not clean up. */
|
|
33
|
-
const isScratchProject = (entry: string) => entry.startsWith('.tmp-')
|
|
34
|
-
|
|
35
|
-
const walk = (dir: string, out: string[] = []): string[] => {
|
|
36
|
-
for (const entry of readdirSync(dir)) {
|
|
37
|
-
if (skipDirectory.has(entry) || isScratchProject(entry)) continue
|
|
38
|
-
const path = join(dir, entry)
|
|
39
|
-
if (statSync(path).isDirectory()) walk(path, out)
|
|
40
|
-
else if (path.endsWith('.ts') || path.endsWith('.tsx')) out.push(path)
|
|
41
|
-
}
|
|
42
|
-
return out
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Generated output belongs to whichever CLI wrote it — including the pinned
|
|
47
|
-
* published one that bootstraps `packages/cli` and still emits the old
|
|
48
|
-
* specifiers. What this branch's serializers emit is covered by the CLI's own
|
|
49
|
-
* tests, against the template rather than its output.
|
|
50
|
-
*/
|
|
51
|
-
const isGenerated = (path: string) =>
|
|
52
|
-
path.includes('.gen.') || path.endsWith('.d.ts') || path.includes('/.pikku/')
|
|
53
|
-
|
|
54
|
-
describe('no root barrel', () => {
|
|
55
|
-
/**
|
|
56
|
-
* Parsed rather than grepped: several tests hold a user's file as a template
|
|
57
|
-
* literal, and `import { pikkuSessionlessFunc } from '@pikku/core'` inside
|
|
58
|
-
* one is fixture text for the inspector, not an import this repo makes.
|
|
59
|
-
*/
|
|
60
|
-
test('nothing imports the package root', () => {
|
|
61
|
-
const offenders: string[] = []
|
|
62
|
-
|
|
63
|
-
for (const file of walk(repoRoot)) {
|
|
64
|
-
if (isGenerated(file)) continue
|
|
65
|
-
const source = ts.createSourceFile(
|
|
66
|
-
file,
|
|
67
|
-
readFileSync(file, 'utf8'),
|
|
68
|
-
ts.ScriptTarget.Latest,
|
|
69
|
-
true
|
|
70
|
-
)
|
|
71
|
-
for (const statement of source.statements) {
|
|
72
|
-
if (
|
|
73
|
-
!ts.isImportDeclaration(statement) &&
|
|
74
|
-
!ts.isExportDeclaration(statement)
|
|
75
|
-
) {
|
|
76
|
-
continue
|
|
77
|
-
}
|
|
78
|
-
const specifier = statement.moduleSpecifier
|
|
79
|
-
if (!specifier || !ts.isStringLiteral(specifier)) continue
|
|
80
|
-
if (specifier.text !== '@pikku/core') continue
|
|
81
|
-
const { line } = source.getLineAndCharacterOfPosition(
|
|
82
|
-
statement.getStart(source)
|
|
83
|
-
)
|
|
84
|
-
offenders.push(`${relative(repoRoot, file)}:${line + 1}`)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
assert.deepStrictEqual(
|
|
89
|
-
offenders,
|
|
90
|
-
[],
|
|
91
|
-
`The '@pikku/core' root is a bootstrap shim, not an entry point. Every ` +
|
|
92
|
-
`import carries the subpath that owns the name — '@pikku/core/types' ` +
|
|
93
|
-
`for the shared types, '@pikku/core/services' for the services.\n\n` +
|
|
94
|
-
offenders.join('\n')
|
|
95
|
-
)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* The shim exists because `packages/cli` is generated by the published CLI
|
|
100
|
-
* pinned in its `build.sh`, which still writes these specifiers. Holding it
|
|
101
|
-
* to an exact list is what keeps it a shim: a name can only be added here by
|
|
102
|
-
* someone who has read why it should not be.
|
|
103
|
-
*/
|
|
104
|
-
test('the bootstrap shim carries only what the pinned CLI emits', () => {
|
|
105
|
-
const surface = (file: string) =>
|
|
106
|
-
readFileSync(join(dirname(fileURLToPath(import.meta.url)), file), 'utf8')
|
|
107
|
-
.replace(/\/\*\*[\s\S]*?\*\//g, '')
|
|
108
|
-
.match(/\b[A-Za-z][A-Za-z0-9]*\b(?=[,\n\s]*(?:,|\}))/g)
|
|
109
|
-
?.sort() ?? []
|
|
110
|
-
|
|
111
|
-
assert.deepStrictEqual(surface('bootstrap-compat/root.ts'), [
|
|
112
|
-
'CorePermissionGroup',
|
|
113
|
-
'CorePikkuMiddleware',
|
|
114
|
-
'ListInput',
|
|
115
|
-
'ListOutput',
|
|
116
|
-
'PickRequired',
|
|
117
|
-
'PikkuWire',
|
|
118
|
-
'SecretService',
|
|
119
|
-
'SecretlessServices',
|
|
120
|
-
])
|
|
121
|
-
})
|
|
122
|
-
})
|
package/src/permissions.test.ts
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { describe, test, beforeEach } from 'node:test'
|
|
2
|
-
import * as assert from 'node:assert'
|
|
3
|
-
import {
|
|
4
|
-
addGlobalPermission,
|
|
5
|
-
runPermissions,
|
|
6
|
-
clearPermissionsCache,
|
|
7
|
-
checkAuthPermissions,
|
|
8
|
-
} from './permissions.js'
|
|
9
|
-
import { resetPikkuState } from './pikku-state.js'
|
|
10
|
-
import { pikkuAuth } from './function/functions.types.js'
|
|
11
|
-
import type { CoreServices, CoreUserSession } from './types/core.types.js'
|
|
12
|
-
import type { CorePermissionGroup } from './function/functions.types.js'
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
resetPikkuState()
|
|
16
|
-
clearPermissionsCache()
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
const mockServices: CoreServices = {
|
|
20
|
-
logger: {
|
|
21
|
-
info: () => {},
|
|
22
|
-
warn: () => {},
|
|
23
|
-
error: () => {},
|
|
24
|
-
debug: () => {},
|
|
25
|
-
},
|
|
26
|
-
} as any
|
|
27
|
-
|
|
28
|
-
const mockSession: CoreUserSession = { userId: 'test-user' } as any
|
|
29
|
-
|
|
30
|
-
const run = (opts: {
|
|
31
|
-
funcPermissions?: CorePermissionGroup | any[]
|
|
32
|
-
data?: any
|
|
33
|
-
wire?: any
|
|
34
|
-
packageName?: string | null
|
|
35
|
-
}) =>
|
|
36
|
-
runPermissions({
|
|
37
|
-
funcPermissions: opts.funcPermissions,
|
|
38
|
-
services: mockServices,
|
|
39
|
-
wire: (opts.wire ?? { session: mockSession }) as any,
|
|
40
|
-
data: opts.data ?? {},
|
|
41
|
-
packageName: opts.packageName ?? null,
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
describe('runPermissions — function permissions (OR gate)', () => {
|
|
45
|
-
test('passes when no permissions are defined', async () => {
|
|
46
|
-
await run({})
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
test('passes when at least one group is satisfied (OR)', async () => {
|
|
50
|
-
await run({
|
|
51
|
-
funcPermissions: {
|
|
52
|
-
owner: [async () => false],
|
|
53
|
-
admin: [async () => true],
|
|
54
|
-
},
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test('throws when every group fails', async () => {
|
|
59
|
-
await assert.rejects(
|
|
60
|
-
run({
|
|
61
|
-
funcPermissions: {
|
|
62
|
-
owner: [async () => false],
|
|
63
|
-
admin: [async () => false],
|
|
64
|
-
},
|
|
65
|
-
}),
|
|
66
|
-
{ message: 'Permission denied' }
|
|
67
|
-
)
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
test('ANDs the entries within a single branch array', async () => {
|
|
71
|
-
await assert.rejects(
|
|
72
|
-
run({ funcPermissions: { grp: [async () => true, async () => false] } }),
|
|
73
|
-
{ message: 'Permission denied' }
|
|
74
|
-
)
|
|
75
|
-
await run({
|
|
76
|
-
funcPermissions: { grp: [async () => true, async () => true] },
|
|
77
|
-
})
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
test('accepts a bare permission array as a single AND branch', async () => {
|
|
81
|
-
await run({ funcPermissions: [async () => true] })
|
|
82
|
-
await assert.rejects(run({ funcPermissions: [async () => false] }), {
|
|
83
|
-
message: 'Permission denied',
|
|
84
|
-
})
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
test('passes request data and wire through to permission functions', async () => {
|
|
88
|
-
let received: any
|
|
89
|
-
const wire = { session: mockSession }
|
|
90
|
-
const data = { hello: 'world' }
|
|
91
|
-
await run({
|
|
92
|
-
funcPermissions: {
|
|
93
|
-
grp: [
|
|
94
|
-
async (services: any, d: any, w: any) => {
|
|
95
|
-
received = { services, d, w }
|
|
96
|
-
return true
|
|
97
|
-
},
|
|
98
|
-
],
|
|
99
|
-
},
|
|
100
|
-
data,
|
|
101
|
-
wire,
|
|
102
|
-
})
|
|
103
|
-
assert.equal(received.services, mockServices)
|
|
104
|
-
assert.equal(received.d, data)
|
|
105
|
-
assert.equal(received.w, wire)
|
|
106
|
-
})
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
describe('runPermissions — global permissions (AND gate)', () => {
|
|
110
|
-
test('requires every registered global to pass', async () => {
|
|
111
|
-
addGlobalPermission([async () => true])
|
|
112
|
-
await run({})
|
|
113
|
-
|
|
114
|
-
resetPikkuState()
|
|
115
|
-
clearPermissionsCache()
|
|
116
|
-
addGlobalPermission([async () => false])
|
|
117
|
-
await assert.rejects(run({}), { message: 'Permission denied' })
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
test('ANDs multiple registered globals', async () => {
|
|
121
|
-
addGlobalPermission([async () => true])
|
|
122
|
-
addGlobalPermission([async () => false])
|
|
123
|
-
await assert.rejects(run({}), { message: 'Permission denied' })
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
test('a global group entry ORs internally but must still pass', async () => {
|
|
127
|
-
addGlobalPermission({
|
|
128
|
-
a: [async () => false],
|
|
129
|
-
b: [async () => true],
|
|
130
|
-
} as CorePermissionGroup)
|
|
131
|
-
await run({})
|
|
132
|
-
})
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
describe('runPermissions — gates are independent (no escalation)', () => {
|
|
136
|
-
test('a passing global does NOT satisfy a failing function permission', async () => {
|
|
137
|
-
// The classic escalation bug: a broad global must not grant an admin-only fn.
|
|
138
|
-
addGlobalPermission([async () => true])
|
|
139
|
-
await assert.rejects(
|
|
140
|
-
run({ funcPermissions: { admin: [async () => false] } }),
|
|
141
|
-
{ message: 'Permission denied' }
|
|
142
|
-
)
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
test('a passing function permission does NOT bypass a failing global', async () => {
|
|
146
|
-
addGlobalPermission([async () => false])
|
|
147
|
-
await assert.rejects(
|
|
148
|
-
run({ funcPermissions: { anyone: [async () => true] } }),
|
|
149
|
-
{ message: 'Permission denied' }
|
|
150
|
-
)
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
test('passes only when both gates pass', async () => {
|
|
154
|
-
addGlobalPermission([async () => true])
|
|
155
|
-
await run({ funcPermissions: { admin: [async () => true] } })
|
|
156
|
-
})
|
|
157
|
-
})
|
|
158
|
-
|
|
159
|
-
describe('runPermissions — package isolation', () => {
|
|
160
|
-
test('globals are scoped per package', async () => {
|
|
161
|
-
addGlobalPermission([async () => false], 'pkg-a')
|
|
162
|
-
// A different package sees no globals, so it passes.
|
|
163
|
-
await run({ packageName: 'pkg-b' })
|
|
164
|
-
// The registering package is gated.
|
|
165
|
-
await assert.rejects(run({ packageName: 'pkg-a' }), {
|
|
166
|
-
message: 'Permission denied',
|
|
167
|
-
})
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
test('a root global applies inside a package too', async () => {
|
|
171
|
-
// The generated `addGlobalPermission` wrapper takes no package argument, so
|
|
172
|
-
// an application's rules always land in the root bucket. If those stopped
|
|
173
|
-
// at the addon boundary, "every request needs a signed-in user" would
|
|
174
|
-
// silently exempt every function an addon contributed.
|
|
175
|
-
addGlobalPermission([async () => false])
|
|
176
|
-
await assert.rejects(run({ packageName: 'pkg-a' }), {
|
|
177
|
-
message: 'Permission denied',
|
|
178
|
-
})
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
test('root and package globals both have to pass', async () => {
|
|
182
|
-
addGlobalPermission([async () => true])
|
|
183
|
-
addGlobalPermission([async () => false], 'pkg-a')
|
|
184
|
-
await assert.rejects(run({ packageName: 'pkg-a' }), {
|
|
185
|
-
message: 'Permission denied',
|
|
186
|
-
})
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
test('passes when the root and package globals both pass', async () => {
|
|
190
|
-
addGlobalPermission([async () => true])
|
|
191
|
-
addGlobalPermission([async () => true], 'pkg-a')
|
|
192
|
-
await run({ packageName: 'pkg-a' })
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
test('a package global does not leak back out to the root', async () => {
|
|
196
|
-
addGlobalPermission([async () => false], 'pkg-a')
|
|
197
|
-
await run({})
|
|
198
|
-
})
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
describe('checkAuthPermissions', () => {
|
|
202
|
-
test('returns true when there are no auth predicates', async () => {
|
|
203
|
-
assert.equal(
|
|
204
|
-
await checkAuthPermissions(undefined, mockSession, mockServices),
|
|
205
|
-
true
|
|
206
|
-
)
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
test('honours a global pikkuAuth predicate at filter time', async () => {
|
|
210
|
-
addGlobalPermission([pikkuAuth(async () => false)])
|
|
211
|
-
assert.equal(
|
|
212
|
-
await checkAuthPermissions(undefined, mockSession, mockServices),
|
|
213
|
-
false
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
resetPikkuState()
|
|
217
|
-
clearPermissionsCache()
|
|
218
|
-
addGlobalPermission([pikkuAuth(async () => true)])
|
|
219
|
-
assert.equal(
|
|
220
|
-
await checkAuthPermissions(undefined, mockSession, mockServices),
|
|
221
|
-
true
|
|
222
|
-
)
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
test('evaluates a live pikkuAuth predicate from the config group', async () => {
|
|
226
|
-
assert.equal(
|
|
227
|
-
await checkAuthPermissions(
|
|
228
|
-
{ admin: pikkuAuth(async () => false) as any },
|
|
229
|
-
mockSession,
|
|
230
|
-
mockServices
|
|
231
|
-
),
|
|
232
|
-
false
|
|
233
|
-
)
|
|
234
|
-
assert.equal(
|
|
235
|
-
await checkAuthPermissions(
|
|
236
|
-
{ admin: pikkuAuth(async () => true) as any },
|
|
237
|
-
mockSession,
|
|
238
|
-
mockServices
|
|
239
|
-
),
|
|
240
|
-
true
|
|
241
|
-
)
|
|
242
|
-
})
|
|
243
|
-
|
|
244
|
-
test('ignores data-dependent permissions (no auth marker)', async () => {
|
|
245
|
-
// A bare pikkuPermission carries no __pikkuAuth brand, so it cannot be
|
|
246
|
-
// evaluated at filter time and must not gate the tool list.
|
|
247
|
-
assert.equal(
|
|
248
|
-
await checkAuthPermissions(
|
|
249
|
-
{ ownsRow: (async () => false) as any },
|
|
250
|
-
mockSession,
|
|
251
|
-
mockServices
|
|
252
|
-
),
|
|
253
|
-
true
|
|
254
|
-
)
|
|
255
|
-
})
|
|
256
|
-
})
|