@toa.io/extensions.exposition 1.0.0-alpha.22 → 1.0.0-alpha.220

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 (820) hide show
  1. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -1
  2. package/components/identity.basic/manifest.toa.yaml +71 -11
  3. package/components/identity.basic/operations/add.d.ts +3 -0
  4. package/components/identity.basic/operations/add.js +16 -0
  5. package/components/identity.basic/operations/add.js.map +1 -0
  6. package/components/identity.basic/operations/authenticate.js +7 -4
  7. package/components/identity.basic/operations/authenticate.js.map +1 -1
  8. package/components/identity.basic/operations/check.d.ts +7 -0
  9. package/components/identity.basic/operations/check.js +15 -0
  10. package/components/identity.basic/operations/check.js.map +1 -0
  11. package/components/identity.basic/operations/incept.d.ts +3 -2
  12. package/components/identity.basic/operations/incept.js +16 -3
  13. package/components/identity.basic/operations/incept.js.map +1 -1
  14. package/components/identity.basic/operations/transit.d.ts +2 -2
  15. package/components/identity.basic/operations/transit.js +9 -6
  16. package/components/identity.basic/operations/transit.js.map +1 -1
  17. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  18. package/components/identity.basic/operations/types.d.ts +14 -6
  19. package/components/identity.basic/source/add.ts +14 -0
  20. package/components/identity.basic/source/authenticate.ts +8 -4
  21. package/components/identity.basic/source/check.ts +20 -0
  22. package/components/identity.basic/source/incept.ts +21 -5
  23. package/components/identity.basic/source/transit.ts +12 -10
  24. package/components/identity.basic/source/types.ts +15 -6
  25. package/components/identity.federation/manifest.toa.yaml +63 -38
  26. package/components/identity.federation/operations/authenticate.d.ts +16 -3
  27. package/components/identity.federation/operations/authenticate.js +25 -16
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/decode.d.ts +3 -0
  30. package/components/identity.federation/operations/decode.js +12 -0
  31. package/components/identity.federation/operations/decode.js.map +1 -0
  32. package/components/identity.federation/operations/incept.d.ts +5 -5
  33. package/components/identity.federation/operations/incept.js +13 -5
  34. package/components/identity.federation/operations/incept.js.map +1 -1
  35. package/components/identity.federation/operations/lib/Configuration.d.ts +39 -0
  36. package/components/identity.federation/operations/lib/Configuration.js +3 -0
  37. package/components/identity.federation/operations/lib/Configuration.js.map +1 -0
  38. package/components/identity.federation/operations/lib/Ctx.d.ts +6 -0
  39. package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/lib/Ctx.js} +1 -1
  40. package/components/identity.federation/operations/lib/Ctx.js.map +1 -0
  41. package/components/identity.federation/operations/lib/Payload.d.ts +5 -0
  42. package/components/identity.federation/operations/lib/Payload.js +3 -0
  43. package/components/identity.federation/operations/lib/Payload.js.map +1 -0
  44. package/components/identity.federation/operations/lib/decode.d.ts +3 -0
  45. package/components/identity.federation/operations/lib/{assertions-as-values.js → decode.js} +19 -19
  46. package/components/identity.federation/operations/lib/decode.js.map +1 -0
  47. package/components/identity.federation/operations/lib/discovery.d.ts +4 -0
  48. package/components/identity.federation/operations/lib/discovery.js +49 -0
  49. package/components/identity.federation/operations/lib/discovery.js.map +1 -0
  50. package/components/identity.federation/operations/lib/errors.d.ts +11 -0
  51. package/components/identity.federation/operations/lib/errors.js +15 -0
  52. package/components/identity.federation/operations/lib/errors.js.map +1 -0
  53. package/components/identity.federation/operations/lib/exchange.d.ts +3 -0
  54. package/components/identity.federation/operations/lib/exchange.js +107 -0
  55. package/components/identity.federation/operations/lib/exchange.js.map +1 -0
  56. package/components/identity.federation/operations/lib/index.d.ts +3 -0
  57. package/components/identity.federation/operations/lib/index.js +8 -0
  58. package/components/identity.federation/operations/lib/index.js.map +1 -0
  59. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  60. package/components/identity.federation/operations/types/Scheme.d.ts +1 -0
  61. package/components/identity.federation/operations/types/Scheme.js +3 -0
  62. package/components/identity.federation/operations/types/Scheme.js.map +1 -0
  63. package/components/identity.federation/operations/types/configuration.d.ts +20 -0
  64. package/components/identity.federation/operations/types/configuration.js +3 -0
  65. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  66. package/components/identity.federation/operations/types/context.d.ts +36 -0
  67. package/components/identity.federation/operations/types/context.js +3 -0
  68. package/components/identity.federation/operations/types/context.js.map +1 -0
  69. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  70. package/components/identity.federation/operations/types/entity.js +3 -0
  71. package/components/identity.federation/operations/types/entity.js.map +1 -0
  72. package/components/identity.federation/operations/types/index.d.ts +4 -0
  73. package/components/identity.federation/operations/types/index.js +21 -0
  74. package/components/identity.federation/operations/types/index.js.map +1 -0
  75. package/components/identity.federation/source/authenticate.ts +43 -21
  76. package/components/identity.federation/source/decode.ts +10 -0
  77. package/components/identity.federation/source/incept.ts +20 -11
  78. package/components/identity.federation/source/lib/Configuration.ts +39 -0
  79. package/components/identity.federation/source/lib/Ctx.ts +7 -0
  80. package/components/identity.federation/source/lib/Payload.ts +6 -0
  81. package/components/identity.federation/source/lib/decode.ts +28 -0
  82. package/components/identity.federation/source/lib/discovery.ts +30 -0
  83. package/components/identity.federation/source/lib/errors.ts +12 -0
  84. package/components/identity.federation/source/lib/exchange.ts +116 -0
  85. package/components/identity.federation/source/lib/index.ts +3 -0
  86. package/components/identity.federation/source/types/Scheme.ts +1 -0
  87. package/components/identity.federation/source/types/configuration.ts +21 -0
  88. package/components/identity.federation/source/types/context.ts +40 -0
  89. package/components/identity.federation/source/types/entity.ts +6 -0
  90. package/components/identity.federation/source/types/index.ts +4 -0
  91. package/components/identity.federation/tsconfig.json +5 -4
  92. package/components/identity.keys/manifest.toa.yaml +57 -0
  93. package/components/identity.keys/operations/create.d.ts +22 -0
  94. package/components/identity.keys/operations/create.js +16 -0
  95. package/components/identity.keys/operations/create.js.map +1 -0
  96. package/components/identity.keys/operations/tsconfig.tsbuildinfo +1 -0
  97. package/components/identity.keys/source/create.ts +35 -0
  98. package/components/identity.keys/tsconfig.json +9 -0
  99. package/components/identity.otp/manifest.toa.yaml +69 -0
  100. package/components/identity.otp/operations/authenticate.d.ts +12 -0
  101. package/components/identity.otp/operations/authenticate.js +31 -0
  102. package/components/identity.otp/operations/authenticate.js.map +1 -0
  103. package/components/identity.otp/operations/issue.d.ts +12 -0
  104. package/components/identity.otp/operations/issue.js +22 -0
  105. package/components/identity.otp/operations/issue.js.map +1 -0
  106. package/components/identity.otp/operations/lib/Context.d.ts +13 -0
  107. package/components/identity.otp/operations/lib/Context.js +3 -0
  108. package/components/identity.otp/operations/lib/Context.js.map +1 -0
  109. package/components/identity.otp/operations/lib/Entity.d.ts +6 -0
  110. package/components/identity.otp/operations/lib/Entity.js +3 -0
  111. package/components/identity.otp/operations/lib/Entity.js.map +1 -0
  112. package/components/identity.otp/operations/lib/index.d.ts +1 -0
  113. package/components/identity.otp/operations/lib/index.js +3 -0
  114. package/components/identity.otp/operations/lib/index.js.map +1 -0
  115. package/components/identity.otp/operations/tsconfig.tsbuildinfo +1 -0
  116. package/components/identity.otp/source/authenticate.ts +48 -0
  117. package/components/identity.otp/source/issue.ts +34 -0
  118. package/components/identity.otp/source/lib/Context.ts +14 -0
  119. package/components/identity.otp/source/lib/Entity.ts +6 -0
  120. package/components/identity.otp/source/lib/index.ts +1 -0
  121. package/components/identity.otp/tsconfig.json +9 -0
  122. package/components/identity.passkeys/manifest.toa.yaml +276 -0
  123. package/components/identity.passkeys/operations/authenticate.d.ts +16 -0
  124. package/components/identity.passkeys/operations/authenticate.js +34 -0
  125. package/components/identity.passkeys/operations/authenticate.js.map +1 -0
  126. package/components/identity.passkeys/operations/challenge.d.ts +35 -0
  127. package/components/identity.passkeys/operations/challenge.js +73 -0
  128. package/components/identity.passkeys/operations/challenge.js.map +1 -0
  129. package/components/identity.passkeys/operations/create.d.ts +19 -0
  130. package/components/identity.passkeys/operations/create.js +58 -0
  131. package/components/identity.passkeys/operations/create.js.map +1 -0
  132. package/components/identity.passkeys/operations/delete.d.ts +8 -0
  133. package/components/identity.passkeys/operations/delete.js +12 -0
  134. package/components/identity.passkeys/operations/delete.js.map +1 -0
  135. package/components/identity.passkeys/operations/lib/const.d.ts +1 -0
  136. package/components/identity.passkeys/operations/lib/const.js +5 -0
  137. package/components/identity.passkeys/operations/lib/const.js.map +1 -0
  138. package/components/identity.passkeys/operations/list.d.ts +7 -0
  139. package/components/identity.passkeys/operations/list.js +15 -0
  140. package/components/identity.passkeys/operations/list.js.map +1 -0
  141. package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -0
  142. package/components/identity.passkeys/operations/types/Configuration.d.ts +6 -0
  143. package/components/identity.passkeys/operations/types/Configuration.js +3 -0
  144. package/components/identity.passkeys/operations/types/Configuration.js.map +1 -0
  145. package/components/identity.passkeys/operations/types/Context.d.ts +15 -0
  146. package/components/identity.passkeys/operations/types/Context.js +3 -0
  147. package/components/identity.passkeys/operations/types/Context.js.map +1 -0
  148. package/components/identity.passkeys/operations/types/Passkey.d.ts +13 -0
  149. package/components/identity.passkeys/operations/types/Passkey.js +3 -0
  150. package/components/identity.passkeys/operations/types/Passkey.js.map +1 -0
  151. package/components/identity.passkeys/operations/types/index.d.ts +2 -0
  152. package/components/identity.passkeys/operations/types/index.js +3 -0
  153. package/components/identity.passkeys/operations/types/index.js.map +1 -0
  154. package/components/identity.passkeys/operations/use.d.ts +16 -0
  155. package/components/identity.passkeys/operations/use.js +57 -0
  156. package/components/identity.passkeys/operations/use.js.map +1 -0
  157. package/components/identity.passkeys/source/authenticate.ts +48 -0
  158. package/components/identity.passkeys/source/challenge.ts +115 -0
  159. package/components/identity.passkeys/source/create.ts +77 -0
  160. package/components/identity.passkeys/source/delete.ts +15 -0
  161. package/components/identity.passkeys/source/lib/const.ts +1 -0
  162. package/components/identity.passkeys/source/list.ts +17 -0
  163. package/components/identity.passkeys/source/types/Configuration.ts +6 -0
  164. package/components/identity.passkeys/source/types/Context.ts +16 -0
  165. package/components/identity.passkeys/source/types/Passkey.ts +14 -0
  166. package/components/identity.passkeys/source/types/index.ts +2 -0
  167. package/components/identity.passkeys/source/use.ts +75 -0
  168. package/components/identity.passkeys/tsconfig.json +9 -0
  169. package/components/identity.roles/manifest.toa.yaml +4 -2
  170. package/components/identity.roles/operations/grant.js +2 -2
  171. package/components/identity.roles/operations/grant.js.map +1 -1
  172. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  173. package/components/identity.roles/source/grant.ts +2 -2
  174. package/components/identity.tokens/manifest.toa.yaml +93 -13
  175. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  176. package/components/identity.tokens/operations/authenticate.js +13 -12
  177. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  178. package/components/identity.tokens/operations/decrypt.d.ts +13 -3
  179. package/components/identity.tokens/operations/decrypt.js +65 -18
  180. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  181. package/components/identity.tokens/operations/encrypt.d.ts +3 -3
  182. package/components/identity.tokens/operations/encrypt.js +24 -8
  183. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  184. package/components/identity.tokens/operations/issue.d.ts +24 -0
  185. package/components/identity.tokens/operations/issue.js +59 -0
  186. package/components/identity.tokens/operations/issue.js.map +1 -0
  187. package/components/identity.tokens/operations/lib/index.d.ts +2 -0
  188. package/components/identity.tokens/operations/lib/index.js +19 -0
  189. package/components/identity.tokens/operations/lib/index.js.map +1 -0
  190. package/components/identity.tokens/operations/lib/pad.d.ts +1 -0
  191. package/components/identity.tokens/operations/lib/pad.js +5 -0
  192. package/components/identity.tokens/operations/lib/pad.js.map +1 -0
  193. package/components/identity.tokens/operations/lib/types.d.ts +75 -0
  194. package/components/identity.tokens/operations/lib/types.js.map +1 -0
  195. package/components/identity.tokens/operations/revoke.d.ts +2 -2
  196. package/components/identity.tokens/operations/revoke.js.map +1 -1
  197. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  198. package/components/identity.tokens/source/authenticate.test.ts +13 -7
  199. package/components/identity.tokens/source/authenticate.ts +15 -14
  200. package/components/identity.tokens/source/decrypt.test.ts +29 -16
  201. package/components/identity.tokens/source/decrypt.ts +94 -20
  202. package/components/identity.tokens/source/encrypt.test.ts +48 -13
  203. package/components/identity.tokens/source/encrypt.ts +36 -12
  204. package/components/identity.tokens/source/issue.ts +82 -0
  205. package/components/identity.tokens/source/lib/index.ts +2 -0
  206. package/components/identity.tokens/source/lib/pad.ts +1 -0
  207. package/components/identity.tokens/source/lib/paseto.test.ts +16 -0
  208. package/components/identity.tokens/source/{types.ts → lib/types.ts} +38 -7
  209. package/components/identity.tokens/source/revoke.ts +2 -2
  210. package/components/octets.storage/manifest.toa.yaml +13 -11
  211. package/components/octets.storage/operations/get.js +3 -3
  212. package/components/octets.storage/operations/head.js +7 -0
  213. package/components/octets.storage/operations/put.js +135 -0
  214. package/documentation/access.md +78 -27
  215. package/documentation/authorities.md +6 -11
  216. package/documentation/components.md +114 -39
  217. package/documentation/dev.md +30 -0
  218. package/documentation/flow.md +44 -0
  219. package/documentation/identity.md +115 -5
  220. package/documentation/introspection.md +82 -0
  221. package/documentation/io.md +42 -2
  222. package/documentation/map.md +115 -0
  223. package/documentation/notes/desync.jpg +0 -0
  224. package/documentation/notes/peers.md +59 -0
  225. package/documentation/notes/throttling.md +82 -0
  226. package/documentation/octets.md +122 -69
  227. package/documentation/passkeys.md +4 -0
  228. package/documentation/protocol.md +11 -4
  229. package/documentation/query.md +51 -4
  230. package/documentation/tree.md +13 -0
  231. package/features/access.feature +67 -2
  232. package/features/auth.assert.feature +57 -0
  233. package/features/auth.claims.feature +170 -0
  234. package/features/auth.incept.feature +120 -0
  235. package/features/auth.input.feature +59 -0
  236. package/features/auth.issue.feature +32 -0
  237. package/features/authorities.basic.feature +4 -3
  238. package/features/authorities.feature +3 -3
  239. package/features/authorities.federation.feature +20 -20
  240. package/features/authorities.tokens.feature +1 -2
  241. package/features/body.feature +27 -0
  242. package/features/cache.feature +92 -3
  243. package/features/cors.feature +28 -7
  244. package/features/debug.feature +34 -0
  245. package/features/dev.feature +87 -0
  246. package/features/dynamic.feature +44 -0
  247. package/features/errors.feature +17 -5
  248. package/features/etag.feature +134 -1
  249. package/features/flow.feature +148 -0
  250. package/features/identity.basic.feature +120 -6
  251. package/features/identity.feature +11 -4
  252. package/features/identity.federation.feature +122 -42
  253. package/features/identity.otp.feature +101 -0
  254. package/features/identity.roles.feature +52 -3
  255. package/features/identity.tokens.feature +1 -99
  256. package/features/identtiy.tokens.custom.feature +247 -0
  257. package/features/interruptions.feature +19 -0
  258. package/features/introspection.feature +153 -0
  259. package/features/io.feature +0 -1
  260. package/features/io.throttle.feature +40 -0
  261. package/features/map.feature +356 -0
  262. package/features/methods.feature +47 -0
  263. package/features/octets.cloudinary.feature +223 -0
  264. package/features/octets.download.feature +189 -0
  265. package/features/octets.entries.feature +8 -58
  266. package/features/octets.feature +54 -120
  267. package/features/octets.head.feature +40 -0
  268. package/features/octets.location.feature +83 -0
  269. package/features/octets.meta.feature +62 -15
  270. package/features/octets.workflows.feature +332 -67
  271. package/features/passkeys.feature +66 -0
  272. package/features/probes.feature +14 -0
  273. package/features/{queries.feature → query.feature} +134 -2
  274. package/features/realtime.feature +34 -0
  275. package/features/response.feature +29 -0
  276. package/features/routes.feature +86 -2
  277. package/features/server.feature +21 -0
  278. package/features/steps/.env.example +5 -0
  279. package/features/steps/Captures.ts +12 -0
  280. package/features/steps/Common.ts +4 -0
  281. package/features/steps/Gateway.ts +3 -1
  282. package/features/steps/HTTP.ts +27 -3
  283. package/features/steps/IDP.ts +334 -0
  284. package/features/steps/Identity.ts +51 -0
  285. package/features/steps/OTP.ts +39 -0
  286. package/features/steps/Parameters.ts +88 -2
  287. package/features/steps/Realtime.ts +151 -0
  288. package/features/steps/Workspace.ts +1 -2
  289. package/features/steps/components/echo/manifest.toa.yaml +17 -0
  290. package/features/steps/components/echo/operations/echo.js +7 -0
  291. package/features/steps/components/echo/operations/parameters.js +7 -0
  292. package/features/steps/components/echo/operations/ping.js +7 -0
  293. package/features/steps/components/echo/operations/unwrap.js +7 -0
  294. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  295. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  296. package/features/steps/components/greeter/manifest.toa.yaml +0 -1
  297. package/features/steps/components/octets.tester/manifest.toa.yaml +26 -3
  298. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  299. package/features/steps/components/octets.tester/operations/bar.js +0 -1
  300. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  301. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  302. package/features/steps/components/octets.tester/operations/foo.js +2 -2
  303. package/features/steps/components/octets.tester/operations/id.js +7 -0
  304. package/features/steps/components/octets.tester/operations/identity.js +7 -0
  305. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  306. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  307. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  308. package/features/steps/components/pots/manifest.toa.yaml +15 -4
  309. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  310. package/features/steps/components/users/manifest.toa.yaml +4 -2
  311. package/features/steps/components/users/operations/create.js +15 -0
  312. package/features/steps/components/users.properties/manifest.toa.yaml +0 -1
  313. package/features/streams.feature +4 -0
  314. package/features/timestamps.feature +41 -0
  315. package/features/timing.feature +1 -1
  316. package/package.json +34 -21
  317. package/schemas/annotation.cos.yaml +7 -0
  318. package/schemas/io/throttle.cos.yaml +36 -0
  319. package/schemas/method.cos.yaml +2 -1
  320. package/schemas/node.cos.yaml +2 -0
  321. package/schemas/octets/put.cos.yaml +28 -0
  322. package/schemas/query.cos.yaml +7 -10
  323. package/schemas/querystring.cos.yaml +1 -0
  324. package/source/Annotation.ts +3 -0
  325. package/source/Branch.ts +1 -0
  326. package/source/Composition.ts +0 -6
  327. package/source/Context.ts +1 -0
  328. package/source/Directive.test.ts +5 -3
  329. package/source/Directive.ts +30 -6
  330. package/source/Endpoint.ts +88 -23
  331. package/source/Factory.ts +15 -3
  332. package/source/Gateway.ts +76 -14
  333. package/source/HTTP/Context.ts +40 -8
  334. package/source/HTTP/Server.ts +161 -47
  335. package/source/HTTP/Timing.ts +1 -1
  336. package/source/HTTP/exceptions.ts +30 -12
  337. package/source/HTTP/formats/index.ts +4 -5
  338. package/source/HTTP/formats/json.ts +2 -4
  339. package/source/HTTP/formats/msgpack.ts +0 -1
  340. package/source/HTTP/formats/text.ts +2 -4
  341. package/source/HTTP/formats/yaml.ts +2 -3
  342. package/source/HTTP/messages.test.ts +70 -7
  343. package/source/HTTP/messages.ts +99 -19
  344. package/source/Introspection.ts +11 -0
  345. package/source/Mapping.ts +69 -21
  346. package/source/Query.test.ts +3 -3
  347. package/source/Query.ts +130 -33
  348. package/source/RTD/Context.ts +1 -1
  349. package/source/RTD/Directives.ts +4 -0
  350. package/source/RTD/Endpoint.ts +3 -0
  351. package/source/RTD/Method.ts +16 -0
  352. package/source/RTD/Node.ts +30 -15
  353. package/source/RTD/Route.ts +12 -5
  354. package/source/RTD/Tree.ts +7 -5
  355. package/source/RTD/factory.ts +4 -1
  356. package/source/RTD/segment.ts +2 -0
  357. package/source/RTD/syntax/parse.test.ts +1 -1
  358. package/source/RTD/syntax/parse.ts +37 -24
  359. package/source/RTD/syntax/types.ts +9 -4
  360. package/source/Remotes.ts +7 -6
  361. package/source/Tenant.ts +6 -12
  362. package/source/deployment.ts +14 -8
  363. package/source/directives/auth/Anonymous.ts +3 -3
  364. package/source/directives/auth/Anyone.ts +13 -0
  365. package/source/directives/auth/Assert.ts +35 -0
  366. package/source/directives/auth/Authorization.ts +58 -22
  367. package/source/directives/auth/Delegate.ts +9 -5
  368. package/source/directives/auth/Echo.ts +16 -6
  369. package/source/directives/auth/Federation.ts +84 -0
  370. package/source/directives/auth/Id.ts +1 -1
  371. package/source/directives/auth/Incept.ts +76 -24
  372. package/source/directives/auth/Input.ts +71 -0
  373. package/source/directives/auth/Role.test.ts +2 -3
  374. package/source/directives/auth/Role.ts +6 -11
  375. package/source/directives/auth/Rule.ts +3 -6
  376. package/source/directives/auth/Scheme.ts +5 -5
  377. package/source/directives/auth/create.ts +11 -0
  378. package/source/directives/auth/schemes.ts +5 -2
  379. package/source/directives/auth/split.ts +1 -1
  380. package/source/directives/auth/types.ts +12 -7
  381. package/source/directives/cache/Cache.ts +20 -7
  382. package/source/directives/cache/Control.ts +16 -16
  383. package/source/directives/cors/CORS.ts +9 -9
  384. package/source/directives/dev/Development.ts +14 -7
  385. package/source/directives/dev/Faulty.ts +26 -0
  386. package/source/directives/dev/Sleep.ts +55 -0
  387. package/source/directives/dev/types.ts +1 -1
  388. package/source/directives/flow/Compose.ts +92 -0
  389. package/source/directives/flow/Fetch.ts +86 -0
  390. package/source/directives/flow/Flow.ts +42 -0
  391. package/source/directives/flow/index.ts +3 -0
  392. package/source/directives/flow/types.ts +7 -0
  393. package/source/directives/index.ts +3 -2
  394. package/source/directives/io/Directive.ts +5 -2
  395. package/source/directives/io/IO.ts +18 -6
  396. package/source/directives/io/Input.ts +9 -6
  397. package/source/directives/io/Output.ts +6 -5
  398. package/source/directives/io/Throttle.ts +32 -0
  399. package/source/directives/io/lib/throttle/Configuration.test.ts +40 -0
  400. package/source/directives/io/lib/throttle/Configuration.ts +58 -0
  401. package/source/directives/io/lib/throttle/Interval.ts +31 -0
  402. package/source/directives/io/lib/throttle/Keys.ts +40 -0
  403. package/source/directives/io/lib/throttle/Quota.ts +22 -0
  404. package/source/directives/io/lib/throttle/Quotas.test.ts +136 -0
  405. package/source/directives/io/lib/throttle/Quotas.ts +83 -0
  406. package/source/directives/io/lib/throttle/components/Component.ts +5 -0
  407. package/source/directives/io/lib/throttle/components/IP.ts +40 -0
  408. package/source/directives/io/lib/throttle/components/Path.ts +8 -0
  409. package/source/directives/io/lib/throttle/components/index.ts +13 -0
  410. package/source/directives/io/lib/throttle/conditions/Condition.ts +5 -0
  411. package/source/directives/io/lib/throttle/conditions/Status.ts +17 -0
  412. package/source/directives/io/lib/throttle/conditions/index.ts +11 -0
  413. package/source/directives/io/lib/throttle/index.ts +2 -0
  414. package/source/directives/io/schemas.test.ts +9 -0
  415. package/source/directives/io/schemas.ts +3 -0
  416. package/source/directives/map/Authority.ts +15 -0
  417. package/source/directives/map/Buffer.ts +15 -0
  418. package/source/directives/map/Claims.ts +58 -0
  419. package/source/directives/map/Directive.ts +4 -0
  420. package/source/directives/map/Headers.ts +38 -0
  421. package/source/directives/map/Language.ts +42 -0
  422. package/source/directives/map/Languages.ts +11 -0
  423. package/source/directives/map/Map.ts +63 -0
  424. package/source/directives/map/Mapping.ts +19 -0
  425. package/source/directives/{vary → map}/Properties.ts +2 -4
  426. package/source/directives/map/Segments.ts +33 -0
  427. package/source/directives/map/index.ts +3 -0
  428. package/source/directives/octets/Context.ts +3 -2
  429. package/source/directives/octets/Delete.ts +22 -19
  430. package/source/directives/octets/Get.ts +96 -0
  431. package/source/directives/octets/Octets.ts +10 -14
  432. package/source/directives/octets/Put.ts +138 -0
  433. package/source/directives/octets/Workflow.ts +9 -3
  434. package/source/directives/octets/bytes.test.ts +30 -0
  435. package/source/directives/octets/bytes.ts +18 -0
  436. package/source/directives/octets/schemas.ts +4 -8
  437. package/source/directives/octets/types.ts +2 -0
  438. package/source/directives/octets/workflows/Execution.ts +62 -8
  439. package/source/directives/octets/workflows/Workflow.ts +18 -7
  440. package/source/directives/octets/workflows/index.ts +1 -1
  441. package/source/exceptions.ts +16 -4
  442. package/source/manifest.ts +10 -11
  443. package/source/root.ts +16 -1
  444. package/transpiled/Annotation.d.ts +2 -0
  445. package/transpiled/Branch.d.ts +1 -0
  446. package/transpiled/Composition.d.ts +0 -1
  447. package/transpiled/Composition.js +0 -4
  448. package/transpiled/Composition.js.map +1 -1
  449. package/transpiled/Context.d.ts +1 -0
  450. package/transpiled/Directive.d.ts +3 -0
  451. package/transpiled/Directive.js +24 -6
  452. package/transpiled/Directive.js.map +1 -1
  453. package/transpiled/Endpoint.d.ts +6 -4
  454. package/transpiled/Endpoint.js +63 -15
  455. package/transpiled/Endpoint.js.map +1 -1
  456. package/transpiled/Factory.d.ts +1 -1
  457. package/transpiled/Factory.js +11 -2
  458. package/transpiled/Factory.js.map +1 -1
  459. package/transpiled/Gateway.d.ts +3 -0
  460. package/transpiled/Gateway.js +57 -12
  461. package/transpiled/Gateway.js.map +1 -1
  462. package/transpiled/HTTP/Context.d.ts +13 -2
  463. package/transpiled/HTTP/Context.js +26 -6
  464. package/transpiled/HTTP/Context.js.map +1 -1
  465. package/transpiled/HTTP/Server.d.ts +7 -3
  466. package/transpiled/HTTP/Server.js +126 -37
  467. package/transpiled/HTTP/Server.js.map +1 -1
  468. package/transpiled/HTTP/Timing.js.map +1 -1
  469. package/transpiled/HTTP/exceptions.d.ts +16 -7
  470. package/transpiled/HTTP/exceptions.js +34 -16
  471. package/transpiled/HTTP/exceptions.js.map +1 -1
  472. package/transpiled/HTTP/formats/index.d.ts +2 -2
  473. package/transpiled/HTTP/formats/index.js +3 -3
  474. package/transpiled/HTTP/formats/index.js.map +1 -1
  475. package/transpiled/HTTP/formats/json.d.ts +2 -2
  476. package/transpiled/HTTP/formats/json.js +3 -4
  477. package/transpiled/HTTP/formats/json.js.map +1 -1
  478. package/transpiled/HTTP/formats/msgpack.d.ts +1 -1
  479. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  480. package/transpiled/HTTP/formats/text.d.ts +2 -2
  481. package/transpiled/HTTP/formats/text.js +3 -4
  482. package/transpiled/HTTP/formats/text.js.map +1 -1
  483. package/transpiled/HTTP/formats/yaml.d.ts +2 -2
  484. package/transpiled/HTTP/formats/yaml.js +3 -4
  485. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  486. package/transpiled/HTTP/messages.d.ts +4 -1
  487. package/transpiled/HTTP/messages.js +74 -13
  488. package/transpiled/HTTP/messages.js.map +1 -1
  489. package/transpiled/Introspection.d.ts +9 -0
  490. package/transpiled/Introspection.js +3 -0
  491. package/transpiled/Introspection.js.map +1 -0
  492. package/transpiled/Mapping.d.ts +11 -2
  493. package/transpiled/Mapping.js +51 -19
  494. package/transpiled/Mapping.js.map +1 -1
  495. package/transpiled/Query.d.ts +12 -1
  496. package/transpiled/Query.js +93 -28
  497. package/transpiled/Query.js.map +1 -1
  498. package/transpiled/RTD/Context.d.ts +1 -1
  499. package/transpiled/RTD/Directives.d.ts +3 -0
  500. package/transpiled/RTD/Endpoint.d.ts +1 -0
  501. package/transpiled/RTD/Method.d.ts +4 -0
  502. package/transpiled/RTD/Method.js +11 -0
  503. package/transpiled/RTD/Method.js.map +1 -1
  504. package/transpiled/RTD/Node.d.ts +4 -1
  505. package/transpiled/RTD/Node.js +23 -12
  506. package/transpiled/RTD/Node.js.map +1 -1
  507. package/transpiled/RTD/Route.d.ts +2 -1
  508. package/transpiled/RTD/Route.js +7 -3
  509. package/transpiled/RTD/Route.js.map +1 -1
  510. package/transpiled/RTD/Tree.d.ts +2 -1
  511. package/transpiled/RTD/Tree.js +3 -0
  512. package/transpiled/RTD/Tree.js.map +1 -1
  513. package/transpiled/RTD/factory.js +4 -1
  514. package/transpiled/RTD/factory.js.map +1 -1
  515. package/transpiled/RTD/segment.d.ts +1 -0
  516. package/transpiled/RTD/segment.js +2 -0
  517. package/transpiled/RTD/segment.js.map +1 -1
  518. package/transpiled/RTD/syntax/parse.js +34 -22
  519. package/transpiled/RTD/syntax/parse.js.map +1 -1
  520. package/transpiled/RTD/syntax/types.d.ts +8 -3
  521. package/transpiled/RTD/syntax/types.js +1 -1
  522. package/transpiled/RTD/syntax/types.js.map +1 -1
  523. package/transpiled/Remotes.d.ts +4 -4
  524. package/transpiled/Remotes.js +6 -5
  525. package/transpiled/Remotes.js.map +1 -1
  526. package/transpiled/Tenant.d.ts +5 -4
  527. package/transpiled/Tenant.js +2 -7
  528. package/transpiled/Tenant.js.map +1 -1
  529. package/transpiled/deployment.js +9 -3
  530. package/transpiled/deployment.js.map +1 -1
  531. package/transpiled/directives/auth/Anonymous.d.ts +2 -2
  532. package/transpiled/directives/auth/Anonymous.js +2 -2
  533. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  534. package/transpiled/directives/auth/Anyone.d.ts +6 -0
  535. package/transpiled/directives/auth/Anyone.js +14 -0
  536. package/transpiled/directives/auth/Anyone.js.map +1 -0
  537. package/transpiled/directives/auth/Assert.d.ts +7 -0
  538. package/transpiled/directives/auth/Assert.js +57 -0
  539. package/transpiled/directives/auth/Assert.js.map +1 -0
  540. package/transpiled/directives/auth/Authorization.d.ts +4 -3
  541. package/transpiled/directives/auth/Authorization.js +48 -21
  542. package/transpiled/directives/auth/Authorization.js.map +1 -1
  543. package/transpiled/directives/auth/Delegate.d.ts +5 -4
  544. package/transpiled/directives/auth/Delegate.js +7 -3
  545. package/transpiled/directives/auth/Delegate.js.map +1 -1
  546. package/transpiled/directives/auth/Echo.d.ts +4 -4
  547. package/transpiled/directives/auth/Echo.js +11 -4
  548. package/transpiled/directives/auth/Echo.js.map +1 -1
  549. package/transpiled/directives/auth/Federation.d.ts +16 -0
  550. package/transpiled/directives/auth/Federation.js +57 -0
  551. package/transpiled/directives/auth/Federation.js.map +1 -0
  552. package/transpiled/directives/auth/Id.d.ts +1 -1
  553. package/transpiled/directives/auth/Id.js.map +1 -1
  554. package/transpiled/directives/auth/Incept.d.ts +8 -5
  555. package/transpiled/directives/auth/Incept.js +57 -19
  556. package/transpiled/directives/auth/Incept.js.map +1 -1
  557. package/transpiled/directives/auth/Input.d.ts +13 -0
  558. package/transpiled/directives/auth/Input.js +49 -0
  559. package/transpiled/directives/auth/Input.js.map +1 -0
  560. package/transpiled/directives/auth/Role.d.ts +1 -1
  561. package/transpiled/directives/auth/Role.js +4 -6
  562. package/transpiled/directives/auth/Role.js.map +1 -1
  563. package/transpiled/directives/auth/Rule.d.ts +2 -4
  564. package/transpiled/directives/auth/Rule.js +2 -2
  565. package/transpiled/directives/auth/Rule.js.map +1 -1
  566. package/transpiled/directives/auth/Scheme.d.ts +2 -2
  567. package/transpiled/directives/auth/Scheme.js +4 -4
  568. package/transpiled/directives/auth/Scheme.js.map +1 -1
  569. package/transpiled/directives/auth/create.d.ts +2 -0
  570. package/transpiled/directives/auth/create.js +14 -0
  571. package/transpiled/directives/auth/create.js.map +1 -0
  572. package/transpiled/directives/auth/schemes.d.ts +2 -1
  573. package/transpiled/directives/auth/schemes.js +5 -2
  574. package/transpiled/directives/auth/schemes.js.map +1 -1
  575. package/transpiled/directives/auth/split.js +1 -1
  576. package/transpiled/directives/auth/split.js.map +1 -1
  577. package/transpiled/directives/auth/types.d.ts +10 -7
  578. package/transpiled/directives/cache/Cache.d.ts +3 -3
  579. package/transpiled/directives/cache/Cache.js +15 -4
  580. package/transpiled/directives/cache/Cache.js.map +1 -1
  581. package/transpiled/directives/cache/Control.d.ts +2 -2
  582. package/transpiled/directives/cache/Control.js +12 -12
  583. package/transpiled/directives/cache/Control.js.map +1 -1
  584. package/transpiled/directives/cors/CORS.js +7 -7
  585. package/transpiled/directives/cors/CORS.js.map +1 -1
  586. package/transpiled/directives/dev/Development.d.ts +1 -1
  587. package/transpiled/directives/dev/Development.js +15 -7
  588. package/transpiled/directives/dev/Development.js.map +1 -1
  589. package/transpiled/directives/dev/Faulty.d.ts +8 -0
  590. package/transpiled/directives/dev/Faulty.js +26 -0
  591. package/transpiled/directives/dev/Faulty.js.map +1 -0
  592. package/transpiled/directives/dev/Sleep.d.ts +9 -0
  593. package/transpiled/directives/dev/Sleep.js +48 -0
  594. package/transpiled/directives/dev/Sleep.js.map +1 -0
  595. package/transpiled/directives/dev/types.d.ts +1 -1
  596. package/transpiled/directives/flow/Compose.d.ts +9 -0
  597. package/transpiled/directives/flow/Compose.js +94 -0
  598. package/transpiled/directives/flow/Compose.js.map +1 -0
  599. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  600. package/transpiled/directives/flow/Fetch.js +58 -0
  601. package/transpiled/directives/flow/Fetch.js.map +1 -0
  602. package/transpiled/directives/flow/Flow.d.ts +10 -0
  603. package/transpiled/directives/flow/Flow.js +33 -0
  604. package/transpiled/directives/flow/Flow.js.map +1 -0
  605. package/transpiled/directives/flow/index.d.ts +2 -0
  606. package/transpiled/directives/flow/index.js +6 -0
  607. package/transpiled/directives/flow/index.js.map +1 -0
  608. package/transpiled/directives/flow/types.d.ts +6 -0
  609. package/transpiled/directives/flow/types.js.map +1 -0
  610. package/transpiled/directives/index.js +3 -2
  611. package/transpiled/directives/index.js.map +1 -1
  612. package/transpiled/directives/io/Directive.d.ts +5 -2
  613. package/transpiled/directives/io/IO.d.ts +4 -2
  614. package/transpiled/directives/io/IO.js +14 -4
  615. package/transpiled/directives/io/IO.js.map +1 -1
  616. package/transpiled/directives/io/Input.d.ts +1 -1
  617. package/transpiled/directives/io/Input.js +5 -3
  618. package/transpiled/directives/io/Input.js.map +1 -1
  619. package/transpiled/directives/io/Output.d.ts +1 -1
  620. package/transpiled/directives/io/Output.js +3 -3
  621. package/transpiled/directives/io/Output.js.map +1 -1
  622. package/transpiled/directives/io/Throttle.d.ts +11 -0
  623. package/transpiled/directives/{octets/Permute.js → io/Throttle.js} +21 -28
  624. package/transpiled/directives/io/Throttle.js.map +1 -0
  625. package/transpiled/directives/io/lib/throttle/Configuration.d.ts +23 -0
  626. package/transpiled/directives/io/lib/throttle/Configuration.js +27 -0
  627. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -0
  628. package/transpiled/directives/io/lib/throttle/Interval.d.ts +9 -0
  629. package/transpiled/directives/io/lib/throttle/Interval.js +31 -0
  630. package/transpiled/directives/io/lib/throttle/Interval.js.map +1 -0
  631. package/transpiled/directives/io/lib/throttle/Keys.d.ts +12 -0
  632. package/transpiled/directives/io/lib/throttle/Keys.js +34 -0
  633. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -0
  634. package/transpiled/directives/io/lib/throttle/Quota.d.ts +8 -0
  635. package/transpiled/directives/io/lib/throttle/Quota.js +22 -0
  636. package/transpiled/directives/io/lib/throttle/Quota.js.map +1 -0
  637. package/transpiled/directives/io/lib/throttle/Quotas.d.ts +26 -0
  638. package/transpiled/directives/io/lib/throttle/Quotas.js +61 -0
  639. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -0
  640. package/transpiled/directives/io/lib/throttle/components/Component.d.ts +4 -0
  641. package/transpiled/directives/io/lib/throttle/components/Component.js +3 -0
  642. package/transpiled/directives/io/lib/throttle/components/Component.js.map +1 -0
  643. package/transpiled/directives/io/lib/throttle/components/IP.d.ts +6 -0
  644. package/transpiled/directives/io/lib/throttle/components/IP.js +33 -0
  645. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -0
  646. package/transpiled/directives/io/lib/throttle/components/Path.d.ts +5 -0
  647. package/transpiled/directives/io/lib/throttle/components/Path.js +10 -0
  648. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -0
  649. package/transpiled/directives/io/lib/throttle/components/index.d.ts +5 -0
  650. package/transpiled/directives/io/lib/throttle/components/index.js +10 -0
  651. package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -0
  652. package/transpiled/directives/io/lib/throttle/conditions/Condition.d.ts +4 -0
  653. package/transpiled/directives/io/lib/throttle/conditions/Condition.js +3 -0
  654. package/transpiled/directives/io/lib/throttle/conditions/Condition.js.map +1 -0
  655. package/transpiled/directives/io/lib/throttle/conditions/Status.d.ts +7 -0
  656. package/transpiled/directives/io/lib/throttle/conditions/Status.js +19 -0
  657. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -0
  658. package/transpiled/directives/io/lib/throttle/conditions/index.d.ts +5 -0
  659. package/transpiled/directives/io/lib/throttle/conditions/index.js +8 -0
  660. package/transpiled/directives/io/lib/throttle/conditions/index.js.map +1 -0
  661. package/transpiled/directives/io/lib/throttle/index.d.ts +2 -0
  662. package/transpiled/directives/io/lib/throttle/index.js +8 -0
  663. package/transpiled/directives/io/lib/throttle/index.js.map +1 -0
  664. package/transpiled/directives/io/schemas.d.ts +2 -0
  665. package/transpiled/directives/io/schemas.js +2 -1
  666. package/transpiled/directives/io/schemas.js.map +1 -1
  667. package/transpiled/directives/map/Authority.d.ts +6 -0
  668. package/transpiled/directives/map/Authority.js +19 -0
  669. package/transpiled/directives/map/Authority.js.map +1 -0
  670. package/transpiled/directives/map/Buffer.d.ts +6 -0
  671. package/transpiled/directives/map/Buffer.js +19 -0
  672. package/transpiled/directives/map/Buffer.js.map +1 -0
  673. package/transpiled/directives/map/Claims.d.ts +10 -0
  674. package/transpiled/directives/map/Claims.js +44 -0
  675. package/transpiled/directives/map/Claims.js.map +1 -0
  676. package/transpiled/directives/map/Directive.d.ts +3 -0
  677. package/transpiled/directives/map/Directive.js.map +1 -0
  678. package/transpiled/directives/map/Headers.d.ts +7 -0
  679. package/transpiled/directives/map/Headers.js +34 -0
  680. package/transpiled/directives/map/Headers.js.map +1 -0
  681. package/transpiled/directives/map/Language.d.ts +10 -0
  682. package/transpiled/directives/map/Language.js +38 -0
  683. package/transpiled/directives/map/Language.js.map +1 -0
  684. package/transpiled/directives/map/Languages.d.ts +4 -0
  685. package/transpiled/directives/map/Languages.js +17 -0
  686. package/transpiled/directives/map/Languages.js.map +1 -0
  687. package/transpiled/directives/map/Map.d.ts +13 -0
  688. package/transpiled/directives/map/Map.js +48 -0
  689. package/transpiled/directives/map/Map.js.map +1 -0
  690. package/transpiled/directives/map/Mapping.d.ts +13 -0
  691. package/transpiled/directives/map/Mapping.js +13 -0
  692. package/transpiled/directives/map/Mapping.js.map +1 -0
  693. package/transpiled/directives/{vary → map}/Properties.d.ts +2 -2
  694. package/transpiled/directives/{vary → map}/Properties.js +1 -3
  695. package/transpiled/directives/map/Properties.js.map +1 -0
  696. package/transpiled/directives/map/Segments.d.ts +6 -0
  697. package/transpiled/directives/map/Segments.js +30 -0
  698. package/transpiled/directives/map/Segments.js.map +1 -0
  699. package/transpiled/directives/map/index.d.ts +2 -0
  700. package/transpiled/directives/map/index.js +6 -0
  701. package/transpiled/directives/map/index.js.map +1 -0
  702. package/transpiled/directives/octets/Context.js +4 -24
  703. package/transpiled/directives/octets/Context.js.map +1 -1
  704. package/transpiled/directives/octets/Delete.js +15 -12
  705. package/transpiled/directives/octets/Delete.js.map +1 -1
  706. package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
  707. package/transpiled/directives/octets/{Fetch.js → Get.js} +34 -30
  708. package/transpiled/directives/octets/Get.js.map +1 -0
  709. package/transpiled/directives/octets/Octets.js +9 -12
  710. package/transpiled/directives/octets/Octets.js.map +1 -1
  711. package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +8 -2
  712. package/transpiled/directives/octets/{Store.js → Put.js} +33 -27
  713. package/transpiled/directives/octets/Put.js.map +1 -0
  714. package/transpiled/directives/octets/Workflow.js +7 -2
  715. package/transpiled/directives/octets/Workflow.js.map +1 -1
  716. package/transpiled/directives/octets/bytes.d.ts +1 -0
  717. package/transpiled/directives/octets/bytes.js +21 -0
  718. package/transpiled/directives/octets/bytes.js.map +1 -0
  719. package/transpiled/directives/octets/schemas.d.ts +4 -8
  720. package/transpiled/directives/octets/schemas.js +3 -6
  721. package/transpiled/directives/octets/schemas.js.map +1 -1
  722. package/transpiled/directives/octets/types.d.ts +2 -0
  723. package/transpiled/directives/octets/workflows/Execution.d.ts +7 -1
  724. package/transpiled/directives/octets/workflows/Execution.js +44 -9
  725. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  726. package/transpiled/directives/octets/workflows/Workflow.d.ts +8 -3
  727. package/transpiled/directives/octets/workflows/Workflow.js +10 -4
  728. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  729. package/transpiled/directives/octets/workflows/index.d.ts +1 -1
  730. package/transpiled/directives/octets/workflows/index.js.map +1 -1
  731. package/transpiled/exceptions.js +11 -2
  732. package/transpiled/exceptions.js.map +1 -1
  733. package/transpiled/manifest.js +10 -11
  734. package/transpiled/manifest.js.map +1 -1
  735. package/transpiled/root.js +16 -1
  736. package/transpiled/root.js.map +1 -1
  737. package/transpiled/tsconfig.tsbuildinfo +1 -1
  738. package/components/identity.federation/operations/lib/assertions-as-values.d.ts +0 -4
  739. package/components/identity.federation/operations/lib/assertions-as-values.js.map +0 -1
  740. package/components/identity.federation/operations/lib/jwt.d.ts +0 -20
  741. package/components/identity.federation/operations/lib/jwt.js +0 -136
  742. package/components/identity.federation/operations/lib/jwt.js.map +0 -1
  743. package/components/identity.federation/operations/schemas.d.ts +0 -63
  744. package/components/identity.federation/operations/schemas.js +0 -9
  745. package/components/identity.federation/operations/schemas.js.map +0 -1
  746. package/components/identity.federation/operations/types.d.ts +0 -56
  747. package/components/identity.federation/operations/types.js.map +0 -1
  748. package/components/identity.federation/source/lib/assertions-as-values.ts +0 -19
  749. package/components/identity.federation/source/lib/jwt.test.ts +0 -56
  750. package/components/identity.federation/source/lib/jwt.ts +0 -171
  751. package/components/identity.federation/source/schemas.ts +0 -65
  752. package/components/identity.federation/source/types.ts +0 -62
  753. package/components/identity.tokens/operations/types.d.ts +0 -46
  754. package/components/identity.tokens/operations/types.js.map +0 -1
  755. package/components/octets.storage/operations/fetch.js +0 -46
  756. package/components/octets.storage/operations/list.js +0 -7
  757. package/components/octets.storage/operations/permute.js +0 -7
  758. package/components/octets.storage/operations/store.js +0 -11
  759. package/documentation/vary.md +0 -69
  760. package/features/steps/IdP.ts +0 -154
  761. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  762. package/features/vary.feature +0 -252
  763. package/schemas/octets/context.cos.yaml +0 -1
  764. package/schemas/octets/fetch.cos.yaml +0 -3
  765. package/schemas/octets/permute.cos.yaml +0 -1
  766. package/schemas/octets/store.cos.yaml +0 -3
  767. package/source/directives/octets/Fetch.ts +0 -100
  768. package/source/directives/octets/List.ts +0 -72
  769. package/source/directives/octets/Permute.ts +0 -44
  770. package/source/directives/octets/Store.ts +0 -126
  771. package/source/directives/vary/Directive.ts +0 -7
  772. package/source/directives/vary/Embed.ts +0 -68
  773. package/source/directives/vary/Vary.ts +0 -50
  774. package/source/directives/vary/embeddings/Authority.ts +0 -8
  775. package/source/directives/vary/embeddings/Embedding.ts +0 -7
  776. package/source/directives/vary/embeddings/Header.ts +0 -32
  777. package/source/directives/vary/embeddings/Language.ts +0 -31
  778. package/source/directives/vary/embeddings/Parameter.ts +0 -14
  779. package/source/directives/vary/embeddings/index.ts +0 -13
  780. package/source/directives/vary/index.ts +0 -3
  781. package/transpiled/directives/octets/Fetch.js.map +0 -1
  782. package/transpiled/directives/octets/List.d.ts +0 -16
  783. package/transpiled/directives/octets/List.js +0 -74
  784. package/transpiled/directives/octets/List.js.map +0 -1
  785. package/transpiled/directives/octets/Permute.d.ts +0 -11
  786. package/transpiled/directives/octets/Permute.js.map +0 -1
  787. package/transpiled/directives/octets/Store.js.map +0 -1
  788. package/transpiled/directives/vary/Directive.d.ts +0 -6
  789. package/transpiled/directives/vary/Directive.js.map +0 -1
  790. package/transpiled/directives/vary/Embed.d.ts +0 -11
  791. package/transpiled/directives/vary/Embed.js +0 -51
  792. package/transpiled/directives/vary/Embed.js.map +0 -1
  793. package/transpiled/directives/vary/Properties.js.map +0 -1
  794. package/transpiled/directives/vary/Vary.d.ts +0 -10
  795. package/transpiled/directives/vary/Vary.js +0 -36
  796. package/transpiled/directives/vary/Vary.js.map +0 -1
  797. package/transpiled/directives/vary/embeddings/Authority.d.ts +0 -5
  798. package/transpiled/directives/vary/embeddings/Authority.js +0 -10
  799. package/transpiled/directives/vary/embeddings/Authority.js.map +0 -1
  800. package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -6
  801. package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
  802. package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
  803. package/transpiled/directives/vary/embeddings/Header.js +0 -28
  804. package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
  805. package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
  806. package/transpiled/directives/vary/embeddings/Language.js +0 -28
  807. package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
  808. package/transpiled/directives/vary/embeddings/Parameter.d.ts +0 -7
  809. package/transpiled/directives/vary/embeddings/Parameter.js +0 -14
  810. package/transpiled/directives/vary/embeddings/Parameter.js.map +0 -1
  811. package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
  812. package/transpiled/directives/vary/embeddings/index.js +0 -14
  813. package/transpiled/directives/vary/embeddings/index.js.map +0 -1
  814. package/transpiled/directives/vary/index.d.ts +0 -2
  815. package/transpiled/directives/vary/index.js +0 -6
  816. package/transpiled/directives/vary/index.js.map +0 -1
  817. /package/components/{identity.federation/operations → identity.tokens/operations/lib}/types.js +0 -0
  818. /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
  819. /package/{components/identity.tokens/operations → transpiled/directives/flow}/types.js +0 -0
  820. /package/transpiled/directives/{vary → map}/Directive.js +0 -0
