@toa.io/extensions.exposition 1.0.0-alpha.3 → 1.0.0-alpha.300

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 (1087) hide show
  1. package/components/exposition.octets/manifest.toa.yaml +58 -0
  2. package/components/exposition.octets/operations/delete.js +5 -0
  3. package/components/exposition.octets/operations/get.js +8 -0
  4. package/components/exposition.octets/operations/head.js +5 -0
  5. package/components/exposition.octets/operations/put.js +142 -0
  6. package/components/exposition.octets/package.json +10 -0
  7. package/components/exposition.octets/types/index.d.ts +3 -0
  8. package/components/exposition.octets/types/toa.d.ts +41 -0
  9. package/components/identity.bans/manifest.toa.yaml +33 -6
  10. package/components/identity.bans/operations/transit.js +7 -0
  11. package/components/identity.bans/source/transit.ts +21 -0
  12. package/components/identity.bans/tsconfig.json +10 -0
  13. package/components/identity.bans/types/index.d.ts +3 -0
  14. package/components/identity.bans/types/toa.d.ts +35 -0
  15. package/components/identity.basic/events/principal.js +8 -4
  16. package/components/identity.basic/manifest.toa.yaml +211 -25
  17. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  18. package/components/identity.basic/operations/add.js +13 -0
  19. package/components/identity.basic/operations/authenticate.js +20 -14
  20. package/components/identity.basic/operations/check.js +14 -0
  21. package/components/identity.basic/operations/delete.js +7 -0
  22. package/components/identity.basic/operations/incept.js +38 -0
  23. package/components/identity.basic/operations/info.js +7 -0
  24. package/components/identity.basic/operations/lib/credentials.js +12 -0
  25. package/components/identity.basic/operations/transit.js +46 -23
  26. package/components/identity.basic/package.json +8 -0
  27. package/components/identity.basic/source/add.ts +18 -0
  28. package/components/identity.basic/source/authenticate.ts +34 -15
  29. package/components/identity.basic/source/check.ts +24 -0
  30. package/components/identity.basic/source/delete.ts +18 -0
  31. package/components/identity.basic/source/incept.ts +70 -0
  32. package/components/identity.basic/source/info.ts +22 -0
  33. package/components/identity.basic/source/lib/credentials.ts +12 -0
  34. package/components/identity.basic/source/transit.ts +67 -28
  35. package/components/identity.basic/tsconfig.json +2 -1
  36. package/components/identity.basic/types/index.d.ts +26 -0
  37. package/components/identity.basic/types/toa.d.ts +122 -0
  38. package/components/identity.clients/manifest.toa.yaml +239 -0
  39. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  40. package/components/identity.clients/operations/describe.js +44 -0
  41. package/components/identity.clients/operations/lib/Context.js +2 -0
  42. package/components/identity.clients/operations/lib/Entity.js +2 -0
  43. package/components/identity.clients/operations/lib/canonical.js +24 -0
  44. package/components/identity.clients/operations/lib/cimd.js +87 -0
  45. package/components/identity.clients/operations/lib/errors.js +5 -0
  46. package/components/identity.clients/operations/lib/index.js +7 -0
  47. package/components/identity.clients/operations/lib/redirect.js +35 -0
  48. package/components/identity.clients/operations/register.js +84 -0
  49. package/components/identity.clients/source/describe.ts +63 -0
  50. package/components/identity.clients/source/lib/Context.ts +41 -0
  51. package/components/identity.clients/source/lib/Entity.ts +31 -0
  52. package/components/identity.clients/source/lib/canonical.ts +27 -0
  53. package/components/identity.clients/source/lib/cimd.ts +112 -0
  54. package/components/identity.clients/source/lib/errors.ts +4 -0
  55. package/components/identity.clients/source/lib/index.ts +6 -0
  56. package/components/identity.clients/source/lib/redirect.ts +39 -0
  57. package/components/identity.clients/source/register.ts +125 -0
  58. package/components/identity.clients/tsconfig.json +10 -0
  59. package/components/identity.clients/types/index.d.ts +3 -0
  60. package/components/identity.clients/types/toa.d.ts +110 -0
  61. package/components/identity.credentials/manifest.toa.yaml +78 -0
  62. package/components/identity.credentials/operations/list.js +32 -0
  63. package/components/identity.credentials/source/list.ts +92 -0
  64. package/components/identity.credentials/tsconfig.json +10 -0
  65. package/components/identity.credentials/types/index.d.ts +3 -0
  66. package/components/identity.credentials/types/toa.d.ts +31 -0
  67. package/components/identity.federation/events/principal.js +7 -8
  68. package/components/identity.federation/manifest.toa.yaml +259 -55
  69. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  70. package/components/identity.federation/operations/authenticate.js +31 -19
  71. package/components/identity.federation/operations/create.js +28 -14
  72. package/components/identity.federation/operations/decode.js +9 -0
  73. package/components/identity.federation/operations/delete.js +7 -0
  74. package/components/identity.federation/operations/incept.js +10 -0
  75. package/components/identity.federation/operations/lib/Configuration.js +2 -0
  76. package/components/identity.federation/operations/lib/Ctx.js +2 -0
  77. package/components/identity.federation/operations/lib/Payload.js +2 -0
  78. package/components/identity.federation/operations/lib/decode.js +36 -0
  79. package/components/identity.federation/operations/lib/discovery.js +34 -0
  80. package/components/identity.federation/operations/lib/errors.js +45 -0
  81. package/components/identity.federation/operations/lib/exchange.js +90 -0
  82. package/components/identity.federation/operations/lib/index.js +5 -0
  83. package/components/identity.federation/operations/lib/jose.js +2 -0
  84. package/components/identity.federation/operations/lib/principal.js +14 -0
  85. package/components/identity.federation/operations/lib/resolve.js +13 -0
  86. package/components/identity.federation/operations/list.js +12 -0
  87. package/components/identity.federation/operations/types/Scheme.js +2 -0
  88. package/components/identity.federation/operations/types/configuration.js +2 -0
  89. package/components/identity.federation/operations/types/context.js +2 -0
  90. package/components/identity.federation/operations/types/entity.js +2 -0
  91. package/components/identity.federation/operations/types/index.js +5 -0
  92. package/components/identity.federation/package.json +8 -0
  93. package/components/identity.federation/source/authenticate.ts +51 -19
  94. package/components/identity.federation/source/create.ts +35 -17
  95. package/components/identity.federation/source/decode.ts +14 -0
  96. package/components/identity.federation/source/delete.ts +19 -0
  97. package/components/identity.federation/source/incept.ts +24 -0
  98. package/components/identity.federation/source/lib/Configuration.ts +39 -0
  99. package/components/identity.federation/source/lib/Ctx.ts +9 -0
  100. package/components/identity.federation/source/lib/Payload.ts +6 -0
  101. package/components/identity.federation/source/lib/decode.ts +44 -0
  102. package/components/identity.federation/source/lib/discovery.ts +50 -0
  103. package/components/identity.federation/source/lib/errors.ts +54 -0
  104. package/components/identity.federation/source/lib/exchange.ts +123 -0
  105. package/components/identity.federation/source/lib/index.ts +5 -0
  106. package/components/identity.federation/source/lib/jose.d.ts +1 -0
  107. package/components/identity.federation/source/lib/jose.js +1 -0
  108. package/components/identity.federation/source/lib/principal.ts +19 -0
  109. package/components/identity.federation/source/lib/resolve.ts +21 -0
  110. package/components/identity.federation/source/list.ts +21 -0
  111. package/components/identity.federation/source/types/Scheme.ts +1 -0
  112. package/components/identity.federation/source/types/configuration.ts +24 -0
  113. package/components/identity.federation/source/types/context.ts +45 -0
  114. package/components/identity.federation/source/types/entity.ts +9 -0
  115. package/components/identity.federation/source/types/index.ts +4 -0
  116. package/components/identity.federation/tsconfig.json +3 -2
  117. package/components/identity.federation/types/index.d.ts +3 -0
  118. package/components/identity.federation/types/toa.d.ts +128 -0
  119. package/components/identity.grants/manifest.toa.yaml +241 -0
  120. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  121. package/components/identity.grants/operations/authorize.js +53 -0
  122. package/components/identity.grants/operations/exchange.js +92 -0
  123. package/components/identity.grants/operations/lib/code.js +30 -0
  124. package/components/identity.grants/operations/lib/identify.js +15 -0
  125. package/components/identity.grants/operations/lib/index.js +3 -0
  126. package/components/identity.grants/operations/list.js +18 -0
  127. package/components/identity.grants/operations/revoke.js +26 -0
  128. package/components/identity.grants/source/authorize.ts +97 -0
  129. package/components/identity.grants/source/exchange.ts +134 -0
  130. package/components/identity.grants/source/lib/code.ts +51 -0
  131. package/components/identity.grants/source/lib/identify.ts +16 -0
  132. package/components/identity.grants/source/lib/index.ts +3 -0
  133. package/components/identity.grants/source/list.ts +28 -0
  134. package/components/identity.grants/source/revoke.ts +40 -0
  135. package/components/identity.grants/tsconfig.json +10 -0
  136. package/components/identity.grants/types/index.d.ts +61 -0
  137. package/components/identity.grants/types/toa.d.ts +109 -0
  138. package/components/identity.keys/manifest.toa.yaml +79 -0
  139. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  140. package/components/identity.keys/operations/create.js +12 -0
  141. package/components/identity.keys/operations/disable.js +5 -0
  142. package/components/identity.keys/operations/revoke.js +12 -0
  143. package/components/identity.keys/receivers/identity.bans.created.js +1 -0
  144. package/components/identity.keys/receivers/identity.bans.updated.js +1 -0
  145. package/components/identity.keys/receivers/identity.roles.deleted.js +1 -0
  146. package/components/identity.keys/source/create.ts +34 -0
  147. package/components/identity.keys/source/disable.ts +9 -0
  148. package/components/identity.keys/source/revoke.ts +30 -0
  149. package/components/identity.keys/tsconfig.json +10 -0
  150. package/components/identity.keys/types/index.d.ts +3 -0
  151. package/components/identity.keys/types/toa.d.ts +48 -0
  152. package/components/identity.otp/manifest.toa.yaml +96 -0
  153. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  154. package/components/identity.otp/operations/authenticate.js +44 -0
  155. package/components/identity.otp/operations/issue.js +19 -0
  156. package/components/identity.otp/operations/lib/Context.js +2 -0
  157. package/components/identity.otp/operations/lib/Entity.js +2 -0
  158. package/components/identity.otp/operations/lib/index.js +2 -0
  159. package/components/identity.otp/source/authenticate.ts +70 -0
  160. package/components/identity.otp/source/issue.ts +35 -0
  161. package/components/identity.otp/source/lib/Context.ts +17 -0
  162. package/components/identity.otp/source/lib/Entity.ts +6 -0
  163. package/components/identity.otp/source/lib/index.ts +1 -0
  164. package/components/identity.otp/tsconfig.json +10 -0
  165. package/components/identity.otp/types/index.d.ts +3 -0
  166. package/components/identity.otp/types/toa.d.ts +57 -0
  167. package/components/identity.passkeys/manifest.toa.yaml +302 -0
  168. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  169. package/components/identity.passkeys/operations/authenticate.js +32 -0
  170. package/components/identity.passkeys/operations/challenge.js +72 -0
  171. package/components/identity.passkeys/operations/create.js +57 -0
  172. package/components/identity.passkeys/operations/delete.js +9 -0
  173. package/components/identity.passkeys/operations/lib/const.js +2 -0
  174. package/components/identity.passkeys/operations/list.js +12 -0
  175. package/components/identity.passkeys/operations/types/Configuration.js +2 -0
  176. package/components/identity.passkeys/operations/types/Context.js +2 -0
  177. package/components/identity.passkeys/operations/types/Passkey.js +2 -0
  178. package/components/identity.passkeys/operations/types/index.js +2 -0
  179. package/components/identity.passkeys/operations/use.js +56 -0
  180. package/components/identity.passkeys/package.json +8 -0
  181. package/components/identity.passkeys/source/authenticate.ts +49 -0
  182. package/components/identity.passkeys/source/challenge.ts +119 -0
  183. package/components/identity.passkeys/source/create.ts +83 -0
  184. package/components/identity.passkeys/source/delete.ts +19 -0
  185. package/components/identity.passkeys/source/lib/const.ts +1 -0
  186. package/components/identity.passkeys/source/list.ts +21 -0
  187. package/components/identity.passkeys/source/types/Configuration.ts +6 -0
  188. package/components/identity.passkeys/source/types/Context.ts +17 -0
  189. package/components/identity.passkeys/source/types/Passkey.ts +12 -0
  190. package/components/identity.passkeys/source/types/index.ts +2 -0
  191. package/components/identity.passkeys/source/use.ts +81 -0
  192. package/components/identity.passkeys/tsconfig.json +10 -0
  193. package/components/identity.passkeys/types/index.d.ts +3 -0
  194. package/components/identity.passkeys/types/toa.d.ts +121 -0
  195. package/components/identity.roles/manifest.toa.yaml +55 -9
  196. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  197. package/components/identity.roles/operations/grant.js +21 -0
  198. package/components/identity.roles/operations/lib/Entity.js +2 -0
  199. package/components/identity.roles/operations/list.js +2 -6
  200. package/components/identity.roles/operations/principal.js +32 -7
  201. package/components/identity.roles/receivers/identity.federation.principal.js +4 -0
  202. package/components/identity.roles/source/grant.ts +38 -0
  203. package/components/identity.roles/source/lib/Entity.ts +5 -0
  204. package/components/identity.roles/source/list.ts +3 -5
  205. package/components/identity.roles/source/principal.ts +37 -9
  206. package/components/identity.roles/tsconfig.json +2 -1
  207. package/components/identity.roles/types/index.d.ts +3 -0
  208. package/components/identity.roles/types/toa.d.ts +44 -0
  209. package/components/identity.tokens/manifest.toa.yaml +241 -20
  210. package/components/identity.tokens/operations/authenticate.js +41 -21
  211. package/components/identity.tokens/operations/decrypt.js +140 -24
  212. package/components/identity.tokens/operations/encrypt.js +36 -15
  213. package/components/identity.tokens/operations/issue.js +56 -0
  214. package/components/identity.tokens/operations/lib/form.js +24 -0
  215. package/components/identity.tokens/operations/lib/index.js +4 -0
  216. package/components/identity.tokens/operations/lib/jose.js +2 -0
  217. package/components/identity.tokens/operations/lib/key.js +7 -0
  218. package/components/identity.tokens/operations/lib/pad.js +2 -0
  219. package/components/identity.tokens/operations/revoke.js +2 -6
  220. package/components/identity.tokens/package.json +10 -0
  221. package/components/identity.tokens/receivers/identity.bans.created.js +1 -0
  222. package/components/identity.tokens/receivers/identity.bans.updated.js +1 -3
  223. package/components/identity.tokens/source/authenticate.ts +45 -18
  224. package/components/identity.tokens/source/decrypt.ts +184 -22
  225. package/components/identity.tokens/source/encrypt.ts +49 -13
  226. package/components/identity.tokens/source/issue.ts +85 -0
  227. package/components/identity.tokens/source/lib/form.ts +27 -0
  228. package/components/identity.tokens/source/lib/index.ts +4 -0
  229. package/components/identity.tokens/source/lib/jose.d.ts +1 -0
  230. package/components/identity.tokens/source/lib/jose.js +1 -0
  231. package/components/identity.tokens/source/lib/key.ts +8 -0
  232. package/components/identity.tokens/source/lib/pad.ts +1 -0
  233. package/components/identity.tokens/source/revoke.ts +2 -2
  234. package/components/identity.tokens/tsconfig.json +2 -1
  235. package/components/identity.tokens/types/index.d.ts +71 -0
  236. package/components/identity.tokens/types/toa.d.ts +120 -0
  237. package/package.json +49 -29
  238. package/readme.md +49 -13
  239. package/schemas/io/input.cos.yaml +3 -0
  240. package/schemas/io/message.cos.yaml +5 -0
  241. package/schemas/io/output.cos.yaml +5 -0
  242. package/schemas/io/throttle.cos.yaml +81 -0
  243. package/schemas/octets/delete.cos.yaml +15 -2
  244. package/schemas/octets/get.cos.yaml +5 -0
  245. package/schemas/octets/put.cos.yaml +31 -0
  246. package/schemas/octets/workflow.cos.yaml +0 -1
  247. package/transpiled/Branch.d.ts +25 -1
  248. package/transpiled/Branch.js +14 -2
  249. package/transpiled/Branch.js.map +1 -1
  250. package/transpiled/Composition.d.ts +3 -4
  251. package/transpiled/Composition.js +13 -22
  252. package/transpiled/Composition.js.map +1 -1
  253. package/transpiled/Context.d.ts +8 -5
  254. package/transpiled/Context.js +1 -2
  255. package/transpiled/Directive.d.ts +38 -26
  256. package/transpiled/Directive.js +123 -38
  257. package/transpiled/Directive.js.map +1 -1
  258. package/transpiled/Discovery/Explorer.d.ts +11 -0
  259. package/transpiled/Discovery/Explorer.js +29 -0
  260. package/transpiled/Discovery/Explorer.js.map +1 -0
  261. package/transpiled/Discovery/Site.d.ts +43 -0
  262. package/transpiled/Discovery/Site.js +171 -0
  263. package/transpiled/Discovery/Site.js.map +1 -0
  264. package/transpiled/Discovery/index.d.ts +3 -0
  265. package/transpiled/Discovery/index.js +4 -0
  266. package/transpiled/Discovery/index.js.map +1 -0
  267. package/transpiled/Discovery/tree.d.ts +26 -0
  268. package/transpiled/Discovery/tree.js +50 -0
  269. package/transpiled/Discovery/tree.js.map +1 -0
  270. package/transpiled/Discovery/trunk.d.ts +13 -0
  271. package/transpiled/Discovery/trunk.js +29 -0
  272. package/transpiled/Discovery/trunk.js.map +1 -0
  273. package/transpiled/Endpoint.d.ts +34 -10
  274. package/transpiled/Endpoint.js +124 -16
  275. package/transpiled/Endpoint.js.map +1 -1
  276. package/transpiled/Factory.d.ts +8 -7
  277. package/transpiled/Factory.js +23 -62
  278. package/transpiled/Factory.js.map +1 -1
  279. package/transpiled/Gateway.d.ts +61 -12
  280. package/transpiled/Gateway.js +252 -72
  281. package/transpiled/Gateway.js.map +1 -1
  282. package/transpiled/HTTP/Context.d.ts +51 -0
  283. package/transpiled/HTTP/Context.js +110 -0
  284. package/transpiled/HTTP/Context.js.map +1 -0
  285. package/transpiled/HTTP/Probe.d.ts +26 -0
  286. package/transpiled/HTTP/Probe.js +80 -0
  287. package/transpiled/HTTP/Probe.js.map +1 -0
  288. package/transpiled/HTTP/Server.d.ts +52 -10
  289. package/transpiled/HTTP/Server.js +311 -113
  290. package/transpiled/HTTP/Server.js.map +1 -1
  291. package/transpiled/HTTP/Timing.d.ts +6 -0
  292. package/transpiled/HTTP/Timing.js +9 -0
  293. package/transpiled/HTTP/Timing.js.map +1 -0
  294. package/transpiled/HTTP/address.d.ts +7 -0
  295. package/transpiled/HTTP/address.js +14 -0
  296. package/transpiled/HTTP/address.js.map +1 -0
  297. package/transpiled/HTTP/exceptions.d.ts +25 -7
  298. package/transpiled/HTTP/exceptions.js +46 -31
  299. package/transpiled/HTTP/exceptions.js.map +1 -1
  300. package/transpiled/HTTP/formats/form.d.ts +9 -0
  301. package/transpiled/HTTP/formats/form.js +18 -0
  302. package/transpiled/HTTP/formats/form.js.map +1 -0
  303. package/transpiled/HTTP/formats/index.d.ts +10 -4
  304. package/transpiled/HTTP/formats/index.js +19 -35
  305. package/transpiled/HTTP/formats/index.js.map +1 -1
  306. package/transpiled/HTTP/formats/json.d.ts +1 -3
  307. package/transpiled/HTTP/formats/json.js +6 -12
  308. package/transpiled/HTTP/formats/json.js.map +1 -1
  309. package/transpiled/HTTP/formats/msgpack.d.ts +0 -2
  310. package/transpiled/HTTP/formats/msgpack.js +7 -12
  311. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  312. package/transpiled/HTTP/formats/text.d.ts +1 -3
  313. package/transpiled/HTTP/formats/text.js +6 -12
  314. package/transpiled/HTTP/formats/text.js.map +1 -1
  315. package/transpiled/HTTP/formats/yaml.d.ts +1 -3
  316. package/transpiled/HTTP/formats/yaml.js +26 -37
  317. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  318. package/transpiled/HTTP/index.d.ts +6 -3
  319. package/transpiled/HTTP/index.js +6 -19
  320. package/transpiled/HTTP/index.js.map +1 -1
  321. package/transpiled/HTTP/messages.d.ts +30 -22
  322. package/transpiled/HTTP/messages.js +171 -55
  323. package/transpiled/HTTP/messages.js.map +1 -1
  324. package/transpiled/HTTP/types.d.ts +37 -0
  325. package/transpiled/HTTP/types.js +2 -0
  326. package/transpiled/HTTP/types.js.map +1 -0
  327. package/transpiled/Interception.d.ts +7 -2
  328. package/transpiled/Interception.js +8 -6
  329. package/transpiled/Interception.js.map +1 -1
  330. package/transpiled/Introspection.d.ts +98 -0
  331. package/transpiled/Introspection.js +81 -0
  332. package/transpiled/Introspection.js.map +1 -0
  333. package/transpiled/MCP/Server.d.ts +41 -0
  334. package/transpiled/MCP/Server.js +191 -0
  335. package/transpiled/MCP/Server.js.map +1 -0
  336. package/transpiled/MCP/discover.d.ts +13 -0
  337. package/transpiled/MCP/discover.js +29 -0
  338. package/transpiled/MCP/discover.js.map +1 -0
  339. package/transpiled/MCP/errors.d.ts +24 -0
  340. package/transpiled/MCP/errors.js +67 -0
  341. package/transpiled/MCP/errors.js.map +1 -0
  342. package/transpiled/MCP/index.d.ts +1 -0
  343. package/transpiled/MCP/index.js +2 -0
  344. package/transpiled/MCP/index.js.map +1 -0
  345. package/transpiled/MCP/schema.d.ts +18 -0
  346. package/transpiled/MCP/schema.js +70 -0
  347. package/transpiled/MCP/schema.js.map +1 -0
  348. package/transpiled/MCP/tools.d.ts +31 -0
  349. package/transpiled/MCP/tools.js +109 -0
  350. package/transpiled/MCP/tools.js.map +1 -0
  351. package/transpiled/MCP/types.d.ts +66 -0
  352. package/transpiled/MCP/types.js +13 -0
  353. package/transpiled/MCP/types.js.map +1 -0
  354. package/transpiled/Mapping.d.ts +17 -6
  355. package/transpiled/Mapping.js +56 -27
  356. package/transpiled/Mapping.js.map +1 -1
  357. package/transpiled/Query.d.ts +30 -6
  358. package/transpiled/Query.js +151 -63
  359. package/transpiled/Query.js.map +1 -1
  360. package/transpiled/RPC/Context.d.ts +11 -0
  361. package/transpiled/RPC/Context.js +56 -0
  362. package/transpiled/RPC/Context.js.map +1 -0
  363. package/transpiled/RPC/Dispatcher.d.ts +19 -0
  364. package/transpiled/RPC/Dispatcher.js +103 -0
  365. package/transpiled/RPC/Dispatcher.js.map +1 -0
  366. package/transpiled/RPC/errors.d.ts +18 -0
  367. package/transpiled/RPC/errors.js +67 -0
  368. package/transpiled/RPC/errors.js.map +1 -0
  369. package/transpiled/RPC/index.d.ts +1 -0
  370. package/transpiled/RPC/index.js +2 -0
  371. package/transpiled/RPC/index.js.map +1 -0
  372. package/transpiled/RPC/names.d.ts +31 -0
  373. package/transpiled/RPC/names.js +121 -0
  374. package/transpiled/RPC/names.js.map +1 -0
  375. package/transpiled/RPC/types.d.ts +27 -0
  376. package/transpiled/RPC/types.js +8 -0
  377. package/transpiled/RPC/types.js.map +1 -0
  378. package/transpiled/RTD/Context.d.ts +10 -7
  379. package/transpiled/RTD/Context.js +1 -2
  380. package/transpiled/RTD/Directives.d.ts +85 -5
  381. package/transpiled/RTD/Directives.js +1 -2
  382. package/transpiled/RTD/Endpoint.d.ts +15 -6
  383. package/transpiled/RTD/Endpoint.js +1 -2
  384. package/transpiled/RTD/Match.d.ts +3 -5
  385. package/transpiled/RTD/Match.js +1 -2
  386. package/transpiled/RTD/Method.d.ts +16 -7
  387. package/transpiled/RTD/Method.js +12 -5
  388. package/transpiled/RTD/Method.js.map +1 -1
  389. package/transpiled/RTD/Node.d.ts +46 -10
  390. package/transpiled/RTD/Node.js +76 -21
  391. package/transpiled/RTD/Node.js.map +1 -1
  392. package/transpiled/RTD/Route.d.ts +8 -6
  393. package/transpiled/RTD/Route.js +40 -10
  394. package/transpiled/RTD/Route.js.map +1 -1
  395. package/transpiled/RTD/Tree.d.ts +17 -8
  396. package/transpiled/RTD/Tree.js +74 -13
  397. package/transpiled/RTD/Tree.js.map +1 -1
  398. package/transpiled/RTD/factory.d.ts +5 -6
  399. package/transpiled/RTD/factory.js +57 -16
  400. package/transpiled/RTD/factory.js.map +1 -1
  401. package/transpiled/RTD/index.d.ts +8 -8
  402. package/transpiled/RTD/index.js +8 -37
  403. package/transpiled/RTD/index.js.map +1 -1
  404. package/transpiled/RTD/segment.d.ts +8 -0
  405. package/transpiled/RTD/segment.js +21 -7
  406. package/transpiled/RTD/segment.js.map +1 -1
  407. package/transpiled/RTD/syntax/index.d.ts +1 -2
  408. package/transpiled/RTD/syntax/index.js +1 -18
  409. package/transpiled/RTD/syntax/index.js.map +1 -1
  410. package/transpiled/Remotes.d.ts +7 -7
  411. package/transpiled/Remotes.js +15 -16
  412. package/transpiled/Remotes.js.map +1 -1
  413. package/transpiled/Tenant.d.ts +15 -5
  414. package/transpiled/Tenant.js +38 -19
  415. package/transpiled/Tenant.js.map +1 -1
  416. package/transpiled/directives/auth/Anonymous.d.ts +17 -2
  417. package/transpiled/directives/auth/Anonymous.js +22 -9
  418. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  419. package/transpiled/directives/auth/Anyone.d.ts +10 -0
  420. package/transpiled/directives/auth/Anyone.js +17 -0
  421. package/transpiled/directives/auth/Anyone.js.map +1 -0
  422. package/transpiled/directives/auth/Assert.d.ts +9 -0
  423. package/transpiled/directives/auth/Assert.js +33 -0
  424. package/transpiled/directives/auth/Assert.js.map +1 -0
  425. package/transpiled/directives/auth/Authorization.d.ts +51 -10
  426. package/transpiled/directives/auth/Authorization.js +262 -84
  427. package/transpiled/directives/auth/Authorization.js.map +1 -1
  428. package/transpiled/directives/auth/Delegate.d.ts +17 -0
  429. package/transpiled/directives/auth/Delegate.js +42 -0
  430. package/transpiled/directives/auth/Delegate.js.map +1 -0
  431. package/transpiled/directives/auth/Echo.d.ts +6 -4
  432. package/transpiled/directives/auth/Echo.js +14 -9
  433. package/transpiled/directives/auth/Echo.js.map +1 -1
  434. package/transpiled/directives/auth/Federation.d.ts +21 -0
  435. package/transpiled/directives/auth/Federation.js +54 -0
  436. package/transpiled/directives/auth/Federation.js.map +1 -0
  437. package/transpiled/directives/auth/Id.d.ts +12 -3
  438. package/transpiled/directives/auth/Id.js +13 -5
  439. package/transpiled/directives/auth/Id.js.map +1 -1
  440. package/transpiled/directives/auth/Incept.d.ts +11 -6
  441. package/transpiled/directives/auth/Incept.js +74 -50
  442. package/transpiled/directives/auth/Incept.js.map +1 -1
  443. package/transpiled/directives/auth/Input.d.ts +15 -0
  444. package/transpiled/directives/auth/Input.js +49 -0
  445. package/transpiled/directives/auth/Input.js.map +1 -0
  446. package/transpiled/directives/auth/Role.d.ts +15 -3
  447. package/transpiled/directives/auth/Role.js +44 -24
  448. package/transpiled/directives/auth/Role.js.map +1 -1
  449. package/transpiled/directives/auth/Rule.d.ts +8 -5
  450. package/transpiled/directives/auth/Rule.js +23 -7
  451. package/transpiled/directives/auth/Rule.js.map +1 -1
  452. package/transpiled/directives/auth/Scheme.d.ts +4 -2
  453. package/transpiled/directives/auth/Scheme.js +11 -35
  454. package/transpiled/directives/auth/Scheme.js.map +1 -1
  455. package/transpiled/directives/auth/create.d.ts +2 -0
  456. package/transpiled/directives/auth/create.js +10 -0
  457. package/transpiled/directives/auth/create.js.map +1 -0
  458. package/transpiled/directives/auth/index.d.ts +1 -1
  459. package/transpiled/directives/auth/index.js +2 -5
  460. package/transpiled/directives/auth/index.js.map +1 -1
  461. package/transpiled/directives/auth/schemes.d.ts +26 -3
  462. package/transpiled/directives/auth/schemes.js +32 -8
  463. package/transpiled/directives/auth/schemes.js.map +1 -1
  464. package/transpiled/directives/auth/split.d.ts +1 -1
  465. package/transpiled/directives/auth/split.js +3 -30
  466. package/transpiled/directives/auth/split.js.map +1 -1
  467. package/transpiled/directives/auth/types.d.ts +42 -12
  468. package/transpiled/directives/auth/types.js +1 -2
  469. package/transpiled/directives/cache/Cache.d.ts +7 -7
  470. package/transpiled/directives/cache/Cache.js +54 -14
  471. package/transpiled/directives/cache/Cache.js.map +1 -1
  472. package/transpiled/directives/cache/Control.d.ts +6 -5
  473. package/transpiled/directives/cache/Control.js +34 -23
  474. package/transpiled/directives/cache/Control.js.map +1 -1
  475. package/transpiled/directives/cache/Exact.d.ts +1 -1
  476. package/transpiled/directives/cache/Exact.js +2 -6
  477. package/transpiled/directives/cache/Exact.js.map +1 -1
  478. package/transpiled/directives/cache/etag.d.ts +10 -0
  479. package/transpiled/directives/cache/etag.js +30 -0
  480. package/transpiled/directives/cache/etag.js.map +1 -0
  481. package/transpiled/directives/cache/index.d.ts +1 -1
  482. package/transpiled/directives/cache/index.js +2 -5
  483. package/transpiled/directives/cache/index.js.map +1 -1
  484. package/transpiled/directives/cache/types.d.ts +2 -2
  485. package/transpiled/directives/cache/types.js +1 -2
  486. package/transpiled/directives/cors/CORS.d.ts +11 -5
  487. package/transpiled/directives/cors/CORS.js +44 -20
  488. package/transpiled/directives/cors/CORS.js.map +1 -1
  489. package/transpiled/directives/cors/index.d.ts +1 -1
  490. package/transpiled/directives/cors/index.js +2 -5
  491. package/transpiled/directives/cors/index.js.map +1 -1
  492. package/transpiled/directives/dev/Development.d.ts +6 -6
  493. package/transpiled/directives/dev/Development.js +19 -15
  494. package/transpiled/directives/dev/Development.js.map +1 -1
  495. package/transpiled/directives/dev/Faulty.d.ts +8 -0
  496. package/transpiled/directives/dev/Faulty.js +20 -0
  497. package/transpiled/directives/dev/Faulty.js.map +1 -0
  498. package/transpiled/directives/dev/Sleep.d.ts +9 -0
  499. package/transpiled/directives/dev/Sleep.js +41 -0
  500. package/transpiled/directives/dev/Sleep.js.map +1 -0
  501. package/transpiled/directives/dev/Stub.d.ts +2 -2
  502. package/transpiled/directives/dev/Stub.js +1 -5
  503. package/transpiled/directives/dev/Stub.js.map +1 -1
  504. package/transpiled/directives/dev/Throw.d.ts +2 -2
  505. package/transpiled/directives/dev/Throw.js +1 -5
  506. package/transpiled/directives/dev/Throw.js.map +1 -1
  507. package/transpiled/directives/dev/index.d.ts +1 -1
  508. package/transpiled/directives/dev/index.js +2 -5
  509. package/transpiled/directives/dev/index.js.map +1 -1
  510. package/transpiled/directives/dev/types.d.ts +2 -2
  511. package/transpiled/directives/dev/types.js +1 -2
  512. package/transpiled/directives/flow/Compose.d.ts +9 -0
  513. package/transpiled/directives/flow/Compose.js +72 -0
  514. package/transpiled/directives/flow/Compose.js.map +1 -0
  515. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  516. package/transpiled/directives/flow/Fetch.js +51 -0
  517. package/transpiled/directives/flow/Fetch.js.map +1 -0
  518. package/transpiled/directives/flow/Flow.d.ts +10 -0
  519. package/transpiled/directives/flow/Flow.js +29 -0
  520. package/transpiled/directives/flow/Flow.js.map +1 -0
  521. package/transpiled/directives/flow/index.d.ts +2 -0
  522. package/transpiled/directives/flow/index.js +3 -0
  523. package/transpiled/directives/flow/index.js.map +1 -0
  524. package/transpiled/directives/flow/types.d.ts +6 -0
  525. package/transpiled/directives/flow/types.js +2 -0
  526. package/transpiled/directives/flow/types.js.map +1 -0
  527. package/transpiled/directives/help/Family.d.ts +28 -0
  528. package/transpiled/directives/help/Family.js +83 -0
  529. package/transpiled/directives/help/Family.js.map +1 -0
  530. package/transpiled/directives/help/Help.d.ts +22 -0
  531. package/transpiled/directives/help/Help.js +36 -0
  532. package/transpiled/directives/help/Help.js.map +1 -0
  533. package/transpiled/directives/help/Parameters.d.ts +18 -0
  534. package/transpiled/directives/help/Parameters.js +34 -0
  535. package/transpiled/directives/help/Parameters.js.map +1 -0
  536. package/transpiled/directives/help/described.d.ts +16 -0
  537. package/transpiled/directives/help/described.js +27 -0
  538. package/transpiled/directives/help/described.js.map +1 -0
  539. package/transpiled/directives/help/index.d.ts +22 -0
  540. package/transpiled/directives/help/index.js +34 -0
  541. package/transpiled/directives/help/index.js.map +1 -0
  542. package/transpiled/directives/index.d.ts +7 -3
  543. package/transpiled/directives/index.js +30 -11
  544. package/transpiled/directives/index.js.map +1 -1
  545. package/transpiled/directives/io/Directive.d.ts +13 -0
  546. package/transpiled/directives/io/Directive.js +2 -0
  547. package/transpiled/directives/io/Directive.js.map +1 -0
  548. package/transpiled/directives/io/IO.d.ts +28 -0
  549. package/transpiled/directives/io/IO.js +76 -0
  550. package/transpiled/directives/io/IO.js.map +1 -0
  551. package/transpiled/directives/io/Input.d.ts +12 -0
  552. package/transpiled/directives/io/Input.js +43 -0
  553. package/transpiled/directives/io/Input.js.map +1 -0
  554. package/transpiled/directives/io/Message.d.ts +1 -0
  555. package/transpiled/directives/io/Message.js +2 -0
  556. package/transpiled/directives/io/Message.js.map +1 -0
  557. package/transpiled/directives/io/Output.d.ts +17 -0
  558. package/transpiled/directives/io/Output.js +60 -0
  559. package/transpiled/directives/io/Output.js.map +1 -0
  560. package/transpiled/directives/io/Status.d.ts +19 -0
  561. package/transpiled/directives/io/Status.js +35 -0
  562. package/transpiled/directives/io/Status.js.map +1 -0
  563. package/transpiled/directives/io/Throttle.d.ts +11 -0
  564. package/transpiled/directives/io/Throttle.js +22 -0
  565. package/transpiled/directives/io/Throttle.js.map +1 -0
  566. package/transpiled/directives/io/index.d.ts +2 -0
  567. package/transpiled/directives/io/index.js +3 -0
  568. package/transpiled/directives/io/index.js.map +1 -0
  569. package/transpiled/directives/io/lib/throttle/Configuration.d.ts +26 -0
  570. package/transpiled/directives/io/lib/throttle/Configuration.js +31 -0
  571. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -0
  572. package/transpiled/directives/io/lib/throttle/Keys.d.ts +14 -0
  573. package/transpiled/directives/io/lib/throttle/Keys.js +32 -0
  574. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -0
  575. package/transpiled/directives/io/lib/throttle/Quotas.d.ts +70 -0
  576. package/transpiled/directives/io/lib/throttle/Quotas.js +142 -0
  577. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -0
  578. package/transpiled/directives/io/lib/throttle/Sync.d.ts +29 -0
  579. package/transpiled/directives/io/lib/throttle/Sync.js +70 -0
  580. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -0
  581. package/transpiled/directives/io/lib/throttle/Warning.d.ts +11 -0
  582. package/transpiled/directives/io/lib/throttle/Warning.js +24 -0
  583. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -0
  584. package/transpiled/directives/io/lib/throttle/components/Component.d.ts +6 -0
  585. package/transpiled/directives/io/lib/throttle/components/Component.js +2 -0
  586. package/transpiled/directives/io/lib/throttle/components/Component.js.map +1 -0
  587. package/transpiled/directives/io/lib/throttle/components/IP.d.ts +14 -0
  588. package/transpiled/directives/io/lib/throttle/components/IP.js +24 -0
  589. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -0
  590. package/transpiled/directives/io/lib/throttle/components/Identity.d.ts +11 -0
  591. package/transpiled/directives/io/lib/throttle/components/Identity.js +12 -0
  592. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -0
  593. package/transpiled/directives/io/lib/throttle/components/Path.d.ts +5 -0
  594. package/transpiled/directives/io/lib/throttle/components/Path.js +6 -0
  595. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -0
  596. package/transpiled/directives/io/lib/throttle/components/Route.d.ts +12 -0
  597. package/transpiled/directives/io/lib/throttle/components/Route.js +16 -0
  598. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -0
  599. package/transpiled/directives/io/lib/throttle/components/Segment.d.ts +9 -0
  600. package/transpiled/directives/io/lib/throttle/components/Segment.js +13 -0
  601. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -0
  602. package/transpiled/directives/io/lib/throttle/components/index.d.ts +5 -0
  603. package/transpiled/directives/io/lib/throttle/components/index.js +13 -0
  604. package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -0
  605. package/transpiled/directives/io/lib/throttle/conditions/Condition.d.ts +4 -0
  606. package/transpiled/directives/io/lib/throttle/conditions/Condition.js +2 -0
  607. package/transpiled/directives/io/lib/throttle/conditions/Condition.js.map +1 -0
  608. package/transpiled/directives/io/lib/throttle/conditions/Status.d.ts +7 -0
  609. package/transpiled/directives/io/lib/throttle/conditions/Status.js +12 -0
  610. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -0
  611. package/transpiled/directives/io/lib/throttle/conditions/index.d.ts +5 -0
  612. package/transpiled/directives/io/lib/throttle/conditions/index.js +5 -0
  613. package/transpiled/directives/io/lib/throttle/conditions/index.js.map +1 -0
  614. package/transpiled/directives/io/lib/throttle/index.d.ts +4 -0
  615. package/transpiled/directives/io/lib/throttle/index.js +5 -0
  616. package/transpiled/directives/io/lib/throttle/index.js.map +1 -0
  617. package/transpiled/directives/io/schemas.d.ts +9 -0
  618. package/transpiled/directives/io/schemas.js +9 -0
  619. package/transpiled/directives/io/schemas.js.map +1 -0
  620. package/transpiled/directives/map/Authority.d.ts +6 -0
  621. package/transpiled/directives/map/Authority.js +12 -0
  622. package/transpiled/directives/map/Authority.js.map +1 -0
  623. package/transpiled/directives/map/Buffer.d.ts +6 -0
  624. package/transpiled/directives/map/Buffer.js +12 -0
  625. package/transpiled/directives/map/Buffer.js.map +1 -0
  626. package/transpiled/directives/map/Claims.d.ts +10 -0
  627. package/transpiled/directives/map/Claims.js +38 -0
  628. package/transpiled/directives/map/Claims.js.map +1 -0
  629. package/transpiled/directives/map/Directive.d.ts +3 -0
  630. package/transpiled/directives/map/Directive.js +2 -0
  631. package/transpiled/directives/map/Directive.js.map +1 -0
  632. package/transpiled/directives/map/Headers.d.ts +14 -0
  633. package/transpiled/directives/map/Headers.js +44 -0
  634. package/transpiled/directives/map/Headers.js.map +1 -0
  635. package/transpiled/directives/map/Instance.d.ts +15 -0
  636. package/transpiled/directives/map/Instance.js +27 -0
  637. package/transpiled/directives/map/Instance.js.map +1 -0
  638. package/transpiled/directives/map/Language.d.ts +10 -0
  639. package/transpiled/directives/map/Language.js +31 -0
  640. package/transpiled/directives/map/Language.js.map +1 -0
  641. package/transpiled/directives/map/Languages.d.ts +4 -0
  642. package/transpiled/directives/map/Languages.js +11 -0
  643. package/transpiled/directives/map/Languages.js.map +1 -0
  644. package/transpiled/directives/map/Map.d.ts +15 -0
  645. package/transpiled/directives/map/Map.js +60 -0
  646. package/transpiled/directives/map/Map.js.map +1 -0
  647. package/transpiled/directives/map/Mapping.d.ts +26 -0
  648. package/transpiled/directives/map/Mapping.js +29 -0
  649. package/transpiled/directives/map/Mapping.js.map +1 -0
  650. package/transpiled/directives/map/Properties.d.ts +9 -0
  651. package/transpiled/directives/map/Properties.js +10 -0
  652. package/transpiled/directives/map/Properties.js.map +1 -0
  653. package/transpiled/directives/map/Segments.d.ts +9 -0
  654. package/transpiled/directives/map/Segments.js +34 -0
  655. package/transpiled/directives/map/Segments.js.map +1 -0
  656. package/transpiled/directives/map/index.d.ts +2 -0
  657. package/transpiled/directives/map/index.js +3 -0
  658. package/transpiled/directives/map/index.js.map +1 -0
  659. package/transpiled/directives/mcp/MCP.d.ts +18 -0
  660. package/transpiled/directives/mcp/MCP.js +25 -0
  661. package/transpiled/directives/mcp/MCP.js.map +1 -0
  662. package/transpiled/directives/mcp/Tool.d.ts +12 -0
  663. package/transpiled/directives/mcp/Tool.js +24 -0
  664. package/transpiled/directives/mcp/Tool.js.map +1 -0
  665. package/transpiled/directives/mcp/index.d.ts +4 -0
  666. package/transpiled/directives/mcp/index.js +4 -0
  667. package/transpiled/directives/mcp/index.js.map +1 -0
  668. package/transpiled/directives/oauth/Discovery.d.ts +23 -0
  669. package/transpiled/directives/oauth/Discovery.js +55 -0
  670. package/transpiled/directives/oauth/Discovery.js.map +1 -0
  671. package/transpiled/directives/oauth/documents.d.ts +9 -0
  672. package/transpiled/directives/oauth/documents.js +82 -0
  673. package/transpiled/directives/oauth/documents.js.map +1 -0
  674. package/transpiled/directives/oauth/index.d.ts +2 -0
  675. package/transpiled/directives/oauth/index.js +3 -0
  676. package/transpiled/directives/oauth/index.js.map +1 -0
  677. package/transpiled/directives/octets/Context.d.ts +5 -5
  678. package/transpiled/directives/octets/Context.js +6 -31
  679. package/transpiled/directives/octets/Context.js.map +1 -1
  680. package/transpiled/directives/octets/Delete.d.ts +13 -7
  681. package/transpiled/directives/octets/Delete.js +56 -51
  682. package/transpiled/directives/octets/Delete.js.map +1 -1
  683. package/transpiled/directives/octets/Directive.d.ts +14 -0
  684. package/transpiled/directives/octets/Directive.js +4 -0
  685. package/transpiled/directives/octets/Directive.js.map +1 -0
  686. package/transpiled/directives/octets/Get.d.ts +17 -0
  687. package/transpiled/directives/octets/Get.js +69 -0
  688. package/transpiled/directives/octets/Get.js.map +1 -0
  689. package/transpiled/directives/octets/Octets.d.ts +10 -7
  690. package/transpiled/directives/octets/Octets.js +29 -28
  691. package/transpiled/directives/octets/Octets.js.map +1 -1
  692. package/transpiled/directives/octets/Put.d.ts +33 -0
  693. package/transpiled/directives/octets/Put.js +84 -0
  694. package/transpiled/directives/octets/Put.js.map +1 -0
  695. package/transpiled/directives/octets/Workflow.d.ts +8 -7
  696. package/transpiled/directives/octets/Workflow.js +21 -36
  697. package/transpiled/directives/octets/Workflow.js.map +1 -1
  698. package/transpiled/directives/octets/bytes.d.ts +1 -0
  699. package/transpiled/directives/octets/bytes.js +14 -0
  700. package/transpiled/directives/octets/bytes.js.map +1 -0
  701. package/transpiled/directives/octets/index.d.ts +1 -1
  702. package/transpiled/directives/octets/index.js +2 -5
  703. package/transpiled/directives/octets/index.js.map +1 -1
  704. package/transpiled/directives/octets/schemas.d.ts +6 -10
  705. package/transpiled/directives/octets/schemas.js +8 -17
  706. package/transpiled/directives/octets/schemas.js.map +1 -1
  707. package/transpiled/directives/octets/types.d.ts +3 -6
  708. package/transpiled/directives/octets/types.js +1 -2
  709. package/transpiled/directives/octets/workflows/Execution.d.ts +22 -4
  710. package/transpiled/directives/octets/workflows/Execution.js +69 -15
  711. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  712. package/transpiled/directives/octets/workflows/Workflow.d.ts +10 -5
  713. package/transpiled/directives/octets/workflows/Workflow.js +16 -14
  714. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  715. package/transpiled/directives/octets/workflows/index.d.ts +2 -1
  716. package/transpiled/directives/octets/workflows/index.js +1 -5
  717. package/transpiled/directives/octets/workflows/index.js.map +1 -1
  718. package/transpiled/directives/require/Directive.d.ts +4 -0
  719. package/transpiled/directives/require/Directive.js +2 -0
  720. package/transpiled/directives/require/Directive.js.map +1 -0
  721. package/transpiled/directives/require/Headers.d.ts +7 -0
  722. package/transpiled/directives/require/Headers.js +15 -0
  723. package/transpiled/directives/require/Headers.js.map +1 -0
  724. package/transpiled/directives/require/Require.d.ts +9 -0
  725. package/transpiled/directives/require/Require.js +20 -0
  726. package/transpiled/directives/require/Require.js.map +1 -0
  727. package/transpiled/directives/require/index.d.ts +2 -0
  728. package/transpiled/directives/require/index.js +3 -0
  729. package/transpiled/directives/require/index.js.map +1 -0
  730. package/transpiled/discovery.js +1 -2
  731. package/transpiled/exceptions.d.ts +3 -2
  732. package/transpiled/exceptions.js +31 -36
  733. package/transpiled/exceptions.js.map +1 -1
  734. package/transpiled/index.d.ts +5 -5
  735. package/transpiled/index.js +2 -11
  736. package/transpiled/index.js.map +1 -1
  737. package/transpiled/io.d.ts +2 -2
  738. package/transpiled/io.js +1 -2
  739. package/transpiled/root.d.ts +1 -1
  740. package/transpiled/root.js +26 -10
  741. package/transpiled/root.js.map +1 -1
  742. package/transpiled/service.d.ts +7 -0
  743. package/transpiled/service.js +74 -0
  744. package/transpiled/service.js.map +1 -0
  745. package/transpiled/userland.d.ts +39 -0
  746. package/transpiled/userland.js +7 -0
  747. package/transpiled/userland.js.map +1 -0
  748. package/ui/dist/_app/env.js +1 -0
  749. package/ui/dist/_app/immutable/assets/0.DKJjMwRs.css +2 -0
  750. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  751. package/ui/dist/_app/immutable/assets/ui.DWW-43mU.css +1 -0
  752. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  753. package/ui/dist/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  754. package/ui/dist/_app/immutable/chunks/Bu6-PFR2.js +88 -0
  755. package/ui/dist/_app/immutable/chunks/C_DmHQYW.js +6 -0
  756. package/ui/dist/_app/immutable/chunks/CxYJ7ZeC.js +1 -0
  757. package/ui/dist/_app/immutable/chunks/DWKNKsnY.js +1 -0
  758. package/ui/dist/_app/immutable/chunks/xihTtKlq.js +1 -0
  759. package/ui/dist/_app/immutable/entry/app.BGsFlGMF.js +2 -0
  760. package/ui/dist/_app/immutable/entry/start.Dy23hery.js +1 -0
  761. package/ui/dist/_app/immutable/nodes/0.CoZD8TUK.js +1 -0
  762. package/ui/dist/_app/immutable/nodes/1.CK_wvdhC.js +1 -0
  763. package/ui/dist/_app/immutable/nodes/2.C8Ba-vjq.js +8 -0
  764. package/ui/dist/_app/immutable/nodes/3.DMVojOYg.js +1 -0
  765. package/ui/dist/_app/immutable/nodes/4.Bbw5GORo.js +1 -0
  766. package/ui/dist/_app/immutable/nodes/5.B1Jp9o4B.js +1 -0
  767. package/ui/dist/_app/immutable/nodes/6.DeLSCU5t.js +1 -0
  768. package/ui/dist/_app/version.json +1 -0
  769. package/ui/dist/apple-touch-icon.png +0 -0
  770. package/ui/dist/favicon-96x96.png +0 -0
  771. package/ui/dist/favicon.ico +0 -0
  772. package/ui/dist/index.html +66 -0
  773. package/components/context.toa.yaml +0 -27
  774. package/components/identity.basic/operations/authenticate.d.ts +0 -9
  775. package/components/identity.basic/operations/authenticate.js.map +0 -1
  776. package/components/identity.basic/operations/create.d.ts +0 -10
  777. package/components/identity.basic/operations/create.js +0 -10
  778. package/components/identity.basic/operations/create.js.map +0 -1
  779. package/components/identity.basic/operations/transit.d.ts +0 -12
  780. package/components/identity.basic/operations/transit.js.map +0 -1
  781. package/components/identity.basic/operations/tsconfig.tsbuildinfo +0 -1
  782. package/components/identity.basic/operations/types.d.ts +0 -38
  783. package/components/identity.basic/operations/types.js +0 -3
  784. package/components/identity.basic/operations/types.js.map +0 -1
  785. package/components/identity.basic/source/create.ts +0 -18
  786. package/components/identity.basic/source/types.ts +0 -42
  787. package/components/identity.federation/operations/authenticate.d.ts +0 -3
  788. package/components/identity.federation/operations/authenticate.js.map +0 -1
  789. package/components/identity.federation/operations/create.d.ts +0 -10
  790. package/components/identity.federation/operations/create.js.map +0 -1
  791. package/components/identity.federation/operations/lib/assertions-as-values.d.ts +0 -4
  792. package/components/identity.federation/operations/lib/assertions-as-values.js +0 -45
  793. package/components/identity.federation/operations/lib/assertions-as-values.js.map +0 -1
  794. package/components/identity.federation/operations/lib/jwt.d.ts +0 -20
  795. package/components/identity.federation/operations/lib/jwt.js +0 -136
  796. package/components/identity.federation/operations/lib/jwt.js.map +0 -1
  797. package/components/identity.federation/operations/schemas.d.ts +0 -59
  798. package/components/identity.federation/operations/schemas.js +0 -9
  799. package/components/identity.federation/operations/schemas.js.map +0 -1
  800. package/components/identity.federation/operations/tsconfig.tsbuildinfo +0 -1
  801. package/components/identity.federation/operations/types.d.ts +0 -51
  802. package/components/identity.federation/operations/types.js +0 -3
  803. package/components/identity.federation/operations/types.js.map +0 -1
  804. package/components/identity.federation/source/lib/assertions-as-values.ts +0 -19
  805. package/components/identity.federation/source/lib/jwt.test.ts +0 -56
  806. package/components/identity.federation/source/lib/jwt.ts +0 -171
  807. package/components/identity.federation/source/schemas.ts +0 -61
  808. package/components/identity.federation/source/types.ts +0 -56
  809. package/components/identity.roles/operations/list.d.ts +0 -5
  810. package/components/identity.roles/operations/list.js.map +0 -1
  811. package/components/identity.roles/operations/principal.d.ts +0 -15
  812. package/components/identity.roles/operations/principal.js.map +0 -1
  813. package/components/identity.roles/operations/tsconfig.tsbuildinfo +0 -1
  814. package/components/identity.tokens/operations/authenticate.d.ts +0 -9
  815. package/components/identity.tokens/operations/authenticate.js.map +0 -1
  816. package/components/identity.tokens/operations/decrypt.d.ts +0 -3
  817. package/components/identity.tokens/operations/decrypt.js.map +0 -1
  818. package/components/identity.tokens/operations/encrypt.d.ts +0 -8
  819. package/components/identity.tokens/operations/encrypt.js.map +0 -1
  820. package/components/identity.tokens/operations/revoke.d.ts +0 -2
  821. package/components/identity.tokens/operations/revoke.js.map +0 -1
  822. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +0 -1
  823. package/components/identity.tokens/operations/types.d.ts +0 -40
  824. package/components/identity.tokens/operations/types.js +0 -3
  825. package/components/identity.tokens/operations/types.js.map +0 -1
  826. package/components/identity.tokens/source/authenticate.test.ts +0 -56
  827. package/components/identity.tokens/source/decrypt.test.ts +0 -59
  828. package/components/identity.tokens/source/encrypt.test.ts +0 -35
  829. package/components/identity.tokens/source/types.ts +0 -48
  830. package/components/octets.storage/manifest.toa.yaml +0 -27
  831. package/components/octets.storage/operations/delete.js +0 -7
  832. package/components/octets.storage/operations/fetch.js +0 -46
  833. package/components/octets.storage/operations/get.js +0 -7
  834. package/components/octets.storage/operations/list.js +0 -7
  835. package/components/octets.storage/operations/permute.js +0 -7
  836. package/components/octets.storage/operations/store.js +0 -11
  837. package/cucumber.js +0 -7
  838. package/documentation/.assets/ia3-dark.jpg +0 -0
  839. package/documentation/.assets/ia3-light.jpg +0 -0
  840. package/documentation/.assets/overview-dark.jpg +0 -0
  841. package/documentation/.assets/overview-light.jpg +0 -0
  842. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  843. package/documentation/.assets/role-scopes-light.jpg +0 -0
  844. package/documentation/.assets/rtd-dark.jpg +0 -0
  845. package/documentation/.assets/rtd-light.jpg +0 -0
  846. package/documentation/access.md +0 -255
  847. package/documentation/cache.md +0 -42
  848. package/documentation/components.md +0 -306
  849. package/documentation/identity.md +0 -163
  850. package/documentation/notes/sse.md +0 -71
  851. package/documentation/octets.md +0 -261
  852. package/documentation/protocol.md +0 -82
  853. package/documentation/query.md +0 -226
  854. package/documentation/tree.md +0 -165
  855. package/documentation/vary.md +0 -69
  856. package/features/access.feature +0 -449
  857. package/features/annotation.feature +0 -30
  858. package/features/body.feature +0 -45
  859. package/features/cache.feature +0 -160
  860. package/features/cors.feature +0 -72
  861. package/features/directives.feature +0 -56
  862. package/features/dynamic.feature +0 -99
  863. package/features/errors.feature +0 -211
  864. package/features/identity.basic.feature +0 -278
  865. package/features/identity.feature +0 -77
  866. package/features/identity.federation.feature +0 -155
  867. package/features/identity.roles.feature +0 -51
  868. package/features/identity.tokens.feature +0 -119
  869. package/features/octets.entries.feature +0 -121
  870. package/features/octets.feature +0 -269
  871. package/features/octets.meta.feature +0 -65
  872. package/features/octets.workflows.feature +0 -286
  873. package/features/queries.feature +0 -214
  874. package/features/response.feature +0 -65
  875. package/features/routes.feature +0 -126
  876. package/features/steps/Captures.ts +0 -6
  877. package/features/steps/Common.ts +0 -10
  878. package/features/steps/Components.ts +0 -55
  879. package/features/steps/Database.ts +0 -58
  880. package/features/steps/Gateway.ts +0 -112
  881. package/features/steps/HTTP.ts +0 -74
  882. package/features/steps/IdP.ts +0 -149
  883. package/features/steps/Parameters.ts +0 -21
  884. package/features/steps/Workspace.ts +0 -41
  885. package/features/steps/components/echo/manifest.toa.yaml +0 -9
  886. package/features/steps/components/echo/operations/affect.js +0 -7
  887. package/features/steps/components/echo/operations/compute.js +0 -7
  888. package/features/steps/components/echo/operations/error.js +0 -11
  889. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  890. package/features/steps/components/greeter/operations/greet.js +0 -7
  891. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -18
  892. package/features/steps/components/octets.tester/operations/bar.js +0 -12
  893. package/features/steps/components/octets.tester/operations/baz.js +0 -11
  894. package/features/steps/components/octets.tester/operations/concat.js +0 -7
  895. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  896. package/features/steps/components/octets.tester/operations/echo.js +0 -7
  897. package/features/steps/components/octets.tester/operations/err.js +0 -16
  898. package/features/steps/components/octets.tester/operations/foo.js +0 -7
  899. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  900. package/features/steps/components/pots/manifest.toa.yaml +0 -20
  901. package/features/steps/components/sequences/manifest.toa.yaml +0 -10
  902. package/features/steps/components/sequences/operations/numbers.js +0 -7
  903. package/features/steps/components/sequences/operations/tokens.js +0 -16
  904. package/features/steps/components/users/manifest.toa.yaml +0 -14
  905. package/features/steps/components/users.properties/manifest.toa.yaml +0 -13
  906. package/features/steps/tsconfig.json +0 -9
  907. package/features/streams.feature +0 -30
  908. package/features/vary.feature +0 -150
  909. package/schemas/annotation.cos.yaml +0 -5
  910. package/schemas/directive.cos.yaml +0 -3
  911. package/schemas/method.cos.yaml +0 -8
  912. package/schemas/node.cos.yaml +0 -5
  913. package/schemas/octets/context.cos.yaml +0 -1
  914. package/schemas/octets/fetch.cos.yaml +0 -3
  915. package/schemas/octets/list.cos.yaml +0 -2
  916. package/schemas/octets/permute.cos.yaml +0 -1
  917. package/schemas/octets/store.cos.yaml +0 -3
  918. package/schemas/query.cos.yaml +0 -17
  919. package/schemas/querystring.cos.yaml +0 -5
  920. package/schemas/range.cos.yaml +0 -2
  921. package/schemas/route.cos.yaml +0 -2
  922. package/source/Annotation.ts +0 -7
  923. package/source/Branch.ts +0 -8
  924. package/source/Composition.ts +0 -57
  925. package/source/Context.ts +0 -6
  926. package/source/Directive.test.ts +0 -97
  927. package/source/Directive.ts +0 -123
  928. package/source/Endpoint.ts +0 -59
  929. package/source/Factory.ts +0 -52
  930. package/source/Gateway.ts +0 -112
  931. package/source/HTTP/Server.fixtures.ts +0 -40
  932. package/source/HTTP/Server.test.ts +0 -126
  933. package/source/HTTP/Server.ts +0 -193
  934. package/source/HTTP/exceptions.ts +0 -67
  935. package/source/HTTP/formats/index.ts +0 -22
  936. package/source/HTTP/formats/json.ts +0 -16
  937. package/source/HTTP/formats/msgpack.ts +0 -16
  938. package/source/HTTP/formats/text.ts +0 -12
  939. package/source/HTTP/formats/yaml.ts +0 -17
  940. package/source/HTTP/index.ts +0 -3
  941. package/source/HTTP/messages.test.ts +0 -70
  942. package/source/HTTP/messages.ts +0 -126
  943. package/source/Interception.ts +0 -24
  944. package/source/Mapping.ts +0 -51
  945. package/source/Query.test.ts +0 -37
  946. package/source/Query.ts +0 -105
  947. package/source/RTD/Context.ts +0 -16
  948. package/source/RTD/Directives.ts +0 -9
  949. package/source/RTD/Endpoint.ts +0 -11
  950. package/source/RTD/Match.ts +0 -16
  951. package/source/RTD/Method.ts +0 -24
  952. package/source/RTD/Node.ts +0 -85
  953. package/source/RTD/Route.ts +0 -59
  954. package/source/RTD/Tree.ts +0 -57
  955. package/source/RTD/factory.ts +0 -47
  956. package/source/RTD/index.ts +0 -8
  957. package/source/RTD/segment.test.ts +0 -32
  958. package/source/RTD/segment.ts +0 -26
  959. package/source/RTD/syntax/index.ts +0 -2
  960. package/source/RTD/syntax/parse.test.ts +0 -188
  961. package/source/RTD/syntax/parse.ts +0 -154
  962. package/source/RTD/syntax/types.ts +0 -48
  963. package/source/Remotes.test.ts +0 -42
  964. package/source/Remotes.ts +0 -30
  965. package/source/Tenant.ts +0 -43
  966. package/source/deployment.ts +0 -48
  967. package/source/directives/auth/Anonymous.ts +0 -14
  968. package/source/directives/auth/Authorization.ts +0 -144
  969. package/source/directives/auth/Echo.ts +0 -12
  970. package/source/directives/auth/Id.ts +0 -19
  971. package/source/directives/auth/Incept.ts +0 -42
  972. package/source/directives/auth/Role.test.ts +0 -62
  973. package/source/directives/auth/Role.ts +0 -56
  974. package/source/directives/auth/Rule.ts +0 -28
  975. package/source/directives/auth/Scheme.ts +0 -26
  976. package/source/directives/auth/index.ts +0 -3
  977. package/source/directives/auth/schemes.ts +0 -9
  978. package/source/directives/auth/split.ts +0 -15
  979. package/source/directives/auth/types.ts +0 -40
  980. package/source/directives/cache/Cache.ts +0 -35
  981. package/source/directives/cache/Control.ts +0 -59
  982. package/source/directives/cache/Exact.ts +0 -7
  983. package/source/directives/cache/index.ts +0 -3
  984. package/source/directives/cache/types.ts +0 -9
  985. package/source/directives/cors/CORS.ts +0 -54
  986. package/source/directives/cors/index.ts +0 -3
  987. package/source/directives/dev/Development.ts +0 -35
  988. package/source/directives/dev/Stub.ts +0 -14
  989. package/source/directives/dev/Throw.ts +0 -14
  990. package/source/directives/dev/index.ts +0 -3
  991. package/source/directives/dev/types.ts +0 -5
  992. package/source/directives/index.ts +0 -11
  993. package/source/directives/octets/Context.ts +0 -18
  994. package/source/directives/octets/Delete.ts +0 -73
  995. package/source/directives/octets/Fetch.ts +0 -84
  996. package/source/directives/octets/List.ts +0 -62
  997. package/source/directives/octets/Octets.ts +0 -71
  998. package/source/directives/octets/Permute.ts +0 -37
  999. package/source/directives/octets/Store.ts +0 -116
  1000. package/source/directives/octets/Workflow.ts +0 -41
  1001. package/source/directives/octets/index.ts +0 -3
  1002. package/source/directives/octets/schemas.test.ts +0 -21
  1003. package/source/directives/octets/schemas.ts +0 -19
  1004. package/source/directives/octets/types.ts +0 -14
  1005. package/source/directives/octets/workflows/Execution.ts +0 -76
  1006. package/source/directives/octets/workflows/Workflow.ts +0 -37
  1007. package/source/directives/octets/workflows/index.ts +0 -1
  1008. package/source/directives/vary/Directive.ts +0 -6
  1009. package/source/directives/vary/Embed.ts +0 -62
  1010. package/source/directives/vary/Properties.ts +0 -17
  1011. package/source/directives/vary/Vary.ts +0 -48
  1012. package/source/directives/vary/embeddings/Embedding.ts +0 -6
  1013. package/source/directives/vary/embeddings/Header.ts +0 -30
  1014. package/source/directives/vary/embeddings/Language.ts +0 -31
  1015. package/source/directives/vary/embeddings/index.ts +0 -11
  1016. package/source/directives/vary/index.ts +0 -3
  1017. package/source/discovery.ts +0 -1
  1018. package/source/exceptions.ts +0 -17
  1019. package/source/index.test.ts +0 -9
  1020. package/source/index.ts +0 -6
  1021. package/source/io.ts +0 -4
  1022. package/source/manifest.test.ts +0 -51
  1023. package/source/manifest.ts +0 -51
  1024. package/source/root.ts +0 -38
  1025. package/source/schemas.ts +0 -13
  1026. package/transpiled/Annotation.d.ts +0 -7
  1027. package/transpiled/Annotation.js +0 -3
  1028. package/transpiled/Annotation.js.map +0 -1
  1029. package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
  1030. package/transpiled/HTTP/Server.fixtures.js +0 -31
  1031. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  1032. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  1033. package/transpiled/RTD/syntax/parse.js +0 -128
  1034. package/transpiled/RTD/syntax/parse.js.map +0 -1
  1035. package/transpiled/RTD/syntax/types.d.ts +0 -41
  1036. package/transpiled/RTD/syntax/types.js +0 -5
  1037. package/transpiled/RTD/syntax/types.js.map +0 -1
  1038. package/transpiled/deployment.d.ts +0 -3
  1039. package/transpiled/deployment.js +0 -66
  1040. package/transpiled/deployment.js.map +0 -1
  1041. package/transpiled/directives/octets/Fetch.d.ts +0 -17
  1042. package/transpiled/directives/octets/Fetch.js +0 -76
  1043. package/transpiled/directives/octets/Fetch.js.map +0 -1
  1044. package/transpiled/directives/octets/List.d.ts +0 -15
  1045. package/transpiled/directives/octets/List.js +0 -65
  1046. package/transpiled/directives/octets/List.js.map +0 -1
  1047. package/transpiled/directives/octets/Permute.d.ts +0 -10
  1048. package/transpiled/directives/octets/Permute.js +0 -51
  1049. package/transpiled/directives/octets/Permute.js.map +0 -1
  1050. package/transpiled/directives/octets/Store.d.ts +0 -23
  1051. package/transpiled/directives/octets/Store.js +0 -88
  1052. package/transpiled/directives/octets/Store.js.map +0 -1
  1053. package/transpiled/directives/vary/Directive.d.ts +0 -5
  1054. package/transpiled/directives/vary/Directive.js +0 -3
  1055. package/transpiled/directives/vary/Directive.js.map +0 -1
  1056. package/transpiled/directives/vary/Embed.d.ts +0 -10
  1057. package/transpiled/directives/vary/Embed.js +0 -49
  1058. package/transpiled/directives/vary/Embed.js.map +0 -1
  1059. package/transpiled/directives/vary/Properties.d.ts +0 -9
  1060. package/transpiled/directives/vary/Properties.js +0 -16
  1061. package/transpiled/directives/vary/Properties.js.map +0 -1
  1062. package/transpiled/directives/vary/Vary.d.ts +0 -10
  1063. package/transpiled/directives/vary/Vary.js +0 -36
  1064. package/transpiled/directives/vary/Vary.js.map +0 -1
  1065. package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -5
  1066. package/transpiled/directives/vary/embeddings/Embedding.js +0 -3
  1067. package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
  1068. package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
  1069. package/transpiled/directives/vary/embeddings/Header.js +0 -26
  1070. package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
  1071. package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
  1072. package/transpiled/directives/vary/embeddings/Language.js +0 -28
  1073. package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
  1074. package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
  1075. package/transpiled/directives/vary/embeddings/index.js +0 -10
  1076. package/transpiled/directives/vary/embeddings/index.js.map +0 -1
  1077. package/transpiled/directives/vary/index.d.ts +0 -2
  1078. package/transpiled/directives/vary/index.js +0 -6
  1079. package/transpiled/directives/vary/index.js.map +0 -1
  1080. package/transpiled/manifest.d.ts +0 -3
  1081. package/transpiled/manifest.js +0 -66
  1082. package/transpiled/manifest.js.map +0 -1
  1083. package/transpiled/schemas.d.ts +0 -7
  1084. package/transpiled/schemas.js +0 -14
  1085. package/transpiled/schemas.js.map +0 -1
  1086. package/transpiled/tsconfig.tsbuildinfo +0 -1
  1087. package/tsconfig.json +0 -12
