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.
Files changed (388) hide show
  1. package/.claude/settings.local.json +31 -0
  2. package/.claude/skills/api-integration.md +125 -0
  3. package/.claude/skills/database-schema.md +51 -0
  4. package/.claude/skills/dsl-design.md +80 -0
  5. package/.claude/skills/property-testing.md +143 -0
  6. package/.claude/skills/reqon/SKILL.md +44 -0
  7. package/.claude/skills/reqon/references/examples.md +206 -0
  8. package/.claude/skills/reqon/references/syntax.md +263 -0
  9. package/.claude/skills/vscode-extension.md +113 -0
  10. package/.github/dependabot.yml +32 -0
  11. package/.github/pull_request_template.md +21 -0
  12. package/.github/workflows/ci.yml +174 -0
  13. package/.github/workflows/release.yml +73 -0
  14. package/CLAUDE.md +72 -0
  15. package/CONTRIBUTING.md +161 -0
  16. package/README.md +235 -0
  17. package/TODO.md +51 -0
  18. package/dist/ast/index.d.ts +1 -0
  19. package/dist/ast/index.js +1 -0
  20. package/dist/ast/nodes.d.ts +237 -0
  21. package/dist/ast/nodes.js +12 -0
  22. package/dist/auth/auth.test.d.ts +1 -0
  23. package/dist/auth/auth.test.js +255 -0
  24. package/dist/auth/circuit-breaker.d.ts +115 -0
  25. package/dist/auth/circuit-breaker.js +267 -0
  26. package/dist/auth/credentials.d.ts +91 -0
  27. package/dist/auth/credentials.js +169 -0
  28. package/dist/auth/index.d.ts +5 -0
  29. package/dist/auth/index.js +8 -0
  30. package/dist/auth/oauth2-provider.d.ts +41 -0
  31. package/dist/auth/oauth2-provider.js +131 -0
  32. package/dist/auth/rate-limiter.d.ts +61 -0
  33. package/dist/auth/rate-limiter.js +380 -0
  34. package/dist/auth/token-store.d.ts +30 -0
  35. package/dist/auth/token-store.js +148 -0
  36. package/dist/auth/types.d.ts +142 -0
  37. package/dist/auth/types.js +1 -0
  38. package/dist/cli.d.ts +2 -0
  39. package/dist/cli.js +270 -0
  40. package/dist/errors/errors.test.d.ts +1 -0
  41. package/dist/errors/errors.test.js +165 -0
  42. package/dist/errors/index.d.ts +83 -0
  43. package/dist/errors/index.js +159 -0
  44. package/dist/execution/execution.test.d.ts +1 -0
  45. package/dist/execution/execution.test.js +246 -0
  46. package/dist/execution/index.d.ts +4 -0
  47. package/dist/execution/index.js +2 -0
  48. package/dist/execution/state.d.ts +136 -0
  49. package/dist/execution/state.js +82 -0
  50. package/dist/execution/store.d.ts +52 -0
  51. package/dist/execution/store.js +120 -0
  52. package/dist/index.d.ts +27 -0
  53. package/dist/index.js +57 -0
  54. package/dist/integration.test.d.ts +1 -0
  55. package/dist/integration.test.js +168 -0
  56. package/dist/interpreter/context.d.ts +15 -0
  57. package/dist/interpreter/context.js +29 -0
  58. package/dist/interpreter/evaluator.d.ts +5 -0
  59. package/dist/interpreter/evaluator.js +223 -0
  60. package/dist/interpreter/evaluator.test.d.ts +1 -0
  61. package/dist/interpreter/evaluator.test.js +512 -0
  62. package/dist/interpreter/executor.d.ts +131 -0
  63. package/dist/interpreter/executor.js +663 -0
  64. package/dist/interpreter/fetch-handler.d.ts +43 -0
  65. package/dist/interpreter/fetch-handler.js +203 -0
  66. package/dist/interpreter/http.d.ts +57 -0
  67. package/dist/interpreter/http.js +210 -0
  68. package/dist/interpreter/http.test.d.ts +1 -0
  69. package/dist/interpreter/http.test.js +299 -0
  70. package/dist/interpreter/index.d.ts +7 -0
  71. package/dist/interpreter/index.js +7 -0
  72. package/dist/interpreter/pagination.d.ts +63 -0
  73. package/dist/interpreter/pagination.js +155 -0
  74. package/dist/interpreter/progress.test.d.ts +1 -0
  75. package/dist/interpreter/progress.test.js +216 -0
  76. package/dist/interpreter/schema-matcher.d.ts +16 -0
  77. package/dist/interpreter/schema-matcher.js +136 -0
  78. package/dist/interpreter/schema-matcher.test.d.ts +1 -0
  79. package/dist/interpreter/schema-matcher.test.js +122 -0
  80. package/dist/interpreter/signals.d.ts +57 -0
  81. package/dist/interpreter/signals.js +73 -0
  82. package/dist/interpreter/step-handlers/for-handler.d.ts +17 -0
  83. package/dist/interpreter/step-handlers/for-handler.js +51 -0
  84. package/dist/interpreter/step-handlers/index.d.ts +8 -0
  85. package/dist/interpreter/step-handlers/index.js +8 -0
  86. package/dist/interpreter/step-handlers/map-handler.d.ts +10 -0
  87. package/dist/interpreter/step-handlers/map-handler.js +20 -0
  88. package/dist/interpreter/step-handlers/match-handler.d.ts +27 -0
  89. package/dist/interpreter/step-handlers/match-handler.js +61 -0
  90. package/dist/interpreter/step-handlers/store-handler.d.ts +13 -0
  91. package/dist/interpreter/step-handlers/store-handler.js +66 -0
  92. package/dist/interpreter/step-handlers/types.d.ts +15 -0
  93. package/dist/interpreter/step-handlers/types.js +1 -0
  94. package/dist/interpreter/step-handlers/validate-handler.d.ts +10 -0
  95. package/dist/interpreter/step-handlers/validate-handler.js +26 -0
  96. package/dist/interpreter/step-handlers/webhook-handler.d.ts +36 -0
  97. package/dist/interpreter/step-handlers/webhook-handler.js +104 -0
  98. package/dist/lexer/index.d.ts +10 -0
  99. package/dist/lexer/index.js +12 -0
  100. package/dist/lexer/lexer.d.ts +24 -0
  101. package/dist/lexer/lexer.js +264 -0
  102. package/dist/lexer/lexer.test.d.ts +1 -0
  103. package/dist/lexer/lexer.test.js +259 -0
  104. package/dist/lexer/tokens.d.ts +69 -0
  105. package/dist/lexer/tokens.js +146 -0
  106. package/dist/loader/index.d.ts +36 -0
  107. package/dist/loader/index.js +220 -0
  108. package/dist/loader/loader.test.d.ts +1 -0
  109. package/dist/loader/loader.test.js +287 -0
  110. package/dist/oas/index.d.ts +4 -0
  111. package/dist/oas/index.js +2 -0
  112. package/dist/oas/loader.d.ts +21 -0
  113. package/dist/oas/loader.js +82 -0
  114. package/dist/oas/oas.test.d.ts +1 -0
  115. package/dist/oas/oas.test.js +218 -0
  116. package/dist/oas/validator.d.ts +12 -0
  117. package/dist/oas/validator.js +227 -0
  118. package/dist/parser/base.d.ts +33 -0
  119. package/dist/parser/base.js +97 -0
  120. package/dist/parser/expressions.d.ts +27 -0
  121. package/dist/parser/expressions.js +248 -0
  122. package/dist/parser/expressions.test.d.ts +1 -0
  123. package/dist/parser/expressions.test.js +378 -0
  124. package/dist/parser/index.d.ts +3 -0
  125. package/dist/parser/index.js +3 -0
  126. package/dist/parser/match.test.d.ts +1 -0
  127. package/dist/parser/match.test.js +254 -0
  128. package/dist/parser/parser.d.ts +68 -0
  129. package/dist/parser/parser.js +1229 -0
  130. package/dist/parser/parser.test.d.ts +1 -0
  131. package/dist/parser/parser.test.js +333 -0
  132. package/dist/parser/schedule.test.d.ts +1 -0
  133. package/dist/parser/schedule.test.js +241 -0
  134. package/dist/plugin.d.ts +35 -0
  135. package/dist/plugin.js +68 -0
  136. package/dist/scheduler/cron-parser.d.ts +32 -0
  137. package/dist/scheduler/cron-parser.js +198 -0
  138. package/dist/scheduler/cron-parser.test.d.ts +1 -0
  139. package/dist/scheduler/cron-parser.test.js +188 -0
  140. package/dist/scheduler/index.d.ts +3 -0
  141. package/dist/scheduler/index.js +2 -0
  142. package/dist/scheduler/scheduler.d.ts +81 -0
  143. package/dist/scheduler/scheduler.js +376 -0
  144. package/dist/scheduler/types.d.ts +65 -0
  145. package/dist/scheduler/types.js +1 -0
  146. package/dist/stores/factory.d.ts +36 -0
  147. package/dist/stores/factory.js +73 -0
  148. package/dist/stores/file.d.ts +60 -0
  149. package/dist/stores/file.js +173 -0
  150. package/dist/stores/file.test.d.ts +1 -0
  151. package/dist/stores/file.test.js +165 -0
  152. package/dist/stores/index.d.ts +6 -0
  153. package/dist/stores/index.js +5 -0
  154. package/dist/stores/memory.d.ts +19 -0
  155. package/dist/stores/memory.js +51 -0
  156. package/dist/stores/memory.test.d.ts +1 -0
  157. package/dist/stores/memory.test.js +157 -0
  158. package/dist/stores/postgrest.d.ts +55 -0
  159. package/dist/stores/postgrest.js +217 -0
  160. package/dist/stores/stores.test.d.ts +1 -0
  161. package/dist/stores/stores.test.js +158 -0
  162. package/dist/stores/types.d.ts +31 -0
  163. package/dist/stores/types.js +26 -0
  164. package/dist/sync/index.d.ts +4 -0
  165. package/dist/sync/index.js +2 -0
  166. package/dist/sync/state.d.ts +69 -0
  167. package/dist/sync/state.js +66 -0
  168. package/dist/sync/store.d.ts +49 -0
  169. package/dist/sync/store.js +93 -0
  170. package/dist/sync/sync.test.d.ts +1 -0
  171. package/dist/sync/sync.test.js +221 -0
  172. package/dist/utils/async.d.ts +7 -0
  173. package/dist/utils/async.js +9 -0
  174. package/dist/utils/file.d.ts +38 -0
  175. package/dist/utils/file.js +92 -0
  176. package/dist/utils/index.d.ts +4 -0
  177. package/dist/utils/index.js +4 -0
  178. package/dist/utils/logger.d.ts +34 -0
  179. package/dist/utils/logger.js +39 -0
  180. package/dist/utils/path.d.ts +12 -0
  181. package/dist/utils/path.js +41 -0
  182. package/dist/webhook/index.d.ts +8 -0
  183. package/dist/webhook/index.js +7 -0
  184. package/dist/webhook/server.d.ts +84 -0
  185. package/dist/webhook/server.js +319 -0
  186. package/dist/webhook/store.d.ts +67 -0
  187. package/dist/webhook/store.js +193 -0
  188. package/dist/webhook/types.d.ts +88 -0
  189. package/dist/webhook/types.js +6 -0
  190. package/docusaurus/README.md +41 -0
  191. package/docusaurus/docs/advanced/execution-state.md +283 -0
  192. package/docusaurus/docs/advanced/extending-reqon.md +388 -0
  193. package/docusaurus/docs/advanced/multi-file-missions.md +250 -0
  194. package/docusaurus/docs/advanced/parallel-execution.md +353 -0
  195. package/docusaurus/docs/api-reference.md +443 -0
  196. package/docusaurus/docs/authentication/api-key.md +339 -0
  197. package/docusaurus/docs/authentication/basic.md +276 -0
  198. package/docusaurus/docs/authentication/bearer.md +282 -0
  199. package/docusaurus/docs/authentication/oauth2.md +317 -0
  200. package/docusaurus/docs/authentication/overview.md +251 -0
  201. package/docusaurus/docs/cli.md +229 -0
  202. package/docusaurus/docs/core-concepts/actions.md +286 -0
  203. package/docusaurus/docs/core-concepts/missions.md +264 -0
  204. package/docusaurus/docs/core-concepts/schemas.md +353 -0
  205. package/docusaurus/docs/core-concepts/sources.md +339 -0
  206. package/docusaurus/docs/core-concepts/stores.md +332 -0
  207. package/docusaurus/docs/dsl-syntax/expressions.md +361 -0
  208. package/docusaurus/docs/dsl-syntax/fetch.md +293 -0
  209. package/docusaurus/docs/dsl-syntax/for-loops.md +324 -0
  210. package/docusaurus/docs/dsl-syntax/map.md +345 -0
  211. package/docusaurus/docs/dsl-syntax/match.md +387 -0
  212. package/docusaurus/docs/dsl-syntax/pipelines.md +397 -0
  213. package/docusaurus/docs/dsl-syntax/validate.md +401 -0
  214. package/docusaurus/docs/error-handling/dead-letter-queues.md +399 -0
  215. package/docusaurus/docs/error-handling/flow-control.md +337 -0
  216. package/docusaurus/docs/error-handling/retry-strategies.md +368 -0
  217. package/docusaurus/docs/examples.md +488 -0
  218. package/docusaurus/docs/getting-started.md +256 -0
  219. package/docusaurus/docs/http/circuit-breaker.md +401 -0
  220. package/docusaurus/docs/http/incremental-sync.md +394 -0
  221. package/docusaurus/docs/http/pagination.md +361 -0
  222. package/docusaurus/docs/http/rate-limiting.md +383 -0
  223. package/docusaurus/docs/http/requests.md +328 -0
  224. package/docusaurus/docs/http/retry.md +402 -0
  225. package/docusaurus/docs/intro.md +90 -0
  226. package/docusaurus/docs/openapi/loading-specs.md +305 -0
  227. package/docusaurus/docs/openapi/operation-calls.md +314 -0
  228. package/docusaurus/docs/openapi/overview.md +212 -0
  229. package/docusaurus/docs/openapi/response-validation.md +344 -0
  230. package/docusaurus/docs/scheduling/cron.md +305 -0
  231. package/docusaurus/docs/scheduling/daemon-mode.md +317 -0
  232. package/docusaurus/docs/scheduling/intervals.md +289 -0
  233. package/docusaurus/docs/scheduling/overview.md +231 -0
  234. package/docusaurus/docs/stores/custom-adapters.md +376 -0
  235. package/docusaurus/docs/stores/file.md +236 -0
  236. package/docusaurus/docs/stores/memory.md +193 -0
  237. package/docusaurus/docs/stores/overview.md +274 -0
  238. package/docusaurus/docs/stores/postgrest.md +316 -0
  239. package/docusaurus/docusaurus.config.ts +148 -0
  240. package/docusaurus/package-lock.json +18029 -0
  241. package/docusaurus/package.json +47 -0
  242. package/docusaurus/sidebars.ts +155 -0
  243. package/docusaurus/src/components/HomepageFeatures/index.tsx +105 -0
  244. package/docusaurus/src/components/HomepageFeatures/styles.module.css +12 -0
  245. package/docusaurus/src/css/custom.css +169 -0
  246. package/docusaurus/src/pages/index.module.css +48 -0
  247. package/docusaurus/src/pages/index.tsx +110 -0
  248. package/docusaurus/src/pages/markdown-page.md +7 -0
  249. package/docusaurus/static/.nojekyll +0 -0
  250. package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  251. package/docusaurus/static/img/docusaurus.png +0 -0
  252. package/docusaurus/static/img/favicon.ico +0 -0
  253. package/docusaurus/static/img/logo.svg +10 -0
  254. package/docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  255. package/docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  256. package/docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  257. package/docusaurus/tsconfig.json +8 -0
  258. package/examples/README.md +112 -0
  259. package/examples/error-handling/README.md +150 -0
  260. package/examples/error-handling/payment-processor.vague +287 -0
  261. package/examples/github-sync/README.md +74 -0
  262. package/examples/github-sync/fetch-issues.vague +47 -0
  263. package/examples/github-sync/fetch-prs.vague +40 -0
  264. package/examples/github-sync/mission.vague +101 -0
  265. package/examples/github-sync/normalize.vague +70 -0
  266. package/examples/jsonplaceholder/README.md +28 -0
  267. package/examples/jsonplaceholder/posts.vague +48 -0
  268. package/examples/petstore/README.md +35 -0
  269. package/examples/petstore/openapi.yaml +97 -0
  270. package/examples/petstore/sync.vague +52 -0
  271. package/examples/temporal-comparison/README.md +297 -0
  272. package/examples/temporal-comparison/reconciliation.vague +355 -0
  273. package/examples/temporal-comparison/temporal/activities/index.ts +8 -0
  274. package/examples/temporal-comparison/temporal/activities/shipstation.ts +225 -0
  275. package/examples/temporal-comparison/temporal/activities/shopify.ts +257 -0
  276. package/examples/temporal-comparison/temporal/activities/storage.ts +198 -0
  277. package/examples/temporal-comparison/temporal/activities/stripe.ts +169 -0
  278. package/examples/temporal-comparison/temporal/activities/validation.ts +205 -0
  279. package/examples/temporal-comparison/temporal/client/schedule.ts +218 -0
  280. package/examples/temporal-comparison/temporal/config/retry.ts +63 -0
  281. package/examples/temporal-comparison/temporal/types/index.ts +129 -0
  282. package/examples/temporal-comparison/temporal/workers/main.ts +130 -0
  283. package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +262 -0
  284. package/examples/xero/README.md +88 -0
  285. package/examples/xero/invoices.vague +189 -0
  286. package/package.json +40 -0
  287. package/src/api-integration.test.ts +954 -0
  288. package/src/ast/index.ts +1 -0
  289. package/src/ast/nodes.ts +310 -0
  290. package/src/auth/auth.test.ts +326 -0
  291. package/src/auth/circuit-breaker.test.ts +390 -0
  292. package/src/auth/circuit-breaker.ts +379 -0
  293. package/src/auth/credentials.test.ts +273 -0
  294. package/src/auth/credentials.ts +246 -0
  295. package/src/auth/index.ts +40 -0
  296. package/src/auth/oauth2-provider.ts +177 -0
  297. package/src/auth/rate-limiter.ts +459 -0
  298. package/src/auth/token-store.ts +177 -0
  299. package/src/auth/types.ts +159 -0
  300. package/src/benchmark/e2e.bench.ts +288 -0
  301. package/src/benchmark/evaluator.bench.ts +331 -0
  302. package/src/benchmark/fixtures.ts +295 -0
  303. package/src/benchmark/index.ts +108 -0
  304. package/src/benchmark/lexer.bench.ts +69 -0
  305. package/src/benchmark/parser.bench.ts +103 -0
  306. package/src/benchmark/resilience.bench.ts +193 -0
  307. package/src/benchmark/store.bench.ts +147 -0
  308. package/src/benchmark/utils.ts +230 -0
  309. package/src/cli.ts +313 -0
  310. package/src/errors/errors.test.ts +234 -0
  311. package/src/errors/index.ts +223 -0
  312. package/src/execution/execution.test.ts +307 -0
  313. package/src/execution/index.ts +21 -0
  314. package/src/execution/state.ts +207 -0
  315. package/src/execution/store.ts +188 -0
  316. package/src/index.ts +169 -0
  317. package/src/integration.test.ts +192 -0
  318. package/src/interpreter/context.ts +57 -0
  319. package/src/interpreter/evaluator.test.ts +796 -0
  320. package/src/interpreter/evaluator.ts +245 -0
  321. package/src/interpreter/executor.ts +946 -0
  322. package/src/interpreter/fetch-handler.ts +302 -0
  323. package/src/interpreter/http.test.ts +423 -0
  324. package/src/interpreter/http.ts +308 -0
  325. package/src/interpreter/index.ts +32 -0
  326. package/src/interpreter/pagination.ts +207 -0
  327. package/src/interpreter/progress.test.ts +276 -0
  328. package/src/interpreter/schema-matcher.test.ts +160 -0
  329. package/src/interpreter/schema-matcher.ts +168 -0
  330. package/src/interpreter/signals.ts +73 -0
  331. package/src/interpreter/step-handlers/for-handler.ts +65 -0
  332. package/src/interpreter/step-handlers/index.ts +17 -0
  333. package/src/interpreter/step-handlers/map-handler.ts +24 -0
  334. package/src/interpreter/step-handlers/match-handler.ts +101 -0
  335. package/src/interpreter/step-handlers/store-handler.ts +78 -0
  336. package/src/interpreter/step-handlers/types.ts +17 -0
  337. package/src/interpreter/step-handlers/validate-handler.ts +30 -0
  338. package/src/interpreter/step-handlers/webhook-handler.ts +142 -0
  339. package/src/lexer/index.ts +18 -0
  340. package/src/lexer/lexer.test.ts +316 -0
  341. package/src/lexer/tokens.ts +179 -0
  342. package/src/loader/index.ts +288 -0
  343. package/src/loader/loader.test.ts +360 -0
  344. package/src/oas/index.ts +4 -0
  345. package/src/oas/loader.ts +126 -0
  346. package/src/oas/oas.test.ts +254 -0
  347. package/src/oas/validator.ts +299 -0
  348. package/src/parser/base.ts +124 -0
  349. package/src/parser/expressions.test.ts +525 -0
  350. package/src/parser/expressions.ts +314 -0
  351. package/src/parser/index.ts +3 -0
  352. package/src/parser/match.test.ts +296 -0
  353. package/src/parser/parser.test.ts +739 -0
  354. package/src/parser/parser.ts +1469 -0
  355. package/src/parser/schedule.test.ts +287 -0
  356. package/src/parser/webhook.test.ts +248 -0
  357. package/src/plugin.ts +83 -0
  358. package/src/scheduler/cron-parser.test.ts +236 -0
  359. package/src/scheduler/cron-parser.ts +236 -0
  360. package/src/scheduler/index.ts +10 -0
  361. package/src/scheduler/scheduler.ts +443 -0
  362. package/src/scheduler/types.ts +71 -0
  363. package/src/stores/factory.ts +104 -0
  364. package/src/stores/file.test.ts +276 -0
  365. package/src/stores/file.ts +211 -0
  366. package/src/stores/index.ts +6 -0
  367. package/src/stores/memory.test.ts +238 -0
  368. package/src/stores/memory.ts +63 -0
  369. package/src/stores/postgrest.test.ts +488 -0
  370. package/src/stores/postgrest.ts +263 -0
  371. package/src/stores/stores.test.ts +197 -0
  372. package/src/stores/types.ts +58 -0
  373. package/src/sync/index.ts +16 -0
  374. package/src/sync/state.ts +126 -0
  375. package/src/sync/store.ts +139 -0
  376. package/src/sync/sync.test.ts +271 -0
  377. package/src/utils/async.ts +10 -0
  378. package/src/utils/file.ts +106 -0
  379. package/src/utils/index.ts +14 -0
  380. package/src/utils/logger.ts +53 -0
  381. package/src/utils/path.ts +47 -0
  382. package/src/webhook/index.ts +15 -0
  383. package/src/webhook/server.test.ts +253 -0
  384. package/src/webhook/server.ts +389 -0
  385. package/src/webhook/store.ts +239 -0
  386. package/src/webhook/types.ts +93 -0
  387. package/tsconfig.json +17 -0
  388. package/vitest.config.ts +39 -0
