@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,36 @@
1
+ /**
2
+ * Which files of a request tree a save manages, and so may delete when it no longer writes them:
3
+ * the part of `save.ts` that every protocol keeping its requests under `apis/<slug>/requests/`
4
+ * shares, and that the webhook collection's tree uses too.
5
+ *
6
+ * One lister claims every sibling convention (`.body.<ext>`, `.msg-<slug>.<ext>`, the script
7
+ * files) whatever the API's protocol, exactly as it did when `save.ts` walked `apis/` itself.
8
+ */
9
+ import type { FsLike } from './fs.js';
10
+ /** The absolute path of a `/`-separated path relative to the project root. */
11
+ export declare function toAbsolute(root: string, relative: string): string;
12
+ /**
13
+ * True when `name` is a WebSocket request's saved-message sibling for `requestSlug`:
14
+ * `<requestSlug>.msg-<message-slug>.<ext>`, where `<ext>` is one `[A-Za-z0-9]+` run at the very
15
+ * end. Matched by trying the known `requestSlug` as a literal prefix — never by a greedy regex
16
+ * capture across the whole name — so a request slug that itself contains a dot or the literal text
17
+ * `.msg-` cannot be mis-split from the message slug that follows it.
18
+ */
19
+ export declare function isWsMessageSibling(name: string, requestSlug: string): boolean;
20
+ /**
21
+ * Lists the managed files inside one directory of an API's request tree: its `folder.yaml`, every
22
+ * `*.request.yaml`, and two conventions of per-request sibling file, each claimed only when it
23
+ * belongs to a request slug actually present in this directory:
24
+ *
25
+ * - `<slug>.body.<ext>` — a REST raw body or a gRPC message, one file for the whole request.
26
+ * - `<slug>.msg-<message-slug>.<ext>` — one WebSocket saved message, one file per message
27
+ * ({@link isWsMessageSibling}).
28
+ * - `<slug>.pre.ts`, `<slug>.post.ts`, `<slug>.pre.js`, `<slug>.post.js` — a request's scripts (#63).
29
+ *
30
+ * Claiming only a sibling of a *known* request slug (rather than every file matching either
31
+ * pattern) means a hand-placed file — notes, a `.body.json` or `.msg-x.txt` with no matching
32
+ * request — is foreign and never a deletion candidate, exactly as in an operation folder.
33
+ */
34
+ export declare function listApiTreeFiles(fs: FsLike, root: string, dir: string): Promise<string[]>;
35
+ /** The managed files of one `apis/<slug>/`: its `api.yaml` when it is there, and its request tree. */
36
+ export declare function apiManagedFiles(fs: FsLike, root: string, slug: string): Promise<string[]>;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Which files of a request tree a save manages, and so may delete when it no longer writes them:
3
+ * the part of `save.ts` that every protocol keeping its requests under `apis/<slug>/requests/`
4
+ * shares, and that the webhook collection's tree uses too.
5
+ *
6
+ * One lister claims every sibling convention (`.body.<ext>`, `.msg-<slug>.<ext>`, the script
7
+ * files) whatever the API's protocol, exactly as it did when `save.ts` walked `apis/` itself.
8
+ */
9
+ import { join } from 'node:path';
10
+ import { isScriptFileOf } from '../script/model.js';
11
+ import { readFileIfExists, readdirIfExists } from './fs.js';
12
+ import { API_FILE, APIS_DIR, FOLDER_FILE, REQUEST_SUFFIX, REQUESTS_DIR } from './paths.js';
13
+ /** The absolute path of a `/`-separated path relative to the project root. */
14
+ export function toAbsolute(root, relative) {
15
+ return join(root, ...relative.split('/'));
16
+ }
17
+ /**
18
+ * True when `name` is a WebSocket request's saved-message sibling for `requestSlug`:
19
+ * `<requestSlug>.msg-<message-slug>.<ext>`, where `<ext>` is one `[A-Za-z0-9]+` run at the very
20
+ * end. Matched by trying the known `requestSlug` as a literal prefix — never by a greedy regex
21
+ * capture across the whole name — so a request slug that itself contains a dot or the literal text
22
+ * `.msg-` cannot be mis-split from the message slug that follows it.
23
+ */
24
+ export function isWsMessageSibling(name, requestSlug) {
25
+ const prefix = `${requestSlug}.msg-`;
26
+ if (!name.startsWith(prefix)) {
27
+ return false;
28
+ }
29
+ const rest = name.slice(prefix.length);
30
+ const dot = rest.lastIndexOf('.');
31
+ // dot > 0 requires a non-empty message slug before the extension.
32
+ return dot > 0 && /^[A-Za-z0-9]+$/.test(rest.slice(dot + 1));
33
+ }
34
+ /**
35
+ * Lists the managed files inside one directory of an API's request tree: its `folder.yaml`, every
36
+ * `*.request.yaml`, and two conventions of per-request sibling file, each claimed only when it
37
+ * belongs to a request slug actually present in this directory:
38
+ *
39
+ * - `<slug>.body.<ext>` — a REST raw body or a gRPC message, one file for the whole request.
40
+ * - `<slug>.msg-<message-slug>.<ext>` — one WebSocket saved message, one file per message
41
+ * ({@link isWsMessageSibling}).
42
+ * - `<slug>.pre.ts`, `<slug>.post.ts`, `<slug>.pre.js`, `<slug>.post.js` — a request's scripts (#63).
43
+ *
44
+ * Claiming only a sibling of a *known* request slug (rather than every file matching either
45
+ * pattern) means a hand-placed file — notes, a `.body.json` or `.msg-x.txt` with no matching
46
+ * request — is foreign and never a deletion candidate, exactly as in an operation folder.
47
+ */
48
+ export async function listApiTreeFiles(fs, root, dir) {
49
+ const managed = [];
50
+ const entries = await readdirIfExists(fs, toAbsolute(root, dir));
51
+ const requestSlugs = new Set();
52
+ for (const entry of entries) {
53
+ if (!entry.isFile) {
54
+ continue;
55
+ }
56
+ if (entry.name === FOLDER_FILE) {
57
+ managed.push(`${dir}/${entry.name}`);
58
+ continue;
59
+ }
60
+ if (entry.name.endsWith(REQUEST_SUFFIX)) {
61
+ requestSlugs.add(entry.name.slice(0, -REQUEST_SUFFIX.length));
62
+ managed.push(`${dir}/${entry.name}`);
63
+ }
64
+ }
65
+ for (const entry of entries) {
66
+ if (!entry.isFile) {
67
+ continue;
68
+ }
69
+ const body = /^(.*)\.body\.[A-Za-z0-9]+$/.exec(entry.name);
70
+ if (body !== null && requestSlugs.has(body[1])) {
71
+ managed.push(`${dir}/${entry.name}`);
72
+ continue;
73
+ }
74
+ for (const slug of requestSlugs) {
75
+ if (isWsMessageSibling(entry.name, slug) || isScriptFileOf(entry.name, slug)) {
76
+ managed.push(`${dir}/${entry.name}`);
77
+ break;
78
+ }
79
+ }
80
+ }
81
+ for (const entry of entries) {
82
+ if (entry.isDirectory) {
83
+ managed.push(...(await listApiTreeFiles(fs, root, `${dir}/${entry.name}`)));
84
+ }
85
+ }
86
+ return managed;
87
+ }
88
+ /** The managed files of one `apis/<slug>/`: its `api.yaml` when it is there, and its request tree. */
89
+ export async function apiManagedFiles(fs, root, slug) {
90
+ const base = `${APIS_DIR}/${slug}`;
91
+ const managed = [];
92
+ if ((await readFileIfExists(fs, toAbsolute(root, `${base}/${API_FILE}`))) !== undefined) {
93
+ managed.push(`${base}/${API_FILE}`);
94
+ }
95
+ managed.push(...(await listApiTreeFiles(fs, root, `${base}/${REQUESTS_DIR}`)));
96
+ return managed;
97
+ }
@@ -16,8 +16,8 @@ type RawManifest = Record<string, unknown>;
16
16
  * with the current `formatVersion` so schema validation (which pins
17
17
  * `formatVersion` to a literal) accepts a document written by an older build.
