@toa.io/extensions.exposition 1.0.0-alpha.2 → 1.0.0-alpha.20

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 (383) hide show
  1. package/components/identity.bans/manifest.toa.yaml +15 -6
  2. package/components/identity.bans/operations/transit.d.ts +14 -0
  3. package/components/identity.bans/operations/transit.js +11 -0
  4. package/components/identity.bans/operations/transit.js.map +1 -0
  5. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  6. package/components/identity.bans/source/transit.ts +21 -0
  7. package/components/identity.bans/tsconfig.json +9 -0
  8. package/components/identity.basic/manifest.toa.yaml +5 -1
  9. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  10. package/components/identity.federation/manifest.toa.yaml +13 -7
  11. package/components/identity.federation/operations/authenticate.js +4 -4
  12. package/components/identity.federation/operations/authenticate.js.map +1 -1
  13. package/components/identity.federation/operations/create.js +4 -4
  14. package/components/identity.federation/operations/create.js.map +1 -1
  15. package/components/identity.federation/operations/{assertions-as-values.cjs → lib/assertions-as-values.js} +1 -1
  16. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  17. package/components/identity.federation/operations/{jwt.d.cts → lib/jwt.d.ts} +5 -4
  18. package/components/identity.federation/operations/{jwt.cjs → lib/jwt.js} +35 -11
  19. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  20. package/components/identity.federation/operations/schemas.d.ts +16 -0
  21. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  22. package/components/identity.federation/operations/types.d.ts +1 -1
  23. package/components/identity.federation/source/authenticate.ts +2 -2
  24. package/components/identity.federation/source/create.ts +2 -2
  25. package/components/identity.federation/source/{assertions-as-values.cts → lib/assertions-as-values.ts} +1 -2
  26. package/components/identity.federation/source/lib/jwt.test.ts +56 -0
  27. package/components/identity.federation/source/{jwt.cts → lib/jwt.ts} +57 -29
  28. package/components/identity.federation/source/schemas.ts +16 -0
  29. package/components/identity.federation/source/types.ts +1 -1
  30. package/components/identity.federation/tsconfig.json +2 -2
  31. package/components/identity.roles/manifest.toa.yaml +18 -5
  32. package/components/identity.roles/operations/grant.d.ts +10 -0
  33. package/components/identity.roles/operations/grant.js +21 -0
  34. package/components/identity.roles/operations/grant.js.map +1 -0
  35. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  36. package/components/identity.roles/operations/lib/Entity.js +3 -0
  37. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  38. package/components/identity.roles/operations/list.d.ts +1 -4
  39. package/components/identity.roles/operations/list.js.map +1 -1
  40. package/components/identity.roles/operations/principal.d.ts +4 -6
  41. package/components/identity.roles/operations/principal.js +6 -1
  42. package/components/identity.roles/operations/principal.js.map +1 -1
  43. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  44. package/components/identity.roles/source/grant.ts +32 -0
  45. package/components/identity.roles/source/lib/Entity.ts +5 -0
  46. package/components/identity.roles/source/list.ts +2 -4
  47. package/components/identity.roles/source/principal.ts +10 -8
  48. package/components/identity.tokens/manifest.toa.yaml +12 -3
  49. package/components/identity.tokens/operations/authenticate.js +5 -2
  50. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  51. package/components/identity.tokens/operations/encrypt.js +4 -1
  52. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  53. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  54. package/components/identity.tokens/operations/types.d.ts +1 -2
  55. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  56. package/components/identity.tokens/source/authenticate.ts +5 -2
  57. package/components/identity.tokens/source/encrypt.test.ts +22 -1
  58. package/components/identity.tokens/source/encrypt.ts +4 -1
  59. package/components/identity.tokens/source/types.ts +1 -2
  60. package/components/octets.storage/operations/store.js +1 -1
  61. package/documentation/access.md +27 -16
  62. package/documentation/cache.md +8 -1
  63. package/documentation/components.md +55 -23
  64. package/documentation/identity.md +7 -0
  65. package/documentation/io.md +56 -0
  66. package/documentation/octets.md +12 -0
  67. package/documentation/protocol.md +3 -0
  68. package/documentation/query.md +50 -5
  69. package/documentation/require.md +15 -0
  70. package/documentation/tree.md +22 -4
  71. package/documentation/vary.md +9 -3
  72. package/features/access.feature +28 -49
  73. package/features/annotation.feature +1 -0
  74. package/features/body.feature +3 -1
  75. package/features/cache.feature +39 -0
  76. package/features/cors.feature +2 -2
  77. package/features/directives.feature +2 -0
  78. package/features/dynamic.feature +14 -7
  79. package/features/errors.feature +7 -4
  80. package/features/etag.feature +97 -0
  81. package/features/identity.bans.feature +128 -0
  82. package/features/identity.basic.feature +68 -3
  83. package/features/identity.federation.feature +78 -5
  84. package/features/identity.roles.feature +205 -1
  85. package/features/identity.tokens.feature +98 -0
  86. package/features/io.feature +196 -0
  87. package/features/octets.entries.feature +3 -1
  88. package/features/octets.feature +32 -10
  89. package/features/octets.meta.feature +4 -3
  90. package/features/octets.workflows.feature +39 -0
  91. package/features/queries.feature +9 -1
  92. package/features/require.feature +64 -0
  93. package/features/response.feature +7 -1
  94. package/features/routes.feature +17 -10
  95. package/features/steps/Database.ts +17 -10
  96. package/features/steps/Gateway.ts +3 -0
  97. package/features/steps/IdP.ts +55 -21
  98. package/features/steps/components/echo/manifest.toa.yaml +5 -0
  99. package/features/steps/components/echo/operations/identity.js +7 -0
  100. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  101. package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
  102. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  103. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  104. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  105. package/features/timing.feature +66 -0
  106. package/features/vary.feature +56 -3
  107. package/package.json +13 -14
  108. package/readme.md +7 -6
  109. package/schemas/annotation.cos.yaml +1 -0
  110. package/schemas/io/input.cos.yaml +3 -0
  111. package/schemas/io/message.cos.yaml +5 -0
  112. package/schemas/io/output.cos.yaml +5 -0
  113. package/schemas/octets/workflow.cos.yaml +12 -0
  114. package/schemas/querystring.cos.yaml +1 -0
  115. package/source/Annotation.ts +1 -0
  116. package/source/Context.ts +6 -4
  117. package/source/Directive.test.ts +7 -7
  118. package/source/Directive.ts +19 -46
  119. package/source/Endpoint.ts +53 -6
  120. package/source/Factory.ts +17 -7
  121. package/source/Gateway.ts +40 -51
  122. package/source/HTTP/Context.ts +67 -0
  123. package/source/HTTP/Server.test.ts +1 -1
  124. package/source/HTTP/Server.ts +61 -96
  125. package/source/HTTP/Timing.ts +40 -0
  126. package/source/HTTP/exceptions.ts +1 -1
  127. package/source/HTTP/index.ts +1 -0
  128. package/source/HTTP/messages.test.ts +27 -8
  129. package/source/HTTP/messages.ts +32 -48
  130. package/source/Mapping.ts +7 -8
  131. package/source/RTD/Context.ts +7 -10
  132. package/source/RTD/Directives.ts +28 -4
  133. package/source/RTD/Endpoint.ts +6 -4
  134. package/source/RTD/Match.ts +2 -7
  135. package/source/RTD/Method.ts +7 -13
  136. package/source/RTD/Node.ts +13 -14
  137. package/source/RTD/Tree.ts +17 -16
  138. package/source/RTD/factory.ts +3 -6
  139. package/source/Tenant.ts +0 -8
  140. package/source/deployment.ts +6 -0
  141. package/source/directives/auth/Anonymous.ts +3 -2
  142. package/source/directives/auth/Authorization.ts +17 -14
  143. package/source/directives/auth/Delegate.ts +35 -0
  144. package/source/directives/auth/Incept.ts +11 -6
  145. package/source/directives/auth/Role.test.ts +53 -6
  146. package/source/directives/auth/Role.ts +27 -17
  147. package/source/directives/auth/Scheme.ts +2 -2
  148. package/source/directives/auth/types.ts +1 -1
  149. package/source/directives/cache/Cache.ts +5 -5
  150. package/source/directives/cache/Control.ts +48 -22
  151. package/source/directives/cache/types.ts +1 -1
  152. package/source/directives/cors/CORS.ts +18 -10
  153. package/source/directives/dev/Development.ts +4 -4
  154. package/source/directives/index.ts +6 -4
  155. package/source/directives/io/Directive.ts +11 -0
  156. package/source/directives/io/IO.ts +43 -0
  157. package/source/directives/io/Input.ts +50 -0
  158. package/source/directives/io/Message.ts +1 -0
  159. package/source/directives/io/Output.ts +69 -0
  160. package/source/directives/io/index.ts +3 -0
  161. package/source/directives/io/schemas.ts +12 -0
  162. package/source/directives/octets/Context.ts +5 -4
  163. package/source/directives/octets/Delete.ts +25 -13
  164. package/source/directives/octets/Directive.ts +10 -0
  165. package/source/directives/octets/Fetch.ts +33 -17
  166. package/source/directives/octets/List.ts +18 -8
  167. package/source/directives/octets/Octets.ts +12 -8
  168. package/source/directives/octets/Permute.ts +16 -9
  169. package/source/directives/octets/Store.ts +43 -19
  170. package/source/directives/octets/Workflow.ts +48 -0
  171. package/source/directives/octets/schemas.test.ts +21 -0
  172. package/source/directives/octets/schemas.ts +2 -0
  173. package/source/directives/octets/types.ts +0 -7
  174. package/source/directives/octets/{workflow → workflows}/Execution.ts +0 -2
  175. package/source/directives/octets/{workflow → workflows}/Workflow.ts +2 -2
  176. package/source/directives/require/Directive.ts +5 -0
  177. package/source/directives/require/Headers.ts +20 -0
  178. package/source/directives/require/Require.ts +28 -0
  179. package/source/directives/require/index.ts +3 -0
  180. package/source/directives/vary/Directive.ts +2 -1
  181. package/source/directives/vary/Embed.ts +14 -8
  182. package/source/directives/vary/Vary.ts +8 -6
  183. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  184. package/source/directives/vary/embeddings/Header.ts +9 -7
  185. package/source/directives/vary/embeddings/Language.ts +2 -2
  186. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  187. package/source/directives/vary/embeddings/index.ts +3 -3
  188. package/source/exceptions.ts +22 -11
  189. package/source/io.ts +2 -2
  190. package/source/root.ts +5 -0
  191. package/transpiled/Annotation.d.ts +1 -0
  192. package/transpiled/Context.d.ts +6 -4
  193. package/transpiled/Directive.d.ts +8 -21
  194. package/transpiled/Directive.js +11 -14
  195. package/transpiled/Directive.js.map +1 -1
  196. package/transpiled/Endpoint.d.ts +7 -5
  197. package/transpiled/Endpoint.js +58 -2
  198. package/transpiled/Endpoint.js.map +1 -1
  199. package/transpiled/Factory.js +8 -2
  200. package/transpiled/Factory.js.map +1 -1
  201. package/transpiled/Gateway.d.ts +4 -8
  202. package/transpiled/Gateway.js +23 -33
  203. package/transpiled/Gateway.js.map +1 -1
  204. package/transpiled/HTTP/Context.d.ts +24 -0
  205. package/transpiled/HTTP/Context.js +47 -0
  206. package/transpiled/HTTP/Context.js.map +1 -0
  207. package/transpiled/HTTP/Server.d.ts +8 -7
  208. package/transpiled/HTTP/Server.js +69 -77
  209. package/transpiled/HTTP/Server.js.map +1 -1
  210. package/transpiled/HTTP/Timing.d.ts +10 -0
  211. package/transpiled/HTTP/Timing.js +29 -0
  212. package/transpiled/HTTP/Timing.js.map +1 -0
  213. package/transpiled/HTTP/exceptions.d.ts +1 -1
  214. package/transpiled/HTTP/exceptions.js.map +1 -1
  215. package/transpiled/HTTP/index.d.ts +1 -0
  216. package/transpiled/HTTP/index.js +1 -0
  217. package/transpiled/HTTP/index.js.map +1 -1
  218. package/transpiled/HTTP/messages.d.ts +7 -21
  219. package/transpiled/HTTP/messages.js +24 -26
  220. package/transpiled/HTTP/messages.js.map +1 -1
  221. package/transpiled/Mapping.js +7 -7
  222. package/transpiled/Mapping.js.map +1 -1
  223. package/transpiled/RTD/Context.d.ts +7 -6
  224. package/transpiled/RTD/Directives.d.ts +19 -4
  225. package/transpiled/RTD/Endpoint.d.ts +6 -4
  226. package/transpiled/RTD/Match.d.ts +2 -4
  227. package/transpiled/RTD/Method.d.ts +7 -7
  228. package/transpiled/RTD/Method.js.map +1 -1
  229. package/transpiled/RTD/Node.d.ts +4 -6
  230. package/transpiled/RTD/Node.js +2 -1
  231. package/transpiled/RTD/Node.js.map +1 -1
  232. package/transpiled/RTD/Tree.d.ts +6 -6
  233. package/transpiled/RTD/Tree.js +4 -1
  234. package/transpiled/RTD/Tree.js.map +1 -1
  235. package/transpiled/RTD/factory.d.ts +2 -4
  236. package/transpiled/RTD/factory.js +1 -1
  237. package/transpiled/RTD/factory.js.map +1 -1
  238. package/transpiled/Tenant.d.ts +0 -1
  239. package/transpiled/Tenant.js +0 -6
  240. package/transpiled/Tenant.js.map +1 -1
  241. package/transpiled/deployment.js +5 -0
  242. package/transpiled/deployment.js.map +1 -1
  243. package/transpiled/directives/auth/Anonymous.js +3 -4
  244. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  245. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  246. package/transpiled/directives/auth/Authorization.js +10 -8
  247. package/transpiled/directives/auth/Authorization.js.map +1 -1
  248. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  249. package/transpiled/directives/auth/Delegate.js +29 -0
  250. package/transpiled/directives/auth/Delegate.js.map +1 -0
  251. package/transpiled/directives/auth/Incept.d.ts +1 -1
  252. package/transpiled/directives/auth/Incept.js +11 -6
  253. package/transpiled/directives/auth/Incept.js.map +1 -1
  254. package/transpiled/directives/auth/Role.d.ts +4 -1
  255. package/transpiled/directives/auth/Role.js +25 -17
  256. package/transpiled/directives/auth/Role.js.map +1 -1
  257. package/transpiled/directives/auth/Scheme.js +2 -2
  258. package/transpiled/directives/auth/Scheme.js.map +1 -1
  259. package/transpiled/directives/cache/Cache.d.ts +3 -3
  260. package/transpiled/directives/cache/Cache.js +3 -3
  261. package/transpiled/directives/cache/Cache.js.map +1 -1
  262. package/transpiled/directives/cache/Control.d.ts +5 -4
  263. package/transpiled/directives/cache/Control.js +32 -15
  264. package/transpiled/directives/cache/Control.js.map +1 -1
  265. package/transpiled/directives/cache/types.d.ts +1 -1
  266. package/transpiled/directives/cors/CORS.d.ts +2 -3
  267. package/transpiled/directives/cors/CORS.js +17 -10
  268. package/transpiled/directives/cors/CORS.js.map +1 -1
  269. package/transpiled/directives/dev/Development.d.ts +3 -3
  270. package/transpiled/directives/dev/Development.js +1 -1
  271. package/transpiled/directives/dev/Development.js.map +1 -1
  272. package/transpiled/directives/index.d.ts +2 -2
  273. package/transpiled/directives/index.js +5 -3
  274. package/transpiled/directives/index.js.map +1 -1
  275. package/transpiled/directives/io/Directive.d.ts +8 -0
  276. package/transpiled/directives/io/Directive.js +3 -0
  277. package/transpiled/directives/io/Directive.js.map +1 -0
  278. package/transpiled/directives/io/IO.d.ts +9 -0
  279. package/transpiled/directives/io/IO.js +33 -0
  280. package/transpiled/directives/io/IO.js.map +1 -0
  281. package/transpiled/directives/io/Input.d.ts +11 -0
  282. package/transpiled/directives/io/Input.js +63 -0
  283. package/transpiled/directives/io/Input.js.map +1 -0
  284. package/transpiled/directives/io/Message.d.ts +1 -0
  285. package/transpiled/directives/io/Message.js +3 -0
  286. package/transpiled/directives/io/Message.js.map +1 -0
  287. package/transpiled/directives/io/Output.d.ts +13 -0
  288. package/transpiled/directives/io/Output.js +76 -0
  289. package/transpiled/directives/io/Output.js.map +1 -0
  290. package/transpiled/directives/io/index.d.ts +2 -0
  291. package/transpiled/directives/io/index.js +6 -0
  292. package/transpiled/directives/io/index.js.map +1 -0
  293. package/transpiled/directives/io/schemas.d.ts +7 -0
  294. package/transpiled/directives/io/schemas.js +14 -0
  295. package/transpiled/directives/io/schemas.js.map +1 -0
  296. package/transpiled/directives/octets/Context.d.ts +4 -4
  297. package/transpiled/directives/octets/Context.js +4 -2
  298. package/transpiled/directives/octets/Context.js.map +1 -1
  299. package/transpiled/directives/octets/Delete.d.ts +5 -4
  300. package/transpiled/directives/octets/Delete.js +24 -12
  301. package/transpiled/directives/octets/Delete.js.map +1 -1
  302. package/transpiled/directives/octets/Directive.d.ts +8 -0
  303. package/transpiled/directives/octets/Directive.js +8 -0
  304. package/transpiled/directives/octets/Directive.js.map +1 -0
  305. package/transpiled/directives/octets/Fetch.d.ts +4 -3
  306. package/transpiled/directives/octets/Fetch.js +31 -15
  307. package/transpiled/directives/octets/Fetch.js.map +1 -1
  308. package/transpiled/directives/octets/List.d.ts +4 -3
  309. package/transpiled/directives/octets/List.js +16 -7
  310. package/transpiled/directives/octets/List.js.map +1 -1
  311. package/transpiled/directives/octets/Octets.d.ts +4 -4
  312. package/transpiled/directives/octets/Octets.js +8 -4
  313. package/transpiled/directives/octets/Octets.js.map +1 -1
  314. package/transpiled/directives/octets/Permute.d.ts +4 -3
  315. package/transpiled/directives/octets/Permute.js +14 -7
  316. package/transpiled/directives/octets/Permute.js.map +1 -1
  317. package/transpiled/directives/octets/Store.d.ts +6 -4
  318. package/transpiled/directives/octets/Store.js +28 -13
  319. package/transpiled/directives/octets/Store.js.map +1 -1
  320. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  321. package/transpiled/directives/octets/Workflow.js +59 -0
  322. package/transpiled/directives/octets/Workflow.js.map +1 -0
  323. package/transpiled/directives/octets/schemas.d.ts +2 -0
  324. package/transpiled/directives/octets/schemas.js +2 -1
  325. package/transpiled/directives/octets/schemas.js.map +1 -1
  326. package/transpiled/directives/octets/types.d.ts +0 -5
  327. package/transpiled/directives/octets/{workflow → workflows}/Execution.js +0 -1
  328. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  329. package/transpiled/directives/octets/{workflow → workflows}/Workflow.d.ts +1 -1
  330. package/transpiled/directives/octets/{workflow → workflows}/Workflow.js +2 -2
  331. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  332. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  333. package/transpiled/directives/require/Directive.d.ts +4 -0
  334. package/transpiled/directives/require/Directive.js +3 -0
  335. package/transpiled/directives/require/Directive.js.map +1 -0
  336. package/transpiled/directives/require/Headers.d.ts +7 -0
  337. package/transpiled/directives/require/Headers.js +19 -0
  338. package/transpiled/directives/require/Headers.js.map +1 -0
  339. package/transpiled/directives/require/Require.d.ts +9 -0
  340. package/transpiled/directives/require/Require.js +27 -0
  341. package/transpiled/directives/require/Require.js.map +1 -0
  342. package/transpiled/directives/require/index.d.ts +2 -0
  343. package/transpiled/directives/require/index.js +6 -0
  344. package/transpiled/directives/require/index.js.map +1 -0
  345. package/transpiled/directives/vary/Directive.d.ts +2 -1
  346. package/transpiled/directives/vary/Embed.d.ts +2 -1
  347. package/transpiled/directives/vary/Embed.js +8 -6
  348. package/transpiled/directives/vary/Embed.js.map +1 -1
  349. package/transpiled/directives/vary/Vary.d.ts +3 -3
  350. package/transpiled/directives/vary/Vary.js +4 -4
  351. package/transpiled/directives/vary/Vary.js.map +1 -1
  352. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  353. package/transpiled/directives/vary/embeddings/Header.js +9 -7
  354. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  355. package/transpiled/directives/vary/embeddings/Language.js +2 -2
  356. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  357. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  358. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  359. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  360. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  361. package/transpiled/directives/vary/embeddings/index.js +5 -3
  362. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  363. package/transpiled/exceptions.d.ts +3 -2
  364. package/transpiled/exceptions.js +13 -7
  365. package/transpiled/exceptions.js.map +1 -1
  366. package/transpiled/io.d.ts +2 -2
  367. package/transpiled/root.js +5 -0
  368. package/transpiled/root.js.map +1 -1
  369. package/transpiled/tsconfig.tsbuildinfo +1 -1
  370. package/components/identity.federation/operations/assertions-as-values.cjs.map +0 -1
  371. package/components/identity.federation/operations/jwt.cjs.map +0 -1
  372. package/source/HTTP/Server.fixtures.ts +0 -40
  373. package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
  374. package/transpiled/HTTP/Server.fixtures.js +0 -31
  375. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  376. package/transpiled/directives/octets/workflow/Execution.js.map +0 -1
  377. package/transpiled/directives/octets/workflow/Workflow.js.map +0 -1
  378. package/transpiled/directives/octets/workflow/index.js.map +0 -1
  379. /package/components/identity.federation/operations/{assertions-as-values.d.cts → lib/assertions-as-values.d.ts} +0 -0
  380. /package/source/directives/octets/{workflow → workflows}/index.ts +0 -0
  381. /package/transpiled/directives/octets/{workflow → workflows}/Execution.d.ts +0 -0
  382. /package/transpiled/directives/octets/{workflow → workflows}/index.d.ts +0 -0
  383. /package/transpiled/directives/octets/{workflow → workflows}/index.js +0 -0
