@greenpandastudios/aug-cli 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +13 -0
- package/THIRD_PARTY_NOTICES.md +18 -0
- package/bin/aug.mjs +3 -0
- package/docs/api/crypto.md +351 -0
- package/docs/api/io.md +207 -0
- package/docs/api/json.md +21 -0
- package/docs/api/memory.md +109 -0
- package/docs/api/time.md +54 -0
- package/docs/api/web.md +184 -0
- package/docs/assets/benchmarks/execution.svg +2978 -0
- package/docs/assets/benchmarks/http.svg +1674 -0
- package/docs/assets/benchmarks/improvements.svg +2315 -0
- package/docs/assets/benchmarks/memory.svg +1891 -0
- package/docs/benchmark-baseline.json +1087 -0
- package/docs/benchmark-results.json +91123 -0
- package/docs/benchmarks.json +38 -0
- package/docs/compatibility.md +42 -0
- package/docs/concurrency-implementation.md +18 -0
- package/docs/diagnostics.md +97 -0
- package/docs/docker.md +35 -0
- package/docs/example-projects.json +26 -0
- package/docs/examples/approved-design/counters.md +253 -0
- package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/approved-design/domain/app.md +165 -0
- package/docs/examples/approved-design/domain/export.md +83 -0
- package/docs/examples/approved-design/domain/models.md +80 -0
- package/docs/examples/approved-design/domain/numbers.md +248 -0
- package/docs/examples/approved-design/index.md +39 -0
- package/docs/examples/approved-design/main-yaml.md +24 -0
- package/docs/examples/approved-design/main.md +215 -0
- package/docs/examples/benchmark/index.md +33 -0
- package/docs/examples/benchmark/main-yaml.md +17 -0
- package/docs/examples/benchmark/main.md +117 -0
- package/docs/examples/cli-args/index.md +32 -0
- package/docs/examples/cli-args/main.md +107 -0
- package/docs/examples/collections/index.md +32 -0
- package/docs/examples/collections/main.md +118 -0
- package/docs/examples/collections-benchmark/index.md +34 -0
- package/docs/examples/collections-benchmark/main.md +115 -0
- package/docs/examples/cpu-benchmark/index.md +34 -0
- package/docs/examples/cpu-benchmark/main.md +90 -0
- package/docs/examples/developer-workflow/calculator.md +357 -0
- package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/developer-workflow/index.md +37 -0
- package/docs/examples/developer-workflow/logging/console.md +124 -0
- package/docs/examples/developer-workflow/logging/export.md +70 -0
- package/docs/examples/developer-workflow/logging/logger.md +111 -0
- package/docs/examples/developer-workflow/main.md +172 -0
- package/docs/examples/drop/index.md +33 -0
- package/docs/examples/drop/main.md +85 -0
- package/docs/examples/drop/resource.md +95 -0
- package/docs/examples/errors/errors.md +85 -0
- package/docs/examples/errors/index.md +33 -0
- package/docs/examples/errors/main.md +92 -0
- package/docs/examples/ffi/index.md +33 -0
- package/docs/examples/ffi/main.md +75 -0
- package/docs/examples/ffi/native.md +93 -0
- package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/generic-di/index.md +33 -0
- package/docs/examples/generic-di/main.md +111 -0
- package/docs/examples/generic-di/types.md +180 -0
- package/docs/examples/generics/index.md +33 -0
- package/docs/examples/generics/main.md +120 -0
- package/docs/examples/generics/types.md +189 -0
- package/docs/examples/hello/app/export.md +67 -0
- package/docs/examples/hello/app/greeter.md +190 -0
- package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/hello/index.md +37 -0
- package/docs/examples/hello/logging/console.md +121 -0
- package/docs/examples/hello/logging/export.md +71 -0
- package/docs/examples/hello/logging/logger.md +120 -0
- package/docs/examples/hello/main.md +115 -0
- package/docs/examples/http-benchmark/index.md +35 -0
- package/docs/examples/http-benchmark/main.md +79 -0
- package/docs/examples/http-benchmark/routes.md +88 -0
- package/docs/examples/index.md +60 -0
- package/docs/examples/interceptors/app.md +250 -0
- package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/interceptors/index.md +35 -0
- package/docs/examples/interceptors/interceptors.md +284 -0
- package/docs/examples/interceptors/logging.md +155 -0
- package/docs/examples/interceptors/main.md +162 -0
- package/docs/examples/json-benchmark/data.md +71 -0
- package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +103 -0
- package/docs/examples/json-benchmark/index.md +35 -0
- package/docs/examples/json-benchmark/main.md +131 -0
- package/docs/examples/new-syntax/console.md +118 -0
- package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/new-syntax/greeter.md +145 -0
- package/docs/examples/new-syntax/index.md +36 -0
- package/docs/examples/new-syntax/logger.md +111 -0
- package/docs/examples/new-syntax/main.md +135 -0
- package/docs/examples/new-syntax/math.md +79 -0
- package/docs/examples/oidc-login/client/contracts.md +151 -0
- package/docs/examples/oidc-login/client/endpoints.md +263 -0
- package/docs/examples/oidc-login/client/export.md +107 -0
- package/docs/examples/oidc-login/client/login.md +515 -0
- package/docs/examples/oidc-login/client/logout.md +249 -0
- package/docs/examples/oidc-login/client/protocol.md +595 -0
- package/docs/examples/oidc-login/client/session.md +297 -0
- package/docs/examples/oidc-login/client/views.md +144 -0
- package/docs/examples/oidc-login/common/export.md +115 -0
- package/docs/examples/oidc-login/common/headers.md +162 -0
- package/docs/examples/oidc-login/common/keys.md +336 -0
- package/docs/examples/oidc-login/common/settings.md +116 -0
- package/docs/examples/oidc-login/common/views.md +103 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +925 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +434 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +103 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +374 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +150 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +532 -0
- package/docs/examples/oidc-login/index.md +57 -0
- package/docs/examples/oidc-login/main-yaml.md +28 -0
- package/docs/examples/oidc-login/main.md +283 -0
- package/docs/examples/oidc-login/provider/authorization.md +457 -0
- package/docs/examples/oidc-login/provider/contracts.md +267 -0
- package/docs/examples/oidc-login/provider/credentials.md +148 -0
- package/docs/examples/oidc-login/provider/discovery.md +215 -0
- package/docs/examples/oidc-login/provider/export.md +131 -0
- package/docs/examples/oidc-login/provider/token.md +364 -0
- package/docs/examples/oidc-login/provider/userinfo.md +228 -0
- package/docs/examples/oidc-login/provider/views.md +137 -0
- package/docs/examples/ownership/counter.md +140 -0
- package/docs/examples/ownership/index.md +33 -0
- package/docs/examples/ownership/main.md +90 -0
- package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/ownership-transfer/index.md +33 -0
- package/docs/examples/ownership-transfer/main.md +125 -0
- package/docs/examples/ownership-transfer/resource.md +150 -0
- package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +117 -0
- package/docs/examples/packages-app/index.md +34 -0
- package/docs/examples/packages-app/main-yaml.md +18 -0
- package/docs/examples/packages-app/main.md +80 -0
- package/docs/examples/packages-math/aug-package-json.md +24 -0
- package/docs/examples/packages-math/index.md +36 -0
- package/docs/examples/packages-math/package-json.md +25 -0
- package/docs/examples/packages-math/src/arithmetic.md +121 -0
- package/docs/examples/packages-math/src/export.md +63 -0
- package/docs/examples/startup-benchmark/index.md +34 -0
- package/docs/examples/startup-benchmark/main.md +68 -0
- package/docs/examples/visibility/counter.md +142 -0
- package/docs/examples/visibility/index.md +33 -0
- package/docs/examples/visibility/main.md +96 -0
- package/docs/examples.json +47 -0
- package/docs/getting-started.md +5 -0
- package/docs/grammar.md +136 -0
- package/docs/implementation-map.md +106 -0
- package/docs/index.md +46 -0
- package/docs/language-conformance.md +30 -0
- package/docs/language-constructs.md +1461 -0
- package/docs/language-design-audit.md +147 -0
- package/docs/maintaining-docs.md +43 -0
- package/docs/packages.md +184 -0
- package/docs/performance.md +535 -0
- package/docs/production-readiness.md +39 -0
- package/docs/reference.md +361 -0
- package/docs/release-review.md +23 -0
- package/docs/releasing.md +79 -0
- package/docs/roadmap.md +13 -0
- package/docs/specifications.md +86 -0
- package/docs/testing.md +120 -0
- package/docs/tooling.md +197 -0
- package/docs/web-implementation-plan.md +39 -0
- package/docs/web-library-gaps.md +27 -0
- package/docs/web.md +197 -0
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/approved-design/.aug-spec/manifest.json +14 -0
- package/examples/approved-design/counters.aug +22 -0
- package/examples/approved-design/counters.aug.md +177 -0
- package/examples/approved-design/domain/app.aug +12 -0
- package/examples/approved-design/domain/app.aug.md +97 -0
- package/examples/approved-design/domain/export.aug +5 -0
- package/examples/approved-design/domain/export.aug.md +25 -0
- package/examples/approved-design/domain/models.aug +2 -0
- package/examples/approved-design/domain/models.aug.md +30 -0
- package/examples/approved-design/domain/numbers.aug +29 -0
- package/examples/approved-design/domain/numbers.aug.md +141 -0
- package/examples/approved-design/main.aug +26 -0
- package/examples/approved-design/main.aug.md +108 -0
- package/examples/approved-design/main.yaml +8 -0
- package/examples/benchmark/.aug-spec/manifest.json +7 -0
- package/examples/benchmark/main.aug +17 -0
- package/examples/benchmark/main.aug.md +43 -0
- package/examples/benchmark/main.yaml +1 -0
- package/examples/cli-args/.aug-spec/manifest.json +7 -0
- package/examples/cli-args/main.aug +15 -0
- package/examples/cli-args/main.aug.md +38 -0
- package/examples/collections/.aug-spec/manifest.json +7 -0
- package/examples/collections/main.aug +18 -0
- package/examples/collections/main.aug.md +43 -0
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/developer-workflow/.aug-spec/manifest.json +13 -0
- package/examples/developer-workflow/calculator.aug +55 -0
- package/examples/developer-workflow/calculator.aug.md +228 -0
- package/examples/developer-workflow/logging/console.aug +8 -0
- package/examples/developer-workflow/logging/console.aug.md +67 -0
- package/examples/developer-workflow/logging/export.aug +2 -0
- package/examples/developer-workflow/logging/export.aug.md +19 -0
- package/examples/developer-workflow/logging/logger.aug +6 -0
- package/examples/developer-workflow/logging/logger.aug.md +57 -0
- package/examples/developer-workflow/main.aug +25 -0
- package/examples/developer-workflow/main.aug.md +79 -0
- package/examples/drop/.aug-spec/manifest.json +8 -0
- package/examples/drop/main.aug +3 -0
- package/examples/drop/main.aug.md +35 -0
- package/examples/drop/resource.aug +8 -0
- package/examples/drop/resource.aug.md +44 -0
- package/examples/errors/.aug-spec/manifest.json +8 -0
- package/examples/errors/errors.aug +6 -0
- package/examples/errors/errors.aug.md +33 -0
- package/examples/errors/main.aug +7 -0
- package/examples/errors/main.aug.md +36 -0
- package/examples/ffi/.aug-spec/manifest.json +8 -0
- package/examples/ffi/main.aug +2 -0
- package/examples/ffi/main.aug.md +27 -0
- package/examples/ffi/native.aug +6 -0
- package/examples/ffi/native.aug.md +43 -0
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/generic-di/.aug-spec/manifest.json +10 -0
- package/examples/generic-di/main.aug +9 -0
- package/examples/generic-di/main.aug.md +49 -0
- package/examples/generic-di/types.aug +17 -0
- package/examples/generic-di/types.aug.md +124 -0
- package/examples/generics/.aug-spec/manifest.json +8 -0
- package/examples/generics/main.aug +9 -0
- package/examples/generics/main.aug.md +58 -0
- package/examples/generics/types.aug +19 -0
- package/examples/generics/types.aug.md +132 -0
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/hello/.aug-spec/manifest.json +14 -0
- package/examples/hello/app/export.aug +1 -0
- package/examples/hello/app/export.aug.md +17 -0
- package/examples/hello/app/greeter.aug +22 -0
- package/examples/hello/app/greeter.aug.md +109 -0
- package/examples/hello/logging/console.aug +7 -0
- package/examples/hello/logging/console.aug.md +65 -0
- package/examples/hello/logging/export.aug +2 -0
- package/examples/hello/logging/export.aug.md +19 -0
- package/examples/hello/logging/logger.aug +9 -0
- package/examples/hello/logging/logger.aug.md +59 -0
- package/examples/hello/main.aug +9 -0
- package/examples/hello/main.aug.md +49 -0
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/interceptors/.aug-spec/manifest.json +12 -0
- package/examples/interceptors/app.aug +28 -0
- package/examples/interceptors/app.aug.md +162 -0
- package/examples/interceptors/interceptors.aug +40 -0
- package/examples/interceptors/interceptors.aug.md +180 -0
- package/examples/interceptors/logging.aug +12 -0
- package/examples/interceptors/logging.aug.md +96 -0
- package/examples/interceptors/main.aug +22 -0
- package/examples/interceptors/main.aug.md +76 -0
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/new-syntax/.aug-spec/manifest.json +13 -0
- package/examples/new-syntax/console.aug +7 -0
- package/examples/new-syntax/console.aug.md +63 -0
- package/examples/new-syntax/greeter.aug +10 -0
- package/examples/new-syntax/greeter.aug.md +89 -0
- package/examples/new-syntax/logger.aug +6 -0
- package/examples/new-syntax/logger.aug.md +57 -0
- package/examples/new-syntax/main.aug +12 -0
- package/examples/new-syntax/main.aug.md +64 -0
- package/examples/new-syntax/math.aug +3 -0
- package/examples/new-syntax/math.aug.md +29 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug +73 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +791 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug +68 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +266 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug +6 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +55 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug +45 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +250 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug +11 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +96 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug +58 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +420 -0
- package/examples/oidc-login/.aug-spec/manifest.json +40 -0
- package/examples/oidc-login/README.md +29 -0
- package/examples/oidc-login/client/contracts.aug +7 -0
- package/examples/oidc-login/client/contracts.aug.md +80 -0
- package/examples/oidc-login/client/endpoints.aug +21 -0
- package/examples/oidc-login/client/endpoints.aug.md +161 -0
- package/examples/oidc-login/client/export.aug +7 -0
- package/examples/oidc-login/client/export.aug.md +29 -0
- package/examples/oidc-login/client/login.aug +58 -0
- package/examples/oidc-login/client/login.aug.md +331 -0
- package/examples/oidc-login/client/logout.aug +18 -0
- package/examples/oidc-login/client/logout.aug.md +150 -0
- package/examples/oidc-login/client/protocol.aug +106 -0
- package/examples/oidc-login/client/protocol.aug.md +326 -0
- package/examples/oidc-login/client/session.aug +34 -0
- package/examples/oidc-login/client/session.aug.md +155 -0
- package/examples/oidc-login/client/views.aug +21 -0
- package/examples/oidc-login/client/views.aug.md +68 -0
- package/examples/oidc-login/common/export.aug +9 -0
- package/examples/oidc-login/common/export.aug.md +33 -0
- package/examples/oidc-login/common/headers.aug +11 -0
- package/examples/oidc-login/common/headers.aug.md +79 -0
- package/examples/oidc-login/common/keys.aug +37 -0
- package/examples/oidc-login/common/keys.aug.md +207 -0
- package/examples/oidc-login/common/settings.aug +4 -0
- package/examples/oidc-login/common/settings.aug.md +47 -0
- package/examples/oidc-login/common/views.aug +16 -0
- package/examples/oidc-login/common/views.aug.md +34 -0
- package/examples/oidc-login/main.aug +39 -0
- package/examples/oidc-login/main.aug.md +166 -0
- package/examples/oidc-login/main.yaml +12 -0
- package/examples/oidc-login/provider/authorization.aug +59 -0
- package/examples/oidc-login/provider/authorization.aug.md +264 -0
- package/examples/oidc-login/provider/contracts.aug +15 -0
- package/examples/oidc-login/provider/contracts.aug.md +193 -0
- package/examples/oidc-login/provider/credentials.aug +10 -0
- package/examples/oidc-login/provider/credentials.aug.md +64 -0
- package/examples/oidc-login/provider/discovery.aug +13 -0
- package/examples/oidc-login/provider/discovery.aug.md +133 -0
- package/examples/oidc-login/provider/export.aug +13 -0
- package/examples/oidc-login/provider/export.aug.md +41 -0
- package/examples/oidc-login/provider/token.aug +37 -0
- package/examples/oidc-login/provider/token.aug.md +223 -0
- package/examples/oidc-login/provider/userinfo.aug +26 -0
- package/examples/oidc-login/provider/userinfo.aug.md +104 -0
- package/examples/oidc-login/provider/views.aug +18 -0
- package/examples/oidc-login/provider/views.aug.md +63 -0
- package/examples/ownership/.aug-spec/manifest.json +8 -0
- package/examples/ownership/counter.aug +14 -0
- package/examples/ownership/counter.aug.md +85 -0
- package/examples/ownership/main.aug +4 -0
- package/examples/ownership/main.aug.md +38 -0
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/ownership-transfer/.aug-spec/manifest.json +10 -0
- package/examples/ownership-transfer/main.aug +9 -0
- package/examples/ownership-transfer/main.aug.md +63 -0
- package/examples/ownership-transfer/resource.aug +16 -0
- package/examples/ownership-transfer/resource.aug.md +89 -0
- package/examples/packages/README.md +15 -0
- package/examples/packages/app/.aug-spec/manifest.json +9 -0
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +9 -0
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +63 -0
- package/examples/packages/app/main.aug +2 -0
- package/examples/packages/app/main.aug.md +33 -0
- package/examples/packages/app/main.yaml +2 -0
- package/examples/packages/math/.aug-spec/manifest.json +8 -0
- package/examples/packages/math/README.md +3 -0
- package/examples/packages/math/aug-package.json +8 -0
- package/examples/packages/math/package.json +9 -0
- package/examples/packages/math/src/arithmetic.aug +8 -0
- package/examples/packages/math/src/arithmetic.aug.md +63 -0
- package/examples/packages/math/src/export.aug +1 -0
- package/examples/packages/math/src/export.aug.md +17 -0
- package/examples/visibility/.aug-spec/manifest.json +8 -0
- package/examples/visibility/counter.aug +14 -0
- package/examples/visibility/counter.aug.md +87 -0
- package/examples/visibility/main.aug +7 -0
- package/examples/visibility/main.aug.md +39 -0
- package/package.json +50 -0
- package/runtime/aug_crypto.c +121 -0
- package/runtime/aug_html.c +93 -0
- package/runtime/aug_http.c +829 -0
- package/runtime/aug_json.c +165 -0
- package/runtime/aug_runtime.c +792 -0
- package/runtime/aug_runtime.h +245 -0
- package/runtime/aug_tasks.c +172 -0
- package/runtime/aug_time.c +5 -0
- package/runtime/aug_values.c +80 -0
- package/scripts/bootstrap-native.mjs +121 -0
- package/scripts/native-dependencies.lock.json +65 -0
- package/scripts/native-home.mjs +11 -0
- package/src/actions.js +109 -0
- package/src/ast.js +19 -0
- package/src/builtins.js +93 -0
- package/src/checker.js +2896 -0
- package/src/cli.js +344 -0
- package/src/codegen.js +1159 -0
- package/src/config.js +149 -0
- package/src/continuation.js +110 -0
- package/src/di.js +24 -0
- package/src/documentation.js +27 -0
- package/src/editor.js +782 -0
- package/src/effects.js +29 -0
- package/src/fixes.js +222 -0
- package/src/formatter.js +296 -0
- package/src/freshness.js +154 -0
- package/src/help.js +212 -0
- package/src/html.js +27 -0
- package/src/http-policies.js +90 -0
- package/src/inference.js +16 -0
- package/src/interceptors.js +70 -0
- package/src/javadoc.js +67 -0
- package/src/lexer.js +199 -0
- package/src/libraries.js +31 -0
- package/src/lsp.js +180 -0
- package/src/native.js +144 -0
- package/src/navigation.js +162 -0
- package/src/openapi.js +220 -0
- package/src/ownership.js +232 -0
- package/src/package-manager.js +299 -0
- package/src/parser.js +1155 -0
- package/src/policies.js +130 -0
- package/src/project-init.js +19 -0
- package/src/project.js +292 -0
- package/src/schemas.js +62 -0
- package/src/semantic.js +255 -0
- package/src/spec.js +738 -0
- package/src/testing.js +186 -0
- package/src/types.js +10 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "main.aug · Labeled calls and injection"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/new-syntax/main.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `main.aug`
|
|
13
|
+
|
|
14
|
+
[Labeled calls and injection](index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](main.md)
|
|
19
|
+
- [`console.aug`](console.md)
|
|
20
|
+
- [`greeter.aug`](greeter.md)
|
|
21
|
+
- [`logger.aug`](logger.md)
|
|
22
|
+
- [`math.aug`](math.md)
|
|
23
|
+
|
|
24
|
+
:::
|
|
25
|
+
|
|
26
|
+
::::: example-compare
|
|
27
|
+
|
|
28
|
+
:::: example-code
|
|
29
|
+
|
|
30
|
+
## Code {#code}
|
|
31
|
+
|
|
32
|
+
::: code-group
|
|
33
|
+
|
|
34
|
+
```aug [Indentation]
|
|
35
|
+
import Console and SystemConsole from august.io
|
|
36
|
+
implement Console with SystemConsole
|
|
37
|
+
import Logger from logger
|
|
38
|
+
import ConsoleLogger from console
|
|
39
|
+
import Greeter from greeter
|
|
40
|
+
import increment from math
|
|
41
|
+
implement Logger with ConsoleLogger
|
|
42
|
+
greeter = Greeter(x=4)
|
|
43
|
+
greeter.greet(name="AugScript")
|
|
44
|
+
int count = 7
|
|
45
|
+
count = increment(value=count)
|
|
46
|
+
print(value=count)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```aug [Braces]
|
|
50
|
+
import Console and SystemConsole from august.io
|
|
51
|
+
implement Console with SystemConsole
|
|
52
|
+
import Logger from logger
|
|
53
|
+
import ConsoleLogger from console
|
|
54
|
+
import Greeter from greeter
|
|
55
|
+
import increment from math
|
|
56
|
+
implement Logger with ConsoleLogger
|
|
57
|
+
greeter = Greeter(x=4)
|
|
58
|
+
greeter.greet(name="AugScript")
|
|
59
|
+
int count = 7
|
|
60
|
+
count = increment(value=count)
|
|
61
|
+
print(value=count)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
:::
|
|
65
|
+
|
|
66
|
+
::::
|
|
67
|
+
|
|
68
|
+
:::: example-spec
|
|
69
|
+
|
|
70
|
+
## Compiled specification {#specification}
|
|
71
|
+
|
|
72
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
73
|
+
|
|
74
|
+
### In this file
|
|
75
|
+
|
|
76
|
+
- Register 2 dependency providers before startup.
|
|
77
|
+
- Run 5 other startup steps in source order.
|
|
78
|
+
|
|
79
|
+
### Dependency providers
|
|
80
|
+
|
|
81
|
+
Register these providers before startup. Their declaration order does not set initialization order; shared instances initialize in dependency order.
|
|
82
|
+
|
|
83
|
+
- Provide [`SystemConsole`](dependencies/august/0.19.0/io/contracts.md#symbol-SystemConsole) when `Console` is requested. Reuse one instance.
|
|
84
|
+
- Provide [`ConsoleLogger`](console.md#symbol-ConsoleLogger) when `Logger` is requested. Reuse one instance.
|
|
85
|
+
|
|
86
|
+
### Startup, in source order
|
|
87
|
+
|
|
88
|
+
- Set `greeter` to call [`Greeter`](greeter.md#symbol-Greeter) with `x` = `4`; inject `logger` from `Logger`.
|
|
89
|
+
- Call [`Greeter.greet`](greeter.md#symbol-Greeter.greet) on `greeter` with `name` = `"AugScript"`; inject `console` from `Console`.
|
|
90
|
+
- Set `count` of type `int` to `7`.
|
|
91
|
+
- Set `count` to call [`increment`](math.md#symbol-increment) with `value` = `count`.
|
|
92
|
+
- Call `print` with `value` = `count`.
|
|
93
|
+
|
|
94
|
+
### Dependencies used by this file
|
|
95
|
+
|
|
96
|
+
Only referenced types and operations appear here. Each name links to its complete specification.
|
|
97
|
+
|
|
98
|
+
#### [`SystemConsole`](dependencies/august/0.19.0/io/contracts.md#symbol-SystemConsole)
|
|
99
|
+
|
|
100
|
+
Class from `august.io`.
|
|
101
|
+
|
|
102
|
+
Used as a type or provider.
|
|
103
|
+
|
|
104
|
+
#### [`ConsoleLogger`](console.md#symbol-ConsoleLogger)
|
|
105
|
+
|
|
106
|
+
Class from `console`.
|
|
107
|
+
|
|
108
|
+
Used as a type or provider.
|
|
109
|
+
|
|
110
|
+
#### [`Greeter`](greeter.md#symbol-Greeter)
|
|
111
|
+
|
|
112
|
+
Class from `greeter`.
|
|
113
|
+
|
|
114
|
+
- Construct with `x`: `int` → [`Greeter`](greeter.md#symbol-Greeter).
|
|
115
|
+
- [`Greeter.greet`](greeter.md#symbol-Greeter.greet) (`name`: `string`) → `void`; inject `console`: [`Console`](dependencies/august/0.19.0/io/contracts.md#symbol-Console); uses [`Console.write`](dependencies/august/0.19.0/io/contracts.md#symbol-Console.write).
|
|
116
|
+
|
|
117
|
+
#### [`increment`](math.md#symbol-increment)
|
|
118
|
+
|
|
119
|
+
Function from `math`.
|
|
120
|
+
|
|
121
|
+
- [`increment`](math.md#symbol-increment) (`value`: `int`) → `int`.
|
|
122
|
+
|
|
123
|
+
### Built-in operations used by this file
|
|
124
|
+
|
|
125
|
+
- `print` (`value`: `any`) → `void`: Composition and test output. Other callables receive Console and declare uses console.write.
|
|
126
|
+
|
|
127
|
+
[Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
|
|
128
|
+
|
|
129
|
+
### Shared language rules
|
|
130
|
+
|
|
131
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
132
|
+
|
|
133
|
+
::::
|
|
134
|
+
|
|
135
|
+
:::::
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "math.aug · Labeled calls and injection"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/new-syntax/math.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `math.aug`
|
|
13
|
+
|
|
14
|
+
[Labeled calls and injection](index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](main.md)
|
|
19
|
+
- [`console.aug`](console.md)
|
|
20
|
+
- [`greeter.aug`](greeter.md)
|
|
21
|
+
- [`logger.aug`](logger.md)
|
|
22
|
+
- [`math.aug`](math.md)
|
|
23
|
+
|
|
24
|
+
:::
|
|
25
|
+
|
|
26
|
+
::::: example-compare
|
|
27
|
+
|
|
28
|
+
:::: example-code
|
|
29
|
+
|
|
30
|
+
## Code {#code}
|
|
31
|
+
|
|
32
|
+
::: code-group
|
|
33
|
+
|
|
34
|
+
```aug [Indentation]
|
|
35
|
+
increment(int value) returns int:
|
|
36
|
+
return value + 1
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```aug [Braces]
|
|
40
|
+
increment(int value) returns int {
|
|
41
|
+
return value + 1
|
|
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
|
+
- [`increment`](math.md#symbol-increment) is a function returning `int`.
|
|
58
|
+
|
|
59
|
+
### `increment` {#symbol-increment}
|
|
60
|
+
|
|
61
|
+
[source](math.md#code)
|
|
62
|
+
|
|
63
|
+
**Inputs**
|
|
64
|
+
|
|
65
|
+
- `value` (`int`) — required labeled input.
|
|
66
|
+
|
|
67
|
+
Returns: `int`.
|
|
68
|
+
|
|
69
|
+
**What it does**
|
|
70
|
+
|
|
71
|
+
- Return `value` plus `1`.
|
|
72
|
+
|
|
73
|
+
### Shared language rules
|
|
74
|
+
|
|
75
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
76
|
+
|
|
77
|
+
::::
|
|
78
|
+
|
|
79
|
+
:::::
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "client/contracts.aug · OpenID Connect login application"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/oidc-login/client/contracts.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `client/contracts.aug`
|
|
13
|
+
|
|
14
|
+
[OpenID Connect login application](../index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](../main.md)
|
|
19
|
+
- [`client/contracts.aug`](contracts.md)
|
|
20
|
+
- [`client/endpoints.aug`](endpoints.md)
|
|
21
|
+
- [`client/export.aug`](export.md)
|
|
22
|
+
- [`client/login.aug`](login.md)
|
|
23
|
+
- [`client/logout.aug`](logout.md)
|
|
24
|
+
- [`client/protocol.aug`](protocol.md)
|
|
25
|
+
- [`client/session.aug`](session.md)
|
|
26
|
+
- [`client/views.aug`](views.md)
|
|
27
|
+
- [`common/export.aug`](../common/export.md)
|
|
28
|
+
- [`common/headers.aug`](../common/headers.md)
|
|
29
|
+
- [`common/keys.aug`](../common/keys.md)
|
|
30
|
+
- [`common/settings.aug`](../common/settings.md)
|
|
31
|
+
- [`common/views.aug`](../common/views.md)
|
|
32
|
+
- [`provider/authorization.aug`](../provider/authorization.md)
|
|
33
|
+
- [`provider/contracts.aug`](../provider/contracts.md)
|
|
34
|
+
- [`provider/credentials.aug`](../provider/credentials.md)
|
|
35
|
+
- [`provider/discovery.aug`](../provider/discovery.md)
|
|
36
|
+
- [`provider/export.aug`](../provider/export.md)
|
|
37
|
+
- [`provider/token.aug`](../provider/token.md)
|
|
38
|
+
- [`provider/userinfo.aug`](../provider/userinfo.md)
|
|
39
|
+
- [`provider/views.aug`](../provider/views.md)
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
::::: example-compare
|
|
44
|
+
|
|
45
|
+
:::: example-code
|
|
46
|
+
|
|
47
|
+
## Code {#code}
|
|
48
|
+
|
|
49
|
+
::: code-group
|
|
50
|
+
|
|
51
|
+
```aug [Indentation]
|
|
52
|
+
/** Browser-bound client state, nonce and PKCE verifier, consumed by the callback. */
|
|
53
|
+
record LoginTransaction(string state, string nonce, string verifier, int expires)
|
|
54
|
+
/** Sessions require their own issuer, audience, key and JWT type, plus a live registry entry. */
|
|
55
|
+
record SessionClaims(string iss, string sub, string aud, int exp, int iat, string jti, string csrf, string name)
|
|
56
|
+
record LogoutForm(string csrf)
|
|
57
|
+
SessionError() implements Error:
|
|
58
|
+
pass
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```aug [Braces]
|
|
62
|
+
/** Browser-bound client state, nonce and PKCE verifier, consumed by the callback. */
|
|
63
|
+
record LoginTransaction(string state, string nonce, string verifier, int expires)
|
|
64
|
+
/** Sessions require their own issuer, audience, key and JWT type, plus a live registry entry. */
|
|
65
|
+
record SessionClaims(string iss, string sub, string aud, int exp, int iat, string jti, string csrf, string name)
|
|
66
|
+
record LogoutForm(string csrf)
|
|
67
|
+
SessionError() implements Error {
|
|
68
|
+
pass
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
:::
|
|
73
|
+
|
|
74
|
+
::::
|
|
75
|
+
|
|
76
|
+
:::: example-spec
|
|
77
|
+
|
|
78
|
+
## Compiled specification {#specification}
|
|
79
|
+
|
|
80
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
81
|
+
|
|
82
|
+
### In this file
|
|
83
|
+
|
|
84
|
+
- [`LoginTransaction`](contracts.md#symbol-LoginTransaction) is an immutable record.
|
|
85
|
+
- [`SessionClaims`](contracts.md#symbol-SessionClaims) is an immutable record.
|
|
86
|
+
- [`LogoutForm`](contracts.md#symbol-LogoutForm) is an immutable record.
|
|
87
|
+
- [`SessionError`](contracts.md#symbol-SessionError) is a class implementing `Error`.
|
|
88
|
+
|
|
89
|
+
### `LoginTransaction` {#symbol-LoginTransaction}
|
|
90
|
+
|
|
91
|
+
[source](contracts.md#code)
|
|
92
|
+
|
|
93
|
+
Immutable record.
|
|
94
|
+
|
|
95
|
+
**Author documentation**
|
|
96
|
+
|
|
97
|
+
Browser-bound client state, nonce and PKCE verifier, consumed by the callback.
|
|
98
|
+
|
|
99
|
+
**Inputs**
|
|
100
|
+
|
|
101
|
+
- `state` (`string`) — required labeled input — stored as `state` and read-only after initialization.
|
|
102
|
+
- `nonce` (`string`) — required labeled input — stored as `nonce` and read-only after initialization.
|
|
103
|
+
- `verifier` (`string`) — required labeled input — stored as `verifier` and read-only after initialization.
|
|
104
|
+
- `expires` (`int`) — required labeled input — stored as `expires` and read-only after initialization.
|
|
105
|
+
|
|
106
|
+
### `SessionClaims` {#symbol-SessionClaims}
|
|
107
|
+
|
|
108
|
+
[source](contracts.md#code)
|
|
109
|
+
|
|
110
|
+
Immutable record.
|
|
111
|
+
|
|
112
|
+
**Author documentation**
|
|
113
|
+
|
|
114
|
+
Sessions require their own issuer, audience, key and JWT type, plus a live registry entry.
|
|
115
|
+
|
|
116
|
+
**Inputs**
|
|
117
|
+
|
|
118
|
+
- `iss` (`string`) — required labeled input — stored as `iss` and read-only after initialization.
|
|
119
|
+
- `sub` (`string`) — required labeled input — stored as `sub` and read-only after initialization.
|
|
120
|
+
- `aud` (`string`) — required labeled input — stored as `aud` and read-only after initialization.
|
|
121
|
+
- `exp` (`int`) — required labeled input — stored as `exp` and read-only after initialization.
|
|
122
|
+
- `iat` (`int`) — required labeled input — stored as `iat` and read-only after initialization.
|
|
123
|
+
- `jti` (`string`) — required labeled input — stored as `jti` and read-only after initialization.
|
|
124
|
+
- `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
|
|
125
|
+
- `name` (`string`) — required labeled input — stored as `name` and read-only after initialization.
|
|
126
|
+
|
|
127
|
+
### `LogoutForm` {#symbol-LogoutForm}
|
|
128
|
+
|
|
129
|
+
[source](contracts.md#code)
|
|
130
|
+
|
|
131
|
+
Immutable record.
|
|
132
|
+
|
|
133
|
+
**Inputs**
|
|
134
|
+
|
|
135
|
+
- `csrf` (`string`) — required labeled input — stored as `csrf` and read-only after initialization.
|
|
136
|
+
|
|
137
|
+
### `SessionError` {#symbol-SessionError}
|
|
138
|
+
|
|
139
|
+
[source](contracts.md#code)
|
|
140
|
+
|
|
141
|
+
Behavioral class.
|
|
142
|
+
|
|
143
|
+
Satisfies `Error`.
|
|
144
|
+
|
|
145
|
+
### Shared language rules
|
|
146
|
+
|
|
147
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
148
|
+
|
|
149
|
+
::::
|
|
150
|
+
|
|
151
|
+
:::::
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "client/endpoints.aug · OpenID Connect login application"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/oidc-login/client/endpoints.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `client/endpoints.aug`
|
|
13
|
+
|
|
14
|
+
[OpenID Connect login application](../index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](../main.md)
|
|
19
|
+
- [`client/contracts.aug`](contracts.md)
|
|
20
|
+
- [`client/endpoints.aug`](endpoints.md)
|
|
21
|
+
- [`client/export.aug`](export.md)
|
|
22
|
+
- [`client/login.aug`](login.md)
|
|
23
|
+
- [`client/logout.aug`](logout.md)
|
|
24
|
+
- [`client/protocol.aug`](protocol.md)
|
|
25
|
+
- [`client/session.aug`](session.md)
|
|
26
|
+
- [`client/views.aug`](views.md)
|
|
27
|
+
- [`common/export.aug`](../common/export.md)
|
|
28
|
+
- [`common/headers.aug`](../common/headers.md)
|
|
29
|
+
- [`common/keys.aug`](../common/keys.md)
|
|
30
|
+
- [`common/settings.aug`](../common/settings.md)
|
|
31
|
+
- [`common/views.aug`](../common/views.md)
|
|
32
|
+
- [`provider/authorization.aug`](../provider/authorization.md)
|
|
33
|
+
- [`provider/contracts.aug`](../provider/contracts.md)
|
|
34
|
+
- [`provider/credentials.aug`](../provider/credentials.md)
|
|
35
|
+
- [`provider/discovery.aug`](../provider/discovery.md)
|
|
36
|
+
- [`provider/export.aug`](../provider/export.md)
|
|
37
|
+
- [`provider/token.aug`](../provider/token.md)
|
|
38
|
+
- [`provider/userinfo.aug`](../provider/userinfo.md)
|
|
39
|
+
- [`provider/views.aug`](../provider/views.md)
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
::::: example-compare
|
|
44
|
+
|
|
45
|
+
:::: example-code
|
|
46
|
+
|
|
47
|
+
## Code {#code}
|
|
48
|
+
|
|
49
|
+
::: code-group
|
|
50
|
+
|
|
51
|
+
```aug [Indentation]
|
|
52
|
+
import SessionClaims and SessionError from contracts
|
|
53
|
+
import authenticate from session
|
|
54
|
+
import LoginPage and Welcome from views
|
|
55
|
+
import UserInfo from provider
|
|
56
|
+
import settings and SigningKeys and KeyError and securityHeaders and withCookie from common
|
|
57
|
+
import Crypto from august.crypto
|
|
58
|
+
import Clock from august.time
|
|
59
|
+
import ExpiringStore from august.memory
|
|
60
|
+
/** The app renders a verified session or offers its OIDC login flow. No token claims are displayed before verification. */
|
|
61
|
+
endpoint GET "/" as home(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<Html> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless KeyError and TimeError and HttpError:
|
|
62
|
+
try:
|
|
63
|
+
session = authenticate(token)
|
|
64
|
+
return HttpResponse(body=Welcome(session), headers=securityHeaders())
|
|
65
|
+
catch SessionError error:
|
|
66
|
+
return HttpResponse(body=LoginPage(), headers=securityHeaders())
|
|
67
|
+
/** A protected JSON resource accepts only a live, verified application session. */
|
|
68
|
+
endpoint GET "/me" as me(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<UserInfo> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless SessionError with status 401 and KeyError and TimeError and HttpError:
|
|
69
|
+
session = authenticate(token)
|
|
70
|
+
return HttpResponse(body=UserInfo(sub=session.sub, name=session.name), headers=securityHeaders())
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```aug [Braces]
|
|
74
|
+
import SessionClaims and SessionError from contracts
|
|
75
|
+
import authenticate from session
|
|
76
|
+
import LoginPage and Welcome from views
|
|
77
|
+
import UserInfo from provider
|
|
78
|
+
import settings and SigningKeys and KeyError and securityHeaders and withCookie from common
|
|
79
|
+
import Crypto from august.crypto
|
|
80
|
+
import Clock from august.time
|
|
81
|
+
import ExpiringStore from august.memory
|
|
82
|
+
/** The app renders a verified session or offers its OIDC login flow. No token claims are displayed before verification. */
|
|
83
|
+
endpoint GET "/" as home(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<Html> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless KeyError and TimeError and HttpError {
|
|
84
|
+
try {
|
|
85
|
+
session = authenticate(token)
|
|
86
|
+
return HttpResponse(body=Welcome(session), headers=securityHeaders())
|
|
87
|
+
}
|
|
88
|
+
catch SessionError error {
|
|
89
|
+
return HttpResponse(body=LoginPage(), headers=securityHeaders())
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** A protected JSON resource accepts only a live, verified application session. */
|
|
93
|
+
endpoint GET "/me" as me(optional string token from cookie "aug_session", resolve Crypto crypto, resolve Clock clock, resolve SigningKeys keys, resolve ExpiringStore<SessionClaims> sessions) returns HttpResponse<UserInfo> uses crypto.publicRsa and crypto.decodeBase64url and crypto.verifyRsa and crypto.equal and clock.now and keys.session and sessions.get unless SessionError with status 401 and KeyError and TimeError and HttpError {
|
|
94
|
+
session = authenticate(token)
|
|
95
|
+
return HttpResponse(body=UserInfo(sub=session.sub, name=session.name), headers=securityHeaders())
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
:::
|
|
100
|
+
|
|
101
|
+
::::
|
|
102
|
+
|
|
103
|
+
:::: example-spec
|
|
104
|
+
|
|
105
|
+
## Compiled specification {#specification}
|
|
106
|
+
|
|
107
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
108
|
+
|
|
109
|
+
### In this file
|
|
110
|
+
|
|
111
|
+
- [`home`](endpoints.md#symbol-home) handles `GET` `/` returning `HttpResponse<Html>`.
|
|
112
|
+
- [`me`](endpoints.md#symbol-me) handles `GET` `/me` returning `HttpResponse<UserInfo>`.
|
|
113
|
+
|
|
114
|
+
### `home` {#symbol-home}
|
|
115
|
+
|
|
116
|
+
[source](endpoints.md#code)
|
|
117
|
+
|
|
118
|
+
**Inputs**
|
|
119
|
+
|
|
120
|
+
- `token` (`optional string`) — read from the HTTP cookie named `aug_session`; absent value becomes null.
|
|
121
|
+
- `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
|
|
122
|
+
- `clock` ([`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)) — injected; callers omit it.
|
|
123
|
+
- `keys` ([`SigningKeys`](../common/keys.md#symbol-SigningKeys)) — injected; callers omit it.
|
|
124
|
+
- `sessions` ([`ExpiringStore<SessionClaims>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)) — injected; callers omit it.
|
|
125
|
+
|
|
126
|
+
Returns: `HttpResponse<Html>`.
|
|
127
|
+
|
|
128
|
+
Capabilities: [`crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa), [`crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url), [`crypto.verifyRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.verifyRsa), [`crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal), [`clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now), [`keys.session`](../common/keys.md#symbol-SigningKeys.session), [`sessions.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get).
|
|
129
|
+
|
|
130
|
+
Can fail with `KeyError`, `TimeError`, `HttpError`. Callers must catch or propagate these errors.
|
|
131
|
+
|
|
132
|
+
HTTP route: `GET` `/`. 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.
|
|
133
|
+
|
|
134
|
+
**What it does**
|
|
135
|
+
|
|
136
|
+
- Try these operations:
|
|
137
|
+
- Set `session` to call [`authenticate`](session.md#symbol-authenticate) with `token` = `token`; inject `crypto` from `crypto`, `clock` from `clock`, `keys` from `keys`, `sessions` from `sessions`.
|
|
138
|
+
- Return call `HttpResponse` with `body` = call [`Welcome`](views.md#symbol-Welcome) with `session` = `session`; `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
|
|
139
|
+
- If they fail with [`SessionError`](contracts.md#symbol-SessionError), name the failure `error` and recover:
|
|
140
|
+
- Return call `HttpResponse` with `body` = call [`LoginPage`](views.md#symbol-LoginPage); `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
|
|
141
|
+
|
|
142
|
+
**Author documentation**
|
|
143
|
+
|
|
144
|
+
The app renders a verified session or offers its OIDC login flow. No token claims are displayed before verification.
|
|
145
|
+
|
|
146
|
+
### `me` {#symbol-me}
|
|
147
|
+
|
|
148
|
+
[source](endpoints.md#code)
|
|
149
|
+
|
|
150
|
+
**Inputs**
|
|
151
|
+
|
|
152
|
+
- `token` (`optional string`) — read from the HTTP cookie named `aug_session`; absent value becomes null.
|
|
153
|
+
- `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
|
|
154
|
+
- `clock` ([`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)) — injected; callers omit it.
|
|
155
|
+
- `keys` ([`SigningKeys`](../common/keys.md#symbol-SigningKeys)) — injected; callers omit it.
|
|
156
|
+
- `sessions` ([`ExpiringStore<SessionClaims>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)) — injected; callers omit it.
|
|
157
|
+
|
|
158
|
+
Returns: `HttpResponse<UserInfo>`.
|
|
159
|
+
|
|
160
|
+
Capabilities: [`crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa), [`crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url), [`crypto.verifyRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.verifyRsa), [`crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal), [`clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now), [`keys.session`](../common/keys.md#symbol-SigningKeys.session), [`sessions.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get).
|
|
161
|
+
|
|
162
|
+
Can fail with `SessionError`, `KeyError`, `TimeError`, `HttpError`. Callers must catch or propagate these errors.
|
|
163
|
+
|
|
164
|
+
HTTP route: `GET` `/me`. 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.
|
|
165
|
+
|
|
166
|
+
Declared HTTP failures: [`SessionError`](contracts.md#symbol-SessionError) returns status 401.
|
|
167
|
+
|
|
168
|
+
**What it does**
|
|
169
|
+
|
|
170
|
+
- Set `session` to call [`authenticate`](session.md#symbol-authenticate) with `token` = `token`; inject `crypto` from `crypto`, `clock` from `clock`, `keys` from `keys`, `sessions` from `sessions`.
|
|
171
|
+
- Return call `HttpResponse` with `body` = call [`UserInfo`](../provider/contracts.md#symbol-UserInfo) with `sub` = `sub` of `session`; `name` = `name` of `session`; `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
|
|
172
|
+
|
|
173
|
+
**Author documentation**
|
|
174
|
+
|
|
175
|
+
A protected JSON resource accepts only a live, verified application session.
|
|
176
|
+
|
|
177
|
+
### Dependencies used by this file
|
|
178
|
+
|
|
179
|
+
Only referenced types and operations appear here. Each name links to its complete specification.
|
|
180
|
+
|
|
181
|
+
#### [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)
|
|
182
|
+
|
|
183
|
+
Capability interface from `august.crypto`.
|
|
184
|
+
|
|
185
|
+
- [`Crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url) (`input`: `string`) → `Bytes`; can fail with `CryptoError`.
|
|
186
|
+
- [`Crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal) (`left`: `Bytes`, `right`: `Bytes`) → `bool`.
|
|
187
|
+
- [`Crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa) (`key`: `RsaPrivateKey`) → `RsaPublicKey`; can fail with `CryptoError`.
|
|
188
|
+
- [`Crypto.verifyRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.verifyRsa) (`publicKey`: `RsaPublicKey`, `input`: `Bytes`, `signature`: `Bytes`) → `bool`; can fail with `CryptoError`.
|
|
189
|
+
|
|
190
|
+
#### [`ExpiringStore`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)
|
|
191
|
+
|
|
192
|
+
Capability interface from `august.memory`.
|
|
193
|
+
|
|
194
|
+
- [`ExpiringStore.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get) (`key`: `string`, `now`: `int`) → `optional T`.
|
|
195
|
+
|
|
196
|
+
#### [`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)
|
|
197
|
+
|
|
198
|
+
Capability interface from `august.time`.
|
|
199
|
+
|
|
200
|
+
- [`Clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now) (no caller inputs) → `int`; can fail with `TimeError`.
|
|
201
|
+
|
|
202
|
+
#### [`SessionClaims`](contracts.md#symbol-SessionClaims)
|
|
203
|
+
|
|
204
|
+
Record from `contracts`.
|
|
205
|
+
|
|
206
|
+
- Read `name` (`string`).
|
|
207
|
+
- Read `sub` (`string`).
|
|
208
|
+
|
|
209
|
+
#### [`SessionError`](contracts.md#symbol-SessionError)
|
|
210
|
+
|
|
211
|
+
Class from `contracts`.
|
|
212
|
+
|
|
213
|
+
Used as a type or provider.
|
|
214
|
+
|
|
215
|
+
#### [`authenticate`](session.md#symbol-authenticate)
|
|
216
|
+
|
|
217
|
+
Function from `session`.
|
|
218
|
+
|
|
219
|
+
- [`authenticate`](session.md#symbol-authenticate) (`token`: `optional string`) → [`SessionClaims`](contracts.md#symbol-SessionClaims); inject `crypto`: [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto), `clock`: [`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock), `keys`: [`SigningKeys`](../common/keys.md#symbol-SigningKeys), `sessions`: [`ExpiringStore<SessionClaims>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore); uses [`crypto.publicRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.publicRsa), [`crypto.decodeBase64url`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.decodeBase64url), [`crypto.verifyRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.verifyRsa), [`crypto.equal`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.equal), [`clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now), [`keys.session`](../common/keys.md#symbol-SigningKeys.session), [`sessions.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get); can fail with `SessionError`, `KeyError`, `TimeError`.
|
|
220
|
+
|
|
221
|
+
#### [`LoginPage`](views.md#symbol-LoginPage)
|
|
222
|
+
|
|
223
|
+
Function from `views`.
|
|
224
|
+
|
|
225
|
+
- [`LoginPage`](views.md#symbol-LoginPage) (no caller inputs) → `Html`.
|
|
226
|
+
|
|
227
|
+
#### [`Welcome`](views.md#symbol-Welcome)
|
|
228
|
+
|
|
229
|
+
Function from `views`.
|
|
230
|
+
|
|
231
|
+
- [`Welcome`](views.md#symbol-Welcome) (`session`: [`SessionClaims`](contracts.md#symbol-SessionClaims)) → `Html`; can fail with `HttpError`.
|
|
232
|
+
|
|
233
|
+
#### [`securityHeaders`](../common/headers.md#symbol-securityHeaders)
|
|
234
|
+
|
|
235
|
+
Function from `common`.
|
|
236
|
+
|
|
237
|
+
- [`securityHeaders`](../common/headers.md#symbol-securityHeaders) (no caller inputs) → `Headers`; can fail with `HttpError`.
|
|
238
|
+
|
|
239
|
+
#### [`KeyError`](../common/keys.md#symbol-KeyError)
|
|
240
|
+
|
|
241
|
+
Class from `common`.
|
|
242
|
+
|
|
243
|
+
Used as a type or provider.
|
|
244
|
+
|
|
245
|
+
#### [`SigningKeys`](../common/keys.md#symbol-SigningKeys)
|
|
246
|
+
|
|
247
|
+
Capability interface from `common`.
|
|
248
|
+
|
|
249
|
+
- [`SigningKeys.session`](../common/keys.md#symbol-SigningKeys.session) (no caller inputs) → `RsaPrivateKey`; can fail with `KeyError`.
|
|
250
|
+
|
|
251
|
+
#### [`UserInfo`](../provider/contracts.md#symbol-UserInfo)
|
|
252
|
+
|
|
253
|
+
Record from `provider`.
|
|
254
|
+
|
|
255
|
+
- Construct with `sub`: `string`, `name`: `string` → [`UserInfo`](../provider/contracts.md#symbol-UserInfo).
|
|
256
|
+
|
|
257
|
+
### Shared language rules
|
|
258
|
+
|
|
259
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
260
|
+
|
|
261
|
+
::::
|
|
262
|
+
|
|
263
|
+
:::::
|