@greenpandastudios/aug-cli 0.19.0

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 (414) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/THIRD_PARTY_NOTICES.md +18 -0
  4. package/bin/aug.mjs +3 -0
  5. package/docs/api/crypto.md +351 -0
  6. package/docs/api/io.md +207 -0
  7. package/docs/api/json.md +21 -0
  8. package/docs/api/memory.md +109 -0
  9. package/docs/api/time.md +54 -0
  10. package/docs/api/web.md +184 -0
  11. package/docs/assets/benchmarks/execution.svg +2978 -0
  12. package/docs/assets/benchmarks/http.svg +1674 -0
  13. package/docs/assets/benchmarks/improvements.svg +2315 -0
  14. package/docs/assets/benchmarks/memory.svg +1891 -0
  15. package/docs/benchmark-baseline.json +1087 -0
  16. package/docs/benchmark-results.json +91123 -0
  17. package/docs/benchmarks.json +38 -0
  18. package/docs/compatibility.md +42 -0
  19. package/docs/concurrency-implementation.md +18 -0
  20. package/docs/diagnostics.md +97 -0
  21. package/docs/docker.md +35 -0
  22. package/docs/example-projects.json +26 -0
  23. package/docs/examples/approved-design/counters.md +253 -0
  24. package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +395 -0
  25. package/docs/examples/approved-design/domain/app.md +165 -0
  26. package/docs/examples/approved-design/domain/export.md +83 -0
  27. package/docs/examples/approved-design/domain/models.md +80 -0
  28. package/docs/examples/approved-design/domain/numbers.md +248 -0
  29. package/docs/examples/approved-design/index.md +39 -0
  30. package/docs/examples/approved-design/main-yaml.md +24 -0
  31. package/docs/examples/approved-design/main.md +215 -0
  32. package/docs/examples/benchmark/index.md +33 -0
  33. package/docs/examples/benchmark/main-yaml.md +17 -0
  34. package/docs/examples/benchmark/main.md +117 -0
  35. package/docs/examples/cli-args/index.md +32 -0
  36. package/docs/examples/cli-args/main.md +107 -0
  37. package/docs/examples/collections/index.md +32 -0
  38. package/docs/examples/collections/main.md +118 -0
  39. package/docs/examples/collections-benchmark/index.md +34 -0
  40. package/docs/examples/collections-benchmark/main.md +115 -0
  41. package/docs/examples/cpu-benchmark/index.md +34 -0
  42. package/docs/examples/cpu-benchmark/main.md +90 -0
  43. package/docs/examples/developer-workflow/calculator.md +357 -0
  44. package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +395 -0
  45. package/docs/examples/developer-workflow/index.md +37 -0
  46. package/docs/examples/developer-workflow/logging/console.md +124 -0
  47. package/docs/examples/developer-workflow/logging/export.md +70 -0
  48. package/docs/examples/developer-workflow/logging/logger.md +111 -0
  49. package/docs/examples/developer-workflow/main.md +172 -0
  50. package/docs/examples/drop/index.md +33 -0
  51. package/docs/examples/drop/main.md +85 -0
  52. package/docs/examples/drop/resource.md +95 -0
  53. package/docs/examples/errors/errors.md +85 -0
  54. package/docs/examples/errors/index.md +33 -0
  55. package/docs/examples/errors/main.md +92 -0
  56. package/docs/examples/ffi/index.md +33 -0
  57. package/docs/examples/ffi/main.md +75 -0
  58. package/docs/examples/ffi/native.md +93 -0
  59. package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +395 -0
  60. package/docs/examples/generic-di/index.md +33 -0
  61. package/docs/examples/generic-di/main.md +111 -0
  62. package/docs/examples/generic-di/types.md +180 -0
  63. package/docs/examples/generics/index.md +33 -0
  64. package/docs/examples/generics/main.md +120 -0
  65. package/docs/examples/generics/types.md +189 -0
  66. package/docs/examples/hello/app/export.md +67 -0
  67. package/docs/examples/hello/app/greeter.md +190 -0
  68. package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +395 -0
  69. package/docs/examples/hello/index.md +37 -0
  70. package/docs/examples/hello/logging/console.md +121 -0
  71. package/docs/examples/hello/logging/export.md +71 -0
  72. package/docs/examples/hello/logging/logger.md +120 -0
  73. package/docs/examples/hello/main.md +115 -0
  74. package/docs/examples/http-benchmark/index.md +35 -0
  75. package/docs/examples/http-benchmark/main.md +79 -0
  76. package/docs/examples/http-benchmark/routes.md +88 -0
  77. package/docs/examples/index.md +60 -0
  78. package/docs/examples/interceptors/app.md +250 -0
  79. package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +395 -0
  80. package/docs/examples/interceptors/index.md +35 -0
  81. package/docs/examples/interceptors/interceptors.md +284 -0
  82. package/docs/examples/interceptors/logging.md +155 -0
  83. package/docs/examples/interceptors/main.md +162 -0
  84. package/docs/examples/json-benchmark/data.md +71 -0
  85. package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +103 -0
  86. package/docs/examples/json-benchmark/index.md +35 -0
  87. package/docs/examples/json-benchmark/main.md +131 -0
  88. package/docs/examples/new-syntax/console.md +118 -0
  89. package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +395 -0
  90. package/docs/examples/new-syntax/greeter.md +145 -0
  91. package/docs/examples/new-syntax/index.md +36 -0
  92. package/docs/examples/new-syntax/logger.md +111 -0
  93. package/docs/examples/new-syntax/main.md +135 -0
  94. package/docs/examples/new-syntax/math.md +79 -0
  95. package/docs/examples/oidc-login/client/contracts.md +151 -0
  96. package/docs/examples/oidc-login/client/endpoints.md +263 -0
  97. package/docs/examples/oidc-login/client/export.md +107 -0
  98. package/docs/examples/oidc-login/client/login.md +515 -0
  99. package/docs/examples/oidc-login/client/logout.md +249 -0
  100. package/docs/examples/oidc-login/client/protocol.md +595 -0
  101. package/docs/examples/oidc-login/client/session.md +297 -0
  102. package/docs/examples/oidc-login/client/views.md +144 -0
  103. package/docs/examples/oidc-login/common/export.md +115 -0
  104. package/docs/examples/oidc-login/common/headers.md +162 -0
  105. package/docs/examples/oidc-login/common/keys.md +336 -0
  106. package/docs/examples/oidc-login/common/settings.md +116 -0
  107. package/docs/examples/oidc-login/common/views.md +103 -0
  108. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +925 -0
  109. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +434 -0
  110. package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +103 -0
  111. package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +374 -0
  112. package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +150 -0
  113. package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +532 -0
  114. package/docs/examples/oidc-login/index.md +57 -0
  115. package/docs/examples/oidc-login/main-yaml.md +28 -0
  116. package/docs/examples/oidc-login/main.md +283 -0
  117. package/docs/examples/oidc-login/provider/authorization.md +457 -0
  118. package/docs/examples/oidc-login/provider/contracts.md +267 -0
  119. package/docs/examples/oidc-login/provider/credentials.md +148 -0
  120. package/docs/examples/oidc-login/provider/discovery.md +215 -0
  121. package/docs/examples/oidc-login/provider/export.md +131 -0
  122. package/docs/examples/oidc-login/provider/token.md +364 -0
  123. package/docs/examples/oidc-login/provider/userinfo.md +228 -0
  124. package/docs/examples/oidc-login/provider/views.md +137 -0
  125. package/docs/examples/ownership/counter.md +140 -0
  126. package/docs/examples/ownership/index.md +33 -0
  127. package/docs/examples/ownership/main.md +90 -0
  128. package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +395 -0
  129. package/docs/examples/ownership-transfer/index.md +33 -0
  130. package/docs/examples/ownership-transfer/main.md +125 -0
  131. package/docs/examples/ownership-transfer/resource.md +150 -0
  132. package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +117 -0
  133. package/docs/examples/packages-app/index.md +34 -0
  134. package/docs/examples/packages-app/main-yaml.md +18 -0
  135. package/docs/examples/packages-app/main.md +80 -0
  136. package/docs/examples/packages-math/aug-package-json.md +24 -0
  137. package/docs/examples/packages-math/index.md +36 -0
  138. package/docs/examples/packages-math/package-json.md +25 -0
  139. package/docs/examples/packages-math/src/arithmetic.md +121 -0
  140. package/docs/examples/packages-math/src/export.md +63 -0
  141. package/docs/examples/startup-benchmark/index.md +34 -0
  142. package/docs/examples/startup-benchmark/main.md +68 -0
  143. package/docs/examples/visibility/counter.md +142 -0
  144. package/docs/examples/visibility/index.md +33 -0
  145. package/docs/examples/visibility/main.md +96 -0
  146. package/docs/examples.json +47 -0
  147. package/docs/getting-started.md +5 -0
  148. package/docs/grammar.md +136 -0
  149. package/docs/implementation-map.md +106 -0
  150. package/docs/index.md +46 -0
  151. package/docs/language-conformance.md +30 -0
  152. package/docs/language-constructs.md +1461 -0
  153. package/docs/language-design-audit.md +147 -0
  154. package/docs/maintaining-docs.md +43 -0
  155. package/docs/packages.md +184 -0
  156. package/docs/performance.md +535 -0
  157. package/docs/production-readiness.md +39 -0
  158. package/docs/reference.md +361 -0
  159. package/docs/release-review.md +23 -0
  160. package/docs/releasing.md +79 -0
  161. package/docs/roadmap.md +13 -0
  162. package/docs/specifications.md +86 -0
  163. package/docs/testing.md +120 -0
  164. package/docs/tooling.md +197 -0
  165. package/docs/web-implementation-plan.md +39 -0
  166. package/docs/web-library-gaps.md +27 -0
  167. package/docs/web.md +197 -0
  168. package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  169. package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  170. package/examples/approved-design/.aug-spec/manifest.json +14 -0
  171. package/examples/approved-design/counters.aug +22 -0
  172. package/examples/approved-design/counters.aug.md +177 -0
  173. package/examples/approved-design/domain/app.aug +12 -0
  174. package/examples/approved-design/domain/app.aug.md +97 -0
  175. package/examples/approved-design/domain/export.aug +5 -0
  176. package/examples/approved-design/domain/export.aug.md +25 -0
  177. package/examples/approved-design/domain/models.aug +2 -0
  178. package/examples/approved-design/domain/models.aug.md +30 -0
  179. package/examples/approved-design/domain/numbers.aug +29 -0
  180. package/examples/approved-design/domain/numbers.aug.md +141 -0
  181. package/examples/approved-design/main.aug +26 -0
  182. package/examples/approved-design/main.aug.md +108 -0
  183. package/examples/approved-design/main.yaml +8 -0
  184. package/examples/benchmark/.aug-spec/manifest.json +7 -0
  185. package/examples/benchmark/main.aug +17 -0
  186. package/examples/benchmark/main.aug.md +43 -0
  187. package/examples/benchmark/main.yaml +1 -0
  188. package/examples/cli-args/.aug-spec/manifest.json +7 -0
  189. package/examples/cli-args/main.aug +15 -0
  190. package/examples/cli-args/main.aug.md +38 -0
  191. package/examples/collections/.aug-spec/manifest.json +7 -0
  192. package/examples/collections/main.aug +18 -0
  193. package/examples/collections/main.aug.md +43 -0
  194. package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  195. package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  196. package/examples/developer-workflow/.aug-spec/manifest.json +13 -0
  197. package/examples/developer-workflow/calculator.aug +55 -0
  198. package/examples/developer-workflow/calculator.aug.md +228 -0
  199. package/examples/developer-workflow/logging/console.aug +8 -0
  200. package/examples/developer-workflow/logging/console.aug.md +67 -0
  201. package/examples/developer-workflow/logging/export.aug +2 -0
  202. package/examples/developer-workflow/logging/export.aug.md +19 -0
  203. package/examples/developer-workflow/logging/logger.aug +6 -0
  204. package/examples/developer-workflow/logging/logger.aug.md +57 -0
  205. package/examples/developer-workflow/main.aug +25 -0
  206. package/examples/developer-workflow/main.aug.md +79 -0
  207. package/examples/drop/.aug-spec/manifest.json +8 -0
  208. package/examples/drop/main.aug +3 -0
  209. package/examples/drop/main.aug.md +35 -0
  210. package/examples/drop/resource.aug +8 -0
  211. package/examples/drop/resource.aug.md +44 -0
  212. package/examples/errors/.aug-spec/manifest.json +8 -0
  213. package/examples/errors/errors.aug +6 -0
  214. package/examples/errors/errors.aug.md +33 -0
  215. package/examples/errors/main.aug +7 -0
  216. package/examples/errors/main.aug.md +36 -0
  217. package/examples/ffi/.aug-spec/manifest.json +8 -0
  218. package/examples/ffi/main.aug +2 -0
  219. package/examples/ffi/main.aug.md +27 -0
  220. package/examples/ffi/native.aug +6 -0
  221. package/examples/ffi/native.aug.md +43 -0
  222. package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  223. package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  224. package/examples/generic-di/.aug-spec/manifest.json +10 -0
  225. package/examples/generic-di/main.aug +9 -0
  226. package/examples/generic-di/main.aug.md +49 -0
  227. package/examples/generic-di/types.aug +17 -0
  228. package/examples/generic-di/types.aug.md +124 -0
  229. package/examples/generics/.aug-spec/manifest.json +8 -0
  230. package/examples/generics/main.aug +9 -0
  231. package/examples/generics/main.aug.md +58 -0
  232. package/examples/generics/types.aug +19 -0
  233. package/examples/generics/types.aug.md +132 -0
  234. package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  235. package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  236. package/examples/hello/.aug-spec/manifest.json +14 -0
  237. package/examples/hello/app/export.aug +1 -0
  238. package/examples/hello/app/export.aug.md +17 -0
  239. package/examples/hello/app/greeter.aug +22 -0
  240. package/examples/hello/app/greeter.aug.md +109 -0
  241. package/examples/hello/logging/console.aug +7 -0
  242. package/examples/hello/logging/console.aug.md +65 -0
  243. package/examples/hello/logging/export.aug +2 -0
  244. package/examples/hello/logging/export.aug.md +19 -0
  245. package/examples/hello/logging/logger.aug +9 -0
  246. package/examples/hello/logging/logger.aug.md +59 -0
  247. package/examples/hello/main.aug +9 -0
  248. package/examples/hello/main.aug.md +49 -0
  249. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  250. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  251. package/examples/interceptors/.aug-spec/manifest.json +12 -0
  252. package/examples/interceptors/app.aug +28 -0
  253. package/examples/interceptors/app.aug.md +162 -0
  254. package/examples/interceptors/interceptors.aug +40 -0
  255. package/examples/interceptors/interceptors.aug.md +180 -0
  256. package/examples/interceptors/logging.aug +12 -0
  257. package/examples/interceptors/logging.aug.md +96 -0
  258. package/examples/interceptors/main.aug +22 -0
  259. package/examples/interceptors/main.aug.md +76 -0
  260. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  261. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  262. package/examples/new-syntax/.aug-spec/manifest.json +13 -0
  263. package/examples/new-syntax/console.aug +7 -0
  264. package/examples/new-syntax/console.aug.md +63 -0
  265. package/examples/new-syntax/greeter.aug +10 -0
  266. package/examples/new-syntax/greeter.aug.md +89 -0
  267. package/examples/new-syntax/logger.aug +6 -0
  268. package/examples/new-syntax/logger.aug.md +57 -0
  269. package/examples/new-syntax/main.aug +12 -0
  270. package/examples/new-syntax/main.aug.md +64 -0
  271. package/examples/new-syntax/math.aug +3 -0
  272. package/examples/new-syntax/math.aug.md +29 -0
  273. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug +73 -0
  274. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +791 -0
  275. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug +68 -0
  276. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +266 -0
  277. package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug +6 -0
  278. package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +55 -0
  279. package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug +45 -0
  280. package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +250 -0
  281. package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug +11 -0
  282. package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +96 -0
  283. package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug +58 -0
  284. package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +420 -0
  285. package/examples/oidc-login/.aug-spec/manifest.json +40 -0
  286. package/examples/oidc-login/README.md +29 -0
  287. package/examples/oidc-login/client/contracts.aug +7 -0
  288. package/examples/oidc-login/client/contracts.aug.md +80 -0
  289. package/examples/oidc-login/client/endpoints.aug +21 -0
  290. package/examples/oidc-login/client/endpoints.aug.md +161 -0
  291. package/examples/oidc-login/client/export.aug +7 -0
  292. package/examples/oidc-login/client/export.aug.md +29 -0
  293. package/examples/oidc-login/client/login.aug +58 -0
  294. package/examples/oidc-login/client/login.aug.md +331 -0
  295. package/examples/oidc-login/client/logout.aug +18 -0
  296. package/examples/oidc-login/client/logout.aug.md +150 -0
  297. package/examples/oidc-login/client/protocol.aug +106 -0
  298. package/examples/oidc-login/client/protocol.aug.md +326 -0
  299. package/examples/oidc-login/client/session.aug +34 -0
  300. package/examples/oidc-login/client/session.aug.md +155 -0
  301. package/examples/oidc-login/client/views.aug +21 -0
  302. package/examples/oidc-login/client/views.aug.md +68 -0
  303. package/examples/oidc-login/common/export.aug +9 -0
  304. package/examples/oidc-login/common/export.aug.md +33 -0
  305. package/examples/oidc-login/common/headers.aug +11 -0
  306. package/examples/oidc-login/common/headers.aug.md +79 -0
  307. package/examples/oidc-login/common/keys.aug +37 -0
  308. package/examples/oidc-login/common/keys.aug.md +207 -0
  309. package/examples/oidc-login/common/settings.aug +4 -0
  310. package/examples/oidc-login/common/settings.aug.md +47 -0
  311. package/examples/oidc-login/common/views.aug +16 -0
  312. package/examples/oidc-login/common/views.aug.md +34 -0
  313. package/examples/oidc-login/main.aug +39 -0
  314. package/examples/oidc-login/main.aug.md +166 -0
  315. package/examples/oidc-login/main.yaml +12 -0
  316. package/examples/oidc-login/provider/authorization.aug +59 -0
  317. package/examples/oidc-login/provider/authorization.aug.md +264 -0
  318. package/examples/oidc-login/provider/contracts.aug +15 -0
  319. package/examples/oidc-login/provider/contracts.aug.md +193 -0
  320. package/examples/oidc-login/provider/credentials.aug +10 -0
  321. package/examples/oidc-login/provider/credentials.aug.md +64 -0
  322. package/examples/oidc-login/provider/discovery.aug +13 -0
  323. package/examples/oidc-login/provider/discovery.aug.md +133 -0
  324. package/examples/oidc-login/provider/export.aug +13 -0
  325. package/examples/oidc-login/provider/export.aug.md +41 -0
  326. package/examples/oidc-login/provider/token.aug +37 -0
  327. package/examples/oidc-login/provider/token.aug.md +223 -0
  328. package/examples/oidc-login/provider/userinfo.aug +26 -0
  329. package/examples/oidc-login/provider/userinfo.aug.md +104 -0
  330. package/examples/oidc-login/provider/views.aug +18 -0
  331. package/examples/oidc-login/provider/views.aug.md +63 -0
  332. package/examples/ownership/.aug-spec/manifest.json +8 -0
  333. package/examples/ownership/counter.aug +14 -0
  334. package/examples/ownership/counter.aug.md +85 -0
  335. package/examples/ownership/main.aug +4 -0
  336. package/examples/ownership/main.aug.md +38 -0
  337. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
  338. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
  339. package/examples/ownership-transfer/.aug-spec/manifest.json +10 -0
  340. package/examples/ownership-transfer/main.aug +9 -0
  341. package/examples/ownership-transfer/main.aug.md +63 -0
  342. package/examples/ownership-transfer/resource.aug +16 -0
  343. package/examples/ownership-transfer/resource.aug.md +89 -0
  344. package/examples/packages/README.md +15 -0
  345. package/examples/packages/app/.aug-spec/manifest.json +9 -0
  346. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +9 -0
  347. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +63 -0
  348. package/examples/packages/app/main.aug +2 -0
  349. package/examples/packages/app/main.aug.md +33 -0
  350. package/examples/packages/app/main.yaml +2 -0
  351. package/examples/packages/math/.aug-spec/manifest.json +8 -0
  352. package/examples/packages/math/README.md +3 -0
  353. package/examples/packages/math/aug-package.json +8 -0
  354. package/examples/packages/math/package.json +9 -0
  355. package/examples/packages/math/src/arithmetic.aug +8 -0
  356. package/examples/packages/math/src/arithmetic.aug.md +63 -0
  357. package/examples/packages/math/src/export.aug +1 -0
  358. package/examples/packages/math/src/export.aug.md +17 -0
  359. package/examples/visibility/.aug-spec/manifest.json +8 -0
  360. package/examples/visibility/counter.aug +14 -0
  361. package/examples/visibility/counter.aug.md +87 -0
  362. package/examples/visibility/main.aug +7 -0
  363. package/examples/visibility/main.aug.md +39 -0
  364. package/package.json +50 -0
  365. package/runtime/aug_crypto.c +121 -0
  366. package/runtime/aug_html.c +93 -0
  367. package/runtime/aug_http.c +829 -0
  368. package/runtime/aug_json.c +165 -0
  369. package/runtime/aug_runtime.c +792 -0
  370. package/runtime/aug_runtime.h +245 -0
  371. package/runtime/aug_tasks.c +172 -0
  372. package/runtime/aug_time.c +5 -0
  373. package/runtime/aug_values.c +80 -0
  374. package/scripts/bootstrap-native.mjs +121 -0
  375. package/scripts/native-dependencies.lock.json +65 -0
  376. package/scripts/native-home.mjs +11 -0
  377. package/src/actions.js +109 -0
  378. package/src/ast.js +19 -0
  379. package/src/builtins.js +93 -0
  380. package/src/checker.js +2896 -0
  381. package/src/cli.js +344 -0
  382. package/src/codegen.js +1159 -0
  383. package/src/config.js +149 -0
  384. package/src/continuation.js +110 -0
  385. package/src/di.js +24 -0
  386. package/src/documentation.js +27 -0
  387. package/src/editor.js +782 -0
  388. package/src/effects.js +29 -0
  389. package/src/fixes.js +222 -0
  390. package/src/formatter.js +296 -0
  391. package/src/freshness.js +154 -0
  392. package/src/help.js +212 -0
  393. package/src/html.js +27 -0
  394. package/src/http-policies.js +90 -0
  395. package/src/inference.js +16 -0
  396. package/src/interceptors.js +70 -0
  397. package/src/javadoc.js +67 -0
  398. package/src/lexer.js +199 -0
  399. package/src/libraries.js +31 -0
  400. package/src/lsp.js +180 -0
  401. package/src/native.js +144 -0
  402. package/src/navigation.js +162 -0
  403. package/src/openapi.js +220 -0
  404. package/src/ownership.js +232 -0
  405. package/src/package-manager.js +299 -0
  406. package/src/parser.js +1155 -0
  407. package/src/policies.js +130 -0
  408. package/src/project-init.js +19 -0
  409. package/src/project.js +292 -0
  410. package/src/schemas.js +62 -0
  411. package/src/semantic.js +255 -0
  412. package/src/spec.js +738 -0
  413. package/src/testing.js +186 -0
  414. package/src/types.js +10 -0
