@toa.io/extensions.exposition 1.0.0-alpha.10 → 1.0.0-alpha.101

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 (540) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +14 -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 +19 -10
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +5 -2
  12. package/components/identity.basic/operations/authenticate.js.map +1 -1
  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 +4 -4
  17. package/components/identity.basic/operations/transit.js +8 -6
  18. package/components/identity.basic/operations/transit.js.map +1 -1
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  20. package/components/identity.basic/operations/types.d.ts +8 -4
  21. package/components/identity.basic/source/authenticate.ts +16 -5
  22. package/components/identity.basic/source/incept.ts +38 -0
  23. package/components/identity.basic/source/transit.ts +11 -9
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +58 -19
  26. package/components/identity.federation/operations/authenticate.d.ts +13 -2
  27. package/components/identity.federation/operations/authenticate.js +10 -10
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/incept.d.ts +11 -0
  30. package/components/identity.federation/operations/incept.js +14 -0
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/assertions-as-values.js +4 -2
  33. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
  34. package/components/identity.federation/operations/lib/get.d.ts +1 -0
  35. package/components/identity.federation/operations/lib/get.js +64 -0
  36. package/components/identity.federation/operations/lib/get.js.map +1 -0
  37. package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
  38. package/components/identity.federation/operations/lib/jwt.js +20 -16
  39. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  40. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  41. package/components/identity.federation/operations/types/configuration.d.ts +15 -0
  42. package/components/identity.federation/operations/types/configuration.js +3 -0
  43. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  44. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +10 -12
  45. package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/types/context.js} +1 -1
  46. package/components/identity.federation/operations/types/context.js.map +1 -0
  47. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  48. package/components/identity.federation/operations/types/entity.js +3 -0
  49. package/components/identity.federation/operations/types/entity.js.map +1 -0
  50. package/components/identity.federation/operations/types/index.d.ts +3 -0
  51. package/components/identity.federation/operations/types/index.js +20 -0
  52. package/components/identity.federation/operations/types/index.js.map +1 -0
  53. package/components/identity.federation/source/authenticate.ts +25 -17
  54. package/components/identity.federation/source/incept.ts +26 -0
  55. package/components/identity.federation/source/lib/assertions-as-values.ts +5 -2
  56. package/components/identity.federation/source/lib/get.ts +82 -0
  57. package/components/identity.federation/source/lib/jwt.test.ts +127 -4
  58. package/components/identity.federation/source/lib/jwt.ts +26 -19
  59. package/components/identity.federation/source/types/configuration.ts +16 -0
  60. package/components/identity.federation/source/{types.ts → types/context.ts} +11 -12
  61. package/components/identity.federation/source/types/entity.ts +6 -0
  62. package/components/identity.federation/source/types/index.ts +3 -0
  63. package/components/identity.federation/tsconfig.json +5 -4
  64. package/components/identity.roles/manifest.toa.yaml +9 -8
  65. package/components/identity.roles/operations/grant.d.ts +1 -1
  66. package/components/identity.roles/operations/grant.js +6 -5
  67. package/components/identity.roles/operations/grant.js.map +1 -1
  68. package/components/identity.roles/operations/lib/Entity.d.ts +1 -1
  69. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  70. package/components/identity.roles/source/grant.ts +7 -6
  71. package/components/identity.roles/source/lib/Entity.ts +1 -1
  72. package/components/identity.tokens/manifest.toa.yaml +18 -4
  73. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  74. package/components/identity.tokens/operations/authenticate.js +12 -5
  75. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  76. package/components/identity.tokens/operations/decrypt.js +1 -0
  77. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  78. package/components/identity.tokens/operations/encrypt.js +5 -1
  79. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  80. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  81. package/components/identity.tokens/operations/types.d.ts +8 -2
  82. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  83. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  84. package/components/identity.tokens/source/authenticate.ts +14 -6
  85. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  86. package/components/identity.tokens/source/decrypt.ts +9 -8
  87. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  88. package/components/identity.tokens/source/encrypt.ts +5 -1
  89. package/components/identity.tokens/source/types.ts +9 -2
  90. package/components/octets.storage/manifest.toa.yaml +10 -11
  91. package/components/octets.storage/operations/get.js +3 -3
  92. package/components/octets.storage/operations/head.js +7 -0
  93. package/components/octets.storage/operations/put.js +132 -0
  94. package/documentation/access.md +71 -29
  95. package/documentation/authorities.md +48 -0
  96. package/documentation/cache.md +8 -1
  97. package/documentation/components.md +48 -15
  98. package/documentation/flow.md +44 -0
  99. package/documentation/identity.md +26 -22
  100. package/documentation/introspection.md +82 -0
  101. package/documentation/map.md +73 -0
  102. package/documentation/octets.md +100 -68
  103. package/documentation/protocol.md +14 -4
  104. package/documentation/query.md +29 -4
  105. package/documentation/require.md +15 -0
  106. package/documentation/tree.md +13 -0
  107. package/features/access.feature +129 -48
  108. package/features/annotation.feature +1 -0
  109. package/features/auth.claims.feature +171 -0
  110. package/features/authorities.basic.feature +141 -0
  111. package/features/authorities.feature +32 -0
  112. package/features/authorities.federation.feature +100 -0
  113. package/features/authorities.tokens.feature +117 -0
  114. package/features/body.feature +2 -0
  115. package/features/cache.feature +109 -5
  116. package/features/cors.feature +7 -1
  117. package/features/debug.feature +34 -0
  118. package/features/directives.feature +3 -0
  119. package/features/dynamic.feature +48 -0
  120. package/features/errors.feature +32 -7
  121. package/features/etag.feature +109 -1
  122. package/features/flow.feature +96 -0
  123. package/features/identity.bans.feature +137 -0
  124. package/features/identity.basic.feature +85 -28
  125. package/features/identity.feature +18 -6
  126. package/features/identity.federation.feature +129 -14
  127. package/features/identity.roles.feature +112 -19
  128. package/features/identity.tokens.feature +54 -4
  129. package/features/introspection.feature +153 -0
  130. package/features/io.feature +38 -1
  131. package/features/map.feature +241 -0
  132. package/features/methods.feature +47 -0
  133. package/features/octets.cloudinary.feature +68 -0
  134. package/features/octets.download.feature +189 -0
  135. package/features/octets.entries.feature +13 -55
  136. package/features/octets.feature +84 -108
  137. package/features/octets.head.feature +40 -0
  138. package/features/octets.meta.feature +65 -15
  139. package/features/octets.workflows.feature +242 -58
  140. package/features/probes.feature +14 -0
  141. package/features/{queries.feature → query.feature} +77 -2
  142. package/features/realtime.feature +34 -0
  143. package/features/require.feature +67 -0
  144. package/features/response.feature +38 -3
  145. package/features/routes.feature +93 -2
  146. package/features/server.feature +21 -0
  147. package/features/steps/.env.example +3 -0
  148. package/features/steps/Database.ts +16 -9
  149. package/features/steps/Gateway.ts +23 -6
  150. package/features/steps/IdP.ts +31 -25
  151. package/features/steps/Parameters.ts +44 -1
  152. package/features/steps/Realtime.ts +151 -0
  153. package/features/steps/components/echo/manifest.toa.yaml +14 -1
  154. package/features/steps/components/echo/operations/identity.js +7 -0
  155. package/features/steps/components/echo/operations/parameters.js +7 -0
  156. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  157. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  158. package/features/steps/components/octets.tester/manifest.toa.yaml +22 -2
  159. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  160. package/features/steps/components/octets.tester/operations/bar.js +0 -1
  161. package/features/steps/components/octets.tester/operations/baz.js +0 -2
  162. package/features/steps/components/octets.tester/operations/foo.js +1 -2
  163. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  164. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  165. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  166. package/features/steps/components/pots/manifest.toa.yaml +14 -3
  167. package/features/steps/components/users/manifest.toa.yaml +0 -1
  168. package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
  169. package/features/streams.feature +5 -0
  170. package/features/timing.feature +4 -1
  171. package/package.json +21 -12
  172. package/readme.md +19 -14
  173. package/schemas/annotation.cos.yaml +1 -1
  174. package/schemas/method.cos.yaml +1 -1
  175. package/schemas/node.cos.yaml +2 -0
  176. package/schemas/octets/put.cos.yaml +25 -0
  177. package/schemas/query.cos.yaml +4 -10
  178. package/source/Annotation.ts +3 -3
  179. package/source/Branch.ts +1 -0
  180. package/source/Composition.ts +0 -6
  181. package/source/Context.ts +1 -0
  182. package/source/Directive.test.ts +1 -1
  183. package/source/Directive.ts +7 -6
  184. package/source/Endpoint.ts +59 -17
  185. package/source/Factory.ts +22 -13
  186. package/source/Gateway.ts +67 -18
  187. package/source/HTTP/Context.ts +26 -3
  188. package/source/HTTP/Server.ts +61 -47
  189. package/source/HTTP/exceptions.ts +13 -1
  190. package/source/HTTP/formats/index.ts +3 -3
  191. package/source/HTTP/messages.test.ts +45 -2
  192. package/source/HTTP/messages.ts +32 -8
  193. package/source/Introspection.ts +11 -0
  194. package/source/Mapping.ts +68 -21
  195. package/source/Query.test.ts +3 -3
  196. package/source/Query.ts +123 -33
  197. package/source/RTD/Context.ts +1 -1
  198. package/source/RTD/Endpoint.ts +3 -0
  199. package/source/RTD/Method.ts +16 -0
  200. package/source/RTD/Node.ts +29 -13
  201. package/source/RTD/Route.ts +5 -4
  202. package/source/RTD/Tree.ts +2 -2
  203. package/source/RTD/factory.ts +5 -2
  204. package/source/RTD/syntax/parse.test.ts +1 -1
  205. package/source/RTD/syntax/parse.ts +37 -24
  206. package/source/RTD/syntax/types.ts +6 -4
  207. package/source/Remotes.ts +7 -6
  208. package/source/Tenant.ts +6 -20
  209. package/source/deployment.ts +33 -23
  210. package/source/directives/auth/Anyone.ts +13 -0
  211. package/source/directives/auth/Authorization.ts +44 -21
  212. package/source/directives/auth/Delegate.ts +14 -4
  213. package/source/directives/auth/Echo.ts +19 -5
  214. package/source/directives/auth/Federation.ts +84 -0
  215. package/source/directives/auth/Incept.ts +4 -3
  216. package/source/directives/auth/Role.test.ts +53 -6
  217. package/source/directives/auth/Role.ts +22 -14
  218. package/source/directives/auth/Scheme.ts +1 -1
  219. package/source/directives/auth/split.ts +1 -1
  220. package/source/directives/auth/types.ts +2 -2
  221. package/source/directives/cache/Cache.ts +13 -6
  222. package/source/directives/cache/Control.ts +42 -16
  223. package/source/directives/cors/CORS.ts +2 -1
  224. package/source/directives/dev/Development.ts +1 -1
  225. package/source/directives/flow/Compose.ts +68 -0
  226. package/source/directives/flow/Fetch.ts +86 -0
  227. package/source/directives/flow/Flow.ts +42 -0
  228. package/source/directives/flow/index.ts +3 -0
  229. package/source/directives/flow/types.ts +7 -0
  230. package/source/directives/index.ts +4 -2
  231. package/source/directives/io/IO.ts +1 -1
  232. package/source/directives/io/Input.ts +4 -4
  233. package/source/directives/io/Output.ts +5 -4
  234. package/source/directives/map/Authority.ts +15 -0
  235. package/source/directives/map/Claims.ts +37 -0
  236. package/source/directives/map/Directive.ts +4 -0
  237. package/source/directives/map/Headers.ts +38 -0
  238. package/source/directives/map/Language.ts +42 -0
  239. package/source/directives/map/Languages.ts +11 -0
  240. package/source/directives/map/Map.ts +56 -0
  241. package/source/directives/map/Mapping.ts +13 -0
  242. package/source/directives/{vary → map}/Properties.ts +2 -4
  243. package/source/directives/map/Segments.ts +26 -0
  244. package/source/directives/map/index.ts +3 -0
  245. package/source/directives/octets/Context.ts +3 -2
  246. package/source/directives/octets/Delete.ts +11 -11
  247. package/source/directives/octets/Get.ts +86 -0
  248. package/source/directives/octets/Octets.ts +9 -12
  249. package/source/directives/octets/{Store.ts → Put.ts} +37 -21
  250. package/source/directives/octets/Workflow.ts +1 -1
  251. package/source/directives/octets/bytes.test.ts +30 -0
  252. package/source/directives/octets/bytes.ts +18 -0
  253. package/source/directives/octets/schemas.ts +4 -8
  254. package/source/directives/octets/workflows/Execution.ts +60 -8
  255. package/source/directives/octets/workflows/Workflow.ts +4 -4
  256. package/source/directives/require/Directive.ts +5 -0
  257. package/source/directives/require/Headers.ts +20 -0
  258. package/source/directives/require/Require.ts +28 -0
  259. package/source/directives/require/index.ts +3 -0
  260. package/source/exceptions.ts +14 -6
  261. package/source/manifest.ts +10 -11
  262. package/source/root.ts +5 -5
  263. package/source/schemas.ts +1 -1
  264. package/transpiled/Annotation.d.ts +3 -3
  265. package/transpiled/Branch.d.ts +1 -0
  266. package/transpiled/Composition.d.ts +0 -1
  267. package/transpiled/Composition.js +0 -4
  268. package/transpiled/Composition.js.map +1 -1
  269. package/transpiled/Context.d.ts +1 -0
  270. package/transpiled/Directive.js +7 -5
  271. package/transpiled/Directive.js.map +1 -1
  272. package/transpiled/Endpoint.d.ts +6 -4
  273. package/transpiled/Endpoint.js +39 -9
  274. package/transpiled/Endpoint.js.map +1 -1
  275. package/transpiled/Factory.d.ts +3 -2
  276. package/transpiled/Factory.js +18 -10
  277. package/transpiled/Factory.js.map +1 -1
  278. package/transpiled/Gateway.d.ts +3 -0
  279. package/transpiled/Gateway.js +50 -10
  280. package/transpiled/Gateway.js.map +1 -1
  281. package/transpiled/HTTP/Context.d.ts +9 -2
  282. package/transpiled/HTTP/Context.js +16 -2
  283. package/transpiled/HTTP/Context.js.map +1 -1
  284. package/transpiled/HTTP/Server.d.ts +13 -2
  285. package/transpiled/HTTP/Server.js +47 -40
  286. package/transpiled/HTTP/Server.js.map +1 -1
  287. package/transpiled/HTTP/exceptions.d.ts +7 -1
  288. package/transpiled/HTTP/exceptions.js +13 -1
  289. package/transpiled/HTTP/exceptions.js.map +1 -1
  290. package/transpiled/HTTP/formats/index.js +3 -3
  291. package/transpiled/HTTP/formats/index.js.map +1 -1
  292. package/transpiled/HTTP/messages.d.ts +2 -1
  293. package/transpiled/HTTP/messages.js +30 -7
  294. package/transpiled/HTTP/messages.js.map +1 -1
  295. package/transpiled/Introspection.d.ts +9 -0
  296. package/transpiled/Introspection.js +3 -0
  297. package/transpiled/Introspection.js.map +1 -0
  298. package/transpiled/Mapping.d.ts +11 -2
  299. package/transpiled/Mapping.js +50 -19
  300. package/transpiled/Mapping.js.map +1 -1
  301. package/transpiled/Query.d.ts +10 -1
  302. package/transpiled/Query.js +87 -30
  303. package/transpiled/Query.js.map +1 -1
  304. package/transpiled/RTD/Context.d.ts +1 -1
  305. package/transpiled/RTD/Endpoint.d.ts +1 -0
  306. package/transpiled/RTD/Method.d.ts +4 -0
  307. package/transpiled/RTD/Method.js +11 -0
  308. package/transpiled/RTD/Method.js.map +1 -1
  309. package/transpiled/RTD/Node.d.ts +4 -1
  310. package/transpiled/RTD/Node.js +23 -12
  311. package/transpiled/RTD/Node.js.map +1 -1
  312. package/transpiled/RTD/Route.d.ts +1 -1
  313. package/transpiled/RTD/Route.js +0 -1
  314. package/transpiled/RTD/Route.js.map +1 -1
  315. package/transpiled/RTD/Tree.d.ts +1 -1
  316. package/transpiled/RTD/Tree.js.map +1 -1
  317. package/transpiled/RTD/factory.js +5 -2
  318. package/transpiled/RTD/factory.js.map +1 -1
  319. package/transpiled/RTD/syntax/parse.js +34 -22
  320. package/transpiled/RTD/syntax/parse.js.map +1 -1
  321. package/transpiled/RTD/syntax/types.d.ts +5 -3
  322. package/transpiled/RTD/syntax/types.js +1 -1
  323. package/transpiled/RTD/syntax/types.js.map +1 -1
  324. package/transpiled/Remotes.d.ts +4 -4
  325. package/transpiled/Remotes.js +6 -5
  326. package/transpiled/Remotes.js.map +1 -1
  327. package/transpiled/Tenant.d.ts +5 -5
  328. package/transpiled/Tenant.js +2 -13
  329. package/transpiled/Tenant.js.map +1 -1
  330. package/transpiled/deployment.d.ts +1 -1
  331. package/transpiled/deployment.js +28 -20
  332. package/transpiled/deployment.js.map +1 -1
  333. package/transpiled/directives/auth/Anyone.d.ts +6 -0
  334. package/transpiled/directives/auth/Anyone.js +14 -0
  335. package/transpiled/directives/auth/Anyone.js.map +1 -0
  336. package/transpiled/directives/auth/Authorization.d.ts +1 -1
  337. package/transpiled/directives/auth/Authorization.js +32 -18
  338. package/transpiled/directives/auth/Authorization.js.map +1 -1
  339. package/transpiled/directives/auth/Delegate.d.ts +4 -2
  340. package/transpiled/directives/auth/Delegate.js +11 -4
  341. package/transpiled/directives/auth/Delegate.js.map +1 -1
  342. package/transpiled/directives/auth/Echo.d.ts +4 -3
  343. package/transpiled/directives/auth/Echo.js +13 -3
  344. package/transpiled/directives/auth/Echo.js.map +1 -1
  345. package/transpiled/directives/auth/Federation.d.ts +16 -0
  346. package/transpiled/directives/auth/Federation.js +57 -0
  347. package/transpiled/directives/auth/Federation.js.map +1 -0
  348. package/transpiled/directives/auth/Incept.js +4 -3
  349. package/transpiled/directives/auth/Incept.js.map +1 -1
  350. package/transpiled/directives/auth/Role.d.ts +4 -1
  351. package/transpiled/directives/auth/Role.js +20 -14
  352. package/transpiled/directives/auth/Role.js.map +1 -1
  353. package/transpiled/directives/auth/Scheme.js +1 -1
  354. package/transpiled/directives/auth/Scheme.js.map +1 -1
  355. package/transpiled/directives/auth/split.js +1 -1
  356. package/transpiled/directives/auth/split.js.map +1 -1
  357. package/transpiled/directives/auth/types.d.ts +1 -1
  358. package/transpiled/directives/cache/Cache.d.ts +3 -3
  359. package/transpiled/directives/cache/Cache.js +10 -4
  360. package/transpiled/directives/cache/Cache.js.map +1 -1
  361. package/transpiled/directives/cache/Control.d.ts +2 -1
  362. package/transpiled/directives/cache/Control.js +29 -12
  363. package/transpiled/directives/cache/Control.js.map +1 -1
  364. package/transpiled/directives/cors/CORS.js +2 -1
  365. package/transpiled/directives/cors/CORS.js.map +1 -1
  366. package/transpiled/directives/dev/Development.js +1 -1
  367. package/transpiled/directives/dev/Development.js.map +1 -1
  368. package/transpiled/directives/flow/Compose.d.ts +8 -0
  369. package/transpiled/directives/flow/Compose.js +74 -0
  370. package/transpiled/directives/flow/Compose.js.map +1 -0
  371. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  372. package/transpiled/directives/flow/Fetch.js +58 -0
  373. package/transpiled/directives/flow/Fetch.js.map +1 -0
  374. package/transpiled/directives/flow/Flow.d.ts +10 -0
  375. package/transpiled/directives/flow/Flow.js +33 -0
  376. package/transpiled/directives/flow/Flow.js.map +1 -0
  377. package/transpiled/directives/flow/index.d.ts +2 -0
  378. package/transpiled/directives/flow/index.js +6 -0
  379. package/transpiled/directives/flow/index.js.map +1 -0
  380. package/transpiled/directives/flow/types.d.ts +6 -0
  381. package/transpiled/directives/flow/types.js.map +1 -0
  382. package/transpiled/directives/index.js +4 -2
  383. package/transpiled/directives/index.js.map +1 -1
  384. package/transpiled/directives/io/IO.js +1 -1
  385. package/transpiled/directives/io/IO.js.map +1 -1
  386. package/transpiled/directives/io/Input.js +2 -2
  387. package/transpiled/directives/io/Input.js.map +1 -1
  388. package/transpiled/directives/io/Output.js +2 -2
  389. package/transpiled/directives/io/Output.js.map +1 -1
  390. package/transpiled/directives/map/Authority.d.ts +6 -0
  391. package/transpiled/directives/map/Authority.js +19 -0
  392. package/transpiled/directives/map/Authority.js.map +1 -0
  393. package/transpiled/directives/map/Claims.d.ts +6 -0
  394. package/transpiled/directives/map/Claims.js +29 -0
  395. package/transpiled/directives/map/Claims.js.map +1 -0
  396. package/transpiled/directives/map/Directive.d.ts +3 -0
  397. package/transpiled/directives/map/Directive.js.map +1 -0
  398. package/transpiled/directives/map/Headers.d.ts +7 -0
  399. package/transpiled/directives/map/Headers.js +34 -0
  400. package/transpiled/directives/map/Headers.js.map +1 -0
  401. package/transpiled/directives/map/Language.d.ts +10 -0
  402. package/transpiled/directives/map/Language.js +38 -0
  403. package/transpiled/directives/map/Language.js.map +1 -0
  404. package/transpiled/directives/map/Languages.d.ts +4 -0
  405. package/transpiled/directives/map/Languages.js +17 -0
  406. package/transpiled/directives/map/Languages.js.map +1 -0
  407. package/transpiled/directives/map/Map.d.ts +11 -0
  408. package/transpiled/directives/map/Map.js +44 -0
  409. package/transpiled/directives/map/Map.js.map +1 -0
  410. package/transpiled/directives/map/Mapping.d.ts +8 -0
  411. package/transpiled/directives/map/Mapping.js +11 -0
  412. package/transpiled/directives/map/Mapping.js.map +1 -0
  413. package/transpiled/directives/{vary → map}/Properties.d.ts +2 -2
  414. package/transpiled/directives/{vary → map}/Properties.js +1 -3
  415. package/transpiled/directives/map/Properties.js.map +1 -0
  416. package/transpiled/directives/map/Segments.d.ts +6 -0
  417. package/transpiled/directives/map/Segments.js +25 -0
  418. package/transpiled/directives/map/Segments.js.map +1 -0
  419. package/transpiled/directives/map/index.d.ts +2 -0
  420. package/transpiled/directives/map/index.js +6 -0
  421. package/transpiled/directives/map/index.js.map +1 -0
  422. package/transpiled/directives/octets/Context.js +4 -24
  423. package/transpiled/directives/octets/Context.js.map +1 -1
  424. package/transpiled/directives/octets/Delete.js +8 -8
  425. package/transpiled/directives/octets/Delete.js.map +1 -1
  426. package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
  427. package/transpiled/directives/octets/{Fetch.js → Get.js} +25 -29
  428. package/transpiled/directives/octets/Get.js.map +1 -0
  429. package/transpiled/directives/octets/Octets.js +9 -12
  430. package/transpiled/directives/octets/Octets.js.map +1 -1
  431. package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +7 -2
  432. package/transpiled/directives/octets/{Store.js → Put.js} +26 -19
  433. package/transpiled/directives/octets/Put.js.map +1 -0
  434. package/transpiled/directives/octets/Workflow.js +1 -1
  435. package/transpiled/directives/octets/Workflow.js.map +1 -1
  436. package/transpiled/directives/octets/bytes.d.ts +1 -0
  437. package/transpiled/directives/octets/bytes.js +21 -0
  438. package/transpiled/directives/octets/bytes.js.map +1 -0
  439. package/transpiled/directives/octets/schemas.d.ts +4 -8
  440. package/transpiled/directives/octets/schemas.js +3 -6
  441. package/transpiled/directives/octets/schemas.js.map +1 -1
  442. package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
  443. package/transpiled/directives/octets/workflows/Execution.js +44 -9
  444. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  445. package/transpiled/directives/octets/workflows/Workflow.d.ts +1 -1
  446. package/transpiled/directives/octets/workflows/Workflow.js +2 -1
  447. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  448. package/transpiled/directives/require/Directive.d.ts +4 -0
  449. package/transpiled/directives/require/Directive.js +3 -0
  450. package/transpiled/directives/require/Directive.js.map +1 -0
  451. package/transpiled/directives/require/Headers.d.ts +7 -0
  452. package/transpiled/directives/require/Headers.js +19 -0
  453. package/transpiled/directives/require/Headers.js.map +1 -0
  454. package/transpiled/directives/require/Require.d.ts +9 -0
  455. package/transpiled/directives/require/Require.js +27 -0
  456. package/transpiled/directives/require/Require.js.map +1 -0
  457. package/transpiled/directives/require/index.d.ts +2 -0
  458. package/transpiled/directives/require/index.js +6 -0
  459. package/transpiled/directives/require/index.js.map +1 -0
  460. package/transpiled/exceptions.d.ts +3 -2
  461. package/transpiled/exceptions.js +8 -1
  462. package/transpiled/exceptions.js.map +1 -1
  463. package/transpiled/manifest.js +10 -11
  464. package/transpiled/manifest.js.map +1 -1
  465. package/transpiled/root.js +5 -5
  466. package/transpiled/root.js.map +1 -1
  467. package/transpiled/schemas.d.ts +1 -1
  468. package/transpiled/schemas.js +2 -2
  469. package/transpiled/schemas.js.map +1 -1
  470. package/transpiled/tsconfig.tsbuildinfo +1 -1
  471. package/components/identity.basic/operations/create.d.ts +0 -10
  472. package/components/identity.basic/operations/create.js +0 -10
  473. package/components/identity.basic/operations/create.js.map +0 -1
  474. package/components/identity.basic/source/create.ts +0 -18
  475. package/components/identity.federation/operations/create.d.ts +0 -10
  476. package/components/identity.federation/operations/create.js +0 -15
  477. package/components/identity.federation/operations/create.js.map +0 -1
  478. package/components/identity.federation/operations/schemas.d.ts +0 -59
  479. package/components/identity.federation/operations/schemas.js +0 -9
  480. package/components/identity.federation/operations/schemas.js.map +0 -1
  481. package/components/identity.federation/operations/types.js.map +0 -1
  482. package/components/identity.federation/source/create.ts +0 -26
  483. package/components/identity.federation/source/schemas.ts +0 -61
  484. package/components/octets.storage/operations/fetch.js +0 -46
  485. package/components/octets.storage/operations/list.js +0 -7
  486. package/components/octets.storage/operations/permute.js +0 -7
  487. package/components/octets.storage/operations/store.js +0 -11
  488. package/documentation/vary.md +0 -69
  489. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  490. package/features/vary.feature +0 -180
  491. package/schemas/octets/context.cos.yaml +0 -1
  492. package/schemas/octets/fetch.cos.yaml +0 -3
  493. package/schemas/octets/permute.cos.yaml +0 -1
  494. package/schemas/octets/store.cos.yaml +0 -3
  495. package/source/HTTP/Server.test.ts +0 -126
  496. package/source/directives/octets/Fetch.ts +0 -100
  497. package/source/directives/octets/List.ts +0 -72
  498. package/source/directives/octets/Permute.ts +0 -44
  499. package/source/directives/vary/Directive.ts +0 -6
  500. package/source/directives/vary/Embed.ts +0 -62
  501. package/source/directives/vary/Vary.ts +0 -48
  502. package/source/directives/vary/embeddings/Embedding.ts +0 -6
  503. package/source/directives/vary/embeddings/Header.ts +0 -32
  504. package/source/directives/vary/embeddings/Language.ts +0 -31
  505. package/source/directives/vary/embeddings/index.ts +0 -11
  506. package/source/directives/vary/index.ts +0 -3
  507. package/transpiled/directives/octets/Fetch.js.map +0 -1
  508. package/transpiled/directives/octets/List.d.ts +0 -16
  509. package/transpiled/directives/octets/List.js +0 -74
  510. package/transpiled/directives/octets/List.js.map +0 -1
  511. package/transpiled/directives/octets/Permute.d.ts +0 -11
  512. package/transpiled/directives/octets/Permute.js +0 -58
  513. package/transpiled/directives/octets/Permute.js.map +0 -1
  514. package/transpiled/directives/octets/Store.js.map +0 -1
  515. package/transpiled/directives/vary/Directive.d.ts +0 -5
  516. package/transpiled/directives/vary/Directive.js.map +0 -1
  517. package/transpiled/directives/vary/Embed.d.ts +0 -10
  518. package/transpiled/directives/vary/Embed.js +0 -49
  519. package/transpiled/directives/vary/Embed.js.map +0 -1
  520. package/transpiled/directives/vary/Properties.js.map +0 -1
  521. package/transpiled/directives/vary/Vary.d.ts +0 -10
  522. package/transpiled/directives/vary/Vary.js +0 -36
  523. package/transpiled/directives/vary/Vary.js.map +0 -1
  524. package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -5
  525. package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
  526. package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
  527. package/transpiled/directives/vary/embeddings/Header.js +0 -28
  528. package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
  529. package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
  530. package/transpiled/directives/vary/embeddings/Language.js +0 -28
  531. package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
  532. package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
  533. package/transpiled/directives/vary/embeddings/index.js +0 -10
  534. package/transpiled/directives/vary/embeddings/index.js.map +0 -1
  535. package/transpiled/directives/vary/index.d.ts +0 -2
  536. package/transpiled/directives/vary/index.js +0 -6
  537. package/transpiled/directives/vary/index.js.map +0 -1
  538. /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
  539. /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
  540. /package/transpiled/directives/{vary → map}/Directive.js +0 -0
