@toa.io/extensions.exposition 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (383) hide show
  1. package/components/identity.bans/manifest.toa.yaml +15 -6
  2. package/components/identity.bans/operations/transit.d.ts +14 -0
  3. package/components/identity.bans/operations/transit.js +11 -0
  4. package/components/identity.bans/operations/transit.js.map +1 -0
  5. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  6. package/components/identity.bans/source/transit.ts +21 -0
  7. package/components/identity.bans/tsconfig.json +9 -0
  8. package/components/identity.basic/manifest.toa.yaml +5 -1
  9. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  10. package/components/identity.federation/manifest.toa.yaml +13 -7
  11. package/components/identity.federation/operations/authenticate.js +4 -4
  12. package/components/identity.federation/operations/authenticate.js.map +1 -1
  13. package/components/identity.federation/operations/create.js +4 -4
  14. package/components/identity.federation/operations/create.js.map +1 -1
  15. package/components/identity.federation/operations/{assertions-as-values.cjs → lib/assertions-as-values.js} +1 -1
  16. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  17. package/components/identity.federation/operations/{jwt.d.cts → lib/jwt.d.ts} +5 -4
  18. package/components/identity.federation/operations/{jwt.cjs → lib/jwt.js} +35 -11
  19. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  20. package/components/identity.federation/operations/schemas.d.ts +16 -0
  21. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  22. package/components/identity.federation/operations/types.d.ts +1 -1
  23. package/components/identity.federation/source/authenticate.ts +2 -2
  24. package/components/identity.federation/source/create.ts +2 -2
  25. package/components/identity.federation/source/{assertions-as-values.cts → lib/assertions-as-values.ts} +1 -2
  26. package/components/identity.federation/source/lib/jwt.test.ts +56 -0
  27. package/components/identity.federation/source/{jwt.cts → lib/jwt.ts} +57 -29
  28. package/components/identity.federation/source/schemas.ts +16 -0
  29. package/components/identity.federation/source/types.ts +1 -1
  30. package/components/identity.federation/tsconfig.json +2 -2
  31. package/components/identity.roles/manifest.toa.yaml +18 -5
  32. package/components/identity.roles/operations/grant.d.ts +10 -0
  33. package/components/identity.roles/operations/grant.js +21 -0
  34. package/components/identity.roles/operations/grant.js.map +1 -0
  35. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  36. package/components/identity.roles/operations/lib/Entity.js +3 -0
  37. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  38. package/components/identity.roles/operations/list.d.ts +1 -4
  39. package/components/identity.roles/operations/list.js.map +1 -1
  40. package/components/identity.roles/operations/principal.d.ts +4 -6
  41. package/components/identity.roles/operations/principal.js +6 -1
  42. package/components/identity.roles/operations/principal.js.map +1 -1
  43. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  44. package/components/identity.roles/source/grant.ts +32 -0
  45. package/components/identity.roles/source/lib/Entity.ts +5 -0
  46. package/components/identity.roles/source/list.ts +2 -4
  47. package/components/identity.roles/source/principal.ts +10 -8
  48. package/components/identity.tokens/manifest.toa.yaml +12 -3
  49. package/components/identity.tokens/operations/authenticate.js +5 -2
  50. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  51. package/components/identity.tokens/operations/encrypt.js +4 -1
  52. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  53. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  54. package/components/identity.tokens/operations/types.d.ts +1 -2
  55. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  56. package/components/identity.tokens/source/authenticate.ts +5 -2
  57. package/components/identity.tokens/source/encrypt.test.ts +22 -1
  58. package/components/identity.tokens/source/encrypt.ts +4 -1
  59. package/components/identity.tokens/source/types.ts +1 -2
  60. package/components/octets.storage/operations/store.js +1 -1
  61. package/documentation/access.md +27 -16
  62. package/documentation/cache.md +8 -1
  63. package/documentation/components.md +55 -23
  64. package/documentation/identity.md +7 -0
  65. package/documentation/io.md +56 -0
  66. package/documentation/octets.md +12 -0
  67. package/documentation/protocol.md +3 -0
  68. package/documentation/query.md +50 -5
  69. package/documentation/require.md +15 -0
  70. package/documentation/tree.md +22 -4
  71. package/documentation/vary.md +9 -3
  72. package/features/access.feature +28 -49
  73. package/features/annotation.feature +1 -0
  74. package/features/body.feature +3 -1
  75. package/features/cache.feature +39 -0
  76. package/features/cors.feature +2 -2
  77. package/features/directives.feature +2 -0
  78. package/features/dynamic.feature +14 -7
  79. package/features/errors.feature +7 -4
  80. package/features/etag.feature +97 -0
  81. package/features/identity.bans.feature +128 -0
  82. package/features/identity.basic.feature +68 -3
  83. package/features/identity.federation.feature +78 -5
  84. package/features/identity.roles.feature +205 -1
  85. package/features/identity.tokens.feature +98 -0
  86. package/features/io.feature +196 -0
  87. package/features/octets.entries.feature +3 -1
  88. package/features/octets.feature +32 -10
  89. package/features/octets.meta.feature +4 -3
  90. package/features/octets.workflows.feature +39 -0
  91. package/features/queries.feature +9 -1
  92. package/features/require.feature +64 -0
  93. package/features/response.feature +7 -1
  94. package/features/routes.feature +17 -10
  95. package/features/steps/Database.ts +17 -10
  96. package/features/steps/Gateway.ts +3 -0
  97. package/features/steps/IdP.ts +55 -21
  98. package/features/steps/components/echo/manifest.toa.yaml +5 -0
  99. package/features/steps/components/echo/operations/identity.js +7 -0
  100. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  101. package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
  102. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  103. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  104. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  105. package/features/timing.feature +66 -0
  106. package/features/vary.feature +56 -3
  107. package/package.json +13 -14
  108. package/readme.md +7 -6
  109. package/schemas/annotation.cos.yaml +1 -0
  110. package/schemas/io/input.cos.yaml +3 -0
  111. package/schemas/io/message.cos.yaml +5 -0
  112. package/schemas/io/output.cos.yaml +5 -0
  113. package/schemas/octets/workflow.cos.yaml +12 -0
  114. package/schemas/querystring.cos.yaml +1 -0
  115. package/source/Annotation.ts +1 -0
  116. package/source/Context.ts +6 -4
  117. package/source/Directive.test.ts +7 -7
  118. package/source/Directive.ts +19 -46
  119. package/source/Endpoint.ts +53 -6
  120. package/source/Factory.ts +17 -7
  121. package/source/Gateway.ts +40 -51
  122. package/source/HTTP/Context.ts +67 -0
  123. package/source/HTTP/Server.test.ts +1 -1
  124. package/source/HTTP/Server.ts +61 -96
  125. package/source/HTTP/Timing.ts +40 -0
  126. package/source/HTTP/exceptions.ts +1 -1
  127. package/source/HTTP/index.ts +1 -0
  128. package/source/HTTP/messages.test.ts +27 -8
  129. package/source/HTTP/messages.ts +32 -48
  130. package/source/Mapping.ts +7 -8
  131. package/source/RTD/Context.ts +7 -10
  132. package/source/RTD/Directives.ts +28 -4
  133. package/source/RTD/Endpoint.ts +6 -4
  134. package/source/RTD/Match.ts +2 -7
  135. package/source/RTD/Method.ts +7 -13
  136. package/source/RTD/Node.ts +13 -14
  137. package/source/RTD/Tree.ts +17 -16
  138. package/source/RTD/factory.ts +3 -6
  139. package/source/Tenant.ts +0 -8
  140. package/source/deployment.ts +6 -0
  141. package/source/directives/auth/Anonymous.ts +3 -2
  142. package/source/directives/auth/Authorization.ts +17 -14
  143. package/source/directives/auth/Delegate.ts +35 -0
  144. package/source/directives/auth/Incept.ts +11 -6
  145. package/source/directives/auth/Role.test.ts +53 -6
  146. package/source/directives/auth/Role.ts +27 -17
  147. package/source/directives/auth/Scheme.ts +2 -2
  148. package/source/directives/auth/types.ts +1 -1
  149. package/source/directives/cache/Cache.ts +5 -5
  150. package/source/directives/cache/Control.ts +48 -22
  151. package/source/directives/cache/types.ts +1 -1
  152. package/source/directives/cors/CORS.ts +18 -10
  153. package/source/directives/dev/Development.ts +4 -4
  154. package/source/directives/index.ts +6 -4
  155. package/source/directives/io/Directive.ts +11 -0
  156. package/source/directives/io/IO.ts +43 -0
  157. package/source/directives/io/Input.ts +50 -0
  158. package/source/directives/io/Message.ts +1 -0
  159. package/source/directives/io/Output.ts +69 -0
  160. package/source/directives/io/index.ts +3 -0
  161. package/source/directives/io/schemas.ts +12 -0
  162. package/source/directives/octets/Context.ts +5 -4
  163. package/source/directives/octets/Delete.ts +25 -13
  164. package/source/directives/octets/Directive.ts +10 -0
  165. package/source/directives/octets/Fetch.ts +33 -17
  166. package/source/directives/octets/List.ts +18 -8
  167. package/source/directives/octets/Octets.ts +12 -8
  168. package/source/directives/octets/Permute.ts +16 -9
  169. package/source/directives/octets/Store.ts +43 -19
  170. package/source/directives/octets/Workflow.ts +48 -0
  171. package/source/directives/octets/schemas.test.ts +21 -0
  172. package/source/directives/octets/schemas.ts +2 -0
  173. package/source/directives/octets/types.ts +0 -7
  174. package/source/directives/octets/{workflow → workflows}/Execution.ts +0 -2
  175. package/source/directives/octets/{workflow → workflows}/Workflow.ts +2 -2
  176. package/source/directives/require/Directive.ts +5 -0
  177. package/source/directives/require/Headers.ts +20 -0
  178. package/source/directives/require/Require.ts +28 -0
  179. package/source/directives/require/index.ts +3 -0
  180. package/source/directives/vary/Directive.ts +2 -1
  181. package/source/directives/vary/Embed.ts +14 -8
  182. package/source/directives/vary/Vary.ts +8 -6
  183. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  184. package/source/directives/vary/embeddings/Header.ts +9 -7
  185. package/source/directives/vary/embeddings/Language.ts +2 -2
  186. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  187. package/source/directives/vary/embeddings/index.ts +3 -3
  188. package/source/exceptions.ts +22 -11
  189. package/source/io.ts +2 -2
  190. package/source/root.ts +5 -0
  191. package/transpiled/Annotation.d.ts +1 -0
  192. package/transpiled/Context.d.ts +6 -4
  193. package/transpiled/Directive.d.ts +8 -21
  194. package/transpiled/Directive.js +11 -14
  195. package/transpiled/Directive.js.map +1 -1
  196. package/transpiled/Endpoint.d.ts +7 -5
  197. package/transpiled/Endpoint.js +58 -2
  198. package/transpiled/Endpoint.js.map +1 -1
  199. package/transpiled/Factory.js +8 -2
  200. package/transpiled/Factory.js.map +1 -1
  201. package/transpiled/Gateway.d.ts +4 -8
  202. package/transpiled/Gateway.js +23 -33
  203. package/transpiled/Gateway.js.map +1 -1
  204. package/transpiled/HTTP/Context.d.ts +24 -0
  205. package/transpiled/HTTP/Context.js +47 -0
  206. package/transpiled/HTTP/Context.js.map +1 -0
  207. package/transpiled/HTTP/Server.d.ts +8 -7
  208. package/transpiled/HTTP/Server.js +69 -77
  209. package/transpiled/HTTP/Server.js.map +1 -1
  210. package/transpiled/HTTP/Timing.d.ts +10 -0
  211. package/transpiled/HTTP/Timing.js +29 -0
  212. package/transpiled/HTTP/Timing.js.map +1 -0
  213. package/transpiled/HTTP/exceptions.d.ts +1 -1
  214. package/transpiled/HTTP/exceptions.js.map +1 -1
  215. package/transpiled/HTTP/index.d.ts +1 -0
  216. package/transpiled/HTTP/index.js +1 -0
  217. package/transpiled/HTTP/index.js.map +1 -1
  218. package/transpiled/HTTP/messages.d.ts +7 -21
  219. package/transpiled/HTTP/messages.js +24 -26
  220. package/transpiled/HTTP/messages.js.map +1 -1
  221. package/transpiled/Mapping.js +7 -7
  222. package/transpiled/Mapping.js.map +1 -1
  223. package/transpiled/RTD/Context.d.ts +7 -6
  224. package/transpiled/RTD/Directives.d.ts +19 -4
  225. package/transpiled/RTD/Endpoint.d.ts +6 -4
  226. package/transpiled/RTD/Match.d.ts +2 -4
  227. package/transpiled/RTD/Method.d.ts +7 -7
  228. package/transpiled/RTD/Method.js.map +1 -1
  229. package/transpiled/RTD/Node.d.ts +4 -6
  230. package/transpiled/RTD/Node.js +2 -1
  231. package/transpiled/RTD/Node.js.map +1 -1
  232. package/transpiled/RTD/Tree.d.ts +6 -6
  233. package/transpiled/RTD/Tree.js +4 -1
  234. package/transpiled/RTD/Tree.js.map +1 -1
  235. package/transpiled/RTD/factory.d.ts +2 -4
  236. package/transpiled/RTD/factory.js +1 -1
  237. package/transpiled/RTD/factory.js.map +1 -1
  238. package/transpiled/Tenant.d.ts +0 -1
  239. package/transpiled/Tenant.js +0 -6
  240. package/transpiled/Tenant.js.map +1 -1
  241. package/transpiled/deployment.js +5 -0
  242. package/transpiled/deployment.js.map +1 -1
  243. package/transpiled/directives/auth/Anonymous.js +3 -4
  244. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  245. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  246. package/transpiled/directives/auth/Authorization.js +10 -8
  247. package/transpiled/directives/auth/Authorization.js.map +1 -1
  248. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  249. package/transpiled/directives/auth/Delegate.js +29 -0
  250. package/transpiled/directives/auth/Delegate.js.map +1 -0
  251. package/transpiled/directives/auth/Incept.d.ts +1 -1
  252. package/transpiled/directives/auth/Incept.js +11 -6
  253. package/transpiled/directives/auth/Incept.js.map +1 -1
  254. package/transpiled/directives/auth/Role.d.ts +4 -1
  255. package/transpiled/directives/auth/Role.js +25 -17
  256. package/transpiled/directives/auth/Role.js.map +1 -1
  257. package/transpiled/directives/auth/Scheme.js +2 -2
  258. package/transpiled/directives/auth/Scheme.js.map +1 -1
  259. package/transpiled/directives/cache/Cache.d.ts +3 -3
  260. package/transpiled/directives/cache/Cache.js +3 -3
  261. package/transpiled/directives/cache/Cache.js.map +1 -1
  262. package/transpiled/directives/cache/Control.d.ts +5 -4
  263. package/transpiled/directives/cache/Control.js +32 -15
  264. package/transpiled/directives/cache/Control.js.map +1 -1
  265. package/transpiled/directives/cache/types.d.ts +1 -1
  266. package/transpiled/directives/cors/CORS.d.ts +2 -3
  267. package/transpiled/directives/cors/CORS.js +17 -10
  268. package/transpiled/directives/cors/CORS.js.map +1 -1
  269. package/transpiled/directives/dev/Development.d.ts +3 -3
  270. package/transpiled/directives/dev/Development.js +1 -1
  271. package/transpiled/directives/dev/Development.js.map +1 -1
  272. package/transpiled/directives/index.d.ts +2 -2
  273. package/transpiled/directives/index.js +5 -3
  274. package/transpiled/directives/index.js.map +1 -1
  275. package/transpiled/directives/io/Directive.d.ts +8 -0
  276. package/transpiled/directives/io/Directive.js +3 -0
  277. package/transpiled/directives/io/Directive.js.map +1 -0
  278. package/transpiled/directives/io/IO.d.ts +9 -0
  279. package/transpiled/directives/io/IO.js +33 -0
  280. package/transpiled/directives/io/IO.js.map +1 -0
  281. package/transpiled/directives/io/Input.d.ts +11 -0
  282. package/transpiled/directives/io/Input.js +63 -0
  283. package/transpiled/directives/io/Input.js.map +1 -0
  284. package/transpiled/directives/io/Message.d.ts +1 -0
  285. package/transpiled/directives/io/Message.js +3 -0
  286. package/transpiled/directives/io/Message.js.map +1 -0
  287. package/transpiled/directives/io/Output.d.ts +13 -0
  288. package/transpiled/directives/io/Output.js +76 -0
  289. package/transpiled/directives/io/Output.js.map +1 -0
  290. package/transpiled/directives/io/index.d.ts +2 -0
  291. package/transpiled/directives/io/index.js +6 -0
  292. package/transpiled/directives/io/index.js.map +1 -0
  293. package/transpiled/directives/io/schemas.d.ts +7 -0
  294. package/transpiled/directives/io/schemas.js +14 -0
  295. package/transpiled/directives/io/schemas.js.map +1 -0
  296. package/transpiled/directives/octets/Context.d.ts +4 -4
  297. package/transpiled/directives/octets/Context.js +4 -2
  298. package/transpiled/directives/octets/Context.js.map +1 -1
  299. package/transpiled/directives/octets/Delete.d.ts +5 -4
  300. package/transpiled/directives/octets/Delete.js +24 -12
  301. package/transpiled/directives/octets/Delete.js.map +1 -1
  302. package/transpiled/directives/octets/Directive.d.ts +8 -0
  303. package/transpiled/directives/octets/Directive.js +8 -0
  304. package/transpiled/directives/octets/Directive.js.map +1 -0
  305. package/transpiled/directives/octets/Fetch.d.ts +4 -3
  306. package/transpiled/directives/octets/Fetch.js +31 -15
  307. package/transpiled/directives/octets/Fetch.js.map +1 -1
  308. package/transpiled/directives/octets/List.d.ts +4 -3
  309. package/transpiled/directives/octets/List.js +16 -7
  310. package/transpiled/directives/octets/List.js.map +1 -1
  311. package/transpiled/directives/octets/Octets.d.ts +4 -4
  312. package/transpiled/directives/octets/Octets.js +8 -4
  313. package/transpiled/directives/octets/Octets.js.map +1 -1
  314. package/transpiled/directives/octets/Permute.d.ts +4 -3
  315. package/transpiled/directives/octets/Permute.js +14 -7
  316. package/transpiled/directives/octets/Permute.js.map +1 -1
  317. package/transpiled/directives/octets/Store.d.ts +6 -4
  318. package/transpiled/directives/octets/Store.js +28 -13
  319. package/transpiled/directives/octets/Store.js.map +1 -1
  320. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  321. package/transpiled/directives/octets/Workflow.js +59 -0
  322. package/transpiled/directives/octets/Workflow.js.map +1 -0
  323. package/transpiled/directives/octets/schemas.d.ts +2 -0
  324. package/transpiled/directives/octets/schemas.js +2 -1
  325. package/transpiled/directives/octets/schemas.js.map +1 -1
  326. package/transpiled/directives/octets/types.d.ts +0 -5
  327. package/transpiled/directives/octets/{workflow → workflows}/Execution.js +0 -1
  328. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  329. package/transpiled/directives/octets/{workflow → workflows}/Workflow.d.ts +1 -1
  330. package/transpiled/directives/octets/{workflow → workflows}/Workflow.js +2 -2
  331. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  332. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  333. package/transpiled/directives/require/Directive.d.ts +4 -0
  334. package/transpiled/directives/require/Directive.js +3 -0
  335. package/transpiled/directives/require/Directive.js.map +1 -0
  336. package/transpiled/directives/require/Headers.d.ts +7 -0
  337. package/transpiled/directives/require/Headers.js +19 -0
  338. package/transpiled/directives/require/Headers.js.map +1 -0
  339. package/transpiled/directives/require/Require.d.ts +9 -0
  340. package/transpiled/directives/require/Require.js +27 -0
  341. package/transpiled/directives/require/Require.js.map +1 -0
  342. package/transpiled/directives/require/index.d.ts +2 -0
  343. package/transpiled/directives/require/index.js +6 -0
  344. package/transpiled/directives/require/index.js.map +1 -0
  345. package/transpiled/directives/vary/Directive.d.ts +2 -1
  346. package/transpiled/directives/vary/Embed.d.ts +2 -1
  347. package/transpiled/directives/vary/Embed.js +8 -6
  348. package/transpiled/directives/vary/Embed.js.map +1 -1
  349. package/transpiled/directives/vary/Vary.d.ts +3 -3
  350. package/transpiled/directives/vary/Vary.js +4 -4
  351. package/transpiled/directives/vary/Vary.js.map +1 -1
  352. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  353. package/transpiled/directives/vary/embeddings/Header.js +9 -7
  354. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  355. package/transpiled/directives/vary/embeddings/Language.js +2 -2
  356. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  357. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  358. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  359. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  360. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  361. package/transpiled/directives/vary/embeddings/index.js +5 -3
  362. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  363. package/transpiled/exceptions.d.ts +3 -2
  364. package/transpiled/exceptions.js +13 -7
  365. package/transpiled/exceptions.js.map +1 -1
  366. package/transpiled/io.d.ts +2 -2
  367. package/transpiled/root.js +5 -0
  368. package/transpiled/root.js.map +1 -1
  369. package/transpiled/tsconfig.tsbuildinfo +1 -1
  370. package/components/identity.federation/operations/assertions-as-values.cjs.map +0 -1
  371. package/components/identity.federation/operations/jwt.cjs.map +0 -1
  372. package/source/HTTP/Server.fixtures.ts +0 -40
  373. package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
  374. package/transpiled/HTTP/Server.fixtures.js +0 -31
  375. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  376. package/transpiled/directives/octets/workflow/Execution.js.map +0 -1
  377. package/transpiled/directives/octets/workflow/Workflow.js.map +0 -1
  378. package/transpiled/directives/octets/workflow/index.js.map +0 -1
  379. /package/components/identity.federation/operations/{assertions-as-values.d.cts → lib/assertions-as-values.d.ts} +0 -0
  380. /package/source/directives/octets/{workflow → workflows}/index.ts +0 -0
  381. /package/transpiled/directives/octets/{workflow → workflows}/Execution.d.ts +0 -0
  382. /package/transpiled/directives/octets/{workflow → workflows}/index.d.ts +0 -0
  383. /package/transpiled/directives/octets/{workflow → workflows}/index.js +0 -0
