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

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 (442) hide show
  1. package/components/context.toa.yaml +12 -0
  2. package/components/identity.bans/manifest.toa.yaml +1 -1
  3. package/components/identity.basic/manifest.toa.yaml +2 -2
  4. package/components/identity.basic/operations/authenticate.d.ts +9 -0
  5. package/components/identity.basic/operations/authenticate.js +24 -0
  6. package/components/identity.basic/operations/authenticate.js.map +1 -0
  7. package/components/identity.basic/operations/create.d.ts +10 -0
  8. package/components/identity.basic/operations/create.js +10 -0
  9. package/components/identity.basic/operations/create.js.map +1 -0
  10. package/components/identity.basic/operations/transit.d.ts +12 -0
  11. package/components/identity.basic/operations/transit.js +53 -0
  12. package/components/identity.basic/operations/transit.js.map +1 -0
  13. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -0
  14. package/components/identity.basic/operations/types.d.ts +38 -0
  15. package/components/identity.basic/operations/types.js +3 -0
  16. package/components/identity.basic/operations/types.js.map +1 -0
  17. package/components/identity.basic/source/authenticate.ts +0 -1
  18. package/components/identity.federation/events/principal.js +22 -0
  19. package/components/identity.federation/manifest.toa.yaml +88 -0
  20. package/components/identity.federation/operations/assertions-as-values.cjs +45 -0
  21. package/components/identity.federation/operations/assertions-as-values.cjs.map +1 -0
  22. package/components/identity.federation/operations/assertions-as-values.d.cts +4 -0
  23. package/components/identity.federation/operations/authenticate.d.ts +3 -0
  24. package/components/identity.federation/operations/authenticate.js +20 -0
  25. package/components/identity.federation/operations/authenticate.js.map +1 -0
  26. package/components/identity.federation/operations/create.d.ts +10 -0
  27. package/components/identity.federation/operations/create.js +15 -0
  28. package/components/identity.federation/operations/create.js.map +1 -0
  29. package/components/identity.federation/operations/jwt.cjs +112 -0
  30. package/components/identity.federation/operations/jwt.cjs.map +1 -0
  31. package/components/identity.federation/operations/jwt.d.cts +19 -0
  32. package/components/identity.federation/operations/schemas.d.ts +43 -0
  33. package/components/identity.federation/operations/schemas.js +9 -0
  34. package/components/identity.federation/operations/schemas.js.map +1 -0
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -0
  36. package/components/identity.federation/operations/types.d.ts +51 -0
  37. package/components/identity.federation/operations/types.js +3 -0
  38. package/components/identity.federation/operations/types.js.map +1 -0
  39. package/components/identity.federation/source/assertions-as-values.cts +20 -0
  40. package/components/identity.federation/source/authenticate.ts +28 -0
  41. package/components/identity.federation/source/create.ts +26 -0
  42. package/components/identity.federation/source/jwt.cts +143 -0
  43. package/components/identity.federation/source/schemas.ts +45 -0
  44. package/components/identity.federation/source/types.ts +56 -0
  45. package/components/identity.federation/tsconfig.json +9 -0
  46. package/components/identity.roles/operations/list.d.ts +5 -0
  47. package/components/identity.roles/operations/list.js +8 -0
  48. package/components/identity.roles/operations/list.js.map +1 -0
  49. package/components/identity.roles/operations/principal.d.ts +15 -0
  50. package/components/identity.roles/operations/principal.js +8 -0
  51. package/components/identity.roles/operations/principal.js.map +1 -0
  52. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  53. package/components/identity.tokens/manifest.toa.yaml +1 -1
  54. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  55. package/components/identity.tokens/operations/authenticate.js +32 -0
  56. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  57. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  58. package/components/identity.tokens/operations/decrypt.js +32 -0
  59. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  60. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  61. package/components/identity.tokens/operations/encrypt.js +22 -0
  62. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  63. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  64. package/components/identity.tokens/operations/revoke.js +8 -0
  65. package/components/identity.tokens/operations/revoke.js.map +1 -0
  66. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  67. package/components/identity.tokens/operations/types.d.ts +40 -0
  68. package/components/identity.tokens/operations/types.js +3 -0
  69. package/components/identity.tokens/operations/types.js.map +1 -0
  70. package/components/octets.storage/manifest.toa.yaml +1 -0
  71. package/components/octets.storage/operations/store.js +2 -2
  72. package/cucumber.js +0 -1
  73. package/documentation/components.md +25 -2
  74. package/documentation/identity.md +7 -7
  75. package/documentation/octets.md +93 -40
  76. package/documentation/protocol.md +21 -1
  77. package/documentation/query.md +1 -1
  78. package/documentation/vary.md +69 -0
  79. package/features/cors.feature +72 -0
  80. package/features/identity.feature +19 -3
  81. package/features/identity.federation.feature +125 -0
  82. package/features/octets.entries.feature +121 -0
  83. package/features/octets.feature +2 -28
  84. package/features/octets.meta.feature +65 -0
  85. package/features/octets.workflows.feature +138 -4
  86. package/features/response.feature +65 -0
  87. package/features/routes.feature +37 -0
  88. package/features/steps/Captures.ts +6 -0
  89. package/features/steps/Components.ts +18 -6
  90. package/features/steps/Gateway.ts +1 -2
  91. package/features/steps/HTTP.ts +40 -87
  92. package/features/steps/IdP.ts +120 -0
  93. package/features/steps/Parameters.ts +8 -2
  94. package/features/steps/Workspace.ts +5 -7
  95. package/features/steps/components/echo/operations/error.js +11 -0
  96. package/features/steps/components/octets.tester/manifest.toa.yaml +3 -0
  97. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  98. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  99. package/features/steps/components/users/manifest.toa.yaml +3 -0
  100. package/features/steps/components/users.properties/manifest.toa.yaml +13 -0
  101. package/features/steps/tsconfig.json +1 -1
  102. package/features/vary.feature +150 -0
  103. package/package.json +17 -18
  104. package/schemas/octets/delete.cos.yaml +2 -1
  105. package/schemas/octets/list.cos.yaml +2 -1
  106. package/source/Directive.test.ts +8 -2
  107. package/source/Directive.ts +19 -16
  108. package/source/Factory.ts +8 -7
  109. package/source/Gateway.ts +22 -8
  110. package/source/HTTP/Server.fixtures.ts +0 -1
  111. package/source/HTTP/Server.test.ts +61 -134
  112. package/source/HTTP/Server.ts +91 -47
  113. package/source/HTTP/formats/msgpack.ts +9 -6
  114. package/source/HTTP/formats/text.ts +1 -1
  115. package/source/HTTP/formats/yaml.ts +1 -1
  116. package/source/HTTP/messages.ts +15 -3
  117. package/source/Interception.ts +24 -0
  118. package/source/RTD/Directives.ts +2 -2
  119. package/source/RTD/Tree.ts +3 -0
  120. package/source/RTD/syntax/parse.ts +6 -6
  121. package/source/RTD/syntax/types.ts +1 -1
  122. package/source/deployment.ts +1 -2
  123. package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
  124. package/source/directives/auth/Incept.ts +1 -1
  125. package/source/directives/auth/Rule.ts +2 -2
  126. package/source/directives/auth/index.ts +2 -2
  127. package/source/directives/auth/schemes.ts +2 -1
  128. package/source/directives/auth/types.ts +9 -6
  129. package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
  130. package/source/directives/cache/index.ts +2 -2
  131. package/source/directives/cache/types.ts +1 -1
  132. package/source/directives/cors/CORS.ts +54 -0
  133. package/source/directives/cors/index.ts +3 -0
  134. package/source/directives/dev/{Family.ts → Development.ts} +3 -4
  135. package/source/directives/dev/Stub.ts +4 -4
  136. package/source/directives/dev/Throw.ts +4 -4
  137. package/source/directives/dev/index.ts +2 -2
  138. package/source/directives/dev/types.ts +1 -1
  139. package/source/directives/index.ts +10 -6
  140. package/source/directives/octets/Context.ts +1 -1
  141. package/source/directives/octets/Delete.ts +50 -9
  142. package/source/directives/octets/Fetch.ts +18 -19
  143. package/source/directives/octets/List.ts +37 -7
  144. package/source/directives/octets/{Family.ts → Octets.ts} +7 -6
  145. package/source/directives/octets/Permute.ts +3 -3
  146. package/source/directives/octets/Store.ts +43 -99
  147. package/source/directives/octets/index.ts +2 -2
  148. package/source/directives/octets/schemas.ts +11 -6
  149. package/source/directives/octets/types.ts +4 -3
  150. package/source/directives/octets/workflow/Execution.ts +78 -0
  151. package/source/directives/octets/workflow/Workflow.ts +37 -0
  152. package/source/directives/octets/workflow/index.ts +1 -0
  153. package/source/directives/vary/Directive.ts +6 -0
  154. package/source/directives/vary/Embed.ts +62 -0
  155. package/source/directives/vary/Properties.ts +17 -0
  156. package/source/directives/vary/Vary.ts +48 -0
  157. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  158. package/source/directives/vary/embeddings/Header.ts +30 -0
  159. package/source/directives/vary/embeddings/Language.ts +31 -0
  160. package/source/directives/vary/embeddings/index.ts +11 -0
  161. package/source/directives/vary/index.ts +3 -0
  162. package/source/io.ts +4 -0
  163. package/source/manifest.test.ts +6 -14
  164. package/source/manifest.ts +9 -6
  165. package/source/schemas.ts +7 -3
  166. package/transpiled/Annotation.d.ts +7 -0
  167. package/transpiled/Annotation.js +3 -0
  168. package/transpiled/Annotation.js.map +1 -0
  169. package/transpiled/Branch.d.ts +7 -0
  170. package/transpiled/Branch.js +3 -0
  171. package/transpiled/Branch.js.map +1 -0
  172. package/transpiled/Composition.d.ts +14 -0
  173. package/transpiled/Composition.js +43 -0
  174. package/transpiled/Composition.js.map +1 -0
  175. package/transpiled/Context.d.ts +5 -0
  176. package/transpiled/Context.js +3 -0
  177. package/transpiled/Context.js.map +1 -0
  178. package/transpiled/Directive.d.ts +31 -0
  179. package/transpiled/Directive.js +78 -0
  180. package/transpiled/Directive.js.map +1 -0
  181. package/transpiled/Endpoint.d.ts +20 -0
  182. package/transpiled/Endpoint.js +45 -0
  183. package/transpiled/Endpoint.js.map +1 -0
  184. package/transpiled/Factory.d.ts +9 -0
  185. package/transpiled/Factory.js +67 -0
  186. package/transpiled/Factory.js.map +1 -0
  187. package/transpiled/Gateway.d.ts +22 -0
  188. package/transpiled/Gateway.js +102 -0
  189. package/transpiled/Gateway.js.map +1 -0
  190. package/transpiled/HTTP/Server.d.ts +24 -0
  191. package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
  192. package/transpiled/HTTP/Server.fixtures.js +31 -0
  193. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  194. package/transpiled/HTTP/Server.js +149 -0
  195. package/transpiled/HTTP/Server.js.map +1 -0
  196. package/transpiled/HTTP/exceptions.d.ts +34 -0
  197. package/transpiled/HTTP/exceptions.js +71 -0
  198. package/transpiled/HTTP/exceptions.js.map +1 -0
  199. package/transpiled/HTTP/formats/index.d.ts +10 -0
  200. package/transpiled/HTTP/formats/index.js +38 -0
  201. package/transpiled/HTTP/formats/index.js.map +1 -0
  202. package/transpiled/HTTP/formats/json.d.ts +6 -0
  203. package/transpiled/HTTP/formats/json.js +17 -0
  204. package/transpiled/HTTP/formats/json.js.map +1 -0
  205. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  206. package/transpiled/HTTP/formats/msgpack.js +17 -0
  207. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  208. package/transpiled/HTTP/formats/text.d.ts +8 -0
  209. package/transpiled/HTTP/formats/text.js +15 -0
  210. package/transpiled/HTTP/formats/text.js.map +1 -0
  211. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  212. package/transpiled/HTTP/formats/yaml.js +41 -0
  213. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  214. package/transpiled/HTTP/index.d.ts +3 -0
  215. package/transpiled/HTTP/index.js +20 -0
  216. package/transpiled/HTTP/index.js.map +1 -0
  217. package/transpiled/HTTP/messages.d.ts +33 -0
  218. package/transpiled/HTTP/messages.js +75 -0
  219. package/transpiled/HTTP/messages.js.map +1 -0
  220. package/transpiled/Interception.d.ts +9 -0
  221. package/transpiled/Interception.js +19 -0
  222. package/transpiled/Interception.js.map +1 -0
  223. package/transpiled/Mapping.d.ts +8 -0
  224. package/transpiled/Mapping.js +38 -0
  225. package/transpiled/Mapping.js.map +1 -0
  226. package/transpiled/Query.d.ts +13 -0
  227. package/transpiled/Query.js +107 -0
  228. package/transpiled/Query.js.map +1 -0
  229. package/transpiled/RTD/Context.d.ts +11 -0
  230. package/transpiled/RTD/Context.js +3 -0
  231. package/transpiled/RTD/Context.js.map +1 -0
  232. package/transpiled/RTD/Directives.d.ts +7 -0
  233. package/transpiled/RTD/Directives.js +3 -0
  234. package/transpiled/RTD/Directives.js.map +1 -0
  235. package/transpiled/RTD/Endpoint.d.ts +9 -0
  236. package/transpiled/RTD/Endpoint.js +3 -0
  237. package/transpiled/RTD/Endpoint.js.map +1 -0
  238. package/transpiled/RTD/Match.d.ts +11 -0
  239. package/transpiled/RTD/Match.js +3 -0
  240. package/transpiled/RTD/Match.js.map +1 -0
  241. package/transpiled/RTD/Method.d.ts +9 -0
  242. package/transpiled/RTD/Method.js +16 -0
  243. package/transpiled/RTD/Method.js.map +1 -0
  244. package/transpiled/RTD/Node.d.ts +21 -0
  245. package/transpiled/RTD/Node.js +61 -0
  246. package/transpiled/RTD/Node.js.map +1 -0
  247. package/transpiled/RTD/Route.d.ts +14 -0
  248. package/transpiled/RTD/Route.js +49 -0
  249. package/transpiled/RTD/Route.js.map +1 -0
  250. package/transpiled/RTD/Tree.d.ts +14 -0
  251. package/transpiled/RTD/Tree.js +42 -0
  252. package/transpiled/RTD/Tree.js.map +1 -0
  253. package/transpiled/RTD/factory.d.ts +6 -0
  254. package/transpiled/RTD/factory.js +36 -0
  255. package/transpiled/RTD/factory.js.map +1 -0
  256. package/transpiled/RTD/index.d.ts +8 -0
  257. package/transpiled/RTD/index.js +38 -0
  258. package/transpiled/RTD/index.js.map +1 -0
  259. package/transpiled/RTD/segment.d.ts +8 -0
  260. package/transpiled/RTD/segment.js +25 -0
  261. package/transpiled/RTD/segment.js.map +1 -0
  262. package/transpiled/RTD/syntax/index.d.ts +2 -0
  263. package/transpiled/RTD/syntax/index.js +19 -0
  264. package/transpiled/RTD/syntax/index.js.map +1 -0
  265. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  266. package/transpiled/RTD/syntax/parse.js +128 -0
  267. package/transpiled/RTD/syntax/parse.js.map +1 -0
  268. package/transpiled/RTD/syntax/types.d.ts +41 -0
  269. package/transpiled/RTD/syntax/types.js +5 -0
  270. package/transpiled/RTD/syntax/types.js.map +1 -0
  271. package/transpiled/Remotes.d.ts +9 -0
  272. package/transpiled/Remotes.js +25 -0
  273. package/transpiled/Remotes.js.map +1 -0
  274. package/transpiled/Tenant.d.ts +13 -0
  275. package/transpiled/Tenant.js +34 -0
  276. package/transpiled/Tenant.js.map +1 -0
  277. package/transpiled/deployment.d.ts +3 -0
  278. package/transpiled/deployment.js +66 -0
  279. package/transpiled/deployment.js.map +1 -0
  280. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  281. package/transpiled/directives/auth/Anonymous.js +17 -0
  282. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  283. package/transpiled/directives/auth/Authorization.d.ts +20 -0
  284. package/transpiled/directives/auth/Authorization.js +125 -0
  285. package/transpiled/directives/auth/Authorization.js.map +1 -0
  286. package/transpiled/directives/auth/Echo.d.ts +6 -0
  287. package/transpiled/directives/auth/Echo.js +13 -0
  288. package/transpiled/directives/auth/Echo.js.map +1 -0
  289. package/transpiled/directives/auth/Id.d.ts +7 -0
  290. package/transpiled/directives/auth/Id.js +17 -0
  291. package/transpiled/directives/auth/Id.js.map +1 -0
  292. package/transpiled/directives/auth/Incept.d.ts +10 -0
  293. package/transpiled/directives/auth/Incept.js +58 -0
  294. package/transpiled/directives/auth/Incept.js.map +1 -0
  295. package/transpiled/directives/auth/Role.d.ts +11 -0
  296. package/transpiled/directives/auth/Role.js +44 -0
  297. package/transpiled/directives/auth/Role.js.map +1 -0
  298. package/transpiled/directives/auth/Rule.d.ts +9 -0
  299. package/transpiled/directives/auth/Rule.js +22 -0
  300. package/transpiled/directives/auth/Rule.js.map +1 -0
  301. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  302. package/transpiled/directives/auth/Scheme.js +47 -0
  303. package/transpiled/directives/auth/Scheme.js.map +1 -0
  304. package/transpiled/directives/auth/index.d.ts +2 -0
  305. package/transpiled/directives/auth/index.js +6 -0
  306. package/transpiled/directives/auth/index.js.map +1 -0
  307. package/transpiled/directives/auth/schemes.d.ts +3 -0
  308. package/transpiled/directives/auth/schemes.js +10 -0
  309. package/transpiled/directives/auth/schemes.js.map +1 -0
  310. package/transpiled/directives/auth/split.d.ts +2 -0
  311. package/transpiled/directives/auth/split.js +38 -0
  312. package/transpiled/directives/auth/split.js.map +1 -0
  313. package/transpiled/directives/auth/types.d.ts +31 -0
  314. package/transpiled/directives/auth/types.js +3 -0
  315. package/transpiled/directives/auth/types.js.map +1 -0
  316. package/transpiled/directives/cache/Cache.d.ts +11 -0
  317. package/transpiled/directives/cache/Cache.js +28 -0
  318. package/transpiled/directives/cache/Cache.js.map +1 -0
  319. package/transpiled/directives/cache/Control.d.ts +9 -0
  320. package/transpiled/directives/cache/Control.js +42 -0
  321. package/transpiled/directives/cache/Control.js.map +1 -0
  322. package/transpiled/directives/cache/Exact.d.ts +4 -0
  323. package/transpiled/directives/cache/Exact.js +11 -0
  324. package/transpiled/directives/cache/Exact.js.map +1 -0
  325. package/transpiled/directives/cache/index.d.ts +2 -0
  326. package/transpiled/directives/cache/index.js +6 -0
  327. package/transpiled/directives/cache/index.js.map +1 -0
  328. package/transpiled/directives/cache/types.d.ts +7 -0
  329. package/transpiled/directives/cache/types.js +3 -0
  330. package/transpiled/directives/cache/types.js.map +1 -0
  331. package/transpiled/directives/cors/CORS.d.ts +11 -0
  332. package/transpiled/directives/cors/CORS.js +44 -0
  333. package/transpiled/directives/cors/CORS.js.map +1 -0
  334. package/transpiled/directives/cors/index.d.ts +2 -0
  335. package/transpiled/directives/cors/index.js +6 -0
  336. package/transpiled/directives/cors/index.js.map +1 -0
  337. package/transpiled/directives/dev/Development.d.ts +9 -0
  338. package/transpiled/directives/dev/Development.js +29 -0
  339. package/transpiled/directives/dev/Development.js.map +1 -0
  340. package/transpiled/directives/dev/Stub.d.ts +7 -0
  341. package/transpiled/directives/dev/Stub.js +14 -0
  342. package/transpiled/directives/dev/Stub.js.map +1 -0
  343. package/transpiled/directives/dev/Throw.d.ts +7 -0
  344. package/transpiled/directives/dev/Throw.js +14 -0
  345. package/transpiled/directives/dev/Throw.js.map +1 -0
  346. package/transpiled/directives/dev/index.d.ts +2 -0
  347. package/transpiled/directives/dev/index.js +6 -0
  348. package/transpiled/directives/dev/index.js.map +1 -0
  349. package/transpiled/directives/dev/types.d.ts +4 -0
  350. package/transpiled/directives/dev/types.js +3 -0
  351. package/transpiled/directives/dev/types.js.map +1 -0
  352. package/transpiled/directives/index.d.ts +4 -0
  353. package/transpiled/directives/index.js +12 -0
  354. package/transpiled/directives/index.js.map +1 -0
  355. package/transpiled/directives/octets/Context.d.ts +8 -0
  356. package/transpiled/directives/octets/Context.js +40 -0
  357. package/transpiled/directives/octets/Context.js.map +1 -0
  358. package/transpiled/directives/octets/Delete.d.ts +19 -0
  359. package/transpiled/directives/octets/Delete.js +72 -0
  360. package/transpiled/directives/octets/Delete.js.map +1 -0
  361. package/transpiled/directives/octets/Fetch.d.ts +17 -0
  362. package/transpiled/directives/octets/Fetch.js +76 -0
  363. package/transpiled/directives/octets/Fetch.js.map +1 -0
  364. package/transpiled/directives/octets/List.d.ts +15 -0
  365. package/transpiled/directives/octets/List.js +65 -0
  366. package/transpiled/directives/octets/List.js.map +1 -0
  367. package/transpiled/directives/octets/Octets.d.ts +12 -0
  368. package/transpiled/directives/octets/Octets.js +51 -0
  369. package/transpiled/directives/octets/Octets.js.map +1 -0
  370. package/transpiled/directives/octets/Permute.d.ts +10 -0
  371. package/transpiled/directives/octets/Permute.js +51 -0
  372. package/transpiled/directives/octets/Permute.js.map +1 -0
  373. package/transpiled/directives/octets/Store.d.ts +22 -0
  374. package/transpiled/directives/octets/Store.js +80 -0
  375. package/transpiled/directives/octets/Store.js.map +1 -0
  376. package/transpiled/directives/octets/index.d.ts +2 -0
  377. package/transpiled/directives/octets/index.js +6 -0
  378. package/transpiled/directives/octets/index.js.map +1 -0
  379. package/transpiled/directives/octets/schemas.d.ts +11 -0
  380. package/transpiled/directives/octets/schemas.js +17 -0
  381. package/transpiled/directives/octets/schemas.js.map +1 -0
  382. package/transpiled/directives/octets/types.d.ts +10 -0
  383. package/transpiled/directives/octets/types.js +3 -0
  384. package/transpiled/directives/octets/types.js.map +1 -0
  385. package/transpiled/directives/octets/workflow/Execution.d.ts +25 -0
  386. package/transpiled/directives/octets/workflow/Execution.js +55 -0
  387. package/transpiled/directives/octets/workflow/Execution.js.map +1 -0
  388. package/transpiled/directives/octets/workflow/Workflow.d.ts +12 -0
  389. package/transpiled/directives/octets/workflow/Workflow.js +25 -0
  390. package/transpiled/directives/octets/workflow/Workflow.js.map +1 -0
  391. package/transpiled/directives/octets/workflow/index.d.ts +1 -0
  392. package/transpiled/directives/octets/workflow/index.js +6 -0
  393. package/transpiled/directives/octets/workflow/index.js.map +1 -0
  394. package/transpiled/directives/vary/Directive.d.ts +5 -0
  395. package/transpiled/directives/vary/Directive.js +3 -0
  396. package/transpiled/directives/vary/Directive.js.map +1 -0
  397. package/transpiled/directives/vary/Embed.d.ts +10 -0
  398. package/transpiled/directives/vary/Embed.js +49 -0
  399. package/transpiled/directives/vary/Embed.js.map +1 -0
  400. package/transpiled/directives/vary/Properties.d.ts +9 -0
  401. package/transpiled/directives/vary/Properties.js +16 -0
  402. package/transpiled/directives/vary/Properties.js.map +1 -0
  403. package/transpiled/directives/vary/Vary.d.ts +10 -0
  404. package/transpiled/directives/vary/Vary.js +36 -0
  405. package/transpiled/directives/vary/Vary.js.map +1 -0
  406. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  407. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  408. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  409. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  410. package/transpiled/directives/vary/embeddings/Header.js +26 -0
  411. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  412. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  413. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  414. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  415. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  416. package/transpiled/directives/vary/embeddings/index.js +10 -0
  417. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  418. package/transpiled/directives/vary/index.d.ts +2 -0
  419. package/transpiled/directives/vary/index.js +6 -0
  420. package/transpiled/directives/vary/index.js.map +1 -0
  421. package/transpiled/discovery.d.ts +1 -0
  422. package/transpiled/discovery.js +3 -0
  423. package/transpiled/discovery.js.map +1 -0
  424. package/transpiled/exceptions.d.ts +2 -0
  425. package/transpiled/exceptions.js +39 -0
  426. package/transpiled/exceptions.js.map +1 -0
  427. package/transpiled/index.d.ts +5 -0
  428. package/transpiled/index.js +12 -0
  429. package/transpiled/index.js.map +1 -0
  430. package/transpiled/io.d.ts +3 -0
  431. package/transpiled/io.js +3 -0
  432. package/transpiled/io.js.map +1 -0
  433. package/transpiled/manifest.d.ts +3 -0
  434. package/transpiled/manifest.js +66 -0
  435. package/transpiled/manifest.js.map +1 -0
  436. package/transpiled/root.d.ts +2 -0
  437. package/transpiled/root.js +39 -0
  438. package/transpiled/root.js.map +1 -0
  439. package/transpiled/schemas.d.ts +7 -0
  440. package/transpiled/schemas.js +14 -0
  441. package/transpiled/schemas.js.map +1 -0
  442. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -1,121 +1,74 @@
