@toa.io/extensions.exposition 1.0.0-alpha.7 → 1.0.0-alpha.71

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 (434) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -7
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +21 -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 +5 -3
  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 +8 -6
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +32 -16
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +4 -11
  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/{create.js → incept.js} +6 -7
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/assertions-as-values.js +2 -1
  33. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
  34. package/components/identity.federation/operations/lib/jwt.d.ts +5 -5
  35. package/components/identity.federation/operations/lib/jwt.js +25 -12
  36. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  37. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  38. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  39. package/components/identity.federation/operations/types/configuration.js +3 -0
  40. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  41. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
  42. package/components/identity.federation/operations/types/context.js +3 -0
  43. package/components/identity.federation/operations/types/context.js.map +1 -0
  44. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  45. package/components/identity.federation/operations/types/entity.js +3 -0
  46. package/components/identity.federation/operations/types/entity.js.map +1 -0
  47. package/components/identity.federation/operations/types/index.d.ts +3 -0
  48. package/components/identity.federation/operations/types/index.js +20 -0
  49. package/components/identity.federation/operations/types/index.js.map +1 -0
  50. package/components/identity.federation/source/authenticate.ts +6 -19
  51. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  52. package/components/identity.federation/source/lib/assertions-as-values.ts +4 -2
  53. package/components/identity.federation/source/lib/jwt.test.ts +123 -4
  54. package/components/identity.federation/source/lib/jwt.ts +36 -16
  55. package/components/identity.federation/source/types/configuration.ts +15 -0
  56. package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
  57. package/components/identity.federation/source/types/entity.ts +6 -0
  58. package/components/identity.federation/source/types/index.ts +3 -0
  59. package/components/identity.federation/tsconfig.json +5 -4
  60. package/components/identity.roles/manifest.toa.yaml +18 -7
  61. package/components/identity.roles/operations/grant.d.ts +10 -0
  62. package/components/identity.roles/operations/grant.js +21 -0
  63. package/components/identity.roles/operations/grant.js.map +1 -0
  64. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  65. package/components/identity.roles/operations/lib/Entity.js +3 -0
  66. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  67. package/components/identity.roles/operations/list.d.ts +1 -4
  68. package/components/identity.roles/operations/list.js.map +1 -1
  69. package/components/identity.roles/operations/principal.d.ts +4 -6
  70. package/components/identity.roles/operations/principal.js +6 -1
  71. package/components/identity.roles/operations/principal.js.map +1 -1
  72. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  73. package/components/identity.roles/source/grant.ts +32 -0
  74. package/components/identity.roles/source/lib/Entity.ts +5 -0
  75. package/components/identity.roles/source/list.ts +2 -4
  76. package/components/identity.roles/source/principal.ts +10 -8
  77. package/components/identity.tokens/manifest.toa.yaml +19 -5
  78. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  79. package/components/identity.tokens/operations/authenticate.js +12 -5
  80. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  81. package/components/identity.tokens/operations/decrypt.js +1 -0
  82. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  83. package/components/identity.tokens/operations/encrypt.js +5 -1
  84. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  85. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  86. package/components/identity.tokens/operations/types.d.ts +8 -2
  87. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  88. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  89. package/components/identity.tokens/source/authenticate.ts +14 -6
  90. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  91. package/components/identity.tokens/source/decrypt.ts +9 -8
  92. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  93. package/components/identity.tokens/source/encrypt.ts +5 -1
  94. package/components/identity.tokens/source/types.ts +9 -2
  95. package/components/octets.storage/manifest.toa.yaml +6 -7
  96. package/components/octets.storage/operations/get.js +2 -2
  97. package/components/octets.storage/operations/store.js +113 -3
  98. package/documentation/access.md +75 -38
  99. package/documentation/authorities.md +49 -0
  100. package/documentation/cache.md +8 -1
  101. package/documentation/components.md +47 -22
  102. package/documentation/flow.md +31 -0
  103. package/documentation/identity.md +17 -22
  104. package/documentation/introspection.md +82 -0
  105. package/documentation/octets.md +81 -23
  106. package/documentation/protocol.md +13 -3
  107. package/documentation/query.md +29 -4
  108. package/documentation/require.md +15 -0
  109. package/documentation/tree.md +13 -0
  110. package/documentation/vary.md +14 -14
  111. package/features/access.feature +78 -46
  112. package/features/annotation.feature +1 -0
  113. package/features/auth.claim.feature +170 -0
  114. package/features/authorities.basic.feature +141 -0
  115. package/features/authorities.feature +32 -0
  116. package/features/authorities.federation.feature +100 -0
  117. package/features/authorities.tokens.feature +117 -0
  118. package/features/body.feature +3 -0
  119. package/features/cache.feature +109 -5
  120. package/features/cors.feature +6 -1
  121. package/features/debug.feature +34 -0
  122. package/features/directives.feature +3 -0
  123. package/features/dynamic.feature +4 -0
  124. package/features/errors.feature +20 -7
  125. package/features/etag.feature +31 -0
  126. package/features/flow.feature +45 -0
  127. package/features/identity.bans.feature +137 -0
  128. package/features/identity.basic.feature +125 -23
  129. package/features/identity.feature +7 -2
  130. package/features/identity.federation.feature +66 -11
  131. package/features/identity.roles.feature +250 -7
  132. package/features/identity.tokens.feature +54 -4
  133. package/features/introspection.feature +153 -0
  134. package/features/io.feature +38 -1
  135. package/features/methods.feature +47 -0
  136. package/features/octets.download.feature +189 -0
  137. package/features/octets.entries.feature +8 -1
  138. package/features/octets.feature +82 -54
  139. package/features/octets.meta.feature +3 -0
  140. package/features/octets.workflows.feature +239 -19
  141. package/features/probes.feature +14 -0
  142. package/features/{queries.feature → query.feature} +65 -2
  143. package/features/realtime.feature +34 -0
  144. package/features/require.feature +67 -0
  145. package/features/response.feature +38 -3
  146. package/features/routes.feature +93 -2
  147. package/features/steps/Database.ts +17 -10
  148. package/features/steps/Gateway.ts +23 -6
  149. package/features/steps/IdP.ts +30 -25
  150. package/features/steps/Parameters.ts +4 -1
  151. package/features/steps/Realtime.ts +151 -0
  152. package/features/steps/components/echo/manifest.toa.yaml +14 -1
  153. package/features/steps/components/echo/operations/identity.js +7 -0
  154. package/features/steps/components/echo/operations/parameters.js +7 -0
  155. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  156. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  157. package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
  158. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  159. package/features/steps/components/octets.tester/operations/baz.js +1 -2
  160. package/features/steps/components/octets.tester/operations/diversify.js +3 -1
  161. package/features/steps/components/octets.tester/operations/foo.js +2 -2
  162. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  163. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  164. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  165. package/features/steps/components/pots/manifest.toa.yaml +14 -3
  166. package/features/steps/components/users/manifest.toa.yaml +0 -1
  167. package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
  168. package/features/streams.feature +5 -0
  169. package/features/timing.feature +4 -1
  170. package/features/vary.feature +71 -0
  171. package/package.json +23 -14
  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 +1 -0
  176. package/schemas/octets/store.cos.yaml +25 -3
  177. package/schemas/query.cos.yaml +4 -10
  178. package/source/Annotation.ts +3 -3
  179. package/source/Composition.ts +0 -6
  180. package/source/Directive.ts +4 -5
  181. package/source/Endpoint.ts +52 -12
  182. package/source/Factory.ts +10 -11
  183. package/source/Gateway.ts +48 -19
  184. package/source/HTTP/Context.ts +25 -2
  185. package/source/HTTP/Server.ts +52 -44
  186. package/source/HTTP/exceptions.ts +13 -1
  187. package/source/HTTP/formats/index.ts +3 -3
  188. package/source/HTTP/messages.test.ts +45 -2
  189. package/source/HTTP/messages.ts +23 -5
  190. package/source/Introspection.ts +11 -0
  191. package/source/Mapping.ts +63 -21
  192. package/source/Query.test.ts +3 -3
  193. package/source/Query.ts +117 -33
  194. package/source/RTD/Endpoint.ts +3 -0
  195. package/source/RTD/Method.ts +16 -0
  196. package/source/RTD/Node.ts +29 -13
  197. package/source/RTD/Route.ts +5 -4
  198. package/source/RTD/factory.ts +5 -2
  199. package/source/RTD/syntax/parse.ts +37 -24
  200. package/source/RTD/syntax/types.ts +6 -4
  201. package/source/Remotes.ts +2 -9
  202. package/source/Tenant.ts +0 -8
  203. package/source/deployment.ts +33 -23
  204. package/source/directives/auth/Authorization.ts +37 -14
  205. package/source/directives/auth/Delegate.ts +42 -0
  206. package/source/directives/auth/Federation.ts +84 -0
  207. package/source/directives/auth/Incept.ts +4 -3
  208. package/source/directives/auth/Role.test.ts +53 -6
  209. package/source/directives/auth/Role.ts +22 -14
  210. package/source/directives/auth/split.ts +1 -1
  211. package/source/directives/auth/types.ts +1 -1
  212. package/source/directives/cache/Cache.ts +13 -6
  213. package/source/directives/cache/Control.ts +42 -16
  214. package/source/directives/cors/CORS.ts +1 -1
  215. package/source/directives/dev/Development.ts +1 -1
  216. package/source/directives/flow/Fetch.ts +88 -0
  217. package/source/directives/flow/Flow.ts +34 -0
  218. package/source/directives/flow/index.ts +3 -0
  219. package/source/directives/flow/types.ts +6 -0
  220. package/source/directives/index.ts +3 -1
  221. package/source/directives/io/Input.ts +4 -4
  222. package/source/directives/io/Output.ts +4 -3
  223. package/source/directives/octets/Context.ts +3 -2
  224. package/source/directives/octets/Fetch.ts +11 -10
  225. package/source/directives/octets/List.ts +5 -5
  226. package/source/directives/octets/Octets.ts +1 -3
  227. package/source/directives/octets/Store.ts +30 -10
  228. package/source/directives/octets/bytes.test.ts +30 -0
  229. package/source/directives/octets/bytes.ts +18 -0
  230. package/source/directives/octets/schemas.ts +4 -6
  231. package/source/directives/octets/workflows/Execution.ts +60 -8
  232. package/source/directives/octets/workflows/Workflow.ts +2 -1
  233. package/source/directives/require/Directive.ts +5 -0
  234. package/source/directives/require/Headers.ts +20 -0
  235. package/source/directives/require/Require.ts +28 -0
  236. package/source/directives/require/index.ts +3 -0
  237. package/source/directives/vary/Directive.ts +2 -1
  238. package/source/directives/vary/Embed.ts +14 -8
  239. package/source/directives/vary/Vary.ts +6 -4
  240. package/source/directives/vary/embeddings/Authority.ts +8 -0
  241. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  242. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  243. package/source/directives/vary/embeddings/index.ts +6 -4
  244. package/source/exceptions.ts +23 -11
  245. package/source/manifest.ts +10 -11
  246. package/source/schemas.ts +1 -1
  247. package/transpiled/Annotation.d.ts +3 -3
  248. package/transpiled/Composition.d.ts +0 -1
  249. package/transpiled/Composition.js +0 -4
  250. package/transpiled/Composition.js.map +1 -1
  251. package/transpiled/Directive.js +4 -4
  252. package/transpiled/Directive.js.map +1 -1
  253. package/transpiled/Endpoint.d.ts +6 -4
  254. package/transpiled/Endpoint.js +32 -4
  255. package/transpiled/Endpoint.js.map +1 -1
  256. package/transpiled/Factory.d.ts +1 -1
  257. package/transpiled/Factory.js +9 -8
  258. package/transpiled/Factory.js.map +1 -1
  259. package/transpiled/Gateway.d.ts +2 -0
  260. package/transpiled/Gateway.js +36 -12
  261. package/transpiled/Gateway.js.map +1 -1
  262. package/transpiled/HTTP/Context.d.ts +8 -1
  263. package/transpiled/HTTP/Context.js +16 -2
  264. package/transpiled/HTTP/Context.js.map +1 -1
  265. package/transpiled/HTTP/Server.d.ts +13 -2
  266. package/transpiled/HTTP/Server.js +39 -36
  267. package/transpiled/HTTP/Server.js.map +1 -1
  268. package/transpiled/HTTP/exceptions.d.ts +7 -1
  269. package/transpiled/HTTP/exceptions.js +13 -1
  270. package/transpiled/HTTP/exceptions.js.map +1 -1
  271. package/transpiled/HTTP/formats/index.js +3 -3
  272. package/transpiled/HTTP/formats/index.js.map +1 -1
  273. package/transpiled/HTTP/messages.d.ts +1 -0
  274. package/transpiled/HTTP/messages.js +24 -5
  275. package/transpiled/HTTP/messages.js.map +1 -1
  276. package/transpiled/Introspection.d.ts +9 -0
  277. package/transpiled/Introspection.js +3 -0
  278. package/transpiled/Introspection.js.map +1 -0
  279. package/transpiled/Mapping.d.ts +10 -2
  280. package/transpiled/Mapping.js +48 -19
  281. package/transpiled/Mapping.js.map +1 -1
  282. package/transpiled/Query.d.ts +10 -1
  283. package/transpiled/Query.js +83 -30
  284. package/transpiled/Query.js.map +1 -1
  285. package/transpiled/RTD/Endpoint.d.ts +1 -0
  286. package/transpiled/RTD/Method.d.ts +4 -0
  287. package/transpiled/RTD/Method.js +11 -0
  288. package/transpiled/RTD/Method.js.map +1 -1
  289. package/transpiled/RTD/Node.d.ts +4 -1
  290. package/transpiled/RTD/Node.js +23 -12
  291. package/transpiled/RTD/Node.js.map +1 -1
  292. package/transpiled/RTD/Route.d.ts +1 -1
  293. package/transpiled/RTD/Route.js +0 -1
  294. package/transpiled/RTD/Route.js.map +1 -1
  295. package/transpiled/RTD/factory.js +5 -2
  296. package/transpiled/RTD/factory.js.map +1 -1
  297. package/transpiled/RTD/syntax/parse.js +34 -22
  298. package/transpiled/RTD/syntax/parse.js.map +1 -1
  299. package/transpiled/RTD/syntax/types.d.ts +5 -3
  300. package/transpiled/RTD/syntax/types.js +1 -1
  301. package/transpiled/RTD/syntax/types.js.map +1 -1
  302. package/transpiled/Remotes.d.ts +2 -4
  303. package/transpiled/Remotes.js +0 -5
  304. package/transpiled/Remotes.js.map +1 -1
  305. package/transpiled/Tenant.d.ts +0 -1
  306. package/transpiled/Tenant.js +0 -6
  307. package/transpiled/Tenant.js.map +1 -1
  308. package/transpiled/deployment.d.ts +1 -1
  309. package/transpiled/deployment.js +28 -20
  310. package/transpiled/deployment.js.map +1 -1
  311. package/transpiled/directives/auth/Authorization.js +26 -10
  312. package/transpiled/directives/auth/Authorization.js.map +1 -1
  313. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  314. package/transpiled/directives/auth/Delegate.js +34 -0
  315. package/transpiled/directives/auth/Delegate.js.map +1 -0
  316. package/transpiled/directives/auth/Federation.d.ts +16 -0
  317. package/transpiled/directives/auth/Federation.js +57 -0
  318. package/transpiled/directives/auth/Federation.js.map +1 -0
  319. package/transpiled/directives/auth/Incept.js +4 -3
  320. package/transpiled/directives/auth/Incept.js.map +1 -1
  321. package/transpiled/directives/auth/Role.d.ts +4 -1
  322. package/transpiled/directives/auth/Role.js +20 -14
  323. package/transpiled/directives/auth/Role.js.map +1 -1
  324. package/transpiled/directives/auth/split.js +1 -1
  325. package/transpiled/directives/auth/split.js.map +1 -1
  326. package/transpiled/directives/cache/Cache.d.ts +3 -3
  327. package/transpiled/directives/cache/Cache.js +10 -4
  328. package/transpiled/directives/cache/Cache.js.map +1 -1
  329. package/transpiled/directives/cache/Control.d.ts +2 -1
  330. package/transpiled/directives/cache/Control.js +29 -12
  331. package/transpiled/directives/cache/Control.js.map +1 -1
  332. package/transpiled/directives/cors/CORS.js +1 -1
  333. package/transpiled/directives/cors/CORS.js.map +1 -1
  334. package/transpiled/directives/dev/Development.js +1 -1
  335. package/transpiled/directives/dev/Development.js.map +1 -1
  336. package/transpiled/directives/flow/Fetch.d.ts +13 -0
  337. package/transpiled/directives/flow/Fetch.js +59 -0
  338. package/transpiled/directives/flow/Fetch.js.map +1 -0
  339. package/transpiled/directives/flow/Flow.d.ts +10 -0
  340. package/transpiled/directives/flow/Flow.js +27 -0
  341. package/transpiled/directives/flow/Flow.js.map +1 -0
  342. package/transpiled/directives/flow/index.d.ts +2 -0
  343. package/transpiled/directives/flow/index.js +6 -0
  344. package/transpiled/directives/flow/index.js.map +1 -0
  345. package/transpiled/directives/flow/types.d.ts +5 -0
  346. package/transpiled/directives/flow/types.js.map +1 -0
  347. package/transpiled/directives/index.js +3 -1
  348. package/transpiled/directives/index.js.map +1 -1
  349. package/transpiled/directives/io/Input.js +2 -2
  350. package/transpiled/directives/io/Input.js.map +1 -1
  351. package/transpiled/directives/io/Output.js +2 -2
  352. package/transpiled/directives/io/Output.js.map +1 -1
  353. package/transpiled/directives/octets/Context.js +4 -24
  354. package/transpiled/directives/octets/Context.js.map +1 -1
  355. package/transpiled/directives/octets/Fetch.d.ts +3 -3
  356. package/transpiled/directives/octets/Fetch.js +8 -8
  357. package/transpiled/directives/octets/Fetch.js.map +1 -1
  358. package/transpiled/directives/octets/List.d.ts +3 -3
  359. package/transpiled/directives/octets/List.js +3 -3
  360. package/transpiled/directives/octets/List.js.map +1 -1
  361. package/transpiled/directives/octets/Octets.js +1 -3
  362. package/transpiled/directives/octets/Octets.js.map +1 -1
  363. package/transpiled/directives/octets/Store.d.ts +6 -1
  364. package/transpiled/directives/octets/Store.js +17 -7
  365. package/transpiled/directives/octets/Store.js.map +1 -1
  366. package/transpiled/directives/octets/bytes.d.ts +1 -0
  367. package/transpiled/directives/octets/bytes.js +21 -0
  368. package/transpiled/directives/octets/bytes.js.map +1 -0
  369. package/transpiled/directives/octets/schemas.d.ts +4 -6
  370. package/transpiled/directives/octets/schemas.js +1 -3
  371. package/transpiled/directives/octets/schemas.js.map +1 -1
  372. package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
  373. package/transpiled/directives/octets/workflows/Execution.js +44 -9
  374. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  375. package/transpiled/directives/octets/workflows/Workflow.js +2 -1
  376. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  377. package/transpiled/directives/require/Directive.d.ts +4 -0
  378. package/transpiled/directives/require/Directive.js +3 -0
  379. package/transpiled/directives/require/Directive.js.map +1 -0
  380. package/transpiled/directives/require/Headers.d.ts +7 -0
  381. package/transpiled/directives/require/Headers.js +19 -0
  382. package/transpiled/directives/require/Headers.js.map +1 -0
  383. package/transpiled/directives/require/Require.d.ts +9 -0
  384. package/transpiled/directives/require/Require.js +27 -0
  385. package/transpiled/directives/require/Require.js.map +1 -0
  386. package/transpiled/directives/require/index.d.ts +2 -0
  387. package/transpiled/directives/require/index.js +6 -0
  388. package/transpiled/directives/require/index.js.map +1 -0
  389. package/transpiled/directives/vary/Directive.d.ts +2 -1
  390. package/transpiled/directives/vary/Embed.d.ts +2 -1
  391. package/transpiled/directives/vary/Embed.js +8 -6
  392. package/transpiled/directives/vary/Embed.js.map +1 -1
  393. package/transpiled/directives/vary/Vary.d.ts +2 -2
  394. package/transpiled/directives/vary/Vary.js +3 -3
  395. package/transpiled/directives/vary/Vary.js.map +1 -1
  396. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  397. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  398. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  399. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  400. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  401. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  402. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  403. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  404. package/transpiled/directives/vary/embeddings/index.js +8 -4
  405. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  406. package/transpiled/exceptions.d.ts +3 -2
  407. package/transpiled/exceptions.js +14 -7
  408. package/transpiled/exceptions.js.map +1 -1
  409. package/transpiled/manifest.js +10 -11
  410. package/transpiled/manifest.js.map +1 -1
  411. package/transpiled/schemas.d.ts +1 -1
  412. package/transpiled/schemas.js +2 -2
  413. package/transpiled/schemas.js.map +1 -1
  414. package/transpiled/tsconfig.tsbuildinfo +1 -1
  415. package/tsconfig.json +9 -7
  416. package/components/identity.basic/operations/create.d.ts +0 -10
  417. package/components/identity.basic/operations/create.js +0 -10
  418. package/components/identity.basic/operations/create.js.map +0 -1
  419. package/components/identity.basic/source/create.ts +0 -18
  420. package/components/identity.federation/operations/create.d.ts +0 -10
  421. package/components/identity.federation/operations/create.js.map +0 -1
  422. package/components/identity.federation/operations/schemas.d.ts +0 -59
  423. package/components/identity.federation/operations/schemas.js +0 -9
  424. package/components/identity.federation/operations/schemas.js.map +0 -1
  425. package/components/identity.federation/operations/types.js.map +0 -1
  426. package/components/identity.federation/source/schemas.ts +0 -61
  427. package/components/octets.storage/operations/permute.js +0 -7
  428. package/schemas/octets/context.cos.yaml +0 -1
  429. package/source/HTTP/Server.test.ts +0 -126
  430. package/source/directives/octets/Permute.ts +0 -44
  431. package/transpiled/directives/octets/Permute.d.ts +0 -11
  432. package/transpiled/directives/octets/Permute.js +0 -58
  433. package/transpiled/directives/octets/Permute.js.map +0 -1
  434. /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
