@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,179 +0,0 @@
1
- import type { Remote } from '@toa.io/core'
2
- import type { Context } from './HTTP/index.js'
3
-
4
- export interface Introspection {
5
- /**
6
- * What the route states this method is. The operation states what it is too, and that is
7
- * not this: an operation is written without knowledge of any route, and a method is an
8
- * operation and a route together — the same operation mounted twice is two methods, and
9
- * one sentence cannot be true of both. The operation's own is for the Introspection.
10
- */
11
- description?: string
12
-
13
- /** what a person is shown where a client lists this method, which a name is not */
14
- title?: string
15
-
16
- /**
17
- * whether reaching it takes nothing at all — `auth:anonymous`. Said rather than left
18
- * unsaid, because it is also what refuses a caller presenting a credential: a client
19
- * cannot know that from an answer that says nothing.
20
- */
21
- anonymous?: boolean
22
-
23
- /** whether reaching it takes being someone, whoever — `auth:anyone` and its like */
24
- authenticated?: boolean
25
-
26
- /** whether reaching it is being the identity it is about — `auth:id` */
27
- private?: boolean
28
-
29
- /** whether reaching it takes a role — `auth:role` */
30
- protected?: boolean
31
-
32
- /** and whether that role is one of the `system` scope */
33
- system?: boolean
34
-
35
- /** whether the route publishes this method to a model — [`mcp:tool`](mcp.md) */
36
- mcp?: boolean
37
- route?: Record<string, Schema>
38
- query?: Record<string, Schema>
39
-
40
- /** what the body is, where it is a file rather than a value — [`octets:put`](octets.md) */
41
- octets?: Octets
42
- input?: Schema
43
- output?: Schema
44
- errors?: string[]
45
- }
46
-
47
- /** What sending a file to a resource takes, which is not something a schema states. */
48
- export interface Octets {
49
- /** what may be sent, in the syntax of an `accept` header; anything where unstated */
50
- accept?: string
51
-
52
- /** the largest body it takes, as it is written and as a refusal reports it */
53
- limit: string
54
-
55
- /**
56
- * Whether the reply arrives as a stream of parts rather than as one object: a workflow
57
- * runs on what was stored, and each step answers as it finishes. The first part is the
58
- * entry itself, which is what a caller that wants nothing else reads and stops.
59
- */
60
- stream?: boolean
61
- }
62
-
63
- export type Schema = Awaited<ReturnType<Remote['explain']>>['input']
64
-
65
- /**
66
- * The same request, as a description of a resource rather than a call to one. A directive
67
- * that answers differently to the two reads `exploratory` — `Anonymous` is the one that
68
- * does, because the rule refusing a credential at an `anonymous` route is about a reply a
69
- * cache would hold, and a description is not one.
70
- */
71
- export function describing(context: Context): Context {
72
- return Object.create(context, {
73
- exploratory: { value: true, enumerable: true }
74
- }) as Context
75
- }
76
-
77
- /**
78
- * The same, in the order the shape states — whatever order the families that filled it ran
79
- * in. What a resource says about itself is read, so it is written the way it is documented.
80
- */
81
- export function order(introspection: Introspection): Introspection {
82
- const ordered: Introspection = {}
83
-
84
- for (const key of KEYS)
85
- if (introspection[key] !== undefined) (ordered[key] as unknown) = introspection[key]
86
-
87
- return ordered
88
- }
89
-
90
- const KEYS = [
91
- 'title',
92
- 'description',
93
- 'anonymous',
94
- 'authenticated',
95
- 'private',
96
- 'protected',
97
- 'system',
98
- 'mcp',
99
- 'route',
100
- 'query',
101
- 'octets',
102
- 'input',
103
- 'output',
104
- 'errors'
105
- ] as const
106
-
107
- /**
108
- * The schema of one input property, taken out of it: a property another family fills is
109
- * not the caller's to send, and what took it says where it comes from instead.
110
- */
111
- export function take(carrier: Carrier, property: string): Schema | undefined {
112
- const input = carrier.input as Shape | null | undefined
113
- const properties = input?.properties
114
-
115
- if (
116
- input === undefined ||
117
- input === null ||
118
- properties === undefined ||
119
- !(property in properties)
120
- )
121
- return undefined
122
-
123
- const schema = properties[property]
124
-
125
- delete properties[property]
126
-
127
- if (input.required !== undefined)
128
- input.required = input.required.filter((name) => name !== property)
129
-
130
- return schema
131
- }
132
-
133
- /**
134
- * A schema restricted to the properties a whitelist admits, and an array's items where it
135
- * describes an array. What is not an object of properties is left alone: a whitelist has
136
- * nothing to say about a string.
137
- */
138
- export function restrict(
139
- schema: Schema | undefined,
140
- allowed: Set<string>
141
- ): Schema | undefined {
142
- const shape = schema as Shape | null | undefined
143
-
144
- if (shape === undefined || shape === null) return schema
145
-
146
- if (shape.items !== undefined)
147
- return { ...shape, items: restrict(shape.items, allowed) } as unknown as Schema
148
-
149
- if (shape.properties === undefined) return schema
150
-
151
- const properties: Record<string, Schema> = {}
152
-
153
- for (const [name, property] of Object.entries(shape.properties))
154
- if (allowed.has(name)) properties[name] = property
155
-
156
- const restricted: Shape = { ...shape, properties }
157
-
158
- if (shape.required !== undefined)
159
- restricted.required = shape.required.filter((name) => allowed.has(name))
160
-
161
- return restricted as unknown as Schema
162
- }
163
-
164
- /**
165
- * What a schema is read as here: the keywords these narrow, and whatever else it carries.
166
- * `Schema` as core declares it requires `properties`, which a schema of a string has not,
167
- * so the two are cast through rather than assigned.
168
- */
169
- /** Whatever states an input: an explanation as the operation gave it, or as a route left it. */
170
- interface Carrier {
171
- input?: Schema
172
- }
173
-
174
- interface Shape {
175
- properties?: Record<string, Schema>
176
- required?: string[]
177
- items?: Schema
178
- [keyword: string]: unknown
179
- }
@@ -1,335 +0,0 @@
1
- import { console } from 'openspan'
2
- import { BRANCH_TTL } from '../const.js'
3
- import * as http from '../HTTP/index.js'
4
- import { discovery, type Discovery } from './discover.js'
5
- import { call, list, type Scope } from './tools.js'
6
- import {
7
- HEADER_MISMATCH,
8
- INVALID_PARAMS,
9
- INVALID_REQUEST,
10
- METHOD_NOT_FOUND,
11
- PARSE,
12
- UNSUPPORTED_VERSION,
13
- failure,
14
- response
15
- } from './errors.js'
16
- import {
17
- CLIENT_CAPABILITIES,
18
- JSONRPC,
19
- LEGACY,
20
- MODERN,
21
- PROTOCOL_VERSION,
22
- SERVER_INFO,
23
- VERSIONS,
24
- type Cache,
25
- type Message,
26
- type Params
27
- } from './types.js'
28
- import type { Tree } from '../RTD/index.js'
29
- import type { MCP } from '../Annotation.js'
30
-
31
- /**
32
- * The Model Context Protocol, as one endpoint that remembers nothing between requests.
33
- *
34
- * Two revisions are answered from it. The modern one carries the version and the client's
35
- * capabilities in every request; the one before it opens with `initialize`, which is what
36
- * most clients still send. Neither needs a session, and neither needs a stream: every method
37
- * here answers one object, which is why this can exist in a package that serves no SSE.
38
- */
39
- export class Server {
40
- private readonly options: MCP
41
- private readonly tree: Tree
42
- private readonly discovery: Discovery
43
- private readonly origins: Set<string>
44
-
45
- public constructor(options: MCP, tree: Tree) {
46
- this.options = options
47
- this.tree = tree
48
- this.discovery = discovery(options)
49
- this.origins = new Set(options.origins ?? [])
50
- }
51
-
52
- public async process(
53
- context: http.Context,
54
- route: http.Processor
55
- ): Promise<http.OutgoingMessage> {
56
- if (context.request.method !== 'POST')
57
- throw new http.MethodNotAllowed(new Headers({ allow: 'POST' }))
58
-
59
- this.admit(context)
60
-
61
- const message = await this.read(context)
62
- const version = this.version(context, message)
63
- const modern = version === MODERN
64
-
65
- if (modern) this.mirrored(context, message)
66
-
67
- const result = await this.answer({ context, route, tree: this.tree }, message, modern)
68
-
69
- // a notification is answered by not answering, and there is nothing here to remember
70
- if (message.id === undefined) return { status: ACCEPTED }
71
-
72
- return {
73
- status: OK,
74
- body: { jsonrpc: JSONRPC, id: message.id, result },
75
- headers: new Headers({ 'cache-control': 'no-store' })
76
- }
77
- }
78
-
79
- /** Who may reach the endpoint at all, before anything it carries is read. */
80
- private admit(context: http.Context): void {
81
- const origin = context.request.headers.origin
82
-
83
- // the revision requires this against DNS rebinding; a request without one is no browser's
84
- if (origin !== undefined && !this.origins.has(origin))
85
- throw new http.Forbidden('Origin is not allowed')
86
-
87
- if (this.options.anonymous === true) return
88
-
89
- if ((context as { identity?: unknown }).identity == null)
90
- throw new http.Unauthorized()
91
- }
92
-
93
- private async answer(
94
- scope: Scope,
95
- message: Message,
96
- modern: boolean
97
- ): Promise<unknown> {
98
- const params = message.params ?? {}
99
-
100
- switch (message.method) {
101
- case 'server/discover':
102
- return this.complete(this.discovery.modern, modern, DISCOVERY_CACHE)
103
-
104
- case 'tools/list':
105
- return this.complete(
106
- { tools: await list(this.tree, scope.context) },
107
- modern,
108
- TOOLS_CACHE
109
- )
110
-
111
- case 'tools/call':
112
- return this.complete(await this.tool(scope, params), modern)
113
-
114
- // what a client of an earlier revision opens with; no session is made and none is named
115
- case 'initialize':
116
- return this.discovery.legacy(declared(params))
117
-
118
- case 'notifications/initialized':
119
- return null
120
-
121
- case 'ping':
122
- return {}
123
-
124
- default:
125
- throw new http.NotFound(
126
- response(
127
- message.id ?? null,
128
- failure(
129
- METHOD_NOT_FOUND,
130
- `'${message.method}' is not a method this server answers`
131
- )
132
- )
133
- )
134
- }
135
- }
136
-
137
- private async tool(scope: Scope, params: Params): Promise<object> {
138
- const named = params.name
139
-
140
- if (typeof named !== 'string')
141
- throw new http.BadRequest(
142
- response(
143
- null,
144
- failure(INVALID_PARAMS, '`tools/call` states the tool it calls by name')
145
- )
146
- )
147
-
148
- const args = params.arguments ?? {}
149
-
150
- if (typeof args !== 'object' || args === null || Array.isArray(args))
151
- throw new http.BadRequest(
152
- response(null, failure(INVALID_PARAMS, '`arguments` must be an object'))
153
- )
154
-
155
- return await console.span(
156
- { name: named },
157
- async () => await call(scope, named, args as Params)
158
- )
159
- }
160
-
161
- /**
162
- * Every result of the modern revision says what kind it is, and who answered it. Where the
163
- * revision names the operation as one whose result may be held, it says that too, and must.
164
- */
165
- private complete(result: object, modern: boolean, cache?: Cache): object {
166
- return modern
167
- ? {
168
- ...result,
169
- ...cache,
170
- resultType: 'complete',
171
- _meta: { [SERVER_INFO]: this.serverInfo() }
172
- }
173
- : result
174
- }
175
-
176
- private serverInfo(): unknown {
177
- return (this.discovery.modern as { _meta: Record<string, unknown> })._meta[
178
- SERVER_INFO
179
- ]
180
- }
181
-
182
- /**
183
- * Which revision this request is of. `initialize` is one by itself; otherwise the header
184
- * says, and a request that names none is of a revision that did not send one.
185
- */
186
- private version(context: http.Context, message: Message): string {
187
- if (message.method === 'initialize') return LEGACY
188
-
189
- const header = context.request.headers['mcp-protocol-version']
190
- const stated = declared(message.params ?? {})
191
-
192
- if (header !== undefined && stated !== undefined && header !== stated)
193
- throw new http.BadRequest(
194
- response(
195
- message.id ?? null,
196
- failure(
197
- HEADER_MISMATCH,
198
- `'MCP-Protocol-Version' says '${String(header)}' and the body says '${stated}'`
199
- )
200
- )
201
- )
202
-
203
- const value = (header as string | undefined) ?? stated
204
-
205
- if (value === undefined) return LEGACY
206
-
207
- if (!VERSIONS.includes(value))
208
- throw new http.BadRequest(
209
- response(
210
- message.id ?? null,
211
- failure(UNSUPPORTED_VERSION, 'Unsupported protocol version', {
212
- supported: VERSIONS,
213
- requested: value
214
- })
215
- )
216
- )
217
-
218
- return value
219
- }
220
-
221
- /**
222
- * What the modern revision mirrors into headers, so that what routes a request and what
223
- * answers it cannot be told two different things.
224
- */
225
- private mirrored(context: http.Context, message: Message): void {
226
- const meta = metadata(message.params ?? {})
227
-
228
- if (meta?.[PROTOCOL_VERSION] === undefined || meta[CLIENT_CAPABILITIES] === undefined)
229
- throw new http.BadRequest(
230
- response(
231
- message.id ?? null,
232
- failure(
233
- INVALID_PARAMS,
234
- `'_meta' states '${PROTOCOL_VERSION}' and '${CLIENT_CAPABILITIES}'`
235
- )
236
- )
237
- )
238
-
239
- const id = message.id ?? null
240
-
241
- mirrors(context, { id, header: 'mcp-method', value: message.method })
242
-
243
- if (message.method === 'tools/call')
244
- mirrors(context, { id, header: 'mcp-name', value: (message.params ?? {}).name })
245
- }
246
-
247
- /** A body the decoder refuses is a parse error; a media type it does not know is not. */
248
- private async read(context: http.Context): Promise<Message> {
249
- let body: unknown
250
-
251
- try {
252
- body = await context.body()
253
- } catch (exception) {
254
- if (exception instanceof http.BadRequest)
255
- throw new http.BadRequest(response(null, failure(PARSE, 'Parse error')))
256
-
257
- throw exception
258
- }
259
-
260
- if (
261
- typeof body !== 'object' ||
262
- body === null ||
263
- Array.isArray(body) ||
264
- (body as Message).jsonrpc !== JSONRPC ||
265
- typeof (body as Message).method !== 'string'
266
- )
267
- throw new http.BadRequest(
268
- response(null, failure(INVALID_REQUEST, 'A request carries one JSON-RPC message'))
269
- )
270
-
271
- return body as Message
272
- }
273
- }
274
-
275
- /** What a header says must be what the body says, or what routes and what answers differ. */
276
- function mirrors(context: http.Context, mirror: Mirror): void {
277
- const { id, header, value } = mirror
278
- const stated = context.request.headers[header]
279
-
280
- if (stated === undefined)
281
- throw new http.BadRequest(
282
- response(id, failure(HEADER_MISMATCH, `'${header}' is required`))
283
- )
284
-
285
- if (decode(String(stated)) !== value)
286
- throw new http.BadRequest(
287
- response(
288
- id,
289
- failure(
290
- HEADER_MISMATCH,
291
- `'${header}' says '${String(stated)}' and the body says '${String(value)}'`
292
- )
293
- )
294
- )
295
- }
296
-
297
- interface Mirror {
298
- id: string | number | null
299
- header: string
300
- value: unknown
301
- }
302
-
303
- function metadata(params: Params): Record<string, unknown> | undefined {
304
- const meta = params._meta
305
-
306
- return typeof meta === 'object' && meta !== null
307
- ? (meta as Record<string, unknown>)
308
- : undefined
309
- }
310
-
311
- function declared(params: Params): string | undefined {
312
- const stated = metadata(params)?.[PROTOCOL_VERSION]
313
-
314
- return typeof stated === 'string' ? stated : undefined
315
- }
316
-
317
- /** What a header value that could not be written as ASCII was encoded as. */
318
- function decode(value: string): string {
319
- if (!value.startsWith(SENTINEL) || !value.endsWith(TERMINATOR)) return value
320
-
321
- const encoded = value.slice(SENTINEL.length, -TERMINATOR.length)
322
-
323
- return Buffer.from(encoded, 'base64').toString('utf8')
324
- }
325
-
326
- /** A tool list is what the tree holds, which stands until a branch of it expires. */
327
- const TOOLS_CACHE: Cache = { ttlMs: BRANCH_TTL, cacheScope: 'private' }
328
-
329
- /** What the annotation says, which is the same for every caller until the application is redeployed. */
330
- const DISCOVERY_CACHE: Cache = { ttlMs: BRANCH_TTL, cacheScope: 'public' }
331
-
332
- const OK = 200
333
- const ACCEPTED = 202
334
- const SENTINEL = '=?base64?'
335
- const TERMINATOR = '?='
@@ -1,51 +0,0 @@
1
- import { readFileSync } from 'node:fs'
2
- import { LEGACY, MODERN, SERVER_INFO, VERSIONS } from './types.js'
3
- import type { MCP } from '../Annotation.js'
4
-
5
- /**
6
- * What a client is told before it calls anything: the revisions served, what is served, and
7
- * who serves it. It is a function of the annotation alone, so it is built once and answered
8
- * as it is.
9
- */
10
- export interface Discovery {
11
- /** `server/discover`, which the modern revision has replaced the handshake with. */
12
- modern: object
13
-
14
- /** `initialize`, in the shape a client of an earlier revision reads. */
15
- legacy: (offered: string | undefined) => object
16
- }
17
-
18
- export function discovery(options: MCP): Discovery {
19
- const info = { name: options.name, version: VERSION }
20
-
21
- // `listChanged` is a stream a client holds open, and this endpoint holds none
22
- const capabilities = { tools: {} }
23
-
24
- const modern: Record<string, unknown> = {
25
- supportedVersions: VERSIONS,
26
- capabilities,
27
- _meta: { [SERVER_INFO]: info }
28
- }
29
-
30
- if (options.instructions !== undefined) modern.instructions = options.instructions
31
-
32
- function legacy(offered: string | undefined): object {
33
- const value: Record<string, unknown> = {
34
- // what the client asked for where that is served, and the newest handshake otherwise
35
- protocolVersion: offered !== undefined && offered !== MODERN ? offered : LEGACY,
36
- capabilities,
37
- serverInfo: info
38
- }
39
-
40
- if (options.instructions !== undefined) value.instructions = options.instructions
41
-
42
- return value
43
- }
44
-
45
- return { modern, legacy }
46
- }
47
-
48
- /** What this gateway is, which is what answers however an application names itself. */
49
- const VERSION: string = JSON.parse(
50
- readFileSync(new URL('../../package.json', import.meta.url), 'utf8')
51
- ).version
@@ -1,80 +0,0 @@
1
- import * as http from '../HTTP/index.js'
2
- import { JSONRPC, type Failure, type Response } from './types.js'
3
-
4
- /* The five JSON-RPC 2.0 fixes, which mean the same to every client. */
5
- export const PARSE = -32700
6
- export const INVALID_REQUEST = -32600
7
- export const METHOD_NOT_FOUND = -32601
8
- export const INVALID_PARAMS = -32602
9
- export const INTERNAL = -32603
10
-
11
- /*
12
- * MCP's own. It reserves -32020 to -32099 for the specification and tells an implementation
13
- * to use nothing of -32000 to -32019 at all — which is where this gateway's JSON-RPC codes
14
- * sit, so none of them is answered here.
15
- */
16
- export const HEADER_MISMATCH = -32020
17
- export const MISSING_CAPABILITY = -32021
18
- export const UNSUPPORTED_VERSION = -32022
19
-
20
- export function failure(code: number, message: string, data?: unknown): Failure {
21
- const value: Failure = { code, message }
22
-
23
- if (data !== undefined) value.data = data
24
-
25
- return value
26
- }
27
-
28
- export function response(id: string | number | null, error: Failure): Response {
29
- return { jsonrpc: JSONRPC, id, error }
30
- }
31
-
32
- /**
33
- * What an exception says as a JSON-RPC error.
34
- *
35
- * The readable text is `body`, never `message`: `http.Exception` calls `super()` with no
36
- * argument, so every one of them carries an empty `message`.
37
- */
38
- export function of(exception: unknown): Failure {
39
- if (exception instanceof http.NotFound || exception instanceof http.MethodNotAllowed)
40
- return failure(METHOD_NOT_FOUND, text(exception, 'Method not found'))
41
-
42
- if (exception instanceof http.BadRequest)
43
- return failure(INVALID_PARAMS, text(exception, 'Invalid params'))
44
-
45
- return failure(INTERNAL, 'Internal error')
46
- }
47
-
48
- /**
49
- * What the call was refused with, which a model reads and may correct itself by: what the
50
- * operation said, where it said anything, and otherwise what the status means here.
51
- */
52
- export function refusal(exception: http.ClientError): string {
53
- const body = exception.body
54
-
55
- if (typeof body !== 'object' || body === null || typeof body.code !== 'string')
56
- return text(exception, REFUSALS[exception.status] ?? 'Refused')
57
-
58
- const message = body.message as unknown
59
-
60
- return typeof message === 'string' && message !== '' ? message : (body.code as string)
61
- }
62
-
63
- /**
64
- * A refusal a model can act on, where the reply carried no words of its own. `auth` does
65
- * not say which of its directives refused, and `auth:id` is what most of them are: a call
66
- * naming a record that is not the caller's is the likeliest thing to have gone wrong.
67
- */
68
- const REFUSALS: Record<number, string> = {
69
- 400: 'The arguments were refused',
70
- 403: "Not authorized. If an argument names an identity or a record, it may not be the caller's own",
71
- 404: 'There is nothing at that address',
72
- 409: 'The record changed while the call was made',
73
- 429: 'Too many calls'
74
- }
75
-
76
- function text(exception: http.Exception, fallback: string): string {
77
- return typeof exception.body === 'string' && exception.body !== ''
78
- ? exception.body
79
- : fallback
80
- }
@@ -1 +0,0 @@
1
- export { Server } from './Server.js'