@wirebench/engine 2.2.1 → 3.1.0-rc.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 (566) hide show
  1. package/README.md +134 -1
  2. package/dist/account/schema.d.ts +34 -0
  3. package/dist/account/schema.js +29 -0
  4. package/dist/assert/callback.d.ts +76 -0
  5. package/dist/assert/callback.js +320 -0
  6. package/dist/assert/capture-source.d.ts +50 -0
  7. package/dist/assert/capture-source.js +89 -0
  8. package/dist/assert/check.d.ts +8 -0
  9. package/dist/assert/check.js +18 -0
  10. package/dist/assert/header.d.ts +5 -0
  11. package/dist/assert/header.js +48 -0
  12. package/dist/assert/index.d.ts +2 -2
  13. package/dist/assert/index.js +12 -0
  14. package/dist/assert/match.d.ts +6 -0
  15. package/dist/assert/match.js +13 -4
  16. package/dist/assert/model.d.ts +110 -3
  17. package/dist/assert/model.js +16 -1
  18. package/dist/assert/schema.d.ts +194 -1
  19. package/dist/assert/schema.js +154 -12
  20. package/dist/assert/status-names.d.ts +9 -0
  21. package/dist/assert/status-names.js +27 -0
  22. package/dist/assert/status.d.ts +4 -1
  23. package/dist/assert/status.js +27 -3
  24. package/dist/asyncapi/browser.d.ts +7 -0
  25. package/dist/asyncapi/browser.js +6 -0
  26. package/dist/asyncapi/frame-check-worker-host.d.ts +44 -0
  27. package/dist/asyncapi/frame-check-worker-host.js +175 -0
  28. package/dist/asyncapi/frame-check-worker.d.ts +12 -0
  29. package/dist/asyncapi/frame-check-worker.js +25 -0
  30. package/dist/asyncapi/frame-check.d.ts +25 -0
  31. package/dist/asyncapi/frame-check.js +78 -0
  32. package/dist/asyncapi/import.d.ts +25 -0
  33. package/dist/asyncapi/import.js +34 -0
  34. package/dist/asyncapi/map.d.ts +40 -0
  35. package/dist/asyncapi/map.js +230 -0
  36. package/dist/asyncapi/model.d.ts +84 -0
  37. package/dist/asyncapi/model.js +7 -0
  38. package/dist/asyncapi/normalise-2.d.ts +13 -0
  39. package/dist/asyncapi/normalise-2.js +113 -0
  40. package/dist/asyncapi/normalise-3.d.ts +14 -0
  41. package/dist/asyncapi/normalise-3.js +133 -0
  42. package/dist/asyncapi/parse.d.ts +31 -0
  43. package/dist/asyncapi/parse.js +85 -0
  44. package/dist/asyncapi/read.d.ts +35 -0
  45. package/dist/asyncapi/read.js +186 -0
  46. package/dist/asyncapi/security.d.ts +14 -0
  47. package/dist/asyncapi/security.js +55 -0
  48. package/dist/asyncapi/update.d.ts +53 -0
  49. package/dist/asyncapi/update.js +220 -0
  50. package/dist/errors.d.ts +16 -0
  51. package/dist/errors.js +22 -0
  52. package/dist/grpc/events.d.ts +22 -0
  53. package/dist/grpc/events.js +1 -0
  54. package/dist/grpc/expand.d.ts +1 -1
  55. package/dist/grpc/expand.js +15 -5
  56. package/dist/grpc/files.d.ts +271 -0
  57. package/dist/grpc/files.js +62 -0
  58. package/dist/grpc/model.d.ts +11 -1
  59. package/dist/grpc/module.d.ts +2 -0
  60. package/dist/grpc/module.js +13 -0
  61. package/dist/grpc/run.d.ts +73 -0
  62. package/dist/grpc/run.js +407 -0
  63. package/dist/grpc/script-types.d.ts +8 -0
  64. package/dist/grpc/script-types.js +149 -0
  65. package/dist/grpc/scripting.d.ts +34 -0
  66. package/dist/grpc/scripting.js +147 -0
  67. package/dist/grpc/send-input.d.ts +46 -0
  68. package/dist/grpc/send-input.js +42 -0
  69. package/dist/grpc/send.d.ts +2 -2
  70. package/dist/grpc/status.d.ts +9 -2
  71. package/dist/grpc/status.js +11 -24
  72. package/dist/grpc/storage.d.ts +9 -0
  73. package/dist/grpc/storage.js +167 -0
  74. package/dist/{rest/auth.d.ts → http/auth/apply-auth.d.ts} +4 -4
  75. package/dist/{rest/auth.js → http/auth/apply-auth.js} +1 -1
  76. package/dist/http/auth/apply.d.ts +1 -1
  77. package/dist/{rest → http/auth}/oauth2.d.ts +2 -2
  78. package/dist/{rest → http/auth}/oauth2.js +1 -1
  79. package/dist/http/auth/send-auth.d.ts +57 -0
  80. package/dist/http/auth/send-auth.js +7 -0
  81. package/dist/http/client.js +150 -8
  82. package/dist/http/cookies.d.ts +79 -0
  83. package/dist/http/cookies.js +81 -0
  84. package/dist/http/curl.d.ts +4 -14
  85. package/dist/http/curl.js +4 -154
  86. package/dist/http/decompress.d.ts +7 -0
  87. package/dist/http/decompress.js +23 -1
  88. package/dist/http/document-fetch.d.ts +42 -0
  89. package/dist/http/document-fetch.js +207 -0
  90. package/dist/http/entries.d.ts +27 -0
  91. package/dist/http/entries.js +16 -0
  92. package/dist/http/escape.d.ts +18 -0
  93. package/dist/http/escape.js +30 -0
  94. package/dist/http/fetch-document.d.ts +28 -0
  95. package/dist/{wsdl/fetch.js → http/fetch-document.js} +8 -16
  96. package/dist/http/media-type.d.ts +9 -0
  97. package/dist/http/media-type.js +12 -0
  98. package/dist/http/transcript-cap.d.ts +26 -0
  99. package/dist/http/transcript-cap.js +36 -0
  100. package/dist/http/types.d.ts +59 -0
  101. package/dist/http/webhook-signature.d.ts +81 -0
  102. package/dist/http/webhook-signature.js +227 -0
  103. package/dist/import-detect.d.ts +2 -2
  104. package/dist/import-detect.js +10 -1
  105. package/dist/index.d.ts +207 -55
  106. package/dist/index.js +129 -32
  107. package/dist/json/cursor.d.ts +2 -0
  108. package/dist/json/cursor.js +1 -0
  109. package/dist/json/pointer-range.d.ts +18 -0
  110. package/dist/json/pointer-range.js +157 -0
  111. package/dist/json/schema/model.d.ts +59 -0
  112. package/dist/json/schema/model.js +8 -0
  113. package/dist/json/schema/parse-text.d.ts +16 -0
  114. package/dist/json/schema/parse-text.js +37 -0
  115. package/dist/{rest/openapi → json/schema}/refs.d.ts +2 -2
  116. package/dist/{rest/openapi → json/schema}/refs.js +3 -3
  117. package/dist/{rest/openapi → json/schema}/sample.d.ts +4 -0
  118. package/dist/{rest/openapi → json/schema}/sample.js +2 -2
  119. package/dist/json/schema/source.d.ts +21 -0
  120. package/dist/json/schema/source.js +8 -0
  121. package/dist/json/schema-validate.d.ts +49 -0
  122. package/dist/json/schema-validate.js +557 -0
  123. package/dist/{wss/keystore → keystore}/index.js +1 -1
  124. package/dist/{wss/keystore → keystore}/pem.js +1 -1
  125. package/dist/{wss/keystore → keystore}/pkcs12.js +1 -1
  126. package/dist/project/attachments-cache.d.ts +3 -1
  127. package/dist/{wsdl → project}/cache-naming.js +1 -1
  128. package/dist/project/endpoints.d.ts +18 -8
  129. package/dist/project/endpoints.js +21 -6
  130. package/dist/project/environments.d.ts +7 -5
  131. package/dist/project/history.d.ts +105 -9
  132. package/dist/project/history.js +195 -23
  133. package/dist/project/inherit.d.ts +7 -0
  134. package/dist/project/inherit.js +9 -0
  135. package/dist/project/keystores.d.ts +1 -1
  136. package/dist/project/load-helpers.d.ts +89 -0
  137. package/dist/project/load-helpers.js +177 -0
  138. package/dist/project/load.d.ts +30 -4
  139. package/dist/project/load.js +168 -545
  140. package/dist/project/managed-files.d.ts +36 -0
  141. package/dist/project/managed-files.js +97 -0
  142. package/dist/project/migrate.d.ts +2 -2
  143. package/dist/project/migrate.js +2 -2
  144. package/dist/project/model.d.ts +92 -14
  145. package/dist/project/model.js +50 -4
  146. package/dist/project/paths.d.ts +10 -1
  147. package/dist/project/paths.js +10 -1
  148. package/dist/project/preferences.d.ts +11 -2
  149. package/dist/project/preferences.js +5 -1
  150. package/dist/project/properties.d.ts +31 -17
  151. package/dist/project/properties.js +89 -70
  152. package/dist/project/request-location.d.ts +20 -0
  153. package/dist/project/request-location.js +62 -0
  154. package/dist/project/save.d.ts +12 -2
  155. package/dist/project/save.js +186 -141
  156. package/dist/project/schema-parts.d.ts +337 -0
  157. package/dist/project/schema-parts.js +248 -0
  158. package/dist/project/schema.d.ts +72 -928
  159. package/dist/project/schema.js +17 -466
  160. package/dist/project/sequence-guards.d.ts +43 -0
  161. package/dist/project/sequence-guards.js +109 -0
  162. package/dist/project/serialize-helpers.d.ts +60 -0
  163. package/dist/project/serialize-helpers.js +108 -0
  164. package/dist/project/serialize.d.ts +7 -8
  165. package/dist/project/serialize.js +34 -293
  166. package/dist/protocol/features.d.ts +51 -0
  167. package/dist/protocol/features.js +64 -0
  168. package/dist/protocol/index.d.ts +7 -0
  169. package/dist/protocol/index.js +4 -0
  170. package/dist/protocol/module.d.ts +247 -0
  171. package/dist/protocol/module.js +48 -0
  172. package/dist/protocol/registry.d.ts +42 -0
  173. package/dist/protocol/registry.js +47 -0
  174. package/dist/protocols.d.ts +77 -0
  175. package/dist/protocols.js +40 -0
  176. package/dist/redact/index.d.ts +12 -1
  177. package/dist/redact/index.js +55 -7
  178. package/dist/redact/literal.d.ts +10 -0
  179. package/dist/redact/literal.js +110 -12
  180. package/dist/rest/body.d.ts +2 -10
  181. package/dist/rest/body.js +3 -25
  182. package/dist/rest/browser.d.ts +4 -0
  183. package/dist/rest/browser.js +5 -0
  184. package/dist/rest/contract-check-worker-host.d.ts +36 -0
  185. package/dist/rest/contract-check-worker-host.js +158 -0
  186. package/dist/rest/contract-check-worker.d.ts +7 -0
  187. package/dist/rest/contract-check-worker.js +28 -0
  188. package/dist/rest/contract-check.d.ts +43 -0
  189. package/dist/rest/contract-check.js +217 -0
  190. package/dist/rest/cookie-jar.d.ts +62 -0
  191. package/dist/rest/cookie-jar.js +262 -0
  192. package/dist/rest/cookies.d.ts +6 -22
  193. package/dist/rest/cookies.js +6 -42
  194. package/dist/rest/curl.js +5 -1
  195. package/dist/rest/events.d.ts +12 -0
  196. package/dist/rest/events.js +1 -0
  197. package/dist/rest/expand.d.ts +6 -1
  198. package/dist/rest/expand.js +29 -11
  199. package/dist/rest/files.d.ts +439 -0
  200. package/dist/rest/files.js +107 -0
  201. package/dist/rest/json-form.d.ts +97 -0
  202. package/dist/rest/json-form.js +396 -0
  203. package/dist/rest/model.d.ts +35 -24
  204. package/dist/rest/model.js +6 -9
  205. package/dist/rest/module.d.ts +2 -0
  206. package/dist/rest/module.js +13 -0
  207. package/dist/rest/openapi/cache.d.ts +7 -2
  208. package/dist/rest/openapi/cache.js +2 -2
  209. package/dist/rest/openapi/import.d.ts +11 -16
  210. package/dist/rest/openapi/import.js +6 -2
  211. package/dist/rest/openapi/map.d.ts +38 -1
  212. package/dist/rest/openapi/map.js +151 -41
  213. package/dist/rest/openapi/match.d.ts +20 -0
  214. package/dist/rest/openapi/match.js +117 -0
  215. package/dist/rest/openapi/model.d.ts +33 -45
  216. package/dist/rest/openapi/parse.d.ts +3 -12
  217. package/dist/rest/openapi/parse.js +138 -67
  218. package/dist/rest/openapi/responses.d.ts +23 -0
  219. package/dist/rest/openapi/responses.js +59 -0
  220. package/dist/rest/openapi/runtime-expression.d.ts +69 -0
  221. package/dist/rest/openapi/runtime-expression.js +213 -0
  222. package/dist/rest/openapi/update.d.ts +116 -0
  223. package/dist/rest/openapi/update.js +456 -0
  224. package/dist/rest/postman/map.d.ts +1 -0
  225. package/dist/rest/postman/map.js +66 -4
  226. package/dist/rest/postman/model.d.ts +9 -0
  227. package/dist/rest/postman/parse.js +33 -10
  228. package/dist/rest/response.d.ts +2 -23
  229. package/dist/rest/response.js +3 -75
  230. package/dist/rest/run.d.ts +56 -0
  231. package/dist/rest/run.js +395 -0
  232. package/dist/rest/script-types.d.ts +7 -0
  233. package/dist/rest/script-types.js +83 -0
  234. package/dist/rest/scripting.d.ts +38 -0
  235. package/dist/rest/scripting.js +282 -0
  236. package/dist/rest/send-input.d.ts +54 -0
  237. package/dist/rest/send-input.js +73 -0
  238. package/dist/rest/send.d.ts +77 -4
  239. package/dist/rest/send.js +128 -7
  240. package/dist/rest/sse-transcript.d.ts +25 -0
  241. package/dist/rest/sse-transcript.js +95 -0
  242. package/dist/rest/sse.d.ts +43 -0
  243. package/dist/rest/sse.js +195 -0
  244. package/dist/rest/storage.d.ts +26 -0
  245. package/dist/rest/storage.js +262 -0
  246. package/dist/rest/url.d.ts +10 -4
  247. package/dist/rest/url.js +38 -5
  248. package/dist/run/baseline-update.d.ts +35 -0
  249. package/dist/run/baseline-update.js +97 -0
  250. package/dist/run/baseline.d.ts +42 -0
  251. package/dist/run/baseline.js +93 -0
  252. package/dist/run/context.d.ts +86 -0
  253. package/dist/run/context.js +31 -0
  254. package/dist/run/current-values.d.ts +32 -0
  255. package/dist/run/current-values.js +43 -0
  256. package/dist/run/event-queue.d.ts +14 -0
  257. package/dist/run/event-queue.js +46 -0
  258. package/dist/run/exchange.d.ts +62 -0
  259. package/dist/run/exchange.js +65 -0
  260. package/dist/run/host.d.ts +89 -0
  261. package/dist/run/host.js +1 -0
  262. package/dist/run/index.d.ts +20 -7
  263. package/dist/run/index.js +12 -4
  264. package/dist/run/oauth2-token.d.ts +42 -0
  265. package/dist/run/oauth2-token.js +92 -0
  266. package/dist/run/open.d.ts +12 -0
  267. package/dist/run/open.js +16 -0
  268. package/dist/run/run.d.ts +124 -4
  269. package/dist/run/run.js +293 -134
  270. package/dist/run/scope.d.ts +11 -0
  271. package/dist/run/scope.js +26 -0
  272. package/dist/run/script-support.d.ts +53 -0
  273. package/dist/run/script-support.js +68 -0
  274. package/dist/run/secret-needs.d.ts +11 -4
  275. package/dist/run/secret-needs.js +48 -96
  276. package/dist/run/select.d.ts +34 -25
  277. package/dist/run/select.js +45 -54
  278. package/dist/run/send-helpers.d.ts +93 -0
  279. package/dist/run/send-helpers.js +255 -0
  280. package/dist/run/tree.d.ts +50 -0
  281. package/dist/run/tree.js +54 -0
  282. package/dist/script/api/postman.d.ts +10 -0
  283. package/dist/script/api/postman.js +264 -0
  284. package/dist/script/api/prelude.d.ts +20 -0
  285. package/dist/script/api/prelude.js +215 -0
  286. package/dist/script/apply.d.ts +44 -0
  287. package/dist/script/apply.js +120 -0
  288. package/dist/script/check/host.d.ts +41 -0
  289. package/dist/script/check/host.js +143 -0
  290. package/dist/script/check/service.d.ts +52 -0
  291. package/dist/script/check/service.js +195 -0
  292. package/dist/script/check/worker.d.ts +1 -0
  293. package/dist/script/check/worker.js +40 -0
  294. package/dist/script/index.d.ts +16 -0
  295. package/dist/script/index.js +10 -0
  296. package/dist/script/lookup.d.ts +10 -0
  297. package/dist/script/lookup.js +23 -0
  298. package/dist/script/model.d.ts +82 -0
  299. package/dist/script/model.js +18 -0
  300. package/dist/script/props.d.ts +8 -0
  301. package/dist/script/props.js +28 -0
  302. package/dist/script/request-scripts.d.ts +83 -0
  303. package/dist/script/request-scripts.js +160 -0
  304. package/dist/script/run.d.ts +47 -0
  305. package/dist/script/run.js +146 -0
  306. package/dist/script/sandbox/execute.d.ts +26 -0
  307. package/dist/script/sandbox/execute.js +212 -0
  308. package/dist/script/sandbox/host-api.d.ts +27 -0
  309. package/dist/script/sandbox/host-api.js +101 -0
  310. package/dist/script/sandbox/host.d.ts +18 -0
  311. package/dist/script/sandbox/host.js +172 -0
  312. package/dist/script/sandbox/model.d.ts +69 -0
  313. package/dist/script/sandbox/model.js +24 -0
  314. package/dist/script/sandbox/worker.d.ts +1 -0
  315. package/dist/script/sandbox/worker.js +20 -0
  316. package/dist/script/send.d.ts +27 -0
  317. package/dist/script/send.js +76 -0
  318. package/dist/script/strip.d.ts +5 -0
  319. package/dist/script/strip.js +43 -0
  320. package/dist/script/types/api.d.ts +38 -0
  321. package/dist/script/types/api.js +113 -0
  322. package/dist/script/types/json-schema.d.ts +26 -0
  323. package/dist/script/types/json-schema.js +206 -0
  324. package/dist/secrets/env-names.d.ts +9 -1
  325. package/dist/secrets/env-names.js +17 -1
  326. package/dist/secrets/resolve.d.ts +44 -4
  327. package/dist/secrets/resolve.js +58 -1
  328. package/dist/secrets/scan/apply.d.ts +36 -0
  329. package/dist/secrets/scan/apply.js +194 -0
  330. package/dist/secrets/scan/rules.d.ts +32 -0
  331. package/dist/secrets/scan/rules.js +346 -0
  332. package/dist/secrets/scan/scan.d.ts +6 -0
  333. package/dist/secrets/scan/scan.js +57 -0
  334. package/dist/secrets/scan/walk.d.ts +70 -0
  335. package/dist/secrets/scan/walk.js +156 -0
  336. package/dist/secrets/secret-refs.d.ts +8 -0
  337. package/dist/secrets/secret-refs.js +25 -0
  338. package/dist/secrets/secret-token.d.ts +17 -0
  339. package/dist/secrets/secret-token.js +25 -0
  340. package/dist/sequence/file.d.ts +169 -0
  341. package/dist/sequence/file.js +237 -0
  342. package/dist/sequence/index.d.ts +7 -0
  343. package/dist/sequence/index.js +5 -0
  344. package/dist/sequence/load.d.ts +32 -0
  345. package/dist/sequence/load.js +56 -0
  346. package/dist/sequence/model.d.ts +115 -0
  347. package/dist/sequence/model.js +53 -0
  348. package/dist/sequence/run.d.ts +131 -0
  349. package/dist/sequence/run.js +191 -0
  350. package/dist/sequence/transfer.d.ts +24 -0
  351. package/dist/sequence/transfer.js +75 -0
  352. package/dist/server-api/audit.d.ts +455 -0
  353. package/dist/server-api/audit.js +186 -0
  354. package/dist/server-api/ci-tokens.d.ts +50 -0
  355. package/dist/server-api/ci-tokens.js +35 -0
  356. package/dist/server-api/hooks.d.ts +337 -0
  357. package/dist/server-api/hooks.js +152 -0
  358. package/dist/server-api/identity.d.ts +210 -0
  359. package/dist/server-api/identity.js +115 -0
  360. package/dist/server-api/licensing.d.ts +80 -0
  361. package/dist/server-api/licensing.js +53 -0
  362. package/dist/server-api/live.d.ts +132 -0
  363. package/dist/server-api/live.js +102 -0
  364. package/dist/server-api/meta.d.ts +31 -0
  365. package/dist/server-api/meta.js +21 -0
  366. package/dist/server-api/sync.d.ts +179 -0
  367. package/dist/server-api/sync.js +124 -0
  368. package/dist/server-api/teams.d.ts +306 -0
  369. package/dist/server-api/teams.js +113 -0
  370. package/dist/snapshot/diff.d.ts +30 -0
  371. package/dist/snapshot/diff.js +75 -0
  372. package/dist/snapshot/format.d.ts +17 -0
  373. package/dist/snapshot/format.js +40 -0
  374. package/dist/snapshot/golden-file.d.ts +45 -0
  375. package/dist/snapshot/golden-file.js +173 -0
  376. package/dist/snapshot/ignore.d.ts +14 -0
  377. package/dist/snapshot/ignore.js +79 -0
  378. package/dist/snapshot/index.d.ts +9 -0
  379. package/dist/snapshot/index.js +9 -0
  380. package/dist/snapshot/json-diff.d.ts +3 -0
  381. package/dist/snapshot/json-diff.js +93 -0
  382. package/dist/snapshot/xml-diff.d.ts +10 -0
  383. package/dist/snapshot/xml-diff.js +194 -0
  384. package/dist/soap/auth.d.ts +26 -0
  385. package/dist/soap/auth.js +54 -0
  386. package/dist/soap/curl.d.ts +20 -0
  387. package/dist/soap/curl.js +161 -0
  388. package/dist/soap/expand.d.ts +24 -0
  389. package/dist/soap/expand.js +95 -0
  390. package/dist/soap/files.d.ts +384 -0
  391. package/dist/soap/files.js +114 -0
  392. package/dist/soap/form-request.d.ts +13 -0
  393. package/dist/soap/form-request.js +2 -2
  394. package/dist/soap/generate.d.ts +12 -0
  395. package/dist/{generate.js → soap/generate.js} +4 -4
  396. package/dist/{import.d.ts → soap/import.d.ts} +4 -4
  397. package/dist/{import.js → soap/import.js} +13 -13
  398. package/dist/soap/json-operation.d.ts +35 -0
  399. package/dist/soap/json-operation.js +225 -0
  400. package/dist/soap/legacy-project/env-refs.d.ts +19 -0
  401. package/dist/soap/legacy-project/env-refs.js +105 -0
  402. package/dist/soap/legacy-project/map.d.ts +2 -2
  403. package/dist/soap/legacy-project/map.js +6 -0
  404. package/dist/soap/mime/multipart.d.ts +2 -2
  405. package/dist/soap/mime/multipart.js +2 -5
  406. package/dist/soap/mime/send-pipeline.d.ts +1 -1
  407. package/dist/soap/mime/send-pipeline.js +1 -1
  408. package/dist/soap/mime/types.d.ts +1 -3
  409. package/dist/soap/module.d.ts +2 -0
  410. package/dist/soap/module.js +13 -0
  411. package/dist/soap/namespace-scope.js +1 -1
  412. package/dist/soap/operations.d.ts +12 -0
  413. package/dist/{operations.js → soap/operations.js} +4 -4
  414. package/dist/soap/run.d.ts +70 -0
  415. package/dist/soap/run.js +549 -0
  416. package/dist/soap/script-types.d.ts +65 -0
  417. package/dist/soap/script-types.js +379 -0
  418. package/dist/soap/scripting.d.ts +45 -0
  419. package/dist/soap/scripting.js +221 -0
  420. package/dist/soap/send-input.d.ts +61 -0
  421. package/dist/{send-options.js → soap/send-input.js} +5 -109
  422. package/dist/{send.d.ts → soap/send.d.ts} +1 -1
  423. package/dist/{send.js → soap/send.js} +28 -12
  424. package/dist/soap/storage.d.ts +9 -0
  425. package/dist/soap/storage.js +237 -0
  426. package/dist/soap/transforms.d.ts +3 -12
  427. package/dist/soap/transforms.js +3 -14
  428. package/dist/{types.d.ts → soap/types.d.ts} +34 -84
  429. package/dist/sync/git-cli.d.ts +202 -0
  430. package/dist/sync/git-cli.js +684 -0
  431. package/dist/sync/three-way-merge.d.ts +41 -0
  432. package/dist/sync/three-way-merge.js +85 -0
  433. package/dist/sync/tree-paths.d.ts +34 -0
  434. package/dist/sync/tree-paths.js +131 -0
  435. package/dist/team-secrets/envelope.d.ts +10 -0
  436. package/dist/team-secrets/envelope.js +121 -0
  437. package/dist/team-secrets/errors.d.ts +26 -0
  438. package/dist/team-secrets/errors.js +27 -0
  439. package/dist/team-secrets/index.d.ts +14 -0
  440. package/dist/team-secrets/index.js +8 -0
  441. package/dist/team-secrets/keys.d.ts +52 -0
  442. package/dist/team-secrets/keys.js +158 -0
  443. package/dist/team-secrets/log.d.ts +48 -0
  444. package/dist/team-secrets/log.js +175 -0
  445. package/dist/team-secrets/resolve-conflict.d.ts +7 -0
  446. package/dist/team-secrets/resolve-conflict.js +14 -0
  447. package/dist/team-secrets/schema.d.ts +97 -0
  448. package/dist/team-secrets/schema.js +157 -0
  449. package/dist/team-secrets/sign.d.ts +24 -0
  450. package/dist/team-secrets/sign.js +71 -0
  451. package/dist/team-secrets/vault.d.ts +49 -0
  452. package/dist/team-secrets/vault.js +148 -0
  453. package/dist/validate/wsi/run-message.d.ts +2 -2
  454. package/dist/validate/wsi/run-message.js +1 -1
  455. package/dist/validate/wsi/run-wsdl.d.ts +2 -2
  456. package/dist/validate/wsi/run-wsdl.js +1 -1
  457. package/dist/validate/wsi/types.d.ts +1 -1
  458. package/dist/webhooks/model.d.ts +138 -0
  459. package/dist/webhooks/model.js +150 -0
  460. package/dist/workspace/commit-message.d.ts +1 -1
  461. package/dist/workspace/commit-message.js +6 -1
  462. package/dist/workspace/environments.d.ts +11 -4
  463. package/dist/workspace/environments.js +12 -0
  464. package/dist/workspace/index.d.ts +3 -3
  465. package/dist/workspace/index.js +2 -2
  466. package/dist/workspace/paths.d.ts +5 -2
  467. package/dist/workspace/paths.js +5 -2
  468. package/dist/workspace/schema.d.ts +7 -3
  469. package/dist/workspace/schema.js +24 -3
  470. package/dist/workspace/share.d.ts +30 -11
  471. package/dist/workspace/share.js +32 -6
  472. package/dist/ws/call.d.ts +1 -1
  473. package/dist/ws/call.js +2 -2
  474. package/dist/ws/connect.d.ts +60 -0
  475. package/dist/ws/connect.js +131 -0
  476. package/dist/ws/events.d.ts +17 -0
  477. package/dist/ws/events.js +1 -0
  478. package/dist/ws/expand.d.ts +1 -1
  479. package/dist/ws/expand.js +1 -1
  480. package/dist/ws/files.d.ts +284 -0
  481. package/dist/ws/files.js +71 -0
  482. package/dist/ws/history-entry.d.ts +44 -0
  483. package/dist/ws/history-entry.js +93 -0
  484. package/dist/ws/model.d.ts +44 -3
  485. package/dist/ws/model.js +3 -0
  486. package/dist/ws/module.d.ts +2 -0
  487. package/dist/ws/module.js +11 -0
  488. package/dist/ws/run.d.ts +63 -0
  489. package/dist/ws/run.js +470 -0
  490. package/dist/ws/session.d.ts +18 -0
  491. package/dist/ws/session.js +52 -25
  492. package/dist/ws/storage.d.ts +9 -0
  493. package/dist/ws/storage.js +176 -0
  494. package/dist/ws/transcript.d.ts +3 -4
  495. package/dist/ws/transcript.js +26 -17
  496. package/dist/ws/url.d.ts +1 -1
  497. package/dist/wsdl/cache.js +1 -1
  498. package/dist/wsdl/docs-generator.d.ts +3 -3
  499. package/dist/wsdl/docs-generator.js +1 -1
  500. package/dist/wsdl/export-definition.js +1 -1
  501. package/dist/wsdl/qname.d.ts +2 -5
  502. package/dist/wsdl/resolver.d.ts +4 -11
  503. package/dist/wsdl/resolver.js +3 -3
  504. package/dist/wsdl/update-definition.d.ts +5 -5
  505. package/dist/wsdl/update-definition.js +6 -6
  506. package/dist/wss/apply.js +1 -1
  507. package/dist/{project/wss-configs.d.ts → wss/configs.d.ts} +2 -2
  508. package/dist/{project/wss-configs.js → wss/configs.js} +2 -2
  509. package/dist/wss/incoming/decrypt.d.ts +1 -1
  510. package/dist/wss/incoming/index.js +1 -1
  511. package/dist/wss/incoming/verify.d.ts +1 -1
  512. package/dist/wss/incoming/verify.js +1 -1
  513. package/dist/wss/key-identifiers.js +1 -1
  514. package/dist/wss/model.d.ts +1 -1
  515. package/dist/wss/outgoing/encryption.d.ts +1 -1
  516. package/dist/wss/outgoing/signature.d.ts +1 -1
  517. package/dist/xml/decode.d.ts +15 -0
  518. package/dist/xml/decode.js +22 -0
  519. package/dist/xml/entitize.d.ts +17 -0
  520. package/dist/xml/entitize.js +19 -0
  521. package/dist/xml/index.d.ts +1 -1
  522. package/dist/xml/index.js +1 -1
  523. package/dist/xml/locate.d.ts +39 -0
  524. package/dist/xml/locate.js +117 -0
  525. package/dist/xml/qname.d.ts +12 -0
  526. package/dist/xml/qname.js +8 -0
  527. package/dist/xpath/evaluate-async.d.ts +19 -0
  528. package/dist/xpath/evaluate-async.js +31 -11
  529. package/dist/xpath/evaluate.d.ts +1 -1
  530. package/dist/xpath/namespaces.js +1 -1
  531. package/dist/xpath/worker.d.ts +11 -5
  532. package/dist/xpath/worker.js +24 -7
  533. package/dist/xsd/form-model.d.ts +19 -2
  534. package/dist/xsd/form-model.js +14 -2
  535. package/dist/xsd/json-bridge.d.ts +152 -0
  536. package/dist/xsd/json-bridge.js +1213 -0
  537. package/dist/xsd/locate.d.ts +2 -30
  538. package/dist/xsd/locate.js +1 -109
  539. package/dist/xsd/xml-scan.d.ts +2 -0
  540. package/dist/xsd/xml-scan.js +1 -1
  541. package/dist/xsd/xml-writer.d.ts +2 -0
  542. package/dist/xsd/xml-writer.js +4 -0
  543. package/package.json +12 -1
  544. package/dist/generate.d.ts +0 -12
  545. package/dist/operations.d.ts +0 -12
  546. package/dist/run/effective-auth.d.ts +0 -10
  547. package/dist/run/effective-auth.js +0 -19
  548. package/dist/run/prepare.d.ts +0 -43
  549. package/dist/run/prepare.js +0 -280
  550. package/dist/send-options.d.ts +0 -141
  551. package/dist/wsdl/fetch.d.ts +0 -13
  552. /package/dist/{soap → http}/charset.d.ts +0 -0
  553. /package/dist/{soap → http}/charset.js +0 -0
  554. /package/dist/{wsdl → http}/ref-policy.d.ts +0 -0
  555. /package/dist/{wsdl → http}/ref-policy.js +0 -0
  556. /package/dist/{wss/keystore → keystore}/certificate.d.ts +0 -0
  557. /package/dist/{wss/keystore → keystore}/certificate.js +0 -0
  558. /package/dist/{wss/keystore → keystore}/index.d.ts +0 -0
  559. /package/dist/{wss/keystore → keystore}/model.d.ts +0 -0
  560. /package/dist/{wss/keystore → keystore}/model.js +0 -0
  561. /package/dist/{wss/keystore → keystore}/pem.d.ts +0 -0
  562. /package/dist/{wss/keystore → keystore}/pkcs12.d.ts +0 -0
  563. /package/dist/{wsdl → project}/cache-naming.d.ts +0 -0
  564. /package/dist/{types.js → soap/types.js} +0 -0
  565. /package/dist/{soap → xml}/prefixes.d.ts +0 -0
  566. /package/dist/{soap → xml}/prefixes.js +0 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Features: what a host can switch off (spec §4.1). Every protocol is one; `scripts` is the first