@@ -96,9 +96,14 @@ The `identity.federation` component manages OpenID Connect federated identities.
96
96
  Both implicit identities creation and forced [identity inception](./identity.md) are supported
97
97
  as in case with basic credentials. `principal` is also working in the same way.
98
98
 
99
- The configuration schema alongside default values is described in the [component manifest](../components/identity.federation/manifest.toa.yaml).
99
+ The configuration schema alongside default values is described in
100
+ the [component manifest](../components/identity.federation/manifest.toa.yaml).
100
101
 
101
- No federated tokens are accepted by default until at least one entry is added to the `trust` configuration.
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.
102
107
 
103
108
  ```yaml
104
109
  # context.toa.yaml
@@ -110,6 +115,11 @@ configuration:
110
115
  audience:
111
116
  - https://github.com/tinovyatkin
112
117
  - https://github.com/temich
118
+
119
+ - issuer: some.private.issuer
120
+ secrets:
121
+ HS256:
122
+ k1: <secret-to-be-used-for-hs256>
113
123
  ```
114
124
 
115
125
  ## Stateless tokens
@@ -125,6 +135,14 @@ The new token is issued each time the request is made:
125
135
  1. Using authentication scheme other than `Token`.
126
136
  2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
127
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
+
128
146
  ### Token encryption
