@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
@@ -0,0 +1,149 @@
1
+ /**
2
+ * A gRPC request's script types, from its method's messages (spec §Types, gRPC).
3
+ *
4
+ * The types describe the messages' JSON form as the engine reads and writes it (`grpc/codec.ts`):
5
+ * fields under their declared names, 64-bit integers and bytes as strings (bytes in base64), enums
6
+ * by name, and every field optional, since a field left at its default is not written. Each message
7
+ * type becomes one alias, so a recursive message is fine. The well-known types map to their JSON
8
+ * forms.
9
+ */
10
+ import { describeMessage, describeMethod } from './proto/describe.js';
11
+ import { propertyKey } from '../script/types/json-schema.js';
12
+ const SCALARS = {
13
+ double: 'number',
14
+ float: 'number',
15
+ int32: 'number',
16
+ uint32: 'number',
17
+ sint32: 'number',
18
+ fixed32: 'number',
19
+ sfixed32: 'number',
20
+ int64: 'string',
21
+ uint64: 'string',
22
+ sint64: 'string',
23
+ fixed64: 'string',
24
+ sfixed64: 'string',
25
+ bool: 'boolean',
26
+ string: 'string',
27
+ bytes: 'string',
28
+ };
29
+ const WELL_KNOWN = {
30
+ 'google.protobuf.Timestamp': 'string',
31
+ 'google.protobuf.Duration': 'string',
32
+ 'google.protobuf.FieldMask': 'string',
33
+ 'google.protobuf.Empty': 'Record<string, never>',
34
+ 'google.protobuf.Struct': 'Record<string, unknown>',
35
+ 'google.protobuf.Value': 'unknown',
36
+ 'google.protobuf.ListValue': 'unknown[]',
37
+ 'google.protobuf.Any': '{ "@type": string; [key: string]: unknown }',
38
+ 'google.protobuf.DoubleValue': 'number',
39
+ 'google.protobuf.FloatValue': 'number',
40
+ 'google.protobuf.Int32Value': 'number',
41
+ 'google.protobuf.UInt32Value': 'number',
42
+ 'google.protobuf.Int64Value': 'string',
43
+ 'google.protobuf.UInt64Value': 'string',
44
+ 'google.protobuf.BoolValue': 'boolean',
45
+ 'google.protobuf.StringValue': 'string',
46
+ 'google.protobuf.BytesValue': 'string',
47
+ };
48
+ /** At most this many message types become aliases; beyond them a message is `unknown`. */
49
+ const MAX_MESSAGES = 500;
50
+ function aliasOf(fullName) {
51
+ return `WbMsg_${fullName.replace(/^\./, '').replace(/[^A-Za-z0-9_]/g, '_')}`;
52
+ }
53
+ function comment(text, indent) {
54
+ if (text === undefined || text.trim() === '')
55
+ return '';
56
+ return `${indent}/** ${text.trim().replace(/\*\//g, '*\\/').split(/\r?\n/).join(`\n${indent} * `)} */\n`;
57
+ }
58
+ class ProtoTypes {
59
+ set;
60
+ declared = new Map();
61
+ constructor(set) {
62
+ this.set = set;
63
+ }
64
+ message(fullName) {
65
+ const name = fullName.replace(/^\./, '');
66
+ const known = WELL_KNOWN[name];
67
+ if (known !== undefined)
68
+ return known;
69
+ const alias = aliasOf(name);
70
+ if (this.declared.has(alias))
71
+ return alias;
72
+ if (this.declared.size >= MAX_MESSAGES)
73
+ return 'unknown';
74
+ // Reserved first, so a message that refers to itself refers to the alias.
75
+ this.declared.set(alias, '');
76
+ let descriptor;
77
+ try {
78
+ descriptor = describeMessage(this.set, name);
79
+ }
80
+ catch {
81
+ this.declared.set(alias, `type ${alias} = unknown;\n`);
82
+ return alias;
83
+ }
84
+ const fields = descriptor.fields.map((field) => `${comment(field.comment, ' ')} ${propertyKey(field.name)}?: ${this.field(field)};\n`);
85
+ this.declared.set(alias, `/** ${name} */\ntype ${alias} = ${fields.length === 0 ? 'Record<string, never>' : `{\n${fields.join('')}}`};\n`);
86
+ return alias;
87
+ }
88
+ value(field) {
89
+ switch (field.valueKind) {
90
+ case 'scalar':
91
+ return SCALARS[field.type] ?? 'unknown';
92
+ case 'enum':
93
+ return field.enumValues !== undefined && field.enumValues.length > 0
94
+ ? field.enumValues.map((v) => JSON.stringify(v)).join(' | ')
95
+ : 'string';
96
+ case 'message':
97
+ case 'map':
98
+ if (field.enumValues !== undefined && field.enumValues.length > 0) {
99
+ return field.enumValues.map((v) => JSON.stringify(v)).join(' | ');
100
+ }
101
+ return SCALARS[field.type] ?? this.message(field.type);
102
+ }
103
+ }
104
+ field(field) {
105
+ const value = this.value(field);
106
+ if (field.valueKind === 'map') {
107
+ return `Record<string, ${value}>`;
108
+ }
109
+ if (field.repeated) {
110
+ return /^[A-Za-z0-9_$]+$/.test(value) ? `${value}[]` : `(${value})[]`;
111
+ }
112
+ return value;
113
+ }
114
+ declarations() {
115
+ return [...this.declared.values()].join('');
116
+ }
117
+ }
118
+ /** `WbRequestMessage` and `WbResponseMessage` for a method's input and output types. */
119
+ export function grpcScriptTypes(set, inputType, outputType) {
120
+ if (set === undefined) {
121
+ return [
122
+ "// This request's proto definition is not at hand, so its messages are untyped.",
123
+ 'type WbRequestMessage = unknown;',
124
+ 'type WbResponseMessage = unknown;',
125
+ '',
126
+ ].join('\n');
127
+ }
128
+ const types = new ProtoTypes(set);
129
+ const request = types.message(inputType);
130
+ const response = types.message(outputType);
131
+ return [
132
+ types.declarations(),
133
+ `type WbRequestMessage = ${request};`,
134
+ `type WbResponseMessage = ${response};`,
135
+ '',
136
+ ].join('\n');
137
+ }
138
+ /** A gRPC method's request and response message types, when the set has the method. */
139
+ export function grpcMessageTypes(set, service, method) {
140
+ if (set === undefined)
141
+ return undefined;
142
+ try {
143
+ const described = describeMethod(set, service, method);
144
+ return { input: described.requestType, output: described.responseType };
145
+ }
146
+ catch {
147
+ return undefined;
148
+ }
149
+ }
@@ -0,0 +1,34 @@
1
+ import type { ProtocolScripting } from '../protocol/module.js';
2
+ import type { HeaderPair } from '../script/model.js';
3
+ import type { GrpcCallResult } from './call.js';
4
+ import type { GrpcResolvedInput } from './run.js';
5
+ export interface GrpcRequestSnapshot {
6
+ readonly protocol: 'grpc';
7
+ readonly target: string;
8
+ /** `package.Service/Method`; a script cannot change it. */
9
+ readonly method: string;
10
+ readonly metadata: readonly HeaderPair[];
11
+ /** The request message in its JSON form. */
12
+ readonly message: unknown;
13
+ }
14
+ export interface GrpcResponseSnapshot {
15
+ readonly protocol: 'grpc';
16
+ readonly status: {
17
+ readonly code: number;
18
+ readonly name: string;
19
+ readonly message: string;
20
+ };
21
+ readonly metadata: readonly HeaderPair[];
22
+ readonly trailers: readonly HeaderPair[];
23
+ /** The response message in its JSON form, when there was one. */
24
+ readonly message: unknown;
25
+ readonly durationMs: number;
26
+ }
27
+ export declare function grpcRequestSnapshot(input: GrpcResolvedInput, messageText: string): GrpcRequestSnapshot;
28
+ export declare function applyGrpcSnapshot(input: GrpcResolvedInput, messageText: string, before: GrpcRequestSnapshot, after: GrpcRequestSnapshot): {
29
+ input: GrpcResolvedInput;
30
+ messageText: string;
31
+ };
32
+ export declare function grpcResponseSnapshot(result: GrpcCallResult): GrpcResponseSnapshot;
33
+ /** gRPC's scripting facet. */
34
+ export declare const grpcScripting: ProtocolScripting<GrpcRequestSnapshot, GrpcResponseSnapshot>;
@@ -0,0 +1,147 @@
1
+ /**
2
+ * What a script sees of a gRPC call and its answer (spec §3.4): the snapshots, the converters
3
+ * between a prepared call and a snapshot, the API's declarations, its sandbox-side source, and what
4
+ * the script rules check.
5
+ */
6
+ import { z } from 'zod';
7
+ import { headerPairSchema } from '../script/apply.js';
8
+ import { entriesOf, pairsOf, recordPairs } from '../script/send.js';
9
+ export function grpcRequestSnapshot(input, messageText) {
10
+ let message;
11
+ try {
12
+ message = JSON.parse(messageText);
13
+ }
14
+ catch {
15
+ message = messageText;
16
+ }
17
+ return {
18
+ protocol: 'grpc',
19
+ target: input.target,
20
+ method: `${input.service}/${input.method}`,
21
+ metadata: pairsOf(input.metadata),
22
+ message,
23
+ };
24
+ }
25
+ export function applyGrpcSnapshot(input, messageText, before, after) {
26
+ const changed = JSON.stringify(after.message) !== JSON.stringify(before.message);
27
+ return {
28
+ input: { ...input, metadata: entriesOf(after.metadata) },
29
+ messageText: changed ? JSON.stringify(after.message, null, 2) : messageText,
30
+ };
31
+ }
32
+ export function grpcResponseSnapshot(result) {
33
+ const first = result.responseMessages[0];
34
+ return {
35
+ protocol: 'grpc',
36
+ status: {
37
+ code: result.exchange.status,
38
+ name: result.exchange.statusName,
39
+ message: result.exchange.statusMessage ?? '',
40
+ },
41
+ metadata: recordPairs(result.exchange.headers),
42
+ trailers: recordPairs(result.exchange.trailers),
43
+ message: first?.json,
44
+ durationMs: result.exchange.durationMs,
45
+ };
46
+ }
47
+ const GRPC_PRE = `
48
+ declare const request: {
49
+ readonly target: string;
50
+ readonly method: string;
51
+ readonly metadata: WbWritablePairs;
52
+ message: WbRequestMessage;
53
+ };
54
+ `;
55
+ const GRPC_POST = `
56
+ declare const request: {
57
+ readonly target: string;
58
+ readonly method: string;
59
+ readonly metadata: WbPairs;
60
+ readonly message: WbRequestMessage;
61
+ };
62
+ declare const response: {
63
+ readonly status: { readonly code: number; readonly name: string; readonly message: string };
64
+ readonly metadata: WbPairs;
65
+ readonly trailers: WbPairs;
66
+ readonly message: WbResponseMessage | undefined;
67
+ readonly durationMs: number;
68
+ };
69
+ `;
70
+ const GRPC = String.raw `
71
+ const grpcRequest = (snapshot, writable) => {
72
+ const data = {
73
+ target: snapshot.target,
74
+ method: snapshot.method,
75
+ metadata: snapshot.metadata.map(([n, v]) => [n, v]),
76
+ message: JSON.parse(JSON.stringify(snapshot.message === undefined ? null : snapshot.message)),
77
+ };
78
+ const refuse = (what) => () => { throw new TypeError('The ' + what + ' of a sent request cannot be changed'); };
79
+ const request = Object.freeze({
80
+ get target() { return data.target; },
81
+ get method() { return data.method; },
82
+ metadata: pairsApi(data.metadata, writable, 'metadata'),
83
+ get message() { return writable ? data.message : deepFreeze(data.message); },
84
+ set message(value) {
85
+ if (!writable) refuse('message')();
86
+ const text = JSON.stringify(value);
87
+ if (text === undefined) throw new TypeError('request.message must be a JSON value');
88
+ data.message = JSON.parse(text);
89
+ },
90
+ });
91
+ const snapshotOf = () => ({ protocol: 'grpc', target: data.target, method: data.method, metadata: data.metadata, message: data.message });
92
+ return { request, snapshotOf };
93
+ };
94
+
95
+ const grpcResponse = (snapshot) => deepFreeze({
96
+ status: snapshot.status,
97
+ metadata: pairsApi(snapshot.metadata.map(([n, v]) => [n, v]), false, 'metadata'),
98
+ trailers: pairsApi(snapshot.trailers.map(([n, v]) => [n, v]), false, 'metadata'),
99
+ message: snapshot.message,
100
+ durationMs: snapshot.durationMs,
101
+ });
102
+
103
+ if (input.phase === 'pre') {
104
+ const built = grpcRequest(input.request, true);
105
+ define('request', built.request);
106
+ state.request = built.snapshotOf;
107
+ } else {
108
+ define('request', grpcRequest(input.request, false).request);
109
+ define('response', grpcResponse(input.response));
110
+ }
111
+ `;
112
+ const requestSchema = z.object({
113
+ protocol: z.literal('grpc'),
114
+ target: z.string(),
115
+ method: z.string(),
116
+ metadata: z.array(headerPairSchema),
117
+ message: z.unknown(),
118
+ });
119
+ /** gRPC's scripting facet. */
120
+ export const grpcScripting = {
121
+ declarations: (phase) => (phase === 'pre' ? GRPC_PRE : GRPC_POST),
122
+ reference: () => [
123
+ { title: 'gRPC: pre-request', declarations: GRPC_PRE },
124
+ { title: 'gRPC: post-response', declarations: GRPC_POST },
125
+ ],
126
+ prelude: () => GRPC,
127
+ requestSchema,
128
+ inspect(snapshot) {
129
+ return {
130
+ destination: snapshot.target,
131
+ fixed: snapshot.method,
132
+ pairs: snapshot.metadata,
133
+ lines: [],
134
+ texts: [snapshot.target, ...snapshot.metadata.flat(), JSON.stringify(snapshot.message) ?? ''],
135
+ };
136
+ },
137
+ /**
138
+ * A target never changes at all. Core's destination rule already holds a `host:port` target to
139
+ * that; one written as a URL (`grpcs://host:443`) would be allowed another path, so it is held
140
+ * here.
141
+ */
142
+ validate(before, after) {
143
+ return after.target === before.target
144
+ ? undefined
145
+ : { code: 'script-origin-change', message: 'A script cannot change the target of a gRPC call' };
146
+ },
147
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Turns a saved gRPC request plus the settings around it into the transport input of one call,
3
+ * everything but the encoded messages. The precedence between the layers of configuration is fixed
4
+ * here rather than in the host: request, then API, then project, then the user's preference.
5
+ */
6
+ import type { SendAuth } from '../http/auth/send-auth.js';
7
+ import type { KeyValueEntry } from '../http/entries.js';
8
+ import type { TlsOptions } from '../http/types.js';
9
+ import type { ProjectSettings } from '../project/model.js';
10
+ import type { Preferences } from '../project/preferences.js';
11
+ import type { GrpcMethodKind, GrpcRequestSettings } from './model.js';
12
+ import type { GrpcSendInput } from './send.js';
13
+ /** The parts of a gRPC request {@link toGrpcSendInput} reads. */
14
+ export interface GrpcSendRequestInput {
15
+ readonly service: string;
16
+ readonly method: string;
17
+ readonly methodKind: GrpcMethodKind;
18
+ readonly metadata: readonly KeyValueEntry[];
19
+ readonly settings: GrpcRequestSettings;
20
+ }
21
+ /** Everything {@link toGrpcSendInput} needs beyond the request itself. */
22
+ export interface ToGrpcSendInputArgs {
23
+ readonly request: GrpcSendRequestInput;
24
+ /** The API's effective target, environment override applied and properties expanded. */
25
+ readonly target: string;
26
+ readonly tls: boolean;
27
+ /** The API's own metadata rows, which a request row of the same key overrides. */
28
+ readonly apiMetadata?: readonly KeyValueEntry[];
29
+ /** The API's own settings, which a request inherits where it sets nothing. */
30
+ readonly apiSettings?: GrpcRequestSettings;
31
+ readonly preferences?: Preferences;
32
+ readonly projectSettings?: Pick<ProjectSettings, 'defaultTimeoutMs'>;
33
+ /** Resolved credentials; the host turns `secretRef`s into values and tokens into `oauth2`. */
34
+ readonly auth?: SendAuth;
35
+ readonly tlsOptions?: TlsOptions;
36
+ readonly signal?: AbortSignal;
37
+ }
38
+ /**
39
+ * Builds the transport input for one gRPC call, everything but the encoded messages.
40
+ *
41
+ * The same request → API → project → preference ladder as a REST request, and the same TLS rule:
42
+ * the floor comes from preferences, and the host merges trust anchors, the client identity and the
43
+ * per-request trust decision on top. Metadata rows are the API's first and then the request's, so
44
+ * a repeated key resolves to the request's value on the wire.
45
+ */
46
+ export declare function toGrpcSendInput(args: ToGrpcSendInputArgs): Omit<GrpcSendInput, 'messages'>;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Turns a saved gRPC request plus the settings around it into the transport input of one call,
3
+ * everything but the encoded messages. The precedence between the layers of configuration is fixed
4
+ * here rather than in the host: request, then API, then project, then the user's preference.
5
+ */
6
+ import { inherited } from '../project/inherit.js';
7
+ import { DEFAULT_PREFERENCES } from '../project/preferences.js';
8
+ /**
9
+ * Builds the transport input for one gRPC call, everything but the encoded messages.
10
+ *
11
+ * The same request → API → project → preference ladder as a REST request, and the same TLS rule:
12
+ * the floor comes from preferences, and the host merges trust anchors, the client identity and the
13
+ * per-request trust decision on top. Metadata rows are the API's first and then the request's, so
14
+ * a repeated key resolves to the request's value on the wire.
15
+ */
16
+ export function toGrpcSendInput(args) {
17
+ const preferences = args.preferences ?? DEFAULT_PREFERENCES;
18
+ const request = args.request;
19
+ const api = args.apiSettings ?? {};
20
+ const defaultMetadata = {};
21
+ if (preferences.http.userAgent.length > 0) {
22
+ defaultMetadata['user-agent'] = preferences.http.userAgent;
23
+ }
24
+ const timeoutMs = inherited(request.settings.timeoutMs, api.timeoutMs, args.projectSettings?.defaultTimeoutMs) ??
25
+ preferences.http.socketTimeoutMs;
26
+ const maxSizeBytes = inherited(request.settings.maxSizeBytes, api.maxSizeBytes);
27
+ const bindAddress = inherited(request.settings.bindAddress, api.bindAddress);
28
+ return {
29
+ target: args.target,
30
+ tls: args.tls,
31
+ service: request.service,
32
+ method: request.method,
33
+ metadata: [...(args.apiMetadata ?? []), ...request.metadata],
34
+ defaultMetadata,
35
+ timeoutMs,
36
+ ...(maxSizeBytes !== undefined ? { maxSizeBytes } : {}),
37
+ ...(bindAddress !== undefined && bindAddress.length > 0 ? { localAddress: bindAddress } : {}),
38
+ ...(args.auth !== undefined ? { auth: args.auth } : {}),
39
+ tlsOptions: { minVersion: preferences.ssl.minVersion, ...args.tlsOptions },
40
+ ...(args.signal !== undefined ? { signal: args.signal } : {}),
41
+ };
42
+ }
@@ -14,8 +14,8 @@
14
14
  */
15
15
  import type { SslInfo } from '../http/tls.js';
16
16
  import type { Timings, TlsOptions } from '../http/types.js';
17
- import type { KeyValueEntry } from '../rest/model.js';
18
- import type { SendAuth } from '../types.js';
17
+ import type { KeyValueEntry } from '../http/entries.js';
18
+ import type { SendAuth } from '../http/auth/send-auth.js';
19
19
  import type { GrpcTarget } from './target.js';
20
20
  export { parseGrpcTarget } from './target.js';
21
21
  export type { GrpcTarget } from './target.js';
@@ -2,10 +2,17 @@
2
2
  * gRPC status codes, as the protocol's status specification numbers and names them, and the
3
3
  * `grpc-message` percent-encoding that carries a status message in an HTTP/2 trailer.
4
4
  */
5
- /** The seventeen status codes. `0` is the only success. */
6
- export declare const GRPC_STATUS_NAMES: Readonly<Record<number, string>>;
5
+ import type { StatusNames } from '../assert/model.js';
6
+ import { GRPC_STATUS_NAMES } from '../assert/status-names.js';
7
+ export { GRPC_STATUS_NAMES };
7
8
  /** The name of a status code, or `UNKNOWN (n)` for a number the specification does not define. */
8
9
  export declare function grpcStatusName(code: number): string;
10
+ /**
11
+ * The status codes by name and back, as a gRPC answer's assertion subject carries them (spec §3.5).
12
+ *
13
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
14
+ */
15
+ export declare const grpcStatusNames: StatusNames;
9
16
  /**
10
17
  * Decodes a `grpc-message` trailer value. The specification percent-encodes anything outside
11
18
  * printable ASCII; a malformed sequence is kept as-is rather than failing the whole response, since
@@ -1,31 +1,18 @@
1
- /**
2
- * gRPC status codes, as the protocol's status specification numbers and names them, and the
3
- * `grpc-message` percent-encoding that carries a status message in an HTTP/2 trailer.
4
- */
5
- /** The seventeen status codes. `0` is the only success. */
6
- export const GRPC_STATUS_NAMES = Object.freeze({
7
- 0: 'OK',
8
- 1: 'CANCELLED',
9
- 2: 'UNKNOWN',
10
- 3: 'INVALID_ARGUMENT',
11
- 4: 'DEADLINE_EXCEEDED',
12
- 5: 'NOT_FOUND',
13
- 6: 'ALREADY_EXISTS',
14
- 7: 'PERMISSION_DENIED',
15
- 8: 'RESOURCE_EXHAUSTED',
16
- 9: 'FAILED_PRECONDITION',
17
- 10: 'ABORTED',
18
- 11: 'OUT_OF_RANGE',
19
- 12: 'UNIMPLEMENTED',
20
- 13: 'INTERNAL',
21
- 14: 'UNAVAILABLE',
22
- 15: 'DATA_LOSS',
23
- 16: 'UNAUTHENTICATED',
24
- });
1
+ import { GRPC_STATUS_NAMES } from '../assert/status-names.js';
2
+ export { GRPC_STATUS_NAMES };
25
3
  /** The name of a status code, or `UNKNOWN (n)` for a number the specification does not define. */
26
4
  export function grpcStatusName(code) {
27
5
  return GRPC_STATUS_NAMES[code] ?? `UNKNOWN (${String(code)})`;
28
6
  }
7
+ /**
8
+ * The status codes by name and back, as a gRPC answer's assertion subject carries them (spec §3.5).
9
+ *
10
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
11
+ */
12
+ export const grpcStatusNames = Object.freeze({
13
+ byName: new Map(Object.entries(GRPC_STATUS_NAMES).map(([code, name]) => [name, Number(code)])),
14
+ nameOf: grpcStatusName,
15
+ });
29
16
  /**
30
17
  * Decodes a `grpc-message` trailer value. The specification percent-encodes anything outside
31
18
  * printable ASCII; a malformed sequence is kept as-is rather than failing the whole response, since
@@ -0,0 +1,9 @@
1
+ /**
2
+ * How gRPC APIs are stored in a project folder (spec §3.2): `apis/<slug>/api.yaml` with
3
+ * `kind: grpc`, and a tree of folders and `*.request.yaml` files under `requests/`, each request's
4
+ * message in the sibling `<slug>.body.json`.
5
+ */
6
+ import type { ProtocolStorage } from '../protocol/module.js';
7
+ import type { GrpcApi } from './model.js';
8
+ /** gRPC's storage facet. */
9
+ export declare const grpcStorage: ProtocolStorage<GrpcApi>;
@@ -0,0 +1,167 @@
1
+ /**
2
+ * How gRPC APIs are stored in a project folder (spec §3.2): `apis/<slug>/api.yaml` with
3
+ * `kind: grpc`, and a tree of folders and `*.request.yaml` files under `requests/`, each request's
4
+ * message in the sibling `<slug>.body.json`.
5
+ */
6
+ import { toCallbackAssertion } from '../assert/schema.js';
7
+ import { readFileIfExists } from '../project/fs.js';
8
+ import { abs, authConfig, exact, keyValueEntries, loadFolderContents, loadScripts, optional, readYaml, } from '../project/load-helpers.js';
9
+ import { apiManagedFiles } from '../project/managed-files.js';
10
+ import { API_FILE, APIS_DIR, assertPathSegment, REQUEST_SUFFIX, REQUESTS_DIR, restBodyFileName, } from '../project/paths.js';
11
+ import { assertSupportedKind, parseFile } from '../project/schema-parts.js';
12
+ import { addFolderFiles, authDocument, keyValueDocuments, scriptsDocument, writeScriptFiles, } from '../project/serialize-helpers.js';
13
+ import { compact, stringifyYaml } from '../project/yaml.js';
14
+ import { grpcApiFileSchema, grpcRequestFileSchema } from './files.js';
15
+ /**
16
+ * Reads a gRPC request and its message file. A request whose message file is gone loads with an
17
+ * empty message and a `missing-body` problem, exactly as a REST raw body does.
18
+ */
19
+ function grpcRequestReader(fs, root, problems) {
20
+ return async (dir, fileName, unclaimed) => {
21
+ const relative = `${dir}/${fileName}`;
22
+ const document = await readYaml(fs, root, relative);
23
+ assertSupportedKind(document, relative);
24
+ const parsed = parseFile(grpcRequestFileSchema, document, relative);
25
+ unclaimed.delete(fileName);
26
+ let message = '';
27
+ if (parsed.message !== undefined) {
28
+ // As a REST body file: a name beside the request, never a path out of it.
29
+ assertPathSegment(parsed.message);
30
+ unclaimed.delete(parsed.message);
31
+ const messageRelative = `${dir}/${parsed.message}`;
32
+ const text = await readFileIfExists(fs, abs(root, messageRelative));
33
+ if (text === undefined) {
34
+ problems.push({
35
+ code: 'missing-body',
36
+ message: `Request "${parsed.name}" has no message file; loaded with an empty message`,
37
+ file: messageRelative,
38
+ });
39
+ }
40
+ else {
41
+ message = text.toString('utf8');
42
+ }
43
+ }
44
+ const scripts = await loadScripts(fs, root, dir, fileName.slice(0, -REQUEST_SUFFIX.length), parsed.scripts, parsed.name, problems, (name) => unclaimed.delete(name));
45
+ return {
46
+ kind: 'grpc',
47
+ id: parsed.id,
48
+ name: parsed.name,
49
+ slug: fileName.slice(0, -REQUEST_SUFFIX.length),
50
+ order: parsed.order,
51
+ ...optional('description', parsed.description),
52
+ service: parsed.service,
53
+ method: parsed.method,
54
+ methodKind: parsed.methodKind,
55
+ metadata: keyValueEntries(parsed.metadata),
56
+ message,
57
+ auth: authConfig(parsed.auth),
58
+ settings: exact(parsed.settings),
59
+ ...(parsed.orphaned === true ? { orphaned: true } : {}),
60
+ ...(parsed.assertions.length > 0
61
+ ? {
62
+ assertions: parsed.assertions.map((a) => a.type === 'callback' ? toCallbackAssertion(a) : exact(a)),
63
+ }
64
+ : {}),
65
+ ...(scripts !== undefined ? { scripts } : {}),
66
+ };
67
+ };
68
+ }
69
+ /**
70
+ * A gRPC request as written: the message text goes to `<slug>.body.json` beside the document, the
71
+ * same convention as a REST raw body, so a message is a JSON file in git.
72
+ */
73
+ const writeGrpcRequest = (files, dir, request) => {
74
+ const messageFile = restBodyFileName(request.slug, 'json');
75
+ assertPathSegment(messageFile);
76
+ files.set(`${dir}/${request.slug}${REQUEST_SUFFIX}`, stringifyYaml(compact({
77
+ kind: request.kind,
78
+ id: request.id,
79
+ name: request.name,
80
+ order: request.order,
81
+ description: request.description,
82
+ service: request.service,
83
+ method: request.method,
84
+ methodKind: request.methodKind,
85
+ metadata: request.metadata.length > 0 ? keyValueDocuments(request.metadata) : undefined,
86
+ message: messageFile,
87
+ auth: authDocument(request.auth),
88
+ settings: Object.keys(request.settings).length > 0 ? compact({ ...request.settings }) : undefined,
89
+ orphaned: request.orphaned === true ? true : undefined,
90
+ assertions: request.assertions !== undefined && request.assertions.length > 0
91
+ ? request.assertions.map((a) => compact({ ...a }))
92
+ : undefined,
93
+ scripts: scriptsDocument(request.scripts, request.slug).document,
94
+ })));
95
+ files.set(`${dir}/${messageFile}`, request.message);
96
+ writeScriptFiles(files, dir, request.scripts, request.slug);
97
+ };
98
+ /** Every file one gRPC API occupies. It shares `apis/` with the REST ones; its `kind` says which it is. */
99
+ function addGrpcApiFiles(files, api) {
100
+ assertPathSegment(api.slug);
101
+ const base = `${APIS_DIR}/${api.slug}`;
102
+ files.set(`${base}/${API_FILE}`, stringifyYaml(compact({
103
+ kind: api.kind,
104
+ id: api.id,
105
+ name: api.name,
106
+ order: api.order,
107
+ description: api.description,
108
+ target: api.target,
109
+ tls: api.tls,
110
+ metadata: api.metadata.length > 0 ? keyValueDocuments(api.metadata) : undefined,
111
+ auth: api.auth === undefined ? undefined : authDocument(api.auth),
112
+ definition: api.definition === undefined
113
+ ? undefined
114
+ : compact({
115
+ kind: api.definition.kind,
116
+ source: api.definition.source,
117
+ cache: api.definition.cache,
118
+ roots: [...api.definition.roots],
119
+ reflectionVersion: api.definition.reflectionVersion,
120
+ trustInvalid: api.definition.trustInvalid,
121
+ }),
122
+ })));
123
+ addFolderFiles(files, `${base}/${REQUESTS_DIR}`, api, 0, writeGrpcRequest);
124
+ }
125
+ /** gRPC's storage facet. */
126
+ export const grpcStorage = {
127
+ dir: APIS_DIR,
128
+ async load(ctx, slug, document) {
129
+ const { fs, root, problems } = ctx;
130
+ const parsed = parseFile(grpcApiFileSchema, document, `${APIS_DIR}/${slug}/${API_FILE}`);
131
+ const contents = await loadFolderContents(fs, root, `${APIS_DIR}/${slug}/${REQUESTS_DIR}`, 0, problems, grpcRequestReader(fs, root, problems));
132
+ return {
133
+ kind: 'grpc',
134
+ id: parsed.id,
135
+ name: parsed.name,
136
+ slug,
137
+ order: parsed.order,
138
+ ...optional('description', parsed.description),
139
+ target: parsed.target,
140
+ tls: parsed.tls,
141
+ metadata: keyValueEntries(parsed.metadata),
142
+ ...(parsed.auth !== undefined ? { auth: authConfig(parsed.auth) } : {}),
143
+ ...(parsed.definition !== undefined
144
+ ? {
145
+ definition: {
146
+ kind: parsed.definition.kind,
147
+ source: parsed.definition.source,
148
+ cache: parsed.definition.cache,
149
+ roots: parsed.definition.roots,
150
+ ...optional('reflectionVersion', parsed.definition.reflectionVersion),
151
+ ...optional('trustInvalid', parsed.definition.trustInvalid),
152
+ },
153
+ }
154
+ : {}),
155
+ folders: contents.folders,
156
+ requests: contents.requests,
157
+ };
158
+ },
159
+ files(api) {
160
+ const files = new Map();
161
+ addGrpcApiFiles(files, api);
162
+ return files;
163
+ },
164
+ managed: (fs, root, slug) => apiManagedFiles(fs, root, slug),
165
+ containers: (project) => project.grpcApis,
166
+ withContainers: (project, grpcApis) => ({ ...project, grpcApis }),
167
+ };