@toa.io/extensions.exposition 1.0.0-alpha.292 → 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 (443) 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 +24 -13
  6. package/transpiled/Endpoint.js +3 -0
  7. package/transpiled/Endpoint.js.map +1 -1
  8. package/transpiled/Introspection.d.ts +6 -0
  9. package/transpiled/Introspection.js +1 -0
  10. package/transpiled/Introspection.js.map +1 -1
  11. package/transpiled/MCP/schema.js +2 -2
  12. package/transpiled/Query.d.ts +2 -12
  13. package/transpiled/Query.js +2 -12
  14. package/transpiled/Query.js.map +1 -1
  15. package/transpiled/RTD/Endpoint.d.ts +2 -3
  16. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  17. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  18. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  19. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  20. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  21. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  22. package/ui/dist/_app/immutable/chunks/{aLpTDmOc.js → DVlaUfVU.js} +1 -1
  23. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  24. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  25. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  26. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  27. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  28. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  29. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  30. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  31. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  32. package/ui/dist/_app/version.json +1 -1
  33. package/ui/dist/index.html +12 -12
  34. package/CHANGELOG.md +0 -42
  35. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  36. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  37. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  38. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  39. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  40. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  41. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  42. package/components/identity.credentials/source/list.test.ts +0 -70
  43. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  44. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  45. package/components/identity.federation/source/list.test.ts +0 -41
  46. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  47. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  48. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  49. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  50. package/components/identity.passkeys/source/errors.test.ts +0 -34
  51. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  52. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  53. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  54. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  55. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  56. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  57. package/components/identity.tokens/source/issue.test.ts +0 -73
  58. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  59. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  60. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  61. package/context.toa.yaml +0 -31
  62. package/cucumber.mjs +0 -7
  63. package/documentation/.assets/ia3-dark.jpg +0 -0
  64. package/documentation/.assets/ia3-light.jpg +0 -0
  65. package/documentation/.assets/overview-dark.jpg +0 -0
  66. package/documentation/.assets/overview-light.jpg +0 -0
  67. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  68. package/documentation/.assets/role-scopes-light.jpg +0 -0
  69. package/documentation/.assets/rtd-dark.jpg +0 -0
  70. package/documentation/.assets/rtd-light.jpg +0 -0
  71. package/documentation/access.md +0 -350
  72. package/documentation/authorities.md +0 -51
  73. package/documentation/cache.md +0 -72
  74. package/documentation/components.md +0 -472
  75. package/documentation/consent.md +0 -101
  76. package/documentation/credentials.md +0 -88
  77. package/documentation/dev.md +0 -30
  78. package/documentation/discovery.md +0 -81
  79. package/documentation/flow.md +0 -44
  80. package/documentation/help.md +0 -122
  81. package/documentation/identity.md +0 -304
  82. package/documentation/introspection.md +0 -123
  83. package/documentation/io.md +0 -167
  84. package/documentation/ip.md +0 -24
  85. package/documentation/map.md +0 -123
  86. package/documentation/mcp.md +0 -183
  87. package/documentation/notes/desync.jpg +0 -0
  88. package/documentation/notes/peers.md +0 -59
  89. package/documentation/notes/sse.md +0 -71
  90. package/documentation/notes/throttling.md +0 -122
  91. package/documentation/oauth.md +0 -180
  92. package/documentation/octets.md +0 -334
  93. package/documentation/passkeys.md +0 -11
  94. package/documentation/protocol.md +0 -120
  95. package/documentation/query.md +0 -324
  96. package/documentation/require.md +0 -15
  97. package/documentation/rpc.md +0 -154
  98. package/documentation/tracing.md +0 -70
  99. package/documentation/tree.md +0 -199
  100. package/features/access.feature +0 -596
  101. package/features/annotation.feature +0 -32
  102. package/features/auth.assert.feature +0 -55
  103. package/features/auth.bearer.feature +0 -120
  104. package/features/auth.claims.feature +0 -171
  105. package/features/auth.incept.feature +0 -166
  106. package/features/auth.input.feature +0 -59
  107. package/features/authorities.basic.feature +0 -141
  108. package/features/authorities.feature +0 -71
  109. package/features/authorities.federation.feature +0 -100
  110. package/features/authorities.tokens.feature +0 -117
  111. package/features/body.feature +0 -76
  112. package/features/cache.feature +0 -368
  113. package/features/configuration.feature +0 -206
  114. package/features/cors.feature +0 -127
  115. package/features/credentials.feature +0 -106
  116. package/features/debug.feature +0 -34
  117. package/features/dev.feature +0 -90
  118. package/features/directives.feature +0 -61
  119. package/features/discovery.feature +0 -213
  120. package/features/discovery.ui.feature +0 -213
  121. package/features/dynamic.feature +0 -192
  122. package/features/errors.feature +0 -258
  123. package/features/etag.feature +0 -239
  124. package/features/flow.feature +0 -148
  125. package/features/help.feature +0 -512
  126. package/features/identity.bans.feature +0 -200
  127. package/features/identity.basic.feature +0 -666
  128. package/features/identity.feature +0 -240
  129. package/features/identity.federation.feature +0 -396
  130. package/features/identity.otp.feature +0 -142
  131. package/features/identity.roles.feature +0 -568
  132. package/features/identity.tokens.custom.feature +0 -430
  133. package/features/identity.tokens.feature +0 -131
  134. package/features/interruptions.feature +0 -20
  135. package/features/introspection.feature +0 -565
  136. package/features/introspection.map.feature +0 -108
  137. package/features/io.feature +0 -204
  138. package/features/io.throttle.feature +0 -166
  139. package/features/map.feature +0 -360
  140. package/features/mcp.feature +0 -753
  141. package/features/methods.feature +0 -48
  142. package/features/oauth.clients.feature +0 -195
  143. package/features/oauth.discovery.feature +0 -164
  144. package/features/oauth.grants.feature +0 -301
  145. package/features/octets.cloudinary.feature +0 -233
  146. package/features/octets.download.feature +0 -194
  147. package/features/octets.entries.feature +0 -83
  148. package/features/octets.feature +0 -306
  149. package/features/octets.head.feature +0 -40
  150. package/features/octets.location.feature +0 -83
  151. package/features/octets.meta.feature +0 -117
  152. package/features/octets.workflows.feature +0 -565
  153. package/features/passkeys.feature +0 -66
  154. package/features/probes.feature +0 -18
  155. package/features/query.feature +0 -389
  156. package/features/realtime.feature +0 -34
  157. package/features/require.feature +0 -66
  158. package/features/response.feature +0 -103
  159. package/features/routes.feature +0 -224
  160. package/features/rpc.feature +0 -429
  161. package/features/server.feature +0 -21
  162. package/features/site/_app/immutable/asset.js +0 -1
  163. package/features/site/favicon.ico +0 -0
  164. package/features/site/index.html +0 -10
  165. package/features/steps/.env.example +0 -5
  166. package/features/steps/Captures.ts +0 -20
  167. package/features/steps/Cloudinary.ts +0 -12
  168. package/features/steps/Common.ts +0 -38
  169. package/features/steps/Components.ts +0 -115
  170. package/features/steps/Database.ts +0 -106
  171. package/features/steps/Gateway.ts +0 -239
  172. package/features/steps/HTTP.ts +0 -96
  173. package/features/steps/IDP.ts +0 -361
  174. package/features/steps/Identity.ts +0 -54
  175. package/features/steps/OTP.ts +0 -42
  176. package/features/steps/Parameters.ts +0 -162
  177. package/features/steps/Probe.ts +0 -38
  178. package/features/steps/Realtime.ts +0 -175
  179. package/features/steps/Workspace.ts +0 -48
  180. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  181. package/features/steps/components/audit/operations/record.js +0 -5
  182. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  183. package/features/steps/components/echo/operations/affect.js +0 -3
  184. package/features/steps/components/echo/operations/compute.js +0 -3
  185. package/features/steps/components/echo/operations/echo.js +0 -3
  186. package/features/steps/components/echo/operations/error.js +0 -7
  187. package/features/steps/components/echo/operations/identity.js +0 -3
  188. package/features/steps/components/echo/operations/parameters.js +0 -3
  189. package/features/steps/components/echo/operations/ping.js +0 -3
  190. package/features/steps/components/echo/operations/unwrap.js +0 -3
  191. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  192. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  193. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  194. package/features/steps/components/greeter/operations/greet.js +0 -3
  195. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  196. package/features/steps/components/notify/operations/send.js +0 -5
  197. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  198. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  199. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  200. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  201. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  202. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  203. package/features/steps/components/octets.tester/operations/err.js +0 -14
  204. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  205. package/features/steps/components/octets.tester/operations/id.js +0 -5
  206. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  207. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  208. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  209. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  210. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  211. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  212. package/features/steps/components/orders/operations/create.js +0 -7
  213. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  214. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  215. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  216. package/features/steps/components/pricing/operations/quote.js +0 -3
  217. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  218. package/features/steps/components/sequences/operations/numbers.js +0 -5
  219. package/features/steps/components/sequences/operations/tokens.js +0 -14
  220. package/features/steps/components/users/manifest.toa.yaml +0 -30
  221. package/features/steps/components/users/operations/create.js +0 -11
  222. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  223. package/features/steps/map.ts +0 -30
  224. package/features/steps/tsconfig.json +0 -9
  225. package/features/streams.feature +0 -35
  226. package/features/timestamps.feature +0 -41
  227. package/features/timing.feature +0 -49
  228. package/features/tracing.feature +0 -123
  229. package/source/Branch.test.ts +0 -40
  230. package/source/Branch.ts +0 -44
  231. package/source/Composition.ts +0 -51
  232. package/source/Context.ts +0 -11
  233. package/source/Directive.test.ts +0 -199
  234. package/source/Directive.ts +0 -248
  235. package/source/Discovery/Explorer.ts +0 -34
  236. package/source/Discovery/Site.test.ts +0 -147
  237. package/source/Discovery/Site.ts +0 -202
  238. package/source/Discovery/index.ts +0 -3
  239. package/source/Discovery/tree.test.ts +0 -175
  240. package/source/Discovery/tree.ts +0 -77
  241. package/source/Discovery/trunk.ts +0 -33
  242. package/source/Endpoint.test.ts +0 -67
  243. package/source/Endpoint.ts +0 -157
  244. package/source/Factory.ts +0 -42
  245. package/source/Gateway.ts +0 -390
  246. package/source/HTTP/Context.ts +0 -143
  247. package/source/HTTP/Probe.ts +0 -99
  248. package/source/HTTP/Server.ts +0 -435
  249. package/source/HTTP/Timing.ts +0 -14
  250. package/source/HTTP/address.test.ts +0 -28
  251. package/source/HTTP/address.ts +0 -16
  252. package/source/HTTP/exceptions.ts +0 -99
  253. package/source/HTTP/formats/form.ts +0 -21
  254. package/source/HTTP/formats/index.ts +0 -36
  255. package/source/HTTP/formats/json.ts +0 -14
  256. package/source/HTTP/formats/msgpack.ts +0 -14
  257. package/source/HTTP/formats/text.ts +0 -10
  258. package/source/HTTP/formats/yaml.test.ts +0 -22
  259. package/source/HTTP/formats/yaml.ts +0 -40
  260. package/source/HTTP/index.ts +0 -6
  261. package/source/HTTP/messages.test.ts +0 -196
  262. package/source/HTTP/messages.ts +0 -186
  263. package/source/HTTP/types.ts +0 -39
  264. package/source/Interception.ts +0 -37
  265. package/source/Introspection.ts +0 -179
  266. package/source/MCP/Server.ts +0 -335
  267. package/source/MCP/discover.ts +0 -51
  268. package/source/MCP/errors.ts +0 -80
  269. package/source/MCP/index.ts +0 -1
  270. package/source/MCP/schema.test.ts +0 -91
  271. package/source/MCP/schema.ts +0 -94
  272. package/source/MCP/tools.ts +0 -144
  273. package/source/MCP/types.ts +0 -84
  274. package/source/Mapping.ts +0 -101
  275. package/source/Query.test.ts +0 -54
  276. package/source/Query.ts +0 -277
  277. package/source/RPC/Context.ts +0 -75
  278. package/source/RPC/Dispatcher.ts +0 -150
  279. package/source/RPC/errors.test.ts +0 -77
  280. package/source/RPC/errors.ts +0 -82
  281. package/source/RPC/index.ts +0 -1
  282. package/source/RPC/names.test.ts +0 -141
  283. package/source/RPC/names.ts +0 -176
  284. package/source/RPC/types.ts +0 -34
  285. package/source/RTD/Context.ts +0 -16
  286. package/source/RTD/Directives.ts +0 -126
  287. package/source/RTD/Endpoint.ts +0 -27
  288. package/source/RTD/Match.ts +0 -11
  289. package/source/RTD/Method.ts +0 -39
  290. package/source/RTD/Node.ts +0 -169
  291. package/source/RTD/Route.ts +0 -93
  292. package/source/RTD/Tree.ts +0 -137
  293. package/source/RTD/expiration.test.ts +0 -81
  294. package/source/RTD/factory.ts +0 -105
  295. package/source/RTD/index.ts +0 -8
  296. package/source/RTD/segment.test.ts +0 -35
  297. package/source/RTD/segment.ts +0 -51
  298. package/source/RTD/syntax/index.ts +0 -1
  299. package/source/RTD/walk.test.ts +0 -147
  300. package/source/Remotes.test.ts +0 -79
  301. package/source/Remotes.ts +0 -39
  302. package/source/Tenant.ts +0 -73
  303. package/source/directives/auth/Anonymous.test.ts +0 -70
  304. package/source/directives/auth/Anonymous.ts +0 -36
  305. package/source/directives/auth/Anyone.ts +0 -23
  306. package/source/directives/auth/Assert.ts +0 -43
  307. package/source/directives/auth/Authorization.test.ts +0 -24
  308. package/source/directives/auth/Authorization.ts +0 -388
  309. package/source/directives/auth/Delegate.test.ts +0 -36
  310. package/source/directives/auth/Delegate.ts +0 -54
  311. package/source/directives/auth/Echo.ts +0 -24
  312. package/source/directives/auth/Federation.ts +0 -104
  313. package/source/directives/auth/Id.ts +0 -37
  314. package/source/directives/auth/Incept.ts +0 -117
  315. package/source/directives/auth/Input.ts +0 -92
  316. package/source/directives/auth/Role.test.ts +0 -147
  317. package/source/directives/auth/Role.ts +0 -99
  318. package/source/directives/auth/Rule.ts +0 -59
  319. package/source/directives/auth/Scheme.ts +0 -31
  320. package/source/directives/auth/create.ts +0 -11
  321. package/source/directives/auth/index.ts +0 -3
  322. package/source/directives/auth/schemes.test.ts +0 -18
  323. package/source/directives/auth/schemes.ts +0 -39
  324. package/source/directives/auth/split.ts +0 -14
  325. package/source/directives/auth/types.ts +0 -75
  326. package/source/directives/cache/Cache.ts +0 -92
  327. package/source/directives/cache/Control.ts +0 -81
  328. package/source/directives/cache/Exact.ts +0 -7
  329. package/source/directives/cache/etag.ts +0 -38
  330. package/source/directives/cache/index.ts +0 -3
  331. package/source/directives/cache/types.ts +0 -9
  332. package/source/directives/cors/CORS.test.ts +0 -75
  333. package/source/directives/cors/CORS.ts +0 -88
  334. package/source/directives/cors/index.ts +0 -3
  335. package/source/directives/dev/Development.ts +0 -41
  336. package/source/directives/dev/Faulty.ts +0 -31
  337. package/source/directives/dev/Sleep.ts +0 -53
  338. package/source/directives/dev/Stub.ts +0 -14
  339. package/source/directives/dev/Throw.ts +0 -14
  340. package/source/directives/dev/index.ts +0 -3
  341. package/source/directives/dev/types.ts +0 -5
  342. package/source/directives/flow/Compose.ts +0 -98
  343. package/source/directives/flow/Fetch.ts +0 -86
  344. package/source/directives/flow/Flow.ts +0 -43
  345. package/source/directives/flow/index.ts +0 -3
  346. package/source/directives/flow/types.ts +0 -7
  347. package/source/directives/help/Family.ts +0 -122
  348. package/source/directives/help/Help.test.ts +0 -227
  349. package/source/directives/help/Help.ts +0 -47
  350. package/source/directives/help/Parameters.ts +0 -47
  351. package/source/directives/help/described.ts +0 -57
  352. package/source/directives/help/index.ts +0 -45
  353. package/source/directives/index.ts +0 -33
  354. package/source/directives/io/Directive.ts +0 -17
  355. package/source/directives/io/IO.ts +0 -118
  356. package/source/directives/io/Input.ts +0 -55
  357. package/source/directives/io/Message.ts +0 -1
  358. package/source/directives/io/Output.ts +0 -81
  359. package/source/directives/io/Status.test.ts +0 -88
  360. package/source/directives/io/Status.ts +0 -47
  361. package/source/directives/io/Throttle.ts +0 -30
  362. package/source/directives/io/index.ts +0 -3
  363. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  364. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  365. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  366. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  367. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  368. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  369. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  370. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  371. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  372. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  373. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  374. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  375. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  376. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  377. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  378. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  379. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  380. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  381. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  382. package/source/directives/io/lib/throttle/index.ts +0 -4
  383. package/source/directives/io/schemas.test.ts +0 -40
  384. package/source/directives/io/schemas.ts +0 -16
  385. package/source/directives/map/Authority.ts +0 -15
  386. package/source/directives/map/Buffer.ts +0 -15
  387. package/source/directives/map/Claims.ts +0 -63
  388. package/source/directives/map/Directive.ts +0 -4
  389. package/source/directives/map/Headers.ts +0 -60
  390. package/source/directives/map/Language.ts +0 -45
  391. package/source/directives/map/Languages.ts +0 -17
  392. package/source/directives/map/Map.ts +0 -85
  393. package/source/directives/map/Mapping.ts +0 -45
  394. package/source/directives/map/Properties.ts +0 -15
  395. package/source/directives/map/Segments.ts +0 -52
  396. package/source/directives/map/index.ts +0 -3
  397. package/source/directives/mcp/MCP.ts +0 -33
  398. package/source/directives/mcp/Tool.test.ts +0 -56
  399. package/source/directives/mcp/Tool.ts +0 -32
  400. package/source/directives/mcp/index.ts +0 -6
  401. package/source/directives/oauth/Discovery.ts +0 -66
  402. package/source/directives/oauth/documents.ts +0 -110
  403. package/source/directives/oauth/index.ts +0 -3
  404. package/source/directives/octets/Context.ts +0 -23
  405. package/source/directives/octets/Delete.ts +0 -96
  406. package/source/directives/octets/Directive.ts +0 -21
  407. package/source/directives/octets/Get.ts +0 -88
  408. package/source/directives/octets/Octets.ts +0 -82
  409. package/source/directives/octets/Put.ts +0 -186
  410. package/source/directives/octets/Workflow.ts +0 -60
  411. package/source/directives/octets/bytes.test.ts +0 -33
  412. package/source/directives/octets/bytes.ts +0 -18
  413. package/source/directives/octets/index.ts +0 -3
  414. package/source/directives/octets/schemas.test.ts +0 -20
  415. package/source/directives/octets/schemas.ts +0 -15
  416. package/source/directives/octets/types.ts +0 -9
  417. package/source/directives/octets/workflows/Execution.ts +0 -130
  418. package/source/directives/octets/workflows/Workflow.ts +0 -51
  419. package/source/directives/octets/workflows/index.ts +0 -1
  420. package/source/directives/require/Directive.ts +0 -5
  421. package/source/directives/require/Headers.ts +0 -19
  422. package/source/directives/require/Require.ts +0 -27
  423. package/source/directives/require/index.ts +0 -3
  424. package/source/discovery.ts +0 -1
  425. package/source/exceptions.ts +0 -47
  426. package/source/index.ts +0 -10
  427. package/source/io.ts +0 -4
  428. package/source/octets.d.ts +0 -17
  429. package/source/root.ts +0 -59
  430. package/source/service.ts +0 -95
  431. package/source/userland.ts +0 -47
  432. package/tsconfig.json +0 -13
  433. package/tsconfig.tsbuildinfo +0 -1
  434. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  435. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  436. package/ui/dist/_app/immutable/chunks/BaWe3aOV.js +0 -1
  437. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  438. package/ui/dist/_app/immutable/chunks/GZTfV0ks.js +0 -6
  439. package/ui/dist/_app/immutable/entry/app.D5v4JoUx.js +0 -2
  440. package/ui/dist/_app/immutable/entry/start.CWxFoIyZ.js +0 -1
  441. package/ui/dist/_app/immutable/nodes/0.DIh5T_5-.js +0 -1
  442. package/ui/dist/_app/immutable/nodes/1.CY-bFzHC.js +0 -1
  443. package/ui/dist/_app/immutable/nodes/2.6Ubd1ItY.js +0 -14
