@toa.io/extensions.exposition 1.0.0-alpha.291 → 1.0.0-alpha.293

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/components/identity.basic/package.json +8 -0
  2. package/components/identity.federation/package.json +8 -0
  3. package/components/identity.passkeys/package.json +8 -0
  4. package/components/identity.tokens/package.json +10 -0
  5. package/package.json +25 -13
  6. package/transpiled/Discovery/Explorer.js +1 -1
  7. package/transpiled/Discovery/Explorer.js.map +1 -1
  8. package/transpiled/Discovery/Site.js +1 -1
  9. package/transpiled/Discovery/Site.js.map +1 -1
  10. package/transpiled/Discovery/trunk.js +1 -1
  11. package/transpiled/Discovery/trunk.js.map +1 -1
  12. package/transpiled/Endpoint.js +3 -0
  13. package/transpiled/Endpoint.js.map +1 -1
  14. package/transpiled/Factory.js +1 -1
  15. package/transpiled/Factory.js.map +1 -1
  16. package/transpiled/Gateway.js +1 -1
  17. package/transpiled/Gateway.js.map +1 -1
  18. package/transpiled/HTTP/Server.d.ts +1 -1
  19. package/transpiled/HTTP/Server.js +1 -1
  20. package/transpiled/HTTP/Server.js.map +1 -1
  21. package/transpiled/Introspection.d.ts +6 -0
  22. package/transpiled/Introspection.js +1 -0
  23. package/transpiled/Introspection.js.map +1 -1
  24. package/transpiled/MCP/Server.d.ts +1 -1
  25. package/transpiled/MCP/Server.js +1 -1
  26. package/transpiled/MCP/Server.js.map +1 -1
  27. package/transpiled/MCP/discover.d.ts +1 -1
  28. package/transpiled/MCP/schema.js +2 -2
  29. package/transpiled/Query.d.ts +2 -12
  30. package/transpiled/Query.js +3 -13
  31. package/transpiled/Query.js.map +1 -1
  32. package/transpiled/RPC/Dispatcher.d.ts +1 -1
  33. package/transpiled/RPC/Dispatcher.js +2 -2
  34. package/transpiled/RPC/Dispatcher.js.map +1 -1
  35. package/transpiled/RTD/Endpoint.d.ts +2 -3
  36. package/transpiled/RTD/Tree.js +1 -1
  37. package/transpiled/RTD/Tree.js.map +1 -1
  38. package/transpiled/RTD/factory.js +1 -1
  39. package/transpiled/RTD/factory.js.map +1 -1
  40. package/transpiled/RTD/syntax/index.d.ts +1 -2
  41. package/transpiled/RTD/syntax/index.js +1 -2
  42. package/transpiled/RTD/syntax/index.js.map +1 -1
  43. package/transpiled/Tenant.js +1 -1
  44. package/transpiled/Tenant.js.map +1 -1
  45. package/transpiled/directives/auth/Authorization.js +1 -1
  46. package/transpiled/directives/auth/Authorization.js.map +1 -1
  47. package/transpiled/directives/io/IO.js +1 -1
  48. package/transpiled/directives/io/IO.js.map +1 -1
  49. package/transpiled/directives/oauth/documents.d.ts +1 -1
  50. package/transpiled/index.d.ts +0 -2
  51. package/transpiled/index.js +0 -2
  52. package/transpiled/index.js.map +1 -1
  53. package/transpiled/service.js +1 -1
  54. package/transpiled/service.js.map +1 -1
  55. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  56. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  57. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  58. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  59. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  60. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  61. package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
  62. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  63. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  64. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  65. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  66. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  67. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  68. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  69. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  70. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  71. package/ui/dist/_app/version.json +1 -1
  72. package/ui/dist/index.html +12 -12
  73. package/CHANGELOG.md +0 -35
  74. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  75. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  76. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  77. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  78. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  79. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  80. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  81. package/components/identity.credentials/source/list.test.ts +0 -70
  82. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  83. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  84. package/components/identity.federation/source/list.test.ts +0 -41
  85. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  86. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  87. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  88. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  89. package/components/identity.passkeys/source/errors.test.ts +0 -34
  90. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  91. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  92. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  93. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  94. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  95. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  96. package/components/identity.tokens/source/issue.test.ts +0 -73
  97. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  98. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  99. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  100. package/context.toa.yaml +0 -31
  101. package/cucumber.mjs +0 -7
  102. package/documentation/.assets/ia3-dark.jpg +0 -0
  103. package/documentation/.assets/ia3-light.jpg +0 -0
  104. package/documentation/.assets/overview-dark.jpg +0 -0
  105. package/documentation/.assets/overview-light.jpg +0 -0
  106. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  107. package/documentation/.assets/role-scopes-light.jpg +0 -0
  108. package/documentation/.assets/rtd-dark.jpg +0 -0
  109. package/documentation/.assets/rtd-light.jpg +0 -0
  110. package/documentation/access.md +0 -350
  111. package/documentation/authorities.md +0 -51
  112. package/documentation/cache.md +0 -72
  113. package/documentation/components.md +0 -472
  114. package/documentation/consent.md +0 -101
  115. package/documentation/credentials.md +0 -88
  116. package/documentation/dev.md +0 -30
  117. package/documentation/discovery.md +0 -81
  118. package/documentation/flow.md +0 -44
  119. package/documentation/help.md +0 -122
  120. package/documentation/identity.md +0 -304
  121. package/documentation/introspection.md +0 -123
  122. package/documentation/io.md +0 -167
  123. package/documentation/ip.md +0 -24
  124. package/documentation/map.md +0 -123
  125. package/documentation/mcp.md +0 -183
  126. package/documentation/notes/desync.jpg +0 -0
  127. package/documentation/notes/peers.md +0 -59
  128. package/documentation/notes/sse.md +0 -71
  129. package/documentation/notes/throttling.md +0 -122
  130. package/documentation/oauth.md +0 -180
  131. package/documentation/octets.md +0 -334
  132. package/documentation/passkeys.md +0 -11
  133. package/documentation/protocol.md +0 -120
  134. package/documentation/query.md +0 -324
  135. package/documentation/require.md +0 -15
  136. package/documentation/rpc.md +0 -154
  137. package/documentation/tracing.md +0 -70
  138. package/documentation/tree.md +0 -199
  139. package/features/access.feature +0 -596
  140. package/features/annotation.feature +0 -32
  141. package/features/auth.assert.feature +0 -55
  142. package/features/auth.bearer.feature +0 -120
  143. package/features/auth.claims.feature +0 -171
  144. package/features/auth.incept.feature +0 -166
  145. package/features/auth.input.feature +0 -59
  146. package/features/authorities.basic.feature +0 -141
  147. package/features/authorities.feature +0 -71
  148. package/features/authorities.federation.feature +0 -100
  149. package/features/authorities.tokens.feature +0 -117
  150. package/features/body.feature +0 -76
  151. package/features/cache.feature +0 -368
  152. package/features/configuration.feature +0 -206
  153. package/features/cors.feature +0 -127
  154. package/features/credentials.feature +0 -106
  155. package/features/debug.feature +0 -34
  156. package/features/dev.feature +0 -90
  157. package/features/directives.feature +0 -61
  158. package/features/discovery.feature +0 -213
  159. package/features/discovery.ui.feature +0 -213
  160. package/features/dynamic.feature +0 -192
  161. package/features/errors.feature +0 -258
  162. package/features/etag.feature +0 -239
  163. package/features/flow.feature +0 -148
  164. package/features/help.feature +0 -512
  165. package/features/identity.bans.feature +0 -200
  166. package/features/identity.basic.feature +0 -666
  167. package/features/identity.feature +0 -240
  168. package/features/identity.federation.feature +0 -396
  169. package/features/identity.otp.feature +0 -142
  170. package/features/identity.roles.feature +0 -568
  171. package/features/identity.tokens.custom.feature +0 -430
  172. package/features/identity.tokens.feature +0 -131
  173. package/features/interruptions.feature +0 -20
  174. package/features/introspection.feature +0 -565
  175. package/features/introspection.map.feature +0 -108
  176. package/features/io.feature +0 -204
  177. package/features/io.throttle.feature +0 -166
  178. package/features/map.feature +0 -360
  179. package/features/mcp.feature +0 -753
  180. package/features/methods.feature +0 -48
  181. package/features/oauth.clients.feature +0 -195
  182. package/features/oauth.discovery.feature +0 -164
  183. package/features/oauth.grants.feature +0 -301
  184. package/features/octets.cloudinary.feature +0 -233
  185. package/features/octets.download.feature +0 -194
  186. package/features/octets.entries.feature +0 -83
  187. package/features/octets.feature +0 -306
  188. package/features/octets.head.feature +0 -40
  189. package/features/octets.location.feature +0 -83
  190. package/features/octets.meta.feature +0 -117
  191. package/features/octets.workflows.feature +0 -565
  192. package/features/passkeys.feature +0 -66
  193. package/features/probes.feature +0 -18
  194. package/features/query.feature +0 -389
  195. package/features/realtime.feature +0 -34
  196. package/features/require.feature +0 -66
  197. package/features/response.feature +0 -103
  198. package/features/routes.feature +0 -224
  199. package/features/rpc.feature +0 -429
  200. package/features/server.feature +0 -21
  201. package/features/site/_app/immutable/asset.js +0 -1
  202. package/features/site/favicon.ico +0 -0
  203. package/features/site/index.html +0 -10
  204. package/features/steps/.env.example +0 -5
  205. package/features/steps/Captures.ts +0 -20
  206. package/features/steps/Cloudinary.ts +0 -12
  207. package/features/steps/Common.ts +0 -38
  208. package/features/steps/Components.ts +0 -115
  209. package/features/steps/Database.ts +0 -106
  210. package/features/steps/Gateway.ts +0 -240
  211. package/features/steps/HTTP.ts +0 -96
  212. package/features/steps/IDP.ts +0 -361
  213. package/features/steps/Identity.ts +0 -54
  214. package/features/steps/OTP.ts +0 -42
  215. package/features/steps/Parameters.ts +0 -162
  216. package/features/steps/Probe.ts +0 -38
  217. package/features/steps/Realtime.ts +0 -175
  218. package/features/steps/Workspace.ts +0 -48
  219. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  220. package/features/steps/components/audit/operations/record.js +0 -5
  221. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  222. package/features/steps/components/echo/operations/affect.js +0 -3
  223. package/features/steps/components/echo/operations/compute.js +0 -3
  224. package/features/steps/components/echo/operations/echo.js +0 -3
  225. package/features/steps/components/echo/operations/error.js +0 -7
  226. package/features/steps/components/echo/operations/identity.js +0 -3
  227. package/features/steps/components/echo/operations/parameters.js +0 -3
  228. package/features/steps/components/echo/operations/ping.js +0 -3
  229. package/features/steps/components/echo/operations/unwrap.js +0 -3
  230. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  231. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  232. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  233. package/features/steps/components/greeter/operations/greet.js +0 -3
  234. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  235. package/features/steps/components/notify/operations/send.js +0 -5
  236. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  237. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  238. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  239. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  240. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  241. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  242. package/features/steps/components/octets.tester/operations/err.js +0 -14
  243. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  244. package/features/steps/components/octets.tester/operations/id.js +0 -5
  245. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  246. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  247. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  248. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  249. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  250. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  251. package/features/steps/components/orders/operations/create.js +0 -7
  252. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  253. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  254. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  255. package/features/steps/components/pricing/operations/quote.js +0 -3
  256. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  257. package/features/steps/components/sequences/operations/numbers.js +0 -5
  258. package/features/steps/components/sequences/operations/tokens.js +0 -14
  259. package/features/steps/components/users/manifest.toa.yaml +0 -30
  260. package/features/steps/components/users/operations/create.js +0 -11
  261. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  262. package/features/steps/map.ts +0 -30
  263. package/features/steps/tsconfig.json +0 -9
  264. package/features/streams.feature +0 -35
  265. package/features/timestamps.feature +0 -41
  266. package/features/timing.feature +0 -49
  267. package/features/tracing.feature +0 -123
  268. package/schemas/annotation.cos.yaml +0 -125
  269. package/schemas/call.cos.yaml +0 -18
  270. package/schemas/directive.cos.yaml +0 -7
  271. package/schemas/method.cos.yaml +0 -23
  272. package/schemas/node.cos.yaml +0 -22
  273. package/schemas/query.cos.yaml +0 -31
  274. package/schemas/querystring.cos.yaml +0 -19
  275. package/schemas/range.cos.yaml +0 -10
  276. package/schemas/route.cos.yaml +0 -6
  277. package/source/Annotation.ts +0 -89
  278. package/source/Branch.test.ts +0 -40
  279. package/source/Branch.ts +0 -44
  280. package/source/Composition.ts +0 -51
  281. package/source/Context.ts +0 -11
  282. package/source/Directive.test.ts +0 -199
  283. package/source/Directive.ts +0 -248
  284. package/source/Discovery/Explorer.ts +0 -34
  285. package/source/Discovery/Site.test.ts +0 -147
  286. package/source/Discovery/Site.ts +0 -202
  287. package/source/Discovery/index.ts +0 -3
  288. package/source/Discovery/tree.test.ts +0 -175
  289. package/source/Discovery/tree.ts +0 -77
  290. package/source/Discovery/trunk.ts +0 -33
  291. package/source/Endpoint.test.ts +0 -67
  292. package/source/Endpoint.ts +0 -157
  293. package/source/Factory.ts +0 -42
  294. package/source/Gateway.ts +0 -390
  295. package/source/HTTP/Context.ts +0 -143
  296. package/source/HTTP/Probe.ts +0 -99
  297. package/source/HTTP/Server.ts +0 -430
  298. package/source/HTTP/Timing.ts +0 -14
  299. package/source/HTTP/address.test.ts +0 -28
  300. package/source/HTTP/address.ts +0 -16
  301. package/source/HTTP/exceptions.ts +0 -99
  302. package/source/HTTP/formats/form.ts +0 -21
  303. package/source/HTTP/formats/index.ts +0 -36
  304. package/source/HTTP/formats/json.ts +0 -14
  305. package/source/HTTP/formats/msgpack.ts +0 -14
  306. package/source/HTTP/formats/text.ts +0 -10
  307. package/source/HTTP/formats/yaml.test.ts +0 -22
  308. package/source/HTTP/formats/yaml.ts +0 -40
  309. package/source/HTTP/index.ts +0 -6
  310. package/source/HTTP/messages.test.ts +0 -196
  311. package/source/HTTP/messages.ts +0 -186
  312. package/source/HTTP/types.ts +0 -39
  313. package/source/Interception.ts +0 -37
  314. package/source/Introspection.ts +0 -179
  315. package/source/MCP/Server.ts +0 -335
  316. package/source/MCP/discover.ts +0 -51
  317. package/source/MCP/errors.ts +0 -80
  318. package/source/MCP/index.ts +0 -1
  319. package/source/MCP/schema.test.ts +0 -91
  320. package/source/MCP/schema.ts +0 -94
  321. package/source/MCP/tools.ts +0 -144
  322. package/source/MCP/types.ts +0 -84
  323. package/source/Mapping.ts +0 -101
  324. package/source/Query.test.ts +0 -54
  325. package/source/Query.ts +0 -277
  326. package/source/RPC/Context.ts +0 -75
  327. package/source/RPC/Dispatcher.ts +0 -150
  328. package/source/RPC/errors.test.ts +0 -77
  329. package/source/RPC/errors.ts +0 -82
  330. package/source/RPC/index.ts +0 -1
  331. package/source/RPC/names.test.ts +0 -141
  332. package/source/RPC/names.ts +0 -176
  333. package/source/RPC/types.ts +0 -34
  334. package/source/RTD/Context.ts +0 -16
  335. package/source/RTD/Directives.ts +0 -126
  336. package/source/RTD/Endpoint.ts +0 -27
  337. package/source/RTD/Match.ts +0 -11
  338. package/source/RTD/Method.ts +0 -39
  339. package/source/RTD/Node.ts +0 -169
  340. package/source/RTD/Route.ts +0 -93
  341. package/source/RTD/Tree.ts +0 -137
  342. package/source/RTD/expiration.test.ts +0 -81
  343. package/source/RTD/factory.ts +0 -105
  344. package/source/RTD/index.ts +0 -8
  345. package/source/RTD/segment.test.ts +0 -35
  346. package/source/RTD/segment.ts +0 -51
  347. package/source/RTD/syntax/index.ts +0 -2
  348. package/source/RTD/syntax/parse.test.ts +0 -196
  349. package/source/RTD/syntax/parse.ts +0 -171
  350. package/source/RTD/syntax/types.ts +0 -69
  351. package/source/RTD/walk.test.ts +0 -147
  352. package/source/Remotes.test.ts +0 -79
  353. package/source/Remotes.ts +0 -39
  354. package/source/Tenant.ts +0 -73
  355. package/source/const.ts +0 -45
  356. package/source/deployment.ts +0 -96
  357. package/source/directives/auth/Anonymous.test.ts +0 -70
  358. package/source/directives/auth/Anonymous.ts +0 -36
  359. package/source/directives/auth/Anyone.ts +0 -23
  360. package/source/directives/auth/Assert.ts +0 -43
  361. package/source/directives/auth/Authorization.test.ts +0 -24
  362. package/source/directives/auth/Authorization.ts +0 -388
  363. package/source/directives/auth/Delegate.test.ts +0 -36
  364. package/source/directives/auth/Delegate.ts +0 -54
  365. package/source/directives/auth/Echo.ts +0 -24
  366. package/source/directives/auth/Federation.ts +0 -104
  367. package/source/directives/auth/Id.ts +0 -37
  368. package/source/directives/auth/Incept.ts +0 -117
  369. package/source/directives/auth/Input.ts +0 -92
  370. package/source/directives/auth/Role.test.ts +0 -147
  371. package/source/directives/auth/Role.ts +0 -99
  372. package/source/directives/auth/Rule.ts +0 -59
  373. package/source/directives/auth/Scheme.ts +0 -31
  374. package/source/directives/auth/create.ts +0 -11
  375. package/source/directives/auth/index.ts +0 -3
  376. package/source/directives/auth/schemes.test.ts +0 -18
  377. package/source/directives/auth/schemes.ts +0 -39
  378. package/source/directives/auth/split.ts +0 -14
  379. package/source/directives/auth/types.ts +0 -75
  380. package/source/directives/cache/Cache.ts +0 -92
  381. package/source/directives/cache/Control.ts +0 -81
  382. package/source/directives/cache/Exact.ts +0 -7
  383. package/source/directives/cache/etag.ts +0 -38
  384. package/source/directives/cache/index.ts +0 -3
  385. package/source/directives/cache/types.ts +0 -9
  386. package/source/directives/cors/CORS.test.ts +0 -75
  387. package/source/directives/cors/CORS.ts +0 -88
  388. package/source/directives/cors/index.ts +0 -3
  389. package/source/directives/dev/Development.ts +0 -41
  390. package/source/directives/dev/Faulty.ts +0 -31
  391. package/source/directives/dev/Sleep.ts +0 -53
  392. package/source/directives/dev/Stub.ts +0 -14
  393. package/source/directives/dev/Throw.ts +0 -14
  394. package/source/directives/dev/index.ts +0 -3
  395. package/source/directives/dev/types.ts +0 -5
  396. package/source/directives/flow/Compose.ts +0 -98
  397. package/source/directives/flow/Fetch.ts +0 -86
  398. package/source/directives/flow/Flow.ts +0 -43
  399. package/source/directives/flow/index.ts +0 -3
  400. package/source/directives/flow/types.ts +0 -7
  401. package/source/directives/help/Family.ts +0 -122
  402. package/source/directives/help/Help.test.ts +0 -227
  403. package/source/directives/help/Help.ts +0 -47
  404. package/source/directives/help/Parameters.ts +0 -47
  405. package/source/directives/help/described.ts +0 -57
  406. package/source/directives/help/index.ts +0 -45
  407. package/source/directives/index.ts +0 -33
  408. package/source/directives/io/Directive.ts +0 -17
  409. package/source/directives/io/IO.ts +0 -118
  410. package/source/directives/io/Input.ts +0 -55
  411. package/source/directives/io/Message.ts +0 -1
  412. package/source/directives/io/Output.ts +0 -81
  413. package/source/directives/io/Status.test.ts +0 -88
  414. package/source/directives/io/Status.ts +0 -47
  415. package/source/directives/io/Throttle.ts +0 -30
  416. package/source/directives/io/index.ts +0 -3
  417. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  418. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  419. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  420. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  421. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  422. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  423. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  424. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  425. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  426. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  427. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  428. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  429. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  430. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  431. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  432. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  433. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  434. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  435. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  436. package/source/directives/io/lib/throttle/index.ts +0 -4
  437. package/source/directives/io/schemas.test.ts +0 -40
  438. package/source/directives/io/schemas.ts +0 -16
  439. package/source/directives/map/Authority.ts +0 -15
  440. package/source/directives/map/Buffer.ts +0 -15
  441. package/source/directives/map/Claims.ts +0 -63
  442. package/source/directives/map/Directive.ts +0 -4
  443. package/source/directives/map/Headers.ts +0 -60
  444. package/source/directives/map/Language.ts +0 -45
  445. package/source/directives/map/Languages.ts +0 -17
  446. package/source/directives/map/Map.ts +0 -85
  447. package/source/directives/map/Mapping.ts +0 -45
  448. package/source/directives/map/Properties.ts +0 -15
  449. package/source/directives/map/Segments.ts +0 -52
  450. package/source/directives/map/index.ts +0 -3
  451. package/source/directives/mcp/MCP.ts +0 -33
  452. package/source/directives/mcp/Tool.test.ts +0 -56
  453. package/source/directives/mcp/Tool.ts +0 -32
  454. package/source/directives/mcp/index.ts +0 -6
  455. package/source/directives/oauth/Discovery.ts +0 -66
  456. package/source/directives/oauth/documents.ts +0 -110
  457. package/source/directives/oauth/index.ts +0 -3
  458. package/source/directives/octets/Context.ts +0 -23
  459. package/source/directives/octets/Delete.ts +0 -96
  460. package/source/directives/octets/Directive.ts +0 -21
  461. package/source/directives/octets/Get.ts +0 -88
  462. package/source/directives/octets/Octets.ts +0 -82
  463. package/source/directives/octets/Put.ts +0 -186
  464. package/source/directives/octets/Workflow.ts +0 -60
  465. package/source/directives/octets/bytes.test.ts +0 -33
  466. package/source/directives/octets/bytes.ts +0 -18
  467. package/source/directives/octets/index.ts +0 -3
  468. package/source/directives/octets/schemas.test.ts +0 -20
  469. package/source/directives/octets/schemas.ts +0 -15
  470. package/source/directives/octets/types.ts +0 -9
  471. package/source/directives/octets/workflows/Execution.ts +0 -130
  472. package/source/directives/octets/workflows/Workflow.ts +0 -51
  473. package/source/directives/octets/workflows/index.ts +0 -1
  474. package/source/directives/require/Directive.ts +0 -5
  475. package/source/directives/require/Headers.ts +0 -19
  476. package/source/directives/require/Require.ts +0 -27
  477. package/source/directives/require/index.ts +0 -3
  478. package/source/discovery.ts +0 -1
  479. package/source/exceptions.ts +0 -47
  480. package/source/index.ts +0 -12
  481. package/source/io.ts +0 -4
  482. package/source/manifest.test.ts +0 -56
  483. package/source/manifest.ts +0 -56
  484. package/source/octets.d.ts +0 -17
  485. package/source/root.ts +0 -59
  486. package/source/schemas.test.ts +0 -31
  487. package/source/schemas.ts +0 -15
  488. package/source/service.ts +0 -94
  489. package/source/shortcuts.ts +0 -14
  490. package/source/userland.ts +0 -47
  491. package/transpiled/Annotation.d.ts +0 -70
  492. package/transpiled/Annotation.js +0 -2
  493. package/transpiled/Annotation.js.map +0 -1
  494. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  495. package/transpiled/RTD/syntax/parse.js +0 -112
  496. package/transpiled/RTD/syntax/parse.js.map +0 -1
  497. package/transpiled/RTD/syntax/types.d.ts +0 -52
  498. package/transpiled/RTD/syntax/types.js +0 -11
  499. package/transpiled/RTD/syntax/types.js.map +0 -1
  500. package/transpiled/const.d.ts +0 -36
  501. package/transpiled/const.js +0 -37
  502. package/transpiled/const.js.map +0 -1
  503. package/transpiled/deployment.d.ts +0 -6
  504. package/transpiled/deployment.js +0 -76
  505. package/transpiled/deployment.js.map +0 -1
  506. package/transpiled/manifest.d.ts +0 -3
  507. package/transpiled/manifest.js +0 -39
  508. package/transpiled/manifest.js.map +0 -1
  509. package/transpiled/schemas.d.ts +0 -9
  510. package/transpiled/schemas.js +0 -9
  511. package/transpiled/schemas.js.map +0 -1
  512. package/transpiled/shortcuts.d.ts +0 -3
  513. package/transpiled/shortcuts.js +0 -13
  514. package/transpiled/shortcuts.js.map +0 -1
  515. package/tsconfig.json +0 -13
  516. package/tsconfig.tsbuildinfo +0 -1
  517. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  518. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  519. package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
  520. package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
  521. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  522. package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
  523. package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
  524. package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
  525. package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
  526. package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
