reqon-dsl 0.2.0 → 0.4.0
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 +7 -0
- package/README.md +45 -3
- package/dist/ast/nodes.d.ts +91 -4
- package/dist/ast/nodes.js +14 -0
- package/dist/auth/circuit-breaker.d.ts +11 -0
- package/dist/auth/circuit-breaker.js +90 -18
- package/dist/auth/credentials.d.ts +6 -1
- package/dist/auth/credentials.js +12 -4
- package/dist/auth/oauth2-provider.js +13 -3
- package/dist/auth/rate-limiter.d.ts +12 -1
- package/dist/auth/rate-limiter.js +39 -26
- package/dist/auth/token-store.js +8 -1
- package/dist/cli.d.ts +24 -1
- package/dist/cli.js +149 -10
- package/dist/config/constants.d.ts +152 -0
- package/dist/config/constants.js +139 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +4 -0
- package/dist/control/index.d.ts +2 -0
- package/dist/control/index.js +1 -0
- package/dist/control/server.d.ts +105 -0
- package/dist/control/server.js +315 -0
- package/dist/control/types.d.ts +61 -0
- package/dist/control/types.js +7 -0
- package/dist/debug/cli-debugger.d.ts +17 -0
- package/dist/debug/cli-debugger.js +185 -0
- package/dist/debug/controller.d.ts +94 -0
- package/dist/debug/controller.js +45 -0
- package/dist/debug/index.d.ts +6 -0
- package/dist/debug/index.js +5 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.js +89 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/state.d.ts +24 -0
- package/dist/execution/store.js +2 -2
- package/dist/execution-log/events.d.ts +125 -0
- package/dist/execution-log/events.js +17 -0
- package/dist/execution-log/fold.d.ts +38 -0
- package/dist/execution-log/fold.js +54 -0
- package/dist/execution-log/index.d.ts +18 -0
- package/dist/execution-log/index.js +6 -0
- package/dist/execution-log/postgres-store.d.ts +36 -0
- package/dist/execution-log/postgres-store.js +108 -0
- package/dist/execution-log/resume.d.ts +11 -0
- package/dist/execution-log/resume.js +5 -0
- package/dist/execution-log/sqlite-store.d.ts +16 -0
- package/dist/execution-log/sqlite-store.js +101 -0
- package/dist/execution-log/store.d.ts +72 -0
- package/dist/execution-log/store.js +182 -0
- package/dist/index.d.ts +23 -2
- package/dist/index.js +35 -3
- package/dist/interpreter/context.d.ts +29 -0
- package/dist/interpreter/context.js +18 -0
- package/dist/interpreter/evaluator.d.ts +63 -1
- package/dist/interpreter/evaluator.js +219 -42
- package/dist/interpreter/executor.d.ts +132 -14
- package/dist/interpreter/executor.js +883 -178
- package/dist/interpreter/fetch-handler.d.ts +48 -1
- package/dist/interpreter/fetch-handler.js +216 -38
- package/dist/interpreter/http.d.ts +34 -0
- package/dist/interpreter/http.js +203 -28
- package/dist/interpreter/index.d.ts +5 -3
- package/dist/interpreter/index.js +4 -2
- package/dist/interpreter/pagination.d.ts +12 -3
- package/dist/interpreter/pagination.js +102 -32
- package/dist/interpreter/signals.d.ts +8 -0
- package/dist/interpreter/signals.js +12 -0
- package/dist/interpreter/source-manager.d.ts +75 -0
- package/dist/interpreter/source-manager.js +157 -0
- package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
- package/dist/interpreter/step-handlers/apply-handler.js +79 -0
- package/dist/interpreter/step-handlers/for-handler.d.ts +16 -0
- package/dist/interpreter/step-handlers/for-handler.js +89 -7
- package/dist/interpreter/step-handlers/index.d.ts +4 -2
- package/dist/interpreter/step-handlers/index.js +4 -2
- package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
- package/dist/interpreter/step-handlers/match-handler.js +47 -17
- package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
- package/dist/interpreter/step-handlers/pause-handler.js +87 -0
- package/dist/interpreter/step-handlers/store-handler.d.ts +17 -1
- package/dist/interpreter/step-handlers/store-handler.js +61 -20
- package/dist/interpreter/step-handlers/types.d.ts +3 -0
- package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
- package/dist/interpreter/step-handlers/validate-handler.js +7 -2
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +4 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +31 -5
- package/dist/interpreter/store-manager.d.ts +46 -0
- package/dist/interpreter/store-manager.js +70 -0
- package/dist/lexer/index.d.ts +11 -4
- package/dist/lexer/index.js +11 -4
- package/dist/lexer/tokens.d.ts +17 -1
- package/dist/lexer/tokens.js +36 -0
- package/dist/loader/index.js +5 -8
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/sandbox.d.ts +41 -0
- package/dist/mcp/sandbox.js +76 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.js +504 -0
- package/dist/oas/index.d.ts +2 -0
- package/dist/oas/index.js +1 -0
- package/dist/oas/loader.d.ts +13 -1
- package/dist/oas/loader.js +25 -3
- package/dist/oas/mock-generator.d.ts +12 -0
- package/dist/oas/mock-generator.js +196 -0
- package/dist/oas/validator.js +45 -5
- package/dist/observability/events.d.ts +248 -0
- package/dist/observability/events.js +85 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/logger.d.ts +106 -0
- package/dist/observability/logger.js +266 -0
- package/dist/observability/otel.d.ts +143 -0
- package/dist/observability/otel.js +421 -0
- package/dist/parser/action-parser.d.ts +105 -0
- package/dist/parser/action-parser.js +645 -0
- package/dist/parser/base.d.ts +7 -0
- package/dist/parser/base.js +11 -0
- package/dist/parser/expressions.d.ts +14 -0
- package/dist/parser/expressions.js +89 -6
- package/dist/parser/fetch-parser.d.ts +27 -0
- package/dist/parser/fetch-parser.js +280 -0
- package/dist/parser/index.d.ts +17 -0
- package/dist/parser/index.js +17 -0
- package/dist/parser/parser.d.ts +44 -46
- package/dist/parser/parser.js +122 -1070
- package/dist/parser/pipeline-parser.d.ts +12 -0
- package/dist/parser/pipeline-parser.js +52 -0
- package/dist/parser/schedule-parser.d.ts +7 -0
- package/dist/parser/schedule-parser.js +137 -0
- package/dist/parser/source-parser.d.ts +9 -0
- package/dist/parser/source-parser.js +151 -0
- package/dist/pause/index.d.ts +15 -0
- package/dist/pause/index.js +12 -0
- package/dist/pause/log-store.d.ts +33 -0
- package/dist/pause/log-store.js +98 -0
- package/dist/pause/manager.d.ts +130 -0
- package/dist/pause/manager.js +294 -0
- package/dist/pause/state.d.ts +93 -0
- package/dist/pause/state.js +103 -0
- package/dist/pause/store.d.ts +61 -0
- package/dist/pause/store.js +158 -0
- package/dist/plugin.d.ts +9 -12
- package/dist/plugin.js +10 -13
- package/dist/scheduler/cron-parser.d.ts +10 -3
- package/dist/scheduler/cron-parser.js +227 -48
- package/dist/scheduler/scheduler.js +56 -22
- package/dist/stores/factory.d.ts +7 -1
- package/dist/stores/factory.js +14 -3
- package/dist/stores/file.d.ts +26 -0
- package/dist/stores/file.js +67 -21
- package/dist/stores/index.d.ts +16 -1
- package/dist/stores/index.js +16 -1
- package/dist/stores/memory.d.ts +4 -0
- package/dist/stores/memory.js +8 -6
- package/dist/stores/postgrest.d.ts +28 -0
- package/dist/stores/postgrest.js +84 -37
- package/dist/stores/types.d.ts +17 -0
- package/dist/stores/types.js +12 -0
- package/dist/sync/index.d.ts +3 -2
- package/dist/sync/index.js +2 -1
- package/dist/sync/log-store.d.ts +30 -0
- package/dist/sync/log-store.js +45 -0
- package/dist/sync/store.js +1 -1
- package/dist/trace/index.d.ts +18 -0
- package/dist/trace/index.js +13 -0
- package/dist/trace/log-view.d.ts +57 -0
- package/dist/trace/log-view.js +76 -0
- package/dist/trace/recorder.d.ts +75 -0
- package/dist/trace/recorder.js +157 -0
- package/dist/trace/replay.d.ts +132 -0
- package/dist/trace/replay.js +264 -0
- package/dist/trace/state.d.ts +102 -0
- package/dist/trace/state.js +86 -0
- package/dist/trace/store.d.ts +75 -0
- package/dist/trace/store.js +250 -0
- package/dist/utils/deep-merge.d.ts +10 -0
- package/dist/utils/deep-merge.js +23 -0
- package/dist/utils/file.d.ts +13 -4
- package/dist/utils/file.js +70 -12
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/long-timeout.d.ts +19 -0
- package/dist/utils/long-timeout.js +33 -0
- package/dist/utils/path.d.ts +22 -1
- package/dist/utils/path.js +46 -1
- package/dist/utils/redact.d.ts +22 -0
- package/dist/utils/redact.js +42 -0
- package/dist/utils/type-guards.d.ts +58 -0
- package/dist/utils/type-guards.js +92 -0
- package/dist/webhook/server.d.ts +9 -0
- package/dist/webhook/server.js +122 -36
- package/dist/webhook/types.d.ts +9 -1
- package/package.json +76 -9
- package/.claude/settings.local.json +0 -31
- package/.claude/skills/api-integration.md +0 -125
- package/.claude/skills/database-schema.md +0 -51
- package/.claude/skills/dsl-design.md +0 -80
- package/.claude/skills/property-testing.md +0 -143
- package/.claude/skills/reqon/SKILL.md +0 -44
- package/.claude/skills/reqon/references/examples.md +0 -206
- package/.claude/skills/reqon/references/syntax.md +0 -263
- package/.claude/skills/vscode-extension.md +0 -113
- package/.github/dependabot.yml +0 -32
- package/.github/pull_request_template.md +0 -21
- package/.github/workflows/ci.yml +0 -174
- package/.github/workflows/release.yml +0 -73
- package/CLAUDE.md +0 -72
- package/CONTRIBUTING.md +0 -161
- package/TODO.md +0 -51
- package/dist/auth/auth.test.d.ts +0 -1
- package/dist/auth/auth.test.js +0 -255
- package/dist/errors/errors.test.d.ts +0 -1
- package/dist/errors/errors.test.js +0 -165
- package/dist/execution/execution.test.d.ts +0 -1
- package/dist/execution/execution.test.js +0 -246
- package/dist/integration.test.d.ts +0 -1
- package/dist/integration.test.js +0 -168
- package/dist/interpreter/evaluator.test.d.ts +0 -1
- package/dist/interpreter/evaluator.test.js +0 -512
- package/dist/interpreter/http.test.d.ts +0 -1
- package/dist/interpreter/http.test.js +0 -299
- package/dist/interpreter/progress.test.d.ts +0 -1
- package/dist/interpreter/progress.test.js +0 -216
- package/dist/interpreter/schema-matcher.test.d.ts +0 -1
- package/dist/interpreter/schema-matcher.test.js +0 -122
- package/dist/lexer/lexer.d.ts +0 -24
- package/dist/lexer/lexer.js +0 -264
- package/dist/lexer/lexer.test.d.ts +0 -1
- package/dist/lexer/lexer.test.js +0 -259
- package/dist/loader/loader.test.d.ts +0 -1
- package/dist/loader/loader.test.js +0 -287
- package/dist/oas/oas.test.d.ts +0 -1
- package/dist/oas/oas.test.js +0 -218
- package/dist/parser/expressions.test.d.ts +0 -1
- package/dist/parser/expressions.test.js +0 -378
- package/dist/parser/match.test.d.ts +0 -1
- package/dist/parser/match.test.js +0 -254
- package/dist/parser/parser.test.d.ts +0 -1
- package/dist/parser/parser.test.js +0 -333
- package/dist/parser/schedule.test.d.ts +0 -1
- package/dist/parser/schedule.test.js +0 -241
- package/dist/scheduler/cron-parser.test.d.ts +0 -1
- package/dist/scheduler/cron-parser.test.js +0 -188
- package/dist/stores/file.test.d.ts +0 -1
- package/dist/stores/file.test.js +0 -165
- package/dist/stores/memory.test.d.ts +0 -1
- package/dist/stores/memory.test.js +0 -157
- package/dist/stores/stores.test.d.ts +0 -1
- package/dist/stores/stores.test.js +0 -158
- package/dist/sync/sync.test.d.ts +0 -1
- package/dist/sync/sync.test.js +0 -221
- package/docusaurus/README.md +0 -41
- package/docusaurus/docs/advanced/execution-state.md +0 -283
- package/docusaurus/docs/advanced/extending-reqon.md +0 -388
- package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
- package/docusaurus/docs/advanced/parallel-execution.md +0 -353
- package/docusaurus/docs/api-reference.md +0 -443
- package/docusaurus/docs/authentication/api-key.md +0 -339
- package/docusaurus/docs/authentication/basic.md +0 -276
- package/docusaurus/docs/authentication/bearer.md +0 -282
- package/docusaurus/docs/authentication/oauth2.md +0 -317
- package/docusaurus/docs/authentication/overview.md +0 -251
- package/docusaurus/docs/cli.md +0 -229
- package/docusaurus/docs/core-concepts/actions.md +0 -286
- package/docusaurus/docs/core-concepts/missions.md +0 -264
- package/docusaurus/docs/core-concepts/schemas.md +0 -353
- package/docusaurus/docs/core-concepts/sources.md +0 -339
- package/docusaurus/docs/core-concepts/stores.md +0 -332
- package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
- package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
- package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
- package/docusaurus/docs/dsl-syntax/map.md +0 -345
- package/docusaurus/docs/dsl-syntax/match.md +0 -387
- package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
- package/docusaurus/docs/dsl-syntax/validate.md +0 -401
- package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
- package/docusaurus/docs/error-handling/flow-control.md +0 -337
- package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
- package/docusaurus/docs/examples.md +0 -488
- package/docusaurus/docs/getting-started.md +0 -256
- package/docusaurus/docs/http/circuit-breaker.md +0 -401
- package/docusaurus/docs/http/incremental-sync.md +0 -394
- package/docusaurus/docs/http/pagination.md +0 -361
- package/docusaurus/docs/http/rate-limiting.md +0 -383
- package/docusaurus/docs/http/requests.md +0 -328
- package/docusaurus/docs/http/retry.md +0 -402
- package/docusaurus/docs/intro.md +0 -90
- package/docusaurus/docs/openapi/loading-specs.md +0 -305
- package/docusaurus/docs/openapi/operation-calls.md +0 -314
- package/docusaurus/docs/openapi/overview.md +0 -212
- package/docusaurus/docs/openapi/response-validation.md +0 -344
- package/docusaurus/docs/scheduling/cron.md +0 -305
- package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
- package/docusaurus/docs/scheduling/intervals.md +0 -289
- package/docusaurus/docs/scheduling/overview.md +0 -231
- package/docusaurus/docs/stores/custom-adapters.md +0 -376
- package/docusaurus/docs/stores/file.md +0 -236
- package/docusaurus/docs/stores/memory.md +0 -193
- package/docusaurus/docs/stores/overview.md +0 -274
- package/docusaurus/docs/stores/postgrest.md +0 -316
- package/docusaurus/docusaurus.config.ts +0 -148
- package/docusaurus/package-lock.json +0 -18029
- package/docusaurus/package.json +0 -47
- package/docusaurus/sidebars.ts +0 -155
- package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
- package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
- package/docusaurus/src/css/custom.css +0 -169
- package/docusaurus/src/pages/index.module.css +0 -48
- package/docusaurus/src/pages/index.tsx +0 -110
- package/docusaurus/src/pages/markdown-page.md +0 -7
- package/docusaurus/static/.nojekyll +0 -0
- package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
- package/docusaurus/static/img/docusaurus.png +0 -0
- package/docusaurus/static/img/favicon.ico +0 -0
- package/docusaurus/static/img/logo.svg +0 -10
- package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
- package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
- package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
- package/docusaurus/tsconfig.json +0 -8
- package/examples/README.md +0 -112
- package/examples/error-handling/README.md +0 -150
- package/examples/error-handling/payment-processor.vague +0 -287
- package/examples/github-sync/README.md +0 -74
- package/examples/github-sync/fetch-issues.vague +0 -47
- package/examples/github-sync/fetch-prs.vague +0 -40
- package/examples/github-sync/mission.vague +0 -101
- package/examples/github-sync/normalize.vague +0 -70
- package/examples/jsonplaceholder/README.md +0 -28
- package/examples/jsonplaceholder/posts.vague +0 -48
- package/examples/petstore/README.md +0 -35
- package/examples/petstore/openapi.yaml +0 -97
- package/examples/petstore/sync.vague +0 -52
- package/examples/temporal-comparison/README.md +0 -297
- package/examples/temporal-comparison/reconciliation.vague +0 -355
- package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
- package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
- package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
- package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
- package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
- package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
- package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
- package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
- package/examples/temporal-comparison/temporal/types/index.ts +0 -129
- package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
- package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
- package/examples/xero/README.md +0 -88
- package/examples/xero/invoices.vague +0 -189
- package/src/api-integration.test.ts +0 -954
- package/src/ast/index.ts +0 -1
- package/src/ast/nodes.ts +0 -310
- package/src/auth/auth.test.ts +0 -326
- package/src/auth/circuit-breaker.test.ts +0 -390
- package/src/auth/circuit-breaker.ts +0 -379
- package/src/auth/credentials.test.ts +0 -273
- package/src/auth/credentials.ts +0 -246
- package/src/auth/index.ts +0 -40
- package/src/auth/oauth2-provider.ts +0 -177
- package/src/auth/rate-limiter.ts +0 -459
- package/src/auth/token-store.ts +0 -177
- package/src/auth/types.ts +0 -159
- package/src/benchmark/e2e.bench.ts +0 -288
- package/src/benchmark/evaluator.bench.ts +0 -331
- package/src/benchmark/fixtures.ts +0 -295
- package/src/benchmark/index.ts +0 -108
- package/src/benchmark/lexer.bench.ts +0 -69
- package/src/benchmark/parser.bench.ts +0 -103
- package/src/benchmark/resilience.bench.ts +0 -193
- package/src/benchmark/store.bench.ts +0 -147
- package/src/benchmark/utils.ts +0 -230
- package/src/cli.ts +0 -313
- package/src/errors/errors.test.ts +0 -234
- package/src/errors/index.ts +0 -223
- package/src/execution/execution.test.ts +0 -307
- package/src/execution/index.ts +0 -21
- package/src/execution/state.ts +0 -207
- package/src/execution/store.ts +0 -188
- package/src/index.ts +0 -169
- package/src/integration.test.ts +0 -192
- package/src/interpreter/context.ts +0 -57
- package/src/interpreter/evaluator.test.ts +0 -796
- package/src/interpreter/evaluator.ts +0 -245
- package/src/interpreter/executor.ts +0 -946
- package/src/interpreter/fetch-handler.ts +0 -302
- package/src/interpreter/http.test.ts +0 -423
- package/src/interpreter/http.ts +0 -308
- package/src/interpreter/index.ts +0 -32
- package/src/interpreter/pagination.ts +0 -207
- package/src/interpreter/progress.test.ts +0 -276
- package/src/interpreter/schema-matcher.test.ts +0 -160
- package/src/interpreter/schema-matcher.ts +0 -168
- package/src/interpreter/signals.ts +0 -73
- package/src/interpreter/step-handlers/for-handler.ts +0 -65
- package/src/interpreter/step-handlers/index.ts +0 -17
- package/src/interpreter/step-handlers/map-handler.ts +0 -24
- package/src/interpreter/step-handlers/match-handler.ts +0 -101
- package/src/interpreter/step-handlers/store-handler.ts +0 -78
- package/src/interpreter/step-handlers/types.ts +0 -17
- package/src/interpreter/step-handlers/validate-handler.ts +0 -30
- package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
- package/src/lexer/index.ts +0 -18
- package/src/lexer/lexer.test.ts +0 -316
- package/src/lexer/tokens.ts +0 -179
- package/src/loader/index.ts +0 -288
- package/src/loader/loader.test.ts +0 -360
- package/src/oas/index.ts +0 -4
- package/src/oas/loader.ts +0 -126
- package/src/oas/oas.test.ts +0 -254
- package/src/oas/validator.ts +0 -299
- package/src/parser/base.ts +0 -124
- package/src/parser/expressions.test.ts +0 -525
- package/src/parser/expressions.ts +0 -314
- package/src/parser/index.ts +0 -3
- package/src/parser/match.test.ts +0 -296
- package/src/parser/parser.test.ts +0 -739
- package/src/parser/parser.ts +0 -1469
- package/src/parser/schedule.test.ts +0 -287
- package/src/parser/webhook.test.ts +0 -248
- package/src/plugin.ts +0 -83
- package/src/scheduler/cron-parser.test.ts +0 -236
- package/src/scheduler/cron-parser.ts +0 -236
- package/src/scheduler/index.ts +0 -10
- package/src/scheduler/scheduler.ts +0 -443
- package/src/scheduler/types.ts +0 -71
- package/src/stores/factory.ts +0 -104
- package/src/stores/file.test.ts +0 -276
- package/src/stores/file.ts +0 -211
- package/src/stores/index.ts +0 -6
- package/src/stores/memory.test.ts +0 -238
- package/src/stores/memory.ts +0 -63
- package/src/stores/postgrest.test.ts +0 -488
- package/src/stores/postgrest.ts +0 -263
- package/src/stores/stores.test.ts +0 -197
- package/src/stores/types.ts +0 -58
- package/src/sync/index.ts +0 -16
- package/src/sync/state.ts +0 -126
- package/src/sync/store.ts +0 -139
- package/src/sync/sync.test.ts +0 -271
- package/src/utils/async.ts +0 -10
- package/src/utils/file.ts +0 -106
- package/src/utils/index.ts +0 -14
- package/src/utils/logger.ts +0 -53
- package/src/utils/path.ts +0 -47
- package/src/webhook/index.ts +0 -15
- package/src/webhook/server.test.ts +0 -253
- package/src/webhook/server.ts +0 -389
- package/src/webhook/store.ts +0 -239
- package/src/webhook/types.ts +0 -93
- package/tsconfig.json +0 -17
- package/vitest.config.ts +0 -39
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger - Enhanced logging with context and spans
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging capabilities with:
|
|
5
|
+
* - Hierarchical context (child loggers)
|
|
6
|
+
* - Timing spans for operations
|
|
7
|
+
* - Multiple output formats
|
|
8
|
+
* - Integration with event emitter
|
|
9
|
+
*/
|
|
10
|
+
import type { LogLevel, EventEmitter } from './events.js';
|
|
11
|
+
/** Log entry structure */
|
|
12
|
+
export interface LogEntry {
|
|
13
|
+
level: LogLevel;
|
|
14
|
+
message: string;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
context: Record<string, unknown>;
|
|
17
|
+
spanId?: string;
|
|
18
|
+
parentSpanId?: string;
|
|
19
|
+
duration?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Span for timing operations */
|
|
22
|
+
export interface Span {
|
|
23
|
+
/** End the span and return duration in ms */
|
|
24
|
+
end(): number;
|
|
25
|
+
/** Add context to the span */
|
|
26
|
+
addContext(context: Record<string, unknown>): void;
|
|
27
|
+
/** Create a child span */
|
|
28
|
+
child(name: string): Span;
|
|
29
|
+
/** Get span ID */
|
|
30
|
+
readonly id: string;
|
|
31
|
+
}
|
|
32
|
+
/** Output handler interface */
|
|
33
|
+
export interface LogOutput {
|
|
34
|
+
write(entry: LogEntry): void;
|
|
35
|
+
}
|
|
36
|
+
/** Structured logger interface */
|
|
37
|
+
export interface StructuredLogger {
|
|
38
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
39
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
40
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
41
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
42
|
+
/** Create a child logger with additional context */
|
|
43
|
+
child(context: Record<string, unknown>): StructuredLogger;
|
|
44
|
+
/** Create a timing span */
|
|
45
|
+
span(name: string): Span;
|
|
46
|
+
/** Set minimum log level */
|
|
47
|
+
setLevel(level: LogLevel): void;
|
|
48
|
+
/** Add an output handler */
|
|
49
|
+
addOutput(output: LogOutput): void;
|
|
50
|
+
}
|
|
51
|
+
/** Console output with human-readable formatting */
|
|
52
|
+
export declare class ConsoleOutput implements LogOutput {
|
|
53
|
+
private prefix;
|
|
54
|
+
private colors;
|
|
55
|
+
constructor(options?: {
|
|
56
|
+
prefix?: string;
|
|
57
|
+
colors?: boolean;
|
|
58
|
+
});
|
|
59
|
+
write(entry: LogEntry): void;
|
|
60
|
+
}
|
|
61
|
+
/** JSON Lines output for log aggregation */
|
|
62
|
+
export declare class JsonLinesOutput implements LogOutput {
|
|
63
|
+
private stream;
|
|
64
|
+
constructor(stream?: {
|
|
65
|
+
write: (line: string) => void;
|
|
66
|
+
});
|
|
67
|
+
write(entry: LogEntry): void;
|
|
68
|
+
}
|
|
69
|
+
/** Buffer output for testing */
|
|
70
|
+
export declare class BufferOutput implements LogOutput {
|
|
71
|
+
readonly entries: LogEntry[];
|
|
72
|
+
write(entry: LogEntry): void;
|
|
73
|
+
clear(): void;
|
|
74
|
+
find(predicate: (entry: LogEntry) => boolean): LogEntry | undefined;
|
|
75
|
+
filter(predicate: (entry: LogEntry) => boolean): LogEntry[];
|
|
76
|
+
}
|
|
77
|
+
/** Event emitter output - bridges logs to events */
|
|
78
|
+
export declare class EventOutput implements LogOutput {
|
|
79
|
+
private emitter;
|
|
80
|
+
constructor(emitter: EventEmitter);
|
|
81
|
+
write(entry: LogEntry): void;
|
|
82
|
+
}
|
|
83
|
+
export interface CreateLoggerOptions {
|
|
84
|
+
/** Logger prefix for console output */
|
|
85
|
+
prefix?: string;
|
|
86
|
+
/** Minimum log level */
|
|
87
|
+
level?: LogLevel;
|
|
88
|
+
/** Include console output */
|
|
89
|
+
console?: boolean;
|
|
90
|
+
/** Include JSON lines output */
|
|
91
|
+
jsonLines?: boolean;
|
|
92
|
+
/** Custom JSON lines stream */
|
|
93
|
+
jsonStream?: {
|
|
94
|
+
write: (line: string) => void;
|
|
95
|
+
};
|
|
96
|
+
/** Event emitter for bridging */
|
|
97
|
+
eventEmitter?: EventEmitter;
|
|
98
|
+
/** Initial context */
|
|
99
|
+
context?: Record<string, unknown>;
|
|
100
|
+
/** Silent mode (no outputs) */
|
|
101
|
+
silent?: boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create a structured logger with configured outputs
|
|
105
|
+
*/
|
|
106
|
+
export declare function createStructuredLogger(options?: CreateLoggerOptions): StructuredLogger;
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger - Enhanced logging with context and spans
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging capabilities with:
|
|
5
|
+
* - Hierarchical context (child loggers)
|
|
6
|
+
* - Timing spans for operations
|
|
7
|
+
* - Multiple output formats
|
|
8
|
+
* - Integration with event emitter
|
|
9
|
+
*/
|
|
10
|
+
import { randomBytes } from 'node:crypto';
|
|
11
|
+
import { redactSecrets } from '../utils/redact.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Span Implementation
|
|
14
|
+
// ============================================================================
|
|
15
|
+
class SpanImpl {
|
|
16
|
+
id;
|
|
17
|
+
name;
|
|
18
|
+
startTime;
|
|
19
|
+
context = {};
|
|
20
|
+
parentSpanId;
|
|
21
|
+
logger;
|
|
22
|
+
ended = false;
|
|
23
|
+
constructor(name, logger, parentSpanId) {
|
|
24
|
+
this.id = generateSpanId();
|
|
25
|
+
this.name = name;
|
|
26
|
+
this.startTime = Date.now();
|
|
27
|
+
this.parentSpanId = parentSpanId;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
}
|
|
30
|
+
end() {
|
|
31
|
+
if (this.ended)
|
|
32
|
+
return 0;
|
|
33
|
+
this.ended = true;
|
|
34
|
+
const duration = Date.now() - this.startTime;
|
|
35
|
+
this.logger.writeSpanEnd(this.name, this.id, this.parentSpanId, duration, this.context);
|
|
36
|
+
return duration;
|
|
37
|
+
}
|
|
38
|
+
addContext(context) {
|
|
39
|
+
Object.assign(this.context, context);
|
|
40
|
+
}
|
|
41
|
+
child(name) {
|
|
42
|
+
return new SpanImpl(name, this.logger, this.id);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function generateSpanId() {
|
|
46
|
+
// CSPRNG-backed, 16 hex chars. Never all-zero (the OTel "invalid" sentinel).
|
|
47
|
+
for (let attempt = 0; attempt < 8; attempt++) {
|
|
48
|
+
const hex = randomBytes(8).toString('hex');
|
|
49
|
+
if (!/^0+$/.test(hex))
|
|
50
|
+
return hex;
|
|
51
|
+
}
|
|
52
|
+
return '1'.padEnd(16, '0');
|
|
53
|
+
}
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Logger Implementation
|
|
56
|
+
// ============================================================================
|
|
57
|
+
const LOG_LEVELS = {
|
|
58
|
+
debug: 0,
|
|
59
|
+
info: 1,
|
|
60
|
+
warn: 2,
|
|
61
|
+
error: 3,
|
|
62
|
+
};
|
|
63
|
+
class StructuredLoggerImpl {
|
|
64
|
+
context;
|
|
65
|
+
outputs = [];
|
|
66
|
+
minLevel = 'info';
|
|
67
|
+
eventEmitter;
|
|
68
|
+
constructor(context = {}, outputs = [], minLevel = 'info', eventEmitter) {
|
|
69
|
+
this.context = context;
|
|
70
|
+
this.outputs = outputs;
|
|
71
|
+
this.minLevel = minLevel;
|
|
72
|
+
this.eventEmitter = eventEmitter;
|
|
73
|
+
}
|
|
74
|
+
shouldLog(level) {
|
|
75
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[this.minLevel];
|
|
76
|
+
}
|
|
77
|
+
log(level, message, context) {
|
|
78
|
+
if (!this.shouldLog(level))
|
|
79
|
+
return;
|
|
80
|
+
const entry = {
|
|
81
|
+
level,
|
|
82
|
+
message,
|
|
83
|
+
timestamp: new Date().toISOString(),
|
|
84
|
+
context: redactSecrets({ ...this.context, ...context }),
|
|
85
|
+
};
|
|
86
|
+
for (const output of this.outputs) {
|
|
87
|
+
try {
|
|
88
|
+
output.write(entry);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Swallow output errors
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
debug(message, context) {
|
|
96
|
+
this.log('debug', message, context);
|
|
97
|
+
}
|
|
98
|
+
info(message, context) {
|
|
99
|
+
this.log('info', message, context);
|
|
100
|
+
}
|
|
101
|
+
warn(message, context) {
|
|
102
|
+
this.log('warn', message, context);
|
|
103
|
+
}
|
|
104
|
+
error(message, context) {
|
|
105
|
+
this.log('error', message, context);
|
|
106
|
+
}
|
|
107
|
+
child(context) {
|
|
108
|
+
return new StructuredLoggerImpl({ ...this.context, ...context }, this.outputs, this.minLevel, this.eventEmitter);
|
|
109
|
+
}
|
|
110
|
+
span(name) {
|
|
111
|
+
const span = new SpanImpl(name, this);
|
|
112
|
+
this.debug(`span:start`, { spanName: name, spanId: span.id });
|
|
113
|
+
return span;
|
|
114
|
+
}
|
|
115
|
+
setLevel(level) {
|
|
116
|
+
this.minLevel = level;
|
|
117
|
+
}
|
|
118
|
+
addOutput(output) {
|
|
119
|
+
this.outputs.push(output);
|
|
120
|
+
}
|
|
121
|
+
/** Internal: write span end entry */
|
|
122
|
+
writeSpanEnd(name, spanId, parentSpanId, duration, spanContext) {
|
|
123
|
+
const entry = {
|
|
124
|
+
level: 'debug',
|
|
125
|
+
message: `span:end`,
|
|
126
|
+
timestamp: new Date().toISOString(),
|
|
127
|
+
context: redactSecrets({ ...this.context, spanName: name, ...spanContext }),
|
|
128
|
+
spanId,
|
|
129
|
+
parentSpanId,
|
|
130
|
+
duration,
|
|
131
|
+
};
|
|
132
|
+
for (const output of this.outputs) {
|
|
133
|
+
try {
|
|
134
|
+
output.write(entry);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Swallow output errors
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Get the event emitter if configured */
|
|
142
|
+
getEventEmitter() {
|
|
143
|
+
return this.eventEmitter;
|
|
144
|
+
}
|
|
145
|
+
/** Emit an event (convenience method) */
|
|
146
|
+
emit(type, payload) {
|
|
147
|
+
this.eventEmitter?.emit(type, payload);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Output Handlers
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/** Console output with human-readable formatting */
|
|
154
|
+
export class ConsoleOutput {
|
|
155
|
+
prefix;
|
|
156
|
+
colors;
|
|
157
|
+
constructor(options = {}) {
|
|
158
|
+
this.prefix = options.prefix ?? 'Reqon';
|
|
159
|
+
this.colors = options.colors ?? true;
|
|
160
|
+
}
|
|
161
|
+
write(entry) {
|
|
162
|
+
const prefix = `[${this.prefix}]`;
|
|
163
|
+
const levelStr = entry.level.toUpperCase().padEnd(5);
|
|
164
|
+
// Format context as key=value pairs
|
|
165
|
+
const contextStr = Object.keys(entry.context).length > 0 ? ` ${formatContext(entry.context)}` : '';
|
|
166
|
+
// Format duration if present
|
|
167
|
+
const durationStr = entry.duration !== undefined ? ` (${entry.duration}ms)` : '';
|
|
168
|
+
const message = `${prefix} ${levelStr} ${entry.message}${contextStr}${durationStr}`;
|
|
169
|
+
switch (entry.level) {
|
|
170
|
+
case 'debug':
|
|
171
|
+
console.debug(message);
|
|
172
|
+
break;
|
|
173
|
+
case 'info':
|
|
174
|
+
console.log(message);
|
|
175
|
+
break;
|
|
176
|
+
case 'warn':
|
|
177
|
+
console.warn(message);
|
|
178
|
+
break;
|
|
179
|
+
case 'error':
|
|
180
|
+
console.error(message);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** JSON Lines output for log aggregation */
|
|
186
|
+
export class JsonLinesOutput {
|
|
187
|
+
stream;
|
|
188
|
+
constructor(stream) {
|
|
189
|
+
this.stream = stream ?? { write: (line) => console.log(line) };
|
|
190
|
+
}
|
|
191
|
+
write(entry) {
|
|
192
|
+
const json = JSON.stringify({
|
|
193
|
+
...entry,
|
|
194
|
+
'@timestamp': entry.timestamp,
|
|
195
|
+
});
|
|
196
|
+
this.stream.write(json);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** Buffer output for testing */
|
|
200
|
+
export class BufferOutput {
|
|
201
|
+
entries = [];
|
|
202
|
+
write(entry) {
|
|
203
|
+
this.entries.push(entry);
|
|
204
|
+
}
|
|
205
|
+
clear() {
|
|
206
|
+
this.entries.length = 0;
|
|
207
|
+
}
|
|
208
|
+
find(predicate) {
|
|
209
|
+
return this.entries.find(predicate);
|
|
210
|
+
}
|
|
211
|
+
filter(predicate) {
|
|
212
|
+
return this.entries.filter(predicate);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** Event emitter output - bridges logs to events */
|
|
216
|
+
export class EventOutput {
|
|
217
|
+
emitter;
|
|
218
|
+
constructor(emitter) {
|
|
219
|
+
this.emitter = emitter;
|
|
220
|
+
}
|
|
221
|
+
write(entry) {
|
|
222
|
+
// Map log entries to appropriate event types based on context
|
|
223
|
+
// This allows logs to flow into the event system
|
|
224
|
+
if (entry.context.eventType) {
|
|
225
|
+
this.emitter.emit(entry.context.eventType, {
|
|
226
|
+
...entry.context,
|
|
227
|
+
message: entry.message,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Create a structured logger with configured outputs
|
|
234
|
+
*/
|
|
235
|
+
export function createStructuredLogger(options = {}) {
|
|
236
|
+
const outputs = [];
|
|
237
|
+
if (!options.silent) {
|
|
238
|
+
if (options.console !== false) {
|
|
239
|
+
outputs.push(new ConsoleOutput({ prefix: options.prefix }));
|
|
240
|
+
}
|
|
241
|
+
if (options.jsonLines) {
|
|
242
|
+
outputs.push(new JsonLinesOutput(options.jsonStream));
|
|
243
|
+
}
|
|
244
|
+
if (options.eventEmitter) {
|
|
245
|
+
outputs.push(new EventOutput(options.eventEmitter));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return new StructuredLoggerImpl(options.context ?? {}, outputs, options.level ?? 'info', options.eventEmitter);
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Helpers
|
|
252
|
+
// ============================================================================
|
|
253
|
+
function formatContext(context) {
|
|
254
|
+
return Object.entries(context)
|
|
255
|
+
.filter(([key]) => !key.startsWith('_')) // Skip internal keys
|
|
256
|
+
.map(([key, value]) => {
|
|
257
|
+
if (typeof value === 'string') {
|
|
258
|
+
return `${key}="${value}"`;
|
|
259
|
+
}
|
|
260
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
261
|
+
return `${key}=${value}`;
|
|
262
|
+
}
|
|
263
|
+
return `${key}=${JSON.stringify(value)}`;
|
|
264
|
+
})
|
|
265
|
+
.join(' ');
|
|
266
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Integration - Trace and metrics export
|
|
3
|
+
*
|
|
4
|
+
* Provides adapters for exporting observability data to OpenTelemetry-compatible
|
|
5
|
+
* backends (Jaeger, Zipkin, OTLP, etc.)
|
|
6
|
+
*
|
|
7
|
+
* This is a lightweight implementation that doesn't require the full OTel SDK.
|
|
8
|
+
* For production use, consider using the official @opentelemetry packages.
|
|
9
|
+
*/
|
|
10
|
+
import type { ObservabilityEvent } from './events.js';
|
|
11
|
+
import type { LogEntry, LogOutput } from './logger.js';
|
|
12
|
+
/** OTLP-compatible span structure */
|
|
13
|
+
export interface OTelSpan {
|
|
14
|
+
traceId: string;
|
|
15
|
+
spanId: string;
|
|
16
|
+
parentSpanId?: string;
|
|
17
|
+
name: string;
|
|
18
|
+
kind: 'INTERNAL' | 'SERVER' | 'CLIENT' | 'PRODUCER' | 'CONSUMER';
|
|
19
|
+
startTimeUnixNano: string;
|
|
20
|
+
endTimeUnixNano: string;
|
|
21
|
+
attributes: OTelAttribute[];
|
|
22
|
+
status: {
|
|
23
|
+
code: 'UNSET' | 'OK' | 'ERROR';
|
|
24
|
+
message?: string;
|
|
25
|
+
};
|
|
26
|
+
events: OTelSpanEvent[];
|
|
27
|
+
}
|
|
28
|
+
export interface OTelAttribute {
|
|
29
|
+
key: string;
|
|
30
|
+
value: {
|
|
31
|
+
stringValue?: string;
|
|
32
|
+
intValue?: number;
|
|
33
|
+
boolValue?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export interface OTelSpanEvent {
|
|
37
|
+
name: string;
|
|
38
|
+
timeUnixNano: string;
|
|
39
|
+
attributes: OTelAttribute[];
|
|
40
|
+
}
|
|
41
|
+
/** Trace context for span correlation */
|
|
42
|
+
export interface TraceContext {
|
|
43
|
+
traceId: string;
|
|
44
|
+
spanId: string;
|
|
45
|
+
parentSpanId?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate a 32-character hex trace ID
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateTraceId(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate a 16-character hex span ID
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateSpanId(): string;
|
|
55
|
+
export declare class SpanBuilder {
|
|
56
|
+
private traceId;
|
|
57
|
+
private spans;
|
|
58
|
+
private activeSpans;
|
|
59
|
+
constructor(traceId?: string);
|
|
60
|
+
getTraceId(): string;
|
|
61
|
+
startSpan(name: string, options?: {
|
|
62
|
+
kind?: OTelSpan['kind'];
|
|
63
|
+
parentSpanId?: string;
|
|
64
|
+
attributes?: Record<string, string | number | boolean>;
|
|
65
|
+
}): string;
|
|
66
|
+
endSpan(spanId: string, options?: {
|
|
67
|
+
status?: 'OK' | 'ERROR';
|
|
68
|
+
error?: string;
|
|
69
|
+
attributes?: Record<string, string | number | boolean>;
|
|
70
|
+
}): OTelSpan | undefined;
|
|
71
|
+
addEvent(spanId: string, name: string, attributes?: Record<string, string | number | boolean>): void;
|
|
72
|
+
getSpans(): OTelSpan[];
|
|
73
|
+
private toAttributes;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Adapts observability events to OpenTelemetry spans
|
|
77
|
+
*/
|
|
78
|
+
export declare class OTelEventAdapter {
|
|
79
|
+
private spanBuilder;
|
|
80
|
+
private spanStack;
|
|
81
|
+
private eventToSpan;
|
|
82
|
+
/**
|
|
83
|
+
* Pending fetch spans keyed by source+path. Fetch start/complete events
|
|
84
|
+
* don't carry a correlation id, so we queue the open span ids per endpoint
|
|
85
|
+
* (FIFO) instead of a single shared `fetch:current` slot. This keeps
|
|
86
|
+
* concurrent/paginated fetches from overwriting and leaking each other.
|
|
87
|
+
*/
|
|
88
|
+
private pendingFetchSpans;
|
|
89
|
+
constructor(traceId?: string);
|
|
90
|
+
/**
|
|
91
|
+
* Process an observability event and update spans
|
|
92
|
+
*/
|
|
93
|
+
processEvent(event: ObservabilityEvent): void;
|
|
94
|
+
private startMissionSpan;
|
|
95
|
+
private endMissionSpan;
|
|
96
|
+
private startStageSpan;
|
|
97
|
+
private endStageSpan;
|
|
98
|
+
private startStepSpan;
|
|
99
|
+
private endStepSpan;
|
|
100
|
+
private fetchKey;
|
|
101
|
+
private startFetchSpan;
|
|
102
|
+
private endFetchSpan;
|
|
103
|
+
private addEventToCurrentSpan;
|
|
104
|
+
getSpans(): OTelSpan[];
|
|
105
|
+
getTraceId(): string;
|
|
106
|
+
}
|
|
107
|
+
export interface OTLPExporterConfig {
|
|
108
|
+
endpoint: string;
|
|
109
|
+
headers?: Record<string, string>;
|
|
110
|
+
serviceName?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Export spans to an OTLP-compatible endpoint
|
|
114
|
+
*/
|
|
115
|
+
export declare class OTLPExporter {
|
|
116
|
+
private config;
|
|
117
|
+
private pendingSpans;
|
|
118
|
+
private flushTimer?;
|
|
119
|
+
constructor(config: OTLPExporterConfig);
|
|
120
|
+
addSpans(spans: OTelSpan[]): void;
|
|
121
|
+
flush(): Promise<void>;
|
|
122
|
+
startAutoFlush(intervalMs?: number): void;
|
|
123
|
+
stopAutoFlush(): void;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Log output that converts entries to OTel spans
|
|
127
|
+
*/
|
|
128
|
+
export declare class OTelLogOutput implements LogOutput {
|
|
129
|
+
private adapter;
|
|
130
|
+
private exporter?;
|
|
131
|
+
constructor(adapter: OTelEventAdapter, exporter?: OTLPExporter);
|
|
132
|
+
write(entry: LogEntry): void;
|
|
133
|
+
getSpans(): OTelSpan[];
|
|
134
|
+
flush(): Promise<void>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create an event listener that builds OTel spans
|
|
138
|
+
*/
|
|
139
|
+
export declare function createOTelListener(config?: OTLPExporterConfig): {
|
|
140
|
+
adapter: OTelEventAdapter;
|
|
141
|
+
handler: (event: ObservabilityEvent) => void;
|
|
142
|
+
flush: () => Promise<void>;
|
|
143
|
+
};
|