129
147
 
130
148
  Issued tokens are encrypted
@@ -135,7 +153,7 @@ using the `key0` configuration value as a secret.
135
153
  # context.toa.yaml
136
154
 
137
155
  configuration:
138
- identity.basic:
156
+ identity.tokens:
139
157
  key0: $TOKEN_ENCRYPTION_KEY
140
158
  ```
141
159
 
@@ -146,25 +164,22 @@ The `key0` configuration value is required.
146
164
  ### Token rotation
147
165
 
148
166
  Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
149
- period, the token is
150
- considered obsolete (yet still valid), and a new token is [issued](#issuing-tokens) unless the
151
- provided one has
152
- 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).
153
169
 
154
170
  This essentially means that if the client uses the token at least once every `lifetime` period, it
155
- will always have a
156
- valid token to authenticate with. Also, token revocation or changing roles of an Identity will take
157
- effect once
158
- 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.
159
174
 
160
175
  Adjusting these two values is a delicate trade-off between security, performance and client
161
- convinience.
176
+ convenience.
162
177
 
163
178
  ```yaml
164
179
  # context.toa.yaml
165
180
 
166
181
  configuration:
167
- identity.basic:
182
+ identity.tokens:
168
183
  lifetime: 2592000 # seconds, 30 days
169
184
  refresh: 600 # seconds, 10 minutes