1
- import { AssertionError } from 'node:assert'
1
+ import * as assert from 'node:assert'
2
+ import * as fs from 'node:fs'
3
+ import * as path from 'node:path'
2
4
  import { binding, then, when } from 'cucumber-tsflow'
3
- import * as http from '@toa.io/http'
4
- import { trim } from '@toa.io/generic'
5
- import { buffer } from '@toa.io/streams'
6
- import { open } from '../../../storages/source/test/util'
5
+ import * as http from '@toa.io/agent'
6
+ import * as msgpack from 'msgpackr'
7
+ import * as YAML from 'js-yaml'
8
+ import { Captures } from './Captures'
7
9
  import { Parameters } from './Parameters'
8
10
  import { Gateway } from './Gateway'
11
+ import type { Readable } from 'node:stream'
9
12
 
10
- @binding([Gateway, Parameters])
11
- export class HTTP {
13
+ @binding([Gateway, Parameters, Captures])
14
+ export class HTTP extends http.Agent {
12
15
  private readonly gateway: Gateway
13
- private readonly origin: string
14
- private response: string = ''
15
- private readonly variables: Record<string, string> = {}
16
+ private fetched: Response | null = null
16
17
 
17
- public constructor (gateway: Gateway, parameters: Parameters) {
18
+ public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
19
+ super(parameters.origin, captures)
18
20
  this.gateway = gateway
19
- this.origin = parameters.origin
20
21
  }
21
22
 
22
23
  @when('the following request is received:')
23
- public async request (input: string): Promise<any> {
24
- let [headers, body] = trim(input).split('\n\n')
25
-
26
- if (body !== undefined)
27
- headers += '\ncontent-length: ' + body?.length
28
-
29
- const text = headers + '\n\n' + (body ?? '')
30
- const request = text.replaceAll(SUBSTITUTE, (_, name) => this.variables[name])
31
-
24
+ public override async request (input: string): Promise<any> {
32
25
  await this.gateway.start()
33
-
34
- this.response = await http.request(request, this.origin)
26
+ this.fetched = await super.request(input)
35
27
  }
36
28
 
37
29
  @then('the following reply is sent:')
38
- public responseIncludes (expected: string): void {
39
- const lines = trim(expected).split('\n')
40
-
41
- for (const line of lines) {
42
- const escaped = line.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
43
-
44
- const expression = escaped.replace(CAPTURE,
45
- (_, name) => `(?<${name}>\\S{1,2048})`)
30
+ public override responseIncludes (expected: string): void {
31
+ super.responseIncludes(expected)
32
+ }
46
33
 
47
- const rx = new RegExp(expression, 'i')
48
- const match = this.response.match(rx)
34
+ @then('response body contains {word}-encoded value:')
35
+ public async bodyIs (format: string, yaml: string): Promise<void> {
36
+ assert.ok(this.fetched !== null, 'Response is null')
49
37
 
50
- if (match === null)
51
- throw new AssertionError({
52
- message: `Response is missing '${line}'`,
53
- expected: line,
54
- actual: this.response
55
- })
38
+ const buf = await this.fetched.arrayBuffer()
39
+ const value = encoders[format]?.(buf as Buffer)
40
+ const expected = YAML.load(yaml)
56
41
 
57
- Object.assign(this.variables, match.groups)
58
- }
42
+ assert.deepEqual(value, expected, 'Values are not equal')
59
43
  }
60
44
 
61
45
  @then('the reply does not contain:')
62
- public responseExcludes (expected: string): void {
63
- const lines = trim(expected).split('\n')
64
-
65
- for (const line of lines) {
66
- line.replace(SUBSTITUTE, (_, name) => this.variables[name])
67
-
68
- const includes = this.response.includes(line)
69
-
70
- if (includes)
71
- throw new AssertionError({
72
- message: `Response contains '${line}'`,
73
- expected: line,
74
- actual: this.response
75
- })
76
- }
46
+ public override responseExcludes (expected: string): void {
47
+ super.responseExcludes(expected)
77
48
  }
78
49
 
79
50
  @when('the stream of `{word}` is received with the following headers:')
80
51
  public async streamRequest (filename: string, head: string): Promise<any> {
81
- head = trim(head) + '\n\n'
52
+ const stream = open(filename)
82
53
 
83
54
  await this.gateway.start()
84
-
85
- const { url, method, headers } = http.parse.request(head)
86
- const href = new URL(url, this.origin).href
87
- const body = open(filename)
88
-
89
- headers.connection = 'close' // required for interrupted streams
90
-
91
- const request = {
92
- method,
93
- headers,
94
- body: body as unknown as ReadableStream,
95
- duplex: 'half'
96
- }
97
-
98
- try {
99
- const response = await fetch(href, request)
100
-
101
- this.response = await http.parse.response(response)
102
- } catch (e: any) {
103
- console.error(e)
104
- console.error(e.cause)
105
-
106
- throw e
107
- }
55
+ await super.stream(head, stream)
108
56
  }
109
57
 
110
58
  @then('the stream equals to `{word}` is sent with the following headers:')
111
59
  public async responseStreamMatch (filename: string, head: string): Promise<any> {
112
- const buf = await buffer(open(filename))
113
- const text = buf.toString('utf8')
114
- const expected = head + '\n\n' + text
60
+ const stream = open(filename)
115
61
 
116
- this.responseIncludes(expected)
62
+ await super.streamMatch(head, stream)
117
63
  }
118
64
  }
119
65
 
120
- const CAPTURE = /\\\$\\{\\{ (?<name>[A-Za-z_]{0,32}) \\}\\}/g
121
- const SUBSTITUTE = /\${{ (?<name>[A-Za-z_]{0,32}) }}/g
66
+ const FILEDIR = path.resolve(__dirname, '../../../storages/source/test')
67
+
68
+ function open (filename: string): Readable {
69
+ return fs.createReadStream(path.join(FILEDIR, filename))
70
+ }
71
+
72
+ const encoders: Record<string, (buf: Buffer | Uint8Array) => any> = {
73
+ MessagePack: msgpack.decode
74
+ }
@@ -0,0 +1,120 @@
1
+ import { once } from 'node:events'
2
+ import * as crypto from 'node:crypto'
3
+ import * as http from 'node:http'
4
+ import * as assert from 'node:assert'
5
+ import * as util from 'node:util'
6
+ import { binding, given, afterAll } from 'cucumber-tsflow'
7
+ import { Captures } from './Captures'
8
+
9
+ import type { AddressInfo } from 'node:net'
10
+
11
+ @binding([Captures])
12
+ export class IdP {
13
+ private static server?: http.Server
14
+ private static privateKey?: crypto.KeyObject
15
+ private static issuer?: string
16
+
17
+ public constructor (private readonly captures: Captures) {}
18
+
19
+ @afterAll()
20
+ public static async stop (): Promise<void> {
21
+ if (this.server instanceof http.Server) {
22
+ this.server.close()
23
+ await once(this.server, 'close')
24
+ }
25
+ }
26
+
27
+ @given(/local IDP is running/i)
28
+ public async start (): Promise<void> {
29
+ if (IdP.server instanceof http.Server) return
30
+
31
+ // creating the key
32
+ const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
+ modulusLength: 2048
34
+ })
35
+
36
+ IdP.privateKey = privateKey
37
+
38
+ const jwk = JSON.stringify({
39
+ keys: [{ use: 'sig', alg: 'RS256', ...publicKey.export({ format: 'jwk' }) }]
40
+ })
41
+
42
+ const JWK_URL = '/.well-known/jwks'
43
+
44
+ const server = http.createServer((request, response) => {
45
+ switch (request.url) {
46
+ case JWK_URL:
47
+ response.writeHead(200, {
48
+ 'Content-Type': 'application/json',
49
+ 'Content-Length': jwk.length,
50
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
51
+ Pragma: 'no-cache',
52
+ Expires: '0'
53
+ })
54
+ response.end(jwk)
55
+ break
56
+
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
+ }
75
+
76
+ break
77
+
78
+ default:
79
+ response.writeHead(404, 'Not found')
80
+ response.end()
81
+ }
82
+ })
83
+
84
+ server.listen(44444, 'localhost')
85
+ await once(server, 'listening')
86
+
87
+ const address = server.address() as AddressInfo
88
+
89
+ console.log('IdP is listening on %s:%s', address.address, address.port)
90
+ IdP.server = server
91
+ IdP.issuer = `http://localhost:${address.port}`
92
+ }
93
+
94
+ @given('the IDP token for {word} is issued')
95
+ public async issueToken (user: string): Promise<void> {
96
+ assert.ok(IdP.privateKey, 'IdP private key is not available')
97
+
98
+ const jwt = [
99
+ {
100
+ typ: 'JWT',
101
+ alg: 'RS256'
102
+ },
103
+ {
104
+ iss: IdP.issuer,
105
+ sub: `${user}-mock-id`,
106
+ aud: 'test',
107
+ iat: Math.floor(Date.now() / 1000),
108
+ exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
109
+ }
110
+ ]
111
+ .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
112
+ .join('.')
113
+
114
+ const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IdP.privateKey, 'base64url')
115
+
116
+ const idToken = `${jwt}.${signature}`
117
+
118
+ this.captures.set(`${user}.id_token`, idToken)
119
+ }
120
+ }
@@ -1,4 +1,5 @@
1
1
  import { setDefaultTimeout } from '@cucumber/cucumber'
