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.
Files changed (396) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +22 -0
  3. package/dist/ast/nodes.d.ts +83 -4
  4. package/dist/ast/nodes.js +14 -0
  5. package/dist/auth/circuit-breaker.js +7 -6
  6. package/dist/auth/rate-limiter.d.ts +4 -0
  7. package/dist/auth/rate-limiter.js +9 -16
  8. package/dist/cli.d.ts +13 -0
  9. package/dist/cli.js +84 -4
  10. package/dist/config/constants.d.ts +141 -0
  11. package/dist/config/constants.js +128 -0
  12. package/dist/config/index.d.ts +4 -0
  13. package/dist/config/index.js +4 -0
  14. package/dist/control/index.d.ts +2 -0
  15. package/dist/control/index.js +1 -0
  16. package/dist/control/server.d.ts +88 -0
  17. package/dist/control/server.js +238 -0
  18. package/dist/control/types.d.ts +55 -0
  19. package/dist/control/types.js +7 -0
  20. package/dist/debug/cli-debugger.d.ts +17 -0
  21. package/dist/debug/cli-debugger.js +180 -0
  22. package/dist/debug/controller.d.ts +94 -0
  23. package/dist/debug/controller.js +45 -0
  24. package/dist/debug/index.d.ts +6 -0
  25. package/dist/debug/index.js +5 -0
  26. package/dist/errors/index.d.ts +67 -0
  27. package/dist/errors/index.js +89 -1
  28. package/dist/execution/index.d.ts +1 -1
  29. package/dist/execution/state.d.ts +24 -0
  30. package/dist/index.d.ts +21 -1
  31. package/dist/index.js +33 -2
  32. package/dist/interpreter/context.d.ts +14 -0
  33. package/dist/interpreter/context.js +15 -0
  34. package/dist/interpreter/evaluator.d.ts +63 -1
  35. package/dist/interpreter/evaluator.js +186 -39
  36. package/dist/interpreter/executor.d.ts +70 -14
  37. package/dist/interpreter/executor.js +503 -174
  38. package/dist/interpreter/fetch-handler.d.ts +9 -0
  39. package/dist/interpreter/fetch-handler.js +133 -24
  40. package/dist/interpreter/http.d.ts +5 -0
  41. package/dist/interpreter/http.js +26 -12
  42. package/dist/interpreter/index.d.ts +3 -1
  43. package/dist/interpreter/index.js +2 -0
  44. package/dist/interpreter/pagination.d.ts +11 -2
  45. package/dist/interpreter/pagination.js +95 -31
  46. package/dist/interpreter/signals.d.ts +8 -0
  47. package/dist/interpreter/signals.js +12 -0
  48. package/dist/interpreter/source-manager.d.ts +75 -0
  49. package/dist/interpreter/source-manager.js +157 -0
  50. package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
  51. package/dist/interpreter/step-handlers/apply-handler.js +79 -0
  52. package/dist/interpreter/step-handlers/for-handler.d.ts +13 -0
  53. package/dist/interpreter/step-handlers/for-handler.js +71 -4
  54. package/dist/interpreter/step-handlers/index.d.ts +4 -2
  55. package/dist/interpreter/step-handlers/index.js +4 -2
  56. package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
  57. package/dist/interpreter/step-handlers/match-handler.js +43 -16
  58. package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
  59. package/dist/interpreter/step-handlers/pause-handler.js +87 -0
  60. package/dist/interpreter/step-handlers/store-handler.d.ts +11 -1
  61. package/dist/interpreter/step-handlers/store-handler.js +45 -13
  62. package/dist/interpreter/step-handlers/types.d.ts +3 -0
  63. package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
  64. package/dist/interpreter/step-handlers/validate-handler.js +4 -2
  65. package/dist/interpreter/step-handlers/webhook-handler.d.ts +3 -0
  66. package/dist/interpreter/step-handlers/webhook-handler.js +18 -2
  67. package/dist/interpreter/store-manager.d.ts +46 -0
  68. package/dist/interpreter/store-manager.js +66 -0
  69. package/dist/lexer/index.d.ts +11 -4
  70. package/dist/lexer/index.js +11 -4
  71. package/dist/lexer/tokens.d.ts +17 -1
  72. package/dist/lexer/tokens.js +36 -0
  73. package/dist/mcp/index.d.ts +11 -0
  74. package/dist/mcp/index.js +11 -0
  75. package/dist/mcp/server.d.ts +17 -0
  76. package/dist/mcp/server.js +451 -0
  77. package/dist/oas/index.d.ts +2 -0
  78. package/dist/oas/index.js +1 -0
  79. package/dist/oas/mock-generator.d.ts +12 -0
  80. package/dist/oas/mock-generator.js +187 -0
  81. package/dist/observability/events.d.ts +244 -0
  82. package/dist/observability/events.js +90 -0
  83. package/dist/observability/index.d.ts +15 -0
  84. package/dist/observability/index.js +12 -0
  85. package/dist/observability/logger.d.ts +106 -0
  86. package/dist/observability/logger.js +259 -0
  87. package/dist/observability/otel.d.ts +135 -0
  88. package/dist/observability/otel.js +386 -0
  89. package/dist/parser/action-parser.d.ts +105 -0
  90. package/dist/parser/action-parser.js +645 -0
  91. package/dist/parser/expressions.d.ts +13 -0
  92. package/dist/parser/expressions.js +72 -2
  93. package/dist/parser/fetch-parser.d.ts +27 -0
  94. package/dist/parser/fetch-parser.js +269 -0
  95. package/dist/parser/index.d.ts +17 -0
  96. package/dist/parser/index.js +17 -0
  97. package/dist/parser/parser.d.ts +44 -46
  98. package/dist/parser/parser.js +122 -1070
  99. package/dist/parser/pipeline-parser.d.ts +12 -0
  100. package/dist/parser/pipeline-parser.js +52 -0
  101. package/dist/parser/schedule-parser.d.ts +7 -0
  102. package/dist/parser/schedule-parser.js +137 -0
  103. package/dist/parser/source-parser.d.ts +9 -0
  104. package/dist/parser/source-parser.js +151 -0
  105. package/dist/pause/index.d.ts +14 -0
  106. package/dist/pause/index.js +11 -0
  107. package/dist/pause/manager.d.ts +118 -0
  108. package/dist/pause/manager.js +245 -0
  109. package/dist/pause/state.d.ts +93 -0
  110. package/dist/pause/state.js +103 -0
  111. package/dist/pause/store.d.ts +61 -0
  112. package/dist/pause/store.js +156 -0
  113. package/dist/plugin.d.ts +9 -12
  114. package/dist/plugin.js +10 -13
  115. package/dist/stores/factory.d.ts +1 -1
  116. package/dist/stores/factory.js +3 -2
  117. package/dist/stores/file.d.ts +26 -0
  118. package/dist/stores/file.js +64 -10
  119. package/dist/stores/index.d.ts +16 -1
  120. package/dist/stores/index.js +16 -1
  121. package/dist/stores/memory.d.ts +4 -0
  122. package/dist/stores/memory.js +11 -0
  123. package/dist/stores/types.d.ts +17 -0
  124. package/dist/stores/types.js +12 -0
  125. package/dist/trace/index.d.ts +16 -0
  126. package/dist/trace/index.js +12 -0
  127. package/dist/trace/recorder.d.ts +71 -0
  128. package/dist/trace/recorder.js +144 -0
  129. package/dist/trace/replay.d.ts +132 -0
  130. package/dist/trace/replay.js +264 -0
  131. package/dist/trace/state.d.ts +102 -0
  132. package/dist/trace/state.js +86 -0
  133. package/dist/trace/store.d.ts +69 -0
  134. package/dist/trace/store.js +225 -0
  135. package/dist/utils/index.d.ts +1 -0
  136. package/dist/utils/index.js +1 -0
  137. package/dist/utils/type-guards.d.ts +58 -0
  138. package/dist/utils/type-guards.js +92 -0
  139. package/dist/webhook/server.js +7 -6
  140. package/package.json +55 -6
  141. package/.claude/settings.local.json +0 -31
  142. package/.claude/skills/api-integration.md +0 -125
  143. package/.claude/skills/database-schema.md +0 -51
  144. package/.claude/skills/dsl-design.md +0 -80
  145. package/.claude/skills/property-testing.md +0 -143
  146. package/.claude/skills/reqon/SKILL.md +0 -44
  147. package/.claude/skills/reqon/references/examples.md +0 -206
  148. package/.claude/skills/reqon/references/syntax.md +0 -263
  149. package/.claude/skills/vscode-extension.md +0 -113
  150. package/.github/dependabot.yml +0 -32
  151. package/.github/pull_request_template.md +0 -21
  152. package/.github/workflows/ci.yml +0 -174
  153. package/.github/workflows/release.yml +0 -73
  154. package/CLAUDE.md +0 -72
  155. package/CONTRIBUTING.md +0 -161
  156. package/TODO.md +0 -51
  157. package/dist/auth/auth.test.d.ts +0 -1
  158. package/dist/auth/auth.test.js +0 -255
  159. package/dist/errors/errors.test.d.ts +0 -1
  160. package/dist/errors/errors.test.js +0 -165
  161. package/dist/execution/execution.test.d.ts +0 -1
  162. package/dist/execution/execution.test.js +0 -246
  163. package/dist/integration.test.d.ts +0 -1
  164. package/dist/integration.test.js +0 -168
  165. package/dist/interpreter/evaluator.test.d.ts +0 -1
  166. package/dist/interpreter/evaluator.test.js +0 -512
  167. package/dist/interpreter/http.test.d.ts +0 -1
  168. package/dist/interpreter/http.test.js +0 -299
  169. package/dist/interpreter/progress.test.d.ts +0 -1
  170. package/dist/interpreter/progress.test.js +0 -216
  171. package/dist/interpreter/schema-matcher.test.d.ts +0 -1
  172. package/dist/interpreter/schema-matcher.test.js +0 -122
  173. package/dist/lexer/lexer.d.ts +0 -24
  174. package/dist/lexer/lexer.js +0 -264
  175. package/dist/lexer/lexer.test.d.ts +0 -1
  176. package/dist/lexer/lexer.test.js +0 -259
  177. package/dist/loader/loader.test.d.ts +0 -1
  178. package/dist/loader/loader.test.js +0 -287
  179. package/dist/oas/oas.test.d.ts +0 -1
  180. package/dist/oas/oas.test.js +0 -218
  181. package/dist/parser/expressions.test.d.ts +0 -1
  182. package/dist/parser/expressions.test.js +0 -378
  183. package/dist/parser/match.test.d.ts +0 -1
  184. package/dist/parser/match.test.js +0 -254
  185. package/dist/parser/parser.test.d.ts +0 -1
  186. package/dist/parser/parser.test.js +0 -333
  187. package/dist/parser/schedule.test.d.ts +0 -1
  188. package/dist/parser/schedule.test.js +0 -241
  189. package/dist/scheduler/cron-parser.test.d.ts +0 -1
  190. package/dist/scheduler/cron-parser.test.js +0 -188
  191. package/dist/stores/file.test.d.ts +0 -1
  192. package/dist/stores/file.test.js +0 -165
  193. package/dist/stores/memory.test.d.ts +0 -1
  194. package/dist/stores/memory.test.js +0 -157
  195. package/dist/stores/stores.test.d.ts +0 -1
  196. package/dist/stores/stores.test.js +0 -158
  197. package/dist/sync/sync.test.d.ts +0 -1
  198. package/dist/sync/sync.test.js +0 -221
  199. package/docusaurus/README.md +0 -41
  200. package/docusaurus/docs/advanced/execution-state.md +0 -283
  201. package/docusaurus/docs/advanced/extending-reqon.md +0 -388
  202. package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
  203. package/docusaurus/docs/advanced/parallel-execution.md +0 -353
  204. package/docusaurus/docs/api-reference.md +0 -443
  205. package/docusaurus/docs/authentication/api-key.md +0 -339
  206. package/docusaurus/docs/authentication/basic.md +0 -276
  207. package/docusaurus/docs/authentication/bearer.md +0 -282
  208. package/docusaurus/docs/authentication/oauth2.md +0 -317
  209. package/docusaurus/docs/authentication/overview.md +0 -251
  210. package/docusaurus/docs/cli.md +0 -229
  211. package/docusaurus/docs/core-concepts/actions.md +0 -286
  212. package/docusaurus/docs/core-concepts/missions.md +0 -264
  213. package/docusaurus/docs/core-concepts/schemas.md +0 -353
  214. package/docusaurus/docs/core-concepts/sources.md +0 -339
  215. package/docusaurus/docs/core-concepts/stores.md +0 -332
  216. package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
  217. package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
  218. package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
  219. package/docusaurus/docs/dsl-syntax/map.md +0 -345
  220. package/docusaurus/docs/dsl-syntax/match.md +0 -387
  221. package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
  222. package/docusaurus/docs/dsl-syntax/validate.md +0 -401
  223. package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
  224. package/docusaurus/docs/error-handling/flow-control.md +0 -337
  225. package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
  226. package/docusaurus/docs/examples.md +0 -488
  227. package/docusaurus/docs/getting-started.md +0 -256
  228. package/docusaurus/docs/http/circuit-breaker.md +0 -401
  229. package/docusaurus/docs/http/incremental-sync.md +0 -394
  230. package/docusaurus/docs/http/pagination.md +0 -361
  231. package/docusaurus/docs/http/rate-limiting.md +0 -383
  232. package/docusaurus/docs/http/requests.md +0 -328
  233. package/docusaurus/docs/http/retry.md +0 -402
  234. package/docusaurus/docs/intro.md +0 -90
  235. package/docusaurus/docs/openapi/loading-specs.md +0 -305
  236. package/docusaurus/docs/openapi/operation-calls.md +0 -314
  237. package/docusaurus/docs/openapi/overview.md +0 -212
  238. package/docusaurus/docs/openapi/response-validation.md +0 -344
  239. package/docusaurus/docs/scheduling/cron.md +0 -305
  240. package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
  241. package/docusaurus/docs/scheduling/intervals.md +0 -289
  242. package/docusaurus/docs/scheduling/overview.md +0 -231
  243. package/docusaurus/docs/stores/custom-adapters.md +0 -376
  244. package/docusaurus/docs/stores/file.md +0 -236
  245. package/docusaurus/docs/stores/memory.md +0 -193
  246. package/docusaurus/docs/stores/overview.md +0 -274
  247. package/docusaurus/docs/stores/postgrest.md +0 -316
  248. package/docusaurus/docusaurus.config.ts +0 -148
  249. package/docusaurus/package-lock.json +0 -18029
  250. package/docusaurus/package.json +0 -47
  251. package/docusaurus/sidebars.ts +0 -155
  252. package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
  253. package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
  254. package/docusaurus/src/css/custom.css +0 -169
  255. package/docusaurus/src/pages/index.module.css +0 -48
  256. package/docusaurus/src/pages/index.tsx +0 -110
  257. package/docusaurus/src/pages/markdown-page.md +0 -7
  258. package/docusaurus/static/.nojekyll +0 -0
  259. package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  260. package/docusaurus/static/img/docusaurus.png +0 -0
  261. package/docusaurus/static/img/favicon.ico +0 -0
  262. package/docusaurus/static/img/logo.svg +0 -10
  263. package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
  264. package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
  265. package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
  266. package/docusaurus/tsconfig.json +0 -8
  267. package/examples/README.md +0 -112
  268. package/examples/error-handling/README.md +0 -150
  269. package/examples/error-handling/payment-processor.vague +0 -287
  270. package/examples/github-sync/README.md +0 -74
  271. package/examples/github-sync/fetch-issues.vague +0 -47
  272. package/examples/github-sync/fetch-prs.vague +0 -40
  273. package/examples/github-sync/mission.vague +0 -101
  274. package/examples/github-sync/normalize.vague +0 -70
  275. package/examples/jsonplaceholder/README.md +0 -28
  276. package/examples/jsonplaceholder/posts.vague +0 -48
  277. package/examples/petstore/README.md +0 -35
  278. package/examples/petstore/openapi.yaml +0 -97
  279. package/examples/petstore/sync.vague +0 -52
  280. package/examples/temporal-comparison/README.md +0 -297
  281. package/examples/temporal-comparison/reconciliation.vague +0 -355
  282. package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
  283. package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
  284. package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
  285. package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
  286. package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
  287. package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
  288. package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
  289. package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
  290. package/examples/temporal-comparison/temporal/types/index.ts +0 -129
  291. package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
  292. package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
  293. package/examples/xero/README.md +0 -88
  294. package/examples/xero/invoices.vague +0 -189
  295. package/src/api-integration.test.ts +0 -954
  296. package/src/ast/index.ts +0 -1
  297. package/src/ast/nodes.ts +0 -310
  298. package/src/auth/auth.test.ts +0 -326
  299. package/src/auth/circuit-breaker.test.ts +0 -390
  300. package/src/auth/circuit-breaker.ts +0 -379
  301. package/src/auth/credentials.test.ts +0 -273
  302. package/src/auth/credentials.ts +0 -246
  303. package/src/auth/index.ts +0 -40
  304. package/src/auth/oauth2-provider.ts +0 -177
  305. package/src/auth/rate-limiter.ts +0 -459
  306. package/src/auth/token-store.ts +0 -177
  307. package/src/auth/types.ts +0 -159
  308. package/src/benchmark/e2e.bench.ts +0 -288
  309. package/src/benchmark/evaluator.bench.ts +0 -331
  310. package/src/benchmark/fixtures.ts +0 -295
  311. package/src/benchmark/index.ts +0 -108
  312. package/src/benchmark/lexer.bench.ts +0 -69
  313. package/src/benchmark/parser.bench.ts +0 -103
  314. package/src/benchmark/resilience.bench.ts +0 -193
  315. package/src/benchmark/store.bench.ts +0 -147
  316. package/src/benchmark/utils.ts +0 -230
  317. package/src/cli.ts +0 -313
  318. package/src/errors/errors.test.ts +0 -234
  319. package/src/errors/index.ts +0 -223
  320. package/src/execution/execution.test.ts +0 -307
  321. package/src/execution/index.ts +0 -21
  322. package/src/execution/state.ts +0 -207
  323. package/src/execution/store.ts +0 -188
  324. package/src/index.ts +0 -169
  325. package/src/integration.test.ts +0 -192
  326. package/src/interpreter/context.ts +0 -57
  327. package/src/interpreter/evaluator.test.ts +0 -796
  328. package/src/interpreter/evaluator.ts +0 -245
  329. package/src/interpreter/executor.ts +0 -946
  330. package/src/interpreter/fetch-handler.ts +0 -302
  331. package/src/interpreter/http.test.ts +0 -423
  332. package/src/interpreter/http.ts +0 -308
  333. package/src/interpreter/index.ts +0 -32
  334. package/src/interpreter/pagination.ts +0 -207
  335. package/src/interpreter/progress.test.ts +0 -276
  336. package/src/interpreter/schema-matcher.test.ts +0 -160
  337. package/src/interpreter/schema-matcher.ts +0 -168
  338. package/src/interpreter/signals.ts +0 -73
  339. package/src/interpreter/step-handlers/for-handler.ts +0 -65
  340. package/src/interpreter/step-handlers/index.ts +0 -17
  341. package/src/interpreter/step-handlers/map-handler.ts +0 -24
  342. package/src/interpreter/step-handlers/match-handler.ts +0 -101
  343. package/src/interpreter/step-handlers/store-handler.ts +0 -78
  344. package/src/interpreter/step-handlers/types.ts +0 -17
  345. package/src/interpreter/step-handlers/validate-handler.ts +0 -30
  346. package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
  347. package/src/lexer/index.ts +0 -18
  348. package/src/lexer/lexer.test.ts +0 -316
  349. package/src/lexer/tokens.ts +0 -179
  350. package/src/loader/index.ts +0 -288
  351. package/src/loader/loader.test.ts +0 -360
  352. package/src/oas/index.ts +0 -4
  353. package/src/oas/loader.ts +0 -126
  354. package/src/oas/oas.test.ts +0 -254
  355. package/src/oas/validator.ts +0 -299
  356. package/src/parser/base.ts +0 -124
  357. package/src/parser/expressions.test.ts +0 -525
  358. package/src/parser/expressions.ts +0 -314
  359. package/src/parser/index.ts +0 -3
  360. package/src/parser/match.test.ts +0 -296
  361. package/src/parser/parser.test.ts +0 -739
  362. package/src/parser/parser.ts +0 -1469
  363. package/src/parser/schedule.test.ts +0 -287
  364. package/src/parser/webhook.test.ts +0 -248
  365. package/src/plugin.ts +0 -83
  366. package/src/scheduler/cron-parser.test.ts +0 -236
  367. package/src/scheduler/cron-parser.ts +0 -236
  368. package/src/scheduler/index.ts +0 -10
  369. package/src/scheduler/scheduler.ts +0 -443
  370. package/src/scheduler/types.ts +0 -71
  371. package/src/stores/factory.ts +0 -104
  372. package/src/stores/file.test.ts +0 -276
  373. package/src/stores/file.ts +0 -211
  374. package/src/stores/index.ts +0 -6
  375. package/src/stores/memory.test.ts +0 -238
  376. package/src/stores/memory.ts +0 -63
  377. package/src/stores/postgrest.test.ts +0 -488
  378. package/src/stores/postgrest.ts +0 -263
  379. package/src/stores/stores.test.ts +0 -197
  380. package/src/stores/types.ts +0 -58
  381. package/src/sync/index.ts +0 -16
  382. package/src/sync/state.ts +0 -126
  383. package/src/sync/store.ts +0 -139
  384. package/src/sync/sync.test.ts +0 -271
  385. package/src/utils/async.ts +0 -10
  386. package/src/utils/file.ts +0 -106
  387. package/src/utils/index.ts +0 -14
  388. package/src/utils/logger.ts +0 -53
  389. package/src/utils/path.ts +0 -47
  390. package/src/webhook/index.ts +0 -15
  391. package/src/webhook/server.test.ts +0 -253
  392. package/src/webhook/server.ts +0 -389
  393. package/src/webhook/store.ts +0 -239
  394. package/src/webhook/types.ts +0 -93
  395. package/tsconfig.json +0 -17
  396. package/vitest.config.ts +0 -39
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ The changelog has moved to the documentation site:
4
+
5
+ **[https://reqon.mcclowes.com/changelog](https://reqon.mcclowes.com/changelog)**
6
+
7
+ This keeps the changelog alongside the rest of the documentation and ensures it stays up to date.
package/README.md CHANGED
@@ -191,6 +191,28 @@ run Step1 then Step2 then Step3
191
191
  run [Step1, Step2] then Step3 // Step1 and Step2 run in parallel, then Step3
192
192
  ```
193
193
 
194
+ ### Durability Features
195
+
196
+ ```vague
197
+ mission DurablePipeline {
198
+ // Checkpoint after each step for resume-on-failure
199
+ checkpoint: afterStep // or onFailure
200
+
201
+ // Enable time-travel debugging
202
+ trace: full // or minimal
203
+
204
+ action WaitForApproval {
205
+ // Resource-free pause (days/weeks without holding resources)
206
+ pause {
207
+ duration: "7d",
208
+ resumeOn: timeout | webhook "/approved"
209
+ }
210
+ }
211
+
212
+ run WaitForApproval
213
+ }
214
+ ```
215
+
194
216
  ## OpenAPI Integration
195
217
 
196
218
  Reqon can consume OpenAPI specs directly, eliminating the need for handwritten SDK code:
@@ -1,5 +1,19 @@
1
+ /**
2
+ * ---
3
+ * purpose: AST node type definitions for Reqon programs
4
+ * exports:
5
+ * - ReqonProgram, Statement - top-level types
6
+ * - MissionDefinition, ActionDefinition - pipeline structure
7
+ * - SourceDefinition, StoreDefinition - resource declarations
8
+ * - FetchStep, ForStep, MapStep, ValidateStep, etc. - action steps
9
+ * related:
10
+ * - ../parser/parser.ts - produces these AST nodes
11
+ * - ../interpreter/executor.ts - executes AST
12
+ * - vague-lang - Expression, SchemaDefinition from parent DSL
13
+ * ---
14
+ */
1
15
  import type { Expression, SchemaDefinition, Statement as VagueStatement } from 'vague-lang';
2
- export type Statement = VagueStatement | MissionDefinition | SourceDefinition | StoreDefinition | ActionDefinition;
16
+ export type Statement = VagueStatement | MissionDefinition | SourceDefinition | StoreDefinition | ActionDefinition | TransformDefinition;
3
17
  export interface ReqonProgram {
4
18
  type: 'ReqonProgram';
5
19
  statements: Statement[];
@@ -39,7 +53,7 @@ export interface AuthConfig {
39
53
  export interface StoreDefinition {
40
54
  type: 'StoreDefinition';
41
55
  name: string;
42
- storeType: 'nosql' | 'sql' | 'memory';
56
+ storeType: 'nosql' | 'sql' | 'memory' | 'file' | 'postgrest';
43
57
  target: string;
44
58
  }
45
59
  export interface ScheduleDefinition {
@@ -61,13 +75,32 @@ export interface ScheduleRetryConfig {
61
75
  maxRetries: number;
62
76
  delaySeconds: number;
63
77
  }
78
+ export interface CheckpointConfig {
79
+ type: 'CheckpointConfig';
80
+ /** When to create checkpoints */
81
+ mode: 'after-step' | 'on-failure';
82
+ /** Optional: custom store for checkpoint data (defaults to FileStore) */
83
+ store?: string;
84
+ }
85
+ export interface TraceConfig {
86
+ type: 'TraceConfig';
87
+ /** Trace mode - 'full' captures state at each step */
88
+ mode: 'full' | 'minimal';
89
+ /** Optional: custom store for trace data */
90
+ store?: string;
91
+ }
64
92
  export interface MissionDefinition {
65
93
  type: 'MissionDefinition';
66
94
  name: string;
67
95
  schedule?: ScheduleDefinition;
96
+ /** Checkpoint configuration for durable execution */
97
+ checkpoint?: CheckpointConfig;
98
+ /** Trace configuration for time-travel debugging */
99
+ trace?: TraceConfig;
68
100
  sources: SourceDefinition[];
69
101
  stores: StoreDefinition[];
70
102
  schemas: SchemaDefinition[];
103
+ transforms: TransformDefinition[];
71
104
  actions: ActionDefinition[];
72
105
  pipeline: PipelineDefinition;
73
106
  }
@@ -76,7 +109,7 @@ export interface ActionDefinition {
76
109
  name: string;
77
110
  steps: ActionStep[];
78
111
  }
79
- export type ActionStep = FetchStep | ForStep | MapStep | ValidateStep | StoreStep | MatchStep | LetStep | WebhookStep;
112
+ export type ActionStep = FetchStep | ForStep | MapStep | ValidateStep | StoreStep | MatchStep | LetStep | ApplyStep | WebhookStep | PauseStep;
80
113
  export interface LetStep {
81
114
  type: 'LetStep';
82
115
  name: string;
@@ -103,6 +136,22 @@ export interface WebhookStorageConfig {
103
136
  /** Expression for extracting key from webhook payload */
104
137
  key?: Expression;
105
138
  }
139
+ export interface PauseStep {
140
+ type: 'PauseStep';
141
+ /** Duration to pause (e.g., "7d", "1h", "30m", 86400000) */
142
+ duration: string | number;
143
+ /** Store to persist pause state (defaults to FileStore) */
144
+ persist?: string;
145
+ /** Resume triggers - timeout (default) and/or webhook */
146
+ resumeOn?: PauseResumeTrigger[];
147
+ }
148
+ export type PauseResumeTrigger = {
149
+ type: 'timeout';
150
+ } | {
151
+ type: 'webhook';
152
+ path: string;
153
+ eventFilter?: Expression;
154
+ };
106
155
  export type FlowDirective = {
107
156
  type: 'continue';
108
157
  } | {
@@ -129,6 +178,8 @@ export interface MatchStep {
129
178
  export interface MatchArm {
130
179
  /** Schema name to match against, or '_' for wildcard */
131
180
  schema: string;
181
+ /** Optional guard condition (when using 'where' clause) */
182
+ guard?: Expression;
132
183
  /** Steps to execute if matched */
133
184
  steps?: ActionStep[];
134
185
  /** Flow control directive (if no steps) */
@@ -152,8 +203,10 @@ export interface SinceConfig {
152
203
  type: 'lastSync' | 'expression';
153
204
  /** Custom checkpoint key (defaults to source:endpoint) */
154
205
  key?: string;
155
- /** Query parameter name for the since value (default: varies by API) */
206
+ /** Query parameter name for the since value (default: 'since') */
156
207
  param?: string;
208
+ /** Header name for the since value (e.g., 'If-Modified-Since'). Mutually exclusive with param. */
209
+ header?: string;
157
210
  /** Date format for the since value */
158
211
  format?: 'iso' | 'unix' | 'unix-ms' | 'date-only';
159
212
  /** Expression to evaluate for 'expression' type */
@@ -194,6 +247,32 @@ export interface FieldMapping {
194
247
  field: string;
195
248
  expression: Expression;
196
249
  }
250
+ export interface TransformDefinition {
251
+ type: 'TransformDefinition';
252
+ name: string;
253
+ variants: TransformVariant[];
254
+ }
255
+ export interface TransformVariant {
256
+ /** Source schema name, or '_' for wildcard/default */
257
+ sourceSchema: string | '_';
258
+ /** Target schema name */
259
+ targetSchema: string;
260
+ /** Optional guard condition for additional matching */
261
+ guard?: Expression;
262
+ /** Field mappings for this variant */
263
+ mappings: FieldMapping[];
264
+ }
265
+ export interface ApplyStep {
266
+ type: 'ApplyStep';
267
+ transform: string;
268
+ source: Expression;
269
+ /** Optional: bind result to a variable instead of response */
270
+ as?: string;
271
+ }
272
+ export interface TryExpression {
273
+ type: 'TryExpression';
274
+ expressions: Expression[];
275
+ }
197
276
  export interface ValidateStep {
198
277
  type: 'ValidateStep';
199
278
  target: Expression;
package/dist/ast/nodes.js CHANGED
@@ -1,3 +1,17 @@
1
+ /**
2
+ * ---
3
+ * purpose: AST node type definitions for Reqon programs
4
+ * exports:
5
+ * - ReqonProgram, Statement - top-level types
6
+ * - MissionDefinition, ActionDefinition - pipeline structure
7
+ * - SourceDefinition, StoreDefinition - resource declarations
8
+ * - FetchStep, ForStep, MapStep, ValidateStep, etc. - action steps
9
+ * related:
10
+ * - ../parser/parser.ts - produces these AST nodes
11
+ * - ../interpreter/executor.ts - executes AST
12
+ * - vague-lang - Expression, SchemaDefinition from parent DSL
13
+ * ---
14
+ */
1
15
  /** Helper to check if a stage is parallel */
2
16
  export function isParallelStage(stage) {
3
17
  return Array.isArray(stage.actions) && stage.actions.length > 0;
@@ -9,13 +9,14 @@
9
9
  * - OPEN: Circuit tripped, requests fail immediately
10
10
  * - HALF_OPEN: Testing if service recovered, limited requests allowed
11
11
  */
12
+ import { CIRCUIT_BREAKER_DEFAULTS } from '../config/index.js';
12
13
  const DEFAULT_CONFIG = {
13
- failureThreshold: 5,
14
- resetTimeout: 30000,
15
- successThreshold: 2,
16
- failureWindow: 60000,
17
- failureStatusCodes: [500, 501, 502, 503, 504],
18
- countNetworkErrors: true,
14
+ failureThreshold: CIRCUIT_BREAKER_DEFAULTS.FAILURE_THRESHOLD,
15
+ resetTimeout: CIRCUIT_BREAKER_DEFAULTS.RESET_TIMEOUT_MS,
16
+ successThreshold: CIRCUIT_BREAKER_DEFAULTS.SUCCESS_THRESHOLD,
17
+ failureWindow: CIRCUIT_BREAKER_DEFAULTS.FAILURE_WINDOW_MS,
18
+ failureStatusCodes: [...CIRCUIT_BREAKER_DEFAULTS.FAILURE_STATUS_CODES],
19
+ countNetworkErrors: CIRCUIT_BREAKER_DEFAULTS.COUNT_NETWORK_ERRORS,
19
20
  };
20
21
  /**
21
22
  * Error thrown when circuit breaker is open
@@ -16,6 +16,10 @@ export declare class RateLimitError extends Error {
16
16
  resetAt?: Date | undefined;
17
17
  constructor(source: string, resetAt?: Date | undefined);
18
18
  }
19
+ /**
20
+ * Adaptive rate limiter that learns from response headers
21
+ * Supports pause, throttle, and fail strategies
22
+ */
19
23
  export declare class AdaptiveRateLimiter implements RateLimiter {
20
24
  private defaultConfig;
21
25
  private state;
@@ -1,15 +1,10 @@
1
1
  import { sleep } from '../utils/async.js';
2
- /** Max age for stale entries (default: 1 hour) */
3
- const DEFAULT_MAX_STALE_AGE_MS = 60 * 60 * 1000;
4
- /** Cleanup interval (default: 5 minutes) */
5
- const CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
6
- /** Max number of entries before forced cleanup */
7
- const MAX_ENTRIES_BEFORE_CLEANUP = 1000;
2
+ import { RATE_LIMIT_DEFAULTS } from '../config/index.js';
8
3
  const DEFAULT_CONFIG = {
9
- strategy: 'pause',
10
- maxWait: 300,
11
- notifyAt: 10,
12
- fallbackRpm: 60,
4
+ strategy: RATE_LIMIT_DEFAULTS.STRATEGY,
5
+ maxWait: RATE_LIMIT_DEFAULTS.MAX_WAIT_SECONDS,
6
+ notifyAt: RATE_LIMIT_DEFAULTS.NOTIFY_AT_SECONDS,
7
+ fallbackRpm: RATE_LIMIT_DEFAULTS.FALLBACK_RPM,
13
8
  };
14
9
  /**
15
10
  * Rate limit timeout error - thrown when maxWait is exceeded
@@ -44,8 +39,6 @@ export class RateLimitError extends Error {
44
39
  * Adaptive rate limiter that learns from response headers
45
40
  * Supports pause, throttle, and fail strategies
46
41
  */
47
- /** Number of responses between cleanup checks */
48
- const CLEANUP_CHECK_INTERVAL = 100;
49
42
  export class AdaptiveRateLimiter {
50
43
  defaultConfig;
51
44
  state = new Map();
@@ -56,7 +49,7 @@ export class AdaptiveRateLimiter {
56
49
  responsesSinceCleanup = 0;
57
50
  constructor(defaultConfig = {}, options = {}) {
58
51
  this.defaultConfig = defaultConfig;
59
- this.maxStaleAgeMs = options.maxStaleAgeMs ?? DEFAULT_MAX_STALE_AGE_MS;
52
+ this.maxStaleAgeMs = options.maxStaleAgeMs ?? RATE_LIMIT_DEFAULTS.MAX_STALE_AGE_MS;
60
53
  }
61
54
  /**
62
55
  * Clean up stale entries from the state map to prevent memory leaks
@@ -64,8 +57,8 @@ export class AdaptiveRateLimiter {
64
57
  cleanup() {
65
58
  const now = Date.now();
66
59
  // Skip if cleanup was done recently and we're under the entry limit
67
- if (now - this.lastCleanup < CLEANUP_INTERVAL_MS &&
68
- this.state.size < MAX_ENTRIES_BEFORE_CLEANUP) {
60
+ if (now - this.lastCleanup < RATE_LIMIT_DEFAULTS.CLEANUP_INTERVAL_MS &&
61
+ this.state.size < RATE_LIMIT_DEFAULTS.MAX_ENTRIES_BEFORE_CLEANUP) {
69
62
  return;
70
63
  }
71
64
  this.lastCleanup = now;
@@ -260,7 +253,7 @@ export class AdaptiveRateLimiter {
260
253
  this.state.set(key, state);
261
254
  // Periodically clean up stale entries (every N responses)
262
255
  this.responsesSinceCleanup++;
263
- if (this.responsesSinceCleanup >= CLEANUP_CHECK_INTERVAL) {
256
+ if (this.responsesSinceCleanup >= RATE_LIMIT_DEFAULTS.CLEANUP_CHECK_INTERVAL) {
264
257
  this.responsesSinceCleanup = 0;
265
258
  this.cleanup();
266
259
  }
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,15 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * ---
4
+ * purpose: CLI entry point - parses args and runs missions
5
+ * inputs:
6
+ * - file.reqon or folder path
7
+ * - --dry-run, --verbose, --auth, --env, --output, --daemon, --webhook, --debug
8
+ * related:
9
+ * - ./index.ts - library APIs used by CLI
10
+ * - ./scheduler/index.ts - daemon mode scheduling
11
+ * - ./webhook/index.ts - webhook server for wait steps
12
+ * - ./debug/cli-debugger.ts - interactive debugging
13
+ * ---
14
+ */
2
15
  export {};
package/dist/cli.js CHANGED
@@ -1,10 +1,24 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * ---
4
+ * purpose: CLI entry point - parses args and runs missions
5
+ * inputs:
6
+ * - file.reqon or folder path
7
+ * - --dry-run, --verbose, --auth, --env, --output, --daemon, --webhook, --debug
8
+ * related:
9
+ * - ./index.ts - library APIs used by CLI
10
+ * - ./scheduler/index.ts - daemon mode scheduling
11
+ * - ./webhook/index.ts - webhook server for wait steps
12
+ * - ./debug/cli-debugger.ts - interactive debugging
13
+ * ---
14
+ */
2
15
  import { readFile, writeFile, mkdir } from 'node:fs/promises';
3
16
  import { resolve, dirname } from 'node:path';
4
17
  import { fromPath, Scheduler, loadMission } from './index.js';
5
18
  import { ReqonError } from './errors/index.js';
6
19
  import { loadEnv, loadCredentials } from './auth/credentials.js';
7
20
  import { WebhookServer } from './webhook/index.js';
21
+ import { ControlServer } from './control/index.js';
8
22
  async function main() {
9
23
  const args = process.argv.slice(2);
10
24
  if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
@@ -25,6 +39,10 @@ Options:
25
39
  --webhook Enable webhook server for 'wait' steps
26
40
  --webhook-port <n> Port for webhook server (default: 3000)
27
41
  --webhook-url <url> Base URL for webhook endpoints (default: http://localhost:3000)
42
+ --control Enable control server for pause/resume and status queries
43
+ --control-port <n> Port for control server (default: 3001)
44
+ --debug Enable step-through debugging
45
+ --resume <id> Resume a paused or failed execution by ID
28
46
  --help, -h Show this help message
29
47
 
30
48
  Environment Variables:
@@ -44,6 +62,15 @@ Examples:
44
62
  reqon sync-invoices.reqon --output ./output.json
45
63
  reqon sync-invoices.reqon --daemon --verbose
46
64
  reqon sync-invoices.reqon --webhook --webhook-port 8080 --verbose
65
+ reqon sync-invoices.reqon --control --verbose # enable control server
66
+ reqon sync-invoices.reqon --resume exec_abc123 # resume paused execution
67
+
68
+ Control Server:
69
+ When --control is enabled, the server exposes these endpoints:
70
+ POST /pause Request graceful pause at next safe point
71
+ POST /resume Clear pause request
72
+ GET /status Get current execution state and progress
73
+ GET /health Health check
47
74
  `);
