@greenpandastudios/aug-cli 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/bin/aug.mjs +12 -2
- package/docs/about.md +27 -0
- package/docs/api/crypto.md +103 -69
- package/docs/api/io.md +35 -33
- package/docs/api/json.md +3 -3
- package/docs/api/memory.md +23 -19
- package/docs/api/time.md +10 -9
- package/docs/api/web.md +33 -38
- package/docs/assets/benchmarks/execution.svg +774 -637
- package/docs/assets/benchmarks/http.svg +278 -249
- package/docs/assets/benchmarks/improvements.svg +66 -66
- package/docs/assets/benchmarks/kernels-mobile.svg +1 -0
- package/docs/assets/benchmarks/kernels.svg +1 -0
- package/docs/assets/benchmarks/memory.svg +153 -153
- package/docs/benchmark-results.json +227089 -90363
- package/docs/compatibility.md +8 -8
- package/docs/contributing-benchmarks.md +68 -0
- package/docs/dev-containers.md +88 -0
- package/docs/dgx-consumers.json +122 -0
- package/docs/dgx-gyms.json +784 -0
- package/docs/dgx-kernels.json +1170 -0
- package/docs/dgx-performance.json +227849 -0
- package/docs/dgx-spark.md +64 -0
- package/docs/diagnostics.md +15 -5
- package/docs/docker.md +173 -12
- package/docs/editor.md +35 -0
- package/docs/example-projects.json +238 -24
- package/docs/examples/approved-design/counters.md +34 -126
- package/docs/examples/approved-design/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/approved-design/domain/app.md +13 -77
- package/docs/examples/approved-design/domain/export.md +5 -19
- package/docs/examples/approved-design/domain/models.md +4 -23
- package/docs/examples/approved-design/domain/numbers.md +24 -114
- package/docs/examples/approved-design/index.md +16 -7
- package/docs/examples/approved-design/main.md +19 -96
- package/docs/examples/benchmark/index.md +6 -5
- package/docs/examples/benchmark/main.md +7 -35
- package/docs/examples/calls-benchmark/index.md +36 -0
- package/docs/examples/calls-benchmark/main.md +78 -0
- package/docs/examples/calls-benchmark/operations.md +60 -0
- package/docs/examples/cli-args/index.md +6 -5
- package/docs/examples/cli-args/main.md +6 -31
- package/docs/examples/collections/index.md +6 -5
- package/docs/examples/collections/main.md +7 -35
- package/docs/examples/collections-benchmark/index.md +6 -5
- package/docs/examples/collections-benchmark/main.md +7 -35
- package/docs/examples/cpu-benchmark/index.md +6 -5
- package/docs/examples/cpu-benchmark/main.md +5 -24
- package/docs/examples/developer-workflow/calculator.md +39 -186
- package/docs/examples/developer-workflow/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/developer-workflow/index.md +16 -7
- package/docs/examples/developer-workflow/logging/console.md +10 -56
- package/docs/examples/developer-workflow/logging/export.md +4 -14
- package/docs/examples/developer-workflow/logging/logger.md +7 -43
- package/docs/examples/developer-workflow/main.md +17 -69
- package/docs/examples/drop/index.md +6 -5
- package/docs/examples/drop/main.md +7 -27
- package/docs/examples/drop/resource.md +7 -30
- package/docs/examples/errors/errors.md +7 -27
- package/docs/examples/errors/index.md +6 -5
- package/docs/examples/errors/main.md +7 -28
- package/docs/examples/errors-benchmark/index.md +36 -0
- package/docs/examples/errors-benchmark/main.md +92 -0
- package/docs/examples/errors-benchmark/operations.md +65 -0
- package/docs/examples/ffi/index.md +6 -5
- package/docs/examples/ffi/main.md +6 -20
- package/docs/examples/ffi/native.md +8 -34
- package/docs/examples/float-benchmark/index.md +35 -0
- package/docs/examples/float-benchmark/main.md +75 -0
- package/docs/examples/generic-di/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/generic-di/index.md +6 -5
- package/docs/examples/generic-di/main.md +9 -39
- package/docs/examples/generic-di/types.md +23 -92
- package/docs/examples/generics/index.md +6 -5
- package/docs/examples/generics/main.md +10 -47
- package/docs/examples/generics/types.md +25 -100
- package/docs/examples/hello/app/export.md +4 -12
- package/docs/examples/hello/app/greeter.md +13 -91
- package/docs/examples/hello/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/hello/index.md +17 -6
- package/docs/examples/hello/logging/console.md +10 -54
- package/docs/examples/hello/logging/export.md +4 -14
- package/docs/examples/hello/logging/logger.md +7 -45
- package/docs/examples/hello/main.md +9 -39
- package/docs/examples/http-benchmark/index.md +6 -5
- package/docs/examples/http-benchmark/main.md +6 -20
- package/docs/examples/http-benchmark/routes.md +9 -31
- package/docs/examples/index.md +63 -29
- package/docs/examples/interceptors/app.md +20 -139
- package/docs/examples/interceptors/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/interceptors/index.md +6 -5
- package/docs/examples/interceptors/interceptors.md +24 -148
- package/docs/examples/interceptors/logging.md +13 -76
- package/docs/examples/interceptors/main.md +10 -65
- package/docs/examples/json-benchmark/data.md +4 -20
- package/docs/examples/json-benchmark/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/json-benchmark/index.md +7 -5
- package/docs/examples/json-benchmark/main-yaml.md +20 -0
- package/docs/examples/json-benchmark/main.md +10 -49
- package/docs/examples/list-benchmark/index.md +35 -0
- package/docs/examples/list-benchmark/main.md +78 -0
- package/docs/examples/map-churn-benchmark/index.md +35 -0
- package/docs/examples/map-churn-benchmark/main.md +106 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/api.md +104 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.md +54 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi-json.md +48 -0
- package/docs/examples/native-blake3/hashing.md +93 -0
- package/docs/examples/native-blake3/index.md +38 -0
- package/docs/examples/native-blake3/main.md +73 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/api.md +406 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.md +51 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.md +63 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi-json.md +161 -0
- package/docs/examples/native-pytorch/index.md +38 -0
- package/docs/examples/native-pytorch/main.md +73 -0
- package/docs/examples/native-pytorch/tensors.md +123 -0
- package/docs/examples/native-sqlite/database.md +116 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/api.md +284 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.md +51 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.md +75 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi-json.md +119 -0
- package/docs/examples/native-sqlite/index.md +38 -0
- package/docs/examples/native-sqlite/main.md +73 -0
- package/docs/examples/native-zlib/compression.md +99 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/api.md +153 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.md +54 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi-json.md +76 -0
- package/docs/examples/native-zlib/index.md +38 -0
- package/docs/examples/native-zlib/main.md +78 -0
- package/docs/examples/new-syntax/console.md +10 -52
- package/docs/examples/new-syntax/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/new-syntax/greeter.md +13 -71
- package/docs/examples/new-syntax/index.md +6 -5
- package/docs/examples/new-syntax/logger.md +7 -43
- package/docs/examples/new-syntax/main.md +10 -53
- package/docs/examples/new-syntax/math.md +6 -24
- package/docs/examples/oidc-login/client/contracts.md +10 -61
- package/docs/examples/oidc-login/client/endpoints.md +32 -154
- package/docs/examples/oidc-login/client/export.md +5 -23
- package/docs/examples/oidc-login/client/login.md +234 -344
- package/docs/examples/oidc-login/client/logout.md +38 -143
- package/docs/examples/oidc-login/client/protocol.md +183 -304
- package/docs/examples/oidc-login/client/session.md +41 -149
- package/docs/examples/oidc-login/client/views.md +13 -58
- package/docs/examples/oidc-login/common/export.md +6 -26
- package/docs/examples/oidc-login/common/headers.md +42 -72
- package/docs/examples/oidc-login/common/keys.md +40 -164
- package/docs/examples/oidc-login/common/settings.md +24 -40
- package/docs/examples/oidc-login/common/views.md +7 -28
- package/docs/examples/oidc-login/dependencies/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.md +205 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +267 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md +415 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md +271 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +89 -0
- package/docs/examples/oidc-login/index.md +8 -7
- package/docs/examples/oidc-login/main-yaml.md +7 -0
- package/docs/examples/oidc-login/main.md +26 -153
- package/docs/examples/oidc-login/provider/authorization.md +232 -275
- package/docs/examples/oidc-login/provider/contracts.md +24 -146
- package/docs/examples/oidc-login/provider/credentials.md +24 -57
- package/docs/examples/oidc-login/provider/discovery.md +48 -122
- package/docs/examples/oidc-login/provider/export.md +11 -37
- package/docs/examples/oidc-login/provider/token.md +159 -237
- package/docs/examples/oidc-login/provider/userinfo.md +47 -102
- package/docs/examples/oidc-login/provider/views.md +13 -53
- package/docs/examples/ownership/counter.md +17 -63
- package/docs/examples/ownership/index.md +6 -5
- package/docs/examples/ownership/main.md +7 -30
- package/docs/examples/ownership-transfer/dependencies/august/0.21.0/io/contracts.md +178 -0
- package/docs/examples/ownership-transfer/index.md +6 -5
- package/docs/examples/ownership-transfer/main.md +10 -52
- package/docs/examples/ownership-transfer/resource.md +15 -67
- package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +12 -50
- package/docs/examples/packages-app/index.md +7 -6
- package/docs/examples/packages-app/main.md +7 -25
- package/docs/examples/packages-math/aug-package-json.md +1 -1
- package/docs/examples/packages-math/index.md +7 -6
- package/docs/examples/packages-math/src/arithmetic.md +12 -50
- package/docs/examples/packages-math/src/export.md +4 -12
- package/docs/examples/records-benchmark/data.md +55 -0
- package/docs/examples/records-benchmark/index.md +36 -0
- package/docs/examples/records-benchmark/main.md +85 -0
- package/docs/examples/startup-benchmark/index.md +6 -5
- package/docs/examples/startup-benchmark/main.md +5 -17
- package/docs/examples/strings-benchmark/index.md +35 -0
- package/docs/examples/strings-benchmark/main.md +76 -0
- package/docs/examples/tasks-benchmark/index.md +36 -0
- package/docs/examples/tasks-benchmark/main.md +89 -0
- package/docs/examples/tasks-benchmark/operations.md +58 -0
- package/docs/examples/visibility/counter.md +19 -67
- package/docs/examples/visibility/index.md +6 -5
- package/docs/examples/visibility/main.md +7 -31
- package/docs/examples/weather-api/forecasts.md +168 -0
- package/docs/examples/weather-api/index.md +42 -0
- package/docs/examples/weather-api/main-yaml.md +21 -0
- package/docs/examples/weather-api/main.md +65 -0
- package/docs/examples.json +10 -0
- package/docs/getting-started.md +105 -2
- package/docs/grammar.md +7 -5
- package/docs/guides/change-a-module.md +64 -0
- package/docs/guides/index.md +27 -0
- package/docs/gym-results.json +784 -0
- package/docs/implementation-map.md +6 -0
- package/docs/index.md +51 -29
- package/docs/kernel-results.json +1170 -0
- package/docs/language-conformance.md +7 -1
- package/docs/language-constructs.md +30 -22
- package/docs/language-design-audit.md +1 -1
- package/docs/learn/data-and-errors.md +77 -0
- package/docs/learn/index.md +30 -0
- package/docs/learn/modules-and-dependencies.md +73 -0
- package/docs/learn/state-and-tests.md +71 -0
- package/docs/learn/values-and-functions.md +62 -0
- package/docs/lesson-failures.json +8 -0
- package/docs/maintaining-docs.md +16 -4
- package/docs/native-implementation.md +276 -0
- package/docs/native-interop-llvm-plan.md +342 -0
- package/docs/native-package-examples.md +684 -0
- package/docs/native-packages.md +179 -0
- package/docs/packages.md +72 -126
- package/docs/performance.md +61 -68
- package/docs/production-readiness.md +16 -5
- package/docs/public/downloads/approved-design.zip +0 -0
- package/docs/public/downloads/benchmark.zip +0 -0
- package/docs/public/downloads/calls-benchmark.zip +0 -0
- package/docs/public/downloads/cli-args.zip +0 -0
- package/docs/public/downloads/collections-benchmark.zip +0 -0
- package/docs/public/downloads/collections.zip +0 -0
- package/docs/public/downloads/cpu-benchmark.zip +0 -0
- package/docs/public/downloads/developer-workflow.zip +0 -0
- package/docs/public/downloads/drop.zip +0 -0
- package/docs/public/downloads/errors-benchmark.zip +0 -0
- package/docs/public/downloads/errors.zip +0 -0
- package/docs/public/downloads/ffi.zip +0 -0
- package/docs/public/downloads/float-benchmark.zip +0 -0
- package/docs/public/downloads/generic-di.zip +0 -0
- package/docs/public/downloads/generics.zip +0 -0
- package/docs/public/downloads/hello.zip +0 -0
- package/docs/public/downloads/http-benchmark.zip +0 -0
- package/docs/public/downloads/interceptors.zip +0 -0
- package/docs/public/downloads/json-benchmark.zip +0 -0
- package/docs/public/downloads/list-benchmark.zip +0 -0
- package/docs/public/downloads/map-churn-benchmark.zip +0 -0
- package/docs/public/downloads/native-blake3.zip +0 -0
- package/docs/public/downloads/native-pytorch.zip +0 -0
- package/docs/public/downloads/native-sqlite.zip +0 -0
- package/docs/public/downloads/native-zlib.zip +0 -0
- package/docs/public/downloads/new-syntax.zip +0 -0
- package/docs/public/downloads/oidc-login.zip +0 -0
- package/docs/public/downloads/ownership-transfer.zip +0 -0
- package/docs/public/downloads/ownership.zip +0 -0
- package/docs/public/downloads/packages-app.zip +0 -0
- package/docs/public/downloads/packages-math.zip +0 -0
- package/docs/public/downloads/records-benchmark.zip +0 -0
- package/docs/public/downloads/startup-benchmark.zip +0 -0
- package/docs/public/downloads/strings-benchmark.zip +0 -0
- package/docs/public/downloads/tasks-benchmark.zip +0 -0
- package/docs/public/downloads/visibility.zip +0 -0
- package/docs/public/downloads/weather-api.zip +0 -0
- package/docs/qualification-results.md +66 -0
- package/docs/reference.md +47 -17
- package/docs/releasing.md +105 -16
- package/docs/research/code-to-natural-language.md +108 -0
- package/docs/research/ecosystem-workflow.md +41 -0
- package/docs/research/libtorch-native-qualification.md +115 -0
- package/docs/research/native-interop-llvm.md +197 -0
- package/docs/research/qualification-methods.md +15 -0
- package/docs/research/wiki-editorial-design.md +71 -0
- package/docs/roadmap.md +2 -1
- package/docs/safety-gyms.md +41 -0
- package/docs/specifications.md +27 -11
- package/docs/testing.md +19 -5
- package/docs/tooling.md +36 -22
- package/docs/weather-api.md +65 -0
- package/docs/web-library-gaps.md +1 -1
- package/docs/web.md +54 -18
- package/docs/writing-docs.md +49 -0
- package/examples/{hello/.aug-spec/august/0.19.0 → approved-design/.aug-spec/august/0.21.0}/io/contracts.aug +4 -3
- package/examples/approved-design/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/approved-design/.aug-spec/manifest.json +3 -3
- package/examples/approved-design/counters.aug +5 -4
- package/examples/approved-design/counters.aug.md +25 -132
- package/examples/approved-design/domain/app.aug +2 -1
- package/examples/approved-design/domain/app.aug.md +10 -80
- package/examples/approved-design/domain/export.aug +1 -0
- package/examples/approved-design/domain/export.aug.md +4 -20
- package/examples/approved-design/domain/models.aug +1 -0
- package/examples/approved-design/domain/models.aug.md +3 -25
- package/examples/approved-design/domain/numbers.aug +3 -2
- package/examples/approved-design/domain/numbers.aug.md +19 -116
- package/examples/approved-design/main.aug +1 -0
- package/examples/approved-design/main.aug.md +12 -95
- package/examples/benchmark/.aug-spec/manifest.json +1 -1
- package/examples/benchmark/main.aug +1 -0
- package/examples/benchmark/main.aug.md +6 -36
- package/examples/cli-args/.aug-spec/manifest.json +1 -1
- package/examples/cli-args/main.aug +1 -0
- package/examples/cli-args/main.aug.md +5 -32
- package/examples/collections/.aug-spec/manifest.json +1 -1
- package/examples/collections/main.aug +1 -0
- package/examples/collections/main.aug.md +6 -36
- package/examples/{generic-di/.aug-spec/august/0.19.0 → developer-workflow/.aug-spec/august/0.21.0}/io/contracts.aug +4 -3
- package/examples/developer-workflow/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
- package/examples/developer-workflow/calculator.aug +3 -2
- package/examples/developer-workflow/calculator.aug.md +28 -189
- package/examples/developer-workflow/logging/console.aug +2 -1
- package/examples/developer-workflow/logging/console.aug.md +7 -57
- package/examples/developer-workflow/logging/export.aug +1 -0
- package/examples/developer-workflow/logging/export.aug.md +3 -15
- package/examples/developer-workflow/logging/logger.aug +1 -0
- package/examples/developer-workflow/logging/logger.aug.md +6 -46
- package/examples/developer-workflow/main.aug +1 -0
- package/examples/developer-workflow/main.aug.md +10 -68
- package/examples/drop/.aug-spec/manifest.json +1 -1
- package/examples/drop/main.aug +1 -0
- package/examples/drop/main.aug.md +6 -28
- package/examples/drop/resource.aug +1 -0
- package/examples/drop/resource.aug.md +6 -34
- package/examples/errors/.aug-spec/manifest.json +1 -1
- package/examples/errors/errors.aug +2 -1
- package/examples/errors/errors.aug.md +4 -27
- package/examples/errors/main.aug +1 -0
- package/examples/errors/main.aug.md +6 -29
- package/examples/ffi/.aug-spec/manifest.json +1 -1
- package/examples/ffi/main.aug +1 -0
- package/examples/ffi/main.aug.md +5 -21
- package/examples/ffi/native.aug +2 -1
- package/examples/ffi/native.aug.md +5 -35
- package/examples/{approved-design/.aug-spec/august/0.19.0 → generic-di/.aug-spec/august/0.21.0}/io/contracts.aug +4 -3
- package/examples/generic-di/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/generic-di/.aug-spec/manifest.json +3 -3
- package/examples/generic-di/main.aug +1 -0
- package/examples/generic-di/main.aug.md +8 -40
- package/examples/generic-di/types.aug +3 -2
- package/examples/generic-di/types.aug.md +18 -97
- package/examples/generics/.aug-spec/manifest.json +1 -1
- package/examples/generics/main.aug +1 -0
- package/examples/generics/main.aug.md +9 -48
- package/examples/generics/types.aug +4 -3
- package/examples/generics/types.aug.md +18 -104
- package/examples/{developer-workflow/.aug-spec/august/0.19.0 → hello/.aug-spec/august/0.21.0}/io/contracts.aug +4 -3
- package/examples/hello/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/hello/.aug-spec/manifest.json +3 -3
- package/examples/hello/app/export.aug +1 -0
- package/examples/hello/app/export.aug.md +3 -13
- package/examples/hello/app/greeter.aug +2 -1
- package/examples/hello/app/greeter.aug.md +10 -94
- package/examples/hello/logging/console.aug +2 -1
- package/examples/hello/logging/console.aug.md +7 -55
- package/examples/hello/logging/export.aug +1 -0
- package/examples/hello/logging/export.aug.md +3 -15
- package/examples/hello/logging/logger.aug +1 -0
- package/examples/hello/logging/logger.aug.md +6 -48
- package/examples/hello/main.aug +1 -0
- package/examples/hello/main.aug.md +8 -40
- package/examples/interceptors/.aug-spec/august/0.21.0/io/contracts.aug +37 -0
- package/examples/interceptors/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/interceptors/.aug-spec/manifest.json +3 -3
- package/examples/interceptors/app.aug +3 -2
- package/examples/interceptors/app.aug.md +15 -141
- package/examples/interceptors/interceptors.aug +3 -2
- package/examples/interceptors/interceptors.aug.md +19 -152
- package/examples/interceptors/logging.aug +2 -1
- package/examples/interceptors/logging.aug.md +10 -79
- package/examples/interceptors/main.aug +1 -0
- package/examples/interceptors/main.aug.md +9 -66
- package/examples/native-blake3/.aug-spec/manifest.json +16 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.1/native.abi.json +29 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug +14 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug.md +34 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug +4 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug.md +8 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi.json +29 -0
- package/examples/native-blake3/AGENTS.md +5 -0
- package/examples/native-blake3/aug.lock.json +253 -0
- package/examples/native-blake3/hashing.aug +11 -0
- package/examples/native-blake3/hashing.aug.md +25 -0
- package/examples/native-blake3/main.aug +8 -0
- package/examples/native-blake3/main.aug.md +13 -0
- package/examples/native-pytorch/.aug-spec/manifest.json +18 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.1/native.abi.json +142 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.3/native.abi.json +142 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug +101 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug.md +160 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug +3 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug.md +8 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug +6 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug.md +13 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi.json +142 -0
- package/examples/native-pytorch/AGENTS.md +5 -0
- package/examples/native-pytorch/aug.lock.json +309 -0
- package/examples/native-pytorch/main.aug +8 -0
- package/examples/native-pytorch/main.aug.md +13 -0
- package/examples/native-pytorch/tensors.aug +23 -0
- package/examples/native-pytorch/tensors.aug.md +35 -0
- package/examples/native-sqlite/.aug-spec/manifest.json +18 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.2/native.abi.json +100 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug +48 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug.md +91 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug +3 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug.md +8 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug +8 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug.md +22 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi.json +100 -0
- package/examples/native-sqlite/AGENTS.md +5 -0
- package/examples/native-sqlite/aug.lock.json +236 -0
- package/examples/native-sqlite/database.aug +15 -0
- package/examples/native-sqlite/database.aug.md +27 -0
- package/examples/native-sqlite/main.aug +8 -0
- package/examples/native-sqlite/main.aug.md +13 -0
- package/examples/native-zlib/.aug-spec/manifest.json +16 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.1/native.abi.json +57 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug +29 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug.md +54 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug +4 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug.md +8 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi.json +57 -0
- package/examples/native-zlib/AGENTS.md +5 -0
- package/examples/native-zlib/aug.lock.json +236 -0
- package/examples/native-zlib/compression.aug +15 -0
- package/examples/native-zlib/compression.aug.md +27 -0
- package/examples/native-zlib/main.aug +10 -0
- package/examples/native-zlib/main.aug.md +13 -0
- package/examples/new-syntax/.aug-spec/august/0.21.0/io/contracts.aug +37 -0
- package/examples/new-syntax/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/new-syntax/.aug-spec/manifest.json +3 -3
- package/examples/new-syntax/console.aug +2 -1
- package/examples/new-syntax/console.aug.md +7 -53
- package/examples/new-syntax/greeter.aug +2 -1
- package/examples/new-syntax/greeter.aug.md +10 -74
- package/examples/new-syntax/logger.aug +1 -0
- package/examples/new-syntax/logger.aug.md +6 -46
- package/examples/new-syntax/main.aug +1 -0
- package/examples/new-syntax/main.aug.md +9 -54
- package/examples/new-syntax/math.aug +2 -1
- package/examples/new-syntax/math.aug.md +3 -24
- package/examples/oidc-login/.aug-spec/manifest.json +13 -13
- package/examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +17 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +125 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/contracts.aug +12 -11
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.aug.md +244 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/jose.aug +6 -5
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +30 -0
- package/examples/oidc-login/aug.lock.json +100 -0
- package/examples/oidc-login/client/contracts.aug +1 -0
- package/examples/oidc-login/client/contracts.aug.md +9 -66
- package/examples/oidc-login/client/endpoints.aug +6 -5
- package/examples/oidc-login/client/endpoints.aug.md +13 -145
- package/examples/oidc-login/client/export.aug +1 -0
- package/examples/oidc-login/client/export.aug.md +4 -24
- package/examples/oidc-login/client/login.aug +7 -6
- package/examples/oidc-login/client/login.aug.md +25 -303
- package/examples/oidc-login/client/logout.aug +5 -4
- package/examples/oidc-login/client/logout.aug.md +13 -135
- package/examples/oidc-login/client/protocol.aug +7 -6
- package/examples/oidc-login/client/protocol.aug.md +36 -283
- package/examples/oidc-login/client/session.aug +5 -4
- package/examples/oidc-login/client/session.aug.md +12 -139
- package/examples/oidc-login/client/views.aug +3 -2
- package/examples/oidc-login/client/views.aug.md +8 -57
- package/examples/oidc-login/common/export.aug +1 -0
- package/examples/oidc-login/common/export.aug.md +5 -27
- package/examples/oidc-login/common/headers.aug +4 -3
- package/examples/oidc-login/common/headers.aug.md +9 -67
- package/examples/oidc-login/common/keys.aug +6 -5
- package/examples/oidc-login/common/keys.aug.md +29 -165
- package/examples/oidc-login/common/settings.aug +2 -1
- package/examples/oidc-login/common/settings.aug.md +5 -39
- package/examples/oidc-login/common/views.aug +2 -1
- package/examples/oidc-login/common/views.aug.md +4 -28
- package/examples/oidc-login/main.aug +6 -16
- package/examples/oidc-login/main.aug.md +17 -146
- package/examples/oidc-login/main.yaml +7 -0
- package/examples/oidc-login/provider/authorization.aug +7 -6
- package/examples/oidc-login/provider/authorization.aug.md +23 -238
- package/examples/oidc-login/provider/contracts.aug +1 -0
- package/examples/oidc-login/provider/contracts.aug.md +23 -158
- package/examples/oidc-login/provider/credentials.aug +3 -2
- package/examples/oidc-login/provider/credentials.aug.md +9 -53
- package/examples/oidc-login/provider/discovery.aug +4 -3
- package/examples/oidc-login/provider/discovery.aug.md +11 -118
- package/examples/oidc-login/provider/export.aug +1 -0
- package/examples/oidc-login/provider/export.aug.md +6 -34
- package/examples/oidc-login/provider/token.aug +6 -5
- package/examples/oidc-login/provider/token.aug.md +16 -204
- package/examples/oidc-login/provider/userinfo.aug +4 -3
- package/examples/oidc-login/provider/userinfo.aug.md +10 -92
- package/examples/oidc-login/provider/views.aug +3 -2
- package/examples/oidc-login/provider/views.aug.md +8 -52
- package/examples/ownership/.aug-spec/manifest.json +1 -1
- package/examples/ownership/counter.aug +3 -2
- package/examples/ownership/counter.aug.md +12 -66
- package/examples/ownership/main.aug +1 -0
- package/examples/ownership/main.aug.md +6 -31
- package/examples/ownership-transfer/.aug-spec/august/0.21.0/io/contracts.aug +37 -0
- package/examples/ownership-transfer/.aug-spec/august/0.21.0/io/contracts.aug.md +82 -0
- package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
- package/examples/ownership-transfer/main.aug +1 -0
- package/examples/ownership-transfer/main.aug.md +9 -53
- package/examples/ownership-transfer/resource.aug +2 -1
- package/examples/ownership-transfer/resource.aug.md +12 -71
- package/examples/packages/app/.aug-spec/manifest.json +1 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +2 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +9 -51
- package/examples/packages/app/main.aug +1 -0
- package/examples/packages/app/main.aug.md +6 -26
- package/examples/packages/math/.aug-spec/manifest.json +1 -1
- package/examples/packages/math/aug-package.json +1 -1
- package/examples/packages/math/src/arithmetic.aug +2 -1
- package/examples/packages/math/src/arithmetic.aug.md +9 -51
- package/examples/packages/math/src/export.aug +1 -0
- package/examples/packages/math/src/export.aug.md +3 -13
- package/examples/visibility/.aug-spec/manifest.json +1 -1
- package/examples/visibility/counter.aug +4 -3
- package/examples/visibility/counter.aug.md +12 -68
- package/examples/visibility/main.aug +1 -0
- package/examples/visibility/main.aug.md +6 -32
- package/examples/weather-api/.aug-spec/manifest.json +8 -0
- package/examples/weather-api/AGENTS.md +17 -0
- package/examples/weather-api/README.md +19 -0
- package/examples/weather-api/forecasts.aug +47 -0
- package/examples/weather-api/forecasts.aug.md +32 -0
- package/examples/weather-api/main.aug +4 -0
- package/examples/weather-api/main.aug.md +15 -0
- package/examples/weather-api/main.yaml +5 -0
- package/examples/weather-api/weather.http +5 -0
- package/native/compiler-packs.json +43 -0
- package/package.json +4 -4
- package/runtime/aug_http.c +48 -21
- package/runtime/aug_http_ir.c +30 -0
- package/runtime/aug_http_ir.h +18 -0
- package/runtime/aug_ir.c +209 -0
- package/runtime/aug_ir.h +89 -0
- package/runtime/aug_json.c +6 -1
- package/runtime/aug_runtime.c +82 -16
- package/runtime/aug_runtime.h +16 -2
- package/runtime/aug_tasks.c +38 -7
- package/runtime/aug_values.c +12 -6
- package/scripts/bootstrap-native.mjs +184 -106
- package/scripts/native-setup.mjs +98 -0
- package/scripts/native-toolchain.mjs +28 -0
- package/src/ast.js +1 -1
- package/src/builtins.js +1 -1
- package/src/checker.js +369 -100
- package/src/cli.js +198 -26
- package/src/codegen.js +32 -7
- package/src/compiler-packs.js +66 -0
- package/src/config.js +3 -3
- package/src/contracts.js +10 -0
- package/src/editor.js +86 -22
- package/src/fixes.js +90 -2
- package/src/formatter.js +23 -10
- package/src/git-http.js +137 -0
- package/src/git-packages.js +118 -0
- package/src/help.js +33 -24
- package/src/http-contracts.js +14 -0
- package/src/http-policies.js +5 -5
- package/src/ir-types.js +5 -0
- package/src/ir-verify.js +277 -0
- package/src/ir.js +962 -0
- package/src/libraries.js +1 -1
- package/src/llvm-debug.js +101 -0
- package/src/llvm-native.js +152 -0
- package/src/llvm-platform.js +20 -0
- package/src/llvm.js +781 -0
- package/src/lsp.js +14 -5
- package/src/native-artifacts.js +207 -0
- package/src/native-bindings.js +189 -0
- package/src/native-contracts.js +295 -0
- package/src/native-declarations.js +68 -0
- package/src/native-facts.js +63 -0
- package/src/native.js +19 -13
- package/src/navigation.js +4 -2
- package/src/openapi.js +5 -4
- package/src/package-locking.js +88 -0
- package/src/package-manager.js +267 -68
- package/src/parser.js +32 -6
- package/src/policies.js +3 -3
- package/src/project-init.js +78 -4
- package/src/project.js +11 -9
- package/src/runtime-abi.js +23 -0
- package/src/runtime-adapters.js +18 -0
- package/src/schemas.js +24 -17
- package/src/semantic.js +54 -5
- package/src/snippets.js +60 -0
- package/src/spec-hints.js +56 -0
- package/src/spec-tree.js +241 -0
- package/src/spec.js +669 -305
- package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +0 -925
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +0 -434
- package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +0 -374
- package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +0 -150
- package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +0 -532
- package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +0 -791
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +0 -266
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +0 -55
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +0 -250
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +0 -96
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +0 -420
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/memory → packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/store.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/json → packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/web → packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /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
|
-
|
|
99
|
+
### `AuthorizationRequest` · immutable record · [source](contracts.md#code) {#symbol-AuthorizationRequest}
|
|
98
100
|
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
111
|
+
### `AccessGrant` · immutable record · [source](contracts.md#code) {#symbol-AccessGrant}
|
|
120
112
|
|
|
121
|
-
|
|
113
|
+
It takes `subject` and `name` as strings, kept read-only and `expires` as an integer, kept read-only.
|
|
122
114
|
|
|
123
|
-
|
|
115
|
+
### `TokenResponse` · immutable record · [source](contracts.md#code) {#symbol-TokenResponse}
|
|
124
116
|
|
|
125
|
-
|
|
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
|
-
### `
|
|
119
|
+
### `OAuthError` · immutable record · [source](contracts.md#code) {#symbol-OAuthError}
|
|
135
120
|
|
|
136
|
-
|
|
121
|
+
It takes `error` and `error_description` as strings, kept read-only.
|
|
137
122
|
|
|
138
|
-
|
|
123
|
+
### `TokenForm` · immutable record · [source](contracts.md#code) {#symbol-TokenForm}
|
|
139
124
|
|
|
140
|
-
|
|
125
|
+
It takes `grant_type`, `code`, `redirect_uri`, `client_id`, and `code_verifier` as strings, kept read-only.
|
|
141
126
|
|
|
142
|
-
|
|
127
|
+
### `LoginForm` · immutable record · [source](contracts.md#code) {#symbol-LoginForm}
|
|
143
128
|
|
|
144
|
-
|
|
129
|
+
It takes `request_id`, `csrf`, `username`, and `password` as strings, kept read-only.
|
|
145
130
|
|
|
146
|
-
|
|
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
|
-
|
|
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
|
-
|
|
137
|
+
It implements `Error`.
|
|
159
138
|
|
|
160
|
-
|
|
139
|
+
### `CodeError` · class · [source](contracts.md#code) {#symbol-CodeError}
|
|
161
140
|
|
|
162
|
-
|
|
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
|
-
|
|
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)
|
|
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(
|
|
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
|
-
|
|
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)
|
|
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(
|
|
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
|
-
|
|
97
|
+
### `verifyCredentials` · [source](credentials.md#code) {#symbol-verifyCredentials}
|
|
88
98
|
|
|
89
|
-
|
|
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
|
-
|
|
101
|
+
Failures can raise `CryptoError`.
|
|
92
102
|
|
|
93
|
-
|
|
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
|
-
[
|
|
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
|
-
|
|
107
|
+
### Dependencies
|
|
98
108
|
|
|
99
|
-
|
|
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
|
-
|
|
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
|
|
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()
|
|
57
|
+
endpoint GET "/provider/.well-known/openid-configuration" as discovery():
|
|
57
58
|
config = settings()
|
|
58
|
-
return Discovery(
|
|
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)
|
|
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
|
|
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()
|
|
86
|
+
endpoint GET "/provider/.well-known/openid-configuration" as discovery() {
|
|
71
87
|
config = settings()
|
|
72
|
-
return Discovery(
|
|
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)
|
|
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
|
-
|
|
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
|
-
###
|
|
121
|
+
### `Discovery` · immutable record · [source](discovery.md#code) {#symbol-Discovery}
|
|
92
122
|
|
|
93
|
-
-
|
|
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
|
-
### `
|
|
125
|
+
### `discovery` · [source](discovery.md#code) {#symbol-discovery}
|
|
98
126
|
|
|
99
|
-
[
|
|
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
|
-
|
|
129
|
+
### `jwks` · [source](discovery.md#code) {#symbol-jwks}
|
|
102
130
|
|
|
103
|
-
|
|
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
|
-
|
|
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
|
-
|
|
135
|
+
### Dependencies
|
|
108
136
|
|
|
109
|
-
- `
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- Export `
|
|
96
|
-
|
|
97
|
-
- Export `
|
|
98
|
-
|
|
99
|
-
|
|
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
|
|