@@ -0,0 +1,56 @@
1
+ /* eslint-disable max-len */
2
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
3
+ import { validateSignature, decodeJwt } from './jwt'
4
+
5
+ describe('jwt', () => {
6
+ test('decode', () => {
7
+ const { header, payload } = decodeJwt('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg')
8
+
9
+ expect(header).toMatchObject({ alg: 'HS256' })
10
+ expect(payload).toEqual({ some: 'payload' })
11
+ })
12
+
13
+ test('symmetric pass', async () => {
14
+ // example from
15
+ // https://pyjwt.readthedocs.io/en/latest/usage.html#encoding-decoding-tokens-with-hs256
16
+
17
+ await expect(validateSignature({
18
+ header: { alg: 'HS256', kid: 'k2' },
19
+ payload: { iss: 'test-issuer', aud: 'test', sub: '0', exp: 0, iat: 0 },
20
+ rawHeader: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
21
+ rawPayload: 'eyJzb21lIjoicGF5bG9hZCJ9',
22
+ signature: '4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg',
23
+ trusted: [
24
+ {
25
+ issuer: 'test-issuer',
26
+ secrets: {
27
+ HS256: {
28
+ k1: 'old-secret',
29
+ k2: 'secret'
30
+ }
31
+ }
32
+ }
33
+ ]
34
+ } as Parameters<typeof validateSignature>[0])).resolves.toBeUndefined()
35
+ })
36
+
37
+ test('symmetric fail', async () => {
38
+ await expect(validateSignature({
39
+ header: { alg: 'HS256' },
40
+ payload: { iss: 'test-issuer', aud: 'test', sub: '0', exp: 0, iat: 0 },
41
+ rawHeader: 'header',
42
+ rawPayload: 'payload',
43
+ signature: 'signature',
44
+ trusted: [
45
+ {
46
+ issuer: 'test-issuer',
47
+ secrets: {
48
+ HS256: {
49
+ theKey: 'secret'
50
+ }
51
+ }
52
+ }
53
+ ]
54
+ } as Parameters<typeof validateSignature>[0])).rejects.toThrow('Signature does not match')
55
+ })
56
+ })
@@ -1,7 +1,7 @@
1
1
  import crypto from 'node:crypto'
