@toa.io/extensions.exposition 1.0.0-alpha.285 → 1.0.0-alpha.287

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 (611) hide show
  1. package/CHANGELOG.md +1 -545
  2. package/components/exposition.octets/operations/delete.js +1 -1
  3. package/components/exposition.octets/operations/get.js +5 -2
  4. package/components/exposition.octets/operations/head.js +1 -1
  5. package/components/exposition.octets/operations/put.js +29 -37
  6. package/components/exposition.octets/types/toa.d.ts +1 -1
  7. package/components/identity.bans/manifest.toa.yaml +12 -13
  8. package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
  9. package/components/identity.bans/operations/transit.js +1 -1
  10. package/components/identity.bans/source/transit.ts +1 -1
  11. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  12. package/components/identity.bans/types/toa.d.ts +5 -5
  13. package/components/identity.basic/events/principal.js +3 -1
  14. package/components/identity.basic/manifest.toa.yaml +17 -23
  15. package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
  16. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  17. package/components/identity.basic/operations/add.js +1 -1
  18. package/components/identity.basic/operations/authenticate.js +2 -2
  19. package/components/identity.basic/operations/check.js +4 -2
  20. package/components/identity.basic/operations/delete.js +1 -1
  21. package/components/identity.basic/operations/incept.js +1 -1
  22. package/components/identity.basic/operations/info.js +1 -1
  23. package/components/identity.basic/operations/lib/credentials.js +1 -1
  24. package/components/identity.basic/operations/transit.js +7 -8
  25. package/components/identity.basic/source/add.ts +5 -2
  26. package/components/identity.basic/source/authenticate.ts +11 -13
  27. package/components/identity.basic/source/check.ts +9 -6
  28. package/components/identity.basic/source/delete.ts +4 -1
  29. package/components/identity.basic/source/incept.ts +13 -10
  30. package/components/identity.basic/source/info.ts +4 -1
  31. package/components/identity.basic/source/lib/credentials.ts +2 -3
  32. package/components/identity.basic/source/transit.ts +27 -21
  33. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  34. package/components/identity.basic/types/index.d.ts +7 -3
  35. package/components/identity.basic/types/toa.d.ts +5 -5
  36. package/components/identity.clients/manifest.toa.yaml +36 -40
  37. package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
  38. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  39. package/components/identity.clients/operations/describe.js +1 -1
  40. package/components/identity.clients/operations/lib/canonical.js +1 -1
  41. package/components/identity.clients/operations/lib/cimd.js +3 -2
  42. package/components/identity.clients/operations/lib/redirect.js +7 -4
  43. package/components/identity.clients/operations/register.js +2 -2
  44. package/components/identity.clients/source/describe.ts +6 -8
  45. package/components/identity.clients/source/lib/Context.ts +6 -3
  46. package/components/identity.clients/source/lib/Entity.ts +1 -1
  47. package/components/identity.clients/source/lib/canonical.ts +1 -1
  48. package/components/identity.clients/source/lib/cimd.test.ts +8 -6
  49. package/components/identity.clients/source/lib/cimd.ts +24 -19
  50. package/components/identity.clients/source/lib/redirect.test.ts +8 -2
  51. package/components/identity.clients/source/lib/redirect.ts +12 -8
  52. package/components/identity.clients/source/register.ts +18 -18
  53. package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
  54. package/components/identity.clients/types/toa.d.ts +5 -5
  55. package/components/identity.credentials/manifest.toa.yaml +4 -4
  56. package/components/identity.credentials/operations/list.js +8 -4
  57. package/components/identity.credentials/source/list.test.ts +39 -20
  58. package/components/identity.credentials/source/list.ts +12 -8
  59. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  60. package/components/identity.credentials/types/toa.d.ts +2 -2
  61. package/components/identity.federation/manifest.toa.yaml +23 -32
  62. package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
  63. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  64. package/components/identity.federation/operations/authenticate.js +4 -2
  65. package/components/identity.federation/operations/create.js +2 -2
  66. package/components/identity.federation/operations/decode.js +1 -1
  67. package/components/identity.federation/operations/delete.js +1 -1
  68. package/components/identity.federation/operations/incept.js +1 -1
  69. package/components/identity.federation/operations/lib/decode.js +1 -1
  70. package/components/identity.federation/operations/lib/discovery.js +2 -2
  71. package/components/identity.federation/operations/lib/exchange.js +8 -4
  72. package/components/identity.federation/operations/lib/principal.js +1 -1
  73. package/components/identity.federation/operations/lib/resolve.js +1 -1
  74. package/components/identity.federation/operations/list.js +2 -2
  75. package/components/identity.federation/source/authenticate.ts +19 -17
  76. package/components/identity.federation/source/create.ts +6 -7
  77. package/components/identity.federation/source/decode.ts +4 -1
  78. package/components/identity.federation/source/delete.ts +4 -1
  79. package/components/identity.federation/source/incept.ts +2 -3
  80. package/components/identity.federation/source/lib/decode.ts +4 -7
  81. package/components/identity.federation/source/lib/discovery.test.ts +15 -5
  82. package/components/identity.federation/source/lib/discovery.ts +10 -9
  83. package/components/identity.federation/source/lib/exchange.ts +18 -15
  84. package/components/identity.federation/source/lib/jose.d.ts +1 -1
  85. package/components/identity.federation/source/lib/principal.ts +5 -3
  86. package/components/identity.federation/source/lib/resolve.ts +5 -1
  87. package/components/identity.federation/source/list.test.ts +26 -10
  88. package/components/identity.federation/source/list.ts +5 -2
  89. package/components/identity.federation/source/types/context.ts +5 -2
  90. package/components/identity.federation/source/types/entity.ts +2 -2
  91. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  92. package/components/identity.federation/types/toa.d.ts +5 -5
  93. package/components/identity.grants/manifest.toa.yaml +27 -31
  94. package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
  95. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  96. package/components/identity.grants/operations/authorize.js +1 -1
  97. package/components/identity.grants/operations/exchange.js +5 -2
  98. package/components/identity.grants/operations/lib/code.js +1 -1
  99. package/components/identity.grants/operations/lib/identify.js +1 -1
  100. package/components/identity.grants/operations/list.js +1 -1
  101. package/components/identity.grants/operations/revoke.js +3 -2
  102. package/components/identity.grants/source/authorize.ts +27 -19
  103. package/components/identity.grants/source/exchange.ts +15 -11
  104. package/components/identity.grants/source/lib/code.ts +20 -8
  105. package/components/identity.grants/source/lib/identify.ts +1 -1
  106. package/components/identity.grants/source/list.ts +2 -2
  107. package/components/identity.grants/source/revoke.ts +9 -7
  108. package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
  109. package/components/identity.grants/types/index.d.ts +3 -3
  110. package/components/identity.grants/types/toa.d.ts +5 -5
  111. package/components/identity.keys/manifest.toa.yaml +18 -23
  112. package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
  113. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  114. package/components/identity.keys/operations/create.js +1 -1
  115. package/components/identity.keys/operations/disable.js +1 -1
  116. package/components/identity.keys/operations/revoke.js +1 -1
  117. package/components/identity.keys/source/create.ts +2 -3
  118. package/components/identity.keys/source/disable.ts +1 -1
  119. package/components/identity.keys/source/revoke.ts +2 -2
  120. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  121. package/components/identity.keys/types/toa.d.ts +5 -5
  122. package/components/identity.otp/manifest.toa.yaml +16 -24
  123. package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
  124. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  125. package/components/identity.otp/operations/authenticate.js +1 -1
  126. package/components/identity.otp/operations/issue.js +1 -1
  127. package/components/identity.otp/source/authenticate.ts +4 -7
  128. package/components/identity.otp/source/issue.ts +1 -1
  129. package/components/identity.otp/source/lib/Context.ts +1 -1
  130. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  131. package/components/identity.otp/types/toa.d.ts +5 -5
  132. package/components/identity.passkeys/manifest.toa.yaml +45 -53
  133. package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
  134. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  135. package/components/identity.passkeys/operations/authenticate.js +1 -1
  136. package/components/identity.passkeys/operations/challenge.js +6 -3
  137. package/components/identity.passkeys/operations/create.js +1 -1
  138. package/components/identity.passkeys/operations/delete.js +1 -1
  139. package/components/identity.passkeys/operations/list.js +1 -1
  140. package/components/identity.passkeys/operations/use.js +1 -1
  141. package/components/identity.passkeys/source/authenticate.ts +3 -4
  142. package/components/identity.passkeys/source/challenge.ts +29 -25
  143. package/components/identity.passkeys/source/create.ts +8 -6
  144. package/components/identity.passkeys/source/delete.ts +4 -1
  145. package/components/identity.passkeys/source/list.ts +4 -1
  146. package/components/identity.passkeys/source/types/Context.ts +1 -1
  147. package/components/identity.passkeys/source/use.ts +12 -10
  148. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  149. package/components/identity.passkeys/types/toa.d.ts +5 -5
  150. package/components/identity.roles/manifest.toa.yaml +12 -16
  151. package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
  152. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  153. package/components/identity.roles/operations/grant.js +1 -1
  154. package/components/identity.roles/operations/list.js +1 -1
  155. package/components/identity.roles/operations/principal.js +2 -2
  156. package/components/identity.roles/source/grant.ts +7 -6
  157. package/components/identity.roles/source/list.ts +1 -1
  158. package/components/identity.roles/source/principal.ts +5 -7
  159. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  160. package/components/identity.roles/types/toa.d.ts +5 -5
  161. package/components/identity.tokens/manifest.toa.yaml +17 -15
  162. package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
  163. package/components/identity.tokens/operations/authenticate.js +2 -2
  164. package/components/identity.tokens/operations/decrypt.js +11 -5
  165. package/components/identity.tokens/operations/encrypt.js +2 -2
  166. package/components/identity.tokens/operations/issue.js +2 -4
  167. package/components/identity.tokens/operations/lib/form.js +1 -1
  168. package/components/identity.tokens/operations/lib/key.js +1 -1
  169. package/components/identity.tokens/operations/revoke.js +1 -1
  170. package/components/identity.tokens/source/authenticate.test.ts +22 -16
  171. package/components/identity.tokens/source/authenticate.ts +7 -10
  172. package/components/identity.tokens/source/decrypt.test.ts +62 -29
  173. package/components/identity.tokens/source/decrypt.ts +30 -27
  174. package/components/identity.tokens/source/encrypt.test.ts +21 -16
  175. package/components/identity.tokens/source/encrypt.ts +8 -11
  176. package/components/identity.tokens/source/issue.test.ts +4 -2
  177. package/components/identity.tokens/source/issue.ts +6 -8
  178. package/components/identity.tokens/source/lib/form.ts +5 -9
  179. package/components/identity.tokens/source/lib/jose.d.ts +1 -1
  180. package/components/identity.tokens/source/lib/key.ts +1 -1
  181. package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
  182. package/components/identity.tokens/source/revoke.ts +1 -1
  183. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  184. package/components/identity.tokens/types/index.d.ts +13 -4
  185. package/components/identity.tokens/types/toa.d.ts +5 -5
  186. package/context.toa.yaml +2 -2
  187. package/cucumber.mjs +3 -0
  188. package/documentation/access.md +4 -3
  189. package/documentation/cache.md +17 -3
  190. package/documentation/components.md +2 -2
  191. package/documentation/credentials.md +2 -2
  192. package/documentation/identity.md +7 -9
  193. package/documentation/map.md +2 -2
  194. package/documentation/mcp.md +16 -16
  195. package/documentation/notes/peers.md +1 -1
  196. package/documentation/notes/throttling.md +1 -1
  197. package/documentation/octets.md +4 -4
  198. package/documentation/protocol.md +3 -3
  199. package/documentation/query.md +14 -8
  200. package/documentation/rpc.md +31 -21
  201. package/documentation/tracing.md +3 -3
  202. package/documentation/tree.md +1 -1
  203. package/features/auth.assert.feature +2 -2
  204. package/features/auth.bearer.feature +1 -1
  205. package/features/auth.claims.feature +5 -5
  206. package/features/auth.incept.feature +2 -2
  207. package/features/authorities.federation.feature +1 -1
  208. package/features/configuration.feature +3 -4
  209. package/features/credentials.feature +9 -9
  210. package/features/dev.feature +1 -0
  211. package/features/dynamic.feature +1 -0
  212. package/features/errors.feature +21 -0
  213. package/features/etag.feature +0 -86
  214. package/features/identity.bans.feature +3 -3
  215. package/features/identity.basic.feature +9 -9
  216. package/features/identity.federation.feature +11 -11
  217. package/features/identity.tokens.custom.feature +5 -5
  218. package/features/identity.tokens.feature +2 -2
  219. package/features/interruptions.feature +1 -0
  220. package/features/introspection.map.feature +4 -4
  221. package/features/io.throttle.feature +1 -0
  222. package/features/map.feature +2 -2
  223. package/features/octets.cloudinary.feature +1 -1
  224. package/features/octets.download.feature +1 -0
  225. package/features/require.feature +1 -2
  226. package/features/steps/Captures.ts +1 -1
  227. package/features/steps/Cloudinary.ts +1 -2
  228. package/features/steps/Common.ts +4 -5
  229. package/features/steps/Components.ts +17 -12
  230. package/features/steps/Database.ts +42 -23
  231. package/features/steps/Gateway.ts +55 -72
  232. package/features/steps/HTTP.ts +12 -15
  233. package/features/steps/IDP.ts +118 -94
  234. package/features/steps/Identity.ts +3 -3
  235. package/features/steps/OTP.ts +3 -3
  236. package/features/steps/Parameters.ts +20 -10
  237. package/features/steps/Probe.ts +9 -7
  238. package/features/steps/Realtime.ts +40 -22
  239. package/features/steps/Workspace.ts +10 -7
  240. package/features/steps/components/audit/operations/record.js +1 -1
  241. package/features/steps/components/echo/operations/affect.js +1 -1
  242. package/features/steps/components/echo/operations/compute.js +1 -1
  243. package/features/steps/components/echo/operations/echo.js +1 -1
  244. package/features/steps/components/echo/operations/error.js +1 -1
  245. package/features/steps/components/echo/operations/identity.js +1 -1
  246. package/features/steps/components/echo/operations/parameters.js +1 -1
  247. package/features/steps/components/echo/operations/ping.js +1 -1
  248. package/features/steps/components/echo/operations/unwrap.js +1 -1
  249. package/features/steps/components/greeter/operations/greet.js +1 -1
  250. package/features/steps/components/notify/operations/send.js +1 -1
  251. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  252. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  253. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  254. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  255. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  256. package/features/steps/components/octets.tester/operations/err.js +1 -1
  257. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  258. package/features/steps/components/octets.tester/operations/id.js +1 -1
  259. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  260. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  261. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  262. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  263. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  264. package/features/steps/components/orders/operations/create.js +4 -2
  265. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  266. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  267. package/features/steps/components/pricing/operations/quote.js +1 -1
  268. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  269. package/features/steps/components/sequences/operations/numbers.js +1 -1
  270. package/features/steps/components/sequences/operations/tokens.js +3 -3
  271. package/features/steps/components/users/manifest.toa.yaml +3 -5
  272. package/features/steps/components/users/operations/create.js +1 -1
  273. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  274. package/features/steps/map.ts +2 -2
  275. package/features/timestamps.feature +1 -1
  276. package/package.json +7 -7
  277. package/readme.md +11 -11
  278. package/schemas/annotation.cos.yaml +1 -3
  279. package/schemas/method.cos.yaml +2 -0
  280. package/source/Branch.test.ts +2 -2
  281. package/source/Branch.ts +3 -5
  282. package/source/Composition.ts +5 -5
  283. package/source/Directive.test.ts +38 -20
  284. package/source/Directive.ts +61 -47
  285. package/source/Endpoint.test.ts +1 -1
  286. package/source/Endpoint.ts +27 -92
  287. package/source/Factory.ts +26 -12
  288. package/source/Gateway.ts +87 -76
  289. package/source/HTTP/Context.ts +23 -30
  290. package/source/HTTP/Probe.ts +7 -9
  291. package/source/HTTP/Server.ts +88 -69
  292. package/source/HTTP/Timing.ts +6 -21
  293. package/source/HTTP/address.test.ts +8 -2
  294. package/source/HTTP/address.ts +2 -3
  295. package/source/HTTP/exceptions.ts +20 -18
  296. package/source/HTTP/formats/form.ts +1 -1
  297. package/source/HTTP/formats/json.ts +2 -2
  298. package/source/HTTP/formats/msgpack.ts +3 -4
  299. package/source/HTTP/formats/text.ts +2 -2
  300. package/source/HTTP/formats/yaml.test.ts +4 -1
  301. package/source/HTTP/formats/yaml.ts +14 -11
  302. package/source/HTTP/messages.test.ts +38 -28
  303. package/source/HTTP/messages.ts +44 -98
  304. package/source/Interception.ts +3 -4
  305. package/source/Introspection.ts +26 -14
  306. package/source/MCP/Server.ts +114 -54
  307. package/source/MCP/discover.ts +6 -7
  308. package/source/MCP/errors.ts +7 -8
  309. package/source/MCP/schema.test.ts +9 -3
  310. package/source/MCP/schema.ts +12 -16
  311. package/source/MCP/tools.ts +33 -28
  312. package/source/Mapping.ts +25 -27
  313. package/source/Query.ts +58 -44
  314. package/source/RPC/Context.ts +8 -11
  315. package/source/RPC/Dispatcher.ts +46 -26
  316. package/source/RPC/errors.test.ts +41 -16
  317. package/source/RPC/errors.ts +9 -10
  318. package/source/RPC/names.test.ts +35 -16
  319. package/source/RPC/names.ts +22 -29
  320. package/source/RTD/Directives.ts +21 -10
  321. package/source/RTD/Endpoint.ts +4 -1
  322. package/source/RTD/Method.ts +8 -6
  323. package/source/RTD/Node.ts +32 -34
  324. package/source/RTD/Route.ts +18 -21
  325. package/source/RTD/Tree.ts +18 -18
  326. package/source/RTD/factory.ts +13 -16
  327. package/source/RTD/segment.ts +12 -10
  328. package/source/RTD/syntax/parse.test.ts +12 -6
  329. package/source/RTD/syntax/parse.ts +30 -26
  330. package/source/RTD/syntax/types.ts +17 -1
  331. package/source/RTD/walk.test.ts +59 -22
  332. package/source/Remotes.test.ts +25 -4
  333. package/source/Remotes.ts +9 -4
  334. package/source/Tenant.ts +12 -12
  335. package/source/deployment.ts +20 -20
  336. package/source/directives/auth/Anonymous.test.ts +8 -2
  337. package/source/directives/auth/Anonymous.ts +5 -8
  338. package/source/directives/auth/Anyone.ts +3 -3
  339. package/source/directives/auth/Assert.ts +10 -10
  340. package/source/directives/auth/Authorization.ts +83 -69
  341. package/source/directives/auth/Delegate.test.ts +2 -2
  342. package/source/directives/auth/Delegate.ts +8 -10
  343. package/source/directives/auth/Echo.ts +5 -8
  344. package/source/directives/auth/Federation.ts +30 -21
  345. package/source/directives/auth/Id.ts +7 -4
  346. package/source/directives/auth/Incept.ts +32 -26
  347. package/source/directives/auth/Input.ts +36 -20
  348. package/source/directives/auth/Role.test.ts +49 -23
  349. package/source/directives/auth/Role.ts +29 -22
  350. package/source/directives/auth/Rule.ts +13 -8
  351. package/source/directives/auth/Scheme.ts +7 -7
  352. package/source/directives/auth/create.ts +1 -1
  353. package/source/directives/auth/schemes.ts +1 -1
  354. package/source/directives/auth/split.ts +2 -3
  355. package/source/directives/auth/types.ts +5 -2
  356. package/source/directives/cache/Cache.ts +44 -9
  357. package/source/directives/cache/Control.ts +25 -26
  358. package/source/directives/cache/Exact.ts +1 -1
  359. package/source/directives/cache/etag.ts +38 -0
  360. package/source/directives/cors/CORS.ts +9 -7
  361. package/source/directives/dev/Development.ts +3 -4
  362. package/source/directives/dev/Faulty.ts +11 -6
  363. package/source/directives/dev/Sleep.ts +5 -7
  364. package/source/directives/dev/Stub.ts +2 -2
  365. package/source/directives/dev/Throw.ts +2 -2
  366. package/source/directives/flow/Compose.ts +26 -20
  367. package/source/directives/flow/Fetch.ts +15 -15
  368. package/source/directives/flow/Flow.ts +9 -8
  369. package/source/directives/index.ts +11 -2
  370. package/source/directives/io/IO.ts +29 -20
  371. package/source/directives/io/Input.ts +9 -12
  372. package/source/directives/io/Output.ts +20 -23
  373. package/source/directives/io/Status.test.ts +12 -8
  374. package/source/directives/io/Status.ts +9 -8
  375. package/source/directives/io/Throttle.ts +6 -7
  376. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  377. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  378. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  379. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  380. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  381. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  382. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  383. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  384. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  385. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  386. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  387. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  388. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  389. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  390. package/source/directives/io/schemas.test.ts +12 -6
  391. package/source/directives/map/Authority.ts +2 -2
  392. package/source/directives/map/Buffer.ts +2 -2
  393. package/source/directives/map/Claims.ts +25 -20
  394. package/source/directives/map/Headers.ts +17 -13
  395. package/source/directives/map/Language.ts +8 -5
  396. package/source/directives/map/Languages.ts +9 -3
  397. package/source/directives/map/Map.ts +25 -12
  398. package/source/directives/map/Mapping.ts +9 -6
  399. package/source/directives/map/Properties.ts +1 -1
  400. package/source/directives/map/Segments.ts +22 -15
  401. package/source/directives/mcp/MCP.ts +9 -7
  402. package/source/directives/mcp/Tool.test.ts +21 -9
  403. package/source/directives/mcp/Tool.ts +23 -11
  404. package/source/directives/oauth/Discovery.ts +7 -11
  405. package/source/directives/oauth/documents.ts +11 -14
  406. package/source/directives/octets/Context.ts +6 -3
  407. package/source/directives/octets/Delete.ts +33 -25
  408. package/source/directives/octets/Directive.ts +5 -1
  409. package/source/directives/octets/Get.ts +13 -21
  410. package/source/directives/octets/Octets.ts +20 -15
  411. package/source/directives/octets/Put.ts +62 -27
  412. package/source/directives/octets/Workflow.ts +18 -12
  413. package/source/directives/octets/bytes.ts +1 -1
  414. package/source/directives/octets/schemas.test.ts +8 -14
  415. package/source/directives/octets/workflows/Execution.ts +19 -21
  416. package/source/directives/octets/workflows/Workflow.ts +10 -7
  417. package/source/directives/require/Headers.ts +3 -4
  418. package/source/directives/require/Require.ts +3 -4
  419. package/source/exceptions.ts +19 -12
  420. package/source/index.ts +1 -1
  421. package/source/manifest.test.ts +4 -1
  422. package/source/manifest.ts +19 -13
  423. package/source/octets.d.ts +1 -1
  424. package/source/root.ts +3 -2
  425. package/source/schemas.test.ts +17 -3
  426. package/transpiled/Branch.js.map +1 -1
  427. package/transpiled/Composition.js.map +1 -1
  428. package/transpiled/Directive.js +6 -2
  429. package/transpiled/Directive.js.map +1 -1
  430. package/transpiled/Endpoint.d.ts +0 -2
  431. package/transpiled/Endpoint.js +11 -52
  432. package/transpiled/Endpoint.js.map +1 -1
  433. package/transpiled/Factory.d.ts +2 -1
  434. package/transpiled/Factory.js +1 -0
  435. package/transpiled/Factory.js.map +1 -1
  436. package/transpiled/Gateway.d.ts +2 -1
  437. package/transpiled/Gateway.js +24 -15
  438. package/transpiled/Gateway.js.map +1 -1
  439. package/transpiled/HTTP/Context.d.ts +0 -3
  440. package/transpiled/HTTP/Context.js +7 -9
  441. package/transpiled/HTTP/Context.js.map +1 -1
  442. package/transpiled/HTTP/Probe.js.map +1 -1
  443. package/transpiled/HTTP/Server.js +19 -4
  444. package/transpiled/HTTP/Server.js.map +1 -1
  445. package/transpiled/HTTP/Timing.d.ts +1 -2
  446. package/transpiled/HTTP/Timing.js +2 -10
  447. package/transpiled/HTTP/Timing.js.map +1 -1
  448. package/transpiled/HTTP/address.js.map +1 -1
  449. package/transpiled/HTTP/exceptions.js.map +1 -1
  450. package/transpiled/HTTP/formats/form.js.map +1 -1
  451. package/transpiled/HTTP/formats/json.js.map +1 -1
  452. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  453. package/transpiled/HTTP/formats/text.js.map +1 -1
  454. package/transpiled/HTTP/formats/yaml.js +4 -1
  455. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  456. package/transpiled/HTTP/messages.d.ts +3 -2
  457. package/transpiled/HTTP/messages.js +1 -43
  458. package/transpiled/HTTP/messages.js.map +1 -1
  459. package/transpiled/Interception.js.map +1 -1
  460. package/transpiled/Introspection.js +13 -2
  461. package/transpiled/Introspection.js.map +1 -1
  462. package/transpiled/MCP/Server.js +15 -4
  463. package/transpiled/MCP/Server.js.map +1 -1
  464. package/transpiled/MCP/discover.js.map +1 -1
  465. package/transpiled/MCP/errors.js.map +1 -1
  466. package/transpiled/MCP/schema.js +1 -1
  467. package/transpiled/MCP/schema.js.map +1 -1
  468. package/transpiled/MCP/tools.js +10 -7
  469. package/transpiled/MCP/tools.js.map +1 -1
  470. package/transpiled/Mapping.d.ts +2 -2
  471. package/transpiled/Mapping.js +3 -5
  472. package/transpiled/Mapping.js.map +1 -1
  473. package/transpiled/Query.d.ts +6 -2
  474. package/transpiled/Query.js +23 -8
  475. package/transpiled/Query.js.map +1 -1
  476. package/transpiled/RPC/Context.js +0 -7
  477. package/transpiled/RPC/Context.js.map +1 -1
  478. package/transpiled/RPC/Dispatcher.js +4 -1
  479. package/transpiled/RPC/Dispatcher.js.map +1 -1
  480. package/transpiled/RPC/errors.js.map +1 -1
  481. package/transpiled/RPC/names.js.map +1 -1
  482. package/transpiled/RTD/Directives.d.ts +1 -1
  483. package/transpiled/RTD/Method.js +1 -3
  484. package/transpiled/RTD/Method.js.map +1 -1
  485. package/transpiled/RTD/Node.js +5 -4
  486. package/transpiled/RTD/Node.js.map +1 -1
  487. package/transpiled/RTD/Route.js +4 -1
  488. package/transpiled/RTD/Route.js.map +1 -1
  489. package/transpiled/RTD/Tree.js +1 -1
  490. package/transpiled/RTD/Tree.js.map +1 -1
  491. package/transpiled/RTD/factory.js.map +1 -1
  492. package/transpiled/RTD/segment.js.map +1 -1
  493. package/transpiled/RTD/syntax/parse.js.map +1 -1
  494. package/transpiled/RTD/syntax/types.d.ts +6 -0
  495. package/transpiled/RTD/syntax/types.js +10 -1
  496. package/transpiled/RTD/syntax/types.js.map +1 -1
  497. package/transpiled/Remotes.js.map +1 -1
  498. package/transpiled/Tenant.d.ts +1 -1
  499. package/transpiled/Tenant.js.map +1 -1
  500. package/transpiled/deployment.d.ts +3 -0
  501. package/transpiled/deployment.js +6 -1
  502. package/transpiled/deployment.js.map +1 -1
  503. package/transpiled/directives/auth/Anonymous.js +1 -3
  504. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  505. package/transpiled/directives/auth/Anyone.js.map +1 -1
  506. package/transpiled/directives/auth/Assert.js.map +1 -1
  507. package/transpiled/directives/auth/Authorization.js +7 -3
  508. package/transpiled/directives/auth/Authorization.js.map +1 -1
  509. package/transpiled/directives/auth/Delegate.js.map +1 -1
  510. package/transpiled/directives/auth/Echo.js +1 -3
  511. package/transpiled/directives/auth/Echo.js.map +1 -1
  512. package/transpiled/directives/auth/Federation.js +3 -7
  513. package/transpiled/directives/auth/Federation.js.map +1 -1
  514. package/transpiled/directives/auth/Id.js.map +1 -1
  515. package/transpiled/directives/auth/Incept.js +1 -1
  516. package/transpiled/directives/auth/Incept.js.map +1 -1
  517. package/transpiled/directives/auth/Input.js.map +1 -1
  518. package/transpiled/directives/auth/Role.js.map +1 -1
  519. package/transpiled/directives/auth/Rule.js.map +1 -1
  520. package/transpiled/directives/auth/Scheme.js +1 -2
  521. package/transpiled/directives/auth/Scheme.js.map +1 -1
  522. package/transpiled/directives/auth/create.js.map +1 -1
  523. package/transpiled/directives/auth/schemes.js.map +1 -1
  524. package/transpiled/directives/auth/split.js.map +1 -1
  525. package/transpiled/directives/auth/types.d.ts +3 -1
  526. package/transpiled/directives/cache/Cache.js +28 -2
  527. package/transpiled/directives/cache/Cache.js.map +1 -1
  528. package/transpiled/directives/cache/Control.js +1 -1
  529. package/transpiled/directives/cache/Control.js.map +1 -1
  530. package/transpiled/directives/cache/etag.d.ts +10 -0
  531. package/transpiled/directives/cache/etag.js +30 -0
  532. package/transpiled/directives/cache/etag.js.map +1 -0
  533. package/transpiled/directives/cors/CORS.js.map +1 -1
  534. package/transpiled/directives/dev/Development.js.map +1 -1
  535. package/transpiled/directives/dev/Faulty.js.map +1 -1
  536. package/transpiled/directives/dev/Sleep.js.map +1 -1
  537. package/transpiled/directives/dev/Stub.js.map +1 -1
  538. package/transpiled/directives/dev/Throw.js.map +1 -1
  539. package/transpiled/directives/flow/Compose.js +7 -3
  540. package/transpiled/directives/flow/Compose.js.map +1 -1
  541. package/transpiled/directives/flow/Fetch.js.map +1 -1
  542. package/transpiled/directives/flow/Flow.js.map +1 -1
  543. package/transpiled/directives/index.js +11 -1
  544. package/transpiled/directives/index.js.map +1 -1
  545. package/transpiled/directives/io/IO.d.ts +1 -1
  546. package/transpiled/directives/io/IO.js.map +1 -1
  547. package/transpiled/directives/io/Input.js +1 -1
  548. package/transpiled/directives/io/Input.js.map +1 -1
  549. package/transpiled/directives/io/Output.js +3 -3
  550. package/transpiled/directives/io/Output.js.map +1 -1
  551. package/transpiled/directives/io/Status.js.map +1 -1
  552. package/transpiled/directives/io/Throttle.js +1 -1
  553. package/transpiled/directives/io/Throttle.js.map +1 -1
  554. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  555. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  556. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  557. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  558. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  559. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  560. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  562. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  565. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  567. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  568. package/transpiled/directives/map/Authority.js.map +1 -1
  569. package/transpiled/directives/map/Buffer.js.map +1 -1
  570. package/transpiled/directives/map/Claims.js.map +1 -1
  571. package/transpiled/directives/map/Headers.js.map +1 -1
  572. package/transpiled/directives/map/Language.js.map +1 -1
  573. package/transpiled/directives/map/Languages.js.map +1 -1
  574. package/transpiled/directives/map/Map.js.map +1 -1
  575. package/transpiled/directives/map/Mapping.js.map +1 -1
  576. package/transpiled/directives/map/Properties.js.map +1 -1
  577. package/transpiled/directives/map/Segments.js.map +1 -1
  578. package/transpiled/directives/mcp/MCP.js +1 -1
  579. package/transpiled/directives/mcp/MCP.js.map +1 -1
  580. package/transpiled/directives/mcp/Tool.js +3 -1
  581. package/transpiled/directives/mcp/Tool.js.map +1 -1
  582. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  583. package/transpiled/directives/oauth/documents.js.map +1 -1
  584. package/transpiled/directives/octets/Context.js +1 -1
  585. package/transpiled/directives/octets/Context.js.map +1 -1
  586. package/transpiled/directives/octets/Delete.js.map +1 -1
  587. package/transpiled/directives/octets/Directive.js.map +1 -1
  588. package/transpiled/directives/octets/Get.js.map +1 -1
  589. package/transpiled/directives/octets/Octets.js +1 -1
  590. package/transpiled/directives/octets/Octets.js.map +1 -1
  591. package/transpiled/directives/octets/Put.js.map +1 -1
  592. package/transpiled/directives/octets/Workflow.js.map +1 -1
  593. package/transpiled/directives/octets/bytes.js.map +1 -1
  594. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  595. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  596. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  597. package/transpiled/directives/require/Headers.js.map +1 -1
  598. package/transpiled/directives/require/Require.js.map +1 -1
  599. package/transpiled/exceptions.js.map +1 -1
  600. package/transpiled/index.d.ts +1 -1
  601. package/transpiled/index.js +1 -1
  602. package/transpiled/index.js.map +1 -1
  603. package/transpiled/manifest.js +5 -1
  604. package/transpiled/manifest.js.map +1 -1
  605. package/transpiled/root.js.map +1 -1
  606. package/tsconfig.tsbuildinfo +1 -1
  607. package/source/redact.test.ts +0 -27
  608. package/source/redact.ts +0 -21
  609. package/transpiled/redact.d.ts +0 -5
  610. package/transpiled/redact.js +0 -17
  611. package/transpiled/redact.js.map +0 -1