48
75
  process.exit(0);
49
76
  }
@@ -53,6 +80,8 @@ Examples:
53
80
  const daemon = args.includes('--daemon');
54
81
  const once = args.includes('--once');
55
82
  const webhookEnabled = args.includes('--webhook');
83
+ const debugEnabled = args.includes('--debug');
84
+ const controlEnabled = args.includes('--control');
56
85
  // Parse webhook options
57
86
  let webhookPort = 3000;
58
87
  const webhookPortIndex = args.indexOf('--webhook-port');
@@ -64,6 +93,18 @@ Examples:
64
93
  if (webhookUrlIndex !== -1 && args[webhookUrlIndex + 1]) {
65
94
  webhookUrl = args[webhookUrlIndex + 1];
66
95
  }
96
+ // Parse control server options
97
+ let controlPort = 3001;
98
+ const controlPortIndex = args.indexOf('--control-port');
99
+ if (controlPortIndex !== -1 && args[controlPortIndex + 1]) {
100
+ controlPort = parseInt(args[controlPortIndex + 1], 10);
101
+ }
102
+ // Parse resume option
103
+ let resumeFrom;
104
+ const resumeIndex = args.indexOf('--resume');
105
+ if (resumeIndex !== -1 && args[resumeIndex + 1]) {
106
+ resumeFrom = args[resumeIndex + 1];
107
+ }
67
108
  // Load .env file(s)