18
18
  * The next save then writes the file back at the current version. Versions
19
- * 2 → 3 → 4 are the same kind of step: fields an older file simply lacks,
20
- * which the loader defaults.
19
+ * 2 → 3 → 4 → 5 → 6 are the same kind of step: fields an older file simply
20
+ * lacks, which the loader defaults.
21
21
  *
22
22
  * @throws ProjectError `project-format-too-new` when the file was written by a
23
23
  * newer Wirebench, `project-file-invalid` when `formatVersion` is missing,
@@ -16,8 +16,8 @@ import { FORMAT_VERSION } from './model.js';
16
16
  * with the current `formatVersion` so schema validation (which pins
17
17
  * `formatVersion` to a literal) accepts a document written by an older build.
18
18
  * The next save then writes the file back at the current version. Versions
19
- * 2 → 3 → 4 are the same kind of step: fields an older file simply lacks,
20
- * which the loader defaults.
19
+ * 2 → 3 → 4 → 5 → 6 are the same kind of step: fields an older file simply
20
+ * lacks, which the loader defaults.
21
21
  *
22
22
  * @throws ProjectError `project-format-too-new` when the file was written by a
23
23
  * newer Wirebench, `project-file-invalid` when `formatVersion` is missing,
@@ -16,15 +16,24 @@ import type { WsaConfig } from '../wsa/model.js';
16
16
  import type { GrpcApi, GrpcRequestDef } from '../grpc/model.js';
