@toa.io/extensions.exposition 1.0.0-alpha.284 → 1.0.0-alpha.286

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 (620) hide show
  1. package/components/exposition.octets/operations/delete.js +1 -1
  2. package/components/exposition.octets/operations/get.js +5 -2
  3. package/components/exposition.octets/operations/head.js +1 -1
  4. package/components/exposition.octets/operations/put.js +29 -37
  5. package/components/exposition.octets/types/toa.d.ts +1 -1
  6. package/components/identity.bans/manifest.toa.yaml +12 -13
  7. package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
  8. package/components/identity.bans/operations/transit.js +1 -1
  9. package/components/identity.bans/source/transit.ts +1 -1
  10. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  11. package/components/identity.bans/types/toa.d.ts +5 -5
  12. package/components/identity.basic/events/principal.js +3 -1
  13. package/components/identity.basic/manifest.toa.yaml +17 -23
  14. package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
  15. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  16. package/components/identity.basic/operations/add.js +1 -1
  17. package/components/identity.basic/operations/authenticate.js +2 -2
  18. package/components/identity.basic/operations/check.js +4 -2
  19. package/components/identity.basic/operations/delete.js +1 -1
  20. package/components/identity.basic/operations/incept.js +1 -1
  21. package/components/identity.basic/operations/info.js +1 -1
  22. package/components/identity.basic/operations/lib/credentials.js +1 -1
  23. package/components/identity.basic/operations/transit.js +7 -8
  24. package/components/identity.basic/source/add.ts +5 -2
  25. package/components/identity.basic/source/authenticate.ts +11 -13
  26. package/components/identity.basic/source/check.ts +9 -6
  27. package/components/identity.basic/source/delete.ts +4 -1
  28. package/components/identity.basic/source/incept.ts +13 -10
  29. package/components/identity.basic/source/info.ts +4 -1
  30. package/components/identity.basic/source/lib/credentials.ts +2 -3
  31. package/components/identity.basic/source/transit.ts +27 -21
  32. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  33. package/components/identity.basic/types/index.d.ts +7 -3
  34. package/components/identity.basic/types/toa.d.ts +5 -5
  35. package/components/identity.clients/manifest.toa.yaml +36 -40
  36. package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
  37. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  38. package/components/identity.clients/operations/describe.js +1 -1
  39. package/components/identity.clients/operations/lib/canonical.js +1 -1
  40. package/components/identity.clients/operations/lib/cimd.js +3 -2
  41. package/components/identity.clients/operations/lib/redirect.js +7 -4
  42. package/components/identity.clients/operations/register.js +2 -2
  43. package/components/identity.clients/source/describe.ts +6 -8
  44. package/components/identity.clients/source/lib/Context.ts +6 -3
  45. package/components/identity.clients/source/lib/Entity.ts +1 -1
  46. package/components/identity.clients/source/lib/canonical.ts +1 -1
  47. package/components/identity.clients/source/lib/cimd.test.ts +8 -6
  48. package/components/identity.clients/source/lib/cimd.ts +24 -19
  49. package/components/identity.clients/source/lib/redirect.test.ts +8 -2
  50. package/components/identity.clients/source/lib/redirect.ts +12 -8
  51. package/components/identity.clients/source/register.ts +18 -18
  52. package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
  53. package/components/identity.clients/types/toa.d.ts +5 -5
  54. package/components/identity.credentials/manifest.toa.yaml +4 -4
  55. package/components/identity.credentials/operations/list.js +8 -4
  56. package/components/identity.credentials/source/list.test.ts +39 -20
  57. package/components/identity.credentials/source/list.ts +12 -8
  58. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  59. package/components/identity.credentials/types/toa.d.ts +2 -2
  60. package/components/identity.federation/manifest.toa.yaml +23 -32
  61. package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
  62. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  63. package/components/identity.federation/operations/authenticate.js +4 -2
  64. package/components/identity.federation/operations/create.js +2 -2
  65. package/components/identity.federation/operations/decode.js +1 -1
  66. package/components/identity.federation/operations/delete.js +1 -1
  67. package/components/identity.federation/operations/incept.js +1 -1
  68. package/components/identity.federation/operations/lib/decode.js +1 -1
  69. package/components/identity.federation/operations/lib/discovery.js +2 -2
  70. package/components/identity.federation/operations/lib/exchange.js +8 -4
  71. package/components/identity.federation/operations/lib/principal.js +1 -1
  72. package/components/identity.federation/operations/lib/resolve.js +1 -1
  73. package/components/identity.federation/operations/list.js +2 -2
  74. package/components/identity.federation/source/authenticate.ts +19 -17
  75. package/components/identity.federation/source/create.ts +6 -7
  76. package/components/identity.federation/source/decode.ts +4 -1
  77. package/components/identity.federation/source/delete.ts +4 -1
  78. package/components/identity.federation/source/incept.ts +2 -3
  79. package/components/identity.federation/source/lib/decode.ts +4 -7
  80. package/components/identity.federation/source/lib/discovery.test.ts +15 -5
  81. package/components/identity.federation/source/lib/discovery.ts +10 -9
  82. package/components/identity.federation/source/lib/exchange.ts +18 -15
  83. package/components/identity.federation/source/lib/jose.d.ts +1 -1
  84. package/components/identity.federation/source/lib/principal.ts +5 -3
  85. package/components/identity.federation/source/lib/resolve.ts +5 -1
  86. package/components/identity.federation/source/list.test.ts +26 -10
  87. package/components/identity.federation/source/list.ts +5 -2
  88. package/components/identity.federation/source/types/context.ts +5 -2
  89. package/components/identity.federation/source/types/entity.ts +2 -2
  90. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  91. package/components/identity.federation/types/toa.d.ts +5 -5
  92. package/components/identity.grants/manifest.toa.yaml +27 -31
  93. package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
  94. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  95. package/components/identity.grants/operations/authorize.js +1 -1
  96. package/components/identity.grants/operations/exchange.js +5 -2
  97. package/components/identity.grants/operations/lib/code.js +1 -1
  98. package/components/identity.grants/operations/lib/identify.js +1 -1
  99. package/components/identity.grants/operations/list.js +1 -1
  100. package/components/identity.grants/operations/revoke.js +3 -2
  101. package/components/identity.grants/source/authorize.ts +27 -19
  102. package/components/identity.grants/source/exchange.ts +15 -11
  103. package/components/identity.grants/source/lib/code.ts +20 -8
  104. package/components/identity.grants/source/lib/identify.ts +1 -1
  105. package/components/identity.grants/source/list.ts +2 -2
  106. package/components/identity.grants/source/revoke.ts +9 -7
  107. package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
  108. package/components/identity.grants/types/index.d.ts +3 -3
  109. package/components/identity.grants/types/toa.d.ts +5 -5
  110. package/components/identity.keys/manifest.toa.yaml +18 -23
  111. package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
  112. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  113. package/components/identity.keys/operations/create.js +1 -1
  114. package/components/identity.keys/operations/disable.js +1 -1
  115. package/components/identity.keys/operations/revoke.js +1 -1
  116. package/components/identity.keys/source/create.ts +2 -3
  117. package/components/identity.keys/source/disable.ts +1 -1
  118. package/components/identity.keys/source/revoke.ts +2 -2
  119. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  120. package/components/identity.keys/types/toa.d.ts +5 -5
  121. package/components/identity.otp/manifest.toa.yaml +16 -24
  122. package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
  123. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  124. package/components/identity.otp/operations/authenticate.js +1 -1
  125. package/components/identity.otp/operations/issue.js +1 -1
  126. package/components/identity.otp/source/authenticate.ts +4 -7
  127. package/components/identity.otp/source/issue.ts +1 -1
  128. package/components/identity.otp/source/lib/Context.ts +1 -1
  129. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  130. package/components/identity.otp/types/toa.d.ts +5 -5
  131. package/components/identity.passkeys/manifest.toa.yaml +45 -53
  132. package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
  133. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  134. package/components/identity.passkeys/operations/authenticate.js +1 -1
  135. package/components/identity.passkeys/operations/challenge.js +6 -3
  136. package/components/identity.passkeys/operations/create.js +1 -1
  137. package/components/identity.passkeys/operations/delete.js +1 -1
  138. package/components/identity.passkeys/operations/list.js +1 -1
  139. package/components/identity.passkeys/operations/use.js +1 -1
  140. package/components/identity.passkeys/source/authenticate.ts +3 -4
  141. package/components/identity.passkeys/source/challenge.ts +29 -25
  142. package/components/identity.passkeys/source/create.ts +8 -6
  143. package/components/identity.passkeys/source/delete.ts +4 -1
  144. package/components/identity.passkeys/source/list.ts +4 -1
  145. package/components/identity.passkeys/source/types/Context.ts +1 -1
  146. package/components/identity.passkeys/source/use.ts +12 -10
  147. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  148. package/components/identity.passkeys/types/toa.d.ts +5 -5
  149. package/components/identity.roles/manifest.toa.yaml +12 -16
  150. package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
  151. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  152. package/components/identity.roles/operations/grant.js +1 -1
  153. package/components/identity.roles/operations/list.js +1 -1
  154. package/components/identity.roles/operations/principal.js +2 -2
  155. package/components/identity.roles/source/grant.ts +7 -6
  156. package/components/identity.roles/source/list.ts +1 -1
  157. package/components/identity.roles/source/principal.ts +5 -7
  158. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  159. package/components/identity.roles/types/toa.d.ts +5 -5
  160. package/components/identity.tokens/manifest.toa.yaml +17 -15
  161. package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
  162. package/components/identity.tokens/operations/authenticate.js +2 -2
  163. package/components/identity.tokens/operations/decrypt.js +11 -5
  164. package/components/identity.tokens/operations/encrypt.js +2 -2
  165. package/components/identity.tokens/operations/issue.js +2 -4
  166. package/components/identity.tokens/operations/lib/form.js +1 -1
  167. package/components/identity.tokens/operations/lib/key.js +1 -1
  168. package/components/identity.tokens/operations/revoke.js +1 -1
  169. package/components/identity.tokens/source/authenticate.test.ts +22 -16
  170. package/components/identity.tokens/source/authenticate.ts +7 -10
  171. package/components/identity.tokens/source/decrypt.test.ts +62 -29
  172. package/components/identity.tokens/source/decrypt.ts +30 -27
  173. package/components/identity.tokens/source/encrypt.test.ts +21 -16
  174. package/components/identity.tokens/source/encrypt.ts +8 -11
  175. package/components/identity.tokens/source/issue.test.ts +4 -2
  176. package/components/identity.tokens/source/issue.ts +6 -8
  177. package/components/identity.tokens/source/lib/form.ts +5 -9
  178. package/components/identity.tokens/source/lib/jose.d.ts +1 -1
  179. package/components/identity.tokens/source/lib/key.ts +1 -1
  180. package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
  181. package/components/identity.tokens/source/revoke.ts +1 -1
  182. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  183. package/components/identity.tokens/types/index.d.ts +13 -4
  184. package/components/identity.tokens/types/toa.d.ts +5 -5
  185. package/context.toa.yaml +2 -2
  186. package/cucumber.mjs +3 -0
  187. package/documentation/access.md +4 -3
  188. package/documentation/cache.md +17 -3
  189. package/documentation/components.md +2 -2
  190. package/documentation/credentials.md +2 -2
  191. package/documentation/identity.md +7 -9
  192. package/documentation/map.md +2 -2
  193. package/documentation/mcp.md +23 -17
  194. package/documentation/notes/peers.md +1 -1
  195. package/documentation/notes/throttling.md +1 -1
  196. package/documentation/octets.md +4 -4
  197. package/documentation/protocol.md +3 -3
  198. package/documentation/query.md +14 -8
  199. package/documentation/rpc.md +45 -31
  200. package/documentation/tracing.md +3 -3
  201. package/documentation/tree.md +1 -1
  202. package/features/auth.assert.feature +2 -2
  203. package/features/auth.bearer.feature +1 -1
  204. package/features/auth.claims.feature +5 -5
  205. package/features/auth.incept.feature +2 -2
  206. package/features/authorities.federation.feature +1 -1
  207. package/features/configuration.feature +3 -4
  208. package/features/credentials.feature +9 -9
  209. package/features/dev.feature +1 -0
  210. package/features/dynamic.feature +1 -0
  211. package/features/errors.feature +21 -0
  212. package/features/etag.feature +0 -86
  213. package/features/identity.bans.feature +3 -3
  214. package/features/identity.basic.feature +9 -9
  215. package/features/identity.federation.feature +11 -11
  216. package/features/identity.tokens.custom.feature +5 -5
  217. package/features/identity.tokens.feature +2 -2
  218. package/features/interruptions.feature +1 -0
  219. package/features/introspection.map.feature +4 -4
  220. package/features/io.throttle.feature +1 -0
  221. package/features/map.feature +2 -2
  222. package/features/mcp.feature +32 -28
  223. package/features/oauth.grants.feature +1 -1
  224. package/features/octets.cloudinary.feature +1 -1
  225. package/features/octets.download.feature +1 -0
  226. package/features/require.feature +1 -2
  227. package/features/rpc.feature +21 -21
  228. package/features/steps/Captures.ts +1 -1
  229. package/features/steps/Cloudinary.ts +1 -2
  230. package/features/steps/Common.ts +4 -5
  231. package/features/steps/Components.ts +17 -12
  232. package/features/steps/Database.ts +42 -23
  233. package/features/steps/Gateway.ts +55 -71
  234. package/features/steps/HTTP.ts +12 -15
  235. package/features/steps/IDP.ts +118 -94
  236. package/features/steps/Identity.ts +3 -3
  237. package/features/steps/OTP.ts +3 -3
  238. package/features/steps/Parameters.ts +20 -10
  239. package/features/steps/Probe.ts +9 -7
  240. package/features/steps/Realtime.ts +40 -22
  241. package/features/steps/Workspace.ts +10 -7
  242. package/features/steps/components/audit/operations/record.js +1 -1
  243. package/features/steps/components/echo/operations/affect.js +1 -1
  244. package/features/steps/components/echo/operations/compute.js +1 -1
  245. package/features/steps/components/echo/operations/echo.js +1 -1
  246. package/features/steps/components/echo/operations/error.js +1 -1
  247. package/features/steps/components/echo/operations/identity.js +1 -1
  248. package/features/steps/components/echo/operations/parameters.js +1 -1
  249. package/features/steps/components/echo/operations/ping.js +1 -1
  250. package/features/steps/components/echo/operations/unwrap.js +1 -1
  251. package/features/steps/components/greeter/operations/greet.js +1 -1
  252. package/features/steps/components/notify/operations/send.js +1 -1
  253. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  254. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  255. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  256. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  257. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  258. package/features/steps/components/octets.tester/operations/err.js +1 -1
  259. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  260. package/features/steps/components/octets.tester/operations/id.js +1 -1
  261. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  262. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  263. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  264. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  265. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  266. package/features/steps/components/orders/operations/create.js +4 -2
  267. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  268. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  269. package/features/steps/components/pricing/operations/quote.js +1 -1
  270. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  271. package/features/steps/components/sequences/operations/numbers.js +1 -1
  272. package/features/steps/components/sequences/operations/tokens.js +3 -3
  273. package/features/steps/components/users/manifest.toa.yaml +3 -5
  274. package/features/steps/components/users/operations/create.js +1 -1
  275. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  276. package/features/steps/map.ts +2 -2
  277. package/features/timestamps.feature +1 -1
  278. package/package.json +7 -7
  279. package/readme.md +11 -11
  280. package/schemas/annotation.cos.yaml +1 -3
  281. package/schemas/method.cos.yaml +2 -0
  282. package/source/Branch.test.ts +2 -2
  283. package/source/Branch.ts +3 -5
  284. package/source/Composition.ts +5 -5
  285. package/source/Directive.test.ts +38 -20
  286. package/source/Directive.ts +61 -47
  287. package/source/Endpoint.test.ts +1 -1
  288. package/source/Endpoint.ts +27 -92
  289. package/source/Factory.ts +26 -12
  290. package/source/Gateway.ts +87 -76
  291. package/source/HTTP/Context.ts +23 -30
  292. package/source/HTTP/Probe.ts +7 -9
  293. package/source/HTTP/Server.ts +88 -69
  294. package/source/HTTP/Timing.ts +6 -21
  295. package/source/HTTP/address.test.ts +8 -2
  296. package/source/HTTP/address.ts +2 -3
  297. package/source/HTTP/exceptions.ts +20 -18
  298. package/source/HTTP/formats/form.ts +1 -1
  299. package/source/HTTP/formats/json.ts +2 -2
  300. package/source/HTTP/formats/msgpack.ts +3 -4
  301. package/source/HTTP/formats/text.ts +2 -2
  302. package/source/HTTP/formats/yaml.test.ts +4 -1
  303. package/source/HTTP/formats/yaml.ts +14 -11
  304. package/source/HTTP/messages.test.ts +38 -28
  305. package/source/HTTP/messages.ts +44 -98
  306. package/source/Interception.ts +3 -4
  307. package/source/Introspection.ts +29 -14
  308. package/source/MCP/Server.ts +114 -54
  309. package/source/MCP/discover.ts +6 -7
  310. package/source/MCP/errors.ts +7 -8
  311. package/source/MCP/schema.test.ts +9 -3
  312. package/source/MCP/schema.ts +12 -16
  313. package/source/MCP/tools.ts +33 -27
  314. package/source/MCP/types.ts +4 -1
  315. package/source/Mapping.ts +25 -27
  316. package/source/Query.ts +58 -44
  317. package/source/RPC/Context.ts +8 -11
  318. package/source/RPC/Dispatcher.ts +46 -26
  319. package/source/RPC/errors.test.ts +41 -16
  320. package/source/RPC/errors.ts +9 -10
  321. package/source/RPC/names.test.ts +51 -32
  322. package/source/RPC/names.ts +26 -32
  323. package/source/RTD/Directives.ts +21 -10
  324. package/source/RTD/Endpoint.ts +4 -1
  325. package/source/RTD/Method.ts +8 -6
  326. package/source/RTD/Node.ts +32 -34
  327. package/source/RTD/Route.ts +18 -21
  328. package/source/RTD/Tree.ts +18 -18
  329. package/source/RTD/factory.ts +13 -16
  330. package/source/RTD/segment.ts +12 -10
  331. package/source/RTD/syntax/parse.test.ts +12 -6
  332. package/source/RTD/syntax/parse.ts +30 -26
  333. package/source/RTD/syntax/types.ts +17 -1
  334. package/source/RTD/walk.test.ts +64 -27
  335. package/source/Remotes.test.ts +25 -4
  336. package/source/Remotes.ts +9 -4
  337. package/source/Tenant.ts +12 -12
  338. package/source/deployment.ts +20 -20
  339. package/source/directives/auth/Anonymous.test.ts +8 -2
  340. package/source/directives/auth/Anonymous.ts +5 -8
  341. package/source/directives/auth/Anyone.ts +3 -3
  342. package/source/directives/auth/Assert.ts +10 -10
  343. package/source/directives/auth/Authorization.ts +83 -69
  344. package/source/directives/auth/Delegate.test.ts +2 -2
  345. package/source/directives/auth/Delegate.ts +8 -10
  346. package/source/directives/auth/Echo.ts +5 -8
  347. package/source/directives/auth/Federation.ts +30 -21
  348. package/source/directives/auth/Id.ts +7 -4
  349. package/source/directives/auth/Incept.ts +32 -26
  350. package/source/directives/auth/Input.ts +36 -20
  351. package/source/directives/auth/Role.test.ts +49 -23
  352. package/source/directives/auth/Role.ts +29 -22
  353. package/source/directives/auth/Rule.ts +13 -8
  354. package/source/directives/auth/Scheme.ts +7 -7
  355. package/source/directives/auth/create.ts +1 -1
  356. package/source/directives/auth/schemes.ts +1 -1
  357. package/source/directives/auth/split.ts +2 -3
  358. package/source/directives/auth/types.ts +5 -2
  359. package/source/directives/cache/Cache.ts +44 -9
  360. package/source/directives/cache/Control.ts +25 -26
  361. package/source/directives/cache/Exact.ts +1 -1
  362. package/source/directives/cache/etag.ts +38 -0
  363. package/source/directives/cors/CORS.ts +9 -7
  364. package/source/directives/dev/Development.ts +3 -4
  365. package/source/directives/dev/Faulty.ts +11 -6
  366. package/source/directives/dev/Sleep.ts +5 -7
  367. package/source/directives/dev/Stub.ts +2 -2
  368. package/source/directives/dev/Throw.ts +2 -2
  369. package/source/directives/flow/Compose.ts +26 -20
  370. package/source/directives/flow/Fetch.ts +15 -15
  371. package/source/directives/flow/Flow.ts +9 -8
  372. package/source/directives/index.ts +11 -2
  373. package/source/directives/io/IO.ts +29 -20
  374. package/source/directives/io/Input.ts +9 -12
  375. package/source/directives/io/Output.ts +20 -23
  376. package/source/directives/io/Status.test.ts +12 -8
  377. package/source/directives/io/Status.ts +9 -8
  378. package/source/directives/io/Throttle.ts +6 -7
  379. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  380. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  381. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  382. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  383. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  384. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  385. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  386. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  387. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  388. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  389. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  390. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  391. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  392. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  393. package/source/directives/io/schemas.test.ts +12 -6
  394. package/source/directives/map/Authority.ts +2 -2
  395. package/source/directives/map/Buffer.ts +2 -2
  396. package/source/directives/map/Claims.ts +25 -20
  397. package/source/directives/map/Headers.ts +17 -13
  398. package/source/directives/map/Language.ts +8 -5
  399. package/source/directives/map/Languages.ts +9 -3
  400. package/source/directives/map/Map.ts +25 -12
  401. package/source/directives/map/Mapping.ts +9 -6
  402. package/source/directives/map/Properties.ts +1 -1
  403. package/source/directives/map/Segments.ts +22 -15
  404. package/source/directives/mcp/MCP.ts +14 -5
  405. package/source/directives/mcp/Tool.test.ts +42 -6
  406. package/source/directives/mcp/Tool.ts +38 -7
  407. package/source/directives/oauth/Discovery.ts +7 -11
  408. package/source/directives/oauth/documents.ts +11 -14
  409. package/source/directives/octets/Context.ts +6 -3
  410. package/source/directives/octets/Delete.ts +33 -25
  411. package/source/directives/octets/Directive.ts +5 -1
  412. package/source/directives/octets/Get.ts +13 -21
  413. package/source/directives/octets/Octets.ts +20 -15
  414. package/source/directives/octets/Put.ts +62 -27
  415. package/source/directives/octets/Workflow.ts +18 -12
  416. package/source/directives/octets/bytes.ts +1 -1
  417. package/source/directives/octets/schemas.test.ts +8 -14
  418. package/source/directives/octets/workflows/Execution.ts +19 -21
  419. package/source/directives/octets/workflows/Workflow.ts +10 -7
  420. package/source/directives/require/Headers.ts +3 -4
  421. package/source/directives/require/Require.ts +3 -4
  422. package/source/exceptions.ts +19 -12
  423. package/source/index.ts +1 -1
  424. package/source/manifest.test.ts +4 -1
  425. package/source/manifest.ts +19 -13
  426. package/source/octets.d.ts +1 -1
  427. package/source/root.ts +3 -2
  428. package/source/schemas.test.ts +17 -3
  429. package/transpiled/Branch.js.map +1 -1
  430. package/transpiled/Composition.js.map +1 -1
  431. package/transpiled/Directive.js +6 -2
  432. package/transpiled/Directive.js.map +1 -1
  433. package/transpiled/Endpoint.d.ts +0 -2
  434. package/transpiled/Endpoint.js +11 -52
  435. package/transpiled/Endpoint.js.map +1 -1
  436. package/transpiled/Factory.d.ts +2 -1
  437. package/transpiled/Factory.js +1 -0
  438. package/transpiled/Factory.js.map +1 -1
  439. package/transpiled/Gateway.d.ts +2 -1
  440. package/transpiled/Gateway.js +24 -15
  441. package/transpiled/Gateway.js.map +1 -1
  442. package/transpiled/HTTP/Context.d.ts +0 -3
  443. package/transpiled/HTTP/Context.js +7 -9
  444. package/transpiled/HTTP/Context.js.map +1 -1
  445. package/transpiled/HTTP/Probe.js.map +1 -1
  446. package/transpiled/HTTP/Server.js +19 -4
  447. package/transpiled/HTTP/Server.js.map +1 -1
  448. package/transpiled/HTTP/Timing.d.ts +1 -2
  449. package/transpiled/HTTP/Timing.js +2 -10
  450. package/transpiled/HTTP/Timing.js.map +1 -1
  451. package/transpiled/HTTP/address.js.map +1 -1
  452. package/transpiled/HTTP/exceptions.js.map +1 -1
  453. package/transpiled/HTTP/formats/form.js.map +1 -1
  454. package/transpiled/HTTP/formats/json.js.map +1 -1
  455. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  456. package/transpiled/HTTP/formats/text.js.map +1 -1
  457. package/transpiled/HTTP/formats/yaml.js +4 -1
  458. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  459. package/transpiled/HTTP/messages.d.ts +3 -2
  460. package/transpiled/HTTP/messages.js +1 -43
  461. package/transpiled/HTTP/messages.js.map +1 -1
  462. package/transpiled/Interception.js.map +1 -1
  463. package/transpiled/Introspection.d.ts +2 -0
  464. package/transpiled/Introspection.js +13 -2
  465. package/transpiled/Introspection.js.map +1 -1
  466. package/transpiled/MCP/Server.js +15 -4
  467. package/transpiled/MCP/Server.js.map +1 -1
  468. package/transpiled/MCP/discover.js.map +1 -1
  469. package/transpiled/MCP/errors.js.map +1 -1
  470. package/transpiled/MCP/schema.js +1 -1
  471. package/transpiled/MCP/schema.js.map +1 -1
  472. package/transpiled/MCP/tools.js +10 -6
  473. package/transpiled/MCP/tools.js.map +1 -1
  474. package/transpiled/MCP/types.d.ts +3 -1
  475. package/transpiled/Mapping.d.ts +2 -2
  476. package/transpiled/Mapping.js +3 -5
  477. package/transpiled/Mapping.js.map +1 -1
  478. package/transpiled/Query.d.ts +6 -2
  479. package/transpiled/Query.js +23 -8
  480. package/transpiled/Query.js.map +1 -1
  481. package/transpiled/RPC/Context.js +0 -7
  482. package/transpiled/RPC/Context.js.map +1 -1
  483. package/transpiled/RPC/Dispatcher.js +4 -1
  484. package/transpiled/RPC/Dispatcher.js.map +1 -1
  485. package/transpiled/RPC/errors.js.map +1 -1
  486. package/transpiled/RPC/names.d.ts +3 -2
  487. package/transpiled/RPC/names.js +1 -1
  488. package/transpiled/RPC/names.js.map +1 -1
  489. package/transpiled/RTD/Directives.d.ts +1 -1
  490. package/transpiled/RTD/Method.js +1 -3
  491. package/transpiled/RTD/Method.js.map +1 -1
  492. package/transpiled/RTD/Node.js +5 -4
  493. package/transpiled/RTD/Node.js.map +1 -1
  494. package/transpiled/RTD/Route.js +4 -1
  495. package/transpiled/RTD/Route.js.map +1 -1
  496. package/transpiled/RTD/Tree.js +1 -1
  497. package/transpiled/RTD/Tree.js.map +1 -1
  498. package/transpiled/RTD/factory.js.map +1 -1
  499. package/transpiled/RTD/segment.js.map +1 -1
  500. package/transpiled/RTD/syntax/parse.js.map +1 -1
  501. package/transpiled/RTD/syntax/types.d.ts +6 -0
  502. package/transpiled/RTD/syntax/types.js +10 -1
  503. package/transpiled/RTD/syntax/types.js.map +1 -1
  504. package/transpiled/Remotes.js.map +1 -1
  505. package/transpiled/Tenant.d.ts +1 -1
  506. package/transpiled/Tenant.js.map +1 -1
  507. package/transpiled/deployment.d.ts +3 -0
  508. package/transpiled/deployment.js +6 -1
  509. package/transpiled/deployment.js.map +1 -1
  510. package/transpiled/directives/auth/Anonymous.js +1 -3
  511. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  512. package/transpiled/directives/auth/Anyone.js.map +1 -1
  513. package/transpiled/directives/auth/Assert.js.map +1 -1
  514. package/transpiled/directives/auth/Authorization.js +7 -3
  515. package/transpiled/directives/auth/Authorization.js.map +1 -1
  516. package/transpiled/directives/auth/Delegate.js.map +1 -1
  517. package/transpiled/directives/auth/Echo.js +1 -3
  518. package/transpiled/directives/auth/Echo.js.map +1 -1
  519. package/transpiled/directives/auth/Federation.js +3 -7
  520. package/transpiled/directives/auth/Federation.js.map +1 -1
  521. package/transpiled/directives/auth/Id.js.map +1 -1
  522. package/transpiled/directives/auth/Incept.js +1 -1
  523. package/transpiled/directives/auth/Incept.js.map +1 -1
  524. package/transpiled/directives/auth/Input.js.map +1 -1
  525. package/transpiled/directives/auth/Role.js.map +1 -1
  526. package/transpiled/directives/auth/Rule.js.map +1 -1
  527. package/transpiled/directives/auth/Scheme.js +1 -2
  528. package/transpiled/directives/auth/Scheme.js.map +1 -1
  529. package/transpiled/directives/auth/create.js.map +1 -1
  530. package/transpiled/directives/auth/schemes.js.map +1 -1
  531. package/transpiled/directives/auth/split.js.map +1 -1
  532. package/transpiled/directives/auth/types.d.ts +3 -1
  533. package/transpiled/directives/cache/Cache.js +28 -2
  534. package/transpiled/directives/cache/Cache.js.map +1 -1
  535. package/transpiled/directives/cache/Control.js +1 -1
  536. package/transpiled/directives/cache/Control.js.map +1 -1
  537. package/transpiled/directives/cache/etag.d.ts +10 -0
  538. package/transpiled/directives/cache/etag.js +30 -0
  539. package/transpiled/directives/cache/etag.js.map +1 -0
  540. package/transpiled/directives/cors/CORS.js.map +1 -1
  541. package/transpiled/directives/dev/Development.js.map +1 -1
  542. package/transpiled/directives/dev/Faulty.js.map +1 -1
  543. package/transpiled/directives/dev/Sleep.js.map +1 -1
  544. package/transpiled/directives/dev/Stub.js.map +1 -1
  545. package/transpiled/directives/dev/Throw.js.map +1 -1
  546. package/transpiled/directives/flow/Compose.js +7 -3
  547. package/transpiled/directives/flow/Compose.js.map +1 -1
  548. package/transpiled/directives/flow/Fetch.js.map +1 -1
  549. package/transpiled/directives/flow/Flow.js.map +1 -1
  550. package/transpiled/directives/index.js +11 -1
  551. package/transpiled/directives/index.js.map +1 -1
  552. package/transpiled/directives/io/IO.d.ts +1 -1
  553. package/transpiled/directives/io/IO.js.map +1 -1
  554. package/transpiled/directives/io/Input.js +1 -1
  555. package/transpiled/directives/io/Input.js.map +1 -1
  556. package/transpiled/directives/io/Output.js +3 -3
  557. package/transpiled/directives/io/Output.js.map +1 -1
  558. package/transpiled/directives/io/Status.js.map +1 -1
  559. package/transpiled/directives/io/Throttle.js +1 -1
  560. package/transpiled/directives/io/Throttle.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  562. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  565. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  567. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  568. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  569. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  570. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  571. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  572. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  573. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  574. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  575. package/transpiled/directives/map/Authority.js.map +1 -1
  576. package/transpiled/directives/map/Buffer.js.map +1 -1
  577. package/transpiled/directives/map/Claims.js.map +1 -1
  578. package/transpiled/directives/map/Headers.js.map +1 -1
  579. package/transpiled/directives/map/Language.js.map +1 -1
  580. package/transpiled/directives/map/Languages.js.map +1 -1
  581. package/transpiled/directives/map/Map.js.map +1 -1
  582. package/transpiled/directives/map/Mapping.js.map +1 -1
  583. package/transpiled/directives/map/Properties.js.map +1 -1
  584. package/transpiled/directives/map/Segments.js.map +1 -1
  585. package/transpiled/directives/mcp/MCP.js +7 -1
  586. package/transpiled/directives/mcp/MCP.js.map +1 -1
  587. package/transpiled/directives/mcp/Tool.d.ts +6 -1
  588. package/transpiled/directives/mcp/Tool.js +16 -3
  589. package/transpiled/directives/mcp/Tool.js.map +1 -1
  590. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  591. package/transpiled/directives/oauth/documents.js.map +1 -1
  592. package/transpiled/directives/octets/Context.js +1 -1
  593. package/transpiled/directives/octets/Context.js.map +1 -1
  594. package/transpiled/directives/octets/Delete.js.map +1 -1
  595. package/transpiled/directives/octets/Directive.js.map +1 -1
  596. package/transpiled/directives/octets/Get.js.map +1 -1
  597. package/transpiled/directives/octets/Octets.js +1 -1
  598. package/transpiled/directives/octets/Octets.js.map +1 -1
  599. package/transpiled/directives/octets/Put.js.map +1 -1
  600. package/transpiled/directives/octets/Workflow.js.map +1 -1
  601. package/transpiled/directives/octets/bytes.js.map +1 -1
  602. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  603. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  604. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  605. package/transpiled/directives/require/Headers.js.map +1 -1
  606. package/transpiled/directives/require/Require.js.map +1 -1
  607. package/transpiled/exceptions.js.map +1 -1
  608. package/transpiled/index.d.ts +1 -1
  609. package/transpiled/index.js +1 -1
  610. package/transpiled/index.js.map +1 -1
  611. package/transpiled/manifest.js +5 -1
  612. package/transpiled/manifest.js.map +1 -1
  613. package/transpiled/root.js.map +1 -1
  614. package/tsconfig.tsbuildinfo +1 -1
  615. package/CHANGELOG.md +0 -541
  616. package/source/redact.test.ts +0 -27
  617. package/source/redact.ts +0 -21
  618. package/transpiled/redact.d.ts +0 -5
  619. package/transpiled/redact.js +0 -17
  620. package/transpiled/redact.js.map +0 -1
