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
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 1
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# OpenAPI Integration Overview
|
|
6
|
-
|
|
7
|
-
Reqon integrates with OpenAPI (Swagger) specifications for type-safe API calls and response validation.
|
|
8
|
-
|
|
9
|
-
## Benefits
|
|
10
|
-
|
|
11
|
-
- **Type-safe operations**: Call APIs by operation ID
|
|
12
|
-
- **Auto-discovery**: Base URL and endpoints from spec
|
|
13
|
-
- **Response validation**: Validate against schema definitions
|
|
14
|
-
- **Documentation sync**: API changes reflected automatically
|
|
15
|
-
|
|
16
|
-
## Quick Start
|
|
17
|
-
|
|
18
|
-
### 1. Define Source from Spec
|
|
19
|
-
|
|
20
|
-
```vague
|
|
21
|
-
source Petstore from "./petstore.yaml" {
|
|
22
|
-
auth: bearer,
|
|
23
|
-
validateResponses: true
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### 2. Call Operations
|
|
28
|
-
|
|
29
|
-
```vague
|
|
30
|
-
action FetchPets {
|
|
31
|
-
call Petstore.listPets { params: { limit: 100 } }
|
|
32
|
-
store response -> pets { key: .id }
|
|
33
|
-
|
|
34
|
-
call Petstore.getPetById { params: { petId: "123" } }
|
|
35
|
-
store response -> petDetails { key: .id }
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## How It Works
|
|
40
|
-
|
|
41
|
-
### Loading Specs
|
|
42
|
-
|
|
43
|
-
Reqon loads and parses OpenAPI specs:
|
|
44
|
-
|
|
45
|
-
```vague
|
|
46
|
-
// Local file
|
|
47
|
-
source API from "./api.yaml" { auth: bearer }
|
|
48
|
-
|
|
49
|
-
// URL
|
|
50
|
-
source API from "https://api.example.com/openapi.json" { auth: bearer }
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Operation Resolution
|
|
54
|
-
|
|
55
|
-
Reqon maps `call Source.operationId` to:
|
|
56
|
-
|
|
57
|
-
```yaml
|
|
58
|
-
# OpenAPI spec
|
|
59
|
-
paths:
|
|
60
|
-
/pets:
|
|
61
|
-
get:
|
|
62
|
-
operationId: listPets
|
|
63
|
-
# Reqon uses: GET /pets
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Base URL Extraction
|
|
67
|
-
|
|
68
|
-
Base URL from spec's `servers`:
|
|
69
|
-
|
|
70
|
-
```yaml
|
|
71
|
-
servers:
|
|
72
|
-
- url: https://api.example.com/v1
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Configuration Options
|
|
76
|
-
|
|
77
|
-
```vague
|
|
78
|
-
source API from "./spec.yaml" {
|
|
79
|
-
auth: bearer,
|
|
80
|
-
validateResponses: true, # Validate responses against schema
|
|
81
|
-
headers: { # Additional headers
|
|
82
|
-
"X-Custom": "value"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Example Workflow
|
|
88
|
-
|
|
89
|
-
```vague
|
|
90
|
-
mission PetstoreSync {
|
|
91
|
-
source Petstore from "./petstore.yaml" {
|
|
92
|
-
auth: api_key,
|
|
93
|
-
validateResponses: true
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
store pets: file("pets")
|
|
97
|
-
|
|
98
|
-
action SyncPets {
|
|
99
|
-
// List all pets
|
|
100
|
-
call Petstore.listPets {
|
|
101
|
-
params: { limit: 100 }
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
for pet in response {
|
|
105
|
-
// Get full details
|
|
106
|
-
call Petstore.getPetById {
|
|
107
|
-
params: { petId: pet.id }
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
store response -> pets { key: .id }
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
action CreatePet {
|
|
115
|
-
call Petstore.addPet {
|
|
116
|
-
body: {
|
|
117
|
-
name: "Fluffy",
|
|
118
|
-
tag: "cat"
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
run SyncPets
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## Comparison: Traditional vs OAS
|
|
128
|
-
|
|
129
|
-
### Traditional Approach
|
|
130
|
-
|
|
131
|
-
```vague
|
|
132
|
-
source API { auth: bearer, base: "https://api.example.com" }
|
|
133
|
-
|
|
134
|
-
action Fetch {
|
|
135
|
-
get "/pets"
|
|
136
|
-
get concat("/pets/", id)
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### OAS Approach
|
|
141
|
-
|
|
142
|
-
```vague
|
|
143
|
-
source API from "./spec.yaml" { auth: bearer }
|
|
144
|
-
|
|
145
|
-
action Fetch {
|
|
146
|
-
call API.listPets
|
|
147
|
-
call API.getPetById { params: { petId: id } }
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Benefits of OAS
|
|
152
|
-
|
|
153
|
-
| Aspect | Traditional | OAS |
|
|
154
|
-
|--------|-------------|-----|
|
|
155
|
-
| Type safety | None | Schema validation |
|
|
156
|
-
| Endpoint updates | Manual | Automatic |
|
|
157
|
-
| Documentation | Separate | Integrated |
|
|
158
|
-
| IDE support | Limited | Full autocomplete |
|
|
159
|
-
|
|
160
|
-
## Supported Spec Formats
|
|
161
|
-
|
|
162
|
-
- OpenAPI 3.0.x (recommended)
|
|
163
|
-
- OpenAPI 3.1.x
|
|
164
|
-
- Swagger 2.0 (converted internally)
|
|
165
|
-
|
|
166
|
-
### Format Detection
|
|
167
|
-
|
|
168
|
-
```vague
|
|
169
|
-
// YAML
|
|
170
|
-
source API from "./spec.yaml"
|
|
171
|
-
|
|
172
|
-
// JSON
|
|
173
|
-
source API from "./spec.json"
|
|
174
|
-
|
|
175
|
-
// Remote
|
|
176
|
-
source API from "https://api.example.com/openapi.json"
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
## Common Patterns
|
|
180
|
-
|
|
181
|
-
### Fetch with Pagination
|
|
182
|
-
|
|
183
|
-
```vague
|
|
184
|
-
call API.listItems {
|
|
185
|
-
params: { limit: 100 },
|
|
186
|
-
paginate: cursor(cursor, 100, "nextCursor"),
|
|
187
|
-
until: response.nextCursor == null
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Conditional Operations
|
|
192
|
-
|
|
193
|
-
```vague
|
|
194
|
-
action SyncItem {
|
|
195
|
-
call API.getItem { params: { id: itemId } }
|
|
196
|
-
|
|
197
|
-
match response {
|
|
198
|
-
{ exists: false } -> {
|
|
199
|
-
call API.createItem { body: itemData }
|
|
200
|
-
},
|
|
201
|
-
_ -> {
|
|
202
|
-
call API.updateItem { params: { id: itemId }, body: itemData }
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
## Next Steps
|
|
209
|
-
|
|
210
|
-
- [Loading Specs](./loading-specs) - Loading and caching specs
|
|
211
|
-
- [Operation Calls](./operation-calls) - Calling operations
|
|
212
|
-
- [Response Validation](./response-validation) - Validating responses
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 4
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Response Validation
|
|
6
|
-
|
|
7
|
-
Reqon can validate API responses against OpenAPI schema definitions.
|
|
8
|
-
|
|
9
|
-
## Enabling Validation
|
|
10
|
-
|
|
11
|
-
```vague
|
|
12
|
-
source API from "./spec.yaml" {
|
|
13
|
-
auth: bearer,
|
|
14
|
-
validateResponses: true
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## How It Works
|
|
19
|
-
|
|
20
|
-
### Schema Matching
|
|
21
|
-
|
|
22
|
-
OpenAPI spec:
|
|
23
|
-
```yaml
|
|
24
|
-
paths:
|
|
25
|
-
/pets/{petId}:
|
|
26
|
-
get:
|
|
27
|
-
operationId: getPetById
|
|
28
|
-
responses:
|
|
29
|
-
'200':
|
|
30
|
-
content:
|
|
31
|
-
application/json:
|
|
32
|
-
schema:
|
|
33
|
-
$ref: '#/components/schemas/Pet'
|
|
34
|
-
|
|
35
|
-
components:
|
|
36
|
-
schemas:
|
|
37
|
-
Pet:
|
|
38
|
-
type: object
|
|
39
|
-
required:
|
|
40
|
-
- id
|
|
41
|
-
- name
|
|
42
|
-
properties:
|
|
43
|
-
id:
|
|
44
|
-
type: string
|
|
45
|
-
name:
|
|
46
|
-
type: string
|
|
47
|
-
tag:
|
|
48
|
-
type: string
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Reqon validates:
|
|
52
|
-
```vague
|
|
53
|
-
call API.getPetById { params: { petId: "123" } }
|
|
54
|
-
// Validates response against Pet schema
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Validation Modes
|
|
58
|
-
|
|
59
|
-
### Strict Mode
|
|
60
|
-
|
|
61
|
-
Fails on schema mismatch:
|
|
62
|
-
|
|
63
|
-
```vague
|
|
64
|
-
source API from "./spec.yaml" {
|
|
65
|
-
validateResponses: true,
|
|
66
|
-
validationMode: "strict"
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Warning Mode
|
|
71
|
-
|
|
72
|
-
Logs warning but continues:
|
|
73
|
-
|
|
74
|
-
```vague
|
|
75
|
-
source API from "./spec.yaml" {
|
|
76
|
-
validateResponses: true,
|
|
77
|
-
validationMode: "warn"
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### Off
|
|
82
|
-
|
|
83
|
-
No validation (default):
|
|
84
|
-
|
|
85
|
-
```vague
|
|
86
|
-
source API from "./spec.yaml" {
|
|
87
|
-
validateResponses: false
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Validation Rules
|
|
92
|
-
|
|
93
|
-
### Required Fields
|
|
94
|
-
|
|
95
|
-
```yaml
|
|
96
|
-
Pet:
|
|
97
|
-
required:
|
|
98
|
-
- id
|
|
99
|
-
- name
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Response missing `name` triggers error:
|
|
103
|
-
```json
|
|
104
|
-
{ "id": "123" } // Error: missing required field 'name'
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Type Checking
|
|
108
|
-
|
|
109
|
-
```yaml
|
|
110
|
-
Pet:
|
|
111
|
-
properties:
|
|
112
|
-
id:
|
|
113
|
-
type: string
|
|
114
|
-
age:
|
|
115
|
-
type: integer
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
```json
|
|
119
|
-
{ "id": 123, "age": "five" }
|
|
120
|
-
// Errors: id should be string, age should be integer
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Enum Validation
|
|
124
|
-
|
|
125
|
-
```yaml
|
|
126
|
-
Pet:
|
|
127
|
-
properties:
|
|
128
|
-
status:
|
|
129
|
-
type: string
|
|
130
|
-
enum: [available, pending, sold]
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
```json
|
|
134
|
-
{ "status": "active" } // Error: status not in enum
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Array Validation
|
|
138
|
-
|
|
139
|
-
```yaml
|
|
140
|
-
Pets:
|
|
141
|
-
type: array
|
|
142
|
-
items:
|
|
143
|
-
$ref: '#/components/schemas/Pet'
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Each item in array is validated.
|
|
147
|
-
|
|
148
|
-
## Error Handling
|
|
149
|
-
|
|
150
|
-
### With Validation Errors
|
|
151
|
-
|
|
152
|
-
```vague
|
|
153
|
-
call API.getPet { params: { id: "123" } }
|
|
154
|
-
|
|
155
|
-
match response {
|
|
156
|
-
{ validationErrors: errors } -> {
|
|
157
|
-
store {
|
|
158
|
-
operation: "getPet",
|
|
159
|
-
errors: errors
|
|
160
|
-
} -> validationFailures
|
|
161
|
-
skip
|
|
162
|
-
},
|
|
163
|
-
_ -> store response -> pets { key: .id }
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Catching Specific Errors
|
|
168
|
-
|
|
169
|
-
```vague
|
|
170
|
-
match response {
|
|
171
|
-
{ validationErrors: e } where includes(e, "missing required") -> {
|
|
172
|
-
// Handle missing fields
|
|
173
|
-
abort "Incomplete data from API"
|
|
174
|
-
},
|
|
175
|
-
{ validationErrors: e } where includes(e, "type mismatch") -> {
|
|
176
|
-
// Handle type issues
|
|
177
|
-
store response -> typeIssues { key: response.id }
|
|
178
|
-
skip
|
|
179
|
-
},
|
|
180
|
-
_ -> continue
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
## Custom Validation
|
|
185
|
-
|
|
186
|
-
### Additional Constraints
|
|
187
|
-
|
|
188
|
-
Beyond schema validation:
|
|
189
|
-
|
|
190
|
-
```vague
|
|
191
|
-
call API.getOrder { params: { id: orderId } }
|
|
192
|
-
|
|
193
|
-
// Schema validation happens automatically
|
|
194
|
-
|
|
195
|
-
// Additional business validation
|
|
196
|
-
validate response {
|
|
197
|
-
assume .total >= 0,
|
|
198
|
-
assume .items is array,
|
|
199
|
-
assume length(.items) > 0,
|
|
200
|
-
assume .status != "invalid"
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
store response -> orders { key: .id }
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Combining Validations
|
|
207
|
-
|
|
208
|
-
```vague
|
|
209
|
-
action ValidatedFetch {
|
|
210
|
-
call API.listItems
|
|
211
|
-
|
|
212
|
-
for item in response.items {
|
|
213
|
-
// Schema already validated by OAS
|
|
214
|
-
|
|
215
|
-
// Additional validation
|
|
216
|
-
validate item {
|
|
217
|
-
assume .price > 0,
|
|
218
|
-
assume .quantity >= 0
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
match item {
|
|
222
|
-
_ where .validationErrors != null -> {
|
|
223
|
-
queue invalid { item: item }
|
|
224
|
-
skip
|
|
225
|
-
},
|
|
226
|
-
_ -> store item -> items { key: .id }
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## Schema References
|
|
233
|
-
|
|
234
|
-
### Component Schemas
|
|
235
|
-
|
|
236
|
-
```yaml
|
|
237
|
-
components:
|
|
238
|
-
schemas:
|
|
239
|
-
Pet:
|
|
240
|
-
type: object
|
|
241
|
-
properties:
|
|
242
|
-
id: { type: string }
|
|
243
|
-
owner:
|
|
244
|
-
$ref: '#/components/schemas/Owner'
|
|
245
|
-
Owner:
|
|
246
|
-
type: object
|
|
247
|
-
properties:
|
|
248
|
-
name: { type: string }
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Nested schemas are validated:
|
|
252
|
-
|
|
253
|
-
```json
|
|
254
|
-
{
|
|
255
|
-
"id": "123",
|
|
256
|
-
"owner": {
|
|
257
|
-
"name": 123 // Error: name should be string
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
### OneOf/AnyOf
|
|
263
|
-
|
|
264
|
-
```yaml
|
|
265
|
-
Response:
|
|
266
|
-
oneOf:
|
|
267
|
-
- $ref: '#/components/schemas/Success'
|
|
268
|
-
- $ref: '#/components/schemas/Error'
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
Validates against matching schema.
|
|
272
|
-
|
|
273
|
-
## Best Practices
|
|
274
|
-
|
|
275
|
-
### Use Validation in Development
|
|
276
|
-
|
|
277
|
-
```vague
|
|
278
|
-
source API from "./spec.yaml" {
|
|
279
|
-
validateResponses: env("NODE_ENV") != "production"
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### Log Validation Failures
|
|
284
|
-
|
|
285
|
-
```vague
|
|
286
|
-
match response {
|
|
287
|
-
{ validationErrors: e } -> {
|
|
288
|
-
store {
|
|
289
|
-
timestamp: now(),
|
|
290
|
-
operation: currentOperation,
|
|
291
|
-
errors: e,
|
|
292
|
-
response: response
|
|
293
|
-
} -> validationLog
|
|
294
|
-
},
|
|
295
|
-
_ -> continue
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Keep Specs Updated
|
|
300
|
-
|
|
301
|
-
Ensure spec matches actual API:
|
|
302
|
-
- Run validation in CI/CD
|
|
303
|
-
- Update spec when API changes
|
|
304
|
-
- Use spec versioning
|
|
305
|
-
|
|
306
|
-
### Handle Gracefully
|
|
307
|
-
|
|
308
|
-
```vague
|
|
309
|
-
// Don't fail hard on validation
|
|
310
|
-
source API from "./spec.yaml" {
|
|
311
|
-
validateResponses: true,
|
|
312
|
-
validationMode: "warn"
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Handle in code
|
|
316
|
-
match response {
|
|
317
|
-
{ validationErrors: _ } -> {
|
|
318
|
-
// Log and continue with caution
|
|
319
|
-
},
|
|
320
|
-
_ -> continue
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
## Troubleshooting
|
|
325
|
-
|
|
326
|
-
### "Schema not found"
|
|
327
|
-
|
|
328
|
-
Check component name matches:
|
|
329
|
-
|
|
330
|
-
```yaml
|
|
331
|
-
$ref: '#/components/schemas/Pet' # Case sensitive
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### False Positives
|
|
335
|
-
|
|
336
|
-
Schema may be outdated:
|
|
337
|
-
- Update spec from API provider
|
|
338
|
-
- Check for API version changes
|
|
339
|
-
|
|
340
|
-
### Performance
|
|
341
|
-
|
|
342
|
-
Validation adds overhead:
|
|
343
|
-
- Disable in production if not needed
|
|
344
|
-
- Use sampling for high-volume APIs
|