2
2
  import * as assert from 'node:assert'
3
- import type { JwtHeader, IdToken } from './types'
4
- import { type TrustConfiguration } from './schemas'
3
+ import { type JwtHeader, type IdToken } from '../types'
4
+ import { type TrustConfiguration } from '../schemas'
5
5
 
6
6
  export function decodeJwt (token: string): {
7
7
  header: unknown
@@ -20,20 +20,19 @@ export function decodeJwt (token: string): {
20
20
 
21
21
  export function validateJwtHeader (header: unknown): asserts header is JwtHeader {
22
22
  assert.ok(header !== null && typeof header === 'object', 'Header is not an object')
23
- assert.ok('typ' in header, 'Header is missing typ')
24
- assert.equal(header.typ, 'JWT')
25
23
  assert.ok('alg' in header, 'Header is missing alg')
26
24
  assert.ok(typeof header.alg === 'string', 'Header alg is not a string')
27
- assert.equal(header.alg, 'RS256', `We only validating RS256 id_tokens, but got ${header.alg}`)
25
+ assert.match(header.alg, /^RS256|HS\d{3}$/, `Unknown algorithm ${header.alg}`)
26
+ assert.ok(!('kid' in header) || typeof header.kid === 'string', 'kid must be a string if present')
28
27
  }
29
28
 
30
- export function validateJwtPayload (
31
- payload: unknown,
32
- trusted: TrustConfiguration[] = []
33
- ): asserts payload is IdToken {
29
+ export function validateJwtPayload (payload: unknown,
30
+ trusted: TrustConfiguration[] = [],
31
+ header: JwtHeader): asserts payload is IdToken {
34
32
  assert.ok(trusted.length > 0, 'No trusted issuers provided')
35
33
 
36
- // full list of validations is at https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
34
+ // full list of validations is
35
+ // at https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
37
36
  assert.ok(payload !== null && typeof payload === 'object', 'Payload is not an object')
38
37
 
39
38
  assert.ok('iss' in payload, 'Payload is missing iss')
@@ -41,9 +40,24 @@ export function validateJwtPayload (
41
40
  assert.ok('aud' in payload, 'Payload is missing aud')
42
41
  assert.ok(typeof payload.aud === 'string', 'Payload aud is not a string')
43
42
 
44
- assert.ok(trusted.some(config => config.issuer === payload.iss &&
45
- (config.audience === undefined || config.audience.some(a => a === payload.aud))),
46
- `Unknown issuer / audience: ${payload.iss} / ${payload.aud}`)
43
+ const issuer = trusted.find((config) => config.issuer === payload.iss)
44
+
45
+ assert.ok(issuer !== undefined &&
46
+ (issuer.audience === undefined || issuer.audience.some((a) => a === payload.aud),
47
+ `Unknown issuer / audience: ${payload.iss} / ${payload.aud}`))
48
+
49
+ if (header.alg.startsWith('HS')) {
50
+ const secrets = issuer.secrets
51
+
52
+ assert.ok(secrets, `We don't have known secrets for ${payload.iss}`)
53
+
54
+ const keys = secrets[header.alg]
55
+
56
+ assert.ok(keys, `No known secrets for ${header.alg}`)
57
+
58
+ if (typeof header.kid === 'string')
59
+ assert.ok(header.kid in keys, `No secret ${header.kid} provided for ${header.alg}`)
60
+ }
47
61
 
48
62
  assert.ok('sub' in payload, 'Payload is missing sub')
49
63
  assert.ok(typeof payload.sub === 'string', 'Payload sub is not a string')
@@ -68,20 +82,39 @@ export async function validateSignature ({
68
82
  payload: { iss },
69
83
  rawHeader,
70
84
  rawPayload,
71
- signature
85
+ signature,
86
+ trusted = []
72
87
  }: {
73
88
  readonly header: JwtHeader
74
89
  rawHeader: string
75
90
  readonly payload: IdToken
76
91
  rawPayload: string
77
92
  signature: string
93
+ trusted?: TrustConfiguration[]
78
94
  }): Promise<void> {
95
+ if (alg.startsWith('HS')) {
96
+ // symmetric algorithm, issuer is validated at this point
97
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- `kid` is validated
98
+ const secrets = trusted.find((c) => c.issuer === iss)!.secrets![alg]
99
+ const secret = kid !== undefined ? secrets[kid] : Object.values(secrets)[0]
100
+ const algorithm = alg.replace(/^HS(\d{3})$/, 'sha$1') // HS256 -> sha256
101
+ const hmac = crypto.createHmac(algorithm, secret)
102
+
103
+ hmac.update(rawHeader)
104
+ hmac.update('.')
105
+ hmac.update(rawPayload)
106
+ assert.strictEqual(signature, hmac.digest('base64url'), 'Signature does not match')
107
+
108
+ return
109
+ }
110
+
79
111
  // Getting issuer public keys
80
112
  const oidcRequest = await fetch(`${iss}/.well-known/openid-configuration`, {
81
113
  cache: 'default'
82
114
  })
83
115
 
84
- assert.ok(oidcRequest.ok, `Failed to fetch OpenID configuration: ${oidcRequest.statusText}`)
116
+ assert.ok(oidcRequest.ok,
117
+ `Failed to fetch OpenID configuration: ${oidcRequest.statusText}`)
85
118
 
86
119
  const { jwks_uri: jwksUri } = (await oidcRequest.json()) as { jwks_uri: string }
87
120
 
@@ -98,10 +131,8 @@ export async function validateSignature ({
98
131
 
99
132
  assert.ok(signingKeys.length > 0, 'No acceptable signing keys found')
100
133
 
101
- assert.ok(
102
- kid === undefined || signingKeys.length === 1,
103
- 'Signing key selection is not deterministic'
104
- )
134
+ assert.ok(kid === undefined || signingKeys.length === 1,
135
+ 'Signing key selection is not deterministic')
105
136
 
106
137
  const signingKey = kid === undefined ? signingKeys.find((k) => k.kid === kid) : keys[0]
107
138
 
@@ -114,29 +145,26 @@ export async function validateSignature ({
114
145
  verifyFunction.write(rawPayload)
115
146
  verifyFunction.end()
116
147
 
117
- const signatureValid = verifyFunction.verify(
118
- { format: 'jwk', key: signingKey },
148
+ const signatureValid = verifyFunction.verify({ format: 'jwk', key: signingKey },
119
149
  signature,
120
- 'base64url'
121
- )
150
+ 'base64url')
122
151
 
123
152
  assert.ok(signatureValid, 'Failed to validate signature')
124
153
  }
125
154
 
126
- export async function validateIdToken (
127
- token: string,
128
- trusted?: TrustConfiguration[]
129
- ): Promise<IdToken> {
155
+ export async function validateIdToken (token: string,
156
+ trusted?: TrustConfiguration[]): Promise<IdToken> {
130
157
  const { header, payload, rawHeader, rawPayload, signature } = decodeJwt(token)
131
158
 
132
159
  validateJwtHeader(header)
133
- validateJwtPayload(payload, trusted)
160
+ validateJwtPayload(payload, trusted, header)
134
161
  await validateSignature({
135
162
  header,
136
163
  rawHeader,
137
164
  payload,
138
165
  rawPayload,
139
- signature
166
+ signature,
167
+ trusted
140
168
  })
141
169
 
142
170
  return payload
@@ -42,4 +42,20 @@ export interface TrustConfiguration {
42
42
  * @minItems 1
43
43
  */
44
44
  audience?: [string, ...string[]];
45
+ /**
46
+ * Symmetric encryption secrets
47
+ */
48
+ secrets?: {
49
+ /**
50
+ * This interface was referenced by `undefined`'s JSON-Schema definition
51
+ * via the `patternProperty` "^HS\d{3}$".
52
+ */
53
+ [k: string]: {
54
+ /**
55
+ * This interface was referenced by `undefined`'s JSON-Schema definition
56
+ * via the `patternProperty` "^\w+$".
57
+ */
58
+ [k: string]: string;
59
+ };
60
+ };
45
61
  }
@@ -32,7 +32,7 @@ interface IdentityTokensRevokeInput {
32
32
  }
33
33
 
34
34
  export interface JwtHeader {
35
- typ: string
35
+ typ?: string
36
36
  alg: string
37
37
  kid?: string
38
38
  }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "extends": "../../tsconfig.json",
3
3
  "compilerOptions": {
4
- "outDir": "./operations",
4
+ "outDir": "./operations"
5
5
  },
6
6
  "include": [
7
7
  "source"
8
8
  ]
9
- }
9
+ }
@@ -4,14 +4,20 @@ name: roles
4
4
  entity:
5
5
  schema:
6
6
  identity*: string
7
- role*: string
7
+ role*: /^[a-zA-Z0-9]{1,32}(:[a-zA-Z0-9]{1,32}){0,8}$/
8
+ grantor: string
9
+ unique:
10
+ role: [identity, role]
8
11
 
9
12
  operations:
10
- transit:
13
+ grant:
11
14
  query: false
12
15
  input:
13
- identity*: string
14
- role*: string
16
+ identity*: .
17
+ role*: .
18
+ grantor:
19
+ id: string
20
+ roles: [string]
15
21
  list:
16
22
  output: [string]
17
23
  principal:
@@ -20,12 +26,19 @@ operations:
20
26
 
21
27
  receivers:
22
28
  identity.basic.principal: principal
29
+ identity.federation.principal: principal
23
30
 
24
31
  exposition:
25
32
  isolated: true
26
33
  /:identity:
27
34
  auth:role: system:identity:roles
28
- POST: transit
35
+ POST:
36
+ io:output: [id, grantor]
37
+ auth:rule:
38
+ delegate: grantor
39
+ role: system:identity:roles:delegation
40
+ endpoint: grant
29
41
  GET:
42
+ io:output: true # array of strings
30
43
  auth:id: identity
31
44
  endpoint: list
@@ -0,0 +1,10 @@
1
+ import type { Entity } from './lib/Entity';
2
+ export declare function transition(input: Input, object: Entity): Promise<Entity | Error>;
3
+ export interface Input {
4
+ identity: string;
5
+ role: string;
6
+ grantor?: {
7
+ id: string;
8
+ roles: string[];
9
+ };
10
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transition = void 0;
4
+ const error_value_1 = require("error-value");
5
+ async function transition(input, object) {
6
+ if (input.grantor === undefined)
7
+ return Object.assign(object, input);
8
+ if (!within('system:identity:roles', input.grantor.roles) &&
9
+ !within(input.role, input.grantor.roles))
10
+ return ERR_OUT_OF_SCOPE;
11
+ object.role = input.role;
12
+ object.identity = input.identity;
13
+ object.grantor = input.grantor.id;
14
+ return object;
15
+ }
16
+ exports.transition = transition;
17
+ function within(role, scopes) {
18
+ return scopes.some((scope) => role === scope || role.startsWith(scope + ':'));
19
+ }
20
+ const ERR_OUT_OF_SCOPE = (0, error_value_1.Err)('OUT_OF_SCOPE');
21
+ //# sourceMappingURL=grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant.js","sourceRoot":"","sources":["../source/grant.ts"],"names":[],"mappings":";;;AAAA,6CAAiC;AAG1B,KAAK,UAAU,UAAU,CAAE,KAAY,EAAE,MAAc;IAC5D,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAErC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACvD,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC,OAAO,gBAAgB,CAAA;IAEzB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACxB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;IAChC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAA;IAEjC,OAAO,MAAM,CAAA;AACf,CAAC;AAbD,gCAaC;AAED,SAAS,MAAM,CAAE,IAAY,EAAE,MAAgB;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAA,iBAAG,EAAC,cAAc,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export interface Entity {
2
+ identity: string;
3
+ role: string;
4
+ grantor?: string;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../source/lib/Entity.ts"],"names":[],"mappings":""}
@@ -1,5 +1,2 @@
1
+ import type { Entity } from './lib/Entity';
1
2
  export declare function observation(_: unknown, objects: Entity[]): string[];
2
- interface Entity {
3
- role: string;
4
- }
5
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../source/list.ts"],"names":[],"mappings":";;;AAAA,SAAgB,WAAW,CAAE,CAAU,EAAE,OAAiB;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAFD,kCAEC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../source/list.ts"],"names":[],"mappings":";;;AAEA,SAAgB,WAAW,CAAE,CAAU,EAAE,OAAiB;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAFD,kCAEC"}
@@ -1,15 +1,13 @@
1
- import { type Call } from '@toa.io/types';
1
+ import type { Entity } from './lib/Entity';
2
+ import type { Call } from '@toa.io/types';
3
+ import type { Input as GrantInput } from './grant';
2
4
  export declare function effect(input: Identity, context: Context): Promise<void>;
3
5
  interface Identity {
4
6
  id: string;
5
7
  }
6
8
  export interface Context {
7
9
  local: {
8
- transit: Call<void, TransitInput>;
10
+ grant: Call<Entity, GrantInput>;
9
11
  };
10
12
  }
11
- interface TransitInput {
12
- identity: string;
13
- role: string;
14
- }
15
13
  export {};
@@ -2,7 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.effect = void 0;
4
4
  async function effect(input, context) {
5
- await context.local.transit({ input: { identity: input.id, role: 'system' } });
5
+ await context.local.grant({
6
+ input: {
7
+ identity: input.id,
8
+ role: 'system'
9
+ }
10
+ });
6
11
  }
7
12
  exports.effect = effect;
8
13
  //# sourceMappingURL=principal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"principal.js","sourceRoot":"","sources":["../source/principal.ts"],"names":[],"mappings":";;;AAEO,KAAK,UAAU,MAAM,CAAE,KAAe,EAAE,OAAgB;IAC7D,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;AAChF,CAAC;AAFD,wBAEC"}
1
+ {"version":3,"file":"principal.js","sourceRoot":"","sources":["../source/principal.ts"],"names":[],"mappings":";;;AAIO,KAAK,UAAU,MAAM,CAAE,KAAe,EAAE,OAAgB;IAC7D,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACxB,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ;SACf;KACF,CAAC,CAAA;AACJ,CAAC;AAPD,wBAOC"}