@@ -23,13 +23,13 @@ basic:
23
23
  federation:
24
24
  - id: 09200d0bcc2448c5863e3f50ae18af84
25
25
  iss: https://accounts.google.com
26
- _created: 1754899200000
26
+ CREATED: 1754899200000
27
27
  passkeys:
28
28
  - id: 54ed430804324e81b39756ea4708b546
29
29
  aid: adce0002-35bc-c60a-648b-0b25f1f05503
30
30
  synced: true
31
31
  label: Personal iPhone
32
- _created: 1754899200000
32
+ CREATED: 1754899200000
33
33
  ```
34
34
 
35
35
  `basic` is `null` when Basic credentials do not exist. `federation` and `passkeys` are always
@@ -209,11 +209,9 @@ This can be achieved by using the `auth:incept` directive as follows:
209
209
  name: users
210
210
 
211
211
  entity:
212
- schema:
213
- type: object
214
- properties:
215
- name:
216
- type: string
212
+ properties:
213
+ name:
214
+ type: string
217
215
 
218
216
  exposition:
219
217
  /:
@@ -266,10 +264,10 @@ The directive itself does not allow or deny access to the requested resource.
266
264
  > Used authentication scheme must support inception.
267
265
 
268
266
  ```yaml
269
- /accounts/echo:
270
- auth:assert: true
271
- auth:anyone: true
272
- endpoint: echo
267
+ /accounts/echo:
268
+ auth:assert: true
269
+ auth:anyone: true
270
+ endpoint: echo
273
271
  ```
274
272
 
275
273
  ```http
