@toa.io/extensions.exposition 1.0.0-alpha.285 → 1.0.0-alpha.287

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 (611) hide show
  1. package/CHANGELOG.md +1 -545
  2. package/components/exposition.octets/operations/delete.js +1 -1
  3. package/components/exposition.octets/operations/get.js +5 -2
  4. package/components/exposition.octets/operations/head.js +1 -1
  5. package/components/exposition.octets/operations/put.js +29 -37
  6. package/components/exposition.octets/types/toa.d.ts +1 -1
  7. package/components/identity.bans/manifest.toa.yaml +12 -13
  8. package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
  9. package/components/identity.bans/operations/transit.js +1 -1
  10. package/components/identity.bans/source/transit.ts +1 -1
  11. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  12. package/components/identity.bans/types/toa.d.ts +5 -5
  13. package/components/identity.basic/events/principal.js +3 -1
  14. package/components/identity.basic/manifest.toa.yaml +17 -23
  15. package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
  16. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  17. package/components/identity.basic/operations/add.js +1 -1
  18. package/components/identity.basic/operations/authenticate.js +2 -2
  19. package/components/identity.basic/operations/check.js +4 -2
  20. package/components/identity.basic/operations/delete.js +1 -1
  21. package/components/identity.basic/operations/incept.js +1 -1
  22. package/components/identity.basic/operations/info.js +1 -1
  23. package/components/identity.basic/operations/lib/credentials.js +1 -1
  24. package/components/identity.basic/operations/transit.js +7 -8
  25. package/components/identity.basic/source/add.ts +5 -2
  26. package/components/identity.basic/source/authenticate.ts +11 -13
  27. package/components/identity.basic/source/check.ts +9 -6
  28. package/components/identity.basic/source/delete.ts +4 -1
  29. package/components/identity.basic/source/incept.ts +13 -10
  30. package/components/identity.basic/source/info.ts +4 -1
  31. package/components/identity.basic/source/lib/credentials.ts +2 -3
  32. package/components/identity.basic/source/transit.ts +27 -21
  33. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  34. package/components/identity.basic/types/index.d.ts +7 -3
  35. package/components/identity.basic/types/toa.d.ts +5 -5
  36. package/components/identity.clients/manifest.toa.yaml +36 -40
  37. package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
  38. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  39. package/components/identity.clients/operations/describe.js +1 -1
  40. package/components/identity.clients/operations/lib/canonical.js +1 -1
  41. package/components/identity.clients/operations/lib/cimd.js +3 -2
  42. package/components/identity.clients/operations/lib/redirect.js +7 -4
  43. package/components/identity.clients/operations/register.js +2 -2
  44. package/components/identity.clients/source/describe.ts +6 -8
  45. package/components/identity.clients/source/lib/Context.ts +6 -3
  46. package/components/identity.clients/source/lib/Entity.ts +1 -1
  47. package/components/identity.clients/source/lib/canonical.ts +1 -1
  48. package/components/identity.clients/source/lib/cimd.test.ts +8 -6
  49. package/components/identity.clients/source/lib/cimd.ts +24 -19
  50. package/components/identity.clients/source/lib/redirect.test.ts +8 -2
  51. package/components/identity.clients/source/lib/redirect.ts +12 -8
  52. package/components/identity.clients/source/register.ts +18 -18
  53. package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
  54. package/components/identity.clients/types/toa.d.ts +5 -5
  55. package/components/identity.credentials/manifest.toa.yaml +4 -4
  56. package/components/identity.credentials/operations/list.js +8 -4
  57. package/components/identity.credentials/source/list.test.ts +39 -20
  58. package/components/identity.credentials/source/list.ts +12 -8
  59. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  60. package/components/identity.credentials/types/toa.d.ts +2 -2
  61. package/components/identity.federation/manifest.toa.yaml +23 -32
  62. package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
  63. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  64. package/components/identity.federation/operations/authenticate.js +4 -2
  65. package/components/identity.federation/operations/create.js +2 -2
  66. package/components/identity.federation/operations/decode.js +1 -1
  67. package/components/identity.federation/operations/delete.js +1 -1
  68. package/components/identity.federation/operations/incept.js +1 -1
  69. package/components/identity.federation/operations/lib/decode.js +1 -1
  70. package/components/identity.federation/operations/lib/discovery.js +2 -2
  71. package/components/identity.federation/operations/lib/exchange.js +8 -4
  72. package/components/identity.federation/operations/lib/principal.js +1 -1
  73. package/components/identity.federation/operations/lib/resolve.js +1 -1
  74. package/components/identity.federation/operations/list.js +2 -2
  75. package/components/identity.federation/source/authenticate.ts +19 -17
  76. package/components/identity.federation/source/create.ts +6 -7
  77. package/components/identity.federation/source/decode.ts +4 -1
  78. package/components/identity.federation/source/delete.ts +4 -1
  79. package/components/identity.federation/source/incept.ts +2 -3
  80. package/components/identity.federation/source/lib/decode.ts +4 -7
  81. package/components/identity.federation/source/lib/discovery.test.ts +15 -5
  82. package/components/identity.federation/source/lib/discovery.ts +10 -9
  83. package/components/identity.federation/source/lib/exchange.ts +18 -15
  84. package/components/identity.federation/source/lib/jose.d.ts +1 -1
  85. package/components/identity.federation/source/lib/principal.ts +5 -3
  86. package/components/identity.federation/source/lib/resolve.ts +5 -1
  87. package/components/identity.federation/source/list.test.ts +26 -10
  88. package/components/identity.federation/source/list.ts +5 -2
  89. package/components/identity.federation/source/types/context.ts +5 -2
  90. package/components/identity.federation/source/types/entity.ts +2 -2
  91. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  92. package/components/identity.federation/types/toa.d.ts +5 -5
  93. package/components/identity.grants/manifest.toa.yaml +27 -31
  94. package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
  95. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  96. package/components/identity.grants/operations/authorize.js +1 -1
  97. package/components/identity.grants/operations/exchange.js +5 -2
  98. package/components/identity.grants/operations/lib/code.js +1 -1
  99. package/components/identity.grants/operations/lib/identify.js +1 -1
  100. package/components/identity.grants/operations/list.js +1 -1
  101. package/components/identity.grants/operations/revoke.js +3 -2
  102. package/components/identity.grants/source/authorize.ts +27 -19
  103. package/components/identity.grants/source/exchange.ts +15 -11
  104. package/components/identity.grants/source/lib/code.ts +20 -8
  105. package/components/identity.grants/source/lib/identify.ts +1 -1
  106. package/components/identity.grants/source/list.ts +2 -2
  107. package/components/identity.grants/source/revoke.ts +9 -7
  108. package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
  109. package/components/identity.grants/types/index.d.ts +3 -3
  110. package/components/identity.grants/types/toa.d.ts +5 -5
  111. package/components/identity.keys/manifest.toa.yaml +18 -23
  112. package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
  113. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  114. package/components/identity.keys/operations/create.js +1 -1
  115. package/components/identity.keys/operations/disable.js +1 -1
  116. package/components/identity.keys/operations/revoke.js +1 -1
  117. package/components/identity.keys/source/create.ts +2 -3
  118. package/components/identity.keys/source/disable.ts +1 -1
  119. package/components/identity.keys/source/revoke.ts +2 -2
  120. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  121. package/components/identity.keys/types/toa.d.ts +5 -5
  122. package/components/identity.otp/manifest.toa.yaml +16 -24
  123. package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
  124. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  125. package/components/identity.otp/operations/authenticate.js +1 -1
  126. package/components/identity.otp/operations/issue.js +1 -1
  127. package/components/identity.otp/source/authenticate.ts +4 -7
  128. package/components/identity.otp/source/issue.ts +1 -1
  129. package/components/identity.otp/source/lib/Context.ts +1 -1
  130. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  131. package/components/identity.otp/types/toa.d.ts +5 -5
  132. package/components/identity.passkeys/manifest.toa.yaml +45 -53
  133. package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
  134. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  135. package/components/identity.passkeys/operations/authenticate.js +1 -1
  136. package/components/identity.passkeys/operations/challenge.js +6 -3
  137. package/components/identity.passkeys/operations/create.js +1 -1
  138. package/components/identity.passkeys/operations/delete.js +1 -1
  139. package/components/identity.passkeys/operations/list.js +1 -1
  140. package/components/identity.passkeys/operations/use.js +1 -1
  141. package/components/identity.passkeys/source/authenticate.ts +3 -4
  142. package/components/identity.passkeys/source/challenge.ts +29 -25
  143. package/components/identity.passkeys/source/create.ts +8 -6
  144. package/components/identity.passkeys/source/delete.ts +4 -1
  145. package/components/identity.passkeys/source/list.ts +4 -1
  146. package/components/identity.passkeys/source/types/Context.ts +1 -1
  147. package/components/identity.passkeys/source/use.ts +12 -10
  148. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  149. package/components/identity.passkeys/types/toa.d.ts +5 -5
  150. package/components/identity.roles/manifest.toa.yaml +12 -16
  151. package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
  152. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  153. package/components/identity.roles/operations/grant.js +1 -1
  154. package/components/identity.roles/operations/list.js +1 -1
  155. package/components/identity.roles/operations/principal.js +2 -2
  156. package/components/identity.roles/source/grant.ts +7 -6
  157. package/components/identity.roles/source/list.ts +1 -1
  158. package/components/identity.roles/source/principal.ts +5 -7
  159. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  160. package/components/identity.roles/types/toa.d.ts +5 -5
  161. package/components/identity.tokens/manifest.toa.yaml +17 -15
  162. package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
  163. package/components/identity.tokens/operations/authenticate.js +2 -2
  164. package/components/identity.tokens/operations/decrypt.js +11 -5
  165. package/components/identity.tokens/operations/encrypt.js +2 -2
  166. package/components/identity.tokens/operations/issue.js +2 -4
  167. package/components/identity.tokens/operations/lib/form.js +1 -1
  168. package/components/identity.tokens/operations/lib/key.js +1 -1
  169. package/components/identity.tokens/operations/revoke.js +1 -1
  170. package/components/identity.tokens/source/authenticate.test.ts +22 -16
  171. package/components/identity.tokens/source/authenticate.ts +7 -10
  172. package/components/identity.tokens/source/decrypt.test.ts +62 -29
  173. package/components/identity.tokens/source/decrypt.ts +30 -27
  174. package/components/identity.tokens/source/encrypt.test.ts +21 -16
  175. package/components/identity.tokens/source/encrypt.ts +8 -11
  176. package/components/identity.tokens/source/issue.test.ts +4 -2
  177. package/components/identity.tokens/source/issue.ts +6 -8
  178. package/components/identity.tokens/source/lib/form.ts +5 -9
  179. package/components/identity.tokens/source/lib/jose.d.ts +1 -1
  180. package/components/identity.tokens/source/lib/key.ts +1 -1
  181. package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
  182. package/components/identity.tokens/source/revoke.ts +1 -1
  183. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  184. package/components/identity.tokens/types/index.d.ts +13 -4
  185. package/components/identity.tokens/types/toa.d.ts +5 -5
  186. package/context.toa.yaml +2 -2
  187. package/cucumber.mjs +3 -0
  188. package/documentation/access.md +4 -3
  189. package/documentation/cache.md +17 -3
  190. package/documentation/components.md +2 -2
  191. package/documentation/credentials.md +2 -2
  192. package/documentation/identity.md +7 -9
  193. package/documentation/map.md +2 -2
  194. package/documentation/mcp.md +16 -16
  195. package/documentation/notes/peers.md +1 -1
  196. package/documentation/notes/throttling.md +1 -1
  197. package/documentation/octets.md +4 -4
  198. package/documentation/protocol.md +3 -3
  199. package/documentation/query.md +14 -8
  200. package/documentation/rpc.md +31 -21
  201. package/documentation/tracing.md +3 -3
  202. package/documentation/tree.md +1 -1
  203. package/features/auth.assert.feature +2 -2
  204. package/features/auth.bearer.feature +1 -1
  205. package/features/auth.claims.feature +5 -5
  206. package/features/auth.incept.feature +2 -2
  207. package/features/authorities.federation.feature +1 -1
  208. package/features/configuration.feature +3 -4
  209. package/features/credentials.feature +9 -9
  210. package/features/dev.feature +1 -0
  211. package/features/dynamic.feature +1 -0
  212. package/features/errors.feature +21 -0
  213. package/features/etag.feature +0 -86
  214. package/features/identity.bans.feature +3 -3
  215. package/features/identity.basic.feature +9 -9
  216. package/features/identity.federation.feature +11 -11
  217. package/features/identity.tokens.custom.feature +5 -5
  218. package/features/identity.tokens.feature +2 -2
  219. package/features/interruptions.feature +1 -0
  220. package/features/introspection.map.feature +4 -4
  221. package/features/io.throttle.feature +1 -0
  222. package/features/map.feature +2 -2
  223. package/features/octets.cloudinary.feature +1 -1
  224. package/features/octets.download.feature +1 -0
  225. package/features/require.feature +1 -2
  226. package/features/steps/Captures.ts +1 -1
  227. package/features/steps/Cloudinary.ts +1 -2
  228. package/features/steps/Common.ts +4 -5
  229. package/features/steps/Components.ts +17 -12
  230. package/features/steps/Database.ts +42 -23
  231. package/features/steps/Gateway.ts +55 -72
  232. package/features/steps/HTTP.ts +12 -15
  233. package/features/steps/IDP.ts +118 -94
  234. package/features/steps/Identity.ts +3 -3
  235. package/features/steps/OTP.ts +3 -3
  236. package/features/steps/Parameters.ts +20 -10
  237. package/features/steps/Probe.ts +9 -7
  238. package/features/steps/Realtime.ts +40 -22
  239. package/features/steps/Workspace.ts +10 -7
  240. package/features/steps/components/audit/operations/record.js +1 -1
  241. package/features/steps/components/echo/operations/affect.js +1 -1
  242. package/features/steps/components/echo/operations/compute.js +1 -1
  243. package/features/steps/components/echo/operations/echo.js +1 -1
  244. package/features/steps/components/echo/operations/error.js +1 -1
  245. package/features/steps/components/echo/operations/identity.js +1 -1
  246. package/features/steps/components/echo/operations/parameters.js +1 -1
  247. package/features/steps/components/echo/operations/ping.js +1 -1
  248. package/features/steps/components/echo/operations/unwrap.js +1 -1
  249. package/features/steps/components/greeter/operations/greet.js +1 -1
  250. package/features/steps/components/notify/operations/send.js +1 -1
  251. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  252. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  253. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  254. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  255. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  256. package/features/steps/components/octets.tester/operations/err.js +1 -1
  257. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  258. package/features/steps/components/octets.tester/operations/id.js +1 -1
  259. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  260. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  261. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  262. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  263. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  264. package/features/steps/components/orders/operations/create.js +4 -2
  265. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  266. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  267. package/features/steps/components/pricing/operations/quote.js +1 -1
  268. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  269. package/features/steps/components/sequences/operations/numbers.js +1 -1
  270. package/features/steps/components/sequences/operations/tokens.js +3 -3
  271. package/features/steps/components/users/manifest.toa.yaml +3 -5
  272. package/features/steps/components/users/operations/create.js +1 -1
  273. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  274. package/features/steps/map.ts +2 -2
  275. package/features/timestamps.feature +1 -1
  276. package/package.json +7 -7
  277. package/readme.md +11 -11
  278. package/schemas/annotation.cos.yaml +1 -3
  279. package/schemas/method.cos.yaml +2 -0
  280. package/source/Branch.test.ts +2 -2
  281. package/source/Branch.ts +3 -5
  282. package/source/Composition.ts +5 -5
  283. package/source/Directive.test.ts +38 -20
  284. package/source/Directive.ts +61 -47
  285. package/source/Endpoint.test.ts +1 -1
  286. package/source/Endpoint.ts +27 -92
  287. package/source/Factory.ts +26 -12
  288. package/source/Gateway.ts +87 -76
  289. package/source/HTTP/Context.ts +23 -30
  290. package/source/HTTP/Probe.ts +7 -9
  291. package/source/HTTP/Server.ts +88 -69
  292. package/source/HTTP/Timing.ts +6 -21
  293. package/source/HTTP/address.test.ts +8 -2
  294. package/source/HTTP/address.ts +2 -3
  295. package/source/HTTP/exceptions.ts +20 -18
  296. package/source/HTTP/formats/form.ts +1 -1
  297. package/source/HTTP/formats/json.ts +2 -2
  298. package/source/HTTP/formats/msgpack.ts +3 -4
  299. package/source/HTTP/formats/text.ts +2 -2
  300. package/source/HTTP/formats/yaml.test.ts +4 -1
  301. package/source/HTTP/formats/yaml.ts +14 -11
  302. package/source/HTTP/messages.test.ts +38 -28
  303. package/source/HTTP/messages.ts +44 -98
  304. package/source/Interception.ts +3 -4
  305. package/source/Introspection.ts +26 -14
  306. package/source/MCP/Server.ts +114 -54
  307. package/source/MCP/discover.ts +6 -7
  308. package/source/MCP/errors.ts +7 -8
  309. package/source/MCP/schema.test.ts +9 -3
  310. package/source/MCP/schema.ts +12 -16
  311. package/source/MCP/tools.ts +33 -28
  312. package/source/Mapping.ts +25 -27
  313. package/source/Query.ts +58 -44
  314. package/source/RPC/Context.ts +8 -11
  315. package/source/RPC/Dispatcher.ts +46 -26
  316. package/source/RPC/errors.test.ts +41 -16
  317. package/source/RPC/errors.ts +9 -10
  318. package/source/RPC/names.test.ts +35 -16
  319. package/source/RPC/names.ts +22 -29
  320. package/source/RTD/Directives.ts +21 -10
  321. package/source/RTD/Endpoint.ts +4 -1
  322. package/source/RTD/Method.ts +8 -6
  323. package/source/RTD/Node.ts +32 -34
  324. package/source/RTD/Route.ts +18 -21
  325. package/source/RTD/Tree.ts +18 -18
  326. package/source/RTD/factory.ts +13 -16
  327. package/source/RTD/segment.ts +12 -10
  328. package/source/RTD/syntax/parse.test.ts +12 -6
  329. package/source/RTD/syntax/parse.ts +30 -26
  330. package/source/RTD/syntax/types.ts +17 -1
  331. package/source/RTD/walk.test.ts +59 -22
  332. package/source/Remotes.test.ts +25 -4
  333. package/source/Remotes.ts +9 -4
  334. package/source/Tenant.ts +12 -12
  335. package/source/deployment.ts +20 -20
  336. package/source/directives/auth/Anonymous.test.ts +8 -2
  337. package/source/directives/auth/Anonymous.ts +5 -8
  338. package/source/directives/auth/Anyone.ts +3 -3
  339. package/source/directives/auth/Assert.ts +10 -10
  340. package/source/directives/auth/Authorization.ts +83 -69
  341. package/source/directives/auth/Delegate.test.ts +2 -2
  342. package/source/directives/auth/Delegate.ts +8 -10
  343. package/source/directives/auth/Echo.ts +5 -8
  344. package/source/directives/auth/Federation.ts +30 -21
  345. package/source/directives/auth/Id.ts +7 -4
  346. package/source/directives/auth/Incept.ts +32 -26
  347. package/source/directives/auth/Input.ts +36 -20
  348. package/source/directives/auth/Role.test.ts +49 -23
  349. package/source/directives/auth/Role.ts +29 -22
  350. package/source/directives/auth/Rule.ts +13 -8
  351. package/source/directives/auth/Scheme.ts +7 -7
  352. package/source/directives/auth/create.ts +1 -1
  353. package/source/directives/auth/schemes.ts +1 -1
  354. package/source/directives/auth/split.ts +2 -3
  355. package/source/directives/auth/types.ts +5 -2
  356. package/source/directives/cache/Cache.ts +44 -9
  357. package/source/directives/cache/Control.ts +25 -26
  358. package/source/directives/cache/Exact.ts +1 -1
  359. package/source/directives/cache/etag.ts +38 -0
  360. package/source/directives/cors/CORS.ts +9 -7
  361. package/source/directives/dev/Development.ts +3 -4
  362. package/source/directives/dev/Faulty.ts +11 -6
  363. package/source/directives/dev/Sleep.ts +5 -7
  364. package/source/directives/dev/Stub.ts +2 -2
  365. package/source/directives/dev/Throw.ts +2 -2
  366. package/source/directives/flow/Compose.ts +26 -20
  367. package/source/directives/flow/Fetch.ts +15 -15
  368. package/source/directives/flow/Flow.ts +9 -8
  369. package/source/directives/index.ts +11 -2
  370. package/source/directives/io/IO.ts +29 -20
  371. package/source/directives/io/Input.ts +9 -12
  372. package/source/directives/io/Output.ts +20 -23
  373. package/source/directives/io/Status.test.ts +12 -8
  374. package/source/directives/io/Status.ts +9 -8
  375. package/source/directives/io/Throttle.ts +6 -7
  376. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  377. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  378. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  379. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  380. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  381. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  382. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  383. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  384. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  385. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  386. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  387. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  388. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  389. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  390. package/source/directives/io/schemas.test.ts +12 -6
  391. package/source/directives/map/Authority.ts +2 -2
  392. package/source/directives/map/Buffer.ts +2 -2
  393. package/source/directives/map/Claims.ts +25 -20
  394. package/source/directives/map/Headers.ts +17 -13
  395. package/source/directives/map/Language.ts +8 -5
  396. package/source/directives/map/Languages.ts +9 -3
  397. package/source/directives/map/Map.ts +25 -12
  398. package/source/directives/map/Mapping.ts +9 -6
  399. package/source/directives/map/Properties.ts +1 -1
  400. package/source/directives/map/Segments.ts +22 -15
  401. package/source/directives/mcp/MCP.ts +9 -7
  402. package/source/directives/mcp/Tool.test.ts +21 -9
  403. package/source/directives/mcp/Tool.ts +23 -11
  404. package/source/directives/oauth/Discovery.ts +7 -11
  405. package/source/directives/oauth/documents.ts +11 -14
  406. package/source/directives/octets/Context.ts +6 -3
  407. package/source/directives/octets/Delete.ts +33 -25
  408. package/source/directives/octets/Directive.ts +5 -1
  409. package/source/directives/octets/Get.ts +13 -21
  410. package/source/directives/octets/Octets.ts +20 -15
  411. package/source/directives/octets/Put.ts +62 -27
  412. package/source/directives/octets/Workflow.ts +18 -12
  413. package/source/directives/octets/bytes.ts +1 -1
  414. package/source/directives/octets/schemas.test.ts +8 -14
  415. package/source/directives/octets/workflows/Execution.ts +19 -21
  416. package/source/directives/octets/workflows/Workflow.ts +10 -7
  417. package/source/directives/require/Headers.ts +3 -4
  418. package/source/directives/require/Require.ts +3 -4
  419. package/source/exceptions.ts +19 -12
  420. package/source/index.ts +1 -1
  421. package/source/manifest.test.ts +4 -1
  422. package/source/manifest.ts +19 -13
  423. package/source/octets.d.ts +1 -1
  424. package/source/root.ts +3 -2
  425. package/source/schemas.test.ts +17 -3
  426. package/transpiled/Branch.js.map +1 -1
  427. package/transpiled/Composition.js.map +1 -1
  428. package/transpiled/Directive.js +6 -2
  429. package/transpiled/Directive.js.map +1 -1
  430. package/transpiled/Endpoint.d.ts +0 -2
  431. package/transpiled/Endpoint.js +11 -52
  432. package/transpiled/Endpoint.js.map +1 -1
  433. package/transpiled/Factory.d.ts +2 -1
  434. package/transpiled/Factory.js +1 -0
  435. package/transpiled/Factory.js.map +1 -1
  436. package/transpiled/Gateway.d.ts +2 -1
  437. package/transpiled/Gateway.js +24 -15
  438. package/transpiled/Gateway.js.map +1 -1
  439. package/transpiled/HTTP/Context.d.ts +0 -3
  440. package/transpiled/HTTP/Context.js +7 -9
  441. package/transpiled/HTTP/Context.js.map +1 -1
  442. package/transpiled/HTTP/Probe.js.map +1 -1
  443. package/transpiled/HTTP/Server.js +19 -4
  444. package/transpiled/HTTP/Server.js.map +1 -1
  445. package/transpiled/HTTP/Timing.d.ts +1 -2
  446. package/transpiled/HTTP/Timing.js +2 -10
  447. package/transpiled/HTTP/Timing.js.map +1 -1
  448. package/transpiled/HTTP/address.js.map +1 -1
  449. package/transpiled/HTTP/exceptions.js.map +1 -1
  450. package/transpiled/HTTP/formats/form.js.map +1 -1
  451. package/transpiled/HTTP/formats/json.js.map +1 -1
  452. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  453. package/transpiled/HTTP/formats/text.js.map +1 -1
  454. package/transpiled/HTTP/formats/yaml.js +4 -1
  455. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  456. package/transpiled/HTTP/messages.d.ts +3 -2
  457. package/transpiled/HTTP/messages.js +1 -43
  458. package/transpiled/HTTP/messages.js.map +1 -1
  459. package/transpiled/Interception.js.map +1 -1
  460. package/transpiled/Introspection.js +13 -2
  461. package/transpiled/Introspection.js.map +1 -1
  462. package/transpiled/MCP/Server.js +15 -4
  463. package/transpiled/MCP/Server.js.map +1 -1
  464. package/transpiled/MCP/discover.js.map +1 -1
  465. package/transpiled/MCP/errors.js.map +1 -1
  466. package/transpiled/MCP/schema.js +1 -1
  467. package/transpiled/MCP/schema.js.map +1 -1
  468. package/transpiled/MCP/tools.js +10 -7
  469. package/transpiled/MCP/tools.js.map +1 -1
  470. package/transpiled/Mapping.d.ts +2 -2
  471. package/transpiled/Mapping.js +3 -5
  472. package/transpiled/Mapping.js.map +1 -1
  473. package/transpiled/Query.d.ts +6 -2
  474. package/transpiled/Query.js +23 -8
  475. package/transpiled/Query.js.map +1 -1
  476. package/transpiled/RPC/Context.js +0 -7
  477. package/transpiled/RPC/Context.js.map +1 -1
  478. package/transpiled/RPC/Dispatcher.js +4 -1
  479. package/transpiled/RPC/Dispatcher.js.map +1 -1
  480. package/transpiled/RPC/errors.js.map +1 -1
  481. package/transpiled/RPC/names.js.map +1 -1
  482. package/transpiled/RTD/Directives.d.ts +1 -1
  483. package/transpiled/RTD/Method.js +1 -3
  484. package/transpiled/RTD/Method.js.map +1 -1
  485. package/transpiled/RTD/Node.js +5 -4
  486. package/transpiled/RTD/Node.js.map +1 -1
  487. package/transpiled/RTD/Route.js +4 -1
  488. package/transpiled/RTD/Route.js.map +1 -1
  489. package/transpiled/RTD/Tree.js +1 -1
  490. package/transpiled/RTD/Tree.js.map +1 -1
  491. package/transpiled/RTD/factory.js.map +1 -1
  492. package/transpiled/RTD/segment.js.map +1 -1
  493. package/transpiled/RTD/syntax/parse.js.map +1 -1
  494. package/transpiled/RTD/syntax/types.d.ts +6 -0
  495. package/transpiled/RTD/syntax/types.js +10 -1
  496. package/transpiled/RTD/syntax/types.js.map +1 -1
  497. package/transpiled/Remotes.js.map +1 -1
  498. package/transpiled/Tenant.d.ts +1 -1
  499. package/transpiled/Tenant.js.map +1 -1
  500. package/transpiled/deployment.d.ts +3 -0
  501. package/transpiled/deployment.js +6 -1
  502. package/transpiled/deployment.js.map +1 -1
  503. package/transpiled/directives/auth/Anonymous.js +1 -3
  504. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  505. package/transpiled/directives/auth/Anyone.js.map +1 -1
  506. package/transpiled/directives/auth/Assert.js.map +1 -1
  507. package/transpiled/directives/auth/Authorization.js +7 -3
  508. package/transpiled/directives/auth/Authorization.js.map +1 -1
  509. package/transpiled/directives/auth/Delegate.js.map +1 -1
  510. package/transpiled/directives/auth/Echo.js +1 -3
  511. package/transpiled/directives/auth/Echo.js.map +1 -1
  512. package/transpiled/directives/auth/Federation.js +3 -7
  513. package/transpiled/directives/auth/Federation.js.map +1 -1
  514. package/transpiled/directives/auth/Id.js.map +1 -1
  515. package/transpiled/directives/auth/Incept.js +1 -1
  516. package/transpiled/directives/auth/Incept.js.map +1 -1
  517. package/transpiled/directives/auth/Input.js.map +1 -1
  518. package/transpiled/directives/auth/Role.js.map +1 -1
  519. package/transpiled/directives/auth/Rule.js.map +1 -1
  520. package/transpiled/directives/auth/Scheme.js +1 -2
  521. package/transpiled/directives/auth/Scheme.js.map +1 -1
  522. package/transpiled/directives/auth/create.js.map +1 -1
  523. package/transpiled/directives/auth/schemes.js.map +1 -1
  524. package/transpiled/directives/auth/split.js.map +1 -1
  525. package/transpiled/directives/auth/types.d.ts +3 -1
  526. package/transpiled/directives/cache/Cache.js +28 -2
  527. package/transpiled/directives/cache/Cache.js.map +1 -1
  528. package/transpiled/directives/cache/Control.js +1 -1
  529. package/transpiled/directives/cache/Control.js.map +1 -1
  530. package/transpiled/directives/cache/etag.d.ts +10 -0
  531. package/transpiled/directives/cache/etag.js +30 -0
  532. package/transpiled/directives/cache/etag.js.map +1 -0
  533. package/transpiled/directives/cors/CORS.js.map +1 -1
  534. package/transpiled/directives/dev/Development.js.map +1 -1
  535. package/transpiled/directives/dev/Faulty.js.map +1 -1
  536. package/transpiled/directives/dev/Sleep.js.map +1 -1
  537. package/transpiled/directives/dev/Stub.js.map +1 -1
  538. package/transpiled/directives/dev/Throw.js.map +1 -1
  539. package/transpiled/directives/flow/Compose.js +7 -3
  540. package/transpiled/directives/flow/Compose.js.map +1 -1
  541. package/transpiled/directives/flow/Fetch.js.map +1 -1
  542. package/transpiled/directives/flow/Flow.js.map +1 -1
  543. package/transpiled/directives/index.js +11 -1
  544. package/transpiled/directives/index.js.map +1 -1
  545. package/transpiled/directives/io/IO.d.ts +1 -1
  546. package/transpiled/directives/io/IO.js.map +1 -1
  547. package/transpiled/directives/io/Input.js +1 -1
  548. package/transpiled/directives/io/Input.js.map +1 -1
  549. package/transpiled/directives/io/Output.js +3 -3
  550. package/transpiled/directives/io/Output.js.map +1 -1
  551. package/transpiled/directives/io/Status.js.map +1 -1
  552. package/transpiled/directives/io/Throttle.js +1 -1
  553. package/transpiled/directives/io/Throttle.js.map +1 -1
  554. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  555. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  556. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  557. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  558. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  559. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  560. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  562. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  565. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  567. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  568. package/transpiled/directives/map/Authority.js.map +1 -1
  569. package/transpiled/directives/map/Buffer.js.map +1 -1
  570. package/transpiled/directives/map/Claims.js.map +1 -1
  571. package/transpiled/directives/map/Headers.js.map +1 -1
  572. package/transpiled/directives/map/Language.js.map +1 -1
  573. package/transpiled/directives/map/Languages.js.map +1 -1
  574. package/transpiled/directives/map/Map.js.map +1 -1
  575. package/transpiled/directives/map/Mapping.js.map +1 -1
  576. package/transpiled/directives/map/Properties.js.map +1 -1
  577. package/transpiled/directives/map/Segments.js.map +1 -1
  578. package/transpiled/directives/mcp/MCP.js +1 -1
  579. package/transpiled/directives/mcp/MCP.js.map +1 -1
  580. package/transpiled/directives/mcp/Tool.js +3 -1
  581. package/transpiled/directives/mcp/Tool.js.map +1 -1
  582. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  583. package/transpiled/directives/oauth/documents.js.map +1 -1
  584. package/transpiled/directives/octets/Context.js +1 -1
  585. package/transpiled/directives/octets/Context.js.map +1 -1
  586. package/transpiled/directives/octets/Delete.js.map +1 -1
  587. package/transpiled/directives/octets/Directive.js.map +1 -1
  588. package/transpiled/directives/octets/Get.js.map +1 -1
  589. package/transpiled/directives/octets/Octets.js +1 -1
  590. package/transpiled/directives/octets/Octets.js.map +1 -1
  591. package/transpiled/directives/octets/Put.js.map +1 -1
  592. package/transpiled/directives/octets/Workflow.js.map +1 -1
  593. package/transpiled/directives/octets/bytes.js.map +1 -1
  594. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  595. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  596. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  597. package/transpiled/directives/require/Headers.js.map +1 -1
  598. package/transpiled/directives/require/Require.js.map +1 -1
  599. package/transpiled/exceptions.js.map +1 -1
  600. package/transpiled/index.d.ts +1 -1
  601. package/transpiled/index.js +1 -1
  602. package/transpiled/index.js.map +1 -1
  603. package/transpiled/manifest.js +5 -1
  604. package/transpiled/manifest.js.map +1 -1
  605. package/transpiled/root.js.map +1 -1
  606. package/tsconfig.tsbuildinfo +1 -1
  607. package/source/redact.test.ts +0 -27
  608. package/source/redact.ts +0 -21
  609. package/transpiled/redact.d.ts +0 -5
  610. package/transpiled/redact.js +0 -17
  611. package/transpiled/redact.js.map +0 -1