@@ -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
+ ```
@@ -0,0 +1,73 @@
1
+ # HTTP context mapping
2
+
3
+ The `map` directive family is used to map HTTP request parts to operation call input properties.
4
+
5
+ [Features](../features/map.feature).
6
+
7
+ ## TL;DR
8
+
9
+ ```yaml
10
+ exposition:
11
+ /:group:
12
+ languages: [en, fr] # supported languages
13
+ GET:
14
+ map:authority: hostname # request authority (e.g., hostname)
15
+ map:language: lang # requested language
16
+ map:headers: # raw header values
17
+ token: x-access-token
18
+ map:segments: # route parameters
19
+ group: group
20
+ map:claims: # Bearer token claims
21
+ address: email
22
+ verified: email_verified
23
+ endpoint: observe
24
+ ```
25
+
26
+ The operation input type must be an object.
27
+ If the input already contains the specified keys, they will be overwritten.
28
+
29
+ ## Authority
30
+
31
+ The `map:authority` directive maps the [authority identifier](authorities.md) to an operation call
32
+ input property specified by the directive value.
33
+
34
+ ### Language
35
+
36
+ The `map:language` mapping sets the [most matching](https://github.com/jshttp/negotiator) language
37
+ code based on the `accept-language` request header and a list of supported languages defined by
38
+ the `map:languages` directive, and also adds `accept-language` to the `Vary` HTTP response header
39
+ value.
40
+
41
+ If none of the supported languages match, the first supported language is used.
42
+
43
+ > `map:languages` has a shorthand form: `languages: [en, fr]`.
44
+
45
+ ## Header values
46
+
47
+ The `map:headers` directive maps the values of HTTP request headers to operation call input
48
+ properties.
49
+ The value of the directive is a map where keys are the names of the input properties and values are
50
+ the names of the HTTP request headers.
51
+
52
+ The names of these headers are then included in the `Vary` HTTP response header
53
+ and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
54
+ of the [CORS](protocol.md#cors).
55
+
56
+ [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are combined
57
+ as a comma-separated list.
58
+
59
+ ## Route parameters
60
+
61
+ The `map:segments` directive maps the values of route parameters to operation call input properties.
62
+ The value of the directive is a map where keys are the names of the input properties, and values are
63
+ the names of the route parameters.
64
+
65
+ ## Bearer token claims
66
+
67
+ The `map:claims` directive maps the values of
68
+ the [token claims](https://datatracker.ietf.org/doc/html/rfc7519#section-4).
69
+ The value of the directive is a map where keys are the names of the input properties and values are
70
+ the names of the claims.
71
+
72
+ If the claim is not present in the token or the request is not authenticated using
73
+ the [`Bearer` scheme](identity.md#bearer-scheme), the input properties are not set.
@@ -14,26 +14,28 @@ directives under the current RTD Node.
14
14
  octets:context: images
15
15
  ```