@@ -1,75 +0,0 @@
1
- import * as http from '../HTTP/index.js'
2
- import type { Params } from './types.js'
3
-
4
- /**
5
- * One call, as a request the rest of the gateway can serve.
6
- *
7
- * The clone is the transport context except for what the call decides, so nothing
8
- * downstream — the router, the directives, the endpoint, the mapping — knows it is one.
9
- * It is derived from the context rather than built beside it, so everything not named
10
- * here, `identity` included, is read through.
11
- */
12
- // eslint-disable-next-line max-params
13
- export function fork(
14
- context: http.Context,
15
- path: string,
16
- verb: string,
17
- query: Params | undefined,
18
- input: unknown
19
- ): http.Context {
20
- const url = new URL(path, context.url)
21
-
22
- if (query !== undefined)
23
- for (const [name, value] of Object.entries(query))
24
- url.searchParams.set(name, String(value))
25
-
26
- const headers = { ...context.request.headers }
27
-
28
- // a conditional is the envelope's, and a call would answer 304 to a question nobody asked
29
- delete headers['if-match']
30
- delete headers['if-none-match']
31
-
32
- const request = Object.create(context.request, {
33
- method: { value: verb, enumerable: true },
34
- headers: { value: headers, enumerable: true }
35
- })
36
-
37
- // its own, so an `io:output` restriction shapes this call's reply and no other
38
- const pipelines: Pipelines = { body: [], response: [] }
39
-
40
- return Object.create(context, {
41
- /*
42
- * A credential refuses an `anonymous` route because it would make the reply
43
- * uncacheable. What a procedure answers is not a reply: it is a value in an envelope
44
- * this gateway answers `no-store`, and the procedure's own headers are discarded.
45
- */
46
- procedural: { value: true, enumerable: true },
47
- url: { value: url, enumerable: true },
48
- request: { value: request, enumerable: true },
49
- pipelines: { value: pipelines, enumerable: true },
50
- body: {
51
- value: async () => {
52
- let value = input
53
-
54
- for (const transform of pipelines.body) value = await transform(value)
55
-
56
- return value
57
- }
58
- },
59
- /*
60
- * The raw request is the envelope, and it has been read. `map:buffer` is the one
61
- * directive that asks for it, and answering with a spent stream would hand the
62
- * operation an empty string; refusing says what is actually the matter.
63
- */
64
- buffer: {
65
- value: () => {
66
- throw new http.BadRequest('`map:buffer` reads the request, which a call is not')
67
- }
68
- }
69
- }) as http.Context
70
- }
71
-
72
- interface Pipelines {
73
- body: Array<(input: unknown) => unknown>
74
- response: Array<(output: http.OutgoingMessage) => void | Promise<void>>
75
- }
@@ -1,150 +0,0 @@
1
- import { console } from 'openspan'
2
- import * as http from '../HTTP/index.js'
3
- import { schemas } from '@toa.io/definitions/extensions.exposition'
4
- import { BATCH } from '@toa.io/definitions/extensions.exposition'
5
- import { address, split } from './names.js'
6
- import { fork } from './Context.js'
7
- import {
8
- BATCH_TOO_LARGE,
9
- INVALID_REQUEST,
10
- PARSE,
11
- failure,
12
- of,
13
- response
14
- } from './errors.js'
15
- import { VERSION, type Call, type Response } from './types.js'
16
- import type { RPCAnnotation as RPC } from '@toa.io/definitions/extensions.exposition'
17
-
18
- /**
19
- * JSON-RPC, as the calls a request carries.
20
- *
21
- * It clones the context per call and hands each clone back to the gateway: it holds no
22
- * tree, no index and no knowledge of routing. Whether a name resolves, what it resolves
23
- * to, and what the directives of that route do are answered by the same `route` an
24
- * ordinary request goes through.
25
- */
26
- export class Dispatcher {
27
- private readonly batch: number
28
-
29
- public constructor(options: RPC) {
30
- this.batch = options.batch ?? BATCH
31
- }
32
-
33
- public async dispatch(
34
- context: http.Context,
35
- route: http.Processor
36
- ): Promise<http.OutgoingMessage> {
37
- if (context.request.method !== 'POST')
38
- throw new http.MethodNotAllowed(new Headers({ allow: 'POST' }))
39
-
40
- const envelope = await this.read(context)
41
- const batched = Array.isArray(envelope)
42
- const calls = batched ? envelope : [envelope]
43
-
44
- if (calls.length === 0)
45
- throw new http.BadRequest(
46
- response(null, failure(INVALID_REQUEST, 'A request carries at least one call'))
47
- )
48
-
49
- if (calls.length > this.batch)
50
- throw new http.BadRequest(
51
- response(
52
- null,
53
- failure(BATCH_TOO_LARGE, `A request carries at most ${this.batch} calls`)
54
- )
55
- )
56
-
57
- const answers: Response[] = []
58
-
59
- // one after another: a request the caller writes should not become a fan-out they own
60
- for (const call of calls) {
61
- const answer = await this.answer(call, context, route)
62
-
63
- if (answer !== null) answers.push(answer)
64
- }
65
-
66
- // every call was a notification, and a notification is answered by not answering
67
- if (answers.length === 0) return { status: NO_CONTENT }
68
-
69
- // a reply assembled from several is not one of them, and is not stored as if it were
70
- return {
71
- status: OK,
72
- body: batched ? answers : answers[0],
73
- headers: new Headers({ 'cache-control': 'no-store' })
74
- }
75
- }
76
-
77
- private async answer(
78
- input: unknown,
79
- context: http.Context,
80
- route: http.Processor
81
- ): Promise<Response | null> {
82
- const invalid = schemas.call.fit(input)
83
-
84
- // it may have carried an id, but nothing about it is trustworthy enough to answer to
85
- if (invalid !== null) return response(null, failure(INVALID_REQUEST, invalid.message))
86
-
87
- return await this.call(input as Call, context, route)
88
- }
89
-
90
- private async call(
91
- call: Call,
92
- context: http.Context,
93
- route: http.Processor
94
- ): Promise<Response | null> {
95
- const notification = call.id === undefined
96
-
97
- try {
98
- const params = call.params ?? {}
99
- const { path, verb, variables } = address(call.method, params)
100
- const { query, input } = split(params, variables)
101
- const clone = fork(context, path, verb, query, input)
102
-
103
- // one span per call, so what the directives of that call open has somewhere to hang
104
- const message = await console.span(
105
- { name: call.method, attributes: { id: call.id } },
106
- async () => await route(clone)
107
- )
108
-
109
- // what `io:output` restricts, over this call's reply rather than the envelope
110
- await http.shape(clone, message)
111
-
112
- if (notification) return null
113
-
114
- return { jsonrpc: VERSION, id: call.id!, result: message.body ?? null }
115
- } catch (exception) {
116
- /*
117
- * A credential belongs to the request. Refusing one call for it would leave the
118
- * reply a 200, and the challenge that tells a client where to authenticate is
119
- * attached to a 401 — so the whole envelope is refused instead.
120
- */
121
- if (exception instanceof http.Unauthorized) throw exception
122
-
123
- if (notification) {
124
- console.debug('Notification failed', {
125
- method: call.method,
126
- error: of(exception)
127
- })
128
-
129
- return null
130
- }
131
-
132
- return { jsonrpc: VERSION, id: call.id!, error: of(exception) }
133
- }
134
- }
135
-
136
- /** A body the decoder refuses is a parse error; a media type it does not know is not. */
137
- private async read(context: http.Context): Promise<unknown> {
138
- try {
139
- return await context.body()
140
- } catch (exception) {
141
- if (exception instanceof http.BadRequest)
142
- throw new http.BadRequest(response(null, failure(PARSE, 'Parse error')))
143
-
144
- throw exception
145
- }
146
- }
147
- }
148
-
149
- const OK = 200
150
- const NO_CONTENT = 204
@@ -1,77 +0,0 @@
1
- import { describe, it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import * as http from '../HTTP/index.js'
5
- import {
6
- FORBIDDEN,
7
- INTERNAL,
8
- INVALID_PARAMS,
9
- METHOD_NOT_FOUND,
10
- REFUSED,
11
- of
12
- } from './errors.js'
13
-
14
- describe('of', () => {
15
- it('should read a missing route as a missing method', () => {
16
- assert.deepEqual(of(new http.NotFound('pots/_id/FETCH names no method')), {
17
- code: METHOD_NOT_FOUND,
18
- message: 'pots/_id/FETCH names no method'
19
- })
20
- })
21
-
22
- it('should read a verb the node does not declare as a missing method', () => {
23
- assert.deepEqual(of(new http.MethodNotAllowed()), {
24
- code: METHOD_NOT_FOUND,
25
- message: 'Method not found'
26
- })
27
- })
28
-
29
- it('should read a refused authorization as forbidden', () => {
30
- assert.deepEqual(of(new http.Forbidden()), { code: FORBIDDEN, message: 'Forbidden' })
31
- })
32
-
33
- it('should read a bad request as invalid params', () => {
34
- assert.deepEqual(of(new http.BadRequest('Query limit must be between 1 and 100')), {
35
- code: INVALID_PARAMS,
36
- message: 'Query limit must be between 1 and 100'
37
- })
38
- })
39
-
40
- it('should carry the code an operation refused with', () => {
41
- const error = Object.assign(new Error(), {
42
- code: 'WONT_CREATE',
43
- message: 'Volume is out of range'
44
- })
45
-
46
- assert.deepEqual(of(new http.UnprocessableEntity(error)), {
47
- code: REFUSED,
48
- message: 'Volume is out of range',
49
- data: { code: 'WONT_CREATE' }
50
- })
51
- })
52
-
53
- it('should stand the code in for a message the operation did not declare', () => {
54
- const error = Object.assign(new Error(), { code: 'WONT_CREATE' })
55
-
56
- assert.deepEqual(of(new http.UnprocessableEntity(error)), {
57
- code: REFUSED,
58
- message: 'WONT_CREATE',
59
- data: { code: 'WONT_CREATE' }
60
- })
61
- })
62
-
63
- it('should say what any other client error was refused with', () => {
64
- assert.deepEqual(of(new http.Conflict()), {
65
- code: REFUSED,
66
- message: 'Refused',
67
- data: { status: 409 }
68
- })
69
- })
70
-
71
- it('should say nothing of what it did not mean to answer', () => {
72
- assert.deepEqual(of(new Error('the connection dropped')), {
73
- code: INTERNAL,
74
- message: 'Internal error'
75
- })
76
- })
77
- })
@@ -1,82 +0,0 @@
1
- import * as http from '../HTTP/index.js'
2
- import { VERSION, type Failure, type Response } from './types.js'
3
-
4
- /*
5
- * The five the specification fixes (JSON-RPC 2.0 §5.1). A client reads these the same
6
- * whoever answers.
7
- */
8
- export const PARSE = -32700
9
- export const INVALID_REQUEST = -32600
10
- export const METHOD_NOT_FOUND = -32601
11
- export const INVALID_PARAMS = -32602
12
- export const INTERNAL = -32603
13
-
14
- /*
15
- * Ours. The specification reserves -32000 to -32099 for implementation-defined server
16
- * errors and defines nothing in it, so these mean nothing outside Toa — which is why
17
- * `REFUSED` carries the operation's own code in `data`.
18
- */
19
- export const FORBIDDEN = -32000
20
- export const REFUSED = -32001
21
- export const BATCH_TOO_LARGE = -32002
22
-
23
- export function failure(code: number, message: string, data?: unknown): Failure {
24
- const value: Failure = { code, message }
25
-
26
- if (data !== undefined) value.data = data
27
-
28
- return value
29
- }
30
-
31
- export function response(id: string | number | null, error: Failure): Response {
32
- return { jsonrpc: VERSION, id, error }
33
- }
34
-
35
- /**
36
- * What an exception says as a JSON-RPC error.
37
- *
38
- * The readable text is `body`, never `message`: `http.Exception` calls `super()` with no
39
- * argument, so every one of them carries an empty `message`.
40
- */
41
- export function of(exception: unknown): Failure {
42
- if (exception instanceof http.UnprocessableEntity) return refusal(exception)
43
-
44
- if (exception instanceof http.NotFound || exception instanceof http.MethodNotAllowed)
45
- return failure(METHOD_NOT_FOUND, text(exception, 'Method not found'))
46
-
47
- if (exception instanceof http.Forbidden)
48
- return failure(FORBIDDEN, text(exception, 'Forbidden'))
49
-
50
- if (exception instanceof http.BadRequest)
51
- return failure(INVALID_PARAMS, text(exception, 'Invalid params'))
52
-
53
- // a conflict, a precondition, a throttle: the call was refused, and by what is worth saying
54
- if (exception instanceof http.ClientError)
55
- return failure(REFUSED, text(exception, 'Refused'), { status: exception.status })
56
-
57
- return failure(INTERNAL, 'Internal error')
58
- }
59
-
60
- /**
61
- * An operation that declares its errors answers with one rather than throwing, and the
62
- * reply contract states `{ code, message? }` — the message optional. The number says the
63
- * operation refused; `data.code` says what it refused with, and is what a caller branches on.
64
- */
65
- function refusal(exception: http.UnprocessableEntity): Failure {
66
- const body = exception.body
67
-
68
- if (typeof body !== 'object' || body === null || typeof body.code !== 'string')
69
- return failure(REFUSED, text(exception, 'Refused'))
70
-
71
- const code = body.code as string
72
- const message =
73
- typeof body.message === 'string' && body.message !== '' ? body.message : code
74
-
75
- return failure(REFUSED, message, { code })
76
- }
77
-
78
- function text(exception: http.Exception, fallback: string): string {
79
- return typeof exception.body === 'string' && exception.body !== ''
80
- ? exception.body
81
- : fallback
82
- }
@@ -1 +0,0 @@
1
- export { Dispatcher } from './Dispatcher.js'
@@ -1,141 +0,0 @@
1
- import { describe, it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import * as http from '../HTTP/index.js'
5
- import { segment } from '../RTD/segment.js'
6
- import { address, name, refusal } from './names.js'
7
-
8
- describe('address', () => {
9
- it('should resolve a name without variables', () => {
10
- assert.deepEqual(address('pots.GET', {}), {
11
- path: '/pots/',
12
- verb: 'GET',
13
- variables: []
14
- })
15
- })
16
-
17
- it('should resolve the trunk', () => {
18
- assert.deepEqual(address('GET', {}), { path: '/', verb: 'GET', variables: [] })
19
- })
20
-
21
- it('should substitute a variable and report it taken', () => {
22
- assert.deepEqual(address('pots._id.GET', { id: 'a1b2', title: 'Kettle' }), {
23
- path: '/pots/a1b2/',
24
- verb: 'GET',
25
- variables: ['id']
26
- })
27
- })
28
-
29
- it('should substitute every variable', () => {
30
- assert.deepEqual(address('users._user.pots._id.PATCH', { user: 'bob', id: 'a1b2' }), {
31
- path: '/users/bob/pots/a1b2/',
32
- verb: 'PATCH',
33
- variables: ['user', 'id']
34
- })
35
- })
36
-
37
- it('should let a tail carry separators', () => {
38
- assert.deepEqual(address('files.__.GET', { '**': 'a/b/c' }), {
39
- path: '/files/a/b/c/',
40
- verb: 'GET',
41
- variables: ['**']
42
- })
43
- })
44
-
45
- it('should not confuse a trailing literal with a verb', () => {
46
- assert.deepEqual(address('pots.GET.POST', {}), {
47
- path: '/pots/GET/',
48
- verb: 'POST',
49
- variables: []
50
- })
51
- })
52
-
53
- it('should refuse a name that states no verb', () => {
54
- assert.throws(() => address('pots._id', { id: 'a1b2' }), http.NotFound)
55
- })
56
-
57
- it('should refuse a verb no method uses', () => {
58
- assert.throws(() => address('pots.FETCH', {}), http.NotFound)
59
- })
60
-
61
- it('should refuse a segment no name can spell', () => {
62
- assert.throws(() => address('pots/v1.GET', {}), http.NotFound)
63
- assert.throws(() => address('a_b.GET', {}), http.NotFound)
64
- assert.throws(() => address('pots..GET', {}), http.NotFound)
65
- })
66
-
67
- it('should refuse a variable of no name', () => {
68
- assert.throws(() => address('pots._.GET', { '': 'a1b2' }), http.NotFound)
69
- })
70
-
71
- it('should refuse a missing variable', () => {
72
- assert.throws(() => address('pots._id.GET', {}), http.BadRequest)
73
- })
74
-
75
- it('should refuse a variable that would divide the path', () => {
76
- assert.throws(() => address('pots._id.GET', { id: 'a/b' }), http.BadRequest)
77
- assert.throws(() => address('pots._id.GET', { id: 'a?b' }), http.BadRequest)
78
- assert.throws(() => address('pots._id.GET', { id: 'a#b' }), http.BadRequest)
79
- })
80
-
81
- it('should refuse a tail that would end the path', () => {
82
- assert.throws(() => address('files.__.GET', { '**': 'a?b' }), http.BadRequest)
83
- })
84
- })
85
-
86
- describe('name', () => {
87
- it('should name the trunk by its verb alone', () => {
88
- assert.equal(name(segment('/'), 'GET'), 'GET')
89
- })
90
-
91
- it('should name a route', () => {
92
- assert.equal(name(segment('/pots'), 'GET'), 'pots.GET')
93
- assert.equal(name(segment('/identity/tokens'), 'POST'), 'identity.tokens.POST')
94
- })
95
-
96
- it('should mark a variable', () => {
97
- assert.equal(name(segment('/pots/:id'), 'GET'), 'pots._id.GET')
98
- assert.equal(
99
- name(segment('/identity/tokens/:identity'), 'POST'),
100
- 'identity.tokens._identity.POST'
101
- )
102
- })
103
-
104
- it('should mark a tail', () => {
105
- assert.equal(name(segment('/files/**'), 'GET'), 'files.__.GET')
106
- })
107
-
108
- it('should keep a hyphen', () => {
109
- assert.equal(name(segment('/jpeg-or-png'), 'GET'), 'jpeg-or-png.GET')
110
- })
111
-
112
- it('should name nothing where a segment cannot be spelled', () => {
113
- assert.equal(name(segment('/v1.0/pots'), 'GET'), null)
114
- assert.equal(name(segment('/a_b'), 'GET'), null)
115
- assert.equal(name(segment('/pots/*'), 'GET'), null)
116
- assert.equal(name(segment('/messages/:sender-:recipient'), 'GET'), null)
117
- })
118
-
119
- it('should round-trip what it names', () => {
120
- const named = name(segment('/pots/:id'), 'GET')!
121
-
122
- assert.deepEqual(address(named, { id: 'a1b2' }), {
123
- path: '/pots/a1b2/',
124
- verb: 'GET',
125
- variables: ['id']
126
- })
127
- })
128
- })
129
-
130
- describe('refusal', () => {
131
- it('should name nothing where every segment can be spelled', () => {
132
- assert.equal(refusal(segment('/pots/:id')), null)
133
- })
134
-
135
- it('should name the segment as it was declared', () => {
136
- assert.equal(refusal(segment('/v1.0/pots')), 'v1.0')
137
- assert.equal(refusal(segment('/pots/a_b')), 'a_b')
138
- assert.equal(refusal(segment('/pots/*')), '*')
139
- assert.equal(refusal(segment('/messages/:sender-:recipient')), ':sender-:recipient')
140
- })
141
- })