@wirebench/engine 2.2.0 → 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
@@ -44,6 +44,10 @@ export interface SampleOptions {
44
44
  /** How many values the sample may hold. Defaults to {@link MAX_SAMPLE_NODES}. */
45
45
  readonly maxNodes?: number;
46
46
  }
47
+ /** The type to generate for, ignoring `null` — which is an alternative, not a shape. */
48
+ export declare function effectiveType(schema: JsonSchema): string | undefined;
49
+ /** The schema an `allOf` amounts to: every branch merged, later branches filling in blanks. */
50
+ export declare function mergeAllOf(schema: JsonSchema): JsonSchema;
47
51
  /**
48
52
  * A sample value for one schema.
49
53
  *
@@ -60,7 +60,7 @@ function isNullable(schema) {
60
60
  return schema.nullable === true || typesOf(schema).has('null');
61
61
  }
62
62
  /** The type to generate for, ignoring `null` — which is an alternative, not a shape. */
63
- function effectiveType(schema) {
63
+ export function effectiveType(schema) {
64
64
  for (const type of typesOf(schema)) {
65
65
  if (type !== 'null') {
66
66
  return type;
@@ -109,7 +109,7 @@ function without(schema, ...keys) {
109
109
  return copy;
110
110
  }
111
111
  /** The schema an `allOf` amounts to: every branch merged, later branches filling in blanks. */
112
- function mergeAllOf(schema) {
112
+ export function mergeAllOf(schema) {
113
113
  if (schema.allOf === undefined || schema.allOf.length === 0) {
114
114
  return schema;
115
115
  }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Where a description comes from.
3
+ *
4
+ * In `json/schema/` because the OpenAPI and the AsyncAPI imports take the same three sources, and no
5
+ * protocol folder imports another (protocol modules spec §7.2). `rest/openapi/import.ts` re-exports
6
+ * the type under the name it has always had.
7
+ */
8
+ /** Where a document comes from: a location to fetch, or text the user already has. */
9
+ export type OpenApiSource = {
10
+ readonly kind: 'url';
11
+ readonly url: string;
12
+ } | {
13
+ readonly kind: 'file';
14
+ readonly path: string;
15
+ }
16
+ /** Text with a location to resolve relative references against — a paste, or a test. */
17
+ | {
18
+ readonly kind: 'text';
19
+ readonly text: string;
20
+ readonly location?: string;
21
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Where a description comes from.
3
+ *
4
+ * In `json/schema/` because the OpenAPI and the AsyncAPI imports take the same three sources, and no
5
+ * protocol folder imports another (protocol modules spec §7.2). `rest/openapi/import.ts` re-exports
6
+ * the type under the name it has always had.
7
+ */
8
+ export {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * A bounded, in-house JSON Schema validator for contract checks.
3
+ *
4
+ * There is no JSON Schema validator in the engine and no new dependency is allowed for one, so
5
+ * this covers a draft-07-shaped subset: enough of AsyncAPI/OpenAPI message schemas to catch real
6
+ * mistakes without pulling in a library. Unsupported keywords (`format`, `if`/`then`/`else`,
7
+ * `dependencies`/`dependentSchemas`, `propertyNames`, `contains`, `unevaluated*`) and an unresolved
8
+ * `$ref` are silently accepted rather than asserted — a caller wanting to warn about that uses
9
+ * `unsupportedKeywordsIn` up front, once per document.
10
+ *
11
+ * The walk is recursive but shares one `{ nodes, problems }` budget across the whole call, so a
12
+ * pathological schema (a huge array, a `$ref` cycle it does not even try to resolve) cannot make
13
+ * validation expensive: it stops after `maxNodes` schema nodes visited or `maxProblems` problems
14
+ * collected, appending one `budget` problem when the node cap is what stopped it.
15
+ */
16
+ /** One validation failure, located by a JSON pointer into the value that was checked. */
17
+ export interface JsonSchemaProblem {
18
+ readonly path: string;
19
+ readonly keyword: string;
20
+ readonly message: string;
21
+ }
22
+ /** Caps that bound a single `validateJsonSchema` call. */
23
+ export interface ValidateJsonOptions {
24
+ readonly maxNodes?: number;
25
+ readonly maxProblems?: number;
26
+ /**
27
+ * Word every message without the checked value's own content (a number, a length, a count), so a
28
+ * result can be kept where the body must not be: "below the minimum 0" rather than "-3 is less
29
+ * than 0". The schema's own values (bounds, patterns) and the value's keys still appear.
30
+ */
31
+ readonly redactValues?: boolean;
32
+ /**
33
+ * What a `pattern` (or `patternProperties` key) the validator will not run comes to: an unsafe
34
+ * pattern, or a value too long to test. `'report'` (the default) adds a "pattern not checked"
35
+ * problem; `'pass'` adds nothing, so the check neither fills the problem cap nor fails a
36
+ * combinator branch, for a caller whose own later check applies the pattern.
37
+ */
38
+ readonly uncheckedPatterns?: 'report' | 'pass';
39
+ }
40
+ export declare const MAX_VALIDATE_NODES = 10000;
41
+ export declare const MAX_VALIDATE_PROBLEMS = 20;
42
+ /** Keywords this validator recognises but never asserts; a document using one gets a summary line. */
43
+ export declare const UNSUPPORTED_JSON_SCHEMA_KEYWORDS: readonly string[];
44
+ /** Nested `walk` calls past this stop the walk (as the node cap does) instead of the stack. */
45
+ export declare const MAX_VALIDATE_DEPTH = 256;
46
+ /** Validates `value` against `schema`, returning every problem found (bounded by `options`). */
47
+ export declare function validateJsonSchema(value: unknown, schema: unknown, options?: ValidateJsonOptions): JsonSchemaProblem[];
48
+ /** Every keyword this validator does not assert, found anywhere in `schema` (deduplicated, sorted). */
49
+ export declare function unsupportedKeywordsIn(schema: unknown): string[];
@@ -0,0 +1,557 @@
1
+ /**
2
+ * A bounded, in-house JSON Schema validator for contract checks.
3
+ *
4
+ * There is no JSON Schema validator in the engine and no new dependency is allowed for one, so
5
+ * this covers a draft-07-shaped subset: enough of AsyncAPI/OpenAPI message schemas to catch real
6
+ * mistakes without pulling in a library. Unsupported keywords (`format`, `if`/`then`/`else`,
7
+ * `dependencies`/`dependentSchemas`, `propertyNames`, `contains`, `unevaluated*`) and an unresolved
8
+ * `$ref` are silently accepted rather than asserted — a caller wanting to warn about that uses
9
+ * `unsupportedKeywordsIn` up front, once per document.
10
+ *
11
+ * The walk is recursive but shares one `{ nodes, problems }` budget across the whole call, so a
12
+ * pathological schema (a huge array, a `$ref` cycle it does not even try to resolve) cannot make
13
+ * validation expensive: it stops after `maxNodes` schema nodes visited or `maxProblems` problems
14
+ * collected, appending one `budget` problem when the node cap is what stopped it.
15
+ */
16
+ export const MAX_VALIDATE_NODES = 10_000;
17
+ export const MAX_VALIDATE_PROBLEMS = 20;
18
+ /** Keywords this validator recognises but never asserts; a document using one gets a summary line. */
19
+ export const UNSUPPORTED_JSON_SCHEMA_KEYWORDS = [
20
+ 'contains',
21
+ 'dependencies',
22
+ 'dependentSchemas',
23
+ 'format',
24
+ 'if',
25
+ 'propertyNames',
26
+ 'then',
27
+ 'else',
28
+ 'unevaluatedItems',
29
+ 'unevaluatedProperties',
30
+ ];
31
+ const UNSUPPORTED_SET = new Set(UNSUPPORTED_JSON_SCHEMA_KEYWORDS);
32
+ /** A string longer than this is never tested against a `pattern`: a contract's regex is
33
+ * untrusted, and a bounded scan of a bounded string is the only combination this validator
34
+ * will pay for. */
35
+ const MAX_PATTERN_VALUE_LENGTH = 4_096;
36
+ /** Compiled (or rejected) patterns, keyed by source text so a repeated pattern — the common case,
37
+ * since one contract's messages share few distinct patterns — is scanned and compiled once. */
38
+ const patternCache = new Map();
39
+ /**
40
+ * Compiles `pattern`, refusing to run it at all when its shape can cause catastrophic
41
+ * backtracking: a quantified group whose body itself contains an unbounded quantifier (the
42
+ * `(a+)+` family), a backreference, or a lookaround. An invalid pattern compiles to `'invalid'`
43
+ * rather than throwing, matching this validator's existing "ignore, don't throw" rule.
44
+ */
45
+ function safeCompile(pattern) {
46
+ const cached = patternCache.get(pattern);
47
+ if (cached !== undefined)
48
+ return cached;
49
+ let result;
50
+ if (isUnsafePattern(pattern)) {
51
+ result = 'unsafe';
52
+ }
53
+ else {
54
+ try {
55
+ result = new RegExp(pattern);
56
+ }
57
+ catch {
58
+ result = 'invalid';
59
+ }
60
+ }
61
+ patternCache.set(pattern, result);
62
+ return result;
63
+ }
64
+ /** Backreferences, lookarounds, and a quantified group whose body contains its own unbounded
65
+ * quantifier — the shapes that make a regex engine's backtracking exponential in input length.
66
+ * This is a heuristic scan, not a parser: it errs toward refusing rather than missing a risk. */
67
+ function isUnsafePattern(pattern) {
68
+ if (/\\[1-9]/.test(pattern) || pattern.includes('\\k<'))
69
+ return true; // backreference, numbered or named
70
+ if (/\(\?<?[=!]/.test(pattern))
71
+ return true; // lookahead or lookbehind
72
+ return hasNestedUnboundedQuantifier(pattern);
73
+ }
74
+ const UNBOUNDED_QUANTIFIER_AT_START = /^(?:[*+]|\{\d*,\})/;
75
+ function hasNestedUnboundedQuantifier(pattern) {
76
+ let inClass = false;
77
+ const groupHasUnbounded = [];
78
+ let risky = false;
79
+ for (let i = 0; i < pattern.length; i += 1) {
80
+ const c = pattern[i];
81
+ if (c === '\\') {
82
+ i += 1; // skip the escaped character, it is never a live metacharacter
83
+ continue;
84
+ }
85
+ if (inClass) {
86
+ if (c === ']')
87
+ inClass = false;
88
+ continue;
89
+ }
90
+ if (c === '[') {
91
+ inClass = true;
92
+ continue;
93
+ }
94
+ if (c === '(') {
95
+ groupHasUnbounded.push(false);
96
+ continue;
97
+ }
98
+ if (c === ')') {
99
+ const bodyHasUnbounded = groupHasUnbounded.pop() ?? false;
100
+ const quantified = UNBOUNDED_QUANTIFIER_AT_START.test(pattern.slice(i + 1));
101
+ if (bodyHasUnbounded && quantified)
102
+ risky = true;
103
+ if (groupHasUnbounded.length > 0 && (bodyHasUnbounded || quantified)) {
104
+ groupHasUnbounded[groupHasUnbounded.length - 1] = true;
105
+ }
106
+ continue;
107
+ }
108
+ if (groupHasUnbounded.length === 0)
109
+ continue;
110
+ if (c === '+' || c === '*') {
111
+ groupHasUnbounded[groupHasUnbounded.length - 1] = true;
112
+ }
113
+ else if (c === '{' && UNBOUNDED_QUANTIFIER_AT_START.test(pattern.slice(i))) {
114
+ groupHasUnbounded[groupHasUnbounded.length - 1] = true;
115
+ }
116
+ }
117
+ return risky;
118
+ }
119
+ /** Nested `walk` calls past this stop the walk (as the node cap does) instead of the stack. */
120
+ export const MAX_VALIDATE_DEPTH = 256;
121
+ /** A `Budget` that shares the outer walk's node counter but collects into its own problem list —
122
+ * used to try a combinator's branch without either polluting the caller's problems or letting the
123
+ * branch's own node visits escape the shared cap. */
124
+ function branchBudget(outer, maxProblems) {
125
+ return {
126
+ get nodes() {
127
+ return outer.nodes;
128
+ },
129
+ set nodes(n) {
130
+ outer.nodes = n;
131
+ },
132
+ get depth() {
133
+ return outer.depth;
134
+ },
135
+ set depth(d) {
136
+ outer.depth = d;
137
+ },
138
+ maxNodes: outer.maxNodes,
139
+ problems: [],
140
+ maxProblems,
141
+ stopped: false,
142
+ outOfNodes: false,
143
+ outOfDepth: false,
144
+ redact: outer.redact,
145
+ passUnchecked: outer.passUnchecked,
146
+ };
147
+ }
148
+ /**
149
+ * Tries one combinator branch. A branch that ran out of nodes proved nothing either way: the stop
150
+ * is carried to the outer walk (which then gives no combinator verdict) and `undefined` returned.
151
+ */
152
+ function tryBranch(value, sub, path, budget, applying) {
153
+ // A branch already being applied to this same value would be skipped by `walk` and so look like a
154
+ // pass; it proves nothing either way, so it gives no verdict (without stopping the walk).
155
+ if (isPlainObject(sub) && applying.has(sub))
156
+ return undefined;
157
+ const trial = branchBudget(budget, 1);
158
+ walk(value, sub, path, trial, applying);
159
+ if (trial.outOfNodes) {
160
+ budget.stopped = true;
161
+ budget.outOfNodes = true;
162
+ if (trial.outOfDepth)
163
+ budget.outOfDepth = true;
164
+ return undefined;
165
+ }
166
+ return trial.problems.length === 0;
167
+ }
168
+ /** Validates `value` against `schema`, returning every problem found (bounded by `options`). */
169
+ export function validateJsonSchema(value, schema, options) {
170
+ const budget = {
171
+ nodes: 0,
172
+ maxNodes: options?.maxNodes ?? MAX_VALIDATE_NODES,
173
+ problems: [],
174
+ maxProblems: options?.maxProblems ?? MAX_VALIDATE_PROBLEMS,
175
+ stopped: false,
176
+ outOfNodes: false,
177
+ depth: 0,
178
+ outOfDepth: false,
179
+ redact: options?.redactValues === true,
180
+ passUnchecked: options?.uncheckedPatterns === 'pass',
181
+ };
182
+ walk(value, schema, '', budget);
183
+ if (budget.outOfNodes &&
184
+ budget.problems.at(-1)?.keyword !== 'budget' &&
185
+ budget.problems.length < budget.maxProblems) {
186
+ budget.problems.push({
187
+ path: '',
188
+ keyword: 'budget',
189
+ message: budget.outOfDepth
190
+ ? `validation stopped at nesting depth ${MAX_VALIDATE_DEPTH}`
191
+ : `validation stopped after ${budget.maxNodes} nodes`,
192
+ });
193
+ }
194
+ return budget.problems;
195
+ }
196
+ /** Every keyword this validator does not assert, found anywhere in `schema` (deduplicated, sorted). */
197
+ export function unsupportedKeywordsIn(schema) {
198
+ const found = new Set();
199
+ const seen = new Set();
200
+ collectUnsupported(schema, found, seen);
201
+ return [...found].sort();
202
+ }
203
+ function collectUnsupported(node, found, seen) {
204
+ if (!isPlainObject(node) || seen.has(node))
205
+ return;
206
+ seen.add(node);
207
+ for (const key of Object.keys(node)) {
208
+ if (UNSUPPORTED_SET.has(key))
209
+ found.add(key);
210
+ collectUnsupported(node[key], found, seen);
211
+ }
212
+ }
213
+ function isPlainObject(v) {
214
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
215
+ }
216
+ function report(budget, path, keyword, message) {
217
+ if (budget.problems.length >= budget.maxProblems) {
218
+ budget.stopped = true;
219
+ return;
220
+ }
221
+ budget.problems.push({ path, keyword, message });
222
+ }
223
+ function hasRoom(budget) {
224
+ if (budget.stopped)
225
+ return false;
226
+ if (budget.problems.length >= budget.maxProblems) {
227
+ budget.stopped = true;
228
+ return false;
229
+ }
230
+ if (budget.nodes >= budget.maxNodes) {
231
+ budget.stopped = true;
232
+ budget.outOfNodes = true;
233
+ return false;
234
+ }
235
+ budget.nodes += 1;
236
+ return true;
237
+ }
238
+ function typeName(value) {
239
+ if (value === null)
240
+ return 'null';
241
+ if (Array.isArray(value))
242
+ return 'array';
243
+ if (typeof value === 'number')
244
+ return Number.isInteger(value) ? 'integer' : 'number';
245
+ return typeof value;
246
+ }
247
+ function matchesType(value, want) {
248
+ if (want === 'integer')
249
+ return typeof value === 'number' && Number.isInteger(value);
250
+ if (want === 'number')
251
+ return typeof value === 'number';
252
+ return typeName(value) === want;
253
+ }
254
+ function jsonEquals(a, b) {
255
+ if (a === b)
256
+ return true;
257
+ if (typeof a !== typeof b)
258
+ return false;
259
+ if (Array.isArray(a) || Array.isArray(b)) {
260
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)
261
+ return false;
262
+ return a.every((v, i) => jsonEquals(v, b[i]));
263
+ }
264
+ if (isPlainObject(a) && isPlainObject(b)) {
265
+ const aKeys = Object.keys(a);
266
+ const bKeys = Object.keys(b);
267
+ if (aKeys.length !== bKeys.length)
268
+ return false;
269
+ return aKeys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && jsonEquals(a[k], b[k]));
270
+ }
271
+ return false;
272
+ }
273
+ /**
274
+ * Walks one schema node against one value, at `path`, appending problems into the shared budget.
275
+ *
276
+ * `applying` holds the schema objects already being applied to this same value (through
277
+ * `allOf`/`anyOf`/`oneOf`/`not`). A resolved document can be cyclic, and a schema that composes
278
+ * itself would otherwise recurse without ever moving in the value; re-entering one is skipped,
279
+ * since its constraints are already being checked here. Descending into a child value starts a
280
+ * fresh set, and the depth cap backs both up.
281
+ */
282
+ function walk(value, schemaValue, path, budget, applying = new Set()) {
283
+ if (!hasRoom(budget))
284
+ return;
285
+ if (!isPlainObject(schemaValue))
286
+ return; // `true`/`false`/malformed schema: nothing to assert
287
+ if (applying.has(schemaValue))
288
+ return;
289
+ if (budget.depth >= MAX_VALIDATE_DEPTH) {
290
+ budget.stopped = true;
291
+ budget.outOfNodes = true;
292
+ budget.outOfDepth = true;
293
+ return;
294
+ }
295
+ applying.add(schemaValue);
296
+ budget.depth++;
297
+ try {
298
+ walkSchema(value, schemaValue, path, budget, applying);
299
+ }
300
+ finally {
301
+ budget.depth--;
302
+ applying.delete(schemaValue);
303
+ }
304
+ }
305
+ function walkSchema(value, schema, path, budget, applying) {
306
+ if (typeof schema.$ref === 'string')
307
+ return; // unresolved $ref: passes, per scope
308
+ const nullable = schema.nullable === true;
309
+ const rawTypes = schema.type === undefined ? undefined : Array.isArray(schema.type) ? schema.type : [schema.type];
310
+ const types = rawTypes?.filter((t) => typeof t === 'string');
311
+ if (value === null && (nullable || types?.includes('null'))) {
312
+ return; // an explicitly nullable slot accepts null without checking the rest of the schema
313
+ }
314
+ // 1. type
315
+ if (types && !types.some((t) => matchesType(value, t))) {
316
+ report(budget, path, 'type', `expected ${types.join(' or ')}, got ${typeName(value)}`);
317
+ return; // further keywords assume the right shape
318
+ }
319
+ // 2. const
320
+ if ('const' in schema) {
321
+ if (!jsonEquals(value, schema.const)) {
322
+ report(budget, path, 'const', `expected ${JSON.stringify(schema.const)}`);
323
+ return;
324
+ }
325
+ }
326
+ // 3. enum
327
+ if (Array.isArray(schema.enum)) {
328
+ if (!schema.enum.some((v) => jsonEquals(value, v))) {
329
+ report(budget, path, 'enum', 'not one of the allowed values');
330
+ return;
331
+ }
332
+ }
333
+ // 4. string checks
334
+ if (typeof value === 'string') {
335
+ if (typeof schema.minLength === 'number' && value.length < schema.minLength) {
336
+ report(budget, path, 'minLength', budget.redact
337
+ ? `shorter than the minimum length ${schema.minLength}`
338
+ : `length ${value.length} is less than ${schema.minLength}`);
339
+ }
340
+ if (typeof schema.maxLength === 'number' && value.length > schema.maxLength) {
341
+ report(budget, path, 'maxLength', budget.redact
342
+ ? `longer than the maximum length ${schema.maxLength}`
343
+ : `length ${value.length} is more than ${schema.maxLength}`);
344
+ }
345
+ if (typeof schema.pattern === 'string') {
346
+ const compiled = safeCompile(schema.pattern);
347
+ if (compiled === 'unsafe') {
348
+ if (!budget.passUnchecked) {
349
+ report(budget, path, 'pattern', 'pattern not checked: unsafe for evaluation');
350
+ }
351
+ }
352
+ else if (compiled !== 'invalid') {
353
+ if (value.length > MAX_PATTERN_VALUE_LENGTH) {
354
+ if (!budget.passUnchecked) {
355
+ report(budget, path, 'pattern', `pattern not checked: value longer than ${MAX_PATTERN_VALUE_LENGTH} characters`);
356
+ }
357
+ }
358
+ else if (!compiled.test(value)) {
359
+ report(budget, path, 'pattern', `does not match /${schema.pattern}/`);
360
+ }
361
+ }
362
+ // an invalid pattern is ignored rather than thrown
363
+ }
364
+ }
365
+ // 5. number checks
366
+ if (typeof value === 'number') {
367
+ if (typeof schema.minimum === 'number' && value < schema.minimum) {
368
+ report(budget, path, 'minimum', budget.redact ? `below the minimum ${schema.minimum}` : `${value} is less than ${schema.minimum}`);
369
+ }
370
+ if (typeof schema.maximum === 'number' && value > schema.maximum) {
371
+ report(budget, path, 'maximum', budget.redact ? `above the maximum ${schema.maximum}` : `${value} is more than ${schema.maximum}`);
372
+ }
373
+ const exclusiveMin = schema.exclusiveMinimum;
374
+ if (typeof exclusiveMin === 'number' && value <= exclusiveMin) {
375
+ report(budget, path, 'exclusiveMinimum', budget.redact ? `not above the exclusive minimum ${exclusiveMin}` : `${value} is not more than ${exclusiveMin}`);
376
+ }
377
+ else if (exclusiveMin === true && typeof schema.minimum === 'number' && value <= schema.minimum) {
378
+ report(budget, path, 'exclusiveMinimum', budget.redact
379
+ ? `not above the exclusive minimum ${schema.minimum}`
380
+ : `${value} is not more than ${schema.minimum}`);
381
+ }
382
+ const exclusiveMax = schema.exclusiveMaximum;
383
+ if (typeof exclusiveMax === 'number' && value >= exclusiveMax) {
384
+ report(budget, path, 'exclusiveMaximum', budget.redact ? `not below the exclusive maximum ${exclusiveMax}` : `${value} is not less than ${exclusiveMax}`);
385
+ }
386
+ else if (exclusiveMax === true && typeof schema.maximum === 'number' && value >= schema.maximum) {
387
+ report(budget, path, 'exclusiveMaximum', budget.redact
388
+ ? `not below the exclusive maximum ${schema.maximum}`
389
+ : `${value} is not less than ${schema.maximum}`);
390
+ }
391
+ if (typeof schema.multipleOf === 'number' && schema.multipleOf > 0) {
392
+ const ratio = value / schema.multipleOf;
393
+ if (Math.abs(ratio - Math.round(ratio)) > 1e-9) {
394
+ report(budget, path, 'multipleOf', budget.redact
395
+ ? `not a multiple of ${schema.multipleOf}`
396
+ : `${value} is not a multiple of ${schema.multipleOf}`);
397
+ }
398
+ }
399
+ }
400
+ // 6. array checks
401
+ if (Array.isArray(value)) {
402
+ if (typeof schema.minItems === 'number' && value.length < schema.minItems) {
403
+ report(budget, path, 'minItems', budget.redact
404
+ ? `fewer items than the minimum ${schema.minItems}`
405
+ : `has ${value.length} items, fewer than ${schema.minItems}`);
406
+ }
407
+ if (typeof schema.maxItems === 'number' && value.length > schema.maxItems) {
408
+ report(budget, path, 'maxItems', budget.redact
409
+ ? `more items than the maximum ${schema.maxItems}`
410
+ : `has ${value.length} items, more than ${schema.maxItems}`);
411
+ }
412
+ if (schema.uniqueItems === true) {
413
+ const dup = value.some((v, i) => value.slice(0, i).some((prior) => jsonEquals(prior, v)));
414
+ if (dup)
415
+ report(budget, path, 'uniqueItems', 'items are not unique');
416
+ }
417
+ if (Array.isArray(schema.items)) {
418
+ const itemSchemas = schema.items;
419
+ for (let i = 0; i < value.length; i += 1) {
420
+ if (budget.stopped)
421
+ break;
422
+ if (i < itemSchemas.length) {
423
+ const itemSchema = itemSchemas[i];
424
+ if (itemSchema !== undefined)
425
+ walk(value[i], itemSchema, `${path}/${i}`, budget);
426
+ }
427
+ else if (schema.additionalItems === false) {
428
+ report(budget, `${path}/${i}`, 'additionalItems', 'unexpected item beyond the tuple');
429
+ }
430
+ else if (isPlainObject(schema.additionalItems)) {
431
+ walk(value[i], schema.additionalItems, `${path}/${i}`, budget);
432
+ }
433
+ }
434
+ }
435
+ else if (isPlainObject(schema.items)) {
436
+ for (let i = 0; i < value.length; i += 1) {
437
+ if (budget.stopped)
438
+ break;
439
+ walk(value[i], schema.items, `${path}/${i}`, budget);
440
+ }
441
+ }
442
+ }
443
+ // 7. object checks
444
+ if (isPlainObject(value)) {
445
+ if (Array.isArray(schema.required)) {
446
+ for (const key of schema.required) {
447
+ if (!Object.prototype.hasOwnProperty.call(value, key)) {
448
+ report(budget, path, 'required', `missing required property "${key}"`);
449
+ }
450
+ }
451
+ }
452
+ if (typeof schema.minProperties === 'number' && Object.keys(value).length < schema.minProperties) {
453
+ report(budget, path, 'minProperties', `has fewer than ${schema.minProperties} properties`);
454
+ }
455
+ if (typeof schema.maxProperties === 'number' && Object.keys(value).length > schema.maxProperties) {
456
+ report(budget, path, 'maxProperties', `has more than ${schema.maxProperties} properties`);
457
+ }
458
+ const properties = isPlainObject(schema.properties) ? schema.properties : undefined;
459
+ const patternProperties = isPlainObject(schema.patternProperties) ? schema.patternProperties : undefined;
460
+ const compiledPatterns = [];
461
+ if (patternProperties) {
462
+ for (const [pattern, sub] of Object.entries(patternProperties)) {
463
+ if (!isPlainObject(sub))
464
+ continue;
465
+ const compiled = safeCompile(pattern);
466
+ if (compiled === 'unsafe') {
467
+ if (!budget.passUnchecked) {
468
+ report(budget, path, 'patternProperties', 'pattern not checked: unsafe for evaluation');
469
+ }
470
+ }
471
+ else if (compiled !== 'invalid') {
472
+ compiledPatterns.push([compiled, sub]);
473
+ }
474
+ // an invalid pattern is ignored rather than thrown
475
+ }
476
+ }
477
+ for (const key of Object.keys(value)) {
478
+ if (budget.stopped)
479
+ break;
480
+ const childPath = `${path}/${escapePointerSegment(key)}`;
481
+ let matched = false;
482
+ if (properties && Object.prototype.hasOwnProperty.call(properties, key)) {
483
+ matched = true;
484
+ walk(value[key], properties[key], childPath, budget);
485
+ }
486
+ for (const [regex, sub] of compiledPatterns) {
487
+ if (budget.stopped)
488
+ break;
489
+ if (key.length <= MAX_PATTERN_VALUE_LENGTH && regex.test(key)) {
490
+ matched = true;
491
+ walk(value[key], sub, childPath, budget);
492
+ }
493
+ }
494
+ if (!matched && schema.additionalProperties === false) {
495
+ report(budget, childPath, 'additionalProperties', `unexpected property "${key}"`);
496
+ }
497
+ else if (!matched && isPlainObject(schema.additionalProperties)) {
498
+ walk(value[key], schema.additionalProperties, childPath, budget);
499
+ }
500
+ }
501
+ }
502
+ // 8. allOf / anyOf / oneOf / not
503
+ if (Array.isArray(schema.allOf)) {
504
+ for (const sub of schema.allOf) {
505
+ if (budget.stopped)
506
+ break;
507
+ walk(value, sub, path, budget, applying);
508
+ }
509
+ }
510
+ if (Array.isArray(schema.anyOf) && !budget.stopped) {
511
+ let anyPasses = false;
512
+ let undecided = false;
513
+ for (const sub of schema.anyOf) {
514
+ const passed = tryBranch(value, sub, path, budget, applying);
515
+ if (passed === undefined) {
516
+ undecided = true;
517
+ if (budget.stopped)
518
+ break;
519
+ continue;
520
+ }
521
+ if (passed) {
522
+ anyPasses = true;
523
+ break;
524
+ }
525
+ }
526
+ if (!anyPasses && !undecided && !budget.stopped) {
527
+ report(budget, path, 'anyOf', 'value matches none of the allowed schemas');
528
+ }
529
+ }
530
+ if (Array.isArray(schema.oneOf) && !budget.stopped) {
531
+ let matches = 0;
532
+ let undecided = false;
533
+ for (const sub of schema.oneOf) {
534
+ const passed = tryBranch(value, sub, path, budget, applying);
535
+ if (passed === undefined) {
536
+ undecided = true;
537
+ if (budget.stopped)
538
+ break;
539
+ continue;
540
+ }
541
+ if (passed)
542
+ matches += 1;
543
+ }
544
+ if ((undecided ? matches > 1 : matches !== 1) && !budget.stopped) {
545
+ report(budget, path, 'oneOf', `value matches ${matches} of the allowed schemas, not exactly one`);
546
+ }
547
+ }
548
+ if (isPlainObject(schema.not) && !budget.stopped) {
549
+ const notPasses = tryBranch(value, schema.not, path, budget, applying);
550
+ if (notPasses === true && !budget.stopped) {
551
+ report(budget, path, 'not', 'value matches the disallowed schema');
552
+ }
553
+ }
554
+ }
555
+ function escapePointerSegment(segment) {
556
+ return segment.replace(/~/g, '~0').replace(/\//g, '~1');
557
+ }
@@ -3,7 +3,7 @@
3
3
  * container format, `selectAlias` picks the entry a send should present, and
4
4
  * `toTlsClientIdentity` shapes it for `TlsOptions`.
5
5
  */
6
- import { WssError } from '../../errors.js';
6
+ import { WssError } from '../errors.js';
7
7
  import { loadPem } from './pem.js';
8
8
  import { loadPkcs12 } from './pkcs12.js';
9
9
  export { loadPem } from './pem.js';