mova_agent 0.1.1

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 (287) hide show
  1. package/README.md +94 -0
  2. package/build/scripts/check_docs.d.ts +2 -0
  3. package/build/scripts/check_docs.d.ts.map +1 -0
  4. package/build/scripts/check_docs.js +48 -0
  5. package/build/scripts/check_docs.js.map +1 -0
  6. package/build/scripts/check_schema_paths.d.ts +3 -0
  7. package/build/scripts/check_schema_paths.d.ts.map +1 -0
  8. package/build/scripts/check_schema_paths.js +15 -0
  9. package/build/scripts/check_schema_paths.js.map +1 -0
  10. package/build/scripts/check_schema_paths_dist.d.ts +3 -0
  11. package/build/scripts/check_schema_paths_dist.d.ts.map +1 -0
  12. package/build/scripts/check_schema_paths_dist.js +16 -0
  13. package/build/scripts/check_schema_paths_dist.js.map +1 -0
  14. package/build/scripts/check_structure.d.ts +2 -0
  15. package/build/scripts/check_structure.d.ts.map +1 -0
  16. package/build/scripts/check_structure.js +59 -0
  17. package/build/scripts/check_structure.js.map +1 -0
  18. package/build/scripts/debug_validate.d.ts +3 -0
  19. package/build/scripts/debug_validate.d.ts.map +1 -0
  20. package/build/scripts/debug_validate.js +39 -0
  21. package/build/scripts/debug_validate.js.map +1 -0
  22. package/build/scripts/debug_validate2.d.ts +3 -0
  23. package/build/scripts/debug_validate2.d.ts.map +1 -0
  24. package/build/scripts/debug_validate2.js +18 -0
  25. package/build/scripts/debug_validate2.js.map +1 -0
  26. package/build/scripts/debug_validate_runtime.d.ts +3 -0
  27. package/build/scripts/debug_validate_runtime.d.ts.map +1 -0
  28. package/build/scripts/debug_validate_runtime.js +39 -0
  29. package/build/scripts/debug_validate_runtime.js.map +1 -0
  30. package/build/scripts/dump_ajv_schemas.d.ts +2 -0
  31. package/build/scripts/dump_ajv_schemas.d.ts.map +1 -0
  32. package/build/scripts/dump_ajv_schemas.js +22 -0
  33. package/build/scripts/dump_ajv_schemas.js.map +1 -0
  34. package/build/scripts/dump_resolved_schema.d.ts +3 -0
  35. package/build/scripts/dump_resolved_schema.d.ts.map +1 -0
  36. package/build/scripts/dump_resolved_schema.js +22 -0
  37. package/build/scripts/dump_resolved_schema.js.map +1 -0
  38. package/build/scripts/gen_types.d.ts +2 -0
  39. package/build/scripts/gen_types.d.ts.map +1 -0
  40. package/build/scripts/gen_types.js +133 -0
  41. package/build/scripts/gen_types.js.map +1 -0
  42. package/build/scripts/inspect_validation.d.ts +3 -0
  43. package/build/scripts/inspect_validation.d.ts.map +1 -0
  44. package/build/scripts/inspect_validation.js +36 -0
  45. package/build/scripts/inspect_validation.js.map +1 -0
  46. package/build/scripts/legacy/check_errors.d.ts +3 -0
  47. package/build/scripts/legacy/check_errors.d.ts.map +1 -0
  48. package/build/scripts/legacy/check_errors.js +14 -0
  49. package/build/scripts/legacy/check_errors.js.map +1 -0
  50. package/build/scripts/legacy/compile_test.d.ts +5 -0
  51. package/build/scripts/legacy/compile_test.d.ts.map +1 -0
  52. package/build/scripts/legacy/compile_test.js +25 -0
  53. package/build/scripts/legacy/compile_test.js.map +1 -0
  54. package/build/scripts/legacy/debug_neg.d.ts +6 -0
  55. package/build/scripts/legacy/debug_neg.d.ts.map +1 -0
  56. package/build/scripts/legacy/debug_neg.js +230 -0
  57. package/build/scripts/legacy/debug_neg.js.map +1 -0
  58. package/build/scripts/legacy/debug_quality_pos.d.ts +5 -0
  59. package/build/scripts/legacy/debug_quality_pos.d.ts.map +1 -0
  60. package/build/scripts/legacy/debug_quality_pos.js +195 -0
  61. package/build/scripts/legacy/debug_quality_pos.js.map +1 -0
  62. package/build/scripts/legacy/debug_test.d.ts +1 -0
  63. package/build/scripts/legacy/debug_test.d.ts.map +1 -0
  64. package/build/scripts/legacy/debug_test.js +51 -0
  65. package/build/scripts/legacy/debug_test.js.map +1 -0
  66. package/build/scripts/legacy/hello_test.d.ts +1 -0
  67. package/build/scripts/legacy/hello_test.d.ts.map +1 -0
  68. package/build/scripts/legacy/hello_test.js +3 -0
  69. package/build/scripts/legacy/hello_test.js.map +1 -0
  70. package/build/scripts/legacy/import_test.d.ts +2 -0
  71. package/build/scripts/legacy/import_test.d.ts.map +1 -0
  72. package/build/scripts/legacy/import_test.js +4 -0
  73. package/build/scripts/legacy/import_test.js.map +1 -0
  74. package/build/scripts/legacy/quality_neg.d.ts +6 -0
  75. package/build/scripts/legacy/quality_neg.d.ts.map +1 -0
  76. package/build/scripts/legacy/quality_neg.js +362 -0
  77. package/build/scripts/legacy/quality_neg.js.map +1 -0
  78. package/build/scripts/legacy/quality_pos.d.ts +7 -0
  79. package/build/scripts/legacy/quality_pos.d.ts.map +1 -0
  80. package/build/scripts/legacy/quality_pos.js +345 -0
  81. package/build/scripts/legacy/quality_pos.js.map +1 -0
  82. package/build/scripts/legacy/simple_test.d.ts +2 -0
  83. package/build/scripts/legacy/simple_test.d.ts.map +1 -0
  84. package/build/scripts/legacy/simple_test.js +4 -0
  85. package/build/scripts/legacy/simple_test.js.map +1 -0
  86. package/build/scripts/legacy/test.d.ts +1 -0
  87. package/build/scripts/legacy/test.d.ts.map +1 -0
  88. package/build/scripts/legacy/test.js +3 -0
  89. package/build/scripts/legacy/test.js.map +1 -0
  90. package/build/scripts/legacy/test_additional_props.d.ts +6 -0
  91. package/build/scripts/legacy/test_additional_props.d.ts.map +1 -0
  92. package/build/scripts/legacy/test_additional_props.js +45 -0
  93. package/build/scripts/legacy/test_additional_props.js.map +1 -0
  94. package/build/scripts/legacy/test_ajv_validation.d.ts +2 -0
  95. package/build/scripts/legacy/test_ajv_validation.d.ts.map +1 -0
  96. package/build/scripts/legacy/test_ajv_validation.js +35 -0
  97. package/build/scripts/legacy/test_ajv_validation.js.map +1 -0
  98. package/build/scripts/legacy/test_build.d.ts +2 -0
  99. package/build/scripts/legacy/test_build.d.ts.map +1 -0
  100. package/build/scripts/legacy/test_build.js +14 -0
  101. package/build/scripts/legacy/test_build.js.map +1 -0
  102. package/build/scripts/legacy/test_direct.d.ts +3 -0
  103. package/build/scripts/legacy/test_direct.d.ts.map +1 -0
  104. package/build/scripts/legacy/test_direct.js +24 -0
  105. package/build/scripts/legacy/test_direct.js.map +1 -0
  106. package/build/scripts/legacy/test_import.d.ts +2 -0
  107. package/build/scripts/legacy/test_import.d.ts.map +1 -0
  108. package/build/scripts/legacy/test_import.js +7 -0
  109. package/build/scripts/legacy/test_import.js.map +1 -0
  110. package/build/scripts/legacy/test_mova_schemas.d.ts +2 -0
  111. package/build/scripts/legacy/test_mova_schemas.d.ts.map +1 -0
  112. package/build/scripts/legacy/test_mova_schemas.js +37 -0
  113. package/build/scripts/legacy/test_mova_schemas.js.map +1 -0
  114. package/build/scripts/legacy/test_scenario_integration.d.ts +13 -0
  115. package/build/scripts/legacy/test_scenario_integration.d.ts.map +1 -0
  116. package/build/scripts/legacy/test_scenario_integration.js +156 -0
  117. package/build/scripts/legacy/test_scenario_integration.js.map +1 -0
  118. package/build/scripts/legacy/test_schemas.d.ts +2 -0
  119. package/build/scripts/legacy/test_schemas.d.ts.map +1 -0
  120. package/build/scripts/legacy/test_schemas.js +48 -0
  121. package/build/scripts/legacy/test_schemas.js.map +1 -0
  122. package/build/scripts/legacy/test_schemas_simple.d.ts +2 -0
  123. package/build/scripts/legacy/test_schemas_simple.d.ts.map +1 -0
  124. package/build/scripts/legacy/test_schemas_simple.js +36 -0
  125. package/build/scripts/legacy/test_schemas_simple.js.map +1 -0
  126. package/build/scripts/legacy/test_simple.d.ts +4 -0
  127. package/build/scripts/legacy/test_simple.d.ts.map +1 -0
  128. package/build/scripts/legacy/test_simple.js +17 -0
  129. package/build/scripts/legacy/test_simple.js.map +1 -0
  130. package/build/scripts/legacy/test_warnings.d.ts +6 -0
  131. package/build/scripts/legacy/test_warnings.d.ts.map +1 -0
  132. package/build/scripts/legacy/test_warnings.js +48 -0
  133. package/build/scripts/legacy/test_warnings.js.map +1 -0
  134. package/build/scripts/legacy/very_simple_test.d.ts +1 -0
  135. package/build/scripts/legacy/very_simple_test.d.ts.map +1 -0
  136. package/build/scripts/legacy/very_simple_test.js +3 -0
  137. package/build/scripts/legacy/very_simple_test.js.map +1 -0
  138. package/build/scripts/merge_and_validate.d.ts +6 -0
  139. package/build/scripts/merge_and_validate.d.ts.map +1 -0
  140. package/build/scripts/merge_and_validate.js +53 -0
  141. package/build/scripts/merge_and_validate.js.map +1 -0
  142. package/build/src/ajv/ajv_loader.d.ts +47 -0
  143. package/build/src/ajv/ajv_loader.d.ts.map +1 -0
  144. package/build/src/ajv/ajv_loader.js +274 -0
  145. package/build/src/ajv/ajv_loader.js.map +1 -0
  146. package/build/src/ajv/schema_registry.d.ts +19 -0
  147. package/build/src/ajv/schema_registry.d.ts.map +1 -0
  148. package/build/src/ajv/schema_registry.js +121 -0
  149. package/build/src/ajv/schema_registry.js.map +1 -0
  150. package/build/src/drivers/__tests__/registry.test.d.ts +2 -0
  151. package/build/src/drivers/__tests__/registry.test.d.ts.map +1 -0
  152. package/build/src/drivers/__tests__/registry.test.js +100 -0
  153. package/build/src/drivers/__tests__/registry.test.js.map +1 -0
  154. package/build/src/drivers/httpDriver.d.ts +3 -0
  155. package/build/src/drivers/httpDriver.d.ts.map +1 -0
  156. package/build/src/drivers/httpDriver.js +76 -0
  157. package/build/src/drivers/httpDriver.js.map +1 -0
  158. package/build/src/drivers/index.d.ts +20 -0
  159. package/build/src/drivers/index.d.ts.map +1 -0
  160. package/build/src/drivers/index.js +33 -0
  161. package/build/src/drivers/index.js.map +1 -0
  162. package/build/src/drivers/restrictedShellDriver.d.ts +12 -0
  163. package/build/src/drivers/restrictedShellDriver.d.ts.map +1 -0
  164. package/build/src/drivers/restrictedShellDriver.js +88 -0
  165. package/build/src/drivers/restrictedShellDriver.js.map +1 -0
  166. package/build/src/episodes/__tests__/episode_writer_atomic.test.d.ts +2 -0
  167. package/build/src/episodes/__tests__/episode_writer_atomic.test.d.ts.map +1 -0
  168. package/build/src/episodes/__tests__/episode_writer_atomic.test.js +86 -0
  169. package/build/src/episodes/__tests__/episode_writer_atomic.test.js.map +1 -0
  170. package/build/src/episodes/episode_writer.d.ts +100 -0
  171. package/build/src/episodes/episode_writer.d.ts.map +1 -0
  172. package/build/src/episodes/episode_writer.js +503 -0
  173. package/build/src/episodes/episode_writer.js.map +1 -0
  174. package/build/src/episodes/episode_writer_atomic.d.ts +10 -0
  175. package/build/src/episodes/episode_writer_atomic.d.ts.map +1 -0
  176. package/build/src/episodes/episode_writer_atomic.js +46 -0
  177. package/build/src/episodes/episode_writer_atomic.js.map +1 -0
  178. package/build/src/evidence/evidence_writer.d.ts +16 -0
  179. package/build/src/evidence/evidence_writer.d.ts.map +1 -0
  180. package/build/src/evidence/evidence_writer.js +78 -0
  181. package/build/src/evidence/evidence_writer.js.map +1 -0
  182. package/build/src/handlers/registry.d.ts +20 -0
  183. package/build/src/handlers/registry.d.ts.map +1 -0
  184. package/build/src/handlers/registry.js +38 -0
  185. package/build/src/handlers/registry.js.map +1 -0
  186. package/build/src/interpreter/interpreter.d.ts +90 -0
  187. package/build/src/interpreter/interpreter.d.ts.map +1 -0
  188. package/build/src/interpreter/interpreter.js +732 -0
  189. package/build/src/interpreter/interpreter.js.map +1 -0
  190. package/build/src/interpreter/interpreter_with_budget.d.ts +92 -0
  191. package/build/src/interpreter/interpreter_with_budget.d.ts.map +1 -0
  192. package/build/src/interpreter/interpreter_with_budget.js +678 -0
  193. package/build/src/interpreter/interpreter_with_budget.js.map +1 -0
  194. package/build/src/logging/logger.d.ts +83 -0
  195. package/build/src/logging/logger.d.ts.map +1 -0
  196. package/build/src/logging/logger.js +226 -0
  197. package/build/src/logging/logger.js.map +1 -0
  198. package/build/src/policy/policy_engine.d.ts +116 -0
  199. package/build/src/policy/policy_engine.d.ts.map +1 -0
  200. package/build/src/policy/policy_engine.js +296 -0
  201. package/build/src/policy/policy_engine.js.map +1 -0
  202. package/build/src/skills/skills_layer.d.ts +94 -0
  203. package/build/src/skills/skills_layer.d.ts.map +1 -0
  204. package/build/src/skills/skills_layer.js +405 -0
  205. package/build/src/skills/skills_layer.js.map +1 -0
  206. package/build/src/telemetry/token_budget_enforcer.d.ts +113 -0
  207. package/build/src/telemetry/token_budget_enforcer.d.ts.map +1 -0
  208. package/build/src/telemetry/token_budget_enforcer.js +253 -0
  209. package/build/src/telemetry/token_budget_enforcer.js.map +1 -0
  210. package/build/src/telemetry/token_budget_loader.d.ts +29 -0
  211. package/build/src/telemetry/token_budget_loader.d.ts.map +1 -0
  212. package/build/src/telemetry/token_budget_loader.js +112 -0
  213. package/build/src/telemetry/token_budget_loader.js.map +1 -0
  214. package/build/src/telemetry/token_meter.d.ts +65 -0
  215. package/build/src/telemetry/token_meter.d.ts.map +1 -0
  216. package/build/src/telemetry/token_meter.js +153 -0
  217. package/build/src/telemetry/token_meter.js.map +1 -0
  218. package/build/src/ux/cli_interface.d.ts +85 -0
  219. package/build/src/ux/cli_interface.d.ts.map +1 -0
  220. package/build/src/ux/cli_interface.js +651 -0
  221. package/build/src/ux/cli_interface.js.map +1 -0
  222. package/build/test/drivers/registry.test.d.ts +2 -0
  223. package/build/test/drivers/registry.test.d.ts.map +1 -0
  224. package/build/test/drivers/registry.test.js +100 -0
  225. package/build/test/drivers/registry.test.js.map +1 -0
  226. package/build/test/episodes/episode_writer_atomic.test.d.ts +2 -0
  227. package/build/test/episodes/episode_writer_atomic.test.d.ts.map +1 -0
  228. package/build/test/episodes/episode_writer_atomic.test.js +86 -0
  229. package/build/test/episodes/episode_writer_atomic.test.js.map +1 -0
  230. package/build/tests/ajv/check_schemas.d.ts +4 -0
  231. package/build/tests/ajv/check_schemas.d.ts.map +1 -0
  232. package/build/tests/ajv/check_schemas.js +27 -0
  233. package/build/tests/ajv/check_schemas.js.map +1 -0
  234. package/build/tests/ajv/final_test.d.ts +2 -0
  235. package/build/tests/ajv/final_test.d.ts.map +1 -0
  236. package/build/tests/ajv/final_test.js +42 -0
  237. package/build/tests/ajv/final_test.js.map +1 -0
  238. package/build/tests/ajv/simple_test.d.ts +2 -0
  239. package/build/tests/ajv/simple_test.d.ts.map +1 -0
  240. package/build/tests/ajv/simple_test.js +40 -0
  241. package/build/tests/ajv/simple_test.js.map +1 -0
  242. package/build/tests/ajv/test_schema_loading.d.ts +2 -0
  243. package/build/tests/ajv/test_schema_loading.d.ts.map +1 -0
  244. package/build/tests/ajv/test_schema_loading.js +39 -0
  245. package/build/tests/ajv/test_schema_loading.js.map +1 -0
  246. package/build/tools/mova-agent.d.ts +2 -0
  247. package/build/tools/mova-agent.d.ts.map +1 -0
  248. package/build/tools/mova-agent.js +15 -0
  249. package/build/tools/mova-agent.js.map +1 -0
  250. package/package.json +63 -0
  251. package/src/ajv/ajv_loader.ts +311 -0
  252. package/src/ajv/schema_registry.ts +92 -0
  253. package/src/drivers/httpDriver.ts +90 -0
  254. package/src/drivers/index.ts +48 -0
  255. package/src/drivers/restrictedShellDriver.ts +68 -0
  256. package/src/episodes/episode_writer.ts +675 -0
  257. package/src/episodes/episode_writer_atomic.ts +44 -0
  258. package/src/evidence/evidence_writer.ts +74 -0
  259. package/src/handlers/registry.ts +53 -0
  260. package/src/interpreter/interpreter.ts +1009 -0
  261. package/src/interpreter/interpreter_with_budget.ts +923 -0
  262. package/src/logging/logger.ts +269 -0
  263. package/src/policy/policy_engine.ts +395 -0
  264. package/src/skills/skills_layer.ts +510 -0
  265. package/src/telemetry/token_budget_enforcer.ts +338 -0
  266. package/src/telemetry/token_budget_loader.ts +133 -0
  267. package/src/telemetry/token_meter.ts +185 -0
  268. package/src/types/generated/ds.connector_core_v1.d.ts +116 -0
  269. package/src/types/generated/ds.instruction_profile_core_v1.d.ts +141 -0
  270. package/src/types/generated/ds.mova4_core_catalog_v1.d.ts +80 -0
  271. package/src/types/generated/ds.mova_agent_run_summary_v1.d.ts +120 -0
  272. package/src/types/generated/ds.mova_agent_step_v1.d.ts +53 -0
  273. package/src/types/generated/ds.mova_agent_tool_pool_v1.d.ts +152 -0
  274. package/src/types/generated/ds.mova_agent_validation_report_v1.d.ts +43 -0
  275. package/src/types/generated/ds.mova_episode_core_v1.d.ts +56 -0
  276. package/src/types/generated/ds.mova_schema_core_v1.d.ts +49 -0
  277. package/src/types/generated/ds.mova_token_budget_contract_v0.d.ts +140 -0
  278. package/src/types/generated/ds.runtime_binding_core_v1.d.ts +112 -0
  279. package/src/types/generated/ds.security_event_episode_core_v1.d.ts +138 -0
  280. package/src/types/generated/ds.ui_text_bundle_core_v1.d.ts +118 -0
  281. package/src/types/generated/env.instruction_profile_publish_v1.d.ts +159 -0
  282. package/src/types/generated/env.mova4_core_catalog_publish_v1.d.ts +25 -0
  283. package/src/types/generated/env.mova_agent_plan_v1.d.ts +40 -0
  284. package/src/types/generated/env.mova_agent_request_v1.d.ts +43 -0
  285. package/src/types/generated/env.security_event_store_v1.d.ts +191 -0
  286. package/src/types/generated/index.d.ts +25 -0
  287. package/src/ux/cli_interface.ts +719 -0
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ajvLoader = exports.AjvSchemaLoader = void 0;
7
+ exports.validate = validate;
8
+ const ajv_1 = __importDefault(require("ajv"));
9
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const path_1 = __importDefault(require("path"));
12
+ // Класс для загрузки и валидации схем
13
+ class AjvSchemaLoader {
14
+ ajv;
15
+ schemaCache;
16
+ schemaSourcePaths;
17
+ // Getter to access the AJV instance for advanced validation
18
+ get getAjv() {
19
+ return this.ajv;
20
+ }
21
+ constructor() {
22
+ // Инициализация AJV с нужными опциями
23
+ this.ajv = new ajv_1.default({
24
+ strict: false, // Disable strict mode to handle complex schemas
25
+ allErrors: true,
26
+ validateFormats: true,
27
+ // Разрешить использование метасхем
28
+ validateSchema: false, // Отключаем валидацию схем при добавлении
29
+ // Для поддержки JSON Schema Draft 2020-12
30
+ $data: true,
31
+ });
32
+ // Добавляем поддержку форматов
33
+ (0, ajv_formats_1.default)(this.ajv);
34
+ // Кэш для загруженных схем
35
+ this.schemaCache = new Map();
36
+ this.schemaSourcePaths = new Map();
37
+ }
38
+ /**
39
+ * Загружает схему из vendor/MOVA или из локальных схем проекта
40
+ */
41
+ async loadSchema(schemaId) {
42
+ // Определяем путь к схеме
43
+ let schemaPath;
44
+ let isProjectSchema = false;
45
+ // First try local project schemas, then vendor schemas as fallback
46
+ const possibleBasePaths = [
47
+ path_1.default.resolve(__dirname, '../../../schemas'), // Local schemas when built to build/src/ajv/
48
+ path_1.default.resolve(__dirname, '../../schemas'), // Alternative local path
49
+ path_1.default.resolve(__dirname, '../../../../schemas'), // Another local path option
50
+ // Vendor schemas as fallback for MOVA schemas not found locally
51
+ path_1.default.resolve(__dirname, '../../../vendor/MOVA/schemas'), // From build/src/ajv/
52
+ path_1.default.resolve(__dirname, '../../vendor/MOVA/schemas'), // Alternative from build/src/ajv/
53
+ path_1.default.resolve(__dirname, '../../../../vendor/MOVA/schemas'), // From build/tools/ or similar
54
+ ];
55
+ let basePathFound = '';
56
+ for (const basePath of possibleBasePaths) {
57
+ const testPath = path_1.default.join(basePath, `${schemaId}.schema.json`);
58
+ if (await fs_extra_1.default.pathExists(testPath)) {
59
+ basePathFound = basePath;
60
+ break;
61
+ }
62
+ }
63
+ if (basePathFound) {
64
+ schemaPath = path_1.default.join(basePathFound, `${schemaId}.schema.json`);
65
+ }
66
+ else {
67
+ // If no path was found, use the last possible path as fallback
68
+ schemaPath = path_1.default.join(possibleBasePaths[possibleBasePaths.length - 1], `${schemaId}.schema.json`);
69
+ }
70
+ const cachedSchema = this.schemaCache.get(schemaId);
71
+ const cachedPath = this.schemaSourcePaths.get(schemaId);
72
+ if (cachedSchema && cachedPath === schemaPath) {
73
+ return cachedSchema;
74
+ }
75
+ try {
76
+ // Загружаем схему из файла
77
+ const schemaContent = await fs_extra_1.default.readJson(schemaPath);
78
+ // Кэшируем схему
79
+ this.schemaCache.set(schemaId, schemaContent);
80
+ this.schemaSourcePaths.set(schemaId, schemaPath);
81
+ return schemaContent;
82
+ }
83
+ catch (error) {
84
+ // Если это схема проекта и файл не найден, попробуем найти в директории schemas с расширением
85
+ if (isProjectSchema && !(await fs_extra_1.default.pathExists(schemaPath))) {
86
+ // Пробуем альтернативные пути для схем проекта
87
+ for (const basePath of [
88
+ path_1.default.resolve(__dirname, '../../../schemas'),
89
+ path_1.default.resolve(__dirname, '../../schemas'),
90
+ ]) {
91
+ const altSchemaPath = path_1.default.join(basePath, `${schemaId}.schema.json`);
92
+ if (await fs_extra_1.default.pathExists(altSchemaPath)) {
93
+ const schemaContent = await fs_extra_1.default.readJson(altSchemaPath);
94
+ this.schemaCache.set(schemaId, schemaContent);
95
+ this.schemaSourcePaths.set(schemaId, altSchemaPath);
96
+ return schemaContent;
97
+ }
98
+ }
99
+ }
100
+ throw new Error(`Failed to load schema ${schemaId} from ${schemaPath}: ${error.message}`);
101
+ }
102
+ }
103
+ /**
104
+ * Регистрирует схему в AJV
105
+ */
106
+ async registerSchema(schemaId) {
107
+ const schema = await this.loadSchema(schemaId);
108
+ // Проверяем, что схема имеет правильный $id
109
+ if (!schema.$id) {
110
+ // Если у схемы нет $id, устанавливаем его
111
+ schema.$id = schemaId;
112
+ }
113
+ // Проверяем, не зарегистрирована ли схема уже
114
+ if (!this.ajv.getSchema(schema.$id)) {
115
+ // Компилируем схему в AJV
116
+ try {
117
+ this.ajv.addSchema(schema);
118
+ }
119
+ catch (error) {
120
+ // Если ошибка связана с отсутствием зависимостей, это нормально
121
+ // Мы должны сначала загрузить все зависимости, а затем зарегистрировать схему
122
+ if (error.message &&
123
+ (error.message.includes('no schema') || error.message.includes('$ref'))) {
124
+ // Попробуем рекурсивно загрузить зависимости
125
+ await this.loadSchemaDependencies(schema);
126
+ // После загрузки зависимостей, повторно попробуем зарегистрировать схему
127
+ // Remove existing schema first if it was added partially
128
+ if (this.ajv.getSchema(schema.$id)) {
129
+ this.ajv.removeSchema(schema.$id);
130
+ }
131
+ this.ajv.addSchema(schema);
132
+ }
133
+ else {
134
+ if (Array.isArray(error) || (error && typeof error === 'object' && 'message' in error)) {
135
+ throw new Error(`Schema ${schemaId} validation error: ${error.message}`);
136
+ }
137
+ else {
138
+ throw error;
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Загружает зависимости схемы рекурсивно
146
+ */
147
+ async loadSchemaDependencies(schema) {
148
+ if (!schema || typeof schema !== 'object') {
149
+ return;
150
+ }
151
+ // Ищем ссылки на другие схемы
152
+ if (schema.$ref) {
153
+ const ref = schema.$ref;
154
+ if (ref.startsWith('https://') || ref.startsWith('http://')) {
155
+ // Это внешняя ссылка, извлекаем ID схемы из URL
156
+ const schemaId = this.extractSchemaIdFromUrl(ref);
157
+ if (schemaId) {
158
+ await this.registerSchema(schemaId);
159
+ }
160
+ }
161
+ else if (ref.includes('.schema.json')) {
162
+ // Это ссылка на файл, извлекаем ID схемы из имени файла
163
+ const schemaId = ref.replace('.schema.json', '').replace('/', '.');
164
+ await this.registerSchema(schemaId);
165
+ }
166
+ }
167
+ // Рекурсивно обрабатываем свойства схемы
168
+ for (const key in schema) {
169
+ if (typeof schema[key] === 'object' && schema[key] !== null) {
170
+ if (Array.isArray(schema[key])) {
171
+ for (const item of schema[key]) {
172
+ await this.loadSchemaDependencies(item);
173
+ }
174
+ }
175
+ else {
176
+ await this.loadSchemaDependencies(schema[key]);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Извлекает ID схемы из URL
183
+ */
184
+ extractSchemaIdFromUrl(url) {
185
+ // Извлекаем имя файла из URL
186
+ const parts = url.split('/');
187
+ const fileName = parts[parts.length - 1];
188
+ if (fileName.endsWith('.schema.json')) {
189
+ return fileName.replace('.schema.json', '');
190
+ }
191
+ return null;
192
+ }
193
+ /**
194
+ * Валидирует данные против схемы
195
+ */
196
+ async validate(schemaId, data) {
197
+ try {
198
+ // Проверяем, зарегистрирована ли схема
199
+ if (!this.ajv.getSchema(schemaId)) {
200
+ await this.registerSchema(schemaId);
201
+ }
202
+ // Получаем валидатор для схемы
203
+ const validate = this.ajv.getSchema(schemaId);
204
+ if (!validate) {
205
+ // If schema is not compiled, try to compile it directly
206
+ const schema = await this.loadSchema(schemaId);
207
+ if (!schema.$id) {
208
+ schema.$id = schemaId;
209
+ }
210
+ // Compile the schema directly
211
+ const compiledValidate = this.ajv.compile(schema);
212
+ // Execute validation with the compiled function
213
+ const valid = compiledValidate(data);
214
+ if (valid) {
215
+ return { ok: true };
216
+ }
217
+ else {
218
+ // Формируем сообщения об ошибках
219
+ const errors = compiledValidate.errors?.map((error) => `${error.instancePath || 'data'} ${error.message || ''}`) || [];
220
+ return {
221
+ ok: false,
222
+ errors,
223
+ };
224
+ }
225
+ }
226
+ // Выполняем валидацию
227
+ const valid = validate(data);
228
+ if (valid) {
229
+ return { ok: true };
230
+ }
231
+ else {
232
+ // Формируем сообщения об ошибках
233
+ const errors = validate.errors?.map((error) => `${error.instancePath || 'data'} ${error.message || ''}`) || [];
234
+ return {
235
+ ok: false,
236
+ errors,
237
+ };
238
+ }
239
+ }
240
+ catch (error) {
241
+ return {
242
+ ok: false,
243
+ errors: [`Validation error: ${error.message}`],
244
+ };
245
+ }
246
+ }
247
+ /**
248
+ * Проверяет, существует ли схема
249
+ */
250
+ async schemaExists(schemaId) {
251
+ try {
252
+ await this.loadSchema(schemaId);
253
+ return true;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ }
259
+ /**
260
+ * Возвращает список всех загруженных схем
261
+ */
262
+ getLoadedSchemas() {
263
+ return Array.from(this.schemaCache.keys());
264
+ }
265
+ }
266
+ exports.AjvSchemaLoader = AjvSchemaLoader;
267
+ // Экспортируем экземпляр загрузчика схем
268
+ const ajvLoader = new AjvSchemaLoader();
269
+ exports.ajvLoader = ajvLoader;
270
+ // Функция validate, которая требуется по спецификации
271
+ async function validate(schemaId, data) {
272
+ return await ajvLoader.validate(schemaId, data);
273
+ }
274
+ //# sourceMappingURL=ajv_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajv_loader.js","sourceRoot":"","sources":["../../../src/ajv/ajv_loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { AjvSchemaLoader } from './ajv_loader';
2
+ declare class SchemaRegistry {
3
+ private loader;
4
+ constructor(loader: AjvSchemaLoader);
5
+ /**
6
+ * Loads all vendor/MOVA schemas
7
+ */
8
+ loadAllMovaSchemas(): Promise<void>;
9
+ /**
10
+ * Loads all local project schemas
11
+ */
12
+ loadAllLocalSchemas(): Promise<void>;
13
+ /**
14
+ * Loads all schemas (both vendor and local)
15
+ */
16
+ loadAllSchemas(): Promise<void>;
17
+ }
18
+ export { SchemaRegistry };
19
+ //# sourceMappingURL=schema_registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema_registry.d.ts","sourceRoot":"","sources":["../../../src/ajv/schema_registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAK/C,cAAM,cAAc;IAClB,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAInC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBzC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB1C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBtC;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SchemaRegistry = void 0;
37
+ const fs = __importStar(require("fs-extra"));
38
+ const path = __importStar(require("path"));
39
+ const logger_1 = require("../logging/logger");
40
+ class SchemaRegistry {
41
+ loader;
42
+ constructor(loader) {
43
+ this.loader = loader;
44
+ }
45
+ /**
46
+ * Loads all vendor/MOVA schemas
47
+ */
48
+ async loadAllMovaSchemas() {
49
+ const logger = (0, logger_1.getLogger)();
50
+ const movaSchemasDir = path.join(__dirname, '..', '..', '..', 'vendor', 'MOVA', 'schemas');
51
+ if (await fs.pathExists(movaSchemasDir)) {
52
+ const schemaFiles = await fs.readdir(movaSchemasDir);
53
+ for (const file of schemaFiles) {
54
+ if (file.endsWith('.schema.json')) {
55
+ const schemaId = file.replace('.schema.json', '');
56
+ logger.info(`Loading MOVA schema: ${schemaId}`);
57
+ try {
58
+ await this.loader.registerSchema(schemaId);
59
+ logger.info(`✓ Successfully loaded MOVA schema: ${schemaId}`);
60
+ }
61
+ catch (error) {
62
+ logger.error(`✗ Failed to load MOVA schema ${schemaId}: ${error.message}`);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ else {
68
+ logger.error(`MOVA schemas directory not found: ${movaSchemasDir}`);
69
+ }
70
+ }
71
+ /**
72
+ * Loads all local project schemas
73
+ */
74
+ async loadAllLocalSchemas() {
75
+ const logger = (0, logger_1.getLogger)();
76
+ const localSchemasDir = path.join(__dirname, '..', '..', '..', 'schemas');
77
+ if (await fs.pathExists(localSchemasDir)) {
78
+ const schemaFiles = await fs.readdir(localSchemasDir);
79
+ for (const file of schemaFiles) {
80
+ if (file.endsWith('.schema.json')) {
81
+ const schemaId = file.replace('.schema.json', '');
82
+ logger.info(`Loading local schema: ${schemaId}`);
83
+ try {
84
+ await this.loader.registerSchema(schemaId);
85
+ logger.info(`✓ Successfully loaded local schema: ${schemaId}`);
86
+ }
87
+ catch (error) {
88
+ logger.error(`✗ Failed to load local schema ${schemaId}: ${error.message}`);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ else {
94
+ logger.error(`Local schemas directory not found: ${localSchemasDir}`);
95
+ }
96
+ }
97
+ /**
98
+ * Loads all schemas (both vendor and local)
99
+ */
100
+ async loadAllSchemas() {
101
+ const logger = (0, logger_1.getLogger)();
102
+ logger.info('Loading all MOVA schemas...');
103
+ // Register base core schemas first to ensure $ref resolution
104
+ const coreOrder = ['ds.mova_schema_core_v1', 'ds.mova_episode_core_v1'];
105
+ for (const coreId of coreOrder) {
106
+ try {
107
+ logger.info(`Preloading core schema: ${coreId}`);
108
+ await this.loader.registerSchema(coreId);
109
+ logger.info(`✓ Preloaded core schema: ${coreId}`);
110
+ }
111
+ catch (e) {
112
+ logger.error(`✗ Preload failed for core schema ${coreId}: ${e.message}`);
113
+ }
114
+ }
115
+ await this.loadAllMovaSchemas();
116
+ logger.info('Loading all local schemas...');
117
+ await this.loadAllLocalSchemas();
118
+ }
119
+ }
120
+ exports.SchemaRegistry = SchemaRegistry;
121
+ //# sourceMappingURL=schema_registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema_registry.js","sourceRoot":"","sources":["../../../src/ajv/schema_registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../../../src/drivers/__tests__/registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const index_1 = require("../index");
8
+ const httpDriver_1 = require("../httpDriver");
9
+ const restrictedShellDriver_1 = require("../restrictedShellDriver");
10
+ async function testRegisterAndGet() {
11
+ (0, index_1.registerDriver)('test_driver', () => ({
12
+ async execute(input) {
13
+ return { echo: input };
14
+ },
15
+ }));
16
+ const driver = (0, index_1.getDriver)('test_driver');
17
+ const result = await driver.execute({ ping: true });
18
+ assert_1.default.deepStrictEqual(result, { echo: { ping: true } });
19
+ }
20
+ async function testGetUnknownThrows() {
21
+ let threw = false;
22
+ try {
23
+ (0, index_1.getDriver)('unknown_driver');
24
+ }
25
+ catch (error) {
26
+ threw = true;
27
+ assert_1.default.ok(error.message.includes('Driver not found'));
28
+ }
29
+ assert_1.default.ok(threw, 'Expected getDriver to throw for unknown driver');
30
+ }
31
+ async function testHttpDriver() {
32
+ const driver = (0, httpDriver_1.httpDriverFactory)();
33
+ // Mock fetch
34
+ const originalFetch = global.fetch;
35
+ global.fetch = (async (url, init) => {
36
+ return {
37
+ status: 200,
38
+ async text() {
39
+ return JSON.stringify({ url, method: init?.method || 'GET' });
40
+ },
41
+ headers: {
42
+ entries: () => [],
43
+ },
44
+ };
45
+ });
46
+ const result = await driver.execute({ url: 'https://example.com', method: 'GET' }, { allowlist: ['https://example.com'] });
47
+ assert_1.default.strictEqual(result.status, 200);
48
+ assert_1.default.deepStrictEqual(result.body, { url: 'https://example.com', method: 'GET' });
49
+ // disallow
50
+ let blocked = false;
51
+ try {
52
+ await driver.execute({ url: 'https://not-allowed.test' }, { allowlist: ['https://example.com'] });
53
+ }
54
+ catch (err) {
55
+ blocked = true;
56
+ assert_1.default.ok(err.message.includes('allowlisted'));
57
+ }
58
+ assert_1.default.ok(blocked, 'Should block URL not in allowlist');
59
+ global.fetch = originalFetch;
60
+ }
61
+ async function testRestrictedShellDriver() {
62
+ const driver = (0, restrictedShellDriver_1.restrictedShellDriverFactory)();
63
+ // Mock execFile runner
64
+ const originalRunner = (0, restrictedShellDriver_1.__getExecFileRunner)();
65
+ (0, restrictedShellDriver_1.__setExecFileRunner)(async (cmd, args = []) => {
66
+ const safeArgs = args ?? [];
67
+ return {
68
+ stdout: `ran ${cmd} ${safeArgs.join(' ')}`,
69
+ stderr: '',
70
+ };
71
+ });
72
+ const result = await driver.execute({ command: 'echo', args: ['hello'] }, { allowlist: ['echo'] });
73
+ assert_1.default.strictEqual(result.exit_code, 0);
74
+ assert_1.default.ok(result.stdout.includes('echo hello'));
75
+ let blocked = false;
76
+ try {
77
+ await driver.execute({ command: 'rm', args: ['-rf', '/'] }, { allowlist: ['echo'] });
78
+ }
79
+ catch (err) {
80
+ blocked = true;
81
+ assert_1.default.ok(err.message.includes('allowlisted'));
82
+ }
83
+ assert_1.default.ok(blocked, 'Should block command not in allowlist');
84
+ // restore
85
+ (0, restrictedShellDriver_1.__setExecFileRunner)(originalRunner);
86
+ }
87
+ async function run() {
88
+ await testRegisterAndGet();
89
+ await testGetUnknownThrows();
90
+ await testHttpDriver();
91
+ await testRestrictedShellDriver();
92
+ // eslint-disable-next-line no-console
93
+ console.log('driver registry tests passed');
94
+ }
95
+ run().catch((err) => {
96
+ // eslint-disable-next-line no-console
97
+ console.error(err);
98
+ process.exit(1);
99
+ });
100
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../../src/drivers/__tests__/registry.test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,oCAAqD;AACrD,8CAAkD;AAClD,oEAIkC;AAElC,KAAK,UAAU,kBAAkB;IAC/B,IAAA,sBAAc,EAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,KAAU;YACtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,aAAa,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,IAAA,iBAAS,EAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,KAAK,GAAG,IAAI,CAAC;QACb,gBAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,gBAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gDAAgD,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,MAAM,GAAG,IAAA,8BAAiB,GAAE,CAAC;IAEnC,aAAa;IACb,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAQ,EAAE,IAAU,EAAE,EAAE;QAC7C,OAAO;YACL,MAAM,EAAE,GAAG;YACX,KAAK,CAAC,IAAI;gBACR,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;aAClB;SACK,CAAC;IACX,CAAC,CAAQ,CAAC;IAEV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,EAC7C,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,CACvC,CAAC;IAEF,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnF,WAAW;IACX,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAClB,EAAE,GAAG,EAAE,0BAA0B,EAAE,EACnC,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,CACvC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;QACf,gBAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,gBAAM,CAAC,EAAE,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;IAExD,MAAM,CAAC,KAAK,GAAG,aAAoB,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,yBAAyB;IACtC,MAAM,MAAM,GAAG,IAAA,oDAA4B,GAAE,CAAC;IAE9C,uBAAuB;IACvB,MAAM,cAAc,GAAG,IAAA,2CAAmB,GAAE,CAAC;IAC7C,IAAA,2CAAmB,EAAC,KAAK,EAAE,GAAW,EAAE,OAAiC,EAAE,EAAE,EAAE;QAC7E,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1C,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EACpC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CACxB,CAAC;IACF,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;QACf,gBAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,gBAAM,CAAC,EAAE,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;IAC5D,UAAU;IACV,IAAA,2CAAmB,EAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,kBAAkB,EAAE,CAAC;IAC3B,MAAM,oBAAoB,EAAE,CAAC;IAC7B,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,yBAAyB,EAAE,CAAC;IAClC,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Driver } from './index';
2
+ export declare function httpDriverFactory(): Driver;
3
+ //# sourceMappingURL=httpDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpDriver.d.ts","sourceRoot":"","sources":["../../../src/drivers/httpDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AA8BhD,wBAAgB,iBAAiB,IAAI,MAAM,CA2D1C"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpDriverFactory = httpDriverFactory;
4
+ function isUrlAllowed(url, allowlist) {
5
+ if (!allowlist || allowlist.length === 0)
6
+ return true;
7
+ return allowlist.some((allowed) => {
8
+ try {
9
+ const inputUrl = new URL(url);
10
+ const allowedUrl = new URL(allowed);
11
+ return (inputUrl.hostname === allowedUrl.hostname &&
12
+ inputUrl.protocol === allowedUrl.protocol &&
13
+ (inputUrl.port === allowedUrl.port || allowedUrl.port === ''));
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ });
19
+ }
20
+ function httpDriverFactory() {
21
+ return {
22
+ async execute(input, context) {
23
+ const url = input.url || input.endpoint;
24
+ if (!url) {
25
+ throw new Error('HTTP driver requires url or endpoint');
26
+ }
27
+ if (!isUrlAllowed(url, context?.allowlist)) {
28
+ throw new Error(`Destination not allowlisted: ${url}`);
29
+ }
30
+ const method = (input.method || 'GET').toUpperCase();
31
+ const controller = new AbortController();
32
+ const timeout = context?.limits?.timeout_ms ?? 5000;
33
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
34
+ try {
35
+ const fetchOptions = {
36
+ method,
37
+ headers: input.headers,
38
+ signal: controller.signal,
39
+ };
40
+ if (method !== 'GET' && method !== 'HEAD' && input.body !== undefined) {
41
+ fetchOptions.body =
42
+ typeof input.body === 'string' ? input.body : JSON.stringify(input.body);
43
+ fetchOptions.headers = {
44
+ 'Content-Type': 'application/json',
45
+ ...(input.headers || {}),
46
+ };
47
+ }
48
+ const response = await fetch(url, fetchOptions);
49
+ const text = await response.text();
50
+ let parsed = text;
51
+ try {
52
+ parsed = JSON.parse(text);
53
+ }
54
+ catch {
55
+ // leave as text if not JSON
56
+ }
57
+ return {
58
+ status: response.status,
59
+ headers: Object.fromEntries(response.headers.entries()),
60
+ body: parsed,
61
+ url,
62
+ };
63
+ }
64
+ catch (error) {
65
+ if (error.name === 'AbortError') {
66
+ throw new Error(`HTTP request timed out after ${timeout}ms`);
67
+ }
68
+ throw new Error(`HTTP request failed: ${error.message}`);
69
+ }
70
+ finally {
71
+ clearTimeout(timeoutId);
72
+ }
73
+ },
74
+ };
75
+ }
76
+ //# sourceMappingURL=httpDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpDriver.js","sourceRoot":"","sources":["../../../src/drivers/httpDriver.ts"],"names":[],"mappings":"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"}