reqon-dsl 0.2.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/.claude/settings.local.json +31 -0
- package/.claude/skills/api-integration.md +125 -0
- package/.claude/skills/database-schema.md +51 -0
- package/.claude/skills/dsl-design.md +80 -0
- package/.claude/skills/property-testing.md +143 -0
- package/.claude/skills/reqon/SKILL.md +44 -0
- package/.claude/skills/reqon/references/examples.md +206 -0
- package/.claude/skills/reqon/references/syntax.md +263 -0
- package/.claude/skills/vscode-extension.md +113 -0
- package/.github/dependabot.yml +32 -0
- package/.github/pull_request_template.md +21 -0
- package/.github/workflows/ci.yml +174 -0
- package/.github/workflows/release.yml +73 -0
- package/CLAUDE.md +72 -0
- package/CONTRIBUTING.md +161 -0
- package/README.md +235 -0
- package/TODO.md +51 -0
- package/dist/ast/index.d.ts +1 -0
- package/dist/ast/index.js +1 -0
- package/dist/ast/nodes.d.ts +237 -0
- package/dist/ast/nodes.js +12 -0
- package/dist/auth/auth.test.d.ts +1 -0
- package/dist/auth/auth.test.js +255 -0
- package/dist/auth/circuit-breaker.d.ts +115 -0
- package/dist/auth/circuit-breaker.js +267 -0
- package/dist/auth/credentials.d.ts +91 -0
- package/dist/auth/credentials.js +169 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/oauth2-provider.d.ts +41 -0
- package/dist/auth/oauth2-provider.js +131 -0
- package/dist/auth/rate-limiter.d.ts +61 -0
- package/dist/auth/rate-limiter.js +380 -0
- package/dist/auth/token-store.d.ts +30 -0
- package/dist/auth/token-store.js +148 -0
- package/dist/auth/types.d.ts +142 -0
- package/dist/auth/types.js +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +270 -0
- package/dist/errors/errors.test.d.ts +1 -0
- package/dist/errors/errors.test.js +165 -0
- package/dist/errors/index.d.ts +83 -0
- package/dist/errors/index.js +159 -0
- package/dist/execution/execution.test.d.ts +1 -0
- package/dist/execution/execution.test.js +246 -0
- package/dist/execution/index.d.ts +4 -0
- package/dist/execution/index.js +2 -0
- package/dist/execution/state.d.ts +136 -0
- package/dist/execution/state.js +82 -0
- package/dist/execution/store.d.ts +52 -0
- package/dist/execution/store.js +120 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +57 -0
- package/dist/integration.test.d.ts +1 -0
- package/dist/integration.test.js +168 -0
- package/dist/interpreter/context.d.ts +15 -0
- package/dist/interpreter/context.js +29 -0
- package/dist/interpreter/evaluator.d.ts +5 -0
- package/dist/interpreter/evaluator.js +223 -0
- package/dist/interpreter/evaluator.test.d.ts +1 -0
- package/dist/interpreter/evaluator.test.js +512 -0
- package/dist/interpreter/executor.d.ts +131 -0
- package/dist/interpreter/executor.js +663 -0
- package/dist/interpreter/fetch-handler.d.ts +43 -0
- package/dist/interpreter/fetch-handler.js +203 -0
- package/dist/interpreter/http.d.ts +57 -0
- package/dist/interpreter/http.js +210 -0
- package/dist/interpreter/http.test.d.ts +1 -0
- package/dist/interpreter/http.test.js +299 -0
- package/dist/interpreter/index.d.ts +7 -0
- package/dist/interpreter/index.js +7 -0
- package/dist/interpreter/pagination.d.ts +63 -0
- package/dist/interpreter/pagination.js +155 -0
- package/dist/interpreter/progress.test.d.ts +1 -0
- package/dist/interpreter/progress.test.js +216 -0
- package/dist/interpreter/schema-matcher.d.ts +16 -0
- package/dist/interpreter/schema-matcher.js +136 -0
- package/dist/interpreter/schema-matcher.test.d.ts +1 -0
- package/dist/interpreter/schema-matcher.test.js +122 -0
- package/dist/interpreter/signals.d.ts +57 -0
- package/dist/interpreter/signals.js +73 -0
- package/dist/interpreter/step-handlers/for-handler.d.ts +17 -0
- package/dist/interpreter/step-handlers/for-handler.js +51 -0
- package/dist/interpreter/step-handlers/index.d.ts +8 -0
- package/dist/interpreter/step-handlers/index.js +8 -0
- package/dist/interpreter/step-handlers/map-handler.d.ts +10 -0
- package/dist/interpreter/step-handlers/map-handler.js +20 -0
- package/dist/interpreter/step-handlers/match-handler.d.ts +27 -0
- package/dist/interpreter/step-handlers/match-handler.js +61 -0
- package/dist/interpreter/step-handlers/store-handler.d.ts +13 -0
- package/dist/interpreter/step-handlers/store-handler.js +66 -0
- package/dist/interpreter/step-handlers/types.d.ts +15 -0
- package/dist/interpreter/step-handlers/types.js +1 -0
- package/dist/interpreter/step-handlers/validate-handler.d.ts +10 -0
- package/dist/interpreter/step-handlers/validate-handler.js +26 -0
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +36 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +104 -0
- package/dist/lexer/index.d.ts +10 -0
- package/dist/lexer/index.js +12 -0
- package/dist/lexer/lexer.d.ts +24 -0
- package/dist/lexer/lexer.js +264 -0
- package/dist/lexer/lexer.test.d.ts +1 -0
- package/dist/lexer/lexer.test.js +259 -0
- package/dist/lexer/tokens.d.ts +69 -0
- package/dist/lexer/tokens.js +146 -0
- package/dist/loader/index.d.ts +36 -0
- package/dist/loader/index.js +220 -0
- package/dist/loader/loader.test.d.ts +1 -0
- package/dist/loader/loader.test.js +287 -0
- package/dist/oas/index.d.ts +4 -0
- package/dist/oas/index.js +2 -0
- package/dist/oas/loader.d.ts +21 -0
- package/dist/oas/loader.js +82 -0
- package/dist/oas/oas.test.d.ts +1 -0
- package/dist/oas/oas.test.js +218 -0
- package/dist/oas/validator.d.ts +12 -0
- package/dist/oas/validator.js +227 -0
- package/dist/parser/base.d.ts +33 -0
- package/dist/parser/base.js +97 -0
- package/dist/parser/expressions.d.ts +27 -0
- package/dist/parser/expressions.js +248 -0
- package/dist/parser/expressions.test.d.ts +1 -0
- package/dist/parser/expressions.test.js +378 -0
- package/dist/parser/index.d.ts +3 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/match.test.d.ts +1 -0
- package/dist/parser/match.test.js +254 -0
- package/dist/parser/parser.d.ts +68 -0
- package/dist/parser/parser.js +1229 -0
- package/dist/parser/parser.test.d.ts +1 -0
- package/dist/parser/parser.test.js +333 -0
- package/dist/parser/schedule.test.d.ts +1 -0
- package/dist/parser/schedule.test.js +241 -0
- package/dist/plugin.d.ts +35 -0
- package/dist/plugin.js +68 -0
- package/dist/scheduler/cron-parser.d.ts +32 -0
- package/dist/scheduler/cron-parser.js +198 -0
- package/dist/scheduler/cron-parser.test.d.ts +1 -0
- package/dist/scheduler/cron-parser.test.js +188 -0
- package/dist/scheduler/index.d.ts +3 -0
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/scheduler.d.ts +81 -0
- package/dist/scheduler/scheduler.js +376 -0
- package/dist/scheduler/types.d.ts +65 -0
- package/dist/scheduler/types.js +1 -0
- package/dist/stores/factory.d.ts +36 -0
- package/dist/stores/factory.js +73 -0
- package/dist/stores/file.d.ts +60 -0
- package/dist/stores/file.js +173 -0
- package/dist/stores/file.test.d.ts +1 -0
- package/dist/stores/file.test.js +165 -0
- package/dist/stores/index.d.ts +6 -0
- package/dist/stores/index.js +5 -0
- package/dist/stores/memory.d.ts +19 -0
- package/dist/stores/memory.js +51 -0
- package/dist/stores/memory.test.d.ts +1 -0
- package/dist/stores/memory.test.js +157 -0
- package/dist/stores/postgrest.d.ts +55 -0
- package/dist/stores/postgrest.js +217 -0
- package/dist/stores/stores.test.d.ts +1 -0
- package/dist/stores/stores.test.js +158 -0
- package/dist/stores/types.d.ts +31 -0
- package/dist/stores/types.js +26 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +2 -0
- package/dist/sync/state.d.ts +69 -0
- package/dist/sync/state.js +66 -0
- package/dist/sync/store.d.ts +49 -0
- package/dist/sync/store.js +93 -0
- package/dist/sync/sync.test.d.ts +1 -0
- package/dist/sync/sync.test.js +221 -0
- package/dist/utils/async.d.ts +7 -0
- package/dist/utils/async.js +9 -0
- package/dist/utils/file.d.ts +38 -0
- package/dist/utils/file.js +92 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/path.d.ts +12 -0
- package/dist/utils/path.js +41 -0
- package/dist/webhook/index.d.ts +8 -0
- package/dist/webhook/index.js +7 -0
- package/dist/webhook/server.d.ts +84 -0
- package/dist/webhook/server.js +319 -0
- package/dist/webhook/store.d.ts +67 -0
- package/dist/webhook/store.js +193 -0
- package/dist/webhook/types.d.ts +88 -0
- package/dist/webhook/types.js +6 -0
- package/docusaurus/README.md +41 -0
- package/docusaurus/docs/advanced/execution-state.md +283 -0
- package/docusaurus/docs/advanced/extending-reqon.md +388 -0
- package/docusaurus/docs/advanced/multi-file-missions.md +250 -0
- package/docusaurus/docs/advanced/parallel-execution.md +353 -0
- package/docusaurus/docs/api-reference.md +443 -0
- package/docusaurus/docs/authentication/api-key.md +339 -0
- package/docusaurus/docs/authentication/basic.md +276 -0
- package/docusaurus/docs/authentication/bearer.md +282 -0
- package/docusaurus/docs/authentication/oauth2.md +317 -0
- package/docusaurus/docs/authentication/overview.md +251 -0
- package/docusaurus/docs/cli.md +229 -0
- package/docusaurus/docs/core-concepts/actions.md +286 -0
- package/docusaurus/docs/core-concepts/missions.md +264 -0
- package/docusaurus/docs/core-concepts/schemas.md +353 -0
- package/docusaurus/docs/core-concepts/sources.md +339 -0
- package/docusaurus/docs/core-concepts/stores.md +332 -0
- package/docusaurus/docs/dsl-syntax/expressions.md +361 -0
- package/docusaurus/docs/dsl-syntax/fetch.md +293 -0
- package/docusaurus/docs/dsl-syntax/for-loops.md +324 -0
- package/docusaurus/docs/dsl-syntax/map.md +345 -0
- package/docusaurus/docs/dsl-syntax/match.md +387 -0
- package/docusaurus/docs/dsl-syntax/pipelines.md +397 -0
- package/docusaurus/docs/dsl-syntax/validate.md +401 -0
- package/docusaurus/docs/error-handling/dead-letter-queues.md +399 -0
- package/docusaurus/docs/error-handling/flow-control.md +337 -0
- package/docusaurus/docs/error-handling/retry-strategies.md +368 -0
- package/docusaurus/docs/examples.md +488 -0
- package/docusaurus/docs/getting-started.md +256 -0
- package/docusaurus/docs/http/circuit-breaker.md +401 -0
- package/docusaurus/docs/http/incremental-sync.md +394 -0
- package/docusaurus/docs/http/pagination.md +361 -0
- package/docusaurus/docs/http/rate-limiting.md +383 -0
- package/docusaurus/docs/http/requests.md +328 -0
- package/docusaurus/docs/http/retry.md +402 -0
- package/docusaurus/docs/intro.md +90 -0
- package/docusaurus/docs/openapi/loading-specs.md +305 -0
- package/docusaurus/docs/openapi/operation-calls.md +314 -0
- package/docusaurus/docs/openapi/overview.md +212 -0
- package/docusaurus/docs/openapi/response-validation.md +344 -0
- package/docusaurus/docs/scheduling/cron.md +305 -0
- package/docusaurus/docs/scheduling/daemon-mode.md +317 -0
- package/docusaurus/docs/scheduling/intervals.md +289 -0
- package/docusaurus/docs/scheduling/overview.md +231 -0
- package/docusaurus/docs/stores/custom-adapters.md +376 -0
- package/docusaurus/docs/stores/file.md +236 -0
- package/docusaurus/docs/stores/memory.md +193 -0
- package/docusaurus/docs/stores/overview.md +274 -0
- package/docusaurus/docs/stores/postgrest.md +316 -0
- package/docusaurus/docusaurus.config.ts +148 -0
- package/docusaurus/package-lock.json +18029 -0
- package/docusaurus/package.json +47 -0
- package/docusaurus/sidebars.ts +155 -0
- package/docusaurus/src/components/HomepageFeatures/index.tsx +105 -0
- package/docusaurus/src/components/HomepageFeatures/styles.module.css +12 -0
- package/docusaurus/src/css/custom.css +169 -0
- package/docusaurus/src/pages/index.module.css +48 -0
- package/docusaurus/src/pages/index.tsx +110 -0
- package/docusaurus/src/pages/markdown-page.md +7 -0
- 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 +10 -0
- package/docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
- package/docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
- package/docusaurus/tsconfig.json +8 -0
- package/examples/README.md +112 -0
- package/examples/error-handling/README.md +150 -0
- package/examples/error-handling/payment-processor.vague +287 -0
- package/examples/github-sync/README.md +74 -0
- package/examples/github-sync/fetch-issues.vague +47 -0
- package/examples/github-sync/fetch-prs.vague +40 -0
- package/examples/github-sync/mission.vague +101 -0
- package/examples/github-sync/normalize.vague +70 -0
- package/examples/jsonplaceholder/README.md +28 -0
- package/examples/jsonplaceholder/posts.vague +48 -0
- package/examples/petstore/README.md +35 -0
- package/examples/petstore/openapi.yaml +97 -0
- package/examples/petstore/sync.vague +52 -0
- package/examples/temporal-comparison/README.md +297 -0
- package/examples/temporal-comparison/reconciliation.vague +355 -0
- package/examples/temporal-comparison/temporal/activities/index.ts +8 -0
- package/examples/temporal-comparison/temporal/activities/shipstation.ts +225 -0
- package/examples/temporal-comparison/temporal/activities/shopify.ts +257 -0
- package/examples/temporal-comparison/temporal/activities/storage.ts +198 -0
- package/examples/temporal-comparison/temporal/activities/stripe.ts +169 -0
- package/examples/temporal-comparison/temporal/activities/validation.ts +205 -0
- package/examples/temporal-comparison/temporal/client/schedule.ts +218 -0
- package/examples/temporal-comparison/temporal/config/retry.ts +63 -0
- package/examples/temporal-comparison/temporal/types/index.ts +129 -0
- package/examples/temporal-comparison/temporal/workers/main.ts +130 -0
- package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +262 -0
- package/examples/xero/README.md +88 -0
- package/examples/xero/invoices.vague +189 -0
- package/package.json +40 -0
- package/src/api-integration.test.ts +954 -0
- package/src/ast/index.ts +1 -0
- package/src/ast/nodes.ts +310 -0
- package/src/auth/auth.test.ts +326 -0
- package/src/auth/circuit-breaker.test.ts +390 -0
- package/src/auth/circuit-breaker.ts +379 -0
- package/src/auth/credentials.test.ts +273 -0
- package/src/auth/credentials.ts +246 -0
- package/src/auth/index.ts +40 -0
- package/src/auth/oauth2-provider.ts +177 -0
- package/src/auth/rate-limiter.ts +459 -0
- package/src/auth/token-store.ts +177 -0
- package/src/auth/types.ts +159 -0
- package/src/benchmark/e2e.bench.ts +288 -0
- package/src/benchmark/evaluator.bench.ts +331 -0
- package/src/benchmark/fixtures.ts +295 -0
- package/src/benchmark/index.ts +108 -0
- package/src/benchmark/lexer.bench.ts +69 -0
- package/src/benchmark/parser.bench.ts +103 -0
- package/src/benchmark/resilience.bench.ts +193 -0
- package/src/benchmark/store.bench.ts +147 -0
- package/src/benchmark/utils.ts +230 -0
- package/src/cli.ts +313 -0
- package/src/errors/errors.test.ts +234 -0
- package/src/errors/index.ts +223 -0
- package/src/execution/execution.test.ts +307 -0
- package/src/execution/index.ts +21 -0
- package/src/execution/state.ts +207 -0
- package/src/execution/store.ts +188 -0
- package/src/index.ts +169 -0
- package/src/integration.test.ts +192 -0
- package/src/interpreter/context.ts +57 -0
- package/src/interpreter/evaluator.test.ts +796 -0
- package/src/interpreter/evaluator.ts +245 -0
- package/src/interpreter/executor.ts +946 -0
- package/src/interpreter/fetch-handler.ts +302 -0
- package/src/interpreter/http.test.ts +423 -0
- package/src/interpreter/http.ts +308 -0
- package/src/interpreter/index.ts +32 -0
- package/src/interpreter/pagination.ts +207 -0
- package/src/interpreter/progress.test.ts +276 -0
- package/src/interpreter/schema-matcher.test.ts +160 -0
- package/src/interpreter/schema-matcher.ts +168 -0
- package/src/interpreter/signals.ts +73 -0
- package/src/interpreter/step-handlers/for-handler.ts +65 -0
- package/src/interpreter/step-handlers/index.ts +17 -0
- package/src/interpreter/step-handlers/map-handler.ts +24 -0
- package/src/interpreter/step-handlers/match-handler.ts +101 -0
- package/src/interpreter/step-handlers/store-handler.ts +78 -0
- package/src/interpreter/step-handlers/types.ts +17 -0
- package/src/interpreter/step-handlers/validate-handler.ts +30 -0
- package/src/interpreter/step-handlers/webhook-handler.ts +142 -0
- package/src/lexer/index.ts +18 -0
- package/src/lexer/lexer.test.ts +316 -0
- package/src/lexer/tokens.ts +179 -0
- package/src/loader/index.ts +288 -0
- package/src/loader/loader.test.ts +360 -0
- package/src/oas/index.ts +4 -0
- package/src/oas/loader.ts +126 -0
- package/src/oas/oas.test.ts +254 -0
- package/src/oas/validator.ts +299 -0
- package/src/parser/base.ts +124 -0
- package/src/parser/expressions.test.ts +525 -0
- package/src/parser/expressions.ts +314 -0
- package/src/parser/index.ts +3 -0
- package/src/parser/match.test.ts +296 -0
- package/src/parser/parser.test.ts +739 -0
- package/src/parser/parser.ts +1469 -0
- package/src/parser/schedule.test.ts +287 -0
- package/src/parser/webhook.test.ts +248 -0
- package/src/plugin.ts +83 -0
- package/src/scheduler/cron-parser.test.ts +236 -0
- package/src/scheduler/cron-parser.ts +236 -0
- package/src/scheduler/index.ts +10 -0
- package/src/scheduler/scheduler.ts +443 -0
- package/src/scheduler/types.ts +71 -0
- package/src/stores/factory.ts +104 -0
- package/src/stores/file.test.ts +276 -0
- package/src/stores/file.ts +211 -0
- package/src/stores/index.ts +6 -0
- package/src/stores/memory.test.ts +238 -0
- package/src/stores/memory.ts +63 -0
- package/src/stores/postgrest.test.ts +488 -0
- package/src/stores/postgrest.ts +263 -0
- package/src/stores/stores.test.ts +197 -0
- package/src/stores/types.ts +58 -0
- package/src/sync/index.ts +16 -0
- package/src/sync/state.ts +126 -0
- package/src/sync/store.ts +139 -0
- package/src/sync/sync.test.ts +271 -0
- package/src/utils/async.ts +10 -0
- package/src/utils/file.ts +106 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/logger.ts +53 -0
- package/src/utils/path.ts +47 -0
- package/src/webhook/index.ts +15 -0
- package/src/webhook/server.test.ts +253 -0
- package/src/webhook/server.ts +389 -0
- package/src/webhook/store.ts +239 -0
- package/src/webhook/types.ts +93 -0
- package/tsconfig.json +17 -0
- package/vitest.config.ts +39 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 1
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Authentication Overview
|
|
6
|
+
|
|
7
|
+
Reqon supports multiple authentication methods for connecting to APIs. Authentication is configured at the source level and credentials are provided via CLI or configuration files.
|
|
8
|
+
|
|
9
|
+
## Supported Auth Types
|
|
10
|
+
|
|
11
|
+
| Type | Description | Use Case |
|
|
12
|
+
|------|-------------|----------|
|
|
13
|
+
| `none` | No authentication | Public APIs |
|
|
14
|
+
| `bearer` | Bearer token | Most REST APIs |
|
|
15
|
+
| `basic` | HTTP Basic Auth | Legacy systems |
|
|
16
|
+
| `api_key` | API key in header/query | Many SaaS APIs |
|
|
17
|
+
| `oauth2` | OAuth 2.0 with refresh | Enterprise APIs |
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
### In Mission File
|
|
22
|
+
|
|
23
|
+
```vague
|
|
24
|
+
source API {
|
|
25
|
+
auth: bearer,
|
|
26
|
+
base: "https://api.example.com"
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Credentials File
|
|
31
|
+
|
|
32
|
+
Create `credentials.json`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"API": {
|
|
37
|
+
"type": "bearer",
|
|
38
|
+
"token": "your-api-token"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Run with Credentials
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
reqon mission.vague --auth ./credentials.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Credential Sources
|
|
50
|
+
|
|
51
|
+
### File-Based
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
reqon mission.vague --auth ./credentials.json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Environment Variables
|
|
58
|
+
|
|
59
|
+
Reference in credentials:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"API": {
|
|
64
|
+
"type": "bearer",
|
|
65
|
+
"token": "${API_TOKEN}"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Or in mission file:
|
|
71
|
+
|
|
72
|
+
```vague
|
|
73
|
+
source API {
|
|
74
|
+
auth: bearer,
|
|
75
|
+
base: "https://api.example.com",
|
|
76
|
+
token: env("API_TOKEN")
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Programmatic
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { execute } from 'reqon';
|
|
84
|
+
|
|
85
|
+
await execute(source, {
|
|
86
|
+
auth: {
|
|
87
|
+
API: {
|
|
88
|
+
type: 'bearer',
|
|
89
|
+
token: process.env.API_TOKEN
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Multiple Sources
|
|
96
|
+
|
|
97
|
+
Handle multiple APIs with different auth:
|
|
98
|
+
|
|
99
|
+
```vague
|
|
100
|
+
mission MultiSource {
|
|
101
|
+
source Xero {
|
|
102
|
+
auth: oauth2,
|
|
103
|
+
base: "https://api.xero.com/api.xro/2.0"
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
source Stripe {
|
|
107
|
+
auth: bearer,
|
|
108
|
+
base: "https://api.stripe.com/v1"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
source Legacy {
|
|
112
|
+
auth: basic,
|
|
113
|
+
base: "https://legacy.example.com"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Credentials file:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"Xero": {
|
|
123
|
+
"type": "oauth2",
|
|
124
|
+
"clientId": "...",
|
|
125
|
+
"clientSecret": "...",
|
|
126
|
+
"accessToken": "...",
|
|
127
|
+
"refreshToken": "...",
|
|
128
|
+
"tokenUrl": "https://identity.xero.com/connect/token"
|
|
129
|
+
},
|
|
130
|
+
"Stripe": {
|
|
131
|
+
"type": "bearer",
|
|
132
|
+
"token": "sk_live_..."
|
|
133
|
+
},
|
|
134
|
+
"Legacy": {
|
|
135
|
+
"type": "basic",
|
|
136
|
+
"username": "admin",
|
|
137
|
+
"password": "secret"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Refreshing Tokens
|
|
143
|
+
|
|
144
|
+
### OAuth 2.0 Automatic Refresh
|
|
145
|
+
|
|
146
|
+
Reqon automatically refreshes OAuth2 tokens when they expire:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"Xero": {
|
|
151
|
+
"type": "oauth2",
|
|
152
|
+
"accessToken": "current-token",
|
|
153
|
+
"refreshToken": "refresh-token",
|
|
154
|
+
"tokenUrl": "https://identity.xero.com/connect/token",
|
|
155
|
+
"expiresAt": "2024-01-20T10:30:00Z"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Manual Refresh with Jump
|
|
161
|
+
|
|
162
|
+
For non-standard token refresh:
|
|
163
|
+
|
|
164
|
+
```vague
|
|
165
|
+
action FetchData {
|
|
166
|
+
get "/data"
|
|
167
|
+
|
|
168
|
+
match response {
|
|
169
|
+
{ error: _, code: 401 } -> jump RefreshToken then retry,
|
|
170
|
+
_ -> continue
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
action RefreshToken {
|
|
175
|
+
post "/auth/refresh" {
|
|
176
|
+
body: { refreshToken: env("REFRESH_TOKEN") }
|
|
177
|
+
}
|
|
178
|
+
// Response updates auth context
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Security Best Practices
|
|
183
|
+
|
|
184
|
+
### Never Commit Credentials
|
|
185
|
+
|
|
186
|
+
Add to `.gitignore`:
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
credentials.json
|
|
190
|
+
.env
|
|
191
|
+
*.pem
|
|
192
|
+
*.key
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Use Environment Variables
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
export API_TOKEN="your-token"
|
|
199
|
+
reqon mission.vague
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Rotate Tokens Regularly
|
|
203
|
+
|
|
204
|
+
For OAuth2, ensure refresh tokens are valid.
|
|
205
|
+
|
|
206
|
+
### Use Least Privilege
|
|
207
|
+
|
|
208
|
+
Request only necessary scopes:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"API": {
|
|
213
|
+
"type": "oauth2",
|
|
214
|
+
"scopes": ["read:users", "read:orders"]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Troubleshooting
|
|
220
|
+
|
|
221
|
+
### "Authentication Failed" Error
|
|
222
|
+
|
|
223
|
+
1. Check credentials file path
|
|
224
|
+
2. Verify token is valid
|
|
225
|
+
3. Check source name matches credentials
|
|
226
|
+
|
|
227
|
+
### Token Expired
|
|
228
|
+
|
|
229
|
+
For OAuth2, ensure:
|
|
230
|
+
- `refreshToken` is present
|
|
231
|
+
- `tokenUrl` is correct
|
|
232
|
+
- Token hasn't been revoked
|
|
233
|
+
|
|
234
|
+
### Wrong Auth Type
|
|
235
|
+
|
|
236
|
+
Match the type in credentials to mission:
|
|
237
|
+
|
|
238
|
+
```vague
|
|
239
|
+
// Mission says bearer
|
|
240
|
+
source API { auth: bearer, base: "..." }
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
// Credentials must also be bearer
|
|
245
|
+
{
|
|
246
|
+
"API": {
|
|
247
|
+
"type": "bearer", // Must match
|
|
248
|
+
"token": "..."
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
```
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 3
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Command Line Interface
|
|
6
|
+
|
|
7
|
+
Reqon provides a powerful CLI for running and managing missions.
|
|
8
|
+
|
|
9
|
+
## Basic Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
reqon <file-or-folder> [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Run a single mission file:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
reqon sync-customers.vague
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Run a mission folder (multi-file mission):
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
reqon ./missions/customer-sync/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Options
|
|
28
|
+
|
|
29
|
+
| Option | Description |
|
|
30
|
+
|--------|-------------|
|
|
31
|
+
| `--dry-run` | Parse and validate without executing HTTP requests |
|
|
32
|
+
| `--verbose` | Enable detailed logging output |
|
|
33
|
+
| `--auth <file>` | Path to JSON file containing authentication credentials |
|
|
34
|
+
| `--output <path>` | Export store contents to JSON files after execution |
|
|
35
|
+
| `--daemon` | Run scheduled missions continuously |
|
|
36
|
+
| `--once` | Run scheduled missions once, then exit |
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
### Dry Run Mode
|
|
41
|
+
|
|
42
|
+
Validate your mission syntax without making actual API calls:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
reqon sync-data.vague --dry-run
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Verbose Output
|
|
49
|
+
|
|
50
|
+
Get detailed execution logs:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
reqon sync-data.vague --verbose
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Output includes:
|
|
57
|
+
- HTTP request/response details
|
|
58
|
+
- Pagination progress
|
|
59
|
+
- Store operation counts
|
|
60
|
+
- Timing information
|
|
61
|
+
|
|
62
|
+
### Authentication
|
|
63
|
+
|
|
64
|
+
Provide credentials via a JSON file:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
reqon sync-data.vague --auth ./credentials.json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The credentials file should match your source names:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"Xero": {
|
|
75
|
+
"type": "oauth2",
|
|
76
|
+
"clientId": "your-client-id",
|
|
77
|
+
"clientSecret": "your-client-secret",
|
|
78
|
+
"accessToken": "current-token",
|
|
79
|
+
"refreshToken": "refresh-token",
|
|
80
|
+
"tokenUrl": "https://identity.xero.com/connect/token"
|
|
81
|
+
},
|
|
82
|
+
"GitHub": {
|
|
83
|
+
"type": "bearer",
|
|
84
|
+
"token": "ghp_xxxxxxxxxxxx"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Exporting Results
|
|
90
|
+
|
|
91
|
+
Save store contents to JSON after execution:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
reqon sync-data.vague --output ./output/
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
This creates JSON files for each store:
|
|
98
|
+
```
|
|
99
|
+
output/
|
|
100
|
+
├── customers.json
|
|
101
|
+
├── orders.json
|
|
102
|
+
└── products.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Daemon Mode
|
|
106
|
+
|
|
107
|
+
Run scheduled missions continuously:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
reqon ./missions/ --daemon
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The daemon will:
|
|
114
|
+
- Parse all missions in the folder
|
|
115
|
+
- Execute scheduled missions according to their schedule
|
|
116
|
+
- Respect rate limits and backoff strategies
|
|
117
|
+
- Handle graceful shutdown on SIGINT/SIGTERM
|
|
118
|
+
|
|
119
|
+
### One-Shot Scheduled Execution
|
|
120
|
+
|
|
121
|
+
Run all scheduled missions once:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
reqon ./missions/ --once
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Useful for cron-triggered executions where you want external scheduling.
|
|
128
|
+
|
|
129
|
+
## Exit Codes
|
|
130
|
+
|
|
131
|
+
| Code | Meaning |
|
|
132
|
+
|------|---------|
|
|
133
|
+
| 0 | Success |
|
|
134
|
+
| 1 | Runtime error (HTTP failure, validation error, etc.) |
|
|
135
|
+
| 2 | Parse error (invalid syntax) |
|
|
136
|
+
| 3 | Configuration error (missing credentials, invalid options) |
|
|
137
|
+
|
|
138
|
+
## Environment Variables
|
|
139
|
+
|
|
140
|
+
| Variable | Description |
|
|
141
|
+
|----------|-------------|
|
|
142
|
+
| `REQON_STATE_DIR` | Directory for execution state (default: `.vague-data`) |
|
|
143
|
+
| `REQON_LOG_LEVEL` | Logging level: `debug`, `info`, `warn`, `error` |
|
|
144
|
+
| `REQON_DRY_RUN` | Enable dry-run mode (same as `--dry-run`) |
|
|
145
|
+
|
|
146
|
+
## Multi-File Missions
|
|
147
|
+
|
|
148
|
+
For complex missions, organize them as folders:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
missions/
|
|
152
|
+
└── customer-sync/
|
|
153
|
+
├── mission.vague # Main mission definition
|
|
154
|
+
├── actions/
|
|
155
|
+
│ ├── fetch.vague # Fetch action
|
|
156
|
+
│ ├── transform.vague
|
|
157
|
+
│ └── export.vague
|
|
158
|
+
└── schemas/
|
|
159
|
+
└── customer.vague
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Run with:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
reqon ./missions/customer-sync/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Reqon automatically discovers and loads all `.vague` files in the folder.
|
|
169
|
+
|
|
170
|
+
## Integrating with CI/CD
|
|
171
|
+
|
|
172
|
+
### GitHub Actions
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
name: Sync Data
|
|
176
|
+
on:
|
|
177
|
+
schedule:
|
|
178
|
+
- cron: '0 */6 * * *' # Every 6 hours
|
|
179
|
+
|
|
180
|
+
jobs:
|
|
181
|
+
sync:
|
|
182
|
+
runs-on: ubuntu-latest
|
|
183
|
+
steps:
|
|
184
|
+
- uses: actions/checkout@v4
|
|
185
|
+
- uses: actions/setup-node@v4
|
|
186
|
+
with:
|
|
187
|
+
node-version: '20'
|
|
188
|
+
- run: npm install
|
|
189
|
+
- run: npx reqon ./missions/sync.vague --auth ./credentials.json
|
|
190
|
+
env:
|
|
191
|
+
API_TOKEN: ${{ secrets.API_TOKEN }}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Docker
|
|
195
|
+
|
|
196
|
+
```dockerfile
|
|
197
|
+
FROM node:20-alpine
|
|
198
|
+
WORKDIR /app
|
|
199
|
+
COPY package*.json ./
|
|
200
|
+
RUN npm install
|
|
201
|
+
COPY . .
|
|
202
|
+
CMD ["npx", "reqon", "./missions/", "--daemon"]
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Troubleshooting
|
|
206
|
+
|
|
207
|
+
### "Cannot find module 'reqon'"
|
|
208
|
+
|
|
209
|
+
Ensure Reqon is installed:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm install reqon
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### "Permission denied"
|
|
216
|
+
|
|
217
|
+
The state directory (`.vague-data`) needs write access:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
chmod 755 .vague-data
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Debugging HTTP Issues
|
|
224
|
+
|
|
225
|
+
Use verbose mode to see request/response details:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
reqon mission.vague --verbose 2>&1 | tee debug.log
|
|
229
|
+
```
|