@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
@@ -1,434 +0,0 @@
1
- ---
2
- title: "august/0.19.0/crypto/jose.aug · OpenID Connect login application"
3
- generated: true
4
- source: "examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug"
5
- editLink: false
6
- prev: false
7
- next: false
8
- outline: [2, 3]
9
- search: false
10
- pageClass: aug-example-page
11
- ---
12
-
13
- # `august/0.19.0/crypto/jose.aug`
14
-
15
- [OpenID Connect login application](../../../../index.md) · Dependency source and specification
16
-
17
- This is the exact dependency version used by this example.
18
-
19
- ::::: example-compare
20
-
21
- :::: example-code
22
-
23
- ## Code {#code}
24
-
25
- ::: code-group
26
-
27
- ```aug [Indentation]
28
- import Crypto from contracts
29
- import parse from august.json
30
- /** A failed JOSE validation reveals no unverified claims. */
31
- JwtError() implements Error:
32
- pass
33
- /** This profile accepts only RS256, a configured key id, and an explicit token type. */
34
- record JwtHeader(string alg, string kid, string typ)
35
- /** Public signing-key metadata in RFC 7517 / RFC 7518 form. */
36
- record RsaJwk(string kty, string kid, string alg, string use, string n, string e)
37
- record RsaJwks(List<RsaJwk> keys)
38
- /** Export public parameters. Private key material never enters the JSON document. */
39
- rsaJwk(RsaPublicKey publicKey, string kid, resolve Crypto crypto) returns RsaJwk uses crypto.exportRsa unless CryptoError:
40
- (modulus, exponent) = crypto.exportRsa(publicKey)
41
- return RsaJwk(kty="RSA", kid=kid, alg="RS256", use="sig", n=modulus.base64url(), e=exponent.base64url())
42
- /** Import only an RSA signing key for RS256. The transport caller selects the trusted JWKS URL. */
43
- importJwk(RsaJwk jwk, resolve Crypto crypto) returns RsaPublicKey uses crypto.decodeBase64url and crypto.importRsa unless JwtError:
44
- if jwk.kty != "RSA" or jwk.alg != "RS256" or jwk.use != "sig":
45
- throw JwtError()
46
- try:
47
- modulus = crypto.decodeBase64url(input=jwk.n)
48
- exponent = crypto.decodeBase64url(input=jwk.e)
49
- return crypto.importRsa(modulus, exponent)
50
- catch CryptoError error:
51
- throw JwtError()
52
- /** Sign immutable JSON with an explicit key id and token type. Claims are validated by the protocol that consumes the token. */
53
- signJwt(RsaPrivateKey key, Json claims, string kid, string tokenType, resolve Crypto crypto) returns string uses crypto.signRsa unless JwtError:
54
- try:
55
- header = Json(value=JwtHeader(alg="RS256", kid=kid, typ=tokenType)).stringify()
56
- payload = claims.stringify()
57
- signing = header.bytes().base64url() + "." + payload.bytes().base64url()
58
- signature = crypto.signRsa(key=key, input=signing.bytes())
59
- return signing + "." + signature.base64url()
60
- catch CryptoError error:
61
- throw JwtError()
62
- catch JsonError error:
63
- throw JwtError()
64
- /** Verify the signature and configured algorithm, key id, and type before exposing the JSON payload. Never follows token-supplied URLs. */
65
- verifyJwt(string token, RsaPublicKey publicKey, string kid, string tokenType, resolve Crypto crypto) returns Json uses crypto.decodeBase64url and crypto.verifyRsa unless JwtError:
66
- if token.length() > 16384:
67
- throw JwtError()
68
- parts = token.split(separator=".")
69
- if parts.length() != 3:
70
- throw JwtError()
71
- try:
72
- first = parts.get(index=0)
73
- second = parts.get(index=1)
74
- third = parts.get(index=2)
75
- header = parse(input=crypto.decodeBase64url(input=first).text()).decode<JwtHeader>()
76
- if header.alg != "RS256" or header.kid != kid or header.typ != tokenType:
77
- throw JwtError()
78
- signature = crypto.decodeBase64url(input=third)
79
- if not crypto.verifyRsa(publicKey=publicKey, input=(first + "." + second).bytes(), signature=signature):
80
- throw JwtError()
81
- return parse(input=crypto.decodeBase64url(input=second).text())
82
- catch CryptoError error:
83
- throw JwtError()
84
- catch ConversionError error:
85
- throw JwtError()
86
- catch JsonError error:
87
- throw JwtError()
88
- catch IndexError error:
89
- throw JwtError()
90
- ```
91
-
92
- ```aug [Braces]
93
- import Crypto from contracts
94
- import parse from august.json
95
- /** A failed JOSE validation reveals no unverified claims. */
96
- JwtError() implements Error {
97
- pass
98
- }
99
- /** This profile accepts only RS256, a configured key id, and an explicit token type. */
100
- record JwtHeader(string alg, string kid, string typ)
101
- /** Public signing-key metadata in RFC 7517 / RFC 7518 form. */
102
- record RsaJwk(string kty, string kid, string alg, string use, string n, string e)
103
- record RsaJwks(List<RsaJwk> keys)
104
- /** Export public parameters. Private key material never enters the JSON document. */
105
- rsaJwk(RsaPublicKey publicKey, string kid, resolve Crypto crypto) returns RsaJwk uses crypto.exportRsa unless CryptoError {
106
- (modulus, exponent) = crypto.exportRsa(publicKey)
107
- return RsaJwk(kty="RSA", kid=kid, alg="RS256", use="sig", n=modulus.base64url(), e=exponent.base64url())
108
- }
109
- /** Import only an RSA signing key for RS256. The transport caller selects the trusted JWKS URL. */
110
- importJwk(RsaJwk jwk, resolve Crypto crypto) returns RsaPublicKey uses crypto.decodeBase64url and crypto.importRsa unless JwtError {
111
- if jwk.kty != "RSA" or jwk.alg != "RS256" or jwk.use != "sig" {
112
- throw JwtError()
113
- }
114
- try {
115
- modulus = crypto.decodeBase64url(input=jwk.n)
116
- exponent = crypto.decodeBase64url(input=jwk.e)
117
- return crypto.importRsa(modulus, exponent)
118
- }
119
- catch CryptoError error {
120
- throw JwtError()
121
- }
122
- }
123
- /** Sign immutable JSON with an explicit key id and token type. Claims are validated by the protocol that consumes the token. */
124
- signJwt(RsaPrivateKey key, Json claims, string kid, string tokenType, resolve Crypto crypto) returns string uses crypto.signRsa unless JwtError {
125
- try {
126
- header = Json(value=JwtHeader(alg="RS256", kid=kid, typ=tokenType)).stringify()
127
- payload = claims.stringify()
128
- signing = header.bytes().base64url() + "." + payload.bytes().base64url()
129
- signature = crypto.signRsa(key=key, input=signing.bytes())
130
- return signing + "." + signature.base64url()
131
- }
132
- catch CryptoError error {
133
- throw JwtError()
134
- }
135
- catch JsonError error {
136
- throw JwtError()
137
- }
138
- }
139
- /** Verify the signature and configured algorithm, key id, and type before exposing the JSON payload. Never follows token-supplied URLs. */
140
- verifyJwt(string token, RsaPublicKey publicKey, string kid, string tokenType, resolve Crypto crypto) returns Json uses crypto.decodeBase64url and crypto.verifyRsa unless JwtError {
141
- if token.length() > 16384 {
142
- throw JwtError()
143
- }
144
- parts = token.split(separator=".")
145
- if parts.length() != 3 {
146
- throw JwtError()
147
- }
148
- try {
149
- first = parts.get(index=0)
150
- second = parts.get(index=1)
151
- third = parts.get(index=2)
152
- header = parse(input=crypto.decodeBase64url(input=first).text()).decode<JwtHeader>()
153
- if header.alg != "RS256" or header.kid != kid or header.typ != tokenType {
154
- throw JwtError()
155
- }
156
- signature = crypto.decodeBase64url(input=third)
157
- if not crypto.verifyRsa(publicKey=publicKey, input=(first + "." + second).bytes(), signature=signature) {
158
- throw JwtError()
159
- }
160
- return parse(input=crypto.decodeBase64url(input=second).text())
161
- }
162
- catch CryptoError error {
163
- throw JwtError()
164
- }
165
- catch ConversionError error {
166
- throw JwtError()
167
- }
168
- catch JsonError error {
169
- throw JwtError()
170
- }
171
- catch IndexError error {
172
- throw JwtError()
173
- }
174
- }
175
- ```
176
-
177
- :::
178
-
179
- ::::
180
-
181
- :::: example-spec
182
-
183
- ## Compiled specification {#specification}
184
-
185
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
186
-
187
- ### In this file
188
-
189
- - [`JwtError`](jose.md#symbol-JwtError) is a class implementing `Error`.
190
- - [`JwtHeader`](jose.md#symbol-JwtHeader) is an immutable record.
191
- - [`RsaJwk`](jose.md#symbol-RsaJwk) is an immutable record.
192
- - [`RsaJwks`](jose.md#symbol-RsaJwks) is an immutable record.
193
- - [`rsaJwk`](jose.md#symbol-rsaJwk) is a function returning `RsaJwk`.
194
- - [`importJwk`](jose.md#symbol-importJwk) is a function returning `RsaPublicKey`.
195
- - [`signJwt`](jose.md#symbol-signJwt) is a function returning `string`.
196
- - [`verifyJwt`](jose.md#symbol-verifyJwt) is a function returning `Json`.
197
-
198
- ### `JwtError` {#symbol-JwtError}
199
-
200
- [source](jose.md#code)
201
-
202
- Behavioral class.
203
-
204
- Satisfies `Error`.
205
-
206
- **Author documentation**
207
-
208
- A failed JOSE validation reveals no unverified claims.
209
-
210
- ### `JwtHeader` {#symbol-JwtHeader}
211
-
212
- [source](jose.md#code)
213
-
214
- Immutable record.
215
-
216
- **Author documentation**
217
-
218
- This profile accepts only RS256, a configured key id, and an explicit token type.
219
-
220
- **Inputs**
221
-
222
- - `alg` (`string`) — required labeled input — stored as `alg` and read-only after initialization.
223
- - `kid` (`string`) — required labeled input — stored as `kid` and read-only after initialization.
224
- - `typ` (`string`) — required labeled input — stored as `typ` and read-only after initialization.
225
-
226
- ### `RsaJwk` {#symbol-RsaJwk}
227
-
228
- [source](jose.md#code)
229
-
230
- Immutable record.
231
-
232
- **Author documentation**
233
-
234
- Public signing-key metadata in RFC 7517 / RFC 7518 form.
235
-
236
- **Inputs**
237
-
238
- - `kty` (`string`) — required labeled input — stored as `kty` and read-only after initialization.
239
- - `kid` (`string`) — required labeled input — stored as `kid` and read-only after initialization.
240
- - `alg` (`string`) — required labeled input — stored as `alg` and read-only after initialization.
241
- - `use` (`string`) — required labeled input — stored as `use` and read-only after initialization.
242
- - `n` (`string`) — required labeled input — stored as `n` and read-only after initialization.
243
- - `e` (`string`) — required labeled input — stored as `e` and read-only after initialization.
244
-
245
- ### `RsaJwks` {#symbol-RsaJwks}
246
-
247
- [source](jose.md#code)
248
-
249
- Immutable record.
250
-
251
- **Inputs**
252
-
253
- - `keys` (`List<RsaJwk>`) — required labeled input — stored as `keys` and read-only after initialization.
254
-
255
- ### `rsaJwk` {#symbol-rsaJwk}
256
-
257
- [source](jose.md#code)
258
-
259
- **Inputs**
260
-
261
- - `publicKey` (`RsaPublicKey`) — required labeled input.
262
- - `kid` (`string`) — required labeled input.
263
- - `crypto` ([`Crypto`](contracts.md#symbol-Crypto)) — injected; callers omit it.
264
-
265
- Returns: [`RsaJwk`](jose.md#symbol-RsaJwk).
266
-
267
- Capabilities: [`crypto.exportRsa`](contracts.md#symbol-Crypto.exportRsa).
268
-
269
- Can fail with `CryptoError`. Callers must catch or propagate these errors.
270
-
271
- **What it does**
272
-
273
- - Split call [`Crypto.exportRsa`](contracts.md#symbol-Crypto.exportRsa) on `crypto` with `publicKey` = `publicKey` into `modulus`, `exponent`, in that order.
274
- - Return call [`RsaJwk`](jose.md#symbol-RsaJwk) with `kty` = `"RSA"`; `kid` = `kid`; `alg` = `"RS256"`; `use` = `"sig"`; `n` = call `base64url` on `modulus`; `e` = call `base64url` on `exponent`.
275
-
276
- **Author documentation**
277
-
278
- Export public parameters. Private key material never enters the JSON document.
279
-
280
- ### `importJwk` {#symbol-importJwk}
281
-
282
- [source](jose.md#code)
283
-
284
- **Inputs**
285
-
286
- - `jwk` ([`RsaJwk`](jose.md#symbol-RsaJwk)) — required labeled input.
287
- - `crypto` ([`Crypto`](contracts.md#symbol-Crypto)) — injected; callers omit it.
288
-
289
- Returns: `RsaPublicKey`.
290
-
291
- Capabilities: [`crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url), [`crypto.importRsa`](contracts.md#symbol-Crypto.importRsa).
292
-
293
- Can fail with `JwtError`. Callers must catch or propagate these errors.
294
-
295
- **What it does**
296
-
297
- - If ((`kty` of `jwk` does not equal `"RSA"`) or (`alg` of `jwk` does not equal `"RS256"`)) or (`use` of `jwk` does not equal `"sig"`):
298
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
299
- - Try these operations:
300
- - Set `modulus` to call [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `n` of `jwk`.
301
- - Set `exponent` to call [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `e` of `jwk`.
302
- - Return call [`Crypto.importRsa`](contracts.md#symbol-Crypto.importRsa) on `crypto` with `modulus` = `modulus`; `exponent` = `exponent`.
303
- - If they fail with `CryptoError`, name the failure `error` and recover:
304
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
305
-
306
- **Author documentation**
307
-
308
- Import only an RSA signing key for RS256. The transport caller selects the trusted JWKS URL.
309
-
310
- ### `signJwt` {#symbol-signJwt}
311
-
312
- [source](jose.md#code)
313
-
314
- **Inputs**
315
-
316
- - `key` (`RsaPrivateKey`) — required labeled input.
317
- - `claims` (`Json`) — required labeled input.
318
- - `kid` (`string`) — required labeled input.
319
- - `tokenType` (`string`) — required labeled input.
320
- - `crypto` ([`Crypto`](contracts.md#symbol-Crypto)) — injected; callers omit it.
321
-
322
- Returns: `string`.
323
-
324
- Capabilities: [`crypto.signRsa`](contracts.md#symbol-Crypto.signRsa).
325
-
326
- Can fail with `JwtError`. Callers must catch or propagate these errors.
327
-
328
- **What it does**
329
-
330
- - Try these operations:
331
- - Set `header` to call `stringify` on call `Json` with `value` = call [`JwtHeader`](jose.md#symbol-JwtHeader) with `alg` = `"RS256"`; `kid` = `kid`; `typ` = `tokenType`.
332
- - Set `payload` to call `stringify` on `claims`.
333
- - Set `signing` to text formed by joining call `base64url` on call `bytes` on `header`, `"."`, call `base64url` on call `bytes` on `payload` in order.
334
- - Set `signature` to call [`Crypto.signRsa`](contracts.md#symbol-Crypto.signRsa) on `crypto` with `key` = `key`; `input` = call `bytes` on `signing`.
335
- - Return text formed by joining `signing`, `"."`, call `base64url` on `signature` in order.
336
- - If they fail with `CryptoError`, name the failure `error` and recover:
337
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
338
- - If they fail with `JsonError`, name the failure `error` and recover:
339
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
340
-
341
- **Author documentation**
342
-
343
- Sign immutable JSON with an explicit key id and token type. Claims are validated by the protocol that consumes the token.
344
-
345
- ### `verifyJwt` {#symbol-verifyJwt}
346
-
347
- [source](jose.md#code)
348
-
349
- **Inputs**
350
-
351
- - `token` (`string`) — required labeled input.
352
- - `publicKey` (`RsaPublicKey`) — required labeled input.
353
- - `kid` (`string`) — required labeled input.
354
- - `tokenType` (`string`) — required labeled input.
355
- - `crypto` ([`Crypto`](contracts.md#symbol-Crypto)) — injected; callers omit it.
356
-
357
- Returns: `Json`.
358
-
359
- Capabilities: [`crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url), [`crypto.verifyRsa`](contracts.md#symbol-Crypto.verifyRsa).
360
-
361
- Can fail with `JwtError`. Callers must catch or propagate these errors.
362
-
363
- **What it does**
364
-
365
- - If call `length` on `token` is greater than `16384`:
366
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
367
- - Set `parts` to call `split` on `token` with `separator` = `"."`.
368
- - If call `length` on `parts` does not equal `3`:
369
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
370
- - Try these operations:
371
- - Set `first` to call `get` on `parts` with `index` = `0`.
372
- - Set `second` to call `get` on `parts` with `index` = `1`.
373
- - Set `third` to call `get` on `parts` with `index` = `2`.
374
- - Set `header` to call `decode` on call [`parse`](../json/contracts.md#symbol-parse) with `input` = call `text` on call [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `first` with type arguments [`JwtHeader`](jose.md#symbol-JwtHeader).
375
- - If ((`alg` of `header` does not equal `"RS256"`) or (`kid` of `header` does not equal `kid`)) or (`typ` of `header` does not equal `tokenType`):
376
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
377
- - Set `signature` to call [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `third`.
378
- - If not (call [`Crypto.verifyRsa`](contracts.md#symbol-Crypto.verifyRsa) on `crypto` with `publicKey` = `publicKey`; `input` = call `bytes` on text formed by joining `first`, `"."`, `second` in order; `signature` = `signature`):
379
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
380
- - Return call [`parse`](../json/contracts.md#symbol-parse) with `input` = call `text` on call [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) on `crypto` with `input` = `second`.
381
- - If they fail with `CryptoError`, name the failure `error` and recover:
382
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
383
- - If they fail with `ConversionError`, name the failure `error` and recover:
384
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
385
- - If they fail with `JsonError`, name the failure `error` and recover:
386
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
387
- - If they fail with `IndexError`, name the failure `error` and recover:
388
- - Fail with call [`JwtError`](jose.md#symbol-JwtError). Transfer control to a matching catch or propagate the failure.
389
-
390
- **Author documentation**
391
-
392
- Verify the signature and configured algorithm, key id, and type before exposing the JSON payload. Never follows token-supplied URLs.
393
-
394
- ### Dependencies used by this file
395
-
396
- Only referenced types and operations appear here. Each name links to its complete specification.
397
-
398
- #### [`Crypto`](contracts.md#symbol-Crypto)
399
-
400
- Capability interface from `contracts`.
401
-
402
- - [`Crypto.decodeBase64url`](contracts.md#symbol-Crypto.decodeBase64url) (`input`: `string`) → `Bytes`; can fail with `CryptoError`.
403
- - [`Crypto.exportRsa`](contracts.md#symbol-Crypto.exportRsa) (`publicKey`: `RsaPublicKey`) → `Tuple<Bytes,Bytes>`; can fail with `CryptoError`.
404
- - [`Crypto.importRsa`](contracts.md#symbol-Crypto.importRsa) (`modulus`: `Bytes`, `exponent`: `Bytes`) → `RsaPublicKey`; can fail with `CryptoError`.
405
- - [`Crypto.signRsa`](contracts.md#symbol-Crypto.signRsa) (`key`: `RsaPrivateKey`, `input`: `Bytes`) → `Bytes`; can fail with `CryptoError`.
406
- - [`Crypto.verifyRsa`](contracts.md#symbol-Crypto.verifyRsa) (`publicKey`: `RsaPublicKey`, `input`: `Bytes`, `signature`: `Bytes`) → `bool`; can fail with `CryptoError`.
407
-
408
- #### [`parse`](../json/contracts.md#symbol-parse)
409
-
410
- Function from `august.json`.
411
-
412
- - [`parse`](../json/contracts.md#symbol-parse) (`input`: `string`) → `Json`; can fail with `JsonError`.
413
-
414
- ### Built-in operations used by this file
415
-
416
- - `Bytes.base64url` (no inputs) → `string`: Encode immutable bytes as unpadded RFC 4648 URL-safe base64.
417
- - `Bytes.text` (no inputs) → `string`: Decode UTF-8 strictly. Invalid input raises ConversionError; embedded NUL is preserved. Can fail with `ConversionError`.
418
- - `Json.decode` (no inputs) → `JwtHeader`: Decode a checked record or data type: json.decode<Profile>(). Unknown fields, type mismatches, and validation errors are rejected. Can fail with `JsonError`.
419
- - `Json.stringify` (no inputs) → `string`: Serialize this JSON value with checked UTF-8 escaping and exact int64 values. Can fail with `JsonError`.
420
- - `List<string>.get` (`index`: `int`) → `string`: Read a zero-based position. An invalid index raises checked IndexError. Reference results grant reading. Can fail with `IndexError`.
421
- - `List<string>.length` (no inputs) → `int`: Read the number of elements.
422
- - `string.bytes` (no inputs) → `Bytes`: Encode this string as immutable UTF-8 bytes.
423
- - `string.length` (no inputs) → `int`: Read the number of UTF-8 bytes. Unicode text is preserved losslessly.
424
- - `string.split` (`separator`: `string`) → `List<string>`: Split at an exact separator, preserving empty parts.
425
-
426
- [Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
427
-
428
- ### Shared language rules
429
-
430
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
431
-
432
- ::::
433
-
434
- :::::
@@ -1,103 +0,0 @@
1
- ---
2
- title: "august/0.19.0/json/contracts.aug · OpenID Connect login application"
3
- generated: true
4
- source: "examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug"
5
- editLink: false
6
- prev: false
7
- next: false
8
- outline: [2, 3]
9
- search: false
10
- pageClass: aug-example-page
11
- ---
12
-
13
- # `august/0.19.0/json/contracts.aug`
14
-
15
- [OpenID Connect login application](../../../../index.md) · Dependency source and specification
16
-
17
- This is the exact dependency version used by this example.
18
-
19
- ::::: example-compare
20
-
21
- :::: example-code
22
-
23
- ## Code {#code}
24
-
25
- ::: code-group
26
-
27
- ```aug [Indentation]
28
- extern C value pure _aug_json_parse(string input) returns Json unless JsonError
29
- /** Parse strict UTF-8 JSON. Duplicate keys, invalid Unicode, oversized integers, and nesting beyond 64 levels raise JsonError. */
30
- parse(string input) returns Json unless JsonError:
31
- unsafe:
32
- return _aug_json_parse(input)
33
- ```
34
-
35
- ```aug [Braces]
36
- extern C value pure _aug_json_parse(string input) returns Json unless JsonError
37
- /** Parse strict UTF-8 JSON. Duplicate keys, invalid Unicode, oversized integers, and nesting beyond 64 levels raise JsonError. */
38
- parse(string input) returns Json unless JsonError {
39
- unsafe {
40
- return _aug_json_parse(input)
41
- }
42
- }
43
- ```
44
-
45
- :::
46
-
47
- ::::
48
-
49
- :::: example-spec
50
-
51
- ## Compiled specification {#specification}
52
-
53
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
54
-
55
- ### In this file
56
-
57
- - [`_aug_json_parse`](contracts.md#symbol-_aug_json_parse) is a function returning `Json`.
58
- - [`parse`](contracts.md#symbol-parse) is a function returning `Json`.
59
-
60
- ### `parse` {#symbol-parse}
61
-
62
- [source](contracts.md#code)
63
-
64
- **Inputs**
65
-
66
- - `input` (`string`) — required labeled input.
67
-
68
- Returns: `Json`.
69
-
70
- Can fail with `JsonError`. Callers must catch or propagate these errors.
71
-
72
- **What it does**
73
-
74
- - Enter an unsafe boundary. Native calls use their declared contracts; their foreign implementation is outside this specification:
75
- - Return call [`_aug_json_parse`](contracts.md#symbol-_aug_json_parse) with `input` = `input`.
76
-
77
- **Author documentation**
78
-
79
- Parse strict UTF-8 JSON. Duplicate keys, invalid Unicode, oversized integers, and nesting beyond 64 levels raise JsonError.
80
-
81
- ### `_aug_json_parse` {#symbol-_aug_json_parse}
82
-
83
- [source](contracts.md#code)
84
-
85
- Private to its defining scope.
86
-
87
- **Inputs**
88
-
89
- - `input` (`string`) — required labeled input.
90
-
91
- Returns: `Json`.
92
-
93
- Can fail with `JsonError`. Callers must catch or propagate these errors.
94
-
95
- Native C operation. Its declared inputs, result, effects, and errors are the visible contract. The C implementation is outside this specification.
96
-
97
- ### Shared language rules
98
-
99
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
100
-
101
- ::::
102
-
103
- :::::