@toa.io/extensions.exposition 1.0.0-alpha.292 → 1.0.0-alpha.293

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 (443) hide show
  1. package/components/identity.basic/package.json +8 -0
  2. package/components/identity.federation/package.json +8 -0
  3. package/components/identity.passkeys/package.json +8 -0
  4. package/components/identity.tokens/package.json +10 -0
  5. package/package.json +24 -13
  6. package/transpiled/Endpoint.js +3 -0
  7. package/transpiled/Endpoint.js.map +1 -1
  8. package/transpiled/Introspection.d.ts +6 -0
  9. package/transpiled/Introspection.js +1 -0
  10. package/transpiled/Introspection.js.map +1 -1
  11. package/transpiled/MCP/schema.js +2 -2
  12. package/transpiled/Query.d.ts +2 -12
  13. package/transpiled/Query.js +2 -12
  14. package/transpiled/Query.js.map +1 -1
  15. package/transpiled/RTD/Endpoint.d.ts +2 -3
  16. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  17. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  18. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  19. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  20. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  21. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  22. package/ui/dist/_app/immutable/chunks/{aLpTDmOc.js → DVlaUfVU.js} +1 -1
  23. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  24. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  25. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  26. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  27. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  28. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  29. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  30. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  31. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  32. package/ui/dist/_app/version.json +1 -1
  33. package/ui/dist/index.html +12 -12
  34. package/CHANGELOG.md +0 -42
  35. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  36. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  37. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  38. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  39. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  40. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  41. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  42. package/components/identity.credentials/source/list.test.ts +0 -70
  43. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  44. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  45. package/components/identity.federation/source/list.test.ts +0 -41
  46. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  47. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  48. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  49. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  50. package/components/identity.passkeys/source/errors.test.ts +0 -34
  51. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  52. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  53. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  54. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  55. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  56. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  57. package/components/identity.tokens/source/issue.test.ts +0 -73
  58. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  59. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  60. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  61. package/context.toa.yaml +0 -31
  62. package/cucumber.mjs +0 -7
  63. package/documentation/.assets/ia3-dark.jpg +0 -0
  64. package/documentation/.assets/ia3-light.jpg +0 -0
  65. package/documentation/.assets/overview-dark.jpg +0 -0
  66. package/documentation/.assets/overview-light.jpg +0 -0
  67. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  68. package/documentation/.assets/role-scopes-light.jpg +0 -0
  69. package/documentation/.assets/rtd-dark.jpg +0 -0
  70. package/documentation/.assets/rtd-light.jpg +0 -0
  71. package/documentation/access.md +0 -350
  72. package/documentation/authorities.md +0 -51
  73. package/documentation/cache.md +0 -72
  74. package/documentation/components.md +0 -472
  75. package/documentation/consent.md +0 -101
  76. package/documentation/credentials.md +0 -88
  77. package/documentation/dev.md +0 -30
  78. package/documentation/discovery.md +0 -81
  79. package/documentation/flow.md +0 -44
  80. package/documentation/help.md +0 -122
  81. package/documentation/identity.md +0 -304
  82. package/documentation/introspection.md +0 -123
  83. package/documentation/io.md +0 -167
  84. package/documentation/ip.md +0 -24
  85. package/documentation/map.md +0 -123
  86. package/documentation/mcp.md +0 -183
  87. package/documentation/notes/desync.jpg +0 -0
  88. package/documentation/notes/peers.md +0 -59
  89. package/documentation/notes/sse.md +0 -71
  90. package/documentation/notes/throttling.md +0 -122
  91. package/documentation/oauth.md +0 -180
  92. package/documentation/octets.md +0 -334
  93. package/documentation/passkeys.md +0 -11
  94. package/documentation/protocol.md +0 -120
  95. package/documentation/query.md +0 -324
  96. package/documentation/require.md +0 -15
  97. package/documentation/rpc.md +0 -154
  98. package/documentation/tracing.md +0 -70
  99. package/documentation/tree.md +0 -199
  100. package/features/access.feature +0 -596
  101. package/features/annotation.feature +0 -32
  102. package/features/auth.assert.feature +0 -55
  103. package/features/auth.bearer.feature +0 -120
  104. package/features/auth.claims.feature +0 -171
  105. package/features/auth.incept.feature +0 -166
  106. package/features/auth.input.feature +0 -59
  107. package/features/authorities.basic.feature +0 -141
  108. package/features/authorities.feature +0 -71
  109. package/features/authorities.federation.feature +0 -100
  110. package/features/authorities.tokens.feature +0 -117
  111. package/features/body.feature +0 -76
  112. package/features/cache.feature +0 -368
  113. package/features/configuration.feature +0 -206
  114. package/features/cors.feature +0 -127
  115. package/features/credentials.feature +0 -106
  116. package/features/debug.feature +0 -34
  117. package/features/dev.feature +0 -90
  118. package/features/directives.feature +0 -61
  119. package/features/discovery.feature +0 -213
  120. package/features/discovery.ui.feature +0 -213
  121. package/features/dynamic.feature +0 -192
  122. package/features/errors.feature +0 -258
  123. package/features/etag.feature +0 -239
  124. package/features/flow.feature +0 -148
  125. package/features/help.feature +0 -512
  126. package/features/identity.bans.feature +0 -200
  127. package/features/identity.basic.feature +0 -666
  128. package/features/identity.feature +0 -240
  129. package/features/identity.federation.feature +0 -396
  130. package/features/identity.otp.feature +0 -142
  131. package/features/identity.roles.feature +0 -568
  132. package/features/identity.tokens.custom.feature +0 -430
  133. package/features/identity.tokens.feature +0 -131
  134. package/features/interruptions.feature +0 -20
  135. package/features/introspection.feature +0 -565
  136. package/features/introspection.map.feature +0 -108
  137. package/features/io.feature +0 -204
  138. package/features/io.throttle.feature +0 -166
  139. package/features/map.feature +0 -360
  140. package/features/mcp.feature +0 -753
  141. package/features/methods.feature +0 -48
  142. package/features/oauth.clients.feature +0 -195
  143. package/features/oauth.discovery.feature +0 -164
  144. package/features/oauth.grants.feature +0 -301
  145. package/features/octets.cloudinary.feature +0 -233
  146. package/features/octets.download.feature +0 -194
  147. package/features/octets.entries.feature +0 -83
  148. package/features/octets.feature +0 -306
  149. package/features/octets.head.feature +0 -40
  150. package/features/octets.location.feature +0 -83
  151. package/features/octets.meta.feature +0 -117
  152. package/features/octets.workflows.feature +0 -565
  153. package/features/passkeys.feature +0 -66
  154. package/features/probes.feature +0 -18
  155. package/features/query.feature +0 -389
  156. package/features/realtime.feature +0 -34
  157. package/features/require.feature +0 -66
  158. package/features/response.feature +0 -103
  159. package/features/routes.feature +0 -224
  160. package/features/rpc.feature +0 -429
  161. package/features/server.feature +0 -21
  162. package/features/site/_app/immutable/asset.js +0 -1
  163. package/features/site/favicon.ico +0 -0
  164. package/features/site/index.html +0 -10
  165. package/features/steps/.env.example +0 -5
  166. package/features/steps/Captures.ts +0 -20
  167. package/features/steps/Cloudinary.ts +0 -12
  168. package/features/steps/Common.ts +0 -38
  169. package/features/steps/Components.ts +0 -115
  170. package/features/steps/Database.ts +0 -106
  171. package/features/steps/Gateway.ts +0 -239
  172. package/features/steps/HTTP.ts +0 -96
  173. package/features/steps/IDP.ts +0 -361
  174. package/features/steps/Identity.ts +0 -54
  175. package/features/steps/OTP.ts +0 -42
  176. package/features/steps/Parameters.ts +0 -162
  177. package/features/steps/Probe.ts +0 -38
  178. package/features/steps/Realtime.ts +0 -175
  179. package/features/steps/Workspace.ts +0 -48
  180. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  181. package/features/steps/components/audit/operations/record.js +0 -5
  182. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  183. package/features/steps/components/echo/operations/affect.js +0 -3
  184. package/features/steps/components/echo/operations/compute.js +0 -3
  185. package/features/steps/components/echo/operations/echo.js +0 -3
  186. package/features/steps/components/echo/operations/error.js +0 -7
  187. package/features/steps/components/echo/operations/identity.js +0 -3
  188. package/features/steps/components/echo/operations/parameters.js +0 -3
  189. package/features/steps/components/echo/operations/ping.js +0 -3
  190. package/features/steps/components/echo/operations/unwrap.js +0 -3
  191. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  192. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  193. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  194. package/features/steps/components/greeter/operations/greet.js +0 -3
  195. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  196. package/features/steps/components/notify/operations/send.js +0 -5
  197. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  198. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  199. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  200. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  201. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  202. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  203. package/features/steps/components/octets.tester/operations/err.js +0 -14
  204. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  205. package/features/steps/components/octets.tester/operations/id.js +0 -5
  206. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  207. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  208. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  209. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  210. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  211. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  212. package/features/steps/components/orders/operations/create.js +0 -7
  213. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  214. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  215. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  216. package/features/steps/components/pricing/operations/quote.js +0 -3
  217. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  218. package/features/steps/components/sequences/operations/numbers.js +0 -5
  219. package/features/steps/components/sequences/operations/tokens.js +0 -14
  220. package/features/steps/components/users/manifest.toa.yaml +0 -30
  221. package/features/steps/components/users/operations/create.js +0 -11
  222. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  223. package/features/steps/map.ts +0 -30
  224. package/features/steps/tsconfig.json +0 -9
  225. package/features/streams.feature +0 -35
  226. package/features/timestamps.feature +0 -41
  227. package/features/timing.feature +0 -49
  228. package/features/tracing.feature +0 -123
  229. package/source/Branch.test.ts +0 -40
  230. package/source/Branch.ts +0 -44
  231. package/source/Composition.ts +0 -51
  232. package/source/Context.ts +0 -11
  233. package/source/Directive.test.ts +0 -199
  234. package/source/Directive.ts +0 -248
  235. package/source/Discovery/Explorer.ts +0 -34
  236. package/source/Discovery/Site.test.ts +0 -147
  237. package/source/Discovery/Site.ts +0 -202
  238. package/source/Discovery/index.ts +0 -3
  239. package/source/Discovery/tree.test.ts +0 -175
  240. package/source/Discovery/tree.ts +0 -77
  241. package/source/Discovery/trunk.ts +0 -33
  242. package/source/Endpoint.test.ts +0 -67
  243. package/source/Endpoint.ts +0 -157
  244. package/source/Factory.ts +0 -42
  245. package/source/Gateway.ts +0 -390
  246. package/source/HTTP/Context.ts +0 -143
  247. package/source/HTTP/Probe.ts +0 -99
  248. package/source/HTTP/Server.ts +0 -435
  249. package/source/HTTP/Timing.ts +0 -14
  250. package/source/HTTP/address.test.ts +0 -28
  251. package/source/HTTP/address.ts +0 -16
  252. package/source/HTTP/exceptions.ts +0 -99
  253. package/source/HTTP/formats/form.ts +0 -21
  254. package/source/HTTP/formats/index.ts +0 -36
  255. package/source/HTTP/formats/json.ts +0 -14
  256. package/source/HTTP/formats/msgpack.ts +0 -14
  257. package/source/HTTP/formats/text.ts +0 -10
  258. package/source/HTTP/formats/yaml.test.ts +0 -22
  259. package/source/HTTP/formats/yaml.ts +0 -40
  260. package/source/HTTP/index.ts +0 -6
  261. package/source/HTTP/messages.test.ts +0 -196
  262. package/source/HTTP/messages.ts +0 -186
  263. package/source/HTTP/types.ts +0 -39
  264. package/source/Interception.ts +0 -37
  265. package/source/Introspection.ts +0 -179
  266. package/source/MCP/Server.ts +0 -335
  267. package/source/MCP/discover.ts +0 -51
  268. package/source/MCP/errors.ts +0 -80
  269. package/source/MCP/index.ts +0 -1
  270. package/source/MCP/schema.test.ts +0 -91
  271. package/source/MCP/schema.ts +0 -94
  272. package/source/MCP/tools.ts +0 -144
  273. package/source/MCP/types.ts +0 -84
  274. package/source/Mapping.ts +0 -101
  275. package/source/Query.test.ts +0 -54
  276. package/source/Query.ts +0 -277
  277. package/source/RPC/Context.ts +0 -75
  278. package/source/RPC/Dispatcher.ts +0 -150
  279. package/source/RPC/errors.test.ts +0 -77
  280. package/source/RPC/errors.ts +0 -82
  281. package/source/RPC/index.ts +0 -1
  282. package/source/RPC/names.test.ts +0 -141
  283. package/source/RPC/names.ts +0 -176
  284. package/source/RPC/types.ts +0 -34
  285. package/source/RTD/Context.ts +0 -16
  286. package/source/RTD/Directives.ts +0 -126
  287. package/source/RTD/Endpoint.ts +0 -27
  288. package/source/RTD/Match.ts +0 -11
  289. package/source/RTD/Method.ts +0 -39
  290. package/source/RTD/Node.ts +0 -169
  291. package/source/RTD/Route.ts +0 -93
  292. package/source/RTD/Tree.ts +0 -137
  293. package/source/RTD/expiration.test.ts +0 -81
  294. package/source/RTD/factory.ts +0 -105
  295. package/source/RTD/index.ts +0 -8
  296. package/source/RTD/segment.test.ts +0 -35
  297. package/source/RTD/segment.ts +0 -51
  298. package/source/RTD/syntax/index.ts +0 -1
  299. package/source/RTD/walk.test.ts +0 -147
  300. package/source/Remotes.test.ts +0 -79
  301. package/source/Remotes.ts +0 -39
  302. package/source/Tenant.ts +0 -73
  303. package/source/directives/auth/Anonymous.test.ts +0 -70
  304. package/source/directives/auth/Anonymous.ts +0 -36
  305. package/source/directives/auth/Anyone.ts +0 -23
  306. package/source/directives/auth/Assert.ts +0 -43
  307. package/source/directives/auth/Authorization.test.ts +0 -24
  308. package/source/directives/auth/Authorization.ts +0 -388
  309. package/source/directives/auth/Delegate.test.ts +0 -36
  310. package/source/directives/auth/Delegate.ts +0 -54
  311. package/source/directives/auth/Echo.ts +0 -24
  312. package/source/directives/auth/Federation.ts +0 -104
  313. package/source/directives/auth/Id.ts +0 -37
  314. package/source/directives/auth/Incept.ts +0 -117
  315. package/source/directives/auth/Input.ts +0 -92
  316. package/source/directives/auth/Role.test.ts +0 -147
  317. package/source/directives/auth/Role.ts +0 -99
  318. package/source/directives/auth/Rule.ts +0 -59
  319. package/source/directives/auth/Scheme.ts +0 -31
  320. package/source/directives/auth/create.ts +0 -11
  321. package/source/directives/auth/index.ts +0 -3
  322. package/source/directives/auth/schemes.test.ts +0 -18
  323. package/source/directives/auth/schemes.ts +0 -39
  324. package/source/directives/auth/split.ts +0 -14
  325. package/source/directives/auth/types.ts +0 -75
  326. package/source/directives/cache/Cache.ts +0 -92
  327. package/source/directives/cache/Control.ts +0 -81
  328. package/source/directives/cache/Exact.ts +0 -7
  329. package/source/directives/cache/etag.ts +0 -38
  330. package/source/directives/cache/index.ts +0 -3
  331. package/source/directives/cache/types.ts +0 -9
  332. package/source/directives/cors/CORS.test.ts +0 -75
  333. package/source/directives/cors/CORS.ts +0 -88
  334. package/source/directives/cors/index.ts +0 -3
  335. package/source/directives/dev/Development.ts +0 -41
  336. package/source/directives/dev/Faulty.ts +0 -31
  337. package/source/directives/dev/Sleep.ts +0 -53
  338. package/source/directives/dev/Stub.ts +0 -14
  339. package/source/directives/dev/Throw.ts +0 -14
  340. package/source/directives/dev/index.ts +0 -3
  341. package/source/directives/dev/types.ts +0 -5
  342. package/source/directives/flow/Compose.ts +0 -98
  343. package/source/directives/flow/Fetch.ts +0 -86
  344. package/source/directives/flow/Flow.ts +0 -43
  345. package/source/directives/flow/index.ts +0 -3
  346. package/source/directives/flow/types.ts +0 -7
  347. package/source/directives/help/Family.ts +0 -122
  348. package/source/directives/help/Help.test.ts +0 -227
  349. package/source/directives/help/Help.ts +0 -47
  350. package/source/directives/help/Parameters.ts +0 -47
  351. package/source/directives/help/described.ts +0 -57
  352. package/source/directives/help/index.ts +0 -45
  353. package/source/directives/index.ts +0 -33
  354. package/source/directives/io/Directive.ts +0 -17
  355. package/source/directives/io/IO.ts +0 -118
  356. package/source/directives/io/Input.ts +0 -55
  357. package/source/directives/io/Message.ts +0 -1
  358. package/source/directives/io/Output.ts +0 -81
  359. package/source/directives/io/Status.test.ts +0 -88
  360. package/source/directives/io/Status.ts +0 -47
  361. package/source/directives/io/Throttle.ts +0 -30
  362. package/source/directives/io/index.ts +0 -3
  363. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  364. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  365. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  366. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  367. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  368. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  369. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  370. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  371. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  372. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  373. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  374. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  375. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  376. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  377. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  378. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  379. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  380. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  381. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  382. package/source/directives/io/lib/throttle/index.ts +0 -4
  383. package/source/directives/io/schemas.test.ts +0 -40
  384. package/source/directives/io/schemas.ts +0 -16
  385. package/source/directives/map/Authority.ts +0 -15
  386. package/source/directives/map/Buffer.ts +0 -15
  387. package/source/directives/map/Claims.ts +0 -63
  388. package/source/directives/map/Directive.ts +0 -4
  389. package/source/directives/map/Headers.ts +0 -60
  390. package/source/directives/map/Language.ts +0 -45
  391. package/source/directives/map/Languages.ts +0 -17
  392. package/source/directives/map/Map.ts +0 -85
  393. package/source/directives/map/Mapping.ts +0 -45
  394. package/source/directives/map/Properties.ts +0 -15
  395. package/source/directives/map/Segments.ts +0 -52
  396. package/source/directives/map/index.ts +0 -3
  397. package/source/directives/mcp/MCP.ts +0 -33
  398. package/source/directives/mcp/Tool.test.ts +0 -56
  399. package/source/directives/mcp/Tool.ts +0 -32
  400. package/source/directives/mcp/index.ts +0 -6
  401. package/source/directives/oauth/Discovery.ts +0 -66
  402. package/source/directives/oauth/documents.ts +0 -110
  403. package/source/directives/oauth/index.ts +0 -3
  404. package/source/directives/octets/Context.ts +0 -23
  405. package/source/directives/octets/Delete.ts +0 -96
  406. package/source/directives/octets/Directive.ts +0 -21
  407. package/source/directives/octets/Get.ts +0 -88
  408. package/source/directives/octets/Octets.ts +0 -82
  409. package/source/directives/octets/Put.ts +0 -186
  410. package/source/directives/octets/Workflow.ts +0 -60
  411. package/source/directives/octets/bytes.test.ts +0 -33
  412. package/source/directives/octets/bytes.ts +0 -18
  413. package/source/directives/octets/index.ts +0 -3
  414. package/source/directives/octets/schemas.test.ts +0 -20
  415. package/source/directives/octets/schemas.ts +0 -15
  416. package/source/directives/octets/types.ts +0 -9
  417. package/source/directives/octets/workflows/Execution.ts +0 -130
  418. package/source/directives/octets/workflows/Workflow.ts +0 -51
  419. package/source/directives/octets/workflows/index.ts +0 -1
  420. package/source/directives/require/Directive.ts +0 -5
  421. package/source/directives/require/Headers.ts +0 -19
  422. package/source/directives/require/Require.ts +0 -27
  423. package/source/directives/require/index.ts +0 -3
  424. package/source/discovery.ts +0 -1
  425. package/source/exceptions.ts +0 -47
  426. package/source/index.ts +0 -10
  427. package/source/io.ts +0 -4
  428. package/source/octets.d.ts +0 -17
  429. package/source/root.ts +0 -59
  430. package/source/service.ts +0 -95
  431. package/source/userland.ts +0 -47
  432. package/tsconfig.json +0 -13
  433. package/tsconfig.tsbuildinfo +0 -1
  434. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  435. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  436. package/ui/dist/_app/immutable/chunks/BaWe3aOV.js +0 -1
  437. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  438. package/ui/dist/_app/immutable/chunks/GZTfV0ks.js +0 -6
  439. package/ui/dist/_app/immutable/entry/app.D5v4JoUx.js +0 -2
  440. package/ui/dist/_app/immutable/entry/start.CWxFoIyZ.js +0 -1
  441. package/ui/dist/_app/immutable/nodes/0.DIh5T_5-.js +0 -1
  442. package/ui/dist/_app/immutable/nodes/1.CY-bFzHC.js +0 -1
  443. package/ui/dist/_app/immutable/nodes/2.6Ubd1ItY.js +0 -14