@@ -1,122 +0,0 @@
1
- # Decentralized Request Throttling
2
-
3
- > **Superseded.** The design below was never implemented. `io:throttle` is now a
4
- > [GCRA](https://en.wikipedia.org/wiki/Generic_cell_rate_algorithm) deciding in each process, with
5
- > its state periodically reconciled through Redis by way of the `atom` aspect's `meter`. It
6
- > answers the same forces the same way — decide locally, reconcile in the background, never fail the
7
- > request path — and the section below records what it does instead. The problem statement and the
8
- > forces have not changed.
9
-
10
- ## Problem
11
-
12
- To prevent an unnecessary load, API requests should be throttled when made maliciously or due to an
13
- error.
14
-
15
- ## Context
16
-
17
- 1. The [API Gateway](https://microservices.io/patterns/apigateway.html) of a distributed system runs
18
- in multiple instances, each with an in-memory state that does not allow tracking the current
19
- quota usage.
20
- 2. Precise quota enforcement (per request, per second) is not critical; the goal is to prevent
21
- significant overuse.
22
- 3. Quota configuration is static.
23
-
24
- ## Forces
25
-
26
- 1. No per request IO is allowed (centralized solutions do not fit).
27
- 2. In a distributed system, there is no concept of a _global current time_.
28
- 3. Failure to retrieve the quota state should not result in Gateway failure.
29
-
30
- ## Solution
31
-
32
- Implement in-memory quotas in each process, periodically synchronizing them asynchronously using
33
- Redis.
34
-
35
- Consider a basic throttling rule:
36
-
37
- 1. No more than `MAX_REQUESTS` within `INTERVAL` time for any API route (`KEY`).
38
- 2. If the limit is exceeded, block requests to `KEY` for `COOLDOWN` seconds.
39
-
40
- ### Concept
41
-
42
- 1. Divide `INTERVAL` into `N` spans (`N >= 2`).
43
- 2. At the end of each span,
44
- atomically increment the value in Redis ([INCRBY](https://redis.io/docs/latest/commands/incrby/))
45
- by the number of requests received for each `KEY`, using a key composed of the `KEY` and the
46
- current ordinal number of `INTERVAL`
47
- in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time).
48
- 3. If the returned value exceeds `MAX_REQUESTS`, block access to `KEY`, remove after `COOLDOWN`.
49
- 4. If the write operation fails and `REQUESTS > MAX_REQUESTS / N` (i.e., the quota is exceeded
50
- locally), block access to `KEY`, remove after `COOLDOWN`.
51
-
52
- Each API Gateway instance will generate the `KEY` based on its own local time,
53
- which, in general, will lead to simultaneous writes (from Redis’s local time perspective) to
54
- different `KEY`s. However, the total contribution of each node to each `KEY` will correspond to the
55
- actual request rate experienced by that node.
56
-
57
- <img src="desync.jpg" alt="Desynchronization" />
58
-
59
- Dividing the `INTERVAL` into spans smooths the desynchronization effect.
60
-
61
- ### Extension
62
-
63
- Introduce `nodes`, the approximate number of active API Gateway instances, to improve the algorithm.
64
-
65
- 1. Initially, `nodes` equals to `1`.
66
- 2. During each `INTERVAL`, sum the total request count for each `KEY`, keep current and previous
67
- values.
68
- 3. At the end of each interval:
69
-
70
- - Read the value from the `KEY` for the previous interval. At this point, it is assumed that all
71
- nodes have switched to the next interval.
72
- - Update the `nodes` value by dividing response form Redis by the number of `REQUESTS` counted for
73
- the previous interval.
74
- - Set the previous value to the current value.
75
- - Set the current value to `0`
76
-
77
- 4. Update point 4 of the [Concept](#concept): `REQUESTS * nodes > MAX_REQUESTS / N`.
78
- This will increase the precision of the local quota enforcement.
79
- 5. Add a new step: if `REQUESTS * nodes > MAX_REQUESTS`, block access to `KEY`, remove after
80
- `COOLDOWN`.
81
-
82
- When nodes are added or removed, the algorithm will adapt in the upcoming intervals.
83
-
84
- ### Caveats
85
-
86
- 1. In the worst case scenario (really, really unlikely), the quota is exceeded by `MAX_REQUESTS / N`
87
- in a span on each node.
88
- 2. Time desynchronization between nodes should be insignificant for the selected `INTERVAL` (i.e.,
89
- `INTERVAL` >> desync). See Extension point 3.
90
-
91
- ## What was implemented instead
92
-
93
- Windows were dropped for a GCRA. A key holds one theoretical arrival time: the moment it would be
94
- back at zero if nothing more arrived. An admitted request pushes it `interval / requests`
95
- milliseconds further out, time drags it back, and a request is admitted while it stays within
96
- `interval` of now. So `requests` is what a key may spend at once and `requests / interval` the rate
97
- it earns back, with no window edge to burst across and no lockout to time out of — which is why
98
- `cooldown` is gone.
99
-
100
- Deciding reads nothing but a local map, so the request path stays free of I/O, exactly as force 1
101
- demands. What the other gateways have spent arrives on a timer, as **debt**: the milliseconds a key
102
- owes, draining at a millisecond a millisecond. Debt is the right thing to send for two reasons.
103
-
104
- 1. It is a duration, not a moment, so processes exchanging it need not agree on the time — force 2,
105
- answered by not needing an answer. The one clock that matters is Redis', read inside the script.
106
- 2. It is additive in admissions, so a process reports only its own increments and Redis keeps the
107
- running total. Nothing has to be divided by a number of nodes, which is as well: the gateway
108
- cannot observe how many of it there are.
109
-
110
- The consequences worth knowing:
111
-
112
- - **Reconciling is decoupled from `interval`.** The timer runs at a tenth of `interval`, clamped
113
- between 250ms and 2s, so a minute-long budget is no staler than a second-long one. The overshoot
114
- is bounded by what the other instances admit within one tick — the caveat that replaces the old
115
- note's `MAX_REQUESTS / N` per span.
116
- - **The cost is one round trip a tick**, not one per key. Every quota in the process flushes into a
117
- single script call, which matters because a limiter keyed on `ip` watches as many keys as it has
118
- clients.
119
- - **Redis keys expire on their own**, after the debt on them plus a grace, so nothing sweeps them.
120
- - **Failure degrades, as force 3 demands.** A tick that cannot reach Redis leaves its debt to the
121
- next one rather than losing it; until then the instance throttles on what it alone has seen, and
122
- keeps serving.
@@ -1,180 +0,0 @@
1
- # OAuth 2.1 Authorization Server
2
-
3
- An application exposes an authorization server by annotating one, and none without it. A client
4
- authorized this way holds a token of the identity that consented, and presents it as `Bearer`.
5
-
6
- ## Annotation
7
-
8
- ```yaml
9
- exposition:
10
- authorities:
11
- local: api.example.com
12
- oauth:
13
- authorize: https://app.example.com/oauth/authorize
14
- resources: ['/.mcp']
15
- scopes: [app:notes, app:notes:read]
16
- registration: closed
17
- ```
18
-
19
- <dl>
20
- <dt><code>authorize</code></dt>
21
- <dd>Required. The absolute URL of the consent page. The application serves it; see
22
- <a href="consent.md">Consent</a>.</dd>
23
- <dt><code>resources</code></dt>
24
- <dd>Paths advertised as protected resources, each with a document of its own and named by the
25
- challenge a request to it is refused with. <code>/.mcp</code> is where
26
- <a href="mcp.md">MCP</a> is served. A token is not yet bound to one, see
27
- <a href="#audience">Audience</a>.</dd>
28
- <dt><code>scopes</code></dt>
29
- <dd>Advertised as what a client may ask for. Each is a <a href="access.md#roles">role</a>, or a
30
- scope within one.</dd>
31
- <dt><code>registration</code></dt>
32
- <dd><code>open</code> advertises the registration endpoint, <code>closed</code> does not.
33
- Defaults to <code>closed</code>.</dd>
34
- </dl>
35
-
36
- The issuer is the authority's configured host, over `https` unless the host is a loopback one.
37
-
38
- ## Discovery
39
-
40
- Two documents are served, at the paths their specifications fix, to anyone.
41
-
42
- `/.well-known/oauth-authorization-server` is
43
- [RFC 8414](https://www.rfc-editor.org/rfc/rfc8414) metadata:
44
-
45
- ```yaml
46
- issuer: https://api.example.com
47
- authorization_endpoint: https://app.example.com/oauth/authorize
48
- token_endpoint: https://api.example.com/identity/grants/
49
- registration_endpoint: https://api.example.com/identity/clients/
50
- response_types_supported: [code]
51
- grant_types_supported: [authorization_code]
52
- code_challenge_methods_supported: [S256]
53
- token_endpoint_auth_methods_supported: [none]
54
- client_id_metadata_document_supported: true
55
- authorization_response_iss_parameter_supported: true
56
- ```
57
-
58
- `/.well-known/oauth-protected-resource` is
59
- [RFC 9728](https://www.rfc-editor.org/rfc/rfc9728) metadata. Each configured resource has one of
60
- its own, at the path the well-known segment is followed by: `/.mcp` is read at
61
- `/.well-known/oauth-protected-resource/.mcp`.
62
-
63
- ```yaml
64
- resource: https://api.example.com/.mcp
65
- authorization_servers: [https://api.example.com]
66
- bearer_methods_supported: [header]
67
- ```
68
-
69
- `/.well-known/openid-configuration` answers with the authorization server metadata, for a client
70
- that reads only that.
71
-
72
- A reply of `401` carries the challenge that names the document:
73
-
74
- ```http
75
- 401 Unauthorized
76
- www-authenticate: Bearer resource_metadata="https://api.example.com/.well-known/oauth-protected-resource/.mcp", scope="app:notes"
77
- ```
78
-
79
- ## Clients
80
-
81
- A `client_id` that is an `https` URL is a
82
- [Client ID Metadata Document](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-00):
83
- the client publishes what it is at that URL, and the document is read from there. Only origins
84
- `identity.clients` is configured to trust are read, and an empty list reads none:
85
-
86
- ```yaml
87
- configuration:
88
- identity.clients:
89
- trust:
90
- - https://claude.ai
91
- ```
92
-
93
- Anything else was registered through
94
- [RFC 7591](https://www.rfc-editor.org/rfc/rfc7591), which `registration: open` advertises:
95
-
96
- ```http
97
- POST /identity/clients/ HTTP/1.1
98
- content-type: application/json
99
-
100
- {"client_name": "Claude", "redirect_uris": ["https://claude.ai/api/mcp/auth_callback"]}
101
- ```
102
-
103
- ```http
104
- 201 Created
105
-
106
- {"client_id": "c8f3a1e4d8c9b2f6a0e5d7c3b1a9f8e2", "client_name": "Claude", …}
107
- ```
108
-
109
- A registration is addressed by a hash of what it says, so the same metadata is one client however
110
- many times it arrives. A registration cannot be changed: a revision is a different client.
111
-
112
- Only public clients are supported. `token_endpoint_auth_method` other than `none` is refused.
113
-
114
- `redirect_uris` are matched exactly, except for a loopback address, where the port is ignored
115
- ([RFC 8252 §7.3](https://datatracker.ietf.org/doc/html/rfc8252#section-7.3)).
116
-
117
- `GET /identity/clients/:id/` returns a client to any authenticated identity, which is what the
118
- consent page reads.
119
-
120
- ## Token endpoint
121
-
122
- `POST /identity/grants/`, anonymous, `application/x-www-form-urlencoded`.
123
-
124
- ```http
125
- POST /identity/grants/ HTTP/1.1
126
- content-type: application/x-www-form-urlencoded
127
-
128
- grant_type=authorization_code&code=SplxlO&code_verifier=dBjftJeZ&redirect_uri=…&client_id=…
129
- ```
130
-
131
- ```http
132
- 200 OK
133
- cache-control: no-store
134
-
135
- {"access_token": "…", "token_type": "Bearer", "expires_in": 2592000}
136
- ```
137
-
138
- `code_verifier` is required: the code was issued against its `S256` hash
139
- ([RFC 7636](https://www.rfc-editor.org/rfc/rfc7636)). A code may be redeemed once, and is spent
140
- whether or not the verifier matches. Every refusal is `invalid_grant`.
141
-
142
- A code is valid for `identity.grants.lifetime` seconds, 60 by default. A token is valid for
143
- `identity.grants.token` seconds, 30 days by default; `0` is until it is revoked.
144
-
145
- ## Grants
146
-
147
- A grant is what a user allowed a client. One is held per identity per client.
148
-
149
- `GET /identity/grants/:identity/` lists them. `DELETE /identity/grants/:identity/:id/` revokes one,
150
- which disables the key its token was issued under: the token stops being one within
151
- `identity.tokens.cache.ttl`.
152
-
153
- ## Tokens
154
-
155
- An access token is a token of the identity that consented, carrying the
156
- [roles](access.md#roles) that identity holds, or the subset the client asked for as `scope`. It is
157
- presented as `Bearer`, which `identity.federation` also answers to — see
158
- [Bearer scheme](identity.md#bearer-scheme).
159
-
160
- A `scope` a client asks for is not checked against `scopes_supported`: it is granted if the
161
- consenting identity holds it, and refused as `invalid_scope` otherwise. What is advertised says
162
- what an application means to offer, not what the server will refuse.
163
-
164
- ## Audience
165
-
166
- `resource` ([RFC 8707](https://www.rfc-editor.org/rfc/rfc8707)) is accepted at both endpoints and
167
- recorded on the grant. **It does not yet restrict the token.** An access token carries the rights
168
- of the identity that consented, over every path that identity may reach, whichever resource it was
169
- asked for.
170
-
171
- Restricting it is a `permissions` argument at the `identity.tokens.issue` call in
172
- `identity.grants.exchange` — `{'/.mcp': ['*']}` for a resource at `/.mcp` — enforced by
173
- `permits()`, which is already what reads a token's permissions on every request. It waits on the
174
- resource that will check the audience itself.
175
-
176
- ## References
177
-
178
- - [OAuth 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1)
179
- - [Consent](consent.md), the page an application serves
180
- - [Features](../features/oauth.grants.feature)
@@ -1,334 +0,0 @@
1
- # BLOBs
2
-
3
- The `octets` directive family implements operations with BLOBs, using
4
- the [Storages extention](/extensions/storages).
5
- The most common use case is to handle file uploads, downloads, and processing.
6
-
7
- ## `octets:context`
8
-
9
- Sets the [storage name](/extensions/storages/readme.md#annotation) to be used for the `octets`
10
- directives under the current RTD Node.
11
-
12
- ```yaml
13
- /images:
14
- octets:context: images
15
- ```
16
-
17
- ## `octets:put`
18
-
19
- Stores the content of the request body into a storage, under the request path with
20
- specified `content-type`.
21
-
22
- If request's `content-type` is not acceptable, or if the request body does not pass
23
- the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-options-options-maybeentry),
24
- the request is rejected with a `415 Unsupported Media Type` response.
25
-
26
- The value of the directive must be `null` (defaults) or an object with the following optional
27
- properties:
28
-
29
- - `location`: a string that represents the path to store the
30
- content.
31
- If not specified, the path is the same as the request path.
32
- - `limit`: [maximum size](#stream-size-limit) of the incoming stream.
33
- - `accept`: a media type or an array of media types that are acceptable.
34
- If the `accept` property is not specified, any media type is acceptable (which is the default).
35
- - `workflow`: [workflow](#workflows) to be executed once the content is successfully stored.
36
- - `trust`: a list of [trusted origins](#downloading-external-content).
37
-
38
- ```yaml
39
- /images:
40
- octets:context: images
41
- POST:
42
- octets:put:
43
- accept:
44
- - image/jpeg
45
- - image/png
46
- - video/*
47
- workflow:
48
- resize: images.resize
49
- analyze: images.analyze
50
- ```
51
-
52
- ### Headers
53
-
54
- `content-id` header can be used to set the ID of the Entry.
55
- The value must match the following regular expression `^[a-zA-Z0-9-_]{1,16}$`.
56
-
57
- Non-standard `content-attributes` header can be used
58
- to set initial [metadata](/extensions/storages/readme.md#entry) value for the Entry.
59
-
60
- The value of the `content-attributes` header is a comma-separated list of key-value string pairs.
61
- If no value is provided for a key, the string `true` is used.
62
-
63
- ```http
64
- POST /images/ HTTP/1.1
65
- content-type: image/jpeg
66
- content-id: example-id
67
- content-attributes: foo, bar=baz
68
- content-attributes: baz=1
69
- ```
70
-
71
- ```yaml
72
- attributes:
73
- foo: 'true'
74
- bar: 'baz'
75
- baz: '1'
76
- ```
77
-
78
- If the Entry already exists, the `content-attributes` header is ignored.
79
-
80
- ### Location
81
-
82
- The `location` property can be used to store the content under a different path.
83
-
84
- ```yaml
85
- /images:
86
- octets:context: images
87
- POST:
88
- octets:put:
89
- location: /archive
90
- ```
91
-
92
- Physical storage path is constructed by resolving the `location`
93
- property [relative](https://datatracker.ietf.org/doc/html/rfc3986#section-5) to the request path.
94
-
95
- ### Stream size limit
96
-
97
- The `limit` property can be used to set the maximum size of the incoming stream in bytes.
98
-
99
- The property value can be specified as a number
100
- (representing bytes) or a string that combines a number with a unit (e.g., `1MB`).
101
- Both [binary and decimal prefixes](https://en.wikipedia.org/wiki/Binary_prefix) are supported.
102
- If the prefix or unit is specified _incorrectly_ (e.g., `1mb`),
103
- it will default to a binary prefix interpretation.
104
-
105
- - `1b`, `1B`: 1 byte
106
- - `1KB`: 1000 bytes
107
- - `1KiB`: 1024 bytes
108
- - `1kb`: 1024 bytes
109
-
110
- The default value is `64MiB`.
111
-
112
- ### Downloading external content
113
-
114
- The `octets:put` directive can be used to download external content:
115
-
116
- ```http
117
- POST /images/ HTTP/1.1
118
- content-location: https://example.com/image.jpg
119
- content-length: 0
120
- ```
121
-
122
- Requests with `content-location` header must have an empty body (`content-length: 0` header).
123
-
124
- Target origin must be allowed by the `trust` property,
125
- which can contain a list of trusted origins or regular expressions to match the full URL.
126
-
127
- URL of the downloaded content is stored in the `origin` property of
128
- the [Entry](/extensions/storages/readme.md#entry).
129
-
130
- ```yaml
131
- /images:
132
- octets:context: images
133
- POST:
134
- octets:put:
135
- trust:
136
- - https://example.com
137
- - ^https://example\.com/[a-z]+\.jpe?g$
138
- ```
139
-
140
- ### Response
141
-
142
- The response of the `octets:put` directive is the created Entry.
143
-
144
- ```
145
- 201 Created
146
- content-type: application/yaml
147
-
148
- id: eecd837c
149
- type: image/jpeg
150
- created: 1698004822358
151
- ```
152
-
153
- If the `octets:put` directive contains a `workflow`, the response
154
- is [multipart](protocol.md#multipart-types).
155
- The first part represents the created Entry, which is sent immediately after the BLOB is stored,
156
- while subsequent parts are results from the workflow endpoints, sent as soon as they are available.
157
-
158
- In case a workflow endpoint returns an `Error`, the error part is sent,
159
- and the response is closed.
160
- Error's properties are added to the error part, among with the `step` identifier.
161
-
162
- ```
163
- 201 Created
164
- content-type: multipart/yaml; boundary=cut
165
-
166
- --cut
167
-
168
- id: eecd837c
169
- type: image/jpeg
170
- created: 1698004822358
171
-
172
- --cut
173
-
174
- step: optimize
175
- status: completed
176
-
177
- --cut
178
-
179
- step: resize
180
- error:
181
- code: TOO_SMALL
182
- message: Image is too small
183
- status: completed
184
-
185
- --cut
186
-
187
- step: analyze
188
- status: exception
189
-
190
- --cut--
191
- ```
192
-
193
- ### What a client is told
194
-
195
- `octets:put` says what sending a file takes, where everything else about a method is said —
196
- [`OPTIONS`](introspection.md) and the [tree](discovery.md):
197
-
198
- ```yaml
199
- POST:
200
- octets:
201
- accept: image/jpeg,image/png
202
- limit: 64MiB
203
- stream: true
204
- ```
205
-
206
- `accept` is absent where the directive names no type, and anything may be sent. `limit` is
207
- written as the declaration writes it, and is what a `413` reports. `stream` says a workflow runs
208
- on what was stored, so the reply arrives as parts rather than as one object — the first part is
209
- the entry.
210
-
211
- Reading a file and deleting one say nothing: those requests are what they look like.
212
-
213
- ## `octets:get`
214
-
215
- Fetches the content of a stored BLOB corresponding to the request path, and returns it as the
216
- response body with the corresponding `content-type`, `content-length`
217
- and `etag` ([conditional GET](https://datatracker.ietf.org/doc/html/rfc2616#section-9.3) is
218
- also supported).
219
- The `accept` request header is disregarded.
220
-
221
- The value of the directive is an object with the following properties:
222
-
223
- - `meta`: `boolean` indicating whether an Entry is accessible.
224
- Defaults to `false`.
225
-
226
- ```yaml
227
- /images:
228
- octets:context: images
229
- /*:
230
- GET:
231
- octets:get:
232
- blob: false # prevent access to the original BLOB
233
- meta: true # allow access to an Entry
234
- ```
235
-
236
- The `octets:get: ~` declaration is equivalent to defaults.
237
-
238
- To access an Entry, the `accept` request header must contain the `octets.entry` subtype
239
- in
240
- the `toa` [vendor tree](https://datatracker.ietf.org/doc/html/rfc6838#section-3.2):
241
-
242
- ```http
243
- GET /images/eecd837c HTTP/1.1
244
- accept: application/vnd.toa.octets.entry+yaml
245
- ```
246
-
247
- ## `octets:delete`
248
-
249
- Delete the entry corresponding to the request path.
250
-
251
- ```yaml
252
- /images:
253
- octets:context: images
254
- DELETE:
255
- octets:delete: ~
256
- ```
257
-
258
- The value of the directive may contain a [workflow](#workflows) declaration, to be executed before
259
- the entry is deleted.
260
-
261
- ```yaml
262
- /images:
263
- octets:context: images
264
- DELETE:
265
- octets:delete:
266
- workflow:
267
- cleanup: images.cleanup
268
- ```
269
-
270
- The error returned by the workflow prevents the deletion of the entry.
271
-
272
- ## `octets:workflow`
273
-
274
- Execute a [workflow](#workflows) on the entry under the request path.
275
-
276
- ```yaml
277
- /images:
278
- /*:
279
- DELETE:
280
- octets:workflow:
281
- archive: images.archive
282
- ```
283
-
284
- ## Workflows
285
-
286
- A workflow is a list of endpoints to be called.
287
- The following input will be passed to each endpoint:
288
-
289
- ```yaml
290
- authority: string
291
- storage: string
292
- path: string
293
- entry: Entry
294
- parameters: Record<string, string> # route parameters
295
- ```
296
-
297
- - [Storages](/extensions/storages/readme.md)
298
- - [Authorities](authorities.md)
299
- - Example [workflow step processor](../features/steps/components/octets.tester)
300
-
301
- A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
302
- as value.
303
- Steps within a workflow unit are executed in parallel.
304
-
305
- ```yaml
306
- octets:put:
307
- workflow:
308
- resize: images.resize
309
- analyze: images.analyze
310
- ```
311
-
312
- A workflow can be a single unit, or an array of units.
313
- If it's an array, the workflow units are executed in sequence.
314
-
315
- ```yaml
316
- octets:put:
317
- workflow:
318
- - optimize: images.optimize # executed first
319
- - resize: images.resize # executed second
320
- analyze: images.analyze # executed in parallel with `resize`
321
- ```
322
-
323
- If one of the workflow units returns or throws an error,
324
- the execution of the workflow is interrupted.
325
-
326
- ### Workflow tasks
327
-
328
- A workflow unit which value starts with `task:` prefix will be executed as a Task.
329
-
330
- ```yaml
331
- octets:put:
332
- workflow:
333
- optimize: task:images.optimize
334
- ```
@@ -1,11 +0,0 @@
1
- # Web Authentication
2
-
3
- - [Standard](https://www.w3.org/TR/webauthn-2/)
4
- - [Features](../features/passkeys.feature)
5
- - [Credential management](credentials.md#passkeys)
6
-
7
- ## Origin
8
-
9
- The relying party is the client. The origin a passkey is registered under, and the RP ID derived
10
- from it, come from the request, so a passkey belongs to the origin of the client that registered
11
- it, and a client on another origin does not see it.