@toa.io/extensions.exposition 1.0.0-alpha.291 → 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 (526) 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 +25 -13
  6. package/transpiled/Discovery/Explorer.js +1 -1
  7. package/transpiled/Discovery/Explorer.js.map +1 -1
  8. package/transpiled/Discovery/Site.js +1 -1
  9. package/transpiled/Discovery/Site.js.map +1 -1
  10. package/transpiled/Discovery/trunk.js +1 -1
  11. package/transpiled/Discovery/trunk.js.map +1 -1
  12. package/transpiled/Endpoint.js +3 -0
  13. package/transpiled/Endpoint.js.map +1 -1
  14. package/transpiled/Factory.js +1 -1
  15. package/transpiled/Factory.js.map +1 -1
  16. package/transpiled/Gateway.js +1 -1
  17. package/transpiled/Gateway.js.map +1 -1
  18. package/transpiled/HTTP/Server.d.ts +1 -1
  19. package/transpiled/HTTP/Server.js +1 -1
  20. package/transpiled/HTTP/Server.js.map +1 -1
  21. package/transpiled/Introspection.d.ts +6 -0
  22. package/transpiled/Introspection.js +1 -0
  23. package/transpiled/Introspection.js.map +1 -1
  24. package/transpiled/MCP/Server.d.ts +1 -1
  25. package/transpiled/MCP/Server.js +1 -1
  26. package/transpiled/MCP/Server.js.map +1 -1
  27. package/transpiled/MCP/discover.d.ts +1 -1
  28. package/transpiled/MCP/schema.js +2 -2
  29. package/transpiled/Query.d.ts +2 -12
  30. package/transpiled/Query.js +3 -13
  31. package/transpiled/Query.js.map +1 -1
  32. package/transpiled/RPC/Dispatcher.d.ts +1 -1
  33. package/transpiled/RPC/Dispatcher.js +2 -2
  34. package/transpiled/RPC/Dispatcher.js.map +1 -1
  35. package/transpiled/RTD/Endpoint.d.ts +2 -3
  36. package/transpiled/RTD/Tree.js +1 -1
  37. package/transpiled/RTD/Tree.js.map +1 -1
  38. package/transpiled/RTD/factory.js +1 -1
  39. package/transpiled/RTD/factory.js.map +1 -1
  40. package/transpiled/RTD/syntax/index.d.ts +1 -2
  41. package/transpiled/RTD/syntax/index.js +1 -2
  42. package/transpiled/RTD/syntax/index.js.map +1 -1
  43. package/transpiled/Tenant.js +1 -1
  44. package/transpiled/Tenant.js.map +1 -1
  45. package/transpiled/directives/auth/Authorization.js +1 -1
  46. package/transpiled/directives/auth/Authorization.js.map +1 -1
  47. package/transpiled/directives/io/IO.js +1 -1
  48. package/transpiled/directives/io/IO.js.map +1 -1
  49. package/transpiled/directives/oauth/documents.d.ts +1 -1
  50. package/transpiled/index.d.ts +0 -2
  51. package/transpiled/index.js +0 -2
  52. package/transpiled/index.js.map +1 -1
  53. package/transpiled/service.js +1 -1
  54. package/transpiled/service.js.map +1 -1
  55. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  56. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  57. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  58. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  59. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  60. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  61. package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
  62. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  63. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  64. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  65. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  66. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  67. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  68. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  69. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  70. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  71. package/ui/dist/_app/version.json +1 -1
  72. package/ui/dist/index.html +12 -12
  73. package/CHANGELOG.md +0 -35
  74. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  75. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  76. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  77. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  78. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  79. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  80. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  81. package/components/identity.credentials/source/list.test.ts +0 -70
  82. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  83. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  84. package/components/identity.federation/source/list.test.ts +0 -41
  85. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  86. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  87. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  88. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  89. package/components/identity.passkeys/source/errors.test.ts +0 -34
  90. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  91. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  92. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  93. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  94. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  95. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  96. package/components/identity.tokens/source/issue.test.ts +0 -73
  97. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  98. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  99. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  100. package/context.toa.yaml +0 -31
  101. package/cucumber.mjs +0 -7
  102. package/documentation/.assets/ia3-dark.jpg +0 -0
  103. package/documentation/.assets/ia3-light.jpg +0 -0
  104. package/documentation/.assets/overview-dark.jpg +0 -0
  105. package/documentation/.assets/overview-light.jpg +0 -0
  106. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  107. package/documentation/.assets/role-scopes-light.jpg +0 -0
  108. package/documentation/.assets/rtd-dark.jpg +0 -0
  109. package/documentation/.assets/rtd-light.jpg +0 -0
  110. package/documentation/access.md +0 -350
  111. package/documentation/authorities.md +0 -51
  112. package/documentation/cache.md +0 -72
  113. package/documentation/components.md +0 -472
  114. package/documentation/consent.md +0 -101
  115. package/documentation/credentials.md +0 -88
  116. package/documentation/dev.md +0 -30
  117. package/documentation/discovery.md +0 -81
  118. package/documentation/flow.md +0 -44
  119. package/documentation/help.md +0 -122
  120. package/documentation/identity.md +0 -304
  121. package/documentation/introspection.md +0 -123
  122. package/documentation/io.md +0 -167
  123. package/documentation/ip.md +0 -24
  124. package/documentation/map.md +0 -123
  125. package/documentation/mcp.md +0 -183
  126. package/documentation/notes/desync.jpg +0 -0
  127. package/documentation/notes/peers.md +0 -59
  128. package/documentation/notes/sse.md +0 -71
  129. package/documentation/notes/throttling.md +0 -122
  130. package/documentation/oauth.md +0 -180
  131. package/documentation/octets.md +0 -334
  132. package/documentation/passkeys.md +0 -11
  133. package/documentation/protocol.md +0 -120
  134. package/documentation/query.md +0 -324
  135. package/documentation/require.md +0 -15
  136. package/documentation/rpc.md +0 -154
  137. package/documentation/tracing.md +0 -70
  138. package/documentation/tree.md +0 -199
  139. package/features/access.feature +0 -596
  140. package/features/annotation.feature +0 -32
  141. package/features/auth.assert.feature +0 -55
  142. package/features/auth.bearer.feature +0 -120
  143. package/features/auth.claims.feature +0 -171
  144. package/features/auth.incept.feature +0 -166
  145. package/features/auth.input.feature +0 -59
  146. package/features/authorities.basic.feature +0 -141
  147. package/features/authorities.feature +0 -71
  148. package/features/authorities.federation.feature +0 -100
  149. package/features/authorities.tokens.feature +0 -117
  150. package/features/body.feature +0 -76
  151. package/features/cache.feature +0 -368
  152. package/features/configuration.feature +0 -206
  153. package/features/cors.feature +0 -127
  154. package/features/credentials.feature +0 -106
  155. package/features/debug.feature +0 -34
  156. package/features/dev.feature +0 -90
  157. package/features/directives.feature +0 -61
  158. package/features/discovery.feature +0 -213
  159. package/features/discovery.ui.feature +0 -213
  160. package/features/dynamic.feature +0 -192
  161. package/features/errors.feature +0 -258
  162. package/features/etag.feature +0 -239
  163. package/features/flow.feature +0 -148
  164. package/features/help.feature +0 -512
  165. package/features/identity.bans.feature +0 -200
  166. package/features/identity.basic.feature +0 -666
  167. package/features/identity.feature +0 -240
  168. package/features/identity.federation.feature +0 -396
  169. package/features/identity.otp.feature +0 -142
  170. package/features/identity.roles.feature +0 -568
  171. package/features/identity.tokens.custom.feature +0 -430
  172. package/features/identity.tokens.feature +0 -131
  173. package/features/interruptions.feature +0 -20
  174. package/features/introspection.feature +0 -565
  175. package/features/introspection.map.feature +0 -108
  176. package/features/io.feature +0 -204
  177. package/features/io.throttle.feature +0 -166
  178. package/features/map.feature +0 -360
  179. package/features/mcp.feature +0 -753
  180. package/features/methods.feature +0 -48
  181. package/features/oauth.clients.feature +0 -195
  182. package/features/oauth.discovery.feature +0 -164
  183. package/features/oauth.grants.feature +0 -301
  184. package/features/octets.cloudinary.feature +0 -233
  185. package/features/octets.download.feature +0 -194
  186. package/features/octets.entries.feature +0 -83
  187. package/features/octets.feature +0 -306
  188. package/features/octets.head.feature +0 -40
  189. package/features/octets.location.feature +0 -83
  190. package/features/octets.meta.feature +0 -117
  191. package/features/octets.workflows.feature +0 -565
  192. package/features/passkeys.feature +0 -66
  193. package/features/probes.feature +0 -18
  194. package/features/query.feature +0 -389
  195. package/features/realtime.feature +0 -34
  196. package/features/require.feature +0 -66
  197. package/features/response.feature +0 -103
  198. package/features/routes.feature +0 -224
  199. package/features/rpc.feature +0 -429
  200. package/features/server.feature +0 -21
  201. package/features/site/_app/immutable/asset.js +0 -1
  202. package/features/site/favicon.ico +0 -0
  203. package/features/site/index.html +0 -10
  204. package/features/steps/.env.example +0 -5
  205. package/features/steps/Captures.ts +0 -20
  206. package/features/steps/Cloudinary.ts +0 -12
  207. package/features/steps/Common.ts +0 -38
  208. package/features/steps/Components.ts +0 -115
  209. package/features/steps/Database.ts +0 -106
  210. package/features/steps/Gateway.ts +0 -240
  211. package/features/steps/HTTP.ts +0 -96
  212. package/features/steps/IDP.ts +0 -361
  213. package/features/steps/Identity.ts +0 -54
  214. package/features/steps/OTP.ts +0 -42
  215. package/features/steps/Parameters.ts +0 -162
  216. package/features/steps/Probe.ts +0 -38
  217. package/features/steps/Realtime.ts +0 -175
  218. package/features/steps/Workspace.ts +0 -48
  219. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  220. package/features/steps/components/audit/operations/record.js +0 -5
  221. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  222. package/features/steps/components/echo/operations/affect.js +0 -3
  223. package/features/steps/components/echo/operations/compute.js +0 -3
  224. package/features/steps/components/echo/operations/echo.js +0 -3
  225. package/features/steps/components/echo/operations/error.js +0 -7
  226. package/features/steps/components/echo/operations/identity.js +0 -3
  227. package/features/steps/components/echo/operations/parameters.js +0 -3
  228. package/features/steps/components/echo/operations/ping.js +0 -3
  229. package/features/steps/components/echo/operations/unwrap.js +0 -3
  230. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  231. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  232. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  233. package/features/steps/components/greeter/operations/greet.js +0 -3
  234. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  235. package/features/steps/components/notify/operations/send.js +0 -5
  236. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  237. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  238. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  239. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  240. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  241. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  242. package/features/steps/components/octets.tester/operations/err.js +0 -14
  243. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  244. package/features/steps/components/octets.tester/operations/id.js +0 -5
  245. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  246. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  247. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  248. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  249. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  250. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  251. package/features/steps/components/orders/operations/create.js +0 -7
  252. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  253. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  254. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  255. package/features/steps/components/pricing/operations/quote.js +0 -3
  256. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  257. package/features/steps/components/sequences/operations/numbers.js +0 -5
  258. package/features/steps/components/sequences/operations/tokens.js +0 -14
  259. package/features/steps/components/users/manifest.toa.yaml +0 -30
  260. package/features/steps/components/users/operations/create.js +0 -11
  261. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  262. package/features/steps/map.ts +0 -30
  263. package/features/steps/tsconfig.json +0 -9
  264. package/features/streams.feature +0 -35
  265. package/features/timestamps.feature +0 -41
  266. package/features/timing.feature +0 -49
  267. package/features/tracing.feature +0 -123
  268. package/schemas/annotation.cos.yaml +0 -125
  269. package/schemas/call.cos.yaml +0 -18
  270. package/schemas/directive.cos.yaml +0 -7
  271. package/schemas/method.cos.yaml +0 -23
  272. package/schemas/node.cos.yaml +0 -22
  273. package/schemas/query.cos.yaml +0 -31
  274. package/schemas/querystring.cos.yaml +0 -19
  275. package/schemas/range.cos.yaml +0 -10
  276. package/schemas/route.cos.yaml +0 -6
  277. package/source/Annotation.ts +0 -89
  278. package/source/Branch.test.ts +0 -40
  279. package/source/Branch.ts +0 -44
  280. package/source/Composition.ts +0 -51
  281. package/source/Context.ts +0 -11
  282. package/source/Directive.test.ts +0 -199
  283. package/source/Directive.ts +0 -248
  284. package/source/Discovery/Explorer.ts +0 -34
  285. package/source/Discovery/Site.test.ts +0 -147
  286. package/source/Discovery/Site.ts +0 -202
  287. package/source/Discovery/index.ts +0 -3
  288. package/source/Discovery/tree.test.ts +0 -175
  289. package/source/Discovery/tree.ts +0 -77
  290. package/source/Discovery/trunk.ts +0 -33
  291. package/source/Endpoint.test.ts +0 -67
  292. package/source/Endpoint.ts +0 -157
  293. package/source/Factory.ts +0 -42
  294. package/source/Gateway.ts +0 -390
  295. package/source/HTTP/Context.ts +0 -143
  296. package/source/HTTP/Probe.ts +0 -99
  297. package/source/HTTP/Server.ts +0 -430
  298. package/source/HTTP/Timing.ts +0 -14
  299. package/source/HTTP/address.test.ts +0 -28
  300. package/source/HTTP/address.ts +0 -16
  301. package/source/HTTP/exceptions.ts +0 -99
  302. package/source/HTTP/formats/form.ts +0 -21
  303. package/source/HTTP/formats/index.ts +0 -36
  304. package/source/HTTP/formats/json.ts +0 -14
  305. package/source/HTTP/formats/msgpack.ts +0 -14
  306. package/source/HTTP/formats/text.ts +0 -10
  307. package/source/HTTP/formats/yaml.test.ts +0 -22
  308. package/source/HTTP/formats/yaml.ts +0 -40
  309. package/source/HTTP/index.ts +0 -6
  310. package/source/HTTP/messages.test.ts +0 -196
  311. package/source/HTTP/messages.ts +0 -186
  312. package/source/HTTP/types.ts +0 -39
  313. package/source/Interception.ts +0 -37
  314. package/source/Introspection.ts +0 -179
  315. package/source/MCP/Server.ts +0 -335
  316. package/source/MCP/discover.ts +0 -51
  317. package/source/MCP/errors.ts +0 -80
  318. package/source/MCP/index.ts +0 -1
  319. package/source/MCP/schema.test.ts +0 -91
  320. package/source/MCP/schema.ts +0 -94
  321. package/source/MCP/tools.ts +0 -144
  322. package/source/MCP/types.ts +0 -84
  323. package/source/Mapping.ts +0 -101
  324. package/source/Query.test.ts +0 -54
  325. package/source/Query.ts +0 -277
  326. package/source/RPC/Context.ts +0 -75
  327. package/source/RPC/Dispatcher.ts +0 -150
  328. package/source/RPC/errors.test.ts +0 -77
  329. package/source/RPC/errors.ts +0 -82
  330. package/source/RPC/index.ts +0 -1
  331. package/source/RPC/names.test.ts +0 -141
  332. package/source/RPC/names.ts +0 -176
  333. package/source/RPC/types.ts +0 -34
  334. package/source/RTD/Context.ts +0 -16
  335. package/source/RTD/Directives.ts +0 -126
  336. package/source/RTD/Endpoint.ts +0 -27
  337. package/source/RTD/Match.ts +0 -11
  338. package/source/RTD/Method.ts +0 -39
  339. package/source/RTD/Node.ts +0 -169
  340. package/source/RTD/Route.ts +0 -93
  341. package/source/RTD/Tree.ts +0 -137
  342. package/source/RTD/expiration.test.ts +0 -81
  343. package/source/RTD/factory.ts +0 -105
  344. package/source/RTD/index.ts +0 -8
  345. package/source/RTD/segment.test.ts +0 -35
  346. package/source/RTD/segment.ts +0 -51
  347. package/source/RTD/syntax/index.ts +0 -2
  348. package/source/RTD/syntax/parse.test.ts +0 -196
  349. package/source/RTD/syntax/parse.ts +0 -171
  350. package/source/RTD/syntax/types.ts +0 -69
  351. package/source/RTD/walk.test.ts +0 -147
  352. package/source/Remotes.test.ts +0 -79
  353. package/source/Remotes.ts +0 -39
  354. package/source/Tenant.ts +0 -73
  355. package/source/const.ts +0 -45
  356. package/source/deployment.ts +0 -96
  357. package/source/directives/auth/Anonymous.test.ts +0 -70
  358. package/source/directives/auth/Anonymous.ts +0 -36
  359. package/source/directives/auth/Anyone.ts +0 -23
  360. package/source/directives/auth/Assert.ts +0 -43
  361. package/source/directives/auth/Authorization.test.ts +0 -24
  362. package/source/directives/auth/Authorization.ts +0 -388
  363. package/source/directives/auth/Delegate.test.ts +0 -36
  364. package/source/directives/auth/Delegate.ts +0 -54
  365. package/source/directives/auth/Echo.ts +0 -24
  366. package/source/directives/auth/Federation.ts +0 -104
  367. package/source/directives/auth/Id.ts +0 -37
  368. package/source/directives/auth/Incept.ts +0 -117
  369. package/source/directives/auth/Input.ts +0 -92
  370. package/source/directives/auth/Role.test.ts +0 -147
  371. package/source/directives/auth/Role.ts +0 -99
  372. package/source/directives/auth/Rule.ts +0 -59
  373. package/source/directives/auth/Scheme.ts +0 -31
  374. package/source/directives/auth/create.ts +0 -11
  375. package/source/directives/auth/index.ts +0 -3
  376. package/source/directives/auth/schemes.test.ts +0 -18
  377. package/source/directives/auth/schemes.ts +0 -39
  378. package/source/directives/auth/split.ts +0 -14
  379. package/source/directives/auth/types.ts +0 -75
  380. package/source/directives/cache/Cache.ts +0 -92
  381. package/source/directives/cache/Control.ts +0 -81
  382. package/source/directives/cache/Exact.ts +0 -7
  383. package/source/directives/cache/etag.ts +0 -38
  384. package/source/directives/cache/index.ts +0 -3
  385. package/source/directives/cache/types.ts +0 -9
  386. package/source/directives/cors/CORS.test.ts +0 -75
  387. package/source/directives/cors/CORS.ts +0 -88
  388. package/source/directives/cors/index.ts +0 -3
  389. package/source/directives/dev/Development.ts +0 -41
  390. package/source/directives/dev/Faulty.ts +0 -31
  391. package/source/directives/dev/Sleep.ts +0 -53
  392. package/source/directives/dev/Stub.ts +0 -14
  393. package/source/directives/dev/Throw.ts +0 -14
  394. package/source/directives/dev/index.ts +0 -3
  395. package/source/directives/dev/types.ts +0 -5
  396. package/source/directives/flow/Compose.ts +0 -98
  397. package/source/directives/flow/Fetch.ts +0 -86
  398. package/source/directives/flow/Flow.ts +0 -43
  399. package/source/directives/flow/index.ts +0 -3
  400. package/source/directives/flow/types.ts +0 -7
  401. package/source/directives/help/Family.ts +0 -122
  402. package/source/directives/help/Help.test.ts +0 -227
  403. package/source/directives/help/Help.ts +0 -47
  404. package/source/directives/help/Parameters.ts +0 -47
  405. package/source/directives/help/described.ts +0 -57
  406. package/source/directives/help/index.ts +0 -45
  407. package/source/directives/index.ts +0 -33
  408. package/source/directives/io/Directive.ts +0 -17
  409. package/source/directives/io/IO.ts +0 -118
  410. package/source/directives/io/Input.ts +0 -55
  411. package/source/directives/io/Message.ts +0 -1
  412. package/source/directives/io/Output.ts +0 -81
  413. package/source/directives/io/Status.test.ts +0 -88
  414. package/source/directives/io/Status.ts +0 -47
  415. package/source/directives/io/Throttle.ts +0 -30
  416. package/source/directives/io/index.ts +0 -3
  417. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  418. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  419. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  420. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  421. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  422. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  423. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  424. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  425. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  426. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  427. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  428. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  429. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  430. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  431. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  432. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  433. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  434. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  435. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  436. package/source/directives/io/lib/throttle/index.ts +0 -4
  437. package/source/directives/io/schemas.test.ts +0 -40
  438. package/source/directives/io/schemas.ts +0 -16
  439. package/source/directives/map/Authority.ts +0 -15
  440. package/source/directives/map/Buffer.ts +0 -15
  441. package/source/directives/map/Claims.ts +0 -63
  442. package/source/directives/map/Directive.ts +0 -4
  443. package/source/directives/map/Headers.ts +0 -60
  444. package/source/directives/map/Language.ts +0 -45
  445. package/source/directives/map/Languages.ts +0 -17
  446. package/source/directives/map/Map.ts +0 -85
  447. package/source/directives/map/Mapping.ts +0 -45
  448. package/source/directives/map/Properties.ts +0 -15
  449. package/source/directives/map/Segments.ts +0 -52
  450. package/source/directives/map/index.ts +0 -3
  451. package/source/directives/mcp/MCP.ts +0 -33
  452. package/source/directives/mcp/Tool.test.ts +0 -56
  453. package/source/directives/mcp/Tool.ts +0 -32
  454. package/source/directives/mcp/index.ts +0 -6
  455. package/source/directives/oauth/Discovery.ts +0 -66
  456. package/source/directives/oauth/documents.ts +0 -110
  457. package/source/directives/oauth/index.ts +0 -3
  458. package/source/directives/octets/Context.ts +0 -23
  459. package/source/directives/octets/Delete.ts +0 -96
  460. package/source/directives/octets/Directive.ts +0 -21
  461. package/source/directives/octets/Get.ts +0 -88
  462. package/source/directives/octets/Octets.ts +0 -82
  463. package/source/directives/octets/Put.ts +0 -186
  464. package/source/directives/octets/Workflow.ts +0 -60
  465. package/source/directives/octets/bytes.test.ts +0 -33
  466. package/source/directives/octets/bytes.ts +0 -18
  467. package/source/directives/octets/index.ts +0 -3
  468. package/source/directives/octets/schemas.test.ts +0 -20
  469. package/source/directives/octets/schemas.ts +0 -15
  470. package/source/directives/octets/types.ts +0 -9
  471. package/source/directives/octets/workflows/Execution.ts +0 -130
  472. package/source/directives/octets/workflows/Workflow.ts +0 -51
  473. package/source/directives/octets/workflows/index.ts +0 -1
  474. package/source/directives/require/Directive.ts +0 -5
  475. package/source/directives/require/Headers.ts +0 -19
  476. package/source/directives/require/Require.ts +0 -27
  477. package/source/directives/require/index.ts +0 -3
  478. package/source/discovery.ts +0 -1
  479. package/source/exceptions.ts +0 -47
  480. package/source/index.ts +0 -12
  481. package/source/io.ts +0 -4
  482. package/source/manifest.test.ts +0 -56
  483. package/source/manifest.ts +0 -56
  484. package/source/octets.d.ts +0 -17
  485. package/source/root.ts +0 -59
  486. package/source/schemas.test.ts +0 -31
  487. package/source/schemas.ts +0 -15
  488. package/source/service.ts +0 -94
  489. package/source/shortcuts.ts +0 -14
  490. package/source/userland.ts +0 -47
  491. package/transpiled/Annotation.d.ts +0 -70
  492. package/transpiled/Annotation.js +0 -2
  493. package/transpiled/Annotation.js.map +0 -1
  494. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  495. package/transpiled/RTD/syntax/parse.js +0 -112
  496. package/transpiled/RTD/syntax/parse.js.map +0 -1
  497. package/transpiled/RTD/syntax/types.d.ts +0 -52
  498. package/transpiled/RTD/syntax/types.js +0 -11
  499. package/transpiled/RTD/syntax/types.js.map +0 -1
  500. package/transpiled/const.d.ts +0 -36
  501. package/transpiled/const.js +0 -37
  502. package/transpiled/const.js.map +0 -1
  503. package/transpiled/deployment.d.ts +0 -6
  504. package/transpiled/deployment.js +0 -76
  505. package/transpiled/deployment.js.map +0 -1
  506. package/transpiled/manifest.d.ts +0 -3
  507. package/transpiled/manifest.js +0 -39
  508. package/transpiled/manifest.js.map +0 -1
  509. package/transpiled/schemas.d.ts +0 -9
  510. package/transpiled/schemas.js +0 -9
  511. package/transpiled/schemas.js.map +0 -1
  512. package/transpiled/shortcuts.d.ts +0 -3
  513. package/transpiled/shortcuts.js +0 -13
  514. package/transpiled/shortcuts.js.map +0 -1
  515. package/tsconfig.json +0 -13
  516. package/tsconfig.tsbuildinfo +0 -1
  517. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  518. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  519. package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
  520. package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
  521. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  522. package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
  523. package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
  524. package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
  525. package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
  526. package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