3
+ * that is not. A feature set is immutable: a host that changes a switch creates a new set.
4
+ */
5
+ function assertNoCycle(byId) {
6
+ const done = new Set();
7
+ const visit = (id, path) => {
8
+ if (path.includes(id)) {
9
+ throw new Error(`createFeatureSet: "requires" cycle: ${[...path, id].join(' -> ')}`);
10
+ }
11
+ if (done.has(id))
12
+ return;
13
+ for (const required of byId.get(id)?.requires ?? []) {
14
+ visit(required, [...path, id]);
15
+ }
16
+ done.add(id);
17
+ };
18
+ for (const id of byId.keys())
19
+ visit(id, []);
20
+ }
21
+ /**
22
+ * Builds a feature set. A feature is on when its switch says so (its `default` when no switch
23
+ * names it) and every feature it requires is on. A switch for an id with no descriptor is ignored:
24
+ * it may belong to a module this build does not have.
25
+ *
26
+ * @throws Error for a duplicate id or a `requires` cycle; both are programming errors
27
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
28
+ */
29
+ export function createFeatureSet(descriptors, switches = {}) {
30
+ const byId = new Map();
31
+ for (const descriptor of descriptors) {
32
+ if (byId.has(descriptor.id)) {
33
+ throw new Error(`createFeatureSet: duplicate feature "${descriptor.id}"`);
34
+ }
35
+ byId.set(descriptor.id, descriptor);
36
+ }
37
+ assertNoCycle(byId);
38
+ const why = new Map();
39
+ const resolve = (id) => {
40
+ if (why.has(id))
41
+ return why.get(id);
42
+ const descriptor = byId.get(id);
43
+ let result;
44
+ if (descriptor === undefined) {
45
+ result = { by: 'unknown' };
46
+ }
47
+ else if (!(switches[id] ?? descriptor.default)) {
48
+ result = { by: 'switch' };
49
+ }
50
+ else {
51
+ const blocked = descriptor.requires.find((required) => resolve(required) !== undefined);
52
+ result = blocked !== undefined ? { by: 'requires', feature: blocked } : undefined;
53
+ }
54
+ why.set(id, result);
55
+ return result;
56
+ };
57
+ for (const id of byId.keys())
58
+ resolve(id);
59
+ return {
60
+ descriptors: [...byId.values()],
61
+ isEnabled: (id) => resolve(id) === undefined,
62
+ whyDisabled: (id) => resolve(id),
63
+ };
64
+ }
@@ -0,0 +1,7 @@
1
+ /** Protocol modules, their registry and the feature set (spec §3, §4). */
2
+ export { createFeatureSet } from './features.js';
3
+ export type { FeatureDescriptor, FeatureSet, WhyDisabled } from './features.js';
4
+ export { defineProtocol } from './module.js';
5
+ export type { ContainerBase, ContainerDir, LoadContext, ProtocolModule, ProtocolRun, ProtocolScripting, ProtocolStorage, RequestSnapshotBase, ResponseSnapshotBase, RunGroup, RunScope, ScriptedSend, SelectedBase, SnapshotFacts, } from './module.js';
6
+ export { createProtocolRegistry, featureDisabled } from './registry.js';
7
+ export type { ProtocolRegistry, ProtocolRegistryOptions } from './registry.js';
@@ -0,0 +1,4 @@
1
+ /** Protocol modules, their registry and the feature set (spec §3, §4). */
2
+ export { createFeatureSet } from './features.js';
3
+ export { defineProtocol } from './module.js';
4
+ export { createProtocolRegistry, featureDisabled } from './registry.js';
@@ -0,0 +1,247 @@
1
+ /**
2
+ * A protocol behind one interface (spec §3, ADR-0017): how its containers are stored, how its
3
+ * requests run, and what a script sees of them. Core code calls a module through the registry and
4
+ * never names a protocol. This file imports no protocol.
5
+ */
6
+ import type { z } from 'zod';
7
+ import type { Assertion } from '../assert/model.js';
8
+ import type { FsLike } from '../project/fs.js';
9
+ import type { ProjectProblem } from '../project/load.js';
10
+ import type { Project } from '../project/model.js';
11
+ import type { RunContext } from '../run/context.js';
12
+ import type { ExchangeHandle, ExchangeOptions } from '../run/exchange.js';
13
+ import type { SendHost } from '../run/host.js';
14
+ import type { ScriptSession } from '../run/script-support.js';
15
+ import type { SecretNeed } from '../secrets/env-names.js';
16
+ import type { HeaderPair, RequestScripts, ScriptFailure, ScriptPhase } from '../script/model.js';
17
+ import type { RequestScriptTypes } from '../script/request-scripts.js';
18
+ import type { SecretPlaceholders } from '../script/send.js';
19
+ import type { ApiReferenceSection } from '../script/types/api.js';
20
+ import type { FeatureDescriptor } from './features.js';
21
+ /**
22
+ * The two top-level directories a project keeps containers in (ADR-0003, ADR-0007).
23
+ *
24
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
25
+ */
26
+ export type ContainerDir = 'interfaces' | 'apis';
27
+ /**
28
+ * What every container has, whatever its protocol.
29
+ *
30
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
31
+ */
32
+ export interface ContainerBase {
33
+ readonly kind: string;
34
+ readonly id: string;
35
+ readonly name: string;
36
+ readonly slug: string;
37
+ readonly order: number;
38
+ }
39
+ /**
40
+ * What a module's loader is given. Problems that do not stop the load are pushed to `problems`.
41
+ *
42
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
43
+ */
44
+ export interface LoadContext {
45
+ readonly fs: FsLike;
46
+ /** The project folder. */
47
+ readonly root: string;
48
+ readonly problems: ProjectProblem[];
49
+ }
50
+ /**
51
+ * How a protocol's containers are read from and written to a project folder (spec §3.2).
52
+ *
53
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
54
+ */
55
+ export interface ProtocolStorage<C extends ContainerBase = ContainerBase> {
56
+ /** Where its containers live: `interfaces` (SOAP) or `apis` (every other protocol). */
57
+ readonly dir: ContainerDir;
58
+ /**
59
+ * Reads the container directory `<dir>/<slug>/`, given its already-parsed container file.
60
+ * Returns undefined when the container cannot be used and a problem was recorded.
61
+ *
62
+ * @throws ProjectError what the file schemas throw
63
+ */
64
+ load(ctx: LoadContext, slug: string, document: unknown): Promise<C | undefined>;
65
+ /** Every file the container is written as: path relative to the project root, to its text. */
66
+ files(container: C): ReadonlyMap<string, string>;
67
+ /** The files under `<dir>/<slug>/` a save may delete when it no longer writes them. */
68
+ managed(fs: FsLike, root: string, slug: string): Promise<readonly string[]>;
69
+ /** The project's containers of this kind. */
70
+ containers(project: Project): readonly C[];
71
+ /** The project with its containers of this kind replaced. */
72
+ withContainers(project: Project, containers: readonly C[]): Project;
73
+ }
74
+ /**
75
+ * What every selected request has, whatever its protocol.
76
+ *
77
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
78
+ */
79
+ export interface SelectedBase {
80
+ readonly kind: string;
81
+ /** The display path, `<group>/<request name>`. */
82
+ readonly path: string;
83
+ readonly group: string;
84
+ readonly request: {
85
+ readonly id: string;
86
+ readonly name: string;
87
+ readonly slug: string;
88
+ readonly assertions?: readonly Assertion[];
89
+ readonly scripts?: RequestScripts;
90
+ };
91
+ }
92
+ /**
93
+ * One container's runnable requests, in explorer order.
94
+ *
95
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
96
+ */
97
+ export interface RunGroup<S extends SelectedBase = SelectedBase> {
98
+ readonly order: number;
99
+ readonly name: string;
100
+ readonly candidates: readonly {
101
+ readonly item: S;
102
+ /** The request's path on disk, without the `.request.yaml` suffix. */
103
+ readonly diskPath: string;
104
+ }[];
105
+ /** Sent only when a selector names it, and listed after every container (webhook items). */
106
+ readonly explicitOnly?: true;
107
+ }
108
+ /**
109
+ * What a module is given for one run.
110
+ *
111
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
112
+ */
113
+ export interface RunScope {
114
+ readonly context: RunContext;
115
+ /**
116
+ * One value per key for the whole run. A load that rejects is remembered and rejects again.
117
+ * Keys are `<kind>:<container id>:<what>`.
118
+ */
119
+ memo<T>(key: string, load: () => Promise<T>): Promise<T>;
120
+ }
121
+ /**
122
+ * The scripts of one send, when the request has active scripts.
123
+ *
124
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
125
+ */
126
+ export interface ScriptedSend {
127
+ readonly session: ScriptSession;
128
+ readonly placeholders: SecretPlaceholders;
129
+ }
130
+ /**
131
+ * How a protocol's requests run (spec §3.3).
132
+ *
133
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
134
+ */
135
+ export interface ProtocolRun<S extends SelectedBase = SelectedBase> {
136
+ /** The requests a run can send, one group per container (and any `explicitOnly` group). */
137
+ groups(project: Project): readonly RunGroup<S>[];
138
+ /** For a request id found in this protocol's containers but not runnable: why. */
139
+ whyNotRunnable(project: Project, requestId: string): string | undefined;
140
+ /**
141
+ * Opens one send (spec §4): resolve, pre-request script, connect, send. The send's own failure
142
+ * rejects `result`; it throws at once only for a request of another kind.
143
+ */
144
+ open(selected: S, scope: RunScope, host: SendHost, options: ExchangeOptions): ExchangeHandle;
145
+ /** The resolve step alone (spec §3.3): what a send would send, with nothing connected. */
146
+ resolve(selected: S, scope: RunScope, host: SendHost): Promise<unknown>;
147
+ /** The request's script types, from whatever contract the run has cached for it. */
148
+ scriptTypes(selected: S, scope: RunScope): Promise<RequestScriptTypes>;
149
+ /** The secrets this protocol's configuration needs: auth, keystores, signing, WS-Security. */
150
+ secretNeeds(selected: S, project: Project): readonly SecretNeed[];
151
+ }
152
+ /**
153
+ * What every request snapshot carries.
154
+ *
155
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
156
+ */
157
+ export interface RequestSnapshotBase {
158
+ readonly protocol: string;
159
+ }
160
+ /**
161
+ * What every response snapshot carries.
162
+ *
163
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
164
+ */
165
+ export interface ResponseSnapshotBase {
166
+ readonly protocol: string;
167
+ }
168
+ /**
169
+ * What core's script rules check on a request snapshot (spec §3.4).
170
+ *
171
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
172
+ */
173
+ export interface SnapshotFacts {
174
+ /** Where the request goes. A URL keeps its scheme, host and port; anything else stays identical. */
175
+ readonly destination: string;
176
+ /** Values a script may not change at all. Compared before and after with `JSON.stringify`. */
177
+ readonly fixed: unknown;
178
+ /** Header or metadata pairs: no name or value may hold CR, LF or NUL. */
179
+ readonly pairs: readonly HeaderPair[];
180
+ /** Other single-line values (a URL, a SOAPAction): none may hold CR, LF or NUL. */
181
+ readonly lines: readonly string[];
182
+ /** Every text in which a `${secret:…}` reference would be expanded. */
183
+ readonly texts: readonly string[];
184
+ }
185
+ /**
186
+ * What a script sees of a protocol's requests and responses (spec §3.4).
187
+ *
188
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
189
+ */
190
+ export interface ProtocolScripting<Q extends RequestSnapshotBase = RequestSnapshotBase, R extends ResponseSnapshotBase = ResponseSnapshotBase> {
191
+ /** The API's ambient declarations for one phase, after the common ones. */
192
+ declarations(phase: ScriptPhase): string;
193
+ /** The docs site's reference sections for this protocol, in order. */
194
+ reference(): readonly ApiReferenceSection[];
195
+ /** Sandbox-side source that defines `request` and `response` from the input snapshot. */
196
+ prelude(phase: ScriptPhase): string;
197
+ /** The shape a pre-request script may hand back. */
198
+ readonly requestSchema: z.ZodType<Q>;
199
+ /** What core's rules check. */
200
+ inspect(snapshot: Q): SnapshotFacts;
201
+ /** Protocol-only rules on a changed request, run after core's. */
202
+ validate?(before: Q, after: Q): ScriptFailure | undefined;
203
+ /** Typed views a script sees that the snapshot does not carry (SOAP's typed `body`). */
204
+ readonly views?: {
205
+ request(snapshot: Q, types: RequestScriptTypes): Q;
206
+ response(snapshot: R, types: RequestScriptTypes): R;
207
+ /** Writes a changed view back into the snapshot, or refuses the script. */
208
+ writeBack(before: Q, after: Q, types: RequestScriptTypes): {
209
+ readonly ok: true;
210
+ readonly request: Q;
211
+ } | {
212
+ readonly ok: false;
213
+ readonly error: ScriptFailure;
214
+ };
215
+ };
216
+ }
217
+ /**
218
+ * One protocol (spec §3).
219
+ *
220
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
221
+ */
222
+ export interface ProtocolModule {
223
+ /** The `kind` written on the container file and on every request file under it. */
224
+ readonly kind: string;
225
+ /** The feature that switches this protocol; its `id` equals `kind`. */
226
+ readonly feature: FeatureDescriptor;
227
+ /** How its containers are read from and written to a project folder. */
228
+ readonly storage: ProtocolStorage;
229
+ /** Absent: the protocol's requests cannot be run. */
230
+ readonly run?: ProtocolRun;
231
+ /** Absent: the protocol's requests cannot have scripts. */
232
+ readonly scripting?: ProtocolScripting;
233
+ }
234
+ /**
235
+ * A module as the registry holds it: the facets written against the protocol's own types, with a
236
+ * guard on every call that takes a selected request, so a wrong pairing fails loudly.
237
+ *
238
+ * @throws Error when the feature's id is not the module's kind
239
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
240
+ */
241
+ export declare function defineProtocol<S extends SelectedBase>(module: {
242
+ readonly kind: string;
243
+ readonly feature: FeatureDescriptor;
244
+ readonly storage: ProtocolStorage;
245
+ readonly run?: ProtocolRun<S>;
246
+ readonly scripting?: ProtocolScripting;
247
+ }): ProtocolModule;
@@ -0,0 +1,48 @@
1
+ function assertKind(module, item) {
2
+ if (item.kind !== module) {
3
+ throw new Error(`The "${module}" protocol was handed a "${item.kind}" request`);
4
+ }
5
+ }
6
+ /**
7
+ * A module as the registry holds it: the facets written against the protocol's own types, with a
8
+ * guard on every call that takes a selected request, so a wrong pairing fails loudly.
9
+ *
10
+ * @throws Error when the feature's id is not the module's kind
11
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
12
+ */
13
+ export function defineProtocol(module) {
14
+ const { run } = module;
15
+ if (module.feature.id !== module.kind) {
16
+ throw new Error(`defineProtocol: the feature of "${module.kind}" must have the same id`);
17
+ }
18
+ return {
19
+ kind: module.kind,
20
+ feature: module.feature,
21
+ storage: module.storage,
22
+ ...(module.scripting !== undefined ? { scripting: module.scripting } : {}),
23
+ ...(run !== undefined
24
+ ? {
25
+ run: {
26
+ groups: (project) => run.groups(project),
27
+ whyNotRunnable: (project, requestId) => run.whyNotRunnable(project, requestId),
28
+ open: (selected, scope, host, options) => {
29
+ assertKind(module.kind, selected);
30
+ return run.open(selected, scope, host, options);
31
+ },
32
+ resolve: (selected, scope, host) => {
33
+ assertKind(module.kind, selected);
34
+ return run.resolve(selected, scope, host);
35
+ },
36
+ scriptTypes: (selected, scope) => {
37
+ assertKind(module.kind, selected);
38
+ return run.scriptTypes(selected, scope);
39
+ },
40
+ secretNeeds: (selected, project) => {
41
+ assertKind(module.kind, selected);
42
+ return run.secretNeeds(selected, project);
43
+ },
44
+ },
45
+ }
46
+ : {}),
47
+ };
48
+ }
@@ -0,0 +1,42 @@
1
+ /** The modules a host composed, with its feature set (spec §4.2). */
2
+ import { WirebenchError } from '../errors.js';
3
+ import type { FeatureDescriptor, FeatureSet } from './features.js';
4
+ import type { ProtocolModule } from './module.js';
5
+ /**
6
+ * The modules of one host.
7
+ *
8
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
9
+ */
10
+ export interface ProtocolRegistry {
11
+ readonly features: FeatureSet;
12
+ /** The enabled modules, in registration order. */
13
+ readonly modules: readonly ProtocolModule[];
14
+ status(kind: string): 'enabled' | 'disabled' | 'unknown';
15
+ /** The enabled module for `kind`, or undefined. */
16
+ find(kind: string): ProtocolModule | undefined;
17
+ /** @throws WirebenchError `feature-disabled` | ProjectError `project-kind-not-supported` */
18
+ require(kind: string): ProtocolModule;
19
+ }
20
+ /**
21
+ * What a registry is built with besides its modules.
22
+ *
23
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
24
+ */
25
+ export interface ProtocolRegistryOptions {
26
+ /** Descriptors for features that are not protocols (`scripts`). */
27
+ readonly features?: readonly FeatureDescriptor[];
28
+ readonly switches?: Readonly<Record<string, boolean>>;
29
+ }
30
+ /**
31
+ * The error for using a feature that is off: a WirebenchError `feature-disabled` with
32
+ * `details.feature`, and `details.requires` when a required feature is what is off.
33
+ */
34
+ export declare function featureDisabled(features: FeatureSet, id: string): WirebenchError;
35
+ /**
36
+ * Builds a registry from `modules`. Its feature set is the modules' descriptors plus
37
+ * `options.features`, with `options.switches` applied.
38
+ *
39
+ * @throws Error for two modules of one kind; what `createFeatureSet` throws
40
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
41
+ */
42
+ export declare function createProtocolRegistry(modules: readonly ProtocolModule[], options?: ProtocolRegistryOptions): ProtocolRegistry;
@@ -0,0 +1,47 @@
1
+ /** The modules a host composed, with its feature set (spec §4.2). */
2
+ import { ProjectError, WirebenchError } from '../errors.js';
3
+ import { createFeatureSet } from './features.js';
4
+ /**
5
+ * The error for using a feature that is off: a WirebenchError `feature-disabled` with
6
+ * `details.feature`, and `details.requires` when a required feature is what is off.
7
+ */
8
+ export function featureDisabled(features, id) {
9
+ const why = features.whyDisabled(id);
10
+ const title = features.descriptors.find((descriptor) => descriptor.id === id)?.title ?? id;
11
+ return new WirebenchError('feature-disabled', why?.by === 'requires' ? `${title} is off because "${why.feature}" is off` : `${title} is switched off`, { details: { feature: id, ...(why?.by === 'requires' ? { requires: why.feature } : {}) } });
12
+ }
13
+ /**
14
+ * Builds a registry from `modules`. Its feature set is the modules' descriptors plus
15
+ * `options.features`, with `options.switches` applied.
16
+ *
17
+ * @throws Error for two modules of one kind; what `createFeatureSet` throws
18
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
19
+ */
20
+ export function createProtocolRegistry(modules, options = {}) {
21
+ const byKind = new Map();
22
+ for (const module of modules) {
23
+ if (byKind.has(module.kind)) {
24
+ throw new Error(`createProtocolRegistry: two modules for "${module.kind}"`);
25
+ }
26
+ byKind.set(module.kind, module);
27
+ }
28
+ const features = createFeatureSet([...modules.map((module) => module.feature), ...(options.features ?? [])], options.switches);
29
+ const status = (kind) => !byKind.has(kind) ? 'unknown' : features.isEnabled(kind) ? 'enabled' : 'disabled';
30
+ const find = (kind) => status(kind) === 'enabled' ? byKind.get(kind) : undefined;
31
+ return {
32
+ features,
33
+ modules: modules.filter((module) => features.isEnabled(module.kind)),
34
+ status,
35
+ find,
36
+ require(kind) {
37
+ const found = find(kind);
38
+ if (found !== undefined)
39
+ return found;
40
+ if (status(kind) === 'disabled')
41
+ throw featureDisabled(features, kind);
42
+ throw new ProjectError('project-kind-not-supported', `This build has no "${kind}" protocol`, {
43
+ details: { kind, supported: [...byKind.keys()] },
44
+ });
45
+ },
46
+ };
47
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * The composition file (spec §4.3): the one core file that imports every built-in protocol module.
3
+ * It holds the built-in registry every entry point falls back to, and the union types a host that
4
+ * narrows on `kind` uses.
5
+ */
6
+ import type { GrpcCallResult } from './grpc/call.js';
7
+ import type { GrpcLiveEvent } from './grpc/events.js';
8
+ import type { GrpcResolvedInput, GrpcSelected } from './grpc/run.js';
9
+ import type { GrpcRequestSnapshot, GrpcResponseSnapshot } from './grpc/scripting.js';
10
+ import type { FeatureDescriptor } from './protocol/features.js';
11
+ import type { ProtocolModule } from './protocol/module.js';
12
+ import type { ProtocolRegistry } from './protocol/registry.js';
13
+ import type { RestSelected } from './rest/run.js';
14
+ import type { RestRequestSnapshot, RestResponseSnapshot } from './rest/scripting.js';
15
+ import type { RestLiveEvent } from './rest/events.js';
16
+ import type { RestExchange, RestSendInput } from './rest/send.js';
17
+ import type { SoapSelected } from './soap/run.js';
18
+ import type { SoapRequestSnapshot, SoapResponseSnapshot } from './soap/scripting.js';
19
+ import type { SoapExchange, SoapSendInput, WsdlImportResult } from './soap/types.js';
20
+ import type { WsLiveEvent } from './ws/events.js';
21
+ import type { WsExchange } from './ws/model.js';
22
+ import type { WsSelected } from './ws/run.js';
23
+ /**
24
+ * The four built-in protocols, in the order their containers tie-break in the explorer.
25
+ *
26
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
27
+ */
28
+ export declare const BUILTIN_PROTOCOLS: readonly ProtocolModule[];
29
+ /** The feature that switches request scripts (#63). Not a protocol, so the registry is told of it. */
30
+ export declare const SCRIPTS_FEATURE: FeatureDescriptor;
31
+ /**
32
+ * A registry of the built-in protocols and the `scripts` feature, with `switches` applied.
33
+ *
34
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
35
+ */
36
+ export declare function createBuiltinRegistry(switches?: Readonly<Record<string, boolean>>): ProtocolRegistry;
37
+ /**
38
+ * The registry an entry point uses when its caller passes none: the built-in protocols with every
39
+ * feature on. Created on first use and kept. Call it inside a function, never at module scope: the
40
+ * modules import core files that import this one.
41
+ */
42
+ export declare function defaultRegistry(): ProtocolRegistry;
43
+ /** One saved request selected for a run, of any built-in protocol a run can send. */
44
+ export type SelectedRequest = SoapSelected | RestSelected | GrpcSelected | WsSelected;
45
+ /** A SOAP interface's definition as a host already holds it in memory: imported and compiled. */
46
+ export type HeldSoapDefinition = Pick<WsdlImportResult, 'definition' | 'bundle' | 'schemaSet' | 'wsa'>;
47
+ /** The exchange a request travelled as, for a host that keeps more of it than a report does. */
48
+ export type SentExchange = {
49
+ readonly kind: 'soap';
50
+ readonly soap: SoapExchange;
51
+ /** The request as resolved: references unexpanded, before its script and its credentials. */
52
+ readonly input: SoapSendInput;
53
+ } | {
54
+ readonly kind: 'rest';
55
+ readonly rest: RestExchange;
56
+ /** What was sent: after the script, with the credentials resolved. */
57
+ readonly input: RestSendInput;
58
+ readonly contract?: unknown;
59
+ } | {
60
+ readonly kind: 'grpc';
61
+ /** The call whole: every request message as sent, every response message decoded. */
62
+ readonly grpc: GrpcCallResult;
63
+ /** What was sent: after the script, with the credentials resolved. */
64
+ readonly input: GrpcResolvedInput;
65
+ /** The request message text as sent, after the script. */
66
+ readonly messageText: string;
67
+ } | {
68
+ readonly kind: 'websocket';
69
+ /** The session whole: its handshake, every frame both ways, and how it closed. */
70
+ readonly ws: WsExchange;
71
+ };
72
+ /** A message an open exchange reports, whatever its protocol. */
73
+ export type LiveEvent = RestLiveEvent | GrpcLiveEvent | WsLiveEvent;
74
+ /** The request snapshot of any built-in protocol that has scripts (spec §3.1). */
75
+ export type RequestSnapshot = RestRequestSnapshot | SoapRequestSnapshot | GrpcRequestSnapshot;
76
+ /** The response snapshot of any built-in protocol that has scripts (spec §3.1). */
77
+ export type ResponseSnapshot = RestResponseSnapshot | SoapResponseSnapshot | GrpcResponseSnapshot;
@@ -0,0 +1,40 @@
1
+ import { grpcProtocol } from './grpc/module.js';
2
+ import { createProtocolRegistry } from './protocol/registry.js';
3
+ import { restProtocol } from './rest/module.js';
4
+ import { soapProtocol } from './soap/module.js';
5
+ import { wsProtocol } from './ws/module.js';
6
+ /**
7
+ * The four built-in protocols, in the order their containers tie-break in the explorer.
8
+ *
9
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
10
+ */
11
+ export const BUILTIN_PROTOCOLS = [soapProtocol, restProtocol, grpcProtocol, wsProtocol];
12
+ /** The feature that switches request scripts (#63). Not a protocol, so the registry is told of it. */
13
+ export const SCRIPTS_FEATURE = {
14
+ id: 'scripts',
15
+ title: 'Scripts',
16
+ default: true,
17
+ stage: 'stable',
18
+ requires: [],
19
+ };
20
+ /**
21
+ * A registry of the built-in protocols and the `scripts` feature, with `switches` applied.
22
+ *
23
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
24
+ */
25
+ export function createBuiltinRegistry(switches) {
26
+ return createProtocolRegistry(BUILTIN_PROTOCOLS, {
27
+ features: [SCRIPTS_FEATURE],
28
+ ...(switches !== undefined ? { switches } : {}),
29
+ });
30
+ }
31
+ let builtin;
32
+ /**
33
+ * The registry an entry point uses when its caller passes none: the built-in protocols with every
34
+ * feature on. Created on first use and kept. Call it inside a function, never at module scope: the
35
+ * modules import core files that import this one.
36
+ */
37
+ export function defaultRegistry() {
38
+ builtin ??= createBuiltinRegistry();
39
+ return builtin;
40
+ }
@@ -8,9 +8,15 @@
8
8
  export declare const REDACTED_MARKER = "<redacted>";
9
9
  /** True when `text` contains the redaction marker — i.e. it was produced by a `redact*` helper. */
10
10
  export declare function containsRedaction(text: string): boolean;
11
- /** Masks the values of sensitive headers in a plain header map, case-insensitively. */
11
+ /** True when a header named `name` (any case) always carries a credential; see {@link redactHeaders}. */
12
+ export declare function isSensitiveHeaderName(name: string): boolean;
13
+ /**
14
+ * Masks the values of sensitive headers in a plain header map, case-insensitively. `extraHeaders`
15
+ * names more headers to mask, as `redactUrl`'s `extraParams` does for query parameters.
16
+ */
12
17
  export declare function redactHeaders(headers: Readonly<Record<string, string>>, opts?: {
13
18
  show?: boolean;
19
+ extraHeaders?: readonly string[];
14
20
  }): Record<string, string>;
15
21
  /**
16
22
  * Masks the values of sensitive headers in a `[name, value]` pair list — the raw, duplicate-
@@ -19,7 +25,10 @@ export declare function redactHeaders(headers: Readonly<Record<string, string>>,
19
25
  */
20
26
  export declare function redactHeaderPairs(pairs: readonly (readonly [string, string])[], opts?: {
21
27
  show?: boolean;
28
+ extraHeaders?: readonly string[];
22
29
  }): [string, string][];
30
+ /** True when a query parameter named `name` (any case) carries a credential; see {@link redactUrl}. */
31
+ export declare function isSensitiveQueryParam(name: string): boolean;
23
32
  /**
24
33
  * Masks the value of every sensitive query parameter in `url`, plus any parameter named in
25
34
  * `extraParams` — which is how the send path masks the exact parameter an API key is configured to
@@ -74,4 +83,6 @@ export declare function redactStructuredBody(text: string, contentType: string |
74
83
  export declare function redactRawHttp(input: string, opts?: {
75
84
  show?: boolean;
76
85
  encoding?: 'text' | 'base64';
86
+ extraParams?: readonly string[];
87
+ extraHeaders?: readonly string[];
77
88
  }): string;