@@ -9,10 +9,10 @@ The `map` directive family is used to map HTTP request parts to operation call i
9
9
  ```yaml
10
10
  exposition:
11
11
  /:group:
12
- languages: [en, fr] # supported languages
12
+ languages: [en, fr] # supported languages
13
13
  GET:
14
14
  map:authority: hostname # request authority (e.g., hostname)
15
- map:language: lang # requested language
15
+ map:language: lang # requested language
16
16
  map:headers: # raw header values
17
17
  token: x-access-token
18
18
  map:buffer: body # unparsed request body
@@ -37,7 +37,9 @@ A tool is an RTD method that says it is one, named as the [procedure](rpc.md#the
37
37
  /hot:
38
38
  GET:
39
39
  query: { criteria: temperature=gt=80 }
40
- mcp:tool: The pots that are too hot to pour.
40
+ mcp:tool:
41
+ title: Hot pots
42
+ description: The pots that are too hot to pour.
41
43
  endpoint: enumerate
42
44
  ```
43
45
 
@@ -48,6 +50,10 @@ it would spend a model's context on what it has no business calling.
48
50
  The value is what the tool is, and stating it is what publishes it — there is no way to publish one
49
51
  that says nothing, because a tool a model cannot read the purpose of is one it cannot choose.
50
52
 