2
+ import { encode } from '@toa.io/generic'
2
3
 
3
4
  export class Parameters {
4
5
  public readonly origin: string
@@ -9,7 +10,12 @@ export class Parameters {
9
10
  }
10
11
 
11
12
  setDefaultTimeout(30 * 1000)
13
+
12
14
  process.env.TOA_DEV = '1'
13
15
 
14
- // { octets: tmp:///exposition-octets }
15
- process.env.TOA_STORAGES = '3gABpm9jdGV0c7h0bXA6Ly8vZXhwb3NpdGlvbi1vY3RldHM='
16
+ process.env.TOA_STORAGES = encode({
17
+ octets: {
18
+ provider: 'tmp',
19
+ directory: 'exposition'
20
+ }
21
+ })
@@ -1,17 +1,17 @@
1
1
  import { join } from 'node:path'
2
- import { tmpdir } from 'node:os'
3
- import { mkdtemp, copy } from 'fs-extra'
2
+ import { tmpdir, devNull } from 'node:os'
3
+ import { mkdtemp, cp } from 'node:fs/promises'
4
4
  import * as yaml from '@toa.io/yaml'
5
5
 
6
6
  export class Workspace {
7
- private root: string = devnull
7
+ private root: string = devNull
8
8
 
9
9
  public static exists
10
10
  (_0: unknown, _1: unknown, descriptor: PropertyDescriptor): PropertyDescriptor {
11
11
  const method = descriptor.value
12
12
 
13
13
  descriptor.value = async function (this: Workspace, ...args: any[]): Promise<any> {
14
- if (this.root === devnull) this.root =
14
+ if (this.root === devNull) this.root =
15
15
  await mkdtemp(join(tmpdir(), Math.random().toString(36).slice(2)))
16
16
 
17
17
  return method.apply(this, args)
@@ -25,7 +25,7 @@ export class Workspace {
25
25
  const source = join(__dirname, 'components', name)
26
26
  const target = join(this.root, name)
27
27
 
28
- await copy(source, target)
28
+ await cp(source, target, { force: true, recursive: true })
29
29
 
30
30
  if (patch !== undefined)
31
31
  await this.patchManifest(target, patch)
@@ -39,5 +39,3 @@ export class Workspace {
39
39
  await yaml.patch(path, patch)
40
40
  }
41
41
  }
42
-
43
- const devnull = '/dev/null'
@@ -0,0 +1,11 @@
1
+ 'use strict'
2
+
3
+ function computation () {
4
+ const err = { code: 'CODE', message: 'message' }
5
+
6
+ Object.setPrototypeOf(err, Error.prototype)
7
+
8
+ return err
9
+ }
10
+
11
+ exports.computation = computation
@@ -9,7 +9,10 @@ operations:
9
9
  storage*: string
10
10
  path*: string
11
11
  entry: object
12
+ parameters: object
12
13
  bar: *operation
13
14
  baz: *operation
14
15
  err: *operation
16
+ echo: *operation
17
+ concat: *operation
15
18
  diversify: *operation
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function concat (input) {
4
+ return input.parameters.a + ' ' + input.parameters.b
5
+ }
6
+
7
+ exports.computation = concat
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function echo (input) {
4
+ return input.entry.id
5
+ }
6
+
7
+ exports.computation = echo
@@ -9,3 +9,6 @@ operations:
9
9
  concurrency: retry
10
10
  input:
11
11
  name*: ~
12
+ create:
13
+ query: false
14
+ forward: transit
@@ -0,0 +1,13 @@
1
+ namespace: users
2
+ name: properties
3
+
4
+ entity:
5
+ schema:
6
+ newbie: false
7
+ dependent: true
8
+
9
+ operations:
10
+ transit:
11
+ concurrency: retry
12
+ input:
13
+ newbie*: .
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ESNext",
4
- "outDir": "/dev/null",
4
+ "noEmit": true,
5
5
  "moduleResolution": "node",
6
6
  "experimentalDecorators": true,
7
7
  "emitDecoratorMetadata": true
@@ -0,0 +1,150 @@
1
+ Feature: The Vary directive family
2
+
3
+ Scenario Outline: Embedding a `<result>` language code
4
+ Given the `echo` is running with the following manifest:
5
+ """yaml
6
+ exposition:
7
+ /:
8
+ vary:languages: [en, fr]
9
+ GET:
10
+ vary:embed:
11
+ name: language # embed resolved language code as a `name` property of the operation input
12
+ endpoint: compute
13
+ """
14
+ When the following request is received:
15
+ """
16
+ GET /echo/ HTTP/1.1
17
+ accept: application/yaml
18
+ accept-language: <accept>
19
+ """
20
+ Then the following reply is sent:
21
+ """
22
+ 200 OK
23
+ content-type: application/yaml
24
+ content-language: <result>
25
+ vary: accept-language, accept
26
+
27
+ Hello <result>
28
+ """
29
+ Examples:
30
+ | accept | result |
31
+ | en | en |
32
+ | en_US | en |
33
+ | fr | fr |
34
+ | sw | en |
35
+
36
+ Scenario: Listing languages on the root
37
+ Given the annotation:
38
+ """
39
+ /:
40
+ vary:languages: [en, fr]
41
+ """
42
+ And the `echo` is running with the following manifest:
43
+ """yaml
44
+ exposition:
45
+ /:
46
+ GET:
47
+ anonymous: true
48
+ vary:embed:
49
+ name: language
50
+ endpoint: compute
51
+ """
52
+ When the following request is received:
53
+ """
54
+ GET /echo/ HTTP/1.1
55
+ accept: application/yaml
56
+ accept-language: fr
57
+ """
58
+ Then the following reply is sent:
59
+ """
60
+ 200 OK
61
+ content-type: application/yaml
62
+ content-language: fr
63
+ """
64
+
65
+
66
+ Scenario: Embedding a value of an arbitrary header
67
+ Given the `echo` is running with the following manifest:
68
+ """yaml
69
+ exposition:
70
+ /:
71
+ GET:
72
+ vary:embed:
73
+ name: :foo
74
+ endpoint: compute
75
+ """
76
+ When the following request is received:
77
+ """
78
+ GET /echo/ HTTP/1.1
79
+ accept: application/yaml
80
+ foo: bar
81
+ """
82
+ Then the following reply is sent:
83
+ """
84
+ 200 OK
85
+ content-type: application/yaml
86
+ vary: foo, accept
87
+
88
+ Hello bar
89
+ """
90
+
91
+ Scenario Outline: Embedding a value from the list of options
92
+ Given the `echo` is running with the following manifest:
93
+ """yaml
94
+ exposition:
95
+ /:
96
+ vary:languages: [en, fr]
97
+ GET:
98
+ vary:embed:
99
+ name:
100
+ - :foo
101
+ - :bar
102
+ - language
103
+ endpoint: compute
104
+ """
105
+ When the following request is received:
106
+ """
107
+ GET /echo/ HTTP/1.1
108
+ accept: application/yaml
109
+ <header>: <value>
110
+ """
111
+ Then the following reply is sent:
112
+ """
113
+ 200 OK
114
+ content-type: application/yaml
115
+ vary: <header>, accept
116
+
117
+ Hello <value>
118
+ """
119
+ Examples:
120
+ | header | value |
121
+ | foo | bar |
122
+ | bar | baz |
123
+ | accept-language | en |
124
+
125
+ Scenario: Adding headers used by defined embeddings to CORS permissions
126
+ Given the `echo` is running with the following manifest:
127
+ """yaml
128
+ exposition:
129
+ /:
130
+ vary:languages: [en, fr]
131
+ GET:
132
+ vary:embed:
133
+ name:
134
+ - language
135
+ - :foo
136
+ - :FOO
137
+ - :bar
138
+ endpoint: compute
139
+ """
140
+ When the following request is received:
141
+ """
142
+ OPTIONS / HTTP/1.1
143
+ origin: http://example.com
144
+ access-control-request-headers: whatever
145
+ """
146
+ Then the following reply is sent:
147
+ """
148
+ 204 No Content
149
+ access-control-allow-headers: accept, authorization, content-type, accept-language, foo, bar
150
+ """
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/extensions.exposition",
3
- "version": "1.0.0-alpha.0",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "Toa Exposition",
5
5
  "author": "temich <tema.gurtovoy@gmail.com>",
6
6
  "homepage": "https://github.com/toa-io/toa#readme",
@@ -17,18 +17,16 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "@toa.io/core": "1.0.0-alpha.0",
21
- "@toa.io/generic": "1.0.0-alpha.0",
22
- "@toa.io/http": "1.0.0-alpha.0",
23
- "@toa.io/schemas": "1.0.0-alpha.0",
24
- "@toa.io/streams": "1.0.0-alpha.0",
20
+ "@toa.io/core": "1.0.0-alpha.2",
21
+ "@toa.io/generic": "1.0.0-alpha.2",
22
+ "@toa.io/schemas": "1.0.0-alpha.2",
23
+ "@toa.io/streams": "1.0.0-alpha.2",
25
24
  "bcryptjs": "2.4.3",
26
- "cors": "2.8.5",
27
25
  "error-value": "0.3.0",
28
26
  "express": "4.18.2",
29
27
  "js-yaml": "4.1.0",
30
28
  "matchacho": "0.3.5",
31
- "msgpackr": "1.9.5",
29
+ "msgpackr": "1.10.1",
32
30
  "negotiator": "0.6.3",
33
31
  "paseto": "3.1.4"
34
32
  },
@@ -38,20 +36,21 @@
38
36
  },
39
37
  "scripts": {
40
38
  "test": "jest",
41
- "transpile": "rm -rf transpiled && npx tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles",
42
- "transpile:basic": "rm -rf ./components/identity.basic/operations && npx tsc -p ./components/identity.basic",
43
- "transpile:tokens": "rm -rf ./components/identity.tokens/operations && npx tsc -p ./components/identity.tokens",
44
- "transpile:roles": "rm -rf ./components/identity.roles/operations && npx tsc -p ./components/identity.roles",
45
- "features": "npx cucumber-js"
39
+ "transpile": "tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles && npm run transpile:federation",
40
+ "transpile:basic": "tsc -p ./components/identity.basic",
41
+ "pretranspile:federation": "js-yaml components/identity.federation/manifest.toa.yaml | jq -M '{ type: \"object\", properties: {configuration: .configuration.schema, entity: .entity.schema }, additionalProperties: false}' > schemas.json && json2ts -i schemas.json -o components/identity.federation/source/schemas.ts && rm schemas.json",
42
+ "transpile:federation": "tsc -p ./components/identity.federation",
43
+ "transpile:tokens": "tsc -p ./components/identity.tokens",
44
+ "transpile:roles": "tsc -p ./components/identity.roles",
45
+ "features": "cucumber-js"
46
46
  },
47
47
  "devDependencies": {
48
- "@toa.io/extensions.storages": "1.0.0-alpha.0",
48
+ "@toa.io/agent": "1.0.0-alpha.2",
49
+ "@toa.io/extensions.storages": "1.0.0-alpha.2",
49
50
  "@types/bcryptjs": "2.4.3",
50
51
  "@types/cors": "2.8.13",
51
52
  "@types/express": "4.17.17",
52
- "@types/fs-extra": "11.0.4",
53
- "@types/negotiator": "0.6.1",
54
- "fs-extra": "11.1.1"
53
+ "@types/negotiator": "0.6.1"
55
54
  },
56
- "gitHead": "06c64546f6292cc07c52f74b31415101037f7616"
55
+ "gitHead": "7688e6e980a65c82ac2e459be4e355eebf406cd0"
57
56
  }
@@ -1 +1,2 @@
1
- ~
1
+ workflow+: <string>
2
+ _: true
@@ -1 +1,2 @@
1
- ~
1
+ meta: boolean
2
+ _: true
@@ -1,10 +1,11 @@
1
+ import assert from 'node:assert'
1
2
  import { generate } from 'randomstring'
2
3
  import { DirectivesFactory, type Family } from './Directive'
3
4
  import { type syntax } from './RTD'
4
5
  import { type IncomingMessage } from './HTTP'
5
6
  import { type Remotes } from './Remotes'
6
7
 
7
- const families: Array<jest.MockedObject<Family>> = [
8
+ const families: Array<jest.MockedObjectDeep<Family>> = [
8
9
  {
9
10
  name: 'foo',
10
11
  mandatory: true,
@@ -26,6 +27,9 @@ let factory: DirectivesFactory
26
27
  beforeEach(() => {
27
28
  jest.clearAllMocks()
28
29
 
30
+ assert.ok(families[0].preflight !== undefined)
31
+ assert.ok(families[1].preflight !== undefined)
32
+
29
33
  families[0].preflight.mockImplementation(() => null)
30
34
  families[1].preflight.mockImplementation(() => null)
31
35
  factory = new DirectivesFactory(families, {} as unknown as Remotes)
@@ -61,7 +65,7 @@ it('should throw error if directive family is not found', async () => {
61
65
  }
62
66
 
63
67
  expect(() => factory.create([declaration]))
64
- .toThrowError(`Directive family '${declaration.family}' not found.`)
68
+ .toThrowError(`Directive family '${declaration.family}' is not found.`)
65
69
  })
66
70
 
67
71
  it('should apply directive', async () => {
@@ -77,6 +81,8 @@ it('should apply directive', async () => {
77
81
 
78
82
  await directives.preflight(request, [])
79
83
 
84
+ assert.ok(families[0].preflight !== undefined)
85
+
80
86
  expect(families[0].preflight.mock.calls[0][0]).toStrictEqual([directive])
81
87
  expect(families[0].preflight.mock.calls[0][1]).toEqual(request)
82
88
  })