@@ -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.
@@ -1,88 +0,0 @@
1
- # Persistent credentials
2
-
3
- Persistent credentials associate an [Identity](identity.md) with a reusable authentication method.
4
- Exposition stores Basic, OpenID Connect federation, and WebAuthn passkey credentials. Local tokens
5
- and one-time passwords are not persistent credentials: tokens are stateless and OTP records expire.
6
-
7
- See [Features](../features/credentials.feature).
8
-
9
- ## Listing credentials
10
-
11
- `GET /identity/credentials/:identity/` returns all persistent credentials associated with the
12
- Identity in the current authority. Access requires credentials of that Identity.
13
-
14
- ```http
15
- GET /identity/credentials/fc8e66ddd51d45eea89602c9dd38a542/ HTTP/1.1
16
- authorization: Token ...
17
- accept: application/yaml
18
- ```
19
-
20
- ```yaml
21
- basic:
22
- username: user@example.com
23
- federation:
24
- - id: 09200d0bcc2448c5863e3f50ae18af84
25
- iss: https://accounts.google.com
26
- CREATED: 1754899200000
27
- passkeys:
28
- - id: 54ed430804324e81b39756ea4708b546
29
- aid: adce0002-35bc-c60a-648b-0b25f1f05503
30
- synced: true
31
- label: Personal iPhone
32
- CREATED: 1754899200000
33
- ```
34
-
35
- `basic` is `null` when Basic credentials do not exist. `federation` and `passkeys` are always
36
- arrays. Secret and authentication data, including password hashes, federation subjects, public
37
- keys, signature counters, and transports, are not returned.
38
-
39
- The federation issuer identifies the provider. For example, Google uses
40
- `https://accounts.google.com` and Apple uses `https://appleid.apple.com`. Applications should map
41
- trusted issuers to their own provider names and presentation.
42
-
43
- The passkey `aid` is its
44
- [AAGUID](https://www.w3.org/TR/webauthn-2/#aaguid), which can be resolved against an authenticator
45
- metadata catalog. `synced` indicates whether the credential was backed up and is therefore likely
46
- available on more than one device.
47
-
48
- ## Basic credentials
49
-
50
- - `POST /identity/basic/:identity/` adds Basic credentials to an Identity.
51
- - `PATCH /identity/basic/:identity/` changes its username or password.
52
- - `DELETE /identity/basic/:identity/` removes its Basic credentials.
53
-
54
- An Identity can have at most one Basic credential in an authority. See
55
- [Basic credentials configuration](components.md#basic-credentials) for password hashing,
56
- constraints, and principal configuration.
57
-
58
- ## Federated credentials
59
-
60
- - `POST /identity/federation/:identity/` associates credentials from a trusted issuer and returns
61
- the associated credential as it is listed.
62
- - `GET /identity/federation/:identity/` lists federated credentials.
63
- - `DELETE /identity/federation/:identity/:credential/` removes one federated credential.
64
-
65
- If the credentials are already associated with the Identity, the existing credential is returned.
66
-
67
- An Identity can have credentials from multiple issuers and can have multiple subjects from the
68
- same issuer. The `:credential` segment is the `id` returned by any of these resources. Federation
69
- resources are provider-independent; issuer-specific authorization flows remain the responsibility
70
- of the application.
71
-
72
- ## Passkeys
73
-
74
- Passkey registration consists of a challenge followed by credential creation:
75
-
76
- - `POST /identity/passkeys/challenges/:identity/` creates a registration challenge.
77
- - `POST /identity/passkeys/:identity/` verifies the response and stores the passkey.
78
- - `GET /identity/passkeys/:identity/` lists passkeys.
79
- - `DELETE /identity/passkeys/:identity/:credential/` removes one passkey.
80
-
81
- See [Web Authentication](passkeys.md) for standards and feature scenarios.
82
-
83
- ## Removing the last credential
84
-
85
- Credential components intentionally do not coordinate with one another. Consequently, credentials
86
- can be removed without checking whether another persistent credential exists.
87
- Applications that require a recoverable login must prevent removal of the last usable credential
88
- in their client workflow.
@@ -1,30 +0,0 @@
1
- # Development tools
2
-
3
- ## `dev:stub`
4
-
5
- Returns a successful response with the given body.
6
-
7
- ```yaml
8
- /foo:
9
- dev:sub: Hello!
10
- /bar:
11
- dev:sub:
12
- hello: world
13
- ```
14
-
15
- ## `dev:sleep`
16
-
17
- Enables random delay before processing the request, up to given maximum time in milliseconds.
18
-
19
- Desired delay range can be set in the `sleep` request header as a JSON array of two numbers, the minimum
20
- and maximum delay in milliseconds.
21
-
22
- ```yaml
23
- /foo:
24
- dev:sleep: 1000
25
- ```
26
-
27
- ```http
28
- GET /foo/ HTTP/1.1
29
- sleep: [500, 1000]
30
- ```