53
+ A `title` is what a person is shown where a client lists what it may call. Without one a client has
54
+ only the name, which is an address — `apps._identity._id.repos.POST` — and reads as one. A
55
+ description alone is written as the value; a title beside it is written as a mapping.
56
+
51
57
  An operation [states what it is](/documentation/component/declaration.md) as well, and that is not
52
58
  this: it is written without knowledge of any route, and a tool is an operation and a route together.
53
59
  The two routes above are one operation and two tools, and one sentence is not true of both. The
@@ -111,14 +117,14 @@ request is, is read from `MCP-Protocol-Version`, or from
111
117
  `_meta['io.modelcontextprotocol/protocolVersion']` where the header is absent; `initialize` is one
112
118
  by itself, and a request naming no version is of a revision that sent none.
113
119
 
114
- | method | |
115
- | --- | --- |
116
- | `server/discover` | what is served, and who serves it |
117
- | `tools/list` | every tool this caller may reach, in a stable order |
118
- | `tools/call` | the call the tool is |
119
- | `initialize` | the same as `server/discover`, in the shape a client of `2025-11-25` reads |
120
- | `notifications/initialized` | `202`, and nothing done |
121
- | `ping` | `{}` |
120
+ | method | |
121
+ | --------------------------- | -------------------------------------------------------------------------- |
122
+ | `server/discover` | what is served, and who serves it |
123
+ | `tools/list` | every tool this caller may reach, in a stable order |
124
+ | `tools/call` | the call the tool is |
125
+ | `initialize` | the same as `server/discover`, in the shape a client of `2025-11-25` reads |
126
+ | `notifications/initialized` | `202`, and nothing done |
127
+ | `ping` | `{}` |
122
128
 