@@ -0,0 +1,53 @@
1
+ import { hold, identify } from './lib/index.js';
2
+ /**
3
+ * What the consent page calls when a user allows a client. The page holds the user's own
4
+ * credentials, so this is the user's own route; the code it answers with is what the client
5
+ * redeems at the token endpoint.
6
+ *
7
+ * The grant is recorded so a user can see what they allowed and take it back. It is not
8
+ * consulted to skip the prompt — consent is asked every time, which is what keeps a client
9
+ * that changed where it wants a code sent from being waved through on an older one.
10
+ */
11
+ export class Effect {
12
+ context;
13
+ mount(context) {
14
+ this.context = context;
15
+ }
16
+ async execute(input) {
17
+ const { authority, identity } = input;
18
+ if (input.method !== S256)
19
+ return invalid('invalid_request', 'Only the S256 code challenge method is supported');
20
+ const client = await this.context.remote.identity.clients.describe({
21
+ input: { authority, id: input.client, redirect: input.redirect }
22
+ });
23
+ if (client instanceof Error)
24
+ return invalid('invalid_client', 'No such client');
25
+ if (client.permitted !== true)
26
+ return invalid('invalid_request', 'The redirect is not one this client may receive a code at');
27
+ const scope = input.scope ?? [];
28
+ // recorded on the grant and carried to the token endpoint, where it becomes the
29
+ // token's `aud` — the entry it may be presented at, see documentation/oauth.md
30
+ const resource = input.resource ?? [];
31
+ const grant = await this.context.local.transit({
32
+ query: { id: identify(authority, identity, input.client) },
33
+ input: { authority, identity, client: input.client, scope, resource }
34
+ });
35
+ if (grant instanceof Error)
36
+ return grant;
37
+ const code = await hold(authority, {
38
+ identity,
39
+ client: input.client,
40
+ redirect: input.redirect,
41
+ challenge: input.challenge,
42
+ scope,
43
+ resource
44
+ }, this.context);
45
+ return { code, expires_in: this.context.configuration.lifetime };
46
+ }
47
+ }
48
+ function invalid(error, description) {
49
+ return { status: BAD_REQUEST, error, error_description: description };
50
+ }
51
+ const S256 = 'S256';
52
+ const BAD_REQUEST = 400;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2F1dGhvcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSy9DOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLE1BQU07SUFDVCxPQUFPLENBQVU7SUFFbEIsS0FBSyxDQUFDLE9BQWdCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQVk7UUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7UUFFckMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUk7WUFDdkIsT0FBTyxPQUFPLENBQ1osaUJBQWlCLEVBQ2pCLGtEQUFrRCxDQUNuRCxDQUFBO1FBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNqRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7U0FDakUsQ0FBQyxDQUFBO1FBRUYsSUFBSSxNQUFNLFlBQVksS0FBSztZQUFFLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFFL0UsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDM0IsT0FBTyxPQUFPLENBQ1osaUJBQWlCLEVBQ2pCLDJEQUEyRCxDQUM1RCxDQUFBO1FBRUgsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFFL0IsZ0ZBQWdGO1FBQ2hGLCtFQUErRTtRQUMvRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtRQUVyQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM3QyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFELEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtTQUN0RSxDQUFDLENBQUE7UUFFRixJQUFJLEtBQUssWUFBWSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQ3JCLFNBQVMsRUFDVDtZQUNFLFFBQVE7WUFDUixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLO1lBQ0wsUUFBUTtTQUNULEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFBO1FBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDbEUsQ0FBQztDQUNGO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLFdBQW1CO0lBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQTtBQUN2RSxDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ25CLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQSJ9
@@ -0,0 +1,92 @@
1
+ import { identify, spend, verifies } from './lib/index.js';
2
+ /**
3
+ * The token endpoint, RFC 6749 §4.1.3. Anonymous, because the clients this server knows are
4
+ * public ones with no secret to authenticate with: what stands in for that is PKCE, since
5
+ * only the client that began the flow holds the verifier the challenge was made from.
6
+ *
7
+ * Every failure here is `invalid_grant` without saying which check failed. A code that was
8
+ * replayed, a verifier that does not match and a redirect that was swapped are all the same
9
+ * answer, and telling them apart would say whether a stolen code was still live.
10
+ */
11
+ export class Effect {
12
+ context;
13
+ mount(context) {
14
+ this.context = context;
15
+ }
16
+ async execute(input) {
17
+ const { authority } = input;
18
+ if (input.grant_type !== AUTHORIZATION_CODE)
19
+ return invalid('unsupported_grant_type', 'Only the authorization code grant is supported');
20
+ if (input.code === undefined || input.code_verifier === undefined)
21
+ return invalid('invalid_request', 'A code and a code verifier are required');
22
+ // spent first: a wrong verifier burns the code, which is what stops it being guessed at
23
+ const code = await spend(authority, input.code, this.context);
24
+ if (code === null || !this.redeemable(code, input))
25
+ return invalid('invalid_grant', 'The authorization code is not redeemable');
26
+ // `aud` binds the token to `code.resource` — the entry it may be presented at,
27
+ // which `preflight` reads. A fork MCP or RPC makes is not that entry.
28
+ const issued = await this.context.remote.identity.tokens.issue({
29
+ input: {
30
+ authority,
31
+ identity: code.identity,
32
+ label: label(code.client),
33
+ lifetime: this.context.configuration.token,
34
+ ...(code.scope.length === 0 ? {} : { scopes: code.scope }),
35
+ ...(code.resource.length === 0 ? {} : { audience: code.resource })
36
+ }
37
+ });
38
+ // the only refusal `issue` makes is a scope the consenting identity does not hold, and
39
+ // what it says about that is its own; the client is told what it may act on
40
+ if (issued instanceof Error)
41
+ return invalid('invalid_scope', 'The requested scope is not one the identity holds');
42
+ // the key the token was issued under, so revoking the grant revokes the token. The token
43
+ // is already out, so a grant that fails to record it is logged rather than unwound — it
44
+ // costs the user the ability to revoke, and refusing here would cost them the token too
45
+ const grant = await this.context.local.transit({
46
+ query: { id: identify(authority, code.identity, code.client) },
47
+ input: {
48
+ authority,
49
+ identity: code.identity,
50
+ client: code.client,
51
+ scope: code.scope,
52
+ resource: code.resource,
53
+ kid: issued.kid
54
+ }
55
+ });
56
+ if (grant instanceof Error)
57
+ this.context.logs.error('Grant not recorded for an issued token', {
58
+ client: code.client,
59
+ kid: issued.kid
60
+ });
61
+ return {
62
+ // RFC 6749 §5.1 asks for 200, where a POST would otherwise answer 201
63
+ status: OK,
64
+ access_token: issued.token,
65
+ token_type: 'Bearer',
66
+ ...(issued.exp === undefined
67
+ ? {}
68
+ : { expires_in: Math.floor((issued.exp - Date.now()) / 1000) }),
69
+ ...(code.scope.length === 0 ? {} : { scope: code.scope.join(' ') })
70
+ };
71
+ }
72
+ redeemable(code, input) {
73
+ if (!verifies(code.challenge, input.code_verifier))
74
+ return false;
75
+ // RFC 6749 §4.1.3: what was sent to `authorize` must be sent again
76
+ if (input.redirect_uri !== undefined && input.redirect_uri !== code.redirect)
77
+ return false;
78
+ return input.client_id === undefined || input.client_id === code.client;
79
+ }
80
+ }
81
+ /** `identity.tokens` requires one, and it is what a user sees when listing what they issued. */
82
+ function label(client) {
83
+ return client.slice(0, LABEL);
84
+ }
85
+ function invalid(error, description) {
86
+ return { status: BAD_REQUEST, error, error_description: description };
87
+ }
88
+ const AUTHORIZATION_CODE = 'authorization_code';
89
+ const OK = 200;
90
+ const BAD_REQUEST = 400;
91
+ const LABEL = 64;
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjaGFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvZXhjaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFLMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNULE9BQU8sQ0FBVTtJQUVsQixLQUFLLENBQUMsT0FBZ0I7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7SUFDeEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBWTtRQUMvQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBRTNCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxrQkFBa0I7WUFDekMsT0FBTyxPQUFPLENBQ1osd0JBQXdCLEVBQ3hCLGdEQUFnRCxDQUNqRCxDQUFBO1FBRUgsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLFNBQVM7WUFDL0QsT0FBTyxPQUFPLENBQUMsaUJBQWlCLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtRQUU5RSx3RkFBd0Y7UUFDeEYsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTdELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUNoRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLEVBQUUsMENBQTBDLENBQUMsQ0FBQTtRQUU3RSwrRUFBK0U7UUFDL0Usc0VBQXNFO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDN0QsS0FBSyxFQUFFO2dCQUNMLFNBQVM7Z0JBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLO2dCQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUQsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkU7U0FDRixDQUFDLENBQUE7UUFFRix1RkFBdUY7UUFDdkYsNEVBQTRFO1FBQzVFLElBQUksTUFBTSxZQUFZLEtBQUs7WUFDekIsT0FBTyxPQUFPLENBQUMsZUFBZSxFQUFFLG1EQUFtRCxDQUFDLENBQUE7UUFFdEYseUZBQXlGO1FBQ3pGLHdGQUF3RjtRQUN4Rix3RkFBd0Y7UUFDeEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0MsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUQsS0FBSyxFQUFFO2dCQUNMLFNBQVM7Z0JBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7YUFDaEI7U0FDRixDQUFDLENBQUE7UUFFRixJQUFJLEtBQUssWUFBWSxLQUFLO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRTtnQkFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7YUFDaEIsQ0FBQyxDQUFBO1FBRUosT0FBTztZQUNMLHNFQUFzRTtZQUN0RSxNQUFNLEVBQUUsRUFBRTtZQUNWLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSztZQUMxQixVQUFVLEVBQUUsUUFBUTtZQUNwQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxTQUFTO2dCQUMxQixDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDcEUsQ0FBQTtJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsSUFBVSxFQUFFLEtBQVk7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxhQUFjLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUVqRSxtRUFBbUU7UUFDbkUsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQzFFLE9BQU8sS0FBSyxDQUFBO1FBRWQsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDekUsQ0FBQztDQUNGO0FBRUQsZ0dBQWdHO0FBQ2hHLFNBQVMsS0FBSyxDQUFDLE1BQWM7SUFDM0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUMvQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLFdBQW1CO0lBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQTtBQUN2RSxDQUFDO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQTtBQUMvQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUE7QUFDZCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUE7QUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFBIn0=
@@ -0,0 +1,30 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ /**
3
+ * An authorization code is a bearer credential that lives for seconds. It is held under a
4
+ * hash of itself, so a dump of the store hands out none of them, and redeemed with `GETDEL`,
5
+ * so it is spent once however many requests arrive at once — the property the whole flow
6
+ * rests on, since a replayed code is a stolen grant.
7
+ */
8
+ export async function hold(authority, code, context) {
9
+ const value = randomBytes(32).toString('base64url');
10
+ await context.stash.set(key(authority, value), JSON.stringify(code), 'EX', context.configuration.lifetime);
11
+ return value;
12
+ }
13
+ export async function spend(authority, value, context) {
14
+ const held = await context.stash.getdel(key(authority, value));
15
+ return held === null ? null : JSON.parse(held);
16
+ }
17
+ /**
18
+ * PKCE, RFC 7636: the client kept a verifier and sent its hash, and only the client that
19
+ * began the flow can present the verifier now. `S256` alone — `plain` proves nothing.
20
+ */
21
+ export function verifies(challenge, verifier) {
22
+ return digest(verifier) === challenge;
23
+ }
24
+ export function digest(verifier) {
25
+ return createHash('sha256').update(verifier).digest('base64url');
26
+ }
27
+ function key(authority, value) {
28
+ return `oauth:code:${authority}:${createHash('sha256').update(value).digest('hex')}`;
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9saWIvY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUdyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUN4QixTQUFpQixFQUNqQixJQUFVLEVBQ1YsT0FBZ0I7SUFFaEIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVuRCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixJQUFJLEVBQ0osT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQy9CLENBQUE7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLEtBQUssQ0FDekIsU0FBaUIsRUFDakIsS0FBYSxFQUNiLE9BQWdCO0lBRWhCLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRTlELE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBVSxDQUFBO0FBQzFELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLFNBQWlCLEVBQUUsUUFBZ0I7SUFDMUQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLFFBQWdCO0lBQ3JDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDbEUsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLFNBQWlCLEVBQUUsS0FBYTtJQUMzQyxPQUFPLGNBQWMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7QUFDdEYsQ0FBQyJ9
@@ -0,0 +1,15 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * A user holds one grant per client, so the record is addressed by the three things that
4
+ * say which: authorizing again replaces what is there rather than leaving another row, and
5
+ * revoking has one thing to revoke.
6
+ */
7
+ export function identify(authority, identity, client) {
8
+ return createHash('sha256')
9
+ .update(JSON.stringify([authority, identity, client]))
10
+ .digest('hex')
11
+ .slice(0, LENGTH);
12
+ }
13
+ /** What the entity prototype accepts as an id. */
14
+ const LENGTH = 32;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvbGliL2lkZW50aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRSxRQUFnQixFQUFFLE1BQWM7SUFDMUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDYixLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3JCLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBIn0=
@@ -0,0 +1,3 @@
1
+ export * from './code.js';
2
+ export * from './identify.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsZUFBZSxDQUFBIn0=
@@ -0,0 +1,18 @@
1
+ import { quote } from '@toa.io/generic';
2
+ /** What a user has allowed, for a screen that lets them take it back. */
3
+ export class Computation {
4
+ enumerate;
5
+ mount(context) {
6
+ this.enumerate = context.local.enumerate;
7
+ }
8
+ async execute(input) {
9
+ return await this.enumerate({
10
+ query: {
11
+ criteria: `authority==${quote(input.authority)};identity==${quote(input.identity)}`,
12
+ limit: LIMIT
13
+ }
14
+ });
15
+ }
16
+ }
17
+ const LIMIT = 256;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUl2Qyx5RUFBeUU7QUFDekUsTUFBTSxPQUFPLFdBQVc7SUFDZCxTQUFTLENBQWdDO0lBRTFDLEtBQUssQ0FBQyxPQUFnQjtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQVk7UUFDL0IsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUIsS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRSxjQUFjLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkYsS0FBSyxFQUFFLEtBQUs7YUFDYjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQSJ9
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Taking back what was allowed. The token itself is not deleted — it is out in the world —
3
+ * so what is revoked is the key it was issued under, which is what `identity.tokens` reads
4
+ * it with. It stops being a token within `identity.tokens.cache.ttl`.
5
+ */
6
+ export class Transition {
7
+ keys;
8
+ mount(context) {
9
+ this.keys = context.remote.identity.keys;
10
+ }
11
+ async execute(input, object) {
12
+ // the id is a route parameter, so a grant of another identity is asked for by anyone
13
+ // who guesses one; the authority and the identity are what say it is theirs
14
+ if (object.VERSION === 0 ||
15
+ object.authority !== input.authority ||
16
+ object.identity !== input.identity)
17
+ return ERR_NOT_FOUND;
18
+ if (object.kid !== undefined)
19
+ await this.keys.disable({ query: { id: object.kid } });
20
+ object.revokedAt = Date.now();
21
+ }
22
+ }
23
+ const ERR_NOT_FOUND = new (class NotFoundError extends Error {
24
+ code = 'NOT_FOUND';
25
+ })();
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3Jldm9rZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDYixJQUFJLENBQXdDO0lBRTdDLEtBQUssQ0FBQyxPQUFnQjtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtJQUMxQyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBYztRQUMvQyxxRkFBcUY7UUFDckYsNEVBQTRFO1FBQzVFLElBQ0UsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLFNBQVM7WUFDcEMsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUTtZQUVsQyxPQUFPLGFBQWEsQ0FBQTtRQUV0QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUztZQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVwRixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxhQUFjLFNBQVEsS0FBSztJQUMxQyxJQUFJLEdBQUcsV0FBVyxDQUFBO0NBQ25DLENBQUMsRUFBRSxDQUFBIn0=
@@ -0,0 +1,97 @@
1
+ import { hold, identify } from './lib/index.js'
2
+ import type { Maybe } from '@toa.io/core/types'
3
+ import type { Operation } from '@toa.io/bridges.node'
4
+ import type { Context } from './lib/index.js'
5
+
6
+ /**
7
+ * What the consent page calls when a user allows a client. The page holds the user's own
8
+ * credentials, so this is the user's own route; the code it answers with is what the client
9
+ * redeems at the token endpoint.
10
+ *
11
+ * The grant is recorded so a user can see what they allowed and take it back. It is not
12
+ * consulted to skip the prompt — consent is asked every time, which is what keeps a client
13
+ * that changed where it wants a code sent from being waved through on an older one.
14
+ */
15
+ export class Effect implements Operation {
16
+ private context!: Context
17
+
18
+ public mount(context: Context): void {
19
+ this.context = context
20
+ }
21
+
22
+ public async execute(input: Input): Promise<Maybe<Output>> {
23
+ const { authority, identity } = input
24
+
25
+ if (input.method !== S256)
26
+ return invalid(
27
+ 'invalid_request',
28
+ 'Only the S256 code challenge method is supported'
29
+ )
30
+
31
+ const client = await this.context.remote.identity.clients.describe({
32
+ input: { authority, id: input.client, redirect: input.redirect }
33
+ })
34
+
35
+ if (client instanceof Error) return invalid('invalid_client', 'No such client')
36
+
37
+ if (client.permitted !== true)
38
+ return invalid(
39
+ 'invalid_request',
40
+ 'The redirect is not one this client may receive a code at'
41
+ )
42
+
43
+ const scope = input.scope ?? []
44
+
45
+ // recorded on the grant and carried to the token endpoint, where it becomes the
46
+ // token's `aud` — the entry it may be presented at, see documentation/oauth.md
47
+ const resource = input.resource ?? []
48
+
49
+ const grant = await this.context.local.transit({
50
+ query: { id: identify(authority, identity, input.client) },
51
+ input: { authority, identity, client: input.client, scope, resource }
52
+ })
53
+
54
+ if (grant instanceof Error) return grant
55
+
56
+ const code = await hold(
57
+ authority,
58
+ {
59
+ identity,
60
+ client: input.client,
61
+ redirect: input.redirect,
62
+ challenge: input.challenge,
63
+ scope,
64
+ resource
65
+ },
66
+ this.context
67
+ )
68
+
69
+ return { code, expires_in: this.context.configuration.lifetime }
70
+ }
71
+ }
72
+
73
+ function invalid(error: string, description: string): Output {
74
+ return { status: BAD_REQUEST, error, error_description: description }
75
+ }
76
+
77
+ const S256 = 'S256'
78
+ const BAD_REQUEST = 400
79
+
80
+ interface Input {
81
+ authority: string
82
+ identity: string
83
+ client: string
84
+ redirect: string
85
+ challenge: string
86
+ method: string
87
+ scope?: string[]
88
+ resource?: string[]
89
+ }
90
+
91
+ interface Output {
92
+ status?: number
93
+ code?: string
94
+ expires_in?: number
95
+ error?: string
96
+ error_description?: string
97
+ }
@@ -0,0 +1,134 @@
1
+ import { identify, spend, verifies } from './lib/index.js'
2
+ import type { Maybe } from '@toa.io/core/types'
3
+ import type { Operation } from '@toa.io/bridges.node'
4
+ import type { Code, Context } from './lib/index.js'
5
+
6
+ /**
7
+ * The token endpoint, RFC 6749 §4.1.3. Anonymous, because the clients this server knows are
8
+ * public ones with no secret to authenticate with: what stands in for that is PKCE, since
9
+ * only the client that began the flow holds the verifier the challenge was made from.
10
+ *
11
+ * Every failure here is `invalid_grant` without saying which check failed. A code that was
12
+ * replayed, a verifier that does not match and a redirect that was swapped are all the same
13
+ * answer, and telling them apart would say whether a stolen code was still live.
14
+ */
15
+ export class Effect implements Operation {
16
+ private context!: Context
17
+
18
+ public mount(context: Context): void {
19
+ this.context = context
20
+ }
21
+
22
+ public async execute(input: Input): Promise<Maybe<Output>> {
23
+ const { authority } = input
24
+
25
+ if (input.grant_type !== AUTHORIZATION_CODE)
26
+ return invalid(
27
+ 'unsupported_grant_type',
28
+ 'Only the authorization code grant is supported'
29
+ )
30
+
31
+ if (input.code === undefined || input.code_verifier === undefined)
32
+ return invalid('invalid_request', 'A code and a code verifier are required')
33
+
34
+ // spent first: a wrong verifier burns the code, which is what stops it being guessed at
35
+ const code = await spend(authority, input.code, this.context)
36
+
37
+ if (code === null || !this.redeemable(code, input))
38
+ return invalid('invalid_grant', 'The authorization code is not redeemable')
39
+
40
+ // `aud` binds the token to `code.resource` — the entry it may be presented at,
41
+ // which `preflight` reads. A fork MCP or RPC makes is not that entry.
42
+ const issued = await this.context.remote.identity.tokens.issue({
43
+ input: {
44
+ authority,
45
+ identity: code.identity,
46
+ label: label(code.client),
47
+ lifetime: this.context.configuration.token,
48
+ ...(code.scope.length === 0 ? {} : { scopes: code.scope }),
49
+ ...(code.resource.length === 0 ? {} : { audience: code.resource })
50
+ }
51
+ })
52
+
53
+ // the only refusal `issue` makes is a scope the consenting identity does not hold, and
54
+ // what it says about that is its own; the client is told what it may act on
55
+ if (issued instanceof Error)
56
+ return invalid('invalid_scope', 'The requested scope is not one the identity holds')
57
+
58
+ // the key the token was issued under, so revoking the grant revokes the token. The token
59
+ // is already out, so a grant that fails to record it is logged rather than unwound — it
60
+ // costs the user the ability to revoke, and refusing here would cost them the token too
61
+ const grant = await this.context.local.transit({
62
+ query: { id: identify(authority, code.identity, code.client) },
63
+ input: {
64
+ authority,
65
+ identity: code.identity,
66
+ client: code.client,
67
+ scope: code.scope,
68
+ resource: code.resource,
69
+ kid: issued.kid
70
+ }
71
+ })
72
+
73
+ if (grant instanceof Error)
74
+ this.context.logs.error('Grant not recorded for an issued token', {
75
+ client: code.client,
76
+ kid: issued.kid
77
+ })
78
+
79
+ return {
80
+ // RFC 6749 §5.1 asks for 200, where a POST would otherwise answer 201
81
+ status: OK,
82
+ access_token: issued.token,
83
+ token_type: 'Bearer',
84
+ ...(issued.exp === undefined
85
+ ? {}
86
+ : { expires_in: Math.floor((issued.exp - Date.now()) / 1000) }),
87
+ ...(code.scope.length === 0 ? {} : { scope: code.scope.join(' ') })
88
+ }
89
+ }
90
+
91
+ private redeemable(code: Code, input: Input): boolean {
92
+ if (!verifies(code.challenge, input.code_verifier!)) return false
93
+
94
+ // RFC 6749 §4.1.3: what was sent to `authorize` must be sent again
95
+ if (input.redirect_uri !== undefined && input.redirect_uri !== code.redirect)
96
+ return false
97
+
98
+ return input.client_id === undefined || input.client_id === code.client
99
+ }
100
+ }
101
+
102
+ /** `identity.tokens` requires one, and it is what a user sees when listing what they issued. */
103
+ function label(client: string): string {
104
+ return client.slice(0, LABEL)
105
+ }
106
+
107
+ function invalid(error: string, description: string): Output {
108
+ return { status: BAD_REQUEST, error, error_description: description }
109
+ }
110
+
111
+ const AUTHORIZATION_CODE = 'authorization_code'
112
+ const OK = 200
113
+ const BAD_REQUEST = 400
114
+ const LABEL = 64
115
+
116
+ interface Input {
117
+ authority: string
118
+ grant_type: string
119
+ code?: string
120
+ code_verifier?: string
121
+ redirect_uri?: string
122
+ client_id?: string
123
+ resource?: string | string[]
124
+ }
125
+
126
+ interface Output {
127
+ status?: number
128
+ access_token?: string
129
+ token_type?: string
130
+ expires_in?: number
131
+ scope?: string
132
+ error?: string
133
+ error_description?: string
134
+ }
@@ -0,0 +1,51 @@
1
+ import { createHash, randomBytes } from 'node:crypto'
2
+ import type { Code, Context } from '../../types/index.js'
3
+
4
+ /**
5
+ * An authorization code is a bearer credential that lives for seconds. It is held under a
6
+ * hash of itself, so a dump of the store hands out none of them, and redeemed with `GETDEL`,
7
+ * so it is spent once however many requests arrive at once — the property the whole flow
8
+ * rests on, since a replayed code is a stolen grant.
9
+ */
10
+ export async function hold(
11
+ authority: string,
12
+ code: Code,
13
+ context: Context
14
+ ): Promise<string> {
15
+ const value = randomBytes(32).toString('base64url')
16
+
17
+ await context.stash.set(
18
+ key(authority, value),
19
+ JSON.stringify(code),
20
+ 'EX',
21
+ context.configuration.lifetime
22
+ )
23
+
24
+ return value
25
+ }
26
+
27
+ export async function spend(
28
+ authority: string,
29
+ value: string,
30
+ context: Context
31
+ ): Promise<Code | null> {
32
+ const held = await context.stash.getdel(key(authority, value))
33
+
34
+ return held === null ? null : (JSON.parse(held) as Code)
35
+ }
36
+
37
+ /**
38
+ * PKCE, RFC 7636: the client kept a verifier and sent its hash, and only the client that
39
+ * began the flow can present the verifier now. `S256` alone — `plain` proves nothing.
40
+ */
41
+ export function verifies(challenge: string, verifier: string): boolean {
42
+ return digest(verifier) === challenge
43
+ }
44
+
45
+ export function digest(verifier: string): string {
46
+ return createHash('sha256').update(verifier).digest('base64url')
47
+ }
48
+
49
+ function key(authority: string, value: string): string {
50
+ return `oauth:code:${authority}:${createHash('sha256').update(value).digest('hex')}`
51
+ }
@@ -0,0 +1,16 @@
1
+ import { createHash } from 'node:crypto'
2
+
3
+ /**
4
+ * A user holds one grant per client, so the record is addressed by the three things that
5
+ * say which: authorizing again replaces what is there rather than leaving another row, and
6
+ * revoking has one thing to revoke.
7
+ */
8
+ export function identify(authority: string, identity: string, client: string): string {
9
+ return createHash('sha256')
10
+ .update(JSON.stringify([authority, identity, client]))
11
+ .digest('hex')
12
+ .slice(0, LENGTH)
13
+ }
14
+
15
+ /** What the entity prototype accepts as an id. */
16
+ const LENGTH = 32
@@ -0,0 +1,3 @@
1
+ export * from './code.js'
2
+ export * from './identify.js'
3
+ export type * from '../../types/index.js'
@@ -0,0 +1,28 @@
1
+ import { quote } from '@toa.io/generic'
2
+ import type { Operation } from '@toa.io/bridges.node'
3
+ import type { Context, Entity } from './lib/index.js'
4
+
5
+ /** What a user has allowed, for a screen that lets them take it back. */
6
+ export class Computation implements Operation {
7
+ private enumerate!: Context['local']['enumerate']
8
+
9
+ public mount(context: Context): void {
10
+ this.enumerate = context.local.enumerate
11
+ }
12
+
13
+ public async execute(input: Input): Promise<Entity[]> {
14
+ return await this.enumerate({
15
+ query: {
16
+ criteria: `authority==${quote(input.authority)};identity==${quote(input.identity)}`,
17
+ limit: LIMIT
18
+ }
19
+ })
20
+ }
21
+ }
22
+
23
+ const LIMIT = 256
24
+
25
+ interface Input {
26
+ authority: string
27
+ identity: string
28
+ }
@@ -0,0 +1,40 @@
1
+ import type { Maybe } from '@toa.io/core/types'
2
+ import type { Operation } from '@toa.io/bridges.node'
3
+ import type { Context, Entity } from './lib/index.js'
4
+
5
+ /**
6
+ * Taking back what was allowed. The token itself is not deleted — it is out in the world —
7
+ * so what is revoked is the key it was issued under, which is what `identity.tokens` reads
8
+ * it with. It stops being a token within `identity.tokens.cache.ttl`.
9
+ */
10
+ export class Transition implements Operation {
11
+ private keys!: Context['remote']['identity']['keys']
12
+
13
+ public mount(context: Context): void {
14
+ this.keys = context.remote.identity.keys
15
+ }
16
+
17
+ public async execute(input: Input, object: Entity): Promise<Maybe<void>> {
18
+ // the id is a route parameter, so a grant of another identity is asked for by anyone
19
+ // who guesses one; the authority and the identity are what say it is theirs
20
+ if (
21
+ object.VERSION === 0 ||
22
+ object.authority !== input.authority ||
23
+ object.identity !== input.identity
24
+ )
25
+ return ERR_NOT_FOUND
26
+
27
+ if (object.kid !== undefined) await this.keys.disable({ query: { id: object.kid } })
28
+
29
+ object.revokedAt = Date.now()
30
+ }
31
+ }
32
+
33
+ const ERR_NOT_FOUND = new (class NotFoundError extends Error {
34
+ public readonly code = 'NOT_FOUND'
35
+ })()
36
+
37
+ interface Input {
38
+ authority: string
39
+ identity: string
40
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../../../tsconfig.component.json",
3
+ "compilerOptions": {
4
+ "outDir": "./operations",
5
+ "rootDir": "./source"
6
+ },
7
+ "include": [
8
+ "source"
9
+ ]
10
+ }