@toa.io/extensions.exposition 1.0.0-alpha.0 → 1.0.0-alpha.100

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 (700) hide show
  1. package/components/context.toa.yaml +12 -0
  2. package/components/identity.bans/manifest.toa.yaml +15 -6
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +21 -8
  10. package/components/identity.basic/operations/authenticate.d.ts +13 -0
  11. package/components/identity.basic/operations/authenticate.js +27 -0
  12. package/components/identity.basic/operations/authenticate.js.map +1 -0
  13. package/components/identity.basic/operations/incept.d.ts +12 -0
  14. package/components/identity.basic/operations/incept.js +26 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +12 -0
  17. package/components/identity.basic/operations/transit.js +55 -0
  18. package/components/identity.basic/operations/transit.js.map +1 -0
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -0
  20. package/components/identity.basic/operations/types.d.ts +42 -0
  21. package/components/identity.basic/operations/types.js +3 -0
  22. package/components/identity.basic/operations/types.js.map +1 -0
  23. package/components/identity.basic/source/authenticate.ts +16 -6
  24. package/components/identity.basic/source/incept.ts +38 -0
  25. package/components/identity.basic/source/transit.ts +11 -9
  26. package/components/identity.basic/source/types.ts +8 -4
  27. package/components/identity.federation/events/principal.js +22 -0
  28. package/components/identity.federation/manifest.toa.yaml +119 -0
  29. package/components/identity.federation/operations/authenticate.d.ts +14 -0
  30. package/components/identity.federation/operations/authenticate.js +20 -0
  31. package/components/identity.federation/operations/authenticate.js.map +1 -0
  32. package/components/identity.federation/operations/incept.d.ts +11 -0
  33. package/components/identity.federation/operations/incept.js +14 -0
  34. package/components/identity.federation/operations/incept.js.map +1 -0
  35. package/components/identity.federation/operations/lib/assertions-as-values.d.ts +4 -0
  36. package/components/identity.federation/operations/lib/assertions-as-values.js +47 -0
  37. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  38. package/components/identity.federation/operations/lib/get.d.ts +1 -0
  39. package/components/identity.federation/operations/lib/get.js +64 -0
  40. package/components/identity.federation/operations/lib/get.js.map +1 -0
  41. package/components/identity.federation/operations/lib/jwt.d.ts +19 -0
  42. package/components/identity.federation/operations/lib/jwt.js +140 -0
  43. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  44. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -0
  45. package/components/identity.federation/operations/types/configuration.d.ts +15 -0
  46. package/components/identity.federation/operations/types/configuration.js +3 -0
  47. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  48. package/components/identity.federation/operations/types/context.d.ts +49 -0
  49. package/components/identity.federation/operations/types/context.js +3 -0
  50. package/components/identity.federation/operations/types/context.js.map +1 -0
  51. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  52. package/components/identity.federation/operations/types/entity.js +3 -0
  53. package/components/identity.federation/operations/types/entity.js.map +1 -0
  54. package/components/identity.federation/operations/types/index.d.ts +3 -0
  55. package/components/identity.federation/operations/types/index.js +20 -0
  56. package/components/identity.federation/operations/types/index.js.map +1 -0
  57. package/components/identity.federation/source/authenticate.ts +36 -0
  58. package/components/identity.federation/source/incept.ts +26 -0
  59. package/components/identity.federation/source/lib/assertions-as-values.ts +22 -0
  60. package/components/identity.federation/source/lib/get.ts +82 -0
  61. package/components/identity.federation/source/lib/jwt.test.ts +179 -0
  62. package/components/identity.federation/source/lib/jwt.ts +178 -0
  63. package/components/identity.federation/source/types/configuration.ts +16 -0
  64. package/components/identity.federation/source/types/context.ts +55 -0
  65. package/components/identity.federation/source/types/entity.ts +6 -0
  66. package/components/identity.federation/source/types/index.ts +3 -0
  67. package/components/identity.federation/tsconfig.json +10 -0
  68. package/components/identity.roles/manifest.toa.yaml +18 -5
  69. package/components/identity.roles/operations/grant.d.ts +10 -0
  70. package/components/identity.roles/operations/grant.js +21 -0
  71. package/components/identity.roles/operations/grant.js.map +1 -0
  72. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  73. package/components/identity.roles/operations/lib/Entity.js +3 -0
  74. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  75. package/components/identity.roles/operations/list.d.ts +2 -0
  76. package/components/identity.roles/operations/list.js +8 -0
  77. package/components/identity.roles/operations/list.js.map +1 -0
  78. package/components/identity.roles/operations/principal.d.ts +13 -0
  79. package/components/identity.roles/operations/principal.js +13 -0
  80. package/components/identity.roles/operations/principal.js.map +1 -0
  81. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  82. package/components/identity.roles/source/grant.ts +32 -0
  83. package/components/identity.roles/source/lib/Entity.ts +5 -0
  84. package/components/identity.roles/source/list.ts +2 -4
  85. package/components/identity.roles/source/principal.ts +10 -8
  86. package/components/identity.tokens/manifest.toa.yaml +18 -4
  87. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  88. package/components/identity.tokens/operations/authenticate.js +39 -0
  89. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  90. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  91. package/components/identity.tokens/operations/decrypt.js +33 -0
  92. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  93. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  94. package/components/identity.tokens/operations/encrypt.js +26 -0
  95. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  96. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  97. package/components/identity.tokens/operations/revoke.js +8 -0
  98. package/components/identity.tokens/operations/revoke.js.map +1 -0
  99. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  100. package/components/identity.tokens/operations/types.d.ts +46 -0
  101. package/components/identity.tokens/operations/types.js +3 -0
  102. package/components/identity.tokens/operations/types.js.map +1 -0
  103. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  104. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  105. package/components/identity.tokens/source/authenticate.ts +14 -6
  106. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  107. package/components/identity.tokens/source/decrypt.ts +9 -8
  108. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  109. package/components/identity.tokens/source/encrypt.ts +5 -1
  110. package/components/identity.tokens/source/types.ts +9 -2
  111. package/components/octets.storage/manifest.toa.yaml +10 -10
  112. package/components/octets.storage/operations/get.js +3 -3
  113. package/components/octets.storage/operations/head.js +7 -0
  114. package/components/octets.storage/operations/put.js +132 -0
  115. package/cucumber.js +0 -1
  116. package/documentation/access.md +80 -38
  117. package/documentation/authorities.md +48 -0
  118. package/documentation/cache.md +8 -1
  119. package/documentation/components.md +93 -24
  120. package/documentation/flow.md +44 -0
  121. package/documentation/identity.md +34 -23
  122. package/documentation/introspection.md +82 -0
  123. package/documentation/io.md +56 -0
  124. package/documentation/map.md +73 -0
  125. package/documentation/octets.md +162 -65
  126. package/documentation/protocol.md +34 -4
  127. package/documentation/query.md +79 -9
  128. package/documentation/require.md +15 -0
  129. package/documentation/tree.md +35 -4
  130. package/features/access.feature +141 -49
  131. package/features/annotation.feature +2 -0
  132. package/features/auth.claims.feature +170 -0
  133. package/features/authorities.basic.feature +141 -0
  134. package/features/authorities.feature +32 -0
  135. package/features/authorities.federation.feature +100 -0
  136. package/features/authorities.tokens.feature +117 -0
  137. package/features/body.feature +5 -1
  138. package/features/cache.feature +112 -5
  139. package/features/cors.feature +78 -0
  140. package/features/debug.feature +34 -0
  141. package/features/directives.feature +5 -0
  142. package/features/dynamic.feature +62 -7
  143. package/features/errors.feature +36 -10
  144. package/features/etag.feature +205 -0
  145. package/features/flow.feature +96 -0
  146. package/features/identity.bans.feature +137 -0
  147. package/features/identity.basic.feature +146 -21
  148. package/features/identity.feature +37 -9
  149. package/features/identity.federation.feature +268 -0
  150. package/features/identity.roles.feature +251 -7
  151. package/features/identity.tokens.feature +57 -4
  152. package/features/introspection.feature +153 -0
  153. package/features/io.feature +204 -0
  154. package/features/map.feature +241 -0
  155. package/features/methods.feature +47 -0
  156. package/features/octets.cloudinary.feature +68 -0
  157. package/features/octets.download.feature +189 -0
  158. package/features/octets.entries.feature +81 -0
  159. package/features/octets.feature +85 -133
  160. package/features/octets.head.feature +40 -0
  161. package/features/octets.meta.feature +116 -0
  162. package/features/octets.workflows.feature +391 -34
  163. package/features/probes.feature +14 -0
  164. package/features/{queries.feature → query.feature} +86 -3
  165. package/features/realtime.feature +34 -0
  166. package/features/require.feature +67 -0
  167. package/features/response.feature +103 -0
  168. package/features/routes.feature +145 -10
  169. package/features/server.feature +21 -0
  170. package/features/steps/.env.example +3 -0
  171. package/features/steps/Captures.ts +6 -0
  172. package/features/steps/Components.ts +18 -6
  173. package/features/steps/Database.ts +17 -10
  174. package/features/steps/Gateway.ts +25 -6
  175. package/features/steps/HTTP.ts +40 -87
  176. package/features/steps/IdP.ts +155 -0
  177. package/features/steps/Parameters.ts +51 -2
  178. package/features/steps/Realtime.ts +151 -0
  179. package/features/steps/Workspace.ts +5 -7
  180. package/features/steps/components/echo/manifest.toa.yaml +14 -0
  181. package/features/steps/components/echo/operations/error.js +11 -0
  182. package/features/steps/components/echo/operations/identity.js +7 -0
  183. package/features/steps/components/echo/operations/parameters.js +7 -0
  184. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  185. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  186. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  187. package/features/steps/components/octets.tester/manifest.toa.yaml +26 -2
  188. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  189. package/features/steps/components/octets.tester/operations/bar.js +0 -1
  190. package/features/steps/components/octets.tester/operations/baz.js +0 -2
  191. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  192. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  193. package/features/steps/components/octets.tester/operations/foo.js +1 -2
  194. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  195. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  196. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  197. package/features/steps/components/pots/manifest.toa.yaml +26 -6
  198. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  199. package/features/steps/components/users/manifest.toa.yaml +3 -0
  200. package/features/steps/components/users.properties/manifest.toa.yaml +14 -0
  201. package/features/steps/tsconfig.json +1 -1
  202. package/features/streams.feature +5 -0
  203. package/features/timing.feature +69 -0
  204. package/package.json +25 -20
  205. package/readme.md +19 -13
  206. package/schemas/annotation.cos.yaml +2 -1
  207. package/schemas/io/input.cos.yaml +3 -0
  208. package/schemas/io/message.cos.yaml +5 -0
  209. package/schemas/io/output.cos.yaml +5 -0
  210. package/schemas/method.cos.yaml +1 -1
  211. package/schemas/node.cos.yaml +2 -0
  212. package/schemas/octets/delete.cos.yaml +2 -1
  213. package/schemas/octets/{fetch.cos.yaml → get.cos.yaml} +0 -1
  214. package/schemas/octets/put.cos.yaml +25 -0
  215. package/schemas/octets/workflow.cos.yaml +12 -0
  216. package/schemas/query.cos.yaml +4 -10
  217. package/schemas/querystring.cos.yaml +1 -0
  218. package/source/Annotation.ts +3 -2
  219. package/source/Branch.ts +1 -0
  220. package/source/Composition.ts +0 -6
  221. package/source/Context.ts +7 -4
  222. package/source/Directive.test.ts +14 -8
  223. package/source/Directive.ts +30 -52
  224. package/source/Endpoint.ts +105 -16
  225. package/source/Factory.ts +37 -17
  226. package/source/Gateway.ts +94 -42
  227. package/source/HTTP/Context.ts +90 -0
  228. package/source/HTTP/Server.ts +115 -92
  229. package/source/HTTP/Timing.ts +40 -0
  230. package/source/HTTP/exceptions.ts +13 -1
  231. package/source/HTTP/formats/index.ts +3 -3
  232. package/source/HTTP/formats/msgpack.ts +9 -6
  233. package/source/HTTP/formats/text.ts +1 -1
  234. package/source/HTTP/formats/yaml.ts +1 -1
  235. package/source/HTTP/index.ts +1 -0
  236. package/source/HTTP/messages.test.ts +71 -9
  237. package/source/HTTP/messages.ts +66 -46
  238. package/source/Interception.ts +24 -0
  239. package/source/Introspection.ts +11 -0
  240. package/source/Mapping.ts +69 -23
  241. package/source/Query.test.ts +3 -3
  242. package/source/Query.ts +123 -33
  243. package/source/RTD/Context.ts +8 -11
  244. package/source/RTD/Directives.ts +28 -4
  245. package/source/RTD/Endpoint.ts +9 -4
  246. package/source/RTD/Match.ts +2 -7
  247. package/source/RTD/Method.ts +23 -13
  248. package/source/RTD/Node.ts +37 -22
  249. package/source/RTD/Route.ts +5 -4
  250. package/source/RTD/Tree.ts +20 -16
  251. package/source/RTD/factory.ts +7 -7
  252. package/source/RTD/syntax/parse.test.ts +1 -1
  253. package/source/RTD/syntax/parse.ts +41 -28
  254. package/source/RTD/syntax/types.ts +6 -4
  255. package/source/Remotes.ts +7 -6
  256. package/source/Tenant.ts +6 -20
  257. package/source/deployment.ts +35 -20
  258. package/source/directives/auth/Anonymous.ts +3 -2
  259. package/source/directives/auth/Anyone.ts +13 -0
  260. package/source/directives/auth/Authorization.ts +170 -0
  261. package/source/directives/auth/Delegate.ts +42 -0
  262. package/source/directives/auth/Echo.ts +19 -5
  263. package/source/directives/auth/Federation.ts +84 -0
  264. package/source/directives/auth/Incept.ts +14 -8
  265. package/source/directives/auth/Role.test.ts +53 -6
  266. package/source/directives/auth/Role.ts +27 -17
  267. package/source/directives/auth/Rule.ts +2 -2
  268. package/source/directives/auth/Scheme.ts +3 -3
  269. package/source/directives/auth/index.ts +2 -2
  270. package/source/directives/auth/schemes.ts +2 -1
  271. package/source/directives/auth/split.ts +1 -1
  272. package/source/directives/auth/types.ts +10 -7
  273. package/source/directives/cache/Cache.ts +42 -0
  274. package/source/directives/cache/Control.ts +47 -21
  275. package/source/directives/cache/index.ts +2 -2
  276. package/source/directives/cache/types.ts +2 -2
  277. package/source/directives/cors/CORS.ts +63 -0
  278. package/source/directives/cors/index.ts +3 -0
  279. package/source/directives/dev/{Family.ts → Development.ts} +5 -6
  280. package/source/directives/dev/Stub.ts +4 -4
  281. package/source/directives/dev/Throw.ts +4 -4
  282. package/source/directives/dev/index.ts +2 -2
  283. package/source/directives/dev/types.ts +1 -1
  284. package/source/directives/flow/Compose.ts +68 -0
  285. package/source/directives/flow/Fetch.ts +86 -0
  286. package/source/directives/flow/Flow.ts +42 -0
  287. package/source/directives/flow/index.ts +3 -0
  288. package/source/directives/flow/types.ts +7 -0
  289. package/source/directives/index.ts +13 -6
  290. package/source/directives/io/Directive.ts +11 -0
  291. package/source/directives/io/IO.ts +43 -0
  292. package/source/directives/io/Input.ts +50 -0
  293. package/source/directives/io/Message.ts +1 -0
  294. package/source/directives/io/Output.ts +70 -0
  295. package/source/directives/io/index.ts +3 -0
  296. package/source/directives/io/schemas.ts +12 -0
  297. package/source/directives/map/Authority.ts +15 -0
  298. package/source/directives/map/Claims.ts +37 -0
  299. package/source/directives/map/Directive.ts +4 -0
  300. package/source/directives/map/Headers.ts +38 -0
  301. package/source/directives/map/Language.ts +42 -0
  302. package/source/directives/map/Languages.ts +11 -0
  303. package/source/directives/map/Map.ts +56 -0
  304. package/source/directives/map/Mapping.ts +13 -0
  305. package/source/directives/map/Properties.ts +15 -0
  306. package/source/directives/map/Segments.ts +26 -0
  307. package/source/directives/map/index.ts +3 -0
  308. package/source/directives/octets/Context.ts +9 -7
  309. package/source/directives/octets/Delete.ts +65 -12
  310. package/source/directives/octets/Directive.ts +10 -0
  311. package/source/directives/octets/Get.ts +86 -0
  312. package/source/directives/octets/{Family.ts → Octets.ts} +22 -20
  313. package/source/directives/octets/Put.ts +142 -0
  314. package/source/directives/octets/Workflow.ts +48 -0
  315. package/source/directives/octets/bytes.test.ts +30 -0
  316. package/source/directives/octets/bytes.ts +18 -0
  317. package/source/directives/octets/index.ts +2 -2
  318. package/source/directives/octets/schemas.test.ts +21 -0
  319. package/source/directives/octets/schemas.ts +9 -6
  320. package/source/directives/octets/types.ts +2 -8
  321. package/source/directives/octets/workflows/Execution.ts +128 -0
  322. package/source/directives/octets/workflows/Workflow.ts +37 -0
  323. package/source/directives/octets/workflows/index.ts +1 -0
  324. package/source/directives/require/Directive.ts +5 -0
  325. package/source/directives/require/Headers.ts +20 -0
  326. package/source/directives/require/Require.ts +28 -0
  327. package/source/directives/require/index.ts +3 -0
  328. package/source/exceptions.ts +23 -11
  329. package/source/io.ts +4 -0
  330. package/source/manifest.test.ts +6 -14
  331. package/source/manifest.ts +18 -16
  332. package/source/root.ts +5 -0
  333. package/source/schemas.ts +7 -3
  334. package/transpiled/Annotation.d.ts +8 -0
  335. package/transpiled/Annotation.js +3 -0
  336. package/transpiled/Annotation.js.map +1 -0
  337. package/transpiled/Branch.d.ts +8 -0
  338. package/transpiled/Branch.js +3 -0
  339. package/transpiled/Branch.js.map +1 -0
  340. package/transpiled/Composition.d.ts +13 -0
  341. package/transpiled/Composition.js +39 -0
  342. package/transpiled/Composition.js.map +1 -0
  343. package/transpiled/Context.d.ts +8 -0
  344. package/transpiled/Context.js +3 -0
  345. package/transpiled/Context.js.map +1 -0
  346. package/transpiled/Directive.d.ts +18 -0
  347. package/transpiled/Directive.js +77 -0
  348. package/transpiled/Directive.js.map +1 -0
  349. package/transpiled/Endpoint.d.ts +24 -0
  350. package/transpiled/Endpoint.js +131 -0
  351. package/transpiled/Endpoint.js.map +1 -0
  352. package/transpiled/Factory.d.ts +10 -0
  353. package/transpiled/Factory.js +81 -0
  354. package/transpiled/Factory.js.map +1 -0
  355. package/transpiled/Gateway.d.ts +21 -0
  356. package/transpiled/Gateway.js +132 -0
  357. package/transpiled/Gateway.js.map +1 -0
  358. package/transpiled/HTTP/Context.d.ts +31 -0
  359. package/transpiled/HTTP/Context.js +61 -0
  360. package/transpiled/HTTP/Context.js.map +1 -0
  361. package/transpiled/HTTP/Server.d.ts +36 -0
  362. package/transpiled/HTTP/Server.js +148 -0
  363. package/transpiled/HTTP/Server.js.map +1 -0
  364. package/transpiled/HTTP/Timing.d.ts +10 -0
  365. package/transpiled/HTTP/Timing.js +29 -0
  366. package/transpiled/HTTP/Timing.js.map +1 -0
  367. package/transpiled/HTTP/exceptions.d.ts +40 -0
  368. package/transpiled/HTTP/exceptions.js +83 -0
  369. package/transpiled/HTTP/exceptions.js.map +1 -0
  370. package/transpiled/HTTP/formats/index.d.ts +10 -0
  371. package/transpiled/HTTP/formats/index.js +38 -0
  372. package/transpiled/HTTP/formats/index.js.map +1 -0
  373. package/transpiled/HTTP/formats/json.d.ts +6 -0
  374. package/transpiled/HTTP/formats/json.js +17 -0
  375. package/transpiled/HTTP/formats/json.js.map +1 -0
  376. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  377. package/transpiled/HTTP/formats/msgpack.js +17 -0
  378. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  379. package/transpiled/HTTP/formats/text.d.ts +8 -0
  380. package/transpiled/HTTP/formats/text.js +15 -0
  381. package/transpiled/HTTP/formats/text.js.map +1 -0
  382. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  383. package/transpiled/HTTP/formats/yaml.js +41 -0
  384. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  385. package/transpiled/HTTP/index.d.ts +4 -0
  386. package/transpiled/HTTP/index.js +21 -0
  387. package/transpiled/HTTP/index.js.map +1 -0
  388. package/transpiled/HTTP/messages.d.ts +20 -0
  389. package/transpiled/HTTP/messages.js +96 -0
  390. package/transpiled/HTTP/messages.js.map +1 -0
  391. package/transpiled/Interception.d.ts +9 -0
  392. package/transpiled/Interception.js +19 -0
  393. package/transpiled/Interception.js.map +1 -0
  394. package/transpiled/Introspection.d.ts +9 -0
  395. package/transpiled/Introspection.js +3 -0
  396. package/transpiled/Introspection.js.map +1 -0
  397. package/transpiled/Mapping.d.ts +17 -0
  398. package/transpiled/Mapping.js +69 -0
  399. package/transpiled/Mapping.js.map +1 -0
  400. package/transpiled/Query.d.ts +22 -0
  401. package/transpiled/Query.js +164 -0
  402. package/transpiled/Query.js.map +1 -0
  403. package/transpiled/RTD/Context.d.ts +12 -0
  404. package/transpiled/RTD/Context.js +3 -0
  405. package/transpiled/RTD/Context.js.map +1 -0
  406. package/transpiled/RTD/Directives.d.ts +22 -0
  407. package/transpiled/RTD/Directives.js +3 -0
  408. package/transpiled/RTD/Directives.js.map +1 -0
  409. package/transpiled/RTD/Endpoint.d.ts +12 -0
  410. package/transpiled/RTD/Endpoint.js +3 -0
  411. package/transpiled/RTD/Endpoint.js.map +1 -0
  412. package/transpiled/RTD/Match.d.ts +9 -0
  413. package/transpiled/RTD/Match.js +3 -0
  414. package/transpiled/RTD/Match.js.map +1 -0
  415. package/transpiled/RTD/Method.d.ts +13 -0
  416. package/transpiled/RTD/Method.js +27 -0
  417. package/transpiled/RTD/Method.js.map +1 -0
  418. package/transpiled/RTD/Node.d.ts +22 -0
  419. package/transpiled/RTD/Node.js +73 -0
  420. package/transpiled/RTD/Node.js.map +1 -0
  421. package/transpiled/RTD/Route.d.ts +14 -0
  422. package/transpiled/RTD/Route.js +48 -0
  423. package/transpiled/RTD/Route.js.map +1 -0
  424. package/transpiled/RTD/Tree.d.ts +14 -0
  425. package/transpiled/RTD/Tree.js +45 -0
  426. package/transpiled/RTD/Tree.js.map +1 -0
  427. package/transpiled/RTD/factory.d.ts +4 -0
  428. package/transpiled/RTD/factory.js +39 -0
  429. package/transpiled/RTD/factory.js.map +1 -0
  430. package/transpiled/RTD/index.d.ts +8 -0
  431. package/transpiled/RTD/index.js +38 -0
  432. package/transpiled/RTD/index.js.map +1 -0
  433. package/transpiled/RTD/segment.d.ts +8 -0
  434. package/transpiled/RTD/segment.js +25 -0
  435. package/transpiled/RTD/segment.js.map +1 -0
  436. package/transpiled/RTD/syntax/index.d.ts +2 -0
  437. package/transpiled/RTD/syntax/index.js +19 -0
  438. package/transpiled/RTD/syntax/index.js.map +1 -0
  439. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  440. package/transpiled/RTD/syntax/parse.js +140 -0
  441. package/transpiled/RTD/syntax/parse.js.map +1 -0
  442. package/transpiled/RTD/syntax/types.d.ts +43 -0
  443. package/transpiled/RTD/syntax/types.js +5 -0
  444. package/transpiled/RTD/syntax/types.js.map +1 -0
  445. package/transpiled/Remotes.d.ts +9 -0
  446. package/transpiled/Remotes.js +26 -0
  447. package/transpiled/Remotes.js.map +1 -0
  448. package/transpiled/Tenant.d.ts +13 -0
  449. package/transpiled/Tenant.js +23 -0
  450. package/transpiled/Tenant.js.map +1 -0
  451. package/transpiled/deployment.d.ts +3 -0
  452. package/transpiled/deployment.js +79 -0
  453. package/transpiled/deployment.js.map +1 -0
  454. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  455. package/transpiled/directives/auth/Anonymous.js +16 -0
  456. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  457. package/transpiled/directives/auth/Anyone.d.ts +6 -0
  458. package/transpiled/directives/auth/Anyone.js +14 -0
  459. package/transpiled/directives/auth/Anyone.js.map +1 -0
  460. package/transpiled/directives/auth/Authorization.d.ts +19 -0
  461. package/transpiled/directives/auth/Authorization.js +141 -0
  462. package/transpiled/directives/auth/Authorization.js.map +1 -0
  463. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  464. package/transpiled/directives/auth/Delegate.js +34 -0
  465. package/transpiled/directives/auth/Delegate.js.map +1 -0
  466. package/transpiled/directives/auth/Echo.d.ts +7 -0
  467. package/transpiled/directives/auth/Echo.js +23 -0
  468. package/transpiled/directives/auth/Echo.js.map +1 -0
  469. package/transpiled/directives/auth/Federation.d.ts +16 -0
  470. package/transpiled/directives/auth/Federation.js +57 -0
  471. package/transpiled/directives/auth/Federation.js.map +1 -0
  472. package/transpiled/directives/auth/Id.d.ts +7 -0
  473. package/transpiled/directives/auth/Id.js +17 -0
  474. package/transpiled/directives/auth/Id.js.map +1 -0
  475. package/transpiled/directives/auth/Incept.d.ts +10 -0
  476. package/transpiled/directives/auth/Incept.js +64 -0
  477. package/transpiled/directives/auth/Incept.js.map +1 -0
  478. package/transpiled/directives/auth/Role.d.ts +14 -0
  479. package/transpiled/directives/auth/Role.js +52 -0
  480. package/transpiled/directives/auth/Role.js.map +1 -0
  481. package/transpiled/directives/auth/Rule.d.ts +9 -0
  482. package/transpiled/directives/auth/Rule.js +22 -0
  483. package/transpiled/directives/auth/Rule.js.map +1 -0
  484. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  485. package/transpiled/directives/auth/Scheme.js +47 -0
  486. package/transpiled/directives/auth/Scheme.js.map +1 -0
  487. package/transpiled/directives/auth/index.d.ts +2 -0
  488. package/transpiled/directives/auth/index.js +6 -0
  489. package/transpiled/directives/auth/index.js.map +1 -0
  490. package/transpiled/directives/auth/schemes.d.ts +3 -0
  491. package/transpiled/directives/auth/schemes.js +10 -0
  492. package/transpiled/directives/auth/schemes.js.map +1 -0
  493. package/transpiled/directives/auth/split.d.ts +2 -0
  494. package/transpiled/directives/auth/split.js +38 -0
  495. package/transpiled/directives/auth/split.js.map +1 -0
  496. package/transpiled/directives/auth/types.d.ts +31 -0
  497. package/transpiled/directives/auth/types.js +3 -0
  498. package/transpiled/directives/auth/types.js.map +1 -0
  499. package/transpiled/directives/cache/Cache.d.ts +11 -0
  500. package/transpiled/directives/cache/Cache.js +34 -0
  501. package/transpiled/directives/cache/Cache.js.map +1 -0
  502. package/transpiled/directives/cache/Control.d.ts +10 -0
  503. package/transpiled/directives/cache/Control.js +59 -0
  504. package/transpiled/directives/cache/Control.js.map +1 -0
  505. package/transpiled/directives/cache/Exact.d.ts +4 -0
  506. package/transpiled/directives/cache/Exact.js +11 -0
  507. package/transpiled/directives/cache/Exact.js.map +1 -0
  508. package/transpiled/directives/cache/index.d.ts +2 -0
  509. package/transpiled/directives/cache/index.js +6 -0
  510. package/transpiled/directives/cache/index.js.map +1 -0
  511. package/transpiled/directives/cache/types.d.ts +7 -0
  512. package/transpiled/directives/cache/types.js +3 -0
  513. package/transpiled/directives/cache/types.js.map +1 -0
  514. package/transpiled/directives/cors/CORS.d.ts +10 -0
  515. package/transpiled/directives/cors/CORS.js +52 -0
  516. package/transpiled/directives/cors/CORS.js.map +1 -0
  517. package/transpiled/directives/cors/index.d.ts +2 -0
  518. package/transpiled/directives/cors/index.js +6 -0
  519. package/transpiled/directives/cors/index.js.map +1 -0
  520. package/transpiled/directives/dev/Development.d.ts +9 -0
  521. package/transpiled/directives/dev/Development.js +29 -0
  522. package/transpiled/directives/dev/Development.js.map +1 -0
  523. package/transpiled/directives/dev/Stub.d.ts +7 -0
  524. package/transpiled/directives/dev/Stub.js +14 -0
  525. package/transpiled/directives/dev/Stub.js.map +1 -0
  526. package/transpiled/directives/dev/Throw.d.ts +7 -0
  527. package/transpiled/directives/dev/Throw.js +14 -0
  528. package/transpiled/directives/dev/Throw.js.map +1 -0
  529. package/transpiled/directives/dev/index.d.ts +2 -0
  530. package/transpiled/directives/dev/index.js +6 -0
  531. package/transpiled/directives/dev/index.js.map +1 -0
  532. package/transpiled/directives/dev/types.d.ts +4 -0
  533. package/transpiled/directives/dev/types.js +3 -0
  534. package/transpiled/directives/dev/types.js.map +1 -0
  535. package/transpiled/directives/flow/Compose.d.ts +8 -0
  536. package/transpiled/directives/flow/Compose.js +74 -0
  537. package/transpiled/directives/flow/Compose.js.map +1 -0
  538. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  539. package/transpiled/directives/flow/Fetch.js +58 -0
  540. package/transpiled/directives/flow/Fetch.js.map +1 -0
  541. package/transpiled/directives/flow/Flow.d.ts +10 -0
  542. package/transpiled/directives/flow/Flow.js +33 -0
  543. package/transpiled/directives/flow/Flow.js.map +1 -0
  544. package/transpiled/directives/flow/index.d.ts +2 -0
  545. package/transpiled/directives/flow/index.js +6 -0
  546. package/transpiled/directives/flow/index.js.map +1 -0
  547. package/transpiled/directives/flow/types.d.ts +6 -0
  548. package/transpiled/directives/flow/types.js +3 -0
  549. package/transpiled/directives/flow/types.js.map +1 -0
  550. package/transpiled/directives/index.d.ts +4 -0
  551. package/transpiled/directives/index.js +15 -0
  552. package/transpiled/directives/index.js.map +1 -0
  553. package/transpiled/directives/io/Directive.d.ts +8 -0
  554. package/transpiled/directives/io/Directive.js +3 -0
  555. package/transpiled/directives/io/Directive.js.map +1 -0
  556. package/transpiled/directives/io/IO.d.ts +9 -0
  557. package/transpiled/directives/io/IO.js +33 -0
  558. package/transpiled/directives/io/IO.js.map +1 -0
  559. package/transpiled/directives/io/Input.d.ts +11 -0
  560. package/transpiled/directives/io/Input.js +63 -0
  561. package/transpiled/directives/io/Input.js.map +1 -0
  562. package/transpiled/directives/io/Message.d.ts +1 -0
  563. package/transpiled/directives/io/Message.js +3 -0
  564. package/transpiled/directives/io/Message.js.map +1 -0
  565. package/transpiled/directives/io/Output.d.ts +13 -0
  566. package/transpiled/directives/io/Output.js +76 -0
  567. package/transpiled/directives/io/Output.js.map +1 -0
  568. package/transpiled/directives/io/index.d.ts +2 -0
  569. package/transpiled/directives/io/index.js +6 -0
  570. package/transpiled/directives/io/index.js.map +1 -0
  571. package/transpiled/directives/io/schemas.d.ts +7 -0
  572. package/transpiled/directives/io/schemas.js +14 -0
  573. package/transpiled/directives/io/schemas.js.map +1 -0
  574. package/transpiled/directives/map/Authority.d.ts +6 -0
  575. package/transpiled/directives/map/Authority.js +19 -0
  576. package/transpiled/directives/map/Authority.js.map +1 -0
  577. package/transpiled/directives/map/Claims.d.ts +6 -0
  578. package/transpiled/directives/map/Claims.js +29 -0
  579. package/transpiled/directives/map/Claims.js.map +1 -0
  580. package/transpiled/directives/map/Directive.d.ts +3 -0
  581. package/transpiled/directives/map/Directive.js +3 -0
  582. package/transpiled/directives/map/Directive.js.map +1 -0
  583. package/transpiled/directives/map/Headers.d.ts +7 -0
  584. package/transpiled/directives/map/Headers.js +34 -0
  585. package/transpiled/directives/map/Headers.js.map +1 -0
  586. package/transpiled/directives/map/Language.d.ts +10 -0
  587. package/transpiled/directives/map/Language.js +38 -0
  588. package/transpiled/directives/map/Language.js.map +1 -0
  589. package/transpiled/directives/map/Languages.d.ts +4 -0
  590. package/transpiled/directives/map/Languages.js +17 -0
  591. package/transpiled/directives/map/Languages.js.map +1 -0
  592. package/transpiled/directives/map/Map.d.ts +11 -0
  593. package/transpiled/directives/map/Map.js +44 -0
  594. package/transpiled/directives/map/Map.js.map +1 -0
  595. package/transpiled/directives/map/Mapping.d.ts +8 -0
  596. package/transpiled/directives/map/Mapping.js +11 -0
  597. package/transpiled/directives/map/Mapping.js.map +1 -0
  598. package/transpiled/directives/map/Properties.d.ts +9 -0
  599. package/transpiled/directives/map/Properties.js +14 -0
  600. package/transpiled/directives/map/Properties.js.map +1 -0
  601. package/transpiled/directives/map/Segments.d.ts +6 -0
  602. package/transpiled/directives/map/Segments.js +25 -0
  603. package/transpiled/directives/map/Segments.js.map +1 -0
  604. package/transpiled/directives/map/index.d.ts +2 -0
  605. package/transpiled/directives/map/index.js +6 -0
  606. package/transpiled/directives/map/index.js.map +1 -0
  607. package/transpiled/directives/octets/Context.d.ts +8 -0
  608. package/transpiled/directives/octets/Context.js +22 -0
  609. package/transpiled/directives/octets/Context.js.map +1 -0
  610. package/transpiled/directives/octets/Delete.d.ts +20 -0
  611. package/transpiled/directives/octets/Delete.js +84 -0
  612. package/transpiled/directives/octets/Delete.js.map +1 -0
  613. package/transpiled/directives/octets/Directive.d.ts +8 -0
  614. package/transpiled/directives/octets/Directive.js +8 -0
  615. package/transpiled/directives/octets/Directive.js.map +1 -0
  616. package/transpiled/directives/octets/Get.d.ts +17 -0
  617. package/transpiled/directives/octets/Get.js +88 -0
  618. package/transpiled/directives/octets/Get.js.map +1 -0
  619. package/transpiled/directives/octets/Octets.d.ts +12 -0
  620. package/transpiled/directives/octets/Octets.js +52 -0
  621. package/transpiled/directives/octets/Octets.js.map +1 -0
  622. package/transpiled/directives/octets/Put.d.ts +29 -0
  623. package/transpiled/directives/octets/Put.js +102 -0
  624. package/transpiled/directives/octets/Put.js.map +1 -0
  625. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  626. package/transpiled/directives/octets/Workflow.js +59 -0
  627. package/transpiled/directives/octets/Workflow.js.map +1 -0
  628. package/transpiled/directives/octets/bytes.d.ts +1 -0
  629. package/transpiled/directives/octets/bytes.js +21 -0
  630. package/transpiled/directives/octets/bytes.js.map +1 -0
  631. package/transpiled/directives/octets/index.d.ts +2 -0
  632. package/transpiled/directives/octets/index.js +6 -0
  633. package/transpiled/directives/octets/index.js.map +1 -0
  634. package/transpiled/directives/octets/schemas.d.ts +9 -0
  635. package/transpiled/directives/octets/schemas.js +15 -0
  636. package/transpiled/directives/octets/schemas.js.map +1 -0
  637. package/transpiled/directives/octets/types.d.ts +5 -0
  638. package/transpiled/directives/octets/types.js +3 -0
  639. package/transpiled/directives/octets/types.js.map +1 -0
  640. package/transpiled/directives/octets/workflows/Execution.d.ts +29 -0
  641. package/transpiled/directives/octets/workflows/Execution.js +89 -0
  642. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  643. package/transpiled/directives/octets/workflows/Workflow.d.ts +12 -0
  644. package/transpiled/directives/octets/workflows/Workflow.js +26 -0
  645. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  646. package/transpiled/directives/octets/workflows/index.d.ts +1 -0
  647. package/transpiled/directives/octets/workflows/index.js +6 -0
  648. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  649. package/transpiled/directives/require/Directive.d.ts +4 -0
  650. package/transpiled/directives/require/Directive.js +3 -0
  651. package/transpiled/directives/require/Directive.js.map +1 -0
  652. package/transpiled/directives/require/Headers.d.ts +7 -0
  653. package/transpiled/directives/require/Headers.js +19 -0
  654. package/transpiled/directives/require/Headers.js.map +1 -0
  655. package/transpiled/directives/require/Require.d.ts +9 -0
  656. package/transpiled/directives/require/Require.js +27 -0
  657. package/transpiled/directives/require/Require.js.map +1 -0
  658. package/transpiled/directives/require/index.d.ts +2 -0
  659. package/transpiled/directives/require/index.js +6 -0
  660. package/transpiled/directives/require/index.js.map +1 -0
  661. package/transpiled/discovery.d.ts +1 -0
  662. package/transpiled/discovery.js +3 -0
  663. package/transpiled/discovery.js.map +1 -0
  664. package/transpiled/exceptions.d.ts +3 -0
  665. package/transpiled/exceptions.js +46 -0
  666. package/transpiled/exceptions.js.map +1 -0
  667. package/transpiled/index.d.ts +5 -0
  668. package/transpiled/index.js +12 -0
  669. package/transpiled/index.js.map +1 -0
  670. package/transpiled/io.d.ts +3 -0
  671. package/transpiled/io.js +3 -0
  672. package/transpiled/io.js.map +1 -0
  673. package/transpiled/manifest.d.ts +3 -0
  674. package/transpiled/manifest.js +65 -0
  675. package/transpiled/manifest.js.map +1 -0
  676. package/transpiled/root.d.ts +2 -0
  677. package/transpiled/root.js +44 -0
  678. package/transpiled/root.js.map +1 -0
  679. package/transpiled/schemas.d.ts +7 -0
  680. package/transpiled/schemas.js +14 -0
  681. package/transpiled/schemas.js.map +1 -0
  682. package/transpiled/tsconfig.tsbuildinfo +1 -0
  683. package/components/identity.basic/source/create.ts +0 -18
  684. package/components/octets.storage/operations/fetch.js +0 -46
  685. package/components/octets.storage/operations/list.js +0 -7
  686. package/components/octets.storage/operations/permute.js +0 -7
  687. package/components/octets.storage/operations/store.js +0 -11
  688. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  689. package/schemas/octets/context.cos.yaml +0 -1
  690. package/schemas/octets/list.cos.yaml +0 -1
  691. package/schemas/octets/permute.cos.yaml +0 -1
  692. package/schemas/octets/store.cos.yaml +0 -3
  693. package/source/HTTP/Server.fixtures.ts +0 -41
  694. package/source/HTTP/Server.test.ts +0 -199
  695. package/source/directives/auth/Family.ts +0 -148
  696. package/source/directives/cache/Family.ts +0 -36
  697. package/source/directives/octets/Fetch.ts +0 -85
  698. package/source/directives/octets/List.ts +0 -32
  699. package/source/directives/octets/Permute.ts +0 -37
  700. package/source/directives/octets/Store.ts +0 -158