@@ -0,0 +1,443 @@
1
+ ---
2
+ sidebar_position: 21
3
+ ---
4
+
5
+ # API Reference
6
+
7
+ Reqon's programmatic API for advanced usage.
8
+
9
+ ## Core Functions
10
+
11
+ ### parse
12
+
13
+ Parse a Reqon source string into an AST.
14
+
15
+ ```typescript
16
+ import { parse } from 'reqon';
17
+
18
+ const ast = parse(`
19
+ mission Example {
20
+ source API { auth: bearer, base: "https://api.example.com" }
21
+ store data: file("data")
22
+ action Fetch { get "/data" }
23
+ run Fetch
24
+ }
25
+ `);
26
+
27
+ console.log(ast.missions[0].name); // "Example"
28
+ ```
29
+
30
+ **Parameters:**
31
+ - `source: string` - Reqon source code
32
+
33
+ **Returns:** `ReqonProgram` - The parsed AST
34
+
35
+ ### execute
36
+
37
+ Execute a Reqon mission from source code.
38
+
39
+ ```typescript
40
+ import { execute } from 'reqon';
41
+
42
+ const result = await execute(`
43
+ mission Example {
44
+ source API { auth: none, base: "https://jsonplaceholder.typicode.com" }
45
+ store posts: memory("posts")
46
+ action Fetch {
47
+ get "/posts"
48
+ store response -> posts { key: .id }
49
+ }
50
+ run Fetch
51
+ }
52
+ `);
53
+
54
+ console.log(result.success); // true
55
+ console.log(result.duration); // 234
56
+ console.log(result.actionsRun); // ["Fetch"]
57
+ ```
58
+
59
+ **Parameters:**
60
+ - `source: string` - Reqon source code
61
+ - `config?: ExecutorConfig` - Optional configuration
62
+
63
+ **Returns:** `Promise<ExecutionResult>`
64
+
65
+ ### fromFile
66
+
67
+ Execute a mission from a file.
68
+
69
+ ```typescript
70
+ import { fromFile } from 'reqon';
71
+
72
+ const result = await fromFile('./mission.vague', {
73
+ auth: {
74
+ API: { type: 'bearer', token: 'xxx' }
75
+ }
76
+ });
77
+ ```
78
+
79
+ **Parameters:**
80
+ - `filePath: string` - Path to .vague file
81
+ - `config?: ExecutorConfig` - Optional configuration
82
+
83
+ **Returns:** `Promise<ExecutionResult>`
84
+
85
+ ### fromPath
86
+
87
+ Execute a mission from a file or folder.
88
+
89
+ ```typescript
90
+ import { fromPath } from 'reqon';
91
+
92
+ // Single file
93
+ const result1 = await fromPath('./mission.vague');
94
+
95
+ // Folder (multi-file mission)
96
+ const result2 = await fromPath('./missions/customer-sync/');
97
+ ```
98
+
99
+ **Parameters:**
100
+ - `path: string` - Path to file or folder
101
+ - `config?: ExecutorConfig` - Optional configuration
102
+
103
+ **Returns:** `Promise<ExecutionResult>`
104
+
105
+ ### reqon (Tagged Template)
106
+
107
+ Create a parsed program using a tagged template literal.
108
+
109
+ ```typescript
110
+ import { reqon } from 'reqon';
111
+
112
+ const program = reqon`
113
+ mission Example {
114
+ source API { auth: bearer, base: "https://api.example.com" }
115
+ store data: file("data")
116
+ action Fetch { get "/data" }
117
+ run Fetch
118
+ }
119
+ `;
120
+
121
+ // Execute the program
122
+ const result = await program.execute();
123
+ ```
124
+
125
+ ## Configuration
126
+
127
+ ### ExecutorConfig
128
+
129
+ ```typescript
130
+ interface ExecutorConfig {
131
+ // Skip actual HTTP requests
132
+ dryRun?: boolean;
133
+
134
+ // Enable verbose logging
135
+ verbose?: boolean;
136
+
137
+ // Authentication credentials
138
+ auth?: Record<string, AuthConfig>;
139
+
140
+ // Store configuration
141
+ storeConfig?: Record<string, StoreConfig>;
142
+
143
+ // State directory
144
+ stateDir?: string;
145
+
146
+ // Progress callbacks
147
+ progressCallbacks?: ProgressCallbacks;
148
+ }
149
+ ```
150
+
151
+ ### AuthConfig
152
+
153
+ ```typescript
154
+ type AuthConfig =
155
+ | { type: 'none' }
156
+ | { type: 'bearer'; token: string }
157
+ | { type: 'basic'; username: string; password: string }
158
+ | { type: 'api_key'; key: string; header?: string; query?: string; prefix?: string }
159
+ | {
160
+ type: 'oauth2';
161
+ clientId: string;
162
+ clientSecret: string;
163
+ accessToken: string;
164
+ refreshToken: string;
165
+ tokenUrl: string;
166
+ scopes?: string[];
167
+ expiresAt?: string;
168
+ };
169
+ ```
170
+
171
+ ### ProgressCallbacks
172
+
173
+ ```typescript
174
+ interface ProgressCallbacks {
175
+ onMissionStart?: (mission: string) => void;
176
+ onMissionComplete?: (mission: string, result: ExecutionResult) => void;
177
+ onActionStart?: (action: string) => void;
178
+ onActionComplete?: (action: string, duration: number) => void;
179
+ onProgress?: (progress: ProgressInfo) => void;
180
+ onError?: (error: ExecutionError) => void;
181
+ }
182
+
183
+ interface ProgressInfo {
184
+ action: string;
185
+ step: string;
186
+ current: number;
187
+ total?: number;
188
+ }
189
+ ```
190
+
191
+ ## Results
192
+
193
+ ### ExecutionResult
194
+
195
+ ```typescript
196
+ interface ExecutionResult {
197
+ // Whether execution completed successfully
198
+ success: boolean;
199
+
200
+ // Total duration in milliseconds
201
+ duration: number;
202
+
203
+ // Actions that were executed
204
+ actionsRun: string[];
205
+
206
+ // Errors encountered
207
+ errors: ExecutionError[];
208
+
209
+ // Access to stores
210
+ stores: Map<string, StoreAdapter>;
211
+
212
+ // Execution ID (for state tracking)
213
+ executionId?: string;
214
+
215
+ // Execution state (for resume)
216
+ state?: ExecutionState;
217
+ }
218
+ ```
219
+
220
+ ### ExecutionError
221
+
222
+ ```typescript
223
+ interface ExecutionError {
224
+ action: string;
225
+ step: string;
226
+ message: string;
227
+ details?: unknown;
228
+ }
229
+ ```
230
+
231
+ ## Store Adapter Interface
232
+
233
+ ```typescript
234
+ interface StoreAdapter {
235
+ get(key: string): Promise<Record<string, unknown> | null>;
236
+ set(key: string, value: Record<string, unknown>): Promise<void>;
237
+ update(key: string, partial: Record<string, unknown>): Promise<void>;
238
+ delete(key: string): Promise<void>;
239
+ list(filter?: FilterOptions): Promise<Record<string, unknown>[]>;
240
+ clear(): Promise<void>;
241
+ }
242
+
243
+ interface FilterOptions {
244
+ where?: WhereClause[];
245
+ limit?: number;
246
+ offset?: number;
247
+ }
248
+
249
+ interface WhereClause {
250
+ field: string;
251
+ operator: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains';
252
+ value: unknown;
253
+ }
254
+ ```
255
+
256
+ ## Registration Functions
257
+
258
+ ### registerFunction
259
+
260
+ Register a custom function.
261
+
262
+ ```typescript
263
+ import { registerFunction } from 'reqon';
264
+
265
+ registerFunction('myFunc', (arg1: string, arg2: number) => {
266
+ return `${arg1}: ${arg2}`;
267
+ });
268
+ ```
269
+
270
+ ### registerStoreAdapter
271
+
272
+ Register a custom store adapter.
273
+
274
+ ```typescript
275
+ import { registerStoreAdapter } from 'reqon';
276
+
277
+ registerStoreAdapter('mystore', (name: string, config: any) => {
278
+ return new MyStoreAdapter(name, config);
279
+ });
280
+ ```
281
+
282
+ ### registerAuthProvider
283
+
284
+ Register a custom auth provider.
285
+
286
+ ```typescript
287
+ import { registerAuthProvider } from 'reqon';
288
+
289
+ registerAuthProvider('myauth', (config: any) => {
290
+ return new MyAuthProvider(config);
291
+ });
292
+ ```
293
+
294
+ ### registerPaginationStrategy
295
+
296
+ Register a custom pagination strategy.
297
+
298
+ ```typescript
299
+ import { registerPaginationStrategy } from 'reqon';
300
+
301
+ registerPaginationStrategy('linkheader', () => {
302
+ return new LinkHeaderPaginationStrategy();
303
+ });
304
+ ```
305
+
306
+ ## State Management
307
+
308
+ ### getExecutionState
309
+
310
+ Get execution state for a mission.
311
+
312
+ ```typescript
313
+ import { getExecutionState } from 'reqon';
314
+
315
+ const state = await getExecutionState('CustomerSync');
316
+ console.log(state.status); // "completed"
317
+ console.log(state.lastRun); // "2024-01-20T09:00:00Z"
318
+ ```
319
+
320
+ ### getExecutionHistory
321
+
322
+ Get execution history.
323
+
324
+ ```typescript
325
+ import { getExecutionHistory } from 'reqon';
326
+
327
+ const history = await getExecutionHistory('CustomerSync', {
328
+ limit: 10,
329
+ since: '2024-01-01'
330
+ });
331
+ ```
332
+
333
+ ### clearSyncCheckpoints
334
+
335
+ Clear sync checkpoints.
336
+
337
+ ```typescript
338
+ import { clearSyncCheckpoints, clearSyncCheckpoint } from 'reqon';
339
+
340
+ // Clear all
341
+ await clearSyncCheckpoints();
342
+
343
+ // Clear specific
344
+ await clearSyncCheckpoint('API-/customers');
345
+ ```
346
+
347
+ ## AST Types
348
+
349
+ ### ReqonProgram
350
+
351
+ ```typescript
352
+ interface ReqonProgram {
353
+ missions: MissionDefinition[];
354
+ }
355
+ ```
356
+
357
+ ### MissionDefinition
358
+
359
+ ```typescript
360
+ interface MissionDefinition {
361
+ type: 'MissionDefinition';
362
+ name: string;
363
+ schedule?: ScheduleConfig;
364
+ sources: SourceDefinition[];
365
+ stores: StoreDefinition[];
366
+ schemas: SchemaDefinition[];
367
+ actions: ActionDefinition[];
368
+ pipeline: PipelineDefinition;
369
+ }
370
+ ```
371
+
372
+ ### ActionDefinition
373
+
374
+ ```typescript
375
+ interface ActionDefinition {
376
+ type: 'ActionDefinition';
377
+ name: string;
378
+ steps: ActionStep[];
379
+ }
380
+ ```
381
+
382
+ ### ActionStep
383
+
384
+ ```typescript
385
+ type ActionStep =
386
+ | FetchStep
387
+ | CallStep
388
+ | ForStep
389
+ | MapStep
390
+ | ValidateStep
391
+ | StoreStep
392
+ | MatchStep;
393
+ ```
394
+
395
+ ## CLI Programmatic Usage
396
+
397
+ ```typescript
398
+ import { CLI } from 'reqon/cli';
399
+
400
+ const cli = new CLI();
401
+
402
+ // Run mission
403
+ await cli.run(['./mission.vague', '--verbose']);
404
+
405
+ // Daemon mode
406
+ await cli.run(['./missions/', '--daemon']);
407
+
408
+ // With auth
409
+ await cli.run(['./mission.vague', '--auth', './credentials.json']);
410
+ ```
411
+
412
+ ## Environment Variables
413
+
414
+ | Variable | Description |
415
+ |----------|-------------|
416
+ | `REQON_STATE_DIR` | State directory (default: `.vague-data`) |
417
+ | `REQON_LOG_LEVEL` | Log level: `debug`, `info`, `warn`, `error` |
418
+ | `REQON_LOG_FORMAT` | Log format: `text`, `json` |
419
+ | `REQON_DRY_RUN` | Enable dry-run mode |
420
+
421
+ ## Error Classes
422
+
423
+ ```typescript
424
+ import {
425
+ ParseError,
426
+ RuntimeError,
427
+ ValidationError,
428
+ AuthenticationError,
429
+ StoreError
430
+ } from 'reqon/errors';
431
+
432
+ try {
433
+ await execute(source);
434
+ } catch (error) {
435
+ if (error instanceof ParseError) {
436
+ console.error(`Parse error at line ${error.line}: ${error.message}`);
437
+ } else if (error instanceof AuthenticationError) {
438
+ console.error(`Auth failed for ${error.source}: ${error.message}`);
439
+ }
440
+ }
441
+ ```
442
+
443
+ For more details, see the [source code](https://github.com/mcclowes/reqon) and [Vague documentation](https://github.com/mcclowes/vague) for expression syntax.