@@ -5,7 +5,7 @@ import { NotFound } from '../../HTTP/index.js'
5
5
  import type { Directive } from './types.js'
6
6
  import type { ReadableStream } from 'node:stream/web'
7
7
  import type { Remotes } from '../../Remotes.js'
8
- import type { Maybe } from '@toa.io/core'
8
+ import type { Maybe } from '@toa.io/core/types'
9
9
  import type { Component } from '@toa.io/core'
10
10
  import type { Output } from '../../io.js'
11
11
  import type { Input } from '../octets/types.js'
@@ -16,7 +16,7 @@ export class Fetch implements Directive {
16
16
  private remote: Component | null = null
17
17
  private readonly operation: string
18
18
 
19
- public constructor (endpoint: string, discovery: Remotes) {
19
+ public constructor(endpoint: string, discovery: Remotes) {
20
20
  assert.equal(typeof endpoint, 'string', '`flow:fetch` must be a string')
21
21
 
22
22
  const [operation, name, namespace = 'default'] = endpoint.split('.').reverse()
@@ -25,9 +25,8 @@ export class Fetch implements Directive {
25
25
  this.connecting = discovery.discover(namespace, name)
26
26
  }
27
27
 
28
- public async apply (input: Input, parameters: Parameter[]): Promise<Output> {
29
- if ('if-none-match' in input.request.headers)
30
- return { status: 304 }
28
+ public async apply(input: Input, parameters: Parameter[]): Promise<Output> {
29
+ if ('if-none-match' in input.request.headers) return { status: 304 }
31
30
 
32
31
  this.remote ??= await this.connecting
33
32
 
@@ -39,11 +38,12 @@ export class Fetch implements Directive {
39
38
  }
40
39
  })
41
40
 
42
- if (request instanceof Error)
43
- throw new NotFound(request)
41
+ if (request instanceof Error) throw new NotFound(request)
44
42
 
45
- const { url, options } = match<Request>(request,
46
- String, { url: request },
43
+ const { url, options } = match<Request>(
44
+ request,
45
+ String,
46
+ { url: request },
47
47
  (request: Request): Request => ({
48
48
  url: request.url,
49
49
  options: {
@@ -51,25 +51,25 @@ export class Fetch implements Directive {
51
51
  body: request.options?.body,
52
52
  headers: request.options?.headers
53
53
  }
54
- }))
54
+ })
55
+ )
55
56
 
56
57
  const response = await fetch(url, options)
57
58
 
58
- if (!response.ok)
59
- throw new NotFound()
59
+ if (!response.ok) throw new NotFound()
60
60
 
61
61
  const headers = new Headers()
62
62
 
63
63
  for (const header of ['content-type', 'content-length', 'etag']) {
64
64
  const value = response.headers.get(header)
65
65
 
66
- if (value !== null)
67
- headers.set(header, value)
66
+ if (value !== null) headers.set(header, value)
68
67
  }
69
68
 
70
69
  return {
71
70
  headers,
72
- body: response.body === null ? null : Readable.fromWeb(response.body as ReadableStream)
71
+ body:
72
+ response.body === null ? null : Readable.fromWeb(response.body as ReadableStream)
73
73
  }
74
74
  }
75
75
  }