170
185
  ```
@@ -192,7 +207,7 @@ the `key0` and `key1` values in order.
192
207
  # context.toa.yaml
193
208
 
194
209
  configuration:
195
- identity.basic:
210
+ identity.tokens:
196
211
  key0: $TOKEN_ENCRYPTION_KEY_2023Q3
197
212
  key1: $TOKEN_ENCRYPTION_KEY_2023Q2
198
213
  ```
@@ -224,7 +239,7 @@ The secret rotation is a 2-step process:
224
239
  # context.toa.yaml
225
240
 
226
241
  configuration:
227
- identity.basic:
242
+ identity.tokens:
228
243
  key0: $TOKEN_ENCRYPTION_KEY_2023Q3
229
244
  key1: $TOKEN_ENCRYPTION_KEY_2023Q4
230
245
  ```
@@ -237,18 +252,31 @@ configuration:
237
252
  # context.toa.yaml
238
253
 
239
254
  configuration:
240
- identity.basic:
255
+ identity.tokens:
241
256
  key0: $TOKEN_ENCRYPTION_KEY_2023Q4
242
257
  key1: $TOKEN_ENCRYPTION_KEY_2023Q3
243
258
  ```
244
259
 
245
- ## 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
+ ```
246
269
 
247
- 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).
248
273
 
249
- ### Role resources
274
+ ## Roles
250
275
 
251
- #### `/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/`
252
280
 
253
281
  `GET` Get roles of an Identity.
254
282
 
@@ -260,13 +288,16 @@ Access requires credentials of the Identity or `system:identity:roles` role.
260
288
  role: string
261
289
  ```
