@greenpandastudios/aug-cli 0.19.0 → 0.20.1

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 (459) hide show
  1. package/README.md +9 -6
  2. package/THIRD_PARTY_NOTICES.md +4 -0
  3. package/bin/aug.mjs +12 -2
  4. package/docs/about.md +27 -0
  5. package/docs/api/crypto.md +103 -69
  6. package/docs/api/io.md +35 -33
  7. package/docs/api/json.md +3 -3
  8. package/docs/api/memory.md +23 -19
  9. package/docs/api/time.md +10 -9
  10. package/docs/api/web.md +33 -38
  11. package/docs/compatibility.md +3 -3
  12. package/docs/contributing-benchmarks.md +38 -0
  13. package/docs/dev-containers.md +95 -0
  14. package/docs/diagnostics.md +15 -5
  15. package/docs/docker.md +174 -12
  16. package/docs/editor.md +35 -0
  17. package/docs/example-projects.json +206 -24
  18. package/docs/examples/approved-design/counters.md +34 -126
  19. package/docs/examples/approved-design/dependencies/august/0.20.1/io/contracts.md +178 -0
  20. package/docs/examples/approved-design/domain/app.md +13 -77
  21. package/docs/examples/approved-design/domain/export.md +5 -19
  22. package/docs/examples/approved-design/domain/models.md +4 -23
  23. package/docs/examples/approved-design/domain/numbers.md +24 -114
  24. package/docs/examples/approved-design/index.md +16 -7
  25. package/docs/examples/approved-design/main.md +19 -96
  26. package/docs/examples/benchmark/index.md +6 -5
  27. package/docs/examples/benchmark/main.md +7 -35
  28. package/docs/examples/cli-args/index.md +6 -5
  29. package/docs/examples/cli-args/main.md +6 -31
  30. package/docs/examples/collections/index.md +6 -5
  31. package/docs/examples/collections/main.md +7 -35
  32. package/docs/examples/collections-benchmark/index.md +6 -5
  33. package/docs/examples/collections-benchmark/main.md +7 -35
  34. package/docs/examples/cpu-benchmark/index.md +6 -5
  35. package/docs/examples/cpu-benchmark/main.md +5 -24
  36. package/docs/examples/developer-workflow/calculator.md +39 -186
  37. package/docs/examples/developer-workflow/dependencies/august/0.20.1/io/contracts.md +178 -0
  38. package/docs/examples/developer-workflow/index.md +16 -7
  39. package/docs/examples/developer-workflow/logging/console.md +10 -56
  40. package/docs/examples/developer-workflow/logging/export.md +4 -14
  41. package/docs/examples/developer-workflow/logging/logger.md +7 -43
  42. package/docs/examples/developer-workflow/main.md +17 -69
  43. package/docs/examples/drop/index.md +6 -5
  44. package/docs/examples/drop/main.md +7 -27
  45. package/docs/examples/drop/resource.md +7 -30
  46. package/docs/examples/errors/errors.md +7 -27
  47. package/docs/examples/errors/index.md +6 -5
  48. package/docs/examples/errors/main.md +7 -28
  49. package/docs/examples/ffi/index.md +6 -5
  50. package/docs/examples/ffi/main.md +6 -20
  51. package/docs/examples/ffi/native.md +8 -34
  52. package/docs/examples/generic-di/dependencies/august/0.20.1/io/contracts.md +178 -0
  53. package/docs/examples/generic-di/index.md +6 -5
  54. package/docs/examples/generic-di/main.md +9 -39
  55. package/docs/examples/generic-di/types.md +23 -92
  56. package/docs/examples/generics/index.md +6 -5
  57. package/docs/examples/generics/main.md +10 -47
  58. package/docs/examples/generics/types.md +25 -100
  59. package/docs/examples/hello/app/export.md +4 -12
  60. package/docs/examples/hello/app/greeter.md +13 -91
  61. package/docs/examples/hello/dependencies/august/0.20.1/io/contracts.md +178 -0
  62. package/docs/examples/hello/index.md +17 -6
  63. package/docs/examples/hello/logging/console.md +10 -54
  64. package/docs/examples/hello/logging/export.md +4 -14
  65. package/docs/examples/hello/logging/logger.md +7 -45
  66. package/docs/examples/hello/main.md +9 -39
  67. package/docs/examples/http-benchmark/index.md +6 -5
  68. package/docs/examples/http-benchmark/main.md +6 -20
  69. package/docs/examples/http-benchmark/routes.md +9 -31
  70. package/docs/examples/index.md +46 -29
  71. package/docs/examples/interceptors/app.md +20 -139
  72. package/docs/examples/interceptors/dependencies/august/0.20.1/io/contracts.md +178 -0
  73. package/docs/examples/interceptors/index.md +6 -5
  74. package/docs/examples/interceptors/interceptors.md +24 -148
  75. package/docs/examples/interceptors/logging.md +13 -76
  76. package/docs/examples/interceptors/main.md +10 -65
  77. package/docs/examples/json-benchmark/data.md +4 -20
  78. package/docs/examples/json-benchmark/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
  79. package/docs/examples/json-benchmark/index.md +7 -5
  80. package/docs/examples/json-benchmark/main-yaml.md +20 -0
  81. package/docs/examples/json-benchmark/main.md +10 -49
  82. package/docs/examples/new-syntax/console.md +10 -52
  83. package/docs/examples/new-syntax/dependencies/august/0.20.1/io/contracts.md +178 -0
  84. package/docs/examples/new-syntax/greeter.md +13 -71
  85. package/docs/examples/new-syntax/index.md +6 -5
  86. package/docs/examples/new-syntax/logger.md +7 -43
  87. package/docs/examples/new-syntax/main.md +10 -53
  88. package/docs/examples/new-syntax/math.md +6 -24
  89. package/docs/examples/oidc-login/client/contracts.md +10 -61
  90. package/docs/examples/oidc-login/client/endpoints.md +32 -154
  91. package/docs/examples/oidc-login/client/export.md +5 -23
  92. package/docs/examples/oidc-login/client/login.md +234 -344
  93. package/docs/examples/oidc-login/client/logout.md +38 -143
  94. package/docs/examples/oidc-login/client/protocol.md +183 -304
  95. package/docs/examples/oidc-login/client/session.md +41 -149
  96. package/docs/examples/oidc-login/client/views.md +13 -58
  97. package/docs/examples/oidc-login/common/export.md +6 -26
  98. package/docs/examples/oidc-login/common/headers.md +42 -72
  99. package/docs/examples/oidc-login/common/keys.md +40 -164
  100. package/docs/examples/oidc-login/common/settings.md +24 -40
  101. package/docs/examples/oidc-login/common/views.md +7 -28
  102. package/docs/examples/oidc-login/dependencies/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.md +205 -0
  103. package/docs/examples/oidc-login/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
  104. package/docs/examples/oidc-login/dependencies/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +267 -0
  105. package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md +415 -0
  106. package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md +271 -0
  107. package/docs/examples/oidc-login/dependencies/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +89 -0
  108. package/docs/examples/oidc-login/index.md +8 -7
  109. package/docs/examples/oidc-login/main-yaml.md +7 -0
  110. package/docs/examples/oidc-login/main.md +26 -153
  111. package/docs/examples/oidc-login/provider/authorization.md +232 -275
  112. package/docs/examples/oidc-login/provider/contracts.md +24 -146
  113. package/docs/examples/oidc-login/provider/credentials.md +24 -57
  114. package/docs/examples/oidc-login/provider/discovery.md +48 -122
  115. package/docs/examples/oidc-login/provider/export.md +11 -37
  116. package/docs/examples/oidc-login/provider/token.md +159 -237
  117. package/docs/examples/oidc-login/provider/userinfo.md +47 -102
  118. package/docs/examples/oidc-login/provider/views.md +13 -53
  119. package/docs/examples/ownership/counter.md +17 -63
  120. package/docs/examples/ownership/index.md +6 -5
  121. package/docs/examples/ownership/main.md +7 -30
  122. package/docs/examples/ownership-transfer/dependencies/august/0.20.1/io/contracts.md +178 -0
  123. package/docs/examples/ownership-transfer/index.md +6 -5
  124. package/docs/examples/ownership-transfer/main.md +10 -52
  125. package/docs/examples/ownership-transfer/resource.md +15 -67
  126. package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +12 -50
  127. package/docs/examples/packages-app/index.md +7 -6
  128. package/docs/examples/packages-app/main.md +7 -25
  129. package/docs/examples/packages-math/aug-package-json.md +1 -1
  130. package/docs/examples/packages-math/index.md +7 -6
  131. package/docs/examples/packages-math/src/arithmetic.md +12 -50
  132. package/docs/examples/packages-math/src/export.md +4 -12
  133. package/docs/examples/startup-benchmark/index.md +6 -5
  134. package/docs/examples/startup-benchmark/main.md +5 -17
  135. package/docs/examples/visibility/counter.md +19 -67
  136. package/docs/examples/visibility/index.md +6 -5
  137. package/docs/examples/visibility/main.md +7 -31
  138. package/docs/examples/weather-api/forecasts.md +168 -0
  139. package/docs/examples/weather-api/index.md +42 -0
  140. package/docs/examples/weather-api/main-yaml.md +21 -0
  141. package/docs/examples/weather-api/main.md +65 -0
  142. package/docs/examples.json +10 -0
  143. package/docs/getting-started.md +105 -2
  144. package/docs/grammar.md +6 -4
  145. package/docs/guides/change-a-module.md +64 -0
  146. package/docs/guides/index.md +27 -0
  147. package/docs/index.md +51 -29
  148. package/docs/language-conformance.md +1 -1
  149. package/docs/language-constructs.md +22 -22
  150. package/docs/language-design-audit.md +1 -1
  151. package/docs/learn/data-and-errors.md +77 -0
  152. package/docs/learn/index.md +30 -0
  153. package/docs/learn/modules-and-dependencies.md +73 -0
  154. package/docs/learn/state-and-tests.md +71 -0
  155. package/docs/learn/values-and-functions.md +62 -0
  156. package/docs/lesson-failures.json +8 -0
  157. package/docs/maintaining-docs.md +16 -4
  158. package/docs/packages.md +72 -126
  159. package/docs/performance.md +13 -41
  160. package/docs/production-readiness.md +5 -4
  161. package/docs/public/downloads/approved-design.zip +0 -0
  162. package/docs/public/downloads/benchmark.zip +0 -0
  163. package/docs/public/downloads/cli-args.zip +0 -0
  164. package/docs/public/downloads/collections-benchmark.zip +0 -0
  165. package/docs/public/downloads/collections.zip +0 -0
  166. package/docs/public/downloads/cpu-benchmark.zip +0 -0
  167. package/docs/public/downloads/developer-workflow.zip +0 -0
  168. package/docs/public/downloads/drop.zip +0 -0
  169. package/docs/public/downloads/errors.zip +0 -0
  170. package/docs/public/downloads/ffi.zip +0 -0
  171. package/docs/public/downloads/generic-di.zip +0 -0
  172. package/docs/public/downloads/generics.zip +0 -0
  173. package/docs/public/downloads/hello.zip +0 -0
  174. package/docs/public/downloads/http-benchmark.zip +0 -0
  175. package/docs/public/downloads/interceptors.zip +0 -0
  176. package/docs/public/downloads/json-benchmark.zip +0 -0
  177. package/docs/public/downloads/new-syntax.zip +0 -0
  178. package/docs/public/downloads/oidc-login.zip +0 -0
  179. package/docs/public/downloads/ownership-transfer.zip +0 -0
  180. package/docs/public/downloads/ownership.zip +0 -0
  181. package/docs/public/downloads/packages-app.zip +0 -0
  182. package/docs/public/downloads/packages-math.zip +0 -0
  183. package/docs/public/downloads/startup-benchmark.zip +0 -0
  184. package/docs/public/downloads/visibility.zip +0 -0
  185. package/docs/public/downloads/weather-api.zip +0 -0
  186. package/docs/reference.md +23 -17
  187. package/docs/releasing.md +29 -15
  188. package/docs/research/code-to-natural-language.md +108 -0
  189. package/docs/research/ecosystem-workflow.md +41 -0
  190. package/docs/research/wiki-editorial-design.md +71 -0
  191. package/docs/roadmap.md +1 -1
  192. package/docs/specifications.md +27 -11
  193. package/docs/testing.md +19 -5
  194. package/docs/tooling.md +25 -12
  195. package/docs/weather-api.md +65 -0
  196. package/docs/web.md +50 -18
  197. package/docs/writing-docs.md +49 -0
  198. package/examples/{hello/.aug-spec/august/0.19.0 → approved-design/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  199. package/examples/approved-design/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  200. package/examples/approved-design/.aug-spec/manifest.json +3 -3
  201. package/examples/approved-design/counters.aug +5 -4
  202. package/examples/approved-design/counters.aug.md +25 -132
  203. package/examples/approved-design/domain/app.aug +2 -1
  204. package/examples/approved-design/domain/app.aug.md +10 -80
  205. package/examples/approved-design/domain/export.aug +1 -0
  206. package/examples/approved-design/domain/export.aug.md +4 -20
  207. package/examples/approved-design/domain/models.aug +1 -0
  208. package/examples/approved-design/domain/models.aug.md +3 -25
  209. package/examples/approved-design/domain/numbers.aug +3 -2
  210. package/examples/approved-design/domain/numbers.aug.md +19 -116
  211. package/examples/approved-design/main.aug +1 -0
  212. package/examples/approved-design/main.aug.md +12 -95
  213. package/examples/benchmark/.aug-spec/manifest.json +1 -1
  214. package/examples/benchmark/main.aug +1 -0
  215. package/examples/benchmark/main.aug.md +6 -36
  216. package/examples/cli-args/.aug-spec/manifest.json +1 -1
  217. package/examples/cli-args/main.aug +1 -0
  218. package/examples/cli-args/main.aug.md +5 -32
  219. package/examples/collections/.aug-spec/manifest.json +1 -1
  220. package/examples/collections/main.aug +1 -0
  221. package/examples/collections/main.aug.md +6 -36
  222. package/examples/{generic-di/.aug-spec/august/0.19.0 → developer-workflow/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  223. package/examples/developer-workflow/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  224. package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
  225. package/examples/developer-workflow/calculator.aug +3 -2
  226. package/examples/developer-workflow/calculator.aug.md +28 -189
  227. package/examples/developer-workflow/logging/console.aug +2 -1
  228. package/examples/developer-workflow/logging/console.aug.md +7 -57
  229. package/examples/developer-workflow/logging/export.aug +1 -0
  230. package/examples/developer-workflow/logging/export.aug.md +3 -15
  231. package/examples/developer-workflow/logging/logger.aug +1 -0
  232. package/examples/developer-workflow/logging/logger.aug.md +6 -46
  233. package/examples/developer-workflow/main.aug +1 -0
  234. package/examples/developer-workflow/main.aug.md +10 -68
  235. package/examples/drop/.aug-spec/manifest.json +1 -1
  236. package/examples/drop/main.aug +1 -0
  237. package/examples/drop/main.aug.md +6 -28
  238. package/examples/drop/resource.aug +1 -0
  239. package/examples/drop/resource.aug.md +6 -34
  240. package/examples/errors/.aug-spec/manifest.json +1 -1
  241. package/examples/errors/errors.aug +2 -1
  242. package/examples/errors/errors.aug.md +4 -27
  243. package/examples/errors/main.aug +1 -0
  244. package/examples/errors/main.aug.md +6 -29
  245. package/examples/ffi/.aug-spec/manifest.json +1 -1
  246. package/examples/ffi/main.aug +1 -0
  247. package/examples/ffi/main.aug.md +5 -21
  248. package/examples/ffi/native.aug +2 -1
  249. package/examples/ffi/native.aug.md +5 -35
  250. package/examples/{approved-design/.aug-spec/august/0.19.0 → generic-di/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  251. package/examples/generic-di/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  252. package/examples/generic-di/.aug-spec/manifest.json +3 -3
  253. package/examples/generic-di/main.aug +1 -0
  254. package/examples/generic-di/main.aug.md +8 -40
  255. package/examples/generic-di/types.aug +3 -2
  256. package/examples/generic-di/types.aug.md +18 -97
  257. package/examples/generics/.aug-spec/manifest.json +1 -1
  258. package/examples/generics/main.aug +1 -0
  259. package/examples/generics/main.aug.md +9 -48
  260. package/examples/generics/types.aug +4 -3
  261. package/examples/generics/types.aug.md +18 -104
  262. package/examples/{developer-workflow/.aug-spec/august/0.19.0 → hello/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  263. package/examples/hello/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  264. package/examples/hello/.aug-spec/manifest.json +3 -3
  265. package/examples/hello/app/export.aug +1 -0
  266. package/examples/hello/app/export.aug.md +3 -13
  267. package/examples/hello/app/greeter.aug +2 -1
  268. package/examples/hello/app/greeter.aug.md +10 -94
  269. package/examples/hello/logging/console.aug +2 -1
  270. package/examples/hello/logging/console.aug.md +7 -55
  271. package/examples/hello/logging/export.aug +1 -0
  272. package/examples/hello/logging/export.aug.md +3 -15
  273. package/examples/hello/logging/logger.aug +1 -0
  274. package/examples/hello/logging/logger.aug.md +6 -48
  275. package/examples/hello/main.aug +1 -0
  276. package/examples/hello/main.aug.md +8 -40
  277. package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  278. package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  279. package/examples/interceptors/.aug-spec/manifest.json +3 -3
  280. package/examples/interceptors/app.aug +3 -2
  281. package/examples/interceptors/app.aug.md +15 -141
  282. package/examples/interceptors/interceptors.aug +3 -2
  283. package/examples/interceptors/interceptors.aug.md +19 -152
  284. package/examples/interceptors/logging.aug +2 -1
  285. package/examples/interceptors/logging.aug.md +10 -79
  286. package/examples/interceptors/main.aug +1 -0
  287. package/examples/interceptors/main.aug.md +9 -66
  288. package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  289. package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  290. package/examples/new-syntax/.aug-spec/manifest.json +3 -3
  291. package/examples/new-syntax/console.aug +2 -1
  292. package/examples/new-syntax/console.aug.md +7 -53
  293. package/examples/new-syntax/greeter.aug +2 -1
  294. package/examples/new-syntax/greeter.aug.md +10 -74
  295. package/examples/new-syntax/logger.aug +1 -0
  296. package/examples/new-syntax/logger.aug.md +6 -46
  297. package/examples/new-syntax/main.aug +1 -0
  298. package/examples/new-syntax/main.aug.md +9 -54
  299. package/examples/new-syntax/math.aug +2 -1
  300. package/examples/new-syntax/math.aug.md +3 -24
  301. package/examples/oidc-login/.aug-spec/manifest.json +13 -13
  302. package/examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug.md +71 -0
  303. package/examples/oidc-login/.aug-spec/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +17 -0
  304. package/examples/oidc-login/.aug-spec/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +125 -0
  305. package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/contracts.aug +12 -11
  306. package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.aug.md +244 -0
  307. package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/jose.aug +6 -5
  308. package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.aug.md +71 -0
  309. package/examples/oidc-login/.aug-spec/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +30 -0
  310. package/examples/oidc-login/aug.lock.json +100 -0
  311. package/examples/oidc-login/client/contracts.aug +1 -0
  312. package/examples/oidc-login/client/contracts.aug.md +9 -66
  313. package/examples/oidc-login/client/endpoints.aug +6 -5
  314. package/examples/oidc-login/client/endpoints.aug.md +13 -145
  315. package/examples/oidc-login/client/export.aug +1 -0
  316. package/examples/oidc-login/client/export.aug.md +4 -24
  317. package/examples/oidc-login/client/login.aug +7 -6
  318. package/examples/oidc-login/client/login.aug.md +25 -303
  319. package/examples/oidc-login/client/logout.aug +5 -4
  320. package/examples/oidc-login/client/logout.aug.md +13 -135
  321. package/examples/oidc-login/client/protocol.aug +7 -6
  322. package/examples/oidc-login/client/protocol.aug.md +36 -283
  323. package/examples/oidc-login/client/session.aug +5 -4
  324. package/examples/oidc-login/client/session.aug.md +12 -139
  325. package/examples/oidc-login/client/views.aug +3 -2
  326. package/examples/oidc-login/client/views.aug.md +8 -57
  327. package/examples/oidc-login/common/export.aug +1 -0
  328. package/examples/oidc-login/common/export.aug.md +5 -27
  329. package/examples/oidc-login/common/headers.aug +4 -3
  330. package/examples/oidc-login/common/headers.aug.md +9 -67
  331. package/examples/oidc-login/common/keys.aug +6 -5
  332. package/examples/oidc-login/common/keys.aug.md +29 -165
  333. package/examples/oidc-login/common/settings.aug +2 -1
  334. package/examples/oidc-login/common/settings.aug.md +5 -39
  335. package/examples/oidc-login/common/views.aug +2 -1
  336. package/examples/oidc-login/common/views.aug.md +4 -28
  337. package/examples/oidc-login/main.aug +6 -16
  338. package/examples/oidc-login/main.aug.md +17 -146
  339. package/examples/oidc-login/main.yaml +7 -0
  340. package/examples/oidc-login/provider/authorization.aug +7 -6
  341. package/examples/oidc-login/provider/authorization.aug.md +23 -238
  342. package/examples/oidc-login/provider/contracts.aug +1 -0
  343. package/examples/oidc-login/provider/contracts.aug.md +23 -158
  344. package/examples/oidc-login/provider/credentials.aug +3 -2
  345. package/examples/oidc-login/provider/credentials.aug.md +9 -53
  346. package/examples/oidc-login/provider/discovery.aug +4 -3
  347. package/examples/oidc-login/provider/discovery.aug.md +11 -118
  348. package/examples/oidc-login/provider/export.aug +1 -0
  349. package/examples/oidc-login/provider/export.aug.md +6 -34
  350. package/examples/oidc-login/provider/token.aug +6 -5
  351. package/examples/oidc-login/provider/token.aug.md +16 -204
  352. package/examples/oidc-login/provider/userinfo.aug +4 -3
  353. package/examples/oidc-login/provider/userinfo.aug.md +10 -92
  354. package/examples/oidc-login/provider/views.aug +3 -2
  355. package/examples/oidc-login/provider/views.aug.md +8 -52
  356. package/examples/ownership/.aug-spec/manifest.json +1 -1
  357. package/examples/ownership/counter.aug +3 -2
  358. package/examples/ownership/counter.aug.md +12 -66
  359. package/examples/ownership/main.aug +1 -0
  360. package/examples/ownership/main.aug.md +6 -31
  361. package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  362. package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  363. package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
  364. package/examples/ownership-transfer/main.aug +1 -0
  365. package/examples/ownership-transfer/main.aug.md +9 -53
  366. package/examples/ownership-transfer/resource.aug +2 -1
  367. package/examples/ownership-transfer/resource.aug.md +12 -71
  368. package/examples/packages/app/.aug-spec/manifest.json +1 -1
  369. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +2 -1
  370. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +9 -51
  371. package/examples/packages/app/main.aug +1 -0
  372. package/examples/packages/app/main.aug.md +6 -26
  373. package/examples/packages/math/.aug-spec/manifest.json +1 -1
  374. package/examples/packages/math/aug-package.json +1 -1
  375. package/examples/packages/math/src/arithmetic.aug +2 -1
  376. package/examples/packages/math/src/arithmetic.aug.md +9 -51
  377. package/examples/packages/math/src/export.aug +1 -0
  378. package/examples/packages/math/src/export.aug.md +3 -13
  379. package/examples/visibility/.aug-spec/manifest.json +1 -1
  380. package/examples/visibility/counter.aug +4 -3
  381. package/examples/visibility/counter.aug.md +12 -68
  382. package/examples/visibility/main.aug +1 -0
  383. package/examples/visibility/main.aug.md +6 -32
  384. package/examples/weather-api/.aug-spec/manifest.json +8 -0
  385. package/examples/weather-api/AGENTS.md +17 -0
  386. package/examples/weather-api/README.md +19 -0
  387. package/examples/weather-api/forecasts.aug +47 -0
  388. package/examples/weather-api/forecasts.aug.md +32 -0
  389. package/examples/weather-api/main.aug +4 -0
  390. package/examples/weather-api/main.aug.md +15 -0
  391. package/examples/weather-api/main.yaml +5 -0
  392. package/examples/weather-api/weather.http +5 -0
  393. package/package.json +3 -4
  394. package/scripts/bootstrap-native.mjs +181 -106
  395. package/scripts/native-setup.mjs +98 -0
  396. package/scripts/native-toolchain.mjs +28 -0
  397. package/src/builtins.js +1 -1
  398. package/src/checker.js +259 -72
  399. package/src/cli.js +114 -20
  400. package/src/codegen.js +1 -1
  401. package/src/config.js +1 -1
  402. package/src/contracts.js +10 -0
  403. package/src/editor.js +71 -16
  404. package/src/fixes.js +90 -2
  405. package/src/formatter.js +19 -8
  406. package/src/git-packages.js +110 -0
  407. package/src/help.js +24 -23
  408. package/src/http-contracts.js +14 -0
  409. package/src/http-policies.js +5 -5
  410. package/src/libraries.js +1 -1
  411. package/src/lsp.js +14 -5
  412. package/src/native.js +19 -13
  413. package/src/navigation.js +4 -2
  414. package/src/openapi.js +5 -4
  415. package/src/package-locking.js +45 -0
  416. package/src/package-manager.js +251 -67
  417. package/src/parser.js +13 -5
  418. package/src/policies.js +3 -3
  419. package/src/project-init.js +78 -4
  420. package/src/project.js +9 -7
  421. package/src/semantic.js +46 -2
  422. package/src/snippets.js +59 -0
  423. package/src/spec-hints.js +56 -0
  424. package/src/spec-tree.js +241 -0
  425. package/src/spec.js +626 -303
  426. package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +0 -395
  427. package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +0 -395
  428. package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +0 -395
  429. package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +0 -395
  430. package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +0 -395
  431. package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +0 -103
  432. package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +0 -395
  433. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +0 -925
  434. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +0 -434
  435. package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +0 -103
  436. package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +0 -374
  437. package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +0 -150
  438. package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +0 -532
  439. package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +0 -395
  440. package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  441. package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  442. package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  443. package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  444. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  445. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  446. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  447. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  448. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +0 -791
  449. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +0 -266
  450. package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +0 -55
  451. package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +0 -250
  452. package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +0 -96
  453. package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +0 -420
  454. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  455. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  456. /package/examples/oidc-login/.aug-spec/{august/0.19.0/memory → packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/store.aug +0 -0
  457. /package/examples/oidc-login/.aug-spec/{august/0.19.0/json → packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
  458. /package/examples/oidc-login/.aug-spec/{august/0.19.0/web → packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
  459. /package/examples/oidc-login/.aug-spec/{august/0.19.0/time → packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
@@ -49,6 +49,7 @@ pageClass: aug-example-page
49
49
  ::: code-group
50
50
 
51
51
  ```aug [Indentation]
52
+ // aug-spec: "contracts.aug.md" explains this file. Read it before changes; refresh with aug spec.
52
53
  /** A provider request is bound to a browser cookie, a form CSRF token, and a registered client. */
53
54
  record AuthorizationRequest(string clientId, string redirectUri, string state, string nonce, string challenge, string browser, string csrf, int expires)
54
55
  /** Codes are short-lived, single-use and bound to a redirect URI and S256 challenge. */
@@ -67,6 +68,7 @@ CodeError() implements Error:
67
68
  ```
68
69
 
69
70
  ```aug [Braces]
71
+ // aug-spec: "contracts.aug.md" explains this file. Read it before changes; refresh with aug spec.
70
72
  /** A provider request is bound to a browser cookie, a form CSRF token, and a registered client. */
71
73
  record AuthorizationRequest(string clientId, string redirectUri, string state, string nonce, string challenge, string browser, string csrf, int expires)
72
74
  /** Codes are short-lived, single-use and bound to a redirect URI and S256 challenge. */
@@ -94,173 +96,49 @@ CodeError() implements Error {
94
96
 
95
97
  ## Compiled specification {#specification}
96
98
 
97
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
99
+ ### `AuthorizationRequest` · immutable record · [source](contracts.md#code) {#symbol-AuthorizationRequest}
98
100
 
99
- ### In this file
101
+ A provider request is bound to a browser cookie, a form CSRF token, and a registered client. It takes `clientId`, `redirectUri`, `state`, `nonce`, `challenge`, `browser`, and `csrf` as strings, kept read-only and `expires` as an integer, kept read-only.
100
102
 
101
- - [`AuthorizationRequest`](contracts.md#symbol-AuthorizationRequest) is an immutable record.
102
- - [`AuthorizationCode`](contracts.md#symbol-AuthorizationCode) is an immutable record.
103
- - [`IdClaims`](contracts.md#symbol-IdClaims) is an immutable record.
104
- - [`AccessGrant`](contracts.md#symbol-AccessGrant) is an immutable record.
105
- - [`TokenResponse`](contracts.md#symbol-TokenResponse) is an immutable record.
106
- - [`OAuthError`](contracts.md#symbol-OAuthError) is an immutable record.
107
- - [`TokenForm`](contracts.md#symbol-TokenForm) is an immutable record.
108
- - [`LoginForm`](contracts.md#symbol-LoginForm) is an immutable record.
109
- - [`UserInfo`](contracts.md#symbol-UserInfo) is an immutable record.
110
- - [`LoginError`](contracts.md#symbol-LoginError) is a class implementing `Error`.
111
- - [`CodeError`](contracts.md#symbol-CodeError) is a class implementing `Error`.
103
+ ### `AuthorizationCode` · immutable record · [source](contracts.md#code) {#symbol-AuthorizationCode}
112
104
 
113
- ### `AuthorizationRequest` {#symbol-AuthorizationRequest}
105
+ Codes are short-lived, single-use and bound to a redirect URI and S256 challenge. It takes `clientId`, `redirectUri`, `challenge`, `nonce`, `subject`, and `name` as strings, kept read-only and `expires` as an integer, kept read-only.
114
106
 
115
- [source](contracts.md#code)
107
+ ### `IdClaims` · immutable record · [source](contracts.md#code) {#symbol-IdClaims}
116
108
 
117
- Immutable record.
109
+ It takes `iss`, `sub`, and `aud` as strings, kept read-only, `exp` and `iat` as integers, kept read-only, and `nonce` and `name` as strings, kept read-only.
118
110
 
119
- **Author documentation**
111
+ ### `AccessGrant` · immutable record · [source](contracts.md#code) {#symbol-AccessGrant}
120
112
 
121
- A provider request is bound to a browser cookie, a form CSRF token, and a registered client.
113
+ It takes `subject` and `name` as strings, kept read-only and `expires` as an integer, kept read-only.
122
114
 
123
- **Inputs**
115
+ ### `TokenResponse` · immutable record · [source](contracts.md#code) {#symbol-TokenResponse}
124
116
 
125
- - `clientId` (`string`) — required labeled input — stored as `clientId` and read-only after initialization.
126
- - `redirectUri` (`string`) — required labeled input — stored as `redirectUri` and read-only after initialization.
127
- - `state` (`string`) — required labeled input — stored as `state` and read-only after initialization.
128
- - `nonce` (`string`) — required labeled input — stored as `nonce` and read-only after initialization.
129
- - `challenge` (`string`) — required labeled input — stored as `challenge` and read-only after initialization.
130
- - `browser` (`string`) — required labeled input — stored as `browser` and read-only after initialization.
131
- - `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
132
- - `expires` (`int`) — required labeled input — stored as `expires` and read-only after initialization.
117
+ It takes `token_type`, `access_token`, and `id_token` as strings, kept read-only, `expires_in` as an integer, kept read-only, and `scope` as a string, kept read-only.
133
118
 
134
- ### `AuthorizationCode` {#symbol-AuthorizationCode}
119
+ ### `OAuthError` · immutable record · [source](contracts.md#code) {#symbol-OAuthError}
135
120
 
136
- [source](contracts.md#code)
121
+ It takes `error` and `error_description` as strings, kept read-only.
137
122
 
138
- Immutable record.
123
+ ### `TokenForm` · immutable record · [source](contracts.md#code) {#symbol-TokenForm}
139
124
 
140
- **Author documentation**
125
+ It takes `grant_type`, `code`, `redirect_uri`, `client_id`, and `code_verifier` as strings, kept read-only.
141
126
 
142
- Codes are short-lived, single-use and bound to a redirect URI and S256 challenge.
127
+ ### `LoginForm` · immutable record · [source](contracts.md#code) {#symbol-LoginForm}
143
128
 
144
- **Inputs**
129
+ It takes `request_id`, `csrf`, `username`, and `password` as strings, kept read-only.
145
130
 
146
- - `clientId` (`string`) — required labeled input — stored as `clientId` and read-only after initialization.
147
- - `redirectUri` (`string`) — required labeled input — stored as `redirectUri` and read-only after initialization.
148
- - `challenge` (`string`) — required labeled input — stored as `challenge` and read-only after initialization.
149
- - `nonce` (`string`) — required labeled input — stored as `nonce` and read-only after initialization.
150
- - `subject` (`string`) — required labeled input — stored as `subject` and read-only after initialization.
151
- - `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
152
- - `expires` (`int`) — required labeled input — stored as `expires` and read-only after initialization.
131
+ ### `UserInfo` · immutable record · [source](contracts.md#code) {#symbol-UserInfo}
153
132
 
154
- ### `IdClaims` {#symbol-IdClaims}
133
+ It takes `sub` and `name` as strings, kept read-only.
155
134
 
156
- [source](contracts.md#code)
135
+ ### `LoginError` · class · [source](contracts.md#code) {#symbol-LoginError}
157
136
 
158
- Immutable record.
137
+ It implements `Error`.
159
138
 
160
- **Inputs**
139
+ ### `CodeError` · class · [source](contracts.md#code) {#symbol-CodeError}
161
140
 
162
- - `iss` (`string`) — required labeled input — stored as `iss` and read-only after initialization.
163
- - `sub` (`string`) — required labeled input — stored as `sub` and read-only after initialization.
164
- - `aud` (`string`) — required labeled input — stored as `aud` and read-only after initialization.
165
- - `exp` (`int`) — required labeled input — stored as `exp` and read-only after initialization.
166
- - `iat` (`int`) — required labeled input — stored as `iat` and read-only after initialization.
167
- - `nonce` (`string`) — required labeled input — stored as `nonce` and read-only after initialization.
168
- - `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
169
-
170
- ### `AccessGrant` {#symbol-AccessGrant}
171
-
172
- [source](contracts.md#code)
173
-
174
- Immutable record.
175
-
176
- **Inputs**
177
-
178
- - `subject` (`string`) — required labeled input — stored as `subject` and read-only after initialization.
179
- - `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
180
- - `expires` (`int`) — required labeled input — stored as `expires` and read-only after initialization.
181
-
182
- ### `TokenResponse` {#symbol-TokenResponse}
183
-
184
- [source](contracts.md#code)
185
-
186
- Immutable record.
187
-
188
- **Inputs**
189
-
190
- - `token_type` (`string`) — required labeled input — stored as `token_type` and read-only after initialization.
191
- - `access_token` (`string`) — required labeled input — stored as `access_token` and read-only after initialization.
192
- - `id_token` (`string`) — required labeled input — stored as `id_token` and read-only after initialization.
193
- - `expires_in` (`int`) — required labeled input — stored as `expires_in` and read-only after initialization.
194
- - `scope` (`string`) — required labeled input — stored as `scope` and read-only after initialization.
195
-
196
- ### `OAuthError` {#symbol-OAuthError}
197
-
198
- [source](contracts.md#code)
199
-
200
- Immutable record.
201
-
202
- **Inputs**
203
-
204
- - `error` (`string`) — required labeled input — stored as `error` and read-only after initialization.
205
- - `error_description` (`string`) — required labeled input — stored as `error_description` and read-only after initialization.
206
-
207
- ### `TokenForm` {#symbol-TokenForm}
208
-
209
- [source](contracts.md#code)
210
-
211
- Immutable record.
212
-
213
- **Inputs**
214
-
215
- - `grant_type` (`string`) — required labeled input — stored as `grant_type` and read-only after initialization.
216
- - `code` (`string`) — required labeled input — stored as `code` and read-only after initialization.
217
- - `redirect_uri` (`string`) — required labeled input — stored as `redirect_uri` and read-only after initialization.
218
- - `client_id` (`string`) — required labeled input — stored as `client_id` and read-only after initialization.
219
- - `code_verifier` (`string`) — required labeled input — stored as `code_verifier` and read-only after initialization.
220
-
221
- ### `LoginForm` {#symbol-LoginForm}
222
-
223
- [source](contracts.md#code)
224
-
225
- Immutable record.
226
-
227
- **Inputs**
228
-
229
- - `request_id` (`string`) — required labeled input — stored as `request_id` and read-only after initialization.
230
- - `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
231
- - `username` (`string`) — required labeled input — stored as `username` and read-only after initialization.
232
- - `password` (`string`) — required labeled input — stored as `password` and read-only after initialization.
233
-
234
- ### `UserInfo` {#symbol-UserInfo}
235
-
236
- [source](contracts.md#code)
237
-
238
- Immutable record.
239
-
240
- **Inputs**
241
-
242
- - `sub` (`string`) — required labeled input — stored as `sub` and read-only after initialization.
243
- - `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
244
-
245
- ### `LoginError` {#symbol-LoginError}
246
-
247
- [source](contracts.md#code)
248
-
249
- Behavioral class.
250
-
251
- Satisfies `Error`.
252
-
253
- ### `CodeError` {#symbol-CodeError}
254
-
255
- [source](contracts.md#code)
256
-
257
- Behavioral class.
258
-
259
- Satisfies `Error`.
260
-
261
- ### Shared language rules
262
-
263
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
141
+ It implements `Error`.
264
142
 
265
143
  ::::
266
144
 
@@ -49,12 +49,17 @@ pageClass: aug-example-page
49
49
  ::: code-group
50
50
 
51
51
  ```aug [Indentation]
52
- import Crypto from august.crypto
52
+ // aug-spec: "credentials.aug.md" explains this file. Read it before changes; refresh with aug spec.
53
+ import Crypto from crypto
53
54
  /** One development account with a PBKDF2-HMAC-SHA256 verifier. Production account storage is deliberately a separate capability. */
54
- verifyCredentials(string username, string password, resolve Crypto crypto) returns bool uses crypto.passwordHash and crypto.decodeBase64url and crypto.equal unless CryptoError:
55
+ verifyCredentials(string username, string password, resolve Crypto crypto):
55
56
  if username.length() > 64 or password.length() > 256:
56
57
  return false
57
- actual = crypto.passwordHash(password=password.bytes(), salt="August demo salt v1".bytes(), iterations=600000)
58
+ actual = crypto.passwordHash(
59
+ password=password.bytes(),
60
+ salt="August demo salt v1".bytes(),
61
+ iterations=600000
62
+ )
58
63
  expected = crypto.decodeBase64url(input="s70USYF6WohPz2f7VLA9haS_ZgEtenviSf_HG0o7B_A")
59
64
  userMatches = crypto.equal(left=username.bytes(), right="ada".bytes())
60
65
  passwordMatches = crypto.equal(left=actual, right=expected)
@@ -62,13 +67,18 @@ verifyCredentials(string username, string password, resolve Crypto crypto) retur
62
67
  ```
63
68
 
64
69
  ```aug [Braces]
65
- import Crypto from august.crypto
70
+ // aug-spec: "credentials.aug.md" explains this file. Read it before changes; refresh with aug spec.
71
+ import Crypto from crypto
66
72
  /** One development account with a PBKDF2-HMAC-SHA256 verifier. Production account storage is deliberately a separate capability. */
67
- verifyCredentials(string username, string password, resolve Crypto crypto) returns bool uses crypto.passwordHash and crypto.decodeBase64url and crypto.equal unless CryptoError {
73
+ verifyCredentials(string username, string password, resolve Crypto crypto) {
68
74
  if username.length() > 64 or password.length() > 256 {
69
75
  return false
70
76
  }
71
- actual = crypto.passwordHash(password=password.bytes(), salt="August demo salt v1".bytes(), iterations=600000)
77
+ actual = crypto.passwordHash(
78
+ password=password.bytes(),
79
+ salt="August demo salt v1".bytes(),
80
+ iterations=600000
81
+ )
72
82
  expected = crypto.decodeBase64url(input="s70USYF6WohPz2f7VLA9haS_ZgEtenviSf_HG0o7B_A")
73
83
  userMatches = crypto.equal(left=username.bytes(), right="ada".bytes())
74
84
  passwordMatches = crypto.equal(left=actual, right=expected)
@@ -84,64 +94,21 @@ verifyCredentials(string username, string password, resolve Crypto crypto) retur
84
94
 
85
95
  ## Compiled specification {#specification}
86
96
 
87
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
97
+ ### `verifyCredentials` · [source](credentials.md#code) {#symbol-verifyCredentials}
88
98
 
89
- ### In this file
99
+ One development account with a PBKDF2-HMAC-SHA256 verifier. Production account storage is deliberately a separate capability. It takes `username` and `password` as strings. It gets `crypto` ([`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto)) from dependency injection.
90
100
 
91
- - [`verifyCredentials`](credentials.md#symbol-verifyCredentials) is a function returning `bool`.
101
+ Failures can raise `CryptoError`.
92
102
 
93
- ### `verifyCredentials` {#symbol-verifyCredentials}
103
+ If the byte length of `username` is greater than `64` or the byte length of `password` is greater than `256`, it returns `false`. It sets `actual` to [`crypto.passwordHash`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.passwordHash) with `password` from the UTF-8 bytes of `password`, `salt` from the UTF-8 bytes of `"August demo salt v1"`, and `iterations` `600000`. It sets `expected` to [`crypto.decodeBase64url`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.decodeBase64url) with `input` `"s70USYF6WohPz2f7VLA9haS_ZgEtenviSf_HG0o7B_A"`. It sets `userMatches` to [`crypto.equal`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.equal) with `left` from the UTF-8 bytes of `username` and `right` from the UTF-8 bytes of `"ada"`.
94
104
 
95
- [source](credentials.md#code)
105
+ It sets `passwordMatches` to [`crypto.equal`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.equal) with `left` from `actual` and `right` from `expected`. It returns `userMatches` and `passwordMatches`.
96
106
 
97
- **Inputs**
107
+ ### Dependencies
98
108
 
99
- - `username` (`string`) — required labeled input.
100
- - `password` (`string`) — required labeled input.
101
- - `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
109
+ It uses [`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto) ([`decodeBase64url`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.decodeBase64url), [`equal`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.equal), and [`passwordHash`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.passwordHash)) from `crypto`.
102
110
 
103
- Returns: `bool`.
104
-
105
- Capabilities: [`crypto.passwordHash`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.passwordHash), [`crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url), [`crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal).
106
-
107
- Can fail with `CryptoError`. Callers must catch or propagate these errors.
108
-
109
- **What it does**
110
-
111
- - If (call `length` on `username` is greater than `64`) or (call `length` on `password` is greater than `256`):
112
- - Return `false`.
113
- - Set `actual` to call [`Crypto.passwordHash`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.passwordHash) on `crypto` with `password` = call `bytes` on `password`; `salt` = call `bytes` on `"August demo salt v1"`; `iterations` = `600000`.
114
- - Set `expected` to call [`Crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `"s70USYF6WohPz2f7VLA9haS_ZgEtenviSf_HG0o7B_A"`.
115
- - Set `userMatches` to call [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) on `crypto` with `left` = call `bytes` on `username`; `right` = call `bytes` on `"ada"`.
116
- - Set `passwordMatches` to call [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) on `crypto` with `left` = `actual`; `right` = `expected`.
117
- - Return `userMatches` and `passwordMatches`.
118
-
119
- **Author documentation**
120
-
121
- One development account with a PBKDF2-HMAC-SHA256 verifier. Production account storage is deliberately a separate capability.
122
-
123
- ### Dependencies used by this file
124
-
125
- Only referenced types and operations appear here. Each name links to its complete specification.
126
-
127
- #### [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)
128
-
129
- Capability interface from `august.crypto`.
130
-
131
- - [`Crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url) (`input`: `string`) → `Bytes`; can fail with `CryptoError`.
132
- - [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) (`left`: `Bytes`, `right`: `Bytes`) → `bool`.
133
- - [`Crypto.passwordHash`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.passwordHash) (`password`: `Bytes`, `salt`: `Bytes`, `iterations`: `int`) → `Bytes`; can fail with `CryptoError`.
134
-
135
- ### Built-in operations used by this file
136
-
137
- - `string.bytes` (no inputs) → `Bytes`: Encode this string as immutable UTF-8 bytes.
138
- - `string.length` (no inputs) → `int`: Read the number of UTF-8 bytes. Unicode text is preserved losslessly.
139
-
140
- [Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
141
-
142
- ### Shared language rules
143
-
144
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
111
+ Built-in operations follow the [language reference](https://greenpandastudios.github.io/augscript/language-constructs).
145
112
 
146
113
  ::::
147
114
 
@@ -49,30 +49,60 @@ pageClass: aug-example-page
49
49
  ::: code-group
50
50
 
51
51
  ```aug [Indentation]
52
+ // aug-spec: "discovery.aug.md" explains this file. Read it before changes; refresh with aug spec.
52
53
  import settings and SigningKeys and KeyError from common
53
- import Crypto and RsaJwks and rsaJwk from august.crypto
54
+ import Crypto and RsaJwks and rsaJwk from crypto
54
55
  /** Discovery advertises exactly this provider's supported authorization-code profile. */
55
56
  record Discovery(string issuer, string authorization_endpoint, string token_endpoint, string userinfo_endpoint, string jwks_uri, List<string> response_types_supported, List<string> grant_types_supported, List<string> subject_types_supported, List<string> id_token_signing_alg_values_supported, List<string> token_endpoint_auth_methods_supported, List<string> scopes_supported, List<string> claims_supported, List<string> code_challenge_methods_supported)
56
- endpoint GET "/provider/.well-known/openid-configuration" as discovery() returns Discovery:
57
+ endpoint GET "/provider/.well-known/openid-configuration" as discovery():
57
58
  config = settings()
58
- return Discovery(issuer=config.issuer, authorization_endpoint=config.issuer + "/authorize", token_endpoint=config.issuer + "/token", userinfo_endpoint=config.issuer + "/userinfo", jwks_uri=config.issuer + "/jwks", response_types_supported=["code"], grant_types_supported=["authorization_code"], subject_types_supported=["public"], id_token_signing_alg_values_supported=["RS256"], token_endpoint_auth_methods_supported=["none"], scopes_supported=["openid", "profile"], claims_supported=["iss", "sub", "aud", "exp", "iat", "nonce", "name"], code_challenge_methods_supported=["S256"])
59
+ return Discovery(
60
+ issuer=config.issuer,
61
+ authorization_endpoint=config.issuer + "/authorize",
62
+ token_endpoint=config.issuer + "/token",
63
+ userinfo_endpoint=config.issuer + "/userinfo",
64
+ jwks_uri=config.issuer + "/jwks",
65
+ response_types_supported=["code"],
66
+ grant_types_supported=["authorization_code"],
67
+ subject_types_supported=["public"],
68
+ id_token_signing_alg_values_supported=["RS256"],
69
+ token_endpoint_auth_methods_supported=["none"],
70
+ scopes_supported=["openid", "profile"],
71
+ claims_supported=["iss", "sub", "aud", "exp", "iat", "nonce", "name"],
72
+ code_challenge_methods_supported=["S256"]
73
+ )
59
74
  /** Only the provider's public signing key is published. Session keys never enter this JWKS. */
60
- endpoint GET "/provider/jwks" as jwks(resolve Crypto crypto, resolve SigningKeys keys) returns RsaJwks uses keys.provider and crypto.publicRsa and crypto.exportRsa unless KeyError and CryptoError:
75
+ endpoint GET "/provider/jwks" as jwks(resolve Crypto crypto, resolve SigningKeys keys):
61
76
  publicKey = crypto.publicRsa(key=keys.provider())
62
77
  return RsaJwks(keys=[rsaJwk(publicKey=publicKey, kid="provider-1")])
63
78
  ```
64
79
 
65
80
  ```aug [Braces]
81
+ // aug-spec: "discovery.aug.md" explains this file. Read it before changes; refresh with aug spec.
66
82
  import settings and SigningKeys and KeyError from common
67
- import Crypto and RsaJwks and rsaJwk from august.crypto
83
+ import Crypto and RsaJwks and rsaJwk from crypto
68
84
  /** Discovery advertises exactly this provider's supported authorization-code profile. */
69
85
  record Discovery(string issuer, string authorization_endpoint, string token_endpoint, string userinfo_endpoint, string jwks_uri, List<string> response_types_supported, List<string> grant_types_supported, List<string> subject_types_supported, List<string> id_token_signing_alg_values_supported, List<string> token_endpoint_auth_methods_supported, List<string> scopes_supported, List<string> claims_supported, List<string> code_challenge_methods_supported)
70
- endpoint GET "/provider/.well-known/openid-configuration" as discovery() returns Discovery {
86
+ endpoint GET "/provider/.well-known/openid-configuration" as discovery() {
71
87
  config = settings()
72
- return Discovery(issuer=config.issuer, authorization_endpoint=config.issuer + "/authorize", token_endpoint=config.issuer + "/token", userinfo_endpoint=config.issuer + "/userinfo", jwks_uri=config.issuer + "/jwks", response_types_supported=["code"], grant_types_supported=["authorization_code"], subject_types_supported=["public"], id_token_signing_alg_values_supported=["RS256"], token_endpoint_auth_methods_supported=["none"], scopes_supported=["openid", "profile"], claims_supported=["iss", "sub", "aud", "exp", "iat", "nonce", "name"], code_challenge_methods_supported=["S256"])
88
+ return Discovery(
89
+ issuer=config.issuer,
90
+ authorization_endpoint=config.issuer + "/authorize",
91
+ token_endpoint=config.issuer + "/token",
92
+ userinfo_endpoint=config.issuer + "/userinfo",
93
+ jwks_uri=config.issuer + "/jwks",
94
+ response_types_supported=["code"],
95
+ grant_types_supported=["authorization_code"],
96
+ subject_types_supported=["public"],
97
+ id_token_signing_alg_values_supported=["RS256"],
98
+ token_endpoint_auth_methods_supported=["none"],
99
+ scopes_supported=["openid", "profile"],
100
+ claims_supported=["iss", "sub", "aud", "exp", "iat", "nonce", "name"],
101
+ code_challenge_methods_supported=["S256"]
102
+ )
73
103
  }
74
104
  /** Only the provider's public signing key is published. Session keys never enter this JWKS. */
75
- endpoint GET "/provider/jwks" as jwks(resolve Crypto crypto, resolve SigningKeys keys) returns RsaJwks uses keys.provider and crypto.publicRsa and crypto.exportRsa unless KeyError and CryptoError {
105
+ endpoint GET "/provider/jwks" as jwks(resolve Crypto crypto, resolve SigningKeys keys) {
76
106
  publicKey = crypto.publicRsa(key=keys.provider())
77
107
  return RsaJwks(keys=[rsaJwk(publicKey=publicKey, kid="provider-1")])
78
108
  }
@@ -86,129 +116,25 @@ endpoint GET "/provider/jwks" as jwks(resolve Crypto crypto, resolve SigningKeys
86
116
 
87
117
  ## Compiled specification {#specification}
88
118
 
89
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
119
+ Plain handler results default to HTTP 200 unless another status is declared. HttpResponse values choose their own status. Unhandled request failures return HTTP 500 and cancel the request tasks.
90
120
 
91
- ### In this file
121
+ ### `Discovery` · immutable record · [source](discovery.md#code) {#symbol-Discovery}
92
122
 
93
- - [`Discovery`](discovery.md#symbol-Discovery) is an immutable record.
94
- - [`discovery`](discovery.md#symbol-discovery) handles `GET` `/provider/.well-known/openid-configuration` returning `Discovery`.
95
- - [`jwks`](discovery.md#symbol-jwks) handles `GET` `/provider/jwks` returning `RsaJwks`.
123
+ Discovery advertises exactly this provider's supported authorization-code profile. It takes `issuer`, `authorization_endpoint`, `token_endpoint`, `userinfo_endpoint`, and `jwks_uri` as strings, kept read-only and `response_types_supported`, `grant_types_supported`, `subject_types_supported`, `id_token_signing_alg_values_supported`, `token_endpoint_auth_methods_supported`, `scopes_supported`, `claims_supported`, and `code_challenge_methods_supported` as `List<string>`, kept read-only.
96
124
 
97
- ### `Discovery` {#symbol-Discovery}
125
+ ### `discovery` · [source](discovery.md#code) {#symbol-discovery}
98
126
 
99
- [source](discovery.md#code)
127
+ `discovery` handles `GET /provider/.well-known/openid-configuration`. It gets `config` from [`settings`](../common/settings.md#symbol-settings). It returns a [`Discovery`](discovery.md#symbol-Discovery) with `config.issuer`, `authorization_endpoint` from the text `{config.issuer}/authorize`, `token_endpoint` from the text `{config.issuer}/token`, `userinfo_endpoint` from the text `{config.issuer}/userinfo`, `jwks_uri` from the text `{config.issuer}/jwks`, `response_types_supported` from a list containing `"code"`, `grant_types_supported` from a list containing `"authorization_code"`, `subject_types_supported` from a list containing `"public"`, `id_token_signing_alg_values_supported` from a list containing `"RS256"`, `token_endpoint_auth_methods_supported` from a list containing `"none"`, `scopes_supported` from a list containing `"openid"`, `"profile"`, `claims_supported` from a list containing `"iss"`, `"sub"`, `"aud"`, `"exp"`, `"iat"`, `"nonce"`, `"name"`, and `code_challenge_methods_supported` from a list containing `"S256"`.
100
128
 
101
- Immutable record.
129
+ ### `jwks` · [source](discovery.md#code) {#symbol-jwks}
102
130
 
103
- **Author documentation**
131
+ `jwks` handles `GET /provider/jwks`. Only the provider's public signing key is published. Session keys never enter this JWKS. It gets `crypto` ([`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto)) and `keys` ([`SigningKeys`](../common/keys.md#symbol-SigningKeys)) from dependency injection.
104
132
 
105
- Discovery advertises exactly this provider's supported authorization-code profile.
133
+ It can also raise `CryptoError` and `KeyError`. It sets `publicKey` to [`crypto.publicRsa`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.publicRsa) with `key` from [`keys.provider`](../common/keys.md#symbol-SigningKeys.provider). It returns a [`RsaJwks`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md#symbol-RsaJwks) with `keys` from a list containing [`rsaJwk`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md#symbol-rsaJwk) with `publicKey` and `kid` `"provider-1"` using injected `crypto`.
106
134
 
107
- **Inputs**
135
+ ### Dependencies
108
136
 
109
- - `issuer` (`string`) — required labeled input — stored as `issuer` and read-only after initialization.
110
- - `authorization_endpoint` (`string`) — required labeled input — stored as `authorization_endpoint` and read-only after initialization.
111
- - `token_endpoint` (`string`) — required labeled input — stored as `token_endpoint` and read-only after initialization.
112
- - `userinfo_endpoint` (`string`) — required labeled input — stored as `userinfo_endpoint` and read-only after initialization.
113
- - `jwks_uri` (`string`) — required labeled input — stored as `jwks_uri` and read-only after initialization.
114
- - `response_types_supported` (`List<string>`) — required labeled input — stored as `response_types_supported` and read-only after initialization.
115
- - `grant_types_supported` (`List<string>`) — required labeled input — stored as `grant_types_supported` and read-only after initialization.
116
- - `subject_types_supported` (`List<string>`) — required labeled input — stored as `subject_types_supported` and read-only after initialization.
117
- - `id_token_signing_alg_values_supported` (`List<string>`) — required labeled input — stored as `id_token_signing_alg_values_supported` and read-only after initialization.
118
- - `token_endpoint_auth_methods_supported` (`List<string>`) — required labeled input — stored as `token_endpoint_auth_methods_supported` and read-only after initialization.
119
- - `scopes_supported` (`List<string>`) — required labeled input — stored as `scopes_supported` and read-only after initialization.
120
- - `claims_supported` (`List<string>`) — required labeled input — stored as `claims_supported` and read-only after initialization.
121
- - `code_challenge_methods_supported` (`List<string>`) — required labeled input — stored as `code_challenge_methods_supported` and read-only after initialization.
122
-
123
- ### `discovery` {#symbol-discovery}
124
-
125
- [source](discovery.md#code)
126
-
127
- Returns: [`Discovery`](discovery.md#symbol-Discovery).
128
-
129
- HTTP route: `GET` `/provider/.well-known/openid-configuration`. 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.
130
-
131
- **What it does**
132
-
133
- - Set `config` to call [`settings`](../common/settings.md#symbol-settings).
134
- - Return call [`Discovery`](discovery.md#symbol-Discovery) with `issuer` = `issuer` of `config`; `authorization_endpoint` = (`issuer` of `config` plus `"/authorize"`); `token_endpoint` = (`issuer` of `config` plus `"/token"`); `userinfo_endpoint` = (`issuer` of `config` plus `"/userinfo"`); `jwks_uri` = (`issuer` of `config` plus `"/jwks"`); `response_types_supported` = a list containing `"code"`; `grant_types_supported` = a list containing `"authorization_code"`; `subject_types_supported` = a list containing `"public"`; `id_token_signing_alg_values_supported` = a list containing `"RS256"`; `token_endpoint_auth_methods_supported` = a list containing `"none"`; `scopes_supported` = a list containing `"openid"`, `"profile"`; `claims_supported` = a list containing `"iss"`, `"sub"`, `"aud"`, `"exp"`, `"iat"`, `"nonce"`, `"name"`; `code_challenge_methods_supported` = a list containing `"S256"`.
135
-
136
- ### `jwks` {#symbol-jwks}
137
-
138
- [source](discovery.md#code)
139
-
140
- **Inputs**
141
-
142
- - `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
143
- - `keys` ([`SigningKeys`](../common/keys.md#symbol-SigningKeys)) — injected; callers omit it.
144
-
145
- Returns: [`RsaJwks`](../dependencies/august/0.19.0/crypto/jose.md#symbol-RsaJwks).
146
-
147
- Capabilities: [`keys.provider`](../common/keys.md#symbol-SigningKeys.provider), [`crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa), [`crypto.exportRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.exportRsa).
148
-
149
- Can fail with `KeyError`, `CryptoError`. Callers must catch or propagate these errors.
150
-
151
- HTTP route: `GET` `/provider/jwks`. 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.
152
-
153
- **What it does**
154
-
155
- - Set `publicKey` to call [`Crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa) on `crypto` with `key` = call [`SigningKeys.provider`](../common/keys.md#symbol-SigningKeys.provider) on `keys`.
156
- - Return call [`RsaJwks`](../dependencies/august/0.19.0/crypto/jose.md#symbol-RsaJwks) with `keys` = a list containing call [`rsaJwk`](../dependencies/august/0.19.0/crypto/jose.md#symbol-rsaJwk) with `publicKey` = `publicKey`; `kid` = `"provider-1"`; inject `crypto` from `crypto`.
157
-
158
- **Author documentation**
159
-
160
- Only the provider's public signing key is published. Session keys never enter this JWKS.
161
-
162
- ### Dependencies used by this file
163
-
164
- Only referenced types and operations appear here. Each name links to its complete specification.
165
-
166
- #### [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)
167
-
168
- Capability interface from `august.crypto`.
169
-
170
- - [`Crypto.exportRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.exportRsa) (`publicKey`: `RsaPublicKey`) → `Tuple<Bytes,Bytes>`; can fail with `CryptoError`.
171
- - [`Crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa) (`key`: `RsaPrivateKey`) → `RsaPublicKey`; can fail with `CryptoError`.
172
-
173
- #### [`RsaJwks`](../dependencies/august/0.19.0/crypto/jose.md#symbol-RsaJwks)
174
-
175
- Record from `august.crypto`.
176
-
177
- - Construct with `keys`: `List<RsaJwk>` → [`RsaJwks`](../dependencies/august/0.19.0/crypto/jose.md#symbol-RsaJwks).
178
-
179
- #### [`rsaJwk`](../dependencies/august/0.19.0/crypto/jose.md#symbol-rsaJwk)
180
-
181
- Function from `august.crypto`.
182
-
183
- - [`rsaJwk`](../dependencies/august/0.19.0/crypto/jose.md#symbol-rsaJwk) (`publicKey`: `RsaPublicKey`, `kid`: `string`) → [`RsaJwk`](../dependencies/august/0.19.0/crypto/jose.md#symbol-RsaJwk); inject `crypto`: [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto); uses [`crypto.exportRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.exportRsa); can fail with `CryptoError`.
184
-
185
- #### [`KeyError`](../common/keys.md#symbol-KeyError)
186
-
187
- Class from `common`.
188
-
189
- Used as a type or provider.
190
-
191
- #### [`SigningKeys`](../common/keys.md#symbol-SigningKeys)
192
-
193
- Capability interface from `common`.
194
-
195
- - [`SigningKeys.provider`](../common/keys.md#symbol-SigningKeys.provider) (no caller inputs) → `RsaPrivateKey`; can fail with `KeyError`.
196
-
197
- #### [`Settings`](../common/settings.md#symbol-Settings)
198
-
199
- Record.
200
-
201
- - Read `issuer` (`string`).
202
-
203
- #### [`settings`](../common/settings.md#symbol-settings)
204
-
205
- Function from `common`.
206
-
207
- - [`settings`](../common/settings.md#symbol-settings) (no caller inputs) → [`Settings`](../common/settings.md#symbol-Settings).
208
-
209
- ### Shared language rules
210
-
211
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
137
+ It uses [`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto) ([`exportRsa`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.exportRsa) and [`publicRsa`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.publicRsa)), [`RsaJwks`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md#symbol-RsaJwks), and [`rsaJwk`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md#symbol-rsaJwk) from `crypto`. It uses [`KeyError`](../common/keys.md#symbol-KeyError), [`SigningKeys`](../common/keys.md#symbol-SigningKeys) ([`provider`](../common/keys.md#symbol-SigningKeys.provider)), and [`settings`](../common/settings.md#symbol-settings) from `common`. It uses [`Settings`](../common/settings.md#symbol-Settings) (`issuer`).
212
138
 
213
139
  ::::
214
140
 
@@ -49,6 +49,7 @@ pageClass: aug-example-page
49
49
  ::: code-group
50
50
 
51
51
  ```aug [Indentation]
52
+ // aug-spec: "export.aug.md" explains this file. Read it before changes; refresh with aug spec.
52
53
  export AuthorizationRequest from contracts
53
54
  export AuthorizationCode from contracts
54
55
  export AccessGrant from contracts
@@ -65,6 +66,7 @@ export userinfo from userinfo
65
66
  ```
66
67
 
67
68
  ```aug [Braces]
69
+ // aug-spec: "export.aug.md" explains this file. Read it before changes; refresh with aug spec.
68
70
  export AuthorizationRequest from contracts
69
71
  export AuthorizationCode from contracts
70
72
  export AccessGrant from contracts
@@ -88,43 +90,15 @@ export userinfo from userinfo
88
90
 
89
91
  ## Compiled specification {#specification}
90
92
 
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.
93
+ ### Exports
94
+
95
+ Export the declaration `AuthorizationRequest` from [`contracts.aug`](contracts.md#symbol-AuthorizationRequest). Export the declaration `AuthorizationCode` from [`contracts.aug`](contracts.md#symbol-AuthorizationCode). Export the declaration `AccessGrant` from [`contracts.aug`](contracts.md#symbol-AccessGrant). Export the declaration `IdClaims` from [`contracts.aug`](contracts.md#symbol-IdClaims).
96
+
97
+ Export the declaration `TokenResponse` from [`contracts.aug`](contracts.md#symbol-TokenResponse). Export the declaration `UserInfo` from [`contracts.aug`](contracts.md#symbol-UserInfo). Export the declaration `Discovery` from [`discovery.aug`](discovery.md#symbol-Discovery). Export the declaration `discovery` from [`discovery.aug`](discovery.md#symbol-discovery).
98
+
99
+ Export the declaration `jwks` from [`discovery.aug`](discovery.md#symbol-jwks). Export the declaration `authorize` from [`authorization.aug`](authorization.md#symbol-authorize). Export the declaration `providerLogin` from [`authorization.aug`](authorization.md#symbol-providerLogin). Export the declaration `token` from [`token.aug`](token.md#symbol-token).
100
+
101
+ Export the declaration `userinfo` from [`userinfo.aug`](userinfo.md#symbol-userinfo).
128
102
 
129
103
  ::::
130
104