@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,96 +0,0 @@
1
- import { Readable } from 'stream'
2
- import { NotFound } from '../../HTTP/index.js'
3
- import * as schemas from './schemas.js'
4
- import { Workflow } from './workflows/index.js'
5
- import { Directive } from './Directive.js'
6
- import type { Parameter } from '../../RTD/index.js'
7
- import type { Unit, Location } from './workflows/index.js'
8
- import type { Maybe } from '@toa.io/core/types'
9
- import type { Component } from '@toa.io/core'
10
- import type { Output } from '../../io.js'
11
- import type { Input } from './types.js'
12
- import type { Remotes } from '../../Remotes.js'
13
- import type { Entry } from '@toa.io/extensions.storages'
14
-
15
- export class Delete extends Directive {
16
- public readonly targeted = true
17
-
18
- private readonly workflow?: Workflow
19
- private readonly discovery: Promise<Component>
20
- private storage!: Component
21
-
22
- public constructor(
23
- options: Options | null,
24
- discovery: Promise<Component>,
25
- remotes: Remotes
26
- ) {
27
- super()
28
- schemas.remove.validate(options)
29
-
30
- if (options?.workflow !== undefined)
31
- this.workflow = new Workflow(options.workflow, remotes)
32
-
33
- this.discovery = discovery
34
- }
35
-
36
- public async apply(
37
- storage: string,
38
- input: Input,
39
- parameters: Parameter[]
40
- ): Promise<Output> {
41
- this.storage ??= await this.discovery
42
-
43
- const output: Output = {}
44
-
45
- if (this.workflow !== undefined) {
46
- const entry = await this.storage.invoke<Maybe<Entry>>('head', {
47
- input: {
48
- storage,
49
- path: input.request.url
50
- }
51
- })
52
-
53
- if (entry instanceof Error) throw new NotFound()
54
-
55
- output.status = 202
56
- output.body = Readable.from(this.execute(input, storage, entry, parameters))
57
- } else await this.delete(storage, input)
58
-
59
- return output
60
- }
61
-
62
- private async delete(storage: string, input: Input): Promise<void> {
63
- await this.storage.invoke('delete', {
64
- input: {
65
- storage,
66
- path: input.request.url
67
- }
68
- })
69
- }
70
-
71
- // eslint-disable-next-line max-params
72
- private async *execute(
73
- input: Input,
74
- storage: string,
75
- entry: Entry,
76
- parameters: Parameter[]
77
- ): AsyncGenerator {
78
- const location: Location = {
79
- storage,
80
- authority: input.authority,
81
- path: input.request.url
82
- }
83
-
84
- for await (const chunk of this.workflow!.execute(location, entry, parameters)) {
85
- yield chunk
86
-
87
- if (typeof chunk === 'object' && chunk !== null && 'error' in chunk) return
88
- }
89
-
90
- await this.delete(storage, input)
91
- }
92
- }
93
-
94
- export interface Options {
95
- workflow?: Unit[] | Unit
96
- }
@@ -1,21 +0,0 @@
1
- import type { Input } from './types.js'
2
- import type { Parameter } from '../../RTD/index.js'
3
- import type { Introspection } from '../../Introspection.js'
4
- import type * as io from '../../io.js'
5
-
6
- export abstract class Directive {
7
- public readonly name = 'octets.' + this.constructor.name.toLowerCase()
8
- public abstract readonly targeted: boolean
9
-
10
- public abstract apply(
11
- storage: string,
12
- input: Input,
13
- parameters: Parameter[]
14
- ): Promise<io.Output>
15
-
16
- /**
17
- * What a caller has to know to make the request. Only sending a file takes anything a
18
- * schema does not already say; reading one and deleting one take nothing.
19
- */
20
- public describe?(introspection: Introspection): void
21
- }
@@ -1,88 +0,0 @@
1
- import { Forbidden, NotFound } from '../../HTTP/index.js'
2
- import * as schemas from './schemas.js'
3
- import { Directive } from './Directive.js'
4
- import type { Maybe } from '@toa.io/core/types'
5
- import type { Entry, Stream } from '@toa.io/extensions.storages'
6
- import type { Component } from '@toa.io/core'
7
- import type { Output } from '../../io.js'
8
- import type { Input } from './types.js'
9
-
10
- export class Get extends Directive {
11
- public readonly targeted = true
12
-
13
- private readonly options: Required<Options> = {
14
- meta: false
15
- }
16
-
17
- private readonly discovery: Promise<Component>
18
- private storage!: Component
19
-
20
- public constructor(options: Options | null, discovery: Promise<Component>) {
21
- super()
22
-
23
- schemas.get.validate(options)
24
- Object.assign(this.options, options)
25
-
26
- this.discovery = discovery
27
- }
28
-
29
- public async apply(storage: string, input: Input): Promise<Output> {
30
- this.storage ??= await this.discovery
31
-
32
- if (input.subtype === 'octets.entry')
33
- if (this.options.meta) return this.head(storage, input)
34
- else throw new Forbidden('Metadata is not accessible')
35
- else return await this.get(storage, input)
36
- }
37
-
38
- private async get(storage: string, input: Input): Promise<Output> {
39
- if ('if-none-match' in input.request.headers) return { status: 304 }
40
-
41
- const endpoint = input.request.method === 'GET' ? 'get' : 'head'
42
-
43
- const entry = await this.storage.invoke<Maybe<Stream>>(endpoint, {
44
- input: {
45
- storage,
46
- path: input.request.url,
47
- range: input.request.headers.range,
48
- agent: input.request.headers['user-agent']
49
- }
50
- })
51
-
52
- if (entry instanceof Error) throw new NotFound()
53
-
54
- const headers = new Headers({
55
- 'content-type': entry.type,
56
- etag: `"${entry.checksum}"`
57
- })
58
-
59
- if (entry.range !== undefined) headers.set('content-range', entry.range)
60
-
61
- // an absent content-length is what says the length is unknown; naming the encoding
62
- // is redundant over HTTP/1.1 and forbidden over HTTP/2
63
- if (entry.size !== null) headers.set('content-length', entry.size.toString())
64
-
65
- return {
66
- status: entry.partial === true ? 206 : 200,
67
- headers,
68
- body: endpoint === 'get' ? entry.stream : undefined
69
- }
70
- }
71
-
72
- private async head(storage: string, input: Input): Promise<Output> {
73
- const entry = await this.storage.invoke<Maybe<Entry>>('head', {
74
- input: {
75
- storage,
76
- path: input.request.url
77
- }
78
- })
79
-
80
- if (entry instanceof Error) throw new NotFound()
81
-
82
- return { body: entry }
83
- }
84
- }
85
-
86
- export interface Options {
87
- meta?: boolean
88
- }
@@ -1,82 +0,0 @@
1
- import { NotFound } from '../../HTTP/index.js'
2
- import { Context } from './Context.js'
3
- import { Put } from './Put.js'
4
- import { Get } from './Get.js'
5
- import { Delete } from './Delete.js'
6
- import { WorkflowDirective } from './Workflow.js'
7
- import type { Directive } from './Directive.js'
8
- import type { Output } from '../../io.js'
9
- import type { Component } from '@toa.io/core'
10
- import type { Remotes } from '../../Remotes.js'
11
- import type { Parameter, DirectiveFamily } from '../../RTD/index.js'
12
- import type { Introspection } from '../../Introspection.js'
13
- import type { Input } from './types.js'
14
-
15
- export class Octets implements DirectiveFamily<Directive> {
16
- public readonly name: string = 'octets'
17
- public readonly mandatory: boolean = false
18
-
19
- private discovery = null as unknown as Promise<Component>
20
-
21
- public create(name: string, value: any, remotes: Remotes): Directive {
22
- const Class = DIRECTIVES[name]
23
-
24
- if (Class === undefined)
25
- throw new Error(`Directive 'octets:${name}' is not implemented`)
26
-
27
- this.discovery ??= remotes.discover('exposition', 'octets')
28
-
29
- return new Class(value, this.discovery, remotes)
30
- }
31
-
32
- /** What the request takes, which only sending a file says anything about. */
33
- public explain(directives: Directive[], _: Input, introspection: Introspection): Introspection {
34
- for (const directive of directives) directive.describe?.(introspection)
35
-
36
- return introspection
37
- }
38
-
39
- public async precall(
40
- directives: Directive[],
41
- input: Input,
42
- parameters: Parameter[]
43
- ): Promise<Output> {
44
- let context: Context | null = null
45
- let action: Directive | null = null
46
-
47
- for (const directive of directives)
48
- if (directive instanceof Context) context ??= directive
49
- else if (action === null) action = directive
50
- else throw new Error('Octets action is ambiguous')
51
-
52
- if (action === null) return null
53
-
54
- // noinspection PointlessBooleanExpressionJS
55
- if (context === null) throw new Error('Octets context is not defined')
56
-
57
- const targeted = input.request.url[input.request.url.length - 1] !== '/'
58
-
59
- if (targeted !== action.targeted)
60
- throw new NotFound(
61
- `Trailing slash is ${action.targeted ? 'redundant' : 'required'}`
62
- )
63
-
64
- // noinspection JSObjectNullOrUndefined
65
- return await action.apply(context.storage, input, parameters)
66
- }
67
- }
68
-
69
- const DIRECTIVES: Record<string, Constructor> = {
70
- context: Context,
71
- put: Put,
72
- get: Get,
73
- head: Get,
74
- delete: Delete,
75
- workflow: WorkflowDirective
76
- }
77
-
78
- type Constructor = new (
79
- value: any,
80
- discovery: Promise<Component>,
81
- remotes: Remotes
82
- ) => Directive
@@ -1,186 +0,0 @@
1
- import { PassThrough } from 'node:stream'
2
- import { match } from 'matchacho'
3
- import * as http from '../../HTTP/index.js'
4
- import { cors } from '../cors/index.js'
5
- import * as schemas from './schemas.js'
6
- import { Workflow } from './workflows/index.js'
7
- import { Directive } from './Directive.js'
8
- import { toBytes } from './bytes.js'
9
- import type { Readable } from 'stream'
10
- import type { Parameter } from '../../RTD/index.js'
11
- import type { Unit, Location } from './workflows/index.js'
12
- import type { Entry } from '@toa.io/extensions.storages'
13
- import type { Remotes } from '../../Remotes.js'
14
- import type { Component } from '@toa.io/core'
15
- import type { Introspection } from '../../Introspection.js'
16
- import type { Output } from '../../io.js'
17
- import type { Input } from './types.js'
18
-
19
- export class Put extends Directive {
20
- public readonly targeted = false
21
-
22
- private readonly location?: string
23
- private readonly accept?: string
24
- private readonly limit: number
25
- private readonly limitString: string
26
- private readonly trust?: Array<string | RegExp>
27
- private readonly workflow?: Workflow
28
- private readonly discovery: Record<string, Promise<Component>> = {}
29
- private storage: Component | null = null
30
-
31
- public constructor(
32
- options: Options | null,
33
- discovery: Promise<Component>,
34
- remotes: Remotes
35
- ) {
36
- super()
37
-
38
- schemas.put.validate<Options>(options)
39
-
40
- this.accept = match(
41
- options?.accept,
42
- String,
43
- (value: string) => value,
44
- Array,
45
- (types: string[]) => types.join(','),
46
- undefined
47
- )
48
-
49
- if (options?.workflow !== undefined)
50
- this.workflow = new Workflow(options.workflow, remotes)
51
-
52
- if (options?.trust !== undefined)
53
- this.trust = options.trust.map((value: string) =>
54
- value.startsWith('/') ? new RegExp(value.slice(1, -1)) : value
55
- )
56
-
57
- if (options?.location !== undefined) this.location = options.location
58
-
59
- this.limitString = options?.limit ?? '64MiB'
60
- this.limit = toBytes(this.limitString)
61
- this.discovery.storage = discovery
62
-
63
- cors.allow('content-attributes')
64
- cors.allow('content-location')
65
- }
66
-
67
- /** What sending a file here takes: what may be sent, how much of it, and what comes back. */
68
- public override describe(introspection: Introspection): void {
69
- introspection.octets = {
70
- ...(this.accept === undefined ? {} : { accept: this.accept }),
71
- limit: this.limitString,
72
- ...(this.workflow === undefined ? {} : { stream: true })
73
- }
74
- }
75
-
76
- public async apply(
77
- storage: string,
78
- input: Input,
79
- parameters: Parameter[]
80
- ): Promise<Output> {
81
- this.storage ??= await this.discovery.storage
82
-
83
- const request: StoreRequest = {
84
- input: {
85
- storage,
86
- request: input.request,
87
- location: this.location,
88
- accept: this.accept,
89
- limit: this.limit,
90
- trust: this.trust
91
- }
92
- }
93
-
94
- const entry = await this.storage.invoke<Entry>('put', request)
95
-
96
- return match<Output>(
97
- entry,
98
- Error,
99
- (error: CodedError) => this.throw(error),
100
- () => this.reply(input, storage, entry, parameters)
101
- )
102
- }
103
-
104
- // eslint-disable-next-line max-params
105
- private reply(
106
- input: Input,
107
- storage: string,
108
- entry: Entry,
109
- parameters: Parameter[]
110
- ): Output {
111
- const body =
112
- this.workflow === undefined
113
- ? entry
114
- : this.execute(input, storage, entry, parameters)
115
-
116
- return { body }
117
- }
118
-
119
- // eslint-disable-next-line max-params
120
- private execute(
121
- input: Input,
122
- storage: string,
123
- entry: Entry,
124
- parameters: Parameter[]
125
- ): Readable {
126
- const stream = new PassThrough({ objectMode: true })
127
-
128
- stream.push(entry)
129
-
130
- const location: Location = {
131
- storage,
132
- authority: input.authority,
133
- identity: input.identity?.id,
134
- path: this.location ?? input.request.url
135
- }
136
-
137
- this.workflow!.execute(location, entry, parameters).pipe(stream)
138
-
139
- return stream
140
- }
141
-
142
- private throw(error: CodedError): never {
143
- throw match(
144
- error.code,
145
- 'NOT_ACCEPTABLE',
146
- () => new http.UnsupportedMediaType(),
147
- 'TYPE_MISMATCH',
148
- () => new http.BadRequest(),
149
- 'LIMIT_EXCEEDED',
150
- () => new http.RequestEntityTooLarge(`Size limit is ${this.limitString}`),
151
- 'LOCATION_UNTRUSTED',
152
- () => new http.Forbidden(error.message),
153
- 'LOCATION_LENGTH',
154
- () => new http.BadRequest(error.message),
155
- 'LOCATION_UNAVAILABLE',
156
- () => new http.NotFound(error.message),
157
- 'INVALID_ID',
158
- () => new http.BadRequest(error.message),
159
- error
160
- )
161
- }
162
- }
163
-
164
- export interface Options {
165
- location?: string
166
- accept?: string | string[]
167
- limit?: string
168
- workflow?: Unit[] | Unit
169
- trust?: string[]
170
- }
171
-
172
- interface StoreRequest {
173
- input: {
174
- storage: string
175
- request: Input['request']
176
- location?: string
177
- accept?: string
178
- limit?: number
179
- trust?: Array<string | RegExp>
180
- attributes?: Record<string, string>
181
- }
182
- }
183
-
184
- interface CodedError extends Error {
185
- code: string
186
- }
@@ -1,60 +0,0 @@
1
- import { NotFound } from '../../HTTP/index.js'
2
- import * as schemas from './schemas.js'
3
- import { Workflow } from './workflows/index.js'
4
- import { Directive } from './Directive.js'
5
- import type { Unit, Location } from './workflows/index.js'
6
- import type { Input } from './types.js'
7
- import type { Component } from '@toa.io/core'
8
- import type { Output } from '../../io.js'
9
- import type { Remotes } from '../../Remotes.js'
10
- import type { Maybe } from '@toa.io/core/types'
11
- import type { Entry } from '@toa.io/extensions.storages'
12
- import type { Parameter } from '../../RTD/index.js'
13
-
14
- export class WorkflowDirective extends Directive {
15
- public readonly targeted = true
16
-
17
- private readonly workflow: Workflow
18
- private readonly discovery: Promise<Component>
19
- private storage: Component | null = null
20
-
21
- public constructor(
22
- units: Unit[] | Unit,
23
- discovery: Promise<Component>,
24
- remotes: Remotes
25
- ) {
26
- super()
27
- schemas.workflow.validate(units)
28
-
29
- this.workflow = new Workflow(units, remotes)
30
- this.discovery = discovery
31
- }
32
-
33
- public async apply(
34
- storage: string,
35
- input: Input,
36
- parameters: Parameter[]
37
- ): Promise<Output> {
38
- this.storage ??= await this.discovery
39
-
40
- const entry = await this.storage.invoke<Maybe<Entry>>('head', {
41
- input: {
42
- storage,
43
- path: input.request.url
44
- }
45
- })
46
-
47
- if (entry instanceof Error) throw new NotFound()
48
-
49
- const location: Location = {
50
- storage,
51
- authority: input.authority,
52
- path: input.request.url
53
- }
54
-
55
- return {
56
- status: 202,
57
- body: this.workflow.execute(location, entry, parameters)
58
- }
59
- }
60
- }
@@ -1,33 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { toBytes } from './bytes.js'
5
-
6
- it('should parse bytes', async () => {
7
- assert.strictEqual(toBytes('10'), 10)
8
- assert.strictEqual(toBytes('10B'), 10)
9
- })
10
-
11
- it('should parse binary prefix', async () => {
12
- assert.strictEqual(toBytes('10KiB'), 10240)
13
- assert.strictEqual(toBytes('10MiB'), 10485760)
14
- assert.strictEqual(toBytes('10GiB'), 10737418240)
15
- assert.strictEqual(toBytes('10TiB'), 10995116277760)
16
- })
17
-
18
- it('should parse decimal prefix', async () => {
19
- assert.strictEqual(toBytes('10kB'), 10000)
20
- assert.strictEqual(toBytes('10MB'), 10000000)
21
- assert.strictEqual(toBytes('10GB'), 10000000000)
22
- assert.strictEqual(toBytes('10TB'), 10000000000000)
23
- })
24
-
25
- it('should parse incorrect value as binary', async () => {
26
- assert.strictEqual(toBytes('10b'), 10)
27
- assert.strictEqual(toBytes('10kb'), 10240)
28
- assert.strictEqual(toBytes('10kib'), 10240)
29
- assert.strictEqual(toBytes('10mb'), 10485760)
30
- assert.strictEqual(toBytes('10gb'), 10737418240)
31
- assert.strictEqual(toBytes('10tib'), 10995116277760)
32
- assert.strictEqual(toBytes('10Mb'), 10485760)
33
- })
@@ -1,18 +0,0 @@
1
- import assert from 'node:assert'
2
-
3
- export function toBytes(input: string): number {
4
- const match = RX.exec(input)
5
-
6
- assert.ok(match !== null, `Invalid bytes format: ${input}`)
7
-
8
- const value = parseFloat(match.groups!.value)
9
- const prefix = match.groups!.prefix?.[0].toLowerCase() ?? ''
10
- const binary = match.groups!.binary !== undefined || match.groups!.unit === 'b'
11
- const base = binary ? 1024 : 1000
12
- const power = POWERS.indexOf(prefix)
13
-
14
- return value * Math.pow(base, power)
15
- }
16
-
17
- const POWERS = ['', 'k', 'm', 'g', 't']
18
- const RX = /^(?<value>(\d+)(\.\d+)?)(?<prefix>[kmgt](?<binary>i)?)?(?<unit>b)?$/i
@@ -1,3 +0,0 @@
1
- import { Octets } from './Octets.js'
2
-
3
- export const octets = new Octets()
@@ -1,20 +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('workflow', () => {
7
- const ok = [{ echo: 'hello world' }, [{ echo: 'hello world' }, { ok: 'ok' }]]
8
-
9
- const oh = [{ echo: [] }, { echo: 'hello world', ok: { not: 'ok' } }]
10
-
11
- for (const workflow of ok)
12
- it('should be valid', () => {
13
- assert.doesNotThrow(() => schemas.workflow.validate(workflow))
14
- })
15
-
16
- for (const workflow of oh)
17
- it('should not be valid', () => {
18
- assert.throws(() => schemas.workflow.validate(workflow))
19
- })
20
- })
@@ -1,15 +0,0 @@
1
- import { resolve } from 'node:path'
2
- import * as schemas from '@toa.io/schemas'
3
- import type { Options as GetOptions } from './Get.js'
4
- import type { Options as PutOptions } from './Put.js'
5
- import type { Options as DeleteOptions } from './Delete.js'
6
- import type { Schema } from '@toa.io/schemas'
7
- import type { Unit } from './workflows/index.js'
8
-
9
- const path = resolve(import.meta.dirname, '../../../schemas/octets')
10
- const namespace = schemas.namespace(path)
11
-
12
- export const put: Schema<PutOptions | null> = namespace.schema('put')
13
- export const get: Schema<GetOptions | null> = namespace.schema('get')
14
- export const remove: Schema<DeleteOptions | null> = namespace.schema('delete')
15
- export const workflow: Schema<Unit[] | Unit> = namespace.schema('workflow')
@@ -1,9 +0,0 @@
1
- import type * as io from '../../io.js'
2
- import type { Identity } from '../auth/types.js' // meh
3
-
4
- export interface Extension {
5
- identity?: Identity
6
- octets?: string
7
- }
8
-
9
- export type Input = io.Input & Extension