@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,51 +0,0 @@
1
- # Authorities
2
-
3
- Authorities are a mechanism that allows serving multiple domains from a single instance of the
4
- application.
5
-
6
- ## Definition
7
-
8
- The `authorities` definition is a map of authority identifiers to the `:authority` pseudo-header
9
- values.
10
-
11
- ```yaml
12
- # context.toa.yaml
13
-
14
- exposition:
15
- authorities:
16
- one: the.one.com
17
- two: the.two.com
18
- ```
19
-
20
- ## Mappings
21
-
22
- To pass the requested authority to the operation call, [`map:authority` directive](map.md#authority)
23
- can be used.
24
-
25
- ```yaml
26
- # manifest.toa.yaml
27
-
28
- exposition:
29
- /:
30
- GET:
31
- map:authority: hostname
32
- endpoint: observe
33
- ```
34
-
35
- If the value of the `authority` pseudo-header is not present in the `authorities` definition,
36
- then the value is embedded as is.
37
-
38
- The value is lowercased before the lookup. A value that is not a host name or a bracketed IPv6
39
- literal, each with an optional port, is answered with `400 Bad Request`.
40
-
41
- ## Identity
42
-
43
- Credentials stored or issued by the [authentication system](identity.md) are associated with an
44
- authority.
45
- Credentials in one authority are not valid in another,
46
- or may be associated with a different Identity; in other words, Identity exists in the context of an
47
- authority.
48
-
49
- > :warning:<br/>
50
- > Changing the authority identifier will break compatibility with existing stored or issued
51
- > credentials.
@@ -1,72 +0,0 @@
1
- # Caching
2
-
3
- Directive family `cache` implements the
4
- HTTP [Cache-Control](https://datatracker.ietf.org/doc/html/rfc2616#section-14.9).
5
-
6
- ## `cache:control`
7
-
8
- Sets the value of the `Cache-Control` header
9
- for [successful responses](https://datatracker.ietf.org/doc/html/rfc2616#section-10.2)
10
- to [safe HTTP methods](https://developer.mozilla.org/en-US/docs/Glossary/Safe/HTTP).
11
-
12
- ```yaml
13
- /:
14
- GET:
15
- cache:control: max-age=60000
16
- ```
17
-
18
- ### Implicit modifications
19
-
20
- In terms of security, the following implicit modifications are made to the `cache-control` header:
21
-
22
- - If it contains the `public` directive without `no-cache` and the request is authenticated,
23
- the `no-cache` directive is added.
24
- This is done to prevent the storage of authentication tokens in shared caches.
25
- - If it does not contain the `private` directive and the request is authenticated, the `private`
26
- directive is added.
27
- This is to prevent the storage of private data in shared caches.
28
- - If it contains `private` directive and the request is authenticated, then `vary: authorization` is
29
- added.
30
- This is to prevent the reuse of private data when authenticated as another identity.[^1]
31
-
32
- [^1]:
33
- This also will invalidate the cache each time a new token is used for the same identity, thus
34
- limiting the `max-age` value to the token's `refresh` time.
35
- See [Issuing tokens](components.md#issuing-tokens).
36
-
37
- ## `cache:exact`
38
-
39
- Same as `cache:control` without implicit modifications, and set whatever the method.
40
-
41
- ```yaml
42
- /:
43
- GET:
44
- cache:exact: public, max-age=60000
45
- ```
46
-
47
- `cache:control` and the implicit value are set on `GET` and `HEAD` only. `cache:exact` is set on
48
- any method, so a reply that must not be stored can say so:
49
-
50
- ```yaml
51
- /tokens/:
52
- POST:
53
- cache:exact: no-store
54
- ```
55
-
56
- ## Validators
57
-
58
- A reply that carries an `UPDATED` or `CREATED` timestamp says so in `last-modified`, whatever
59
- the method. A reply to a safe request (`GET`, `HEAD`) that carries a `VERSION` is tagged with
60
- it: `etag: "3"`. A request sending the tag back in `if-none-match`, strong or weak (`W/"3"`), is
61
- answered `304 Not Modified` with the tag as it was sent.
62
-
63
- A reply that carries no version has no tag, and a reply to an unsafe request has none either:
64
- its `VERSION` is in the body, and the next `GET` is what a cache validates.
65
-
66
- `if-match` is [concurrency control](query.md#optimistic-concurrency-control), which is the
67
- request's, whatever its method.
68
-
69
- ## References
70
-
71
- - HTTP 14.9.1 [What is cacheable](https://datatracker.ietf.org/doc/html/rfc2616#section-14.9.1)
72
- - See also [features](/extensions/exposition/features/cache.feature)
@@ -1,472 +0,0 @@
1
- # Components and resources
2
-
3
- Exposition comes with a set of components that run within the same process. These components are
4
- configured in the same
5
- way as if they were a part of the Context. Resources exposed by the components
6
- are [isolated](tree.md#directives).
7
-
8
- See [Persistent credentials](credentials.md) for the centralized Basic, federation, and passkey
9
- management API.
10
-
11
- ## Basic credentials
12
-
13
- The `identity.basic` component stores basic credentials.
14
-
15
- ### Password hashing
16
-
17
- Passwords are hashed using the [bcrypt](https://github.com/dcodeIO/bcrypt.js) algorithm with salt
18
- and pepper.
19
-
20
- ```yaml
21
- # context.toa.yaml
22
-
23
- configuration:
24
- identity.basic:
25
- rounds: 10 # salt rounds
26
- pepper: $IDENTITY_BASIC_PEPPER # hashing pepper, a secret
27
- ```
28
-
29
- ### Credentials constraints
30
-
31
- Credential constraints are defined using a set of regular expressions (values must match all of
32
- them).
33
-
34
- ```yaml
35
- # context.toa.yaml
36
-
37
- configuration:
38
- identity.basic:
39
- username:
40
- - ^\S{1,128}$
41
- password:
42
- - ^\S{8,32}$
43
- ```
44
-
45
- > Values in the example above are the default values.
46
-
47
- ### Principal
48
-
49
- When an application is deployed for the first time, there are no credentials, and therefore, there
50
- is no Identity that
51
- could have a Role to manage Roles of other Identities.
52
-
53
- This issue is addressed by using the `principal` key in the configuration:
54
-
55
- ```yaml
56
- # context.toa.yaml
57
-
58
- configuration:
59
- identity.basic:
60
- principal:
61
- authority: example
62
- username: root
63
- ```
64
-
65
- `principal` names the authority and the `username` of the basic credentials. Once these
66
- credentials are created in that authority, the associated Identity is assigned the `system` Role.
67
- The same username in another authority is ordinary credentials.
68
-
69
- Credentials created by inception are granted the Role before the reply, so the token that reply
70
- carries already holds it.
71
-
72
- Once created, the username of the principal cannot be modified.
73
-
74
- ### Resources
75
-
76
- #### `/identity/basic/`
77
-
78
- <code>POST</code> Create new Identity with Basic credentials. Request body is as follows:
79
-
80
- ```yaml
81
- username: string
82
- password: string
83
- ```
84
-
85
- Returns `201 Created` if the Identity is created,
86
- or `422 Unprocessable Entity` with one of the error codes:
87
-
88
- - `INVALID_USERNAME` - `username` does not match constraints
89
- - `INVALID_PASSWORD` - `password` does not match constraints
90
-
91
- Access is [anonymous](access.md#anonymous).
92
-
93
- #### `/identity/basic/:id/`
94
-
95
- > `:id` placeholder refers to an Identity.
96
-
97
- <code>PUT</code> Update basic credentials. Request body is as follows:
98
-
99
- ```yaml
100
- username?: string
101
- password?: string
102
- ```
103
-
104
- Access requires basic credentials of the modified Identity or `system:identity:basic` role.
105
-
106
- <code>POST</code> Incept new basic credentials. Request body is as follows:
107
-
108
- ```yaml
109
- username: string
110
- password: string
111
- ```
112
-
113
- Identity should not have associated basic credentials. Access requires any credentials of the Identity.
114
-
115
- #### `/identity/basic/usernames/:username/`
116
-
117
- <code>GET</code> Check if the username is available.
118
-
119
- `username` must be Base64 URL encoded.
120
-
121
- Returns empty response with status `204` if the username is already taken or `404` if it is available.
122
-
123
- ## Identity federation (OpenID connect)
124
-
125
- The `identity.federation` component manages OpenID Connect federated identities.
126
-
127
- Both implicit identities creation and forced [identity inception](./identity.md) are supported
128
- as in case with basic credentials. `principal` is also working in the same way.
129
-
130
- The configuration schema alongside default values is described in
131
- the [component manifest](../components/identity.federation/manifest.toa.yaml).
132
-
133
- No federated tokens are accepted by default until at least one entry is added to the `trust`
134
- configuration.
135
-
136
- Issuer metadata is loaded from `<iss>/.well-known/openid-configuration`; signing keys are then
137
- loaded from its `jwks_uri`. These requests, including Authorization Code token exchange, use the
138
- built-in `context.fetch`, so they participate in standard HTTP telemetry and connection pooling.
139
- JWKS resolvers are cached per fetch instance and issuer.
140
-
141
- ```yaml
142
- # context.toa.yaml
143
-
144
- configuration:
145
- identity.federation:
146
- trust:
147
- - iss: https://token.actions.githubusercontent.com
148
- aud:
149
- - https://github.com/tinovyatkin
150
- - https://github.com/temich
151
-
152
- - iss: https://accounts.google.com
153
- aud: <GOOGLE_CLIENT_ID>
154
- ```
155
-
156
- ## Local tokens
157
-
158
- The `identity.tokens` component manages local authentication tokens.
159
-
160
- These tokens carry the information required to authenticate the Identity and authorize access.
161
-
162
- ### Issuing tokens
163
-
164
- The new token is issued each time the request is made:
165
-
166
- 1. Using authentication scheme other than `Token`.
167
- 2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
168
-
169
- When the token is issued it is sent in the `authorization` response header and the `cache-control`
170
- is set to `no-store`.
171
-
172
- ```http
173
- authorization: Token ...
174
- cache-control: no-store
175
- ```
176
-
177
- ### Custom tokens
178
-
179
- Custom tokens can be issued with a specific set of permissions and scopes for the own Identity or by
180
- an Identity with the `system:identity:tokens` role.
181
-
182
- Tokens are issued with custom secret keys and are not subject to [token rotation](#token-rotation).
183
- To invalidate a custom token, its secret key must be deleted.
184
-
185
- Custom tokens have no `refresh` period, that is, never become obsolete and never refreshed.
186
-
187
- ```
188
- POST /identity/tokens/<identity>/
189
- host: nex.toa.io
190
- authorization: ...
191
- accept: application/yaml
192
- content-type: application/yaml
193
-
194
- lifetime: 3600
195
- label: CI deployment token
196
- scopes: [app:developer]
197
- permissions:
198
- /users/fc8e66dd/: [GET, PUT]
199
- /posts/fc8e66dd/**/comments/: [*]
200
- ```
201
-
202
- ```
203
- 201 Created
204
- content-type: application/yaml
205
-
206
- kid: <key-id>
207
- exp: <unix-time-ms>
208
- token: <token>
209
- ```
210
-
211
- - `lifetime`: Issued token will be valid for this period
212
- (default is specified in [the configuration](#token-rotation)).
213
- The value of `0` means the token will not expire, which is supported, but
214
- **strongly not recommended** for production environments.
215
- - `label`: Required human-readable name used when listing and revoking issued tokens.
216
- - `scopes`: Issued token will assume only specified [role scopes](access.md#roles).
217
- - `permissions`: Issued token will have permissions to access only specified resources and methods.
218
- Supports [glob patterns](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
219
- and a wildcard method.
220
- Patterns are matched against the request path as it is routed: normalized, without the query
221
- string.
222
-
223
- > `roles` and `permissions` are additional restrictions applied on top of the Identity’s inherent
224
- > privileges.
225
-
226
- ### Custom token invalidation
227
-
228
- A custom token is invalidated through its secret key. The key is revoked, and every token issued
229
- with it is refused, when the Identity is [banned](#banned-identities), its
230
- [Basic credentials](#basic-credentials) are modified, or one of its [roles](#roles) is revoked.
231
- The key can also be deleted by the Identity that issued the token or by an Identity with the
232
- `system:identity:keys` role.
233
-
234
- ```
235
- DELETE /identity/keys/<identity>/<key.id>/
236
- authorization: ...
237
- ```
238
-
239
- The key `id` is returned as `kid` when the token is issued, is visible in the JWE protected header,
240
- and can also be obtained by listing issued token keys. The secret key itself is never returned by
241
- the listing endpoint.
242
-
243
- ```
244
- GET /identity/keys/<identity>/
245
- authorization: ...
246
- ```
247
-
248
- The listing returns `id`, `label`, optional `expires`, `revokedAt` where the key is revoked, and
249
- `CREATED`. Revocation and deletion prevent new cache lookups from finding a usable key. A runtime
250
- that already cached it can continue accepting the token for up to `identity.tokens.cache.ttl`
251
- milliseconds (10 minutes by default).
252
-
253
- Both listing and deletion require credentials of the owning Identity or the
254
- `system:identity:keys` role. Key creation is internal to `identity.tokens`; there is no public
255
- endpoint that returns a stored secret.
256
-
257
- ### Token encryption
258
-
259
- Issued tokens are compact JWE tokens encrypted with direct symmetric encryption. Their protected
260
- header is `{ alg: 'dir', enc: 'A256GCM', typ: 'JWT', kid: <key id> }`. Keys are configured in one
261
- `keys` array. The first entry whose `format` is `jwe` or omitted is the active issuance key.
262
- Keys are 256-bit secrets encoded with base64url and can be generated with `toa key`.
263
-
264
- The optional `format` is `jwe` by default. Entries with `format: paseto` contain legacy PASETO
265
- V3.local secrets and are used only to read old tokens. Legacy tokens are always marked for refresh;
266
- only JWE tokens are issued.
267
- The `format` property is transitional and can be removed together with the PASETO entries after the
268
- legacy compatibility window ends.
269
-
270
- ```yaml
271
- # context.toa.yaml
272
-
273
- configuration:
274
- identity.tokens:
275
- keys:
276
- - id: 2026q3
277
- key: $IDENTITY_TOKENS_ENCRYPTION_KEY0
278
- - id: legacy
279
- key: $IDENTITY_TOKENS_KEY0
280
- format: paseto
281
- ```
282
-
283
- At least one JWE entry is required. PASETO entries are required only while previously issued legacy
284
- tokens must remain readable.
285
-
286
- > Valid secret key may be generated using the [`toa key` command](/runtime/cli/readme.md#key).
287
-
288
- ### Token rotation
289
-
290
- Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
291
- period, the token is considered obsolete (yet still valid), and a new token
292
- is [issued](#issuing-tokens) unless the provided one has been [revoked](#token-revocation).
293
-
294
- This essentially means that if the client uses the token at least once every `lifetime` period, it
295
- will always have a valid token to authenticate with.
296
- Also, token revocation or changing roles of an Identity will take effect once the `refresh` period
297
- of the currently issued tokens has expired.
298
-
299
- A change of what an Identity may do reaches every credential it holds: a token issued by the
300
- gateway within `refresh`, a [custom token](#custom-tokens) within `cache.ttl`.
301
-
302
- Adjusting these two values is a delicate trade-off between security, performance and client
303
- convenience.
304
-
305
- ```yaml
306
- # context.toa.yaml
307
-
308
- configuration:
309
- identity.tokens:
310
- lifetime: 2592000 # seconds, 30 days
311
- refresh: 600 # seconds, 10 minutes
312
- ```
313
-
314
- > Values in the example above are the default values.
315
-
316
- ### Token revocation
317
-
318
- All currently issued tokens of an Identity are revoked when:
319
-
320
- 1. [Basic credentials](#basic-credentials) associated with the Identity are modified.
321
- 2. Identity is [banned](#banned-identities).
322
-
323
- Token revocation takes effect once the `refresh` period of the currently issued tokens has expired.
324
- [Custom tokens](#custom-tokens) are revoked through their keys, within `cache.ttl`.
325
-
326
- ### Secret rotation
327
-
328
- Tokens are always encrypted using the first JWE entry of the `keys` array and decrypted by the
329
- entry in the corresponding format branch whose `id` matches the token's `kid`.
330
-
331
- Rotation uses array order rather than object property order: index `0` is active for issuance and
332
- the remaining entries are decrypt-only. Use the staged procedure below so every runtime knows the
333
- new key before it becomes active.
334
-
335
- Old keys must remain configured until every token issued with them has expired. In the default
336
- configuration this means retaining them for at least `lifetime` (30 days) after making a new key
337
- active. The shorter `refresh` interval only controls replacement during active client use and is
338
- not a safe removal window for clients that remain idle.
339
-
340
- > Let's say you are adding a new secret key each quarter: `2024Q1`, `2024Q2` and so on.
341
- > The old key `2024Q1` must be removed only after the maximum lifetime of tokens issued with it has
342
- > elapsed.
343
-
344
- ```yaml
345
- # context.toa.yaml
346
-
347
- configuration:
348
- identity.tokens:
349
- keys:
350
- - id: 2026q3
351
- key: $TOKEN_ENCRYPTION_KEY_2026Q3
352
- - id: 2026q4
353
- key: $TOKEN_ENCRYPTION_KEY_2026Q4
354
- ```
355
-
356
- 1. First deploy both keys everywhere with the current key at index `0`, as shown above.
357
- 2. In an atomic rollout, move the new entry to index `0` and keep the current entry after it.
358
- All instances can then decrypt tokens encrypted with both the new key and the current key.
359
-
360
- ```yaml
361
- # context.toa.yaml
362
-
363
- configuration:
364
- identity.tokens:
365
- keys:
366
- - id: 2026q4
367
- key: $TOKEN_ENCRYPTION_KEY_2026Q4
368
- - id: 2026q3
369
- key: $TOKEN_ENCRYPTION_KEY_2026Q3
370
- ```
371
-
372
- 3. Remove `2026q3` only after its last possible token has expired.
373
-
374
- The PASETO-to-JWE runtime migration must also be atomic: legacy runtimes cannot decrypt newly
375
- issued JWE tokens. Keep every `format: paseto` entry until its last token has expired;
376
- `toa key --format paseto` exists only for maintaining those legacy secrets.
377
-
378
- ### Token resources
379
-
380
- `/identity/tokens/`
381
-
382
- `POST` Issue a new token for the Identity. Request body is as follows:
383
-
384
- ```yaml
385
- lifetime?: number # seconds
386
- ```
387
-
388
- Providing a value of `0` will result in the token being issued with no expiration.
389
- However, it will still become invalid once the encryption key used is out
390
- of [rotation](#secret-rotation).
391
-
392
- ## Roles
393
-
394
- The `identity.roles` component manages roles of an Identity used
395
- by [access authorization](access.md#role).
396
-
397
- ### `/identity/roles/:id/`
398
-
399
- `GET` Get roles of an Identity.
400
-
401
- Access requires credentials of the Identity or `system:identity:roles` role.
402
-
403
- `POST` Add a role to an Identity. Request body is as follows:
404
-
405
- ```yaml
406
- role: string
407
- ```
408
-
409
- To assign arbitrary roles, the `system:identity:roles` role is required.
410
-
411
- An Identity having `system:identity:roles:delegation` role can delegate roles within its own
412
- Role Scopes (see [Role Hierarchies](access.md#hierarchies)), except roles within the
413
- `system:identity:roles` scope: the right to delegate is not delegated.
414
-
415
- ### `/identity/roles/:id/:role/`
416
-
417
- `DELETE` Revoke a role of an Identity. The `system:identity:roles` role is required.
418
-
419
- A Token carries the roles it was issued with; a change reaches its holder when the token is
420
- [refreshed](#token-rotation). Revoking a role also revokes the [custom tokens](#custom-tokens) of
421
- the Identity, which are issued again with the roles it has left.
422
-
423
- ## Banned Identities
424
-
425
- The `identity.bans` component manages banned identities.
426
- A banned identity will fail to authenticate with any associated credentials
427
- (except [tokens](#local-tokens) within the `refresh` period).
428
-
429
- ```http
430
- PUT /identity/bans/:id/
431
- authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
432
- content-type: application/yaml
433
-
434
- banned: true
435
- comment: Bye bye
436
- ```
437
-
438
- Access requires `system:identity:bans` role.
439
-
440
- ## Authentication echo
441
-
442
- Exposition implements a predefined resource `/identity/` with the `GET` method, which returns the
443
- Identity resolved by the provided credentials.
444
-
445
- ```http
446
- GET /identity/
447
- authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
448
- accept: application/yaml
449
- ```
450
-
451
- ```
452
- 200 OK
453
-
454
- id: fc8e66ddd51d45eea89602c9dd38a542
455
- roles:
456
- - developer
457
- - system:identity:roles
458
- ```
459
-
460
- When no credentials are provided, transient Identity is created.
461
-
462
- ```http
463
- GET /identity/
464
- accept: application/yaml
465
- ```
466
-
467
- ```
468
- 201 Created
469
-
470
- id: 332017649c814649b25ee466c1fe4534
471
- roles: []
472
- ```
@@ -1,101 +0,0 @@
1
- # Consent
2
-
3
- The one endpoint of the [authorization server](oauth.md) that needs a person, and so the one this
4
- extension does not serve. An application serves it at the URL its `exposition.oauth.authorize`
5
- names.
6
-
7
- The page is reached by a client opening it in the user's browser. It authenticates the user, shows
8
- them who is asking, and on their assent redirects back to the client with a code.
9
-
10
- ## What the page receives
11
-
12
- ```
13
- GET https://app.example.com/oauth/authorize
14
- ?response_type=code
15
- &client_id=https%3A%2F%2Fclaude.ai%2Foauth%2Fclaude-code-client-metadata
16
- &redirect_uri=http%3A%2F%2Flocalhost%3A3118%2Fcallback
17
- &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
18
- &code_challenge_method=S256
19
- &state=af0ifjsldkj
20
- &resource=https%3A%2F%2Fapi.example.com%2Fmcp
21
- &scope=app:notes
22
- ```
23
-
24
- `state` is the client's and is returned untouched. `code_challenge`, `code_challenge_method`,
25
- `client_id`, `redirect_uri` and `resource` are passed on as they arrived.
26
-
27
- ## What the page does
28
-
29
- The user is authenticated by whatever means the application already offers. The page then holds
30
- that identity's own `Token`, and makes two calls with it.
31
-
32
- Who is asking:
33
-
34
- ```http
35
- GET /identity/clients/https%3A%2F%2Fclaude.ai%2Foauth%2Fclaude-code-client-metadata/ HTTP/1.1
36
- authorization: Token …
37
- ```
38
-
39
- ```yaml
40
- client_id: https://claude.ai/oauth/claude-code-client-metadata
41
- client_name: Claude Code
42
- client_uri: https://claude.ai
43
- logo_uri: https://claude.ai/logo.png
44
- redirect_uris: [http://localhost/callback, http://127.0.0.1/callback]
45
- ```
46
-
47
- The page displays `client_name`, and **the host of `redirect_uri`**. A loopback redirect is
48
- indistinguishable from any other local process, so the user is told where the code will be sent.
49
-
50
- On assent:
51
-
52
- ```http
53
- POST /identity/grants/:identity/ HTTP/1.1
54
- authorization: Token …
55
- content-type: application/json
56
-
57
- {"client": "…", "redirect": "…", "challenge": "…", "method": "S256",
58
- "scope": ["app:notes"], "resource": ["https://api.example.com/mcp"]}
59
- ```
60
-
61
- ```http
62
- 201 Created
63
- cache-control: no-store
64
-
65
- {"code": "SplxlOBeZQQYbYS6WxSbIA", "expires_in": 60}
66
- ```
67
-
68
- `:identity` is the id of the identity that consents, which is the one the page authenticated.
69
-
70
- ## What the page answers
71
-
72
- On assent, a redirect carrying the code, the client's `state`, and the issuer:
73
-
74
- ```
75
- 302 Found
76
- location: http://localhost:3118/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=af0ifjsldkj&iss=https%3A%2F%2Fapi.example.com
77
- ```
78
-
79
- A single-page application does this with `location.assign`; nothing requires a server redirect.
80
-
81
- `iss` is [RFC 9207](https://www.rfc-editor.org/rfc/rfc9207), and the metadata declares that it is
82
- sent, so a client rejects a response without it. Its value is the `issuer` of
83
- `/.well-known/oauth-authorization-server`, which the page may read.
84
-
85
- On refusal, a redirect saying so, not an error page:
86
-
87
- ```
88
- 302 Found
89
- location: http://localhost:3118/callback?error=access_denied&state=af0ifjsldkj&iss=https%3A%2F%2Fapi.example.com
90
- ```
91
-
92
- ## Errors
93
-
94
- `400` with `error` and `error_description` is answered when the client is unknown, when the
95
- redirect is not one that client may receive a code at, or when the challenge method is not `S256`.
96
- A redirect that was not registered must not be redirected to; the page states the refusal itself.
97
-
98
- ## Consent is asked every time
99
-
100
- A grant is recorded, and `GET /identity/grants/:identity/` lists what a user allowed, but it is
101
- not consulted to skip this page.