@toa.io/extensions.exposition 1.0.0-alpha.291 → 1.0.0-alpha.293

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 (526) hide show
  1. package/components/identity.basic/package.json +8 -0
  2. package/components/identity.federation/package.json +8 -0
  3. package/components/identity.passkeys/package.json +8 -0
  4. package/components/identity.tokens/package.json +10 -0
  5. package/package.json +25 -13
  6. package/transpiled/Discovery/Explorer.js +1 -1
  7. package/transpiled/Discovery/Explorer.js.map +1 -1
  8. package/transpiled/Discovery/Site.js +1 -1
  9. package/transpiled/Discovery/Site.js.map +1 -1
  10. package/transpiled/Discovery/trunk.js +1 -1
  11. package/transpiled/Discovery/trunk.js.map +1 -1
  12. package/transpiled/Endpoint.js +3 -0
  13. package/transpiled/Endpoint.js.map +1 -1
  14. package/transpiled/Factory.js +1 -1
  15. package/transpiled/Factory.js.map +1 -1
  16. package/transpiled/Gateway.js +1 -1
  17. package/transpiled/Gateway.js.map +1 -1
  18. package/transpiled/HTTP/Server.d.ts +1 -1
  19. package/transpiled/HTTP/Server.js +1 -1
  20. package/transpiled/HTTP/Server.js.map +1 -1
  21. package/transpiled/Introspection.d.ts +6 -0
  22. package/transpiled/Introspection.js +1 -0
  23. package/transpiled/Introspection.js.map +1 -1
  24. package/transpiled/MCP/Server.d.ts +1 -1
  25. package/transpiled/MCP/Server.js +1 -1
  26. package/transpiled/MCP/Server.js.map +1 -1
  27. package/transpiled/MCP/discover.d.ts +1 -1
  28. package/transpiled/MCP/schema.js +2 -2
  29. package/transpiled/Query.d.ts +2 -12
  30. package/transpiled/Query.js +3 -13
  31. package/transpiled/Query.js.map +1 -1
  32. package/transpiled/RPC/Dispatcher.d.ts +1 -1
  33. package/transpiled/RPC/Dispatcher.js +2 -2
  34. package/transpiled/RPC/Dispatcher.js.map +1 -1
  35. package/transpiled/RTD/Endpoint.d.ts +2 -3
  36. package/transpiled/RTD/Tree.js +1 -1
  37. package/transpiled/RTD/Tree.js.map +1 -1
  38. package/transpiled/RTD/factory.js +1 -1
  39. package/transpiled/RTD/factory.js.map +1 -1
  40. package/transpiled/RTD/syntax/index.d.ts +1 -2
  41. package/transpiled/RTD/syntax/index.js +1 -2
  42. package/transpiled/RTD/syntax/index.js.map +1 -1
  43. package/transpiled/Tenant.js +1 -1
  44. package/transpiled/Tenant.js.map +1 -1
  45. package/transpiled/directives/auth/Authorization.js +1 -1
  46. package/transpiled/directives/auth/Authorization.js.map +1 -1
  47. package/transpiled/directives/io/IO.js +1 -1
  48. package/transpiled/directives/io/IO.js.map +1 -1
  49. package/transpiled/directives/oauth/documents.d.ts +1 -1
  50. package/transpiled/index.d.ts +0 -2
  51. package/transpiled/index.js +0 -2
  52. package/transpiled/index.js.map +1 -1
  53. package/transpiled/service.js +1 -1
  54. package/transpiled/service.js.map +1 -1
  55. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  56. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  57. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  58. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  59. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  60. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  61. package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
  62. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  63. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  64. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  65. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  66. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  67. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  68. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  69. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  70. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  71. package/ui/dist/_app/version.json +1 -1
  72. package/ui/dist/index.html +12 -12
  73. package/CHANGELOG.md +0 -35
  74. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  75. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  76. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  77. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  78. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  79. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  80. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  81. package/components/identity.credentials/source/list.test.ts +0 -70
  82. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  83. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  84. package/components/identity.federation/source/list.test.ts +0 -41
  85. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  86. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  87. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  88. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  89. package/components/identity.passkeys/source/errors.test.ts +0 -34
  90. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  91. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  92. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  93. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  94. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  95. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  96. package/components/identity.tokens/source/issue.test.ts +0 -73
  97. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  98. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  99. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  100. package/context.toa.yaml +0 -31
  101. package/cucumber.mjs +0 -7
  102. package/documentation/.assets/ia3-dark.jpg +0 -0
  103. package/documentation/.assets/ia3-light.jpg +0 -0
  104. package/documentation/.assets/overview-dark.jpg +0 -0
  105. package/documentation/.assets/overview-light.jpg +0 -0
  106. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  107. package/documentation/.assets/role-scopes-light.jpg +0 -0
  108. package/documentation/.assets/rtd-dark.jpg +0 -0
  109. package/documentation/.assets/rtd-light.jpg +0 -0
  110. package/documentation/access.md +0 -350
  111. package/documentation/authorities.md +0 -51
  112. package/documentation/cache.md +0 -72
  113. package/documentation/components.md +0 -472
  114. package/documentation/consent.md +0 -101
  115. package/documentation/credentials.md +0 -88
  116. package/documentation/dev.md +0 -30
  117. package/documentation/discovery.md +0 -81
  118. package/documentation/flow.md +0 -44
  119. package/documentation/help.md +0 -122
  120. package/documentation/identity.md +0 -304
  121. package/documentation/introspection.md +0 -123
  122. package/documentation/io.md +0 -167
  123. package/documentation/ip.md +0 -24
  124. package/documentation/map.md +0 -123
  125. package/documentation/mcp.md +0 -183
  126. package/documentation/notes/desync.jpg +0 -0
  127. package/documentation/notes/peers.md +0 -59
  128. package/documentation/notes/sse.md +0 -71
  129. package/documentation/notes/throttling.md +0 -122
  130. package/documentation/oauth.md +0 -180
  131. package/documentation/octets.md +0 -334
  132. package/documentation/passkeys.md +0 -11
  133. package/documentation/protocol.md +0 -120
  134. package/documentation/query.md +0 -324
  135. package/documentation/require.md +0 -15
  136. package/documentation/rpc.md +0 -154
  137. package/documentation/tracing.md +0 -70
  138. package/documentation/tree.md +0 -199
  139. package/features/access.feature +0 -596
  140. package/features/annotation.feature +0 -32
  141. package/features/auth.assert.feature +0 -55
  142. package/features/auth.bearer.feature +0 -120
  143. package/features/auth.claims.feature +0 -171
  144. package/features/auth.incept.feature +0 -166
  145. package/features/auth.input.feature +0 -59
  146. package/features/authorities.basic.feature +0 -141
  147. package/features/authorities.feature +0 -71
  148. package/features/authorities.federation.feature +0 -100
  149. package/features/authorities.tokens.feature +0 -117
  150. package/features/body.feature +0 -76
  151. package/features/cache.feature +0 -368
  152. package/features/configuration.feature +0 -206
  153. package/features/cors.feature +0 -127
  154. package/features/credentials.feature +0 -106
  155. package/features/debug.feature +0 -34
  156. package/features/dev.feature +0 -90
  157. package/features/directives.feature +0 -61
  158. package/features/discovery.feature +0 -213
  159. package/features/discovery.ui.feature +0 -213
  160. package/features/dynamic.feature +0 -192
  161. package/features/errors.feature +0 -258
  162. package/features/etag.feature +0 -239
  163. package/features/flow.feature +0 -148
  164. package/features/help.feature +0 -512
  165. package/features/identity.bans.feature +0 -200
  166. package/features/identity.basic.feature +0 -666
  167. package/features/identity.feature +0 -240
  168. package/features/identity.federation.feature +0 -396
  169. package/features/identity.otp.feature +0 -142
  170. package/features/identity.roles.feature +0 -568
  171. package/features/identity.tokens.custom.feature +0 -430
  172. package/features/identity.tokens.feature +0 -131
  173. package/features/interruptions.feature +0 -20
  174. package/features/introspection.feature +0 -565
  175. package/features/introspection.map.feature +0 -108
  176. package/features/io.feature +0 -204
  177. package/features/io.throttle.feature +0 -166
  178. package/features/map.feature +0 -360
  179. package/features/mcp.feature +0 -753
  180. package/features/methods.feature +0 -48
  181. package/features/oauth.clients.feature +0 -195
  182. package/features/oauth.discovery.feature +0 -164
  183. package/features/oauth.grants.feature +0 -301
  184. package/features/octets.cloudinary.feature +0 -233
  185. package/features/octets.download.feature +0 -194
  186. package/features/octets.entries.feature +0 -83
  187. package/features/octets.feature +0 -306
  188. package/features/octets.head.feature +0 -40
  189. package/features/octets.location.feature +0 -83
  190. package/features/octets.meta.feature +0 -117
  191. package/features/octets.workflows.feature +0 -565
  192. package/features/passkeys.feature +0 -66
  193. package/features/probes.feature +0 -18
  194. package/features/query.feature +0 -389
  195. package/features/realtime.feature +0 -34
  196. package/features/require.feature +0 -66
  197. package/features/response.feature +0 -103
  198. package/features/routes.feature +0 -224
  199. package/features/rpc.feature +0 -429
  200. package/features/server.feature +0 -21
  201. package/features/site/_app/immutable/asset.js +0 -1
  202. package/features/site/favicon.ico +0 -0
  203. package/features/site/index.html +0 -10
  204. package/features/steps/.env.example +0 -5
  205. package/features/steps/Captures.ts +0 -20
  206. package/features/steps/Cloudinary.ts +0 -12
  207. package/features/steps/Common.ts +0 -38
  208. package/features/steps/Components.ts +0 -115
  209. package/features/steps/Database.ts +0 -106
  210. package/features/steps/Gateway.ts +0 -240
  211. package/features/steps/HTTP.ts +0 -96
  212. package/features/steps/IDP.ts +0 -361
  213. package/features/steps/Identity.ts +0 -54
  214. package/features/steps/OTP.ts +0 -42
  215. package/features/steps/Parameters.ts +0 -162
  216. package/features/steps/Probe.ts +0 -38
  217. package/features/steps/Realtime.ts +0 -175
  218. package/features/steps/Workspace.ts +0 -48
  219. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  220. package/features/steps/components/audit/operations/record.js +0 -5
  221. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  222. package/features/steps/components/echo/operations/affect.js +0 -3
  223. package/features/steps/components/echo/operations/compute.js +0 -3
  224. package/features/steps/components/echo/operations/echo.js +0 -3
  225. package/features/steps/components/echo/operations/error.js +0 -7
  226. package/features/steps/components/echo/operations/identity.js +0 -3
  227. package/features/steps/components/echo/operations/parameters.js +0 -3
  228. package/features/steps/components/echo/operations/ping.js +0 -3
  229. package/features/steps/components/echo/operations/unwrap.js +0 -3
  230. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  231. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  232. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  233. package/features/steps/components/greeter/operations/greet.js +0 -3
  234. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  235. package/features/steps/components/notify/operations/send.js +0 -5
  236. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  237. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  238. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  239. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  240. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  241. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  242. package/features/steps/components/octets.tester/operations/err.js +0 -14
  243. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  244. package/features/steps/components/octets.tester/operations/id.js +0 -5
  245. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  246. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  247. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  248. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  249. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  250. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  251. package/features/steps/components/orders/operations/create.js +0 -7
  252. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  253. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  254. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  255. package/features/steps/components/pricing/operations/quote.js +0 -3
  256. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  257. package/features/steps/components/sequences/operations/numbers.js +0 -5
  258. package/features/steps/components/sequences/operations/tokens.js +0 -14
  259. package/features/steps/components/users/manifest.toa.yaml +0 -30
  260. package/features/steps/components/users/operations/create.js +0 -11
  261. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  262. package/features/steps/map.ts +0 -30
  263. package/features/steps/tsconfig.json +0 -9
  264. package/features/streams.feature +0 -35
  265. package/features/timestamps.feature +0 -41
  266. package/features/timing.feature +0 -49
  267. package/features/tracing.feature +0 -123
  268. package/schemas/annotation.cos.yaml +0 -125
  269. package/schemas/call.cos.yaml +0 -18
  270. package/schemas/directive.cos.yaml +0 -7
  271. package/schemas/method.cos.yaml +0 -23
  272. package/schemas/node.cos.yaml +0 -22
  273. package/schemas/query.cos.yaml +0 -31
  274. package/schemas/querystring.cos.yaml +0 -19
  275. package/schemas/range.cos.yaml +0 -10
  276. package/schemas/route.cos.yaml +0 -6
  277. package/source/Annotation.ts +0 -89
  278. package/source/Branch.test.ts +0 -40
  279. package/source/Branch.ts +0 -44
  280. package/source/Composition.ts +0 -51
  281. package/source/Context.ts +0 -11
  282. package/source/Directive.test.ts +0 -199
  283. package/source/Directive.ts +0 -248
  284. package/source/Discovery/Explorer.ts +0 -34
  285. package/source/Discovery/Site.test.ts +0 -147
  286. package/source/Discovery/Site.ts +0 -202
  287. package/source/Discovery/index.ts +0 -3
  288. package/source/Discovery/tree.test.ts +0 -175
  289. package/source/Discovery/tree.ts +0 -77
  290. package/source/Discovery/trunk.ts +0 -33
  291. package/source/Endpoint.test.ts +0 -67
  292. package/source/Endpoint.ts +0 -157
  293. package/source/Factory.ts +0 -42
  294. package/source/Gateway.ts +0 -390
  295. package/source/HTTP/Context.ts +0 -143
  296. package/source/HTTP/Probe.ts +0 -99
  297. package/source/HTTP/Server.ts +0 -430
  298. package/source/HTTP/Timing.ts +0 -14
  299. package/source/HTTP/address.test.ts +0 -28
  300. package/source/HTTP/address.ts +0 -16
  301. package/source/HTTP/exceptions.ts +0 -99
  302. package/source/HTTP/formats/form.ts +0 -21
  303. package/source/HTTP/formats/index.ts +0 -36
  304. package/source/HTTP/formats/json.ts +0 -14
  305. package/source/HTTP/formats/msgpack.ts +0 -14
  306. package/source/HTTP/formats/text.ts +0 -10
  307. package/source/HTTP/formats/yaml.test.ts +0 -22
  308. package/source/HTTP/formats/yaml.ts +0 -40
  309. package/source/HTTP/index.ts +0 -6
  310. package/source/HTTP/messages.test.ts +0 -196
  311. package/source/HTTP/messages.ts +0 -186
  312. package/source/HTTP/types.ts +0 -39
  313. package/source/Interception.ts +0 -37
  314. package/source/Introspection.ts +0 -179
  315. package/source/MCP/Server.ts +0 -335
  316. package/source/MCP/discover.ts +0 -51
  317. package/source/MCP/errors.ts +0 -80
  318. package/source/MCP/index.ts +0 -1
  319. package/source/MCP/schema.test.ts +0 -91
  320. package/source/MCP/schema.ts +0 -94
  321. package/source/MCP/tools.ts +0 -144
  322. package/source/MCP/types.ts +0 -84
  323. package/source/Mapping.ts +0 -101
  324. package/source/Query.test.ts +0 -54
  325. package/source/Query.ts +0 -277
  326. package/source/RPC/Context.ts +0 -75
  327. package/source/RPC/Dispatcher.ts +0 -150
  328. package/source/RPC/errors.test.ts +0 -77
  329. package/source/RPC/errors.ts +0 -82
  330. package/source/RPC/index.ts +0 -1
  331. package/source/RPC/names.test.ts +0 -141
  332. package/source/RPC/names.ts +0 -176
  333. package/source/RPC/types.ts +0 -34
  334. package/source/RTD/Context.ts +0 -16
  335. package/source/RTD/Directives.ts +0 -126
  336. package/source/RTD/Endpoint.ts +0 -27
  337. package/source/RTD/Match.ts +0 -11
  338. package/source/RTD/Method.ts +0 -39
  339. package/source/RTD/Node.ts +0 -169
  340. package/source/RTD/Route.ts +0 -93
  341. package/source/RTD/Tree.ts +0 -137
  342. package/source/RTD/expiration.test.ts +0 -81
  343. package/source/RTD/factory.ts +0 -105
  344. package/source/RTD/index.ts +0 -8
  345. package/source/RTD/segment.test.ts +0 -35
  346. package/source/RTD/segment.ts +0 -51
  347. package/source/RTD/syntax/index.ts +0 -2
  348. package/source/RTD/syntax/parse.test.ts +0 -196
  349. package/source/RTD/syntax/parse.ts +0 -171
  350. package/source/RTD/syntax/types.ts +0 -69
  351. package/source/RTD/walk.test.ts +0 -147
  352. package/source/Remotes.test.ts +0 -79
  353. package/source/Remotes.ts +0 -39
  354. package/source/Tenant.ts +0 -73
  355. package/source/const.ts +0 -45
  356. package/source/deployment.ts +0 -96
  357. package/source/directives/auth/Anonymous.test.ts +0 -70
  358. package/source/directives/auth/Anonymous.ts +0 -36
  359. package/source/directives/auth/Anyone.ts +0 -23
  360. package/source/directives/auth/Assert.ts +0 -43
  361. package/source/directives/auth/Authorization.test.ts +0 -24
  362. package/source/directives/auth/Authorization.ts +0 -388
  363. package/source/directives/auth/Delegate.test.ts +0 -36
  364. package/source/directives/auth/Delegate.ts +0 -54
  365. package/source/directives/auth/Echo.ts +0 -24
  366. package/source/directives/auth/Federation.ts +0 -104
  367. package/source/directives/auth/Id.ts +0 -37
  368. package/source/directives/auth/Incept.ts +0 -117
  369. package/source/directives/auth/Input.ts +0 -92
  370. package/source/directives/auth/Role.test.ts +0 -147
  371. package/source/directives/auth/Role.ts +0 -99
  372. package/source/directives/auth/Rule.ts +0 -59
  373. package/source/directives/auth/Scheme.ts +0 -31
  374. package/source/directives/auth/create.ts +0 -11
  375. package/source/directives/auth/index.ts +0 -3
  376. package/source/directives/auth/schemes.test.ts +0 -18
  377. package/source/directives/auth/schemes.ts +0 -39
  378. package/source/directives/auth/split.ts +0 -14
  379. package/source/directives/auth/types.ts +0 -75
  380. package/source/directives/cache/Cache.ts +0 -92
  381. package/source/directives/cache/Control.ts +0 -81
  382. package/source/directives/cache/Exact.ts +0 -7
  383. package/source/directives/cache/etag.ts +0 -38
  384. package/source/directives/cache/index.ts +0 -3
  385. package/source/directives/cache/types.ts +0 -9
  386. package/source/directives/cors/CORS.test.ts +0 -75
  387. package/source/directives/cors/CORS.ts +0 -88
  388. package/source/directives/cors/index.ts +0 -3
  389. package/source/directives/dev/Development.ts +0 -41
  390. package/source/directives/dev/Faulty.ts +0 -31
  391. package/source/directives/dev/Sleep.ts +0 -53
  392. package/source/directives/dev/Stub.ts +0 -14
  393. package/source/directives/dev/Throw.ts +0 -14
  394. package/source/directives/dev/index.ts +0 -3
  395. package/source/directives/dev/types.ts +0 -5
  396. package/source/directives/flow/Compose.ts +0 -98
  397. package/source/directives/flow/Fetch.ts +0 -86
  398. package/source/directives/flow/Flow.ts +0 -43
  399. package/source/directives/flow/index.ts +0 -3
  400. package/source/directives/flow/types.ts +0 -7
  401. package/source/directives/help/Family.ts +0 -122
  402. package/source/directives/help/Help.test.ts +0 -227
  403. package/source/directives/help/Help.ts +0 -47
  404. package/source/directives/help/Parameters.ts +0 -47
  405. package/source/directives/help/described.ts +0 -57
  406. package/source/directives/help/index.ts +0 -45
  407. package/source/directives/index.ts +0 -33
  408. package/source/directives/io/Directive.ts +0 -17
  409. package/source/directives/io/IO.ts +0 -118
  410. package/source/directives/io/Input.ts +0 -55
  411. package/source/directives/io/Message.ts +0 -1
  412. package/source/directives/io/Output.ts +0 -81
  413. package/source/directives/io/Status.test.ts +0 -88
  414. package/source/directives/io/Status.ts +0 -47
  415. package/source/directives/io/Throttle.ts +0 -30
  416. package/source/directives/io/index.ts +0 -3
  417. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  418. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  419. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  420. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  421. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  422. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  423. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  424. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  425. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  426. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  427. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  428. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  429. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  430. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  431. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  432. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  433. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  434. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  435. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  436. package/source/directives/io/lib/throttle/index.ts +0 -4
  437. package/source/directives/io/schemas.test.ts +0 -40
  438. package/source/directives/io/schemas.ts +0 -16
  439. package/source/directives/map/Authority.ts +0 -15
  440. package/source/directives/map/Buffer.ts +0 -15
  441. package/source/directives/map/Claims.ts +0 -63
  442. package/source/directives/map/Directive.ts +0 -4
  443. package/source/directives/map/Headers.ts +0 -60
  444. package/source/directives/map/Language.ts +0 -45
  445. package/source/directives/map/Languages.ts +0 -17
  446. package/source/directives/map/Map.ts +0 -85
  447. package/source/directives/map/Mapping.ts +0 -45
  448. package/source/directives/map/Properties.ts +0 -15
  449. package/source/directives/map/Segments.ts +0 -52
  450. package/source/directives/map/index.ts +0 -3
  451. package/source/directives/mcp/MCP.ts +0 -33
  452. package/source/directives/mcp/Tool.test.ts +0 -56
  453. package/source/directives/mcp/Tool.ts +0 -32
  454. package/source/directives/mcp/index.ts +0 -6
  455. package/source/directives/oauth/Discovery.ts +0 -66
  456. package/source/directives/oauth/documents.ts +0 -110
  457. package/source/directives/oauth/index.ts +0 -3
  458. package/source/directives/octets/Context.ts +0 -23
  459. package/source/directives/octets/Delete.ts +0 -96
  460. package/source/directives/octets/Directive.ts +0 -21
  461. package/source/directives/octets/Get.ts +0 -88
  462. package/source/directives/octets/Octets.ts +0 -82
  463. package/source/directives/octets/Put.ts +0 -186
  464. package/source/directives/octets/Workflow.ts +0 -60
  465. package/source/directives/octets/bytes.test.ts +0 -33
  466. package/source/directives/octets/bytes.ts +0 -18
  467. package/source/directives/octets/index.ts +0 -3
  468. package/source/directives/octets/schemas.test.ts +0 -20
  469. package/source/directives/octets/schemas.ts +0 -15
  470. package/source/directives/octets/types.ts +0 -9
  471. package/source/directives/octets/workflows/Execution.ts +0 -130
  472. package/source/directives/octets/workflows/Workflow.ts +0 -51
  473. package/source/directives/octets/workflows/index.ts +0 -1
  474. package/source/directives/require/Directive.ts +0 -5
  475. package/source/directives/require/Headers.ts +0 -19
  476. package/source/directives/require/Require.ts +0 -27
  477. package/source/directives/require/index.ts +0 -3
  478. package/source/discovery.ts +0 -1
  479. package/source/exceptions.ts +0 -47
  480. package/source/index.ts +0 -12
  481. package/source/io.ts +0 -4
  482. package/source/manifest.test.ts +0 -56
  483. package/source/manifest.ts +0 -56
  484. package/source/octets.d.ts +0 -17
  485. package/source/root.ts +0 -59
  486. package/source/schemas.test.ts +0 -31
  487. package/source/schemas.ts +0 -15
  488. package/source/service.ts +0 -94
  489. package/source/shortcuts.ts +0 -14
  490. package/source/userland.ts +0 -47
  491. package/transpiled/Annotation.d.ts +0 -70
  492. package/transpiled/Annotation.js +0 -2
  493. package/transpiled/Annotation.js.map +0 -1
  494. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  495. package/transpiled/RTD/syntax/parse.js +0 -112
  496. package/transpiled/RTD/syntax/parse.js.map +0 -1
  497. package/transpiled/RTD/syntax/types.d.ts +0 -52
  498. package/transpiled/RTD/syntax/types.js +0 -11
  499. package/transpiled/RTD/syntax/types.js.map +0 -1
  500. package/transpiled/const.d.ts +0 -36
  501. package/transpiled/const.js +0 -37
  502. package/transpiled/const.js.map +0 -1
  503. package/transpiled/deployment.d.ts +0 -6
  504. package/transpiled/deployment.js +0 -76
  505. package/transpiled/deployment.js.map +0 -1
  506. package/transpiled/manifest.d.ts +0 -3
  507. package/transpiled/manifest.js +0 -39
  508. package/transpiled/manifest.js.map +0 -1
  509. package/transpiled/schemas.d.ts +0 -9
  510. package/transpiled/schemas.js +0 -9
  511. package/transpiled/schemas.js.map +0 -1
  512. package/transpiled/shortcuts.d.ts +0 -3
  513. package/transpiled/shortcuts.js +0 -13
  514. package/transpiled/shortcuts.js.map +0 -1
  515. package/tsconfig.json +0 -13
  516. package/tsconfig.tsbuildinfo +0 -1
  517. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  518. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  519. package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
  520. package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
  521. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  522. package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
  523. package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
  524. package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
  525. package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
  526. package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
