@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,40 +0,0 @@
1
- import { describe, it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import * as schemas from './schemas.js'
5
-
6
- describe('throttle', () => {
7
- const rest = { requests: 1, interval: 1 }
8
-
9
- it('should validate key', () => {
10
- assert.doesNotThrow(() => schemas.throttle.validate({ key: 'ip', ...rest }))
11
- })
12
-
13
- it('should validate every key component', () => {
14
- for (const key of ['ip', 'path', 'route', 'identity'])
15
- assert.doesNotThrow(() => schemas.throttle.validate({ key, ...rest }))
16
-
17
- assert.doesNotThrow(() =>
18
- schemas.throttle.validate({ key: { segment: 'id' }, ...rest })
19
- )
20
- assert.doesNotThrow(() =>
21
- schemas.throttle.validate({
22
- key: ['route', { segment: 'id' }],
23
- ...rest
24
- })
25
- )
26
- })
27
-
28
- it('should reject an unknown key component', () => {
29
- assert.throws(() => schemas.throttle.validate({ key: 'header', ...rest }))
30
- assert.throws(() =>
31
- schemas.throttle.validate({ key: { header: 'x-real-ip' }, ...rest })
32
- )
33
- })
34
-
35
- it('should reject a declaration it no longer honours', () => {
36
- // metering earns the budget back rather than locking a key out, so a `cooldown`
37
- // left behind is not something to ignore quietly
38
- assert.throws(() => schemas.throttle.validate({ key: 'ip', cooldown: 1, ...rest }))
39
- })
40
- })
@@ -1,16 +0,0 @@
1
- import { resolve } from 'node:path'
2
- import * as schemas from '@toa.io/schemas'
3
- import type { Schema } from '@toa.io/schemas'
4
- import type { Permissions as InputPermissions } from './Input.js'
5
- import type { Permissions as OutputPermissions } from './Output.js'
6
- import type { Declaration as ThrottleDeclaration } from './lib/throttle/index.js'
7
-
8
- import type { Message } from './Message.js'
9
-
10
- const path = resolve(import.meta.dirname, '../../../schemas/io')
11
- const namespace = schemas.namespace(path)
12
-
13
- export const message: Schema<Message | Message[]> = namespace.schema('message')
14
- export const input: Schema<InputPermissions> = namespace.schema('input')
15
- export const output: Schema<OutputPermissions> = namespace.schema('output')
16
- export const throttle: Schema<ThrottleDeclaration> = namespace.schema('throttle')
@@ -1,15 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Mapping } from './Mapping.js'
3
- import type { Input } from '../../io.js'
4
-
5
- export class Authority extends Mapping<string> {
6
- public constructor(property: string) {
7
- assert.ok(typeof property === 'string', '`map:authority` must be a string')
8
-
9
- super(property)
10
- }
11
-
12
- public properties(context: Input): Record<string, string> {
13
- return { [this.value]: context.authority }
14
- }
15
- }
@@ -1,15 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Mapping } from './Mapping.js'
3
- import type { Input } from '../../io.js'
4
-
5
- export class BufferMapping extends Mapping<string> {
6
- public constructor(property: string) {
7
- assert.ok(typeof property === 'string', '`map:buffer` must be a string')
8
-
9
- super(property)
10
- }
11
-
12
- public override async properties(context: Input): Promise<Record<string, string>> {
13
- return { [this.value]: (await context.buffer()).toString('utf8') }
14
- }
15
- }
@@ -1,63 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Mapping } from './Mapping.js'
3
- import type { Component } from '@toa.io/core'
4
- import type { Remotes } from '../../Remotes.js'
5
- import type { Input } from '../../io.js'
6
-
7
- export class Claims extends Mapping<Record<string, string>> {
8
- private readonly discovery!: Promise<Component>
9
- private federation: Component | null = null
10
-
11
- public constructor(map: Record<string, string>, remotes: Remotes) {
12
- assert.ok(map.constructor === Object, '`map:claims` must be an object')
13
-
14
- assert.ok(
15
- Object.values(map).every((value) => typeof value === 'string'),
16
- '`map:claims ` must be an object with string values'
17
- )
18
-
19
- super(map, remotes)
20
-
21
- this.discovery = remotes.discover('identity', 'federation')
22
- }
23
-
24
- public override async properties(
25
- context: Input
26
- ): Promise<Record<string, string> | null> {
27
- const authentication = context.request.headers.authorization
28
-
29
- if (authentication === undefined) return null
30
-
31
- const claims = await this.claims(authentication)
32
-
33
- if (claims === null) return null
34
-
35
- return Object.entries(this.value).reduce(
36
- (properties: Record<string, string>, [property, claim]) => {
37
- const value = claims[claim]
38
-
39
- if (value !== undefined) properties[property] = value
40
-
41
- return properties
42
- },
43
- {}
44
- )
45
- }
46
-
47
- private async claims(authentication: string): Promise<Record<string, string> | null> {
48
- const [scheme, credentials] = authentication.split(' ')
49
-
50
- if (scheme !== 'Bearer' || credentials === undefined) return null
51
-
52
- this.federation ??= await this.discovery
53
-
54
- const claims = await this.federation.invoke<Record<string, string> | Error>(
55
- 'decode',
56
- { input: credentials }
57
- )
58
-
59
- if (claims instanceof Error) return null
60
-
61
- return claims
62
- }
63
- }
@@ -1,4 +0,0 @@
1
- import type { Mapping } from './Mapping.js'
2
- import type { Property } from './Properties.js'
3
-
4
- export type Directive = Mapping | Property
@@ -1,60 +0,0 @@
1
- import assert from 'node:assert'
2
- import { cors } from '../cors/index.js'
3
- import { Mapping } from './Mapping.js'
4
- import { take } from '../../Introspection.js'
5
- import type { Input } from '../../io.js'
6
- import type { Introspection } from '../../Introspection.js'
7
-
8
- /**
9
- * Forbidden request header names: the browser sets them itself and a script cannot
10
- * list them in `Access-Control-Request-Headers`, so there is nothing to advertise
11
- * or vary on. The value is still read, it just never reaches CORS.
12
- */
13
- const FORBIDDEN = new Set(['host', 'origin'])
14
-
15
- export class Headers extends Mapping<Record<string, string>> {
16
- private readonly headers: string[]
17
-
18
- public constructor(map: Record<string, string>) {
19
- assert.ok(map.constructor === Object, '`map:headers` must be an object')
20
-
21
- assert.ok(
22
- Object.values(map).every((value) => typeof value === 'string'),
23
- '`map:headers` must be an object with string values'
24
- )
25
-
26
- super(map)
27
-
28
- this.headers = Object.values(map).filter((header) => !FORBIDDEN.has(header))
29
- this.headers.forEach((header) => cors.allow(header))
30
- }
31
-
32
- /**
33
- * The property is filled from a request header, so it is not the body's to send. Which
34
- * header, and that there is one at all, is not answered: what an application reads off a
35
- * request is its own, and a caller has nowhere to put one anyway.
36
- */
37
- public override explain(introspection: Introspection): void {
38
- for (const property of Object.keys(this.value)) take(introspection, property)
39
- }
40
-
41
- public properties(context: Input): Record<string, string> {
42
- context.pipelines.response.push((response) => {
43
- response.headers ??= new global.Headers()
44
-
45
- for (const header of this.headers) response.headers.append('vary', header)
46
- })
47
-
48
- return Object.entries(this.value).reduce(
49
- (properties: Record<string, string>, [property, header]) => {
50
- const value = context.request.headers[header]
51
-
52
- if (value !== undefined)
53
- properties[property] = Array.isArray(value) ? value.join(', ') : value
54
-
55
- return properties
56
- },
57
- {}
58
- )
59
- }
60
- }
@@ -1,45 +0,0 @@
1
- import assert from 'node:assert'
2
- import Negotiator from 'negotiator'
3
- import { cors } from '../cors/index.js'
4
- import { Mapping } from './Mapping.js'
5
- import { Languages } from './Languages.js'
6
- import type { Input } from '../../io.js'
7
- import type { Parameter } from '../../RTD/index.js'
8
- import type { Directive } from './Directive.js'
9
-
10
- export class Language extends Mapping<string> {
11
- private languages: string[] | null = null
12
-
13
- public constructor(property: string) {
14
- assert.ok(typeof property === 'string', '`map:language` must be a string')
15
-
16
- cors.allow('accept-language')
17
- super(property)
18
- }
19
-
20
- public properties(
21
- context: Input,
22
- parameters: Parameter[],
23
- directives: Directive[]
24
- ): Record<string, string> {
25
- this.languages ??= this.resolve(directives)
26
-
27
- const negotiator = new Negotiator(context.request)
28
- const language = negotiator.language(this.languages) ?? this.languages[0]
29
-
30
- context.pipelines.response.push((response) => {
31
- response.headers ??= new Headers()
32
- response.headers.set('content-language', language)
33
- response.headers.append('vary', 'accept-language')
34
- })
35
-
36
- return { [this.value]: language }
37
- }
38
-
39
- private resolve(directives: Directive[]): string[] {
40
- for (const directive of directives)
41
- if (directive instanceof Languages) return directive.value
42
-
43
- throw new Error('Supported languages are not defined, add `map:languages` directive')
44
- }
45
- }
@@ -1,17 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Property } from './Properties.js'
3
-
4
- export class Languages extends Property<'languages'> {
5
- public constructor(value: string[]) {
6
- assert.ok(
7
- Array.isArray(value) && value.length > 0,
8
- '`map:languages` must be a non-empty array of strings'
9
- )
10
- assert.ok(
11
- value.every((language) => typeof language === 'string'),
12
- '`map:languages` must be an array of strings'
13
- )
14
-
15
- super('languages', value)
16
- }
17
- }
@@ -1,85 +0,0 @@
1
- import { match } from 'matchacho'
2
- import { properties, Property } from './Properties.js'
3
- import { Mapping } from './Mapping.js'
4
- import { Headers } from './Headers.js'
5
- import { Languages } from './Languages.js'
6
- import { Language } from './Language.js'
7
- import { Segments } from './Segments.js'
8
- import { Authority } from './Authority.js'
9
- import { BufferMapping } from './Buffer.js'
10
- import { Claims } from './Claims.js'
11
- import type { Directive } from './Directive.js'
12
- import type { Properties } from './Properties.js'
13
- import type { DirectiveFamily, Parameter } from '../../RTD/index.js'
14
- import type { Input, Output } from '../../io.js'
15
- import type { Introspection } from '../../Introspection.js'
16
- import type { Remotes } from '../../Remotes.js'
17
-
18
- export class Map implements DirectiveFamily {
19
- public readonly name = 'map'
20
- public readonly mandatory = false
21
-
22
- private remotes!: Remotes
23
-
24
- public create(name: string, value: unknown, remotes: Remotes): Property | Mapping {
25
- this.remotes = remotes
26
-
27
- return match(
28
- name,
29
- () => properties.has(name),
30
- (name: PN) => new Property(name, value as PV),
31
- () => name in mappings,
32
- (name: keyof typeof mappings) => new mappings[name](value, remotes),
33
- () => {
34
- throw new Error(`Directive 'map:${name}' is not implemented`)
35
- }
36
- )
37
- }
38
-
39
- public explain(
40
- directives: Directive[],
41
- _: Input,
42
- introspection: Introspection
43
- ): Introspection {
44
- for (const directive of directives)
45
- if (directive instanceof Mapping) directive.explain(introspection)
46
-
47
- return introspection
48
- }
49
-
50
- public async precall(
51
- directives: Directive[],
52
- context: Input,
53
- parameters: Parameter[]
54
- ): Promise<Output> {
55
- const properties = {}
56
-
57
- for (const directive of directives)
58
- if (directive instanceof Mapping)
59
- Object.assign(
60
- properties,
61
- await directive.properties(context, parameters, directives)
62
- )
63
-
64
- context.pipelines.body.push((body: unknown) => {
65
- if (body === undefined || body === null || typeof body !== 'object')
66
- return properties
67
- else return Object.assign(body, properties)
68
- })
69
-
70
- return null
71
- }
72
- }
73
-
74
- type PN = keyof Properties
75
- type PV = Properties[PN]
76
-
77
- const mappings: Record<string, new (value: any, remotes: Remotes) => Directive> = {
78
- authority: Authority,
79
- buffer: BufferMapping,
80
- headers: Headers,
81
- languages: Languages,
82
- language: Language,
83
- segments: Segments,
84
- claims: Claims
85
- }
@@ -1,45 +0,0 @@
1
- import { take } from '../../Introspection.js'
2
- import type { Remotes } from '../../Remotes.js'
3
- import type { Directive } from './Directive.js'
4
- import type { Input } from '../../io.js'
5
- import type { Parameter } from '../../RTD/index.js'
6
- import type { Introspection } from '../../Introspection.js'
7
-
8
- export abstract class Mapping<T = unknown> {
9
- protected value: T
10
- protected remotes?: Remotes
11
-
12
- protected constructor(value: T, remotes?: Remotes) {
13
- this.value = value
14
- this.remotes = remotes
15
- }
16
-
17
- public abstract properties(
18
- context: Input,
19
- parameters: Parameter[],
20
- directives: Directive[]
21
- ): Output
22
-
23
- /**
24
- * What this mapping does to what the method says about itself, which is the reverse of
25
- * what it does to a request: a property the gateway fills is taken out of the input,
26
- * because it is not the caller's to send.
27
- *
28
- * The default says nothing more than that. A claim, an authority and a language come
29
- * from the request itself and there is nowhere for a caller to put one; a header and a
30
- * segment are the caller's, and those say where.
31
- */
32
- public explain(introspection: Introspection): void {
33
- for (const property of this.names()) take(introspection, property)
34
- }
35
-
36
- /** The input properties this mapping fills, however its value names them. */
37
- protected names(): string[] {
38
- return typeof this.value === 'string'
39
- ? [this.value]
40
- : Object.keys(this.value as object)
41
- }
42
- }
43
-
44
- type Properties = Record<string, unknown> | null
45
- type Output = Properties | Promise<Properties>
@@ -1,15 +0,0 @@
1
- export interface Properties {
2
- languages: string[]
3
- }
4
-
5
- export class Property<K extends keyof Properties = keyof Properties> {
6
- public readonly name: K
7
- public readonly value: Properties[K]
8
-
9
- public constructor(name: K, value: Properties[K]) {
10
- this.name = name
11
- this.value = value
12
- }
13
- }
14
-
15
- export const properties = new Set('languages')
@@ -1,52 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Mapping } from './Mapping.js'
3
- import { take } from '../../Introspection.js'
4
- import type { Parameter } from '../../RTD/index.js'
5
- import type { Introspection, Schema } from '../../Introspection.js'
6
-
7
- export class Segments extends Mapping<Record<string, string>> {
8
- public constructor(map: Record<string, string>) {
9
- assert.ok(map.constructor === Object, '`map:segments` must be an object')
10
-
11
- assert.ok(
12
- Object.values(map).every((value) => typeof value === 'string'),
13
- '`map:segments ` must be an object with string values'
14
- )
15
-
16
- super(map)
17
- }
18
-
19
- /** A segment is the caller's, so it moves to the route rather than out of sight. */
20
- public override explain(introspection: Introspection): void {
21
- for (const property of Object.keys(this.value)) {
22
- const schema = take(introspection, property)
23
-
24
- introspection.route ??= {}
25
- introspection.route[property] = schema ?? ({ type: 'string' } as unknown as Schema)
26
- }
27
- }
28
-
29
- public override properties(
30
- _: unknown,
31
- parameters: Parameter[]
32
- ): Record<string, string> {
33
- return Object.entries(this.value).reduce(
34
- (properties: Record<string, string>, [property, parameter]) => {
35
- const cut = parameter[0] === '~'
36
-
37
- if (cut) parameter = parameter.slice(1)
38
-
39
- const index = parameters.findIndex(({ name }) => name === parameter)
40
-
41
- assert.ok(index > -1, `Route parameter '${parameter}' is missing`)
42
-
43
- properties[property] = parameters[index].value
44
-
45
- if (cut) parameters.splice(index, 1)
46
-
47
- return properties
48
- },
49
- {}
50
- )
51
- }
52
- }
@@ -1,3 +0,0 @@
1
- import { Map } from './Map.js'
2
-
3
- export const map = new Map()
@@ -1,33 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Tool } from './Tool.js'
3
- import type { DirectiveFamily } from '../../RTD/index.js'
4
- import type { Context } from '../../HTTP/index.js'
5
- import type { Introspection } from '../../Introspection.js'
6
-
7
- /** The name the family is declared under, and what `MCP` asks a method for. */
8
- export const FAMILY = 'mcp'
9
-
10
- export class MCP implements DirectiveFamily<Tool> {
11
- public readonly name = FAMILY
12
- public readonly mandatory = false
13
-
14
- /** Whether this method is published, which is what the nearest declaration says. */
15
- public static published(directives: Tool[] | undefined): boolean {
16
- return directives?.[0]?.published ?? false
17
- }
18
-
19
- /**
20
- * Whether this method is published to a model, which is what the route declares. Whether
21
- * one is served at all is the annotation's, and a route says nothing of that.
22
- */
23
- public explain(directives: Tool[], _: Context, introspection: Introspection): Introspection {
24
- return MCP.published(directives) ? { ...introspection, mcp: true } : introspection
25
- }
26
-
27
- // eslint-disable-next-line max-params
28
- public create(name: string, value: unknown, _: unknown, route: string): Tool {
29
- assert.ok(name === 'tool', `Unknown directive: mcp:${name}`)
30
-
31
- return new Tool(value, route)
32
- }
33
- }
@@ -1,56 +0,0 @@
1
- import assert from 'node:assert'
2
- import { describe, it } from 'node:test'
3
- import { Tool } from './Tool.js'
4
- import { MCP } from './MCP.js'
5
-
6
- describe('mcp:tool', () => {
7
- it('should publish a method', () => {
8
- assert.strictEqual(new Tool(true, '/pots/hot').published, true)
9
- })
10
-
11
- it('should withdraw one, because a declaration is inherited', () => {
12
- assert.strictEqual(new Tool(false, '/pots/hot').published, false)
13
- })
14
-
15
- it('should not accept what a tool is, which is `help:method`', () => {
16
- assert.throws(() => new Tool('The pots that are hot.', '/pots'), /`help:method`/)
17
- assert.throws(() => new Tool({ title: 'Hot pots' }, '/pots'), /`help:method`/)
18
- })
19
-
20
- it('should not accept a value that is not one', () => {
21
- assert.throws(() => new Tool(undefined, '/pots'), /whether the method is published/)
22
- assert.throws(() => new Tool(null, '/pots'), /whether the method is published/)
23
- })
24
-
25
- it('should refuse a route no name can spell', () => {
26
- assert.throws(() => new Tool(true, '/pots/v1.0'), /no tool name can spell/)
27
- })
28
-
29
- it('should name the route it refuses', () => {
30
- assert.throws(() => new Tool(true, '/pots/v1.0'), /'\/pots\/v1\.0'/)
31
- })
32
-
33
- it('should not ask a route it does not publish to be spellable', () => {
34
- assert.strictEqual(new Tool(false, '/pots/v1.0').published, false)
35
- })
36
- })
37
-
38
- describe('mcp:tool inheritance', () => {
39
- const mcp = new MCP()
40
-
41
- it('should take the nearest declaration', () => {
42
- const nearest = new Tool(false, '/pots')
43
- const further = new Tool(true, '/pots')
44
-
45
- assert.strictEqual(MCP.published([nearest, further]), false)
46
- })
47
-
48
- it('should publish nothing where nothing is declared', () => {
49
- assert.strictEqual(MCP.published(undefined), false)
50
- assert.strictEqual(MCP.published([]), false)
51
- })
52
-
53
- it('should refuse a directive it does not know', () => {
54
- assert.throws(() => mcp.create('tools', true, null, '/pots'), /Unknown directive/)
55
- })
56
- })
@@ -1,32 +0,0 @@
1
- import assert from 'node:assert'
2
- import { refusal } from '../../RPC/names.js'
3
- import { segment } from '../../RTD/segment.js'
4
-
5
- /**
6
- * Whether one method is published to a model. Declaring it is what publishes it, and it
7
- * says nothing else — what a tool is, is [`help:method`](../help/Help.ts), which is what
8
- * describes the method to everything else as well.
9
- *
10
- * `false` withdraws one: the declaration is inherited, as every directive is, and a node
11
- * publishing what is under it is how a subtree is published at all.
12
- */
13
- export class Tool {
14
- public readonly published: boolean
15
-
16
- public constructor(value: unknown, route: string) {
17
- assert.ok(
18
- typeof value === 'boolean',
19
- 'Directive mcp:tool: the value is whether the method is published; what it is, is `help:method`'
20
- )
21
-
22
- // a tool is called by name, so a route that cannot be named cannot be one — said where
23
- // the mistake is, rather than as a tool that is quietly never listed
24
- if (value)
25
- assert.ok(
26
- refusal(segment(route)) === null,
27
- `Directive mcp:tool: '${route}' holds a segment no tool name can spell`
28
- )
29
-
30
- this.published = value
31
- }
32
- }
@@ -1,6 +0,0 @@
1
- import { MCP } from './MCP.js'
2
-
3
- export const mcp = new MCP()
4
-
5
- export { FAMILY, MCP } from './MCP.js'
6
- export type { Tool } from './Tool.js'