@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,420 @@
1
+ <!-- Generated by aug spec. Edit the August source, then regenerate. -->
2
+
3
+ # `contracts.aug` specification
4
+
5
+ August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
6
+
7
+ ## In this file
8
+
9
+ - [`Principal`](contracts.aug.md#symbol-Principal) is an immutable record.
10
+ - [`Authentication`](contracts.aug.md#symbol-Authentication) is a capability interface.
11
+ - [`Authorization`](contracts.aug.md#symbol-Authorization) is a capability interface.
12
+ - [`RequestLogger`](contracts.aug.md#symbol-RequestLogger) is a capability interface.
13
+ - [`_aug_http_log`](contracts.aug.md#symbol-_aug_http_log) is a function.
14
+ - [`WebRequestLogger`](contracts.aug.md#symbol-WebRequestLogger) is a class implementing `RequestLogger`.
15
+ - [`HttpClient`](contracts.aug.md#symbol-HttpClient) is a capability interface.
16
+ - [`_aug_http_request`](contracts.aug.md#symbol-_aug_http_request) is a function returning `HttpResponse<Bytes>`.
17
+ - [`WebHttpClient`](contracts.aug.md#symbol-WebHttpClient) is a class implementing `HttpClient`.
18
+ - [`redirect`](contracts.aug.md#symbol-redirect) is a function returning `HttpResponse<string>`.
19
+ - [`_aug_http_url_encode`](contracts.aug.md#symbol-_aug_http_url_encode) is a function returning `string`.
20
+ - [`urlEncode`](contracts.aug.md#symbol-urlEncode) is a function returning `string`.
21
+ - [`_aug_http_cookie`](contracts.aug.md#symbol-_aug_http_cookie) is a function returning `Headers`.
22
+ - [`cookie`](contracts.aug.md#symbol-cookie) is a function returning `Headers`.
23
+
24
+ <a id="symbol-Principal"></a>
25
+
26
+ ## `Principal`
27
+
28
+ [source](contracts.aug#L3)
29
+
30
+ Immutable record.
31
+
32
+ **Author documentation**
33
+
34
+ Immutable identity returned by an explicitly injected authentication adapter.
35
+
36
+ **Inputs**
37
+
38
+ - `subject` (`string`) — required labeled input — stored as `subject` and read-only after initialization.
39
+ - `permissions` (`List<string>`) — required labeled input — stored as `permissions` and read-only after initialization.
40
+
41
+ <a id="symbol-Authentication"></a>
42
+
43
+ ## `Authentication`
44
+
45
+ [source](contracts.aug#L6)
46
+
47
+ Capability interface.
48
+
49
+ **Author documentation**
50
+
51
+ Verify the request's credentials. null means unauthenticated; adapter failures raise HttpError.
52
+
53
+ <a id="symbol-Authentication.authenticate"></a>
54
+
55
+ ### `Authentication.authenticate`
56
+
57
+ [source](contracts.aug#L7)
58
+
59
+ **Inputs**
60
+
61
+ - `request` (`HttpRequest`) — required labeled input.
62
+
63
+ Returns: [`optional Principal`](contracts.aug.md#symbol-Principal).
64
+
65
+ Capabilities: [`Authentication.authenticate`](contracts.aug.md#symbol-Authentication.authenticate).
66
+
67
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
68
+
69
+ Interface contract. A selected implementation supplies the behavior.
70
+
71
+ <a id="symbol-Authorization"></a>
72
+
73
+ ## `Authorization`
74
+
75
+ [source](contracts.aug#L10)
76
+
77
+ Capability interface.
78
+
79
+ **Author documentation**
80
+
81
+ Decide whether a verified identity has one named permission.
82
+
83
+ <a id="symbol-Authorization.authorize"></a>
84
+
85
+ ### `Authorization.authorize`
86
+
87
+ [source](contracts.aug#L11)
88
+
89
+ **Inputs**
90
+
91
+ - `identity` ([`Principal`](contracts.aug.md#symbol-Principal)) — required labeled input.
92
+ - `permission` (`string`) — required labeled input.
93
+
94
+ Returns: `bool`.
95
+
96
+ Capabilities: [`Authorization.authorize`](contracts.aug.md#symbol-Authorization.authorize).
97
+
98
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
99
+
100
+ Interface contract. A selected implementation supplies the behavior.
101
+
102
+ <a id="symbol-RequestLogger"></a>
103
+
104
+ ## `RequestLogger`
105
+
106
+ [source](contracts.aug#L14)
107
+
108
+ Capability interface.
109
+
110
+ **Author documentation**
111
+
112
+ Observe a completed HTTP exchange, including failures and disconnects.
113
+
114
+ <a id="symbol-RequestLogger.complete"></a>
115
+
116
+ ### `RequestLogger.complete`
117
+
118
+ [source](contracts.aug#L15)
119
+
120
+ **Inputs**
121
+
122
+ - `method` (`string`) — required labeled input.
123
+ - `path` (`string`) — required labeled input.
124
+ - `status` (`int`) — required labeled input.
125
+ - `milliseconds` (`int`) — required labeled input.
126
+
127
+ Returns: no value.
128
+
129
+ Capabilities: [`RequestLogger.complete`](contracts.aug.md#symbol-RequestLogger.complete).
130
+
131
+ Interface contract. A selected implementation supplies the behavior.
132
+
133
+ <a id="symbol-WebRequestLogger"></a>
134
+
135
+ ## `WebRequestLogger`
136
+
137
+ [source](contracts.aug#L19)
138
+
139
+ Behavioral class.
140
+
141
+ Satisfies [`RequestLogger`](contracts.aug.md#symbol-RequestLogger).
142
+
143
+ **Author documentation**
144
+
145
+ Emit escaped JSON request metadata to standard error. Credentials and query strings are excluded.
146
+
147
+ <a id="symbol-WebRequestLogger.complete"></a>
148
+
149
+ ### `WebRequestLogger.complete`
150
+
151
+ [source](contracts.aug#L20)
152
+
153
+ **Inputs**
154
+
155
+ - `method` (`string`) — required labeled input.
156
+ - `path` (`string`) — required labeled input.
157
+ - `status` (`int`) — required labeled input.
158
+ - `milliseconds` (`int`) — required labeled input.
159
+
160
+ Returns: no value.
161
+
162
+ Capabilities: [`RequestLogger.complete`](contracts.aug.md#symbol-RequestLogger.complete).
163
+
164
+ **What it does**
165
+
166
+ - Enter an unsafe boundary. Native calls use their declared contracts; their foreign implementation is outside this specification:
167
+ - Call [`_aug_http_log`](contracts.aug.md#symbol-_aug_http_log) with `method` = `method`; `path` = `path`; `status` = `status`; `milliseconds` = `milliseconds`.
168
+
169
+ <a id="symbol-HttpClient"></a>
170
+
171
+ ## `HttpClient`
172
+
173
+ [source](contracts.aug#L25)
174
+
175
+ Capability interface.
176
+
177
+ **Author documentation**
178
+
179
+ An explicit outbound network capability. TLS verifies the peer and redirects are returned to the caller.
180
+
181
+ <a id="symbol-HttpClient.request"></a>
182
+
183
+ ### `HttpClient.request`
184
+
185
+ [source](contracts.aug#L27)
186
+
187
+ **Inputs**
188
+
189
+ - `method` (`string`) — required labeled input.
190
+ - `url` (`string`) — required labeled input.
191
+ - `headers` (`optional Headers`) — optional labeled input; omission becomes null.
192
+ - `body` (`optional Bytes`) — optional labeled input; omission becomes null.
193
+
194
+ Returns: `HttpResponse<Bytes>`.
195
+
196
+ Capabilities: [`HttpClient.request`](contracts.aug.md#symbol-HttpClient.request).
197
+
198
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
199
+
200
+ Interface contract. A selected implementation supplies the behavior.
201
+
202
+ **Author documentation**
203
+
204
+ Perform an HTTP request with bounded bytes. Inside a task, waiting suspends the task's C stack.
205
+
206
+ <a id="symbol-WebHttpClient"></a>
207
+
208
+ ## `WebHttpClient`
209
+
210
+ [source](contracts.aug#L32)
211
+
212
+ Behavioral class.
213
+
214
+ Satisfies [`HttpClient`](contracts.aug.md#symbol-HttpClient).
215
+
216
+ **Author documentation**
217
+
218
+ Native libwebsockets transport. No socket is opened by construction.
219
+
220
+ <a id="symbol-WebHttpClient.request"></a>
221
+
222
+ ### `WebHttpClient.request`
223
+
224
+ [source](contracts.aug#L33)
225
+
226
+ **Inputs**
227
+
228
+ - `method` (`string`) — required labeled input.
229
+ - `url` (`string`) — required labeled input.
230
+ - `headers` (`optional Headers`) — optional labeled input; omission becomes null.
231
+ - `body` (`optional Bytes`) — optional labeled input; omission becomes null.
232
+
233
+ Returns: `HttpResponse<Bytes>`.
234
+
235
+ Capabilities: [`HttpClient.request`](contracts.aug.md#symbol-HttpClient.request).
236
+
237
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
238
+
239
+ **What it does**
240
+
241
+ - Enter an unsafe boundary. Native calls use their declared contracts; their foreign implementation is outside this specification:
242
+ - Return call [`_aug_http_request`](contracts.aug.md#symbol-_aug_http_request) with `method` = `method`; `url` = `url`; `headers` = `headers`; `body` = `body`.
243
+
244
+ **Author documentation**
245
+
246
+ Perform an HTTP request with bounded bytes. Inside a task, waiting suspends the task's C stack.
247
+
248
+ <a id="symbol-redirect"></a>
249
+
250
+ ## `redirect`
251
+
252
+ [source](contracts.aug#L38)
253
+
254
+ **Inputs**
255
+
256
+ - `location` (`string`) — required labeled input.
257
+ - `status` (`optional int`) — optional labeled input; omission becomes null.
258
+
259
+ Returns: `HttpResponse<string>`.
260
+
261
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
262
+
263
+ **What it does**
264
+
265
+ - Set `code` to `303`.
266
+ - Select the matching case for `status`:
267
+ - A null value, including omitted optional input:
268
+ - Continue without another operation.
269
+ - A present, non-null value, named `value`:
270
+ - Set `code` to `value`.
271
+ - Set `headers` to call `with` on call `Headers` with `name` = `"location"`; `value` = `location`.
272
+ - Return call `HttpResponse` with `body` = `""`; `status` = `code`; `headers` = `headers`.
273
+
274
+ **Author documentation**
275
+
276
+ Return a redirect with an explicit status. Location is checked as a header value.
277
+
278
+ <a id="symbol-urlEncode"></a>
279
+
280
+ ## `urlEncode`
281
+
282
+ [source](contracts.aug#L50)
283
+
284
+ **Inputs**
285
+
286
+ - `input` (`string`) — required labeled input.
287
+
288
+ Returns: `string`.
289
+
290
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
291
+
292
+ **What it does**
293
+
294
+ - Enter an unsafe boundary. Native calls use their declared contracts; their foreign implementation is outside this specification:
295
+ - Return call [`_aug_http_url_encode`](contracts.aug.md#symbol-_aug_http_url_encode) with `input` = `input`.
296
+
297
+ **Author documentation**
298
+
299
+ Encode a UTF-8 value as one URL query or form component using RFC 3986 unreserved characters.
300
+
301
+ <a id="symbol-cookie"></a>
302
+
303
+ ## `cookie`
304
+
305
+ [source](contracts.aug#L56)
306
+
307
+ **Inputs**
308
+
309
+ - `name` (`string`) — required labeled input.
310
+ - `value` (`string`) — required labeled input.
311
+ - `path` (`string`) — required labeled input.
312
+ - `maxAge` (`int`) — required labeled input.
313
+ - `secure` (`bool`) — required labeled input.
314
+
315
+ Returns: `Headers`.
316
+
317
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
318
+
319
+ **What it does**
320
+
321
+ - Enter an unsafe boundary. Native calls use their declared contracts; their foreign implementation is outside this specification:
322
+ - Return call [`_aug_http_cookie`](contracts.aug.md#symbol-_aug_http_cookie) with `name` = `name`; `value` = `value`; `path` = `path`; `maxAge` = `maxAge`; `secure` = `secure`.
323
+
324
+ **Author documentation**
325
+
326
+ Construct an HttpOnly, SameSite=Lax session cookie. Secure defaults are chosen explicitly at the call site. Values and paths reject delimiters and controls. maxAge=0 clears the cookie.
327
+
328
+ <a id="symbol-_aug_http_log"></a>
329
+
330
+ ## `_aug_http_log`
331
+
332
+ [source](contracts.aug#L17)
333
+
334
+ Private to its defining scope.
335
+
336
+ **Inputs**
337
+
338
+ - `method` (`string`) — required labeled input.
339
+ - `path` (`string`) — required labeled input.
340
+ - `status` (`int`) — required labeled input.
341
+ - `milliseconds` (`int`) — required labeled input.
342
+
343
+ Returns: no value.
344
+
345
+ Capabilities: [`RequestLogger.complete`](contracts.aug.md#symbol-RequestLogger.complete).
346
+
347
+ Native C operation. Its declared inputs, result, effects, and errors are the visible contract. The C implementation is outside this specification.
348
+
349
+ <a id="symbol-_aug_http_request"></a>
350
+
351
+ ## `_aug_http_request`
352
+
353
+ [source](contracts.aug#L29)
354
+
355
+ Private to its defining scope.
356
+
357
+ **Inputs**
358
+
359
+ - `method` (`string`) — required labeled input.
360
+ - `url` (`string`) — required labeled input.
361
+ - `headers` (`optional Headers`) — optional labeled input; omission becomes null.
362
+ - `body` (`optional Bytes`) — optional labeled input; omission becomes null.
363
+
364
+ Returns: `HttpResponse<Bytes>`.
365
+
366
+ Capabilities: [`HttpClient.request`](contracts.aug.md#symbol-HttpClient.request).
367
+
368
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
369
+
370
+ Native C operation. Its declared inputs, result, effects, and errors are the visible contract. The C implementation is outside this specification.
371
+
372
+ <a id="symbol-_aug_http_url_encode"></a>
373
+
374
+ ## `_aug_http_url_encode`
375
+
376
+ [source](contracts.aug#L48)
377
+
378
+ Private to its defining scope.
379
+
380
+ **Inputs**
381
+
382
+ - `input` (`string`) — required labeled input.
383
+
384
+ Returns: `string`.
385
+
386
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
387
+
388
+ Native C operation. Its declared inputs, result, effects, and errors are the visible contract. The C implementation is outside this specification.
389
+
390
+ <a id="symbol-_aug_http_cookie"></a>
391
+
392
+ ## `_aug_http_cookie`
393
+
394
+ [source](contracts.aug#L54)
395
+
396
+ Private to its defining scope.
397
+
398
+ **Inputs**
399
+
400
+ - `name` (`string`) — required labeled input.
401
+ - `value` (`string`) — required labeled input.
402
+ - `path` (`string`) — required labeled input.
403
+ - `maxAge` (`int`) — required labeled input.
404
+ - `secure` (`bool`) — required labeled input.
405
+
406
+ Returns: `Headers`.
407
+
408
+ Can fail with `HttpError`. Callers must catch or propagate these errors.
409
+
410
+ Native C operation. Its declared inputs, result, effects, and errors are the visible contract. The C implementation is outside this specification.
411
+
412
+ ## Built-in operations used by this file
413
+
414
+ - `Headers.with` (`name`: `string`, `value`: `string`) → `Headers`: Return new headers with one additional validated field. Header names ignore case; duplicate values remain separate. Can fail with `HttpError`.
415
+
416
+ [Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
417
+
418
+ ## Shared language rules
419
+
420
+ See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
@@ -0,0 +1,40 @@
1
+ {
2
+ "format": 1,
3
+ "files": [
4
+ ".aug-spec/august/0.19.0/crypto/contracts.aug",
5
+ ".aug-spec/august/0.19.0/crypto/contracts.aug.md",
6
+ ".aug-spec/august/0.19.0/crypto/jose.aug",
7
+ ".aug-spec/august/0.19.0/crypto/jose.aug.md",
8
+ ".aug-spec/august/0.19.0/json/contracts.aug",
9
+ ".aug-spec/august/0.19.0/json/contracts.aug.md",
10
+ ".aug-spec/august/0.19.0/memory/store.aug",
11
+ ".aug-spec/august/0.19.0/memory/store.aug.md",
12
+ ".aug-spec/august/0.19.0/time/contracts.aug",
13
+ ".aug-spec/august/0.19.0/time/contracts.aug.md",
14
+ ".aug-spec/august/0.19.0/web/contracts.aug",
15
+ ".aug-spec/august/0.19.0/web/contracts.aug.md",
16
+ "client/contracts.aug.md",
17
+ "client/endpoints.aug.md",
18
+ "client/export.aug.md",
19
+ "client/login.aug.md",
20
+ "client/logout.aug.md",
21
+ "client/protocol.aug.md",
22
+ "client/session.aug.md",
23
+ "client/views.aug.md",
24
+ "common/export.aug.md",
25
+ "common/headers.aug.md",
26
+ "common/keys.aug.md",
27
+ "common/settings.aug.md",
28
+ "common/views.aug.md",
29
+ "main.aug.md",
30
+ "provider/authorization.aug.md",
31
+ "provider/contracts.aug.md",
32
+ "provider/credentials.aug.md",
33
+ "provider/discovery.aug.md",
34
+ "provider/export.aug.md",
35
+ "provider/token.aug.md",
36
+ "provider/userinfo.aug.md",
37
+ "provider/views.aug.md"
38
+ ],
39
+ "digest": "21ab7e44109d4b6f126220d3aece959d724d2d71cf1e07dd5aa214f18e87e2fd"
40
+ }
@@ -0,0 +1,29 @@
1
+ # Same-app OpenID Connect login
2
+
3
+ The provider and its client are August modules in one native executable. The client uses the real discovery, token, JWKS and UserInfo HTTP endpoints hosted by that executable.
4
+
5
+ ```sh
6
+ node scripts/bootstrap-native.mjs
7
+ node bin/aug.mjs run examples/oidc-login
8
+ ```
9
+
10
+ Open `http://127.0.0.1:8787`. Sign in with username **ada** and password **august-demo**. API contracts and an interactive explorer are at `/openapi.json` and `/docs`.
11
+
12
+ ## Flow
13
+
14
+ 1. `/login/start` fetches discovery and creates a browser-bound transaction with random state, nonce and PKCE verifier.
15
+ 2. `/provider/authorize` checks the registered client, exact callback and S256 challenge, then renders an August login component.
16
+ 3. `/provider/login` checks the browser cookie, Origin, CSRF token and PBKDF2 password verifier before issuing a short-lived authorization code.
17
+ 4. `/login/callback` consumes its transaction and exchanges that code over HTTP. `/provider/token` consumes the code and checks PKCE, expiry and client/redirect binding.
18
+ 5. The client fetches JWKS, verifies the RS256 ID token, validates issuer/audience/time/nonce, and checks the UserInfo subject. It then creates a separately signed application-session JWT.
19
+ 6. `/me` verifies the session JWT and its live registry entry. POST `/logout` checks Origin and CSRF and revokes that entry.
20
+
21
+ All imports, bindings, capabilities, effects and checked errors are visible in the August modules. Native code supplies transport, cryptographic primitives, time and serialization.
22
+
23
+ ## Development profile
24
+
25
+ This example explicitly binds to loopback HTTP. Its one documented demo account, signing keys and bounded stores are process-local. Restarting invalidates codes and sessions. External deployments need HTTPS settings, Secure cookies, persistent account/password management, signing-key rotation and shared revocation storage. This is an implemented authorization-code profile, not a certified identity provider.
26
+
27
+ Protocol rules are grounded in [OpenID Connect Core](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), [S256 PKCE](https://datatracker.ietf.org/doc/html/rfc7636) and [JWT validation guidance](https://www.rfc-editor.org/rfc/rfc8725.html). The current client accepts the configured single-audience RS256 profile; broader providers need additional supported claim and JOSE variants.
28
+
29
+ `tests/oidc-login.test.mjs` runs the browser flow, verifies the provider signature with Node's independent JWK/RSA implementation, and checks replay, PKCE, tampering, token-context separation and revocation. See `docs/web-library-gaps.md` for remaining language and library work.
@@ -0,0 +1,7 @@
1
+ /** Browser-bound client state, nonce and PKCE verifier, consumed by the callback. */
2
+ record LoginTransaction(string state, string nonce, string verifier, int expires)
3
+ /** Sessions require their own issuer, audience, key and JWT type, plus a live registry entry. */
4
+ record SessionClaims(string iss, string sub, string aud, int exp, int iat, string jti, string csrf, string name)
5
+ record LogoutForm(string csrf)
6
+ SessionError() implements Error:
7
+ pass
@@ -0,0 +1,80 @@
1
+ <!-- Generated by aug spec. Edit the August source, then regenerate. -->
2
+
3
+ # `contracts.aug` specification
4
+
5
+ August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
6
+
7
+ ## In this file
8
+
9
+ - [`LoginTransaction`](contracts.aug.md#symbol-LoginTransaction) is an immutable record.
10
+ - [`SessionClaims`](contracts.aug.md#symbol-SessionClaims) is an immutable record.
11
+ - [`LogoutForm`](contracts.aug.md#symbol-LogoutForm) is an immutable record.
12
+ - [`SessionError`](contracts.aug.md#symbol-SessionError) is a class implementing `Error`.
13
+
14
+ <a id="symbol-LoginTransaction"></a>
15
+
16
+ ## `LoginTransaction`
17
+
18
+ [source](contracts.aug#L2)
19
+
20
+ Immutable record.
21
+
22
+ **Author documentation**
23
+
24
+ Browser-bound client state, nonce and PKCE verifier, consumed by the callback.
25
+
26
+ **Inputs**
27
+
28
+ - `state` (`string`) — required labeled input — stored as `state` and read-only after initialization.
29
+ - `nonce` (`string`) — required labeled input — stored as `nonce` and read-only after initialization.
30
+ - `verifier` (`string`) — required labeled input — stored as `verifier` and read-only after initialization.
31
+ - `expires` (`int`) — required labeled input — stored as `expires` and read-only after initialization.
32
+
33
+ <a id="symbol-SessionClaims"></a>
34
+
35
+ ## `SessionClaims`
36
+
37
+ [source](contracts.aug#L4)
38
+
39
+ Immutable record.
40
+
41
+ **Author documentation**
42
+
43
+ Sessions require their own issuer, audience, key and JWT type, plus a live registry entry.
44
+
45
+ **Inputs**
46
+
47
+ - `iss` (`string`) — required labeled input — stored as `iss` and read-only after initialization.
48
+ - `sub` (`string`) — required labeled input — stored as `sub` and read-only after initialization.
49
+ - `aud` (`string`) — required labeled input — stored as `aud` and read-only after initialization.
50
+ - `exp` (`int`) — required labeled input — stored as `exp` and read-only after initialization.
51
+ - `iat` (`int`) — required labeled input — stored as `iat` and read-only after initialization.
52
+ - `jti` (`string`) — required labeled input — stored as `jti` and read-only after initialization.
53
+ - `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
54
+ - `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
55
+
56
+ <a id="symbol-LogoutForm"></a>
57
+
58
+ ## `LogoutForm`
59
+
60
+ [source](contracts.aug#L5)
61
+
62
+ Immutable record.
63
+
64
+ **Inputs**
65
+
66
+ - `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
67
+
68
+ <a id="symbol-SessionError"></a>
69
+
70
+ ## `SessionError`
71
+
72
+ [source](contracts.aug#L6)
73
+
74
+ Behavioral class.
75
+
76
+ Satisfies `Error`.
77
+
78
+ ## Shared language rules
79
+
80
+ See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
@@ -0,0 +1,21 @@
1
+ import SessionClaims and SessionError from contracts
2
+ import authenticate from session
3
+ import LoginPage and Welcome from views
4
+ import UserInfo from provider
5
+ import settings and SigningKeys and KeyError and securityHeaders and withCookie from common
6
+ import Crypto from august.crypto
7
+ import Clock from august.time
8
+ import ExpiringStore from august.memory
9
+
10
+ /** The app renders a verified session or offers its OIDC login flow. No token claims are displayed before verification. */
11
+ endpoint GET "/" as home(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<Html> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless KeyError and TimeError and HttpError:
12
+ try:
13
+ session = authenticate(token)
14
+ return HttpResponse(body=Welcome(session), headers=securityHeaders())
15
+ catch SessionError error:
16
+ return HttpResponse(body=LoginPage(), headers=securityHeaders())
17
+
18
+ /** A protected JSON resource accepts only a live, verified application session. */
19
+ endpoint GET "/me" as me(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<UserInfo> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless SessionError with status 401 and KeyError and TimeError and HttpError:
20
+ session = authenticate(token)
21
+ return HttpResponse(body=UserInfo(sub=session.sub, name=session.name), headers=securityHeaders())