reqon-dsl 0.2.0 → 0.3.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 +22 -0
- package/dist/ast/nodes.d.ts +83 -4
- package/dist/ast/nodes.js +14 -0
- package/dist/auth/circuit-breaker.js +7 -6
- package/dist/auth/rate-limiter.d.ts +4 -0
- package/dist/auth/rate-limiter.js +9 -16
- package/dist/cli.d.ts +13 -0
- package/dist/cli.js +84 -4
- package/dist/config/constants.d.ts +141 -0
- package/dist/config/constants.js +128 -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 +88 -0
- package/dist/control/server.js +238 -0
- package/dist/control/types.d.ts +55 -0
- package/dist/control/types.js +7 -0
- package/dist/debug/cli-debugger.d.ts +17 -0
- package/dist/debug/cli-debugger.js +180 -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/index.d.ts +21 -1
- package/dist/index.js +33 -2
- package/dist/interpreter/context.d.ts +14 -0
- package/dist/interpreter/context.js +15 -0
- package/dist/interpreter/evaluator.d.ts +63 -1
- package/dist/interpreter/evaluator.js +186 -39
- package/dist/interpreter/executor.d.ts +70 -14
- package/dist/interpreter/executor.js +503 -174
- package/dist/interpreter/fetch-handler.d.ts +9 -0
- package/dist/interpreter/fetch-handler.js +133 -24
- package/dist/interpreter/http.d.ts +5 -0
- package/dist/interpreter/http.js +26 -12
- package/dist/interpreter/index.d.ts +3 -1
- package/dist/interpreter/index.js +2 -0
- package/dist/interpreter/pagination.d.ts +11 -2
- package/dist/interpreter/pagination.js +95 -31
- 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 +13 -0
- package/dist/interpreter/step-handlers/for-handler.js +71 -4
- 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 +43 -16
- 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 +11 -1
- package/dist/interpreter/step-handlers/store-handler.js +45 -13
- 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 +4 -2
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +3 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +18 -2
- package/dist/interpreter/store-manager.d.ts +46 -0
- package/dist/interpreter/store-manager.js +66 -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/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.js +451 -0
- package/dist/oas/index.d.ts +2 -0
- package/dist/oas/index.js +1 -0
- package/dist/oas/mock-generator.d.ts +12 -0
- package/dist/oas/mock-generator.js +187 -0
- package/dist/observability/events.d.ts +244 -0
- package/dist/observability/events.js +90 -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 +259 -0
- package/dist/observability/otel.d.ts +135 -0
- package/dist/observability/otel.js +386 -0
- package/dist/parser/action-parser.d.ts +105 -0
- package/dist/parser/action-parser.js +645 -0
- package/dist/parser/expressions.d.ts +13 -0
- package/dist/parser/expressions.js +72 -2
- package/dist/parser/fetch-parser.d.ts +27 -0
- package/dist/parser/fetch-parser.js +269 -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 +14 -0
- package/dist/pause/index.js +11 -0
- package/dist/pause/manager.d.ts +118 -0
- package/dist/pause/manager.js +245 -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 +156 -0
- package/dist/plugin.d.ts +9 -12
- package/dist/plugin.js +10 -13
- package/dist/stores/factory.d.ts +1 -1
- package/dist/stores/factory.js +3 -2
- package/dist/stores/file.d.ts +26 -0
- package/dist/stores/file.js +64 -10
- 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 +11 -0
- package/dist/stores/types.d.ts +17 -0
- package/dist/stores/types.js +12 -0
- package/dist/trace/index.d.ts +16 -0
- package/dist/trace/index.js +12 -0
- package/dist/trace/recorder.d.ts +71 -0
- package/dist/trace/recorder.js +144 -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 +69 -0
- package/dist/trace/store.js +225 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/type-guards.d.ts +58 -0
- package/dist/utils/type-guards.js +92 -0
- package/dist/webhook/server.js +7 -6
- package/package.json +55 -6
- 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,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized Configuration Constants
|
|
3
|
+
*
|
|
4
|
+
* This module contains all default values and configuration constants used
|
|
5
|
+
* throughout the Reqon framework. Centralizing these values makes it easier
|
|
6
|
+
* to understand, tune, and override defaults.
|
|
7
|
+
*/
|
|
8
|
+
// ============================================
|
|
9
|
+
// HTTP Client Configuration
|
|
10
|
+
// ============================================
|
|
11
|
+
/**
|
|
12
|
+
* Default retry configuration for HTTP requests
|
|
13
|
+
*/
|
|
14
|
+
export const HTTP_RETRY_DEFAULTS = {
|
|
15
|
+
/** Maximum number of retry attempts */
|
|
16
|
+
MAX_ATTEMPTS: 3,
|
|
17
|
+
/** Initial delay between retries in milliseconds */
|
|
18
|
+
INITIAL_DELAY_MS: 1000,
|
|
19
|
+
/** Maximum delay between retries in milliseconds */
|
|
20
|
+
MAX_DELAY_MS: 30000,
|
|
21
|
+
/** Backoff strategy: 'exponential', 'linear', or 'constant' */
|
|
22
|
+
BACKOFF: 'exponential',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Default HTTP headers
|
|
26
|
+
*/
|
|
27
|
+
export const HTTP_DEFAULT_HEADERS = {
|
|
28
|
+
CONTENT_TYPE: 'application/json',
|
|
29
|
+
ACCEPT: 'application/json',
|
|
30
|
+
};
|
|
31
|
+
// ============================================
|
|
32
|
+
// Rate Limiter Configuration
|
|
33
|
+
// ============================================
|
|
34
|
+
/**
|
|
35
|
+
* Default rate limiter configuration
|
|
36
|
+
*/
|
|
37
|
+
export const RATE_LIMIT_DEFAULTS = {
|
|
38
|
+
/** Default strategy when rate limited: 'pause', 'throttle', or 'fail' */
|
|
39
|
+
STRATEGY: 'pause',
|
|
40
|
+
/** Maximum wait time in seconds before timing out */
|
|
41
|
+
MAX_WAIT_SECONDS: 300,
|
|
42
|
+
/** Seconds before starting to notify about ongoing waits */
|
|
43
|
+
NOTIFY_AT_SECONDS: 10,
|
|
44
|
+
/** Fallback requests per minute when no rate limit info available */
|
|
45
|
+
FALLBACK_RPM: 60,
|
|
46
|
+
/** Maximum age for stale rate limit entries (1 hour in ms) */
|
|
47
|
+
MAX_STALE_AGE_MS: 60 * 60 * 1000,
|
|
48
|
+
/** Cleanup interval for stale entries (5 minutes in ms) */
|
|
49
|
+
CLEANUP_INTERVAL_MS: 5 * 60 * 1000,
|
|
50
|
+
/** Number of responses between cleanup checks */
|
|
51
|
+
CLEANUP_CHECK_INTERVAL: 100,
|
|
52
|
+
/** Maximum entries before forced cleanup */
|
|
53
|
+
MAX_ENTRIES_BEFORE_CLEANUP: 1000,
|
|
54
|
+
};
|
|
55
|
+
// ============================================
|
|
56
|
+
// Circuit Breaker Configuration
|
|
57
|
+
// ============================================
|
|
58
|
+
/**
|
|
59
|
+
* Default circuit breaker configuration
|
|
60
|
+
*/
|
|
61
|
+
export const CIRCUIT_BREAKER_DEFAULTS = {
|
|
62
|
+
/** Number of failures before opening circuit */
|
|
63
|
+
FAILURE_THRESHOLD: 5,
|
|
64
|
+
/** Time in milliseconds before attempting recovery */
|
|
65
|
+
RESET_TIMEOUT_MS: 30000,
|
|
66
|
+
/** Number of successful requests in half-open to close circuit */
|
|
67
|
+
SUCCESS_THRESHOLD: 2,
|
|
68
|
+
/** Time window in milliseconds for counting failures */
|
|
69
|
+
FAILURE_WINDOW_MS: 60000,
|
|
70
|
+
/** HTTP status codes to count as failures */
|
|
71
|
+
FAILURE_STATUS_CODES: [500, 501, 502, 503, 504],
|
|
72
|
+
/** Whether to count network errors as failures */
|
|
73
|
+
COUNT_NETWORK_ERRORS: true,
|
|
74
|
+
};
|
|
75
|
+
// ============================================
|
|
76
|
+
// Webhook Server Configuration
|
|
77
|
+
// ============================================
|
|
78
|
+
/**
|
|
79
|
+
* Default webhook server configuration
|
|
80
|
+
*/
|
|
81
|
+
export const WEBHOOK_DEFAULTS = {
|
|
82
|
+
/** Default port for webhook server */
|
|
83
|
+
PORT: 3000,
|
|
84
|
+
/** Default host binding */
|
|
85
|
+
HOST: '0.0.0.0',
|
|
86
|
+
/** Default timeout for wait steps (5 minutes in ms) */
|
|
87
|
+
DEFAULT_TIMEOUT_MS: 300000,
|
|
88
|
+
/** Cleanup interval for expired registrations (1 minute in ms) */
|
|
89
|
+
CLEANUP_INTERVAL_MS: 60000,
|
|
90
|
+
};
|
|
91
|
+
// ============================================
|
|
92
|
+
// Store Configuration
|
|
93
|
+
// ============================================
|
|
94
|
+
/**
|
|
95
|
+
* Default store configuration
|
|
96
|
+
*/
|
|
97
|
+
export const STORE_DEFAULTS = {
|
|
98
|
+
/** Default base directory for file stores */
|
|
99
|
+
DATA_DIR: '.reqon-data',
|
|
100
|
+
/** Default subdirectory for executions */
|
|
101
|
+
EXECUTIONS_DIR: 'executions',
|
|
102
|
+
/** Default subdirectory for sync state */
|
|
103
|
+
SYNC_DIR: 'sync',
|
|
104
|
+
};
|
|
105
|
+
// ============================================
|
|
106
|
+
// Scheduler Configuration
|
|
107
|
+
// ============================================
|
|
108
|
+
/**
|
|
109
|
+
* Default scheduler configuration
|
|
110
|
+
*/
|
|
111
|
+
export const SCHEDULER_DEFAULTS = {
|
|
112
|
+
/** Default retry configuration for failed scheduled missions */
|
|
113
|
+
MAX_RETRIES: 3,
|
|
114
|
+
/** Default delay between retries in seconds */
|
|
115
|
+
RETRY_DELAY_SECONDS: 60,
|
|
116
|
+
};
|
|
117
|
+
// ============================================
|
|
118
|
+
// Execution Configuration
|
|
119
|
+
// ============================================
|
|
120
|
+
/**
|
|
121
|
+
* Default execution configuration
|
|
122
|
+
*/
|
|
123
|
+
export const EXECUTION_DEFAULTS = {
|
|
124
|
+
/** Whether development mode is enabled by default (uses file stores) */
|
|
125
|
+
DEVELOPMENT_MODE: true,
|
|
126
|
+
/** Whether to persist execution state by default */
|
|
127
|
+
PERSIST_STATE: false,
|
|
128
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ControlServer } from './server.js';
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control Server
|
|
3
|
+
*
|
|
4
|
+
* HTTP server for runtime control of mission execution.
|
|
5
|
+
* Provides pause/resume commands and live status queries.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExecutionState, LiveProgress } from '../execution/index.js';
|
|
8
|
+
import type { ControlServerConfig, ControlServerCallbacks } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Control Server
|
|
11
|
+
*
|
|
12
|
+
* Provides HTTP endpoints for controlling mission execution:
|
|
13
|
+
* - POST /pause - Request graceful pause
|
|
14
|
+
* - POST /resume - Clear pause request
|
|
15
|
+
* - GET /status - Get current execution state and progress
|
|
16
|
+
* - GET /health - Health check
|
|
17
|
+
*/
|
|
18
|
+
export declare class ControlServer {
|
|
19
|
+
private config;
|
|
20
|
+
private callbacks;
|
|
21
|
+
private server?;
|
|
22
|
+
private running;
|
|
23
|
+
private startTime;
|
|
24
|
+
private pauseRequested;
|
|
25
|
+
private executionState?;
|
|
26
|
+
private liveProgress?;
|
|
27
|
+
constructor(config?: ControlServerConfig, callbacks?: ControlServerCallbacks);
|
|
28
|
+
/**
|
|
29
|
+
* Start the control server
|
|
30
|
+
*/
|
|
31
|
+
start(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Stop the control server
|
|
34
|
+
*/
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Check if pause has been requested
|
|
38
|
+
*/
|
|
39
|
+
isPauseRequested(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Clear pause request (called after pause is handled)
|
|
42
|
+
*/
|
|
43
|
+
clearPauseRequest(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Update execution state (called by executor)
|
|
46
|
+
*/
|
|
47
|
+
updateState(state: ExecutionState): void;
|
|
48
|
+
/**
|
|
49
|
+
* Update live progress (called by executor)
|
|
50
|
+
*/
|
|
51
|
+
updateProgress(progress: LiveProgress): void;
|
|
52
|
+
/**
|
|
53
|
+
* Check if the server is running
|
|
54
|
+
*/
|
|
55
|
+
isRunning(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get the server port
|
|
58
|
+
*/
|
|
59
|
+
getPort(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Handle incoming HTTP request
|
|
62
|
+
*/
|
|
63
|
+
private handleRequest;
|
|
64
|
+
/**
|
|
65
|
+
* Handle health check
|
|
66
|
+
*/
|
|
67
|
+
private handleHealth;
|
|
68
|
+
/**
|
|
69
|
+
* Handle status query
|
|
70
|
+
*/
|
|
71
|
+
private handleStatus;
|
|
72
|
+
/**
|
|
73
|
+
* Handle pause request
|
|
74
|
+
*/
|
|
75
|
+
private handlePause;
|
|
76
|
+
/**
|
|
77
|
+
* Handle resume request
|
|
78
|
+
*/
|
|
79
|
+
private handleResume;
|
|
80
|
+
/**
|
|
81
|
+
* Send JSON response
|
|
82
|
+
*/
|
|
83
|
+
private sendJson;
|
|
84
|
+
/**
|
|
85
|
+
* Log message if verbose mode enabled
|
|
86
|
+
*/
|
|
87
|
+
private log;
|
|
88
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control Server
|
|
3
|
+
*
|
|
4
|
+
* HTTP server for runtime control of mission execution.
|
|
5
|
+
* Provides pause/resume commands and live status queries.
|
|
6
|
+
*/
|
|
7
|
+
import { createServer } from 'node:http';
|
|
8
|
+
import { parse as parseUrl } from 'node:url';
|
|
9
|
+
const DEFAULTS = {
|
|
10
|
+
PORT: 3001,
|
|
11
|
+
HOST: 'localhost',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Control Server
|
|
15
|
+
*
|
|
16
|
+
* Provides HTTP endpoints for controlling mission execution:
|
|
17
|
+
* - POST /pause - Request graceful pause
|
|
18
|
+
* - POST /resume - Clear pause request
|
|
19
|
+
* - GET /status - Get current execution state and progress
|
|
20
|
+
* - GET /health - Health check
|
|
21
|
+
*/
|
|
22
|
+
export class ControlServer {
|
|
23
|
+
config;
|
|
24
|
+
callbacks;
|
|
25
|
+
server;
|
|
26
|
+
running = false;
|
|
27
|
+
startTime = Date.now();
|
|
28
|
+
// State managed by the control server
|
|
29
|
+
pauseRequested = false;
|
|
30
|
+
executionState;
|
|
31
|
+
liveProgress;
|
|
32
|
+
constructor(config = {}, callbacks = {}) {
|
|
33
|
+
this.config = {
|
|
34
|
+
port: config.port ?? DEFAULTS.PORT,
|
|
35
|
+
host: config.host ?? DEFAULTS.HOST,
|
|
36
|
+
verbose: config.verbose ?? false,
|
|
37
|
+
};
|
|
38
|
+
this.callbacks = callbacks;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Start the control server
|
|
42
|
+
*/
|
|
43
|
+
async start() {
|
|
44
|
+
if (this.running)
|
|
45
|
+
return;
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
this.server = createServer((req, res) => this.handleRequest(req, res));
|
|
48
|
+
this.server.on('error', (error) => {
|
|
49
|
+
reject(error);
|
|
50
|
+
});
|
|
51
|
+
this.server.listen(this.config.port, this.config.host, () => {
|
|
52
|
+
this.running = true;
|
|
53
|
+
this.startTime = Date.now();
|
|
54
|
+
this.log(`Control server listening on ${this.config.host}:${this.config.port}`);
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Stop the control server
|
|
61
|
+
*/
|
|
62
|
+
async stop() {
|
|
63
|
+
if (!this.running)
|
|
64
|
+
return;
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
if (this.server) {
|
|
67
|
+
this.server.close(() => {
|
|
68
|
+
this.running = false;
|
|
69
|
+
this.log('Control server stopped');
|
|
70
|
+
resolve();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
resolve();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if pause has been requested
|
|
80
|
+
*/
|
|
81
|
+
isPauseRequested() {
|
|
82
|
+
return this.pauseRequested;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Clear pause request (called after pause is handled)
|
|
86
|
+
*/
|
|
87
|
+
clearPauseRequest() {
|
|
88
|
+
this.pauseRequested = false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Update execution state (called by executor)
|
|
92
|
+
*/
|
|
93
|
+
updateState(state) {
|
|
94
|
+
this.executionState = state;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Update live progress (called by executor)
|
|
98
|
+
*/
|
|
99
|
+
updateProgress(progress) {
|
|
100
|
+
this.liveProgress = progress;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if the server is running
|
|
104
|
+
*/
|
|
105
|
+
isRunning() {
|
|
106
|
+
return this.running;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the server port
|
|
110
|
+
*/
|
|
111
|
+
getPort() {
|
|
112
|
+
return this.config.port;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Handle incoming HTTP request
|
|
116
|
+
*/
|
|
117
|
+
async handleRequest(req, res) {
|
|
118
|
+
const url = parseUrl(req.url ?? '/', true);
|
|
119
|
+
const path = url.pathname ?? '/';
|
|
120
|
+
const method = req.method ?? 'GET';
|
|
121
|
+
// Set CORS headers for flexibility
|
|
122
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
123
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
124
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
125
|
+
// Handle preflight
|
|
126
|
+
if (method === 'OPTIONS') {
|
|
127
|
+
res.writeHead(204);
|
|
128
|
+
res.end();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
// Route requests
|
|
133
|
+
if (path === '/health' || path === '/_health') {
|
|
134
|
+
this.handleHealth(res);
|
|
135
|
+
}
|
|
136
|
+
else if (path === '/status') {
|
|
137
|
+
this.handleStatus(res);
|
|
138
|
+
}
|
|
139
|
+
else if (path === '/pause' && method === 'POST') {
|
|
140
|
+
this.handlePause(res);
|
|
141
|
+
}
|
|
142
|
+
else if (path === '/resume' && method === 'POST') {
|
|
143
|
+
this.handleResume(res);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.sendJson(res, 404, { error: 'Not found', path });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
this.sendJson(res, 500, { error: error.message });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Handle health check
|
|
155
|
+
*/
|
|
156
|
+
handleHealth(res) {
|
|
157
|
+
this.sendJson(res, 200, {
|
|
158
|
+
status: 'ok',
|
|
159
|
+
timestamp: new Date().toISOString(),
|
|
160
|
+
uptime: Date.now() - this.startTime,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Handle status query
|
|
165
|
+
*/
|
|
166
|
+
handleStatus(res) {
|
|
167
|
+
this.callbacks.onStatusQueried?.();
|
|
168
|
+
const response = {
|
|
169
|
+
execution: this.executionState,
|
|
170
|
+
progress: this.liveProgress,
|
|
171
|
+
pauseRequested: this.pauseRequested,
|
|
172
|
+
uptime: Date.now() - this.startTime,
|
|
173
|
+
timestamp: new Date().toISOString(),
|
|
174
|
+
};
|
|
175
|
+
this.sendJson(res, 200, response);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Handle pause request
|
|
179
|
+
*/
|
|
180
|
+
handlePause(res) {
|
|
181
|
+
if (this.pauseRequested) {
|
|
182
|
+
const response = {
|
|
183
|
+
success: true,
|
|
184
|
+
message: 'Pause already requested',
|
|
185
|
+
pauseRequested: true,
|
|
186
|
+
};
|
|
187
|
+
this.sendJson(res, 200, response);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.pauseRequested = true;
|
|
191
|
+
this.callbacks.onPauseRequested?.();
|
|
192
|
+
this.log('Pause requested');
|
|
193
|
+
const response = {
|
|
194
|
+
success: true,
|
|
195
|
+
message: 'Pause requested. Execution will pause at next safe point.',
|
|
196
|
+
pauseRequested: true,
|
|
197
|
+
};
|
|
198
|
+
this.sendJson(res, 200, response);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Handle resume request
|
|
202
|
+
*/
|
|
203
|
+
handleResume(res) {
|
|
204
|
+
if (!this.pauseRequested) {
|
|
205
|
+
const response = {
|
|
206
|
+
success: true,
|
|
207
|
+
message: 'No pause was requested',
|
|
208
|
+
pauseRequested: false,
|
|
209
|
+
};
|
|
210
|
+
this.sendJson(res, 200, response);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this.pauseRequested = false;
|
|
214
|
+
this.callbacks.onResumeRequested?.();
|
|
215
|
+
this.log('Pause request cleared');
|
|
216
|
+
const response = {
|
|
217
|
+
success: true,
|
|
218
|
+
message: 'Pause request cleared. Use --resume flag to resume execution.',
|
|
219
|
+
pauseRequested: false,
|
|
220
|
+
};
|
|
221
|
+
this.sendJson(res, 200, response);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Send JSON response
|
|
225
|
+
*/
|
|
226
|
+
sendJson(res, status, data) {
|
|
227
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
228
|
+
res.end(JSON.stringify(data, null, 2));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Log message if verbose mode enabled
|
|
232
|
+
*/
|
|
233
|
+
log(message) {
|
|
234
|
+
if (this.config.verbose) {
|
|
235
|
+
console.log(`[Control] ${message}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control Server Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the HTTP control server that enables
|
|
5
|
+
* pause/resume and live status queries.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExecutionState, LiveProgress } from '../execution/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for the control server
|
|
10
|
+
*/
|
|
11
|
+
export interface ControlServerConfig {
|
|
12
|
+
/** Port to listen on (default: 3001) */
|
|
13
|
+
port?: number;
|
|
14
|
+
/** Host to bind to (default: localhost) */
|
|
15
|
+
host?: string;
|
|
16
|
+
/** Enable verbose logging */
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Callbacks for control server events
|
|
21
|
+
*/
|
|
22
|
+
export interface ControlServerCallbacks {
|
|
23
|
+
/** Called when pause is requested */
|
|
24
|
+
onPauseRequested?: () => void;
|
|
25
|
+
/** Called when resume is requested */
|
|
26
|
+
onResumeRequested?: () => void;
|
|
27
|
+
/** Called when status is queried */
|
|
28
|
+
onStatusQueried?: () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Response for status endpoint
|
|
32
|
+
*/
|
|
33
|
+
export interface StatusResponse {
|
|
34
|
+
/** Execution state (if available) */
|
|
35
|
+
execution?: ExecutionState;
|
|
36
|
+
/** Live progress (if available) */
|
|
37
|
+
progress?: LiveProgress;
|
|
38
|
+
/** Whether pause has been requested */
|
|
39
|
+
pauseRequested: boolean;
|
|
40
|
+
/** Server uptime in milliseconds */
|
|
41
|
+
uptime: number;
|
|
42
|
+
/** Timestamp of this response */
|
|
43
|
+
timestamp: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Response for pause/resume endpoints
|
|
47
|
+
*/
|
|
48
|
+
export interface ControlResponse {
|
|
49
|
+
/** Whether the operation succeeded */
|
|
50
|
+
success: boolean;
|
|
51
|
+
/** Optional message */
|
|
52
|
+
message?: string;
|
|
53
|
+
/** Whether pause is currently requested */
|
|
54
|
+
pauseRequested: boolean;
|
|
55
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Debugger - Interactive readline-based debugger for terminal use
|
|
3
|
+
*/
|
|
4
|
+
import type { DebugCommand, DebugSnapshot } from './controller.js';
|
|
5
|
+
import { BaseDebugController } from './controller.js';
|
|
6
|
+
export declare class CLIDebugger extends BaseDebugController {
|
|
7
|
+
private rl;
|
|
8
|
+
private closed;
|
|
9
|
+
constructor();
|
|
10
|
+
pause(snapshot: DebugSnapshot): Promise<DebugCommand>;
|
|
11
|
+
private printSnapshot;
|
|
12
|
+
private formatValue;
|
|
13
|
+
private promptCommand;
|
|
14
|
+
private parseCommand;
|
|
15
|
+
private printHelp;
|
|
16
|
+
close(): void;
|
|
17
|
+
}
|