@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,147 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert'
|
|
3
|
-
import {
|
|
4
|
-
PikkuSessionService,
|
|
5
|
-
createMiddlewareSessionWireProps,
|
|
6
|
-
createFunctionSessionWireProps,
|
|
7
|
-
} from './user-session-service.js'
|
|
8
|
-
|
|
9
|
-
describe('PikkuSessionService', () => {
|
|
10
|
-
test('should set and get session', () => {
|
|
11
|
-
const service = new PikkuSessionService()
|
|
12
|
-
service.setInitial({ userId: 'user-1' })
|
|
13
|
-
const session = service.get()
|
|
14
|
-
assert.deepStrictEqual(session, { userId: 'user-1' })
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
test('should return undefined when no session set', () => {
|
|
18
|
-
const service = new PikkuSessionService()
|
|
19
|
-
assert.strictEqual(service.get(), undefined)
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
test('should mark sessionChanged when set is called', async () => {
|
|
23
|
-
const service = new PikkuSessionService()
|
|
24
|
-
assert.strictEqual(service.sessionChanged, false)
|
|
25
|
-
await service.set({ userId: 'user-1' })
|
|
26
|
-
assert.strictEqual(service.sessionChanged, true)
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
test('should clear session', async () => {
|
|
30
|
-
const service = new PikkuSessionService()
|
|
31
|
-
service.setInitial({ userId: 'user-1' })
|
|
32
|
-
await service.clear()
|
|
33
|
-
assert.strictEqual(service.get(), undefined)
|
|
34
|
-
assert.strictEqual(service.sessionChanged, true)
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
test('should freeze initial session', () => {
|
|
38
|
-
const service = new PikkuSessionService()
|
|
39
|
-
service.setInitial({ userId: 'user-1' })
|
|
40
|
-
const frozen = service.freezeInitial()
|
|
41
|
-
assert.deepStrictEqual(frozen, { userId: 'user-1' })
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
test('should only freeze initial once', async () => {
|
|
45
|
-
const service = new PikkuSessionService()
|
|
46
|
-
service.setInitial({ userId: 'user-1' })
|
|
47
|
-
service.freezeInitial()
|
|
48
|
-
await service.set({ userId: 'user-2' })
|
|
49
|
-
const frozen2 = service.freezeInitial()
|
|
50
|
-
assert.deepStrictEqual(frozen2, { userId: 'user-1' })
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
test('should persist to sessionStore on set when pikkuUserId is set', async () => {
|
|
54
|
-
let storedId: string | undefined
|
|
55
|
-
let storedSession: any
|
|
56
|
-
const store = {
|
|
57
|
-
get: async () => undefined,
|
|
58
|
-
set: async (id: string, session: any) => {
|
|
59
|
-
storedId = id
|
|
60
|
-
storedSession = session
|
|
61
|
-
},
|
|
62
|
-
clear: async () => {},
|
|
63
|
-
}
|
|
64
|
-
const service = new PikkuSessionService(store as any)
|
|
65
|
-
service.setPikkuUserId('user-123')
|
|
66
|
-
await service.set({ userId: 'new' })
|
|
67
|
-
assert.strictEqual(storedId, 'user-123')
|
|
68
|
-
assert.deepStrictEqual(storedSession, { userId: 'new' })
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
test('should not persist to sessionStore when pikkuUserId is not set', async () => {
|
|
72
|
-
let setCalled = false
|
|
73
|
-
const store = {
|
|
74
|
-
get: async () => undefined,
|
|
75
|
-
set: async () => {
|
|
76
|
-
setCalled = true
|
|
77
|
-
},
|
|
78
|
-
clear: async () => {},
|
|
79
|
-
}
|
|
80
|
-
const service = new PikkuSessionService(store as any)
|
|
81
|
-
await service.set({ userId: 'new' })
|
|
82
|
-
assert.strictEqual(setCalled, false)
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
test('should clear from sessionStore when pikkuUserId is set', async () => {
|
|
86
|
-
let clearedId: string | undefined
|
|
87
|
-
const store = {
|
|
88
|
-
get: async () => undefined,
|
|
89
|
-
set: async () => {},
|
|
90
|
-
clear: async (id: string) => {
|
|
91
|
-
clearedId = id
|
|
92
|
-
},
|
|
93
|
-
}
|
|
94
|
-
const service = new PikkuSessionService(store as any)
|
|
95
|
-
service.setPikkuUserId('user-123')
|
|
96
|
-
service.setInitial({ userId: 'user-123' })
|
|
97
|
-
await service.clear()
|
|
98
|
-
assert.strictEqual(clearedId, 'user-123')
|
|
99
|
-
assert.strictEqual(service.get(), undefined)
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
test('getPikkuUserId should return set value', () => {
|
|
103
|
-
const service = new PikkuSessionService()
|
|
104
|
-
assert.strictEqual(service.getPikkuUserId(), undefined)
|
|
105
|
-
service.setPikkuUserId('user-456')
|
|
106
|
-
assert.strictEqual(service.getPikkuUserId(), 'user-456')
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
describe('createMiddlewareSessionWireProps', () => {
|
|
111
|
-
test('should return session wire props', () => {
|
|
112
|
-
const service = new PikkuSessionService()
|
|
113
|
-
service.setInitial({ userId: 'user-1' })
|
|
114
|
-
const props = createMiddlewareSessionWireProps(service)
|
|
115
|
-
assert.ok('session' in props)
|
|
116
|
-
assert.ok('setSession' in props)
|
|
117
|
-
assert.ok('getSession' in props)
|
|
118
|
-
assert.ok('hasSessionChanged' in props)
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
test('setSession should call setInitial', () => {
|
|
122
|
-
const service = new PikkuSessionService()
|
|
123
|
-
const props = createMiddlewareSessionWireProps(service)
|
|
124
|
-
props.setSession({ userId: 'user-2' })
|
|
125
|
-
assert.deepStrictEqual(service.get(), { userId: 'user-2' })
|
|
126
|
-
})
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
describe('createFunctionSessionWireProps', () => {
|
|
130
|
-
test('should return function session wire props', () => {
|
|
131
|
-
const service = new PikkuSessionService()
|
|
132
|
-
service.setInitial({ userId: 'user-1' })
|
|
133
|
-
const props = createFunctionSessionWireProps(service)
|
|
134
|
-
assert.ok('session' in props)
|
|
135
|
-
assert.ok('setSession' in props)
|
|
136
|
-
assert.ok('clearSession' in props)
|
|
137
|
-
assert.ok('getSession' in props)
|
|
138
|
-
assert.ok('hasSessionChanged' in props)
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
test('session should be frozen initial', () => {
|
|
142
|
-
const service = new PikkuSessionService()
|
|
143
|
-
service.setInitial({ userId: 'user-1' })
|
|
144
|
-
const props = createFunctionSessionWireProps(service)
|
|
145
|
-
assert.deepStrictEqual(props.session, { userId: 'user-1' })
|
|
146
|
-
})
|
|
147
|
-
})
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { CoreUserSession } from '../types/core.types.js'
|
|
2
|
-
import type { SessionStore } from './session-store.js'
|
|
3
|
-
|
|
4
|
-
export interface SessionService<UserSession extends CoreUserSession> {
|
|
5
|
-
sessionChanged: boolean
|
|
6
|
-
initial: UserSession | undefined
|
|
7
|
-
setInitial(session: UserSession): void
|
|
8
|
-
freezeInitial(): UserSession | undefined
|
|
9
|
-
set(session: UserSession): Promise<void> | void
|
|
10
|
-
clear(): Promise<void> | void
|
|
11
|
-
get(): UserSession | undefined
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class PikkuSessionService<
|
|
15
|
-
UserSession extends CoreUserSession,
|
|
16
|
-
> implements SessionService<UserSession> {
|
|
17
|
-
public sessionChanged = false
|
|
18
|
-
public initial: UserSession | undefined
|
|
19
|
-
protected session: UserSession | undefined
|
|
20
|
-
private pikkuUserId?: string
|
|
21
|
-
|
|
22
|
-
constructor(private sessionStore?: SessionStore<UserSession>) {}
|
|
23
|
-
|
|
24
|
-
public setPikkuUserId(id: string) {
|
|
25
|
-
this.pikkuUserId = id
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public getPikkuUserId(): string | undefined {
|
|
29
|
-
return this.pikkuUserId
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public setInitial(session: UserSession) {
|
|
33
|
-
this.session = session
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public freezeInitial() {
|
|
37
|
-
if (this.initial === undefined) {
|
|
38
|
-
this.initial = this.session
|
|
39
|
-
}
|
|
40
|
-
return this.initial
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public async set(session: UserSession) {
|
|
44
|
-
this.sessionChanged = true
|
|
45
|
-
this.session = session
|
|
46
|
-
if (this.sessionStore && this.pikkuUserId) {
|
|
47
|
-
await this.sessionStore.set(this.pikkuUserId, session)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
public async clear() {
|
|
52
|
-
this.sessionChanged = true
|
|
53
|
-
this.session = undefined
|
|
54
|
-
if (this.sessionStore && this.pikkuUserId) {
|
|
55
|
-
await this.sessionStore.clear(this.pikkuUserId)
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public get(): UserSession | undefined {
|
|
60
|
-
return this.session
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function createMiddlewareSessionWireProps<
|
|
65
|
-
UserSession extends CoreUserSession,
|
|
66
|
-
>(session: SessionService<UserSession>) {
|
|
67
|
-
return {
|
|
68
|
-
session: session.get() as UserSession | undefined,
|
|
69
|
-
setSession: (s: UserSession) => session.setInitial(s),
|
|
70
|
-
getSession: () => session.get(),
|
|
71
|
-
hasSessionChanged: () => session.sessionChanged,
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function createFunctionSessionWireProps<
|
|
76
|
-
UserSession extends CoreUserSession,
|
|
77
|
-
>(session: SessionService<UserSession>) {
|
|
78
|
-
return {
|
|
79
|
-
session: session.freezeInitial(),
|
|
80
|
-
setSession: (s: UserSession) => session.set(s),
|
|
81
|
-
clearSession: () => session.clear(),
|
|
82
|
-
getSession: () => session.get(),
|
|
83
|
-
hasSessionChanged: () => session.sessionChanged,
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { describe, test, after } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
import { V8CoverageService } from './v8-coverage-service.js'
|
|
4
|
-
|
|
5
|
-
const service = new V8CoverageService()
|
|
6
|
-
|
|
7
|
-
function coveredProbe(n: number): number {
|
|
8
|
-
return n * 2
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
describe('V8CoverageService', () => {
|
|
12
|
-
after(async () => {
|
|
13
|
-
await service.stop()
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
test('start + takeCoverage reports call counts for functions invoked after start', async () => {
|
|
17
|
-
await service.start()
|
|
18
|
-
coveredProbe(21)
|
|
19
|
-
|
|
20
|
-
const snapshot = await service.takeCoverage()
|
|
21
|
-
assert.equal(snapshot.kind, 'v8-scripts')
|
|
22
|
-
if (snapshot.kind !== 'v8-scripts') return
|
|
23
|
-
const own = snapshot.scripts.find((s) =>
|
|
24
|
-
s.url.includes('v8-coverage-service.test')
|
|
25
|
-
)
|
|
26
|
-
assert.ok(own, 'own test script should appear in precise coverage')
|
|
27
|
-
const probe = own.functions.find((f) =>
|
|
28
|
-
f.functionName.includes('coveredProbe')
|
|
29
|
-
)
|
|
30
|
-
assert.ok(probe, 'coveredProbe should be tracked')
|
|
31
|
-
assert.ok(
|
|
32
|
-
probe.ranges[0].count >= 1,
|
|
33
|
-
`coveredProbe should have been counted, got ${probe.ranges[0].count}`
|
|
34
|
-
)
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
test('reset clears call counts so attribution per run is possible', async () => {
|
|
38
|
-
coveredProbe(1)
|
|
39
|
-
await service.reset()
|
|
40
|
-
const snapshot = await service.takeCoverage()
|
|
41
|
-
if (snapshot.kind !== 'v8-scripts') return assert.fail('expected scripts')
|
|
42
|
-
const own = snapshot.scripts.find((s) =>
|
|
43
|
-
s.url.includes('v8-coverage-service.test')
|
|
44
|
-
)
|
|
45
|
-
const probe = own?.functions.find((f) =>
|
|
46
|
-
f.functionName.includes('coveredProbe')
|
|
47
|
-
)
|
|
48
|
-
const count = probe?.ranges[0].count ?? 0
|
|
49
|
-
assert.equal(
|
|
50
|
-
count,
|
|
51
|
-
0,
|
|
52
|
-
`after reset coveredProbe count should be 0, got ${count}`
|
|
53
|
-
)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test('getScriptSource returns the executed source for mapping', async () => {
|
|
57
|
-
const snapshot = await service.takeCoverage()
|
|
58
|
-
if (snapshot.kind !== 'v8-scripts') return assert.fail('expected scripts')
|
|
59
|
-
const own = snapshot.scripts.find((s) =>
|
|
60
|
-
s.url.includes('v8-coverage-service.test')
|
|
61
|
-
)
|
|
62
|
-
assert.ok(own)
|
|
63
|
-
const source = await snapshot.getScriptSource(own.scriptId)
|
|
64
|
-
assert.ok(
|
|
65
|
-
source.includes('coveredProbe'),
|
|
66
|
-
'script source should contain the probe function'
|
|
67
|
-
)
|
|
68
|
-
})
|
|
69
|
-
})
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
export interface CoverageRange {
|
|
2
|
-
startOffset: number
|
|
3
|
-
endOffset: number
|
|
4
|
-
count: number
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface FunctionCoverage {
|
|
8
|
-
functionName: string
|
|
9
|
-
isBlockCoverage: boolean
|
|
10
|
-
ranges: CoverageRange[]
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface ScriptCoverage {
|
|
14
|
-
scriptId: string
|
|
15
|
-
url: string
|
|
16
|
-
functions: FunctionCoverage[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export type LineHits = Map<string, Map<number, number>>
|
|
20
|
-
|
|
21
|
-
export type CoverageSnapshot =
|
|
22
|
-
| {
|
|
23
|
-
kind: 'v8-scripts'
|
|
24
|
-
scripts: ScriptCoverage[]
|
|
25
|
-
getScriptSource: (scriptId: string) => Promise<string>
|
|
26
|
-
}
|
|
27
|
-
| { kind: 'line-hits'; lineHits: LineHits }
|
|
28
|
-
|
|
29
|
-
export type CoverageStatus = 'covered' | 'partial' | 'uncovered' | 'unknown'
|
|
30
|
-
|
|
31
|
-
export interface FunctionCoverageEntry {
|
|
32
|
-
name: string
|
|
33
|
-
sourceFile: string
|
|
34
|
-
exposed: boolean
|
|
35
|
-
description: string | null
|
|
36
|
-
coveredLines: number
|
|
37
|
-
totalLines: number
|
|
38
|
-
missedLines: number[]
|
|
39
|
-
ratio: number
|
|
40
|
-
status: CoverageStatus
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface FunctionCoverageReport {
|
|
44
|
-
generatedAt: string
|
|
45
|
-
summary: {
|
|
46
|
-
total: number
|
|
47
|
-
covered: number
|
|
48
|
-
partial: number
|
|
49
|
-
uncovered: number
|
|
50
|
-
unknown: number
|
|
51
|
-
overallRatio: number
|
|
52
|
-
}
|
|
53
|
-
functions: FunctionCoverageEntry[]
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface CoverageFunctionMeta {
|
|
57
|
-
name: string
|
|
58
|
-
sourceFile: string
|
|
59
|
-
bodySourceFile?: string
|
|
60
|
-
exportedName?: string
|
|
61
|
-
expose?: boolean
|
|
62
|
-
description?: string | null
|
|
63
|
-
bodyStart?: number
|
|
64
|
-
bodyEnd?: number
|
|
65
|
-
funcWrapper?: string
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export interface CoverageService {
|
|
69
|
-
start(): Promise<void>
|
|
70
|
-
takeCoverage(): Promise<CoverageSnapshot>
|
|
71
|
-
/** Provided by the process that booted the backend (the pikku CLI); absent
|
|
72
|
-
* when the runtime only exposes raw snapshots. */
|
|
73
|
-
takeReport?(
|
|
74
|
-
functionsMeta: Record<string, CoverageFunctionMeta>
|
|
75
|
-
): Promise<FunctionCoverageReport>
|
|
76
|
-
reset(): Promise<void>
|
|
77
|
-
stop(): Promise<void>
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
type InspectorSession = {
|
|
81
|
-
connect(): void
|
|
82
|
-
disconnect(): void
|
|
83
|
-
post(
|
|
84
|
-
method: string,
|
|
85
|
-
params?: unknown,
|
|
86
|
-
callback?: (err: Error | null, result?: any) => void
|
|
87
|
-
): void
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export class V8CoverageService implements CoverageService {
|
|
91
|
-
private session: InspectorSession | null = null
|
|
92
|
-
private startPromise: Promise<void> | null = null
|
|
93
|
-
|
|
94
|
-
private post<T>(method: string, params?: unknown): Promise<T> {
|
|
95
|
-
const session = this.session
|
|
96
|
-
if (!session) {
|
|
97
|
-
throw new Error('V8CoverageService not started — call start() first')
|
|
98
|
-
}
|
|
99
|
-
return new Promise<T>((resolve, reject) => {
|
|
100
|
-
session.post(method, params, (err, result) =>
|
|
101
|
-
err ? reject(err) : resolve(result as T)
|
|
102
|
-
)
|
|
103
|
-
})
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
start(): Promise<void> {
|
|
107
|
-
this.startPromise ??= this.doStart()
|
|
108
|
-
return this.startPromise
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private async doStart(): Promise<void> {
|
|
112
|
-
// knowledge: decisions/internals/node-only-builtins-are-imported-dynamically.md
|
|
113
|
-
const inspector = await import('node:inspector')
|
|
114
|
-
this.session = new inspector.Session() as unknown as InspectorSession
|
|
115
|
-
this.session.connect()
|
|
116
|
-
await this.post('Profiler.enable')
|
|
117
|
-
await this.post('Debugger.enable')
|
|
118
|
-
await this.post('Profiler.startPreciseCoverage', {
|
|
119
|
-
callCount: true,
|
|
120
|
-
detailed: true,
|
|
121
|
-
})
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
async takeCoverage(): Promise<CoverageSnapshot> {
|
|
125
|
-
const { result } = await this.post<{ result: ScriptCoverage[] }>(
|
|
126
|
-
'Profiler.takePreciseCoverage'
|
|
127
|
-
)
|
|
128
|
-
return {
|
|
129
|
-
kind: 'v8-scripts',
|
|
130
|
-
scripts: result.filter((script) => script.url.startsWith('file://')),
|
|
131
|
-
getScriptSource: (scriptId) => this.getScriptSource(scriptId),
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
async getScriptSource(scriptId: string): Promise<string> {
|
|
136
|
-
const { scriptSource } = await this.post<{ scriptSource: string }>(
|
|
137
|
-
'Debugger.getScriptSource',
|
|
138
|
-
{ scriptId }
|
|
139
|
-
)
|
|
140
|
-
return scriptSource
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
async reset(): Promise<void> {
|
|
144
|
-
await this.post('Profiler.stopPreciseCoverage')
|
|
145
|
-
await this.post('Profiler.startPreciseCoverage', {
|
|
146
|
-
callCount: true,
|
|
147
|
-
detailed: true,
|
|
148
|
-
})
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
async stop(): Promise<void> {
|
|
152
|
-
if (!this.session) return
|
|
153
|
-
try {
|
|
154
|
-
await this.post('Profiler.stopPreciseCoverage')
|
|
155
|
-
await this.post('Profiler.disable')
|
|
156
|
-
await this.post('Debugger.disable')
|
|
157
|
-
} finally {
|
|
158
|
-
this.session.disconnect()
|
|
159
|
-
this.session = null
|
|
160
|
-
this.startPromise = null
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface VariablesService {
|
|
2
|
-
get<T = string>(name: string): Promise<T | undefined> | T | undefined
|
|
3
|
-
/** Same contract as `SecretService.getSecrets`: missing keys are omitted, hence `Partial<T>`. */
|
|
4
|
-
getVariables<T extends Record<string, unknown> = Record<string, unknown>>(
|
|
5
|
-
names: (keyof T & string)[]
|
|
6
|
-
): Promise<Partial<T>> | Partial<T>
|
|
7
|
-
getAll: () =>
|
|
8
|
-
| Promise<Record<string, string | undefined>>
|
|
9
|
-
| Record<string, string | undefined>
|
|
10
|
-
set: (name: string, value: unknown) => Promise<void> | void
|
|
11
|
-
has: (name: string) => Promise<boolean> | boolean
|
|
12
|
-
delete: (name: string) => Promise<void> | void
|
|
13
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { NotImplementedError } from '../errors/errors.js'
|
|
2
|
-
import { hmacSha256Hex, timingSafeStringEqual } from '../utils/hmac.js'
|
|
3
|
-
import type { Safe } from '../classification/secret-value.js'
|
|
4
|
-
|
|
5
|
-
export interface SendWebhookInput {
|
|
6
|
-
url: string
|
|
7
|
-
/** Sent as the `X-Pikku-Event` header. */
|
|
8
|
-
event?: string
|
|
9
|
-
data: unknown
|
|
10
|
-
headers?: Record<string, string>
|
|
11
|
-
/** A raw HMAC key, not a secret name — overrides `config.webhook.secret`. */
|
|
12
|
-
secret?: string
|
|
13
|
-
/** Overrides `config.webhook.retries`. */
|
|
14
|
-
retries?: number
|
|
15
|
-
/** A concrete delay (`30000` or `'30s'`) selects fixed backoff; omitted means exponential. */
|
|
16
|
-
retryDelay?: string | number
|
|
17
|
-
/** Persisted only by store-backed implementations; the queue-only default ignores it. */
|
|
18
|
-
organizationId?: string
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface SendWebhookResult {
|
|
22
|
-
jobId: string
|
|
23
|
-
/**
|
|
24
|
-
* The delivery row's id, which is what `getDelivery` reads back. Present only
|
|
25
|
-
* on store-backed implementations. It is not interchangeable with `jobId`: a
|
|
26
|
-
* broker is free to assign its own identity — the JetStream queue returns a
|
|
27
|
-
* stream sequence — so a caller that hands `jobId` to `getDelivery` looks up
|
|
28
|
-
* an id that was never written.
|
|
29
|
-
*/
|
|
30
|
-
deliveryId?: string
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface WebhookServiceConfig {
|
|
34
|
-
retries?: number
|
|
35
|
-
/** Omitted means exponential backoff. */
|
|
36
|
-
retryDelay?: string | number
|
|
37
|
-
/** A secret *name* resolved through the secret service, unlike `SendWebhookInput.secret`. */
|
|
38
|
-
secret?: string
|
|
39
|
-
signatureHeader?: string
|
|
40
|
-
/**
|
|
41
|
-
* SSRF allowlist. Set: only these hostnames may be delivered to. Omitted:
|
|
42
|
-
* private/internal hosts are blocked and every other public host is allowed.
|
|
43
|
-
*/
|
|
44
|
-
allowedHosts?: string[]
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface WebhookJobData {
|
|
48
|
-
url: string
|
|
49
|
-
event?: string
|
|
50
|
-
body: string
|
|
51
|
-
headers: Record<string, string>
|
|
52
|
-
/**
|
|
53
|
-
* Present only when a store-backed implementation enqueued the job. Doubles
|
|
54
|
-
* as the queue `jobId`, so it is stable across retries.
|
|
55
|
-
*/
|
|
56
|
-
deliveryId?: string
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface WebhookAttemptResult {
|
|
60
|
-
/** Absent when the request never completed. */
|
|
61
|
-
statusCode?: number
|
|
62
|
-
/** Truncated; captured on failure only. */
|
|
63
|
-
responseBody?: string
|
|
64
|
-
error?: string
|
|
65
|
-
delivered: boolean
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export interface WebhookDeliveryRecord {
|
|
69
|
-
deliveryId: string
|
|
70
|
-
organizationId: string | null
|
|
71
|
-
url: string
|
|
72
|
-
event: string | null
|
|
73
|
-
status: 'pending' | 'delivered' | 'failed'
|
|
74
|
-
attempts: number
|
|
75
|
-
createdAt: Date
|
|
76
|
-
updatedAt: Date
|
|
77
|
-
deliveredAt: Date | null
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export interface WebhookAttemptRecord {
|
|
81
|
-
attemptId: string
|
|
82
|
-
deliveryId: string
|
|
83
|
-
attemptNumber: number
|
|
84
|
-
statusCode: number | null
|
|
85
|
-
responseBody: string | null
|
|
86
|
-
error: string | null
|
|
87
|
-
createdAt: Date
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface WebhookDeliveryWithAttempts {
|
|
91
|
-
delivery: WebhookDeliveryRecord
|
|
92
|
-
attempts: WebhookAttemptRecord[]
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export const PIKKU_OUTGOING_WEBHOOK_QUEUE_NAME = 'pikku-outgoing-webhooks'
|
|
96
|
-
|
|
97
|
-
export const DEFAULT_WEBHOOK_SIGNATURE_HEADER = 'X-Pikku-Signature'
|
|
98
|
-
|
|
99
|
-
export const DEFAULT_WEBHOOK_RETRIES = 3
|
|
100
|
-
|
|
101
|
-
export abstract class WebhookService {
|
|
102
|
-
abstract send<T extends SendWebhookInput>(
|
|
103
|
-
input: Safe<T>
|
|
104
|
-
): Promise<SendWebhookResult>
|
|
105
|
-
|
|
106
|
-
/** Produces the header value, `sha256=<hex>`, not the bare digest. */
|
|
107
|
-
protected sign(secret: string, body: string): string {
|
|
108
|
-
return `sha256=${hmacSha256Hex(secret, body)}`
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/** Public because receivers verify with it; they share the signing scheme. */
|
|
112
|
-
public verify(secret: string, signature: string, body: string): boolean {
|
|
113
|
-
return timingSafeStringEqual(this.sign(secret, body), signature)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* The three methods below are optional capability: the default queue-only
|
|
118
|
-
* service keeps no history and throws, and a store-backed implementation
|
|
119
|
-
* (e.g. `KyselyWebhookService` in `@pikku/kysely`) overrides them.
|
|
120
|
-
*/
|
|
121
|
-
public recordAttempt(
|
|
122
|
-
_deliveryId: string,
|
|
123
|
-
_result: WebhookAttemptResult
|
|
124
|
-
): Promise<void> {
|
|
125
|
-
throw new NotImplementedError(
|
|
126
|
-
'webhook delivery persistence is not configured'
|
|
127
|
-
)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** Most recent first. */
|
|
131
|
-
public listDeliveries(_opts?: {
|
|
132
|
-
organizationId?: string
|
|
133
|
-
limit?: number
|
|
134
|
-
}): Promise<WebhookDeliveryRecord[]> {
|
|
135
|
-
throw new NotImplementedError(
|
|
136
|
-
'webhook delivery persistence is not configured'
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
public getDelivery(
|
|
141
|
-
_deliveryId: string
|
|
142
|
-
): Promise<WebhookDeliveryWithAttempts | null> {
|
|
143
|
-
throw new NotImplementedError(
|
|
144
|
-
'webhook delivery persistence is not configured'
|
|
145
|
-
)
|
|
146
|
-
}
|
|
147
|
-
}
|