@@ -14,8 +14,8 @@
14
14
  The Authorization is implemented as a set of [RTD Directives](tree.md#directives).
15
15
 
16
16
  Directives are executed in a predetermined order until one of them grants access to a resource.
17
- If none of the directives grants access, then the Authorization interrupts request processing and responds with an
18
- authorization error.
17
+ If none of the directives grants access, then the Authorization interrupts request processing and
18
+ responds with an authorization error.
19
19
 
20
20
  > The Authorization directive provider is named `authorization`,
21
21
  > so the full names of the directives are `authorization:{directive}`.
@@ -25,7 +25,11 @@ authorization error.
25
25
  Grants access if its value is `true` and no credentials were provided[^1].
26
26
 
27
27
  [^1]: Credentials in the request make the
28
- response [non-chachable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
28
+ response [non-cacheable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
29
+
30
+ ### `anyone`
31
+
32
+ Grants access if its value is `true` and valid credentials were provided.
29
33
 
30
34
  ### `id`
31
35
 
@@ -37,11 +41,8 @@ the directive's value.
37
41
  Given the Route declaration and corresponding HTTP request:
38
42
 
39
43
  ```yaml
40
- # context.toa.yaml
41
-
42
- exposition:
43
- /users/:user-id:
44
- id: "user-id"
44
+ /users/:user-id:
45
+ id: "user-id"
45
46
  ```
46
47
 
47
48
  ```http
@@ -56,46 +57,98 @@ is `87480f2bd88048518c529d7957475ecd`.
56
57
 
57
58
  Grants access if resolved Identity has a role matching the directive's value or one of its values.
58
59
 
59
- #### Example
60
-
61
60
  ```yaml
62
- # context.toa.yaml
63
-
64
- exposition:
65
- /code:
66
- role: [developer, reviewer]
61
+ /code:
62
+ role: [developer, reviewer]
67
63
  ```
68
64
 
69
65
  Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
70
66
 
71
67
  Read [Roles](#roles) section for more details.
72
68
 
69
+ #### Dynamic roles
70
+
71
+ The `role` directive can be used with a placeholder in the route.
72
+
73
+ ```yaml
74
+ /:org-id:
75
+ role: app:{org-id}:moderator
76
+ ```
77
+
78
+ ### `claims`
79
+
80
+ Grants access if `Bearer` authentication scheme is used
81
+ and the Token's claims matches the specified values.
82
+
83
+ ```yaml
84
+ /:
85
+ auth:claims:
86
+ iss: https://id.example.com
87
+ sub: someone
88
+ aud: stars
89
+ ```
90
+
91
+ > If OIDC token claim contains `aud`
92
+ > as [an array](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), the
93
+ > directive will match if at least one value.
94
+
95
+ At least one property is required.
96
+
97
+ Values may refer to the Route parameters or the request authority:
98
+
99
+ ```yaml
100
+ /secrets/:org-id:
101
+ auth:claims:
102
+ iss: https://id.org.com
103
+ sub: /:org-id
104
+ aud: :authority
105
+ ```
106
+
107
+ An expression `:domain` will match if the domain in the value of `iss` matches the request
108
+ authority, excluding the most specific subdomain.
109
+
110
+ Issuer `https://accounts.example.com` matches request authorities `images.example.com`
111
+ and `sub.images.example.com`, but not `images.another.com`.
112
+
113
+ ```yaml
114
+ /images/:user-id:
115
+ auth:claims:
116
+ iss: :domain
117
+ sub: /:org-id
118
+ ```
119
+
73
120
  ### `rule`
74
121
 
75
122
  The Rule is a collection of authorization directives. It allows access only if all the specified
76
- directives grant
77
- access. The value of the `rule` directive can be a single Rule or a list of Rules.
123
+ directives grant access. The value of the `rule` directive can be a single Rule or a list of Rules.
78
124
 
79
125
  #### Example
80
126
 
81
127
  ```yaml
82
- # context.toa.yaml
83
-
84
- exposition:
85
- /commits/:user-id:
86
- rule:
87
- id: user-id
88
- role: developer
128
+ /commits/:user-id:
129
+ rule:
130
+ id: user-id
131
+ role: developer
89
132
  ```
90
133
 
91
134
  Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
92
135
 
136
+ ### `delegate`
137
+
138
+ Embeds the value of the current Identity into the request body as a property named after the value
139
+ of the directive value, and grants access.
140
+ The request body must be an object.
141
+
142
+ > :warning:<br/>
143
+ > The intended use case for this directive is audit.
144
+ > **Using it to pass Identity to the application logic is strongly discouraged.**
145
+
93
146
  ## Roles
94
147
 
95
148
  Role values are strings that can be assigned to an Identity and used for matching with values of
96
149
  the [`role` directive](#role).
97
150
 
98
- ### Hierarchy
151
+ ### Hierarchies
99
152
 
100
153
  Role values are alphanumeric tokens separated by a colon (`:`).
101
154
  Each token defines a Role Scope, forming a hierarchy.
@@ -105,11 +158,8 @@ directive.
105
158
  #### Example
106
159
 
107
160
  ```yaml
108
- # context.toa.yaml
109
-
110
- /exposition:
111
- /commits/:user-id:
112
- role: developer:senior
161
+ /commits/:user-id:
162
+ role: developer:senior
113
163
  ```
114
164
 
115
165
  The example above defines a `role` directive with the specified `developer:senior` Role Scope.
@@ -124,18 +174,10 @@ In other words, the Identity must have a specified or more general Role.
124
174
  </picture>
125
175
  </a>
126
176
 
127
-
128
177
  > The root-level Role Scope `system` is preserved and cannot be used with the `role` directives.
129
178
 
130
179
  See also [role management resources](components.md#roles).
131
180
 
132
- #### Authorization Directives
133
-
134
- ```yaml
135
- /identity/roles/:id:
136
- role: system:roles
137
- ````
138
-
139
181
  ## Policies
140
182
 
141
183
  Component Resource branches cannot have authorization directives.
@@ -0,0 +1,48 @@
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#embeddings)
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
+ ## Identity
39
+
40
+ Credentials stored or issued by the [authentication system](identity.md) are associated with an
41
+ authority.
42
+ Credentials in one authority are not valid in another,
43
+ or may be associated with a different Identity; in other words, Identity exists in the context of an
44
+ authority.
45
+
46
+ > :warning:<br/>
47
+ > Changing the authority identifier will break compatibility with existing stored or issued
48
+ > credentials.
@@ -17,7 +17,7 @@ to [safe HTTP methods](https://developer.mozilla.org/en-US/docs/Glossary/Safe/HT
17
17
 
18
18
  ### Implicit modifications
19
19
 
20
- In terms of security, the following implicit modifications are made to the `Cache-Control` header:
20
+ In terms of security, the following implicit modifications are made to the `cache-control` header:
21
21
 
22
22
  - If it contains the `public` directive without `no-cache` and the request is authenticated,
23
23
  the `no-cache` directive is added.
@@ -25,6 +25,13 @@ In terms of security, the following implicit modifications are made to the `Cach
25
25
  - If it does not contain the `private` directive and the request is authenticated, the `private`
26
26
  directive is added.
27
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]: This also will invalidate the cache each time a new token is used for the same identity, thus
33
+ limiting the `max-age` value to the token's `refresh` time.
34
+ See [Issuing tokens](components.md#issuing-tokens).
28
35
 
29
36
  ## `cache:exact`
30
37
 
@@ -20,7 +20,7 @@ and pepper.
20
20
  configuration:
21
21
  identity.basic:
22
22
  rounds: 10 # salt rounds
23
- peper: '' # hashing pepper
23
+ pepper: '' # hashing pepper
24
24
  ```
25
25
 
26
26
  ### Credentials constraints
@@ -34,7 +34,7 @@ them).
34
34
  configuration:
35
35
  identity.basic:
36
36
  username:
37
- - ^\S{1,16}$
37
+ - ^\S{1,128}$
38
38
  password:
39
39
  - ^\S{8,32}$
40
40
  ```
@@ -89,9 +89,42 @@ password?: string
89
89
 
90
90
  Access requires basic credentials of the modified Identity or `system:identity:basic` role.
91
91
 
92
+ ## Identity federation (OpenID connect)
93
+
94
+ The `identity.federation` component manages OpenID Connect federated identities.
95
+
96
+ Both implicit identities creation and forced [identity inception](./identity.md) are supported
97
+ as in case with basic credentials. `principal` is also working in the same way.
98
+
99
+ The configuration schema alongside default values is described in
100
+ the [component manifest](../components/identity.federation/manifest.toa.yaml).
101
+
102
+ No federated tokens are accepted by default until at least one entry is added to the `trust`
103
+ configuration.
104
+
105
+ Toa supports either asymmetric RS256 or symmetric HS256 / HS384 / HS512 tokens with pre-shared
106
+ secrets.
107
+
108
+ ```yaml
109
+ # context.toa.yaml
110
+
111
+ configuration:
112
+ identity.federation:
113
+ trust:
114
+ - iss: https://token.actions.githubusercontent.com
115
+ aud:
116
+ - https://github.com/tinovyatkin
117
+ - https://github.com/temich
118
+
119
+ - issuer: some.private.issuer
120
+ secrets:
121
+ HS256:
122
+ k1: <secret-to-be-used-for-hs256>
123
+ ```
124
+
92
125
  ## Stateless tokens
93
126
 
94
- The `identity.tokens` component manages statless authentication tokens.
127
+ The `identity.tokens` component manages stateless authentication tokens.
95
128
 
96
129
  These tokens carry the information required to authenticate the Identity and authorize access.
97
130
 
@@ -102,6 +135,14 @@ The new token is issued each time the request is made:
102
135
  1. Using authentication scheme other than `Token`.
103
136
  2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
104
137
 
138
+ When the token is issued it is sent in the `authorization` response header and the `cache-control`
139
+ is set to `no-store`.
140
+
141
+ ```http
142
+ authorization: Token ...
143
+ cache-control: no-store
144
+ ```
145
+
105
146
  ### Token encryption
106
147
 
107
148
  Issued tokens are encrypted
@@ -112,7 +153,7 @@ using the `key0` configuration value as a secret.
112
153
  # context.toa.yaml
113
154
 
114
155
  configuration:
115
- identity.basic:
156
+ identity.tokens:
116
157
  key0: $TOKEN_ENCRYPTION_KEY
117
158
  ```
118
159
 
@@ -123,25 +164,22 @@ The `key0` configuration value is required.
123
164
  ### Token rotation
124
165
 
125
166
  Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
126
- period, the token is
127
- considered obsolete (yet still valid), and a new token is [issued](#issuing-tokens) unless the
128
- provided one has
129
- been [revoked](#token-revocation).
167
+ period, the token is considered obsolete (yet still valid), and a new token
168
+ is [issued](#issuing-tokens) unless the provided one has been [revoked](#token-revocation).
130
169
 
131
170
  This essentially means that if the client uses the token at least once every `lifetime` period, it
132
- will always have a
133
- valid token to authenticate with. Also, token revocation or changing roles of an Identity will take
134
- effect once
135
- the `refresh` period of the currently issued tokens has expired.
171
+ will always have a valid token to authenticate with.
172
+ Also, token revocation or changing roles of an Identity will take effect once the `refresh` period
173
+ of the currently issued tokens has expired.
136
174
 
137
175
  Adjusting these two values is a delicate trade-off between security, performance and client
138
- convinience.
176
+ convenience.
139
177
 
140
178
  ```yaml
141
179
  # context.toa.yaml
142
180
 
143
181
  configuration:
144
- identity.basic:
182
+ identity.tokens:
145
183
  lifetime: 2592000 # seconds, 30 days
146
184
  refresh: 600 # seconds, 10 minutes
147
185
  ```
@@ -169,7 +207,7 @@ the `key0` and `key1` values in order.
169
207
  # context.toa.yaml
170
208
 
171
209
  configuration:
172
- identity.basic:
210
+ identity.tokens:
173
211
  key0: $TOKEN_ENCRYPTION_KEY_2023Q3
174
212
  key1: $TOKEN_ENCRYPTION_KEY_2023Q2
175
213
  ```
@@ -201,7 +239,7 @@ The secret rotation is a 2-step process:
201
239
  # context.toa.yaml
202
240
 
203
241
  configuration:
204
- identity.basic:
242
+ identity.tokens:
205
243
  key0: $TOKEN_ENCRYPTION_KEY_2023Q3
206
244
  key1: $TOKEN_ENCRYPTION_KEY_2023Q4
207
245
  ```
@@ -214,18 +252,31 @@ configuration:
214
252
  # context.toa.yaml
215
253
 
216
254
  configuration:
217
- identity.basic:
255
+ identity.tokens:
218
256
  key0: $TOKEN_ENCRYPTION_KEY_2023Q4
219
257
  key1: $TOKEN_ENCRYPTION_KEY_2023Q3
220
258
  ```
221
259
 
222
- ## Roles
260
+ ### Token resources
261
+
262
+ `/identity/tokens/`
263
+
264
+ `POST` Issue a new token for the Identity. Request body is as follows:
265
+
266
+ ```yaml
267
+ lifetime?: number # seconds
268
+ ```
223
269
 
224
- The `identity.roles` component manages roles of an Identity used by [access authorization](access.md#role).
270
+ Providing a value of `0` will result in the token being issued with no expiration.
271
+ However, it will still become invalid once the encryption key used is out
272
+ of [rotation](#secret-rotation).
225
273
 
226
- ### Role resources
274
+ ## Roles
227
275
 
228
- #### `/identity/roles/:id/`
276
+ The `identity.roles` component manages roles of an Identity used
277
+ by [access authorization](access.md#role).
278
+
279
+ ### `/identity/roles/:id/`
229
280
 
230
281
  `GET` Get roles of an Identity.
231
282
 
@@ -237,13 +288,16 @@ Access requires credentials of the Identity or `system:identity:roles` role.
237
288
  role: string
238
289
  ```
239
290
 
240
- Access requires `system:identity:roles` role.
291
+ To assign arbitrary roles, the `system:identity:roles` role is required.
292
+
293
+ An Identity having `system:identity:roles:delegation` role can delegate roles within its own
294
+ Role Scopes (see [Role Hierarchies](access.md#hierarchies)).
241
295
 
242
296
  ## Banned Identities
243
297
 
244
298
  The `identity.bans` component manages banned identities.
245
- A banned identity will fail to authenticate with any associated credentials (except [tokens](#stateless-tokens) within
246
- the `refresh` period).
299
+ A banned identity will fail to authenticate with any associated credentials
300
+ (except [tokens](#stateless-tokens) within the `refresh` period).
247
301
 
248
302
  ```http
249
303
  PUT /identity/bans/:id/
@@ -251,6 +305,7 @@ authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
251
305
  content-type: application/yaml
252
306
 
253
307
  banned: true
308
+ comment: Bye bye
254
309
  ```
255
310
 
256
311
  Access requires `system:identity:bans` role.
@@ -274,3 +329,17 @@ roles:
274
329
  - developer
275
330
  - system:identity:roles
276
331
  ```
332
+
333
+ When no credentials are provided, transient Identity is created.
334
+
335
+ ```http
336
+ GET /identity/
337
+ accept: application/yaml
338
+ ```
339
+
340
+ ```
341
+ 201 Created
342
+
343
+ id: 332017649c814649b25ee466c1fe4534
344
+ roles: []
345
+ ```
@@ -0,0 +1,44 @@
1
+ # Request flow
2
+
3
+ ## `flow:fetch`
4
+
5
+ Fetches the content from the resource returned by the specified endpoint.
6
+
7
+ The value of the directive is a `string` specifying endpoint to be called for the redirection
8
+ request.
9
+
10
+ Request `authority`, `path` and `parameters` are passed as input to the redirection endpoint,
11
+ and it must return a URL `string`, an `Error` or an object with the following properties:
12
+
13
+ ```yaml
14
+ url: string
15
+ options?:
16
+ method?: string
17
+ headers?: Record<string, string>
18
+ body?: string
19
+ ```
20
+
21
+ If it returns a URL or Request, then the response to the specified request is returned as the
22
+ response to the original request, along with the `content-type`, `content-length`, and `etag`
23
+ headers.
24
+
25
+ ## `flow:compose`
26
+
27
+ Compose an object from a response stream in object mode.
28
+
29
+ The value of the directive is an object whose values are JavaScript expressions
30
+ accessing the response stream objects composed into an array named `$`.
31
+
32
+ ```yaml
33
+ flow:compose:
34
+ one: $[0].status
35
+ two: $[1].data.foo
36
+ three: $[2].amount
37
+ ```
38
+
39
+ ```yaml
40
+ flow:compose:
41
+ sum: $[0].value + $[1].value
42
+ ```
43
+
44
+ Be careful.
@@ -1,36 +1,30 @@
1
1
  # Identity
2
2
 
3
3
  Identity is the fundamental entity within an authentication system that represents the **unique
4
- identifier** of an
5
- individual, organization, application or device.
4
+ identifier** of an individual, organization, application or device.
6
5
 
7
- In order to prove its Identity, the request originator must provide a valid _credentials_ that are
8
- associated with that
9
- Identity.
6
+ To prove its Identity, the request originator must provide a valid _credentials_ that are associated
7
+ with that Identity.
10
8
 
11
9
  Identity is intrinsically linked to credentials, as an Identity is established only when the first
12
- set of credentials
13
- for that Identity is created.
10
+ set of credentials for that Identity is created.
14
11
  In other words, the creation of credentials marks the inception of an Identity.
15
12
  Once the last credentials are removed from the Identity, it ceases to exist.
16
13
  Without credentials, there is no basis for defining or asserting an Identity.
17
14
 
18
15
  ## Authentication
19
16
 
20
- The Authenticaiton system resolves provided credentials to an Identity using one of the supported
21
- authentication
22
- schemes.
17
+ The Authentication system resolves provided credentials to an Identity using one of the supported
18
+ authentication schemes.
23
19
 
24
20
  The Authentication is request-agnostic, meaning it does not depend on the specific URL being
25
- requested or the content of
26
- the request body.
21
+ requested or the content of the request body.
27
22
  The only information it handles is the value of the `Authorization` header.
28
23
 
29
- > Except for its own [management resources](#persistent-credentials).
24
+ > Except for its own [management resources](components.md).
30
25
 
31
26
  If the provided credentials are not valid or not associated with an Identity, then Authentication
32
- interrupts request
33
- processing and responds with an authentication error.
27
+ interrupts request processing and responds with an authentication error.
34
28
 
35
29
  ### Basic scheme
36
30
 
@@ -52,8 +46,8 @@ Authrization: Token v4.local.eyJzdWIiOiJqb2hu...
52
46
 
53
47
  The `Token` is the **primary** authentication scheme.
54
48
  If request originators use an alternative authentication scheme, they will receive a response
55
- containing `Token`
56
- credentials and will be required to switch to the `Token` scheme for any subsequent requests.
49
+ containing `Token`credentials and will be required to switch to the `Token` scheme for any
50
+ subsequent requests.
57
51
  Continued use of other authentication schemes will result in temporary blocking of requests.
58
52
 
59
53
  See [`identity.tokens` component](components.md#stateless-tokens).
@@ -69,19 +63,36 @@ to [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.ht
69
63
  Authorization: Bearer eyJhbGciOiJIUzI1...
70
64
  ```
71
65
 
72
- Trusted providers are specified using the `idenity.trust` property within the Exposition annotation.
66
+ Trusted providers are specified using the `identity.federation` configuration.
73
67
 
74
68
  ```yaml
75
69
  # context.toa.yaml
76
70
 
77
- exposition:
78
- identity:
71
+ configuration:
72
+ identity.federation:
79
73
  trust:
80
- - https://accounts.google.com
81
- - https://appleid.apple.com
74
+ - iss: https://accounts.google.com
75
+ aud:
76
+ - <GOOGLE_CLIENT_ID>
77
+
78
+ - iss: https://appleid.apple.com
79
+
80
+ - iss: private.entity
81
+ secrets:
82
+ HS384:
83
+ key0: <THE-SECRET-STRING-FOR-HS384>
84
+ key1: <THE-SECRET-STRING-FOR-HS384> # selected by `kid` in the JWT header
85
+ principal:
86
+ iss: https://accounts.google.com
87
+ sub: 4218230498234
88
+ implicit: true
82
89
  ```
83
90
 
84
- The example above demonstrates the default list of trusted providers.
91
+ `principal` specifies the values of the `iss` and `sub` claims of an Identity that will be granted
92
+ with a `system` role.
93
+
94
+ `implicit` indicates whether the Identity should be implicitly created when a valid token for a
95
+ non-existent Identity is provided (default `false`).
85
96
 
86
97
  ## Identity inception
87
98
 
@@ -0,0 +1,82 @@
1
+ # Resource introspection
2
+
3
+ Any resource can be introspected by sending an `OPTIONS` request to the resource's path.
4
+ The response will contain the resource's input and output schemas for each supported method.
5
+
6
+ Introspection properties:
7
+
8
+ - `route` route parameters
9
+ - `query` query parameters
10
+ - `input` input schema
11
+ - `output` output schema
12
+ - `errors` error codes
13
+
14
+ ```http
15
+ OPTIONS /pots/:id/ HTTP/1.1
16
+ accept: application/yaml
17
+ ```
18
+
19
+ ```http
20
+ 200 OK
21
+ Allow: GET, POST, OPTIONS
22
+
23
+ GET:
24
+ route:
25
+ id:
26
+ type: string
27
+ pattern: ^[a-fA-F0-9]{32}$
28
+ output:
29
+ type: array
30
+ items:
31
+ type: object
32
+ properties:
33
+ title:
34
+ type: string
35
+ maxLength: 64
36
+ volume:
37
+ type: number
38
+ exclusiveMinimum: 0
39
+ maximum: 1000
40
+ temperature:
41
+ type: number
42
+ exclusiveMinimum: 0
43
+ maximum: 300
44
+ additionalProperties: false
45
+ required:
46
+ - id
47
+ - title
48
+ - volume
49
+ POST:
50
+ route:
51
+ id:
52
+ type: string
53
+ pattern: ^[a-fA-F0-9]{32}$
54
+ input:
55
+ type: object
56
+ properties:
57
+ title:
58
+ type: string
59
+ maxLength: 64
60
+ temperature:
61
+ type: number
62
+ exclusiveMinimum: 0
63
+ maximum: 300
64
+ volume:
65
+ type: number
66
+ exclusiveMinimum: 0
67
+ maximum: 1000
68
+ additionalProperties: false
69
+ required:
70
+ - title
71
+ - volume
72
+ output:
73
+ type: object
74
+ properties:
75
+ id:
76
+ type: string
77
+ pattern: ^[a-fA-F0-9]{32}$
78
+ additionalProperties: false
79
+ errors:
80
+ - NO_WAY
81
+ - WONT_CREATE
82
+ ```