123
129
  `POST` only, one message per request; `GET` and `DELETE` are `405`. An `Mcp-Session-Id` is ignored
124
130
  and none is minted, a `Last-Event-ID` is ignored, and `accept` is negotiated as everywhere else.
@@ -158,15 +164,15 @@ say it twice.
158
164
 
159
165
  ## What refuses
160
166
 
161
- | | |
162
- | --- | --- |
163
- | `-32700` | the body is not readable |
164
- | `-32600` | the body is not one JSON-RPC message |
165
- | `-32601` | no method of that name, at `404` |
167
+ | | |
168
+ | -------- | ------------------------------------------------------ |
169
+ | `-32700` | the body is not readable |
170
+ | `-32600` | the body is not one JSON-RPC message |
171
+ | `-32601` | no method of that name, at `404` |
166
172
  | `-32602` | the arguments do not fit, or `_meta` states too little |
167
- | `-32603` | anything the gateway did not mean to answer |
168
- | `-32020` | a header says one thing and the body another |
169
- | `-32022` | a revision neither served, naming both |
173
+ | `-32603` | anything the gateway did not mean to answer |
174
+ | `-32020` | a header says one thing and the body another |
175
+ | `-32022` | a revision neither served, naming both |
170
176
 
171
177
  The codes MCP reserves for itself are `-32020` to `-32099`, and it has an implementation use none of
