@toa.io/extensions.exposition 1.0.0-alpha.284 → 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 (620) 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 +23 -17
  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 +45 -31
  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/mcp.feature +32 -28
  223. package/features/oauth.grants.feature +1 -1
  224. package/features/octets.cloudinary.feature +1 -1
  225. package/features/octets.download.feature +1 -0
  226. package/features/require.feature +1 -2
  227. package/features/rpc.feature +21 -21
  228. package/features/steps/Captures.ts +1 -1
  229. package/features/steps/Cloudinary.ts +1 -2
  230. package/features/steps/Common.ts +4 -5
  231. package/features/steps/Components.ts +17 -12
  232. package/features/steps/Database.ts +42 -23
  233. package/features/steps/Gateway.ts +55 -71
  234. package/features/steps/HTTP.ts +12 -15
  235. package/features/steps/IDP.ts +118 -94
  236. package/features/steps/Identity.ts +3 -3
  237. package/features/steps/OTP.ts +3 -3
  238. package/features/steps/Parameters.ts +20 -10
  239. package/features/steps/Probe.ts +9 -7
  240. package/features/steps/Realtime.ts +40 -22
  241. package/features/steps/Workspace.ts +10 -7
  242. package/features/steps/components/audit/operations/record.js +1 -1
  243. package/features/steps/components/echo/operations/affect.js +1 -1
  244. package/features/steps/components/echo/operations/compute.js +1 -1
  245. package/features/steps/components/echo/operations/echo.js +1 -1
  246. package/features/steps/components/echo/operations/error.js +1 -1
  247. package/features/steps/components/echo/operations/identity.js +1 -1
  248. package/features/steps/components/echo/operations/parameters.js +1 -1
  249. package/features/steps/components/echo/operations/ping.js +1 -1
  250. package/features/steps/components/echo/operations/unwrap.js +1 -1
  251. package/features/steps/components/greeter/operations/greet.js +1 -1
  252. package/features/steps/components/notify/operations/send.js +1 -1
  253. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  254. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  255. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  256. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  257. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  258. package/features/steps/components/octets.tester/operations/err.js +1 -1
  259. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  260. package/features/steps/components/octets.tester/operations/id.js +1 -1
  261. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  262. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  263. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  264. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  265. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  266. package/features/steps/components/orders/operations/create.js +4 -2
  267. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  268. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  269. package/features/steps/components/pricing/operations/quote.js +1 -1
  270. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  271. package/features/steps/components/sequences/operations/numbers.js +1 -1
  272. package/features/steps/components/sequences/operations/tokens.js +3 -3
  273. package/features/steps/components/users/manifest.toa.yaml +3 -5
  274. package/features/steps/components/users/operations/create.js +1 -1
  275. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  276. package/features/steps/map.ts +2 -2
  277. package/features/timestamps.feature +1 -1
  278. package/package.json +7 -7
  279. package/readme.md +11 -11
  280. package/schemas/annotation.cos.yaml +1 -3
  281. package/schemas/method.cos.yaml +2 -0
  282. package/source/Branch.test.ts +2 -2
  283. package/source/Branch.ts +3 -5
  284. package/source/Composition.ts +5 -5
  285. package/source/Directive.test.ts +38 -20
  286. package/source/Directive.ts +61 -47
  287. package/source/Endpoint.test.ts +1 -1
  288. package/source/Endpoint.ts +27 -92
  289. package/source/Factory.ts +26 -12
  290. package/source/Gateway.ts +87 -76
  291. package/source/HTTP/Context.ts +23 -30
  292. package/source/HTTP/Probe.ts +7 -9
  293. package/source/HTTP/Server.ts +88 -69
  294. package/source/HTTP/Timing.ts +6 -21
  295. package/source/HTTP/address.test.ts +8 -2
  296. package/source/HTTP/address.ts +2 -3
  297. package/source/HTTP/exceptions.ts +20 -18
  298. package/source/HTTP/formats/form.ts +1 -1
  299. package/source/HTTP/formats/json.ts +2 -2
  300. package/source/HTTP/formats/msgpack.ts +3 -4
  301. package/source/HTTP/formats/text.ts +2 -2
  302. package/source/HTTP/formats/yaml.test.ts +4 -1
  303. package/source/HTTP/formats/yaml.ts +14 -11
  304. package/source/HTTP/messages.test.ts +38 -28
  305. package/source/HTTP/messages.ts +44 -98
  306. package/source/Interception.ts +3 -4
  307. package/source/Introspection.ts +29 -14
  308. package/source/MCP/Server.ts +114 -54
  309. package/source/MCP/discover.ts +6 -7
  310. package/source/MCP/errors.ts +7 -8
  311. package/source/MCP/schema.test.ts +9 -3
  312. package/source/MCP/schema.ts +12 -16
  313. package/source/MCP/tools.ts +33 -27
  314. package/source/MCP/types.ts +4 -1
  315. package/source/Mapping.ts +25 -27
  316. package/source/Query.ts +58 -44
  317. package/source/RPC/Context.ts +8 -11
  318. package/source/RPC/Dispatcher.ts +46 -26
  319. package/source/RPC/errors.test.ts +41 -16
  320. package/source/RPC/errors.ts +9 -10
  321. package/source/RPC/names.test.ts +51 -32
  322. package/source/RPC/names.ts +26 -32
  323. package/source/RTD/Directives.ts +21 -10
  324. package/source/RTD/Endpoint.ts +4 -1
  325. package/source/RTD/Method.ts +8 -6
  326. package/source/RTD/Node.ts +32 -34
  327. package/source/RTD/Route.ts +18 -21
  328. package/source/RTD/Tree.ts +18 -18
  329. package/source/RTD/factory.ts +13 -16
  330. package/source/RTD/segment.ts +12 -10
  331. package/source/RTD/syntax/parse.test.ts +12 -6
  332. package/source/RTD/syntax/parse.ts +30 -26
  333. package/source/RTD/syntax/types.ts +17 -1
  334. package/source/RTD/walk.test.ts +64 -27
  335. package/source/Remotes.test.ts +25 -4
  336. package/source/Remotes.ts +9 -4
  337. package/source/Tenant.ts +12 -12
  338. package/source/deployment.ts +20 -20
  339. package/source/directives/auth/Anonymous.test.ts +8 -2
  340. package/source/directives/auth/Anonymous.ts +5 -8
  341. package/source/directives/auth/Anyone.ts +3 -3
  342. package/source/directives/auth/Assert.ts +10 -10
  343. package/source/directives/auth/Authorization.ts +83 -69
  344. package/source/directives/auth/Delegate.test.ts +2 -2
  345. package/source/directives/auth/Delegate.ts +8 -10
  346. package/source/directives/auth/Echo.ts +5 -8
  347. package/source/directives/auth/Federation.ts +30 -21
  348. package/source/directives/auth/Id.ts +7 -4
  349. package/source/directives/auth/Incept.ts +32 -26
  350. package/source/directives/auth/Input.ts +36 -20
  351. package/source/directives/auth/Role.test.ts +49 -23
  352. package/source/directives/auth/Role.ts +29 -22
  353. package/source/directives/auth/Rule.ts +13 -8
  354. package/source/directives/auth/Scheme.ts +7 -7
  355. package/source/directives/auth/create.ts +1 -1
  356. package/source/directives/auth/schemes.ts +1 -1
  357. package/source/directives/auth/split.ts +2 -3
  358. package/source/directives/auth/types.ts +5 -2
  359. package/source/directives/cache/Cache.ts +44 -9
  360. package/source/directives/cache/Control.ts +25 -26
  361. package/source/directives/cache/Exact.ts +1 -1
  362. package/source/directives/cache/etag.ts +38 -0
  363. package/source/directives/cors/CORS.ts +9 -7
  364. package/source/directives/dev/Development.ts +3 -4
  365. package/source/directives/dev/Faulty.ts +11 -6
  366. package/source/directives/dev/Sleep.ts +5 -7
  367. package/source/directives/dev/Stub.ts +2 -2
  368. package/source/directives/dev/Throw.ts +2 -2
  369. package/source/directives/flow/Compose.ts +26 -20
  370. package/source/directives/flow/Fetch.ts +15 -15
  371. package/source/directives/flow/Flow.ts +9 -8
  372. package/source/directives/index.ts +11 -2
  373. package/source/directives/io/IO.ts +29 -20
  374. package/source/directives/io/Input.ts +9 -12
  375. package/source/directives/io/Output.ts +20 -23
  376. package/source/directives/io/Status.test.ts +12 -8
  377. package/source/directives/io/Status.ts +9 -8
  378. package/source/directives/io/Throttle.ts +6 -7
  379. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  380. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  381. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  382. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  383. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  384. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  385. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  386. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  387. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  388. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  389. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  390. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  391. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  392. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  393. package/source/directives/io/schemas.test.ts +12 -6
  394. package/source/directives/map/Authority.ts +2 -2
  395. package/source/directives/map/Buffer.ts +2 -2
  396. package/source/directives/map/Claims.ts +25 -20
  397. package/source/directives/map/Headers.ts +17 -13
  398. package/source/directives/map/Language.ts +8 -5
  399. package/source/directives/map/Languages.ts +9 -3
  400. package/source/directives/map/Map.ts +25 -12
  401. package/source/directives/map/Mapping.ts +9 -6
  402. package/source/directives/map/Properties.ts +1 -1
  403. package/source/directives/map/Segments.ts +22 -15
  404. package/source/directives/mcp/MCP.ts +14 -5
  405. package/source/directives/mcp/Tool.test.ts +42 -6
  406. package/source/directives/mcp/Tool.ts +38 -7
  407. package/source/directives/oauth/Discovery.ts +7 -11
  408. package/source/directives/oauth/documents.ts +11 -14
  409. package/source/directives/octets/Context.ts +6 -3
  410. package/source/directives/octets/Delete.ts +33 -25
  411. package/source/directives/octets/Directive.ts +5 -1
  412. package/source/directives/octets/Get.ts +13 -21
  413. package/source/directives/octets/Octets.ts +20 -15
  414. package/source/directives/octets/Put.ts +62 -27
  415. package/source/directives/octets/Workflow.ts +18 -12
  416. package/source/directives/octets/bytes.ts +1 -1
  417. package/source/directives/octets/schemas.test.ts +8 -14
  418. package/source/directives/octets/workflows/Execution.ts +19 -21
  419. package/source/directives/octets/workflows/Workflow.ts +10 -7
  420. package/source/directives/require/Headers.ts +3 -4
  421. package/source/directives/require/Require.ts +3 -4
  422. package/source/exceptions.ts +19 -12
  423. package/source/index.ts +1 -1
  424. package/source/manifest.test.ts +4 -1
  425. package/source/manifest.ts +19 -13
  426. package/source/octets.d.ts +1 -1
  427. package/source/root.ts +3 -2
  428. package/source/schemas.test.ts +17 -3
  429. package/transpiled/Branch.js.map +1 -1
  430. package/transpiled/Composition.js.map +1 -1
  431. package/transpiled/Directive.js +6 -2
  432. package/transpiled/Directive.js.map +1 -1
  433. package/transpiled/Endpoint.d.ts +0 -2
  434. package/transpiled/Endpoint.js +11 -52
  435. package/transpiled/Endpoint.js.map +1 -1
  436. package/transpiled/Factory.d.ts +2 -1
  437. package/transpiled/Factory.js +1 -0
  438. package/transpiled/Factory.js.map +1 -1
  439. package/transpiled/Gateway.d.ts +2 -1
  440. package/transpiled/Gateway.js +24 -15
  441. package/transpiled/Gateway.js.map +1 -1
  442. package/transpiled/HTTP/Context.d.ts +0 -3
  443. package/transpiled/HTTP/Context.js +7 -9
  444. package/transpiled/HTTP/Context.js.map +1 -1
  445. package/transpiled/HTTP/Probe.js.map +1 -1
  446. package/transpiled/HTTP/Server.js +19 -4
  447. package/transpiled/HTTP/Server.js.map +1 -1
  448. package/transpiled/HTTP/Timing.d.ts +1 -2
  449. package/transpiled/HTTP/Timing.js +2 -10
  450. package/transpiled/HTTP/Timing.js.map +1 -1
  451. package/transpiled/HTTP/address.js.map +1 -1
  452. package/transpiled/HTTP/exceptions.js.map +1 -1
  453. package/transpiled/HTTP/formats/form.js.map +1 -1
  454. package/transpiled/HTTP/formats/json.js.map +1 -1
  455. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  456. package/transpiled/HTTP/formats/text.js.map +1 -1
  457. package/transpiled/HTTP/formats/yaml.js +4 -1
  458. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  459. package/transpiled/HTTP/messages.d.ts +3 -2
  460. package/transpiled/HTTP/messages.js +1 -43
  461. package/transpiled/HTTP/messages.js.map +1 -1
  462. package/transpiled/Interception.js.map +1 -1
  463. package/transpiled/Introspection.d.ts +2 -0
  464. package/transpiled/Introspection.js +13 -2
  465. package/transpiled/Introspection.js.map +1 -1
  466. package/transpiled/MCP/Server.js +15 -4
  467. package/transpiled/MCP/Server.js.map +1 -1
  468. package/transpiled/MCP/discover.js.map +1 -1
  469. package/transpiled/MCP/errors.js.map +1 -1
  470. package/transpiled/MCP/schema.js +1 -1
  471. package/transpiled/MCP/schema.js.map +1 -1
  472. package/transpiled/MCP/tools.js +10 -6
  473. package/transpiled/MCP/tools.js.map +1 -1
  474. package/transpiled/MCP/types.d.ts +3 -1
  475. package/transpiled/Mapping.d.ts +2 -2
  476. package/transpiled/Mapping.js +3 -5
  477. package/transpiled/Mapping.js.map +1 -1
  478. package/transpiled/Query.d.ts +6 -2
  479. package/transpiled/Query.js +23 -8
  480. package/transpiled/Query.js.map +1 -1
  481. package/transpiled/RPC/Context.js +0 -7
  482. package/transpiled/RPC/Context.js.map +1 -1
  483. package/transpiled/RPC/Dispatcher.js +4 -1
  484. package/transpiled/RPC/Dispatcher.js.map +1 -1
  485. package/transpiled/RPC/errors.js.map +1 -1
  486. package/transpiled/RPC/names.d.ts +3 -2
  487. package/transpiled/RPC/names.js +1 -1
  488. package/transpiled/RPC/names.js.map +1 -1
  489. package/transpiled/RTD/Directives.d.ts +1 -1
  490. package/transpiled/RTD/Method.js +1 -3
  491. package/transpiled/RTD/Method.js.map +1 -1
  492. package/transpiled/RTD/Node.js +5 -4
  493. package/transpiled/RTD/Node.js.map +1 -1
  494. package/transpiled/RTD/Route.js +4 -1
  495. package/transpiled/RTD/Route.js.map +1 -1
  496. package/transpiled/RTD/Tree.js +1 -1
  497. package/transpiled/RTD/Tree.js.map +1 -1
  498. package/transpiled/RTD/factory.js.map +1 -1
  499. package/transpiled/RTD/segment.js.map +1 -1
  500. package/transpiled/RTD/syntax/parse.js.map +1 -1
  501. package/transpiled/RTD/syntax/types.d.ts +6 -0
  502. package/transpiled/RTD/syntax/types.js +10 -1
  503. package/transpiled/RTD/syntax/types.js.map +1 -1
  504. package/transpiled/Remotes.js.map +1 -1
  505. package/transpiled/Tenant.d.ts +1 -1
  506. package/transpiled/Tenant.js.map +1 -1
  507. package/transpiled/deployment.d.ts +3 -0
  508. package/transpiled/deployment.js +6 -1
  509. package/transpiled/deployment.js.map +1 -1
  510. package/transpiled/directives/auth/Anonymous.js +1 -3
  511. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  512. package/transpiled/directives/auth/Anyone.js.map +1 -1
  513. package/transpiled/directives/auth/Assert.js.map +1 -1
  514. package/transpiled/directives/auth/Authorization.js +7 -3
  515. package/transpiled/directives/auth/Authorization.js.map +1 -1
  516. package/transpiled/directives/auth/Delegate.js.map +1 -1
  517. package/transpiled/directives/auth/Echo.js +1 -3
  518. package/transpiled/directives/auth/Echo.js.map +1 -1
  519. package/transpiled/directives/auth/Federation.js +3 -7
  520. package/transpiled/directives/auth/Federation.js.map +1 -1
  521. package/transpiled/directives/auth/Id.js.map +1 -1
  522. package/transpiled/directives/auth/Incept.js +1 -1
  523. package/transpiled/directives/auth/Incept.js.map +1 -1
  524. package/transpiled/directives/auth/Input.js.map +1 -1
  525. package/transpiled/directives/auth/Role.js.map +1 -1
  526. package/transpiled/directives/auth/Rule.js.map +1 -1
  527. package/transpiled/directives/auth/Scheme.js +1 -2
  528. package/transpiled/directives/auth/Scheme.js.map +1 -1
  529. package/transpiled/directives/auth/create.js.map +1 -1
  530. package/transpiled/directives/auth/schemes.js.map +1 -1
  531. package/transpiled/directives/auth/split.js.map +1 -1
  532. package/transpiled/directives/auth/types.d.ts +3 -1
  533. package/transpiled/directives/cache/Cache.js +28 -2
  534. package/transpiled/directives/cache/Cache.js.map +1 -1
  535. package/transpiled/directives/cache/Control.js +1 -1
  536. package/transpiled/directives/cache/Control.js.map +1 -1
  537. package/transpiled/directives/cache/etag.d.ts +10 -0
  538. package/transpiled/directives/cache/etag.js +30 -0
  539. package/transpiled/directives/cache/etag.js.map +1 -0
  540. package/transpiled/directives/cors/CORS.js.map +1 -1
  541. package/transpiled/directives/dev/Development.js.map +1 -1
  542. package/transpiled/directives/dev/Faulty.js.map +1 -1
  543. package/transpiled/directives/dev/Sleep.js.map +1 -1
  544. package/transpiled/directives/dev/Stub.js.map +1 -1
  545. package/transpiled/directives/dev/Throw.js.map +1 -1
  546. package/transpiled/directives/flow/Compose.js +7 -3
  547. package/transpiled/directives/flow/Compose.js.map +1 -1
  548. package/transpiled/directives/flow/Fetch.js.map +1 -1
  549. package/transpiled/directives/flow/Flow.js.map +1 -1
  550. package/transpiled/directives/index.js +11 -1
  551. package/transpiled/directives/index.js.map +1 -1
  552. package/transpiled/directives/io/IO.d.ts +1 -1
  553. package/transpiled/directives/io/IO.js.map +1 -1
  554. package/transpiled/directives/io/Input.js +1 -1
  555. package/transpiled/directives/io/Input.js.map +1 -1
  556. package/transpiled/directives/io/Output.js +3 -3
  557. package/transpiled/directives/io/Output.js.map +1 -1
  558. package/transpiled/directives/io/Status.js.map +1 -1
  559. package/transpiled/directives/io/Throttle.js +1 -1
  560. package/transpiled/directives/io/Throttle.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  562. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  565. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  567. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  568. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  569. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  570. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  571. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  572. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  573. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  574. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  575. package/transpiled/directives/map/Authority.js.map +1 -1
  576. package/transpiled/directives/map/Buffer.js.map +1 -1
  577. package/transpiled/directives/map/Claims.js.map +1 -1
  578. package/transpiled/directives/map/Headers.js.map +1 -1
  579. package/transpiled/directives/map/Language.js.map +1 -1
  580. package/transpiled/directives/map/Languages.js.map +1 -1
  581. package/transpiled/directives/map/Map.js.map +1 -1
  582. package/transpiled/directives/map/Mapping.js.map +1 -1
  583. package/transpiled/directives/map/Properties.js.map +1 -1
  584. package/transpiled/directives/map/Segments.js.map +1 -1
  585. package/transpiled/directives/mcp/MCP.js +7 -1
  586. package/transpiled/directives/mcp/MCP.js.map +1 -1
  587. package/transpiled/directives/mcp/Tool.d.ts +6 -1
  588. package/transpiled/directives/mcp/Tool.js +16 -3
  589. package/transpiled/directives/mcp/Tool.js.map +1 -1
  590. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  591. package/transpiled/directives/oauth/documents.js.map +1 -1
  592. package/transpiled/directives/octets/Context.js +1 -1
  593. package/transpiled/directives/octets/Context.js.map +1 -1
  594. package/transpiled/directives/octets/Delete.js.map +1 -1
  595. package/transpiled/directives/octets/Directive.js.map +1 -1
  596. package/transpiled/directives/octets/Get.js.map +1 -1
  597. package/transpiled/directives/octets/Octets.js +1 -1
  598. package/transpiled/directives/octets/Octets.js.map +1 -1
  599. package/transpiled/directives/octets/Put.js.map +1 -1
  600. package/transpiled/directives/octets/Workflow.js.map +1 -1
  601. package/transpiled/directives/octets/bytes.js.map +1 -1
  602. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  603. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  604. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  605. package/transpiled/directives/require/Headers.js.map +1 -1
  606. package/transpiled/directives/require/Require.js.map +1 -1
  607. package/transpiled/exceptions.js.map +1 -1
  608. package/transpiled/index.d.ts +1 -1
  609. package/transpiled/index.js +1 -1
  610. package/transpiled/index.js.map +1 -1
  611. package/transpiled/manifest.js +5 -1
  612. package/transpiled/manifest.js.map +1 -1
  613. package/transpiled/root.js.map +1 -1
  614. package/tsconfig.tsbuildinfo +1 -1
  615. package/CHANGELOG.md +0 -541
  616. package/source/redact.test.ts +0 -27
  617. package/source/redact.ts +0 -21
  618. package/transpiled/redact.d.ts +0 -5
  619. package/transpiled/redact.js +0 -17
  620. package/transpiled/redact.js.map +0 -1
