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
package/dist/lexer/tokens.js
CHANGED
|
@@ -29,6 +29,8 @@ export var ReqonTokenType;
|
|
|
29
29
|
ReqonTokenType["NOSQL"] = "NOSQL";
|
|
30
30
|
ReqonTokenType["SQL"] = "SQL";
|
|
31
31
|
ReqonTokenType["MEMORY"] = "MEMORY";
|
|
32
|
+
ReqonTokenType["FILE"] = "FILE";
|
|
33
|
+
ReqonTokenType["POSTGREST"] = "POSTGREST";
|
|
32
34
|
// Auth types
|
|
33
35
|
ReqonTokenType["OAUTH2"] = "OAUTH2";
|
|
34
36
|
ReqonTokenType["BEARER"] = "BEARER";
|
|
@@ -62,6 +64,12 @@ export var ReqonTokenType;
|
|
|
62
64
|
ReqonTokenType["JUMP"] = "JUMP";
|
|
63
65
|
// Type checking
|
|
64
66
|
ReqonTokenType["IS"] = "IS";
|
|
67
|
+
// Transforms
|
|
68
|
+
ReqonTokenType["TRANSFORM"] = "TRANSFORM";
|
|
69
|
+
ReqonTokenType["APPLY"] = "APPLY";
|
|
70
|
+
ReqonTokenType["TO"] = "TO";
|
|
71
|
+
ReqonTokenType["AS"] = "AS";
|
|
72
|
+
ReqonTokenType["TRY"] = "TRY";
|
|
65
73
|
// Webhook support
|
|
66
74
|
ReqonTokenType["WAIT"] = "WAIT";
|
|
67
75
|
ReqonTokenType["TIMEOUT"] = "TIMEOUT";
|
|
@@ -69,6 +77,16 @@ export var ReqonTokenType;
|
|
|
69
77
|
ReqonTokenType["EXPECTED_EVENTS"] = "EXPECTED_EVENTS";
|
|
70
78
|
ReqonTokenType["EVENT_FILTER"] = "EVENT_FILTER";
|
|
71
79
|
ReqonTokenType["STORAGE"] = "STORAGE";
|
|
80
|
+
// Durability features
|
|
81
|
+
ReqonTokenType["CHECKPOINT"] = "CHECKPOINT";
|
|
82
|
+
ReqonTokenType["TRACE"] = "TRACE";
|
|
83
|
+
ReqonTokenType["PAUSE"] = "PAUSE";
|
|
84
|
+
ReqonTokenType["PERSIST"] = "PERSIST";
|
|
85
|
+
ReqonTokenType["DURATION"] = "DURATION";
|
|
86
|
+
ReqonTokenType["RESUME_ON"] = "RESUME_ON";
|
|
87
|
+
ReqonTokenType["AFTER_STEP"] = "AFTER_STEP";
|
|
88
|
+
ReqonTokenType["ON_FAILURE"] = "ON_FAILURE";
|
|
89
|
+
ReqonTokenType["FULL"] = "FULL";
|
|
72
90
|
})(ReqonTokenType || (ReqonTokenType = {}));
|
|
73
91
|
// Re-export Vague's TokenType for convenience
|
|
74
92
|
export { TokenType as VagueTokenType } from 'vague-lang';
|
|
@@ -106,6 +124,8 @@ export const REQON_KEYWORDS = {
|
|
|
106
124
|
nosql: ReqonTokenType.NOSQL,
|
|
107
125
|
sql: ReqonTokenType.SQL,
|
|
108
126
|
memory: ReqonTokenType.MEMORY,
|
|
127
|
+
file: ReqonTokenType.FILE,
|
|
128
|
+
postgrest: ReqonTokenType.POSTGREST,
|
|
109
129
|
// Auth types
|
|
110
130
|
oauth2: ReqonTokenType.OAUTH2,
|
|
111
131
|
bearer: ReqonTokenType.BEARER,
|
|
@@ -136,6 +156,12 @@ export const REQON_KEYWORDS = {
|
|
|
136
156
|
jump: ReqonTokenType.JUMP,
|
|
137
157
|
// Type checking
|
|
138
158
|
is: ReqonTokenType.IS,
|
|
159
|
+
// Transforms
|
|
160
|
+
transform: ReqonTokenType.TRANSFORM,
|
|
161
|
+
apply: ReqonTokenType.APPLY,
|
|
162
|
+
to: ReqonTokenType.TO,
|
|
163
|
+
as: ReqonTokenType.AS,
|
|
164
|
+
try: ReqonTokenType.TRY,
|
|
139
165
|
// Webhook support
|
|
140
166
|
wait: ReqonTokenType.WAIT,
|
|
141
167
|
timeout: ReqonTokenType.TIMEOUT,
|
|
@@ -143,4 +169,14 @@ export const REQON_KEYWORDS = {
|
|
|
143
169
|
expectedEvents: ReqonTokenType.EXPECTED_EVENTS,
|
|
144
170
|
eventFilter: ReqonTokenType.EVENT_FILTER,
|
|
145
171
|
storage: ReqonTokenType.STORAGE,
|
|
172
|
+
// Durability features
|
|
173
|
+
checkpoint: ReqonTokenType.CHECKPOINT,
|
|
174
|
+
trace: ReqonTokenType.TRACE,
|
|
175
|
+
pause: ReqonTokenType.PAUSE,
|
|
176
|
+
persist: ReqonTokenType.PERSIST,
|
|
177
|
+
duration: ReqonTokenType.DURATION,
|
|
178
|
+
resumeOn: ReqonTokenType.RESUME_ON,
|
|
179
|
+
afterStep: ReqonTokenType.AFTER_STEP,
|
|
180
|
+
onFailure: ReqonTokenType.ON_FAILURE,
|
|
181
|
+
full: ReqonTokenType.FULL,
|
|
146
182
|
};
|
package/dist/loader/index.js
CHANGED
|
@@ -59,9 +59,7 @@ async function loadMissionFile(filePath) {
|
|
|
59
59
|
*/
|
|
60
60
|
async function loadMissionFolder(folderPath, options) {
|
|
61
61
|
// Find root file - try extensions in order of preference
|
|
62
|
-
const extensionsToTry = options.extension
|
|
63
|
-
? [options.extension]
|
|
64
|
-
: SUPPORTED_EXTENSIONS;
|
|
62
|
+
const extensionsToTry = options.extension ? [options.extension] : SUPPORTED_EXTENSIONS;
|
|
65
63
|
let rootFilePath = null;
|
|
66
64
|
let ext = null;
|
|
67
65
|
for (const extension of extensionsToTry) {
|
|
@@ -77,9 +75,8 @@ async function loadMissionFolder(folderPath, options) {
|
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
77
|
if (!rootFilePath || !ext) {
|
|
80
|
-
const tried = extensionsToTry.map(e => `mission${e}`).join(' or ');
|
|
81
|
-
throw new Error(`Mission folder must contain a root file (${tried}). ` +
|
|
82
|
-
`Not found in: ${folderPath}`);
|
|
78
|
+
const tried = extensionsToTry.map((e) => `mission${e}`).join(' or ');
|
|
79
|
+
throw new Error(`Mission folder must contain a root file (${tried}). ` + `Not found in: ${folderPath}`);
|
|
83
80
|
}
|
|
84
81
|
// Load root file
|
|
85
82
|
const rootSource = await readFile(rootFilePath, 'utf-8');
|
|
@@ -87,7 +84,7 @@ async function loadMissionFolder(folderPath, options) {
|
|
|
87
84
|
// Find all other action files in the folder (same extension as root)
|
|
88
85
|
const rootFileName = basename(rootFilePath);
|
|
89
86
|
const files = await readdir(folderPath);
|
|
90
|
-
const actionFiles = files.filter(f => f.endsWith(ext) && f !== rootFileName);
|
|
87
|
+
const actionFiles = files.filter((f) => f.endsWith(ext) && f !== rootFileName);
|
|
91
88
|
const sourceFiles = [rootFilePath];
|
|
92
89
|
const externalActions = [];
|
|
93
90
|
// Parse each action file
|
|
@@ -169,7 +166,7 @@ function validatePipelineActions(program) {
|
|
|
169
166
|
const mission = program.statements.find((s) => s.type === 'MissionDefinition');
|
|
170
167
|
if (!mission)
|
|
171
168
|
return;
|
|
172
|
-
const actionNames = new Set(mission.actions.map(a => a.name));
|
|
169
|
+
const actionNames = new Set(mission.actions.map((a) => a.name));
|
|
173
170
|
for (const stage of mission.pipeline.stages) {
|
|
174
171
|
const stageActions = stage.actions ?? (stage.action ? [stage.action] : []);
|
|
175
172
|
for (const actionName of stageActions) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandboxing helpers for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* The MCP server is driven by an LLM acting on untrusted input, so missions
|
|
5
|
+
* must not be able to reach the network/filesystem or escape the working
|
|
6
|
+
* directory unless the operator explicitly opts in.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Resolve an untrusted path against a base working directory and assert the
|
|
10
|
+
* result stays inside it. Blocks `../` and absolute-path escapes.
|
|
11
|
+
*
|
|
12
|
+
* @throws if the resolved path escapes the working directory
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveWithinWorkingDir(workingDir: string, p: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Decide the effective dryRun for an execution. Effects (real network/fs) are
|
|
17
|
+
* opt-in: when not allowed, force dryRun regardless of what the caller asked.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveDryRun(allowEffects: boolean, requestedDryRun?: boolean): boolean;
|
|
20
|
+
/** Default wall-clock budget for an untrusted mission execution. */
|
|
21
|
+
export declare const DEFAULT_EXECUTION_TIMEOUT_MS = 30000;
|
|
22
|
+
/** Thrown when an execution exceeds its allotted time budget. */
|
|
23
|
+
export declare class ExecutionTimeoutError extends Error {
|
|
24
|
+
readonly timeoutMs: number;
|
|
25
|
+
constructor(timeoutMs: number);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Race a promise against a timeout. An untrusted (LLM-supplied) mission could
|
|
29
|
+
* otherwise loop or hang forever (e.g. a long pause/wait) and wedge the server.
|
|
30
|
+
* On timeout the returned promise rejects with an {@link ExecutionTimeoutError};
|
|
31
|
+
* the underlying work may keep running, but the caller is no longer blocked.
|
|
32
|
+
*
|
|
33
|
+
* A non-positive or non-finite timeout disables the guard.
|
|
34
|
+
*/
|
|
35
|
+
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T>;
|
|
36
|
+
/**
|
|
37
|
+
* Whether a store of the given type may be registered under the current effects
|
|
38
|
+
* policy. File-backed stores write to disk, which is an effect, so they require
|
|
39
|
+
* effects to be enabled. In-memory stores are always allowed.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isStoreTypeAllowed(storeType: string | undefined, allowEffects: boolean): boolean;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandboxing helpers for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* The MCP server is driven by an LLM acting on untrusted input, so missions
|
|
5
|
+
* must not be able to reach the network/filesystem or escape the working
|
|
6
|
+
* directory unless the operator explicitly opts in.
|
|
7
|
+
*/
|
|
8
|
+
import { resolve, sep } from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Resolve an untrusted path against a base working directory and assert the
|
|
11
|
+
* result stays inside it. Blocks `../` and absolute-path escapes.
|
|
12
|
+
*
|
|
13
|
+
* @throws if the resolved path escapes the working directory
|
|
14
|
+
*/
|
|
15
|
+
export function resolveWithinWorkingDir(workingDir, p) {
|
|
16
|
+
const base = resolve(workingDir);
|
|
17
|
+
const resolved = resolve(base, p);
|
|
18
|
+
if (resolved !== base && !resolved.startsWith(base + sep)) {
|
|
19
|
+
throw new Error(`Path "${p}" escapes the working directory`);
|
|
20
|
+
}
|
|
21
|
+
return resolved;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Decide the effective dryRun for an execution. Effects (real network/fs) are
|
|
25
|
+
* opt-in: when not allowed, force dryRun regardless of what the caller asked.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveDryRun(allowEffects, requestedDryRun) {
|
|
28
|
+
if (!allowEffects)
|
|
29
|
+
return true;
|
|
30
|
+
return requestedDryRun ?? false;
|
|
31
|
+
}
|
|
32
|
+
/** Default wall-clock budget for an untrusted mission execution. */
|
|
33
|
+
export const DEFAULT_EXECUTION_TIMEOUT_MS = 30_000;
|
|
34
|
+
/** Thrown when an execution exceeds its allotted time budget. */
|
|
35
|
+
export class ExecutionTimeoutError extends Error {
|
|
36
|
+
timeoutMs;
|
|
37
|
+
constructor(timeoutMs) {
|
|
38
|
+
super(`Execution exceeded the ${timeoutMs}ms timeout`);
|
|
39
|
+
this.timeoutMs = timeoutMs;
|
|
40
|
+
this.name = 'ExecutionTimeoutError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Race a promise against a timeout. An untrusted (LLM-supplied) mission could
|
|
45
|
+
* otherwise loop or hang forever (e.g. a long pause/wait) and wedge the server.
|
|
46
|
+
* On timeout the returned promise rejects with an {@link ExecutionTimeoutError};
|
|
47
|
+
* the underlying work may keep running, but the caller is no longer blocked.
|
|
48
|
+
*
|
|
49
|
+
* A non-positive or non-finite timeout disables the guard.
|
|
50
|
+
*/
|
|
51
|
+
export function withTimeout(promise, timeoutMs) {
|
|
52
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
|
|
53
|
+
return promise;
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const timer = setTimeout(() => reject(new ExecutionTimeoutError(timeoutMs)), timeoutMs);
|
|
56
|
+
// Don't let the timer keep the event loop alive on its own.
|
|
57
|
+
timer.unref?.();
|
|
58
|
+
promise.then((value) => {
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
resolve(value);
|
|
61
|
+
}, (error) => {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
reject(error);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Whether a store of the given type may be registered under the current effects
|
|
69
|
+
* policy. File-backed stores write to disk, which is an effect, so they require
|
|
70
|
+
* effects to be enabled. In-memory stores are always allowed.
|
|
71
|
+
*/
|
|
72
|
+
export function isStoreTypeAllowed(storeType, allowEffects) {
|
|
73
|
+
if (storeType === 'file')
|
|
74
|
+
return allowEffects;
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Reqon MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes Reqon pipeline capabilities via the Model Context Protocol.
|
|
6
|
+
*
|
|
7
|
+
* Tools:
|
|
8
|
+
* - reqon.execute: Execute a mission from DSL source
|
|
9
|
+
* - reqon.execute_file: Execute a mission from a file/folder path
|
|
10
|
+
* - reqon.query_store: Query data from a named store
|
|
11
|
+
* - reqon.list_stores: List available stores
|
|
12
|
+
*
|
|
13
|
+
* Resources:
|
|
14
|
+
* - reqon://stores - List all stores
|
|
15
|
+
* - reqon://stores/{name} - Access store data
|
|
16
|
+
*/
|
|
17
|
+
export {};
|