172
178
  `-32000` to `-32019` — which is where [JSON-RPC](rpc.md#what-refuses) has this gateway's own, so none
@@ -9,7 +9,7 @@ and the own index of the current instance.
9
9
  ## Forces
10
10
 
11
11
  1. Static configuration is not an option (due to dynamic scaling / failover).
12
- 2. In a distributed system, there is no concept of a *global current time*.
12
+ 2. In a distributed system, there is no concept of a _global current time_.
13
13
 
14
14
  ## Solution
15
15
 
@@ -24,7 +24,7 @@ error.
24
24
  ## Forces
25
25
 
26
26
  1. No per request IO is allowed (centralized solutions do not fit).
27
- 2. In a distributed system, there is no concept of a *global current time*.
27
+ 2. In a distributed system, there is no concept of a _global current time_.
28
28
  3. Failure to retrieve the quota state should not result in Gateway failure.
29
29
 
30
30
  ## Solution
@@ -210,7 +210,7 @@ The value of the directive is an object with the following properties:
210
210
  GET:
211
211
  octets:get:
212
212
  blob: false # prevent access to the original BLOB
213
- meta: true # allow access to an Entry
213
+ meta: true # allow access to an Entry
214
214
  ```
215
215
 
216
216
  The `octets:get: ~` declaration is equivalent to defaults.
@@ -295,9 +295,9 @@ If it's an array, the workflow units are executed in sequence.
295
295
  ```yaml
296
296
  octets:put:
297
297
  workflow:
298
- - optimize: images.optimize # executed first
299
- - resize: images.resize # executed second
300
- analyze: images.analyze # executed in parallel with `resize`
298
+ - optimize: images.optimize # executed first
299
+ - resize: images.resize # executed second
300
+ analyze: images.analyze # executed in parallel with `resize`
301
301
  ```
302
302
 
303
303
  If one of the workflow units returns or throws an error,
@@ -36,7 +36,7 @@ corresponding to the type of
36
36
  the parts:
37
37
 
38
38
  | Response type | Part type |
39
- |---------------------|-----------------------|
39
+ | ------------------- | --------------------- |
40
40
  | `multipart/msgpack` | `application/msgpack` |
41
41
  | `multipart/yaml` | `application/yaml` |
42
42
  | `multipart/json` | `application/json` |
@@ -70,7 +70,7 @@ FIN
70
70
  See also:
71
71
 
72
72
  - [Multipart Content-Type](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) at W3C
73
- - [Content-Type: multipart](https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa493937(v=exchg.140))
73
+ - [Content-Type: multipart](<https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa493937(v=exchg.140)>)
74
74
  at Microsoft
75
75
 
76
76
  ## HTTP version
@@ -82,7 +82,7 @@ exposition:
82
82
  protocol: h2c
83
83
  service:
84
84
  annotations:
85
- projectcontour.io/upstream-protocol.h2c: "8000"
85
+ projectcontour.io/upstream-protocol.h2c: '8000'
86
86
  ```
87
87
 
88
88
  `h2c` requires an ingress controller that proxies cleartext HTTP/2 upstream, and the
@@ -48,9 +48,13 @@ Undefined `query` denies any query arguments in requests.
48
48
 
49
49
  Search criteria in [RSQL](https://github.com/jirutka/rsql-parser) format.
50
50
 
51
- The `criteria` property is considered as *open* when it ends with a `;`, allowing the combination of
51
+ A value is read as what the property it selects on holds, and one that cannot be read as that is
52
+ refused with `400 Bad Request` — `volume>abc` where `volume` is a number, or `booked==yes` where
53
+ `booked` is a boolean. A string property takes whatever is written.
54
+
55
+ The `criteria` property is considered as _open_ when it ends with a `;`, allowing the combination of
52
56
  request query criteria using `and` logic.
53
- Otherwise, criteria property is *closed*, that is, doesn't allow `criteria` in a request query.
57
+ Otherwise, criteria property is _closed_, that is, doesn't allow `criteria` in a request query.
54
58
 
55
59
  ```yaml
56
60
  # manifest.toa.yaml
@@ -151,7 +155,9 @@ rank: 5
151
155
 
152
156
  ## Text search
153
157
 
154
- For entities with `text` indexes, search queries can be enabled using the `search` property.
158
+ For entities with `text` indexes — declared in a
159
+ [migration](/documentation/component/declaration.md#migrations) — search queries can be enabled
160
+ using the `search` property.
155
161
 
156
162
  ```yaml
157
163
  # manifest.toa.yaml
@@ -223,7 +229,7 @@ sort: rank:asc
223
229
  sort: rank:desc;timestamp:asc
224
230
  ```
225
231
 
226
- If `sort` value ends with a semicolon `;` then the sorting is considered *open*
232
+ If `sort` value ends with a semicolon `;` then the sorting is considered _open_
227
233
  and can be extended using request query `sort` argument.
228
234
 
229
235
  ```yaml
@@ -274,10 +280,10 @@ GET /dummies/?foo=0&bar=baz
274
280
 
275
281
  ## Optimistic concurrency control
276
282
 
277
- If an operation returns an object with `_version` property,
278
- then its value is passed as the value of
279
- the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response
280
- (and removed from the object).
283
+ If an operation answers a safe request (`GET`, `HEAD`) with an object that has a `VERSION`
284
+ property, its value is passed as the value of
285
+ the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response,
286
+ see [validators](cache.md#validators).
281
287
 
282
288
  Client can use the `if-match` request header to perform an operation only if the corresponding
283
289
  object has not been modified since the last retrieval.
@@ -13,27 +13,31 @@ one an application could choose is one it could collide with a route of its own.
13
13
 
14
14
  ## The name
15
15
 
16
- A procedure is an RTD method — a node and a verb — and its name is written the way the node is
17
- declared: the route template, with a variable marked by a leading `_`, and the verb as the last
18
- segment.
19
-
20
- | route | verb | method |
21
- | --- | --- | --- |
22
- | `/pots` | `GET` | `pots/GET` |
23
- | `/pots` | `POST` | `pots/POST` |
24
- | `/pots/:id` | `GET` | `pots/_id/GET` |
25
- | `/identity/tokens/:identity` | `POST` | `identity/tokens/_identity/POST` |
26
- | `/files/**` | `GET` | `files/__/GET` |
27
- | `/` | `GET` | `GET` |
28
-
29
- The verb is always the last segment, so `/pots/GET` answering `POST` is `pots/GET/POST` and
30
- `/pots` answering `GET` is `pots/GET`. Nothing is declared to make a name: a re-mounted route is
16
+ A procedure is an RTD method — a node and a verb — and its name is the route template with a
17
+ variable marked by a leading `_` and the verb as the last segment, joined by `.`.
18
+
19
+ The separator is `.` and not `/` because a name is a tool's name too, and
20
+ [MCP](mcp.md) names the characters one may hold: letters, digits, `_`, `-` and `.`. A client that
21
+ receives one outside that set may refuse the tool, and one that accepts it rewrites what it shows
22
+ a model — so what is published has to be spellable as it stands.
23
+
24
+ | route | verb | method |
25
+ | ---------------------------- | ------ | -------------------------------- |
26
+ | `/pots` | `GET` | `pots.GET` |
27
+ | `/pots` | `POST` | `pots.POST` |
28
+ | `/pots/:id` | `GET` | `pots._id.GET` |
29
+ | `/identity/tokens/:identity` | `POST` | `identity.tokens._identity.POST` |
30
+ | `/files/**` | `GET` | `files.__.GET` |
31
+ | `/` | `GET` | `GET` |
32
+
33
+ The verb is always the last segment, so `/pots/GET` answering `POST` is `pots.GET.POST` and
34
+ `/pots` answering `GET` is `pots.GET`. Nothing is declared to make a name: a re-mounted route is
31
35
  a renamed procedure, because the name is the address.
32
36
 
33
37
  ## What has a name
34
38
 
35
39
  A segment is addressed where it holds only `A-Z`, `a-z`, `0-9` and `-`. `_` is the name's own,
36
- marking a variable, and `__` the rest of a path.
40
+ marking a variable, and `__` the rest of a path; `.` is what divides one segment from the next.
37
41
 
38
42
  A route with a segment holding anything else — a `.`, a `_`, a `*`, a variable that is not one
39
43
  word — has no name. It is served over HTTP as it always was; what it loses is the address, so
@@ -51,17 +55,25 @@ A key the template names is a route variable, and is taken by the path. `query`
51
55
  querystring. Whatever is left is the body.
52
56
 
53
57
  ```json
54
- {"jsonrpc": "2.0", "id": 1, "method": "pots/_id/GET", "params": {"id": "a1b2"}}
58
+ { "jsonrpc": "2.0", "id": 1, "method": "pots._id.GET", "params": { "id": "a1b2" } }
55
59
  ```
56
60
 
57
61
  ```json
58
- {"jsonrpc": "2.0", "id": 2, "method": "pots/POST",
59
- "params": {"title": "Kettle", "volume": 1.7}}
62
+ {
63
+ "jsonrpc": "2.0",
64
+ "id": 2,
65
+ "method": "pots.POST",
66
+ "params": { "title": "Kettle", "volume": 1.7 }
67
+ }
60
68
  ```
61
69
 
62
70
  ```json
63
- {"jsonrpc": "2.0", "id": 3, "method": "pots/GET",
64
- "params": {"query": {"criteria": "volume=gt=1", "limit": 10}}}
71
+ {
72
+ "jsonrpc": "2.0",
73
+ "id": 3,
74
+ "method": "pots.GET",
75
+ "params": { "query": { "criteria": "volume=gt=1", "limit": 10 } }
76
+ }
65
77
  ```
66
78
 
67
79
  The querystring has a name of its own because an operation's input is free to have an `id` or
@@ -87,8 +99,10 @@ A request may carry an array of calls instead of one, and answers an array of wh
87
99
  answered — shorter than what it was given, where some were notifications.
88
100
 
89
101
  ```json
90
- [{"jsonrpc": "2.0", "id": 1, "method": "pots/_id/GET", "params": {"id": "a1b2"}},
91
- {"jsonrpc": "2.0", "method": "pots/_id/DELETE", "params": {"id": "c3d4"}}]
102
+ [
103
+ { "jsonrpc": "2.0", "id": 1, "method": "pots._id.GET", "params": { "id": "a1b2" } },
104
+ { "jsonrpc": "2.0", "method": "pots._id.DELETE", "params": { "id": "c3d4" } }
105
+ ]
92
106
  ```
93
107
 
94
108
  They run one after another, in the order given. `batch` is how many one request may carry, 32
@@ -110,14 +124,14 @@ authenticate.
110
124
 
111
125
  Everything else a call runs into is a value, at `200`, because the request itself succeeded.
112
126
 
113
- | | |
114
- | --- | --- |
115
- | `-32601` | no route of that name, or no such verb on it |
116
- | `-32602` | a variable is missing, or a query is not one |
117
- | `-32000` | the identity is not authorized to make this call |
127
+ | | |
128
+ | -------- | -------------------------------------------------- |
129
+ | `-32601` | no route of that name, or no such verb on it |
130
+ | `-32602` | a variable is missing, or a query is not one |
131
+ | `-32000` | the identity is not authorized to make this call |
118
132
  | `-32001` | the operation refused, its own code in `data.code` |
119
- | `-32603` | anything the gateway did not mean to answer |
120
- | `-32002` | the request carries more calls than `batch` |
133
+ | `-32603` | anything the gateway did not mean to answer |
134
+ | `-32002` | the request carries more calls than `batch` |
121
135
 
122
136
  The first five codes JSON-RPC states mean the same to every client. `-32000` and `-32001` are
123
137
  this gateway's, from the block the specification reserves and leaves empty, so
@@ -127,7 +141,7 @@ in its manifest, and is what a caller reads.
127
141
  ## Authorization
128
142
 
129
143
  A procedure is authorized as the resource is, against the path and the verb its name states.
130
- A token restricted to `/pots/:id/` for `GET` authorizes `pots/_id/GET` and nothing else,
144
+ A token restricted to `/pots/:id/` for `GET` authorizes `pots._id.GET` and nothing else,
131
145
  whichever way the call arrives.
132
146
 
133
147
  [`anonymous`](access.md#anonymous) is the one directive that reads a call differently from a
@@ -32,7 +32,7 @@ clients instrumented with OpenTelemetry-compatible tooling, or by upstream proxi
32
32
  traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
33
33
  ```
34
34
 
35
- In addition to the trace ID, it carries the ID of the client span, which becomes the *parent* of
35
+ In addition to the trace ID, it carries the ID of the client span, which becomes the _parent_ of
36
36
  the gateway's server span, linking client-side and server-side spans into a single trace tree.
37
37
 
38
38
  ### `ray`
@@ -52,9 +52,9 @@ Headers with invalid values are ignored, and a new trace is started.
52
52
 
53
53
  ## Sampling
54
54
 
55
- The trace *context* (trace ID) is always created and propagated, so the `ray` header and
55
+ The trace _context_ (trace ID) is always created and propagated, so the `ray` header and
56
56
  `trace_id` in log entries are always present. The sampling decision only determines whether
57
- the *spans* of the trace are recorded.
57
+ the _spans_ of the trace are recorded.
58
58
 
59
59
  The decision is made once, by the process that starts the trace, and is propagated along with
60
60
  the trace context (the flags byte of `traceparent`), so a trace is either recorded as a whole
@@ -112,7 +112,7 @@ key.
112
112
  HTTP methods can only be mapped to operations of the corresponding types.
113
113
 
114
114
  | HTTP method | Operation type |
115
- |-------------|-----------------------------------------------|
115
+ | ----------- | --------------------------------------------- |
116
116
  | `POST` | **Transition** (without Query)<br/>**Effect** |
117
117
  | `PUT` | **Transition** (with Query)<br/>**Effect** |
118
118
  | `GET` | **Observation**<br/>**Computation** |
@@ -2,8 +2,8 @@ Feature: Identity assertion
2
2
 
3
3
  Scenario: Assert Identity
4
4
  Given the `identity.basic` database contains:
5
- | _id | authority | username | password | _version |
6
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
5
+ | _id | authority | username | password | VERSION |
6
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
7
7
  And the `echo` is running with the following manifest:
8
8
  """yaml
9
9
  exposition:
@@ -87,7 +87,7 @@ Feature: More than one provider claims Bearer
87
87
  Given the `identity.federation` configuration:
88
88
  """yaml
89
89
  trust:
90
- - iss: http://localhost:44444
90
+ - iss: http://localhost:31005
91
91
  aud: test
92
92
  """
93
93
  And the IDP token for User is issued
@@ -8,7 +8,7 @@ Feature: Federated identity authentication
8
8
  And the `identity.federation` configuration:
9
9
  """yaml
10
10
  trust:
11
- - iss: http://localhost:44444
11
+ - iss: http://localhost:31005
12
12
  aud: test
13
13
  """
14
14
 
@@ -18,7 +18,7 @@ Feature: Federated identity authentication
18
18
  /:
19
19
  GET:
20
20
  auth:claims:
21
- iss: http://localhost:44444
21
+ iss: http://localhost:31005
22
22
  aud: test
23
23
  sub: Bob
24
24
  dev:stub: ok
@@ -62,7 +62,7 @@ Feature: Federated identity authentication
62
62
  /:
63
63
  GET:
64
64
  auth:claims:
65
- iss: http://localhost:44444
65
+ iss: http://localhost:31005
66
66
  aud: test
67
67
  dev:stub: ok
68
68
  """
@@ -84,7 +84,7 @@ Feature: Federated identity authentication
84
84
  /:
85
85
  GET:
86
86
  auth:claims:
87
- iss: http://localhost:44444
87
+ iss: http://localhost:31005
88
88
  sub: Alice
89
89
  dev:stub: ok
90
90
  """
@@ -106,7 +106,7 @@ Feature: Federated identity authentication
106
106
  /:
107
107
  GET:
108
108
  auth:claims:
109
- iss: http://localhost:44444
109
+ iss: http://localhost:31005
110
110
  aud: goalkeepers
111
111
  dev:stub: ok
112
112
  """
@@ -121,8 +121,8 @@ Feature: Identity inception
121
121
 
122
122
  Scenario: Inception with a wrong password for existing credentials
123
123
  Given the `identity.basic` database contains:
124
- | _id | authority | username | password | _version |
125
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
124
+ | _id | authority | username | password | VERSION |
125
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
126
126
  And the `users` is running with the following manifest:
127
127
  """yaml
128
128
  exposition:
@@ -6,7 +6,7 @@ Feature: OIDC tokens with authorities
6
6
  And the `identity.federation` configuration:
7
7
  """yaml
8
8
  trust:
9
- - iss: http://localhost:44444
9
+ - iss: http://localhost:31005
10
10
  aud: test
11
11
  """
12
12
 
@@ -28,9 +28,9 @@ Feature: Configuration values
28
28
  type: string
29
29
  bar:
30
30
  type: string
31
- default: world
32
31
  defaults:
33
32
  foo: deployed
33
+ bar: world
34
34
  """
35
35
  And the configuration values are running
36
36
 
@@ -49,6 +49,7 @@ Feature: Configuration values
49
49
 
50
50
  configuration:
51
51
  foo: deployed
52
+ bar: world
52
53
  schema:
53
54
  type: object
54
55
  properties:
@@ -56,7 +57,6 @@ Feature: Configuration values
56
57
  type: string
57
58
  bar:
58
59
  type: string
59
- default: world
60
60
  epoch: e1
61
61
  """
62
62
 
@@ -82,9 +82,9 @@ Feature: Configuration values
82
82
  type: string
83
83
  bar:
84
84
  type: string
85
- default: world
86
85
  configuration:
87
86
  foo: deployed
87
+ bar: world
88
88
  """
89
89
 
90
90
  Scenario: Listing without the role
@@ -154,7 +154,6 @@ Feature: Configuration values
154
154
 
155
155
  configuration:
156
156
  foo: created
157
- bar: world
158
157
  epoch: e1
159
158
  """
160
159
 
@@ -7,12 +7,12 @@ Feature: Persistent credentials management
7
7
  | _id | authority | username | password |
8
8
  | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
9
9
  And the `identity.federation` database contains:
10
- | _id | authority | identity | iss | sub | _created |
11
- | fed3a65ebbee47ed95a73edd911ea328 | nex | efe3a65ebbee47ed95a73edd911ea328 | https://accounts.google.com | google | 1000 |
12
- | fed3a65ebbee47ed95a73edd911ea329 | nex | efe3a65ebbee47ed95a73edd911ea328 | https://appleid.apple.com | apple | 900 |
10
+ | _id | authority | identity | iss | sub | CREATED |
11
+ | fed3a65ebbee47ed95a73edd911ea328 | nex | efe3a65ebbee47ed95a73edd911ea328 | https://accounts.google.com | google | 1000 |
12
+ | fed3a65ebbee47ed95a73edd911ea329 | nex | efe3a65ebbee47ed95a73edd911ea328 | https://appleid.apple.com | apple | 900 |
13
13
  And the `identity.passkeys` database contains:
14
- | _id | authority | identity | kid | aid | synced | key | counter | label | _created |
15
- | ace3a65ebbee47ed95a73edd911ea328 | nex | efe3a65ebbee47ed95a73edd911ea328 | key-one | adce0002-35bc-c60a-648b-0b25f1f05503 | true | cHVibGlj | 0 | Personal iPhone | 2000 |
14
+ | _id | authority | identity | kid | aid | synced | key | counter | label | CREATED |
15
+ | ace3a65ebbee47ed95a73edd911ea328 | nex | efe3a65ebbee47ed95a73edd911ea328 | key-one | adce0002-35bc-c60a-648b-0b25f1f05503 | true | cHVibGlj | 0 | Personal iPhone | 2000 |
16
16
 
17
17
  Scenario: Listing all persistent credentials
18
18
  When the following request is received:
@@ -32,16 +32,16 @@ Feature: Persistent credentials management
32
32
  federation:
33
33
  - id: fed3a65ebbee47ed95a73edd911ea328
34
34
  iss: https://accounts.google.com
35
- _created: 1000
35
+ CREATED: 1000
36
36
  - id: fed3a65ebbee47ed95a73edd911ea329
37
37
  iss: https://appleid.apple.com
38
- _created: 900
38
+ CREATED: 900
39
39
  passkeys:
40
40
  - id: ace3a65ebbee47ed95a73edd911ea328
41
41
  aid: adce0002-35bc-c60a-648b-0b25f1f05503
42
42
  synced: true
43
43
  label: Personal iPhone
44
- _created: 2000
44
+ CREATED: 2000
45
45
  """
46
46
 
47
47
  Scenario: Deleting credentials through their components
@@ -101,6 +101,6 @@ Feature: Persistent credentials management
101
101
  federation:
102
102
  - id: fed3a65ebbee47ed95a73edd911ea329
103
103
  iss: https://appleid.apple.com
104
- _created: 900
104
+ CREATED: 900
105
105
  passkeys: []
106
106
  """
@@ -1,5 +1,6 @@
1
1
  Feature: Dev
2
2
 
3
+ @timing
3
4
  Scenario: Delays
4
5
  Given the annotation:
5
6
  """yaml
@@ -83,6 +83,7 @@ Feature: Dynamic tree updates
83
83
  200 OK
84
84
  """
85
85
 
86
+ @timing
86
87
  Scenario: Stale branch expires
87
88
  Given the branch TTL is 5 seconds
88
89
  And the Gateway is running
@@ -92,6 +92,27 @@ Feature: Errors
92
92
  must have required property 'title'
93
93
  """
94
94
 
95
+ Scenario: Criteria value the property cannot hold
96
+ Given the `pots` is running with the following manifest:
97
+ """yaml
98
+ exposition:
99
+ /:
100
+ GET: enumerate
101
+ """
102
+ When the following request is received:
103
+ """
104
+ GET /pots/?criteria=volume>abc HTTP/1.1
105
+ host: nex.toa.io
106
+ accept: text/plain
107
+ """
108
+ Then the following reply is sent:
109
+ """
110
+ 400 Bad Request
111
+ content-type: text/plain
112
+
113
+ Criteria selector 'volume' takes a number, and 'abc' is not one
114
+ """
115
+
95
116
  Scenario: Query limit out of range
96
117
  Given the `pots` is running with the following manifest:
97
118
  """yaml