@@ -17,25 +17,25 @@ const { binding, then, when } = tsflow
17
17
  export class HTTP extends http.Agent {
18
18
  private readonly gateway: Gateway
19
19
 
20
- public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
20
+ public constructor(gateway: Gateway, parameters: Parameters, captures: Captures) {
21
21
  super(parameters.origin, captures)
22
22
  this.gateway = gateway
23
23
  }
24
24
 
25
25
  @when('the following request is received:')
26
- public override async request (input: string): Promise<any> {
26
+ public override async request(input: string): Promise<any> {
27
27
  await this.gateway.start()
28
28
 
29
29
  await super.request(input)
30
30
  }
31
31
 
32
32
  @then('the following reply is sent:')
33
- public override responseIncludes (expected: string): void {
33
+ public override responseIncludes(expected: string): void {
34
34
  super.responseIncludes(expected)
35
35
  }
36
36
 
37
37
  @then('response body contains {word}-encoded value:')
38
- public async bodyIs (format: string, yaml: string): Promise<void> {
38
+ public async bodyIs(format: string, yaml: string): Promise<void> {
39
39
  assert.ok(this.bytes !== null, 'Response body is not available')
40
40
 
41
41
  const value = encoders[format]?.(this.bytes)
@@ -45,12 +45,12 @@ export class HTTP extends http.Agent {
45
45
  }
46
46
 
47
47
  @then('the reply does not contain:')
48
- public override responseExcludes (expected: string): void {
48
+ public override responseExcludes(expected: string): void {
49
49
  super.responseExcludes(expected)
50
50
  }
51
51
 
52
52
  @when('the stream of `{word}` is received with the following headers:')
53
- public async streamRequest (filename: string, head: string): Promise<any> {
53
+ public async streamRequest(filename: string, head: string): Promise<any> {
54
54
  const stream = open(filename)
55
55
 
56
56
  await this.gateway.start()
@@ -58,30 +58,27 @@ export class HTTP extends http.Agent {
58
58
  }
59
59
 
60
60
  @then('the stream equals to `{word}` is sent with the following headers:')
61
- public async responseStreamMatch (filename: string, head: string): Promise<any> {
61
+ public async responseStreamMatch(filename: string, head: string): Promise<any> {
62
62
  const stream = open(filename)
63
63
 
64
64
  await super.streamMatch(head, stream)
65
65
  }
66
66
 
67
67
  @when('the following request is interrupted after {float} second(s):')
68
- public async interrupt (delay: number, input: string): Promise<any> {
68
+ public async interrupt(delay: number, input: string): Promise<any> {
69
69
  const controller = new AbortController()
70
70
 
71
71
  await this.gateway.start()
72
72
 
73
73
  setTimeout(() => {
74
- if (pending)
75
- controller.abort()
76
- else
77
- console.error('Request cannot be interrupted as it is already completed')
74
+ if (pending) controller.abort()
75
+ else console.error('Request cannot be interrupted as it is already completed')
78
76
  }, delay * 1000)
79
77
 
80
78
  let pending = true
81
79
 
82
80
  await super.fetch(input, { signal: controller.signal }).catch((e) => {
83
- if (e.name !== 'AbortError')
84
- throw e
81
+ if (e.name !== 'AbortError') throw e
85
82
  })
86
83
 
87
84
  pending = false
@@ -90,7 +87,7 @@ export class HTTP extends http.Agent {
90
87
 
91
88
  const FILES_DIR = path.resolve(import.meta.dirname, '../../../storages/source/test')
92
89
 
93
- function open (filename: string): Readable {
90
+ function open(filename: string): Readable {
94
91
  return fs.createReadStream(path.join(FILES_DIR, filename))
95
92
  }
96
93
 
@@ -20,12 +20,12 @@ export class IDP {
20
20
  private static authCodes = new Map<string, AuthCode>()
21
21
  private readonly captures: Captures
22
22
 
23
- public constructor (captures: Captures) {
23
+ public constructor(captures: Captures) {
24
24
  this.captures = captures
25
25
  }
26
26
 
27
27
  @afterAll()
28
- public static async stop (): Promise<void> {
28
+ public static async stop(): Promise<void> {
29
29
  if (this.server instanceof http.Server) {
30
30
  this.server.close()
31
31
  await once(this.server, 'close')
@@ -33,25 +33,27 @@ export class IDP {
33
33
  }
34
34
 
35
35
  @given(/local IDP is running/i)
36
- public async start (): Promise<void> {
36
+ public async start(): Promise<void> {
37
37
  if (IDP.server instanceof http.Server) return
38
38
 
39
39
  // creating the key
40
- const {
41
- publicKey,
42
- privateKey
43
- } = await util.promisify(crypto.generateKeyPair)('rsa', {
44
- modulusLength: 2048
45
- })
40
+ const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)(
41
+ 'rsa',
42
+ {
43
+ modulusLength: 2048
44
+ }
45
+ )
46
46
 
47
47
  IDP.privateKey = privateKey
48
48
 
49
49
  const jwk = JSON.stringify({
50
- keys: [{
51
- use: 'sig',
52
- alg: 'RS256',
53
- ...publicKey.export({ format: 'jwk' })
54
- }]
50
+ keys: [
51
+ {
52
+ use: 'sig',
53
+ alg: 'RS256',
54
+ ...publicKey.export({ format: 'jwk' })
55
+ }
56
+ ]
55
57
  })
56
58
 
57
59
  const JWK_ENDPOINT = '/.well-known/jwks'
@@ -71,79 +73,83 @@ export class IDP {
71
73
  response.end(jwk)
72
74
  break
73
75
 
74
- case '/.well-known/openid-configuration': {
75
- const openIdConfiguration = JSON.stringify({
76
- issuer: IDP.issuer,
77
- jwks_uri: IDP.issuer + JWK_ENDPOINT,
78
- authorization_endpoint: IDP.issuer + AUTH_ENDPOINT,
79
- token_endpoint: IDP.issuer + TOKEN_ENDPOINT,
80
- response_types_supported: ['id_token', 'code'],
81
- grant_types_supported: ['authorization_code'],
82
- subject_types_supported: ['public'],
83
- id_token_signing_alg_values_supported: ['RS256'],
84
- scopes_supported: ['openid', 'email', 'profile']
85
- })
86
-
87
- response.writeHead(200, {
88
- 'Content-Type': 'application/json',
89
- 'Cache-Control': 'public, max-age=3600',
90
- 'Content-Length': openIdConfiguration.length
91
- })
92
-
93
- response.end(openIdConfiguration)
94
- }
95
-
96
- break
97
-
98
- case TOKEN_ENDPOINT: {
99
- if (request.method !== 'POST') {
100
- response.writeHead(405, { 'Content-Type': 'text/plain' })
101
- response.end('Method not allowed')
102
-
103
- return
104
- }
105
-
106
- const buf = await buffer(request)
107
- const body = buf.toString('utf8')
108
-
109
- const params = new URLSearchParams(body)
110
- const grantType = params.get('grant_type')!
111
- const code = params.get('code')!
112
- const redirectUri = params.get('redirect_uri')!
113
- const clientId = params.get('client_id')!
114
-
115
- if (grantType !== 'authorization_code' || !code || !clientId) {
116
- response.writeHead(400, { 'Content-Type': 'application/json' })
117
- response.end(JSON.stringify({ error: 'invalid_request' }))
76
+ case '/.well-known/openid-configuration':
77
+ {
78
+ const openIdConfiguration = JSON.stringify({
79
+ issuer: IDP.issuer,
80
+ jwks_uri: IDP.issuer + JWK_ENDPOINT,
81
+ authorization_endpoint: IDP.issuer + AUTH_ENDPOINT,
82
+ token_endpoint: IDP.issuer + TOKEN_ENDPOINT,
83
+ response_types_supported: ['id_token', 'code'],
84
+ grant_types_supported: ['authorization_code'],
85
+ subject_types_supported: ['public'],
86
+ id_token_signing_alg_values_supported: ['RS256'],
87
+ scopes_supported: ['openid', 'email', 'profile']
88
+ })
89
+
90
+ response.writeHead(200, {
91
+ 'Content-Type': 'application/json',
92
+ 'Cache-Control': 'public, max-age=3600',
93
+ 'Content-Length': openIdConfiguration.length
94
+ })
95
+
96
+ response.end(openIdConfiguration)
118
97
  }
119
98
 
120
- const codeData = IDP.authCodes.get(code)
121
-
122
- if (!codeData ||
123
- codeData.expiresAt < Date.now() ||
124
- codeData.clientId !== clientId ||
125
- (redirectUri && codeData.redirectUri !== redirectUri)) {
126
- response.writeHead(400, { 'Content-Type': 'application/json' })
127
- response.end(JSON.stringify({ error: 'invalid_grant' }))
99
+ break
128
100
 
129
- return
101
+ case TOKEN_ENDPOINT:
102
+ {
103
+ if (request.method !== 'POST') {
104
+ response.writeHead(405, { 'Content-Type': 'text/plain' })
105
+ response.end('Method not allowed')
106
+
107
+ return
108
+ }
109
+
110
+ const buf = await buffer(request)
111
+ const body = buf.toString('utf8')
112
+
113
+ const params = new URLSearchParams(body)
114
+ const grantType = params.get('grant_type')!
115
+ const code = params.get('code')!
116
+ const redirectUri = params.get('redirect_uri')!
117
+ const clientId = params.get('client_id')!
118
+
119
+ if (grantType !== 'authorization_code' || !code || !clientId) {
120
+ response.writeHead(400, { 'Content-Type': 'application/json' })
121
+ response.end(JSON.stringify({ error: 'invalid_request' }))
122
+ }
123
+
124
+ const codeData = IDP.authCodes.get(code)
125
+
126
+ if (
127
+ !codeData ||
128
+ codeData.expiresAt < Date.now() ||
129
+ codeData.clientId !== clientId ||
130
+ (redirectUri && codeData.redirectUri !== redirectUri)
131
+ ) {
132
+ response.writeHead(400, { 'Content-Type': 'application/json' })
133
+ response.end(JSON.stringify({ error: 'invalid_grant' }))
134
+
135
+ return
136
+ }
137
+
138
+ const accessToken = crypto.randomBytes(32).toString('hex')
139
+ const idToken = this.generateIdToken(codeData.sub, codeData.email, clientId)
140
+
141
+ IDP.authCodes.delete(code)
142
+
143
+ response.writeHead(200, { 'Content-Type': 'application/json' }).end(
144
+ JSON.stringify({
145
+ access_token: accessToken,
146
+ token_type: 'Bearer',
147
+ id_token: idToken,
148
+ expires_in: 3600
149
+ })
150
+ )
130
151
  }
131
152
 
132
- const accessToken = crypto.randomBytes(32).toString('hex')
133
- const idToken = this.generateIdToken(codeData.sub, codeData.email, clientId)
134
-
135
- IDP.authCodes.delete(code)
136
-
137
- response
138
- .writeHead(200, { 'Content-Type': 'application/json' })
139
- .end(JSON.stringify({
140
- access_token: accessToken,
141
- token_type: 'Bearer',
142
- id_token: idToken,
143
- expires_in: 3600
144
- }))
145
- }
146
-
147
153
  break
148
154
 
149
155
  default:
@@ -152,7 +158,8 @@ export class IDP {
152
158
  }
153
159
  })
154
160
 
155
- server.listen(44444, 'localhost')
161
+ // in Toa's own block, and out of the ephemeral range an arbitrary port would sit in
162
+ server.listen(31005, 'localhost')
156
163
  await once(server, 'listening')
157
164
 
158
165
  const address = server.address() as AddressInfo
@@ -163,7 +170,7 @@ export class IDP {
163
170
  }
164
171
 
165
172
  @given('the IDP token for {word} is issued')
166
- public async issueToken (user: string): Promise<void> {
173
+ public async issueToken(user: string): Promise<void> {
167
174
  assert.ok(IDP.privateKey, 'IdP private key is not available')
168
175
 
169
176
  const jwt = [
@@ -183,7 +190,10 @@ export class IDP {
183
190
  .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
184
191
  .join('.')
185
192
 
186
- const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IDP.privateKey, 'base64url')
193
+ const signature = crypto
194
+ .createSign('RSA-SHA256')
195
+ .end(jwt)
196
+ .sign(IDP.privateKey, 'base64url')
187
197
 
188
198
  const idToken = `${jwt}.${signature}`
189
199
 
@@ -191,7 +201,7 @@ export class IDP {
191
201
  }
192
202
 
193
203
  @given('the IDP random token is issued')
194
- public async issueNewToken (): Promise<void> {
204
+ public async issueNewToken(): Promise<void> {
195
205
  assert.ok(IDP.privateKey, 'IdP private key is not available')
196
206
 
197
207
  const sub = Math.random().toString(36).substring(7)
@@ -213,7 +223,10 @@ export class IDP {
213
223
  .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
214
224
  .join('.')
215
225
 
216
- const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IDP.privateKey, 'base64url')
226
+ const signature = crypto
227
+ .createSign('RSA-SHA256')
228
+ .end(jwt)
229
+ .sign(IDP.privateKey, 'base64url')
217
230
 
218
231
  const idToken = `${jwt}.${signature}`
219
232
 
@@ -223,7 +236,11 @@ export class IDP {
223
236
  }
224
237
 
225
238
  @given('the IDP {word} token for {word} is issued with following secret:')
226
- public async issueSymmetricToken (alg: string, user: string, secret: string): Promise<void> {
239
+ public async issueSymmetricToken(
240
+ alg: string,
241
+ user: string,
242
+ secret: string
243
+ ): Promise<void> {
227
244
  const jwt = [
228
245
  {
229
246
  typ: 'JWT',
@@ -240,7 +257,8 @@ export class IDP {
240
257
  .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
241
258
  .join('.')
242
259
 
243
- const signature = crypto.createHmac(alg.replace(/^HS(\d{3})$/, 'sha$1'), secret)
260
+ const signature = crypto
261
+ .createHmac(alg.replace(/^HS(\d{3})$/, 'sha$1'), secret)
244
262
  .update(jwt)
245
263
  .digest('base64url')
246
264
 
@@ -250,7 +268,7 @@ export class IDP {
250
268
  }
251
269
 
252
270
  @given('ID token with jti is issued for {word}')
253
- public async issueTokenWithJti (user: string): Promise<void> {
271
+ public async issueTokenWithJti(user: string): Promise<void> {
254
272
  assert.ok(IDP.privateKey, 'IdP private key is not available')
255
273
 
256
274
  const jwt = [
@@ -271,7 +289,10 @@ export class IDP {
271
289
  .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
272
290
  .join('.')
273
291
 
274
- const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IDP.privateKey, 'base64url')
292
+ const signature = crypto
293
+ .createSign('RSA-SHA256')
294
+ .end(jwt)
295
+ .sign(IDP.privateKey, 'base64url')
275
296
 
276
297
  const idToken = `${jwt}.${signature}`
277
298
 
@@ -279,7 +300,7 @@ export class IDP {
279
300
  }
280
301
 
281
302
  @given('auth code for {word} is issued for {word}')
282
- public async issueAuthCode (user: string, redirectUri: string): Promise<void> {
303
+ public async issueAuthCode(user: string, redirectUri: string): Promise<void> {
283
304
  const code = crypto.randomBytes(16).toString('hex')
284
305
  const email = user + '@test.local'
285
306
  const clientId = 'nex'
@@ -300,7 +321,7 @@ export class IDP {
300
321
  this.captures.set(`${user}.code_credentials`, base64)
301
322
  }
302
323
 
303
- private generateIdToken (sub: string, email: string, clientId: string): string {
324
+ private generateIdToken(sub: string, email: string, clientId: string): string {
304
325
  assert.ok(IDP.privateKey, 'IdP private key is not available')
305
326
  assert.ok(IDP.issuer, 'IdP issuer is not available')
306
327
 
@@ -321,7 +342,10 @@ export class IDP {
321
342
  .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
322
343
  .join('.')
323
344
 
324
- const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IDP.privateKey, 'base64url')
345
+ const signature = crypto
346
+ .createSign('RSA-SHA256')
347
+ .end(jwt)
348
+ .sign(IDP.privateKey, 'base64url')
325
349
 
326
350
  return `${jwt}.${signature}`
327
351
  }
@@ -13,14 +13,14 @@ export class Identity {
13
13
  private readonly http: http.Agent
14
14
  private readonly variables: Captures
15
15
 
16
- public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
16
+ public constructor(gateway: Gateway, parameters: Parameters, captures: Captures) {
17
17
  this.gateway = gateway
18
18
  this.http = new http.Agent(parameters.origin, captures)
19
19
  this.variables = captures
20
20
  }
21
21
 
22
22
  @given('transient identity {word}')
23
- public async transient (as: string): Promise<Principal> {
23
+ public async transient(as: string): Promise<Principal> {
24
24
  await this.gateway.start()
25
25
 
26
26
  await this.http.request(`
@@ -43,7 +43,7 @@ export class Identity {
43
43
  }
44
44
 
45
45
  @given('transient identity')
46
- public async anonymous (): Promise<Principal> {
46
+ public async anonymous(): Promise<Principal> {
47
47
  return await this.transient('identity')
48
48
  }
49
49
  }
@@ -12,12 +12,12 @@ export class OTP {
12
12
  private captures: Captures
13
13
  private otp: Remote | null = null
14
14
 
15
- public constructor (captures: Captures) {
15
+ public constructor(captures: Captures) {
16
16
  this.captures = captures
17
17
  }
18
18
 
19
19
  @given('OTP for `{word}` in `{word}` authority is issued')
20
- public async issue (username: string, authority: string): Promise<void> {
20
+ public async issue(username: string, authority: string): Promise<void> {
21
21
  this.otp ??= await this.connect()
22
22
 
23
23
  const reply = await this.otp.invoke('issue', {
@@ -34,7 +34,7 @@ export class OTP {
34
34
  this.captures.set(`${username}.otp`, credentials)
35
35
  }
36
36
 
37
- private async connect (): Promise<Remote> {
37
+ private async connect(): Promise<Remote> {
38
38
  const locator = new Locator('otp', 'identity')
39
39
 
40
40
  return await boot.remote(locator)
@@ -4,11 +4,18 @@ import { setDefaultTimeout } from '@cucumber/cucumber'
4
4
 
5
5
  dotenv.config({ path: join(import.meta.dirname, '.env') })
6
6
 
7
+ /**
8
+ * Not `PORT` and `PROBE`, which a deployment serves the gateway on: an application built on
9
+ * Toa is served on this machine too, and its own gateway holds those. See CONTRIBUTING.md.
10
+ */
11
+ export const PORT = 31000
12
+ export const PROBE = 31004
13
+
7
14
  export class Parameters {
8
15
  public readonly origin: string
9
16
 
10
- public constructor () {
11
- this.origin = 'http://127.0.0.1:8000'
17
+ public constructor() {
18
+ this.origin = `http://127.0.0.1:${PORT}`
12
19
  }
13
20
  }
14
21
 
@@ -29,7 +36,7 @@ process.env.TOA_TELEMETRY_READY ??= JSON.stringify(false)
29
36
  process.env.TOA_TELEMETRY_TRACES ??= JSON.stringify({
30
37
  exporters: {
31
38
  console: null,
32
- otlp: { endpoint: 'http://localhost:4318' }
39
+ otlp: { endpoint: 'http://localhost:31061' }
33
40
  }
34
41
  })
35
42
 
@@ -49,13 +56,16 @@ const CLOUDINARY = {
49
56
  transformations: [
50
57
  {
51
58
  extension: 'icon',
52
- transformation: [{
53
- width: 48,
54
- height: 48,
55
- crop: 'fill'
56
- }, {
57
- border: '10px_solid_white'
58
- }],
59
+ transformation: [
60
+ {
61
+ width: 48,
62
+ height: 48,
63
+ crop: 'fill'
64
+ },
65
+ {
66
+ border: '10px_solid_white'
67
+ }
68
+ ],
59
69
  optional: true
60
70
  },
61
71
  {
@@ -1,7 +1,8 @@
1
1
  import assert from 'node:assert'
2
2
  import { Agent, request } from 'undici'
3
3
  import tsflow from 'cucumber-tsflow'
4
- import { PATH, PROBE } from '../../source/HTTP/index.js'
4
+ import { PATH } from '../../source/HTTP/index.js'
5
+ import { PROBE } from './Parameters.js'
5
6
 
6
7
  const { after, binding, then, when } = tsflow
7
8
 
@@ -12,8 +13,10 @@ export class Probe {
12
13
  private headers: Record<string, string> = {}
13
14
 
14
15
  @when('the ready probe is requested')
15
- public async request (): Promise<void> {
16
- const response = await request(`http://127.0.0.1:${PROBE}${PATH}`, { dispatcher: this.agent })
16
+ public async request(): Promise<void> {
17
+ const response = await request(`http://127.0.0.1:${PROBE}${PATH}`, {
18
+ dispatcher: this.agent
19
+ })
17
20
 
18
21
  this.status = response.statusCode
19
22
  this.headers = response.headers as Record<string, string>
@@ -22,15 +25,14 @@ export class Probe {
22
25
  }
23
26
 
24
27
  @then('the ready probe answers {int}')
25
- public answers (status: number): void {
28
+ public answers(status: number): void {
26
29
  assert.equal(this.status, status)
27
30
 
28
- if (status === 200)
29
- assert.equal(this.headers['cache-control'], 'no-store')
31
+ if (status === 200) assert.equal(this.headers['cache-control'], 'no-store')
30
32
  }
31
33
 
32
34
  @after()
33
- public async close (): Promise<void> {
35
+ public async close(): Promise<void> {
34
36
  await this.agent.close()
35
37
  }
36
38
  }