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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) 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/cucumber.js +0 -1
  71. package/documentation/components.md +25 -2
  72. package/documentation/identity.md +7 -7
  73. package/documentation/protocol.md +21 -1
  74. package/documentation/query.md +1 -1
  75. package/documentation/vary.md +69 -0
  76. package/features/cors.feature +39 -0
  77. package/features/identity.feature +19 -3
  78. package/features/identity.federation.feature +125 -0
  79. package/features/octets.feature +1 -1
  80. package/features/response.feature +65 -0
  81. package/features/steps/Captures.ts +5 -0
  82. package/features/steps/Components.ts +5 -0
  83. package/features/steps/Gateway.ts +1 -2
  84. package/features/steps/HTTP.ts +39 -84
  85. package/features/steps/IdP.ts +120 -0
  86. package/features/steps/Parameters.ts +8 -2
  87. package/features/steps/Workspace.ts +5 -7
  88. package/features/steps/components/echo/operations/error.js +11 -0
  89. package/features/vary.feature +150 -0
  90. package/package.json +17 -18
  91. package/source/Directive.test.ts +8 -2
  92. package/source/Directive.ts +19 -16
  93. package/source/Factory.ts +8 -7
  94. package/source/Gateway.ts +22 -8
  95. package/source/HTTP/Server.fixtures.ts +0 -1
  96. package/source/HTTP/Server.test.ts +61 -134
  97. package/source/HTTP/Server.ts +45 -23
  98. package/source/HTTP/formats/msgpack.ts +9 -6
  99. package/source/HTTP/formats/text.ts +1 -1
  100. package/source/HTTP/formats/yaml.ts +1 -1
  101. package/source/HTTP/messages.ts +8 -2
  102. package/source/Interception.ts +24 -0
  103. package/source/RTD/Directives.ts +2 -2
  104. package/source/RTD/Tree.ts +3 -0
  105. package/source/RTD/syntax/parse.ts +6 -6
  106. package/source/RTD/syntax/types.ts +1 -1
  107. package/source/deployment.ts +1 -2
  108. package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
  109. package/source/directives/auth/Incept.ts +1 -1
  110. package/source/directives/auth/Rule.ts +2 -2
  111. package/source/directives/auth/index.ts +2 -2
  112. package/source/directives/auth/schemes.ts +2 -1
  113. package/source/directives/auth/types.ts +9 -6
  114. package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
  115. package/source/directives/cache/index.ts +2 -2
  116. package/source/directives/cache/types.ts +1 -1
  117. package/source/directives/cors/CORS.ts +52 -0
  118. package/source/directives/cors/index.ts +3 -0
  119. package/source/directives/dev/{Family.ts → Development.ts} +3 -4
  120. package/source/directives/dev/Stub.ts +4 -4
  121. package/source/directives/dev/Throw.ts +4 -4
  122. package/source/directives/dev/index.ts +2 -2
  123. package/source/directives/dev/types.ts +1 -1
  124. package/source/directives/index.ts +10 -6
  125. package/source/directives/octets/Context.ts +1 -1
  126. package/source/directives/octets/Delete.ts +1 -2
  127. package/source/directives/octets/Fetch.ts +1 -1
  128. package/source/directives/octets/List.ts +1 -1
  129. package/source/directives/octets/{Family.ts → Octets.ts} +3 -4
  130. package/source/directives/octets/Permute.ts +1 -1
  131. package/source/directives/octets/Store.ts +3 -3
  132. package/source/directives/octets/index.ts +2 -2
  133. package/source/directives/octets/types.ts +3 -3
  134. package/source/directives/vary/Directive.ts +6 -0
  135. package/source/directives/vary/Embed.ts +62 -0
  136. package/source/directives/vary/Properties.ts +17 -0
  137. package/source/directives/vary/Vary.ts +48 -0
  138. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  139. package/source/directives/vary/embeddings/Header.ts +30 -0
  140. package/source/directives/vary/embeddings/Language.ts +31 -0
  141. package/source/directives/vary/embeddings/index.ts +11 -0
  142. package/source/directives/vary/index.ts +3 -0
  143. package/source/io.ts +4 -0
  144. package/transpiled/Annotation.d.ts +7 -0
  145. package/transpiled/Annotation.js +3 -0
  146. package/transpiled/Annotation.js.map +1 -0
  147. package/transpiled/Branch.d.ts +7 -0
  148. package/transpiled/Branch.js +3 -0
  149. package/transpiled/Branch.js.map +1 -0
  150. package/transpiled/Composition.d.ts +14 -0
  151. package/transpiled/Composition.js +43 -0
  152. package/transpiled/Composition.js.map +1 -0
  153. package/transpiled/Context.d.ts +5 -0
  154. package/transpiled/Context.js +3 -0
  155. package/transpiled/Context.js.map +1 -0
  156. package/transpiled/Directive.d.ts +31 -0
  157. package/transpiled/Directive.js +78 -0
  158. package/transpiled/Directive.js.map +1 -0
  159. package/transpiled/Endpoint.d.ts +20 -0
  160. package/transpiled/Endpoint.js +45 -0
  161. package/transpiled/Endpoint.js.map +1 -0
  162. package/transpiled/Factory.d.ts +9 -0
  163. package/transpiled/Factory.js +67 -0
  164. package/transpiled/Factory.js.map +1 -0
  165. package/transpiled/Gateway.d.ts +22 -0
  166. package/transpiled/Gateway.js +102 -0
  167. package/transpiled/Gateway.js.map +1 -0
  168. package/transpiled/HTTP/Server.d.ts +24 -0
  169. package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
  170. package/transpiled/HTTP/Server.fixtures.js +31 -0
  171. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  172. package/transpiled/HTTP/Server.js +148 -0
  173. package/transpiled/HTTP/Server.js.map +1 -0
  174. package/transpiled/HTTP/exceptions.d.ts +34 -0
  175. package/transpiled/HTTP/exceptions.js +71 -0
  176. package/transpiled/HTTP/exceptions.js.map +1 -0
  177. package/transpiled/HTTP/formats/index.d.ts +10 -0
  178. package/transpiled/HTTP/formats/index.js +38 -0
  179. package/transpiled/HTTP/formats/index.js.map +1 -0
  180. package/transpiled/HTTP/formats/json.d.ts +6 -0
  181. package/transpiled/HTTP/formats/json.js +17 -0
  182. package/transpiled/HTTP/formats/json.js.map +1 -0
  183. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  184. package/transpiled/HTTP/formats/msgpack.js +17 -0
  185. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  186. package/transpiled/HTTP/formats/text.d.ts +8 -0
  187. package/transpiled/HTTP/formats/text.js +15 -0
  188. package/transpiled/HTTP/formats/text.js.map +1 -0
  189. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  190. package/transpiled/HTTP/formats/yaml.js +41 -0
  191. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  192. package/transpiled/HTTP/index.d.ts +3 -0
  193. package/transpiled/HTTP/index.js +20 -0
  194. package/transpiled/HTTP/index.js.map +1 -0
  195. package/transpiled/HTTP/messages.d.ts +32 -0
  196. package/transpiled/HTTP/messages.js +72 -0
  197. package/transpiled/HTTP/messages.js.map +1 -0
  198. package/transpiled/Interception.d.ts +9 -0
  199. package/transpiled/Interception.js +19 -0
  200. package/transpiled/Interception.js.map +1 -0
  201. package/transpiled/Mapping.d.ts +8 -0
  202. package/transpiled/Mapping.js +38 -0
  203. package/transpiled/Mapping.js.map +1 -0
  204. package/transpiled/Query.d.ts +13 -0
  205. package/transpiled/Query.js +107 -0
  206. package/transpiled/Query.js.map +1 -0
  207. package/transpiled/RTD/Context.d.ts +11 -0
  208. package/transpiled/RTD/Context.js +3 -0
  209. package/transpiled/RTD/Context.js.map +1 -0
  210. package/transpiled/RTD/Directives.d.ts +7 -0
  211. package/transpiled/RTD/Directives.js +3 -0
  212. package/transpiled/RTD/Directives.js.map +1 -0
  213. package/transpiled/RTD/Endpoint.d.ts +9 -0
  214. package/transpiled/RTD/Endpoint.js +3 -0
  215. package/transpiled/RTD/Endpoint.js.map +1 -0
  216. package/transpiled/RTD/Match.d.ts +11 -0
  217. package/transpiled/RTD/Match.js +3 -0
  218. package/transpiled/RTD/Match.js.map +1 -0
  219. package/transpiled/RTD/Method.d.ts +9 -0
  220. package/transpiled/RTD/Method.js +16 -0
  221. package/transpiled/RTD/Method.js.map +1 -0
  222. package/transpiled/RTD/Node.d.ts +21 -0
  223. package/transpiled/RTD/Node.js +61 -0
  224. package/transpiled/RTD/Node.js.map +1 -0
  225. package/transpiled/RTD/Route.d.ts +14 -0
  226. package/transpiled/RTD/Route.js +49 -0
  227. package/transpiled/RTD/Route.js.map +1 -0
  228. package/transpiled/RTD/Tree.d.ts +14 -0
  229. package/transpiled/RTD/Tree.js +42 -0
  230. package/transpiled/RTD/Tree.js.map +1 -0
  231. package/transpiled/RTD/factory.d.ts +6 -0
  232. package/transpiled/RTD/factory.js +36 -0
  233. package/transpiled/RTD/factory.js.map +1 -0
  234. package/transpiled/RTD/index.d.ts +8 -0
  235. package/transpiled/RTD/index.js +38 -0
  236. package/transpiled/RTD/index.js.map +1 -0
  237. package/transpiled/RTD/segment.d.ts +8 -0
  238. package/transpiled/RTD/segment.js +25 -0
  239. package/transpiled/RTD/segment.js.map +1 -0
  240. package/transpiled/RTD/syntax/index.d.ts +2 -0
  241. package/transpiled/RTD/syntax/index.js +19 -0
  242. package/transpiled/RTD/syntax/index.js.map +1 -0
  243. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  244. package/transpiled/RTD/syntax/parse.js +128 -0
  245. package/transpiled/RTD/syntax/parse.js.map +1 -0
  246. package/transpiled/RTD/syntax/types.d.ts +41 -0
  247. package/transpiled/RTD/syntax/types.js +5 -0
  248. package/transpiled/RTD/syntax/types.js.map +1 -0
  249. package/transpiled/Remotes.d.ts +9 -0
  250. package/transpiled/Remotes.js +25 -0
  251. package/transpiled/Remotes.js.map +1 -0
  252. package/transpiled/Tenant.d.ts +13 -0
  253. package/transpiled/Tenant.js +34 -0
  254. package/transpiled/Tenant.js.map +1 -0
  255. package/transpiled/deployment.d.ts +3 -0
  256. package/transpiled/deployment.js +66 -0
  257. package/transpiled/deployment.js.map +1 -0
  258. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  259. package/transpiled/directives/auth/Anonymous.js +17 -0
  260. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  261. package/transpiled/directives/auth/Authorization.d.ts +20 -0
  262. package/transpiled/directives/auth/Authorization.js +125 -0
  263. package/transpiled/directives/auth/Authorization.js.map +1 -0
  264. package/transpiled/directives/auth/Echo.d.ts +6 -0
  265. package/transpiled/directives/auth/Echo.js +13 -0
  266. package/transpiled/directives/auth/Echo.js.map +1 -0
  267. package/transpiled/directives/auth/Id.d.ts +7 -0
  268. package/transpiled/directives/auth/Id.js +17 -0
  269. package/transpiled/directives/auth/Id.js.map +1 -0
  270. package/transpiled/directives/auth/Incept.d.ts +10 -0
  271. package/transpiled/directives/auth/Incept.js +58 -0
  272. package/transpiled/directives/auth/Incept.js.map +1 -0
  273. package/transpiled/directives/auth/Role.d.ts +11 -0
  274. package/transpiled/directives/auth/Role.js +44 -0
  275. package/transpiled/directives/auth/Role.js.map +1 -0
  276. package/transpiled/directives/auth/Rule.d.ts +9 -0
  277. package/transpiled/directives/auth/Rule.js +22 -0
  278. package/transpiled/directives/auth/Rule.js.map +1 -0
  279. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  280. package/transpiled/directives/auth/Scheme.js +47 -0
  281. package/transpiled/directives/auth/Scheme.js.map +1 -0
  282. package/transpiled/directives/auth/index.d.ts +2 -0
  283. package/transpiled/directives/auth/index.js +6 -0
  284. package/transpiled/directives/auth/index.js.map +1 -0
  285. package/transpiled/directives/auth/schemes.d.ts +3 -0
  286. package/transpiled/directives/auth/schemes.js +10 -0
  287. package/transpiled/directives/auth/schemes.js.map +1 -0
  288. package/transpiled/directives/auth/split.d.ts +2 -0
  289. package/transpiled/directives/auth/split.js +38 -0
  290. package/transpiled/directives/auth/split.js.map +1 -0
  291. package/transpiled/directives/auth/types.d.ts +31 -0
  292. package/transpiled/directives/auth/types.js +3 -0
  293. package/transpiled/directives/auth/types.js.map +1 -0
  294. package/transpiled/directives/cache/Cache.d.ts +11 -0
  295. package/transpiled/directives/cache/Cache.js +28 -0
  296. package/transpiled/directives/cache/Cache.js.map +1 -0
  297. package/transpiled/directives/cache/Control.d.ts +9 -0
  298. package/transpiled/directives/cache/Control.js +42 -0
  299. package/transpiled/directives/cache/Control.js.map +1 -0
  300. package/transpiled/directives/cache/Exact.d.ts +4 -0
  301. package/transpiled/directives/cache/Exact.js +11 -0
  302. package/transpiled/directives/cache/Exact.js.map +1 -0
  303. package/transpiled/directives/cache/index.d.ts +2 -0
  304. package/transpiled/directives/cache/index.js +6 -0
  305. package/transpiled/directives/cache/index.js.map +1 -0
  306. package/transpiled/directives/cache/types.d.ts +7 -0
  307. package/transpiled/directives/cache/types.js +3 -0
  308. package/transpiled/directives/cache/types.js.map +1 -0
  309. package/transpiled/directives/cors/CORS.d.ts +14 -0
  310. package/transpiled/directives/cors/CORS.js +42 -0
  311. package/transpiled/directives/cors/CORS.js.map +1 -0
  312. package/transpiled/directives/cors/index.d.ts +2 -0
  313. package/transpiled/directives/cors/index.js +6 -0
  314. package/transpiled/directives/cors/index.js.map +1 -0
  315. package/transpiled/directives/dev/Development.d.ts +9 -0
  316. package/transpiled/directives/dev/Development.js +29 -0
  317. package/transpiled/directives/dev/Development.js.map +1 -0
  318. package/transpiled/directives/dev/Stub.d.ts +7 -0
  319. package/transpiled/directives/dev/Stub.js +14 -0
  320. package/transpiled/directives/dev/Stub.js.map +1 -0
  321. package/transpiled/directives/dev/Throw.d.ts +7 -0
  322. package/transpiled/directives/dev/Throw.js +14 -0
  323. package/transpiled/directives/dev/Throw.js.map +1 -0
  324. package/transpiled/directives/dev/index.d.ts +2 -0
  325. package/transpiled/directives/dev/index.js +6 -0
  326. package/transpiled/directives/dev/index.js.map +1 -0
  327. package/transpiled/directives/dev/types.d.ts +4 -0
  328. package/transpiled/directives/dev/types.js +3 -0
  329. package/transpiled/directives/dev/types.js.map +1 -0
  330. package/transpiled/directives/index.d.ts +4 -0
  331. package/transpiled/directives/index.js +12 -0
  332. package/transpiled/directives/index.js.map +1 -0
  333. package/transpiled/directives/octets/Context.d.ts +8 -0
  334. package/transpiled/directives/octets/Context.js +40 -0
  335. package/transpiled/directives/octets/Context.js.map +1 -0
  336. package/transpiled/directives/octets/Delete.d.ts +10 -0
  337. package/transpiled/directives/octets/Delete.js +47 -0
  338. package/transpiled/directives/octets/Delete.js.map +1 -0
  339. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  340. package/transpiled/directives/octets/Fetch.js +77 -0
  341. package/transpiled/directives/octets/Fetch.js.map +1 -0
  342. package/transpiled/directives/octets/List.d.ts +10 -0
  343. package/transpiled/directives/octets/List.js +47 -0
  344. package/transpiled/directives/octets/List.js.map +1 -0
  345. package/transpiled/directives/octets/Octets.d.ts +11 -0
  346. package/transpiled/directives/octets/Octets.js +51 -0
  347. package/transpiled/directives/octets/Octets.js.map +1 -0
  348. package/transpiled/directives/octets/Permute.d.ts +10 -0
  349. package/transpiled/directives/octets/Permute.js +51 -0
  350. package/transpiled/directives/octets/Permute.js.map +1 -0
  351. package/transpiled/directives/octets/Store.d.ts +33 -0
  352. package/transpiled/directives/octets/Store.js +124 -0
  353. package/transpiled/directives/octets/Store.js.map +1 -0
  354. package/transpiled/directives/octets/index.d.ts +2 -0
  355. package/transpiled/directives/octets/index.js +6 -0
  356. package/transpiled/directives/octets/index.js.map +1 -0
  357. package/transpiled/directives/octets/schemas.d.ts +6 -0
  358. package/transpiled/directives/octets/schemas.js +17 -0
  359. package/transpiled/directives/octets/schemas.js.map +1 -0
  360. package/transpiled/directives/octets/types.d.ts +9 -0
  361. package/transpiled/directives/octets/types.js +3 -0
  362. package/transpiled/directives/octets/types.js.map +1 -0
  363. package/transpiled/directives/vary/Directive.d.ts +5 -0
  364. package/transpiled/directives/vary/Directive.js +3 -0
  365. package/transpiled/directives/vary/Directive.js.map +1 -0
  366. package/transpiled/directives/vary/Embed.d.ts +10 -0
  367. package/transpiled/directives/vary/Embed.js +49 -0
  368. package/transpiled/directives/vary/Embed.js.map +1 -0
  369. package/transpiled/directives/vary/Properties.d.ts +9 -0
  370. package/transpiled/directives/vary/Properties.js +16 -0
  371. package/transpiled/directives/vary/Properties.js.map +1 -0
  372. package/transpiled/directives/vary/Vary.d.ts +10 -0
  373. package/transpiled/directives/vary/Vary.js +36 -0
  374. package/transpiled/directives/vary/Vary.js.map +1 -0
  375. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  376. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  377. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  378. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  379. package/transpiled/directives/vary/embeddings/Header.js +26 -0
  380. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  381. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  382. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  383. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  384. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  385. package/transpiled/directives/vary/embeddings/index.js +10 -0
  386. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  387. package/transpiled/directives/vary/index.d.ts +2 -0
  388. package/transpiled/directives/vary/index.js +6 -0
  389. package/transpiled/directives/vary/index.js.map +1 -0
  390. package/transpiled/discovery.d.ts +1 -0
  391. package/transpiled/discovery.js +3 -0
  392. package/transpiled/discovery.js.map +1 -0
  393. package/transpiled/exceptions.d.ts +2 -0
  394. package/transpiled/exceptions.js +39 -0
  395. package/transpiled/exceptions.js.map +1 -0
  396. package/transpiled/index.d.ts +5 -0
  397. package/transpiled/index.js +12 -0
  398. package/transpiled/index.js.map +1 -0
  399. package/transpiled/io.d.ts +3 -0
  400. package/transpiled/io.js +3 -0
  401. package/transpiled/io.js.map +1 -0
  402. package/transpiled/manifest.d.ts +3 -0
  403. package/transpiled/manifest.js +61 -0
  404. package/transpiled/manifest.js.map +1 -0
  405. package/transpiled/root.d.ts +2 -0
  406. package/transpiled/root.js +39 -0
  407. package/transpiled/root.js.map +1 -0
  408. package/transpiled/schemas.d.ts +3 -0
  409. package/transpiled/schemas.js +14 -0
  410. package/transpiled/schemas.js.map +1 -0
  411. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,48 @@