262
290
 
263
- 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)).
264
295
 
265
296
  ## Banned Identities
266
297
 
267
298
  The `identity.bans` component manages banned identities.
268
- A banned identity will fail to authenticate with any associated credentials (except [tokens](#stateless-tokens) within
269
- the `refresh` period).
299
+ A banned identity will fail to authenticate with any associated credentials
300
+ (except [tokens](#stateless-tokens) within the `refresh` period).
270
301
 
271
302
  ```http
272
303
  PUT /identity/bans/:id/
@@ -274,6 +305,7 @@ authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
274
305
  content-type: application/yaml
275
306
 
276
307
  banned: true
308
+ comment: Bye bye
277
309
  ```
278
310
 
279
311
  Access requires `system:identity:bans` role.
@@ -80,7 +80,14 @@ configuration:
80
80
  - issuer: https://accounts.google.com
81
81
  audience:
82
82
  - <GOOGLE_CLIENT_ID>
83
+
83
84
  - issuer: https://appleid.apple.com
85
+
86
+ - issuer: private.entity
87
+ secrets:
88
+ HS384:
89
+ key0: <THE-SECRET-STRING-FOR-HS384>
90
+ key1: <THE-SECRET-STRING-FOR-HS384> # selected by `kid` in the JWT header
84
91
  ```
85
92
 
86
93
  ## Identity inception
@@ -0,0 +1,56 @@
1
+ # I/O restrictions
2
+
3
+ The Exposition comes with `io` directives to control access to the operation's input and output
4
+ properties.
5
+
6
+ ## `io:input`
7
+
8
+ The `io:input` optional directive contains a list of properties that are allowed to be specified in
9
+ the request body.
10
+
11
+ ```yaml
12
+ POST:
13
+ endpoint: create
14
+ io:input: [name, location]
15
+ ```
16
+
17
+ The list must be a valid subset of the operation's input properties.
18
+
19
+ If `io:input` is specified and the request body is not an object, or contains properties that are
20
+ not in the list, the request will be rejected with a `400` status code.
21
+
22
+ > Therefore, `io:input` is only applicable to operations which input is an object or an
23
+ > array of objects.
24
+
25
+ ## `io:output`
26
+
27
+ The `io:output` mandatory directive contains a list of properties that are allowed to be included in
28
+ the response body.
29
+
30
+ ```yaml
31
+ GET:
32
+ endpoint: observe
33
+ io:output: [name, location]
34
+ ```
35
+
36
+ When an operation does not return an object (e.g., a primitive or a stream), or an object is dynamic
37
+ and its properties are not known in advance, `io:output` may have a value of `true` to disable
38
+ output restrictions.
39
+
40
+ ```yaml
41
+ GET:
42
+ endpoint: proxy
43
+ io:output: true
44
+ ```
45
+
46
+ If a method declaration lacks `io:output` directive, it will trigger a warning, and its
47
+ response will consistently be empty.
48
+ If this behavior is intended, a `false` value can be employed to suppress warnings.
49
+
50
+ ```yaml
51
+ GET:
52
+ endpoint: conceal
53
+ io:output: false
54
+ ```
55
+
56
+ Output restrictions are not applied to stream responses and errors.
@@ -209,6 +209,18 @@ under the request path.
209
209
 
210
210
  The request body must be a list of entry identifiers.
211
211
 
212
+ ## `octets:workflow`
213
+
214
+ Execute a [workflow](#workflows) on the entry under the request path.
215
+
216
+ ```yaml
217
+ /images:
218
+ /*:
219
+ DELETE:
220
+ octets:workflow:
221
+ archive: images.archive
222
+ ```
223
+
212
224
  ## Workflows
213
225
 
214
226
  A workflow is a list of endpoints to be called.
@@ -72,6 +72,9 @@ The following request headers are allowed:
72
72
  - `accept`
73
73
  - `authorization`
74
74
  - `content-type`
75
+ - `etag`
76
+ - `if-match`
77
+ - `if-none-match`
75
78
  - headers used by the [`vary:embed` directive](vary.md#embeddings)
76
79
 
77
80
  The following response headers are exposed:
@@ -6,10 +6,10 @@
6
6
  id?: string
7
7
  criteria?: string
8
8
  sort?: string
9
- omit?: [integer]
10
- limit?: [integer]
9
+ omit?: integer
10
+ limit?: integer
11
11
  selectors?: string[]
12
- projection?: [string]
12
+ projection?: string[]
13
13
  ```
14
14
 
15
15
  ```yaml
@@ -45,7 +45,7 @@ Undefined `query` denies any query arguments in requests.
45
45
 
46
46
  ## Criteria
47
47
 
48
- Search critaria in [RSQL](https://github.com/jirutka/rsql-parser) format.
48
+ Search criteria in [RSQL](https://github.com/jirutka/rsql-parser) format.
49
49
 
50
50
  The `criteria` property is considered as *open* when it ends with a `;`, allowing the combination of
51
51
  request query criteria using `and` logic.
@@ -77,7 +77,7 @@ query:
77
77
 
78
78
  ### Path variables
79
79
 
80
- Path variables are prepended to the `criteria` request query parameter using logial AND,
80
+ Path variables are prepended to the `criteria` request query parameter using logical AND,
81
81
  except for the [`POST` method](#post-method).
82
82
 
83
83
  Given the following declaration:
@@ -224,3 +224,48 @@ A list of Entity properties to be included in the Observation result.
224
224
  ```yaml
225
225
  projection: [id, title, timestamp]
226
226
  ```
227
+
228
+ ## Optimistic concurrency control
229
+
230
+ If an operation returns an object with `_version` property,
231
+ then its value is passed as the value of
232
+ the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response
233
+ (and removed from the object).
234
+
235
+ Client can use the `if-match` request header to perform an operation only if the corresponding
236
+ object has not been modified since the last retrieval.
237
+
238
+ ```http
239
+ GET /dummies/5e82ed5e/ HTTP/1.1
240
+
241
+ ---
242
+
243
+ HTTP/1.1 200 OK
244
+ etag: "1"
245
+
246
+ foo: bar
247
+ ```
248
+
249
+ ```http request
250
+ PUT /dummies/5e82ed5e/ HTTP/1.1
251
+ if-match: "1"
252
+
253
+ foo: baz
254
+ ```
255
+
256
+ ```http
257
+ 200 OK
258
+ ```
259
+
260
+ ```http request
261
+ PUT /dummies/5e82ed5e/ HTTP/1.1
262
+ if-match: "never"
263
+
264
+ foo: baz
265
+ ```
266
+
267
+ ```http
268
+ 412 Precondition Failed
269
+ ```
270
+
271
+ The value within the quotes is mapped to the `version` property of operation call query.
@@ -0,0 +1,15 @@
1
+ # Directive family Require
2
+
3
+ The `require` directive family provides the ability to specify HTTP request requirements to be met.
4
+
5
+ ## Headers
6
+
7
+ `require:header` requires a specific header to be present in the request, and `require:headers`
8
+ requires a set of headers to be present.
9
+
10
+ ```yaml
11
+ exposition:
12
+ /:id:
13
+ require:header: if-match # enforce concurrency control
14
+ PUT: transit
15
+ ```
@@ -102,7 +102,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
102
102
  | `GET` | **Observation**<br/>**Computation** |
103
103
  | `PATCH` | **Assignment**<br/>**Effect** |
104
104
 
105
- As method mapping is unambiguous for Observation, Assignent, and Computation, a consice syntax is
105
+ As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
106
106
  available:
107
107
 
108
108
  ```yaml
@@ -110,7 +110,23 @@ available:
110
110
  /items/:id: [observe, assign]
111
111
  ```
112
112
 
113
- ### Intermediate Nodes
113
+ ### Projections
114
+
115
+ A Method can have a `projection` key that specifies the fields of the operation result to be
116
+ included in the response.
117
+
118
+ ```yaml
119
+ /teapots:
120
+ GET:
121
+ endpoint: select
122
+ projection:
123
+ - name
124
+ - state
125
+ ```
126
+
127
+ > `id` is always included in the projection.
128
+
129
+ ## Intermediate Nodes
114
130
 
115
131
  An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
116
132
  Intermediate Nodes must not have Methods as they are unreachable.
@@ -124,8 +140,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
124
140
 
125
141
  ## Directives
126
142
 
127
- RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}` pattern and can be used
128
- to add or modify the behavior of request processing. Directive declarations are applied to the RTD node where they are
143
+ RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
144
+ pattern and can be used
145
+ to add or modify the behavior of request processing. Directive declarations are applied to the RTD
146
+ node where they are
129
147
  declared and to all nested nodes.
130
148
 
131
149
  ```yaml
@@ -9,13 +9,14 @@ operation call.
9
9
  exposition:
10
10
  realms:
11
11
  toa: the.toa.io
12
- /:
12
+ /:group:
13
13
  vary:languages: [en, fr]
14
14
  GET:
15
15
  vary:embed:
16
16
  lang: language # predefined embeddings
17
17
  realm: realm
18
18
  token: :x-access-token # raw header value
19
+ group: /:group # route parameter
19
20
  endpoint: dummies.get
20
21
  ```
21
22
 
@@ -47,8 +48,8 @@ If neither of the supported languages matches, the first supported language is u
47
48
 
48
49
  ### Raw header values
49
50
 
50
- Keys in the embedding map starting with a semicolon (:) are the names of HTTP request headers whose
51
- values to be embedded into an operation call.
51
+ Values in the embedding map starting with a semicolon (:) are the names of HTTP request headers
52
+ whose values to be embedded into an operation call.
52
53
  The names of these headers are then included in the `vary` HTTP response header
53
54
  and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
54
55
  of the [CORS](protocol.md#cors).
@@ -56,6 +57,11 @@ of the [CORS](protocol.md#cors).
56
57
  [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are embedded
57
58
  as a comma-separated list.
58
59
 
60
+ ### Route parameters
61
+
62
+ Values in the embedding map starting with `/:` are the names of route parameters whose values
63
+ to be embedded into an operation call.
64
+
59
65
  ### Fallbacks
60
66
 
61
67
  If the embedding function is an array, the first non-empty resolved value is used.
@@ -1,3 +1,4 @@
1
+ @security
1
2
  Feature: Access authorization
2
3
 
3
4
  Background:
@@ -30,6 +31,7 @@ Feature: Access authorization
30
31
  Given the annotation:
31
32
  """yaml
32
33
  /:
34
+ io:output: true
33
35
  auth:anonymous: true
34
36
  GET:
35
37
  dev:stub:
@@ -71,6 +73,7 @@ Feature: Access authorization
71
73
  Given the annotation:
72
74
  """yaml
73
75
  /:
76
+ io:output: true
74
77
  /:id:
75
78
  auth:id: id
76
79
  GET:
@@ -109,6 +112,7 @@ Feature: Access authorization
109
112
  And the annotation:
110
113
  """yaml
111
114
  /:
115
+ io:output: true
112
116
  auth:role: developer
113
117
  GET:
114
118
  dev:stub:
@@ -146,6 +150,7 @@ Feature: Access authorization
146
150
  And the annotation:
147
151
  """yaml
148
152
  /:
153
+ io:output: true
149
154
  /:
150
155
  auth:role: developer:rust:junior # role scope matches
151
156
  /nested:
@@ -190,6 +195,7 @@ Feature: Access authorization
190
195
  - developer
191
196
  - admin
192
197
  GET:
198
+ io:output: true
193
199
  dev:stub:
194
200
  access: granted!
195
201
  """
@@ -215,6 +221,7 @@ Feature: Access authorization
215
221
  And the annotation:
216
222
  """yaml
217
223
  /:
224
+ io:output: true
218
225
  /rust/:id:
219
226
  auth:rule:
220
227
  id: id
@@ -257,6 +264,7 @@ Feature: Access authorization
257
264
  Given the annotation:
258
265
  """yaml
259
266
  /:
267
+ io:output: true
260
268
  /:id:
261
269
  auth:id: id
262
270
  GET:
@@ -295,6 +303,7 @@ Feature: Access authorization
295
303
  Given the annotation:
296
304
  """yaml
297
305
  /:
306
+ io:output: true
298
307
  auth:role: developer
299
308
  GET:
300
309
  dev:stub:
@@ -335,6 +344,7 @@ Feature: Access authorization
335
344
  Given the annotation:
336
345
  """yaml
337
346
  /:
347
+ io:output: true
338
348
  /:id:
339
349
  auth:scheme: basic
340
350
  auth:id: id
@@ -374,7 +384,8 @@ Feature: Access authorization
374
384
 
375
385
  Given the annotation:
376
386
  """yaml
377
- anonymous: true
387
+ /:
388
+ anonymous: true
378
389
  """
379
390
  When the following request is received:
380
391
  """
@@ -388,62 +399,30 @@ Feature: Access authorization
388
399
  401 Unauthorized
389
400
  """
390
401
 
391
- Scenario: Banning an Identity
402
+ Scenario: Authorization delegation
392
403
  Given the `identity.roles` database contains:
393
- | _id | identity | role |
394
- | 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | system |
395
- And the annotation:
396
- """yaml
397
- /:
398
- /:id:
399
- auth:id: id
400
- GET:
401
- dev:stub:
402
- access: granted!
403
- """
404
- And the `identity.tokens` configuration:
404
+ | _id | identity | role |
405
+ | 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
406
+ And the `echo` is running with the following manifest:
405
407
  """yaml
406
- refresh: 1
408
+ exposition:
409
+ /:
410
+ io:output: true
411
+ auth:delegate: identity
412
+ GET: identity
407
413
  """
408
414
  When the following request is received:
409
415
  """
410
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
411
- authorization: Basic dXNlcjoxMjM0NQ==
416
+ GET /echo/ HTTP/1.1
417
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
418
+ accept: application/yaml
412
419
  """
413
420
  Then the following reply is sent:
414
421
  """
415
422
  200 OK
416
- authorization: Token ${{ token }}
417
- """
418
- When the following request is received:
419
- """
420
- PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
421
- authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
422
- content-type: application/yaml
423
423
 
424
- banned: true
425
- """
426
- Then the following reply is sent:
427
- """
428
- 204 No Content
429
- """
430
- # accessing a resource with a banned Identity
431
- When the following request is received:
432
- """
433
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
434
- authorization: Basic dXNlcjoxMjM0NQ==
435
- """
436
- Then the following reply is sent:
437
- """
438
- 401 Unauthorized
439
- """
440
- Then after 1 second
441
- When the following request is received:
442
- """
443
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
444
- authorization: Token ${{ token }}
445
- """
446
- Then the following reply is sent:
447
- """
448
- 401 Unauthorized
424
+ identity:
425
+ id: efe3a65ebbee47ed95a73edd911ea328
426
+ roles:
427
+ - developer
449
428
  """
@@ -4,6 +4,7 @@ Feature: Annotation
4
4
  Given the annotation:
5
5
  """yaml
6
6
  /:
7
+ io:output: true
7
8
  anonymous: true
8
9
  /foo:
9
10
  GET:
@@ -5,7 +5,8 @@ Feature: Request body
5
5
  """yaml
6
6
  exposition:
7
7
  /:
8
- POST: transit
8
+ io:output: true
9
+ POST: create
9
10
  """
10
11
  When the following request is received:
11
12
  """
@@ -25,6 +26,7 @@ Feature: Request body
25
26
  """yaml
26
27
  exposition:
27
28
  /:name:
29
+ io:output: true
28
30
  GET: <operation>
29
31
  """
30
32
  When the following request is received: