@pikku/core 0.12.106 → 0.12.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +358 -0
- package/dist/analytics/analytics.d.ts +6 -0
- package/dist/analytics/analytics.js +58 -0
- package/dist/analytics/analytics.types.d.ts +156 -0
- package/dist/analytics/analytics.types.js +1 -0
- package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
- package/dist/analytics/anonymous-analytics-identity.js +27 -0
- package/dist/analytics/compose-analytics-identity.d.ts +14 -0
- package/dist/analytics/compose-analytics-identity.js +33 -0
- package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
- package/dist/analytics/cookie-analytics-identity.js +37 -0
- package/dist/analytics/define-analytics-events.d.ts +22 -0
- package/dist/analytics/define-analytics-events.js +9 -0
- package/dist/analytics/fan-out-analytics.d.ts +15 -0
- package/dist/analytics/fan-out-analytics.js +36 -0
- package/dist/analytics/index.d.ts +13 -0
- package/dist/analytics/index.js +8 -0
- package/dist/analytics/logger-analytics-service.d.ts +14 -0
- package/dist/analytics/logger-analytics-service.js +23 -0
- package/dist/analytics/mint-cookie.d.ts +44 -0
- package/dist/analytics/mint-cookie.js +55 -0
- package/dist/errors/errors.d.ts +7 -0
- package/dist/errors/errors.js +17 -0
- package/dist/function/function-meta.types.d.ts +2 -0
- package/dist/function/function-runner.js +29 -0
- package/dist/function/functions.types.d.ts +22 -3
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/pikku-state.d.ts +1 -1
- package/dist/scopes.d.ts +11 -0
- package/dist/scopes.js +17 -0
- package/dist/services/credential-wire-service.d.ts +1 -1
- package/dist/services/feature-flag-service.d.ts +100 -0
- package/dist/services/feature-flag-service.js +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/meta-service.d.ts +16 -0
- package/dist/services/meta-service.js +19 -0
- package/dist/services/webhook-service.d.ts +7 -2
- package/dist/services/webhook-service.js +11 -6
- package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
- package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
- package/dist/types/core.types.d.ts +23 -0
- package/dist/wirings/agent/agent-rpc.d.ts +1 -1
- package/dist/wirings/agent/agent-turn.d.ts +1 -1
- package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
- package/dist/wirings/channel/channel-common.d.ts +1 -1
- package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
- package/dist/wirings/channel/channel-runner.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
- package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
- package/dist/wirings/flag/assert-feature-available.js +23 -0
- package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
- package/dist/wirings/flag/cached-flag-source.js +96 -0
- package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
- package/dist/wirings/flag/define-feature-flags.js +32 -0
- package/dist/wirings/flag/flag.types.d.ts +97 -0
- package/dist/wirings/flag/flag.types.js +1 -0
- package/dist/wirings/flag/index.d.ts +7 -0
- package/dist/wirings/flag/index.js +5 -0
- package/dist/wirings/flag/resolve-flag.d.ts +52 -0
- package/dist/wirings/flag/resolve-flag.js +90 -0
- package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
- package/dist/wirings/flag/validate-flag-definitions.js +103 -0
- package/dist/wirings/rpc/rpc-runner.js +3 -0
- package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
- package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
- package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
- package/package.json +11 -5
- package/run-tests.sh +17 -9
- package/src/public-surface.json +26 -0
- package/src/agent-naming.test.ts +0 -68
- package/src/api-report.test.ts +0 -138
- package/src/app-alias-surface.test.ts +0 -179
- package/src/app-leaf-surface.test.ts +0 -222
- package/src/bootstrap-compat/root.ts +0 -20
- package/src/classification/column-form.test.ts +0 -97
- package/src/classification/column-form.ts +0 -55
- package/src/classification/data-classification.ts +0 -73
- package/src/classification/index.ts +0 -40
- package/src/classification/key-ids.ts +0 -2
- package/src/classification/secret-value.test.ts +0 -204
- package/src/classification/secret-value.ts +0 -106
- package/src/crypto-utils.test.ts +0 -668
- package/src/crypto-utils.ts +0 -460
- package/src/dev/hot-reload.test.ts +0 -587
- package/src/dev/hot-reload.ts +0 -225
- package/src/dev/module-runner.test.ts +0 -235
- package/src/dev/module-runner.ts +0 -138
- package/src/dev/reload-meta.test.ts +0 -183
- package/src/dev/reload-meta.ts +0 -144
- package/src/ecosystem-tier-removed.test.ts +0 -72
- package/src/env.ts +0 -1
- package/src/errors/error-handler.ts +0 -77
- package/src/errors/error.test.ts +0 -229
- package/src/errors/errors.ts +0 -393
- package/src/errors/index.ts +0 -11
- package/src/errors/serialized-error.ts +0 -12
- package/src/factory-functions.test.ts +0 -111
- package/src/function/abort-scope.test.ts +0 -97
- package/src/function/abort-scope.ts +0 -80
- package/src/function/function-meta.types.ts +0 -151
- package/src/function/function-runner.test.ts +0 -1619
- package/src/function/function-runner.ts +0 -499
- package/src/function/functions.types.ts +0 -319
- package/src/function/index.ts +0 -40
- package/src/function/list.types.test.ts +0 -100
- package/src/function/list.types.ts +0 -69
- package/src/function/pikku-request.test.ts +0 -35
- package/src/function/pikku-request.ts +0 -17
- package/src/gopass-secrets-removed.test.ts +0 -51
- package/src/handle-error.test.ts +0 -532
- package/src/handle-error.ts +0 -64
- package/src/middleware/auth-apikey.test.ts +0 -362
- package/src/middleware/auth-apikey.ts +0 -39
- package/src/middleware/auth-bearer.test.ts +0 -566
- package/src/middleware/auth-bearer.ts +0 -83
- package/src/middleware/auth-cookie.test.ts +0 -572
- package/src/middleware/auth-cookie.ts +0 -107
- package/src/middleware/cors.test.ts +0 -579
- package/src/middleware/cors.ts +0 -103
- package/src/middleware/index.ts +0 -30
- package/src/middleware/middleware-factories.ts +0 -76
- package/src/middleware/middleware.types.ts +0 -61
- package/src/middleware/remote-auth.test.ts +0 -547
- package/src/middleware/remote-auth.ts +0 -95
- package/src/middleware/remote-jobs-secret.ts +0 -35
- package/src/middleware/require-origin.test.ts +0 -115
- package/src/middleware/require-origin.ts +0 -79
- package/src/middleware/telemetry.ts +0 -83
- package/src/middleware-runner.test.ts +0 -578
- package/src/middleware-runner.ts +0 -232
- package/src/no-any-casts.test.ts +0 -57
- package/src/no-root-barrel.test.ts +0 -122
- package/src/permissions.test.ts +0 -256
- package/src/permissions.ts +0 -217
- package/src/pikku-state.test.ts +0 -198
- package/src/pikku-state.ts +0 -206
- package/src/production-barrels-stay-lean.test.ts +0 -110
- package/src/public-surface.test.ts +0 -133
- package/src/remote.test.ts +0 -173
- package/src/remote.ts +0 -56
- package/src/removed-legacy-exports.test.ts +0 -66
- package/src/run-tests-script.test.ts +0 -67
- package/src/schema.test.ts +0 -430
- package/src/schema.ts +0 -204
- package/src/scopes.test.ts +0 -203
- package/src/scopes.ts +0 -67
- package/src/services/agent-run-state-service.ts +0 -37
- package/src/services/agent-runner-service.ts +0 -238
- package/src/services/agent-storage-service.ts +0 -39
- package/src/services/ai-embedding-service.ts +0 -9
- package/src/services/audit-service.test.ts +0 -44
- package/src/services/audit-service.ts +0 -280
- package/src/services/content-service.ts +0 -65
- package/src/services/credential-service.ts +0 -20
- package/src/services/credential-wire-service.test.ts +0 -235
- package/src/services/credential-wire-service.ts +0 -120
- package/src/services/deployment-service.ts +0 -32
- package/src/services/email-service.test.ts +0 -100
- package/src/services/email-service.ts +0 -60
- package/src/services/email-template.test.ts +0 -311
- package/src/services/email-template.ts +0 -254
- package/src/services/file-scenario-run-store.test.ts +0 -349
- package/src/services/file-scenario-run-store.ts +0 -282
- package/src/services/gateway-service.ts +0 -5
- package/src/services/http-personas-converse.test.ts +0 -274
- package/src/services/http-personas.test.ts +0 -379
- package/src/services/http-personas.ts +0 -508
- package/src/services/in-memory-agent-run-state-service.ts +0 -87
- package/src/services/in-memory-queue-service.test.ts +0 -162
- package/src/services/in-memory-queue-service.ts +0 -78
- package/src/services/in-memory-session-store.test.ts +0 -58
- package/src/services/in-memory-session-store.ts +0 -20
- package/src/services/in-memory-trigger-service.ts +0 -47
- package/src/services/in-memory-workflow-service.test.ts +0 -430
- package/src/services/in-memory-workflow-service.ts +0 -595
- package/src/services/index.ts +0 -192
- package/src/services/istanbul-coverage-service.test.ts +0 -66
- package/src/services/istanbul-coverage-service.ts +0 -59
- package/src/services/jwt-service.ts +0 -15
- package/src/services/local-content-request-handler.test.ts +0 -240
- package/src/services/local-content-request-handler.ts +0 -295
- package/src/services/local-content.test.ts +0 -186
- package/src/services/local-content.ts +0 -242
- package/src/services/local-credential-service.ts +0 -63
- package/src/services/local-email-service.test.ts +0 -182
- package/src/services/local-email-service.ts +0 -43
- package/src/services/local-gateway-service.ts +0 -51
- package/src/services/local-secrets.test.ts +0 -95
- package/src/services/local-secrets.ts +0 -71
- package/src/services/local-variables.test.ts +0 -61
- package/src/services/local-variables.ts +0 -45
- package/src/services/logger-console.test.ts +0 -117
- package/src/services/logger-console.ts +0 -174
- package/src/services/logger.ts +0 -48
- package/src/services/meta-service.test.ts +0 -75
- package/src/services/meta-service.ts +0 -767
- package/src/services/persona-actor-secret.test.ts +0 -68
- package/src/services/persona-actor-secret.ts +0 -70
- package/src/services/persona-sign-in.test.ts +0 -219
- package/src/services/persona-sign-in.ts +0 -238
- package/src/services/personas-service.ts +0 -191
- package/src/services/pikku-user-id.test.ts +0 -62
- package/src/services/pikku-user-id.ts +0 -13
- package/src/services/queue-webhook-service.test.ts +0 -409
- package/src/services/queue-webhook-service.ts +0 -150
- package/src/services/remote-jobs.test.ts +0 -106
- package/src/services/remote-jobs.ts +0 -92
- package/src/services/scheduler-service.ts +0 -37
- package/src/services/schema-service.ts +0 -10
- package/src/services/scope-service.ts +0 -91
- package/src/services/scoped-credential-service.test.ts +0 -86
- package/src/services/scoped-credential-service.ts +0 -63
- package/src/services/scoped-secret-service.test.ts +0 -93
- package/src/services/scoped-secret-service.ts +0 -40
- package/src/services/secret-host-binding.test.ts +0 -138
- package/src/services/secret-host-binding.ts +0 -51
- package/src/services/secret-service.ts +0 -25
- package/src/services/secretless.test.ts +0 -54
- package/src/services/secretless.ts +0 -29
- package/src/services/session-store.ts +0 -9
- package/src/services/stub-tracker.test.ts +0 -104
- package/src/services/stub-tracker.ts +0 -175
- package/src/services/system-role-guard.test.ts +0 -96
- package/src/services/system-role-guard.ts +0 -71
- package/src/services/temporary-file-service.ts +0 -76
- package/src/services/trigger-service.ts +0 -5
- package/src/services/typed-credential-service.ts +0 -83
- package/src/services/typed-secret-service.test.ts +0 -204
- package/src/services/typed-secret-service.ts +0 -132
- package/src/services/typed-variables-service.test.ts +0 -166
- package/src/services/typed-variables-service.ts +0 -166
- package/src/services/user-session-service.test.ts +0 -147
- package/src/services/user-session-service.ts +0 -85
- package/src/services/v8-coverage-service.test.ts +0 -69
- package/src/services/v8-coverage-service.ts +0 -163
- package/src/services/variables-service.ts +0 -13
- package/src/services/webhook-service.ts +0 -147
- package/src/services/workflow-service.ts +0 -120
- package/src/side-effects-are-declared.test.ts +0 -84
- package/src/source-files-stay-composable.test.ts +0 -41
- package/src/template-alias-surface.test.ts +0 -240
- package/src/test-utils.ts +0 -38
- package/src/testing/index.ts +0 -3
- package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
- package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
- package/src/testing/service-tests/channel-store-tests.ts +0 -98
- package/src/testing/service-tests/credential-service-tests.ts +0 -143
- package/src/testing/service-tests/deployment-service-tests.ts +0 -33
- package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
- package/src/testing/service-tests/secret-service-tests.ts +0 -105
- package/src/testing/service-tests/session-store-tests.ts +0 -62
- package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
- package/src/testing/service-tests/workflow-service-tests.ts +0 -308
- package/src/testing/service-tests.ts +0 -95
- package/src/time-utils.test.ts +0 -56
- package/src/time-utils.ts +0 -89
- package/src/types/core.types.ts +0 -446
- package/src/types/index.ts +0 -25
- package/src/types/state.types.ts +0 -226
- package/src/types/typed-credentials.test.ts +0 -72
- package/src/utils/hash.test.ts +0 -68
- package/src/utils/hash.ts +0 -26
- package/src/utils/hmac.ts +0 -21
- package/src/utils/node-host-resolver.ts +0 -20
- package/src/utils/safe-fetch.test.ts +0 -515
- package/src/utils/safe-fetch.ts +0 -347
- package/src/utils.test.ts +0 -359
- package/src/utils.ts +0 -165
- package/src/version.test.ts +0 -80
- package/src/version.ts +0 -25
- package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
- package/src/wirings/actor-flow/index.ts +0 -10
- package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
- package/src/wirings/actor-flow/run-conversation.ts +0 -280
- package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
- package/src/wirings/addon/addon-runner.ts +0 -236
- package/src/wirings/addon/addon-scopes.test.ts +0 -225
- package/src/wirings/addon/addon-secrets.test.ts +0 -391
- package/src/wirings/addon/index.ts +0 -12
- package/src/wirings/addon/remote-addon-auth.ts +0 -65
- package/src/wirings/addon/wire-addon.test.ts +0 -102
- package/src/wirings/addon/wire-addon.ts +0 -202
- package/src/wirings/addon/wire-remote-addon.ts +0 -41
- package/src/wirings/agent/agent-agui.test.ts +0 -1213
- package/src/wirings/agent/agent-agui.ts +0 -405
- package/src/wirings/agent/agent-authorization.test.ts +0 -208
- package/src/wirings/agent/agent-finalize.test.ts +0 -187
- package/src/wirings/agent/agent-finalize.ts +0 -197
- package/src/wirings/agent/agent-helpers.test.ts +0 -215
- package/src/wirings/agent/agent-helpers.ts +0 -96
- package/src/wirings/agent/agent-interrupt.test.ts +0 -833
- package/src/wirings/agent/agent-interrupt.ts +0 -400
- package/src/wirings/agent/agent-memory.test.ts +0 -397
- package/src/wirings/agent/agent-memory.ts +0 -496
- package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
- package/src/wirings/agent/agent-model-config.test.ts +0 -103
- package/src/wirings/agent/agent-model-config.ts +0 -59
- package/src/wirings/agent/agent-prepare.test.ts +0 -977
- package/src/wirings/agent/agent-prepare.ts +0 -1083
- package/src/wirings/agent/agent-registry.test.ts +0 -455
- package/src/wirings/agent/agent-registry.ts +0 -99
- package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
- package/src/wirings/agent/agent-rpc.ts +0 -116
- package/src/wirings/agent/agent-runner.test.ts +0 -1229
- package/src/wirings/agent/agent-runner.ts +0 -858
- package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
- package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
- package/src/wirings/agent/agent-stream.test.ts +0 -1800
- package/src/wirings/agent/agent-stream.ts +0 -1639
- package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
- package/src/wirings/agent/agent-turn.test.ts +0 -65
- package/src/wirings/agent/agent-turn.ts +0 -122
- package/src/wirings/agent/agent-utils.ts +0 -20
- package/src/wirings/agent/agent.types.ts +0 -676
- package/src/wirings/agent/index.ts +0 -58
- package/src/wirings/agent/voice-input.test.ts +0 -220
- package/src/wirings/agent/voice-input.ts +0 -180
- package/src/wirings/agent/voice-output.test.ts +0 -510
- package/src/wirings/agent/voice-output.ts +0 -311
- package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
- package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
- package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
- package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
- package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
- package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
- package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
- package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
- package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
- package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
- package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
- package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
- package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
- package/src/wirings/agent-scorer/index.ts +0 -23
- package/src/wirings/channel/channel-common.ts +0 -102
- package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
- package/src/wirings/channel/channel-handler.test.ts +0 -322
- package/src/wirings/channel/channel-handler.ts +0 -259
- package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
- package/src/wirings/channel/channel-host-rpc.ts +0 -69
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
- package/src/wirings/channel/channel-middleware-runner.ts +0 -126
- package/src/wirings/channel/channel-rpc-registry.ts +0 -116
- package/src/wirings/channel/channel-rpc-responder.ts +0 -117
- package/src/wirings/channel/channel-rpc-service.ts +0 -132
- package/src/wirings/channel/channel-rpc-validators.ts +0 -65
- package/src/wirings/channel/channel-rpc.test.ts +0 -841
- package/src/wirings/channel/channel-rpc.ts +0 -5
- package/src/wirings/channel/channel-rpc.types.ts +0 -160
- package/src/wirings/channel/channel-runner.ts +0 -164
- package/src/wirings/channel/channel-store.ts +0 -35
- package/src/wirings/channel/channel.types.ts +0 -193
- package/src/wirings/channel/define-channel-routes.ts +0 -5
- package/src/wirings/channel/eventhub-service.ts +0 -16
- package/src/wirings/channel/eventhub-store.ts +0 -13
- package/src/wirings/channel/index.ts +0 -40
- package/src/wirings/channel/local/index.ts +0 -3
- package/src/wirings/channel/local/local-channel-handler.ts +0 -98
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
- package/src/wirings/channel/local/local-channel-runner.ts +0 -271
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
- package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
- package/src/wirings/channel/log-channels.ts +0 -16
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
- package/src/wirings/channel/serverless/index.ts +0 -6
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
- package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
- package/src/wirings/cli/channel/cli-approval.ts +0 -135
- package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
- package/src/wirings/cli/channel/index.ts +0 -6
- package/src/wirings/cli/cli-runner.test.ts +0 -969
- package/src/wirings/cli/cli-runner.ts +0 -538
- package/src/wirings/cli/cli.types.ts +0 -388
- package/src/wirings/cli/command-parser.test.ts +0 -1120
- package/src/wirings/cli/command-parser.ts +0 -713
- package/src/wirings/cli/define-cli-commands.ts +0 -13
- package/src/wirings/cli/format-cli-error.test.ts +0 -91
- package/src/wirings/cli/format-cli-error.ts +0 -96
- package/src/wirings/cli/index.ts +0 -19
- package/src/wirings/credential/credential.types.ts +0 -37
- package/src/wirings/credential/define-credential.ts +0 -49
- package/src/wirings/credential/index.ts +0 -7
- package/src/wirings/credential/validate-credential-definitions.ts +0 -63
- package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
- package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
- package/src/wirings/gateway/gateway-runner.test.ts +0 -581
- package/src/wirings/gateway/gateway-runner.ts +0 -411
- package/src/wirings/gateway/gateway.types.ts +0 -137
- package/src/wirings/gateway/index.ts +0 -15
- package/src/wirings/http/http-routes.test.ts +0 -318
- package/src/wirings/http/http-routes.ts +0 -111
- package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
- package/src/wirings/http/http-runner.test.ts +0 -503
- package/src/wirings/http/http-runner.ts +0 -462
- package/src/wirings/http/http.types.ts +0 -307
- package/src/wirings/http/index.ts +0 -27
- package/src/wirings/http/log-http-routes.ts +0 -18
- package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
- package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
- package/src/wirings/http/routers/http-router.ts +0 -13
- package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
- package/src/wirings/http/routers/path-to-regex.ts +0 -115
- package/src/wirings/http/web-request.test.ts +0 -382
- package/src/wirings/http/web-request.ts +0 -162
- package/src/wirings/mcp/index.ts +0 -26
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
- package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
- package/src/wirings/mcp/mcp-runner.test.ts +0 -588
- package/src/wirings/mcp/mcp-runner.ts +0 -330
- package/src/wirings/mcp/mcp.types.ts +0 -199
- package/src/wirings/node/index.ts +0 -2
- package/src/wirings/node/node.types.ts +0 -23
- package/src/wirings/oauth2/index.ts +0 -1
- package/src/wirings/oauth2/oauth2.types.ts +0 -12
- package/src/wirings/persona/define-personas.ts +0 -33
- package/src/wirings/persona/index.ts +0 -75
- package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
- package/src/wirings/persona/persona-app-scopes.ts +0 -74
- package/src/wirings/persona/persona-email.ts +0 -87
- package/src/wirings/persona/persona-environments.test.ts +0 -194
- package/src/wirings/persona/persona-environments.ts +0 -138
- package/src/wirings/persona/persona-mailbox.ts +0 -156
- package/src/wirings/persona/persona.test.ts +0 -230
- package/src/wirings/persona/persona.types.ts +0 -156
- package/src/wirings/persona/validate-personas.ts +0 -137
- package/src/wirings/queue/index.ts +0 -29
- package/src/wirings/queue/queue-identity.test.ts +0 -454
- package/src/wirings/queue/queue-identity.ts +0 -176
- package/src/wirings/queue/queue-runner.test.ts +0 -705
- package/src/wirings/queue/queue-runner.ts +0 -181
- package/src/wirings/queue/queue.types.ts +0 -161
- package/src/wirings/queue/register-queue-helper.ts +0 -46
- package/src/wirings/queue/signed-queue-service.ts +0 -60
- package/src/wirings/queue/validate-worker-config.test.ts +0 -108
- package/src/wirings/queue/validate-worker-config.ts +0 -90
- package/src/wirings/role/define-system-role.ts +0 -33
- package/src/wirings/role/index.ts +0 -13
- package/src/wirings/role/role.test.ts +0 -104
- package/src/wirings/role/role.types.ts +0 -47
- package/src/wirings/role/validate-role-definitions.ts +0 -93
- package/src/wirings/rpc/index.ts +0 -8
- package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
- package/src/wirings/rpc/rpc-runner.ts +0 -566
- package/src/wirings/rpc/rpc-types.ts +0 -87
- package/src/wirings/scheduler/index.ts +0 -11
- package/src/wirings/scheduler/log-schedulers.ts +0 -16
- package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
- package/src/wirings/scheduler/scheduler-runner.ts +0 -138
- package/src/wirings/scheduler/scheduler.types.ts +0 -42
- package/src/wirings/scope/define-scope.ts +0 -33
- package/src/wirings/scope/index.ts +0 -15
- package/src/wirings/scope/scope.test.ts +0 -159
- package/src/wirings/scope/scope.types.ts +0 -42
- package/src/wirings/scope/validate-scope-definitions.ts +0 -107
- package/src/wirings/secret/index.ts +0 -9
- package/src/wirings/secret/secret.types.ts +0 -70
- package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
- package/src/wirings/secret/validate-secret-definitions.ts +0 -88
- package/src/wirings/trigger/index.ts +0 -9
- package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
- package/src/wirings/trigger/trigger-runner.test.ts +0 -78
- package/src/wirings/trigger/trigger-runner.ts +0 -113
- package/src/wirings/trigger/trigger.types.ts +0 -100
- package/src/wirings/variable/index.ts +0 -8
- package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
- package/src/wirings/variable/validate-variable-definitions.ts +0 -71
- package/src/wirings/variable/variable.types.ts +0 -40
- package/src/wirings/virtual-user/index.ts +0 -107
- package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
- package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
- package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
- package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
- package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
- package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
- package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
- package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
- package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
- package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
- package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
- package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
- package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
- package/src/wirings/workflow/feature.test.ts +0 -131
- package/src/wirings/workflow/feature.ts +0 -59
- package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
- package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
- package/src/wirings/workflow/graph/graph-node.ts +0 -115
- package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
- package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
- package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
- package/src/wirings/workflow/graph/graph-validation.ts +0 -41
- package/src/wirings/workflow/graph/template.test.ts +0 -49
- package/src/wirings/workflow/graph/template.ts +0 -42
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
- package/src/wirings/workflow/index.ts +0 -107
- package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
- package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
- package/src/wirings/workflow/run-timeline.test.ts +0 -199
- package/src/wirings/workflow/run-timeline.ts +0 -185
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
- package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
- package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
- package/src/wirings/workflow/scenario-poll.test.ts +0 -64
- package/src/wirings/workflow/scenario-poll.ts +0 -27
- package/src/wirings/workflow/scenario-prose.test.ts +0 -275
- package/src/wirings/workflow/scenario-prose.ts +0 -86
- package/src/wirings/workflow/scenario-run.types.ts +0 -193
- package/src/wirings/workflow/scenario-service.test.ts +0 -147
- package/src/wirings/workflow/scenario-step-guards.ts +0 -23
- package/src/wirings/workflow/scenario-step.test.ts +0 -800
- package/src/wirings/workflow/scenario-step.types.ts +0 -262
- package/src/wirings/workflow/scenario-surface.test.ts +0 -146
- package/src/wirings/workflow/scenario-surface.ts +0 -71
- package/src/wirings/workflow/scenario.types.ts +0 -63
- package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
- package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
- package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
- package/src/wirings/workflow/workflow-approval.ts +0 -290
- package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
- package/src/wirings/workflow/workflow-constants.ts +0 -66
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
- package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
- package/src/wirings/workflow/workflow-errors.ts +0 -132
- package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
- package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
- package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
- package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
- package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
- package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
- package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
- package/src/wirings/workflow/workflow-recovery.ts +0 -192
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
- package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
- package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
- package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
- package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
- package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
- package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
- package/src/wirings/workflow/workflow-status-stream.ts +0 -144
- package/src/wirings/workflow/workflow-step-claim.ts +0 -46
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
- package/src/wirings/workflow/workflow-suspend.ts +0 -61
- package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
- package/src/wirings/workflow/workflow.types.ts +0 -268
- package/src/wirings-stay-decoupled.test.ts +0 -130
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.type-tests.json +0 -15
|
@@ -1,411 +0,0 @@
|
|
|
1
|
-
import { pikkuState } from '../../pikku-state.js'
|
|
2
|
-
import { NotFoundError, UnauthorizedError } from '../../errors/errors.js'
|
|
3
|
-
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
4
|
-
import { runMiddleware } from '../../middleware-runner.js'
|
|
5
|
-
import { httpRouter } from '../http/routers/http-router.js'
|
|
6
|
-
import type { CoreHTTPFunctionWiring } from '../http/http.types.js'
|
|
7
|
-
import type {
|
|
8
|
-
CoreGateway,
|
|
9
|
-
GatewayAdapter,
|
|
10
|
-
GatewayOutboundMessage,
|
|
11
|
-
PikkuGateway,
|
|
12
|
-
} from './gateway.types.js'
|
|
13
|
-
|
|
14
|
-
const resolvedAdapters = new WeakMap<CoreGateway, Promise<GatewayAdapter>>()
|
|
15
|
-
|
|
16
|
-
const gatewayHandlerFuncId = (name: string) => `gateway__${name}__handler`
|
|
17
|
-
|
|
18
|
-
// knowledge: decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md
|
|
19
|
-
const bridgeMiddlewareSession = async (wire: PikkuRawWire): Promise<void> => {
|
|
20
|
-
if (wire.session || !wire.getSession) return
|
|
21
|
-
const session = await wire.getSession()
|
|
22
|
-
if (session) {
|
|
23
|
-
wire.session = session
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Metadata the inspector recorded for the function the gateway was wired with.
|
|
29
|
-
* The bootstrap loads every meta file before any wiring file, so this is
|
|
30
|
-
* already populated by the time a gateway wires itself. A gateway wired by
|
|
31
|
-
* hand rather than through codegen has no entry, and falls back to the
|
|
32
|
-
* sessionless default below.
|
|
33
|
-
*/
|
|
34
|
-
const declaredHandlerMeta = (config: CoreGateway) => {
|
|
35
|
-
const declaredFuncId = pikkuState(null, 'gateway', 'meta')[config.name]
|
|
36
|
-
?.pikkuFuncId
|
|
37
|
-
return declaredFuncId
|
|
38
|
-
? pikkuState(null, 'function', 'meta')[declaredFuncId]
|
|
39
|
-
: undefined
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// knowledge: decisions/security/gateway-handlers-run-through-the-function-runner-gate.md
|
|
43
|
-
const registerGatewayHandler = (config: CoreGateway): string => {
|
|
44
|
-
const funcId = gatewayHandlerFuncId(config.name)
|
|
45
|
-
const funcMeta = pikkuState(null, 'function', 'meta')
|
|
46
|
-
const declared = declaredHandlerMeta(config)
|
|
47
|
-
funcMeta[funcId] = {
|
|
48
|
-
...declared,
|
|
49
|
-
pikkuFuncId: funcId,
|
|
50
|
-
inputSchemaName: declared?.inputSchemaName ?? null,
|
|
51
|
-
outputSchemaName: declared?.outputSchemaName ?? null,
|
|
52
|
-
sessionless: declared?.sessionless ?? true,
|
|
53
|
-
}
|
|
54
|
-
addFunction(funcId, config.func)
|
|
55
|
-
return funcId
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Tag middleware the inspector resolved for this gateway. It is keyed by
|
|
60
|
-
* gateway name rather than reachable from `config`, because `tags` is a
|
|
61
|
-
* compile-time input everywhere — nothing at runtime maps a tag to its
|
|
62
|
-
* middleware group.
|
|
63
|
-
*/
|
|
64
|
-
const gatewayInheritedMiddleware = (config: CoreGateway) =>
|
|
65
|
-
pikkuState(null, 'gateway', 'meta')[config.name]?.middleware
|
|
66
|
-
|
|
67
|
-
export const resolveGatewayAdapter = (
|
|
68
|
-
config: CoreGateway,
|
|
69
|
-
services: CoreSingletonServices
|
|
70
|
-
): Promise<GatewayAdapter> => {
|
|
71
|
-
let resolved = resolvedAdapters.get(config)
|
|
72
|
-
if (!resolved) {
|
|
73
|
-
resolved =
|
|
74
|
-
typeof config.adapter === 'function'
|
|
75
|
-
? Promise.resolve(config.adapter(services))
|
|
76
|
-
: Promise.resolve(config.adapter)
|
|
77
|
-
resolvedAdapters.set(config, resolved)
|
|
78
|
-
}
|
|
79
|
-
return resolved
|
|
80
|
-
}
|
|
81
|
-
import type {
|
|
82
|
-
PikkuWire,
|
|
83
|
-
PikkuRawWire,
|
|
84
|
-
CoreSingletonServices,
|
|
85
|
-
} from '../../types/core.types.js'
|
|
86
|
-
import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js'
|
|
87
|
-
export const wireGateway = (config: CoreGateway): void => {
|
|
88
|
-
pikkuState(null, 'gateway', 'gateways').set(config.name, config)
|
|
89
|
-
|
|
90
|
-
switch (config.type) {
|
|
91
|
-
case 'webhook':
|
|
92
|
-
wireWebhookGateway(config)
|
|
93
|
-
break
|
|
94
|
-
case 'websocket':
|
|
95
|
-
wireWebsocketGateway(config)
|
|
96
|
-
break
|
|
97
|
-
case 'listener':
|
|
98
|
-
wireListenerGateway(config)
|
|
99
|
-
break
|
|
100
|
-
default:
|
|
101
|
-
throw new Error(
|
|
102
|
-
`Unknown gateway type '${config.type}' for gateway '${config.name}'`
|
|
103
|
-
)
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const wireWebhookGateway = (config: CoreGateway): void => {
|
|
108
|
-
const { name, route, adapter } = config
|
|
109
|
-
if (!route) {
|
|
110
|
-
throw new Error(`Webhook gateway '${name}' requires a route`)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const postFuncId = `gateway__${name}__post`
|
|
114
|
-
const routes = pikkuState(null, 'http', 'routes')
|
|
115
|
-
|
|
116
|
-
const postHandler = {
|
|
117
|
-
auth: false,
|
|
118
|
-
func: createWebhookPostHandler(config),
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
addFunction(postFuncId, postHandler)
|
|
122
|
-
|
|
123
|
-
if (!routes.has('post')) {
|
|
124
|
-
routes.set('post', new Map())
|
|
125
|
-
}
|
|
126
|
-
routes.get('post')!.set(route, {
|
|
127
|
-
method: 'post',
|
|
128
|
-
route,
|
|
129
|
-
func: postHandler,
|
|
130
|
-
auth: false,
|
|
131
|
-
// A gateway handler takes (services, data, wire) rather than a pikku
|
|
132
|
-
// function's shape, so it never matches CorePikkuFunctionConfig. It is only
|
|
133
|
-
// ever invoked through runPikkuFunc, which is what makes that safe.
|
|
134
|
-
} as unknown as CoreHTTPFunctionWiring<unknown, unknown, string>)
|
|
135
|
-
|
|
136
|
-
// knowledge: decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md
|
|
137
|
-
if (typeof adapter === 'function' || adapter.verifyWebhook) {
|
|
138
|
-
const verifyFuncId = `gateway__${name}__verify`
|
|
139
|
-
|
|
140
|
-
const verifyHandler = {
|
|
141
|
-
auth: false,
|
|
142
|
-
func: createWebhookVerifyHandler(config),
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
addFunction(verifyFuncId, verifyHandler)
|
|
146
|
-
|
|
147
|
-
if (!routes.has('get')) {
|
|
148
|
-
routes.set('get', new Map())
|
|
149
|
-
}
|
|
150
|
-
routes.get('get')!.set(route, {
|
|
151
|
-
method: 'get',
|
|
152
|
-
route,
|
|
153
|
-
func: verifyHandler,
|
|
154
|
-
auth: false,
|
|
155
|
-
// knowledge: decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md
|
|
156
|
-
returnsJSON: false,
|
|
157
|
-
} as unknown as CoreHTTPFunctionWiring<unknown, unknown, string>)
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
httpRouter.reset()
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const createWebhookPostHandler = (config: CoreGateway) => {
|
|
164
|
-
const { name, middleware: userMiddleware } = config
|
|
165
|
-
const handlerFuncId = registerGatewayHandler(config)
|
|
166
|
-
const inheritedMiddleware = gatewayInheritedMiddleware(config)
|
|
167
|
-
|
|
168
|
-
return async (
|
|
169
|
-
services: CoreSingletonServices,
|
|
170
|
-
data: unknown,
|
|
171
|
-
wire: PikkuWire
|
|
172
|
-
) => {
|
|
173
|
-
const adapter = await resolveGatewayAdapter(config, services)
|
|
174
|
-
|
|
175
|
-
if (adapter.verifyWebhook) {
|
|
176
|
-
const verifyResult = await adapter.verifyWebhook(data, wire.http?.request)
|
|
177
|
-
if (verifyResult.verified) {
|
|
178
|
-
return verifyResult.response
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const parsed = adapter.parse(data)
|
|
183
|
-
if (!parsed) {
|
|
184
|
-
return { ok: true }
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const gateway: PikkuGateway = {
|
|
188
|
-
gatewayName: name,
|
|
189
|
-
senderId: parsed.senderId,
|
|
190
|
-
platform: adapter.name,
|
|
191
|
-
send: (msg: GatewayOutboundMessage) => adapter.send(parsed.senderId, msg),
|
|
192
|
-
}
|
|
193
|
-
wire.gateway = gateway
|
|
194
|
-
|
|
195
|
-
// Gateway middleware runs outside the gate so it can establish the session the gate checks.
|
|
196
|
-
const invoke = async () => {
|
|
197
|
-
await bridgeMiddlewareSession(wire)
|
|
198
|
-
return await runPikkuFunc('gateway', name, handlerFuncId, {
|
|
199
|
-
singletonServices: services,
|
|
200
|
-
data: () => parsed,
|
|
201
|
-
auth: config.auth,
|
|
202
|
-
inheritedMiddleware,
|
|
203
|
-
wire,
|
|
204
|
-
})
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
const gatewayMiddleware = userMiddleware as
|
|
208
|
-
CorePikkuMiddleware[] | undefined
|
|
209
|
-
const result: any = gatewayMiddleware?.length
|
|
210
|
-
? await runMiddleware(services, wire, gatewayMiddleware, invoke)
|
|
211
|
-
: await invoke()
|
|
212
|
-
|
|
213
|
-
if (result && (result.text || result.richContent || result.attachments)) {
|
|
214
|
-
await adapter.send(parsed.senderId, result as GatewayOutboundMessage)
|
|
215
|
-
}
|
|
216
|
-
return { ok: true }
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const createWebhookVerifyHandler = (config: CoreGateway) => {
|
|
221
|
-
return async (
|
|
222
|
-
services: CoreSingletonServices,
|
|
223
|
-
_data: unknown,
|
|
224
|
-
wire: PikkuWire
|
|
225
|
-
) => {
|
|
226
|
-
const adapter = await resolveGatewayAdapter(config, services)
|
|
227
|
-
if (!adapter.verifyWebhook) {
|
|
228
|
-
throw new NotFoundError(
|
|
229
|
-
`Gateway '${config.name}' does not support webhook verification`
|
|
230
|
-
)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const query = wire.http?.request?.query()
|
|
234
|
-
const result = await adapter.verifyWebhook(query, wire.http?.request)
|
|
235
|
-
if (!result.verified) {
|
|
236
|
-
throw new UnauthorizedError('Webhook verification failed')
|
|
237
|
-
}
|
|
238
|
-
// knowledge: decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md
|
|
239
|
-
const response = result.response
|
|
240
|
-
if (typeof response === 'string' || typeof response === 'number') {
|
|
241
|
-
return String(response)
|
|
242
|
-
}
|
|
243
|
-
wire.http?.response?.header('content-type', 'application/json')
|
|
244
|
-
return JSON.stringify(response)
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const wireWebsocketGateway = (config: CoreGateway): void => {
|
|
249
|
-
const { name, route } = config
|
|
250
|
-
if (!route) {
|
|
251
|
-
throw new Error(`WebSocket gateway '${name}' requires a route`)
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
pikkuState(null, 'gateway', 'gateways').set(config.name, config)
|
|
255
|
-
|
|
256
|
-
const channelsMeta = pikkuState(null, 'channel', 'meta')
|
|
257
|
-
const channels = pikkuState(null, 'channel', 'channels')
|
|
258
|
-
|
|
259
|
-
const messageFuncId = `gateway__${name}__message`
|
|
260
|
-
const connectFuncId = `gateway__${name}__connect`
|
|
261
|
-
|
|
262
|
-
const funcMeta = pikkuState(null, 'function', 'meta')
|
|
263
|
-
funcMeta[messageFuncId] = {
|
|
264
|
-
pikkuFuncId: messageFuncId,
|
|
265
|
-
inputSchemaName: null,
|
|
266
|
-
outputSchemaName: null,
|
|
267
|
-
sessionless: true,
|
|
268
|
-
}
|
|
269
|
-
funcMeta[connectFuncId] = {
|
|
270
|
-
pikkuFuncId: connectFuncId,
|
|
271
|
-
inputSchemaName: null,
|
|
272
|
-
outputSchemaName: null,
|
|
273
|
-
sessionless: true,
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
channelsMeta[name] = {
|
|
277
|
-
name,
|
|
278
|
-
route,
|
|
279
|
-
gateway: true,
|
|
280
|
-
input: null,
|
|
281
|
-
connect: { pikkuFuncId: connectFuncId },
|
|
282
|
-
disconnect: null,
|
|
283
|
-
message: { pikkuFuncId: messageFuncId },
|
|
284
|
-
messageWirings: {},
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
const userMiddleware = config.middleware as CorePikkuMiddleware[] | undefined
|
|
288
|
-
const handlerFuncId = registerGatewayHandler(config)
|
|
289
|
-
const inheritedMiddleware = gatewayInheritedMiddleware(config)
|
|
290
|
-
|
|
291
|
-
addFunction(connectFuncId, {
|
|
292
|
-
auth: false,
|
|
293
|
-
func: async (services: any, _data: unknown, wire: PikkuWire) => {
|
|
294
|
-
const adapter = await resolveGatewayAdapter(config, services)
|
|
295
|
-
wire.gateway = {
|
|
296
|
-
gatewayName: name,
|
|
297
|
-
senderId: '',
|
|
298
|
-
platform: adapter.name,
|
|
299
|
-
send: async (msg: GatewayOutboundMessage) => {
|
|
300
|
-
wire.channel?.send(msg)
|
|
301
|
-
},
|
|
302
|
-
} satisfies PikkuGateway
|
|
303
|
-
},
|
|
304
|
-
})
|
|
305
|
-
|
|
306
|
-
addFunction(messageFuncId, {
|
|
307
|
-
auth: false,
|
|
308
|
-
func: async (services: any, data: unknown, wire: PikkuWire) => {
|
|
309
|
-
const adapter = await resolveGatewayAdapter(config, services)
|
|
310
|
-
const parsed = adapter.parse(data)
|
|
311
|
-
if (!parsed) return
|
|
312
|
-
|
|
313
|
-
const gateway: PikkuGateway = {
|
|
314
|
-
gatewayName: name,
|
|
315
|
-
senderId: parsed.senderId,
|
|
316
|
-
platform: adapter.name,
|
|
317
|
-
send: async (msg: GatewayOutboundMessage) => {
|
|
318
|
-
wire.channel?.send(msg)
|
|
319
|
-
},
|
|
320
|
-
}
|
|
321
|
-
wire.gateway = gateway
|
|
322
|
-
|
|
323
|
-
const invoke = async () => {
|
|
324
|
-
await bridgeMiddlewareSession(wire)
|
|
325
|
-
return await runPikkuFunc('gateway', name, handlerFuncId, {
|
|
326
|
-
singletonServices: services,
|
|
327
|
-
data: () => parsed,
|
|
328
|
-
auth: config.auth,
|
|
329
|
-
inheritedMiddleware,
|
|
330
|
-
wire,
|
|
331
|
-
})
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
const gatewayMiddleware = userMiddleware as
|
|
335
|
-
CorePikkuMiddleware[] | undefined
|
|
336
|
-
const result: any = gatewayMiddleware?.length
|
|
337
|
-
? await runMiddleware(services, wire, gatewayMiddleware, invoke)
|
|
338
|
-
: await invoke()
|
|
339
|
-
|
|
340
|
-
if (result && (result.text || result.richContent || result.attachments)) {
|
|
341
|
-
wire.channel?.send(result)
|
|
342
|
-
}
|
|
343
|
-
},
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
// knowledge: decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md
|
|
347
|
-
channels.set(name, {
|
|
348
|
-
name,
|
|
349
|
-
route,
|
|
350
|
-
auth: false,
|
|
351
|
-
onConnect: { func: async () => {} },
|
|
352
|
-
onMessage: { func: async () => {} },
|
|
353
|
-
})
|
|
354
|
-
|
|
355
|
-
httpRouter.reset()
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const wireListenerGateway = (config: CoreGateway): void => {
|
|
359
|
-
pikkuState(null, 'gateway', 'gateways').set(config.name, config)
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/** The returned callback is what a GatewayService passes to `adapter.init()`. */
|
|
363
|
-
export const createListenerMessageHandler = (
|
|
364
|
-
name: string,
|
|
365
|
-
config: CoreGateway,
|
|
366
|
-
singletonServices: CoreSingletonServices
|
|
367
|
-
): ((rawData: unknown) => Promise<void>) => {
|
|
368
|
-
const userMiddleware = config.middleware as CorePikkuMiddleware[] | undefined
|
|
369
|
-
const handlerFuncId = registerGatewayHandler(config)
|
|
370
|
-
const inheritedMiddleware = gatewayInheritedMiddleware(config)
|
|
371
|
-
|
|
372
|
-
return async (rawData: unknown): Promise<void> => {
|
|
373
|
-
const adapter = await resolveGatewayAdapter(config, singletonServices)
|
|
374
|
-
const parsed = adapter.parse(rawData)
|
|
375
|
-
if (!parsed) return
|
|
376
|
-
|
|
377
|
-
const wire: PikkuRawWire = {}
|
|
378
|
-
const gateway: PikkuGateway = {
|
|
379
|
-
gatewayName: name,
|
|
380
|
-
senderId: parsed.senderId,
|
|
381
|
-
platform: adapter.name,
|
|
382
|
-
send: (msg: GatewayOutboundMessage) => adapter.send(parsed.senderId, msg),
|
|
383
|
-
}
|
|
384
|
-
wire.gateway = gateway
|
|
385
|
-
|
|
386
|
-
const invoke = async () => {
|
|
387
|
-
await bridgeMiddlewareSession(wire)
|
|
388
|
-
return await runPikkuFunc('gateway', name, handlerFuncId, {
|
|
389
|
-
singletonServices,
|
|
390
|
-
data: () => parsed,
|
|
391
|
-
auth: config.auth,
|
|
392
|
-
inheritedMiddleware,
|
|
393
|
-
wire,
|
|
394
|
-
})
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// knowledge: decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md
|
|
398
|
-
const result: any = userMiddleware?.length
|
|
399
|
-
? await runMiddleware(
|
|
400
|
-
singletonServices,
|
|
401
|
-
wire as PikkuWire,
|
|
402
|
-
userMiddleware,
|
|
403
|
-
invoke
|
|
404
|
-
)
|
|
405
|
-
: await invoke()
|
|
406
|
-
|
|
407
|
-
if (result && (result.text || result.richContent || result.attachments)) {
|
|
408
|
-
await adapter.send(parsed.senderId, result as GatewayOutboundMessage)
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CommonWireMeta,
|
|
3
|
-
CoreSingletonServices,
|
|
4
|
-
} from '../../types/core.types.js'
|
|
5
|
-
import type {
|
|
6
|
-
CorePikkuMiddleware,
|
|
7
|
-
CorePikkuMiddlewareGroup,
|
|
8
|
-
} from '../../middleware/middleware.types.js'
|
|
9
|
-
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
10
|
-
import type { PikkuHTTPRequest } from '../http/http.types.js'
|
|
11
|
-
|
|
12
|
-
export interface GatewayAttachment {
|
|
13
|
-
type: string
|
|
14
|
-
url?: string
|
|
15
|
-
data?: ArrayBuffer | Uint8Array
|
|
16
|
-
mimeType?: string
|
|
17
|
-
filename?: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* One message arriving from a gateway, normalised: who sent it, in which
|
|
22
|
-
* conversation, and what they said.
|
|
23
|
-
*/
|
|
24
|
-
export interface GatewayInboundMessage {
|
|
25
|
-
/** Platform-specific: a phone number, a Slack user id, and so on. */
|
|
26
|
-
senderId: string
|
|
27
|
-
/** What they said, as plain text, with the provider's markup stripped. */
|
|
28
|
-
text: string
|
|
29
|
-
/** The provider's own event, untouched, for anything this shape drops. */
|
|
30
|
-
raw: unknown
|
|
31
|
-
/** Files and media that came with the message. */
|
|
32
|
-
attachments?: GatewayAttachment[]
|
|
33
|
-
/** Anything else the adapter wants to carry through to the wiring. */
|
|
34
|
-
metadata?: Record<string, unknown>
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* One message to send back through a gateway — plain text, or the provider's
|
|
39
|
-
* own rich content.
|
|
40
|
-
*/
|
|
41
|
-
export interface GatewayOutboundMessage {
|
|
42
|
-
/** The reply as plain text. Every provider can render this. */
|
|
43
|
-
text?: string
|
|
44
|
-
/** The provider's own rich payload, e.g. Slack blocks. Passed through as-is. */
|
|
45
|
-
richContent?: Record<string, unknown>
|
|
46
|
-
/** Files and media to send alongside. */
|
|
47
|
-
attachments?: GatewayAttachment[]
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* What a gateway's `verifyWebhook` returns — verified, with the response the
|
|
52
|
-
* provider expects back, or not.
|
|
53
|
-
*/
|
|
54
|
-
export type WebhookVerificationResult =
|
|
55
|
-
| {
|
|
56
|
-
/** True when the request really came from the provider. */
|
|
57
|
-
verified: true
|
|
58
|
-
/** What to echo back, e.g. Meta's hub.challenge. */
|
|
59
|
-
response: unknown
|
|
60
|
-
}
|
|
61
|
-
| {
|
|
62
|
-
/** False when the signature or challenge did not check out. */
|
|
63
|
-
verified: false
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* What a gateway integration implements: parse an incoming event into a
|
|
68
|
-
* message, send one back, and open and close the connection.
|
|
69
|
-
*/
|
|
70
|
-
export interface GatewayAdapter {
|
|
71
|
-
/** Identifies the gateway in wirings and logs, e.g. `'slack'`. */
|
|
72
|
-
name: string
|
|
73
|
-
/** Return null to ignore the event, e.g. a delivery receipt. */
|
|
74
|
-
parse(data: unknown): GatewayInboundMessage | null
|
|
75
|
-
/** Deliver a reply back to the sender the message came from. */
|
|
76
|
-
send(senderId: string, message: GatewayOutboundMessage): Promise<void>
|
|
77
|
-
/** Called by GatewayService.start(); must call onMessage per incoming event. */
|
|
78
|
-
init(onMessage: (data: unknown) => Promise<void>): Promise<void>
|
|
79
|
-
/** Called by GatewayService.stop(); release the connection init() opened. */
|
|
80
|
-
close(): Promise<void>
|
|
81
|
-
/** Receives the GET query params, or the POST body when called from the POST handler. */
|
|
82
|
-
verifyWebhook?(
|
|
83
|
-
data: unknown,
|
|
84
|
-
request?: PikkuHTTPRequest
|
|
85
|
-
): WebhookVerificationResult | Promise<WebhookVerificationResult>
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export type GatewayAdapterFactory = (
|
|
89
|
-
services: CoreSingletonServices
|
|
90
|
-
) => GatewayAdapter | Promise<GatewayAdapter>
|
|
91
|
-
|
|
92
|
-
export interface PikkuGateway {
|
|
93
|
-
gatewayName: string
|
|
94
|
-
senderId: string
|
|
95
|
-
platform: string
|
|
96
|
-
send(msg: GatewayOutboundMessage): Promise<void>
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** 'webhook' the platform POSTs to us, 'websocket' the client connects to us, 'listener' no route at all. */
|
|
100
|
-
export type GatewayTransportType = 'webhook' | 'websocket' | 'listener'
|
|
101
|
-
|
|
102
|
-
export type CoreGateway<
|
|
103
|
-
PikkuFunctionConfig = CorePikkuFunctionConfig<any, any>,
|
|
104
|
-
PikkuMiddleware extends CorePikkuMiddleware = CorePikkuMiddleware,
|
|
105
|
-
> = Partial<
|
|
106
|
-
Pick<CommonWireMeta, 'title' | 'summary' | 'description' | 'errors'>
|
|
107
|
-
> & {
|
|
108
|
-
/** Unique across the project. It is how the gateway is addressed in `pikku meta` and in logs. */
|
|
109
|
-
name: string
|
|
110
|
-
/** How the platform reaches us: a `webhook` it posts to, a `websocket` it holds open, or a `listener` we open outward. */
|
|
111
|
-
type: GatewayTransportType
|
|
112
|
-
/** Required for 'webhook' and 'websocket'; unused for 'listener'. */
|
|
113
|
-
route?: string
|
|
114
|
-
/** Which service this speaks to — slack, whatsapp, discord. It selects the adapter's dialect, not the transport. */
|
|
115
|
-
platform?: string
|
|
116
|
-
/** Translates between the platform's message format and pikku's. A factory is called with services, for an adapter that needs a token or a client. */
|
|
117
|
-
adapter: GatewayAdapter | GatewayAdapterFactory
|
|
118
|
-
/** The function to run per inbound message. It receives the normalised message, not the platform's raw payload. */
|
|
119
|
-
func: PikkuFunctionConfig
|
|
120
|
-
/** Wraps every inbound message: signature verification, tracing, rate limiting. */
|
|
121
|
-
middleware?: CorePikkuMiddlewareGroup<any, any>
|
|
122
|
-
/** Filters this gateway in and out of a build — see the `tags` option on `pikku all`. It has no effect at runtime. */
|
|
123
|
-
tags?: string[]
|
|
124
|
-
/** Unset lets the handler's own `auth` govern; gateway handlers are sessionless by default. */
|
|
125
|
-
auth?: boolean
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export type GatewayMeta = CommonWireMeta & {
|
|
129
|
-
name: string
|
|
130
|
-
type: GatewayTransportType
|
|
131
|
-
route?: string
|
|
132
|
-
platform?: string
|
|
133
|
-
auth?: boolean
|
|
134
|
-
gateway: true
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export type GatewaysMeta = Record<string, GatewayMeta>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
wireGateway,
|
|
3
|
-
createListenerMessageHandler,
|
|
4
|
-
resolveGatewayAdapter,
|
|
5
|
-
} from './gateway-runner.js'
|
|
6
|
-
export type {
|
|
7
|
-
GatewayAdapter,
|
|
8
|
-
GatewayAdapterFactory,
|
|
9
|
-
GatewayInboundMessage,
|
|
10
|
-
GatewayOutboundMessage,
|
|
11
|
-
GatewaysMeta,
|
|
12
|
-
GatewayTransportType,
|
|
13
|
-
CoreGateway,
|
|
14
|
-
WebhookVerificationResult,
|
|
15
|
-
} from './gateway.types.js'
|