@wirebench/engine 2.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 (583) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/assert/contract.d.ts +3 -0
  4. package/dist/assert/contract.js +17 -0
  5. package/dist/assert/index.d.ts +4 -0
  6. package/dist/assert/index.js +27 -0
  7. package/dist/assert/match.d.ts +3 -0
  8. package/dist/assert/match.js +58 -0
  9. package/dist/assert/model.d.ts +73 -0
  10. package/dist/assert/model.js +8 -0
  11. package/dist/assert/schema.d.ts +34 -0
  12. package/dist/assert/schema.js +46 -0
  13. package/dist/assert/sla.d.ts +3 -0
  14. package/dist/assert/sla.js +8 -0
  15. package/dist/assert/soap-fault.d.ts +3 -0
  16. package/dist/assert/soap-fault.js +20 -0
  17. package/dist/assert/status.d.ts +3 -0
  18. package/dist/assert/status.js +14 -0
  19. package/dist/errors.d.ts +77 -0
  20. package/dist/errors.js +121 -0
  21. package/dist/fs.d.ts +35 -0
  22. package/dist/fs.js +64 -0
  23. package/dist/generate.d.ts +12 -0
  24. package/dist/generate.js +14 -0
  25. package/dist/grpc/browser.d.ts +11 -0
  26. package/dist/grpc/browser.js +9 -0
  27. package/dist/grpc/cache.d.ts +113 -0
  28. package/dist/grpc/cache.js +244 -0
  29. package/dist/grpc/call.d.ts +64 -0
  30. package/dist/grpc/call.js +72 -0
  31. package/dist/grpc/codec.d.ts +29 -0
  32. package/dist/grpc/codec.js +416 -0
  33. package/dist/grpc/command.d.ts +23 -0
  34. package/dist/grpc/command.js +91 -0
  35. package/dist/grpc/expand.d.ts +25 -0
  36. package/dist/grpc/expand.js +52 -0
  37. package/dist/grpc/framing.d.ts +28 -0
  38. package/dist/grpc/framing.js +61 -0
  39. package/dist/grpc/import.d.ts +47 -0
  40. package/dist/grpc/import.js +88 -0
  41. package/dist/grpc/model.d.ts +179 -0
  42. package/dist/grpc/model.js +91 -0
  43. package/dist/grpc/proto/describe.d.ts +92 -0
  44. package/dist/grpc/proto/describe.js +205 -0
  45. package/dist/grpc/proto/load.d.ts +35 -0
  46. package/dist/grpc/proto/load.js +112 -0
  47. package/dist/grpc/proto/sample.d.ts +21 -0
  48. package/dist/grpc/proto/sample.js +79 -0
  49. package/dist/grpc/proto/well-known.d.ts +42 -0
  50. package/dist/grpc/proto/well-known.js +143 -0
  51. package/dist/grpc/reconcile.d.ts +42 -0
  52. package/dist/grpc/reconcile.js +153 -0
  53. package/dist/grpc/reflection/client.d.ts +70 -0
  54. package/dist/grpc/reflection/client.js +197 -0
  55. package/dist/grpc/reflection/descriptors.d.ts +69 -0
  56. package/dist/grpc/reflection/descriptors.js +140 -0
  57. package/dist/grpc/reflection/proto.d.ts +33 -0
  58. package/dist/grpc/reflection/proto.js +144 -0
  59. package/dist/grpc/send.d.ts +132 -0
  60. package/dist/grpc/send.js +435 -0
  61. package/dist/grpc/shape.d.ts +29 -0
  62. package/dist/grpc/shape.js +36 -0
  63. package/dist/grpc/status.d.ts +21 -0
  64. package/dist/grpc/status.js +62 -0
  65. package/dist/grpc/target.d.ts +21 -0
  66. package/dist/grpc/target.js +66 -0
  67. package/dist/http/auth/apply.d.ts +37 -0
  68. package/dist/http/auth/apply.js +74 -0
  69. package/dist/http/auth/basic.d.ts +36 -0
  70. package/dist/http/auth/basic.js +69 -0
  71. package/dist/http/auth/md4.d.ts +13 -0
  72. package/dist/http/auth/md4.js +81 -0
  73. package/dist/http/auth/ntlm-transport.d.ts +61 -0
  74. package/dist/http/auth/ntlm-transport.js +97 -0
  75. package/dist/http/auth/ntlm.d.ts +190 -0
  76. package/dist/http/auth/ntlm.js +377 -0
  77. package/dist/http/client.d.ts +73 -0
  78. package/dist/http/client.js +403 -0
  79. package/dist/http/curl-flags.d.ts +15 -0
  80. package/dist/http/curl-flags.js +95 -0
  81. package/dist/http/curl.d.ts +94 -0
  82. package/dist/http/curl.js +245 -0
  83. package/dist/http/decompress.d.ts +7 -0
  84. package/dist/http/decompress.js +22 -0
  85. package/dist/http/errors.d.ts +22 -0
  86. package/dist/http/errors.js +144 -0
  87. package/dist/http/failed-request.d.ts +27 -0
  88. package/dist/http/failed-request.js +48 -0
  89. package/dist/http/headers.d.ts +15 -0
  90. package/dist/http/headers.js +50 -0
  91. package/dist/http/heredoc.d.ts +25 -0
  92. package/dist/http/heredoc.js +74 -0
  93. package/dist/http/proxy.d.ts +103 -0
  94. package/dist/http/proxy.js +168 -0
  95. package/dist/http/raw-capture.d.ts +23 -0
  96. package/dist/http/raw-capture.js +57 -0
  97. package/dist/http/timings.d.ts +79 -0
  98. package/dist/http/timings.js +212 -0
  99. package/dist/http/tls.d.ts +111 -0
  100. package/dist/http/tls.js +167 -0
  101. package/dist/http/types.d.ts +125 -0
  102. package/dist/http/types.js +6 -0
  103. package/dist/import-detect.d.ts +26 -0
  104. package/dist/import-detect.js +169 -0
  105. package/dist/import.d.ts +20 -0
  106. package/dist/import.js +163 -0
  107. package/dist/index.d.ts +272 -0
  108. package/dist/index.js +157 -0
  109. package/dist/json/cursor.d.ts +43 -0
  110. package/dist/json/cursor.js +168 -0
  111. package/dist/operations.d.ts +12 -0
  112. package/dist/operations.js +52 -0
  113. package/dist/project/attachments-cache.d.ts +80 -0
  114. package/dist/project/attachments-cache.js +186 -0
  115. package/dist/project/endpoints.d.ts +23 -0
  116. package/dist/project/endpoints.js +47 -0
  117. package/dist/project/environments.d.ts +68 -0
  118. package/dist/project/environments.js +124 -0
  119. package/dist/project/fs.d.ts +45 -0
  120. package/dist/project/fs.js +78 -0
  121. package/dist/project/history.d.ts +171 -0
  122. package/dist/project/history.js +179 -0
  123. package/dist/project/keystores.d.ts +24 -0
  124. package/dist/project/keystores.js +66 -0
  125. package/dist/project/load.d.ts +44 -0
  126. package/dist/project/load.js +634 -0
  127. package/dist/project/migrate.d.ts +27 -0
  128. package/dist/project/migrate.js +46 -0
  129. package/dist/project/model.d.ts +401 -0
  130. package/dist/project/model.js +126 -0
  131. package/dist/project/paths.d.ts +134 -0
  132. package/dist/project/paths.js +259 -0
  133. package/dist/project/preferences.d.ts +318 -0
  134. package/dist/project/preferences.js +239 -0
  135. package/dist/project/properties.d.ts +97 -0
  136. package/dist/project/properties.js +356 -0
  137. package/dist/project/save.d.ts +65 -0
  138. package/dist/project/save.js +295 -0
  139. package/dist/project/schema.d.ts +1329 -0
  140. package/dist/project/schema.js +737 -0
  141. package/dist/project/serialize.d.ts +42 -0
  142. package/dist/project/serialize.js +385 -0
  143. package/dist/project/wss-configs.d.ts +40 -0
  144. package/dist/project/wss-configs.js +142 -0
  145. package/dist/project/yaml.d.ts +17 -0
  146. package/dist/project/yaml.js +39 -0
  147. package/dist/redact/index.d.ts +77 -0
  148. package/dist/redact/index.js +328 -0
  149. package/dist/redact/literal.d.ts +12 -0
  150. package/dist/redact/literal.js +68 -0
  151. package/dist/rest/auth.d.ts +53 -0
  152. package/dist/rest/auth.js +80 -0
  153. package/dist/rest/body.d.ts +61 -0
  154. package/dist/rest/body.js +184 -0
  155. package/dist/rest/browser.d.ts +12 -0
  156. package/dist/rest/browser.js +11 -0
  157. package/dist/rest/cookies.d.ts +41 -0
  158. package/dist/rest/cookies.js +102 -0
  159. package/dist/rest/curl.d.ts +75 -0
  160. package/dist/rest/curl.js +417 -0
  161. package/dist/rest/expand.d.ts +35 -0
  162. package/dist/rest/expand.js +104 -0
  163. package/dist/rest/model.d.ts +247 -0
  164. package/dist/rest/model.js +118 -0
  165. package/dist/rest/oauth2.d.ts +118 -0
  166. package/dist/rest/oauth2.js +212 -0
  167. package/dist/rest/openapi/cache.d.ts +54 -0
  168. package/dist/rest/openapi/cache.js +128 -0
  169. package/dist/rest/openapi/import.d.ts +67 -0
  170. package/dist/rest/openapi/import.js +91 -0
  171. package/dist/rest/openapi/map.d.ts +102 -0
  172. package/dist/rest/openapi/map.js +477 -0
  173. package/dist/rest/openapi/model.d.ts +203 -0
  174. package/dist/rest/openapi/model.js +37 -0
  175. package/dist/rest/openapi/parse.d.ts +44 -0
  176. package/dist/rest/openapi/parse.js +1530 -0
  177. package/dist/rest/openapi/refs.d.ts +63 -0
  178. package/dist/rest/openapi/refs.js +258 -0
  179. package/dist/rest/openapi/sample.d.ts +68 -0
  180. package/dist/rest/openapi/sample.js +336 -0
  181. package/dist/rest/postman/import.d.ts +21 -0
  182. package/dist/rest/postman/import.js +47 -0
  183. package/dist/rest/postman/index.d.ts +7 -0
  184. package/dist/rest/postman/index.js +7 -0
  185. package/dist/rest/postman/map.d.ts +28 -0
  186. package/dist/rest/postman/map.js +427 -0
  187. package/dist/rest/postman/model.d.ts +118 -0
  188. package/dist/rest/postman/model.js +7 -0
  189. package/dist/rest/postman/parse.d.ts +29 -0
  190. package/dist/rest/postman/parse.js +518 -0
  191. package/dist/rest/response.d.ts +72 -0
  192. package/dist/rest/response.js +221 -0
  193. package/dist/rest/send.d.ts +102 -0
  194. package/dist/rest/send.js +148 -0
  195. package/dist/rest/url.d.ts +92 -0
  196. package/dist/rest/url.js +213 -0
  197. package/dist/run/effective-auth.d.ts +10 -0
  198. package/dist/run/effective-auth.js +19 -0
  199. package/dist/run/index.d.ts +8 -0
  200. package/dist/run/index.js +4 -0
  201. package/dist/run/prepare.d.ts +43 -0
  202. package/dist/run/prepare.js +280 -0
  203. package/dist/run/run.d.ts +53 -0
  204. package/dist/run/run.js +223 -0
  205. package/dist/run/secret-needs.d.ts +13 -0
  206. package/dist/run/secret-needs.js +125 -0
  207. package/dist/run/select.d.ts +34 -0
  208. package/dist/run/select.js +76 -0
  209. package/dist/secrets/env-names.d.ts +27 -0
  210. package/dist/secrets/env-names.js +40 -0
  211. package/dist/secrets/resolve.d.ts +58 -0
  212. package/dist/secrets/resolve.js +136 -0
  213. package/dist/send-options.d.ts +141 -0
  214. package/dist/send-options.js +228 -0
  215. package/dist/send.d.ts +53 -0
  216. package/dist/send.js +210 -0
  217. package/dist/soap/body-builder.d.ts +38 -0
  218. package/dist/soap/body-builder.js +250 -0
  219. package/dist/soap/build-problems.d.ts +12 -0
  220. package/dist/soap/build-problems.js +2 -0
  221. package/dist/soap/charset.d.ts +23 -0
  222. package/dist/soap/charset.js +47 -0
  223. package/dist/soap/envelope.d.ts +44 -0
  224. package/dist/soap/envelope.js +76 -0
  225. package/dist/soap/fault.d.ts +46 -0
  226. package/dist/soap/fault.js +129 -0
  227. package/dist/soap/form-request.d.ts +34 -0
  228. package/dist/soap/form-request.js +251 -0
  229. package/dist/soap/legacy-project/definition-fetcher.d.ts +21 -0
  230. package/dist/soap/legacy-project/definition-fetcher.js +43 -0
  231. package/dist/soap/legacy-project/format.d.ts +18 -0
  232. package/dist/soap/legacy-project/format.js +24 -0
  233. package/dist/soap/legacy-project/import.d.ts +21 -0
  234. package/dist/soap/legacy-project/import.js +46 -0
  235. package/dist/soap/legacy-project/index.d.ts +9 -0
  236. package/dist/soap/legacy-project/index.js +5 -0
  237. package/dist/soap/legacy-project/map.d.ts +91 -0
  238. package/dist/soap/legacy-project/map.js +290 -0
  239. package/dist/soap/legacy-project/model.d.ts +98 -0
  240. package/dist/soap/legacy-project/model.js +5 -0
  241. package/dist/soap/legacy-project/parse.d.ts +16 -0
  242. package/dist/soap/legacy-project/parse.js +325 -0
  243. package/dist/soap/mime/cid-scan.d.ts +36 -0
  244. package/dist/soap/mime/cid-scan.js +52 -0
  245. package/dist/soap/mime/inline-files.d.ts +39 -0
  246. package/dist/soap/mime/inline-files.js +71 -0
  247. package/dist/soap/mime/mtom.d.ts +74 -0
  248. package/dist/soap/mime/mtom.js +134 -0
  249. package/dist/soap/mime/multipart.d.ts +66 -0
  250. package/dist/soap/mime/multipart.js +329 -0
  251. package/dist/soap/mime/send-pipeline.d.ts +61 -0
  252. package/dist/soap/mime/send-pipeline.js +145 -0
  253. package/dist/soap/mime/swa.d.ts +45 -0
  254. package/dist/soap/mime/swa.js +62 -0
  255. package/dist/soap/mime/types.d.ts +69 -0
  256. package/dist/soap/mime/types.js +10 -0
  257. package/dist/soap/namespace-scope.d.ts +32 -0
  258. package/dist/soap/namespace-scope.js +85 -0
  259. package/dist/soap/prefixes.d.ts +24 -0
  260. package/dist/soap/prefixes.js +70 -0
  261. package/dist/soap/recreate.d.ts +28 -0
  262. package/dist/soap/recreate.js +168 -0
  263. package/dist/soap/request-builder.d.ts +63 -0
  264. package/dist/soap/request-builder.js +161 -0
  265. package/dist/soap/response-parser.d.ts +29 -0
  266. package/dist/soap/response-parser.js +71 -0
  267. package/dist/soap/soap-action.d.ts +31 -0
  268. package/dist/soap/soap-action.js +28 -0
  269. package/dist/soap/transforms.d.ts +52 -0
  270. package/dist/soap/transforms.js +164 -0
  271. package/dist/types.d.ts +307 -0
  272. package/dist/types.js +6 -0
  273. package/dist/validate/index.d.ts +61 -0
  274. package/dist/validate/index.js +72 -0
  275. package/dist/validate/schema-file-set.d.ts +51 -0
  276. package/dist/validate/schema-file-set.js +288 -0
  277. package/dist/validate/schema-validator.d.ts +53 -0
  278. package/dist/validate/schema-validator.js +251 -0
  279. package/dist/validate/soap-structure.d.ts +34 -0
  280. package/dist/validate/soap-structure.js +255 -0
  281. package/dist/validate/types.d.ts +47 -0
  282. package/dist/validate/types.js +8 -0
  283. package/dist/validate/wsi/assertions/helpers.d.ts +145 -0
  284. package/dist/validate/wsi/assertions/helpers.js +387 -0
  285. package/dist/validate/wsi/assertions/index.d.ts +44 -0
  286. package/dist/validate/wsi/assertions/index.js +77 -0
  287. package/dist/validate/wsi/assertions/message/helpers.d.ts +63 -0
  288. package/dist/validate/wsi/assertions/message/helpers.js +168 -0
  289. package/dist/validate/wsi/assertions/message/index.d.ts +39 -0
  290. package/dist/validate/wsi/assertions/message/index.js +62 -0
  291. package/dist/validate/wsi/assertions/message/r1001.d.ts +10 -0
  292. package/dist/validate/wsi/assertions/message/r1001.js +38 -0
  293. package/dist/validate/wsi/assertions/message/r1003.d.ts +14 -0
  294. package/dist/validate/wsi/assertions/message/r1003.js +45 -0
  295. package/dist/validate/wsi/assertions/message/r1005.d.ts +12 -0
  296. package/dist/validate/wsi/assertions/message/r1005.js +37 -0
  297. package/dist/validate/wsi/assertions/message/r1006.d.ts +10 -0
  298. package/dist/validate/wsi/assertions/message/r1006.js +49 -0
  299. package/dist/validate/wsi/assertions/message/r1007.d.ts +10 -0
  300. package/dist/validate/wsi/assertions/message/r1007.js +30 -0
  301. package/dist/validate/wsi/assertions/message/r1011.d.ts +10 -0
  302. package/dist/validate/wsi/assertions/message/r1011.js +33 -0
  303. package/dist/validate/wsi/assertions/message/r1012.d.ts +13 -0
  304. package/dist/validate/wsi/assertions/message/r1012.js +37 -0
  305. package/dist/validate/wsi/assertions/message/r1013.d.ts +9 -0
  306. package/dist/validate/wsi/assertions/message/r1013.js +42 -0
  307. package/dist/validate/wsi/assertions/message/r1014.d.ts +10 -0
  308. package/dist/validate/wsi/assertions/message/r1014.js +30 -0
  309. package/dist/validate/wsi/assertions/message/r1015.d.ts +12 -0
  310. package/dist/validate/wsi/assertions/message/r1015.js +36 -0
  311. package/dist/validate/wsi/assertions/message/r1017.d.ts +10 -0
  312. package/dist/validate/wsi/assertions/message/r1017.js +30 -0
  313. package/dist/validate/wsi/assertions/message/r1100.d.ts +10 -0
  314. package/dist/validate/wsi/assertions/message/r1100.js +39 -0
  315. package/dist/validate/wsi/assertions/message/r1101.d.ts +10 -0
  316. package/dist/validate/wsi/assertions/message/r1101.js +37 -0
  317. package/dist/validate/wsi/assertions/message/r1102.d.ts +10 -0
  318. package/dist/validate/wsi/assertions/message/r1102.js +41 -0
  319. package/dist/validate/wsi/assertions/message/r1103.d.ts +10 -0
  320. package/dist/validate/wsi/assertions/message/r1103.js +28 -0
  321. package/dist/validate/wsi/assertions/message/r1107.d.ts +10 -0
  322. package/dist/validate/wsi/assertions/message/r1107.js +38 -0
  323. package/dist/validate/wsi/assertions/message/r1109.d.ts +10 -0
  324. package/dist/validate/wsi/assertions/message/r1109.js +32 -0
  325. package/dist/validate/wsi/assertions/message/r1124.d.ts +10 -0
  326. package/dist/validate/wsi/assertions/message/r1124.js +31 -0
  327. package/dist/validate/wsi/assertions/message/r1132.d.ts +9 -0
  328. package/dist/validate/wsi/assertions/message/r1132.js +23 -0
  329. package/dist/validate/wsi/assertions/message/r1140.d.ts +10 -0
  330. package/dist/validate/wsi/assertions/message/r1140.js +42 -0
  331. package/dist/validate/wsi/assertions/message/r1141.d.ts +10 -0
  332. package/dist/validate/wsi/assertions/message/r1141.js +32 -0
  333. package/dist/validate/wsi/assertions/message/r2113.d.ts +11 -0
  334. package/dist/validate/wsi/assertions/message/r2113.js +33 -0
  335. package/dist/validate/wsi/assertions/message/r2211.d.ts +7 -0
  336. package/dist/validate/wsi/assertions/message/r2211.js +42 -0
  337. package/dist/validate/wsi/assertions/r2001.d.ts +15 -0
  338. package/dist/validate/wsi/assertions/r2001.js +47 -0
  339. package/dist/validate/wsi/assertions/r2002.d.ts +11 -0
  340. package/dist/validate/wsi/assertions/r2002.js +38 -0
  341. package/dist/validate/wsi/assertions/r2003.d.ts +7 -0
  342. package/dist/validate/wsi/assertions/r2003.js +32 -0
  343. package/dist/validate/wsi/assertions/r2005.d.ts +7 -0
  344. package/dist/validate/wsi/assertions/r2005.js +40 -0
  345. package/dist/validate/wsi/assertions/r2101.d.ts +14 -0
  346. package/dist/validate/wsi/assertions/r2101.js +65 -0
  347. package/dist/validate/wsi/assertions/r2102.d.ts +10 -0
  348. package/dist/validate/wsi/assertions/r2102.js +41 -0
  349. package/dist/validate/wsi/assertions/r2105.d.ts +8 -0
  350. package/dist/validate/wsi/assertions/r2105.js +39 -0
  351. package/dist/validate/wsi/assertions/r2110.d.ts +8 -0
  352. package/dist/validate/wsi/assertions/r2110.js +38 -0
  353. package/dist/validate/wsi/assertions/r2111.d.ts +6 -0
  354. package/dist/validate/wsi/assertions/r2111.js +30 -0
  355. package/dist/validate/wsi/assertions/r2112.d.ts +7 -0
  356. package/dist/validate/wsi/assertions/r2112.js +35 -0
  357. package/dist/validate/wsi/assertions/r2201.d.ts +7 -0
  358. package/dist/validate/wsi/assertions/r2201.js +28 -0
  359. package/dist/validate/wsi/assertions/r2203.d.ts +7 -0
  360. package/dist/validate/wsi/assertions/r2203.js +30 -0
  361. package/dist/validate/wsi/assertions/r2204.d.ts +6 -0
  362. package/dist/validate/wsi/assertions/r2204.js +29 -0
  363. package/dist/validate/wsi/assertions/r2205.d.ts +8 -0
  364. package/dist/validate/wsi/assertions/r2205.js +46 -0
  365. package/dist/validate/wsi/assertions/r2206.d.ts +7 -0
  366. package/dist/validate/wsi/assertions/r2206.js +36 -0
  367. package/dist/validate/wsi/assertions/r2209.d.ts +12 -0
  368. package/dist/validate/wsi/assertions/r2209.js +37 -0
  369. package/dist/validate/wsi/assertions/r2210.d.ts +7 -0
  370. package/dist/validate/wsi/assertions/r2210.js +30 -0
  371. package/dist/validate/wsi/assertions/r2303.d.ts +7 -0
  372. package/dist/validate/wsi/assertions/r2303.js +44 -0
  373. package/dist/validate/wsi/assertions/r2304.d.ts +6 -0
  374. package/dist/validate/wsi/assertions/r2304.js +32 -0
  375. package/dist/validate/wsi/assertions/r2401.d.ts +12 -0
  376. package/dist/validate/wsi/assertions/r2401.js +31 -0
  377. package/dist/validate/wsi/assertions/r2701.d.ts +7 -0
  378. package/dist/validate/wsi/assertions/r2701.js +28 -0
  379. package/dist/validate/wsi/assertions/r2702.d.ts +6 -0
  380. package/dist/validate/wsi/assertions/r2702.js +26 -0
  381. package/dist/validate/wsi/assertions/r2705.d.ts +11 -0
  382. package/dist/validate/wsi/assertions/r2705.js +31 -0
  383. package/dist/validate/wsi/assertions/r2706.d.ts +7 -0
  384. package/dist/validate/wsi/assertions/r2706.js +29 -0
  385. package/dist/validate/wsi/assertions/r2710.d.ts +13 -0
  386. package/dist/validate/wsi/assertions/r2710.js +37 -0
  387. package/dist/validate/wsi/assertions/r2716.d.ts +7 -0
  388. package/dist/validate/wsi/assertions/r2716.js +29 -0
  389. package/dist/validate/wsi/assertions/r2717.d.ts +9 -0
  390. package/dist/validate/wsi/assertions/r2717.js +31 -0
  391. package/dist/validate/wsi/assertions/r2718.d.ts +7 -0
  392. package/dist/validate/wsi/assertions/r2718.js +41 -0
  393. package/dist/validate/wsi/assertions/r2720.d.ts +7 -0
  394. package/dist/validate/wsi/assertions/r2720.js +29 -0
  395. package/dist/validate/wsi/assertions/r2721.d.ts +6 -0
  396. package/dist/validate/wsi/assertions/r2721.js +27 -0
  397. package/dist/validate/wsi/assertions/r2722.d.ts +6 -0
  398. package/dist/validate/wsi/assertions/r2722.js +29 -0
  399. package/dist/validate/wsi/assertions/r2801.d.ts +7 -0
  400. package/dist/validate/wsi/assertions/r2801.js +39 -0
  401. package/dist/validate/wsi/assertions/r2803.d.ts +7 -0
  402. package/dist/validate/wsi/assertions/r2803.js +29 -0
  403. package/dist/validate/wsi/docs.d.ts +29 -0
  404. package/dist/validate/wsi/docs.js +167 -0
  405. package/dist/validate/wsi/index.d.ts +16 -0
  406. package/dist/validate/wsi/index.js +11 -0
  407. package/dist/validate/wsi/report-html.d.ts +36 -0
  408. package/dist/validate/wsi/report-html.js +135 -0
  409. package/dist/validate/wsi/run-message.d.ts +50 -0
  410. package/dist/validate/wsi/run-message.js +190 -0
  411. package/dist/validate/wsi/run-wsdl.d.ts +48 -0
  412. package/dist/validate/wsi/run-wsdl.js +99 -0
  413. package/dist/validate/wsi/types.d.ts +173 -0
  414. package/dist/validate/wsi/types.js +17 -0
  415. package/dist/workspace/commit-message.d.ts +47 -0
  416. package/dist/workspace/commit-message.js +195 -0
  417. package/dist/workspace/environments.d.ts +79 -0
  418. package/dist/workspace/environments.js +115 -0
  419. package/dist/workspace/index.d.ts +28 -0
  420. package/dist/workspace/index.js +19 -0
  421. package/dist/workspace/load.d.ts +45 -0
  422. package/dist/workspace/load.js +155 -0
  423. package/dist/workspace/local-state.d.ts +37 -0
  424. package/dist/workspace/local-state.js +59 -0
  425. package/dist/workspace/migrate.d.ts +38 -0
  426. package/dist/workspace/migrate.js +50 -0
  427. package/dist/workspace/model.d.ts +86 -0
  428. package/dist/workspace/model.js +54 -0
  429. package/dist/workspace/paths.d.ts +64 -0
  430. package/dist/workspace/paths.js +97 -0
  431. package/dist/workspace/reidentify.d.ts +22 -0
  432. package/dist/workspace/reidentify.js +122 -0
  433. package/dist/workspace/save.d.ts +31 -0
  434. package/dist/workspace/save.js +84 -0
  435. package/dist/workspace/schema.d.ts +93 -0
  436. package/dist/workspace/schema.js +115 -0
  437. package/dist/workspace/serialize.d.ts +24 -0
  438. package/dist/workspace/serialize.js +60 -0
  439. package/dist/workspace/share.d.ts +52 -0
  440. package/dist/workspace/share.js +89 -0
  441. package/dist/ws/browser.d.ts +13 -0
  442. package/dist/ws/browser.js +11 -0
  443. package/dist/ws/call.d.ts +53 -0
  444. package/dist/ws/call.js +106 -0
  445. package/dist/ws/command.d.ts +19 -0
  446. package/dist/ws/command.js +28 -0
  447. package/dist/ws/expand.d.ts +38 -0
  448. package/dist/ws/expand.js +76 -0
  449. package/dist/ws/model.d.ts +191 -0
  450. package/dist/ws/model.js +83 -0
  451. package/dist/ws/pretty.d.ts +12 -0
  452. package/dist/ws/pretty.js +25 -0
  453. package/dist/ws/session.d.ts +50 -0
  454. package/dist/ws/session.js +333 -0
  455. package/dist/ws/shape.d.ts +18 -0
  456. package/dist/ws/shape.js +28 -0
  457. package/dist/ws/transcript.d.ts +14 -0
  458. package/dist/ws/transcript.js +29 -0
  459. package/dist/ws/url.d.ts +3 -0
  460. package/dist/ws/url.js +44 -0
  461. package/dist/wsa/headers.d.ts +78 -0
  462. package/dist/wsa/headers.js +244 -0
  463. package/dist/wsa/model.d.ts +66 -0
  464. package/dist/wsa/model.js +52 -0
  465. package/dist/wsa/policy-detect.d.ts +81 -0
  466. package/dist/wsa/policy-detect.js +245 -0
  467. package/dist/wsdl/cache-naming.d.ts +39 -0
  468. package/dist/wsdl/cache-naming.js +90 -0
  469. package/dist/wsdl/cache.d.ts +48 -0
  470. package/dist/wsdl/cache.js +141 -0
  471. package/dist/wsdl/docs-generator.d.ts +47 -0
  472. package/dist/wsdl/docs-generator.js +439 -0
  473. package/dist/wsdl/dom-utils.d.ts +15 -0
  474. package/dist/wsdl/dom-utils.js +50 -0
  475. package/dist/wsdl/export-definition.d.ts +38 -0
  476. package/dist/wsdl/export-definition.js +100 -0
  477. package/dist/wsdl/fetch.d.ts +13 -0
  478. package/dist/wsdl/fetch.js +60 -0
  479. package/dist/wsdl/merge.d.ts +17 -0
  480. package/dist/wsdl/merge.js +57 -0
  481. package/dist/wsdl/model.d.ts +176 -0
  482. package/dist/wsdl/model.js +17 -0
  483. package/dist/wsdl/parse-binding.d.ts +6 -0
  484. package/dist/wsdl/parse-binding.js +150 -0
  485. package/dist/wsdl/parse-wsdl.d.ts +47 -0
  486. package/dist/wsdl/parse-wsdl.js +161 -0
  487. package/dist/wsdl/qname.d.ts +28 -0
  488. package/dist/wsdl/qname.js +41 -0
  489. package/dist/wsdl/ref-policy.d.ts +54 -0
  490. package/dist/wsdl/ref-policy.js +87 -0
  491. package/dist/wsdl/resolver.d.ts +81 -0
  492. package/dist/wsdl/resolver.js +276 -0
  493. package/dist/wsdl/update-definition.d.ts +106 -0
  494. package/dist/wsdl/update-definition.js +314 -0
  495. package/dist/wss/apply.d.ts +40 -0
  496. package/dist/wss/apply.js +212 -0
  497. package/dist/wss/c14n-prefixes.d.ts +27 -0
  498. package/dist/wss/c14n-prefixes.js +95 -0
  499. package/dist/wss/incoming/decrypt.d.ts +35 -0
  500. package/dist/wss/incoming/decrypt.js +57 -0
  501. package/dist/wss/incoming/index.d.ts +56 -0
  502. package/dist/wss/incoming/index.js +189 -0
  503. package/dist/wss/incoming/verify.d.ts +74 -0
  504. package/dist/wss/incoming/verify.js +440 -0
  505. package/dist/wss/key-identifiers.d.ts +76 -0
  506. package/dist/wss/key-identifiers.js +139 -0
  507. package/dist/wss/keystore/certificate.d.ts +45 -0
  508. package/dist/wss/keystore/certificate.js +134 -0
  509. package/dist/wss/keystore/index.d.ts +50 -0
  510. package/dist/wss/keystore/index.js +80 -0
  511. package/dist/wss/keystore/model.d.ts +83 -0
  512. package/dist/wss/keystore/model.js +27 -0
  513. package/dist/wss/keystore/pem.d.ts +21 -0
  514. package/dist/wss/keystore/pem.js +140 -0
  515. package/dist/wss/keystore/pkcs12.d.ts +21 -0
  516. package/dist/wss/keystore/pkcs12.js +125 -0
  517. package/dist/wss/model.d.ts +160 -0
  518. package/dist/wss/model.js +37 -0
  519. package/dist/wss/outgoing/encryption.d.ts +76 -0
  520. package/dist/wss/outgoing/encryption.js +618 -0
  521. package/dist/wss/outgoing/signature.d.ts +73 -0
  522. package/dist/wss/outgoing/signature.js +239 -0
  523. package/dist/wss/outgoing/timestamp.d.ts +29 -0
  524. package/dist/wss/outgoing/timestamp.js +39 -0
  525. package/dist/wss/outgoing/username-token.d.ts +36 -0
  526. package/dist/wss/outgoing/username-token.js +68 -0
  527. package/dist/wss/security-header.d.ts +31 -0
  528. package/dist/wss/security-header.js +83 -0
  529. package/dist/xml/index.d.ts +7 -0
  530. package/dist/xml/index.js +7 -0
  531. package/dist/xml/namespaces.d.ts +36 -0
  532. package/dist/xml/namespaces.js +60 -0
  533. package/dist/xml/parse.d.ts +79 -0
  534. package/dist/xml/parse.js +109 -0
  535. package/dist/xml/positions.d.ts +26 -0
  536. package/dist/xml/positions.js +71 -0
  537. package/dist/xml/pretty.d.ts +37 -0
  538. package/dist/xml/pretty.js +137 -0
  539. package/dist/xml/serialize.d.ts +6 -0
  540. package/dist/xml/serialize.js +8 -0
  541. package/dist/xml/tolerant-tree.d.ts +56 -0
  542. package/dist/xml/tolerant-tree.js +134 -0
  543. package/dist/xpath/evaluate-async.d.ts +31 -0
  544. package/dist/xpath/evaluate-async.js +81 -0
  545. package/dist/xpath/evaluate.d.ts +98 -0
  546. package/dist/xpath/evaluate.js +340 -0
  547. package/dist/xpath/jsonpath.d.ts +40 -0
  548. package/dist/xpath/jsonpath.js +109 -0
  549. package/dist/xpath/namespaces.d.ts +29 -0
  550. package/dist/xpath/namespaces.js +101 -0
  551. package/dist/xpath/worker.d.ts +7 -0
  552. package/dist/xpath/worker.js +26 -0
  553. package/dist/xsd/builtins.d.ts +36 -0
  554. package/dist/xsd/builtins.js +108 -0
  555. package/dist/xsd/check-references.d.ts +25 -0
  556. package/dist/xsd/check-references.js +145 -0
  557. package/dist/xsd/form-edits.d.ts +57 -0
  558. package/dist/xsd/form-edits.js +153 -0
  559. package/dist/xsd/form-model.d.ts +153 -0
  560. package/dist/xsd/form-model.js +691 -0
  561. package/dist/xsd/locate.d.ts +42 -0
  562. package/dist/xsd/locate.js +249 -0
  563. package/dist/xsd/model.d.ts +249 -0
  564. package/dist/xsd/model.js +1 -0
  565. package/dist/xsd/parse-particles.d.ts +48 -0
  566. package/dist/xsd/parse-particles.js +320 -0
  567. package/dist/xsd/parse-schema.d.ts +21 -0
  568. package/dist/xsd/parse-schema.js +143 -0
  569. package/dist/xsd/resolve-content.d.ts +18 -0
  570. package/dist/xsd/resolve-content.js +242 -0
  571. package/dist/xsd/sample-generator.d.ts +51 -0
  572. package/dist/xsd/sample-generator.js +291 -0
  573. package/dist/xsd/sample-types.d.ts +21 -0
  574. package/dist/xsd/sample-types.js +69 -0
  575. package/dist/xsd/sample-values.d.ts +54 -0
  576. package/dist/xsd/sample-values.js +267 -0
  577. package/dist/xsd/schema-set.d.ts +51 -0
  578. package/dist/xsd/schema-set.js +203 -0
  579. package/dist/xsd/xml-scan.d.ts +64 -0
  580. package/dist/xsd/xml-scan.js +286 -0
  581. package/dist/xsd/xml-writer.d.ts +56 -0
  582. package/dist/xsd/xml-writer.js +103 -0
  583. package/package.json +69 -0