68
109
  let envFile;
69
110
  const envIndex = args.indexOf('--env');
@@ -112,14 +153,43 @@ Examples:
112
153
  await webhookServer.start();
113
154
  console.log(`Webhook server started on port ${webhookPort}`);
114
155
  }
156
+ // Start control server if enabled
157
+ let controlServer;
158
+ if (controlEnabled) {
159
+ controlServer = new ControlServer({ port: controlPort, verbose });
160
+ await controlServer.start();
161
+ console.log(`Control server started on port ${controlPort}`);
162
+ console.log(` POST http://localhost:${controlPort}/pause - request pause`);
163
+ console.log(` GET http://localhost:${controlPort}/status - check status`);
164
+ }
165
+ // Initialize debug controller if enabled
166
+ let debugController;
167
+ if (debugEnabled) {
168
+ const { CLIDebugger } = await import('./debug/cli-debugger.js');
169
+ debugController = new CLIDebugger();
170
+ console.log('Debug mode enabled. Commands: c(ontinue), s(tep), si(step-into), so(step-over), q(uit)');
171
+ console.log('Type "help" at the debug prompt for more commands.\n');
172
+ }
115
173
  try {
116
174
  const result = await fromPath(filePath, {
117
175
  dryRun,
118
176
  verbose,
119
177
  auth: auth,
120
178
  webhookServer,
179
+ debugController,
180
+ controlServer,
181
+ resumeFrom,
121
182
  });
122
- if (result.success) {
183
+ // Check if execution was paused
184
+ const isPaused = result.state?.status === 'paused';
185
+ if (isPaused) {
186
+ console.log(`\n⏸ Mission paused`);
187
+ console.log(` Duration: ${result.duration}ms`);
188
+ console.log(` Actions run: ${result.actionsRun.join(' → ')}`);
189
+ console.log(` Execution ID: ${result.executionId}`);
190
+ console.log(`\n To resume: reqon ${filePath} --resume ${result.executionId}`);
191
+ }
192
+ else if (result.success) {
123
193
  console.log(`\n✓ Mission completed successfully`);
124
194
  console.log(` Duration: ${result.duration}ms`);
125
195
  console.log(` Actions run: ${result.actionsRun.join(' → ')}`);
@@ -127,7 +197,7 @@ Examples:
127
197
  const storeData = {};
128
198
  for (const [name, store] of result.stores) {
129
199
  const items = await store.list();
130
- console.log(` Store "${name}": ${items.length} items`);
200
+ console.log(` Store "${name}": ${items.length} ${items.length === 1 ? 'item' : 'items'}`);
131
201
  storeData[name] = items;
132
202
  }
133
203
  // Export to JSON if requested
@@ -142,6 +212,10 @@ Examples:
142
212
  for (const error of result.errors) {
143
213
  console.error(` [${error.action}/${error.step}] ${error.message}`);
144
214
  }
215
+ if (result.executionId) {
216
+ console.log(`\n Execution ID: ${result.executionId}`);
217
+ console.log(` To resume: reqon ${filePath} --resume ${result.executionId}`);
218
+ }
145
219
  process.exit(1);
146
220
  }
147
221
  }
@@ -159,16 +233,22 @@ Examples:
159
233
  if (webhookServer) {
160
234
  await webhookServer.stop();
161
235
  }
236
+ // Stop control server if it was started
237
+ if (controlServer) {
238
+ await controlServer.stop();
239
+ }
240
+ // Close debug controller if it was started
241
+ if (debugController?.close) {
242
+ debugController.close();
243
+ }
162
244
  }
