@pikku/core 0.12.107 → 0.12.112
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 +357 -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/dev/hot-reload.d.ts +0 -1
- package/dist/dev/hot-reload.js +4 -25
- package/dist/dev/module-runner.js +104 -25
- 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/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/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +50 -0
- package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +38 -0
- package/knowledge/decisions/internals/index.md +2 -0
- 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 -569
- 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
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert'
|
|
3
|
-
import {
|
|
4
|
-
pikkuAuth,
|
|
5
|
-
pikkuPermission,
|
|
6
|
-
pikkuPermissionFactory,
|
|
7
|
-
} from './function/functions.types.js'
|
|
8
|
-
import {
|
|
9
|
-
pikkuMiddleware,
|
|
10
|
-
pikkuMiddlewareFactory,
|
|
11
|
-
} from './middleware/middleware-factories.js'
|
|
12
|
-
|
|
13
|
-
test('pikkuPermission returns the same function', async () => {
|
|
14
|
-
const originalFn = async () => true
|
|
15
|
-
const wrappedFn = pikkuPermission(originalFn)
|
|
16
|
-
assert.strictEqual(wrappedFn, originalFn)
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
test('pikkuMiddleware returns the same function', async () => {
|
|
20
|
-
const originalFn = async ({ logger }, wires, next) => next
|
|
21
|
-
const wrappedFn = pikkuMiddleware(originalFn)
|
|
22
|
-
assert.strictEqual(wrappedFn, originalFn)
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
test('pikkuPermissionFactory creates a factory function', async () => {
|
|
26
|
-
const factory = pikkuPermissionFactory<{ role: string }>(({ role }) => {
|
|
27
|
-
return pikkuPermission(async ({ logger }, data, { session }) => {
|
|
28
|
-
return (session as any)?.role === role
|
|
29
|
-
})
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
assert.strictEqual(typeof factory, 'function')
|
|
33
|
-
assert.strictEqual(factory.length, 1) // input parameter
|
|
34
|
-
|
|
35
|
-
// Call the factory to get a permission
|
|
36
|
-
const permission = factory({ role: 'admin' })
|
|
37
|
-
assert.strictEqual(typeof permission, 'function')
|
|
38
|
-
assert.strictEqual(permission.length, 3) // services, data, session
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
test('pikkuMiddlewareFactory creates a factory function', async () => {
|
|
42
|
-
const factory = pikkuMiddlewareFactory<{ message: string }>(({ message }) => {
|
|
43
|
-
return pikkuMiddleware(async ({ logger }, wires, next) => {
|
|
44
|
-
logger.info(message)
|
|
45
|
-
await next()
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
assert.strictEqual(typeof factory, 'function')
|
|
50
|
-
assert.strictEqual(factory.length, 1) // input parameter
|
|
51
|
-
|
|
52
|
-
// Call the factory to get middleware
|
|
53
|
-
const middleware = factory({ message: 'test' })
|
|
54
|
-
assert.strictEqual(typeof middleware, 'function')
|
|
55
|
-
assert.strictEqual(middleware.length, 3) // services, wires, next
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test('pikkuPermissionFactory returns the same factory', async () => {
|
|
59
|
-
const originalFactory = () => pikkuPermission(async () => true)
|
|
60
|
-
const wrappedFactory = pikkuPermissionFactory(originalFactory as any)
|
|
61
|
-
assert.strictEqual(wrappedFactory, originalFactory)
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
test('pikkuMiddlewareFactory returns the same factory', async () => {
|
|
65
|
-
const originalFactory = ({ message }) =>
|
|
66
|
-
pikkuMiddleware(async ({ logger }, _wires, next) => {
|
|
67
|
-
logger.info(message)
|
|
68
|
-
await next()
|
|
69
|
-
})
|
|
70
|
-
const wrappedFactory = pikkuMiddlewareFactory(originalFactory)
|
|
71
|
-
assert.strictEqual(wrappedFactory, originalFactory)
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
test('pikkuAuth returns a 3-arg wrapper function', async () => {
|
|
75
|
-
const authFn = async (_services, session) => !!session
|
|
76
|
-
const wrapped = pikkuAuth(authFn)
|
|
77
|
-
assert.strictEqual(typeof wrapped, 'function')
|
|
78
|
-
assert.strictEqual(wrapped.length, 3)
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
test('pikkuAuth wrapper extracts session from wire and calls auth function', async () => {
|
|
82
|
-
let receivedSession = null
|
|
83
|
-
const authFn = async (_services, session) => {
|
|
84
|
-
receivedSession = session
|
|
85
|
-
return session.role === 'admin'
|
|
86
|
-
}
|
|
87
|
-
const wrapped = pikkuAuth(authFn)
|
|
88
|
-
const result = await wrapped({}, null, { session: { role: 'admin' } })
|
|
89
|
-
assert.strictEqual(result, true)
|
|
90
|
-
assert.deepStrictEqual(receivedSession, { role: 'admin' })
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
test('pikkuAuth wrapper returns false when no session', async () => {
|
|
94
|
-
const authFn = async (_services, session) => !!session
|
|
95
|
-
const wrapped = pikkuAuth(authFn)
|
|
96
|
-
const result = await wrapped({}, null, { session: null })
|
|
97
|
-
assert.strictEqual(result, false)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
test('pikkuAuth config object syntax works', async () => {
|
|
101
|
-
const authFn = async (_services, session) => !!session
|
|
102
|
-
const wrapped = pikkuAuth({
|
|
103
|
-
func: authFn,
|
|
104
|
-
name: 'Is Authenticated',
|
|
105
|
-
description: 'Checks if user has a session',
|
|
106
|
-
})
|
|
107
|
-
assert.strictEqual(typeof wrapped, 'function')
|
|
108
|
-
assert.strictEqual(wrapped.length, 3)
|
|
109
|
-
const result = await wrapped({}, null, { session: { id: '1' } })
|
|
110
|
-
assert.strictEqual(result, true)
|
|
111
|
-
})
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
AbandonedError,
|
|
6
|
-
beginChanges,
|
|
7
|
-
getAbortScope,
|
|
8
|
-
runInAbortScope,
|
|
9
|
-
type AbortScope,
|
|
10
|
-
} from './abort-scope.js'
|
|
11
|
-
|
|
12
|
-
describe('beginChanges', () => {
|
|
13
|
-
test('is a no-op outside a scope, so a function need not know how it was called', async () => {
|
|
14
|
-
await beginChanges()
|
|
15
|
-
assert.equal(getAbortScope(), undefined)
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
test('lets the mutation proceed while the caller is still there', async () => {
|
|
19
|
-
let declared = false
|
|
20
|
-
const scope: AbortScope = {
|
|
21
|
-
abandoned: false,
|
|
22
|
-
onBeginChanges: () => {
|
|
23
|
-
declared = true
|
|
24
|
-
},
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let mutated = false
|
|
28
|
-
await runInAbortScope(scope, async () => {
|
|
29
|
-
await beginChanges()
|
|
30
|
-
mutated = true
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
assert.equal(mutated, true)
|
|
34
|
-
assert.equal(declared, true)
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
test('stops the mutation when the caller has gone, and reports why', async () => {
|
|
38
|
-
let mutated = false
|
|
39
|
-
const scope: AbortScope = { abandoned: true, reason: 'speech' }
|
|
40
|
-
|
|
41
|
-
await assert.rejects(
|
|
42
|
-
() =>
|
|
43
|
-
runInAbortScope(scope, async () => {
|
|
44
|
-
await beginChanges()
|
|
45
|
-
mutated = true
|
|
46
|
-
}),
|
|
47
|
-
(error: unknown) => {
|
|
48
|
-
assert.ok(error instanceof AbandonedError)
|
|
49
|
-
assert.match(error.message, /speech/)
|
|
50
|
-
return true
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
// The whole point: the irreversible line never ran.
|
|
55
|
-
assert.equal(mutated, false)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test('survives the await boundaries a real function has', async () => {
|
|
59
|
-
// AsyncLocalStorage is the reason this works — the checkpoint is usually
|
|
60
|
-
// several awaits deep inside helpers that never took the scope as an
|
|
61
|
-
// argument.
|
|
62
|
-
const scope: AbortScope = { abandoned: true }
|
|
63
|
-
const nestedHelper = async () => {
|
|
64
|
-
await new Promise((resolve) => setImmediate(resolve))
|
|
65
|
-
await beginChanges()
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
await assert.rejects(
|
|
69
|
-
() =>
|
|
70
|
-
runInAbortScope(scope, async () => {
|
|
71
|
-
await new Promise((resolve) => setImmediate(resolve))
|
|
72
|
-
return nestedHelper()
|
|
73
|
-
}),
|
|
74
|
-
AbandonedError
|
|
75
|
-
)
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
test('reads the scope live, so an interrupt mid-function is still caught', async () => {
|
|
79
|
-
let aborted = false
|
|
80
|
-
const scope: AbortScope = {
|
|
81
|
-
get abandoned() {
|
|
82
|
-
return aborted
|
|
83
|
-
},
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
await assert.rejects(
|
|
87
|
-
() =>
|
|
88
|
-
runInAbortScope(scope, async () => {
|
|
89
|
-
// Plenty of interruptible work happens before the checkpoint.
|
|
90
|
-
await new Promise((resolve) => setImmediate(resolve))
|
|
91
|
-
aborted = true
|
|
92
|
-
await beginChanges()
|
|
93
|
-
}),
|
|
94
|
-
AbandonedError
|
|
95
|
-
)
|
|
96
|
-
})
|
|
97
|
-
})
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Raised by {@link beginChanges} when the caller has gone away before anything
|
|
5
|
-
* was changed. Distinct from a failure: nothing happened, so there is nothing
|
|
6
|
-
* to report, retry or apologise for.
|
|
7
|
-
*/
|
|
8
|
-
export class AbandonedError extends Error {
|
|
9
|
-
constructor(reason?: string) {
|
|
10
|
-
super(
|
|
11
|
-
reason
|
|
12
|
-
? `Aborted before making changes: ${reason}`
|
|
13
|
-
: 'Aborted before making changes'
|
|
14
|
-
)
|
|
15
|
-
this.name = 'AbandonedError'
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface AbortScope {
|
|
20
|
-
/** Whether whatever asked for this work has gone away. */
|
|
21
|
-
readonly abandoned: boolean
|
|
22
|
-
/** Why, when known — an interrupt reason, a disconnect, a cancellation. */
|
|
23
|
-
readonly reason?: string
|
|
24
|
-
/** Called by `beginChanges()` once a function commits to mutating. */
|
|
25
|
-
onBeginChanges?: () => void
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* The ambient "is my caller still there?" signal.
|
|
30
|
-
*
|
|
31
|
-
* Ambient rather than a parameter because the question is the same one for
|
|
32
|
-
* every wiring — an agent run that was interrupted, an HTTP request whose
|
|
33
|
-
* client disconnected, a cancelled workflow — and threading it through every
|
|
34
|
-
* signature would mean changing every function that merely sits between the
|
|
35
|
-
* wiring and the mutation.
|
|
36
|
-
*/
|
|
37
|
-
const scopeStorage = new AsyncLocalStorage<AbortScope>()
|
|
38
|
-
|
|
39
|
-
/** Run `fn` with an abort scope that `beginChanges()` will observe. */
|
|
40
|
-
export const runInAbortScope = <T>(scope: AbortScope, fn: () => T): T =>
|
|
41
|
-
scopeStorage.run(scope, fn)
|
|
42
|
-
|
|
43
|
-
/** The current scope, if the caller is running inside one. */
|
|
44
|
-
export const getAbortScope = (): AbortScope | undefined =>
|
|
45
|
-
scopeStorage.getStore()
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Declare that everything after this line changes something.
|
|
49
|
-
*
|
|
50
|
-
* ```ts
|
|
51
|
-
* const plan = await computePlan(input) // interruptible, costs nothing to redo
|
|
52
|
-
* await beginChanges()
|
|
53
|
-
* await db.deleteProject(input.projectId) // past the point of no return
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* Two things happen here. If the caller has already gone away it throws, so the
|
|
57
|
-
* mutation never runs and the interrupt is clean — nothing happened, and the
|
|
58
|
-
* user is told nothing because there is nothing to tell. If the caller is still
|
|
59
|
-
* there it marks this call as mutating, so an interrupt landing *after* this
|
|
60
|
-
* point produces an `undelivered` note on the thread rather than silently
|
|
61
|
-
* discarding work that did happen.
|
|
62
|
-
*
|
|
63
|
-
* It throws rather than returning a boolean on purpose: `if (await ...)` invites
|
|
64
|
-
* ignoring the answer, and the failure mode of ignoring it is a mutation nobody
|
|
65
|
-
* asked for.
|
|
66
|
-
*
|
|
67
|
-
* Entirely cooperative, and safe to call anywhere — outside a scope it is a
|
|
68
|
-
* no-op, so a function does not need to know how it was invoked. A function
|
|
69
|
-
* that never calls it keeps the conservative default: if it is not marked
|
|
70
|
-
* `readonly`, an interrupt assumes it changed something and says so. The tool
|
|
71
|
-
* that forgot to call this is exactly the one that cannot be assumed harmless.
|
|
72
|
-
*/
|
|
73
|
-
export const beginChanges = async (): Promise<void> => {
|
|
74
|
-
const scope = scopeStorage.getStore()
|
|
75
|
-
if (!scope) return
|
|
76
|
-
if (scope.abandoned) {
|
|
77
|
-
throw new AbandonedError(scope.reason)
|
|
78
|
-
}
|
|
79
|
-
scope.onBeginChanges?.()
|
|
80
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import type { MiddlewareMetadata } from '../middleware/middleware.types.js'
|
|
2
|
-
import type { AuditDurability } from '../services/audit-service.js'
|
|
3
|
-
import type {
|
|
4
|
-
ScenarioStepKind,
|
|
5
|
-
ScenarioSurface,
|
|
6
|
-
} from '../wirings/workflow/scenario-step.types.js'
|
|
7
|
-
import type { CommonWireMeta } from '../types/core.types.js'
|
|
8
|
-
|
|
9
|
-
export interface FunctionServicesMeta {
|
|
10
|
-
optimized: boolean
|
|
11
|
-
services: string[]
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface FunctionWiresMeta {
|
|
15
|
-
optimized: boolean
|
|
16
|
-
wires: string[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A reference to a permission function, resolved by name. Function-scoped
|
|
21
|
-
* only: there are no wire- or tag-level permission references.
|
|
22
|
-
*/
|
|
23
|
-
export type PermissionMetadata = {
|
|
24
|
-
type: 'wire'
|
|
25
|
-
name: string
|
|
26
|
-
inline?: boolean
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type FunctionRuntimeMeta = {
|
|
30
|
-
pikkuFuncId: string
|
|
31
|
-
inputSchemaName: string | null
|
|
32
|
-
outputSchemaName: string | null
|
|
33
|
-
/** Scopes the session must hold to run this function. All are required (AND). */
|
|
34
|
-
scopes?: string[]
|
|
35
|
-
expose?: boolean
|
|
36
|
-
/**
|
|
37
|
-
* A sessionless function's own `auth: true`. `sessionless` carries the
|
|
38
|
-
* baseline — a `pikkuFunc` always requires a session — and this carries the
|
|
39
|
-
* tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
|
|
40
|
-
* know whether a function is gated without running it.
|
|
41
|
-
*/
|
|
42
|
-
auth?: boolean
|
|
43
|
-
/**
|
|
44
|
-
* The author's declaration that this function's permission check lives in its
|
|
45
|
-
* own body. Carries no runtime effect — it records a gate codegen cannot see,
|
|
46
|
-
* so an audit is not left to guess whether a sessionless function is open.
|
|
47
|
-
* Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
|
|
48
|
-
*/
|
|
49
|
-
permissionsInBody?: boolean
|
|
50
|
-
remote?: boolean
|
|
51
|
-
/**
|
|
52
|
-
* A step RPC: invoked by name only from a scenario run and refused
|
|
53
|
-
* everywhere else, so it is never network-callable.
|
|
54
|
-
*/
|
|
55
|
-
scenarioStep?: boolean
|
|
56
|
-
/**
|
|
57
|
-
* The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
|
|
58
|
-
* so it is held back from the app bootstrap and from every deployed unit.
|
|
59
|
-
*/
|
|
60
|
-
scenario?: boolean
|
|
61
|
-
mcp?: boolean
|
|
62
|
-
readonly?: boolean
|
|
63
|
-
deploy?: 'serverless' | 'server' | 'auto'
|
|
64
|
-
sessionless?: boolean
|
|
65
|
-
/** When true, workflow steps calling this function are dispatched via the queue. No queue service configured is a hard error. */
|
|
66
|
-
workflowQueued?: boolean
|
|
67
|
-
/** Retry count when this function is used as a workflow step. */
|
|
68
|
-
workflowRetries?: number
|
|
69
|
-
/** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
|
|
70
|
-
workflowTimeout?: string
|
|
71
|
-
/**
|
|
72
|
-
* Scenario steps only: which surfaces this step declares a binding for.
|
|
73
|
-
*
|
|
74
|
-
* The reporter derives coverage from this — a `then` with no binding for the
|
|
75
|
-
* surface the run targeted was never actually witnessed there, which is a gap
|
|
76
|
-
* worth counting rather than excusing.
|
|
77
|
-
*/
|
|
78
|
-
scenarioStepSurfaces?: ScenarioSurface[]
|
|
79
|
-
/**
|
|
80
|
-
* Scenario steps only: this step runs as a persona, so every call site must
|
|
81
|
-
* pass one and the runner injects it as `wire.actor`.
|
|
82
|
-
*
|
|
83
|
-
* Declared by `actor: true`, or implied by a `browser` binding — a window is
|
|
84
|
-
* opened as somebody. Absent on a step with nobody to be: an assertion over
|
|
85
|
-
* what an earlier step returned, or one posting credentials precisely because
|
|
86
|
-
* it must not reuse an actor's session.
|
|
87
|
-
*/
|
|
88
|
-
scenarioStepRequiresActor?: boolean
|
|
89
|
-
/**
|
|
90
|
-
* Scenario steps only: who acts. Absent means `persona` — the ordinary step,
|
|
91
|
-
* and the only kind that existed before the other two.
|
|
92
|
-
*
|
|
93
|
-
* A `platform` or `addon` step is the app or a third-party system acting, and
|
|
94
|
-
* it must never reach a virtual user's catalogue. That is not tidiness: a
|
|
95
|
-
* virtual user that can invoke "Stripe's webhook arrives" can forge its own
|
|
96
|
-
* payment success, and every finding downstream of that is worthless.
|
|
97
|
-
*/
|
|
98
|
-
scenarioStepKind?: ScenarioStepKind
|
|
99
|
-
/** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
|
|
100
|
-
scenarioStepAddon?: string
|
|
101
|
-
/** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
|
|
102
|
-
scenarioStepTemplate?: string
|
|
103
|
-
/**
|
|
104
|
-
* The function's `audit` config, resolved — `audit: true` reads as
|
|
105
|
-
* `{ durability: 'best-effort' }`. Absent means the function records nothing:
|
|
106
|
-
* `auditLog.write()` from an unmarked function is dropped with a warning, so
|
|
107
|
-
* this is the only place a reader can see which functions have a trail at all
|
|
108
|
-
* without running them.
|
|
109
|
-
*
|
|
110
|
-
* Informational. The runner resolves audit from the live function config, not
|
|
111
|
-
* from here, so meta and runtime cannot disagree about whether audit is on.
|
|
112
|
-
*/
|
|
113
|
-
audit?: {
|
|
114
|
-
durability: AuditDurability
|
|
115
|
-
}
|
|
116
|
-
version?: number
|
|
117
|
-
approvalRequired?: boolean
|
|
118
|
-
approvalDescription?: string
|
|
119
|
-
implementationHash?: string
|
|
120
|
-
contractHash?: string
|
|
121
|
-
inputHash?: string
|
|
122
|
-
outputHash?: string
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export type FunctionMeta = FunctionRuntimeMeta &
|
|
126
|
-
Partial<
|
|
127
|
-
{
|
|
128
|
-
name: string
|
|
129
|
-
/** `remote`: a contract with no local body, answered by a connected client. */
|
|
130
|
-
functionType: 'user' | 'inline' | 'helper' | 'remote'
|
|
131
|
-
funcWrapper: string
|
|
132
|
-
services: FunctionServicesMeta
|
|
133
|
-
wires: FunctionWiresMeta
|
|
134
|
-
inputs: string[] | null
|
|
135
|
-
outputs: string[] | null
|
|
136
|
-
middleware: MiddlewareMetadata[]
|
|
137
|
-
permissions: PermissionMetadata[]
|
|
138
|
-
isDirectFunction: boolean
|
|
139
|
-
sourceFile: string
|
|
140
|
-
exportedName: string
|
|
141
|
-
/** File containing the handler body when it differs from sourceFile (imported handlers) */
|
|
142
|
-
bodySourceFile?: string
|
|
143
|
-
/** 1-indexed first line of the handler body (verbose meta; coverage mapping) */
|
|
144
|
-
bodyStart: number
|
|
145
|
-
/** 1-indexed last line of the handler body (verbose meta; coverage mapping) */
|
|
146
|
-
bodyEnd: number
|
|
147
|
-
} & CommonWireMeta
|
|
148
|
-
>
|
|
149
|
-
|
|
150
|
-
export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>
|
|
151
|
-
export type FunctionsMeta = Record<string, FunctionMeta>
|