@@ -33,28 +33,40 @@ export type Schema = Awaited<ReturnType<Remote['explain']>>['input']
33
33
  * The same, in the order the shape states — whatever order the families that filled it ran
34
34
  * in. What a resource says about itself is read, so it is written the way it is documented.
35
35
  */
36
- export function order (introspection: Introspection): Introspection {
36
+ export function order(introspection: Introspection): Introspection {
37
37
  const ordered: Introspection = {}
38
38
 
39
39
  for (const key of KEYS)
40
- if (introspection[key] !== undefined)
41
- (ordered[key] as unknown) = introspection[key]
40
+ if (introspection[key] !== undefined) (ordered[key] as unknown) = introspection[key]
42
41
 
43
42
  return ordered
44
43
  }
45
44
 
46
- const KEYS = ['title', 'description', 'route', 'query', 'headers', 'input', 'output', 'errors'] as const
45
+ const KEYS = [
46
+ 'title',
47
+ 'description',
48
+ 'route',
49
+ 'query',
50
+ 'headers',
51
+ 'input',
52
+ 'output',
53
+ 'errors'
54
+ ] as const
47
55
 
48
56
  /**
49
57
  * The schema of one input property, taken out of it: a property another family fills is
50
58
  * not the caller's to send, and what took it says where it comes from instead.
51
59
  */
52
- export function take (carrier: Carrier, property: string): Schema | undefined {
60
+ export function take(carrier: Carrier, property: string): Schema | undefined {
53
61
  const input = carrier.input as Shape | null | undefined
54
62
  const properties = input?.properties
55
63
 
56
- if (input === undefined || input === null || properties === undefined ||
57
- !(property in properties))
64
+ if (
65
+ input === undefined ||
66
+ input === null ||
67
+ properties === undefined ||
68
+ !(property in properties)
69
+ )
58
70
  return undefined
59
71
 
60
72
  const schema = properties[property]
@@ -72,23 +84,23 @@ export function take (carrier: Carrier, property: string): Schema | undefined {
72
84
  * describes an array. What is not an object of properties is left alone: a whitelist has
73
85
  * nothing to say about a string.
74
86
  */
75
- export function restrict (schema: Schema | undefined, allowed: Set<string>): Schema | undefined {
87
+ export function restrict(
88
+ schema: Schema | undefined,
89
+ allowed: Set<string>
90
+ ): Schema | undefined {
76
91
  const shape = schema as Shape | null | undefined
77
92
 
78
- if (shape === undefined || shape === null)
79
- return schema
93
+ if (shape === undefined || shape === null) return schema
80
94
 
81
95
  if (shape.items !== undefined)
82
96
  return { ...shape, items: restrict(shape.items, allowed) } as unknown as Schema
83
97
 
84
- if (shape.properties === undefined)
85
- return schema
98
+ if (shape.properties === undefined) return schema
86
99
 
87
100
  const properties: Record<string, Schema> = {}
88
101
 
89
102
  for (const [name, property] of Object.entries(shape.properties))
90
- if (allowed.has(name))
91
- properties[name] = property
103
+ if (allowed.has(name)) properties[name] = property
92
104
 
93
105
  const restricted: Shape = { ...shape, properties }
94
106
 
@@ -42,15 +42,17 @@ export class Server {
42
42
  private readonly discovery: Discovery
43
43
  private readonly origins: Set<string>
44
44
 
45
- public constructor (options: MCP, tree: Tree) {
45
+ public constructor(options: MCP, tree: Tree) {
46
46
  this.options = options
47
47
  this.tree = tree
48
48
  this.discovery = discovery(options)
49
49
  this.origins = new Set(options.origins ?? [])
50
50
  }
51
51
 
52
- public async process (context: http.Context,
53
- route: http.Processor): Promise<http.OutgoingMessage> {
52
+ public async process(
53
+ context: http.Context,
54
+ route: http.Processor
55
+ ): Promise<http.OutgoingMessage> {
54
56
  if (context.request.method !== 'POST')
55
57
  throw new http.MethodNotAllowed(new Headers({ allow: 'POST' }))
56
58
 
@@ -60,14 +62,12 @@ export class Server {
60
62
  const version = this.version(context, message)
61
63
  const modern = version === MODERN
62
64
 
63
- if (modern)
64
- this.mirrored(context, message)
65
+ if (modern) this.mirrored(context, message)
65
66
 
66
67
  const result = await this.answer({ context, route, tree: this.tree }, message, modern)
67
68
 
68
69
  // a notification is answered by not answering, and there is nothing here to remember
69
- if (message.id === undefined)
70
- return { status: ACCEPTED }
70
+ if (message.id === undefined) return { status: ACCEPTED }
71
71
 
72
72
  return {
73
73
  status: OK,
@@ -77,21 +77,24 @@ export class Server {
77
77
  }
78
78
 
79
79
  /** Who may reach the endpoint at all, before anything it carries is read. */
80
- private admit (context: http.Context): void {
80
+ private admit(context: http.Context): void {
81
81
  const origin = context.request.headers.origin
82
82
 
83
83
  // the revision requires this against DNS rebinding; a request without one is no browser's
84
84
  if (origin !== undefined && !this.origins.has(origin))
85
85
  throw new http.Forbidden('Origin is not allowed')
86
86
 
87
- if (this.options.anonymous === true)
88
- return
87
+ if (this.options.anonymous === true) return
89
88
 
90
89
  if ((context as { identity?: unknown }).identity == null)
91
90
  throw new http.Unauthorized()
92
91
  }
93
92
 
94
- private async answer (scope: Scope, message: Message, modern: boolean): Promise<unknown> {
93
+ private async answer(
94
+ scope: Scope,
95
+ message: Message,
96
+ modern: boolean
97
+ ): Promise<unknown> {
95
98
  const params = message.params ?? {}
96
99
 
97
100
  switch (message.method) {
@@ -99,7 +102,11 @@ export class Server {
99
102
  return this.complete(this.discovery.modern, modern, DISCOVERY_CACHE)
100
103
 
101
104
  case 'tools/list':
102
- return this.complete({ tools: await list(this.tree, scope.context) }, modern, TOOLS_CACHE)
105
+ return this.complete(
106
+ { tools: await list(this.tree, scope.context) },
107
+ modern,
108
+ TOOLS_CACHE
109
+ )
103
110
 
104
111
  case 'tools/call':
105
112
  return this.complete(await this.tool(scope, params), modern)
@@ -115,66 +122,98 @@ export class Server {
115
122
  return {}
116
123
 
117
124
  default:
118
- throw new http.NotFound(response(message.id ?? null,
119
- failure(METHOD_NOT_FOUND, `'${message.method}' is not a method this server answers`)))
125
+ throw new http.NotFound(
126
+ response(
127
+ message.id ?? null,
128
+ failure(
129
+ METHOD_NOT_FOUND,
130
+ `'${message.method}' is not a method this server answers`
131
+ )
132
+ )
133
+ )
120
134
  }
121
135
  }
122
136
 
123
- private async tool (scope: Scope, params: Params): Promise<object> {
137
+ private async tool(scope: Scope, params: Params): Promise<object> {
124
138
  const named = params.name
125
139
 
126
140
  if (typeof named !== 'string')
127
- throw new http.BadRequest(response(null,
128
- failure(INVALID_PARAMS, '`tools/call` states the tool it calls by name')))
141
+ throw new http.BadRequest(
142
+ response(
143
+ null,
144
+ failure(INVALID_PARAMS, '`tools/call` states the tool it calls by name')
145
+ )
146
+ )
129
147
 
130
148
  const args = params.arguments ?? {}
131
149
 
132
150
  if (typeof args !== 'object' || args === null || Array.isArray(args))
133
- throw new http.BadRequest(response(null,
134
- failure(INVALID_PARAMS, '`arguments` must be an object')))
135
-
136
- return await console.span({ name: named },
137
- async () => await call(scope, named, args as Params))
151
+ throw new http.BadRequest(
152
+ response(null, failure(INVALID_PARAMS, '`arguments` must be an object'))
153
+ )
154
+
155
+ return await console.span(
156
+ { name: named },
157
+ async () => await call(scope, named, args as Params)
158
+ )
138
159
  }
139
160
 
140
161
  /**
141
162
  * Every result of the modern revision says what kind it is, and who answered it. Where the
142
163
  * revision names the operation as one whose result may be held, it says that too, and must.
143
164
  */
144
- private complete (result: object, modern: boolean, cache?: Cache): object {
165
+ private complete(result: object, modern: boolean, cache?: Cache): object {
145
166
  return modern
146
- ? { ...result, ...cache, resultType: 'complete', _meta: { [SERVER_INFO]: this.serverInfo() } }
167
+ ? {
168
+ ...result,
169
+ ...cache,
170
+ resultType: 'complete',
171
+ _meta: { [SERVER_INFO]: this.serverInfo() }
172
+ }
147
173
  : result
148
174
  }
149
175
 
150
- private serverInfo (): unknown {
151
- return (this.discovery.modern as { _meta: Record<string, unknown> })._meta[SERVER_INFO]
176
+ private serverInfo(): unknown {
177
+ return (this.discovery.modern as { _meta: Record<string, unknown> })._meta[
178
+ SERVER_INFO
179
+ ]
152
180
  }
153
181
 
154
182
  /**
155
183
  * Which revision this request is of. `initialize` is one by itself; otherwise the header
156
184
  * says, and a request that names none is of a revision that did not send one.
157
185
  */
158
- private version (context: http.Context, message: Message): string {
159
- if (message.method === 'initialize')
160
- return LEGACY
186
+ private version(context: http.Context, message: Message): string {
187
+ if (message.method === 'initialize') return LEGACY
161
188
 
162
189
  const header = context.request.headers['mcp-protocol-version']
163
190
  const stated = declared(message.params ?? {})
164
191
 
165
192
  if (header !== undefined && stated !== undefined && header !== stated)
166
- throw new http.BadRequest(response(message.id ?? null, failure(HEADER_MISMATCH,
167
- `'MCP-Protocol-Version' says '${String(header)}' and the body says '${stated}'`)))
193
+ throw new http.BadRequest(
194
+ response(
195
+ message.id ?? null,
196
+ failure(
197
+ HEADER_MISMATCH,
198
+ `'MCP-Protocol-Version' says '${String(header)}' and the body says '${stated}'`
199
+ )
200
+ )
201
+ )
168
202
 
169
203
  const value = (header as string | undefined) ?? stated
170
204
 
171
- if (value === undefined)
172
- return LEGACY
205
+ if (value === undefined) return LEGACY
173
206
 
174
207
  if (!VERSIONS.includes(value))
175
- throw new http.BadRequest(response(message.id ?? null,
176
- failure(UNSUPPORTED_VERSION, 'Unsupported protocol version',
177
- { supported: VERSIONS, requested: value })))
208
+ throw new http.BadRequest(
209
+ response(
210
+ message.id ?? null,
211
+ failure(UNSUPPORTED_VERSION, 'Unsupported protocol version', {
212
+ supported: VERSIONS,
213
+ requested: value
214
+ })
215
+ )
216
+ )
178
217
 
179
218
  return value
180
219
  }
@@ -183,12 +222,19 @@ export class Server {
183
222
  * What the modern revision mirrors into headers, so that what routes a request and what
184
223
  * answers it cannot be told two different things.
185
224
  */
186
- private mirrored (context: http.Context, message: Message): void {
225
+ private mirrored(context: http.Context, message: Message): void {
187
226
  const meta = metadata(message.params ?? {})
188
227
 
189
228
  if (meta?.[PROTOCOL_VERSION] === undefined || meta[CLIENT_CAPABILITIES] === undefined)
190
- throw new http.BadRequest(response(message.id ?? null, failure(INVALID_PARAMS,
191
- `'_meta' states '${PROTOCOL_VERSION}' and '${CLIENT_CAPABILITIES}'`)))
229
+ throw new http.BadRequest(
230
+ response(
231
+ message.id ?? null,
232
+ failure(
233
+ INVALID_PARAMS,
234
+ `'_meta' states '${PROTOCOL_VERSION}' and '${CLIENT_CAPABILITIES}'`
235
+ )
236
+ )
237
+ )
192
238
 
193
239
  const id = message.id ?? null
194
240
 
@@ -199,7 +245,7 @@ export class Server {
199
245
  }
200
246
 
201
247
  /** A body the decoder refuses is a parse error; a media type it does not know is not. */
202
- private async read (context: http.Context): Promise<Message> {
248
+ private async read(context: http.Context): Promise<Message> {
203
249
  let body: unknown
204
250
 
205
251
  try {
@@ -211,26 +257,41 @@ export class Server {
211
257
  throw exception
212
258
  }
213
259
 
214
- if (typeof body !== 'object' || body === null || Array.isArray(body) ||
215
- (body as Message).jsonrpc !== JSONRPC || typeof (body as Message).method !== 'string')
216
- throw new http.BadRequest(response(null,
217
- failure(INVALID_REQUEST, 'A request carries one JSON-RPC message')))
260
+ if (
261
+ typeof body !== 'object' ||
262
+ body === null ||
263
+ Array.isArray(body) ||
264
+ (body as Message).jsonrpc !== JSONRPC ||
265
+ typeof (body as Message).method !== 'string'
266
+ )
267
+ throw new http.BadRequest(
268
+ response(null, failure(INVALID_REQUEST, 'A request carries one JSON-RPC message'))
269
+ )
218
270
 
219
271
  return body as Message
220
272
  }
221
273
  }
222
274
 
223
275
  /** What a header says must be what the body says, or what routes and what answers differ. */
224
- function mirrors (context: http.Context, mirror: Mirror): void {
276
+ function mirrors(context: http.Context, mirror: Mirror): void {
225
277
  const { id, header, value } = mirror
226
278
  const stated = context.request.headers[header]
227
279
 
228
280
  if (stated === undefined)
229
- throw new http.BadRequest(response(id, failure(HEADER_MISMATCH, `'${header}' is required`)))
281
+ throw new http.BadRequest(
282
+ response(id, failure(HEADER_MISMATCH, `'${header}' is required`))
283
+ )
230
284
 
231
285
  if (decode(String(stated)) !== value)
232
- throw new http.BadRequest(response(id, failure(HEADER_MISMATCH,
233
- `'${header}' says '${String(stated)}' and the body says '${String(value)}'`)))
286
+ throw new http.BadRequest(
287
+ response(
288
+ id,
289
+ failure(
290
+ HEADER_MISMATCH,
291
+ `'${header}' says '${String(stated)}' and the body says '${String(value)}'`
292
+ )
293
+ )
294
+ )
234
295
  }
235
296
 
236
297
  interface Mirror {
@@ -239,24 +300,23 @@ interface Mirror {
239
300
  value: unknown
240
301
  }
241
302
 
242
- function metadata (params: Params): Record<string, unknown> | undefined {
303
+ function metadata(params: Params): Record<string, unknown> | undefined {
243
304
  const meta = params._meta
244
305
 
245
306
  return typeof meta === 'object' && meta !== null
246
- ? meta as Record<string, unknown>
307
+ ? (meta as Record<string, unknown>)
247
308
  : undefined
248
309
  }
249
310
 
250
- function declared (params: Params): string | undefined {
311
+ function declared(params: Params): string | undefined {
251
312
  const stated = metadata(params)?.[PROTOCOL_VERSION]
252
313
 
253
314
  return typeof stated === 'string' ? stated : undefined
254
315
  }
255
316
 
256
317
  /** What a header value that could not be written as ASCII was encoded as. */
257
- function decode (value: string): string {
258
- if (!value.startsWith(SENTINEL) || !value.endsWith(TERMINATOR))
259
- return value
318
+ function decode(value: string): string {
319
+ if (!value.startsWith(SENTINEL) || !value.endsWith(TERMINATOR)) return value
260
320
 
261
321
  const encoded = value.slice(SENTINEL.length, -TERMINATOR.length)
262
322
 
@@ -15,7 +15,7 @@ export interface Discovery {
15
15
  legacy: (offered: string | undefined) => object
16
16
  }
17
17
 
18
- export function discovery (options: MCP): Discovery {
18
+ export function discovery(options: MCP): Discovery {
19
19
  const info = { name: options.name, version: VERSION }
20
20
 
21
21
  // `listChanged` is a stream a client holds open, and this endpoint holds none
@@ -27,10 +27,9 @@ export function discovery (options: MCP): Discovery {
27
27
  _meta: { [SERVER_INFO]: info }
28
28
  }
29
29
 
30
- if (options.instructions !== undefined)
31
- modern.instructions = options.instructions
30
+ if (options.instructions !== undefined) modern.instructions = options.instructions
32
31
 
33
- function legacy (offered: string | undefined): object {
32
+ function legacy(offered: string | undefined): object {
34
33
  const value: Record<string, unknown> = {
35
34
  // what the client asked for where that is served, and the newest handshake otherwise
36
35
  protocolVersion: offered !== undefined && offered !== MODERN ? offered : LEGACY,
@@ -38,8 +37,7 @@ export function discovery (options: MCP): Discovery {
38
37
  serverInfo: info
39
38
  }
40
39
 
41
- if (options.instructions !== undefined)
42
- value.instructions = options.instructions
40
+ if (options.instructions !== undefined) value.instructions = options.instructions
43
41
 
44
42
  return value
45
43
  }
@@ -49,4 +47,5 @@ export function discovery (options: MCP): Discovery {
49
47
 
50
48
  /** What this gateway is, which is what answers however an application names itself. */
51
49
  const VERSION: string = JSON.parse(
52
- readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version
50
+ readFileSync(new URL('../../package.json', import.meta.url), 'utf8')
51
+ ).version
@@ -17,16 +17,15 @@ export const HEADER_MISMATCH = -32020
17
17
  export const MISSING_CAPABILITY = -32021
18
18
  export const UNSUPPORTED_VERSION = -32022
19
19
 
20
- export function failure (code: number, message: string, data?: unknown): Failure {
20
+ export function failure(code: number, message: string, data?: unknown): Failure {
21
21
  const value: Failure = { code, message }
22
22
 
23
- if (data !== undefined)
24
- value.data = data
23
+ if (data !== undefined) value.data = data
25
24
 
26
25
  return value
27
26
  }
28
27
 
29
- export function response (id: string | number | null, error: Failure): Response {
28
+ export function response(id: string | number | null, error: Failure): Response {
30
29
  return { jsonrpc: JSONRPC, id, error }
31
30
  }
32
31
 
@@ -36,7 +35,7 @@ export function response (id: string | number | null, error: Failure): Response
36
35
  * The readable text is `body`, never `message`: `http.Exception` calls `super()` with no
37
36
  * argument, so every one of them carries an empty `message`.
38
37
  */
39
- export function of (exception: unknown): Failure {
38
+ export function of(exception: unknown): Failure {
40
39
  if (exception instanceof http.NotFound || exception instanceof http.MethodNotAllowed)
41
40
  return failure(METHOD_NOT_FOUND, text(exception, 'Method not found'))
42
41
 
@@ -50,7 +49,7 @@ export function of (exception: unknown): Failure {
50
49
  * What the call was refused with, which a model reads and may correct itself by: what the
51
50
  * operation said, where it said anything, and otherwise what the status means here.
52
51
  */
53
- export function refusal (exception: http.ClientError): string {
52
+ export function refusal(exception: http.ClientError): string {
54
53
  const body = exception.body
55
54
 
56
55
  if (typeof body !== 'object' || body === null || typeof body.code !== 'string')
@@ -58,7 +57,7 @@ export function refusal (exception: http.ClientError): string {
58
57
 
59
58
  const message = body.message as unknown
60
59
 
61
- return typeof message === 'string' && message !== '' ? message : body.code as string
60
+ return typeof message === 'string' && message !== '' ? message : (body.code as string)
62
61
  }
63
62
 
64
63
  /**
@@ -74,7 +73,7 @@ const REFUSALS: Record<number, string> = {
74
73
  429: 'Too many calls'
75
74
  }
76
75
 
77
- function text (exception: http.Exception, fallback: string): string {
76
+ function text(exception: http.Exception, fallback: string): string {
78
77
  return typeof exception.body === 'string' && exception.body !== ''
79
78
  ? exception.body
80
79
  : fallback
@@ -38,8 +38,11 @@ describe('input', () => {
38
38
  headers: { token: { header: 'x-access-token', type: 'string' } }
39
39
  }
40
40
 
41
- assert.deepEqual(input(introspection, []),
42
- { type: 'object', properties: {}, additionalProperties: false })
41
+ assert.deepEqual(input(introspection, []), {
42
+ type: 'object',
43
+ properties: {},
44
+ additionalProperties: false
45
+ })
43
46
  })
44
47
 
45
48
  it('should take the body as it is, requiring what it requires', () => {
@@ -78,7 +81,10 @@ describe('annotations', () => {
78
81
  it('should read what the verb says of the call', () => {
79
82
  assert.deepEqual(annotations('GET'), { readOnlyHint: true })
80
83
  assert.deepEqual(annotations('HEAD'), { readOnlyHint: true })
81
- assert.deepEqual(annotations('DELETE'), { destructiveHint: true, idempotentHint: true })
84
+ assert.deepEqual(annotations('DELETE'), {
85
+ destructiveHint: true,
86
+ idempotentHint: true
87
+ })
82
88
  assert.deepEqual(annotations('PUT'), { idempotentHint: true })
83
89
  assert.equal(annotations('POST'), undefined)
84
90
  })
@@ -8,7 +8,7 @@ import type { Annotations } from './types.js'
8
8
  * A `map:headers` property is not here: a call carries no headers of its own, so there is
9
9
  * nowhere for a model to put one.
10
10
  */
11
- export function input (introspection: Introspection, variables: string[]): object {
11
+ export function input(introspection: Introspection, variables: string[]): object {
12
12
  const properties: Record<string, unknown> = {}
13
13
  const required: string[] = []
14
14
 
@@ -28,7 +28,8 @@ export function input (introspection: Introspection, variables: string[]): objec
28
28
  if (introspection.query !== undefined)
29
29
  properties.query = {
30
30
  type: 'object',
31
- description: 'Which records the call works on: what to match, in what order, ' +
31
+ description:
32
+ 'Which records the call works on: what to match, in what order, ' +
32
33
  'and how many at once.',
33
34
  properties: introspection.query
34
35
  }
@@ -37,13 +38,12 @@ export function input (introspection: Introspection, variables: string[]): objec
37
38
 
38
39
  if (body?.properties !== undefined) {
39
40
  Object.assign(properties, body.properties)
40
- required.push(...body.required ?? [])
41
+ required.push(...(body.required ?? []))
41
42
  }
42
43
 
43
44
  const schema: Record<string, unknown> = { type: 'object', properties }
44
45
 
45
- if (required.length > 0)
46
- schema.required = required
46
+ if (required.length > 0) schema.required = required
47
47
 
48
48
  // what a name does not state is not a parameter, and a model should not invent one
49
49
  schema.additionalProperties = false
@@ -56,27 +56,23 @@ export function input (introspection: Introspection, variables: string[]): objec
56
56
  * and normalizes to `{}`, which describes nothing — and a schema the revision would have the
57
57
  * reply validated against is worse said emptily than left unsaid.
58
58
  */
59
- export function output (introspection: Introspection): object | undefined {
59
+ export function output(introspection: Introspection): object | undefined {
60
60
  const schema = introspection.output as Shape | null | undefined
61
61
 
62
- if (schema === undefined || schema === null)
63
- return undefined
62
+ if (schema === undefined || schema === null) return undefined
64
63
 
65
- return Object.keys(schema).length === 0 ? undefined : schema as object
64
+ return Object.keys(schema).length === 0 ? undefined : (schema as object)
66
65
  }
67
66
 
68
67
  /** What the verb says of the call, which the revision has a client treat as a hint. */
69
- export function annotations (verb: string): Annotations | undefined {
68
+ export function annotations(verb: string): Annotations | undefined {
70
69
  const value: Annotations = {}
71
70
 
72
- if (verb === 'GET' || verb === 'HEAD')
73
- value.readOnlyHint = true
71
+ if (verb === 'GET' || verb === 'HEAD') value.readOnlyHint = true
74
72
 
75
- if (verb === 'DELETE')
76
- value.destructiveHint = true
73
+ if (verb === 'DELETE') value.destructiveHint = true
77
74
 
78
- if (verb === 'PUT' || verb === 'DELETE')
79
- value.idempotentHint = true
75
+ if (verb === 'PUT' || verb === 'DELETE') value.idempotentHint = true
80
76
 
81
77
  return Object.keys(value).length === 0 ? undefined : value
82
78
  }