@@ -1,123 +0,0 @@
1
- # Resource introspection
2
-
3
- Any resource can be introspected by sending an `OPTIONS` request to the resource's path.
4
- [Resource discovery](discovery.md) answers every resource at once, at `OPTIONS /.discovery`, and
5
- serves a page that reads it.
6
-
7
- What it answers is what the route's directives leave of what the operation declared, for each
8
- method this identity may reach. A method they may not is not there, nor in `Allow`; a resource
9
- whose every method they may not reach is `403`.
10
-
11
- A credential does not narrow it. What refuses one at an [`anonymous`](access.md#anonymous) route
12
- is about a reply a cache would hold, and a description is not one — so a route that is public is
13
- described to whoever asks, as it is at `/.rpc` and `/.mcp`.
14
-
15
- What the resource itself is, from [`help:node`](help.md), is answered beside the methods rather
16
- than inside one. A verb is upper case, so neither key can be mistaken for the other. A resource
17
- carries `private`, `protected` and `system` where any of its methods does. A method
18
- [`help:method: null`](help.md) hides is in none of this, and is reached as it always was.
19
-
20
- Introspection properties:
21
-
22
- - `title` and `description` what the route states this method is, from
23
- [`help:method`](help.md). The operation states what it is too, and that is not this: it is
24
- written without knowledge of any route, and the same operation mounted twice is two methods
25
- - `anonymous` reaching it takes nothing — [`auth:anonymous`](access.md#anonymous). Said rather
26
- than left unsaid, because it is also what refuses a caller presenting a credential: a client
27
- holding one has to know which methods not to present it to
28
- - `authenticated` reaching it takes being someone, whoever — [`auth:anyone`](access.md#anyone),
29
- `auth:delegate` and `auth:claims`
30
- - `private` reaching it is being the identity it is about — [`auth:id`](access.md#id)
31
- - `protected` reaching it takes a role — [`auth:role`](access.md#role)
32
- - `system` and that role is one of the `system` scope, which guards what an application runs
33
- on rather than what it serves
34
- - `route` route parameters, including what `map:segments` names differently, each as
35
- [`help:route`](help.md) describes it
36
- - `query` the [query parameters](query.md#parameters) this resource declares, each as
37
- [`help:query`](help.md) describes it. What selects records — `criteria`, `sort`, `limit`,
38
- `omit`, `search` — is not among them: it is the same of every queryable resource, and so
39
- not something one says about itself. A [procedure](rpc.md) carries it, because there it is
40
- something the caller sends
41
- - `octets` what sending a file takes, from [`octets:put`](octets.md): the media types it
42
- `accept`s, the `limit` a larger body is refused by, and `stream` where storing it starts a
43
- workflow and the reply arrives in parts rather than as one object
44
- - `input` input schema, restricted by `io:input`, without what the gateway fills itself
45
- - `output` output schema, restricted by `io:output`; absent where the reply is not sent at all.
46
- An operation that declares none is described by what its type answers: a transition, an
47
- observation and an assignment work on the Entity Object, so that is what they are said to
48
- answer — a set of them where the scope is a set. A computation neither uses the scope nor
49
- produces one, and an effect answers whatever it computed, so neither is guessed at. It is a
50
- description and nothing is held to it — an operation answering a projection says so by
51
- declaring its own `output`
52
- - `errors` error codes
53
-
54
- ```http
55
- OPTIONS /pots/:id/ HTTP/1.1
56
- accept: application/yaml
57
- ```
58
-
59
- ```http
60
- 200 OK
61
- Allow: GET, POST
62
-
63
- GET:
64
- description: Every pot there is, newest first.
65
- route:
66
- id:
67
- type: string
68
- pattern: ^[a-fA-F0-9]{32}$
69
- output:
70
- type: array
71
- items:
72
- type: object
73
- properties:
74
- title:
75
- type: string
76
- maxLength: 64
77
- volume:
78
- type: number
79
- exclusiveMinimum: 0
80
- maximum: 1000
81
- temperature:
82
- type: number
83
- exclusiveMinimum: 0
84
- maximum: 300
85
- additionalProperties: false
86
- required:
87
- - id
88
- - title
89
- - volume
90
- POST:
91
- route:
92
- id:
93
- type: string
94
- pattern: ^[a-fA-F0-9]{32}$
95
- input:
96
- type: object
97
- properties:
98
- title:
99
- type: string
100
- maxLength: 64
101
- temperature:
102
- type: number
103
- exclusiveMinimum: 0
104
- maximum: 300
105
- volume:
106
- type: number
107
- exclusiveMinimum: 0
108
- maximum: 1000
109
- additionalProperties: false
110
- required:
111
- - title
112
- - volume
113
- output:
114
- type: object
115
- properties:
116
- id:
117
- type: string
118
- pattern: ^[a-fA-F0-9]{32}$
119
- additionalProperties: false
120
- errors:
121
- - NO_WAY
122
- - WONT_CREATE
123
- ```
@@ -1,167 +0,0 @@
1
- # I/O restrictions
2
-
3
- The Exposition comes with `io` directives to control access to the operation's input and output
4
- properties, and to let an operation state the status of its reply.
5
-
6
- ## Input
7
-
8
- The `io:input` optional directive contains a list of properties that are allowed to be specified in
9
- the request body.
10
-
11
- ```yaml
12
- POST:
13
- endpoint: create
14
- io:input: [name, location]
15
- ```
16
-
17
- The list must be a valid subset of the operation's input properties.
18
-
19
- If `io:input` is specified and the request body is not an object, or contains properties that are
20
- not in the list, the request will be rejected with a `400` status code.
21
-
22
- > Therefore, `io:input` is only applicable to operations which input is an object or an
23
- > array of objects.
24
-
25
- ## Output
26
-
27
- The `io:output` mandatory directive contains a list of properties that are allowed to be included in
28
- the response body.
29
-
30
- ```yaml
31
- GET:
32
- endpoint: observe
33
- io:output: [name, location]
34
- ```
35
-
36
- When an operation does not return an object (e.g., a primitive or a stream), or an object is dynamic
37
- and its properties are not known in advance, `io:output` may have a value of `true` to disable
38
- output restrictions.
39
-
40
- ```yaml
41
- GET:
42
- endpoint: proxy
43
- io:output: true
44
- ```
45
-
46
- If a method declaration lacks `io:output` directive, it will trigger a warning, and its
47
- response will consistently be empty.
48
- If this behavior is intended, a `false` value can be employed to suppress warnings.
49
-
50
- ```yaml
51
- GET:
52
- endpoint: conceal
53
- io:output: false
54
- ```
55
-
56
- Output restrictions are not applied to stream responses, nor to a reply the gateway built out of an
57
- exception — an operation that returns an error is answered with a code and a message of the
58
- gateway's own, and a list of permitted properties has nothing to say about those. A reply the
59
- operation returned is restricted whatever status it carries, see [Status](#status).
60
-
61
- ## Status
62
-
63
- The `io:status` optional directive names a property of the reply that carries the status of the
64
- response. The property is removed from the body.
65
-
66
- ```yaml
67
- POST:
68
- endpoint: register
69
- io:status: status
70
- io:output: [client_id, client_name, error, error_description]
71
- ```
72
-
73
- ```javascript
74
- return { status: 400, error: 'invalid_redirect_uri' }
75
- ```
76
-
77
- ```http
78
- 400 Bad Request
79
-
80
- error: invalid_redirect_uri
81
- ```
82
-
83
- A reply that does not carry the property is answered with the status it would have been. A property
84
- that is not a number is an error.
85
-
86
- This is for an outcome the operation knows and the transport does not — a protocol that states its
87
- error as a body rather than as a status of its own, or a request that created where it might have
88
- updated. Such an operation returns no error: both replies are its output, and `io:output` permits
89
- the properties of both. An operation that does return an error is unaffected — that reply is the
90
- gateway's, and is not restricted.
91
-
92
- ## Throttling
93
-
94
- The `io:throttle` directive limits the rate of requests meeting the specified criteria.
95
-
96
- ```yaml
97
- exposition:
98
- /:
99
- io:throttle:
100
- key:
101
- - route
102
- - ip
103
- condition:
104
- status: 404
105
- requests: 500
106
- interval: 30
107
- ```
108
-
109
- Requests are metered per `key`. A key may spend `requests` at once, and earns them back at a rate of
110
- `requests` per `interval` seconds. A request carrying a key with nothing left to spend is answered
111
- `429 Too Many Requests`, with a `Retry-After` saying how long until one would be admitted again.
112
- `interval` is in seconds.
113
-
114
- So `requests` is the burst, and `requests / interval` the rate it is repaid at. There is no window to
115
- save a budget up in and spend twice across the edge of, and no lockout to sit out: a key that has
116
- overspent is admitted again as soon as it has earned a single request back, and a client that keeps
117
- asking meanwhile is not penalised for it.
118
-
119
- `requests` is a budget for the **whole group** of gateway instances, not for one of them. Instances
120
- reconcile through Redis on a timer, so they converge on one number rather than each enforcing the
121
- limit separately. Between two of those, an instance goes on what it alone has spent — so the group
122
- can overshoot by what the other instances admit within that window, and by no more. The window is a
123
- tenth of `interval`, between a quarter of a second and two seconds, whatever `interval` is. Precise
124
- per-request enforcement is not what this is for.
125
-
126
- An instance that cannot reach Redis keeps throttling on what it has seen itself and keeps serving,
127
- and reports what it could not the next time it gets through.
128
-
129
- ### Key components
130
-
131
- What a request is metered against. Give one, or a list — a list keys on the combination, so
132
- `[route, ip]` meters each address separately on each route.
133
-
134
- - `ip` — the client address, as the request context resolved it. See [Client address](ip.md) for
135
- where it is read from and why.
136
- - `path` — the path the request came in on, `/users/1`.
137
- - `route` — the route as declared, `/users/:id`. Every path matching the route shares one budget,
138
- which `path` cannot do: keyed on `path`, walking ids is a way around the limit.
139
- - `identity` — the authenticated identity. Requests carrying none share a single budget between
140
- them, so pair it with `ip` if that matters.
141
- - `segment: <name>` — the value bound to a named route segment, `1` for `:id` in `/users/:id`.
142
-
143
- ### Conditions
144
-
145
- What is metered, as opposed to what it is metered against. A request that fails a condition is served
146
- and costs nothing. Conditions are evaluated against the response, so they cannot decide whether to
147
- refuse a request — only whether it is charged for, once it has been answered.
148
-
149
- - `status: <code>` — charge only for responses with this status.
150
-
151
- ```yaml
152
- io:throttle:
153
- key: ip
154
- condition:
155
- status: 404
156
- requests: 20
157
- interval: 600
158
- ```
159
-
160
- An address may probe for twenty missing paths at once, and thereafter for one every thirty seconds.
161
- Requests that find something are served and never counted against it.
162
-
163
- ## Introspection
164
-
165
- What these admit is what [`OPTIONS`](introspection.md) states: `io:input` restricts the input
166
- schema, `io:output` the output schema, and a method declaring no `io:output` states no output at
167
- all — nothing of the reply is sent.
@@ -1,24 +0,0 @@
1
- # Client address
2
-
3
- The address a request comes from is resolved once, into the request context, and read from there
4
- by whatever keys on it: the meter of [failed authentications](identity.md#failed-authentications)
5
- and the `ip` key of [`io:throttle`](io.md#key-components).
6
-
7
- ```yaml
8
- # context.toa.yaml
9
-
10
- exposition:
11
- ip: cf-connecting-ip
12
- ```
13
-
14
- `ip` names the header the address is read from. In production the gateway sits behind a load
15
- balancer, an ingress or a CDN: the connection it accepts comes from that machine, so every client
16
- shares one address and nothing tells them apart. The edge is the one that saw the client connect,
17
- and it writes the client's address into a header of its own, `CF-Connecting-IP`, `X-Real-IP` or
18
- `X-Forwarded-For`, depending on the infrastructure. A client may send any of these headers too, so
19
- the gateway trusts none of them on its own: the deployment names the one its edge overwrites, and
20
- where the header holds a list, the last value is the one the edge appended.
21
-
22
- The connection's address is never used. Without `ip`, or for a request that does not carry the
23
- header, the request has no address: the bouncer and a throttle keyed on `ip` let it through and
24
- say so in the log, once per hundred seconds rather than once per request.
@@ -1,123 +0,0 @@
1
- # HTTP context mapping
2
-
3
- The `map` directive family is used to map HTTP request parts to operation call input properties.
4
-
5
- [Features](../features/map.feature).
6
-
7
- ## TL;DR
8
-
9
- ```yaml
10
- exposition:
11
- /:group:
12
- languages: [en, fr] # supported languages
13
- GET:
14
- map:authority: hostname # request authority (e.g., hostname)
15
- map:language: lang # requested language
16
- map:headers: # raw header values
17
- token: x-access-token
18
- map:buffer: body # unparsed request body
19
- map:segments: # route parameters
20
- group: group
21
- map:claims: # Bearer token claims
22
- address: email
23
- verified: email_verified
24
- endpoint: observe
25
- ```
26
-
27
- The operation input type must be an object.
28
- If the input already contains the specified keys, they will be overwritten.
29
-
30
- ## Authority
31
-
32
- The `map:authority` directive maps the [authority identifier](authorities.md) to an operation call
33
- input property specified by the directive value.
34
-
35
- ### Language
36
-
37
- The `map:language` mapping sets the [most matching](https://github.com/jshttp/negotiator) language
38
- code based on the `accept-language` request header and a list of supported languages defined by
39
- the `map:languages` directive, and also adds `accept-language` to the `Vary` HTTP response header
40
- value.
41
-
42
- If none of the supported languages match, the first supported language is used.
43
-
44
- > `map:languages` has a shorthand form: `languages: [en, fr]`.
45
-
46
- ## Header values
47
-
48
- The `map:headers` directive maps the values of HTTP request headers to operation call input
49
- properties.
50
- The value of the directive is a map where keys are the names of the input properties and values are
51
- the names of the HTTP request headers.
52
-
53
- The names of these headers are then included in the `Vary` HTTP response header
54
- and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
55
- of the [CORS](protocol.md#cors).
56
-
57
- [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are combined
58
- as a comma-separated list.
59
-
60
- ## Raw body
61
-
62
- The `map:buffer` directive maps the unparsed request body to an operation call input property.
63
- The directive value is the name of the input property.
64
-
65
- ```yaml
66
- /webhook:
67
- POST:
68
- map:buffer: body
69
- map:headers:
70
- signature: x-signature
71
- endpoint: verify
72
- ```
73
-
74
- The body is read from the request stream as raw bytes and delivered as a UTF-8 string.
75
-
76
- Body parsing is bypassed, so the route does not depend on a supported `Content-Type` or format decoding. The request stream is consumed; a route with `map:buffer` cannot also receive a parsed body from the same request.
77
-
78
- ## Route parameters
79
-
80
- The `map:segments` directive maps the values of route parameters to operation call input properties.
81
- The value of the directive is a map where keys are the names of the input properties, and values are
82
- the names of the route parameters.
83
-
84
- Parameter name may be prefixed with `~`
85
- to indicate that the parameter should not be available to the
86
- remaining directives or used as criteria in the operation call.
87
-
88
- ```yaml
89
- /:id/:tag:
90
- POST:
91
- map:segments:
92
- id: id
93
- tag: ~tag
94
- endpoint: create
95
- ```
96
-
97
- Wildcard routes are supported by using `**` as the parameter name.
98
-
99
- ```yaml
100
- /path/to/**:
101
- GET:
102
- map:segments:
103
- path: '**'
104
- endpoint: observe
105
- ```
106
-
107
- ## Bearer token claims
108
-
109
- The `map:claims` directive maps the values of
110
- the [token claims](https://datatracker.ietf.org/doc/html/rfc7519#section-4).
111
- The value of the directive is a map where keys are the names of the input properties and values are
112
- the names of the claims.
113
-
114
- If the claim is not present in the token or the request is not authenticated using
115
- the [`Bearer` scheme](identity.md#bearer-scheme), the input properties are not set.
116
-
117
- ## Introspection
118
-
119
- A property a mapping fills is not the caller's to send, so [`OPTIONS`](introspection.md) takes it
120
- out of the input. `map:headers` states it under `headers`, naming the header it is read from, and
121
- `map:segments` under `route`, named as the property rather than as the segment. The rest —
122
- `map:claims`, `map:authority`, `map:language`, `map:buffer` — come from the request itself, and a
123
- caller has nowhere to put one.
@@ -1,183 +0,0 @@
1
- # Model Context Protocol
2
-
3
- An application annotates it, and the methods it names as tools are what a model may call.
4
-
5
- ```yaml
6
- exposition:
7
- mcp:
8
- name: Teapots
9
- instructions: A pot is read by its id. A pot that is brewing cannot be emptied.
10
- origins: [https://claude.ai]
11
- ```
12
-
13
- <dl>
14
- <dt><code>name</code></dt>
15
- <dd>Required. What the server calls itself, which a client shows a user.</dd>
16
- <dt><code>instructions</code></dt>
17
- <dd>What a model is told before it calls anything here.</dd>
18
- <dt><code>origins</code></dt>
19
- <dd>Browser origins the endpoint answers. A request carrying an <code>Origin</code> that is not
20
- listed is <code>403</code>, and an empty list admits none; a request carrying none is unaffected.</dd>
21
- <dt><code>anonymous</code></dt>
22
- <dd>Whether the endpoint answers without a credential. It does not unless it says so.</dd>
23
- </dl>
24
-
25
- Without the annotation `/.mcp` is a path like any other, and nothing answers there. The path is
26
- fixed: one an application could choose is one it could collide with a route of its own.
27
-
28
- ## What a tool is
29
-
30
- A tool is an RTD method that says it is one, named as the [procedure](rpc.md#the-name) it is:
31
-
32
- ```yaml
33
- /pots:
34
- GET:
35
- mcp:tool: true
36
- help:method: Every pot there is, newest first.
37
- endpoint: enumerate
38
- /hot:
39
- GET:
40
- query: { criteria: temperature=gt=80 }
41
- mcp:tool: true
42
- help:method:
43
- title: Hot pots
44
- description: The pots that are too hot to pour.
45
- endpoint: enumerate
46
- ```
47
-
48
- A default denies, and a tree holds everything an application serves — its identity endpoints, its
49
- uploads, the machinery of the authorization flow the model already came through. Publishing all of
50
- it would spend a model's context on what it has no business calling.
51
-
52
- `mcp:tool` says only whether the method is published. What the tool is called and what it is for is
53
- [`help:method`](help.md), which is what describes the method everywhere else as well — a tool a
54
- model cannot read the purpose of is one it cannot choose, so declare one beside the other.
55
-
56
- A declaration is inherited by everything below it, as every directive is, and the nearer one wins —
57
- so a node publishes a subtree, and `mcp:tool: false` withdraws one method of it.
58
-
59
- A route whose name a client [cannot spell](rpc.md#what-has-a-name) is refused where the directive
60
- is built, rather than served as a tool that is quietly never listed.
61
-
62
- `tools/list` answers every published method this caller may reach — a method whose directives refuse
63
- them is not listed, and a route with [no name](rpc.md#what-has-a-name) is not either. `tools/call`
64
- answers `404` to a name that is not published, whether or not a route would have taken it: what an
65
- application did not publish is not reachable by guessing what it would have been called.
66
-
67
- `annotations` are read from the verb: `GET` and `HEAD` are `readOnlyHint`, `DELETE` is
68
- `destructiveHint`, `PUT` and `DELETE` are `idempotentHint`.
69
-
70
- ## What a tool takes
71
-
72
- `inputSchema` is the procedure's `params`, which is what the method
73
- [says of itself](introspection.md): a route variable by the name the template gives it, the
74
- querystring under `query`, and what is left is the body. `io:input` restricts it, and a property
75
- `map` fills is not there — a call carries no headers of its own.
76
-
77
- `query` carries what selects records — `criteria`, `sort`, `limit`, `omit`, `search` — beside the
78
- parameters the resource declares. `OPTIONS` states only the latter, because the former is the same
79
- of every queryable resource; here it is stated, because here it is something the caller sends.
80
-
81
- ```yaml
82
- type: object
83
- properties:
84
- id: { type: string, pattern: ^[a-fA-F0-9]{32}$ }
85
- query:
86
- type: object
87
- properties:
88
- criteria: { type: string }
89
- sort: { type: string }
90
- limit: { type: integer, minimum: 1, maximum: 100, default: 10 }
91
- omit: { type: integer, minimum: 0, maximum: 1000, default: 0 }
92
- required: [id]
93
- additionalProperties: false
94
- ```
95
-
96
- ## What a tool answers
97
-
98
- `content` carries one `text` block holding the reply's JSON, and `structuredContent` the reply
99
- itself. A reply of nothing is an empty `content`.
100
-
101
- `outputSchema` is what the operation declares, restricted by `io:output`. An operation's `output` is
102
- optional and normalizes to `{}`, which describes nothing, and none is stated for it — an
103
- application that wants the schema declares the operation's `output`.
104
-
105
- An operation that refuses answers a result with `isError: true` carrying its message, not an error
106
- of the protocol: it is something a model reads and may correct itself by.
107
-
108
- ## Two revisions
109
-
110
- Both are answered from one endpoint that remembers nothing between requests.
111
- [`2026-07-28`](https://modelcontextprotocol.io/specification/2026-07-28) carries the version and
112
- the client's capabilities in every request; `2025-11-25` opens with `initialize`. Which one a
113
- request is, is read from `MCP-Protocol-Version`, or from
114
- `_meta['io.modelcontextprotocol/protocolVersion']` where the header is absent; `initialize` is one
115
- by itself, and a request naming no version is of a revision that sent none.
116
-
117
- | method | |
118
- | --------------------------- | -------------------------------------------------------------------------- |
119
- | `server/discover` | what is served, and who serves it |
120
- | `tools/list` | every tool this caller may reach, in a stable order |
121
- | `tools/call` | the call the tool is |
122
- | `initialize` | the same as `server/discover`, in the shape a client of `2025-11-25` reads |
123
- | `notifications/initialized` | `202`, and nothing done |
124
- | `ping` | `{}` |
125
-
126
- `POST` only, one message per request; `GET` and `DELETE` are `405`. An `Mcp-Session-Id` is ignored
127
- and none is minted, a `Last-Event-ID` is ignored, and `accept` is negotiated as everywhere else.
128
-
129
- Of the modern revision, `MCP-Protocol-Version` and `Mcp-Method` are required, and `Mcp-Name` for a
130
- `tools/call`; each must say what the body says. `_meta` states the protocol version and the client's
131
- capabilities. Every result carries `resultType` and names the server in its own `_meta`, and a
132
- `server/discover` or a `tools/list` carries how long it may be held: half an hour, `public` for the
133
- first and `private` for the second, which is filtered by the identity that asked.
134
-
135
- Neither `listChanged` nor a subscription is declared: both are a stream held open, and this endpoint
136
- holds none.
137
-
138
- ## Authorization
139
-
140
- The endpoint is a protected resource, and an application advertises it as one:
141
-
142
- ```yaml
143
- exposition:
144
- oauth:
145
- authorize: https://app.example.com/oauth/authorize
146
- resources: ['/.mcp']
147
- ```
148
-
149
- Its RFC 9728 document is then read at `/.well-known/oauth-protected-resource/.mcp`, and the
150
- canonical URI of the resource is `https://api.example.com/.mcp`. See [OAuth](oauth.md).
151
-
152
- A request without a credential is `401`, carrying the challenge that names that document — which is
153
- where the flow starts. A call the identity is not authorized to make is `403` with
154
- `error="insufficient_scope"`. Each tool is authorized as the resource it is, against the path and
155
- the verb its name states.
156
-
157
- A route that is [`anonymous`](access.md#anonymous) is reached here whatever the client presented:
158
- the rule that refuses a credentialed request is about a cacheable reply, and what a tool answers is
159
- not one. So a resource that is public over HTTP is a public tool, and nothing in a manifest has to
160
- say it twice.
161
-
162
- ## What refuses
163
-
164
- | | |
165
- | -------- | ------------------------------------------------------ |
166
- | `-32700` | the body is not readable |
167
- | `-32600` | the body is not one JSON-RPC message |
168
- | `-32601` | no method of that name, at `404` |
169
- | `-32602` | the arguments do not fit, or `_meta` states too little |
170
- | `-32603` | anything the gateway did not mean to answer |
171
- | `-32020` | a header says one thing and the body another |
172
- | `-32022` | a revision neither served, naming both |
173
-
174
- The codes MCP reserves for itself are `-32020` to `-32099`, and it has an implementation use none of
175
- `-32000` to `-32019` — which is where [JSON-RPC](rpc.md#what-refuses) has this gateway's own, so none
176
- of those is answered here.
177
-
178
- ## References
179
-
180
- - [The specification](https://modelcontextprotocol.io/specification/2026-07-28)
181
- - [JSON-RPC](rpc.md), where a procedure gets its name
182
- - [Introspection](introspection.md), which is what a tool's schemas are
183
- - [Features](../features/mcp.feature)
Binary file
@@ -1,59 +0,0 @@
1
- # Distributed Peer Discovery
2
-
3
- ## Problem
4
-
5
- Modulo partitioning algorithm `taks.id % replicas == index` requires
6
- to know the number of task processing instances running in the cluster,
7
- and the own index of the current instance.
8
-
9
- ## Forces
10
-
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_.
13
-
14
- ## Solution
15
-
16
- An algorithm that emits `(index, replicas)` once per `interval` seconds, using common Redis
17
- key and atomic increment.
18
-
19
- Define the following parameters:
20
-
21
- - `name`: a name of the task processing (e.g. `mail-sender`)
22
- - `interval`: indexing interval that is deliberately greater than the expected clock skew among
23
- instances
24
-
25
- At the start of each `interval` in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time):
26
-
27
- 1. Calculate an ordinal number of the current interval: `number = ceil(now() / interval)`
28
- 2. Compose a `key` as `{name}:{number}`
29
- 3. Atomically increment a `key` in Redis ([INCR](https://redis.io/docs/latest/commands/incr/))
30
- 4. If `index` is defined (see 5)
31
-
32
- - get the value of previous key `{name}:{number-1}` as `replicas`
33
- - if the `replicas` is defined, emit `(index, replicas)` **algorithm result**
34
-
35
- 5. Store the response (3) in `index`.
36
-
37
- ## Safe index transition
38
-
39
- If the `index` or `replicas` changes, the algorithm consumer must stop consuming new tasks
40
- and execute _safe index transition_, to prevent task duplication or loss.
41
-
42
- The transition can be implemented in a manner similar to the described algorithm, using a dedicated
43
- `{name}:transition` key.
44
- However, this process is considered outside the scope of this document.
45
-
46
- ## Extension
47
-
48
- If the system clocks are too precisely synchronized (skew is less than a round-trip time to Redis),
49
- this may result in continuous [index transitions](#safe-index-transition).
50
-
51
- To mitigate this, the algorithm can be extended with a random delay:
52
-
53
- 1. Before starting the algorithm, define a random constant clock skew, significantly smaller than
54
- `interval`: `skew = random() * (interval / 2)`
55
- 2. Start the algorithm at each `interval + skew`.
56
-
57
- ## Caveats
58
-
59
- - The first result will become known between `interval` and `interval × 2` seconds.