@@ -0,0 +1,131 @@
1
+ ---
2
+ title: "provider/export.aug · OpenID Connect login application"
3
+ generated: true
4
+ source: "examples/oidc-login/provider/export.aug"
5
+ editLink: false
6
+ prev: false
7
+ next: false
8
+ outline: [2, 3]
9
+ pageClass: aug-example-page
10
+ ---
11
+
12
+ # `provider/export.aug`
13
+
14
+ [OpenID Connect login application](../index.md) · Source and specification
15
+
16
+ ::: details Files in this project
17
+
18
+ - [`main.aug`](../main.md)
19
+ - [`client/contracts.aug`](../client/contracts.md)
20
+ - [`client/endpoints.aug`](../client/endpoints.md)
21
+ - [`client/export.aug`](../client/export.md)
22
+ - [`client/login.aug`](../client/login.md)
23
+ - [`client/logout.aug`](../client/logout.md)
24
+ - [`client/protocol.aug`](../client/protocol.md)
25
+ - [`client/session.aug`](../client/session.md)
26
+ - [`client/views.aug`](../client/views.md)
27
+ - [`common/export.aug`](../common/export.md)
28
+ - [`common/headers.aug`](../common/headers.md)
29
+ - [`common/keys.aug`](../common/keys.md)
30
+ - [`common/settings.aug`](../common/settings.md)
31
+ - [`common/views.aug`](../common/views.md)
32
+ - [`provider/authorization.aug`](authorization.md)
33
+ - [`provider/contracts.aug`](contracts.md)
34
+ - [`provider/credentials.aug`](credentials.md)
35
+ - [`provider/discovery.aug`](discovery.md)
36
+ - [`provider/export.aug`](export.md)
37
+ - [`provider/token.aug`](token.md)
38
+ - [`provider/userinfo.aug`](userinfo.md)
39
+ - [`provider/views.aug`](views.md)
40
+
41
+ :::
42
+
43
+ ::::: example-compare
44
+
45
+ :::: example-code
46
+
47
+ ## Code {#code}
48
+
49
+ ::: code-group
50
+
51
+ ```aug [Indentation]
52
+ export AuthorizationRequest from contracts
53
+ export AuthorizationCode from contracts
54
+ export AccessGrant from contracts
55
+ export IdClaims from contracts
56
+ export TokenResponse from contracts
57
+ export UserInfo from contracts
58
+ export Discovery from discovery
59
+ export discovery from discovery
60
+ export jwks from discovery
61
+ export authorize from authorization
62
+ export providerLogin from authorization
63
+ export token from token
64
+ export userinfo from userinfo
65
+ ```
66
+
67
+ ```aug [Braces]
68
+ export AuthorizationRequest from contracts
69
+ export AuthorizationCode from contracts
70
+ export AccessGrant from contracts
71
+ export IdClaims from contracts
72
+ export TokenResponse from contracts
73
+ export UserInfo from contracts
74
+ export Discovery from discovery
75
+ export discovery from discovery
76
+ export jwks from discovery
77
+ export authorize from authorization
78
+ export providerLogin from authorization
79
+ export token from token
80
+ export userinfo from userinfo
81
+ ```
82
+
83
+ :::
84
+
85
+ ::::
86
+
87
+ :::: example-spec
88
+
89
+ ## Compiled specification {#specification}
90
+
91
+ August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
92
+
93
+ ### In this file
94
+
95
+ - Export `AuthorizationRequest` from this folder.
96
+ - Export `AuthorizationCode` from this folder.
97
+ - Export `AccessGrant` from this folder.
98
+ - Export `IdClaims` from this folder.
99
+ - Export `TokenResponse` from this folder.
100
+ - Export `UserInfo` from this folder.
101
+ - Export `Discovery` from this folder.
102
+ - Export `discovery` from this folder.
103
+ - Export `jwks` from this folder.
104
+ - Export `authorize` from this folder.
105
+ - Export `providerLogin` from this folder.
106
+ - Export `token` from this folder.
107
+ - Export `userinfo` from this folder.
108
+
109
+ ### Folder exports
110
+
111
+ - Export the declaration `AuthorizationRequest` from [`contracts.aug`](contracts.md#symbol-AuthorizationRequest).
112
+ - Export the declaration `AuthorizationCode` from [`contracts.aug`](contracts.md#symbol-AuthorizationCode).
113
+ - Export the declaration `AccessGrant` from [`contracts.aug`](contracts.md#symbol-AccessGrant).
114
+ - Export the declaration `IdClaims` from [`contracts.aug`](contracts.md#symbol-IdClaims).
115
+ - Export the declaration `TokenResponse` from [`contracts.aug`](contracts.md#symbol-TokenResponse).
116
+ - Export the declaration `UserInfo` from [`contracts.aug`](contracts.md#symbol-UserInfo).
117
+ - Export the declaration `Discovery` from [`discovery.aug`](discovery.md#symbol-Discovery).
118
+ - Export the declaration `discovery` from [`discovery.aug`](discovery.md#symbol-discovery).
119
+ - Export the declaration `jwks` from [`discovery.aug`](discovery.md#symbol-jwks).
120
+ - Export the declaration `authorize` from [`authorization.aug`](authorization.md#symbol-authorize).
121
+ - Export the declaration `providerLogin` from [`authorization.aug`](authorization.md#symbol-providerLogin).
122
+ - Export the declaration `token` from [`token.aug`](token.md#symbol-token).
123
+ - Export the declaration `userinfo` from [`userinfo.aug`](userinfo.md#symbol-userinfo).
124
+
125
+ ### Shared language rules
126
+
127
+ See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
128
+
129
+ ::::
130
+
131
+ :::::
@@ -0,0 +1,364 @@
1
+ ---
2
+ title: "provider/token.aug · OpenID Connect login application"
3
+ generated: true
4
+ source: "examples/oidc-login/provider/token.aug"
5
+ editLink: false
6
+ prev: false
7
+ next: false
8
+ outline: [2, 3]
9
+ pageClass: aug-example-page
10
+ ---
11
+
12
+ # `provider/token.aug`
13
+
14
+ [OpenID Connect login application](../index.md) · Source and specification
15
+
16
+ ::: details Files in this project
17
+
18
+ - [`main.aug`](../main.md)
19
+ - [`client/contracts.aug`](../client/contracts.md)
20
+ - [`client/endpoints.aug`](../client/endpoints.md)
21
+ - [`client/export.aug`](../client/export.md)
22
+ - [`client/login.aug`](../client/login.md)
23
+ - [`client/logout.aug`](../client/logout.md)
24
+ - [`client/protocol.aug`](../client/protocol.md)
25
+ - [`client/session.aug`](../client/session.md)
26
+ - [`client/views.aug`](../client/views.md)
27
+ - [`common/export.aug`](../common/export.md)
28
+ - [`common/headers.aug`](../common/headers.md)
29
+ - [`common/keys.aug`](../common/keys.md)
30
+ - [`common/settings.aug`](../common/settings.md)
31
+ - [`common/views.aug`](../common/views.md)
32
+ - [`provider/authorization.aug`](authorization.md)
33
+ - [`provider/contracts.aug`](contracts.md)
34
+ - [`provider/credentials.aug`](credentials.md)
35
+ - [`provider/discovery.aug`](discovery.md)
36
+ - [`provider/export.aug`](export.md)
37
+ - [`provider/token.aug`](token.md)
38
+ - [`provider/userinfo.aug`](userinfo.md)
39
+ - [`provider/views.aug`](views.md)
40
+
41
+ :::
42
+
43
+ ::::: example-compare
44
+
45
+ :::: example-code
46
+
47
+ ## Code {#code}
48
+
49
+ ::: code-group
50
+
51
+ ```aug [Indentation]
52
+ import AuthorizationCode and AccessGrant and TokenForm and TokenResponse and OAuthError and IdClaims from contracts
53
+ import settings and SigningKeys and KeyError and securityHeaders from common
54
+ import Crypto and signJwt and JwtError from august.crypto
55
+ import Clock from august.time
56
+ import ExpiringStore and StoreFull from august.memory
57
+ _oauthError(string code, string description) returns HttpResponse<Json> unless HttpError:
58
+ return HttpResponse(body=Json(value=OAuthError(error=code, error_description=description)), status=400, headers=securityHeaders())
59
+ /** A real OAuth token endpoint. Exact client/redirect binding, S256 PKCE, expiry and one-use codes are enforced. Errors use OAuth JSON. */
60
+ endpoint POST "/provider/token" as token(HttpRequest http from request, resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<AuthorizationCode> codes, resolve ExpiringStore<AccessGrant> access) returns HttpResponse<Json> uses crypto.sha256 and crypto.equal and crypto.random and crypto.signRsa and clock.now and keys.provider and codes.take and access.put unless CryptoError with status 503 and TimeError with status 503 and KeyError and JwtError and StoreFull with status 503 and HttpError:
61
+ config = settings()
62
+ try:
63
+ form = http.form<TokenForm>()
64
+ if form.grant_type != "authorization_code":
65
+ return _oauthError(code="unsupported_grant_type", description="Only authorization_code is supported.")
66
+ if form.client_id != config.clientId:
67
+ return _oauthError(code="invalid_client", description="The registered client is required.")
68
+ if not form.code.isToken(min=43, max=43) or not form.code_verifier.isToken(min=43, max=128):
69
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
70
+ now = clock.now()
71
+ match codes.take(key=form.code, now=now):
72
+ when null:
73
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
74
+ when some grant:
75
+ challenge = crypto.sha256(input=form.code_verifier.bytes()).base64url()
76
+ if grant.clientId != form.client_id or grant.redirectUri != form.redirect_uri or not crypto.equal(left=challenge.bytes(), right=grant.challenge.bytes()):
77
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
78
+ claims = IdClaims(iss=config.issuer, sub=grant.subject, aud=grant.clientId, exp=now + 300, iat=now, nonce=grant.nonce, name=grant.name)
79
+ idToken = signJwt(key=keys.provider(), claims=Json(value=claims), kid="provider-1", tokenType="JWT")
80
+ accessToken = crypto.random(size=32).base64url()
81
+ value = AccessGrant(subject=grant.subject, name=grant.name, expires=now + 300)
82
+ access.put(key=accessToken, value=value, expires=value.expires, now=now)
83
+ body = TokenResponse(token_type="Bearer", access_token=accessToken, id_token=idToken, expires_in=300, scope="openid profile")
84
+ return HttpResponse(body=Json(value=body), headers=securityHeaders())
85
+ catch HttpError error:
86
+ return _oauthError(code="invalid_request", description="Submit the required URL-encoded token fields once each.")
87
+ ```
88
+
89
+ ```aug [Braces]
90
+ import AuthorizationCode and AccessGrant and TokenForm and TokenResponse and OAuthError and IdClaims from contracts
91
+ import settings and SigningKeys and KeyError and securityHeaders from common
92
+ import Crypto and signJwt and JwtError from august.crypto
93
+ import Clock from august.time
94
+ import ExpiringStore and StoreFull from august.memory
95
+ _oauthError(string code, string description) returns HttpResponse<Json> unless HttpError {
96
+ return HttpResponse(body=Json(value=OAuthError(error=code, error_description=description)), status=400, headers=securityHeaders())
97
+ }
98
+ /** A real OAuth token endpoint. Exact client/redirect binding, S256 PKCE, expiry and one-use codes are enforced. Errors use OAuth JSON. */
99
+ endpoint POST "/provider/token" as token(HttpRequest http from request, resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<AuthorizationCode> codes, resolve ExpiringStore<AccessGrant> access) returns HttpResponse<Json> uses crypto.sha256 and crypto.equal and crypto.random and crypto.signRsa and clock.now and keys.provider and codes.take and access.put unless CryptoError with status 503 and TimeError with status 503 and KeyError and JwtError and StoreFull with status 503 and HttpError {
100
+ config = settings()
101
+ try {
102
+ form = http.form<TokenForm>()
103
+ if form.grant_type != "authorization_code" {
104
+ return _oauthError(code="unsupported_grant_type", description="Only authorization_code is supported.")
105
+ }
106
+ if form.client_id != config.clientId {
107
+ return _oauthError(code="invalid_client", description="The registered client is required.")
108
+ }
109
+ if not form.code.isToken(min=43, max=43) or not form.code_verifier.isToken(min=43, max=128) {
110
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
111
+ }
112
+ now = clock.now()
113
+ match codes.take(key=form.code, now=now) {
114
+ when null {
115
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
116
+ }
117
+ when some grant {
118
+ challenge = crypto.sha256(input=form.code_verifier.bytes()).base64url()
119
+ if grant.clientId != form.client_id or grant.redirectUri != form.redirect_uri or not crypto.equal(left=challenge.bytes(), right=grant.challenge.bytes()) {
120
+ return _oauthError(code="invalid_grant", description="The authorization grant is invalid.")
121
+ }
122
+ claims = IdClaims(iss=config.issuer, sub=grant.subject, aud=grant.clientId, exp=now + 300, iat=now, nonce=grant.nonce, name=grant.name)
123
+ idToken = signJwt(key=keys.provider(), claims=Json(value=claims), kid="provider-1", tokenType="JWT")
124
+ accessToken = crypto.random(size=32).base64url()
125
+ value = AccessGrant(subject=grant.subject, name=grant.name, expires=now + 300)
126
+ access.put(key=accessToken, value=value, expires=value.expires, now=now)
127
+ body = TokenResponse(token_type="Bearer", access_token=accessToken, id_token=idToken, expires_in=300, scope="openid profile")
128
+ return HttpResponse(body=Json(value=body), headers=securityHeaders())
129
+ }
130
+ }
131
+ }
132
+ catch HttpError error {
133
+ return _oauthError(code="invalid_request", description="Submit the required URL-encoded token fields once each.")
134
+ }
135
+ }
136
+ ```
137
+
138
+ :::
139
+
140
+ ::::
141
+
142
+ :::: example-spec
143
+
144
+ ## Compiled specification {#specification}
145
+
146
+ August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
147
+
148
+ ### In this file
149
+
150
+ - [`_oauthError`](token.md#symbol-_oauthError) is a function returning `HttpResponse<Json>`.
151
+ - [`token`](token.md#symbol-token) handles `POST` `/provider/token` returning `HttpResponse<Json>`.
152
+
153
+ ### `token` {#symbol-token}
154
+
155
+ [source](token.md#code)
156
+
157
+ **Inputs**
158
+
159
+ - `http` (`HttpRequest`) — read from the HTTP request.
160
+ - `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
161
+ - `clock` ([`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)) — injected; callers omit it.
162
+ - `keys` ([`SigningKeys`](../common/keys.md#symbol-SigningKeys)) — injected; callers omit it.
163
+ - `codes` ([`ExpiringStore<AuthorizationCode>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)) — injected; callers omit it.
164
+ - `access` ([`ExpiringStore<AccessGrant>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)) — injected; callers omit it.
165
+
166
+ Returns: `HttpResponse<Json>`.
167
+
168
+ Capabilities: [`crypto.sha256`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.sha256), [`crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal), [`crypto.random`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.random), [`crypto.signRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.signRsa), [`clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now), [`keys.provider`](../common/keys.md#symbol-SigningKeys.provider), [`codes.take`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.take), [`access.put`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.put).
169
+
170
+ Can fail with `CryptoError`, `TimeError`, `KeyError`, `JwtError`, `StoreFull`, `HttpError`. Callers must catch or propagate these errors.
171
+
172
+ HTTP route: `POST` `/provider/token`. Use status 200 when the handler returns a body; a returned HttpResponse can set its own status. An unhandled request failure returns status 500 and cancels its request tasks.
173
+
174
+ Declared HTTP failures: `CryptoError` returns status 503; `TimeError` returns status 503; [`StoreFull`](../dependencies/august/0.19.0/memory/store.md#symbol-StoreFull) returns status 503.
175
+
176
+ **What it does**
177
+
178
+ - Set `config` to call [`settings`](../common/settings.md#symbol-settings).
179
+ - Try these operations:
180
+ - Set `form` to call `form` on `http` with type arguments [`TokenForm`](contracts.md#symbol-TokenForm).
181
+ - If `grant_type` of `form` does not equal `"authorization_code"`:
182
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"unsupported_grant_type"`; `description` = `"Only authorization_code is supported."`.
183
+ - If `client_id` of `form` does not equal `clientId` of `config`:
184
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"invalid_client"`; `description` = `"The registered client is required."`.
185
+ - If not (call `isToken` on `code` of `form` with `min` = `43`; `max` = `43`) or not (call `isToken` on `code_verifier` of `form` with `min` = `43`; `max` = `128`):
186
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"invalid_grant"`; `description` = `"The authorization grant is invalid."`.
187
+ - Set `now` to call [`Clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now) on `clock`.
188
+ - Select the matching case for call [`ExpiringStore.take`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.take) on `codes` with `key` = `code` of `form`; `now` = `now`:
189
+ - A null value, including omitted optional input:
190
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"invalid_grant"`; `description` = `"The authorization grant is invalid."`.
191
+ - A present, non-null value, named `grant`:
192
+ - Set `challenge` to call `base64url` on call [`Crypto.sha256`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.sha256) on `crypto` with `input` = call `bytes` on `code_verifier` of `form`.
193
+ - If ((`clientId` of `grant` does not equal `client_id` of `form`) or (`redirectUri` of `grant` does not equal `redirect_uri` of `form`)) or not (call [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) on `crypto` with `left` = call `bytes` on `challenge`; `right` = call `bytes` on `challenge` of `grant`):
194
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"invalid_grant"`; `description` = `"The authorization grant is invalid."`.
195
+ - Set `claims` to call [`IdClaims`](contracts.md#symbol-IdClaims) with `iss` = `issuer` of `config`; `sub` = `subject` of `grant`; `aud` = `clientId` of `grant`; `exp` = (`now` plus `300`); `iat` = `now`; `nonce` = `nonce` of `grant`; `name` = `name` of `grant`.
196
+ - Set `idToken` to call [`signJwt`](../dependencies/august/0.19.0/crypto/jose.md#symbol-signJwt) with `key` = call [`SigningKeys.provider`](../common/keys.md#symbol-SigningKeys.provider) on `keys`; `claims` = call `Json` with `value` = `claims`; `kid` = `"provider-1"`; `tokenType` = `"JWT"`; inject `crypto` from `crypto`.
197
+ - Set `accessToken` to call `base64url` on call [`Crypto.random`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.random) on `crypto` with `size` = `32`.
198
+ - Set `value` to call [`AccessGrant`](contracts.md#symbol-AccessGrant) with `subject` = `subject` of `grant`; `name` = `name` of `grant`; `expires` = (`now` plus `300`).
199
+ - Call [`ExpiringStore.put`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.put) on `access` with `key` = `accessToken`; `value` = `value`; `expires` = `expires` of `value`; `now` = `now`.
200
+ - Set `body` to call [`TokenResponse`](contracts.md#symbol-TokenResponse) with `token_type` = `"Bearer"`; `access_token` = `accessToken`; `id_token` = `idToken`; `expires_in` = `300`; `scope` = `"openid profile"`.
201
+ - Return call `HttpResponse` with `body` = call `Json` with `value` = `body`; `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
202
+ - If they fail with `HttpError`, name the failure `error` and recover:
203
+ - Return call [`_oauthError`](token.md#symbol-_oauthError) with `code` = `"invalid_request"`; `description` = `"Submit the required URL-encoded token fields once each."`.
204
+
205
+ **Author documentation**
206
+
207
+ A real OAuth token endpoint. Exact client/redirect binding, S256 PKCE, expiry and one-use codes are enforced. Errors use OAuth JSON.
208
+
209
+ ### `_oauthError` {#symbol-_oauthError}
210
+
211
+ [source](token.md#code)
212
+
213
+ Private to its defining scope.
214
+
215
+ **Inputs**
216
+
217
+ - `code` (`string`) — required labeled input.
218
+ - `description` (`string`) — required labeled input.
219
+
220
+ Returns: `HttpResponse<Json>`.
221
+
222
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
223
+
224
+ **What it does**
225
+
226
+ - Return call `HttpResponse` with `body` = call `Json` with `value` = call [`OAuthError`](contracts.md#symbol-OAuthError) with `error` = `code`; `error_description` = `description`; `status` = `400`; `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
227
+
228
+ ### Dependencies used by this file
229
+
230
+ Only referenced types and operations appear here. Each name links to its complete specification.
231
+
232
+ #### [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)
233
+
234
+ Capability interface from `august.crypto`.
235
+
236
+ - [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) (`left`: `Bytes`, `right`: `Bytes`) → `bool`.
237
+ - [`Crypto.random`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.random) (`size`: `int`) → `Bytes`; can fail with `CryptoError`.
238
+ - [`Crypto.sha256`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.sha256) (`input`: `Bytes`) → `Bytes`; can fail with `CryptoError`.
239
+ - [`Crypto.signRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.signRsa) (`key`: `RsaPrivateKey`, `input`: `Bytes`) → `Bytes`; can fail with `CryptoError`.
240
+
241
+ #### [`JwtError`](../dependencies/august/0.19.0/crypto/jose.md#symbol-JwtError)
242
+
243
+ Class from `august.crypto`.
244
+
245
+ Used as a type or provider.
246
+
247
+ #### [`signJwt`](../dependencies/august/0.19.0/crypto/jose.md#symbol-signJwt)
248
+
249
+ Function from `august.crypto`.
250
+
251
+ - [`signJwt`](../dependencies/august/0.19.0/crypto/jose.md#symbol-signJwt) (`key`: `RsaPrivateKey`, `claims`: `Json`, `kid`: `string`, `tokenType`: `string`) → `string`; inject `crypto`: [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto); uses [`crypto.signRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.signRsa); can fail with `JwtError`.
252
+
253
+ #### [`ExpiringStore`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)
254
+
255
+ Capability interface from `august.memory`.
256
+
257
+ - [`ExpiringStore.put`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.put) (`key`: `string`, `value`: `T`, `expires`: `int`, `now`: `int`) → `void`; can fail with `StoreFull`.
258
+ - [`ExpiringStore.take`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.take) (`key`: `string`, `now`: `int`) → `optional T`.
259
+
260
+ #### [`StoreFull`](../dependencies/august/0.19.0/memory/store.md#symbol-StoreFull)
261
+
262
+ Class from `august.memory`.
263
+
264
+ Used as a type or provider.
265
+
266
+ #### [`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)
267
+
268
+ Capability interface from `august.time`.
269
+
270
+ - [`Clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now) (no caller inputs) → `int`; can fail with `TimeError`.
271
+
272
+ #### [`securityHeaders`](../common/headers.md#symbol-securityHeaders)
273
+
274
+ Function from `common`.
275
+
276
+ - [`securityHeaders`](../common/headers.md#symbol-securityHeaders) (no caller inputs) → `Headers`; can fail with `HttpError`.
277
+
278
+ #### [`KeyError`](../common/keys.md#symbol-KeyError)
279
+
280
+ Class from `common`.
281
+
282
+ Used as a type or provider.
283
+
284
+ #### [`SigningKeys`](../common/keys.md#symbol-SigningKeys)
285
+
286
+ Capability interface from `common`.
287
+
288
+ - [`SigningKeys.provider`](../common/keys.md#symbol-SigningKeys.provider) (no caller inputs) → `RsaPrivateKey`; can fail with `KeyError`.
289
+
290
+ #### [`Settings`](../common/settings.md#symbol-Settings)
291
+
292
+ Record.
293
+
294
+ - Read `clientId` (`string`).
295
+ - Read `issuer` (`string`).
296
+
297
+ #### [`settings`](../common/settings.md#symbol-settings)
298
+
299
+ Function from `common`.
300
+
301
+ - [`settings`](../common/settings.md#symbol-settings) (no caller inputs) → [`Settings`](../common/settings.md#symbol-Settings).
302
+
303
+ #### [`AccessGrant`](contracts.md#symbol-AccessGrant)
304
+
305
+ Record from `contracts`.
306
+
307
+ - Construct with `subject`: `string`, `name`: `string`, `expires`: `int` → [`AccessGrant`](contracts.md#symbol-AccessGrant).
308
+ - Read `expires` (`int`).
309
+
310
+ #### [`AuthorizationCode`](contracts.md#symbol-AuthorizationCode)
311
+
312
+ Record from `contracts`.
313
+
314
+ - Read `challenge` (`string`).
315
+ - Read `clientId` (`string`).
316
+ - Read `name` (`string`).
317
+ - Read `nonce` (`string`).
318
+ - Read `redirectUri` (`string`).
319
+ - Read `subject` (`string`).
320
+
321
+ #### [`IdClaims`](contracts.md#symbol-IdClaims)
322
+
323
+ Record from `contracts`.
324
+
325
+ - Construct with `iss`: `string`, `sub`: `string`, `aud`: `string`, `exp`: `int`, `iat`: `int`, `nonce`: `string`, `name`: `string` → [`IdClaims`](contracts.md#symbol-IdClaims).
326
+
327
+ #### [`OAuthError`](contracts.md#symbol-OAuthError)
328
+
329
+ Record from `contracts`.
330
+
331
+ - Construct with `error`: `string`, `error_description`: `string` → [`OAuthError`](contracts.md#symbol-OAuthError).
332
+
333
+ #### [`TokenForm`](contracts.md#symbol-TokenForm)
334
+
335
+ Record from `contracts`.
336
+
337
+ - Read `client_id` (`string`).
338
+ - Read `code` (`string`).
339
+ - Read `code_verifier` (`string`).
340
+ - Read `grant_type` (`string`).
341
+ - Read `redirect_uri` (`string`).
342
+
343
+ #### [`TokenResponse`](contracts.md#symbol-TokenResponse)
344
+
345
+ Record from `contracts`.
346
+
347
+ - Construct with `token_type`: `string`, `access_token`: `string`, `id_token`: `string`, `expires_in`: `int`, `scope`: `string` → [`TokenResponse`](contracts.md#symbol-TokenResponse).
348
+
349
+ ### Built-in operations used by this file
350
+
351
+ - `Bytes.base64url` (no inputs) → `string`: Encode immutable bytes as unpadded RFC 4648 URL-safe base64.
352
+ - `HttpRequest.form` (no inputs) → `TokenForm`: Decode a form record inside a handler so protocol-specific error responses can be returned. Can fail with `HttpError`.
353
+ - `string.bytes` (no inputs) → `Bytes`: Encode this string as immutable UTF-8 bytes.
354
+ - `string.isToken` (`min`: `int`, `max`: `int`) → `bool`: Require an ASCII RFC 3986 unreserved token with a bounded length.
355
+
356
+ [Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
357
+
358
+ ### Shared language rules
359
+
360
+ See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
361
+
362
+ ::::
363
+
364
+ :::::