@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
@@ -3,18 +3,27 @@ import assert from 'node:assert/strict'
3
3
 
4
4
  import * as http from '../HTTP/index.js'
5
5
  import {
6
- FORBIDDEN, INTERNAL, INVALID_PARAMS, METHOD_NOT_FOUND, REFUSED, of
6
+ FORBIDDEN,
7
+ INTERNAL,
8
+ INVALID_PARAMS,
9
+ METHOD_NOT_FOUND,
10
+ REFUSED,
11
+ of
7
12
  } from './errors.js'
8
13
 
9
14
  describe('of', () => {
10
15
  it('should read a missing route as a missing method', () => {
11
- assert.deepEqual(of(new http.NotFound('pots/_id/FETCH names no method')),
12
- { code: METHOD_NOT_FOUND, message: 'pots/_id/FETCH names no method' })
16
+ assert.deepEqual(of(new http.NotFound('pots/_id/FETCH names no method')), {
17
+ code: METHOD_NOT_FOUND,
18
+ message: 'pots/_id/FETCH names no method'
19
+ })
13
20
  })
14
21
 
15
22
  it('should read a verb the node does not declare as a missing method', () => {
16
- assert.deepEqual(of(new http.MethodNotAllowed()),
17
- { code: METHOD_NOT_FOUND, message: 'Method not found' })
23
+ assert.deepEqual(of(new http.MethodNotAllowed()), {
24
+ code: METHOD_NOT_FOUND,
25
+ message: 'Method not found'
26
+ })
18
27
  })
19
28
 
20
29
  it('should read a refused authorization as forbidden', () => {
@@ -22,31 +31,47 @@ describe('of', () => {
22
31
  })
23
32
 
24
33
  it('should read a bad request as invalid params', () => {
25
- assert.deepEqual(of(new http.BadRequest('Query limit must be between 1 and 100')),
26
- { code: INVALID_PARAMS, message: 'Query limit must be between 1 and 100' })
34
+ assert.deepEqual(of(new http.BadRequest('Query limit must be between 1 and 100')), {
35
+ code: INVALID_PARAMS,
36
+ message: 'Query limit must be between 1 and 100'
37
+ })
27
38
  })
28
39
 
29
40
  it('should carry the code an operation refused with', () => {
30
- const error = Object.assign(new Error(), { code: 'WONT_CREATE', message: 'Volume is out of range' })
41
+ const error = Object.assign(new Error(), {
42
+ code: 'WONT_CREATE',
43
+ message: 'Volume is out of range'
44
+ })
31
45
 
32
- assert.deepEqual(of(new http.UnprocessableEntity(error)),
33
- { code: REFUSED, message: 'Volume is out of range', data: { code: 'WONT_CREATE' } })
46
+ assert.deepEqual(of(new http.UnprocessableEntity(error)), {
47
+ code: REFUSED,
48
+ message: 'Volume is out of range',
49
+ data: { code: 'WONT_CREATE' }
50
+ })
34
51
  })
35
52
 
36
53
  it('should stand the code in for a message the operation did not declare', () => {
37
54
  const error = Object.assign(new Error(), { code: 'WONT_CREATE' })
38
55
 
39
- assert.deepEqual(of(new http.UnprocessableEntity(error)),
40
- { code: REFUSED, message: 'WONT_CREATE', data: { code: 'WONT_CREATE' } })
56
+ assert.deepEqual(of(new http.UnprocessableEntity(error)), {
57
+ code: REFUSED,
58
+ message: 'WONT_CREATE',
59
+ data: { code: 'WONT_CREATE' }
60
+ })
41
61
  })
42
62
 
43
63
  it('should say what any other client error was refused with', () => {
44
- assert.deepEqual(of(new http.Conflict()),
45
- { code: REFUSED, message: 'Refused', data: { status: 409 } })
64
+ assert.deepEqual(of(new http.Conflict()), {
65
+ code: REFUSED,
66
+ message: 'Refused',
67
+ data: { status: 409 }
68
+ })
46
69
  })
47
70
 
48
71
  it('should say nothing of what it did not mean to answer', () => {
49
- assert.deepEqual(of(new Error('the connection dropped')),
50
- { code: INTERNAL, message: 'Internal error' })
72
+ assert.deepEqual(of(new Error('the connection dropped')), {
73
+ code: INTERNAL,
74
+ message: 'Internal error'
75
+ })
51
76
  })
52
77
  })
@@ -20,16 +20,15 @@ export const FORBIDDEN = -32000
20
20
  export const REFUSED = -32001
21
21
  export const BATCH_TOO_LARGE = -32002
22
22
 
23
- export function failure (code: number, message: string, data?: unknown): Failure {
23
+ export function failure(code: number, message: string, data?: unknown): Failure {
24
24
  const value: Failure = { code, message }
25
25
 
26
- if (data !== undefined)
27
- value.data = data
26
+ if (data !== undefined) value.data = data
28
27
 
29
28
  return value
30
29
  }
31
30
 
32
- export function response (id: string | number | null, error: Failure): Response {
31
+ export function response(id: string | number | null, error: Failure): Response {
33
32
  return { jsonrpc: VERSION, id, error }
34
33
  }
35
34
 
@@ -39,9 +38,8 @@ export function response (id: string | number | null, error: Failure): Response
39
38
  * The readable text is `body`, never `message`: `http.Exception` calls `super()` with no
40
39
  * argument, so every one of them carries an empty `message`.
41
40
  */
42
- export function of (exception: unknown): Failure {
43
- if (exception instanceof http.UnprocessableEntity)
44
- return refusal(exception)
41
+ export function of(exception: unknown): Failure {
42
+ if (exception instanceof http.UnprocessableEntity) return refusal(exception)
45
43
 
46
44
  if (exception instanceof http.NotFound || exception instanceof http.MethodNotAllowed)
47
45
  return failure(METHOD_NOT_FOUND, text(exception, 'Method not found'))
@@ -64,19 +62,20 @@ export function of (exception: unknown): Failure {
64
62
  * reply contract states `{ code, message? }` — the message optional. The number says the
65
63
  * operation refused; `data.code` says what it refused with, and is what a caller branches on.
66
64
  */
67
- function refusal (exception: http.UnprocessableEntity): Failure {
65
+ function refusal(exception: http.UnprocessableEntity): Failure {
68
66
  const body = exception.body
69
67
 
70
68
  if (typeof body !== 'object' || body === null || typeof body.code !== 'string')
71
69
  return failure(REFUSED, text(exception, 'Refused'))
72
70
 
73
71
  const code = body.code as string
74
- const message = typeof body.message === 'string' && body.message !== '' ? body.message : code
72
+ const message =
73
+ typeof body.message === 'string' && body.message !== '' ? body.message : code
75
74
 
76
75
  return failure(REFUSED, message, { code })
77
76
  }
78
77
 
79
- function text (exception: http.Exception, fallback: string): string {
78
+ function text(exception: http.Exception, fallback: string): string {
80
79
  return typeof exception.body === 'string' && exception.body !== ''
81
80
  ? exception.body
82
81
  : fallback
@@ -7,33 +7,47 @@ import { address, name, refusal } from './names.js'
7
7
 
8
8
  describe('address', () => {
9
9
  it('should resolve a name without variables', () => {
10
- assert.deepEqual(address('pots.GET', {}),
11
- { path: '/pots/', verb: 'GET', variables: [] })
10
+ assert.deepEqual(address('pots.GET', {}), {
11
+ path: '/pots/',
12
+ verb: 'GET',
13
+ variables: []
14
+ })
12
15
  })
13
16
 
14
17
  it('should resolve the trunk', () => {
15
- assert.deepEqual(address('GET', {}),
16
- { path: '/', verb: 'GET', variables: [] })
18
+ assert.deepEqual(address('GET', {}), { path: '/', verb: 'GET', variables: [] })
17
19
  })
18
20
 
19
21
  it('should substitute a variable and report it taken', () => {
20
- assert.deepEqual(address('pots._id.GET', { id: 'a1b2', title: 'Kettle' }),
21
- { path: '/pots/a1b2/', verb: 'GET', variables: ['id'] })
22
+ assert.deepEqual(address('pots._id.GET', { id: 'a1b2', title: 'Kettle' }), {
23
+ path: '/pots/a1b2/',
24
+ verb: 'GET',
25
+ variables: ['id']
26
+ })
22
27
  })
23
28
 
24
29
  it('should substitute every variable', () => {
25
- assert.deepEqual(address('users._user.pots._id.PATCH', { user: 'bob', id: 'a1b2' }),
26
- { path: '/users/bob/pots/a1b2/', verb: 'PATCH', variables: ['user', 'id'] })
30
+ assert.deepEqual(address('users._user.pots._id.PATCH', { user: 'bob', id: 'a1b2' }), {
31
+ path: '/users/bob/pots/a1b2/',
32
+ verb: 'PATCH',
33
+ variables: ['user', 'id']
34
+ })
27
35
  })
28
36
 
29
37
  it('should let a tail carry separators', () => {
30
- assert.deepEqual(address('files.__.GET', { '**': 'a/b/c' }),
31
- { path: '/files/a/b/c/', verb: 'GET', variables: ['**'] })
38
+ assert.deepEqual(address('files.__.GET', { '**': 'a/b/c' }), {
39
+ path: '/files/a/b/c/',
40
+ verb: 'GET',
41
+ variables: ['**']
42
+ })
32
43
  })
33
44
 
34
45
  it('should not confuse a trailing literal with a verb', () => {
35
- assert.deepEqual(address('pots.GET.POST', {}),
36
- { path: '/pots/GET/', verb: 'POST', variables: [] })
46
+ assert.deepEqual(address('pots.GET.POST', {}), {
47
+ path: '/pots/GET/',
48
+ verb: 'POST',
49
+ variables: []
50
+ })
37
51
  })
38
52
 
39
53
  it('should refuse a name that states no verb', () => {
@@ -81,8 +95,10 @@ describe('name', () => {
81
95
 
82
96
  it('should mark a variable', () => {
83
97
  assert.equal(name(segment('/pots/:id'), 'GET'), 'pots._id.GET')
84
- assert.equal(name(segment('/identity/tokens/:identity'), 'POST'),
85
- 'identity.tokens._identity.POST')
98
+ assert.equal(
99
+ name(segment('/identity/tokens/:identity'), 'POST'),
100
+ 'identity.tokens._identity.POST'
101
+ )
86
102
  })
87
103
 
88
104
  it('should mark a tail', () => {
@@ -103,8 +119,11 @@ describe('name', () => {
103
119
  it('should round-trip what it names', () => {
104
120
  const named = name(segment('/pots/:id'), 'GET')!
105
121
 
106
- assert.deepEqual(address(named, { id: 'a1b2' }),
107
- { path: '/pots/a1b2/', verb: 'GET', variables: ['id'] })
122
+ assert.deepEqual(address(named, { id: 'a1b2' }), {
123
+ path: '/pots/a1b2/',
124
+ verb: 'GET',
125
+ variables: ['id']
126
+ })
108
127
  })
109
128
  })
110
129
 
@@ -19,12 +19,11 @@ export interface Address {
19
19
  variables: string[]
20
20
  }
21
21
 
22
- export function address (method: string, params: Params): Address {
22
+ export function address(method: string, params: Params): Address {
23
23
  const parts = method.split(SEPARATOR)
24
24
  const verb = parts.pop()!
25
25
 
26
- if (!verbs.has(verb))
27
- throw new http.NotFound(`'${method}' names no method`)
26
+ if (!verbs.has(verb)) throw new http.NotFound(`'${method}' names no method`)
28
27
 
29
28
  const variables: string[] = []
30
29
  const fragments: string[] = []
@@ -66,13 +65,15 @@ export function address (method: string, params: Params): Address {
66
65
  * What the call carries, as a request carries it: the path took its variables, `query` is
67
66
  * the querystring, and the rest is the body.
68
67
  */
69
- export function split (params: Params, variables: string[]): { query?: Params, input?: Params } {
68
+ export function split(
69
+ params: Params,
70
+ variables: string[]
71
+ ): { query?: Params; input?: Params } {
70
72
  const input: Params = {}
71
73
  let query: Params | undefined
72
74
 
73
75
  for (const [key, value] of Object.entries(params)) {
74
- if (variables.includes(key))
75
- continue
76
+ if (variables.includes(key)) continue
76
77
 
77
78
  if (key !== QUERY) {
78
79
  input[key] = value
@@ -91,30 +92,27 @@ export function split (params: Params, variables: string[]): { query?: Params, i
91
92
  }
92
93
 
93
94
  /** The parameter a part reads, or nothing where the part is a literal segment. */
94
- function parameter (part: string): string | null {
95
- if (part === TAIL)
96
- return WILDCARD
95
+ function parameter(part: string): string | null {
96
+ if (part === TAIL) return WILDCARD
97
97
 
98
98
  return part[0] === VARIABLE ? part.slice(1) : null
99
99
  }
100
100
 
101
101
  /** A segment a name cannot spell is a segment no name has, so this one names nothing. */
102
- function literal (part: string, method: string): string {
103
- if (!NAMEABLE.test(part))
104
- throw new http.NotFound(`'${method}' names no procedure`)
102
+ function literal(part: string, method: string): string {
103
+ if (!NAMEABLE.test(part)) throw new http.NotFound(`'${method}' names no procedure`)
105
104
 
106
105
  return part
107
106
  }
108
107
 
109
108
  /** The name of a method on this route, or nothing where the route has none. */
110
- export function name (segments: Segment[], verb: string): string | null {
109
+ export function name(segments: Segment[], verb: string): string | null {
111
110
  const parts: string[] = []
112
111
 
113
112
  for (const segment of segments) {
114
113
  const part = component(segment)
115
114
 
116
- if (part === null)
117
- return null
115
+ if (part === null) return null
118
116
 
119
117
  parts.push(part)
120
118
  }
@@ -125,39 +123,34 @@ export function name (segments: Segment[], verb: string): string | null {
125
123
  }
126
124
 
127
125
  /** The segment that leaves a route unnameable, as it was declared, or nothing where none does. */
128
- export function refusal (segments: Segment[]): string | null {
126
+ export function refusal(segments: Segment[]): string | null {
129
127
  for (const segment of segments)
130
- if (component(segment) === null)
131
- return declared(segment)
128
+ if (component(segment) === null) return declared(segment)
132
129
 
133
130
  return null
134
131
  }
135
132
 
136
- function component (segment: Segment): string | null {
133
+ function component(segment: Segment): string | null {
137
134
  if (segment.fragment !== null)
138
135
  return NAMEABLE.test(segment.fragment) ? segment.fragment : null
139
136
 
140
- if (segment.wildcard === true)
141
- return TAIL
137
+ if (segment.wildcard === true) return TAIL
142
138
 
143
139
  // it stands for a segment the caller cannot name, so there is nothing to substitute
144
- if (segment.placeholder === null)
145
- return null
140
+ if (segment.placeholder === null) return null
146
141
 
147
142
  return NAMEABLE.test(segment.placeholder) ? VARIABLE + segment.placeholder : null
148
143
  }
149
144
 
150
145
  /** The route as it was declared, which is how a message about it should read. */
151
- export function template (segments: Segment[]): string {
146
+ export function template(segments: Segment[]): string {
152
147
  return '/' + segments.map(declared).join('/')
153
148
  }
154
149
 
155
- function declared (segment: Segment): string {
156
- if (segment.fragment !== null)
157
- return segment.fragment
150
+ function declared(segment: Segment): string {
151
+ if (segment.fragment !== null) return segment.fragment
158
152
 
159
- if (segment.wildcard === true)
160
- return '**'
153
+ if (segment.wildcard === true) return '**'
161
154
 
162
155
  return segment.placeholder === null ? '*' : ':' + segment.placeholder
163
156
  }
@@ -3,7 +3,7 @@ import type * as syntax from './syntax/index.js'
3
3
  import type { Context, OutgoingMessage, Options } from '../HTTP/index.js'
4
4
  import type { Output } from '../io.js'
5
5
  import type { Introspection } from '../Introspection.js'
6
- import type { extensions } from '@toa.io/core'
6
+ import type { extensions } from '@toa.io/core/types'
7
7
 
8
8
  type Host = extensions.Host
9
9
 
@@ -18,7 +18,10 @@ export interface Directives {
18
18
  precall: (context: Context, parameters: Parameter[]) => Promise<Output>
19
19
 
20
20
  /** What this route's directives make of what its method says about itself. */
21
- explain: (context: Context, introspection: Introspection) => Promise<Introspection | null>
21
+ explain: (
22
+ context: Context,
23
+ introspection: Introspection
24
+ ) => Promise<Introspection | null>
22
25
  settle: (context: Context, response: OutgoingMessage) => Promise<void>
23
26
  dispose: () => void
24
27
  }
@@ -71,9 +74,11 @@ export interface DirectiveFamily<TDirective = any, TExtension = any> {
71
74
  preflight?: (request: Context & TExtension) => void | Promise<void>
72
75
 
73
76
  /** Call-scoped, with what the node declares. Runs once per call. */
74
- precall?: (directives: TDirective[],
77
+ precall?: (
78
+ directives: TDirective[],
75
79
  request: Context & TExtension,
76
- parameters: Parameter[]) => Output | Promise<Output>
80
+ parameters: Parameter[]
81
+ ) => Output | Promise<Output>
77
82
 
78
83
  /**
79
84
  * What this family's directives make of what the method says about itself, which is
@@ -84,22 +89,28 @@ export interface DirectiveFamily<TDirective = any, TExtension = any> {
84
89
  * is why no parameters are passed — so a directive that can only tell from one hands back
85
90
  * what it was given.
86
91
  */
87
- explain?: (directives: TDirective[],
92
+ explain?: (
93
+ directives: TDirective[],
88
94
  request: Context & TExtension,
89
- introspection: Introspection) => Introspection | null | Promise<Introspection | null>
95
+ introspection: Introspection
96
+ ) => Introspection | null | Promise<Introspection | null>
90
97
 
91
98
  /** Call-scoped, on the message that call produced. */
92
- settle?: (directives: TDirective[],
99
+ settle?: (
100
+ directives: TDirective[],
93
101
  request: Context & TExtension,
94
- response: OutgoingMessage) => void | Promise<void>
102
+ response: OutgoingMessage
103
+ ) => void | Promise<void>
95
104
 
96
105
  /**
97
106
  * Request-scoped, on the message going back — the counterpart of `preflight`, and
98
107
  * likewise without directives. A reply the whole request carries, such as a re-issued
99
108
  * credential, is written here rather than by a call that would not own it.
100
109
  */
101
- depart?: (request: Context & TExtension,
102
- response: OutgoingMessage) => void | Promise<void>
110
+ depart?: (
111
+ request: Context & TExtension,
112
+ response: OutgoingMessage
113
+ ) => void | Promise<void>
103
114
 
104
115
  dispose?: (directives: TDirective[]) => void
105
116
  }
@@ -5,7 +5,10 @@ import type * as RTD from './index.js'
5
5
  import type { Introspection } from '../Introspection.js'
6
6
 
7
7
  export interface Endpoint {
8
- call: (context: http.Context, parameters: RTD.Parameter[]) => Promise<http.OutgoingMessage>
8
+ call: (
9
+ context: http.Context,
10
+ parameters: RTD.Parameter[]
11
+ ) => Promise<http.OutgoingMessage>
9
12
 
10
13
  explain: (parameters: RTD.Parameter[]) => Promise<Introspection>
11
14
 
@@ -9,7 +9,7 @@ export class Method {
9
9
  public readonly endpoint: Endpoint | null
10
10
  public readonly directives: Directives
11
11
 
12
- public constructor (endpoint: Endpoint | null, directives: Directives) {
12
+ public constructor(endpoint: Endpoint | null, directives: Directives) {
13
13
  this.endpoint = endpoint
14
14
  this.directives = directives
15
15
  }
@@ -19,17 +19,19 @@ export class Method {
19
19
  * refuse this caller. A method of no endpoint — one a directive answers on its own —
20
20
  * states nothing of its own, and its directives still have their say.
21
21
  */
22
- public async explain (context: Context, parameters: Parameter[]): Promise<Introspection | null> {
23
- const introspection = this.endpoint === null
24
- ? {}
25
- : await this.endpoint.explain(parameters)
22
+ public async explain(
23
+ context: Context,
24
+ parameters: Parameter[]
25
+ ): Promise<Introspection | null> {
26
+ const introspection =
27
+ this.endpoint === null ? {} : await this.endpoint.explain(parameters)
26
28
 
27
29
  const described = await this.directives.explain(context, introspection)
28
30
 
29
31
  return described === null ? null : order(described)
30
32
  }
31
33
 
32
- public async close (): Promise<void> {
34
+ public async close(): Promise<void> {
33
35
  await this.endpoint?.close()
34
36
  }
35
37
  }
@@ -13,7 +13,7 @@ export class Node {
13
13
  private readonly protected: boolean
14
14
  private routes: Route[]
15
15
 
16
- public constructor (routes: Route[], methods: Methods, properties: Properties) {
16
+ public constructor(routes: Route[], methods: Methods, properties: Properties) {
17
17
  this.routes = routes
18
18
  this.methods = methods
19
19
  this.protected = properties.protected
@@ -24,13 +24,16 @@ export class Node {
24
24
  this.sort()
25
25
  }
26
26
 
27
- public match (fragments: string[], parameters: Parameter[] = []): Match | null {
27
+ public match(fragments: string[], parameters: Parameter[] = []): Match | null {
28
+ // a route only pushes, so what a failed one added is cut off rather than the array copied
29
+ const mark = parameters.length
30
+
28
31
  for (const route of this.routes) {
29
- const params = parameters.slice()
30
- const match = route.match(fragments, params)
32
+ const match = route.match(fragments, parameters)
33
+
34
+ if (match !== null) return match
31
35
 
32
- if (match !== null)
33
- return match
36
+ parameters.length = mark
34
37
  }
35
38
 
36
39
  return null
@@ -40,7 +43,7 @@ export class Node {
40
43
  * Returns the nodes the merged branch has landed on, so that its expiration
41
44
  * can later be extended without rebuilding anything.
42
45
  */
43
- public merge (node: Node): Node[] {
46
+ public merge(node: Node): Node[] {
44
47
  this.intermediate = node.intermediate
45
48
 
46
49
  const nodes = this.protected ? this.append(node) : this.replace(node)
@@ -50,9 +53,8 @@ export class Node {
50
53
  return nodes
51
54
  }
52
55
 
53
- public touch (expiration: number): void {
54
- if (!this.protected)
55
- this.expiration = expiration
56
+ public touch(expiration: number): void {
57
+ if (!this.protected) this.expiration = expiration
56
58
  }
57
59
 
58
60
  /**
@@ -62,33 +64,34 @@ export class Node {
62
64
  * answers at the same place and is reached instead. The trunk is the exception `match`
63
65
  * makes for it — `'/'` answers the trunk itself, whatever it holds.
64
66
  */
65
- public * walk (segments: Segment[], trunk = false): Generator<Mount> {
67
+ public *walk(segments: Segment[], trunk = false): Generator<Mount> {
66
68
  if (trunk || !this.intermediate)
67
69
  for (const [verb, method] of Object.entries(this.methods))
68
70
  yield { segments, verb, method }
69
71
 
70
- for (const route of this.routes)
71
- yield * route.walk(segments)
72
+ for (const route of this.routes) yield* route.walk(segments)
72
73
  }
73
74
 
74
75
  /** Every method of this node that this caller may reach, in the order they were declared. */
75
- public async explain (context: Context,
76
- parameters: Parameter[]): Promise<Record<string, Introspection>> {
76
+ public async explain(
77
+ context: Context,
78
+ parameters: Parameter[]
79
+ ): Promise<Record<string, Introspection>> {
77
80
  const entries = Object.entries(this.methods)
78
81
 
79
- const explained = await Promise.all(entries
80
- .map(async ([, method]) => await method.explain(context, parameters)))
82
+ const explained = await Promise.all(
83
+ entries.map(async ([, method]) => await method.explain(context, parameters))
84
+ )
81
85
 
82
86
  const methods: Record<string, Introspection> = {}
83
87
 
84
88
  for (let i = 0; i < entries.length; i++)
85
- if (explained[i] !== null)
86
- methods[entries[i][0]] = explained[i]!
89
+ if (explained[i] !== null) methods[entries[i][0]] = explained[i]!
87
90
 
88
91
  return methods
89
92
  }
90
93
 
91
- private replace (node: Node): Node[] {
94
+ private replace(node: Node): Node[] {
92
95
  const methods = Object.values(this.methods)
93
96
 
94
97
  this.routes = node.routes
@@ -97,44 +100,39 @@ export class Node {
97
100
  this.forward = node.forward
98
101
 
99
102
  // race condition is really unlikely
100
- for (const method of methods)
101
- void method.close()
103
+ for (const method of methods) void method.close()
102
104
 
103
105
  return this.nodes()
104
106
  }
105
107
 
106
- private append (node: Node): Node[] {
108
+ private append(node: Node): Node[] {
107
109
  const nodes: Node[] = []
108
110
 
109
- for (const route of node.routes)
110
- nodes.push(...this.route(route))
111
+ for (const route of node.routes) nodes.push(...this.route(route))
111
112
 
112
- for (const [verb, method] of Object.entries(node.methods))
113
- this.methods[verb] = method
113
+ for (const [verb, method] of Object.entries(node.methods)) this.methods[verb] = method
114
114
 
115
115
  return nodes
116
116
  }
117
117
 
118
- private route (candidate: Route): Node[] {
118
+ private route(candidate: Route): Node[] {
119
119
  for (const route of this.routes)
120
- if (candidate.equals(route))
121
- return route.merge(candidate)
120
+ if (candidate.equals(route)) return route.merge(candidate)
122
121
 
123
122
  this.routes.push(candidate)
124
123
 
125
124
  return candidate.node.nodes()
126
125
  }
127
126
 
128
- private nodes (): Node[] {
127
+ private nodes(): Node[] {
129
128
  const nodes: Node[] = [this]
130
129
 
131
- for (const route of this.routes)
132
- nodes.push(...route.node.nodes())
130
+ for (const route of this.routes) nodes.push(...route.node.nodes())
133
131
 
134
132
  return nodes
135
133
  }
136
134
 
137
- private sort (): void {
135
+ private sort(): void {
138
136
  this.routes.sort((a, b) => {
139
137
  return a.variables === b.variables
140
138
  ? b.segments.length - a.segments.length // routes with more segments should be matched first