@@ -9,7 +9,7 @@ export class Flow implements DirectiveFamily<Directive> {
9
9
  public readonly name: string = 'flow'
10
10
  public readonly mandatory: boolean = false
11
11
 
12
- public create (name: string, value: unknown, remotes: Remotes): Directive {
12
+ public create(name: string, value: unknown, remotes: Remotes): Directive {
13
13
  const Class = constructors[name]
14
14
 
15
15
  if (Class === undefined)
@@ -18,18 +18,19 @@ export class Flow implements DirectiveFamily<Directive> {
18
18
  return new Class(value, remotes)
19
19
  }
20
20
 
21
- public async precall (directives: Directive[], input: Input, parameters: Parameter[]): Promise<Output> {
21
+ public async precall(
22
+ directives: Directive[],
23
+ input: Input,
24
+ parameters: Parameter[]
25
+ ): Promise<Output> {
22
26
  for (const directive of directives) {
23
- if (directive.attach !== undefined)
24
- directive.attach(input)
27
+ if (directive.attach !== undefined) directive.attach(input)
25
28
 
26
- if (directive.apply === undefined)
27
- continue
29
+ if (directive.apply === undefined) continue
28
30
 
29
31
  const output = await directive.apply(input, parameters)
30
32
 
31
- if (output !== null)
32
- return output
33
+ if (output !== null) return output
33
34
  }
34
35
 
35
36
  return null
@@ -12,6 +12,15 @@ import { discovery } from './oauth/index.js'
12
12
  import type { DirectiveFamily } from '../RTD/index.js'
13
13
  import type { Interceptor } from '../Interception.js'
14
14
 
15
- export const families: DirectiveFamily[] =
16
- [authorization, io, cache, map, mcp, req, flow, octets, dev]
15
+ export const families: DirectiveFamily[] = [
16
+ authorization,
17
+ io,
18
+ cache,
19
+ map,
20
+ mcp,
21
+ req,
22
+ flow,
23
+ octets,
24
+ dev
25
+ ]
17
26
  export const interceptors: Interceptor[] = [cors, discovery]
@@ -10,7 +10,7 @@ import type { Remotes } from '../../Remotes.js'
10
10
  import type { Constructor, Directive } from './Directive.js'
11
11
  import type { Introspection } from '../../Introspection.js'
12
12
  import { ATOM_GROUP } from '../../const.js'
13
- import type { extensions } from '@toa.io/core'
13
+ import type { extensions } from '@toa.io/core/types'
14
14
 
15
15
  export class IO implements DirectiveFamily<Directive> {
16
16
  public readonly name = 'io'
@@ -21,12 +21,17 @@ export class IO implements DirectiveFamily<Directive> {
21
21
  /** Throttling reconciles through the atom of the gateways, one for every directive. */
22
22
  private sync: Sync | null = null
23
23
 
24
- public mount (host: extensions.Host): void {
24
+ public mount(host: extensions.Host): void {
25
25
  this.host = host
26
26
  }
27
27
 
28
28
  // eslint-disable-next-line max-params
29
- public create (name: string, value: unknown, remotes: Remotes, route: string): Directive {
29
+ public create(
30
+ name: string,
31
+ value: unknown,
32
+ remotes: Remotes,
33
+ route: string
34
+ ): Directive {
30
35
  if (!(name in constructors))
31
36
  throw new Error(`Directive 'io:${name}' is not implemented`)
32
37
 
@@ -34,14 +39,16 @@ export class IO implements DirectiveFamily<Directive> {
34
39
 
35
40
  Directive.validate(value)
36
41
 
37
- if (name === 'throttle')
38
- this.sync ??= new Sync(this.host.atom(ATOM_GROUP))
42
+ if (name === 'throttle') this.sync ??= new Sync(this.host.atom(ATOM_GROUP))
39
43
 
40
44
  return new Directive(value, this.sync!, route)
41
45
  }
42
46
 
43
- public precall (directives: Directive[], context: http.Context,
44
- parameters: Parameter[]): null {
47
+ public precall(
48
+ directives: Directive[],
49
+ context: http.Context,
50
+ parameters: Parameter[]
51
+ ): null {
45
52
  let restricted = false
46
53
 
47
54
  for (const directive of directives) {
@@ -50,8 +57,7 @@ export class IO implements DirectiveFamily<Directive> {
50
57
  directive.precall(context, parameters)
51
58
  }
52
59
 
53
- if (!restricted)
54
- DENIAL.precall(context, parameters)
60
+ if (!restricted) DENIAL.precall(context, parameters)
55
61
 
56
62
  return null
57
63
  }
@@ -60,16 +66,18 @@ export class IO implements DirectiveFamily<Directive> {
60
66
  * What a whitelist admits is what the schema states. Without an `io:output` the reply is
61
67
  * dropped before it is sent, so there is no output to describe at all.
62
68
  */
63
- public explain (directives: Directive[], _: http.Context,
64
- introspection: Introspection): Introspection {
69
+ public explain(
70
+ directives: Directive[],
71
+ _: http.Context,
72
+ introspection: Introspection
73
+ ): Introspection {
65
74
  let restricted = false
66
75
 
67
76
  for (const directive of directives) {
68
77
  if (directive instanceof Input)
69
78
  introspection.input = restrict(introspection.input, directive.allowed)
70
79
 
71
- if (!(directive instanceof Output))
72
- continue
80
+ if (!(directive instanceof Output)) continue
73
81
 
74
82
  restricted = true
75
83
 
@@ -77,16 +85,17 @@ export class IO implements DirectiveFamily<Directive> {
77
85
  introspection.output = restrict(introspection.output, directive.allowed)
78
86
  }
79
87
 
80
- if (!restricted)
81
- delete introspection.output
88
+ if (!restricted) delete introspection.output
82
89
 
83
90
  return introspection
84
91
  }
85
92
 
86
- public settle (directives: Directive[], context: http.Context,
87
- output: http.OutgoingMessage): void {
88
- for (const directive of directives)
89
- directive.settle?.(context, output)
93
+ public settle(
94
+ directives: Directive[],
95
+ context: http.Context,
96
+ output: http.OutgoingMessage
97
+ ): void {
98
+ for (const directive of directives) directive.settle?.(context, output)
90
99
  }
91
100
 
92
101
  /**
@@ -94,7 +103,7 @@ export class IO implements DirectiveFamily<Directive> {
94
103
  * factory disposes every route it made — so this runs once per route at shutdown,
95
104
  * and disposing an already stopped ticker is what makes that harmless.
96
105
  */
97
- public dispose (): void {
106
+ public dispose(): void {
98
107
  this.sync?.dispose()
99
108
  }
100
109
  }
@@ -8,15 +8,15 @@ export class Input implements Directive {
8
8
  /** what a client may send, which is therefore what the input schema states */
9
9
  public readonly allowed: Set<string>
10
10
 
11
- public constructor (permissions: Permissions) {
11
+ public constructor(permissions: Permissions) {
12
12
  this.allowed = new Set(permissions)
13
13
  }
14
14
 
15
- public static validate (permissions: unknown): asserts permissions is Permissions {
16
- schemas.input.validate<Permissions>(permissions, 'Incorrect \'io:input\' format')
15
+ public static validate(permissions: unknown): asserts permissions is Permissions {
16
+ schemas.input.validate<Permissions>(permissions, "Incorrect 'io:input' format")
17
17
  }
18
18
 
19
- public precall (context: Context): void {
19
+ public precall(context: Context): void {
20
20
  // Restrictions are on what the client sent, so the check goes to the front of the
21
21
  // pipeline whatever order the families ran in: `auth:delegate` embeds the identity
22
22
  // and `map:*` assigns mapped properties, and those additions are the server's own,
@@ -24,9 +24,8 @@ export class Input implements Directive {
24
24
  context.pipelines.body.unshift((body) => this.check(body))
25
25
  }
26
26
 
27
- private check (body: unknown): Message | Message[] | undefined {
28
- if (body === undefined)
29
- return body
27
+ private check(body: unknown): Message | Message[] | undefined {
28
+ if (body === undefined) return body
30
29
 
31
30
  try {
32
31
  schemas.message.validate<Message | Message[]>(body)
@@ -36,21 +35,19 @@ export class Input implements Directive {
36
35
 
37
36
  const property = this.violation(body)
38
37
 
39
- if (property !== undefined)
40
- throw new BadRequest(`Unexpected input: ${property}`)
38
+ if (property !== undefined) throw new BadRequest(`Unexpected input: ${property}`)
41
39
 
42
40
  return body
43
41
  }
44
42
 
45
- private violation (value: Message | Message[]): string | undefined {
43
+ private violation(value: Message | Message[]): string | undefined {
46
44
  if (!Array.isArray(value))
47
45
  return Object.keys(value).find((key) => !this.allowed.has(key))
48
46
 
49
47
  for (const item of value) {
50
48
  const property = this.violation(item)
51
49
 
52
- if (property !== undefined)
53
- return property
50
+ if (property !== undefined) return property
54
51
  }
55
52
  }
56
53
  }
@@ -15,28 +15,24 @@ export class Output implements Directive {
15
15
  private readonly omitted: boolean = true
16
16
  private readonly permissions: string[] = []
17
17
 
18
- public constructor (permissions: Permissions) {
18
+ public constructor(permissions: Permissions) {
19
19
  if (typeof permissions === 'boolean')
20
- if (permissions)
21
- this.disabled = true
22
- else
23
- this.omitted = false
24
-
25
- else
26
- this.permissions = permissions
20
+ if (permissions) this.disabled = true
21
+ else this.omitted = false
22
+ else this.permissions = permissions
27
23
 
28
24
  this.allowed = new Set(this.permissions)
29
25
  }
30
26
 
31
- public static validate (permissions: unknown): asserts permissions is Permissions {
32
- schemas.output.validate(permissions, 'Incorrect \'io:output\' format')
27
+ public static validate(permissions: unknown): asserts permissions is Permissions {
28
+ schemas.output.validate(permissions, "Incorrect 'io:output' format")
33
29
  }
34
30
 
35
- public precall (context: Context): void {
31
+ public precall(context: Context): void {
36
32
  context.pipelines.response.push(this.restriction(context))
37
33
  }
38
34
 
39
- private restriction (context: Context) {
35
+ private restriction(context: Context) {
40
36
  return (message: OutgoingMessage): void => {
41
37
  // what the gateway built is its own — a code and a message — and a restriction has
42
38
  // nothing to say about it; everything else is a reply the operation returned, and is
@@ -45,37 +41,38 @@ export class Output implements Directive {
45
41
  const stream = message.body instanceof Stream
46
42
  const none = message.body === undefined || message.body === null
47
43
 
48
- if (this.disabled || error || stream || none)
49
- return
44
+ if (this.disabled || error || stream || none) return
50
45
 
51
46
  if (typeof message.body !== 'object' || this.permissions.length === 0) {
52
47
  if (this.omitted)
53
- console.warn('Permissions for \'io:output\' are not specified properly, response omitted',
54
- { path: context.url.pathname })
48
+ console.warn(
49
+ "Permissions for 'io:output' are not specified properly, response omitted",
50
+ { path: context.url.pathname }
51
+ )
55
52
 
56
53
  delete message.body
57
54
 
58
55
  return
59
56
  }
60
57
 
61
- schemas.message.validate<Message>(message.body,
62
- '\'io:output\' expects response to be an object or array of objects')
58
+ schemas.message.validate<Message>(
59
+ message.body,
60
+ "'io:output' expects response to be an object or array of objects"
61
+ )
63
62
 
64
63
  if (Array.isArray(message.body))
65
64
  message.body = message.body.map((entity) => this.fit(entity as Message))
66
- else
67
- message.body = this.fit(message.body)
65
+ else message.body = this.fit(message.body)
68
66
  }
69
67
  }
70
68
 
71
69
  /** Runs per entity of a collection, hence the set and the absence of intermediates. */
72
- private fit (message: Message): Message {
70
+ private fit(message: Message): Message {
73
71
  const output: Message = {}
74
72
 
75
73
  // the keys of the entity, so that the response keeps the order it was built in
76
74
  for (const key of Object.keys(message))
77
- if (this.allowed.has(key))
78
- output[key] = message[key]
75
+ if (this.allowed.has(key)) output[key] = message[key]
79
76
 
80
77
  return output
81
78
  }
@@ -8,8 +8,11 @@ import type { OutgoingMessage } from '../../HTTP/index.js'
8
8
 
9
9
  const status = new Status('status')
10
10
 
11
- function context (): Context {
12
- return { pipelines: { body: [], response: [] }, url: { pathname: '/' } } as unknown as Context
11
+ function context(): Context {
12
+ return {
13
+ pipelines: { body: [], response: [] },
14
+ url: { pathname: '/' }
15
+ } as unknown as Context
13
16
  }
14
17
 
15
18
  it('should take the status from the property and remove it', () => {
@@ -55,8 +58,7 @@ it('should have a reply it named the status of restricted, whatever that status
55
58
 
56
59
  status.settle(ctx, response)
57
60
 
58
- for (const transform of ctx.pipelines.response)
59
- transform(response)
61
+ for (const transform of ctx.pipelines.response) transform(response)
60
62
 
61
63
  assert.equal(response.status, stated)
62
64
  assert.deepEqual(response.body, { code: 'SplxlO', error: 'invalid_grant' })
@@ -76,9 +78,11 @@ it('should leave a failure the gateway built alone, on such a route too', () =>
76
78
  body: { code: 'NOT_FOUND', message: 'nope' }
77
79
  }
78
80
 
79
- for (const transform of ctx.pipelines.response)
80
- transform(response)
81
+ for (const transform of ctx.pipelines.response) transform(response)
81
82
 
82
- assert.deepEqual(response.body, { code: 'NOT_FOUND', message: 'nope' },
83
- 'a code and a message are not what a restriction has anything to say about')
83
+ assert.deepEqual(
84
+ response.body,
85
+ { code: 'NOT_FOUND', message: 'nope' },
86
+ 'a code and a message are not what a restriction has anything to say about'
87
+ )
84
88
  })
@@ -15,28 +15,29 @@ import type * as http from '../../HTTP/index.js'
15
15
  export class Status implements Directive {
16
16
  private readonly property: string
17
17
 
18
- public constructor (property: unknown) {
18
+ public constructor(property: unknown) {
19
19
  this.property = property as string
20
20
  }
21
21
 
22
- public static validate (value: unknown): asserts value is string {
22
+ public static validate(value: unknown): asserts value is string {
23
23
  assert.ok(typeof value === 'string', '`io:status` must be a string')
24
24
  }
25
25
 
26
- public precall (): void {
26
+ public precall(): void {
27
27
  // nothing to do until the operation has answered
28
28
  }
29
29
 
30
- public settle (_: unknown, response: http.OutgoingMessage): void {
30
+ public settle(_: unknown, response: http.OutgoingMessage): void {
31
31
  const body: unknown = response.body
32
32
 
33
- if (body === null || typeof body !== 'object' || !(this.property in body))
34
- return
33
+ if (body === null || typeof body !== 'object' || !(this.property in body)) return
35
34
 
36
35
  const value: unknown = (body as Record<string, unknown>)[this.property]
37
36
 
38
- assert.ok(typeof value === 'number',
39
- `\`io:status\` expects '${this.property}' to be a number`)
37
+ assert.ok(
38
+ typeof value === 'number',
39
+ `\`io:status\` expects '${this.property}' to be a number`
40
+ )
40
41
 
41
42
  response.status = value
42
43
 
@@ -8,24 +8,23 @@ import type { Directive } from './Directive.js'
8
8
  export class Throttle implements Directive {
9
9
  private readonly quotas: Quotas
10
10
 
11
- public constructor (declaration: Declaration, sync: Sync, route: string) {
11
+ public constructor(declaration: Declaration, sync: Sync, route: string) {
12
12
  this.quotas = Quotas.create(parse(declaration), route)
13
13
 
14
14
  sync.register(this.quotas)
15
15
  }
16
16
 
17
- public static validate (declaration: unknown): asserts declaration is Declaration {
18
- schemas.throttle.validate(declaration, 'Incorrect \'io:throttle\' format')
17
+ public static validate(declaration: unknown): asserts declaration is Declaration {
18
+ schemas.throttle.validate(declaration, "Incorrect 'io:throttle' format")
19
19
  }
20
20
 
21
- public precall (context: http.Context, parameters: Parameter[]): void {
21
+ public precall(context: http.Context, parameters: Parameter[]): void {
22
22
  const retry = this.quotas.check(context, parameters)
23
23
 
24
- if (retry > 0)
25
- throw new TooManyRequests(retry)
24
+ if (retry > 0) throw new TooManyRequests(retry)
26
25
  }
27
26
 
28
- public settle (context: http.Context, output: http.OutgoingMessage): void {
27
+ public settle(context: http.Context, output: http.OutgoingMessage): void {
29
28
  this.quotas.use(context, output)
30
29
  }
31
30
  }
@@ -22,23 +22,29 @@ it('should convert key', () => {
22
22
  })
23
23
 
24
24
  it('should convert condition', () => {
25
- assert.partialDeepStrictEqual(parse({ key: ['ip', 'path'], condition: { status: '404' }, ...rest }), {
26
- condition: [
27
- {
28
- method: 'status',
29
- options: '404'
30
- }
31
- ]
32
- })
25
+ assert.partialDeepStrictEqual(
26
+ parse({ key: ['ip', 'path'], condition: { status: '404' }, ...rest }),
27
+ {
28
+ condition: [
29
+ {
30
+ method: 'status',
31
+ options: '404'
32
+ }
33
+ ]
34
+ }
35
+ )
33
36
 
34
- assert.partialDeepStrictEqual(parse({ key: 'ip', condition: { status: '404' }, ...rest }), {
35
- condition: [
36
- {
37
- method: 'status',
38
- options: '404'
39
- }
40
- ]
41
- })
37
+ assert.partialDeepStrictEqual(
38
+ parse({ key: 'ip', condition: { status: '404' }, ...rest }),
39
+ {
40
+ condition: [
41
+ {
42
+ method: 'status',
43
+ options: '404'
44
+ }
45
+ ]
46
+ }
47
+ )
42
48
  })
43
49
 
44
50
  it('should convert a key component that takes an argument', () => {
@@ -53,11 +59,14 @@ it('should convert a key component that takes an argument', () => {
53
59
  })
54
60
 
55
61
  it('should convert a mixed key', () => {
56
- assert.partialDeepStrictEqual(parse({ key: ['route', { segment: 'id' }, 'identity'], ...rest }), {
57
- key: [
58
- { method: 'route' },
59
- { method: 'segment', options: 'id' },
60
- { method: 'identity' }
61
- ]
62
- })
62
+ assert.partialDeepStrictEqual(
63
+ parse({ key: ['route', { segment: 'id' }, 'identity'], ...rest }),
64
+ {
65
+ key: [
66
+ { method: 'route' },
67
+ { method: 'segment', options: 'id' },
68
+ { method: 'identity' }
69
+ ]
70
+ }
71
+ )
63
72
  })
@@ -21,7 +21,7 @@ type KeyEntry = KeyComponentMethod | { segment: string }
21
21
  type KeyDeclaration = KeyEntry | KeyEntry[]
22
22
 
23
23
  type ConditionDeclaration =
24
- Record<KeyConditionMethod, unknown>
24
+ | Record<KeyConditionMethod, unknown>
25
25
  | Array<Record<KeyConditionMethod, unknown>>
26
26
 
27
27
  export interface Declaration extends Omit<Configuration, 'key' | 'condition'> {
@@ -29,7 +29,7 @@ export interface Declaration extends Omit<Configuration, 'key' | 'condition'> {
29
29
  condition?: ConditionDeclaration
30
30
  }
31
31
 
32
- export function parse (declaration: Declaration): Configuration {
32
+ export function parse(declaration: Declaration): Configuration {
33
33
  const { key, condition, requests, interval } = declaration
34
34
 
35
35
  return {
@@ -40,24 +40,29 @@ export function parse (declaration: Declaration): Configuration {
40
40
  }
41
41
  }
42
42
 
43
- function mapKey (declaration: KeyDeclaration): KeyComponent[] {
43
+ function mapKey(declaration: KeyDeclaration): KeyComponent[] {
44
44
  const entries = Array.isArray(declaration) ? declaration : [declaration]
45
45
 
46
46
  // a bare `path`, or `segment: id` for the ones that take an argument
47
47
  return entries.flatMap((entry): KeyComponent[] =>
48
48
  typeof entry === 'string'
49
49
  ? [{ method: entry }]
50
- : Object.entries(entry).map(([method, options]) =>
51
- ({ method: method as KeyComponentMethod, options })))
50
+ : Object.entries(entry).map(([method, options]) => ({
51
+ method: method as KeyComponentMethod,
52
+ options
53
+ }))
54
+ )
52
55
  }
53
56
 
54
- function mapCondition (declaration?: ConditionDeclaration): KeyCondition[] | undefined {
55
- if (declaration === undefined)
56
- return
57
+ function mapCondition(declaration?: ConditionDeclaration): KeyCondition[] | undefined {
58
+ if (declaration === undefined) return
57
59
 
58
60
  // reduce to a single object, then map entries to rules
59
61
  const conditions = Array.isArray(declaration) ? declaration : [declaration]
60
62
  const single = conditions.reduce((acc, condition) => ({ ...acc, ...condition }), {})
61
63
 
62
- return Object.entries(single).map(([method, options]) => ({ method, options })) as KeyCondition[]
64
+ return Object.entries(single).map(([method, options]) => ({
65
+ method,
66
+ options
67
+ })) as KeyCondition[]
63
68
  }