1
+ import { match } from 'matchacho'
2
+ import { properties, Property } from './Properties'
3
+ import { Embed } from './Embed'
4
+ import type { Properties } from './Properties'
5
+ import type { Directive } from './Directive'
6
+ import type { Family } from '../../Directive'
7
+ import type { Input, Output } from '../../io'
8
+
9
+ export class Vary implements Family {
10
+ public readonly name = 'vary'
11
+ public readonly mandatory = false
12
+
13
+ public create (name: string, value: unknown): Property | Directive {
14
+ return match(name,
15
+ () => name in properties, (name: PN) => new Property(name, value as PV),
16
+ () => name in directives, (name: keyof typeof directives) => new directives[name](value),
17
+ () => {
18
+ throw new Error(`Unknown directive 'vary:${name}'`)
19
+ })
20
+ }
21
+
22
+ public preflight (instances: Array<Directive | Property>, request: Input): Output {
23
+ /*
24
+ To stop consructing `properties` object on each request, Directive Families must be refactored
25
+ from singleton factories to per-Node instances on the Tree.
26
+ */
27
+ const properties: Properties = {}
28
+ const directives: Directive[] = []
29
+
30
+ for (const instance of instances)
31
+ if (instance instanceof Property)
32
+ properties[instance.name] = instance.value
33
+ else
34
+ directives.push(instance)
35
+
36
+ for (const directive of directives)
37
+ directive.preflight(request, properties)
38
+
39
+ return null
40
+ }
41
+ }
42
+
43
+ type PN = keyof Properties
44
+ type PV = Properties[PN]
45
+
46
+ const directives: Record<string, new (value: any) => Directive> = {
47
+ embed: Embed
48
+ }
@@ -0,0 +1,6 @@
1
+ import type { Properties } from '../Properties'
2
+ import type { Input } from '../../../io'
3
+
4
+ export interface Embedding {
5
+ resolve: (input: Input, properties: Properties) => string | undefined
6
+ }
@@ -0,0 +1,30 @@
1
+ import { cors } from '../../cors'
2
+ import type { Input } from '../../../io'
3
+ import type { Embedding } from './Embedding'
4
+
5
+ export class Header implements Embedding {
6
+ private readonly name: string
7
+
8
+ public constructor (name: string) {
9
+ this.name = name
10
+
11
+ cors.allowHeader(this.name)
12
+ }
13
+
14
+ public resolve (input: Input): string | undefined {
15
+ const value = input.headers[this.name]
16
+
17
+ if (value === undefined)
18
+ return value
19
+
20
+ input.pipelines.response.push((response) => {
21
+ response.headers ??= new Headers()
22
+ response.headers.append('vary', this.name)
23
+ })
24
+
25
+ if (Array.isArray(value))
26
+ return value.join(', ')
27
+ else
28
+ return value
29
+ }
30
+ }
@@ -0,0 +1,31 @@
1
+ import assert from 'node:assert'
2
+ import Negotiator from 'negotiator'
3
+ import { cors } from '../../cors'
4
+ import type { Properties } from '../Properties'
5
+ import type { Embedding } from './Embedding'
6
+ import type { Input } from '../../../io'
7
+
8
+ export class Language implements Embedding {
9
+ public constructor () {
10
+ cors.allowHeader('accept-language')
11
+ }
12
+
13
+ public resolve (input: Input, properties: Properties): string | undefined {
14
+ assert.ok(properties.languages !== undefined,
15
+ 'Supported languages are not defined. Use `vary:languages` directive.')
16
+
17
+ assert.ok(properties.languages.length > 0,
18
+ 'List of supported languages is empty.')
19
+
20
+ const negotiator = new Negotiator(input)
21
+ const language = negotiator.language(properties.languages) ?? properties.languages[0]
22
+
23
+ input.pipelines.response.push((response) => {
24
+ response.headers ??= new Headers()
25
+ response.headers.set('content-language', language)
26
+ response.headers.append('vary', 'accept-language')
27
+ })
28
+
29
+ return language
30
+ }
31
+ }
@@ -0,0 +1,11 @@
1
+ import { Language } from './Language'
2
+ import { Header } from './Header'
3
+
4
+ import type { Embedding } from './Embedding'
5
+
6
+ export const embeddings: Record<string, new () => Embedding> = {
7
+ language: Language
8
+ }
9
+
10
+ export { Header }
11
+ export type { Embedding }
@@ -0,0 +1,3 @@
1
+ import { Vary } from './Vary'
2
+
3
+ export const vary = new Vary()
package/source/io.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, OutgoingMessage } from './HTTP'
2
+
3
+ export type Input = IncomingMessage
4
+ export type Output = OutgoingMessage | null
@@ -0,0 +1,7 @@
1
+ export interface Annotation {
2
+ host?: string;
3
+ class?: string;
4
+ annotations?: Record<string, string>;
5
+ debug: boolean;
6
+ '/'?: object;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Annotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Annotation.js","sourceRoot":"","sources":["../source/Annotation.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type * as RTD from './RTD/syntax';
2
+ export interface Branch {
3
+ namespace: string;
4
+ component: string;
5
+ isolated: boolean;
6
+ node: RTD.Node;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Branch.js","sourceRoot":"","sources":["../source/Branch.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { Connector } from '@toa.io/core';
2
+ import { type Bootloader } from './Factory';
3
+ export declare class Composition extends Connector {
4
+ private readonly boot;
5
+ constructor(boot: Bootloader);
6
+ protected open(): Promise<void>;
7
+ protected dispose(): void;
8
+ }
9
+ export declare function components(): Components;
10
+ interface Components {
11
+ labels: string[];
12
+ paths: string[];
13
+ }
14
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.components = exports.Composition = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const core_1 = require("@toa.io/core");
7
+ class Composition extends core_1.Connector {
8
+ boot;
9
+ constructor(boot) {
10
+ super();
11
+ this.boot = boot;
12
+ }
13
+ async open() {
14
+ const paths = find();
15
+ const composition = await this.boot.composition(paths);
16
+ await composition.connect();
17
+ this.depends(composition);
18
+ console.info('Composition complete.');
19
+ }
20
+ dispose() {
21
+ console.info('Composition shutdown complete.');
22
+ }
23
+ }
24
+ exports.Composition = Composition;
25
+ function find() {
26
+ return entries().map((entry) => (0, node_path_1.resolve)(ROOT, entry.name));
27
+ }
28
+ function entries() {
29
+ const entries = (0, node_fs_1.readdirSync)(ROOT, { withFileTypes: true });
30
+ return entries.filter((entry) => entry.isDirectory());
31
+ }
32
+ function components() {
33
+ const labels = [];
34
+ const paths = [];
35
+ for (const entry of entries()) {
36
+ labels.push(entry.name.replace('.', '-'));
37
+ paths.push((0, node_path_1.resolve)(ROOT, entry.name));
38
+ }
39
+ return { labels, paths };
40
+ }
41
+ exports.components = components;
42
+ const ROOT = (0, node_path_1.resolve)(__dirname, '../components/');
43
+ //# sourceMappingURL=Composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composition.js","sourceRoot":"","sources":["../source/Composition.ts"],"names":[],"mappings":";;;AAAA,qCAAkD;AAClD,yCAAmC;AACnC,uCAAwC;AAGxC,MAAa,WAAY,SAAQ,gBAAS;IACvB,IAAI,CAAY;IAEjC,YAAoB,IAAgB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC3B,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;QACpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAEtD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAEzB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACvC,CAAC;IAEkB,OAAO;QACxB,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAChD,CAAC;CACF;AAtBD,kCAsBC;AAED,SAAS,IAAI;IACX,OAAO,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,mBAAO,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,SAAS,OAAO;IACd,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QACzC,KAAK,CAAC,IAAI,CAAC,IAAA,mBAAO,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC;AAVD,gCAUC;AAOD,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { type Endpoint } from './Endpoint';
2
+ import { type Directives } from './Directive';
3
+ import { type Branch } from './Branch';
4
+ import type * as RTD from './RTD';
5
+ export type Context = RTD.Context<Endpoint, Directives, Branch>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../source/Context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import type { IncomingMessage, OutgoingMessage } from './HTTP';
2
+ import type { Remotes } from './Remotes';
3
+ import type { Output } from './io';
4
+ import type * as RTD from './RTD';
5
+ export declare class Directives implements RTD.Directives<Directives> {
6
+ private readonly sets;
7
+ constructor(sets: DirectiveSet[]);
8
+ preflight(request: IncomingMessage, parameters: RTD.Parameter[]): Promise<Output>;
9
+ settle(request: IncomingMessage, response: OutgoingMessage): Promise<void>;
10
+ merge(directives: Directives): void;
11
+ }
12
+ export declare class DirectivesFactory implements RTD.DirectivesFactory<Directives> {
13
+ private readonly remtoes;
14
+ private readonly families;
15
+ private readonly mandatory;
16
+ constructor(families: Family[], remotes: Remotes);
17
+ create(declarations: RTD.syntax.Directive[]): Directives;
18
+ }
19
+ export declare const shortcuts: RTD.syntax.Shortcuts;
20
+ export interface Family<TDirective = any, TExtension = any> {
21
+ readonly name: string;
22
+ readonly mandatory: boolean;
23
+ create: (name: string, value: any, remotes: Remotes) => TDirective;
24
+ preflight?: (directives: TDirective[], request: IncomingMessage & TExtension, parameters: RTD.Parameter[]) => Output | Promise<Output>;
25
+ settle?: (directives: TDirective[], request: IncomingMessage & TExtension, response: OutgoingMessage) => void | Promise<void>;
26
+ }
27
+ interface DirectiveSet {
28
+ family: Family;
29
+ directives: any[];
30
+ }
31
+ export {};
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shortcuts = exports.DirectivesFactory = exports.Directives = void 0;
4
+ class Directives {
5
+ sets;
6
+ constructor(sets) {
7
+ this.sets = sets;
8
+ }
9
+ async preflight(request, parameters) {
10
+ for (const set of this.sets) {
11
+ if (set.family.preflight === undefined)
12
+ continue;
13
+ const output = await set.family.preflight(set.directives, request, parameters);
14
+ if (output !== null) {
15
+ await this.settle(request, output);
16
+ return output;
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ async settle(request, response) {
22
+ for (const set of this.sets)
23
+ if (set.family.settle !== undefined)
24
+ await set.family.settle(set.directives, request, response);
25
+ }
26
+ merge(directives) {
27
+ this.sets.push(...directives.sets);
28
+ }
29
+ }
30
+ exports.Directives = Directives;
31
+ class DirectivesFactory {
32
+ remtoes;
33
+ families = {};
34
+ mandatory = [];
35
+ constructor(families, remotes) {
36
+ for (const family of families) {
37
+ this.families[family.name] = family;
38
+ if (family.mandatory)
39
+ this.mandatory.push(family.name);
40
+ }
41
+ this.remtoes = remotes;
42
+ }
43
+ create(declarations) {
44
+ const groups = {};
45
+ const mandatory = new Set(this.mandatory);
46
+ declarations.sort((a, b) => (mandatory.has(b.family) ? 1 : 0) - (mandatory.has(a.family) ? 1 : 0));
47
+ for (const declaration of declarations) {
48
+ const family = this.families[declaration.family];
49
+ if (family === undefined)
50
+ throw new Error(`Directive family '${declaration.family}' is not found.`);
51
+ const directive = family.create(declaration.name, declaration.value, this.remtoes);
52
+ groups[family.name] ??= [];
53
+ groups[family.name].push(directive);
54
+ mandatory.delete(family.name);
55
+ }
56
+ const sets = [];
57
+ for (const family of mandatory)
58
+ sets.push({
59
+ family: this.families[family],
60
+ directives: []
61
+ });
62
+ for (const [family, directives] of Object.entries(groups))
63
+ sets.push({
64
+ family: this.families[family],
65
+ directives
66
+ });
67
+ return new Directives(sets);
68
+ }
69
+ }
70
+ exports.DirectivesFactory = DirectivesFactory;
71
+ exports.shortcuts = new Map([
72
+ ['anonymous', 'auth:anonymous'],
73
+ ['id', 'auth:id'],
74
+ ['role', 'auth:role'],
75
+ ['rule', 'auth:rule'],
76
+ ['incept', 'auth:incept']
77
+ ]);
78
+ //# sourceMappingURL=Directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Directive.js","sourceRoot":"","sources":["../source/Directive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type Component, type Reply } from '@toa.io/core';
2
+ import { type Remotes } from './Remotes';
3
+ import { Mapping } from './Mapping';
4
+ import { type Context } from './Context';
5
+ import type * as RTD from './RTD';
6
+ import type * as http from './HTTP';
7
+ export declare class Endpoint implements RTD.Endpoint<Endpoint> {
8
+ private readonly endpoint;
9
+ private readonly mapping;
10
+ private readonly discovery;
11
+ private remote;
12
+ constructor(endpoint: string, mapping: Mapping, discovery: Promise<Component>);
13
+ call(body: any, query: http.Query, parameters: RTD.Parameter[]): Promise<Reply>;
14
+ close(): Promise<void>;
15
+ }
16
+ export declare class EndpointsFactory implements RTD.EndpointsFactory<Endpoint> {
17
+ private readonly remotes;
18
+ constructor(remotes: Remotes);
19
+ create(method: RTD.syntax.Method, context: Context): Endpoint;
20
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndpointsFactory = exports.Endpoint = void 0;
4
+ const Mapping_1 = require("./Mapping");
5
+ class Endpoint {
6
+ endpoint;
7
+ mapping;
8
+ discovery;
9
+ remote = null;
10
+ constructor(endpoint, mapping, discovery) {
11
+ this.endpoint = endpoint;
12
+ this.mapping = mapping;
13
+ this.discovery = discovery;
14
+ }
15
+ async call(body, query, parameters) {
16
+ const request = this.mapping.fit(body, query, parameters);
17
+ this.remote ??= await this.discovery;
18
+ return await this.remote.invoke(this.endpoint, request);
19
+ }
20
+ async close() {
21
+ this.remote ??= await this.discovery;
22
+ await this.remote.disconnect(INTERRUPT);
23
+ }
24
+ }
25
+ exports.Endpoint = Endpoint;
26
+ class EndpointsFactory {
27
+ remotes;
28
+ constructor(remotes) {
29
+ this.remotes = remotes;
30
+ }
31
+ create(method, context) {
32
+ if (method.mapping === undefined)
33
+ throw new Error('Cannot create Endpoint without mapping.');
34
+ const mapping = Mapping_1.Mapping.create(method.mapping.query);
35
+ const namespace = method.mapping.namespace ?? context.extension?.namespace;
36
+ const component = method.mapping.component ?? context.extension?.component;
37
+ if (namespace === undefined || component === undefined)
38
+ throw new Error('Annotation endpoints must be fully qualified.');
39
+ const discovery = this.remotes.discover(namespace, component);
40
+ return new Endpoint(method.mapping.endpoint, mapping, discovery);
41
+ }
42
+ }
43
+ exports.EndpointsFactory = EndpointsFactory;
44
+ const INTERRUPT = true;
45
+ //# sourceMappingURL=Endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoint.js","sourceRoot":"","sources":["../source/Endpoint.ts"],"names":[],"mappings":";;;AAEA,uCAAmC;AAKnC,MAAa,QAAQ;IACF,QAAQ,CAAQ;IAChB,OAAO,CAAS;IAChB,SAAS,CAAoB;IACtC,MAAM,GAAqB,IAAI,CAAA;IAEvC,YAAoB,QAAgB,EAAE,OAAgB,EAAE,SAA6B;QACnF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,IAAS,EAAE,KAAiB,EAAE,UAA2B;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAEzD,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAA;QAEpC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzD,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAA;QAEpC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;CACF;AAzBD,4BAyBC;AAED,MAAa,gBAAgB;IACV,OAAO,CAAS;IAEjC,YAAoB,OAAgB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,MAAM,CAAE,MAAyB,EAAE,OAAgB;QACxD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAE5D,MAAM,OAAO,GAAG,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,SAAS,CAAA;QAC1E,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,SAAS,CAAA;QAE1E,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;YACpD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAElE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE7D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;IAClE,CAAC;CACF;AAtBD,4CAsBC;AAED,MAAM,SAAS,GAAG,IAAI,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { syntax } from './RTD';
2
+ import type { Connector, Locator, extensions } from '@toa.io/core';
3
+ export declare class Factory implements extensions.Factory {
4
+ private readonly boot;
5
+ constructor(boot: Bootloader);
6
+ tenant(locator: Locator, node: syntax.Node): Connector;
7
+ service(): Connector | null;
8
+ }
9
+ export type Bootloader = typeof import('@toa.io/boot');
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Factory = void 0;
27
+ const Tenant_1 = require("./Tenant");
28
+ const Gateway_1 = require("./Gateway");
29
+ const Remotes_1 = require("./Remotes");
30
+ const RTD_1 = require("./RTD");
31
+ const HTTP_1 = require("./HTTP");
32
+ const Endpoint_1 = require("./Endpoint");
33
+ const directives_1 = require("./directives");
34
+ const Directive_1 = require("./Directive");
35
+ const Composition_1 = require("./Composition");
36
+ const root = __importStar(require("./root"));
37
+ const Interception_1 = require("./Interception");
38
+ class Factory {
39
+ boot;
40
+ constructor(boot) {
41
+ this.boot = boot;
42
+ }
43
+ tenant(locator, node) {
44
+ const broadcast = this.boot.bindings.broadcast(CHANNEL, locator.id);
45
+ return new Tenant_1.Tenant(broadcast, locator, node);
46
+ }
47
+ service() {
48
+ const debug = process.env.TOA_EXPOSITION_DEBUG === '1';
49
+ const broadcast = this.boot.bindings.broadcast(CHANNEL);
50
+ const server = HTTP_1.Server.create({ methods: RTD_1.syntax.verbs, debug });
51
+ const remotes = new Remotes_1.Remotes(this.boot);
52
+ const node = root.resolve();
53
+ const methods = new Endpoint_1.EndpointsFactory(remotes);
54
+ const directives = new Directive_1.DirectivesFactory(directives_1.families, remotes);
55
+ const interception = new Interception_1.Interception(directives_1.interceptors);
56
+ const tree = new RTD_1.Tree(node, methods, directives);
57
+ const composition = new Composition_1.Composition(this.boot);
58
+ const gateway = new Gateway_1.Gateway(broadcast, server, tree, interception);
59
+ gateway.depends(remotes);
60
+ gateway.depends(composition);
61
+ server.depends(gateway);
62
+ return server;
63
+ }
64
+ }
65
+ exports.Factory = Factory;
66
+ const CHANNEL = 'exposition';
67
+ //# sourceMappingURL=Factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../source/Factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiC;AACjC,uCAAmC;AACnC,uCAAmC;AACnC,+BAAoC;AACpC,iCAA+B;AAC/B,yCAA4D;AAC5D,6CAAqD;AACrD,2CAAgE;AAChE,+CAA2C;AAC3C,6CAA8B;AAC9B,iDAA6C;AAG7C,MAAa,OAAO;IACD,IAAI,CAAY;IAEjC,YAAoB,IAAgB;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,MAAM,CAAE,OAAgB,EAAE,IAAiB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QAEnE,OAAO,IAAI,eAAM,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAEM,OAAO;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,CAAA;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,aAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9D,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,2BAAgB,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,IAAI,6BAAiB,CAAC,qBAAQ,EAAE,OAAO,CAAC,CAAA;QAC3D,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,yBAAY,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,IAAI,UAAI,CAAuB,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;QAEtE,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;QAElE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAEvB,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAjCD,0BAiCC;AAED,MAAM,OAAO,GAAG,YAAY,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { type bindings, Connector } from '@toa.io/core';
2
+ import * as http from './HTTP';
3
+ import type { Interceptor } from './Interception';
4
+ import type { Tree } from './RTD';
5
+ import type { Label } from './discovery';
6
+ import type { Endpoint } from './Endpoint';
7
+ import type { Directives } from './Directive';
8
+ export declare class Gateway extends Connector {
9
+ private readonly broadcast;
10
+ private readonly tree;
11
+ private readonly interceptor;
12
+ private readonly server;
13
+ constructor(broadcast: Broadcast, server: http.Server, tree: Tree<Endpoint, Directives>, interception: Interceptor);
14
+ protected open(): Promise<void>;
15
+ protected dispose(): void;
16
+ private process;
17
+ private call;
18
+ private discover;
19
+ private merge;
20
+ }
21
+ type Broadcast = bindings.Broadcast<Label>;
22
+ export {};
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Gateway = void 0;
27
+ const core_1 = require("@toa.io/core");
28
+ const http = __importStar(require("./HTTP"));
29
+ const exceptions_1 = require("./exceptions");
30
+ class Gateway extends core_1.Connector {
31
+ broadcast;
32
+ tree;
33
+ interceptor;
34
+ server;
35
+ // eslint-disable-next-line max-params, max-len
36
+ constructor(broadcast, server, tree, interception) {
37
+ super();
38
+ this.broadcast = broadcast;
39
+ this.tree = tree;
40
+ this.interceptor = interception;
41
+ this.server = server;
42
+ this.depends(broadcast);
43
+ // this.depends(server)
44
+ server.attach(this.process.bind(this));
45
+ }
46
+ async open() {
47
+ await this.discover();
48
+ console.info('Gateway has started and is awaiting resource branches.');
49
+ }
50
+ dispose() {
51
+ console.info('Gateway is closed.');
52
+ }
53
+ async process(request) {
54
+ const interception = await this.interceptor.intercept(request);
55
+ if (interception !== null)
56
+ return interception;
57
+ const match = this.tree.match(request.path);
58
+ if (match === null)
59
+ throw new http.NotFound();
60
+ const { node, parameters } = match;
61
+ if (!(request.method in node.methods))
62
+ throw new http.MethodNotAllowed();
63
+ const method = node.methods[request.method];
64
+ const interruption = await method.directives.preflight(request, parameters);
65
+ const response = interruption ?? await this.call(method, request, parameters);
66
+ await method.directives.settle(request, response);
67
+ return response;
68
+ }
69
+ async call(method, request, parameters) {
70
+ if (request.path[request.path.length - 1] !== '/')
71
+ throw new http.NotFound('Trailing slash is required.');
72
+ if (request.encoder === null)
73
+ throw new http.NotAcceptable();
74
+ if (method.endpoint === null)
75
+ throw new http.MethodNotAllowed();
76
+ const body = await request.parse();
77
+ if ('embed' in request && typeof body === 'object' && body !== null)
78
+ Object.assign(body, request.embed);
79
+ const reply = await method.endpoint
80
+ .call(body, request.query, parameters)
81
+ .catch(exceptions_1.rethrow);
82
+ if (reply instanceof Error)
83
+ throw new http.Conflict(reply);
84
+ return { body: reply };
85
+ }
86
+ async discover() {
87
+ await this.broadcast.receive('expose', this.merge.bind(this));
88
+ await this.broadcast.transmit('ping', null);
89
+ }
90
+ merge(branch) {
91
+ try {
92
+ this.tree.merge(branch.node, branch);
93
+ console.info('Resource branch of ' +
94
+ `'${branch.namespace}.${branch.component}' has been merged.`);
95
+ }
96
+ catch (exception) {
97
+ console.error(exception);
98
+ }
99
+ }
100
+ }
101
+ exports.Gateway = Gateway;
102
+ //# sourceMappingURL=Gateway.js.map