@@ -14,7 +14,8 @@ export class IdP {
14
14
  private static privateKey?: crypto.KeyObject
15
15
  private static issuer?: string
16
16
 
17
- public constructor (private readonly captures: Captures) {}
17
+ public constructor (private readonly captures: Captures) {
18
+ }
18
19
 
19
20
  @afterAll()
20
21
  public static async stop (): Promise<void> {
@@ -29,14 +30,21 @@ export class IdP {
29
30
  if (IdP.server instanceof http.Server) return
30
31
 
31
32
  // creating the key
32
- const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
+ const {
34
+ publicKey,
35
+ privateKey
36
+ } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
37
  modulusLength: 2048
34
38
  })
35
39
 
36
40
  IdP.privateKey = privateKey
37
41
 
38
42
  const jwk = JSON.stringify({
39
- keys: [{ use: 'sig', alg: 'RS256', ...publicKey.export({ format: 'jwk' }) }]
43
+ keys: [{
44
+ use: 'sig',
45
+ alg: 'RS256',
46
+ ...publicKey.export({ format: 'jwk' })
47
+ }]
40
48
  })
41
49
 
42
50
  const JWK_URL = '/.well-known/jwks'
@@ -54,24 +62,23 @@ export class IdP {
54
62
  response.end(jwk)
55
63
  break
56
64
 
57
- case '/.well-known/openid-configuration':
58
- {
59
- const openIdConfiguration = JSON.stringify({
60
- issuer: IdP.issuer,
61
- jwks_uri: IdP.issuer + JWK_URL,
62
- response_types_supported: ['id_token'],
63
- subject_types_supported: ['public'],
64
- id_token_signing_alg_values_supported: ['RS256'],
65
- scopes_supported: ['openid']
66
- })
67
-
68
- response.writeHead(200, {
69
- 'Content-Type': 'application/json',
70
- 'Cache-Control': 'public, max-age=3600',
71
- 'Content-Length': openIdConfiguration.length
72
- })
73
- response.end(openIdConfiguration)
74
- }
65
+ case '/.well-known/openid-configuration': {
66
+ const openIdConfiguration = JSON.stringify({
67
+ issuer: IdP.issuer,
68
+ jwks_uri: IdP.issuer + JWK_URL,
69
+ response_types_supported: ['id_token'],
70
+ subject_types_supported: ['public'],
71
+ id_token_signing_alg_values_supported: ['RS256'],
72
+ scopes_supported: ['openid']
73
+ })
74
+
75
+ response.writeHead(200, {
76
+ 'Content-Type': 'application/json',
77
+ 'Cache-Control': 'public, max-age=3600',
78
+ 'Content-Length': openIdConfiguration.length
79
+ })
80
+ response.end(openIdConfiguration)
81
+ }
75
82
 
76
83
  break
77
84
 
@@ -102,7 +109,7 @@ export class IdP {
102
109
  },
103
110
  {
104
111
  iss: IdP.issuer,
105
- sub: `${user}-mock-id`,
112
+ sub: user,
106
113
  aud: 'test',
107
114
  iat: Math.floor(Date.now() / 1000),
108
115
  exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
@@ -120,8 +127,6 @@ export class IdP {
120
127
 
121
128
  @given('the IDP {word} token for {word} is issued with following secret:')
122
129
  public async issueSymmetricToken (alg: string, user: string, secret: string): Promise<void> {
123
- console.log('Sym token for %s with secret "%s"', user, secret)
124
-
125
130
  const jwt = [
126
131
  {
127
132
  typ: 'JWT',
@@ -129,7 +134,7 @@ export class IdP {
129
134
  },
130
135
  {
131
136
  iss: IdP.issuer,
132
- sub: `${user}-mock-id`,
137
+ sub: user,
133
138
  aud: 'test',
134
139
  iat: Math.floor(Date.now() / 1000),
135
140
  exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
@@ -1,5 +1,6 @@
1
1
  import { setDefaultTimeout } from '@cucumber/cucumber'
2
2
  import { encode } from '@toa.io/generic'
3
+ import { console } from 'openspan'
3
4
 
4
5
  export class Parameters {
5
6
  public readonly origin: string
@@ -11,11 +12,13 @@ export class Parameters {
11
12
 
12
13
  setDefaultTimeout(30 * 1000)
13
14
 
15
+ console.configure({ format: 'terminal' })
16
+
14
17
  process.env.TOA_DEV = '1'
15
18
 
16
19
  process.env.TOA_STORAGES = encode({
17
20
  octets: {
18
21
  provider: 'tmp',
19
- directory: 'exposition'
22
+ directory: Math.random().toString(36).substring(2)
20
23
  }
21
24
  })
@@ -0,0 +1,151 @@
1
+ import { EventEmitter, once } from 'node:events'
2
+ import * as assert from 'node:assert'
3
+ import { after, binding, given, afterAll, then } from 'cucumber-tsflow'
4
+ import { Factory } from '@toa.io/extensions.realtime'
5
+ import * as boot from '@toa.io/boot'
6
+ import { encode, match } from '@toa.io/generic'
7
+ import { parse } from '@toa.io/yaml'
8
+ import { Agent } from '@toa.io/agent'
9
+ import { Parameters } from './Parameters'
10
+ import { Gateway } from './Gateway'
11
+ import { Captures } from './Captures'
12
+ import type { Connector } from '@toa.io/core'
13
+
14
+ @binding([Gateway, Parameters, Captures])
15
+ export class Realtime {
16
+ private static instance: Connector | null = null
17
+ private readonly gateway: Gateway
18
+ private readonly agent: Agent
19
+ private readonly events = new EventEmitter()
20
+ private log: Record<string, unknown[]> = {}
21
+ private aborted = false
22
+
23
+ public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
24
+ this.gateway = gateway
25
+ this.agent = new Agent(parameters.origin, captures)
26
+ }
27
+
28
+ @given('the Realtime is running with the following annotation:')
29
+ public async start (yaml: string): Promise<void> {
30
+ await Realtime.stop()
31
+
32
+ const annotation = parse(yaml)
33
+ const routes = []
34
+
35
+ for (const [event, property] of Object.entries(annotation))
36
+ routes.push({ event, properties: [property] })
37
+
38
+ process.env.TOA_REALTIME = encode(routes)
39
+
40
+ const factory = new Factory(boot)
41
+
42
+ Realtime.instance = factory.service()
43
+
44
+ void Realtime.instance.connect()
45
+ }
46
+
47
+ @given('the identity {word} is consuming realtime events')
48
+ public async connect (name: string): Promise<void> {
49
+ await this.gateway.start()
50
+
51
+ const id = await this.createIdentity(name)
52
+
53
+ const parts = await this.agent.parts(`
54
+ GET /realtime/streams/\${{ ${name}.id }}/ HTTP/1.1
55
+ authorization: Token \${{ ${name}.token }}
56
+ accept: application/json
57
+ `) as AsyncIterable<Uint8Array>
58
+
59
+ void this.consume(id, parts).catch((e) => {
60
+ if (!this.aborted)
61
+ console.debug('Consumption interrupted', e)
62
+ })
63
+ }
64
+
65
+ @then('the following event `{word}` is received by {word}:')
66
+ public async received (label: string, name: string, yaml: string): Promise<void> {
67
+ const id = this.agent.captures.get(`${name}.id`)
68
+ const tag = `${id}:${label}`
69
+ const expected = parse(yaml)
70
+
71
+ if (this.log[tag] !== undefined)
72
+ for (const data of this.log[tag])
73
+ // eslint-disable-next-line max-depth
74
+ if (match(data, expected))
75
+ return
76
+
77
+ const [event] = await once(this.events, tag)
78
+
79
+ assert.ok(match(event, expected), 'Event does not match')
80
+ }
81
+
82
+ @after()
83
+ public abort (): void {
84
+ this.aborted = true
85
+ this.agent.abort()
86
+ this.log = {}
87
+ this.events.removeAllListeners()
88
+ }
89
+
90
+ @afterAll()
91
+ public static async stop (): Promise<void> {
92
+ if (this.instance === null)
93
+ return
94
+
95
+ await this.instance.disconnect()
96
+
97
+ this.instance = null
98
+ process.env.TOA_REALTIME = undefined
99
+ }
100
+
101
+ private async createIdentity (name: string): Promise<string> {
102
+ const password = Math.random().toString(36).slice(2)
103
+ const username = name + Math.random().toString(36).slice(2)
104
+
105
+ await this.agent.request(`
106
+ POST /identity/basic/ HTTP/1.1
107
+ accept: application/yaml
108
+ content-type: application/yaml
109
+
110
+ username: ${username}
111
+ password: ${password}
112
+ `)
113
+
114
+ this.agent.responseIncludes(`
115
+ 201 Created
116
+ `)
117
+
118
+ const credentials = Buffer.from(`${username}:${password}`).toString('base64')
119
+
120
+ await this.agent.request(`
121
+ GET /identity/ HTTP/1.1
122
+ authorization: Basic ${credentials}
123
+ accept: application/yaml
124
+ `)
125
+
126
+ this.agent.responseIncludes(`
127
+ 200 OK
128
+ authorization: Token \${{ ${name}.token }}
129
+
130
+ id: \${{ ${name}.id }}
131
+ `)
132
+
133
+ return this.agent.captures.get(`${name}.id`)
134
+ }
135
+
136
+ private async consume (id: string, parts: any): Promise<void> {
137
+ for await (const part of parts) {
138
+ const text = Buffer.from(part.body).toString('utf8')
139
+ const event = JSON.parse(text)
140
+
141
+ if (typeof event === 'string')
142
+ continue
143
+
144
+ const tag = `${id}:${event.event}`
145
+
146
+ this.events.emit(tag, event.data)
147
+ this.log[tag] ??= []
148
+ this.log[tag].push(event.data)
149
+ }
150
+ }
151
+ }
@@ -1,5 +1,4 @@
1
1
  name: echo
2
- version: 0.0.0
3
2
 
4
3
  operations:
5
4
  compute:
@@ -8,3 +7,17 @@ operations:
8
7
  affect:
9
8
  input:
10
9
  name*: string
10
+ identity:
11
+ input:
12
+ identity:
13
+ id: string
14
+ roles: [string]
15
+ parameters:
16
+ input: &parameters
17
+ type: object
18
+ properties:
19
+ a:
20
+ type: string
21
+ b:
22
+ type: string
23
+ output: *parameters
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function computation (input) {
4
+ return input
5
+ }
6
+
7
+ exports.computation = computation
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function computation (input) {
4
+ return input
5
+ }
6
+
7
+ exports.computation = computation
@@ -0,0 +1,2 @@
1
+ namespace: echo
2
+ name: beacon
@@ -0,0 +1,5 @@
1
+ 'use strict'
2
+
3
+ exports.computation = () => {
4
+ return 'Hello!'
5
+ }
@@ -7,9 +7,10 @@ storages: octets
7
7
  operations:
8
8
  foo: &operation
9
9
  input:
10
+ authority*: string
10
11
  storage*: string
11
12
  path*: string
12
- entry: object
13
+ entry*: object
13
14
  parameters: object
14
15
  bar: *operation
15
16
  baz: *operation
@@ -17,3 +18,23 @@ operations:
17
18
  echo: *operation
18
19
  concat: *operation
19
20
  diversify: *operation
21
+ yield: *operation
22
+ yex: *operation
23
+ authority: *operation
24
+ redirect:
25
+ input:
26
+ authority*: string
27
+ path*: string
28
+ parameters: <string>
29
+ output:
30
+ type: object
31
+ properties:
32
+ url: string
33
+ options:
34
+ type: object
35
+ properties:
36
+ method: string
37
+ headers: object
38
+ body: string
39
+ required:
40
+ - url
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function computation (input) {
4
+ return input.authority
5
+ }
6
+
7
+ exports.computation = computation
@@ -4,8 +4,7 @@ import { setTimeout } from 'node:timers/promises'
4
4
 
5
5
  async function baz (input, context) {
6
6
  await setTimeout(30)
7
-
8
- return context.storages.octets.annotate(input.path, 'baz', 'qux')
7
+ await context.storages.octets.annotate(input.path, 'baz', 'qux')
9
8
  }
10
9
 
11
10
  exports.effect = baz
@@ -8,7 +8,9 @@ const lenna = join(__dirname, 'lenna.png')
8
8
  async function diversify (input, context) {
9
9
  const stream = createReadStream(lenna)
10
10
 
11
- return context.storages[input.storage].diversify(input.path, 'hello.png', stream)
11
+ await context.storages[input.storage].diversify(input.path, 'hello.png', stream)
12
+
13
+ return 'hello'
12
14
  }
13
15
 
14
16
  exports.effect = diversify
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- function foo (input, context) {
4
- return context.storages.octets.annotate(input.path, 'foo', 'bar')
3
+ async function foo (input, context) {
4
+ await context.storages.octets.annotate(input.path, 'foo', 'bar')
5
5
  }
6
6
 
7
7
  exports.effect = foo
@@ -0,0 +1,12 @@
1
+ 'use strict'
2
+
3
+ function redirect (input) {
4
+ return input.parameters.type in urls ? { url: urls[input.parameters.type] } : new Error()
5
+ }
6
+
7
+ const urls = {
8
+ 'rfc': 'https://www.rfc-editor.org/rfc/rfc9564.txt',
9
+ 'img': 'https://www.w3.org/assets/logos/w3c/w3c-no-bars.svg'
10
+ }
11
+
12
+ exports.computation = redirect
@@ -0,0 +1,16 @@
1
+ 'use strict'
2
+
3
+ import { setTimeout } from 'node:timers/promises'
4
+
5
+ async function * effect (_) {
6
+ await setTimeout(10)
7
+ yield 'hello'
8
+
9
+ await setTimeout(10)
10
+ yield 'world'
11
+
12
+ await setTimeout(10)
13
+ throw new Error('Oops!')
14
+ }
15
+
16
+ exports.effect = effect
@@ -0,0 +1,13 @@
1
+ 'use strict'
2
+
3
+ import { setTimeout } from 'node:timers/promises'
4
+
5
+ async function * effect (_) {
6
+ await setTimeout(10)
7
+ yield 'hello'
8
+
9
+ await setTimeout(10)
10
+ yield 'world'
11
+ }
12
+
13
+ exports.effect = effect
@@ -3,9 +3,9 @@ version: 0.0.0
3
3
 
4
4
  entity:
5
5
  schema:
6
- title: string
7
- volume: number
8
- temperature?: number
6
+ title: string(64)
7
+ volume: number(0, 1000]
8
+ temperature?: number(0, 300]
9
9
 
10
10
  operations:
11
11
  create:
@@ -15,6 +15,11 @@ operations:
15
15
  title*: .
16
16
  volume*: .
17
17
  temperature: .
18
+ output:
19
+ id: .
20
+ errors:
21
+ - NO_WAY
22
+ - WONT_CREATE
18
23
  transit:
19
24
  concurrency: retry
20
25
  input:
@@ -27,3 +32,9 @@ operations:
27
32
  title: string
28
33
  volume: number
29
34
  temperature: number
35
+ enumerate:
36
+ output:
37
+ - id: .
38
+ title: .
39
+ volume: .
40
+ temperature?: .
@@ -1,5 +1,4 @@
1
1
  name: users
2
- version: 0.0.0
3
2
 
4
3
  entity:
5
4
  schema:
@@ -5,7 +5,7 @@ version: 0.0.0
5
5
  entity:
6
6
  schema:
7
7
  newbie: false
8
- dependent: true
8
+ associated: true
9
9
 
10
10
  operations:
11
11
  transit:
@@ -10,6 +10,7 @@ Feature: Reply streams
10
10
  When the following request is received:
11
11
  """
12
12
  POST /sequences/ HTTP/1.1
13
+ host: nex.toa.io
13
14
  content-type: text/plain
14
15
  accept: text/plain
15
16
 
@@ -20,11 +21,15 @@ Feature: Reply streams
20
21
  201 Created
21
22
  content-type: multipart/text; boundary=cut
22
23
 
24
+ --cut
25
+ ACK
23
26
  --cut
24
27
  0
25
28
  --cut
26
29
  1
27
30
  --cut
28
31
  2
32
+ --cut
33
+ FIN
29
34
  --cut--
30
35
  """
@@ -12,6 +12,7 @@ Feature: Server timing
12
12
  When the following request is received:
13
13
  """
14
14
  POST /pots/ HTTP/1.1
15
+ host: nex.toa.io
15
16
  content-type: application/yaml
16
17
 
17
18
  title: Hello
@@ -22,7 +23,7 @@ Feature: Server timing
22
23
  server-timing:
23
24
  """
24
25
 
25
- Scenario: Server timing is sent when debug is enabled
26
+ Scenario: Server timing is sent when `trace` is enabled
26
27
  Given the annotation:
27
28
  """
28
29
  trace: true
@@ -30,6 +31,7 @@ Feature: Server timing
30
31
  When the following request is received:
31
32
  """
32
33
  POST /pots/ HTTP/1.1
34
+ host: nex.toa.io
33
35
  content-type: application/yaml
34
36
 
35
37
  title: Hello
@@ -56,6 +58,7 @@ Feature: Server timing
56
58
  When the stream of `lenna.png` is received with the following headers:
57
59
  """
58
60
  POST / HTTP/1.1
61
+ host: nex.toa.io
59
62
  content-type: application/octet-stream
60
63
  """
61
64
  # to debug, break it and look at the console
@@ -15,6 +15,7 @@ Feature: The Vary directive family
15
15
  When the following request is received:
16
16
  """
17
17
  GET /echo/ HTTP/1.1
18
+ host: nex.toa.io
18
19
  accept: application/yaml
19
20
  accept-language: <accept>
20
21
  """
@@ -54,6 +55,7 @@ Feature: The Vary directive family
54
55
  When the following request is received:
55
56
  """
56
57
  GET /echo/ HTTP/1.1
58
+ host: nex.toa.io
57
59
  accept: application/yaml
58
60
  accept-language: fr
59
61
  """
@@ -78,6 +80,7 @@ Feature: The Vary directive family
78
80
  When the following request is received:
79
81
  """
80
82
  GET /echo/ HTTP/1.1
83
+ host: nex.toa.io
81
84
  accept: application/yaml
82
85
  foo: bar
83
86
  """
@@ -104,6 +107,7 @@ Feature: The Vary directive family
104
107
  When the following request is received:
105
108
  """
106
109
  GET /echo/ HTTP/1.1
110
+ host: nex.toa.io
107
111
  accept: application/yaml
108
112
  foo: bar
109
113
  """
@@ -134,6 +138,7 @@ Feature: The Vary directive family
134
138
  When the following request is received:
135
139
  """
136
140
  GET /echo/ HTTP/1.1
141
+ host: nex.toa.io
137
142
  accept: application/yaml
138
143
  <header>: <value>
139
144
  """
@@ -151,6 +156,30 @@ Feature: The Vary directive family
151
156
  | bar | baz |
152
157
  | accept-language | en |
153
158
 
159
+ Scenario: Embedding route parameter
160
+ Given the `echo` is running with the following manifest:
161
+ """yaml
162
+ exposition:
163
+ /:friend:
164
+ io:output: true
165
+ GET:
166
+ vary:embed:
167
+ name: /:friend
168
+ endpoint: compute
169
+ """
170
+ When the following request is received:
171
+ """
172
+ GET /echo/Ken/ HTTP/1.1
173
+ host: nex.toa.io
174
+ accept: text/plain
175
+ """
176
+ Then the following reply is sent:
177
+ """
178
+ 200 OK
179
+
180
+ Hello Ken
181
+ """
182
+
154
183
  Scenario: Adding headers used by defined embeddings to CORS permissions
155
184
  Given the `echo` is running with the following manifest:
156
185
  """yaml
@@ -170,6 +199,7 @@ Feature: The Vary directive family
170
199
  When the following request is received:
171
200
  """
172
201
  OPTIONS / HTTP/1.1
202
+ host: nex.toa.io
173
203
  origin: https://example.com
174
204
  access-control-request-headers: whatever
175
205
  """
@@ -178,3 +208,44 @@ Feature: The Vary directive family
178
208
  204 No Content
179
209
  access-control-allow-headers: accept, authorization, content-type, etag, if-match, if-none-match, accept-language, foo, bar
180
210
  """
211
+
212
+ Scenario: Embedding authority
213
+ Given the annotation:
214
+ """yaml
215
+ authorities:
216
+ one: the.one.com
217
+ """
218
+ Given the `echo` is running with the following manifest:
219
+ """yaml
220
+ exposition:
221
+ /:
222
+ io:output: true
223
+ GET:
224
+ vary:embed:
225
+ name: authority
226
+ endpoint: compute
227
+ """
228
+ When the following request is received:
229
+ """
230
+ GET /echo/ HTTP/1.1
231
+ host: the.one.com
232
+ accept: text/plain
233
+ """
234
+ Then the following reply is sent:
235
+ """
236
+ 200 OK
237
+
238
+ Hello one
239
+ """
240
+ When the following request is received:
241
+ """
242
+ GET /echo/ HTTP/1.1
243
+ host: the.two.com
244
+ accept: text/plain
245
+ """
246
+ Then the following reply is sent:
247
+ """
248
+ 200 OK
249
+
250
+ Hello the.two.com
251
+ """