17
17
  import type { RestApi, RestRequestDef } from '../rest/model.js';
18
18
  import type { WsApi, WsRequestDef } from '../ws/model.js';
19
+ import type { SequenceDef } from '../sequence/model.js';
20
+ import type { WebhookCollection } from '../webhooks/model.js';
21
+ import type { ContainerBase, ContainerDir } from '../protocol/module.js';
22
+ import type { RequestScripts } from '../script/model.js';
19
23
  export type { WsaConfig, WsaConfigPatch, WsaMustUnderstand, WsaVersion } from '../wsa/model.js';
20
24
  /**
21
25
  * The on-disk format version written to (and required by) `wirebench.yaml`.
22
26
  *
23
- * 4 added `assertions` on a request and the `…Env` name beside each secret reference. Both are
24
- * additive, and both still bump the version: this format does not round-trip unknown keys, so an
25
- * older build would delete them on its next save (see `schema.ts` and ADR-0003).
27
+ * 4 added `assertions` on a request and the `…Env` name beside each secret reference. 5 let a SOAP
28
+ * interface, endpoint or request carry `bearer`, `api-key` and `oauth2` auth (previously
29
+ * REST-only) — new keys and new enum values on an existing field. 6 added `scripts` on a SOAP, REST or
30
+ * gRPC request (#63), the project's webhook collection under `webhooks/`, `hook` on a request, `signing` on the
31
+ * collection, its folders and its items, the `callback` assertion kind (callback-assertion spec §2.1), and `assertions` on a WebSocket request (#192).
32
+ * 6 is not yet released, so these share it.
33
+ * All are additive; this format does not round-trip unknown keys, so an older build would delete them on
34
+ * its next save (see `schema.ts` and ADR-0003) — and would meanwhile send a request without its scripts.
26
35
  */
27
- export declare const FORMAT_VERSION = 4;
36
+ export declare const FORMAT_VERSION = 6;
28
37
  /** A flat, ordered map of property name to value (project- or environment-scoped). */
29
38
  export type PropertyMap = Readonly<Record<string, string>>;
30
39
  /**
@@ -53,7 +62,7 @@ export interface EndpointAuth {
53
62
  /**
54
63
  * "Whatever the thing above me uses." Only a REST request or folder may say this; resolution
55
64
  * walks request → folder chain → API and takes the first configuration that is not `inherit`
56
- * (see `rest/auth.ts`).
65
+ * (see `http/auth/apply-auth.ts`).
57
66
  */