163
245
  }
164
246
  async function runDaemon(filePath, options) {
165
247
  const absolutePath = resolve(filePath);
166
248
  let program;
167
- let baseDir;
168
249
  try {
169
250
  const result = await loadMission(absolutePath);
170
251
  program = result.program;
171
- baseDir = result.baseDir;
172
252
  }
173
253
  catch (error) {
174
254
  if (error instanceof ReqonError) {
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Centralized Configuration Constants
3
+ *
4
+ * This module contains all default values and configuration constants used
5
+ * throughout the Reqon framework. Centralizing these values makes it easier
6
+ * to understand, tune, and override defaults.
7
+ */
8
+ /**
9
+ * Default retry configuration for HTTP requests
10
+ */
11
+ export declare const HTTP_RETRY_DEFAULTS: {
12
+ /** Maximum number of retry attempts */
13
+ readonly MAX_ATTEMPTS: 3;
14
+ /** Initial delay between retries in milliseconds */
15
+ readonly INITIAL_DELAY_MS: 1000;
16
+ /** Maximum delay between retries in milliseconds */
17
+ readonly MAX_DELAY_MS: 30000;
18
+ /** Backoff strategy: 'exponential', 'linear', or 'constant' */
19
+ readonly BACKOFF: "exponential";
20
+ };
21
+ /**
22
+ * Default HTTP headers
23
+ */
24
+ export declare const HTTP_DEFAULT_HEADERS: {
25
+ readonly CONTENT_TYPE: "application/json";
26
+ readonly ACCEPT: "application/json";
27
+ };
28
+ /**
29
+ * Default rate limiter configuration
30
+ */
31
+ export declare const RATE_LIMIT_DEFAULTS: {
32
+ /** Default strategy when rate limited: 'pause', 'throttle', or 'fail' */
33
+ readonly STRATEGY: "pause";
34
+ /** Maximum wait time in seconds before timing out */
35
+ readonly MAX_WAIT_SECONDS: 300;
36
+ /** Seconds before starting to notify about ongoing waits */
37
+ readonly NOTIFY_AT_SECONDS: 10;
38
+ /** Fallback requests per minute when no rate limit info available */
39
+ readonly FALLBACK_RPM: 60;
40
+ /** Maximum age for stale rate limit entries (1 hour in ms) */
41
+ readonly MAX_STALE_AGE_MS: number;
42
+ /** Cleanup interval for stale entries (5 minutes in ms) */
43
+ readonly CLEANUP_INTERVAL_MS: number;
44
+ /** Number of responses between cleanup checks */
45
+ readonly CLEANUP_CHECK_INTERVAL: 100;
46
+ /** Maximum entries before forced cleanup */
47
+ readonly MAX_ENTRIES_BEFORE_CLEANUP: 1000;
48
+ };
49
+ /**
50
+ * Default circuit breaker configuration
51
+ */
52
+ export declare const CIRCUIT_BREAKER_DEFAULTS: {
53
+ /** Number of failures before opening circuit */
54
+ readonly FAILURE_THRESHOLD: 5;
55
+ /** Time in milliseconds before attempting recovery */
56
+ readonly RESET_TIMEOUT_MS: 30000;
57
+ /** Number of successful requests in half-open to close circuit */
58
+ readonly SUCCESS_THRESHOLD: 2;
59
+ /** Time window in milliseconds for counting failures */
60
+ readonly FAILURE_WINDOW_MS: 60000;
61
+ /** HTTP status codes to count as failures */
62
+ readonly FAILURE_STATUS_CODES: readonly number[];
63
+ /** Whether to count network errors as failures */
64
+ readonly COUNT_NETWORK_ERRORS: true;
65
+ };
66
+ /**
67
+ * Default webhook server configuration
68
+ */
69
+ export declare const WEBHOOK_DEFAULTS: {
70
+ /** Default port for webhook server */
71
+ readonly PORT: 3000;
72
+ /** Default host binding */
73
+ readonly HOST: "0.0.0.0";
74
+ /** Default timeout for wait steps (5 minutes in ms) */
75
+ readonly DEFAULT_TIMEOUT_MS: 300000;
76
+ /** Cleanup interval for expired registrations (1 minute in ms) */
77
+ readonly CLEANUP_INTERVAL_MS: 60000;
78
+ };
79
+ /**
80
+ * Default store configuration
81
+ */
82
+ export declare const STORE_DEFAULTS: {
83
+ /** Default base directory for file stores */
84
+ readonly DATA_DIR: ".reqon-data";
85
+ /** Default subdirectory for executions */
86
+ readonly EXECUTIONS_DIR: "executions";
87
+ /** Default subdirectory for sync state */
88
+ readonly SYNC_DIR: "sync";
89
+ };
90
+ /**
91
+ * Default scheduler configuration
92
+ */
93
+ export declare const SCHEDULER_DEFAULTS: {
94
+ /** Default retry configuration for failed scheduled missions */
95
+ readonly MAX_RETRIES: 3;
96
+ /** Default delay between retries in seconds */
97
+ readonly RETRY_DELAY_SECONDS: 60;
98
+ };
99
+ /**
100
+ * Default execution configuration
101
+ */
102
+ export declare const EXECUTION_DEFAULTS: {
103
+ /** Whether development mode is enabled by default (uses file stores) */
104
+ readonly DEVELOPMENT_MODE: true;
105
+ /** Whether to persist execution state by default */
106
+ readonly PERSIST_STATE: false;
107
+ };
108
+ /** Type for rate limit strategy */
109
+ export type RateLimitStrategy = 'pause' | 'throttle' | 'fail';
110
+ /** Type for retry backoff strategy */
111
+ export type BackoffStrategy = 'exponential' | 'linear' | 'constant';
112
+ /**
113
+ * Merged configuration type utilities
114
+ */
115
+ export type HttpRetryConfig = {
116
+ maxAttempts?: number;
117
+ initialDelay?: number;
118
+ maxDelay?: number;
119
+ backoff?: BackoffStrategy;
120
+ };
121
+ export type RateLimitConfig = {
122
+ strategy?: RateLimitStrategy;
123
+ maxWait?: number;
124
+ notifyAt?: number;
125
+ fallbackRpm?: number;
126
+ };
127
+ export type CircuitBreakerConfig = {
128
+ failureThreshold?: number;
129
+ resetTimeout?: number;
130
+ successThreshold?: number;
131
+ failureWindow?: number;
132
+ failureStatusCodes?: number[];
133
+ countNetworkErrors?: boolean;
134
+ };
135
+ export type WebhookConfig = {
136
+ port?: number;
137
+ host?: string;
138
+ baseUrl?: string;
139
+ defaultTimeout?: number;
140
+ verbose?: boolean;
141
+ };