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

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/components/exposition.octets/operations/delete.js +1 -1
  2. package/components/exposition.octets/operations/get.js +5 -2
  3. package/components/exposition.octets/operations/head.js +1 -1
  4. package/components/exposition.octets/operations/put.js +29 -37
  5. package/components/exposition.octets/types/toa.d.ts +1 -1
  6. package/components/identity.bans/manifest.toa.yaml +12 -13
  7. package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
  8. package/components/identity.bans/operations/transit.js +1 -1
  9. package/components/identity.bans/source/transit.ts +1 -1
  10. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  11. package/components/identity.bans/types/toa.d.ts +5 -5
  12. package/components/identity.basic/events/principal.js +3 -1
  13. package/components/identity.basic/manifest.toa.yaml +17 -23
  14. package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
  15. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  16. package/components/identity.basic/operations/add.js +1 -1
  17. package/components/identity.basic/operations/authenticate.js +2 -2
  18. package/components/identity.basic/operations/check.js +4 -2
  19. package/components/identity.basic/operations/delete.js +1 -1
  20. package/components/identity.basic/operations/incept.js +1 -1
  21. package/components/identity.basic/operations/info.js +1 -1
  22. package/components/identity.basic/operations/lib/credentials.js +1 -1
  23. package/components/identity.basic/operations/transit.js +7 -8
  24. package/components/identity.basic/source/add.ts +5 -2
  25. package/components/identity.basic/source/authenticate.ts +11 -13
  26. package/components/identity.basic/source/check.ts +9 -6
  27. package/components/identity.basic/source/delete.ts +4 -1
  28. package/components/identity.basic/source/incept.ts +13 -10
  29. package/components/identity.basic/source/info.ts +4 -1
  30. package/components/identity.basic/source/lib/credentials.ts +2 -3
  31. package/components/identity.basic/source/transit.ts +27 -21
  32. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  33. package/components/identity.basic/types/index.d.ts +7 -3
  34. package/components/identity.basic/types/toa.d.ts +5 -5
  35. package/components/identity.clients/manifest.toa.yaml +36 -40
  36. package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
  37. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  38. package/components/identity.clients/operations/describe.js +1 -1
  39. package/components/identity.clients/operations/lib/canonical.js +1 -1
  40. package/components/identity.clients/operations/lib/cimd.js +3 -2
  41. package/components/identity.clients/operations/lib/redirect.js +7 -4
  42. package/components/identity.clients/operations/register.js +2 -2
  43. package/components/identity.clients/source/describe.ts +6 -8
  44. package/components/identity.clients/source/lib/Context.ts +6 -3
  45. package/components/identity.clients/source/lib/Entity.ts +1 -1
  46. package/components/identity.clients/source/lib/canonical.ts +1 -1
  47. package/components/identity.clients/source/lib/cimd.test.ts +8 -6
  48. package/components/identity.clients/source/lib/cimd.ts +24 -19
  49. package/components/identity.clients/source/lib/redirect.test.ts +8 -2
  50. package/components/identity.clients/source/lib/redirect.ts +12 -8
  51. package/components/identity.clients/source/register.ts +18 -18
  52. package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
  53. package/components/identity.clients/types/toa.d.ts +5 -5
  54. package/components/identity.credentials/manifest.toa.yaml +4 -4
  55. package/components/identity.credentials/operations/list.js +8 -4
  56. package/components/identity.credentials/source/list.test.ts +39 -20
  57. package/components/identity.credentials/source/list.ts +12 -8
  58. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  59. package/components/identity.credentials/types/toa.d.ts +2 -2
  60. package/components/identity.federation/manifest.toa.yaml +23 -32
  61. package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
  62. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  63. package/components/identity.federation/operations/authenticate.js +4 -2
  64. package/components/identity.federation/operations/create.js +2 -2
  65. package/components/identity.federation/operations/decode.js +1 -1
  66. package/components/identity.federation/operations/delete.js +1 -1
  67. package/components/identity.federation/operations/incept.js +1 -1
  68. package/components/identity.federation/operations/lib/decode.js +1 -1
  69. package/components/identity.federation/operations/lib/discovery.js +2 -2
  70. package/components/identity.federation/operations/lib/exchange.js +8 -4
  71. package/components/identity.federation/operations/lib/principal.js +1 -1
  72. package/components/identity.federation/operations/lib/resolve.js +1 -1
  73. package/components/identity.federation/operations/list.js +2 -2
  74. package/components/identity.federation/source/authenticate.ts +19 -17
  75. package/components/identity.federation/source/create.ts +6 -7
  76. package/components/identity.federation/source/decode.ts +4 -1
  77. package/components/identity.federation/source/delete.ts +4 -1
  78. package/components/identity.federation/source/incept.ts +2 -3
  79. package/components/identity.federation/source/lib/decode.ts +4 -7
  80. package/components/identity.federation/source/lib/discovery.test.ts +15 -5
  81. package/components/identity.federation/source/lib/discovery.ts +10 -9
  82. package/components/identity.federation/source/lib/exchange.ts +18 -15
  83. package/components/identity.federation/source/lib/jose.d.ts +1 -1
  84. package/components/identity.federation/source/lib/principal.ts +5 -3
  85. package/components/identity.federation/source/lib/resolve.ts +5 -1
  86. package/components/identity.federation/source/list.test.ts +26 -10
  87. package/components/identity.federation/source/list.ts +5 -2
  88. package/components/identity.federation/source/types/context.ts +5 -2
  89. package/components/identity.federation/source/types/entity.ts +2 -2
  90. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  91. package/components/identity.federation/types/toa.d.ts +5 -5
  92. package/components/identity.grants/manifest.toa.yaml +27 -31
  93. package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
  94. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  95. package/components/identity.grants/operations/authorize.js +1 -1
  96. package/components/identity.grants/operations/exchange.js +5 -2
  97. package/components/identity.grants/operations/lib/code.js +1 -1
  98. package/components/identity.grants/operations/lib/identify.js +1 -1
  99. package/components/identity.grants/operations/list.js +1 -1
  100. package/components/identity.grants/operations/revoke.js +3 -2
  101. package/components/identity.grants/source/authorize.ts +27 -19
  102. package/components/identity.grants/source/exchange.ts +15 -11
  103. package/components/identity.grants/source/lib/code.ts +20 -8
  104. package/components/identity.grants/source/lib/identify.ts +1 -1
  105. package/components/identity.grants/source/list.ts +2 -2
  106. package/components/identity.grants/source/revoke.ts +9 -7
  107. package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
  108. package/components/identity.grants/types/index.d.ts +3 -3
  109. package/components/identity.grants/types/toa.d.ts +5 -5
  110. package/components/identity.keys/manifest.toa.yaml +18 -23
  111. package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
  112. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  113. package/components/identity.keys/operations/create.js +1 -1
  114. package/components/identity.keys/operations/disable.js +1 -1
  115. package/components/identity.keys/operations/revoke.js +1 -1
  116. package/components/identity.keys/source/create.ts +2 -3
  117. package/components/identity.keys/source/disable.ts +1 -1
  118. package/components/identity.keys/source/revoke.ts +2 -2
  119. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  120. package/components/identity.keys/types/toa.d.ts +5 -5
  121. package/components/identity.otp/manifest.toa.yaml +16 -24
  122. package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
  123. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  124. package/components/identity.otp/operations/authenticate.js +1 -1
  125. package/components/identity.otp/operations/issue.js +1 -1
  126. package/components/identity.otp/source/authenticate.ts +4 -7
  127. package/components/identity.otp/source/issue.ts +1 -1
  128. package/components/identity.otp/source/lib/Context.ts +1 -1
  129. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  130. package/components/identity.otp/types/toa.d.ts +5 -5
  131. package/components/identity.passkeys/manifest.toa.yaml +45 -53
  132. package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
  133. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  134. package/components/identity.passkeys/operations/authenticate.js +1 -1
  135. package/components/identity.passkeys/operations/challenge.js +6 -3
  136. package/components/identity.passkeys/operations/create.js +1 -1
  137. package/components/identity.passkeys/operations/delete.js +1 -1
  138. package/components/identity.passkeys/operations/list.js +1 -1
  139. package/components/identity.passkeys/operations/use.js +1 -1
  140. package/components/identity.passkeys/source/authenticate.ts +3 -4
  141. package/components/identity.passkeys/source/challenge.ts +29 -25
  142. package/components/identity.passkeys/source/create.ts +8 -6
  143. package/components/identity.passkeys/source/delete.ts +4 -1
  144. package/components/identity.passkeys/source/list.ts +4 -1
  145. package/components/identity.passkeys/source/types/Context.ts +1 -1
  146. package/components/identity.passkeys/source/use.ts +12 -10
  147. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  148. package/components/identity.passkeys/types/toa.d.ts +5 -5
  149. package/components/identity.roles/manifest.toa.yaml +12 -16
  150. package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
  151. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  152. package/components/identity.roles/operations/grant.js +1 -1
  153. package/components/identity.roles/operations/list.js +1 -1
  154. package/components/identity.roles/operations/principal.js +2 -2
  155. package/components/identity.roles/source/grant.ts +7 -6
  156. package/components/identity.roles/source/list.ts +1 -1
  157. package/components/identity.roles/source/principal.ts +5 -7
  158. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  159. package/components/identity.roles/types/toa.d.ts +5 -5
  160. package/components/identity.tokens/manifest.toa.yaml +17 -15
  161. package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
  162. package/components/identity.tokens/operations/authenticate.js +2 -2
  163. package/components/identity.tokens/operations/decrypt.js +11 -5
  164. package/components/identity.tokens/operations/encrypt.js +2 -2
  165. package/components/identity.tokens/operations/issue.js +2 -4
  166. package/components/identity.tokens/operations/lib/form.js +1 -1
  167. package/components/identity.tokens/operations/lib/key.js +1 -1
  168. package/components/identity.tokens/operations/revoke.js +1 -1
  169. package/components/identity.tokens/source/authenticate.test.ts +22 -16
  170. package/components/identity.tokens/source/authenticate.ts +7 -10
  171. package/components/identity.tokens/source/decrypt.test.ts +62 -29
  172. package/components/identity.tokens/source/decrypt.ts +30 -27
  173. package/components/identity.tokens/source/encrypt.test.ts +21 -16
  174. package/components/identity.tokens/source/encrypt.ts +8 -11
  175. package/components/identity.tokens/source/issue.test.ts +4 -2
  176. package/components/identity.tokens/source/issue.ts +6 -8
  177. package/components/identity.tokens/source/lib/form.ts +5 -9
  178. package/components/identity.tokens/source/lib/jose.d.ts +1 -1
  179. package/components/identity.tokens/source/lib/key.ts +1 -1
  180. package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
  181. package/components/identity.tokens/source/revoke.ts +1 -1
  182. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  183. package/components/identity.tokens/types/index.d.ts +13 -4
  184. package/components/identity.tokens/types/toa.d.ts +5 -5
  185. package/context.toa.yaml +2 -2
  186. package/cucumber.mjs +3 -0
  187. package/documentation/access.md +4 -3
  188. package/documentation/cache.md +17 -3
  189. package/documentation/components.md +2 -2
  190. package/documentation/credentials.md +2 -2
  191. package/documentation/identity.md +7 -9
  192. package/documentation/map.md +2 -2
  193. package/documentation/mcp.md +16 -16
  194. package/documentation/notes/peers.md +1 -1
  195. package/documentation/notes/throttling.md +1 -1
  196. package/documentation/octets.md +4 -4
  197. package/documentation/protocol.md +3 -3
  198. package/documentation/query.md +14 -8
  199. package/documentation/rpc.md +31 -21
  200. package/documentation/tracing.md +3 -3
  201. package/documentation/tree.md +1 -1
  202. package/features/auth.assert.feature +2 -2
  203. package/features/auth.bearer.feature +1 -1
  204. package/features/auth.claims.feature +5 -5
  205. package/features/auth.incept.feature +2 -2
  206. package/features/authorities.federation.feature +1 -1
  207. package/features/configuration.feature +3 -4
  208. package/features/credentials.feature +9 -9
  209. package/features/dev.feature +1 -0
  210. package/features/dynamic.feature +1 -0
  211. package/features/errors.feature +21 -0
  212. package/features/etag.feature +0 -86
  213. package/features/identity.bans.feature +3 -3
  214. package/features/identity.basic.feature +9 -9
  215. package/features/identity.federation.feature +11 -11
  216. package/features/identity.tokens.custom.feature +5 -5
  217. package/features/identity.tokens.feature +2 -2
  218. package/features/interruptions.feature +1 -0
  219. package/features/introspection.map.feature +4 -4
  220. package/features/io.throttle.feature +1 -0
  221. package/features/map.feature +2 -2
  222. package/features/octets.cloudinary.feature +1 -1
  223. package/features/octets.download.feature +1 -0
  224. package/features/require.feature +1 -2
  225. package/features/steps/Captures.ts +1 -1
  226. package/features/steps/Cloudinary.ts +1 -2
  227. package/features/steps/Common.ts +4 -5
  228. package/features/steps/Components.ts +17 -12
  229. package/features/steps/Database.ts +42 -23
  230. package/features/steps/Gateway.ts +55 -72
  231. package/features/steps/HTTP.ts +12 -15
  232. package/features/steps/IDP.ts +118 -94
  233. package/features/steps/Identity.ts +3 -3
  234. package/features/steps/OTP.ts +3 -3
  235. package/features/steps/Parameters.ts +20 -10
  236. package/features/steps/Probe.ts +9 -7
  237. package/features/steps/Realtime.ts +40 -22
  238. package/features/steps/Workspace.ts +10 -7
  239. package/features/steps/components/audit/operations/record.js +1 -1
  240. package/features/steps/components/echo/operations/affect.js +1 -1
  241. package/features/steps/components/echo/operations/compute.js +1 -1
  242. package/features/steps/components/echo/operations/echo.js +1 -1
  243. package/features/steps/components/echo/operations/error.js +1 -1
  244. package/features/steps/components/echo/operations/identity.js +1 -1
  245. package/features/steps/components/echo/operations/parameters.js +1 -1
  246. package/features/steps/components/echo/operations/ping.js +1 -1
  247. package/features/steps/components/echo/operations/unwrap.js +1 -1
  248. package/features/steps/components/greeter/operations/greet.js +1 -1
  249. package/features/steps/components/notify/operations/send.js +1 -1
  250. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  251. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  252. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  253. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  254. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  255. package/features/steps/components/octets.tester/operations/err.js +1 -1
  256. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  257. package/features/steps/components/octets.tester/operations/id.js +1 -1
  258. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  259. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  260. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  261. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  262. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  263. package/features/steps/components/orders/operations/create.js +4 -2
  264. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  265. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  266. package/features/steps/components/pricing/operations/quote.js +1 -1
  267. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  268. package/features/steps/components/sequences/operations/numbers.js +1 -1
  269. package/features/steps/components/sequences/operations/tokens.js +3 -3
  270. package/features/steps/components/users/manifest.toa.yaml +3 -5
  271. package/features/steps/components/users/operations/create.js +1 -1
  272. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  273. package/features/steps/map.ts +2 -2
  274. package/features/timestamps.feature +1 -1
  275. package/package.json +7 -7
  276. package/readme.md +11 -11
  277. package/schemas/annotation.cos.yaml +1 -3
  278. package/schemas/method.cos.yaml +2 -0
  279. package/source/Branch.test.ts +2 -2
  280. package/source/Branch.ts +3 -5
  281. package/source/Composition.ts +5 -5
  282. package/source/Directive.test.ts +38 -20
  283. package/source/Directive.ts +61 -47
  284. package/source/Endpoint.test.ts +1 -1
  285. package/source/Endpoint.ts +27 -92
  286. package/source/Factory.ts +26 -12
  287. package/source/Gateway.ts +87 -76
  288. package/source/HTTP/Context.ts +23 -30
  289. package/source/HTTP/Probe.ts +7 -9
  290. package/source/HTTP/Server.ts +88 -69
  291. package/source/HTTP/Timing.ts +6 -21
  292. package/source/HTTP/address.test.ts +8 -2
  293. package/source/HTTP/address.ts +2 -3
  294. package/source/HTTP/exceptions.ts +20 -18
  295. package/source/HTTP/formats/form.ts +1 -1
  296. package/source/HTTP/formats/json.ts +2 -2
  297. package/source/HTTP/formats/msgpack.ts +3 -4
  298. package/source/HTTP/formats/text.ts +2 -2
  299. package/source/HTTP/formats/yaml.test.ts +4 -1
  300. package/source/HTTP/formats/yaml.ts +14 -11
  301. package/source/HTTP/messages.test.ts +38 -28
  302. package/source/HTTP/messages.ts +44 -98
  303. package/source/Interception.ts +3 -4
  304. package/source/Introspection.ts +26 -14
  305. package/source/MCP/Server.ts +114 -54
  306. package/source/MCP/discover.ts +6 -7
  307. package/source/MCP/errors.ts +7 -8
  308. package/source/MCP/schema.test.ts +9 -3
  309. package/source/MCP/schema.ts +12 -16
  310. package/source/MCP/tools.ts +33 -28
  311. package/source/Mapping.ts +25 -27
  312. package/source/Query.ts +58 -44
  313. package/source/RPC/Context.ts +8 -11
  314. package/source/RPC/Dispatcher.ts +46 -26
  315. package/source/RPC/errors.test.ts +41 -16
  316. package/source/RPC/errors.ts +9 -10
  317. package/source/RPC/names.test.ts +35 -16
  318. package/source/RPC/names.ts +22 -29
  319. package/source/RTD/Directives.ts +21 -10
  320. package/source/RTD/Endpoint.ts +4 -1
  321. package/source/RTD/Method.ts +8 -6
  322. package/source/RTD/Node.ts +32 -34
  323. package/source/RTD/Route.ts +18 -21
  324. package/source/RTD/Tree.ts +18 -18
  325. package/source/RTD/factory.ts +13 -16
  326. package/source/RTD/segment.ts +12 -10
  327. package/source/RTD/syntax/parse.test.ts +12 -6
  328. package/source/RTD/syntax/parse.ts +30 -26
  329. package/source/RTD/syntax/types.ts +17 -1
  330. package/source/RTD/walk.test.ts +59 -22
  331. package/source/Remotes.test.ts +25 -4
  332. package/source/Remotes.ts +9 -4
  333. package/source/Tenant.ts +12 -12
  334. package/source/deployment.ts +20 -20
  335. package/source/directives/auth/Anonymous.test.ts +8 -2
  336. package/source/directives/auth/Anonymous.ts +5 -8
  337. package/source/directives/auth/Anyone.ts +3 -3
  338. package/source/directives/auth/Assert.ts +10 -10
  339. package/source/directives/auth/Authorization.ts +83 -69
  340. package/source/directives/auth/Delegate.test.ts +2 -2
  341. package/source/directives/auth/Delegate.ts +8 -10
  342. package/source/directives/auth/Echo.ts +5 -8
  343. package/source/directives/auth/Federation.ts +30 -21
  344. package/source/directives/auth/Id.ts +7 -4
  345. package/source/directives/auth/Incept.ts +32 -26
  346. package/source/directives/auth/Input.ts +36 -20
  347. package/source/directives/auth/Role.test.ts +49 -23
  348. package/source/directives/auth/Role.ts +29 -22
  349. package/source/directives/auth/Rule.ts +13 -8
  350. package/source/directives/auth/Scheme.ts +7 -7
  351. package/source/directives/auth/create.ts +1 -1
  352. package/source/directives/auth/schemes.ts +1 -1
  353. package/source/directives/auth/split.ts +2 -3
  354. package/source/directives/auth/types.ts +5 -2
  355. package/source/directives/cache/Cache.ts +44 -9
  356. package/source/directives/cache/Control.ts +25 -26
  357. package/source/directives/cache/Exact.ts +1 -1
  358. package/source/directives/cache/etag.ts +38 -0
  359. package/source/directives/cors/CORS.ts +9 -7
  360. package/source/directives/dev/Development.ts +3 -4
  361. package/source/directives/dev/Faulty.ts +11 -6
  362. package/source/directives/dev/Sleep.ts +5 -7
  363. package/source/directives/dev/Stub.ts +2 -2
  364. package/source/directives/dev/Throw.ts +2 -2
  365. package/source/directives/flow/Compose.ts +26 -20
  366. package/source/directives/flow/Fetch.ts +15 -15
  367. package/source/directives/flow/Flow.ts +9 -8
  368. package/source/directives/index.ts +11 -2
  369. package/source/directives/io/IO.ts +29 -20
  370. package/source/directives/io/Input.ts +9 -12
  371. package/source/directives/io/Output.ts +20 -23
  372. package/source/directives/io/Status.test.ts +12 -8
  373. package/source/directives/io/Status.ts +9 -8
  374. package/source/directives/io/Throttle.ts +6 -7
  375. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  376. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  377. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  378. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  379. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  380. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  381. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  382. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  383. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  384. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  385. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  386. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  387. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  388. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  389. package/source/directives/io/schemas.test.ts +12 -6
  390. package/source/directives/map/Authority.ts +2 -2
  391. package/source/directives/map/Buffer.ts +2 -2
  392. package/source/directives/map/Claims.ts +25 -20
  393. package/source/directives/map/Headers.ts +17 -13
  394. package/source/directives/map/Language.ts +8 -5
  395. package/source/directives/map/Languages.ts +9 -3
  396. package/source/directives/map/Map.ts +25 -12
  397. package/source/directives/map/Mapping.ts +9 -6
  398. package/source/directives/map/Properties.ts +1 -1
  399. package/source/directives/map/Segments.ts +22 -15
  400. package/source/directives/mcp/MCP.ts +9 -7
  401. package/source/directives/mcp/Tool.test.ts +21 -9
  402. package/source/directives/mcp/Tool.ts +23 -11
  403. package/source/directives/oauth/Discovery.ts +7 -11
  404. package/source/directives/oauth/documents.ts +11 -14
  405. package/source/directives/octets/Context.ts +6 -3
  406. package/source/directives/octets/Delete.ts +33 -25
  407. package/source/directives/octets/Directive.ts +5 -1
  408. package/source/directives/octets/Get.ts +13 -21
  409. package/source/directives/octets/Octets.ts +20 -15
  410. package/source/directives/octets/Put.ts +62 -27
  411. package/source/directives/octets/Workflow.ts +18 -12
  412. package/source/directives/octets/bytes.ts +1 -1
  413. package/source/directives/octets/schemas.test.ts +8 -14
  414. package/source/directives/octets/workflows/Execution.ts +19 -21
  415. package/source/directives/octets/workflows/Workflow.ts +10 -7
  416. package/source/directives/require/Headers.ts +3 -4
  417. package/source/directives/require/Require.ts +3 -4
  418. package/source/exceptions.ts +19 -12
  419. package/source/index.ts +1 -1
  420. package/source/manifest.test.ts +4 -1
  421. package/source/manifest.ts +19 -13
  422. package/source/octets.d.ts +1 -1
  423. package/source/root.ts +3 -2
  424. package/source/schemas.test.ts +17 -3
  425. package/transpiled/Branch.js.map +1 -1
  426. package/transpiled/Composition.js.map +1 -1
  427. package/transpiled/Directive.js +6 -2
  428. package/transpiled/Directive.js.map +1 -1
  429. package/transpiled/Endpoint.d.ts +0 -2
  430. package/transpiled/Endpoint.js +11 -52
  431. package/transpiled/Endpoint.js.map +1 -1
  432. package/transpiled/Factory.d.ts +2 -1
  433. package/transpiled/Factory.js +1 -0
  434. package/transpiled/Factory.js.map +1 -1
  435. package/transpiled/Gateway.d.ts +2 -1
  436. package/transpiled/Gateway.js +24 -15
  437. package/transpiled/Gateway.js.map +1 -1
  438. package/transpiled/HTTP/Context.d.ts +0 -3
  439. package/transpiled/HTTP/Context.js +7 -9
  440. package/transpiled/HTTP/Context.js.map +1 -1
  441. package/transpiled/HTTP/Probe.js.map +1 -1
  442. package/transpiled/HTTP/Server.js +19 -4
  443. package/transpiled/HTTP/Server.js.map +1 -1
  444. package/transpiled/HTTP/Timing.d.ts +1 -2
  445. package/transpiled/HTTP/Timing.js +2 -10
  446. package/transpiled/HTTP/Timing.js.map +1 -1
  447. package/transpiled/HTTP/address.js.map +1 -1
  448. package/transpiled/HTTP/exceptions.js.map +1 -1
  449. package/transpiled/HTTP/formats/form.js.map +1 -1
  450. package/transpiled/HTTP/formats/json.js.map +1 -1
  451. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  452. package/transpiled/HTTP/formats/text.js.map +1 -1
  453. package/transpiled/HTTP/formats/yaml.js +4 -1
  454. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  455. package/transpiled/HTTP/messages.d.ts +3 -2
  456. package/transpiled/HTTP/messages.js +1 -43
  457. package/transpiled/HTTP/messages.js.map +1 -1
  458. package/transpiled/Interception.js.map +1 -1
  459. package/transpiled/Introspection.js +13 -2
  460. package/transpiled/Introspection.js.map +1 -1
  461. package/transpiled/MCP/Server.js +15 -4
  462. package/transpiled/MCP/Server.js.map +1 -1
  463. package/transpiled/MCP/discover.js.map +1 -1
  464. package/transpiled/MCP/errors.js.map +1 -1
  465. package/transpiled/MCP/schema.js +1 -1
  466. package/transpiled/MCP/schema.js.map +1 -1
  467. package/transpiled/MCP/tools.js +10 -7
  468. package/transpiled/MCP/tools.js.map +1 -1
  469. package/transpiled/Mapping.d.ts +2 -2
  470. package/transpiled/Mapping.js +3 -5
  471. package/transpiled/Mapping.js.map +1 -1
  472. package/transpiled/Query.d.ts +6 -2
  473. package/transpiled/Query.js +23 -8
  474. package/transpiled/Query.js.map +1 -1
  475. package/transpiled/RPC/Context.js +0 -7
  476. package/transpiled/RPC/Context.js.map +1 -1
  477. package/transpiled/RPC/Dispatcher.js +4 -1
  478. package/transpiled/RPC/Dispatcher.js.map +1 -1
  479. package/transpiled/RPC/errors.js.map +1 -1
  480. package/transpiled/RPC/names.js.map +1 -1
  481. package/transpiled/RTD/Directives.d.ts +1 -1
  482. package/transpiled/RTD/Method.js +1 -3
  483. package/transpiled/RTD/Method.js.map +1 -1
  484. package/transpiled/RTD/Node.js +5 -4
  485. package/transpiled/RTD/Node.js.map +1 -1
  486. package/transpiled/RTD/Route.js +4 -1
  487. package/transpiled/RTD/Route.js.map +1 -1
  488. package/transpiled/RTD/Tree.js +1 -1
  489. package/transpiled/RTD/Tree.js.map +1 -1
  490. package/transpiled/RTD/factory.js.map +1 -1
  491. package/transpiled/RTD/segment.js.map +1 -1
  492. package/transpiled/RTD/syntax/parse.js.map +1 -1
  493. package/transpiled/RTD/syntax/types.d.ts +6 -0
  494. package/transpiled/RTD/syntax/types.js +10 -1
  495. package/transpiled/RTD/syntax/types.js.map +1 -1
  496. package/transpiled/Remotes.js.map +1 -1
  497. package/transpiled/Tenant.d.ts +1 -1
  498. package/transpiled/Tenant.js.map +1 -1
  499. package/transpiled/deployment.d.ts +3 -0
  500. package/transpiled/deployment.js +6 -1
  501. package/transpiled/deployment.js.map +1 -1
  502. package/transpiled/directives/auth/Anonymous.js +1 -3
  503. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  504. package/transpiled/directives/auth/Anyone.js.map +1 -1
  505. package/transpiled/directives/auth/Assert.js.map +1 -1
  506. package/transpiled/directives/auth/Authorization.js +7 -3
  507. package/transpiled/directives/auth/Authorization.js.map +1 -1
  508. package/transpiled/directives/auth/Delegate.js.map +1 -1
  509. package/transpiled/directives/auth/Echo.js +1 -3
  510. package/transpiled/directives/auth/Echo.js.map +1 -1
  511. package/transpiled/directives/auth/Federation.js +3 -7
  512. package/transpiled/directives/auth/Federation.js.map +1 -1
  513. package/transpiled/directives/auth/Id.js.map +1 -1
  514. package/transpiled/directives/auth/Incept.js +1 -1
  515. package/transpiled/directives/auth/Incept.js.map +1 -1
  516. package/transpiled/directives/auth/Input.js.map +1 -1
  517. package/transpiled/directives/auth/Role.js.map +1 -1
  518. package/transpiled/directives/auth/Rule.js.map +1 -1
  519. package/transpiled/directives/auth/Scheme.js +1 -2
  520. package/transpiled/directives/auth/Scheme.js.map +1 -1
  521. package/transpiled/directives/auth/create.js.map +1 -1
  522. package/transpiled/directives/auth/schemes.js.map +1 -1
  523. package/transpiled/directives/auth/split.js.map +1 -1
  524. package/transpiled/directives/auth/types.d.ts +3 -1
  525. package/transpiled/directives/cache/Cache.js +28 -2
  526. package/transpiled/directives/cache/Cache.js.map +1 -1
  527. package/transpiled/directives/cache/Control.js +1 -1
  528. package/transpiled/directives/cache/Control.js.map +1 -1
  529. package/transpiled/directives/cache/etag.d.ts +10 -0
  530. package/transpiled/directives/cache/etag.js +30 -0
  531. package/transpiled/directives/cache/etag.js.map +1 -0
  532. package/transpiled/directives/cors/CORS.js.map +1 -1
  533. package/transpiled/directives/dev/Development.js.map +1 -1
  534. package/transpiled/directives/dev/Faulty.js.map +1 -1
  535. package/transpiled/directives/dev/Sleep.js.map +1 -1
  536. package/transpiled/directives/dev/Stub.js.map +1 -1
  537. package/transpiled/directives/dev/Throw.js.map +1 -1
  538. package/transpiled/directives/flow/Compose.js +7 -3
  539. package/transpiled/directives/flow/Compose.js.map +1 -1
  540. package/transpiled/directives/flow/Fetch.js.map +1 -1
  541. package/transpiled/directives/flow/Flow.js.map +1 -1
  542. package/transpiled/directives/index.js +11 -1
  543. package/transpiled/directives/index.js.map +1 -1
  544. package/transpiled/directives/io/IO.d.ts +1 -1
  545. package/transpiled/directives/io/IO.js.map +1 -1
  546. package/transpiled/directives/io/Input.js +1 -1
  547. package/transpiled/directives/io/Input.js.map +1 -1
  548. package/transpiled/directives/io/Output.js +3 -3
  549. package/transpiled/directives/io/Output.js.map +1 -1
  550. package/transpiled/directives/io/Status.js.map +1 -1
  551. package/transpiled/directives/io/Throttle.js +1 -1
  552. package/transpiled/directives/io/Throttle.js.map +1 -1
  553. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  554. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  555. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  556. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  557. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  558. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  559. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  560. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  562. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  565. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  567. package/transpiled/directives/map/Authority.js.map +1 -1
  568. package/transpiled/directives/map/Buffer.js.map +1 -1
  569. package/transpiled/directives/map/Claims.js.map +1 -1
  570. package/transpiled/directives/map/Headers.js.map +1 -1
  571. package/transpiled/directives/map/Language.js.map +1 -1
  572. package/transpiled/directives/map/Languages.js.map +1 -1
  573. package/transpiled/directives/map/Map.js.map +1 -1
  574. package/transpiled/directives/map/Mapping.js.map +1 -1
  575. package/transpiled/directives/map/Properties.js.map +1 -1
  576. package/transpiled/directives/map/Segments.js.map +1 -1
  577. package/transpiled/directives/mcp/MCP.js +1 -1
  578. package/transpiled/directives/mcp/MCP.js.map +1 -1
  579. package/transpiled/directives/mcp/Tool.js +3 -1
  580. package/transpiled/directives/mcp/Tool.js.map +1 -1
  581. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  582. package/transpiled/directives/oauth/documents.js.map +1 -1
  583. package/transpiled/directives/octets/Context.js +1 -1
  584. package/transpiled/directives/octets/Context.js.map +1 -1
  585. package/transpiled/directives/octets/Delete.js.map +1 -1
  586. package/transpiled/directives/octets/Directive.js.map +1 -1
  587. package/transpiled/directives/octets/Get.js.map +1 -1
  588. package/transpiled/directives/octets/Octets.js +1 -1
  589. package/transpiled/directives/octets/Octets.js.map +1 -1
  590. package/transpiled/directives/octets/Put.js.map +1 -1
  591. package/transpiled/directives/octets/Workflow.js.map +1 -1
  592. package/transpiled/directives/octets/bytes.js.map +1 -1
  593. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  594. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  595. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  596. package/transpiled/directives/require/Headers.js.map +1 -1
  597. package/transpiled/directives/require/Require.js.map +1 -1
  598. package/transpiled/exceptions.js.map +1 -1
  599. package/transpiled/index.d.ts +1 -1
  600. package/transpiled/index.js +1 -1
  601. package/transpiled/index.js.map +1 -1
  602. package/transpiled/manifest.js +5 -1
  603. package/transpiled/manifest.js.map +1 -1
  604. package/transpiled/root.js.map +1 -1
  605. package/tsconfig.tsbuildinfo +1 -1
  606. package/CHANGELOG.md +0 -552
  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 { Workflow } from './workflows/index.js'