@@ -63,8 +63,7 @@ to [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.ht
63
63
  Authorization: Bearer eyJhbGciOiJIUzI1...
64
64
  ```
65
65
 
66
- Trusted providers are specified using the `identity.federation` property within the configuration
67
- annotation.
66
+ Trusted providers are specified using the `identity.federation` configuration.
68
67
 
69
68
  ```yaml
70
69
  # context.toa.yaml
@@ -73,16 +72,99 @@ configuration:
73
72
  identity.federation:
74
73
  trust:
75
74
  - iss: https://accounts.google.com
76
- aud:
77
- - <GOOGLE_CLIENT_ID>
75
+ aud: <GOOGLE_CLIENT_ID>
78
76
 
79
77
  - iss: https://appleid.apple.com
78
+ aud: <APPLE_CLIENT_ID>
79
+ secret: <APPLE_CLIENT_SECRET> # enables Authorization Code Flow
80
80
 
81
81
  - iss: private.entity
82
82
  secrets:
83
83
  HS384:
84
84
  key0: <THE-SECRET-STRING-FOR-HS384>
85
85
  key1: <THE-SECRET-STRING-FOR-HS384> # selected by `kid` in the JWT header
86
+ principal:
87
+ iss: https://accounts.google.com
88
+ sub: 4218230498234
89
+ implicit: true
90
+ ```
91
+
92
+ `principal` specifies the values of the `iss` and `sub` claims of an Identity that will be granted
93
+ with a `system` role.
94
+
95
+ `implicit` indicates whether the Identity should be implicitly created when a valid token for a
96
+ non-existent Identity is provided (default `false`).
97
+
98
+ ### Authorization Code Flow
99
+
100
+ [OAuth 2.0 RFC 6749, section 4.1](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1)
101
+
102
+ ```
103
+ GET /identity/
104
+ authorization: Code <credentials>
105
+ ```
106
+
107
+ `<credentials>` is a base64-encoded JSON containing the following properties:
108
+
109
+ ```yaml
110
+ code: authorization code
111
+ iss: code issuer
112
+ for: redirect URI
113
+ ```
114
+
115
+ Trust configuration for the issuer requires `aud` and either `secret` or `signature`
116
+ values to enable the Authorization Code Flow.
117
+
118
+ > If `aud` is an array, the first value is used.
119
+
120
+ ```yaml
121
+ # context.toa.yaml
122
+ configuration:
123
+ identity.federation:
124
+ trust:
125
+ - iss: https://accounts.google.com
126
+ aud: 1045282659797-n705sf85j4b2rodtpdn43od43tvseiet.apps.googleusercontent.com
127
+ secret: $GOOGLE_CLIENT_SECRET
128
+ - iss: https://appleid.apple.com
129
+ aud: io.toa.services.id
130
+ signature:
131
+ iss: team-id
132
+ kid: key-id
133
+ key: $APPLE_PRIVATE_KEY
134
+ ```
135
+
136
+ ### OTP scheme
137
+
138
+ One-time passwords.
139
+
140
+ Passwords can be issued by calling `identity.otp.issue` operation, with the following input:
141
+
142
+ ```yaml
143
+ authority: string
144
+ username: string
145
+ ```
146
+
147
+ The reply will contain the `code` property of type `string` formed as a random 6-digit number,
148
+ valid for 60 seconds by default.
149
+
150
+ ```yaml
151
+ code: 123456
152
+ ```
153
+
154
+ OTP can be used with `OTP` authentication formatted as `base64(username:password)`.
155
+
156
+ ```
157
+ GET /identity/ HTTP/1.1
158
+ authentication: OTP dXNlcm5hbWU6MTIzNDU2
159
+ ```
160
+
161
+ OTP expiration time can be configured using the `identity.otp` configuration.
162
+
163
+ ```yaml
164
+ # context.toa.yaml
165
+ configuration:
166
+ identity.otp:
167
+ lifetime: 60 # seconds
86
168
  ```
87
169
 
88
170
  ## Identity inception
@@ -110,7 +192,7 @@ exposition:
110
192
  The value of the `auth:incept` directive refers to the name of the response property that will be
111
193
  returned by the `POST` operation, containing the created entity identifier.
112
194
 
113
- A request with Identity inception must contain (non-existent) credentials that will be associated
195
+ A request with Identity inception may contain (non-existent) credentials that will be associated
114
196
  with the created Identity.
115
197
 
116
198
  ```http
@@ -132,6 +214,34 @@ id: 2428c31ecb6e4a51a24ef52f0c4181b9
132
214
  As a result of processing the above request, the provided Basic credentials associated with the
133
215
  Identity `2428c31ecb6e4a51a24ef52f0c4181b9` are created.
134
216
 
217
+ > `auth:incept` directive may have a `null` value, which means that the Identity will be created
218
+ > without any associated entity.
219
+
220
+ Inception is supported for `Basic` and `Bearer` authentication schemes.
221
+
222
+ ## Identity assertion
223
+
224
+ `auth:assert` directive is used to ensure that given credentials are associated with an existing
225
+ Identity or to create a new Identity if it does not exist.
226
+ The directive itself does not allow or deny access to the requested resource.
227
+
228
+ > Used authentication scheme must support inception.
229
+
230
+ ```yaml
231
+ /accounts/echo:
232
+ auth:assert: true
233
+ auth:anyone: true
234
+ endpoint: echo
235
+ ```
236
+
237
+ ```http
238
+ GET /accounts/echo/
239
+ authorization: Basic new-or-existent-credentials
240
+ ```
241
+
242
+ If new Identity is created and endpoint returns a successful response, the status code `201 Created`
243
+ is returned.
244
+
135
245
  ## FAQ
136
246
 
137
247
  <dl>
@@ -0,0 +1,82 @@
1
+ # Resource introspection
2
+
3
+ Any resource can be introspected by sending an `OPTIONS` request to the resource's path.
4
+ The response will contain the resource's input and output schemas for each supported method.
5
+
6
+ Introspection properties:
7
+
8
+ - `route` route parameters
9
+ - `query` query parameters
10
+ - `input` input schema
11
+ - `output` output schema
12
+ - `errors` error codes
13
+
14
+ ```http
15
+ OPTIONS /pots/:id/ HTTP/1.1
16
+ accept: application/yaml
17
+ ```
18
+
19
+ ```http
20
+ 200 OK
21
+ Allow: GET, POST, OPTIONS
22
+
23
+ GET:
24
+ route:
25
+ id:
26
+ type: string
27
+ pattern: ^[a-fA-F0-9]{32}$
28
+ output:
29
+ type: array
30
+ items:
31
+ type: object
32
+ properties:
33
+ title:
34
+ type: string
35
+ maxLength: 64
36
+ volume:
37
+ type: number
38
+ exclusiveMinimum: 0
39
+ maximum: 1000
40
+ temperature:
41
+ type: number
42
+ exclusiveMinimum: 0
43
+ maximum: 300
44
+ additionalProperties: false
45
+ required:
46
+ - id
47
+ - title
48
+ - volume
49
+ POST:
50
+ route:
51
+ id:
52
+ type: string
53
+ pattern: ^[a-fA-F0-9]{32}$
54
+ input:
55
+ type: object
56
+ properties:
57
+ title:
58
+ type: string
59
+ maxLength: 64
60
+ temperature:
61
+ type: number
62
+ exclusiveMinimum: 0
63
+ maximum: 300
64
+ volume:
65
+ type: number
66
+ exclusiveMinimum: 0
67
+ maximum: 1000
68
+ additionalProperties: false
69
+ required:
70
+ - title
71
+ - volume
72
+ output:
73
+ type: object
74
+ properties:
75
+ id:
76
+ type: string
77
+ pattern: ^[a-fA-F0-9]{32}$
78
+ additionalProperties: false
79
+ errors:
80
+ - NO_WAY
81
+ - WONT_CREATE
82
+ ```
@@ -3,7 +3,7 @@
3
3
  The Exposition comes with `io` directives to control access to the operation's input and output
4
4
  properties.
5
5
 
6
- ## `io:input`
6
+ ## Input
7
7
 
8
8
  The `io:input` optional directive contains a list of properties that are allowed to be specified in
9
9
  the request body.
@@ -22,7 +22,7 @@ not in the list, the request will be rejected with a `400` status code.
22
22
  > Therefore, `io:input` is only applicable to operations which input is an object or an
23
23
  > array of objects.
24
24
 
25
- ## `io:output`
25
+ ## Output
26
26
 
27
27
  The `io:output` mandatory directive contains a list of properties that are allowed to be included in
28
28
  the response body.
@@ -54,3 +54,43 @@ GET:
54
54
  ```
55
55
 
56
56
  Output restrictions are not applied to stream responses and errors.
57
+
58
+ ## Throttling
59
+
60
+ The `io:throttle` directive is used to limit the rate of the requests meeting the specified
61
+ criteria.
62
+ See [algorithm description](notes/throttling.md).
63
+
64
+ ```yaml
65
+ exposition:
66
+ /:
67
+ io:throttle:
68
+ key:
69
+ - route
70
+ - ip
71
+ - identity
72
+ - segment: id
73
+ - header: x-real-ip
74
+ - status: [4xx, 5xx]
75
+ requests: 500
76
+ interval: 30
77
+ cooldown: 30
78
+ status: 429
79
+ ```
80
+
81
+ Once the rate limit is reached, the server will block the requests with the specified `status`
82
+ code (429 by default) until the `cooldown` period expires.
83
+
84
+ > Currently, only `header` and `status` key components are supported.
85
+
86
+ ### Request key components
87
+
88
+ Request components used to track quota usage and block requests:
89
+
90
+ - `header`: name of the header (or a list of header names), which value(s) will be used
91
+
92
+ ### Response key components
93
+
94
+ Response components used only to track quota usage:
95
+
96
+ - `status`: response status code (or a list of status codes)
@@ -0,0 +1,115 @@
1
+ # HTTP context mapping
2
+
3
+ The `map` directive family is used to map HTTP request parts to operation call input properties.
4
+
5
+ [Features](../features/map.feature).
6
+
7
+ ## TL;DR
8
+
9
+ ```yaml
10
+ exposition:
11
+ /:group:
12
+ languages: [en, fr] # supported languages
13
+ GET:
14
+ map:authority: hostname # request authority (e.g., hostname)
15
+ map:language: lang # requested language
16
+ map:headers: # raw header values
17
+ token: x-access-token
18
+ map:buffer: body # unparsed request body
19
+ map:segments: # route parameters
20
+ group: group
21
+ map:claims: # Bearer token claims
22
+ address: email
23
+ verified: email_verified
24
+ endpoint: observe
25
+ ```
26
+
27
+ The operation input type must be an object.
28
+ If the input already contains the specified keys, they will be overwritten.
29
+
30
+ ## Authority
31
+
32
+ The `map:authority` directive maps the [authority identifier](authorities.md) to an operation call
33
+ input property specified by the directive value.
34
+
35
+ ### Language
36
+
37
+ The `map:language` mapping sets the [most matching](https://github.com/jshttp/negotiator) language
38
+ code based on the `accept-language` request header and a list of supported languages defined by
39
+ the `map:languages` directive, and also adds `accept-language` to the `Vary` HTTP response header
40
+ value.
41
+
42
+ If none of the supported languages match, the first supported language is used.
43
+
44
+ > `map:languages` has a shorthand form: `languages: [en, fr]`.
45
+
46
+ ## Header values
47
+
48
+ The `map:headers` directive maps the values of HTTP request headers to operation call input
49
+ properties.
50
+ The value of the directive is a map where keys are the names of the input properties and values are
51
+ the names of the HTTP request headers.
52
+
53
+ The names of these headers are then included in the `Vary` HTTP response header
54
+ and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
55
+ of the [CORS](protocol.md#cors).
56
+
57
+ [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are combined
58
+ as a comma-separated list.
59
+
60
+ ## Raw body
61
+
62
+ The `map:buffer` directive maps the unparsed request body to an operation call input property.
63
+ The directive value is the name of the input property.
64
+
65
+ ```yaml
66
+ /webhook:
67
+ POST:
68
+ map:buffer: body
69
+ map:headers:
70
+ signature: x-signature
71
+ endpoint: verify
72
+ ```
73
+
74
+ The body is read from the request stream as raw bytes and delivered as a UTF-8 string.
75
+
76
+ Body parsing is bypassed, so the route does not depend on a supported `Content-Type` or format decoding. The request stream is consumed; a route with `map:buffer` cannot also receive a parsed body from the same request.
77
+
78
+ ## Route parameters
79
+
80
+ The `map:segments` directive maps the values of route parameters to operation call input properties.
81
+ The value of the directive is a map where keys are the names of the input properties, and values are
82
+ the names of the route parameters.
83
+
84
+ Parameter name may be prefixed with `~`
85
+ to indicate that the parameter should not be available to the
86
+ remaining directives or used as criteria in the operation call.
87
+
88
+ ```yaml
89
+ /:id/:tag:
90
+ POST:
91
+ map:segments:
92
+ id: id
93
+ tag: ~tag
94
+ endpoint: create
95
+ ```
96
+
97
+ Wildcard routes are supported by using `**` as the parameter name.
98
+
99
+ ```yaml
100
+ /path/to/**:
101
+ GET:
102
+ map:segments:
103
+ path: '**'
104
+ endpoint: observe
105
+ ```
106
+
107
+ ## Bearer token claims
108
+
109
+ The `map:claims` directive maps the values of
110
+ the [token claims](https://datatracker.ietf.org/doc/html/rfc7519#section-4).
111
+ The value of the directive is a map where keys are the names of the input properties and values are
112
+ the names of the claims.
113
+
114
+ If the claim is not present in the token or the request is not authenticated using
115
+ the [`Bearer` scheme](identity.md#bearer-scheme), the input properties are not set.
Binary file
@@ -0,0 +1,59 @@
1
+ # Distributed Peer Discovery
2
+
3
+ ## Problem
4
+
5
+ Modulo partitioning algorithm `taks.id % replicas == index` requires
6
+ to know the number of task processing instances running in the cluster,
7
+ and the own index of the current instance.
8
+
9
+ ## Forces
10
+
11
+ 1. Static configuration is not an option (due to dynamic scaling / failover).
12
+ 2. In a distributed system, there is no concept of a *global current time*.
13
+
14
+ ## Solution
15
+
16
+ An algorithm that emits `(index, replicas)` once per `interval` seconds, using common Redis
17
+ key and atomic increment.
18
+
19
+ Define the following parameters:
20
+
21
+ - `name`: a name of the task processing (e.g. `mail-sender`)
22
+ - `interval`: indexing interval that is deliberately greater than the expected clock skew among
23
+ instances
24
+
25
+ At the start of each `interval` in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time):
26
+
27
+ 1. Calculate an ordinal number of the current interval: `number = ceil(now() / interval)`
28
+ 2. Compose a `key` as `{name}:{number}`
29
+ 3. Atomically increment a `key` in Redis ([INCR](https://redis.io/docs/latest/commands/incr/))
30
+ 4. If `index` is defined (see 5)
31
+
32
+ - get the value of previous key `{name}:{number-1}` as `replicas`
33
+ - if the `replicas` is defined, emit `(index, replicas)` **algorithm result**
34
+
35
+ 5. Store the response (3) in `index`.
36
+
37
+ ## Safe index transition
38
+
39
+ If the `index` or `replicas` changes, the algorithm consumer must stop consuming new tasks
40
+ and execute _safe index transition_, to prevent task duplication or loss.
41
+
42
+ The transition can be implemented in a manner similar to the described algorithm, using a dedicated
43
+ `{name}:transition` key.
44
+ However, this process is considered outside the scope of this document.
45
+
46
+ ## Extension
47
+
48
+ If the system clocks are too precisely synchronized (skew is less than a round-trip time to Redis),
49
+ this may result in continuous [index transitions](#safe-index-transition).
50
+
51
+ To mitigate this, the algorithm can be extended with a random delay:
52
+
53
+ 1. Before starting the algorithm, define a random constant clock skew, significantly smaller than
54
+ `interval`: `skew = random() * (interval / 2)`
55
+ 2. Start the algorithm at each `interval + skew`.
56
+
57
+ ## Caveats
58
+
59
+ - The first result will become known between `interval` and `interval × 2` seconds.
@@ -0,0 +1,82 @@
1
+ # Decentralized Request Throttling
2
+
3
+ ## Problem
4
+
5
+ To prevent an unnecessary load, API requests should be throttled when made maliciously or due to an
6
+ error.
7
+
8
+ ## Context
9
+
10
+ 1. The [API Gateway](https://microservices.io/patterns/apigateway.html) of a distributed system runs
11
+ in multiple instances, each with an in-memory state that does not allow tracking the current
12
+ quota usage.
13
+ 2. Precise quota enforcement (per request, per second) is not critical; the goal is to prevent
14
+ significant overuse.
15
+ 3. Quota configuration is static.
16
+
17
+ ## Forces
18
+
19
+ 1. No per request IO is allowed (centralized solutions do not fit).
20
+ 2. In a distributed system, there is no concept of a *global current time*.
21
+ 3. Failure to retrieve the quota state should not result in Gateway failure.
22
+
23
+ ## Solution
24
+
25
+ Implement in-memory quotas in each process, periodically synchronizing them asynchronously using
26
+ Redis.
27
+
28
+ Consider a basic throttling rule:
29
+
30
+ 1. No more than `MAX_REQUESTS` within `INTERVAL` time for any API route (`KEY`).
31
+ 2. If the limit is exceeded, block requests to `KEY` for `COOLDOWN` seconds.
32
+
33
+ ### Concept
34
+
35
+ 1. Divide `INTERVAL` into `N` spans (`N >= 2`).
36
+ 2. At the end of each span,
37
+ atomically increment the value in Redis ([INCRBY](https://redis.io/docs/latest/commands/incrby/))
38
+ by the number of requests received for each `KEY`, using a key composed of the `KEY` and the
39
+ current ordinal number of `INTERVAL`
40
+ in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time).
41
+ 3. If the returned value exceeds `MAX_REQUESTS`, block access to `KEY`, remove after `COOLDOWN`.
42
+ 4. If the write operation fails and `REQUESTS > MAX_REQUESTS / N` (i.e., the quota is exceeded
43
+ locally), block access to `KEY`, remove after `COOLDOWN`.
44
+
45
+ Each API Gateway instance will generate the `KEY` based on its own local time,
46
+ which, in general, will lead to simultaneous writes (from Redis’s local time perspective) to
47
+ different `KEY`s. However, the total contribution of each node to each `KEY` will correspond to the
48
+ actual request rate experienced by that node.
49
+
50
+ <img src="desync.jpg" alt="Desynchronization" />
51
+
52
+ Dividing the `INTERVAL` into spans smooths the desynchronization effect.
53
+
54
+ ### Extension
55
+
56
+ Introduce `nodes`, the approximate number of active API Gateway instances, to improve the algorithm.
57
+
58
+ 1. Initially, `nodes` equals to `1`.
59
+ 2. During each `INTERVAL`, sum the total request count for each `KEY`, keep current and previous
60
+ values.
61
+ 3. At the end of each interval:
62
+
63
+ - Read the value from the `KEY` for the previous interval. At this point, it is assumed that all
64
+ nodes have switched to the next interval.
65
+ - Update the `nodes` value by dividing response form Redis by the number of `REQUESTS` counted for
66
+ the previous interval.
67
+ - Set the previous value to the current value.
68
+ - Set the current value to `0`
69
+
70
+ 4. Update point 4 of the [Concept](#concept): `REQUESTS * nodes > MAX_REQUESTS / N`.
71
+ This will increase the precision of the local quota enforcement.
72
+ 5. Add a new step: if `REQUESTS * nodes > MAX_REQUESTS`, block access to `KEY`, remove after
73
+ `COOLDOWN`.
74
+
75
+ When nodes are added or removed, the algorithm will adapt in the upcoming intervals.
76
+
77
+ ### Caveats
78
+
79
+ 1. In the worst case scenario (really, really unlikely), the quota is exceeded by `MAX_REQUESTS / N`
80
+ in a span on each node.
81
+ 2. Time desynchronization between nodes should be insignificant for the selected `INTERVAL` (i.e.,
82
+ `INTERVAL` >> desync). See Extension point 3.