@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,430 +0,0 @@
1
- import assert from 'node:assert'
2
- import fs from 'node:fs'
3
- import os from 'node:os'
4
- import * as http from 'node:http'
5
- import * as http2 from 'node:http2'
6
- import { once } from 'node:events'
7
- import { setTimeout } from 'node:timers/promises'
8
- import { console, current, decide, decode, run, type SpanContext } from 'openspan'
9
- import { Connector } from '@toa.io/core'
10
- import { type OutgoingMessage, write } from './messages.js'
11
- import { ClientError, Exception } from './exceptions.js'
12
- import { Context } from './Context.js'
13
- import { Probe } from './Probe.js'
14
- import { PORT, PROBE } from '../const.js'
15
- import type { IncomingMessage, Protocol, ServerResponse } from './types.js'
16
- import type { Bouncer, MCP, OAuth, RPC } from '../Annotation.js'
17
-
18
- export class Server extends Connector {
19
- private readonly server: http.Server | http2.Http2Server
20
- private readonly properties: Properties
21
- /** Host to authority. A map: a `Host` of `constructor` names what a plain object answers. */
22
- private readonly authorities: Map<string, string>
23
-
24
- /** Tracked for the drain: `Http2Server` has no `closeIdleConnections`. */
25
- private readonly sessions = new Set<http2.ServerHttp2Session>()
26
-
27
- private readonly probe: Probe
28
-
29
- private process?: Processor
30
-
31
- private constructor(properties: Properties) {
32
- super()
33
-
34
- this.properties = properties
35
- this.authorities = new Map(
36
- Object.entries(properties.authorities).map(([key, value]) => [value, key])
37
- )
38
- this.server = instantiate(properties.protocol)
39
- this.probe = new Probe(properties.probe)
40
-
41
- this.server.on('request', (req, res) =>
42
- this.listener(req as unknown as IncomingMessage, res as unknown as ServerResponse)
43
- )
44
-
45
- if (properties.protocol === 'h1') this.h1(this.server as http.Server)
46
- else this.h2(this.server as http2.Http2Server)
47
- }
48
-
49
- public static create(options: Options): Server {
50
- const properties: Properties = { ...DEFAULTS, ...options }
51
-
52
- return new Server(properties)
53
- }
54
-
55
- public attach(process: Processor): void {
56
- this.process = process
57
- }
58
-
59
- protected override async open(): Promise<void> {
60
- // answers 503 from here; the gateway's dependencies have settled by the time `open` runs
61
- await this.probe.listen()
62
-
63
- this.server.listen(this.properties.port)
64
-
65
- await once(this.server, 'listening')
66
-
67
- console.info('HTTP Server is listening')
68
-
69
- this.probe.complete()
70
-
71
- console.info('Ready')
72
- }
73
-
74
- protected override async close(): Promise<void> {
75
- await this.probe.close()
76
-
77
- this.server.close()
78
-
79
- // GOAWAY lets in-flight streams finish; `Http2Server` has no `closeIdleConnections`
80
- if (this.properties.protocol === 'h1')
81
- (this.server as http.Server).closeIdleConnections()
82
- else for (const session of this.sessions) session.close()
83
-
84
- console.info('Stopped accepting new connections')
85
-
86
- // keep-alive clients hold connections open indefinitely, so the drain is bounded
87
- await Promise.race([
88
- once(this.server, 'close'),
89
- setTimeout(this.properties.drain, undefined, { ref: false })
90
- ])
91
-
92
- if (this.properties.protocol === 'h1')
93
- (this.server as http.Server).closeAllConnections()
94
- else for (const session of this.sessions) session.destroy()
95
-
96
- console.info('Stopped')
97
- }
98
-
99
- /** A malformed HTTP/1.1 request has no framing to answer in, so the status line is written by hand. */
100
- private h1(server: http.Server): void {
101
- server.on('clientError', (error, socket) => {
102
- console.warn('Client connection error', error)
103
-
104
- if (socket.writable) socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
105
- else socket.destroy()
106
- })
107
- }
108
-
109
- /** HTTP/2 has no `clientError`: failures surface per session, per stream, or per frame. */
110
- private h2(server: http2.Http2Server): void {
111
- server.on('session', (session) => {
112
- this.sessions.add(session)
113
- session.on('close', () => this.sessions.delete(session))
114
- })
115
-
116
- server.on('sessionError', (error) => console.warn('Session error', error))
117
- server.on('streamError', (error) => console.warn('Stream error', error))
118
-
119
- server.on('unknownProtocol', (socket) => {
120
- console.warn('Unknown protocol')
121
- socket.destroy()
122
- })
123
- }
124
-
125
- private listener(request: IncomingMessage, response: ServerResponse): void {
126
- request.once('error', (error) => {
127
- console.warn('Request error', errorAttributes(request, error))
128
-
129
- if (!response.writableEnded) response.destroy()
130
- })
131
-
132
- // no listener on `request.socket`: under HTTP/2 it is the session's socket, shared by
133
- // every concurrent stream, and removing listeners on it would strip the siblings'
134
-
135
- const host = authorityOf(request)?.toLowerCase()
136
-
137
- if (host === undefined || !HOST.test(host)) {
138
- console.warn(
139
- 'Request without a valid authority',
140
- errorAttributes(request, new Error('Invalid authority'))
141
- )
142
-
143
- response.writeHead(400).end()
144
-
145
- return
146
- }
147
-
148
- // directives and components read `host`; HTTP/2 sends `:authority` instead, and what a
149
- // component sees must not depend on the protocol the request arrived over
150
- request.headers.host ??= host
151
-
152
- const url = parse(request, host)
153
-
154
- if (url instanceof Error) {
155
- console.warn('Invalid request', errorAttributes(request, url))
156
-
157
- response.writeHead(400).end()
158
-
159
- return
160
- }
161
-
162
- if (request.method === undefined || !this.properties.methods.has(request.method)) {
163
- response.writeHead(501).end()
164
-
165
- return
166
- }
167
-
168
- assert(this.process !== undefined, 'Request processor is not attached')
169
-
170
- const authority = this.authorities.get(host) ?? host
171
-
172
- // if the request carries no trace context, the trace starts here
173
- const remote = trace(request.headers)
174
-
175
- const processing =
176
- remote === null
177
- ? this.serve(request, response, authority, url)
178
- : run(remote, async () => await this.serve(request, response, authority, url))
179
-
180
- processing.catch((error) => {
181
- console.error('Request processing failed', error)
182
-
183
- if (!response.writableEnded) response.writeHead(500).end()
184
- })
185
- }
186
-
187
- // eslint-disable-next-line max-params
188
- private async serve(
189
- request: IncomingMessage,
190
- response: ServerResponse,
191
- authority: string,
192
- url: URL
193
- ): Promise<void> {
194
- await console.span(
195
- {
196
- name: `${request.method} ${request.url}`,
197
- kind: 'server',
198
- service: 'exposition',
199
- attributes: { method: request.method, url: request.url, authority }
200
- },
201
- async () => {
202
- response.setHeader('ray', current()!.traceId)
203
-
204
- const context = new Context(authority, request, this.properties, url)
205
-
206
- await this.process!(context)
207
- .then(this.success(context, response))
208
- .catch(this.fail(context, response))
209
- .finally(() => request.removeAllListeners('error'))
210
- }
211
- )
212
- }
213
-
214
- private success(context: Context, response: ServerResponse) {
215
- return async (message: OutgoingMessage) => {
216
- let status = message.status
217
-
218
- if (status === undefined)
219
- if (message.body === null) status = 404
220
- else if (context.request.method === 'POST') status = 201
221
- else if (message.body === undefined && context.request.method !== 'HEAD')
222
- status = 204
223
- else status = 200
224
-
225
- message.status = status
226
-
227
- await write(context, response, message)
228
- }
229
- }
230
-
231
- private fail(context: Context, response: ServerResponse) {
232
- return async (exception: Error) => {
233
- try {
234
- // Over HTTP/2 the reply is followed by RST_STREAM(NO_ERROR), which tells the client
235
- // to stop sending without discarding the response — so the body is never read.
236
- if (!context.request.complete && this.properties.protocol === 'h1')
237
- await adam(context.request)
238
-
239
- const status = exception instanceof Exception ? exception.status : 500
240
- const span = current()
241
-
242
- // https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status
243
- if (status >= 500 && span !== undefined) span.status = 'error'
244
-
245
- if (!response.writableEnded) {
246
- response.statusCode = status
247
-
248
- const message: OutgoingMessage = {
249
- status: response.statusCode,
250
- authentic: true
251
- }
252
-
253
- // eslint-disable-next-line max-depth
254
- if (exception instanceof Exception && exception.headers !== undefined)
255
- message.headers = exception.headers
256
-
257
- // eslint-disable-next-line max-depth
258
- if (context.encoder === null) message.body = undefined
259
- else if (exception instanceof ClientError || this.properties.debug)
260
- message.body =
261
- exception instanceof Exception
262
- ? exception.body
263
- : ((this.properties.debug && exception.stack) ?? exception.message)
264
-
265
- await write(context, response, message)
266
- }
267
- } catch (final) {
268
- console.error('Error in error handler', final)
269
-
270
- if (!response.writableEnded)
271
- try {
272
- response.writeHead(500).end()
273
- } catch {
274
- // Nothing more we can do
275
- }
276
- }
277
- }
278
- }
279
- }
280
-
281
- function instantiate(protocol: Protocol): http.Server | http2.Http2Server {
282
- if (protocol === 'h1') return http.createServer()
283
-
284
- return http2.createServer({
285
- // realtime pins one stream per subscription, and they all share a session
286
- maxSessionMemory: SESSION_MEMORY,
287
- settings: { initialWindowSize: WINDOW }
288
- })
289
- }
290
-
291
- /**
292
- * The authority the request is addressed to. HTTP/2 carries it in `:authority` and omits
293
- * `host` entirely, so reading `host` alone would leave every HTTP/2 request unattributed.
294
- */
295
- function authorityOf(request: IncomingMessage): string | undefined {
296
- return request.headers[':authority'] ?? request.headers.host
297
- }
298
-
299
- /** Parsing the URL is how a request is validated, so the `Context` is handed the result. */
300
- function parse(request: IncomingMessage, authority: string): URL | Error {
301
- try {
302
- return new URL(request.url, `https://${authority}`)
303
- } catch (error) {
304
- return error as Error
305
- }
306
- }
307
-
308
- // https://github.com/whatwg/fetch/issues/1254
309
- async function adam(request: IncomingMessage): Promise<void> {
310
- const devnull = fs.createWriteStream(os.devNull)
311
-
312
- devnull.on('error', () => undefined)
313
- request.pipe(devnull).on('error', () => undefined)
314
-
315
- await once(request, 'end')
316
- }
317
-
318
- function errorAttributes(
319
- request: IncomingMessage,
320
- error: Error & any
321
- ): RequestErrorAttributes {
322
- const attributes: RequestErrorAttributes = {
323
- path: request.url,
324
- method: request.method,
325
- name: error.name
326
- }
327
-
328
- if (typeof error.code === 'string') attributes.code = error.code
329
-
330
- if (typeof error.stack === 'string') attributes.stack = error.stack
331
-
332
- return attributes
333
- }
334
-
335
- export const DRAIN = 10 // seconds
336
-
337
- /** Megabytes a single HTTP/2 session may hold, over Node's default of 10. */
338
- const SESSION_MEMORY = 128
339
-
340
- /** Per-stream flow control window. The default 64 KiB throttles in proportion to RTT. */
341
- const WINDOW = 1024 * 1024
342
-
343
- /**
344
- * Extracts the remote trace context from the request headers.
345
- *
346
- * The `ray` header adopts the trace by ID only and does not bypass sampling:
347
- * the sampling decision is made by the server.
348
- */
349
- function trace(headers: IncomingMessage['headers']): SpanContext | null {
350
- if (typeof headers.traceparent === 'string') return decode(headers.traceparent)
351
-
352
- // adopting a trace by ID does not bypass sampling
353
- if (
354
- typeof headers.ray === 'string' &&
355
- RAY.test(headers.ray) &&
356
- headers.ray !== ZERO_RAY
357
- )
358
- return { traceId: headers.ray.toLowerCase(), sampled: decide() }
359
-
360
- return null
361
- }
362
-
363
- /**
364
- * A host name with an optional port, or a bracketed IPv6 literal. The URL parser admits
365
- * `,` `;` `=` `(` `)` and quotes in a host, and the authority is written into criteria.
366
- */
367
- const HOST = /^(?:[a-z0-9.-]{1,253}|\[[0-9a-f:.]{2,45}\])(?::\d{1,5})?$/
368
-
369
- const RAY = /^[\da-f]{32}$/i
370
- const ZERO_RAY = '0'.repeat(32)
371
-
372
- const DEFAULTS: Omit<Properties, 'authorities'> = {
373
- methods: new Set<string>([
374
- 'OPTIONS',
375
- 'GET',
376
- 'HEAD',
377
- 'POST',
378
- 'PUT',
379
- 'PATCH',
380
- 'DELETE',
381
- 'LOCK',
382
- 'UNLOCK'
383
- ]),
384
- debug: false,
385
- port: PORT,
386
- drain: DRAIN * 1000,
387
- protocol: 'h1',
388
- probe: PROBE
389
- }
390
-
391
- interface Properties {
392
- authorities: Record<string, string>
393
- methods: Set<string>
394
- debug: boolean
395
- port: number
396
- drain: number
397
- protocol: Protocol
398
-
399
- /** Port of the readiness probe, which is HTTP/1.1 whatever the gateway serves. */
400
- probe: number
401
-
402
- /** The header the client address is read from; the connection's address without one. */
403
- ip?: string
404
-
405
- /** Failed authentications an address may make; none are metered unless set. */
406
- bouncer?: Bouncer
407
-
408
- /** The authorization server this context exposes; none is exposed without it. */
409
- oauth?: OAuth
410
-
411
- /** JSON-RPC at `/.rpc`; none is served without it. */
412
- rpc?: RPC
413
-
414
- /** MCP at `/.mcp`; none is served without it. */
415
- mcp?: MCP
416
- }
417
-
418
- export type Options = { authorities: Properties['authorities'] } & {
419
- [K in Exclude<keyof Properties, 'authorities'>]?: Properties[K]
420
- }
421
-
422
- export type Processor = (input: Context) => Promise<OutgoingMessage>
423
-
424
- interface RequestErrorAttributes {
425
- path: string
426
- method: string
427
- name: string
428
- code?: string
429
- stack?: string
430
- }
@@ -1,14 +0,0 @@
1
- import { performance } from 'node:perf_hooks'
2
- import type { ServerResponse } from './types.js'
3
-
4
- /** How long the request took, from received to written: one number, the header's. */
5
- export class Timing {
6
- private readonly start = performance.now()
7
-
8
- public append(response: ServerResponse): void {
9
- response.setHeader(
10
- 'server-timing',
11
- `total;dur=${(performance.now() - this.start).toFixed(3)}`
12
- )
13
- }
14
- }
@@ -1,28 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { address } from './address.js'
5
- import type { IncomingMessage } from './types.js'
6
-
7
- const request = (headers: Record<string, string>): IncomingMessage =>
8
- ({ headers, socket: { remoteAddress: '9.9.9.9' } }) as unknown as IncomingMessage
9
-
10
- it('should be nothing without a header named', () => {
11
- assert.equal(address(request({ 'x-forwarded-for': '1.1.1.1' })), undefined)
12
- })
13
-
14
- it('should be the last value of the named header', () => {
15
- assert.equal(
16
- address(request({ 'x-forwarded-for': '1.1.1.1, 2.2.2.2' }), 'x-forwarded-for'),
17
- '2.2.2.2'
18
- )
19
- assert.equal(
20
- address(request({ 'cf-connecting-ip': '3.3.3.3' }), 'cf-connecting-ip'),
21
- '3.3.3.3'
22
- )
23
- })
24
-
25
- it('should be nothing when the named header is absent or empty', () => {
26
- assert.equal(address(request({}), 'x-real-ip'), undefined)
27
- assert.equal(address(request({ 'x-real-ip': ' ' }), 'x-real-ip'), undefined)
28
- })
@@ -1,16 +0,0 @@
1
- import type { IncomingMessage } from './types.js'
2
-
3
- /**
4
- * The client address: the value of the header the deployment names, and nothing otherwise.
5
- * Of a header holding a list, the last value is the one the edge in front appended. The
6
- * connection's address is never it: behind an edge it is the edge's.
7
- */
8
- export function address(request: IncomingMessage, header?: string): string | undefined {
9
- if (header === undefined) return
10
-
11
- const value = request.headers[header]
12
- const raw = Array.isArray(value) ? value[value.length - 1] : value
13
- const last = raw?.slice(raw.lastIndexOf(',') + 1).trim()
14
-
15
- return last === '' ? undefined : last
16
- }
@@ -1,99 +0,0 @@
1
- export class Exception extends Error {
2
- public readonly status: number
3
- public readonly body?: any
4
-
5
- /** Headers the status is not complete without, like `Retry-After` on a 429. */
6
- public readonly headers?: Headers
7
-
8
- protected constructor(status: number, body?: any, headers?: Headers) {
9
- super()
10
- this.status = status
11
- this.body = body
12
- this.headers = headers
13
- }
14
- }
15
-
16
- export class ClientError extends Exception {}
17
-
18
- export class BadRequest extends ClientError {
19
- public constructor(body?: any) {
20
- super(400, body)
21
- }
22
- }
23
-
24
- export class Unauthorized extends ClientError {
25
- public constructor(body?: any) {
26
- super(401, body)
27
- }
28
- }
29
-
30
- export class Forbidden extends ClientError {
31
- public constructor(body?: any) {
32
- super(403, body)
33
- }
34
- }
35
-
36
- export class NotFound extends ClientError {
37
- public constructor(body?: any) {
38
- super(404, body)
39
- }
40
- }
41
-
42
- export class MethodNotAllowed extends ClientError {
43
- public constructor(headers?: Headers) {
44
- super(405, undefined, headers)
45
- }
46
- }
47
-
48
- export class NotAcceptable extends ClientError {
49
- public constructor() {
50
- super(406)
51
- }
52
- }
53
-
54
- export class Conflict extends ClientError {
55
- public constructor(body?: any) {
56
- super(409, body)
57
- }
58
- }
59
-
60
- export class PreconditionFailed extends ClientError {
61
- public constructor() {
62
- super(412)
63
- }
64
- }
65
-
66
- export class RequestEntityTooLarge extends ClientError {
67
- public constructor(body?: any) {
68
- super(413, body)
69
- }
70
- }
71
-
72
- export class UnsupportedMediaType extends ClientError {
73
- public constructor() {
74
- super(415)
75
- }
76
- }
77
-
78
- export class UnprocessableEntity extends ClientError {
79
- public constructor(body?: any) {
80
- super(422, body)
81
- }
82
- }
83
-
84
- export class TooManyRequests extends ClientError {
85
- /** @param retry Seconds until the request would be admitted. */
86
- public constructor(retry?: number) {
87
- super(
88
- 429,
89
- undefined,
90
- retry === undefined ? undefined : new Headers({ 'retry-after': String(retry) })
91
- )
92
- }
93
- }
94
-
95
- export class ServiceUnavailable extends Exception {
96
- public constructor(body?: any) {
97
- super(503, body)
98
- }
99
- }
@@ -1,21 +0,0 @@
1
- export const type = 'application/x-www-form-urlencoded'
2
-
3
- /**
4
- * A form is read and never written: it is what an HTML form and a handful of protocols send,
5
- * and nothing asks for a reply in it.
6
- *
7
- * A name repeated in a form is a list, which is how a form says one — `URLSearchParams` keeps
8
- * every value, and a name given once stays the string it was written as.
9
- */
10
- export function decode(buffer: Buffer, charset = 'utf-8'): any {
11
- const params = new URLSearchParams(buffer.toString(charset as BufferEncoding))
12
- const value: Record<string, string | string[]> = {}
13
-
14
- for (const name of new Set(params.keys())) {
15
- const values = params.getAll(name)
16
-
17
- value[name] = values.length === 1 ? values[0] : values
18
- }
19
-
20
- return value
21
- }
@@ -1,36 +0,0 @@
1
- import * as json from './json.js'
2
- import * as yaml from './yaml.js'
3
- import * as msgpack from './msgpack.js'
4
- import * as text from './text.js'
5
- import * as form from './form.js'
6
-
7
- /** What a reply may be encoded as, and so what `accept` is negotiated against. */
8
- export const formats: Record<string, Format> = {
9
- [json.type]: json,
10
- [yaml.type]: yaml,
11
- [text.type]: text,
12
- [msgpack.type]: msgpack
13
- }
14
-
15
- export const types = Object.keys(formats)
16
-
17
- /**
18
- * What a request body may arrive as. Everything a reply may be, and a form besides — which
19
- * is read and never written, so it is not something a reply can be asked for.
20
- */
21
- export const decoders: Record<string, Decoder> = {
22
- ...formats,
23
- [form.type]: form
24
- }
25
-
26
- export interface Decoder {
27
- readonly type: string
28
-
29
- decode: (buffer: Buffer, charset?: string) => any
30
- }
31
-
32
- export interface Format extends Decoder {
33
- readonly multipart: string
34
-
35
- encode: (value: any) => Buffer
36
- }
@@ -1,14 +0,0 @@
1
- export const type = 'application/json'
2
- export const multipart = 'multipart/json'
3
-
4
- export function decode(buffer: Buffer, charset = 'utf-8'): any {
5
- const text = buffer.toString(charset as BufferEncoding)
6
-
7
- return JSON.parse(text)
8
- }
9
-
10
- export function encode(value: any): Buffer {
11
- const text = JSON.stringify(value)
12
-
13
- return Buffer.from(text)
14
- }
@@ -1,14 +0,0 @@
1
- import { pack, unpack } from 'msgpackr'
2
-
3
- export function decode(buffer: Buffer): any {
4
- return unpack(buffer)
5
- }
6
-
7
- export function encode(value: any): Buffer {
8
- if (typeof value === 'object' && value !== null) Object.setPrototypeOf(value, null)
9
-
10
- return pack(value)
11
- }
12
-
13
- export const type = 'application/msgpack'
14
- export const multipart = 'multipart/msgpack'
@@ -1,10 +0,0 @@
1
- export const type = 'text/plain'
2
- export const multipart = 'multipart/text'
3
-
4
- export function decode(buffer: Buffer, charset = 'utf-8'): any {
5
- return buffer.toString(charset as BufferEncoding)
6
- }
7
-
8
- export function encode(value: { toString: () => string }): Buffer {
9
- return Buffer.from(value.toString())
10
- }