5
5
  import { Directive } from './Directive.js'
6
6
  import type { Parameter } from '../../RTD/index.js'
7
7
  import type { Unit, Location } from './workflows/index.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 './types.js'
@@ -19,7 +19,11 @@ export class Delete extends Directive {
19
19
  private readonly discovery: Promise<Component>
20
20
  private storage!: Component
21
21
 
22
- public constructor (options: Options | null, discovery: Promise<Component>, remotes: Remotes) {
22
+ public constructor(
23
+ options: Options | null,
24
+ discovery: Promise<Component>,
25
+ remotes: Remotes
26
+ ) {
23
27
  super()
24
28
  schemas.remove.validate(options)
25
29
 
@@ -29,43 +33,48 @@ export class Delete extends Directive {
29
33
  this.discovery = discovery
30
34
  }
31
35
 
32
- public async apply (storage: string, input: Input, parameters: Parameter[]): Promise<Output> {
36
+ public async apply(
37
+ storage: string,
38
+ input: Input,
39
+ parameters: Parameter[]
40
+ ): Promise<Output> {
33
41
  this.storage ??= await this.discovery
34
42
 
35
43
  const output: Output = {}
36
44
 
37
45
  if (this.workflow !== undefined) {
38
- const entry = await this.storage.invoke<Maybe<Entry>>('head',
39
- {
40
- input: {
41
- storage,
42
- path: input.request.url
43
- }
44
- })
46
+ const entry = await this.storage.invoke<Maybe<Entry>>('head', {
47
+ input: {
48
+ storage,
49
+ path: input.request.url
50
+ }
51
+ })
45
52
 
46
- if (entry instanceof Error)
47
- throw new NotFound()
53
+ if (entry instanceof Error) throw new NotFound()
48
54
 
49
55
  output.status = 202
50
56
  output.body = Readable.from(this.execute(input, storage, entry, parameters))
51
- } else
52
- await this.delete(storage, input)
57
+ } else await this.delete(storage, input)
53
58
 
54
59
  return output
55
60
  }
56
61
 
57
- private async delete (storage: string, input: Input): Promise<void> {
58
- await this.storage.invoke('delete',
59
- {
60
- input: {
61
- storage,
62
- path: input.request.url
63
- }
64
- })
62
+ private async delete(storage: string, input: Input): Promise<void> {
63
+ await this.storage.invoke('delete', {
64
+ input: {
65
+ storage,
66
+ path: input.request.url
67
+ }
68
+ })
65
69
  }
66
70
 
67
71
  // eslint-disable-next-line max-params
68
- private async * execute (input: Input, storage: string, entry: Entry, parameters: Parameter[]): AsyncGenerator {
72
+ private async *execute(
73
+ input: Input,
74
+ storage: string,
75
+ entry: Entry,
76
+ parameters: Parameter[]
77
+ ): AsyncGenerator {
69
78
  const location: Location = {
70
79
  storage,
71
80
  authority: input.authority,
@@ -75,8 +84,7 @@ export class Delete extends Directive {
75
84
  for await (const chunk of this.workflow!.execute(location, entry, parameters)) {
76
85
  yield chunk
77
86
 
78
- if (typeof chunk === 'object' && chunk !== null && 'error' in chunk)
79
- return
87
+ if (typeof chunk === 'object' && chunk !== null && 'error' in chunk) return
80
88
  }
81
89
 
82
90
  await this.delete(storage, input)
@@ -6,5 +6,9 @@ export abstract class Directive {
6
6
  public readonly name = 'octets.' + this.constructor.name.toLowerCase()
7
7
  public abstract readonly targeted: boolean
8
8
 
9
- public abstract apply (storage: string, input: Input, parameters: Parameter[]): Promise<io.Output>
9
+ public abstract apply(
10
+ storage: string,
11
+ input: Input,
12
+ parameters: Parameter[]
13
+ ): Promise<io.Output>
10
14
  }
@@ -1,7 +1,7 @@
1
1
  import { Forbidden, NotFound } from '../../HTTP/index.js'
2
2
  import * as schemas from './schemas.js'
3
3
  import { Directive } from './Directive.js'
4
- import type { Maybe } from '@toa.io/core'
4
+ import type { Maybe } from '@toa.io/core/types'
5
5
  import type { Entry, Stream } from '@toa.io/extensions.storages'
6
6
  import type { Component } from '@toa.io/core'
7
7
  import type { Output } from '../../io.js'
@@ -17,7 +17,7 @@ export class Get extends Directive {
17
17
  private readonly discovery: Promise<Component>
18
18
  private storage!: Component
19
19
 
20
- public constructor (options: Options | null, discovery: Promise<Component>) {
20
+ public constructor(options: Options | null, discovery: Promise<Component>) {
21
21
  super()
22
22
 
23
23
  schemas.get.validate(options)
@@ -26,21 +26,17 @@ export class Get extends Directive {
26
26
  this.discovery = discovery
27
27
  }
28
28
 
29
- public async apply (storage: string, input: Input): Promise<Output> {
29
+ public async apply(storage: string, input: Input): Promise<Output> {
30
30
  this.storage ??= await this.discovery
31
31
 
32
32
  if (input.subtype === 'octets.entry')
33
- if (this.options.meta)
34
- return this.head(storage, input)
35
- else
36
- throw new Forbidden('Metadata is not accessible')
37
- else
38
- return await this.get(storage, input)
33
+ if (this.options.meta) return this.head(storage, input)
34
+ else throw new Forbidden('Metadata is not accessible')
35
+ else return await this.get(storage, input)
39
36
  }
40
37
 
41
- private async get (storage: string, input: Input): Promise<Output> {
42
- if ('if-none-match' in input.request.headers)
43
- return { status: 304 }
38
+ private async get(storage: string, input: Input): Promise<Output> {
39
+ if ('if-none-match' in input.request.headers) return { status: 304 }
44
40
 
45
41
  const endpoint = input.request.method === 'GET' ? 'get' : 'head'
46
42
 
@@ -53,21 +49,18 @@ export class Get extends Directive {
53
49
  }
54
50
  })
55
51
 
56
- if (entry instanceof Error)
57
- throw new NotFound()
52
+ if (entry instanceof Error) throw new NotFound()
58
53
 
59
54
  const headers = new Headers({
60
55
  'content-type': entry.type,
61
56
  etag: `"${entry.checksum}"`
62
57
  })
63
58
 
64
- if (entry.range !== undefined)
65
- headers.set('content-range', entry.range)
59
+ if (entry.range !== undefined) headers.set('content-range', entry.range)
66
60
 
67
61
  // an absent content-length is what says the length is unknown; naming the encoding
68
62
  // is redundant over HTTP/1.1 and forbidden over HTTP/2
69
- if (entry.size !== null)
70
- headers.set('content-length', entry.size.toString())
63
+ if (entry.size !== null) headers.set('content-length', entry.size.toString())
71
64
 
72
65
  return {
73
66
  status: entry.partial === true ? 206 : 200,
@@ -76,7 +69,7 @@ export class Get extends Directive {
76
69
  }
77
70
  }
78
71
 
79
- private async head (storage: string, input: Input): Promise<Output> {
72
+ private async head(storage: string, input: Input): Promise<Output> {
80
73
  const entry = await this.storage.invoke<Maybe<Entry>>('head', {
81
74
  input: {
82
75
  storage,
@@ -84,8 +77,7 @@ export class Get extends Directive {
84
77
  }
85
78
  })
86
79
 
87
- if (entry instanceof Error)
88
- throw new NotFound()
80
+ if (entry instanceof Error) throw new NotFound()
89
81
 
90
82
  return { body: entry }
91
83
  }
@@ -17,7 +17,7 @@ export class Octets implements DirectiveFamily<Directive> {
17
17
 
18
18
  private discovery = null as unknown as Promise<Component>
19
19
 
20
- public create (name: string, value: any, remotes: Remotes): Directive {
20
+ public create(name: string, value: any, remotes: Remotes): Directive {
21
21
  const Class = DIRECTIVES[name]
22
22
 
23
23
  if (Class === undefined)
@@ -28,32 +28,33 @@ export class Octets implements DirectiveFamily<Directive> {
28
28
  return new Class(value, this.discovery, remotes)
29
29
  }
30
30
 
31
- public async precall (directives: Directive[], input: Input, parameters: Parameter[]): Promise<Output> {
31
+ public async precall(
32
+ directives: Directive[],
33
+ input: Input,
34
+ parameters: Parameter[]
35
+ ): Promise<Output> {
32
36
  let context: Context | null = null
33
37
  let action: Directive | null = null
34
38
 
35
39
  for (const directive of directives)
36
- if (directive instanceof Context)
37
- context ??= directive
38
- else if (action === null)
39
- action = directive
40
- else
41
- throw new Error('Octets action is ambiguous')
40
+ if (directive instanceof Context) context ??= directive
41
+ else if (action === null) action = directive
42
+ else throw new Error('Octets action is ambiguous')
42
43
 
43
- if (action === null)
44
- return null
44
+ if (action === null) return null
45
45
 
46
46
  // noinspection PointlessBooleanExpressionJS
47
- if (context === null)
48
- throw new Error('Octets context is not defined')
47
+ if (context === null) throw new Error('Octets context is not defined')
49
48
 
50
49
  const targeted = input.request.url[input.request.url.length - 1] !== '/'
51
50
 
52
51
  if (targeted !== action.targeted)
53
- throw new NotFound(`Trailing slash is ${action.targeted ? 'redundant' : 'required'}`)
52
+ throw new NotFound(
53
+ `Trailing slash is ${action.targeted ? 'redundant' : 'required'}`
54
+ )
54
55
 
55
56
  // noinspection JSObjectNullOrUndefined
56
- return await input.timing.capture(action.name, action.apply(context.storage, input, parameters))
57
+ return await action.apply(context.storage, input, parameters)
57
58
  }
58
59
  }
59
60
 
@@ -66,4 +67,8 @@ const DIRECTIVES: Record<string, Constructor> = {
66
67
  workflow: WorkflowDirective
67
68
  }
68
69
 
69
- type Constructor = new (value: any, discovery: Promise<Component>, remotes: Remotes) => Directive
70
+ type Constructor = new (
71
+ value: any,
72
+ discovery: Promise<Component>,
73
+ remotes: Remotes
74
+ ) => Directive
@@ -27,25 +27,33 @@ export class Put extends Directive {
27
27
  private readonly discovery: Record<string, Promise<Component>> = {}
28
28
  private storage: Component | null = null
29
29
 
30
- public constructor (options: Options | null, discovery: Promise<Component>, remotes: Remotes) {
30
+ public constructor(
31
+ options: Options | null,
32
+ discovery: Promise<Component>,
33
+ remotes: Remotes
34
+ ) {
31
35
  super()
32
36
 
33
37
  schemas.put.validate<Options>(options)
34
38
 
35
- this.accept = match(options?.accept,
36
- String, (value: string) => value,
37
- Array, (types: string[]) => types.join(','),
38
- undefined)
39
+ this.accept = match(
40
+ options?.accept,
41
+ String,
42
+ (value: string) => value,
43
+ Array,
44
+ (types: string[]) => types.join(','),
45
+ undefined
46
+ )
39
47
 
40
48
  if (options?.workflow !== undefined)
41
49
  this.workflow = new Workflow(options.workflow, remotes)
42
50
 
43
51
  if (options?.trust !== undefined)
44
52
  this.trust = options.trust.map((value: string) =>
45
- value.startsWith('/') ? new RegExp(value.slice(1, -1)) : value)
53
+ value.startsWith('/') ? new RegExp(value.slice(1, -1)) : value
54
+ )
46
55
 
47
- if (options?.location !== undefined)
48
- this.location = options.location
56
+ if (options?.location !== undefined) this.location = options.location
49
57
 
50
58
  this.limitString = options?.limit ?? '64MiB'
51
59
  this.limit = toBytes(this.limitString)
@@ -55,7 +63,11 @@ export class Put extends Directive {
55
63
  cors.allow('content-location')
56
64
  }
57
65
 
58
- public async apply (storage: string, input: Input, parameters: Parameter[]): Promise<Output> {
66
+ public async apply(
67
+ storage: string,
68
+ input: Input,
69
+ parameters: Parameter[]
70
+ ): Promise<Output> {
59
71
  this.storage ??= await this.discovery.storage
60
72
 
61
73
  const request: StoreRequest = {
@@ -71,22 +83,36 @@ export class Put extends Directive {
71
83
 
72
84
  const entry = await this.storage.invoke<Entry>('put', request)
73
85
 
74
- return match<Output>(entry,
75
- Error, (error: CodedError) => this.throw(error),
76
- () => this.reply(input, storage, entry, parameters))
86
+ return match<Output>(
87
+ entry,
88
+ Error,
89
+ (error: CodedError) => this.throw(error),
90
+ () => this.reply(input, storage, entry, parameters)
91
+ )
77
92
  }
78
93
 
79
94
  // eslint-disable-next-line max-params
80
- private reply (input: Input, storage: string, entry: Entry, parameters: Parameter[]): Output {
81
- const body = this.workflow === undefined
82
- ? entry
83
- : this.execute(input, storage, entry, parameters)
95
+ private reply(
96
+ input: Input,
97
+ storage: string,
98
+ entry: Entry,
99
+ parameters: Parameter[]
100
+ ): Output {
101
+ const body =
102
+ this.workflow === undefined
103
+ ? entry
104
+ : this.execute(input, storage, entry, parameters)
84
105
 
85
106
  return { body }
86
107
  }
87
108
 
88
109
  // eslint-disable-next-line max-params
89
- private execute (input: Input, storage: string, entry: Entry, parameters: Parameter[]): Readable {
110
+ private execute(
111
+ input: Input,
112
+ storage: string,
113
+ entry: Entry,
114
+ parameters: Parameter[]
115
+ ): Readable {
90
116
  const stream = new PassThrough({ objectMode: true })
91
117
 
92
118
  stream.push(entry)
@@ -103,16 +129,25 @@ export class Put extends Directive {
103
129
  return stream
104
130
  }
105
131
 
106
- private throw (error: CodedError): never {
107
- throw match(error.code,
108
- 'NOT_ACCEPTABLE', () => new http.UnsupportedMediaType(),
109
- 'TYPE_MISMATCH', () => new http.BadRequest(),
110
- 'LIMIT_EXCEEDED', () => new http.RequestEntityTooLarge(`Size limit is ${this.limitString}`),
111
- 'LOCATION_UNTRUSTED', () => new http.Forbidden(error.message),
112
- 'LOCATION_LENGTH', () => new http.BadRequest(error.message),
113
- 'LOCATION_UNAVAILABLE', () => new http.NotFound(error.message),
114
- 'INVALID_ID', () => new http.BadRequest(error.message),
115
- error)
132
+ private throw(error: CodedError): never {
133
+ throw match(
134
+ error.code,
135
+ 'NOT_ACCEPTABLE',
136
+ () => new http.UnsupportedMediaType(),
137
+ 'TYPE_MISMATCH',
138
+ () => new http.BadRequest(),
139
+ 'LIMIT_EXCEEDED',
140
+ () => new http.RequestEntityTooLarge(`Size limit is ${this.limitString}`),
141
+ 'LOCATION_UNTRUSTED',
142
+ () => new http.Forbidden(error.message),
143
+ 'LOCATION_LENGTH',
144
+ () => new http.BadRequest(error.message),
145
+ 'LOCATION_UNAVAILABLE',
146
+ () => new http.NotFound(error.message),
147
+ 'INVALID_ID',
148
+ () => new http.BadRequest(error.message),
149
+ error
150
+ )
116
151
  }
117
152
  }
118
153
 
@@ -7,7 +7,7 @@ import type { Input } from './types.js'
7
7
  import type { Component } from '@toa.io/core'
8
8
  import type { Output } from '../../io.js'
9
9
  import type { Remotes } from '../../Remotes.js'
10
- import type { Maybe } from '@toa.io/core'
10
+ import type { Maybe } from '@toa.io/core/types'
11
11
  import type { Entry } from '@toa.io/extensions.storages'
12
12
  import type { Parameter } from '../../RTD/index.js'
13
13
 
@@ -18,7 +18,11 @@ export class WorkflowDirective extends Directive {
18
18
  private readonly discovery: Promise<Component>
19
19
  private storage: Component | null = null
20
20
 
21
- public constructor (units: Unit[] | Unit, discovery: Promise<Component>, remotes: Remotes) {
21
+ public constructor(
22
+ units: Unit[] | Unit,
23
+ discovery: Promise<Component>,
24
+ remotes: Remotes
25
+ ) {
22
26
  super()
23
27
  schemas.workflow.validate(units)
24
28
 
@@ -26,19 +30,21 @@ export class WorkflowDirective extends Directive {
26
30
  this.discovery = discovery
27
31
  }
28
32
 
29
- public async apply (storage: string, input: Input, parameters: Parameter[]): Promise<Output> {
33
+ public async apply(
34
+ storage: string,
35
+ input: Input,
36
+ parameters: Parameter[]
37
+ ): Promise<Output> {
30
38
  this.storage ??= await this.discovery
31
39
 
32
- const entry = await this.storage.invoke<Maybe<Entry>>('head',
33
- {
34
- input: {
35
- storage,
36
- path: input.request.url
37
- }
38
- })
40
+ const entry = await this.storage.invoke<Maybe<Entry>>('head', {
41
+ input: {
42
+ storage,
43
+ path: input.request.url
44
+ }
45
+ })
39
46
 
40
- if (entry instanceof Error)
41
- throw new NotFound()
47
+ if (entry instanceof Error) throw new NotFound()
42
48
 
43
49
  const location: Location = {
44
50
  storage,
@@ -1,6 +1,6 @@
1
1
  import assert from 'node:assert'
2
2
 
3
- export function toBytes (input: string): number {
3
+ export function toBytes(input: string): number {
4
4
  const match = RX.exec(input)
5
5
 
6
6
  assert.ok(match !== null, `Invalid bytes format: ${input}`)
@@ -4,23 +4,17 @@ import assert from 'node:assert/strict'
4
4
  import * as schemas from './schemas.js'
5
5
 
6
6
  describe('workflow', () => {
7
- const ok = [
8
- { echo: 'hello world' },
9
- [{ echo: 'hello world' }, { ok: 'ok' }]
10
- ]
7
+ const ok = [{ echo: 'hello world' }, [{ echo: 'hello world' }, { ok: 'ok' }]]
11
8
 
12
- const oh = [
13
- { echo: [] },
14
- { echo: 'hello world', ok: { not: 'ok' } }
15
- ]
9
+ const oh = [{ echo: [] }, { echo: 'hello world', ok: { not: 'ok' } }]
16
10
 
17
11
  for (const workflow of ok)
18
- it('should be valid', () => {
19
- assert.doesNotThrow(() => schemas.workflow.validate(workflow))
20
- })
12
+ it('should be valid', () => {
13
+ assert.doesNotThrow(() => schemas.workflow.validate(workflow))
14
+ })
21
15
 
22
16
  for (const workflow of oh)
23
- it('should not be valid', () => {
24
- assert.throws(() => schemas.workflow.validate(workflow))
25
- })
17
+ it('should not be valid', () => {
18
+ assert.throws(() => schemas.workflow.validate(workflow))
19
+ })
26
20
  })
@@ -3,7 +3,7 @@ import { console } from 'openspan'
3
3
  import type { Unit } from './Workflow.js'
4
4
  import type { Remotes } from '../../../Remotes.js'
5
5
  import type { Component } from '@toa.io/core'
6
- import type { Maybe } from '@toa.io/core'
6
+ import type { Maybe } from '@toa.io/core/types'
7
7
  import type { Entry } from '@toa.io/extensions.storages'
8
8
 
9
9
  export class Execution extends Readable {
@@ -14,7 +14,7 @@ export class Execution extends Readable {
14
14
  private readonly discovery: Record<string, Promise<Component>> = {}
15
15
  private interrupted = false
16
16
 
17
- public constructor (context: Context, units: Unit[], remotes: Remotes) {
17
+ public constructor(context: Context, units: Unit[], remotes: Remotes) {
18
18
  super({ objectMode: true })
19
19
 
20
20
  this.context = context
@@ -24,27 +24,24 @@ export class Execution extends Readable {
24
24
  void this.run()
25
25
  }
26
26
 
27
- public override _read (): void {
28
- }
27
+ public override _read(): void {}
29
28
 
30
- private async run (): Promise<void> {
29
+ private async run(): Promise<void> {
31
30
  for (const unit of this.units) {
32
31
  await this.execute(unit)
33
32
 
34
- if (this.interrupted)
35
- break
33
+ if (this.interrupted) break
36
34
  }
37
35
 
38
36
  this.push(null)
39
37
  }
40
38
 
41
- private async execute (unit: Unit): Promise<void> {
39
+ private async execute(unit: Unit): Promise<void> {
42
40
  const promises = Object.entries(unit).map(async ([step, endpoint]) => {
43
41
  try {
44
42
  const result = await this.call(endpoint)
45
43
 
46
- if (result instanceof Readable)
47
- return await this.stream(step, result)
44
+ if (result instanceof Readable) return await this.stream(step, result)
48
45
 
49
46
  this.report(step, result)
50
47
  } catch (e: unknown) {
@@ -55,10 +52,9 @@ export class Execution extends Readable {
55
52
  await Promise.all(promises)
56
53
  }
57
54
 
58
- private async stream (step: string, stream: Readable): Promise<void> {
55
+ private async stream(step: string, stream: Readable): Promise<void> {
59
56
  try {
60
- for await (const result of stream)
61
- this.report(step, result, false)
57
+ for await (const result of stream) this.report(step, result, false)
62
58
 
63
59
  this.report(step, undefined, true)
64
60
  } catch (e: unknown) {
@@ -66,11 +62,10 @@ export class Execution extends Readable {
66
62
  }
67
63
  }
68
64
 
69
- private report (step: string, result?: Maybe<unknown>, completed = true): void {
65
+ private report(step: string, result?: Maybe<unknown>, completed = true): void {
70
66
  const report: Report = { step }
71
67
 
72
- if (completed)
73
- report.status = 'completed'
68
+ if (completed) report.status = 'completed'
74
69
 
75
70
  if (result instanceof Error) {
76
71
  // an Error cannot be serialized where it sits, and the encoders only unwrap
@@ -85,18 +80,17 @@ export class Execution extends Readable {
85
80
  this.push(report)
86
81
  }
87
82
 
88
- private exception (step: string, error: unknown): void {
83
+ private exception(step: string, error: unknown): void {
89
84
  console.error('Workflow exception', error as Error)
90
85
 
91
86
  this.push({ step, status: 'exception' } satisfies Report)
92
87
  this.interrupted = true
93
88
  }
94
89
 
95
- private async call (endpoint: string): Promise<Maybe<unknown>> {
90
+ private async call(endpoint: string): Promise<Maybe<unknown>> {
96
91
  const task = endpoint.startsWith('task:')
97
92
 
98
- if (task)
99
- endpoint = endpoint.slice(5)
93
+ if (task) endpoint = endpoint.slice(5)
100
94
 
101
95
  const [operation, component, namespace = 'default'] = endpoint.split('.').reverse()
102
96
  const key = `${namespace}.${component}`
@@ -106,7 +100,11 @@ export class Execution extends Readable {
106
100
  return this.components[key].invoke(operation, { input: this.context, task })
107
101
  }
108
102
 
109
- private async discover (key: string, namespace: string, component: string): Promise<Component> {
103
+ private async discover(
104
+ key: string,
105
+ namespace: string,
106
+ component: string
107
+ ): Promise<Component> {
110
108
  if (this.discovery[key] === undefined)
111
109
  this.discovery[key] = this.remotes.discover(namespace, component)
112
110
 
@@ -10,19 +10,22 @@ export class Workflow {
10
10
  private readonly units: Unit[]
11
11
  private readonly remotes: Remotes
12
12
 
13
- public constructor (units: Unit[] | Unit, remotes: Remotes) {
14
- this.units = match<Unit[]>(units,
15
- Array, (units: Unit[]) => units,
16
- Object, (unit: Unit) => [unit])
13
+ public constructor(units: Unit[] | Unit, remotes: Remotes) {
14
+ this.units = match<Unit[]>(
15
+ units,
16
+ Array,
17
+ (units: Unit[]) => units,
18
+ Object,
19
+ (unit: Unit) => [unit]
20
+ )
17
21
 
18
22
  this.remotes = remotes
19
23
  }
20
24
 
21
- public execute (location: Location, entry: Entry, params: Parameter[]): Execution {
25
+ public execute(location: Location, entry: Entry, params: Parameter[]): Execution {
22
26
  const parameters: Record<string, string> = {}
23
27
 
24
- for (const { name, value } of params)
25
- parameters[name] = value
28
+ for (const { name, value } of params) parameters[name] = value
26
29
 
27
30
  const context: Context = {
28
31
  authority: location.authority,
@@ -5,14 +5,13 @@ import type { Directive } from './Directive.js'
5
5
  export class Headers implements Directive {
6
6
  private readonly headers: string[]
7
7
 
8
- public constructor (headers: string[]) {
9
- if (!Array.isArray(headers))
10
- headers = [headers]
8
+ public constructor(headers: string[]) {
9
+ if (!Array.isArray(headers)) headers = [headers]
11
10
 
12
11
  this.headers = headers
13
12
  }
14
13
 
15
- public precall (context: Input): void {
14
+ public precall(context: Input): void {
16
15
  for (const header of this.headers)
17
16
  if (context.request.headers[header] === undefined)
18
17
  throw new BadRequest(`Header required: ${header}`)