58
67
  export interface InheritAuth {
59
68
  readonly type: 'inherit';
@@ -116,6 +125,19 @@ export interface OAuth2Auth {
116
125
  * protocols.
117
126
  */
118
127
  export type AuthConfig = InheritAuth | EndpointAuth | BearerAuth | ApiKeyAuth | OAuth2Auth;
128
+ /**
129
+ * What a SOAP interface, endpoint or request may hold: every {@link AuthConfig} arm except
130
+ * {@link InheritAuth} — a SOAP owner has no interface-like ancestor to inherit from, so the SOAP
131
+ * chain stays request → endpoint (override/complement) → interface.
132
+ */
133
+ export type SoapOwnerAuth = Exclude<AuthConfig, InheritAuth>;
134
+ /**
135
+ * How a definition document is fetched: Basic, a bearer token or an API key. Secrets are keychain
136
+ * references, as everywhere else. Separate from the API's own `auth`, which is what its requests send.
137
+ */
138
+ export type DefinitionAuth = (EndpointAuth & {
139
+ readonly type: 'basic';
140
+ }) | BearerAuth | ApiKeyAuth;
119
141
  /** The OAuth2 fields a freshly configured entry starts with. */
120
142
  export declare const DEFAULT_OAUTH2_AUTH: OAuth2Auth;
121
143
  /** One addressable endpoint (URL + optional credentials) of an interface. */
@@ -123,7 +145,7 @@ export interface Endpoint {
123
145
  readonly id: string;
124
146
  readonly name: string;
125
147
  readonly url: string;
126
- readonly auth?: EndpointAuth;
148
+ readonly auth?: SoapOwnerAuth;
127
149
  /** `override` replaces request credentials, `complement` only fills in blanks. */
128
150
  readonly authMode: 'override' | 'complement';
129
151
  /**
@@ -225,7 +247,7 @@ export interface SoapRequestDef {
225
247
  readonly soapAction?: string;
226
248
  readonly headers: readonly HeaderEntry[];
227
249
  readonly attachments: readonly Attachment[];
228
- readonly auth?: EndpointAuth;
250
+ readonly auth?: SoapOwnerAuth;
229
251
  readonly wsa?: WsaConfig;
230
252
  /** Name of a `wss/outgoing/<name>.yaml` configuration. */
231
253
  readonly wssOutgoingRef?: string;
@@ -241,14 +263,11 @@ export interface SoapRequestDef {
241
263
  * brings the operation back does.
242
264
  */
243
265
  readonly orphaned?: boolean;
266
+ /** Pre-request and post-response scripts, in files beside the request (#63). */
267
+ readonly scripts?: RequestScripts;
244
268
  /** Stored verbatim in the sibling `.xml` file, byte for byte. */
245
269
  readonly envelopeXml: string;
246
270
  }
247
- /**
248
- * The name this type had before REST requests existed, kept as an alias for one release so
249
- * callers that only ever mean a SOAP request need not be touched. Prefer {@link SoapRequestDef}.
250
- */
251
- export type RequestDef = SoapRequestDef;
252
271
  /**
253
272
  * A saved request of either protocol, which is what a lookup by request id can return: the id
254
273
  * space is one (ULIDs), so `kind` is how a caller finds out what it has.
@@ -278,7 +297,7 @@ export interface Interface {
278
297
  readonly defaultEndpointId?: string;
279
298
  readonly wsa: WsaConfig;
280
299
  /** Interface-level default credentials, overridable per endpoint and per request. */
281
- readonly auth?: EndpointAuth;
300
+ readonly auth?: SoapOwnerAuth;
282
301
  readonly operations: readonly OperationDef[];
283
302
  }
284
303
  /** A named set of per-interface endpoint overrides and property values. */
@@ -325,6 +344,21 @@ export interface ProjectSettings {
325
344
  }
326
345
  /** The settings a new project starts with. */
327
346
  export declare const DEFAULT_PROJECT_SETTINGS: ProjectSettings;
347
+ /**
348
+ * A container whose kind has no enabled module: kept on disk exactly as it is (spec §6).
349
+ *
350
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
351
+ */
352
+ export interface UnsupportedContainer {
353
+ readonly dir: 'interfaces' | 'apis';
354
+ readonly slug: string;
355
+ /** As written in the container file. */
356
+ readonly kind: string;
357
+ readonly reason: 'unknown-kind' | 'feature-disabled';
358
+ /** Read from the container file when present, for a placeholder row. */
359
+ readonly name?: string;
360
+ readonly order?: number;
361
+ }
328
362
  /** A whole Wirebench project, as loaded from (or saved to) a project folder. */
329
363
  export interface Project {
330
364
  readonly formatVersion: typeof FORMAT_VERSION;
@@ -354,6 +388,29 @@ export interface Project {
354
388
  * `order` is shared with all three.
355
389
  */
356
390
  readonly wsApis: readonly WsApi[];
391
+ /**
392
+ * Containers of a kind that has no list of its own above, keyed by kind. Absent means none.
393
+ * Read with {@link extraContainersOf}.
394
+ *
395
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
396
+ */
397
+ readonly extraContainers?: Readonly<Record<string, readonly ContainerBase[]>>;
398
+ /**
399
+ * Containers this build could not load and left untouched on disk. Absent means none.
400
+ *
401
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
402
+ */
403
+ readonly unsupported?: readonly UnsupportedContainer[];
404
+ /**
405
+ * The project's sequences, one file each under `sequences/`. Not a container like the four above: a
406
+ * sequence holds no requests of its own, only references to theirs by id.
407
+ */
408
+ readonly sequences: readonly SequenceDef[];
409
+ /**
410
+ * The project's webhook collection (spec `…-openapi-webhooks-import-design.md`), absent until the
411
+ * first webhook is created or imported. Not a list like the API containers: one per project.
412
+ */
413
+ readonly webhooks?: WebhookCollection;
357
414
  readonly environments: readonly Environment[];
358
415
  /** Id of the environment currently active for this project, if any. */
359
416
  readonly activeEnvironmentId?: string;
@@ -363,6 +420,27 @@ export interface Project {
363
420
  readonly keystores: readonly WssRef[];
364
421
  };
365
422
  }
423
+ /**
424
+ * The project's placeholders; empty when it has none.
425
+ *
426
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
427
+ */
428
+ export declare function unsupportedOf(project: Project): readonly UnsupportedContainer[];
429
+ /**
430
+ * The project's containers of `kind` kept in {@link Project.extraContainers}.
431
+ *
432
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
433
+ */
434
+ export declare function extraContainersOf(project: Project, kind: string): readonly ContainerBase[];
435
+ /**
436
+ * Every slug in use under one of the two container directories: the containers the project holds
437
+ * there, and the placeholders (spec §6). A save keeps exactly these directories, whatever its
438
+ * registry can write. Hand it to `uniqueSlug` when naming a new container, so a save never has to
439
+ * refuse it with `container-slug-conflict`.
440
+ *
441
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
442
+ */
443
+ export declare function takenContainerSlugs(project: Project, dir: ContainerDir): ReadonlySet<string>;
366
444
  /** Generates entity ids; injectable so tests can produce deterministic projects. */
367
445
  export type IdGenerator = () => string;
368
446
  /** The default {@link IdGenerator}: a lexicographically sortable ULID. */
@@ -398,4 +476,4 @@ export interface CreateRequestInput extends CreateOptions {
398
476
  readonly properties?: Partial<RequestProperties>;
399
477
  }
400
478
  /** Creates a request with the default request properties applied. */
401
- export declare function createRequest(name: string, input: CreateRequestInput): RequestDef;
479
+ export declare function createRequest(name: string, input: CreateRequestInput): SoapRequestDef;
@@ -17,11 +17,16 @@ import { DEFAULT_WSA_CONFIG } from '../wsa/model.js';
17
17
  /**
18
18
  * The on-disk format version written to (and required by) `wirebench.yaml`.
19
19
  *
20
- * 4 added `assertions` on a request and the `…Env` name beside each secret reference. Both are
21
- * additive, and both still bump the version: this format does not round-trip unknown keys, so an
22
- * older build would delete them on its next save (see `schema.ts` and ADR-0003).
20
+ * 4 added `assertions` on a request and the `…Env` name beside each secret reference. 5 let a SOAP
21
+ * interface, endpoint or request carry `bearer`, `api-key` and `oauth2` auth (previously
22
+ * REST-only) — new keys and new enum values on an existing field. 6 added `scripts` on a SOAP, REST or
23
+ * gRPC request (#63), the project's webhook collection under `webhooks/`, `hook` on a request, `signing` on the
24
+ * collection, its folders and its items, the `callback` assertion kind (callback-assertion spec §2.1), and `assertions` on a WebSocket request (#192).
25
+ * 6 is not yet released, so these share it.
26
+ * All are additive; this format does not round-trip unknown keys, so an older build would delete them on
27
+ * its next save (see `schema.ts` and ADR-0003) — and would meanwhile send a request without its scripts.
23
28
  */
24
- export const FORMAT_VERSION = 4;
29
+ export const FORMAT_VERSION = 6;
25
30
  /** The OAuth2 fields a freshly configured entry starts with. */
26
31
  export const DEFAULT_OAUTH2_AUTH = Object.freeze({
27
32
  type: 'oauth2',
@@ -62,6 +67,46 @@ export const DEFAULT_PROJECT_SETTINGS = Object.freeze({
62
67
  defaultTimeoutMs: 60_000,
63
68
  prettyPrintResponses: true,
64
69
  });
70
+ /**
71
+ * The project's placeholders; empty when it has none.
72
+ *
73
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
74
+ */
75
+ export function unsupportedOf(project) {
76
+ return project.unsupported ?? [];
77
+ }
78
+ /**
79
+ * The project's containers of `kind` kept in {@link Project.extraContainers}.
80
+ *
81
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
82
+ */
83
+ export function extraContainersOf(project, kind) {
84
+ return project.extraContainers?.[kind] ?? [];
85
+ }
86
+ /**
87
+ * Every slug in use under one of the two container directories: the containers the project holds
88
+ * there, and the placeholders (spec §6). A save keeps exactly these directories, whatever its
89
+ * registry can write. Hand it to `uniqueSlug` when naming a new container, so a save never has to
90
+ * refuse it with `container-slug-conflict`.
91
+ *
92
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
93
+ */
94
+ export function takenContainerSlugs(project, dir) {
95
+ const containers = dir === 'interfaces'
96
+ ? project.interfaces
97
+ : [
98
+ ...project.apis,
99
+ ...project.grpcApis,
100
+ ...project.wsApis,
101
+ ...Object.values(project.extraContainers ?? {}).flat(),
102
+ ];
103
+ return new Set([
104
+ ...containers.map((container) => container.slug),
105
+ ...unsupportedOf(project)
106
+ .filter((placeholder) => placeholder.dir === dir)
107
+ .map((placeholder) => placeholder.slug),
108
+ ]);
109
+ }
65
110
  /** The default {@link IdGenerator}: a lexicographically sortable ULID. */
66
111
  export const generateId = () => ulid();
67
112
  function idOf(options) {
@@ -80,6 +125,7 @@ export function createProject(name, options) {
80
125
  apis: [],
81
126
  grpcApis: [],
82
127
  wsApis: [],
128
+ sequences: [],
83
129
  environments: [],
84
130
  wss: { outgoing: [], incoming: [], keystores: [] },
85
131
  };
@@ -69,6 +69,15 @@ export declare const ATTACHMENTS_DIR = "attachments";
69
69
  export declare const REQUEST_SUFFIX = ".request.yaml";
70
70
  /** Directory holding every REST API, beside `interfaces/`. */
71
71
  export declare const APIS_DIR = "apis";
72
+ /** Directory holding the project's webhook collection (`webhooks.yaml` and a `requests/` tree). */
73
+ export declare const WEBHOOKS_DIR = "webhooks";
74
+ /** File describing the webhook collection: its target and default credentials. */
75
+ export declare const WEBHOOKS_FILE = "webhooks.yaml";
76
+ /**
77
+ * The feature that also switches the webhook collection: it is REST requests in a tree of its own,
78
+ * so it is loaded and saved only while `rest` is on (spec §3.2).
79
+ */
80
+ export declare const WEBHOOKS_FEATURE = "rest";
72
81
  /** Per-API directory holding the request tree: request files and folder directories. */
73
82
  export declare const REQUESTS_DIR = "requests";
74
83
  /** File naming a folder inside an API's request tree. */
@@ -94,7 +103,7 @@ export declare function interfaceFile(root: string, interfaceSlug: string): stri
94
103
  export declare function definitionDir(root: string, interfaceSlug: string): string;
95
104
  /**
96
105
  * Alias of {@link definitionDir} under the name the desktop facade (Task 21)
97
- * calls it by: the directory passed as `cache.dir` to `importDefinition`.
106
+ * calls it by: the directory passed as `cache.dir` to `importWsdl`.
98
107
  */
99
108
  export declare const definitionCacheDir: typeof definitionDir;
100
109
  /** Absolute path of an operation's directory. */
@@ -163,6 +163,15 @@ export const ATTACHMENTS_DIR = 'attachments';
163
163
  export const REQUEST_SUFFIX = '.request.yaml';
164
164
  /** Directory holding every REST API, beside `interfaces/`. */
165
165
  export const APIS_DIR = 'apis';
166
+ /** Directory holding the project's webhook collection (`webhooks.yaml` and a `requests/` tree). */
167
+ export const WEBHOOKS_DIR = 'webhooks';
168
+ /** File describing the webhook collection: its target and default credentials. */
169
+ export const WEBHOOKS_FILE = 'webhooks.yaml';
170
+ /**
171
+ * The feature that also switches the webhook collection: it is REST requests in a tree of its own,
172
+ * so it is loaded and saved only while `rest` is on (spec §3.2).
173
+ */
174
+ export const WEBHOOKS_FEATURE = 'rest';
166
175
  /** Per-API directory holding the request tree: request files and folder directories. */
167
176
  export const REQUESTS_DIR = 'requests';
168
177
  /** File naming a folder inside an API's request tree. */
@@ -196,7 +205,7 @@ export function definitionDir(root, interfaceSlug) {
196
205
  }
197
206
  /**
198
207
  * Alias of {@link definitionDir} under the name the desktop facade (Task 21)
199
- * calls it by: the directory passed as `cache.dir` to `importDefinition`.
208
+ * calls it by: the directory passed as `cache.dir` to `importWsdl`.
200
209
  */
201
210
  export const definitionCacheDir = definitionDir;
202
211
  /** Absolute path of an operation's directory. */
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Everything here is deliberately plain data — the engine never reads a file for it. The
6
6
  * desktop's `PreferencesService` loads/merges/persists a document; the engine consumes the
7
- * merged object (see `send-options.ts`).
7
+ * merged object (see `soap/send-input.ts`).
8
8
  *
9
9
  * Some sections are persisted and shown before they are wired to behaviour: `proxy` and `ssl`
10
10
  * become effective with the connection settings task.
@@ -173,6 +173,11 @@ export interface UpdatePreferences {
173
173
  /** Check GitHub Releases for a newer version once, shortly after the app starts. */
174
174
  readonly checkOnLaunch: boolean;
175
175
  }
176
+ /** Account-related preferences. The account list itself lives elsewhere; this is display-only. */
177
+ export interface AccountPreferences {
178
+ /** Whether the status bar shows the account item once a server is known. */
179
+ readonly showInStatusBar: boolean;
180
+ }
176
181
  /** The whole preferences document. */
177
182
  export interface Preferences {
178
183
  readonly http: HttpPreferences;
@@ -185,6 +190,7 @@ export interface Preferences {
185
190
  readonly editor: EditorPreferences;
186
191
  readonly ui: UiPreferences;
187
192
  readonly updates: UpdatePreferences;
193
+ readonly accounts: AccountPreferences;
188
194
  /**
189
195
  * Keybinding overrides, keyed by command id: the chord that runs it, or `''` when the user
190
196
  * unbound it. Empty by default — a command with no entry uses its registered chord. Written
@@ -218,8 +224,8 @@ export declare const preferencesSchema: z.ZodObject<{
218
224
  proxy: z.ZodOptional<z.ZodObject<{
219
225
  mode: z.ZodOptional<z.ZodEnum<{
220
226
  none: "none";
221
- manual: "manual";
222
227
  system: "system";
228
+ manual: "manual";
223
229
  }>>;
224
230
  host: z.ZodOptional<z.ZodString>;
225
231
  port: z.ZodOptional<z.ZodNumber>;
@@ -294,6 +300,9 @@ export declare const preferencesSchema: z.ZodObject<{
294
300
  updates: z.ZodOptional<z.ZodObject<{
295
301
  checkOnLaunch: z.ZodOptional<z.ZodBoolean>;
296
302
  }, z.core.$strip>>;
303
+ accounts: z.ZodOptional<z.ZodObject<{
304
+ showInStatusBar: z.ZodOptional<z.ZodBoolean>;
305
+ }, z.core.$strip>>;
297
306
  shortcuts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
298
307
  }, z.core.$strip>;
299
308
  /** A partial preferences document, as accepted by {@link mergePreferences}. */
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Everything here is deliberately plain data — the engine never reads a file for it. The
6
6
  * desktop's `PreferencesService` loads/merges/persists a document; the engine consumes the
7
- * merged object (see `send-options.ts`).
7
+ * merged object (see `soap/send-input.ts`).
8
8
  *
9
9
  * Some sections are persisted and shown before they are wired to behaviour: `proxy` and `ssl`
10
10
  * become effective with the connection settings task.
@@ -68,6 +68,7 @@ export const DEFAULT_PREFERENCES = Object.freeze({
68
68
  logSize: 500,
69
69
  }),
70
70
  updates: Object.freeze({ checkOnLaunch: false }),
71
+ accounts: Object.freeze({ showInStatusBar: true }),
71
72
  shortcuts: Object.freeze({}),
72
73
  });
73
74
  /**
@@ -158,6 +159,7 @@ export const preferencesSchema = z.object({
158
159
  })
159
160
  .optional(),
160
161
  updates: z.object({ checkOnLaunch: z.boolean().optional() }).optional(),
162
+ accounts: z.object({ showInStatusBar: z.boolean().optional() }).optional(),
161
163
  shortcuts: z.record(z.string(), z.string()).optional(),
162
164
  });
163
165
  /** Drops every `undefined` value so a patch never overwrites a default with nothing. */
@@ -210,6 +212,7 @@ export function mergePreferences(patch, base = DEFAULT_PREFERENCES) {
210
212
  editor: parseSection(shape.editor, root['editor']),
211
213
  ui: parseSection(shape.ui, root['ui']),
212
214
  updates: parseSection(shape.updates, root['updates']),
215
+ accounts: parseSection(shape.accounts, root['accounts']),
213
216
  shortcuts: parseSection(shape.shortcuts, root['shortcuts']),
214
217
  };
215
218
  return {
@@ -227,6 +230,7 @@ export function mergePreferences(patch, base = DEFAULT_PREFERENCES) {
227
230
  defaultLayout: mergeSection(base.ui.defaultLayout, value.ui?.defaultLayout),
228
231
  },
229
232
  updates: mergeSection(base.updates, value.updates),
233
+ accounts: mergeSection(base.accounts, value.accounts),
230
234
  shortcuts: { ...base.shortcuts, ...(value.shortcuts ?? {}) },
231
235
  };
232
236
  }
@@ -7,11 +7,14 @@
7
7
  * unresolved expressions are left verbatim in the output and reported via
8
8
  * `unresolved`.
9
9
  *
10
+ * `${#Sequence#name}` is the exception: its values come from responses, so
11
+ * they are never expanded again, never reached by the shorthand, and never
12
+ * allowed to form another reference's name (ADR-0015).
13
+ *
10
14
  * Pure module: no I/O beyond reading the `scopes.system` map the caller
11
15
  * passes in (default `process.env`).
12
16
  */
13
17
  import type { PropertyMap } from './model.js';
14
- import type { SoapSendInput } from '../types.js';
15
18
  /** The property lookup scopes available to {@link expand}. */
16
19
  export interface PropertyScopes {
17
20
  readonly project: PropertyMap;
@@ -27,6 +30,19 @@ export interface PropertyScopes {
27
30
  readonly global: PropertyMap;
28
31
  /** Defaults to `process.env` when omitted. */
29
32
  readonly system?: Readonly<Record<string, string | undefined>>;
33
+ /**
34
+ * Secret values keyed by name, for the `${secret:name}` token. Resolved by the caller (main
35
+ * from the keychain-backed store, the CLI from `WIREBENCH_SECRET_<NAME>`) and injected here so
36
+ * expansion itself stays synchronous and pure.
37
+ */
38
+ readonly secrets?: Readonly<Record<string, string>>;
39
+ /**
40
+ * Values a running sequence lifted out of earlier responses, for `${#Sequence#name}`. Text a
41
+ * server chose, so it is held to ADR-0015: substituted literally (never expanded again), reachable
42
+ * only by the explicit form (never by the `${name}` shorthand), and never allowed to name another
43
+ * reference.
44
+ */
45
+ readonly sequence?: PropertyMap;
30
46
  }
31
47
  /**
32
48
  * Filters `map` down to the entries not listed in `disabled`, preserving the map's key order.
@@ -44,7 +60,11 @@ export interface UnresolvedRef {
44
60
  readonly expr: string;
45
61
  readonly scope?: string;
46
62
  readonly name?: string;
47
- readonly code: 'missing' | 'unknown-scope' | 'cycle' | 'too-deep' | 'malformed';
63
+ /**
64
+ * Why the reference stayed unexpanded. `name-from-response`: the reference's own name was built
65
+ * from a `${#Sequence#…}` value, so a server would be choosing which property (or secret) is read.
66
+ */
67
+ readonly code: 'missing' | 'unknown-scope' | 'cycle' | 'too-deep' | 'malformed' | 'name-from-response';
48
68
  /**
49
69
  * Offsets into the original text of the *outermost* `${...}` reference the user can see. When
50
70
  * this ref was discovered while recursively expanding a property's value (not the original
@@ -68,7 +88,7 @@ export interface ExpandResult {
68
88
  name: string;
69
89
  }[];
70
90
  }
71
- /** Options accepted by {@link expand} and {@link expandSendInput}. */
91
+ /** Options accepted by {@link expand} and by `expandSendInput` in `soap/expand.ts`. */
72
92
  export interface ExpandOptions {
73
93
  readonly maxDepth?: number;
74
94
  /**
@@ -79,19 +99,13 @@ export interface ExpandOptions {
79
99
  }
80
100
  /** Expands every `${...}` property reference in `text` against `scopes`. */
81
101
  export declare function expand(text: string, scopes: PropertyScopes, options?: ExpandOptions): ExpandResult;
82
- /** True when `text` contains at least one (non-escaped) `${` sequence. */
83
- export declare function hasExpansions(text: string): boolean;
84
102
  /**
85
- * Expands the endpoint, envelope, soap action, and every header name/value of a
86
- * {@link SoapSendInput}. Header *names* are expanded too, so two headers whose names expand to
87
- * the same string collapse into one entry (last-write-wins, per `Object.entries` insertion
88
- * order — same as any other JS object key collision).
89
- *
90
- * Attachments are expanded as well, in the two places a property can reasonably appear: the
91
- * display/file name that ends up in `Content-Disposition`, and the path of a file-backed
92
- * attachment. Content-IDs are left alone — they are generated, not authored.
103
+ * The `secret:name` values reached from `text`: every `${secret:name}` token found directly, plus
104
+ * any reached by following `${name}` and `${#Scope#name}` property references whose stored value
105
+ * itself expands (or is) a secret token. Reuses the same tokenizer/lookup helpers as {@link expand},
106
+ * and is cycle-safe the same way (a visited `scope#name` is never revisited on a given path).
107
+ * `scopes` is optional — with none given, only literal `${secret:name}` tokens in `text` are found.
93
108
  */
94
- export declare function expandSendInput(input: SoapSendInput, scopes: PropertyScopes, options?: ExpandOptions): {
95
- input: SoapSendInput;
96
- unresolved: UnresolvedRef[];
97
- };
109
+ export declare function secretNamesIn(text: string, scopes?: PropertyScopes): string[];
110
+ /** True when `text` contains at least one (non-escaped) `${` sequence. */
111
+ export declare function hasExpansions(text: string): boolean;