@@ -1,22 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { encode } from './yaml.js'
5
-
6
- it('encodes error values as their public properties', () => {
7
- const value = new (class InvalidUsernameError extends Error {
8
- public readonly code = 'INVALID_USERNAME'
9
- public override readonly message = 'Username is not meeting the requirements'
10
- })()
11
-
12
- assert.strictEqual(
13
- encode(value).toString(),
14
- 'code: INVALID_USERNAME\nmessage: Username is not meeting the requirements\n'
15
- )
16
- })
17
-
18
- it('writes a value the way its toJSON says', () => {
19
- const secret = { unwrap: () => 's3cret', toJSON: () => '<REDACTED>' }
20
-
21
- assert.strictEqual(encode({ a: 1, b: secret }).toString(), 'a: 1\nb: <REDACTED>\n')
22
- })
@@ -1,40 +0,0 @@
1
- import { yaml } from '@toa.io/generic'
2
-
3
- export const type = 'application/yaml'
4
- export const multipart = 'multipart/yaml'
5
-
6
- export function decode(buffer: Buffer, charset = 'utf-8'): any {
7
- const text = buffer.toString(charset as BufferEncoding)
8
-
9
- return yaml.load(text)
10
- }
11
-
12
- export function encode(value: any): Buffer {
13
- const serializable =
14
- value instanceof Error ? Object.assign({}, value) : represent(value)
15
- const text = yaml.dump(serializable, { lineWidth: -1, noRefs: true })
16
-
17
- return Buffer.from(text)
18
- }
19
-
20
- /** What says how it is to be written — a redacted secret — is written that way, as in JSON. */
21
- function represent(value: unknown): unknown {
22
- if (
23
- typeof value !== 'object' ||
24
- value === null ||
25
- value instanceof Date ||
26
- Buffer.isBuffer(value)
27
- )
28
- return value
29
-
30
- if ('toJSON' in value && typeof value.toJSON === 'function') return value.toJSON()
31
-
32
- if (Array.isArray(value)) return value.map(represent)
33
-
34
- const object = value as Record<string, unknown>
35
- const represented: Record<string, unknown> = {}
36
-
37
- for (const key of Object.keys(object)) represented[key] = represent(object[key])
38
-
39
- return represented
40
- }
@@ -1,6 +0,0 @@
1
- export * from './Server.js'
2
- export * from './messages.js'
3
- export * from './exceptions.js'
4
- export * from './Context.js'
5
- export * from './types.js'
6
- export * from './Probe.js'
@@ -1,196 +0,0 @@
1
- import { describe, it, beforeEach } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { PassThrough, Readable } from 'node:stream'
5
- import * as streamConsumers from 'node:stream/consumers'
6
- import { generate } from 'randomstring'
7
- import * as msgpack from 'msgpackr'
8
- import { multipart, read, type OutgoingMessage } from './messages.js'
9
- import { BadRequest, UnsupportedMediaType } from './exceptions.js'
10
- import { formats, types } from './formats/index.js'
11
- import { Timing } from './Timing.js'
12
- import type * as http from 'node:http'
13
- import type { Context } from './Context.js'
14
-
15
- beforeEach(() => {
16
- resetCalls()
17
- })
18
-
19
- describe('read', () => {
20
- it('should parse application/json', async () => {
21
- const path = generate()
22
- const headers = { 'content-type': 'application/json' }
23
- const input = { [generate()]: generate() }
24
- const json = JSON.stringify(input)
25
- const context = createContext(path, headers, json)
26
- const output = await read(context)
27
-
28
- assert.deepStrictEqual(output, input)
29
- })
30
-
31
- it('should parse application/yaml', async () => {
32
- const path = generate()
33
- const headers = { 'content-type': 'application/yaml' }
34
- const yaml = 'foo: 1'
35
- const request = createContext(path, headers, yaml)
36
- const value = await read(request)
37
-
38
- assert.deepStrictEqual(value, { foo: 1 })
39
- })
40
-
41
- it('should parse application/mskpack', async () => {
42
- const path = generate()
43
- const headers = { 'content-type': 'application/msgpack' }
44
- const input = { [generate()]: generate() }
45
- const msg = msgpack.encode(input)
46
- const request = createContext(path, headers, msg)
47
- const output = await read(request)
48
-
49
- assert.deepStrictEqual(output, input)
50
- })
51
-
52
- it('should parse text/plain', async () => {
53
- const path = generate()
54
- const headers = { 'content-type': 'text/plain' }
55
- const input = generate()
56
- const request = createContext(path, headers, input)
57
- const output = await read(request)
58
-
59
- assert.deepStrictEqual(output, input)
60
- })
61
-
62
- it('should parse application/json with charset parameter', async () => {
63
- const path = generate()
64
- const headers = { 'content-type': 'application/json; charset=utf-8' }
65
- const input = { [generate()]: generate() }
66
- const json = JSON.stringify(input)
67
- const context = createContext(path, headers, json)
68
- const output = await read(context)
69
-
70
- assert.deepStrictEqual(output, input)
71
- })
72
-
73
- it('should throw on unsupported request media type', async () => {
74
- const path = generate()
75
- const headers = { 'content-type': 'wtf/' + generate() }
76
- const request = createContext(path, headers)
77
-
78
- await assert.rejects(read(request), UnsupportedMediaType)
79
- })
80
-
81
- it('should throw on malformed content', async () => {
82
- const path = generate()
83
- const text = '{ "foo": "val... oops '
84
- const headers = { 'content-type': 'application/json' }
85
- const request = createContext(path, headers, text)
86
-
87
- await assert.rejects(read(request), BadRequest)
88
- })
89
-
90
- it('should parse application/x-www-form-urlencoded', async () => {
91
- const headers = { 'content-type': 'application/x-www-form-urlencoded' }
92
- const form = 'grant_type=authorization_code&code=SplxlO&scope=a+b'
93
- const request = createContext(generate(), headers, form)
94
-
95
- assert.deepStrictEqual(await read(request), {
96
- grant_type: 'authorization_code',
97
- code: 'SplxlO',
98
- scope: 'a b'
99
- })
100
- })
101
-
102
- it('should read a repeated form name as the list it is', async () => {
103
- const headers = { 'content-type': 'application/x-www-form-urlencoded' }
104
- const request = createContext(generate(), headers, 'resource=one&resource=two')
105
-
106
- assert.deepStrictEqual(await read(request), { resource: ['one', 'two'] })
107
- })
108
-
109
- it('should not offer a form as a reply encoding', () => {
110
- assert.ok(
111
- !types.includes('application/x-www-form-urlencoded'),
112
- 'a form is read and never written'
113
- )
114
- })
115
-
116
- it('should output correct mulitpart format', async () => {
117
- const response = new (class extends PassThrough {
118
- public readonly headers = new Headers()
119
-
120
- public setHeader(key: string, value: string): this {
121
- this.headers.set(key, value)
122
-
123
- return this
124
- }
125
- })()
126
-
127
- const context = { encoder: formats['text/plain'] } as unknown as Context
128
- const message = {
129
- body: Readable.from(['Hello', 'New', 'World'])
130
- } as unknown as OutgoingMessage
131
-
132
- const framed = multipart(message, context, response as unknown as http.ServerResponse)
133
-
134
- const result = await streamConsumers.text(framed)
135
-
136
- assert.strictEqual(
137
- result,
138
- [
139
- '--cut',
140
- '',
141
- 'ACK',
142
- '--cut',
143
- '',
144
- 'Hello',
145
- '--cut',
146
- '',
147
- 'New',
148
- '--cut',
149
- '',
150
- 'World',
151
- '--cut',
152
- '',
153
- 'FIN',
154
- '--cut--'
155
- ].join('\r\n')
156
- )
157
- })
158
- })
159
-
160
- export function createContext(
161
- url: string,
162
- headers: Record<string, string> = {},
163
- content: string | Buffer = ''
164
- ): Context {
165
- const data = Buffer.isBuffer(content) ? content : Buffer.from(content)
166
- const stream = Readable.from(data)
167
- let consumed = false
168
-
169
- const mock: Partial<Context> = {
170
- request: Object.assign(stream, {
171
- url,
172
- headers
173
- }) as unknown as Context['request'],
174
- url: new URL(url, 'https://host.local'),
175
- timing: new Timing(),
176
- buffer: async () => {
177
- if (consumed) throw new Error('Request body already consumed')
178
-
179
- consumed = true
180
-
181
- return data
182
- }
183
- }
184
-
185
- return mock as unknown as Context
186
- }
187
-
188
- function resetCalls(target = [], seen = new Set()) {
189
- if (target === null || typeof target !== 'object' || seen.has(target)) return
190
-
191
- seen.add(target)
192
-
193
- for (const value of Object.values(target))
194
- if (typeof value === 'function' && value.mock !== undefined) value.mock.resetCalls()
195
- else resetCalls(value, seen)
196
- }
@@ -1,186 +0,0 @@
1
- import { readFileSync } from 'node:fs'
2
- import { Readable } from 'node:stream'
3
- import { pipeline } from 'node:stream/promises'
4
- import * as contentType from 'content-type'
5
- import { console } from 'openspan'
6
- import { type Format, decoders } from './formats/index.js'
7
- import { BadRequest, NotAcceptable, UnsupportedMediaType } from './exceptions.js'
8
- import { environment } from '@toa.io/generic'
9
- import type { Context } from './Context.js'
10
- import type { ServerResponse } from './types.js'
11
-
12
- const context = environment.get('TOA_CONTEXT')
13
- const env = environment.get('TOA_ENV')
14
- const server =
15
- `Exposition/${JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version}` +
16
- ((context === undefined ? '' : ` ${context}`) + (env === undefined ? '' : `/${env}`))
17
-
18
- /**
19
- * Applies what the request accumulated in `pipelines.response` — an `io:output` restriction,
20
- * a `vary` a `map` directive owes. Separate from `write` because a message is not always
21
- * written: one call of several produces a value the reply is assembled from.
22
- */
23
- export async function shape(context: Context, message: OutgoingMessage): Promise<void> {
24
- for (const transform of context.pipelines.response) await transform(message)
25
- }
26
-
27
- export async function write(
28
- context: Context,
29
- response: ServerResponse,
30
- message: OutgoingMessage
31
- ): Promise<void> {
32
- await shape(context, message)
33
-
34
- if (message?.status !== undefined) response.statusCode = message.status
35
-
36
- response.setHeader('server', server)
37
- message.headers?.forEach((value, key) => response.setHeader(key, value))
38
- context.timing.append(response)
39
-
40
- if (response.destroyed) {
41
- console.warn('Request destroyed prematurely', { path: context.url.pathname })
42
-
43
- return
44
- }
45
-
46
- response.on('error', (exception: Error) =>
47
- console.warn('HTTP response error', { path: context.url.pathname, exception })
48
- )
49
-
50
- if (message.body instanceof Readable) stream(message, context, response)
51
- else send(message, context, response)
52
- }
53
-
54
- export async function read(context: Context): Promise<any> {
55
- const header = context.request.headers['content-type']
56
-
57
- if (header === undefined) return undefined
58
-
59
- const { type, parameters } = contentType.parse(header)
60
-
61
- if (!(type in decoders)) throw new UnsupportedMediaType()
62
-
63
- const format = decoders[type]
64
- const buf = await context.buffer()
65
-
66
- try {
67
- return format.decode(buf, parameters.charset)
68
- } catch (error: unknown) {
69
- console.debug('Failed to decode message', {
70
- path: context.url.pathname,
71
- error: error?.toString?.()
72
- })
73
-
74
- throw new BadRequest()
75
- }
76
- }
77
-
78
- function send(
79
- message: OutgoingMessage,
80
- context: Context,
81
- response: ServerResponse
82
- ): void {
83
- if (message.body === undefined || message.body === null) {
84
- // a HEAD reply carries no body but must still report the length a GET would
85
- // have returned, so a length already set by a directive is left alone
86
- if (!response.hasHeader('content-length')) response.setHeader('content-length', '0')
87
-
88
- response.end()
89
-
90
- return
91
- }
92
-
93
- if (context.encoder === null) throw new NotAcceptable()
94
-
95
- const buf = context.encoder.encode(message.body)
96
-
97
- response.setHeader('content-type', context.encoder.type)
98
- response.setHeader('content-length', buf.length.toString())
99
- response.appendHeader('vary', 'accept')
100
- response.end(buf)
101
- }
102
-
103
- function stream(
104
- message: OutgoingMessage,
105
- context: Context,
106
- response: ServerResponse
107
- ): void {
108
- const encoded = message.headers !== undefined && message.headers.has('content-type')
109
- const source: Readable = encoded ? message.body : multipart(message, context, response)
110
-
111
- // not awaited: a reply that streams is written long after the request is answered, and a
112
- // realtime subscription outlives the span the reply was produced in
113
- //
114
- // `pipeline` carries an error to every stage and destroys them. `pipe` leaves the stages it
115
- // built behind, and an `error` on a stream nobody listens to is an uncaught exception.
116
- pipeline(source, response).catch((exception: Error) =>
117
- console.warn('Message stream error', { path: context.url.pathname, exception })
118
- )
119
- }
120
-
121
- /**
122
- * Frames an object stream as `multipart/*`: an `ACK` part, the parts themselves, then `FIN`.
123
- * The body is a `Readable`; `write` reached here by testing it.
124
- */
125
- export function multipart(
126
- message: OutgoingMessage,
127
- context: Context,
128
- response: ServerResponse
129
- ): Readable {
130
- if (context.encoder === null) throw new NotAcceptable()
131
-
132
- const encoder = context.encoder
133
-
134
- response.setHeader('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`)
135
-
136
- return Readable.from(frames(message.body as Readable, encoder))
137
- }
138
-
139
- async function* frames(body: Readable, encoder: Format): AsyncGenerator<Buffer> {
140
- yield Buffer.concat([CUT, CRLF, encoder.encode('ACK'), CRLF, CUT])
141
-
142
- for await (const part of body)
143
- yield Buffer.concat([
144
- CRLF /* indicates no boundary headers */,
145
- encoder.encode(part),
146
- CRLF,
147
- CUT
148
- ])
149
-
150
- yield Buffer.concat([CRLF, encoder.encode('FIN'), CRLF, FINALCUT])
151
- }
152
-
153
- const BOUNDARY = 'cut'
154
- const CUT = Buffer.from(`--${BOUNDARY}\r\n`)
155
- const CRLF = Buffer.from('\r\n')
156
- const FINALCUT = Buffer.from(`--${BOUNDARY}--`)
157
-
158
- export interface OutgoingMessage {
159
- status?: number
160
- headers?: Headers
161
- body?: any
162
-
163
- /** what the reply carries for a cache to validate by; the `cache` family sets the headers */
164
- version?: number
165
- modified?: number | string
166
-
167
- /**
168
- * Built by the gateway rather than returned by an operation, as a request is `authentic`
169
- * when it was made by one: what is in it is the gateway's own, and the checks that answer
170
- * for what an operation returns have nothing to say about it.
171
- */
172
- authentic?: boolean
173
- }
174
-
175
- export interface Query {
176
- [key: string]: string | number | undefined
177
-
178
- id?: string
179
- criteria?: string
180
- search?: string
181
- sample?: number
182
- sort?: string
183
- omit?: string
184
- limit?: string
185
- version?: number
186
- }
@@ -1,39 +0,0 @@
1
- import type { Readable, Writable } from 'node:stream'
2
- import type { OutgoingHttpHeaders } from 'node:http'
3
- import type { IncomingHttpHeaders } from 'node:http2'
4
-
5
- /**
6
- * What Exposition requires of a request. Both `http.IncomingMessage` and
7
- * `http2.Http2ServerRequest` satisfy it, so the pipeline is written once.
8
- */
9
- export interface IncomingMessage extends Readable {
10
- url: string
11
- method: string
12
- complete: boolean
13
- headers: IncomingHeaders
14
- socket: { remoteAddress?: string | undefined }
15
- }
16
-
17
- /**
18
- * What Exposition requires of a response.
19
- *
20
- * `setHeader` and `appendHeader` return `void` because `Http2ServerResponse` returns
21
- * nothing from them, so neither can be chained.
22
- */
23
- export interface ServerResponse extends Writable {
24
- statusCode: number
25
- writableEnded: boolean
26
- setHeader: (name: string, value: number | string | string[]) => void
27
- appendHeader: (name: string, value: string | string[]) => void
28
- hasHeader: (name: string) => boolean
29
- writeHead: (status: number, headers?: OutgoingHttpHeaders) => ServerResponse
30
- }
31
-
32
- /**
33
- * HTTP/2's header map: HTTP/1.1's, plus the pseudo-headers. `:authority` is typed here
34
- * so the authority can be read without narrowing at every call site.
35
- */
36
- export type IncomingHeaders = IncomingHttpHeaders
37
-
38
- /** `h2c` is cleartext HTTP/2: there is no in-process TLS to negotiate ALPN with. */
39
- export type Protocol = 'h1' | 'h2c'
@@ -1,37 +0,0 @@
1
- import type * as http from './HTTP/index.js'
2
- import type { Input, Output } from './io.js'
3
-
4
- export class Interception implements Interceptor {
5
- private readonly interceptors: Interceptor[]
6
-
7
- public constructor(interceptors: Interceptor[], options: http.Options) {
8
- this.interceptors = interceptors
9
-
10
- // interceptors are module singletons, so a second gateway in one process —
11
- // which is how the features run — would otherwise inherit the first one's state
12
- for (const interceptor of interceptors) {
13
- interceptor.reset?.()
14
- interceptor.mount?.(options)
15
- }
16
- }
17
-
18
- public async intercept(input: Input): Promise<Output> {
19
- for (const interceptor of this.interceptors) {
20
- const output = await interceptor.intercept(input)
21
-
22
- if (output !== null) return output
23
- }
24
-
25
- return null
26
- }
27
- }
28
-
29
- export interface Interceptor {
30
- intercept: (input: Input) => Output | Promise<Output>
31
-
32
- /** Discards whatever the interceptor accumulated while serving. */
33
- reset?: () => void
34
-
35
- /** What the annotation says, for an interceptor that answers from it. */
36
- mount?: (options: http.Options) => void
37
- }