16
16
 
17
- ## `octets:store`
17
+ ## `octets:put`
18
18
 
19
19
  Stores the content of the request body into a storage, under the request path with
20
20
  specified `content-type`.
21
21
 
22
22
  If request's `content-type` is not acceptable, or if the request body does not pass
23
- the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-type-typecontrol-maybeentry),
23
+ the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-options-options-maybeentry),
24
24
  the request is rejected with a `415 Unsupported Media Type` response.
25
25
 
26
26
  The value of the directive is `null` or an object with the following properties:
27
27
 
28
+ - `limit`: [maximum size](#stream-size-limit) of the incoming stream.
28
29
  - `accept`: a media type or an array of media types that are acceptable.
29
30
  If the `accept` property is not specified, any media type is acceptable (which is the default).
30
31
  - `workflow`: [workflow](#workflows) to be executed once the content is successfully stored.
32
+ - `trust`: a list of [trusted origins](#downloading-external-content).
31
33
 
32
34
  ```yaml
33
35
  /images:
34
36
  octets:context: images
35
37
  POST:
36
- octets:store:
38
+ octets:put:
37
39
  accept:
38
40
  - image/jpeg
39
41
  - image/png
@@ -43,31 +45,80 @@ The value of the directive is `null` or an object with the following properties:
43
45
  analyze: images.analyze
44
46
  ```
45
47
 
46
- Non-standard `content-meta` header can be used
48
+ `content-id` header can be used to set the ID of the Entry.
49
+ The value must match the following regular expression `^[a-zA-Z0-9-_]{1,16}$`.
50
+
51
+ Non-standard `content-attributes` header can be used
47
52
  to set initial [metadata](/extensions/storages/readme.md#entry) value for the Entry.
48
53
 
49
- The value of the `content-meta` header is a comma-separated list of key-value string pairs.
54
+ The value of the `content-attributes` header is a comma-separated list of key-value string pairs.
50
55
  If no value is provided for a key, the string `true` is used.
51
56
 
52
57
  ```http
53
58
  POST /images/ HTTP/1.1
54
59
  content-type: image/jpeg
55
- content-meta: foo, bar=baz
56
- content-meta: baz=1
60
+ content-id: example-id
61
+ content-attributes: foo, bar=baz
62
+ content-attributes: baz=1
57
63
  ```
58
64
 
59
65
  ```yaml
60
- meta:
66
+ attributes:
61
67
  foo: 'true'
62
68
  bar: 'baz'
63
69
  baz: '1'
64
70
  ```
65
71
 
66
- If the Entry already exists, the `content-meta` header is ignored.
72
+ If the Entry already exists, the `content-attributes` header is ignored.
73
+
74
+ ### Stream size limit
75
+
76
+ The `limit` property can be used to set the maximum size of the incoming stream in bytes.
77
+
78
+ The property value can be specified as a number
79
+ (representing bytes) or a string that combines a number with a unit (e.g., `1MB`).
80
+ Both [binary and decimal prefixes](https://en.wikipedia.org/wiki/Binary_prefix) are supported.
81
+ If the prefix or unit is specified _incorrectly_ (e.g., `1mb`),
82
+ it will default to a binary prefix interpretation.
83
+
84
+ - `1b`, `1B`: 1 byte
85
+ - `1KB`: 1000 bytes
86
+ - `1KiB`: 1024 bytes
87
+ - `1kb`: 1024 bytes
88
+
89
+ The default value is `64MiB`.
90
+
91
+ ### Downloading external content
92
+
93
+ The `octets:put` directive can be used to download external content:
94
+
95
+ ```http
96
+ POST /images/ HTTP/1.1
97
+ content-location: https://example.com/image.jpg
98
+ content-length: 0
99
+ ```
100
+
101
+ Requests with `content-location` header must have an empty body (`content-length: 0` header).
102
+
103
+ Target origin must be allowed by the `trust` property,
104
+ which can contain a list of trusted origins or regular expressions to match the full URL.
105
+
106
+ URL of the downloaded content is stored in the `origin` property of
107
+ the [Entry](/extensions/storages/readme.md#entry).
108
+
109
+ ```yaml
110
+ /images:
111
+ octets:context: images
112
+ POST:
113
+ octets:put:
114
+ trust:
115
+ - https://example.com
116
+ - ^https://example\.com/[a-z]+\.jpe?g$
117
+ ```
67
118
 
68
119
  ### Response
69
120
 
70
- The response of the `octets:store` directive is the created Entry.
121
+ The response of the `octets:put` directive is the created Entry.
71
122
 
72
123
  ```
73
124
  201 Created
@@ -78,12 +129,13 @@ type: image/jpeg
78
129
  created: 1698004822358
79
130
  ```
80
131
 
81
- If the `octets:store` directive contains a `workflow`, the response
132
+ If the `octets:put` directive contains a `workflow`, the response
82
133
  is [multipart](protocol.md#multipart-types).
83
134
  The first part represents the created Entry, which is sent immediately after the BLOB is stored,
84
135
  while subsequent parts are results from the workflow endpoints, sent as soon as they are available.
85
136
 
86
- In case a workflow endpoint returns an `Error`, the error part is sent, and the response is closed.
137
+ In case a workflow endpoint returns an `Error`, the error part is sent,
138
+ and the response is closed.
87
139
  Error's properties are added to the error part, among with the `step` identifier.
88
140
 
89
141
  ```
@@ -91,20 +143,33 @@ Error's properties are added to the error part, among with the `step` identifier
91
143
  content-type: multipart/yaml; boundary=cut
92
144
 
93
145
  --cut
146
+
94
147
  id: eecd837c
95
148
  type: image/jpeg
96
149
  created: 1698004822358
150
+
97
151
  --cut
98
- optimize: null
152
+
153
+ step: optimize
154
+ status: completed
155
+
99
156
  --cut
157
+
158
+ step: resize
100
159
  error:
101
- step: resize
102
160
  code: TOO_SMALL
103
161
  message: Image is too small
162
+ status: completed
163
+
164
+ --cut
165
+
166
+ step: analyze
167
+ status: exception
168
+
104
169
  --cut--
105
170
  ```
106
171
 
107
- ## `octets:fetch`
172
+ ## `octets:get`
108
173
 
109
174
  Fetches the content of a stored BLOB corresponding to the request path, and returns it as the
110
175
  response body with the corresponding `content-type`, `content-length`
@@ -116,22 +181,18 @@ The value of the directive is an object with the following properties:
116
181
 
117
182
  - `meta`: `boolean` indicating whether an Entry is accessible.
118
183
  Defaults to `false`.
119
- - `blob`: `boolean` indicating whether the original BLOB is accessible,
120
- [BLOB variant](/extensions/storages/readme.md#async-fetchpath-string-maybereadable) must be
121
- specified in the path otherwise.
122
- Defaults to `true`.
123
184
 
124
185
  ```yaml
125
186
  /images:
126
187
  octets:context: images
127
188
  /*:
128
189
  GET:
129
- octets:fetch:
190
+ octets:get:
130
191
  blob: false # prevent access to the original BLOB
131
192
  meta: true # allow access to an Entry
132
193
  ```
133
194
 
134
- The `octets:fetch: ~` declaration is equivalent to defaults.
195
+ The `octets:get: ~` declaration is equivalent to defaults.
135
196
 
136
197
  To access an Entry, the `accept` request header must contain the `octets.entry` subtype
137
198
  in
@@ -142,32 +203,6 @@ GET /images/eecd837c HTTP/1.1
142
203
  accept: application/vnd.toa.octets.entry+yaml
143
204
  ```
144
205
 
145
- ## `octets:list`
146
-
147
- Lists the entries stored under the request path.
148
-
149
- The value of the directive is an object with the following properties:
150
-
151
- - `meta`: `boolean` indicating whether the list of Entries is accessible.
152
- Defaults to `false`, which means that only entry identifiers are returned.
153
-
154
- ```yaml
155
- /images:
156
- octets:context: images
157
- GET:
158
- octets:list:
159
- meta: true
160
- ```
161
-
162
- The `octets:list: ~` declaration is equivalent to defaults.
163
-
164
- To access a list of Entries, the `accept` request header must contain the `octets.entries` subtype:
165
-
166
- ```http
167
- GET /images/ HTTP/1.1
168
- accept: application/vnd.toa.octets.entries+yaml
169
- ```
170
-
171
206
  ## `octets:delete`
172
207
 
173
208
  Delete the entry corresponding to the request path.
@@ -193,22 +228,6 @@ the entry is deleted.
193
228
 
194
229
  The error returned by the workflow prevents the deletion of the entry.
195
230
 
196
- ## `octets:permute`
197
-
198
- Performs
199
- a [permutation](/extensions/storages/readme.md#async-permutepath-string-ids-string-maybevoid) on the
200
- entries
201
- under the request path.
202
-
203
- ```yaml
204
- /images:
205
- octets:context: images
206
- PUT:
207
- octets:permute: ~
208
- ```
209
-
210
- The request body must be a list of entry identifiers.
211
-
212
231
  ## `octets:workflow`
213
232
 
214
233
  Execute a [workflow](#workflows) on the entry under the request path.
@@ -227,21 +246,23 @@ A workflow is a list of endpoints to be called.
227
246
  The following input will be passed to each endpoint:
228
247
 
229
248
  ```yaml
249
+ authority: string
230
250
  storage: string
231
251
  path: string
232
252
  entry: Entry
233
253
  parameters: Record<string, string> # route parameters
234
254
  ```
235
255
 
236
- See [Entry](/extensions/storages/readme.md#entry) and an
237
- example [workflow step processor](../features/steps/components/octets.tester).
256
+ - [Storages](/extensions/storages/readme.md)
257
+ - [Authorities](authorities.md)
258
+ - Example [workflow step processor](../features/steps/components/octets.tester)
238
259
 
239
260
  A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
240
261
  as value.
241
262
  Steps within a workflow unit are executed in parallel.
242
263
 
243
264
  ```yaml
244
- octets:store:
265
+ octets:put:
245
266
  workflow:
246
267
  resize: images.resize
247
268
  analyze: images.analyze
@@ -251,11 +272,22 @@ A workflow can be a single unit, or an array of units.
251
272
  If it's an array, the workflow units are executed in sequence.
252
273
 
253
274
  ```yaml
254
- octets:store:
275
+ octets:put:
255
276
  workflow:
256
277
  - optimize: images.optimize # executed first
257
278
  - resize: images.resize # executed second
258
279
  analyze: images.analyze # executed in parallel with `resize`
259
280
  ```
260
281
 
261
- If one of the workflow units returns an error, the execution of the workflow is interrupted.
282
+ If one of the workflow units returns or throws an error,
283
+ the execution of the workflow is interrupted.
284
+
285
+ ### Workflow tasks
286
+
287
+ A workflow unit which value starts with `task:` prefix will be executed as a Task.
288
+
289
+ ```yaml
290
+ octets:put:
291
+ workflow:
292
+ optimize: task:images.optimize
293
+ ```
@@ -4,9 +4,9 @@
4
4
 
5
5
  The following media types are supported for both requests and responses:
6
6
 
7
- - `application/msgpack` using [msgpackr](https://github.com/kriszyp/msgpackr)
8
- - `application/yaml` using [js-yaml](https://github.com/nodeca/js-yaml)
9
7
  - `application/json`
8
+ - `application/yaml` using [js-yaml](https://github.com/nodeca/js-yaml)
9
+ - `application/msgpack` using [msgpackr](https://github.com/kriszyp/msgpackr)
10
10
  - `text/plain`
11
11
 
12
12
  The response format is determined by content negotiation
@@ -26,7 +26,7 @@ foo: bar
26
26
 
27
27
  ### Multipart types
28
28
 
29
- Multipart responses are endoded using content negotiation,
29
+ Multipart responses are encoded using content negotiation,
30
30
  and the `content-type` of the response is set to one of the custom `multipart/` subtypes,
31
31
  corresponding to the type of
32
32
  the parts:
@@ -38,6 +38,9 @@ the parts:
38
38
  | `multipart/json` | `application/json` |
39
39
  | `multipart/text` | `text/plain` |
40
40
 
41
+ Multipart responses are started with a text chunk `ACK`, and finished with a text
42
+ chunk `FIN`.
43
+
41
44
  Example:
42
45
 
43
46
  ```
@@ -49,10 +52,14 @@ accept: application/yaml
49
52
  200 OK
50
53
  content-type: multipart/yaml; boundary=cut
51
54
 
55
+ --cut
56
+ ACK
52
57
  --cut
53
58
  foo: bar
54
59
  --cut
55
60
  baz: qux
61
+ --cut
62
+ FIN
56
63
  --cut--
57
64
  ```
58
65
 
@@ -72,7 +79,10 @@ The following request headers are allowed:
72
79
  - `accept`
73
80
  - `authorization`
74
81
  - `content-type`
75
- - headers used by the [`vary:embed` directive](vary.md#embeddings)
82
+ - `etag`
83
+ - `if-match`
84
+ - `if-none-match`
85
+ - headers used by the [`map` directive family](map.md)
76
86
 
77
87
  The following response headers are exposed:
78
88
 
@@ -77,8 +77,12 @@ query:
77
77
 
78
78
  ### Path variables
79
79
 
80
- Path variables are prepended to the `criteria` request query parameter using logical AND,
81
- except for the [`POST` method](#post-method).
80
+ Path variables are prepended to the `criteria` request query parameter except for
81
+ the [`POST` method](#post-method).
82
+
83
+ If query criteria starts with logical operator (`,` or `;`), then path variables are prepended
84
+ accordingly.
85
+ `AND` logical operator is used by default.
82
86
 
83
87
  Given the following declaration:
84
88
 
@@ -92,7 +96,7 @@ exposition:
92
96
  GET:
93
97
  endpoint: observe
94
98
  query:
95
- criteria: state==hot; # open criteria
99
+ criteria: ,state==hot; # open criteria
96
100
  ```
97
101
 
98
102
  and the following request:
@@ -104,7 +108,7 @@ GET /dummies/cool/?criteria=rank==5
104
108
  Operation call will have the following query criteria:
105
109
 
106
110
  ```yaml
107
- criteria: state==hot;type==cool;rank=5
111
+ criteria: (type==cool,state==hot);(rank=5)
108
112
  ```
109
113
 
110
114
  #### POST method
@@ -173,6 +177,10 @@ Constant values can be declared using the shortcut:
173
177
  limit: 10
174
178
  ```
175
179
 
180
+ ```http
181
+ GET /dummies/?omit=100&limit=10
182
+ ```
183
+
176
184
  ## Sort
177
185
 
178
186
  The `sort` query property defines the result order of Observations within an `objects` scope
@@ -209,6 +217,8 @@ GET /dummies/?sort=timestamp:asc
209
217
 
210
218
  ## Selectors
211
219
 
220
+ ![Not implemented](https://img.shields.io/badge/Not_implemented-red)
221
+
212
222
  The `selectors` query property contains a list of Entity properties allowed for a client to use in
213
223
  the `criteria` and `sort` query parameters.
214
224
  If no value is provided, then no selectors are allowed.
@@ -225,6 +235,21 @@ A list of Entity properties to be included in the Observation result.
225
235
  projection: [id, title, timestamp]
226
236
  ```
227
237
 
238
+ ## Parameters
239
+
240
+ By default, the only query parameters allowed are described above. Arbitrary query parameters
241
+ can be allowed by specifying them in the `parameters` property.
242
+
243
+ ```yaml
244
+ parameters: [foo, bar]
245
+ ```
246
+
247
+ These parameters are embedded in the operation call input, which must be an object.
248
+
249
+ ```http
250
+ GET /dummies/?foo=0&bar=baz
251
+ ```
252
+
228
253
  ## Optimistic concurrency control
229
254
 
230
255
  If an operation returns an object with `_version` property,
@@ -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
+ ```
@@ -56,6 +56,19 @@ as it provides a more specific match compared to the generic `/users/:id` route.
56
56
 
57
57
  The priority of Routes with the same specificity is determined by the order of declaration.
58
58
 
59
+ ## Route forwarding
60
+
61
+ A Route can be forwarded to another Route by specifying the destination Route as the value of the
62
+ Route.
63
+
64
+ ```yaml
65
+ /destination/:var: ...
66
+ /static: /destination/hello
67
+ /variables/:bar: /destination/:bar
68
+ ```
69
+
70
+ Forwarding Route variables are mapped to the forwarded Route variables if they have the same name.
71
+
59
72
  ## Methods
60
73
 
61
74
  Methods are mappings of the HTTP methods to the corresponding operations.