@@ -0,0 +1,737 @@
1
+ /**
2
+ * Zod schemas for every YAML document in a project folder.
3
+ *
4
+ * Every object schema is `z.looseObject`: unknown keys are accepted and
5
+ * IGNORED on load (the loader only ever reads the fields it knows about), and
6
+ * `saveProject` only ever writes known fields back out, so a 1.x build reading
7
+ * a file written by a newer 1.x build silently drops fields it does not
8
+ * understand rather than refusing to open the project. A breaking change to a
9
+ * document's shape bumps `formatVersion` instead of relying on strictness
10
+ * here. `formatVersion` itself stays a `z.literal` so an out-of-range value is
11
+ * still caught explicitly (see `migrate.ts`).
12
+ *
13
+ * The policy that follows from that, stated once so nobody has to rediscover
14
+ * it: **any additive field bumps `formatVersion`.** Since an unknown key is
15
+ * dropped on load and never written back, a field added inside the current
16
+ * version does not merely go unread by older builds — it is deleted from the
17
+ * project the first time an older build saves. "Additive is safe" is true of
18
+ * formats that round-trip unknown keys; this one deliberately does not. See
19
+ * ADR-0003.
20
+ */
21
+ import { z } from 'zod';
22
+ import { assertionsSchema } from '../assert/schema.js';
23
+ import { ProjectError } from '../errors.js';
24
+ import { FORMAT_VERSION } from './model.js';
25
+ import { DEFAULT_WSS_ENCRYPTION_PARTS, DEFAULT_WSS_SIGNATURE_PARTS } from '../wss/model.js';
26
+ const nonEmpty = z.string().min(1);
27
+ const propertyMapSchema = z.record(z.string(), z.string());
28
+ /**
29
+ * A committed, human-chosen name for a secret reference — not the secret itself — used to build
30
+ * the environment variable a CI run reads it from (see `secrets/env-names.ts`).
31
+ */
32
+ const envName = z
33
+ .string()
34
+ .regex(/^[A-Z][A-Z0-9_]*$/)
35
+ .optional();
36
+ /**
37
+ * Credentials as persisted: usernames and a `secretRef`, never a password
38
+ * value. Unlike every other schema here, a plaintext `password` key is
39
+ * explicitly rejected rather than merely ignored — secrets must never be
40
+ * written to a project file, in any format.
41
+ */
42
+ export const endpointAuthSchema = z
43
+ .looseObject({
44
+ type: z.enum(['none', 'basic', 'ntlm']),
45
+ username: z.string().optional(),
46
+ passwordRef: z.string().optional(),
47
+ passwordEnv: envName,
48
+ domain: z.string().optional(),
49
+ workstation: z.string().optional(),
50
+ preemptive: z.boolean().optional(),
51
+ })
52
+ .refine((value) => !('password' in value), {
53
+ message: 'endpoint auth must not contain a plaintext "password" field; use passwordRef',
54
+ path: ['password'],
55
+ });
56
+ /**
57
+ * Keys that would hold a credential *value* rather than a reference to one. A project file must
58
+ * never carry one, in any authentication scheme, so they are rejected outright rather than
59
+ * ignored — the same rule `endpointAuthSchema` applies to `password`, stated once for the
60
+ * schemes added with the REST client (ADR-0004).
61
+ */
62
+ const PLAINTEXT_SECRET_KEYS = [
63
+ 'password',
64
+ 'token',
65
+ 'secret',
66
+ 'clientSecret',
67
+ 'client_secret',
68
+ 'apiKey',
69
+ 'refreshToken',
70
+ ];
71
+ /** Adds the {@link PLAINTEXT_SECRET_KEYS} rejection to one authentication schema. */
72
+ function refuseSecretValues(schema) {
73
+ return schema.superRefine((value, ctx) => {
74
+ for (const key of PLAINTEXT_SECRET_KEYS) {
75
+ if (key in value) {
76
+ ctx.addIssue({
77
+ code: 'custom',
78
+ path: [key],
79
+ message: `auth must not contain a plaintext "${key}" field; use a secretRef`,
80
+ });
81
+ }
82
+ }
83
+ });
84
+ }
85
+ const inheritAuthSchema = z.looseObject({ type: z.literal('inherit') });
86
+ const bearerAuthSchema = refuseSecretValues(z.looseObject({
87
+ type: z.literal('bearer'),
88
+ tokenRef: z.string().optional(),
89
+ tokenEnv: envName,
90
+ scheme: z.string().optional(),
91
+ }));
92
+ const apiKeyAuthSchema = refuseSecretValues(z.looseObject({
93
+ type: z.literal('api-key'),
94
+ name: z.string(),
95
+ valueRef: z.string().optional(),
96
+ valueEnv: envName,
97
+ in: z.enum(['header', 'query']),
98
+ }));
99
+ const oauth2AuthSchema = refuseSecretValues(z.looseObject({
100
+ type: z.literal('oauth2'),
101
+ grant: z.enum(['client-credentials', 'authorization-code']),
102
+ tokenUrl: z.string(),
103
+ authorizationUrl: z.string().optional(),
104
+ clientId: z.string(),
105
+ clientSecretRef: z.string().optional(),
106
+ clientSecretEnv: envName,
107
+ scopes: z.array(z.string()).default([]),
108
+ audience: z.string().optional(),
109
+ clientAuth: z.enum(['basic', 'body']).default('basic'),
110
+ pkce: z.boolean().default(true),
111
+ refreshTokenRef: z.string().optional(),
112
+ }));
113
+ /**
114
+ * Authentication as persisted anywhere a project configures it. `endpointAuthSchema` is one arm,
115
+ * so a file written before the REST client — which only ever held `none`/`basic`/`ntlm` — parses
116
+ * unchanged. `inherit` is accepted here and rejected by the SOAP schemas that reuse
117
+ * `endpointAuthSchema` instead, since an interface has nothing to inherit from.
118
+ */
119
+ export const authConfigSchema = z.union([
120
+ endpointAuthSchema,
121
+ inheritAuthSchema,
122
+ bearerAuthSchema,
123
+ apiKeyAuthSchema,
124
+ oauth2AuthSchema,
125
+ ]);
126
+ const endpointSchema = z.looseObject({
127
+ id: nonEmpty,
128
+ name: z.string(),
129
+ url: z.string(),
130
+ auth: endpointAuthSchema.optional(),
131
+ authMode: z.enum(['override', 'complement']),
132
+ trustInvalid: z.boolean().optional(),
133
+ });
134
+ /**
135
+ * A stored WS-Addressing configuration. Every field beyond `enabled` is optional so a project
136
+ * written before the WS-Addressing task — which only ever held `{ enabled, version? }` — still
137
+ * loads; `normalizeWsa` fills the rest in with the v1 defaults.
138
+ */
139
+ const wsaSchema = z.looseObject({
140
+ enabled: z.boolean(),
141
+ version: z.enum(['2005/08', '2004/08']).optional(),
142
+ mustUnderstand: z.enum(['none', 'true', 'false']).optional(),
143
+ action: z.string().optional(),
144
+ to: z.string().optional(),
145
+ messageId: z.string().optional(),
146
+ replyTo: z.string().optional(),
147
+ from: z.string().optional(),
148
+ faultTo: z.string().optional(),
149
+ relatesTo: z.string().optional(),
150
+ relationshipType: z.string().optional(),
151
+ addDefaultAction: z.boolean().optional(),
152
+ addDefaultTo: z.boolean().optional(),
153
+ generateMessageId: z.boolean().optional(),
154
+ });
155
+ const operationEntrySchema = z.looseObject({
156
+ name: nonEmpty,
157
+ bindingName: z.string(),
158
+ slug: nonEmpty,
159
+ order: z.number().int(),
160
+ });
161
+ /** `wirebench.yaml`. */
162
+ export const manifestSchema = z.looseObject({
163
+ formatVersion: z.literal(FORMAT_VERSION),
164
+ id: nonEmpty,
165
+ name: z.string(),
166
+ description: z.string().optional(),
167
+ settings: z.looseObject({
168
+ cacheDefinitions: z.boolean(),
169
+ defaultTimeoutMs: z.number().int().positive(),
170
+ resourceRoot: z.string().optional(),
171
+ prettyPrintResponses: z.boolean(),
172
+ }),
173
+ properties: propertyMapSchema,
174
+ /** Names of `properties` entries switched off; absent means none. See `model.ts`'s `Project.disabledProperties`. */
175
+ disabled: z.array(z.string()).optional(),
176
+ activeEnvironmentId: z.string().optional(),
177
+ /** Name of the Wirebench build that last wrote this manifest; informational only. */
178
+ writtenBy: z.string().optional(),
179
+ });
180
+ /** `interfaces/<slug>/interface.yaml`. */
181
+ export const interfaceFileSchema = z.looseObject({
182
+ kind: z.literal('soap'),
183
+ id: nonEmpty,
184
+ name: z.string(),
185
+ order: z.number().int(),
186
+ definitionUrl: z.string(),
187
+ cacheDefinition: z.boolean(),
188
+ targetNamespace: z.string().optional(),
189
+ endpoints: z.array(endpointSchema),
190
+ defaultEndpointId: z.string().optional(),
191
+ wsa: wsaSchema,
192
+ auth: endpointAuthSchema.optional(),
193
+ operations: z.array(operationEntrySchema),
194
+ });
195
+ const requestPropertiesSchema = z.looseObject({
196
+ encoding: z.string(),
197
+ timeoutMs: z.number().int().nonnegative().optional(),
198
+ bindAddress: z.string().optional(),
199
+ followRedirects: z.boolean(),
200
+ skipSoapAction: z.boolean(),
201
+ enableMtom: z.boolean(),
202
+ forceMtom: z.boolean(),
203
+ inlineResponseAttachments: z.boolean(),
204
+ expandMtomAttachments: z.boolean(),
205
+ disableMultiparts: z.boolean(),
206
+ encodeAttachments: z.boolean(),
207
+ enableInlineFiles: z.boolean(),
208
+ removeEmptyContent: z.boolean(),
209
+ entitizeProperties: z.boolean(),
210
+ prettyPrint: z.boolean(),
211
+ stripWhitespaces: z.boolean(),
212
+ dumpFile: z.string().optional(),
213
+ maxSizeBytes: z.number().int().nonnegative().optional(),
214
+ wssPasswordType: z.enum(['text', 'digest']).optional(),
215
+ wssTimeToLive: z.number().int().nonnegative().optional(),
216
+ sslKeystoreRef: z.string().optional(),
217
+ });
218
+ /** Where a file's bytes live: the project's content-addressed cache, or a path on disk. */
219
+ export const attachmentSourceSchema = z.union([
220
+ z.looseObject({ kind: z.literal('cache'), sha256: nonEmpty }),
221
+ z.looseObject({ kind: z.literal('path'), path: nonEmpty }),
222
+ ]);
223
+ const attachmentSchema = z.looseObject({
224
+ id: nonEmpty,
225
+ name: z.string(),
226
+ contentType: z.string(),
227
+ size: z.number().int().nonnegative(),
228
+ part: z.string().optional(),
229
+ type: z.enum(['XOP', 'MIME', 'SWAREF', 'CONTENT', 'UNKNOWN']),
230
+ contentId: z.string(),
231
+ cached: z.boolean(),
232
+ source: attachmentSourceSchema,
233
+ });
234
+ /** `interfaces/<slug>/operations/<slug>/<name>.request.yaml` (the envelope lives in the sibling `.xml`). */
235
+ export const requestFileSchema = z.looseObject({
236
+ kind: z.literal('soap'),
237
+ id: nonEmpty,
238
+ name: z.string(),
239
+ order: z.number().int(),
240
+ description: z.string().optional(),
241
+ endpointId: z.string().optional(),
242
+ endpointUrl: z.string().optional(),
243
+ soapVersion: z.enum(['1.1', '1.2']),
244
+ soapAction: z.string().optional(),
245
+ headers: z.array(z.looseObject({ name: z.string(), value: z.string() })),
246
+ attachments: z.array(attachmentSchema),
247
+ auth: endpointAuthSchema.optional(),
248
+ wsa: wsaSchema.optional(),
249
+ wssOutgoingRef: z.string().optional(),
250
+ wssIncomingRef: z.string().optional(),
251
+ properties: requestPropertiesSchema,
252
+ assertions: assertionsSchema.default([]),
253
+ orphaned: z.boolean().optional(),
254
+ });
255
+ /**
256
+ * One table row as persisted. `enabled` is written only when `false`, so a missing key means
257
+ * enabled; names may repeat and their order is the wire order.
258
+ */
259
+ export const keyValueEntrySchema = z.looseObject({
260
+ name: z.string(),
261
+ value: z.string(),
262
+ enabled: z.boolean().default(true),
263
+ description: z.string().optional(),
264
+ });
265
+ /**
266
+ * An HTTP method: any RFC 9110 token, not just the seven the editor names. A service that speaks
267
+ * `PURGE` or `REPORT` is not a malformed project.
268
+ */
269
+ const methodSchema = z
270
+ .string()
271
+ .min(1)
272
+ .regex(/^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/, 'a method must be an HTTP token');
273
+ const multipartPartSchema = z.union([
274
+ z.looseObject({
275
+ kind: z.literal('text'),
276
+ name: z.string(),
277
+ value: z.string(),
278
+ enabled: z.boolean().default(true),
279
+ contentType: z.string().optional(),
280
+ }),
281
+ z.looseObject({
282
+ kind: z.literal('file'),
283
+ name: z.string(),
284
+ source: attachmentSourceSchema,
285
+ enabled: z.boolean().default(true),
286
+ fileName: z.string().optional(),
287
+ contentType: z.string().optional(),
288
+ }),
289
+ ]);
290
+ /**
291
+ * A request body as persisted. A raw body names its sibling file rather than carrying its text:
292
+ * `file` is a bare file name in the request's own directory, validated as a path segment before
293
+ * anything is read or written (ADR-0005).
294
+ */
295
+ export const restBodySchema = z.union([
296
+ z.looseObject({ kind: z.literal('none') }),
297
+ z.looseObject({
298
+ kind: z.literal('raw'),
299
+ language: z.enum(['json', 'xml', 'text', 'html', 'javascript']),
300
+ contentType: z.string().optional(),
301
+ file: nonEmpty,
302
+ }),
303
+ z.looseObject({ kind: z.literal('form'), fields: z.array(keyValueEntrySchema).default([]) }),
304
+ z.looseObject({ kind: z.literal('multipart'), parts: z.array(multipartPartSchema).default([]) }),
305
+ z.looseObject({ kind: z.literal('binary'), source: attachmentSourceSchema, contentType: z.string() }),
306
+ ]);
307
+ const restSettingsSchema = z.looseObject({
308
+ timeoutMs: z.number().int().nonnegative().optional(),
309
+ followRedirects: z.boolean().optional(),
310
+ maxRedirects: z.number().int().nonnegative().optional(),
311
+ keepBodyOnRedirect: z.boolean().optional(),
312
+ encodeUrl: z.boolean().optional(),
313
+ trustInvalid: z.boolean().optional(),
314
+ sslKeystoreRef: z.string().optional(),
315
+ bindAddress: z.string().optional(),
316
+ maxSizeBytes: z.number().int().nonnegative().optional(),
317
+ sendCookies: z.boolean().optional(),
318
+ escapeProperties: z.boolean().optional(),
319
+ });
320
+ /** `apis/<slug>/requests/[<folder>/…]<name>.request.yaml`. */
321
+ export const restRequestFileSchema = z.looseObject({
322
+ kind: z.literal('rest'),
323
+ id: nonEmpty,
324
+ name: z.string(),
325
+ order: z.number().int(),
326
+ description: z.string().optional(),
327
+ method: methodSchema,
328
+ url: z.string(),
329
+ pathParams: z.array(keyValueEntrySchema).default([]),
330
+ query: z.array(keyValueEntrySchema).default([]),
331
+ headers: z.array(keyValueEntrySchema).default([]),
332
+ body: restBodySchema.default({ kind: 'none' }),
333
+ auth: authConfigSchema.default({ type: 'inherit' }),
334
+ settings: restSettingsSchema.default({}),
335
+ assertions: assertionsSchema.default([]),
336
+ orphaned: z.boolean().optional(),
337
+ });
338
+ /** `apis/<slug>/requests/[<folder>/…]folder.yaml`. */
339
+ export const restFolderFileSchema = z.looseObject({
340
+ id: nonEmpty,
341
+ name: z.string(),
342
+ order: z.number().int(),
343
+ description: z.string().optional(),
344
+ auth: authConfigSchema.optional(),
345
+ });
346
+ /** `apis/<slug>/api.yaml`. */
347
+ export const apiFileSchema = z.looseObject({
348
+ kind: z.literal('rest'),
349
+ id: nonEmpty,
350
+ name: z.string(),
351
+ order: z.number().int(),
352
+ description: z.string().optional(),
353
+ baseUrl: z.string(),
354
+ servers: z.array(z.looseObject({ url: z.string(), description: z.string().optional() })).default([]),
355
+ auth: authConfigSchema.optional(),
356
+ definition: z
357
+ .looseObject({ source: nonEmpty, cache: z.boolean().default(true), version: z.string().default('') })
358
+ .optional(),
359
+ });
360
+ const grpcSettingsSchema = z.looseObject({
361
+ timeoutMs: z.number().int().nonnegative().optional(),
362
+ trustInvalid: z.boolean().optional(),
363
+ sslKeystoreRef: z.string().optional(),
364
+ bindAddress: z.string().optional(),
365
+ maxSizeBytes: z.number().int().nonnegative().optional(),
366
+ escapeProperties: z.boolean().optional(),
367
+ });
368
+ /** The four shapes a gRPC method can take. */
369
+ export const grpcMethodKindSchema = z.enum(['unary', 'server-streaming', 'client-streaming', 'bidi-streaming']);
370
+ /**
371
+ * `apis/<slug>/requests/[<folder>/…]<name>.request.yaml` for a gRPC request. The message text lives
372
+ * in the sibling file `message` names, validated as a path segment before it is read (ADR-0005),
373
+ * so a JSON message is a JSON file in git like a REST raw body.
374
+ */
375
+ export const grpcRequestFileSchema = z.looseObject({
376
+ kind: z.literal('grpc'),
377
+ id: nonEmpty,
378
+ name: z.string(),
379
+ order: z.number().int(),
380
+ description: z.string().optional(),
381
+ service: z.string(),
382
+ method: z.string(),
383
+ methodKind: grpcMethodKindSchema.default('unary'),
384
+ metadata: z.array(keyValueEntrySchema).default([]),
385
+ message: nonEmpty.optional(),
386
+ auth: authConfigSchema.default({ type: 'inherit' }),
387
+ settings: grpcSettingsSchema.default({}),
388
+ orphaned: z.boolean().optional(),
389
+ });
390
+ /** `apis/<slug>/api.yaml` for a gRPC API. */
391
+ export const grpcApiFileSchema = z.looseObject({
392
+ kind: z.literal('grpc'),
393
+ id: nonEmpty,
394
+ name: z.string(),
395
+ order: z.number().int(),
396
+ description: z.string().optional(),
397
+ target: z.string(),
398
+ tls: z.boolean().default(false),
399
+ metadata: z.array(keyValueEntrySchema).default([]),
400
+ auth: authConfigSchema.optional(),
401
+ definition: z
402
+ .looseObject({
403
+ // Absent in every project written before server reflection, which is an imported set.
404
+ kind: z.enum(['proto', 'reflection']).default('proto'),
405
+ source: nonEmpty,
406
+ cache: z.boolean().default(true),
407
+ roots: z.array(nonEmpty).default([]),
408
+ reflectionVersion: z.enum(['auto', 'v1', 'v1alpha']).optional(),
409
+ trustInvalid: z.boolean().optional(),
410
+ })
411
+ .optional(),
412
+ });
413
+ const wsSettingsSchema = z.looseObject({
414
+ handshakeTimeoutMs: z.number().int().nonnegative().optional(),
415
+ trustInvalid: z.boolean().optional(),
416
+ sslKeystoreRef: z.string().optional(),
417
+ bindAddress: z.string().optional(),
418
+ maxMessageBytes: z.number().int().nonnegative().optional(),
419
+ escapeProperties: z.boolean().optional(),
420
+ });
421
+ /**
422
+ * One saved message as persisted: its text (or, for `binary`, base64) lives in the sibling file
423
+ * `file` names, validated as a path segment before it is read (ADR-0005) — the same convention a
424
+ * gRPC message or a REST raw body follows.
425
+ */
426
+ const wsSavedMessageSchema = z.looseObject({
427
+ id: nonEmpty,
428
+ name: z.string(),
429
+ format: z.enum(['text', 'binary']).default('text'),
430
+ file: nonEmpty,
431
+ });
432
+ /**
433
+ * `apis/<slug>/requests/[<folder>/…]<name>.request.yaml` for a WebSocket request. Each saved
434
+ * message's own text lives in its own sibling file, so a JSON message is a JSON file in git.
435
+ */
436
+ export const wsRequestFileSchema = z.looseObject({
437
+ kind: z.literal('websocket'),
438
+ id: nonEmpty,
439
+ name: z.string(),
440
+ order: z.number().int(),
441
+ description: z.string().optional(),
442
+ url: z.string(),
443
+ query: z.array(keyValueEntrySchema).default([]),
444
+ headers: z.array(keyValueEntrySchema).default([]),
445
+ subprotocols: z.array(z.string()).default([]),
446
+ auth: authConfigSchema.default({ type: 'inherit' }),
447
+ settings: wsSettingsSchema.default({}),
448
+ messages: z.array(wsSavedMessageSchema).default([]),
449
+ });
450
+ /** `apis/<slug>/api.yaml` for a WebSocket API. */
451
+ export const wsApiFileSchema = z.looseObject({
452
+ kind: z.literal('websocket'),
453
+ id: nonEmpty,
454
+ name: z.string(),
455
+ order: z.number().int(),
456
+ description: z.string().optional(),
457
+ url: z.string(),
458
+ headers: z.array(keyValueEntrySchema).default([]),
459
+ auth: authConfigSchema.optional(),
460
+ definition: z
461
+ .looseObject({ kind: z.literal('asyncapi'), source: nonEmpty, cache: z.boolean().default(true) })
462
+ .optional(),
463
+ });
464
+ /** Every protocol this build can load. A `kind` outside this list is refused by name, never guessed at. */
465
+ const SUPPORTED_KINDS = ['soap', 'rest', 'grpc', 'websocket'];
466
+ /**
467
+ * Refuses a document whose `kind` this build does not know how to honour — a protocol a later
468
+ * release adds, or a typo — before schema validation, so the error says what is actually wrong
469
+ * ("this build cannot open a graphql document") instead of "expected 'rest', received 'graphql'",
470
+ * and so a project written by a future build fails loudly rather than losing its requests to a
471
+ * dropped unknown key. `grpc` was the reserved name this guard existed for until the gRPC client
472
+ * arrived; it stays for whatever comes next.
473
+ *
474
+ * @throws ProjectError `project-kind-not-supported`
475
+ */
476
+ export function assertSupportedKind(document, file) {
477
+ if (typeof document !== 'object' || document === null || Array.isArray(document)) {
478
+ return;
479
+ }
480
+ const kind = document['kind'];
481
+ if (typeof kind !== 'string' || SUPPORTED_KINDS.includes(kind)) {
482
+ return;
483
+ }
484
+ throw new ProjectError('project-kind-not-supported', `${file} is a "${kind}" document, which this build cannot open`, {
485
+ details: { file, kind, supported: SUPPORTED_KINDS },
486
+ });
487
+ }
488
+ /** The `kind` of an `api.yaml`, read ahead of full validation so the loader knows which schema applies. */
489
+ export function apiKindOf(document) {
490
+ const kind = typeof document === 'object' && document !== null ? document['kind'] : undefined;
491
+ if (kind === 'grpc' || kind === 'websocket') {
492
+ return kind;
493
+ }
494
+ return 'rest';
495
+ }
496
+ /** `environments/<slug>.yaml`. */
497
+ export const environmentFileSchema = z.looseObject({
498
+ id: nonEmpty,
499
+ name: z.string(),
500
+ order: z.number().int(),
501
+ endpoints: z.record(z.string(), z.string()),
502
+ properties: propertyMapSchema,
503
+ /** Names of `properties` entries switched off; absent means none. */
504
+ disabled: z.array(z.string()).optional(),
505
+ });
506
+ /** A `wsu:Timestamp` entry inside an outgoing configuration. */
507
+ const wssTimestampEntrySchema = z.looseObject({
508
+ kind: z.literal('timestamp'),
509
+ timeToLiveSeconds: z.number().int().nonnegative(),
510
+ millisecondPrecision: z.boolean(),
511
+ });
512
+ /**
513
+ * A `wsse:UsernameToken` entry. As with `endpointAuthSchema`, a plaintext `password` key is
514
+ * rejected outright rather than merely ignored: WS-Security passwords live in the secret store.
515
+ */
516
+ const wssUsernameTokenEntrySchema = z
517
+ .looseObject({
518
+ kind: z.literal('username-token'),
519
+ username: z.string(),
520
+ passwordRef: z.string().optional(),
521
+ passwordType: z.enum(['text', 'digest', 'none']),
522
+ addNonce: z.boolean(),
523
+ addCreated: z.boolean(),
524
+ })
525
+ .refine((value) => !('password' in value), {
526
+ message: 'a WS-Security username token must not contain a plaintext "password" field; use passwordRef',
527
+ path: ['password'],
528
+ });
529
+ /** One `{name, namespace, encode}` message part a signature covers. */
530
+ const wssPartSchema = z.looseObject({
531
+ name: z.string(),
532
+ namespace: z.string(),
533
+ encode: z.enum(['Content', 'Element']),
534
+ });
535
+ /**
536
+ * A signature entry: the signing key, how its certificate is referenced, and what it covers.
537
+ *
538
+ * Every field but `kind` defaults, so a bare `{kind:'signature'}` — a Task 37-era file, or one
539
+ * a foreign tool wrote with only the fields it cared about — loads as a complete, if useless,
540
+ * signature entry rather than being rejected outright; the editor is expected to fill in a real
541
+ * `keystoreRef` before the entry can actually be applied.
542
+ */
543
+ const wssSignatureEntrySchema = z.looseObject({
544
+ kind: z.literal('signature'),
545
+ keystoreRef: z.string().default(''),
546
+ alias: z.string().optional(),
547
+ keyPasswordRef: z.string().optional(),
548
+ keyIdentifierType: z
549
+ .enum(['BinarySecurityToken', 'IssuerSerial', 'SubjectKeyIdentifier', 'X509KeyIdentifier', 'Thumbprint'])
550
+ .default('BinarySecurityToken'),
551
+ signatureAlgorithm: z.enum(['rsa-sha256', 'rsa-sha1']).default('rsa-sha256'),
552
+ digestAlgorithm: z.enum(['sha256', 'sha1']).default('sha256'),
553
+ canonicalization: z.literal('exc-c14n').default('exc-c14n'),
554
+ useSingleCertificate: z.boolean().default(true),
555
+ parts: z
556
+ .array(wssPartSchema)
557
+ .default(DEFAULT_WSS_SIGNATURE_PARTS),
558
+ });
559
+ /**
560
+ * An encryption entry. Tolerant the same way the signature entry is: every field defaults, so a
561
+ * document written by hand (or by an older build) still loads as a usable entry rather than
562
+ * falling through the union to "unsupported".
563
+ */
564
+ const wssEncryptionEntrySchema = z.looseObject({
565
+ kind: z.literal('encryption'),
566
+ keystoreRef: z.string().default(''),
567
+ alias: z.string().optional(),
568
+ keyIdentifierType: z
569
+ .enum(['BinarySecurityToken', 'IssuerSerial', 'SubjectKeyIdentifier', 'X509KeyIdentifier', 'Thumbprint'])
570
+ .default('BinarySecurityToken'),
571
+ symmetricAlgorithm: z.enum(['aes128-cbc', 'aes256-cbc', 'aes128-gcm', 'aes256-gcm']).default('aes256-gcm'),
572
+ keyTransportAlgorithm: z.enum(['rsa-oaep', 'rsa-1_5']).default('rsa-oaep'),
573
+ embedKey: z.boolean().default(false),
574
+ encryptSymmetricKey: z.boolean().default(true),
575
+ parts: z
576
+ .array(wssPartSchema)
577
+ .default(DEFAULT_WSS_ENCRYPTION_PARTS),
578
+ });
579
+ /**
580
+ * One entry as *persisted*. Deliberately loose about the entry's own shape — a `signature`
581
+ * entry written by a later build, or a document a foreign tool wrote, must survive a load/save
582
+ * round trip through this build — but a plaintext `password` is rejected outright, wherever in
583
+ * an entry it appears.
584
+ */
585
+ const wssStoredEntrySchema = z.looseObject({}).refine((value) => !('password' in value), {
586
+ message: 'a WS-Security entry must not contain a plaintext "password" field; use passwordRef',
587
+ path: ['password'],
588
+ });
589
+ /** One entry of an outgoing WS-Security configuration, as this build understands it. */
590
+ export const wssEntrySchema = z.union([
591
+ wssTimestampEntrySchema,
592
+ wssUsernameTokenEntrySchema,
593
+ wssSignatureEntrySchema,
594
+ wssEncryptionEntrySchema,
595
+ ]);
596
+ /** `wss/outgoing/<name>.yaml`. */
597
+ export const wssOutgoingFileSchema = z.looseObject({
598
+ id: nonEmpty,
599
+ name: z.string(),
600
+ defaultAlias: z.string().optional(),
601
+ defaultPasswordRef: z.string().optional(),
602
+ actor: z.string().optional(),
603
+ mustUnderstand: z.boolean().optional(),
604
+ entries: z.array(wssStoredEntrySchema).optional(),
605
+ });
606
+ /**
607
+ * `wss/incoming/<name>.yaml`. Tolerant in the same way the outgoing entries are: every field
608
+ * but `id`/`name` defaults, so a document written by an older build (which had only the two
609
+ * keystore refs) loads as a complete configuration rather than being rejected.
610
+ */
611
+ export const wssIncomingFileSchema = z.looseObject({
612
+ id: nonEmpty,
613
+ name: z.string(),
614
+ decryptKeystoreRef: z.string().optional(),
615
+ decryptAlias: z.string().optional(),
616
+ decryptKeyPasswordRef: z.string().optional(),
617
+ signatureKeystoreRef: z.string().optional(),
618
+ requireSignature: z.boolean().optional(),
619
+ requireTimestamp: z.boolean().optional(),
620
+ timestampSkewSeconds: z.number().int().nonnegative().optional(),
621
+ verifyChain: z.boolean().optional(),
622
+ });
623
+ /**
624
+ * One `wss/keystores.yaml` entry: mirrors the engine's `KeystoreDef`. `looseObject` so a field
625
+ * a later build adds survives a load/save round trip through this one. Never a password — only
626
+ * a `secretRef` the host resolves through `safeStorage`.
627
+ */
628
+ export const keystoreEntrySchema = z.looseObject({
629
+ id: nonEmpty,
630
+ name: z.string(),
631
+ path: nonEmpty,
632
+ type: z.enum(['pkcs12', 'pem']),
633
+ passwordSecretRef: z.string().optional(),
634
+ passwordEnv: envName,
635
+ defaultAlias: z.string().optional(),
636
+ });
637
+ /** `wss/keystores.yaml` — the project's client keystore registry. */
638
+ export const keystoresFileSchema = z.looseObject({
639
+ keystores: z.array(keystoreEntrySchema),
640
+ });
641
+ /** One document entry inside `interfaces/<slug>/definition/manifest.yaml`. */
642
+ const definitionCacheDocumentSchema = z.looseObject({
643
+ file: nonEmpty,
644
+ location: nonEmpty,
645
+ requestedLocation: z.string().optional(),
646
+ kind: z.enum(['wsdl', 'xsd']),
647
+ sha256: nonEmpty,
648
+ bytes: z.number().int().nonnegative(),
649
+ importedBy: z.string().optional(),
650
+ namespace: z.string().optional(),
651
+ chameleonFor: z.string().optional(),
652
+ });
653
+ /** `interfaces/<slug>/definition/manifest.yaml`. */
654
+ export const definitionCacheManifestSchema = z.looseObject({
655
+ formatVersion: z.literal(1),
656
+ rootLocation: nonEmpty,
657
+ fetchedAt: nonEmpty,
658
+ documents: z.array(definitionCacheDocumentSchema),
659
+ });
660
+ /** One entry of `apis/<slug>/definition/manifest.yaml`. */
661
+ const apiDefinitionCacheDocumentSchema = z.looseObject({
662
+ file: nonEmpty,
663
+ location: nonEmpty,
664
+ requestedLocation: z.string().optional(),
665
+ sha256: nonEmpty,
666
+ bytes: z.number().int().nonnegative(),
667
+ });
668
+ /**
669
+ * `apis/<slug>/definition/manifest.yaml`. Its own schema rather than the WSDL one because an
670
+ * OpenAPI document has no `kind`, `namespace` or `importedBy` to record — a JSON or YAML file
671
+ * references its siblings by location and nothing else.
672
+ */
673
+ export const apiDefinitionCacheManifestSchema = z.looseObject({
674
+ formatVersion: z.literal(1),
675
+ rootLocation: nonEmpty,
676
+ fetchedAt: nonEmpty,
677
+ /** The `openapi` string the root document declared, so the API tab can show it without parsing. */
678
+ declaredVersion: z.string().optional(),
679
+ documents: z.array(apiDefinitionCacheDocumentSchema),
680
+ });
681
+ /** One `.proto` file of `apis/<slug>/definition/manifest.yaml` for a gRPC API. */
682
+ const protoDefinitionCacheFileSchema = z.looseObject({
683
+ /** The import path, which is also the path under `definition/protos/`. */
684
+ path: nonEmpty,
685
+ sha256: nonEmpty,
686
+ bytes: z.number().int().nonnegative(),
687
+ });
688
+ /**
689
+ * `apis/<slug>/definition/manifest.yaml` for a gRPC API: the `.proto` files an import was made of,
690
+ * each stored byte-exact under `protos/` at its import path so the set loads again exactly as the
691
+ * imports spell it. The `kind` tells a reader which of the two API manifests it has.
692
+ */
693
+ export const protoDefinitionCacheManifestSchema = z.looseObject({
694
+ formatVersion: z.literal(1),
695
+ kind: z.literal('proto'),
696
+ /** Where the files came from, as the user gave it. */
697
+ source: nonEmpty,
698
+ fetchedAt: nonEmpty,
699
+ roots: z.array(nonEmpty),
700
+ files: z.array(protoDefinitionCacheFileSchema),
701
+ });
702
+ /**
703
+ * `apis/<slug>/definition/manifest.yaml` for a gRPC API discovered by server reflection: one binary
704
+ * `FileDescriptorSet` beside it, because a server describes itself in the compiler's own output and
705
+ * there is no `.proto` text to keep. The `kind` is what tells the two gRPC manifests apart.
706
+ */
707
+ export const descriptorDefinitionCacheManifestSchema = z.looseObject({
708
+ formatVersion: z.literal(1),
709
+ kind: z.literal('descriptors'),
710
+ /** The target the server was asked at, as the user gave it. */
711
+ source: nonEmpty,
712
+ fetchedAt: nonEmpty,
713
+ /** The descriptor files declaring the services, which the set is loaded from. */
714
+ roots: z.array(nonEmpty).default([]),
715
+ /** The reflection protocol version that answered. */
716
+ reflectionVersion: z.enum(['v1', 'v1alpha']).optional(),
717
+ /** The descriptor set itself: its path under `definition/`, its SHA-256 and its size. */
718
+ file: protoDefinitionCacheFileSchema,
719
+ });
720
+ /**
721
+ * Validates `value` against `schema`, raising
722
+ * `ProjectError('project-file-invalid')` carrying the file path and the
723
+ * individual zod issues when it does not match.
724
+ */
725
+ export function parseFile(schema, value, file) {
726
+ const result = schema.safeParse(value);
727
+ if (result.success) {
728
+ return result.data;
729
+ }
730
+ const issues = result.error.issues.map((issue) => ({
731
+ path: issue.path.join('.'),
732
+ message: issue.message,
733
+ }));
734
+ throw new ProjectError('project-file-invalid', `Invalid project file ${file}`, {
735
+ details: { file, issues },
736
+ });
737
+ }