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,353 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 5
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Schemas
|
|
6
|
-
|
|
7
|
-
**Schemas** define data shapes for validation and pattern matching. They're used to validate responses, route data based on structure, and document expected data formats.
|
|
8
|
-
|
|
9
|
-
## Basic Syntax
|
|
10
|
-
|
|
11
|
-
```vague
|
|
12
|
-
schema SchemaName {
|
|
13
|
-
field: type,
|
|
14
|
-
optionalField: type?,
|
|
15
|
-
nestedField: {
|
|
16
|
-
subField: type
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Field Types
|
|
22
|
-
|
|
23
|
-
| Type | Description | Example |
|
|
24
|
-
|------|-------------|---------|
|
|
25
|
-
| `string` | Text value | `"hello"` |
|
|
26
|
-
| `number` | Numeric value | `42`, `3.14` |
|
|
27
|
-
| `boolean` | True or false | `true`, `false` |
|
|
28
|
-
| `date` | Date/datetime | `"2024-01-20"` |
|
|
29
|
-
| `array` | Array of values | `[1, 2, 3]` |
|
|
30
|
-
| `object` | Nested object | `{ a: 1 }` |
|
|
31
|
-
| `any` | Any type | anything |
|
|
32
|
-
| `null` | Null value | `null` |
|
|
33
|
-
|
|
34
|
-
## Optional Fields
|
|
35
|
-
|
|
36
|
-
Use `?` suffix for optional fields:
|
|
37
|
-
|
|
38
|
-
```vague
|
|
39
|
-
schema User {
|
|
40
|
-
id: string,
|
|
41
|
-
name: string,
|
|
42
|
-
email: string?,
|
|
43
|
-
phone: string?
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Typed Arrays
|
|
48
|
-
|
|
49
|
-
Specify array element types:
|
|
50
|
-
|
|
51
|
-
```vague
|
|
52
|
-
schema UserList {
|
|
53
|
-
users: array<User>,
|
|
54
|
-
total: number
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
schema Order {
|
|
58
|
-
id: string,
|
|
59
|
-
items: array<{
|
|
60
|
-
productId: string,
|
|
61
|
-
quantity: number,
|
|
62
|
-
price: number
|
|
63
|
-
}>
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Nested Schemas
|
|
68
|
-
|
|
69
|
-
Define complex nested structures:
|
|
70
|
-
|
|
71
|
-
```vague
|
|
72
|
-
schema Invoice {
|
|
73
|
-
id: string,
|
|
74
|
-
customer: {
|
|
75
|
-
id: string,
|
|
76
|
-
name: string,
|
|
77
|
-
address: {
|
|
78
|
-
street: string,
|
|
79
|
-
city: string,
|
|
80
|
-
country: string
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
lineItems: array<{
|
|
84
|
-
description: string,
|
|
85
|
-
amount: number
|
|
86
|
-
}>,
|
|
87
|
-
total: number
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Schema References
|
|
92
|
-
|
|
93
|
-
Reference other schemas:
|
|
94
|
-
|
|
95
|
-
```vague
|
|
96
|
-
schema Address {
|
|
97
|
-
street: string,
|
|
98
|
-
city: string,
|
|
99
|
-
postalCode: string,
|
|
100
|
-
country: string
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
schema Customer {
|
|
104
|
-
id: string,
|
|
105
|
-
name: string,
|
|
106
|
-
billingAddress: Address,
|
|
107
|
-
shippingAddress: Address?
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## Using Schemas for Validation
|
|
112
|
-
|
|
113
|
-
Validate data against schemas:
|
|
114
|
-
|
|
115
|
-
```vague
|
|
116
|
-
action ValidateResponse {
|
|
117
|
-
get "/users"
|
|
118
|
-
|
|
119
|
-
for user in response.users {
|
|
120
|
-
validate user {
|
|
121
|
-
assume .id is string,
|
|
122
|
-
assume .name is string,
|
|
123
|
-
assume .email is string
|
|
124
|
-
}
|
|
125
|
-
store user -> validUsers { key: .id }
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
## Using Schemas for Pattern Matching
|
|
131
|
-
|
|
132
|
-
Route data based on schema matches:
|
|
133
|
-
|
|
134
|
-
```vague
|
|
135
|
-
schema SuccessResponse {
|
|
136
|
-
data: any,
|
|
137
|
-
status: string
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
schema ErrorResponse {
|
|
141
|
-
error: string,
|
|
142
|
-
code: number
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
schema RateLimitResponse {
|
|
146
|
-
error: string,
|
|
147
|
-
retryAfter: number
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
action HandleResponse {
|
|
151
|
-
get "/data"
|
|
152
|
-
|
|
153
|
-
match response {
|
|
154
|
-
SuccessResponse -> store response.data -> data { key: .id },
|
|
155
|
-
RateLimitResponse -> retry { delay: response.retryAfter * 1000 },
|
|
156
|
-
ErrorResponse -> abort response.error,
|
|
157
|
-
_ -> abort "Unknown response format"
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Schema Matching Rules
|
|
163
|
-
|
|
164
|
-
Schemas match when:
|
|
165
|
-
1. All required fields are present
|
|
166
|
-
2. Field types match
|
|
167
|
-
3. Optional fields, if present, match their types
|
|
168
|
-
|
|
169
|
-
```vague
|
|
170
|
-
schema StrictUser {
|
|
171
|
-
id: string, // Required
|
|
172
|
-
name: string, // Required
|
|
173
|
-
email: string? // Optional
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Matches: { id: "1", name: "John" }
|
|
177
|
-
// Matches: { id: "1", name: "John", email: "john@example.com" }
|
|
178
|
-
// Does NOT match: { id: 1, name: "John" } // id is number, not string
|
|
179
|
-
// Does NOT match: { id: "1" } // missing name
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## Type Checking with `is`
|
|
183
|
-
|
|
184
|
-
Use `is` for inline type checking:
|
|
185
|
-
|
|
186
|
-
```vague
|
|
187
|
-
validate response {
|
|
188
|
-
assume .items is array,
|
|
189
|
-
assume .count is number,
|
|
190
|
-
assume .status is string
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
## Combining Schemas
|
|
195
|
-
|
|
196
|
-
Use schemas in complex match patterns:
|
|
197
|
-
|
|
198
|
-
```vague
|
|
199
|
-
schema PaginatedResponse {
|
|
200
|
-
data: array,
|
|
201
|
-
meta: {
|
|
202
|
-
page: number,
|
|
203
|
-
totalPages: number,
|
|
204
|
-
hasNext: boolean
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
schema EmptyResponse {
|
|
209
|
-
data: array,
|
|
210
|
-
meta: {
|
|
211
|
-
total: number
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
action FetchPaginated {
|
|
216
|
-
get "/items" { paginate: page(page, 100) }
|
|
217
|
-
|
|
218
|
-
match response {
|
|
219
|
-
PaginatedResponse where response.meta.hasNext == true -> continue,
|
|
220
|
-
PaginatedResponse -> store response.data -> items { key: .id },
|
|
221
|
-
EmptyResponse -> skip,
|
|
222
|
-
_ -> abort "Unexpected response"
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## Schema Inheritance (via Vague)
|
|
228
|
-
|
|
229
|
-
Extend schemas using Vague's composition:
|
|
230
|
-
|
|
231
|
-
```vague
|
|
232
|
-
schema BaseEntity {
|
|
233
|
-
id: string,
|
|
234
|
-
createdAt: date,
|
|
235
|
-
updatedAt: date
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
schema User {
|
|
239
|
-
...BaseEntity,
|
|
240
|
-
name: string,
|
|
241
|
-
email: string
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
schema Order {
|
|
245
|
-
...BaseEntity,
|
|
246
|
-
customerId: string,
|
|
247
|
-
total: number
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
For advanced schema features, see the [Vague documentation](https://github.com/mcclowes/vague).
|
|
252
|
-
|
|
253
|
-
## Best Practices
|
|
254
|
-
|
|
255
|
-
### Define Schemas for API Responses
|
|
256
|
-
|
|
257
|
-
```vague
|
|
258
|
-
mission APISync {
|
|
259
|
-
schema UserResponse {
|
|
260
|
-
users: array<User>,
|
|
261
|
-
pagination: {
|
|
262
|
-
page: number,
|
|
263
|
-
total: number
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
schema User {
|
|
268
|
-
id: string,
|
|
269
|
-
name: string,
|
|
270
|
-
email: string
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Use Schemas for Error Handling
|
|
276
|
-
|
|
277
|
-
```vague
|
|
278
|
-
schema APIError {
|
|
279
|
-
error: {
|
|
280
|
-
message: string,
|
|
281
|
-
code: string
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
schema AuthError {
|
|
286
|
-
error: {
|
|
287
|
-
message: string,
|
|
288
|
-
code: string
|
|
289
|
-
},
|
|
290
|
-
code: number // HTTP status code
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
action Fetch {
|
|
294
|
-
get "/data"
|
|
295
|
-
|
|
296
|
-
match response {
|
|
297
|
-
AuthError where .code == 401 -> jump RefreshToken then retry,
|
|
298
|
-
APIError -> abort response.error.message,
|
|
299
|
-
_ -> continue
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### Document Expected Formats
|
|
305
|
-
|
|
306
|
-
Schemas serve as documentation:
|
|
307
|
-
|
|
308
|
-
```vague
|
|
309
|
-
// XeroInvoice represents an invoice from Xero API
|
|
310
|
-
schema XeroInvoice {
|
|
311
|
-
InvoiceID: string,
|
|
312
|
-
InvoiceNumber: string,
|
|
313
|
-
Type: string, // ACCREC or ACCPAY
|
|
314
|
-
Contact: {
|
|
315
|
-
ContactID: string,
|
|
316
|
-
Name: string
|
|
317
|
-
},
|
|
318
|
-
LineItems: array<{
|
|
319
|
-
Description: string,
|
|
320
|
-
Quantity: number,
|
|
321
|
-
UnitAmount: number,
|
|
322
|
-
LineAmount: number
|
|
323
|
-
}>,
|
|
324
|
-
Total: number,
|
|
325
|
-
Status: string // DRAFT, SUBMITTED, AUTHORISED, PAID
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Keep Schemas Close to Usage
|
|
330
|
-
|
|
331
|
-
Define schemas in the same mission where they're used:
|
|
332
|
-
|
|
333
|
-
```vague
|
|
334
|
-
mission XeroSync {
|
|
335
|
-
// Schema definitions at the top
|
|
336
|
-
schema XeroInvoice { /* ... */ }
|
|
337
|
-
schema XeroContact { /* ... */ }
|
|
338
|
-
|
|
339
|
-
// Then sources, stores, actions...
|
|
340
|
-
}
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
Or use multi-file missions to organize:
|
|
344
|
-
|
|
345
|
-
```
|
|
346
|
-
missions/xero-sync/
|
|
347
|
-
├── mission.vague
|
|
348
|
-
├── schemas/
|
|
349
|
-
│ ├── invoice.vague
|
|
350
|
-
│ └── contact.vague
|
|
351
|
-
└── actions/
|
|
352
|
-
└── fetch.vague
|
|
353
|
-
```
|
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 3
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Sources
|
|
6
|
-
|
|
7
|
-
A **Source** defines an API endpoint that your mission connects to. Sources configure authentication, base URLs, rate limiting, and other HTTP client options.
|
|
8
|
-
|
|
9
|
-
## Basic Syntax
|
|
10
|
-
|
|
11
|
-
```vague
|
|
12
|
-
source SourceName {
|
|
13
|
-
auth: authType,
|
|
14
|
-
base: "https://api.example.com"
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Authentication Types
|
|
19
|
-
|
|
20
|
-
| Type | Description |
|
|
21
|
-
|------|-------------|
|
|
22
|
-
| `none` | No authentication |
|
|
23
|
-
| `bearer` | Bearer token in Authorization header |
|
|
24
|
-
| `basic` | HTTP Basic authentication |
|
|
25
|
-
| `api_key` | API key in header or query |
|
|
26
|
-
| `oauth2` | OAuth 2.0 with token refresh |
|
|
27
|
-
|
|
28
|
-
### No Authentication
|
|
29
|
-
|
|
30
|
-
```vague
|
|
31
|
-
source PublicAPI {
|
|
32
|
-
auth: none,
|
|
33
|
-
base: "https://jsonplaceholder.typicode.com"
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### Bearer Token
|
|
38
|
-
|
|
39
|
-
```vague
|
|
40
|
-
source GitHub {
|
|
41
|
-
auth: bearer,
|
|
42
|
-
base: "https://api.github.com"
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Credentials are provided via CLI or config:
|
|
47
|
-
|
|
48
|
-
```json
|
|
49
|
-
{
|
|
50
|
-
"GitHub": {
|
|
51
|
-
"type": "bearer",
|
|
52
|
-
"token": "ghp_xxxxxxxxxxxx"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### API Key
|
|
58
|
-
|
|
59
|
-
```vague
|
|
60
|
-
source StripeAPI {
|
|
61
|
-
auth: api_key,
|
|
62
|
-
base: "https://api.stripe.com/v1"
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
{
|
|
68
|
-
"StripeAPI": {
|
|
69
|
-
"type": "api_key",
|
|
70
|
-
"key": "sk_live_xxxx",
|
|
71
|
-
"header": "Authorization",
|
|
72
|
-
"prefix": "Bearer"
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Or in query parameter:
|
|
78
|
-
|
|
79
|
-
```json
|
|
80
|
-
{
|
|
81
|
-
"StripeAPI": {
|
|
82
|
-
"type": "api_key",
|
|
83
|
-
"key": "sk_live_xxxx",
|
|
84
|
-
"query": "api_key"
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Basic Authentication
|
|
90
|
-
|
|
91
|
-
```vague
|
|
92
|
-
source LegacyAPI {
|
|
93
|
-
auth: basic,
|
|
94
|
-
base: "https://legacy.example.com"
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
```json
|
|
99
|
-
{
|
|
100
|
-
"LegacyAPI": {
|
|
101
|
-
"type": "basic",
|
|
102
|
-
"username": "user",
|
|
103
|
-
"password": "pass"
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### OAuth 2.0
|
|
109
|
-
|
|
110
|
-
```vague
|
|
111
|
-
source Xero {
|
|
112
|
-
auth: oauth2,
|
|
113
|
-
base: "https://api.xero.com/api.xro/2.0"
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
```json
|
|
118
|
-
{
|
|
119
|
-
"Xero": {
|
|
120
|
-
"type": "oauth2",
|
|
121
|
-
"clientId": "your-client-id",
|
|
122
|
-
"clientSecret": "your-client-secret",
|
|
123
|
-
"accessToken": "current-access-token",
|
|
124
|
-
"refreshToken": "current-refresh-token",
|
|
125
|
-
"tokenUrl": "https://identity.xero.com/connect/token",
|
|
126
|
-
"scopes": ["accounting.transactions.read"]
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Reqon automatically refreshes tokens when they expire.
|
|
132
|
-
|
|
133
|
-
## OpenAPI Spec Sources
|
|
134
|
-
|
|
135
|
-
Load source configuration from an OpenAPI specification:
|
|
136
|
-
|
|
137
|
-
```vague
|
|
138
|
-
source Petstore from "./petstore.yaml" {
|
|
139
|
-
auth: bearer,
|
|
140
|
-
validateResponses: true
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
Benefits:
|
|
145
|
-
- Base URL extracted from spec
|
|
146
|
-
- Operations available via `call` syntax
|
|
147
|
-
- Response validation against schemas
|
|
148
|
-
|
|
149
|
-
See [OpenAPI Integration](../category/openapi-integration) for details.
|
|
150
|
-
|
|
151
|
-
## Source Options
|
|
152
|
-
|
|
153
|
-
### Custom Headers
|
|
154
|
-
|
|
155
|
-
```vague
|
|
156
|
-
source CustomAPI {
|
|
157
|
-
auth: bearer,
|
|
158
|
-
base: "https://api.example.com",
|
|
159
|
-
headers: {
|
|
160
|
-
"X-Custom-Header": "value",
|
|
161
|
-
"Accept": "application/json"
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Rate Limiting
|
|
167
|
-
|
|
168
|
-
```vague
|
|
169
|
-
source RateLimitedAPI {
|
|
170
|
-
auth: bearer,
|
|
171
|
-
base: "https://api.example.com",
|
|
172
|
-
rateLimit: {
|
|
173
|
-
requestsPerMinute: 60,
|
|
174
|
-
strategy: "pause"
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Strategies:
|
|
180
|
-
- `pause` - Wait when limit reached
|
|
181
|
-
- `throttle` - Slow down requests
|
|
182
|
-
- `fail` - Throw error when limit reached
|
|
183
|
-
|
|
184
|
-
### Circuit Breaker
|
|
185
|
-
|
|
186
|
-
Prevent cascading failures:
|
|
187
|
-
|
|
188
|
-
```vague
|
|
189
|
-
source UnreliableAPI {
|
|
190
|
-
auth: bearer,
|
|
191
|
-
base: "https://flaky-api.example.com",
|
|
192
|
-
circuitBreaker: {
|
|
193
|
-
failureThreshold: 5,
|
|
194
|
-
resetTimeout: 30000,
|
|
195
|
-
successThreshold: 2
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
See [Circuit Breaker](../http/circuit-breaker) for details.
|
|
201
|
-
|
|
202
|
-
### Timeout
|
|
203
|
-
|
|
204
|
-
```vague
|
|
205
|
-
source SlowAPI {
|
|
206
|
-
auth: bearer,
|
|
207
|
-
base: "https://slow-api.example.com",
|
|
208
|
-
timeout: 60000
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Using Sources
|
|
213
|
-
|
|
214
|
-
Sources are automatically selected when making requests:
|
|
215
|
-
|
|
216
|
-
```vague
|
|
217
|
-
mission MultiSource {
|
|
218
|
-
source Primary { auth: bearer, base: "https://primary.example.com" }
|
|
219
|
-
source Secondary { auth: bearer, base: "https://secondary.example.com" }
|
|
220
|
-
|
|
221
|
-
action FetchFromPrimary {
|
|
222
|
-
// Uses first source by default
|
|
223
|
-
get "/data"
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
action FetchFromSecondary {
|
|
227
|
-
// Explicitly use secondary source
|
|
228
|
-
get Secondary "/data"
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Default Source
|
|
234
|
-
|
|
235
|
-
The first defined source is the default:
|
|
236
|
-
|
|
237
|
-
```vague
|
|
238
|
-
mission Example {
|
|
239
|
-
source API { auth: bearer, base: "https://api.example.com" }
|
|
240
|
-
|
|
241
|
-
action Fetch {
|
|
242
|
-
get "/users" // Uses API source
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Named Source Reference
|
|
248
|
-
|
|
249
|
-
Prefix requests with source name:
|
|
250
|
-
|
|
251
|
-
```vague
|
|
252
|
-
action FetchFromMultiple {
|
|
253
|
-
get Primary "/users"
|
|
254
|
-
get Secondary "/users"
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
## Source Variables
|
|
259
|
-
|
|
260
|
-
Use environment variables in source definitions:
|
|
261
|
-
|
|
262
|
-
```vague
|
|
263
|
-
source API {
|
|
264
|
-
auth: bearer,
|
|
265
|
-
base: env("API_BASE_URL")
|
|
266
|
-
}
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
## Multiple Environments
|
|
270
|
-
|
|
271
|
-
Pattern for handling different environments:
|
|
272
|
-
|
|
273
|
-
```vague
|
|
274
|
-
mission Sync {
|
|
275
|
-
source API {
|
|
276
|
-
auth: bearer,
|
|
277
|
-
base: match env("ENVIRONMENT") {
|
|
278
|
-
"production" => "https://api.example.com",
|
|
279
|
-
"staging" => "https://staging.api.example.com",
|
|
280
|
-
_ => "http://localhost:3000"
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
## Best Practices
|
|
287
|
-
|
|
288
|
-
### Use Descriptive Names
|
|
289
|
-
|
|
290
|
-
```vague
|
|
291
|
-
// Good
|
|
292
|
-
source XeroAccounting { }
|
|
293
|
-
source QuickBooksOnline { }
|
|
294
|
-
source StripePayments { }
|
|
295
|
-
|
|
296
|
-
// Avoid
|
|
297
|
-
source API1 { }
|
|
298
|
-
source Source { }
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
### Configure Appropriate Timeouts
|
|
302
|
-
|
|
303
|
-
```vague
|
|
304
|
-
// For fast APIs
|
|
305
|
-
source FastAPI {
|
|
306
|
-
timeout: 5000 // 5 seconds
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// For slow/bulk APIs
|
|
310
|
-
source BulkExportAPI {
|
|
311
|
-
timeout: 300000 // 5 minutes
|
|
312
|
-
}
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### Always Use Rate Limiting for Production
|
|
316
|
-
|
|
317
|
-
```vague
|
|
318
|
-
source ProductionAPI {
|
|
319
|
-
auth: bearer,
|
|
320
|
-
base: "https://api.example.com",
|
|
321
|
-
rateLimit: {
|
|
322
|
-
requestsPerMinute: 100,
|
|
323
|
-
strategy: "pause"
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Enable Circuit Breakers for Unreliable Sources
|
|
329
|
-
|
|
330
|
-
```vague
|
|
331
|
-
source ThirdPartyAPI {
|
|
332
|
-
auth: bearer,
|
|
333
|
-
base: "https://third-party.example.com",
|
|
334
|
-
circuitBreaker: {
|
|
335
|
-
failureThreshold: 5,
|
|
336
|
-
resetTimeout: 30000
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
```
|