@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,59 +0,0 @@
1
- import { type Parameter } from '../../RTD/index.js'
2
- import type { Introspection } from '../../Introspection.js'
3
- import type { Context, Directive, Identity, Create } from './types.js'
4
-
5
- export class Rule implements Directive {
6
- private readonly directives: Directive[] = []
7
-
8
- public constructor(directives: Record<string, any>, create: Create) {
9
- for (const [name, value] of Object.entries(directives)) {
10
- const directive = create(name, value)
11
-
12
- this.directives.push(directive)
13
- }
14
- }
15
-
16
- public async authorize(
17
- identity: Identity | null,
18
- context: Context,
19
- parameters: Parameter[]
20
- ): Promise<boolean> {
21
- for (const directive of this.directives) {
22
- const authorized = await directive.authorize(identity, context, parameters)
23
-
24
- if (!authorized) return false
25
- }
26
-
27
- return true
28
- }
29
-
30
- /** Whatever each of them makes of it, in the order they were declared. */
31
- public describe(introspection: Introspection): Introspection {
32
- for (const directive of this.directives)
33
- introspection = directive.describe?.(introspection) ?? introspection
34
-
35
- return introspection
36
- }
37
-
38
- /** All of them, so one that refuses ends it and one that cannot tell leaves it untold. */
39
- public async admits(
40
- identity: Identity | null,
41
- context: Context
42
- ): Promise<boolean | undefined> {
43
- let untold = false
44
-
45
- for (const directive of this.directives) {
46
- const admits = await directive.admits?.(identity, context)
47
-
48
- if (admits === undefined) {
49
- untold = true
50
-
51
- continue
52
- }
53
-
54
- if (!admits) return false
55
- }
56
-
57
- return untold ? undefined : true
58
- }
59
- }
@@ -1,31 +0,0 @@
1
- import * as http from '../../HTTP/index.js'
2
- import { type Directive, type Identity, type Context } from './types.js'
3
- import { split } from './split.js'
4
-
5
- export class Scheme implements Directive {
6
- private readonly scheme: string
7
- private readonly Scheme: string
8
-
9
- public constructor(scheme: string) {
10
- this.scheme = scheme.toLowerCase()
11
- this.Scheme = scheme[0].toUpperCase() + scheme.substring(1)
12
- }
13
-
14
- public authorize(_: Identity | null, context: Context): boolean {
15
- if (context.request.headers.authorization === undefined) return false
16
-
17
- const [scheme] = split(context.request.headers.authorization)
18
-
19
- if (scheme !== this.scheme)
20
- throw new http.Forbidden(
21
- this.Scheme + ' authentication scheme is required to access this resource'
22
- )
23
-
24
- return false
25
- }
26
-
27
- /** It admits nobody: it is there to refuse a scheme, not to authorize one. */
28
- public admits(): boolean {
29
- return false
30
- }
31
- }
@@ -1,11 +0,0 @@
1
- import { newid } from '@toa.io/generic'
2
- import type { Identity } from './types.js'
3
-
4
- export function create(credentials?: string): Identity {
5
- return {
6
- id: newid(),
7
- scheme: credentials?.split(' ')[0] ?? null,
8
- refresh: false,
9
- roles: []
10
- }
11
- }
@@ -1,3 +0,0 @@
1
- import { Authorization } from './Authorization.js'
2
-
3
- export const authorization = new Authorization()
@@ -1,18 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { providers } from './schemes.js'
5
-
6
- it('should resolve a known scheme', () => {
7
- assert.deepEqual(providers('basic'), ['basic'])
8
- assert.deepEqual(providers('code'), ['federation'])
9
- })
10
-
11
- it('should resolve every provider claiming a scheme, in order', () => {
12
- assert.deepEqual(providers('bearer'), ['tokens', 'federation'])
13
- })
14
-
15
- it('should not resolve a property of Object.prototype', () => {
16
- for (const name of ['constructor', '__proto__', 'toString', 'hasOwnProperty'])
17
- assert.equal(providers(name), undefined)
18
- })
@@ -1,39 +0,0 @@
1
- import type { Remote, Scheme } from './types.js'
2
-
3
- /**
4
- * The providers of a scheme, in the order they are asked. More than one claims `Bearer`:
5
- * an OpenID `id_token` is federated, and a token this gateway issued is presented that way
6
- * by an OAuth client. Which of them a credential belongs to is each provider's own to say,
7
- * so the order here is only which is asked first.
8
- */
9
- export const PROVIDERS: Record<Scheme, Remote[]> = {
10
- basic: ['basic'],
11
- token: ['tokens'],
12
- bearer: ['tokens', 'federation'],
13
- code: ['federation'],
14
- otp: ['otp']
15
- }
16
-
17
- export const INCEPTION: Remote[] = ['basic', 'federation']
18
- export const PRIMARY: Remote = 'tokens'
19
-
20
- /**
21
- * The providers of a scheme, or nothing for a scheme that is not one — including a name a
22
- * plain object answers on its own, like `constructor`.
23
- */
24
- export function providers(scheme: string): Remote[] | undefined {
25
- return Object.hasOwn(PROVIDERS, scheme) ? PROVIDERS[scheme as Scheme] : undefined
26
- }
27
-
28
- /**
29
- * What a provider answers when the credentials are not of its kind. The next provider of
30
- * the scheme is asked; a provider that declines has done nothing, so asking is free of
31
- * effect — which asking one that rejects would not be.
32
- */
33
- export const UNRECOGNIZED = 'UNRECOGNIZED'
34
-
35
- /**
36
- * The rejection of credentials that are verifiable and owned by no identity: the one
37
- * inception goes ahead with.
38
- */
39
- export const UNKNOWN = 'NOT_FOUND'
@@ -1,14 +0,0 @@
1
- import * as http from '../../HTTP/index.js'
2
- import { type Scheme } from './types.js'
3
-
4
- export function split(authorization: string): [Scheme, string] {
5
- const space = authorization.indexOf(' ')
6
-
7
- if (space === -1) throw new http.Unauthorized('Malformed authorization header')
8
-
9
- const Scheme = authorization.slice(0, space)
10
- const scheme = Scheme.toLowerCase() as Scheme
11
- const value = authorization.slice(space + 1)
12
-
13
- return [scheme, value]
14
- }
@@ -1,75 +0,0 @@
1
- import { type Component } from '@toa.io/core'
2
- import type { Maybe } from '@toa.io/core/types'
3
- import { type Parameter } from '../../RTD/index.js'
4
- import type { Introspection } from '../../Introspection.js'
5
- import type * as http from '../../HTTP/index.js'
6
- import type * as io from '../../io.js'
7
-
8
- export interface Directive {
9
- priority?: number
10
-
11
- authorize: (
12
- identity: Identity | null,
13
- context: Context,
14
- parameters: Parameter[]
15
- ) => boolean | Promise<boolean>
16
-
17
- /**
18
- * Whether this admits the identity where that can be told without a request — which is
19
- * what describing a method is. `undefined` says it cannot be told: a directive reading a
20
- * route variable's value or the body has neither here, and one that is not implemented
21
- * says the same by its absence. Nothing here may have an effect on the request.
22
- */
23
- admits?: (
24
- identity: Identity | null,
25
- context: Context
26
- ) => boolean | undefined | Promise<boolean | undefined>
27
-
28
- /**
29
- * What this directive makes of what the method says about itself, which is the reverse of
30
- * what it does to a request: a property it fills from the identity is taken out of the
31
- * input, because it is not the caller's to send — and a description that offers one invites
32
- * a caller to name an identity that is not theirs. Nothing here may have an effect on the
33
- * request.
34
- */
35
- describe?: (introspection: Introspection) => Introspection
36
-
37
- reply?: (context: Context) => http.OutgoingMessage | null
38
-
39
- settle?: (context: Context, response: http.OutgoingMessage) => Promise<void>
40
- }
41
-
42
- export interface Identity {
43
- readonly id: string
44
- roles?: string[]
45
- permissions?: Record<string, string[]>
46
- scheme: string | null // null for transient identities
47
-
48
- /** The component that verified the credentials; none for a transient identity. */
49
- provider?: Remote
50
- refresh: boolean
51
- }
52
-
53
- export interface Extension {
54
- identity: Identity | null
55
-
56
- /** the error code the presented credentials were rejected with, when they were */
57
- rejection?: string
58
-
59
- /** whether the identity was checked against the bans while being resolved */
60
- vetted?: boolean
61
- }
62
-
63
- export interface Ban {
64
- banned: boolean
65
- }
66
-
67
- export type Context = io.Input & Extension
68
- export type AuthenticationResult = Maybe<{ identity: Identity; refresh: boolean }>
69
-
70
- export type Scheme = 'basic' | 'token' | 'bearer' | 'code' | 'otp'
71
- export type Remote = 'basic' | 'federation' | 'tokens' | 'roles' | 'bans' | 'otp'
72
- export type Discovery = Record<Remote, Promise<Component>>
73
- export type Components = Partial<Record<Remote, Component>>
74
-
75
- export type Create = (name: string, value: any, ...args: any[]) => Directive
@@ -1,92 +0,0 @@
1
- import { Control } from './Control.js'
2
- import { Exact } from './Exact.js'
3
- import { matches, tag } from './etag.js'
4
- import type { Output } from '../../io.js'
5
- import type { AuthenticatedContext, Directive } from './types.js'
6
- import type { DirectiveFamily } from '../../RTD/index.js'
7
- import type * as http from '../../HTTP/index.js'
8
-
9
- export class Cache implements DirectiveFamily<Directive> {
10
- public readonly name: string = 'cache'
11
- public readonly mandatory: boolean = true
12
-
13
- public create(name: string, value: any): Directive {
14
- const Class = constructors[name]
15
-
16
- if (Class === undefined)
17
- throw new Error(`Directive 'cache:${name}' is not implemented`)
18
-
19
- return new Class(value)
20
- }
21
-
22
- public precall(): Output {
23
- return null
24
- }
25
-
26
- public async settle(
27
- directives: Directive[],
28
- context: AuthenticatedContext,
29
- response: http.OutgoingMessage
30
- ): Promise<void> {
31
- const directive = directives[0]
32
- const method = context.request.method
33
- const safe = method === 'GET' || method === 'HEAD'
34
-
35
- response.headers ??= new Headers()
36
-
37
- validate(context, response, response.headers, safe)
38
-
39
- // `cache:exact` sets what it is given, whatever the method: whether a reply may be
40
- // stored at all is not a question about the method's cacheability, and a token
41
- // endpoint answers a POST it must not have kept
42
- if (directive instanceof Exact) {
43
- directive.set(context, response.headers)
44
-
45
- return
46
- }
47
-
48
- if (!safe) return
49
-
50
- if (directive === undefined) {
51
- if (context.identity !== null && !Control.disabled(response.headers)) {
52
- response.headers.set('cache-control', 'private')
53
- response.headers.append('vary', 'authorization')
54
- }
55
- } else directive.set(context, response.headers)
56
- }
57
- }
58
-
59
- /**
60
- * The validators a reply carries: the timestamp as `last-modified`, whatever the method, and
61
- * on a safe one the version as its `etag`. A client that sends the tag back in `if-none-match`
62
- * already has the representation and is told so, with the tag as it sent it. A reply without
63
- * a version has no tag: nothing identifies it but its body, and hashing that on every reply
64
- * is what a version is for.
65
- */
66
- // eslint-disable-next-line max-params
67
- function validate(
68
- context: AuthenticatedContext,
69
- response: http.OutgoingMessage,
70
- headers: Headers,
71
- safe: boolean
72
- ): void {
73
- const { version, modified } = response
74
-
75
- if (modified !== undefined)
76
- headers.set('last-modified', new Date(modified).toUTCString())
77
-
78
- if (version === undefined || !safe) return
79
-
80
- const sent = context.request.headers['if-none-match']
81
-
82
- if (sent !== undefined && matches(sent, version)) {
83
- response.status = 304
84
- response.body = undefined
85
- headers.set('etag', sent)
86
- } else headers.set('etag', tag(version))
87
- }
88
-
89
- const constructors: Record<string, new (value: any) => Directive> = {
90
- control: Control,
91
- exact: Exact
92
- }
@@ -1,81 +0,0 @@
1
- import { match } from 'matchacho'
2
- import type { AuthenticatedContext, Directive } from './types.js'
3
-
4
- export class Control implements Directive {
5
- protected readonly value: string
6
- private control: string | null = null
7
- private vary: boolean = false
8
-
9
- public constructor(value: string) {
10
- this.value = value
11
- }
12
-
13
- public static disabled(headers: Headers): boolean {
14
- const value = headers.get('cache-control')
15
-
16
- if (value === null) return false
17
-
18
- const directives = mask(value)
19
-
20
- return (directives & NO_STORE) === NO_STORE
21
- }
22
-
23
- public set(context: AuthenticatedContext, headers: Headers): void {
24
- this.control ??= this.resolve(context)
25
-
26
- if (Control.disabled(headers)) return
27
-
28
- headers.set('cache-control', this.control)
29
-
30
- if (this.vary) headers.append('vary', 'authorization')
31
- }
32
-
33
- protected resolve(request: AuthenticatedContext): string {
34
- if (request.identity === null) return this.value
35
-
36
- const directives = mask(this.value)
37
-
38
- if ((directives & PRIVATE) === PRIVATE) this.vary = true
39
-
40
- if ((directives & (PUBLIC | NO_CACHE)) === PUBLIC) return 'no-cache, ' + this.value
41
-
42
- if ((directives & (PUBLIC | PRIVATE)) === 0) {
43
- this.vary = true
44
-
45
- return 'private, ' + this.value
46
- }
47
-
48
- return this.value
49
- }
50
- }
51
-
52
- function mask(value: string): number {
53
- const directives = value.match(DIRECTIVES_RX)
54
-
55
- if (directives === null) return 0
56
-
57
- let mask = 0
58
-
59
- for (const directive of directives)
60
- mask |= match<number>(
61
- directive,
62
- 'private',
63
- PRIVATE,
64
- 'public',
65
- PUBLIC,
66
- 'no-cache',
67
- NO_CACHE,
68
- 'no-store',
69
- NO_STORE,
70
- 0
71
- )
72
-
73
- return mask
74
- }
75
-
76
- const DIRECTIVES_RX = /\b(private|public|no-cache|no-store)\b/gi
77
-
78
- const PUBLIC = 1
79
- const PRIVATE = 2
80
- const NO_CACHE = 4
81
- const NO_STORE = 8
@@ -1,7 +0,0 @@
1
- import { Control } from './Control.js'
2
-
3
- export class Exact extends Control {
4
- protected override resolve(): string {
5
- return this.value
6
- }
7
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * An entity tag is its version in quotes, `"3"`, or the same marked weak, `W/"3"`. A client
3
- * sends one back in `if-match` and `if-none-match`; what it sent is compared here as a string
4
- * and parsed only where a version is needed of it.
5
- */
6
- export function tag(version: number): string {
7
- return `"${version}"`
8
- }
9
-
10
- /** Whether the tag a client sent names the version, strong or weak. */
11
- export function matches(sent: string, version: number): boolean {
12
- const strong = tag(version)
13
-
14
- return sent === strong || sent === 'W/' + strong
15
- }
16
-
17
- /** The version a tag names, or nothing for a tag that is not one. */
18
- export function parse(sent: string): number | null {
19
- const strong = sent.startsWith('W/') ? sent.slice(2) : sent
20
-
21
- if (
22
- strong.length < 3 ||
23
- strong.length > 34 ||
24
- !strong.startsWith('"') ||
25
- !strong.endsWith('"')
26
- )
27
- return null
28
-
29
- const digits = strong.slice(1, -1)
30
-
31
- for (let i = 0; i < digits.length; i++) {
32
- const code = digits.charCodeAt(i)
33
-
34
- if (code < 48 || code > 57) return null
35
- }
36
-
37
- return Number.parseInt(digits)
38
- }
@@ -1,3 +0,0 @@
1
- import { Cache } from './Cache.js'
2
-
3
- export const cache = new Cache()
@@ -1,9 +0,0 @@
1
- import type { Input } from '../../io.js'
2
-
3
- export interface Directive {
4
- set: (input: Input, headers: Headers) => void
5
- }
6
-
7
- export interface AuthenticatedContext extends Input {
8
- identity?: unknown | null
9
- }
@@ -1,75 +0,0 @@
1
- import { describe, it, beforeEach } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { CORS } from './CORS.js'
5
- import type { Input } from '../../io.js'
6
-
7
- const input = (method: string, headers: Record<string, string>): Input =>
8
- ({
9
- request: { method, headers },
10
- pipelines: { body: [], response: [] }
11
- }) as unknown as Input
12
-
13
- describe('cors', () => {
14
- let cors: CORS
15
-
16
- beforeEach(() => {
17
- cors = new CORS()
18
- cors.reset()
19
- })
20
-
21
- it('should answer a preflight', () => {
22
- const output = cors.intercept(
23
- input('OPTIONS', {
24
- origin: 'https://hello.world',
25
- 'access-control-request-method': 'GET'
26
- })
27
- )
28
-
29
- assert.equal(output?.status, 204)
30
- assert.equal(output?.headers?.get('access-control-allow-origin'), 'https://hello.world')
31
- })
32
-
33
- it('should allow OPTIONS, so that one can be preflighted at all', () => {
34
- const output = cors.intercept(
35
- input('OPTIONS', {
36
- origin: 'https://hello.world',
37
- 'access-control-request-method': 'OPTIONS'
38
- })
39
- )
40
-
41
- assert.match(output?.headers?.get('access-control-allow-methods') ?? '', /\bOPTIONS\b/)
42
- })
43
-
44
- it('should pass an OPTIONS that is not a preflight through', () => {
45
- /*
46
- * A browser puts `Origin` on every request whose method is not `GET` or `HEAD`, its own
47
- * `OPTIONS` included — so answering this one here would put introspection out of reach
48
- * of any page. Do not restore the `Origin`-only test.
49
- */
50
- const output = cors.intercept(input('OPTIONS', { origin: 'https://hello.world' }))
51
-
52
- assert.equal(output, null)
53
- })
54
-
55
- it('should decorate a reply that is not a preflight', () => {
56
- const request = input('OPTIONS', { origin: 'https://hello.world' })
57
-
58
- cors.intercept(request)
59
-
60
- const message = {}
61
-
62
- for (const transform of request.pipelines.response) transform(message)
63
-
64
- const headers = (message as { headers?: Headers }).headers
65
-
66
- assert.equal(headers?.get('access-control-allow-origin'), 'https://hello.world')
67
- assert.equal(headers?.get('access-control-allow-credentials'), 'true')
68
- assert.equal(headers?.get('vary'), 'origin')
69
- })
70
-
71
- it('should pass a request carrying no origin through', () => {
72
- assert.equal(cors.intercept(input('OPTIONS', {})), null)
73
- assert.equal(cors.intercept(input('GET', {})), null)
74
- })
75
- })
@@ -1,88 +0,0 @@
1
- import type { Input, Output } from '../../io.js'
2
- import type { Interceptor } from '../../Interception.js'
3
-
4
- /** What is allowed before any directive asks for more. */
5
- const REQUEST_HEADERS = [
6
- 'accept',
7
- 'authorization',
8
- 'content-type',
9
- 'if-match',
10
- 'if-none-match'
11
- ]
12
-
13
- export class CORS implements Interceptor {
14
- public readonly name = 'cors'
15
-
16
- private requestHeaders = new Set<string>(REQUEST_HEADERS)
17
-
18
- private readonly headers = new Headers({
19
- 'access-control-allow-methods': 'GET, POST, PUT, PATCH, DELETE, LOCK, UNLOCK, OPTIONS',
20
- 'access-control-allow-credentials': 'true',
21
- 'access-control-allow-headers': this.allowedHeaders(),
22
- 'access-control-max-age': '3600',
23
- 'cache-control': 'max-age=3600',
24
- vary: 'origin'
25
- })
26
-
27
- public intercept(input: Input): Output {
28
- const origin = input.request.headers.origin
29
- const requested = input.request.headers['access-control-request-method']
30
-
31
- /*
32
- * A preflight is `OPTIONS` carrying `Access-Control-Request-Method`, and only that. A
33
- * browser puts `Origin` on every request whose method is not `GET` or `HEAD` — its own
34
- * `OPTIONS` included, same-origin or not — so answering that one here would put
35
- * introspection out of reach of any page.
36
- */
37
- if (origin !== undefined && requested !== undefined && input.request.method === 'OPTIONS')
38
- return this.preflightResponse(origin)
39
-
40
- input.pipelines.response.push((output) => {
41
- output.headers ??= new Headers()
42
-
43
- if (origin !== undefined) {
44
- output.headers.set('access-control-allow-origin', origin)
45
- output.headers.set('access-control-allow-credentials', 'true')
46
- output.headers.set(
47
- 'access-control-expose-headers',
48
- 'authorization, content-type, content-length, date, etag, last-modified'
49
- )
50
- }
51
-
52
- const method = input.request.method
53
-
54
- if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS')
55
- output.headers.append('vary', 'origin')
56
- })
57
-
58
- return null
59
- }
60
-
61
- public reset(): void {
62
- this.requestHeaders = new Set(REQUEST_HEADERS)
63
- this.headers.set('access-control-allow-headers', this.allowedHeaders())
64
- }
65
-
66
- public allow(header: string): void {
67
- this.requestHeaders.add(header.toLowerCase())
68
- this.headers.set('access-control-allow-headers', this.allowedHeaders())
69
- }
70
-
71
- /**
72
- * Sorted, because the set is filled as branches merge and their order is not
73
- * fixed — an unsorted value would differ between otherwise identical processes,
74
- * and between one restart and the next.
75
- */
76
- private allowedHeaders(): string {
77
- return Array.from(this.requestHeaders).sort().join(', ')
78
- }
79
-
80
- private preflightResponse(origin: string): Output {
81
- this.headers.set('access-control-allow-origin', origin)
82
-
83
- return {
84
- status: 204,
85
- headers: this.headers
86
- }
87
- }
88
- }
@@ -1,3 +0,0 @@
1
- import { CORS } from './CORS.js'
2
-
3
- export const cors = new CORS()