@voxgig/sdkgen 4.8.3 → 4.10.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/bin/voxgig-sdkgen +1 -1
- package/dist/helpers/manifest.d.ts +2 -1
- package/dist/helpers/manifest.js +75 -1
- package/dist/helpers/manifest.js.map +1 -1
- package/dist/helpers/modelNames.d.ts +7 -0
- package/dist/helpers/modelNames.js +232 -0
- package/dist/helpers/modelNames.js.map +1 -0
- package/dist/helpers/naming.d.ts +2 -1
- package/dist/helpers/naming.js +45 -1
- package/dist/helpers/naming.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -2
- package/dist/sdkgen.js +12 -3
- package/dist/sdkgen.js.map +1 -1
- package/dist/testkit.d.ts +2 -0
- package/dist/testkit.js +80 -24
- package/dist/testkit.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.js +17 -7
- package/dist/utility.js.map +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +671 -0
- package/project/.sdk/model/target/clojure.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +5 -0
- package/project/.sdk/model/target/elixir.aon +6 -0
- package/project/.sdk/model/target/java.aon +5 -0
- package/project/.sdk/model/target/js.aon +5 -0
- package/project/.sdk/model/target/kotlin.aon +7 -0
- package/project/.sdk/model/target/perl.aon +5 -0
- package/project/.sdk/model/target/php.aon +5 -0
- package/project/.sdk/model/target/rb.aon +5 -0
- package/project/.sdk/model/target/rust.aon +5 -0
- package/project/.sdk/model/target/scala.aon +38 -2
- package/project/.sdk/model/target/swift.aon +10 -0
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
- package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
- package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
- package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
- package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
- package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
- package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
- package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
- package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
- package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
- package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
- package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
- package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
- package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
- package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
- package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
- package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
- package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
- package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
- package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
- package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
- package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
- package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
- package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
- package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
- package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
- package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
- package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
- package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
- package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
- package/project/.sdk/tm/clojure/Makefile +3 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +503 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
- package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
- package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +547 -0
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +889 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1702 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
- package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +824 -0
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1072 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
- package/project/.sdk/tm/go/feature/secrets_feature.go +16 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +123 -0
- package/project/.sdk/tm/go/test/omni/omni.go +8 -3
- package/project/.sdk/tm/go/test/omni/util.go +25 -4
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/feature/SecretsFeature.java +766 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +986 -0
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
- package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +431 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
- package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +946 -0
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
- package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +659 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1148 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
- package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
- package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
- package/project/.sdk/tm/perl/Makefile +6 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +675 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +957 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
- package/project/.sdk/tm/php/feature/SecretsFeature.php +670 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1067 -0
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +4 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
- package/project/.sdk/tm/rb/Makefile +7 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +561 -0
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +842 -0
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +961 -0
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1509 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
- package/project/.sdk/tm/scala/Makefile +8 -3
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +556 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +971 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
- package/project/.sdk/tm/scala/utility/Make.scala +7 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
- package/project/.sdk/tm/zig/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- package/project/sdkgen-package.json +1 -4
- package/src/helpers/manifest.ts +81 -1
- package/src/helpers/modelNames.ts +284 -0
- package/src/helpers/naming.ts +45 -1
- package/src/sdkgen.ts +11 -1
- package/src/testkit.ts +115 -26
- package/src/utility.ts +17 -7
- package/project/.sdk/model/target/dart.aon +0 -58
- package/project/.sdk/model/target/lean.aon +0 -91
- package/project/.sdk/model/target/seneca-provider.aon +0 -120
- package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
- package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
- package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
- package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
- package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
- package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
- package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
- package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
- package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
- package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
- package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
- package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
- package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
- package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
- package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
- package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
- package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
- package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
- package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
- package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
- package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
- package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
- package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
- package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
- package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
- package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
- package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
- package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
- package/project/.sdk/tm/dart/LICENSE +0 -22
- package/project/.sdk/tm/dart/Makefile +0 -50
- package/project/.sdk/tm/dart/lib/Context.dart +0 -150
- package/project/.sdk/tm/dart/lib/Control.dart +0 -15
- package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
- package/project/.sdk/tm/dart/lib/Point.dart +0 -51
- package/project/.sdk/tm/dart/lib/Response.dart +0 -32
- package/project/.sdk/tm/dart/lib/Result.dart +0 -39
- package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
- package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
- package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
- package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
- package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
- package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
- package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
- package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
- package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
- package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
- package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
- package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
- package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
- package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
- package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
- package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
- package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
- package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
- package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
- package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
- package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
- package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
- package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
- package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
- package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
- package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
- package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
- package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
- package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
- package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
- package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
- package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
- package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
- package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
- package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
- package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
- package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
- package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
- package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
- package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
- package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
- package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
- package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
- package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
- package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
- package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
- package/project/.sdk/tm/dart/src/feature/README.md +0 -3
- package/project/.sdk/tm/dart/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
- package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
- package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
- package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
- package/project/.sdk/tm/dart/test/harness.dart +0 -153
- package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
- package/project/.sdk/tm/dart/test/omni.dart +0 -520
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
- package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
- package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
- package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
- package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
- package/project/.sdk/tm/dart/test/utility.dart +0 -198
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
- package/project/.sdk/tm/lean/LICENSE +0 -21
- package/project/.sdk/tm/lean/Makefile +0 -32
- package/project/.sdk/tm/lean/VERSION +0 -1
- package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
- package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
- package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
- package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
- package/project/.sdk/tm/lean/src/feature/README.md +0 -5
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
- package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
- package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
- package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
- package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
- package/project/.sdk/tm/seneca-provider/Makefile +0 -15
- package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
- package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
- package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
- package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
- /package/project/.sdk/tm/{dart/src/feature/audit → clojure/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/base → csharp/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cache → elixir/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/clienttrack → java/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cost → kotlin/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/debug → perl/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/idempotency → php/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/log → rb/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/metrics → rust/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/netsim → scala/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/paging → swift/src/feature/secrets}/.gitkeep +0 -0
|
@@ -0,0 +1,842 @@
|
|
|
1
|
+
# Behavioural tests for the secrets feature (vendored voxgig_sekreto) - the
|
|
2
|
+
# ruby port of tm/ts/test/feature/secrets/Secrets.test.ts.
|
|
3
|
+
#
|
|
4
|
+
# The contract under test: the `apikey` OPTION keeps its exact old meaning
|
|
5
|
+
# and always wins, because the feature places it FIRST in the provider chain
|
|
6
|
+
# (a `memory` store named 'options') - explicit-beats-lookup falls out of
|
|
7
|
+
# sekreto's first-hit rule rather than from special-case logic. With the
|
|
8
|
+
# feature inactive nothing changes at all. With it active and the option
|
|
9
|
+
# unset, the chain (env, a custom provider, a vault) supplies the credential
|
|
10
|
+
# instead.
|
|
11
|
+
#
|
|
12
|
+
# This file lives in the test `feature/` container on purpose: `target add`
|
|
13
|
+
# trims it, along with the feature source and the vendored library, for a
|
|
14
|
+
# project whose model does not select `secrets`.
|
|
15
|
+
#
|
|
16
|
+
# The credential is asserted ON THE WIRE: a live-mode client with a
|
|
17
|
+
# recording system.fetch, driven through real entity operations AND through
|
|
18
|
+
# `direct()`. An options-level assertion would pass for a port that never
|
|
19
|
+
# consults the value, and the raw paths run NO feature hooks - which is
|
|
20
|
+
# exactly why resolution lives at the transport seam.
|
|
21
|
+
|
|
22
|
+
require "minitest/autorun"
|
|
23
|
+
require "json"
|
|
24
|
+
require "socket"
|
|
25
|
+
|
|
26
|
+
require_relative "../../../ProjectName_sdk"
|
|
27
|
+
|
|
28
|
+
class SecretsFeatureTest < Minitest::Test
|
|
29
|
+
# EVERYTHING BUT THE TEST CLASS IS NESTED. Ruby has ONE constant namespace
|
|
30
|
+
# and reassigning a constant silently replaces it, so a top-level helper here
|
|
31
|
+
# is a name an API entity could clobber (helpers/naming.ts RB_SDK_CONSTANTS
|
|
32
|
+
# is the guard, and the shortest list is the safest one). Nested constants
|
|
33
|
+
# resolve lexically inside the instance methods below, so nothing else
|
|
34
|
+
# changes.
|
|
35
|
+
ENVPREFIX = "PROJECTENV_TEST_SECRETS_"
|
|
36
|
+
|
|
37
|
+
# ---------------------------------------------------------------------
|
|
38
|
+
# The recording transport: system.fetch for a LIVE client, scripting one
|
|
39
|
+
# status per API call (the last repeating) and a token endpoint for the
|
|
40
|
+
# exchange tests.
|
|
41
|
+
|
|
42
|
+
class Wire
|
|
43
|
+
attr_accessor :apistatus, :tokens, :tokenpath, :respfield
|
|
44
|
+
|
|
45
|
+
def initialize
|
|
46
|
+
@calls = []
|
|
47
|
+
@apistatus = [200]
|
|
48
|
+
@tokens = ["ACCESS01", "ACCESS02", "ACCESS03"]
|
|
49
|
+
@tokenpath = "auth/token"
|
|
50
|
+
@respfield = "access_token"
|
|
51
|
+
@issued = 0
|
|
52
|
+
@apicalls = 0
|
|
53
|
+
@lock = Mutex.new
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# The Proc the SDK options take as system.fetch.
|
|
57
|
+
def fetch
|
|
58
|
+
wire = self
|
|
59
|
+
->(fullurl, fetchdef) { wire.record(fullurl, fetchdef) }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def record(fullurl, fetchdef)
|
|
63
|
+
@lock.synchronize do
|
|
64
|
+
headers = fetchdef["headers"].is_a?(Hash) ? fetchdef["headers"] : {}
|
|
65
|
+
@calls << {
|
|
66
|
+
"url" => fullurl,
|
|
67
|
+
"auth" => headers["authorization"],
|
|
68
|
+
"has" => headers.key?("authorization"),
|
|
69
|
+
"body" => fetchdef["body"],
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if _istoken(fullurl)
|
|
73
|
+
token = @tokens[[@issued, @tokens.length - 1].min]
|
|
74
|
+
@issued += 1
|
|
75
|
+
payload = { @respfield => token }
|
|
76
|
+
return [{ "status" => 200, "statusText" => "OK", "headers" => {},
|
|
77
|
+
"json" => -> { payload } }, nil]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
status = @apistatus[[@apicalls, @apistatus.length - 1].min]
|
|
81
|
+
@apicalls += 1
|
|
82
|
+
payload = { "ok" => status < 400 }
|
|
83
|
+
[{ "status" => status, "statusText" => "X", "headers" => {},
|
|
84
|
+
"json" => -> { payload } }, nil]
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def calls
|
|
89
|
+
@lock.synchronize { @calls.dup }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# The recorded calls that did NOT go to the token endpoint.
|
|
93
|
+
def api
|
|
94
|
+
calls.reject { |c| _istoken(c["url"]) }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def token
|
|
98
|
+
calls.select { |c| _istoken(c["url"]) }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def _istoken(url)
|
|
102
|
+
url.to_s.end_with?("/" + @tokenpath)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# A sekreto provider built in code: the contract is structural (lookup +
|
|
107
|
+
# describe), and rb's VoxgigStruct.clone preserves a bare object by
|
|
108
|
+
# reference, so it reaches the feature as itself.
|
|
109
|
+
class CustomProvider
|
|
110
|
+
def initialize(&lookup)
|
|
111
|
+
@lookup = lookup
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def lookup(name)
|
|
115
|
+
@lookup.call(name)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def describe
|
|
119
|
+
"custom:test"
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# A one-connection-at-a-time HTTP stand-in, in stdlib sockets alone: the
|
|
124
|
+
# raw-fallback exchange has to be exercised over REAL HTTP (that is the
|
|
125
|
+
# whole point of the lane), and webrick is a bundled gem a consumer's ruby
|
|
126
|
+
# may not carry. Answers the token endpoint with an access token and every
|
|
127
|
+
# other path with an empty JSON body, recording what each request carried.
|
|
128
|
+
class HttpStub
|
|
129
|
+
def initialize
|
|
130
|
+
@lock = Mutex.new
|
|
131
|
+
@refresh = nil
|
|
132
|
+
@auth = nil
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def start
|
|
136
|
+
@server = TCPServer.new("127.0.0.1", 0)
|
|
137
|
+
port = @server.addr[1]
|
|
138
|
+
@thread = Thread.new { serve }
|
|
139
|
+
port
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def stop
|
|
143
|
+
@running = false
|
|
144
|
+
@server.close rescue nil
|
|
145
|
+
@thread&.join
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def refresh
|
|
149
|
+
@lock.synchronize { @refresh }
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def auth
|
|
153
|
+
@lock.synchronize { @auth }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def serve
|
|
157
|
+
@running = true
|
|
158
|
+
while @running
|
|
159
|
+
socket = begin
|
|
160
|
+
@server.accept
|
|
161
|
+
rescue StandardError
|
|
162
|
+
break
|
|
163
|
+
end
|
|
164
|
+
begin
|
|
165
|
+
handle(socket)
|
|
166
|
+
ensure
|
|
167
|
+
socket.close rescue nil
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def handle(socket)
|
|
173
|
+
request = socket.gets.to_s
|
|
174
|
+
path = request.split(" ")[1].to_s
|
|
175
|
+
|
|
176
|
+
headers = {}
|
|
177
|
+
while (line = socket.gets)
|
|
178
|
+
line = line.chomp
|
|
179
|
+
break if line.empty?
|
|
180
|
+
k, v = line.split(":", 2)
|
|
181
|
+
headers[k.to_s.downcase.strip] = v.to_s.strip
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
length = headers["content-length"].to_i
|
|
185
|
+
body = 0 < length ? socket.read(length) : ""
|
|
186
|
+
|
|
187
|
+
if path.end_with?("/auth/token")
|
|
188
|
+
parsed = begin
|
|
189
|
+
JSON.parse(body)
|
|
190
|
+
rescue StandardError
|
|
191
|
+
{}
|
|
192
|
+
end
|
|
193
|
+
@lock.synchronize { @refresh = parsed["refresh_token"] }
|
|
194
|
+
payload = '{"access_token": "RAWTOK01"}'
|
|
195
|
+
else
|
|
196
|
+
@lock.synchronize { @auth = headers["authorization"] }
|
|
197
|
+
payload = "{}"
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
socket.print("HTTP/1.1 200 OK\r\n" \
|
|
201
|
+
"content-type: application/json\r\n" \
|
|
202
|
+
"content-length: #{payload.bytesize}\r\n" \
|
|
203
|
+
"connection: close\r\n\r\n#{payload}")
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# -------------------------------------------------------------------
|
|
208
|
+
# Support.
|
|
209
|
+
|
|
210
|
+
# The Authorization header carries the SPEC's credential prefix, which a
|
|
211
|
+
# TEMPLATE cannot know - so assert on the CREDENTIAL and let the prefix be
|
|
212
|
+
# whatever this SDK's API declares.
|
|
213
|
+
def assert_credential(header, token)
|
|
214
|
+
ok = header == token || header.to_s.end_with?(" " + token)
|
|
215
|
+
assert ok, "expected the authorization header to carry #{token}, got: #{header.inspect}"
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def secrets_feature_of(client)
|
|
219
|
+
client.features.find { |f| f.is_a?(ProjectNameSecretsFeature) }
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Construct the client and ADOPT the feature via `extend` ONLY when the
|
|
223
|
+
# generated config did not already install it - when this SDK was
|
|
224
|
+
# generated with `secrets` model-active, the ordinary factory path builds
|
|
225
|
+
# the instance, and adding a second via extend would DOUBLE the feature:
|
|
226
|
+
# two transport wraps, two resolutions, and a token purchase the
|
|
227
|
+
# assertions cannot account for. (go's withSecrets and py's _has_feature
|
|
228
|
+
# guard the same way.)
|
|
229
|
+
def with_secrets
|
|
230
|
+
client = yield(false)
|
|
231
|
+
client = yield(true) if secrets_feature_of(client).nil?
|
|
232
|
+
client
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def secrets_opts(extra = {})
|
|
236
|
+
fopts = {
|
|
237
|
+
"active" => true,
|
|
238
|
+
"providers" => [{ "kind" => "env", "prefix" => ENVPREFIX }],
|
|
239
|
+
}
|
|
240
|
+
{ "secrets" => fopts.merge(extra) }
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# A LIVE client carrying the secrets feature, wired to the recorder.
|
|
244
|
+
def secrets_client(wire, sdkopts = {})
|
|
245
|
+
opts = {
|
|
246
|
+
"base" => "http://secrets.test/api",
|
|
247
|
+
"system" => { "fetch" => wire.fetch },
|
|
248
|
+
}.merge(sdkopts)
|
|
249
|
+
|
|
250
|
+
with_secrets do |extend_it|
|
|
251
|
+
o = opts.dup
|
|
252
|
+
o["extend"] = [ProjectNameSecretsFeature.new] if extend_it
|
|
253
|
+
ProjectNameSDK.new(o)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# The entity accessors this SDK generated (client.Moon, client.Planet,
|
|
258
|
+
# ...). Read off the class rather than from a name convention: this file
|
|
259
|
+
# is a TEMPLATE and no project's entity names are known here.
|
|
260
|
+
def entity_accessors(client)
|
|
261
|
+
client.class.instance_methods(false).select { |m| m.to_s =~ /\A[A-Z]/ }
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Perform real entity operations until `stop` reports the observable state
|
|
265
|
+
# the test is waiting for. Each op's own outcome is irrelevant (no seeded
|
|
266
|
+
# data, a scripted response); an op the API does not define fails before
|
|
267
|
+
# it reaches the transport, which is why several may need driving.
|
|
268
|
+
def drive_until(client, what)
|
|
269
|
+
entity_accessors(client).each do |accessor|
|
|
270
|
+
ent = begin
|
|
271
|
+
client.public_send(accessor)
|
|
272
|
+
rescue StandardError
|
|
273
|
+
next
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
["list", "load"].each do |opname|
|
|
277
|
+
next unless ent.respond_to?(opname)
|
|
278
|
+
begin
|
|
279
|
+
ent.public_send(opname)
|
|
280
|
+
rescue StandardError
|
|
281
|
+
# The op's own failure is not the assertion.
|
|
282
|
+
end
|
|
283
|
+
return if yield
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
flunk "no entity operation #{what} - nothing to assert on"
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Drive ops until one request reached the recorder.
|
|
291
|
+
def drive_op(client, wire)
|
|
292
|
+
before = wire.api.length
|
|
293
|
+
drive_until(client, "reached the transport") { before < wire.api.length }
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Drive real entity operations until ONE of them is refused, returning
|
|
297
|
+
# what that op raised (nil if it returned instead). Same search as
|
|
298
|
+
# drive_until and for the same reason: this file is a TEMPLATE and no
|
|
299
|
+
# project's entity names or operations are known here, so `accessor[0].list`
|
|
300
|
+
# is a guess - the fixture's first entity defines `load` and no `list` at
|
|
301
|
+
# all, and the NoMethodError that guess raises satisfies a bare
|
|
302
|
+
# `assert_raises` for entirely the wrong reason while every assertion
|
|
303
|
+
# after it goes unreached.
|
|
304
|
+
#
|
|
305
|
+
# ONE op, not all of them: driving the whole accessor list would consult
|
|
306
|
+
# the chain once per op, which would make 'refused once, not retried'
|
|
307
|
+
# unassertable. The block reports the caller's own observable state
|
|
308
|
+
# saying the chain was actually reached - an op that fails before the
|
|
309
|
+
# transport never consults it at all, so the search moves on rather than
|
|
310
|
+
# asserting on an outcome the feature never took part in.
|
|
311
|
+
def drive_refusal(client)
|
|
312
|
+
entity_accessors(client).each do |accessor|
|
|
313
|
+
ent = begin
|
|
314
|
+
client.public_send(accessor)
|
|
315
|
+
rescue StandardError
|
|
316
|
+
next
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
["list", "load"].each do |opname|
|
|
320
|
+
next unless ent.respond_to?(opname)
|
|
321
|
+
caught = begin
|
|
322
|
+
ent.public_send(opname)
|
|
323
|
+
nil
|
|
324
|
+
rescue StandardError => e
|
|
325
|
+
e
|
|
326
|
+
end
|
|
327
|
+
return caught if yield
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
flunk "no entity operation consulted the chain - nothing to assert on"
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def setenv(name, value)
|
|
335
|
+
ENV[ENVPREFIX + name] = value
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def clearenv(name)
|
|
339
|
+
ENV.delete(ENVPREFIX + name)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# -------------------------------------------------------------------
|
|
343
|
+
# The feature-inactive baseline: bit-identical behaviour.
|
|
344
|
+
|
|
345
|
+
def test_inactive_apikey_option_behaves_exactly_as_before
|
|
346
|
+
client = ProjectNameSDK.test(nil, { "apikey" => "OPTKEY01" })
|
|
347
|
+
fetchdef = client.prepare({ "path" => "/" })
|
|
348
|
+
assert_credential(fetchdef["headers"]["authorization"], "OPTKEY01")
|
|
349
|
+
|
|
350
|
+
assert_nil secrets_feature_of(client),
|
|
351
|
+
"no activation and no extend: the feature must not be installed"
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def test_inactive_no_apikey_means_no_authorization_header
|
|
355
|
+
client = ProjectNameSDK.test(nil, nil)
|
|
356
|
+
fetchdef = client.prepare({ "path" => "/" })
|
|
357
|
+
refute fetchdef["headers"].key?("authorization"),
|
|
358
|
+
"unexpected authorization header: #{fetchdef['headers']['authorization'].inspect}"
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# -------------------------------------------------------------------
|
|
362
|
+
# Active: the provider chain, driven through real entity operations.
|
|
363
|
+
|
|
364
|
+
def test_apikey_option_still_wins_over_the_chain
|
|
365
|
+
setenv("APIKEY", "ENVKEY01")
|
|
366
|
+
wire = Wire.new
|
|
367
|
+
client = secrets_client(wire, {
|
|
368
|
+
"apikey" => "OPTKEY01",
|
|
369
|
+
"feature" => secrets_opts,
|
|
370
|
+
})
|
|
371
|
+
|
|
372
|
+
drive_op(client, wire)
|
|
373
|
+
assert_credential(wire.api[0]["auth"], "OPTKEY01")
|
|
374
|
+
|
|
375
|
+
# The explicit option is a real store, not a special case: a directed
|
|
376
|
+
# read names it like any other.
|
|
377
|
+
feature = secrets_feature_of(client)
|
|
378
|
+
refute_nil feature, "the extend seam did not install the feature"
|
|
379
|
+
assert_equal "OPTKEY01", feature.sekreto.getfrom("options", "apikey")
|
|
380
|
+
ensure
|
|
381
|
+
clearenv("APIKEY")
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def test_an_omitted_apikey_defers_to_the_chain_at_the_transport_seam
|
|
385
|
+
setenv("APIKEY", "ENVKEY02")
|
|
386
|
+
wire = Wire.new
|
|
387
|
+
client = secrets_client(wire, { "feature" => secrets_opts })
|
|
388
|
+
|
|
389
|
+
# Before any op, nothing has been resolved.
|
|
390
|
+
assert_equal "", client.options_map["apikey"]
|
|
391
|
+
|
|
392
|
+
drive_op(client, wire)
|
|
393
|
+
|
|
394
|
+
# Resolution happens AT THE TRANSPORT - the one seam every wire path
|
|
395
|
+
# crosses - so the credential is ON THE WIRE, not merely resolved.
|
|
396
|
+
assert_credential(wire.api[0]["auth"], "ENVKEY02")
|
|
397
|
+
assert_equal "ENVKEY02", secrets_feature_of(client).credential
|
|
398
|
+
ensure
|
|
399
|
+
clearenv("APIKEY")
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def test_custom_provider_objects_are_accepted_verbatim
|
|
403
|
+
asked = []
|
|
404
|
+
wire = Wire.new
|
|
405
|
+
client = secrets_client(wire, {
|
|
406
|
+
"feature" => { "secrets" => {
|
|
407
|
+
"active" => true,
|
|
408
|
+
"providers" => [CustomProvider.new { |name|
|
|
409
|
+
asked << name
|
|
410
|
+
"CUSTOM01"
|
|
411
|
+
}],
|
|
412
|
+
} },
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
drive_op(client, wire)
|
|
416
|
+
assert_credential(wire.api[0]["auth"], "CUSTOM01")
|
|
417
|
+
assert_equal "apikey", asked[0]
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
def test_a_miss_everywhere_leaves_the_header_off
|
|
421
|
+
clearenv("APIKEY")
|
|
422
|
+
wire = Wire.new
|
|
423
|
+
client = secrets_client(wire, { "feature" => secrets_opts })
|
|
424
|
+
|
|
425
|
+
drive_op(client, wire)
|
|
426
|
+
refute wire.api[0]["has"],
|
|
427
|
+
"a chain MISS must fall through to an unauthenticated request, got #{wire.api[0]['auth'].inspect}"
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
def test_a_provider_error_fails_the_op_and_nothing_reaches_the_wire
|
|
431
|
+
asked = false
|
|
432
|
+
wire = Wire.new
|
|
433
|
+
client = secrets_client(wire, {
|
|
434
|
+
"feature" => { "secrets" => {
|
|
435
|
+
"active" => true,
|
|
436
|
+
"providers" => [CustomProvider.new { |_name|
|
|
437
|
+
asked = true
|
|
438
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
439
|
+
}],
|
|
440
|
+
} },
|
|
441
|
+
})
|
|
442
|
+
|
|
443
|
+
drive_until(client, "consulted the chain") { asked }
|
|
444
|
+
|
|
445
|
+
assert_equal 0, wire.api.length,
|
|
446
|
+
"a broken vault must never yield a request: #{wire.api.length} calls went out"
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
# The entity pipeline turns the refusal into a raised SDK error carrying
|
|
450
|
+
# the feature's own code - never a silent unauthenticated send.
|
|
451
|
+
def test_a_provider_error_raises_a_sdk_error_on_the_entity_path
|
|
452
|
+
asked = false
|
|
453
|
+
wire = Wire.new
|
|
454
|
+
client = secrets_client(wire, {
|
|
455
|
+
"feature" => { "secrets" => {
|
|
456
|
+
"active" => true,
|
|
457
|
+
"providers" => [CustomProvider.new { |_name|
|
|
458
|
+
asked = true
|
|
459
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
460
|
+
}],
|
|
461
|
+
} },
|
|
462
|
+
})
|
|
463
|
+
|
|
464
|
+
err = drive_refusal(client) { asked }
|
|
465
|
+
|
|
466
|
+
# An op that RETURNED yields nil here, which is the fail-open
|
|
467
|
+
# regression this case exists to catch - it must not read as a pass.
|
|
468
|
+
assert_kind_of ProjectNameError, err,
|
|
469
|
+
"the entity path did not raise the refusal: #{err.inspect}"
|
|
470
|
+
assert_match(/vault unreachable/, err.to_s)
|
|
471
|
+
assert_equal 0, wire.api.length,
|
|
472
|
+
"a broken vault must never yield a request: #{wire.api.inspect}"
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
# MISS vs ERROR, the invariant the whole feature is worth having for,
|
|
476
|
+
# asserted as a PAIR on the same two-provider chain: a store that does
|
|
477
|
+
# not hold the secret falls through to the next one...
|
|
478
|
+
def test_a_miss_falls_through_to_the_next_provider
|
|
479
|
+
setenv("APIKEY", "ENVKEY04")
|
|
480
|
+
asked = false
|
|
481
|
+
wire = Wire.new
|
|
482
|
+
client = secrets_client(wire, {
|
|
483
|
+
"feature" => { "secrets" => {
|
|
484
|
+
"active" => true,
|
|
485
|
+
"providers" => [
|
|
486
|
+
CustomProvider.new { |_name| asked = true; nil },
|
|
487
|
+
{ "kind" => "env", "prefix" => ENVPREFIX },
|
|
488
|
+
],
|
|
489
|
+
} },
|
|
490
|
+
})
|
|
491
|
+
|
|
492
|
+
drive_op(client, wire)
|
|
493
|
+
assert asked, "the first provider was never consulted"
|
|
494
|
+
assert_credential(wire.api[0]["auth"], "ENVKEY04")
|
|
495
|
+
ensure
|
|
496
|
+
clearenv("APIKEY")
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
# ...while a store that COULD NOT ANSWER fails the operation, even though
|
|
500
|
+
# the very next provider in the chain holds the secret. A broken vault
|
|
501
|
+
# never degrades into an unauthenticated - or a differently-authenticated
|
|
502
|
+
# - request.
|
|
503
|
+
def test_an_error_fails_the_op_even_though_a_later_provider_has_the_secret
|
|
504
|
+
setenv("APIKEY", "ENVKEY05")
|
|
505
|
+
wire = Wire.new
|
|
506
|
+
client = secrets_client(wire, {
|
|
507
|
+
"allow" => { "op" => "direct" },
|
|
508
|
+
"feature" => { "secrets" => {
|
|
509
|
+
"active" => true,
|
|
510
|
+
"providers" => [
|
|
511
|
+
CustomProvider.new { |_name|
|
|
512
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
513
|
+
},
|
|
514
|
+
{ "kind" => "env", "prefix" => ENVPREFIX },
|
|
515
|
+
],
|
|
516
|
+
} },
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
res = client.direct({ "path" => "/probe" })
|
|
520
|
+
refute res["ok"], "an ERROR must not fall through to the next provider"
|
|
521
|
+
assert_equal "secrets_provider", res["err"].code
|
|
522
|
+
assert_equal 0, wire.calls.length
|
|
523
|
+
ensure
|
|
524
|
+
clearenv("APIKEY")
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
def test_a_provider_recovers_after_a_transient_failure
|
|
528
|
+
calls = 0
|
|
529
|
+
wire = Wire.new
|
|
530
|
+
client = secrets_client(wire, {
|
|
531
|
+
"feature" => { "secrets" => {
|
|
532
|
+
"active" => true,
|
|
533
|
+
"providers" => [CustomProvider.new { |_name|
|
|
534
|
+
calls += 1
|
|
535
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable" if calls == 1
|
|
536
|
+
"RECOVERED01"
|
|
537
|
+
}],
|
|
538
|
+
} },
|
|
539
|
+
})
|
|
540
|
+
|
|
541
|
+
# The first op fails closed; a failed resolution is never cached, so the
|
|
542
|
+
# second op asks the chain again and succeeds.
|
|
543
|
+
drive_until(client, "consulted the chain") { calls > 0 }
|
|
544
|
+
assert_equal 0, wire.api.length, "the first op must not reach the wire"
|
|
545
|
+
|
|
546
|
+
drive_op(client, wire)
|
|
547
|
+
assert_credential(wire.api[0]["auth"], "RECOVERED01")
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
# With `cache: false`, a provider that answered once and then reports a
|
|
551
|
+
# MISS (a revoked secret) must RETRACT the credential: nothing the feature
|
|
552
|
+
# published may keep going out on the wire.
|
|
553
|
+
def test_an_uncached_miss_retracts_the_credential
|
|
554
|
+
have = true
|
|
555
|
+
wire = Wire.new
|
|
556
|
+
client = secrets_client(wire, {
|
|
557
|
+
"feature" => { "secrets" => {
|
|
558
|
+
"active" => true,
|
|
559
|
+
"cache" => false,
|
|
560
|
+
"providers" => [CustomProvider.new { |_name|
|
|
561
|
+
have ? "REVOCABLE01" : nil
|
|
562
|
+
}],
|
|
563
|
+
} },
|
|
564
|
+
})
|
|
565
|
+
|
|
566
|
+
drive_op(client, wire)
|
|
567
|
+
assert_credential(wire.api[0]["auth"], "REVOCABLE01")
|
|
568
|
+
|
|
569
|
+
have = false
|
|
570
|
+
|
|
571
|
+
drive_op(client, wire)
|
|
572
|
+
last = wire.api[-1]
|
|
573
|
+
refute(last["has"] && !last["auth"].to_s.empty?,
|
|
574
|
+
"after the chain reports a miss the retracted credential must not go out; the wire saw #{last['auth'].inspect}")
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
def test_auth_nil_suppresses_the_credential_chain_or_no_chain
|
|
578
|
+
setenv("APIKEY", "ENVKEY03")
|
|
579
|
+
wire = Wire.new
|
|
580
|
+
client = secrets_client(wire, {
|
|
581
|
+
"auth" => nil,
|
|
582
|
+
"apikey" => "OPTKEY01",
|
|
583
|
+
"feature" => secrets_opts,
|
|
584
|
+
})
|
|
585
|
+
|
|
586
|
+
drive_op(client, wire)
|
|
587
|
+
|
|
588
|
+
refute wire.api[0]["has"],
|
|
589
|
+
"auth nil must suppress the credential, got #{wire.api[0]['auth'].inspect}"
|
|
590
|
+
|
|
591
|
+
# The suppression survives option validation rather than being replaced
|
|
592
|
+
# by the optspec's default auth map.
|
|
593
|
+
opts = client.options_map
|
|
594
|
+
assert opts.key?("auth"), "options.auth must stay a present nil"
|
|
595
|
+
assert_nil opts["auth"]
|
|
596
|
+
ensure
|
|
597
|
+
clearenv("APIKEY")
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
# -------------------------------------------------------------------
|
|
601
|
+
# The RAW paths - direct and graphql - run no feature hooks at all, so for
|
|
602
|
+
# them the transport seam is the ONLY place resolution can happen.
|
|
603
|
+
|
|
604
|
+
def test_direct_carries_the_chain_credential_and_fails_closed
|
|
605
|
+
setenv("APIKEY", "DIRECTKEY01")
|
|
606
|
+
wire = Wire.new
|
|
607
|
+
client = secrets_client(wire, {
|
|
608
|
+
"allow" => { "op" => "direct" },
|
|
609
|
+
"feature" => secrets_opts,
|
|
610
|
+
})
|
|
611
|
+
|
|
612
|
+
res = client.direct({ "path" => "/direct-probe" })
|
|
613
|
+
assert res["ok"], "direct refused: #{res['err']}"
|
|
614
|
+
assert_equal 1, wire.api.length
|
|
615
|
+
assert_credential(wire.api[0]["auth"], "DIRECTKEY01")
|
|
616
|
+
|
|
617
|
+
# And fail-closed holds for raw access too: a broken chain refuses the
|
|
618
|
+
# direct call before anything reaches the wire.
|
|
619
|
+
brokenwire = Wire.new
|
|
620
|
+
broken = secrets_client(brokenwire, {
|
|
621
|
+
"allow" => { "op" => "direct" },
|
|
622
|
+
"feature" => { "secrets" => {
|
|
623
|
+
"active" => true,
|
|
624
|
+
"providers" => [CustomProvider.new { |_name|
|
|
625
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
626
|
+
}],
|
|
627
|
+
} },
|
|
628
|
+
})
|
|
629
|
+
|
|
630
|
+
res = broken.direct({ "path" => "/direct-probe" })
|
|
631
|
+
refute res["ok"], "a broken chain must refuse the raw path fail-closed"
|
|
632
|
+
assert_equal "secrets_provider", res["err"].code
|
|
633
|
+
assert_equal 0, brokenwire.calls.length,
|
|
634
|
+
"a broken vault must never yield a request on the raw path"
|
|
635
|
+
ensure
|
|
636
|
+
clearenv("APIKEY")
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
def test_graphql_carries_the_chain_credential_and_fails_closed
|
|
640
|
+
setenv("APIKEY", "GQLKEY01")
|
|
641
|
+
wire = Wire.new
|
|
642
|
+
client = secrets_client(wire, {
|
|
643
|
+
"allow" => { "op" => "graphql" },
|
|
644
|
+
"feature" => secrets_opts,
|
|
645
|
+
})
|
|
646
|
+
|
|
647
|
+
client.graphql("{ probe }")
|
|
648
|
+
assert_equal 1, wire.api.length
|
|
649
|
+
assert_credential(wire.api[0]["auth"], "GQLKEY01")
|
|
650
|
+
|
|
651
|
+
brokenwire = Wire.new
|
|
652
|
+
broken = secrets_client(brokenwire, {
|
|
653
|
+
"allow" => { "op" => "graphql" },
|
|
654
|
+
"feature" => { "secrets" => {
|
|
655
|
+
"active" => true,
|
|
656
|
+
"providers" => [CustomProvider.new { |_name|
|
|
657
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
658
|
+
}],
|
|
659
|
+
} },
|
|
660
|
+
})
|
|
661
|
+
|
|
662
|
+
res = broken.graphql("{ probe }")
|
|
663
|
+
refute res["ok"], "a broken chain must refuse graphql fail-closed"
|
|
664
|
+
assert_equal 0, brokenwire.calls.length
|
|
665
|
+
ensure
|
|
666
|
+
clearenv("APIKEY")
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
# -------------------------------------------------------------------
|
|
670
|
+
# The access-token exchange.
|
|
671
|
+
|
|
672
|
+
def test_the_refresh_token_buys_an_access_token_and_a_spent_one_is_rebought_once
|
|
673
|
+
setenv("REFRESH_TOKEN", "REFRESH01")
|
|
674
|
+
wire = Wire.new
|
|
675
|
+
# First API call is refused, the retry succeeds.
|
|
676
|
+
wire.apistatus = [401, 200]
|
|
677
|
+
|
|
678
|
+
client = secrets_client(wire, {
|
|
679
|
+
"feature" => secrets_opts({
|
|
680
|
+
"name" => "refresh_token",
|
|
681
|
+
"exchange" => { "active" => true },
|
|
682
|
+
}),
|
|
683
|
+
})
|
|
684
|
+
|
|
685
|
+
drive_op(client, wire)
|
|
686
|
+
|
|
687
|
+
assert_equal 2, wire.token.length,
|
|
688
|
+
"expected the initial purchase plus one rebuy, got #{wire.token.length}"
|
|
689
|
+
assert_includes wire.token[0]["body"].to_s, "REFRESH01"
|
|
690
|
+
|
|
691
|
+
api = wire.api
|
|
692
|
+
assert_equal 2, api.length, "expected the request to be retried exactly once"
|
|
693
|
+
assert_credential(api[0]["auth"], "ACCESS01")
|
|
694
|
+
# The retry must carry the NEW token, not the spent one.
|
|
695
|
+
assert_credential(api[1]["auth"], "ACCESS02")
|
|
696
|
+
ensure
|
|
697
|
+
clearenv("REFRESH_TOKEN")
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
# A second refusal on a token bought moments ago is a real failure, not a
|
|
701
|
+
# spin: exactly one rebuy, and the refusal is returned as it stands.
|
|
702
|
+
def test_a_second_refusal_is_returned_as_is
|
|
703
|
+
setenv("REFRESH_TOKEN", "REFRESH01")
|
|
704
|
+
wire = Wire.new
|
|
705
|
+
wire.apistatus = [401]
|
|
706
|
+
|
|
707
|
+
client = secrets_client(wire, {
|
|
708
|
+
"feature" => secrets_opts({
|
|
709
|
+
"name" => "refresh_token",
|
|
710
|
+
"exchange" => { "active" => true },
|
|
711
|
+
}),
|
|
712
|
+
})
|
|
713
|
+
|
|
714
|
+
drive_op(client, wire)
|
|
715
|
+
|
|
716
|
+
assert_equal 2, wire.api.length, "one attempt plus one retry, no more"
|
|
717
|
+
assert_equal 2, wire.token.length
|
|
718
|
+
ensure
|
|
719
|
+
clearenv("REFRESH_TOKEN")
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
# Test mode buys nothing and needs no token endpoint, so an offline suite
|
|
723
|
+
# never makes the one HTTP call the test mock cannot stop.
|
|
724
|
+
def test_test_mode_buys_nothing_and_needs_no_token_endpoint
|
|
725
|
+
setenv("REFRESH_TOKEN", "REFRESH01")
|
|
726
|
+
wire = Wire.new
|
|
727
|
+
|
|
728
|
+
client = with_secrets do |extend_it|
|
|
729
|
+
opts = {
|
|
730
|
+
"system" => { "fetch" => wire.fetch },
|
|
731
|
+
"feature" => secrets_opts({
|
|
732
|
+
"name" => "refresh_token",
|
|
733
|
+
"exchange" => { "active" => true },
|
|
734
|
+
}),
|
|
735
|
+
}
|
|
736
|
+
opts["extend"] = [ProjectNameSecretsFeature.new] if extend_it
|
|
737
|
+
ProjectNameSDK.test(nil, opts)
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
drive_until(client, "resolved the fake token") do
|
|
741
|
+
!secrets_feature_of(client).credential.to_s.empty?
|
|
742
|
+
end
|
|
743
|
+
|
|
744
|
+
assert_equal 0, wire.calls.length, "test mode must not do IO"
|
|
745
|
+
# A deterministic placeholder, so offline suites need no configuration.
|
|
746
|
+
assert_equal "test-access_token", secrets_feature_of(client).credential
|
|
747
|
+
ensure
|
|
748
|
+
clearenv("REFRESH_TOKEN")
|
|
749
|
+
end
|
|
750
|
+
|
|
751
|
+
# A failed PURCHASE answers with the API's own refusal, not the exchange
|
|
752
|
+
# error: the caller asked for data, and the 401 is the more useful of the
|
|
753
|
+
# two.
|
|
754
|
+
def test_a_failed_purchase_answers_with_the_apis_own_refusal
|
|
755
|
+
clearenv("REFRESH_TOKEN")
|
|
756
|
+
wire = Wire.new
|
|
757
|
+
wire.apistatus = [401]
|
|
758
|
+
|
|
759
|
+
client = secrets_client(wire, {
|
|
760
|
+
"allow" => { "op" => "direct" },
|
|
761
|
+
"apikey" => "STALE01",
|
|
762
|
+
"feature" => secrets_opts({
|
|
763
|
+
"name" => "refresh_token",
|
|
764
|
+
"exchange" => { "active" => true },
|
|
765
|
+
}),
|
|
766
|
+
})
|
|
767
|
+
|
|
768
|
+
res = client.direct({ "path" => "/probe" })
|
|
769
|
+
|
|
770
|
+
# 401 from the API, surfaced as the raw path's ok:false - not a token
|
|
771
|
+
# exchange error.
|
|
772
|
+
refute res["ok"]
|
|
773
|
+
assert_equal 401, res["status"]
|
|
774
|
+
assert_equal 1, wire.api.length
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
# The exchange with NO system.fetch: the raw fallback transport carries
|
|
778
|
+
# the purchase end to end over REAL HTTP, and the body is MARSHALLED - a
|
|
779
|
+
# refresh token full of JSON-hostile characters must arrive as that
|
|
780
|
+
# literal value.
|
|
781
|
+
def test_the_exchange_works_with_ordinary_options_and_marshals_its_body
|
|
782
|
+
tricky = "re\"fresh\\to\nken"
|
|
783
|
+
|
|
784
|
+
server = HttpStub.new
|
|
785
|
+
port = server.start
|
|
786
|
+
|
|
787
|
+
begin
|
|
788
|
+
client = with_secrets do |extend_it|
|
|
789
|
+
opts = {
|
|
790
|
+
"base" => "http://127.0.0.1:#{port}/api",
|
|
791
|
+
"allow" => { "op" => "direct" },
|
|
792
|
+
"feature" => { "secrets" => {
|
|
793
|
+
"active" => true,
|
|
794
|
+
"name" => "refresh_token",
|
|
795
|
+
"exchange" => { "active" => true, "refresh" => tricky },
|
|
796
|
+
} },
|
|
797
|
+
}
|
|
798
|
+
opts["extend"] = [ProjectNameSecretsFeature.new] if extend_it
|
|
799
|
+
ProjectNameSDK.new(opts)
|
|
800
|
+
end
|
|
801
|
+
|
|
802
|
+
# No system.fetch anywhere: the API call takes the SDK's default
|
|
803
|
+
# transport and the token purchase takes the feature's raw fallback.
|
|
804
|
+
res = client.direct({ "path" => "/probe" })
|
|
805
|
+
assert res["ok"], "the raw fallback exchange failed: #{res['err']}"
|
|
806
|
+
ensure
|
|
807
|
+
server.stop
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
assert_equal tricky, server.refresh,
|
|
811
|
+
"the refresh token must arrive as its literal value (marshalled, not concatenated)"
|
|
812
|
+
assert_credential(server.auth, "RAWTOK01")
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
# -------------------------------------------------------------------
|
|
816
|
+
# The refusal is NOT retried. The gate lives at the transport, so a
|
|
817
|
+
# provider ERROR must fail the operation once - never spin the chain, and
|
|
818
|
+
# never let a later attempt through unauthenticated.
|
|
819
|
+
def test_a_provider_error_is_refused_once_and_not_retried
|
|
820
|
+
calls = 0
|
|
821
|
+
wire = Wire.new
|
|
822
|
+
client = secrets_client(wire, {
|
|
823
|
+
"feature" => {
|
|
824
|
+
"secrets" => {
|
|
825
|
+
"active" => true,
|
|
826
|
+
"providers" => [CustomProvider.new { |_name|
|
|
827
|
+
calls += 1
|
|
828
|
+
raise VoxgigSekreto::SekretoError, "vault unreachable"
|
|
829
|
+
}],
|
|
830
|
+
},
|
|
831
|
+
},
|
|
832
|
+
})
|
|
833
|
+
|
|
834
|
+
err = drive_refusal(client) { 0 < calls }
|
|
835
|
+
|
|
836
|
+
assert_kind_of ProjectNameError, err,
|
|
837
|
+
"the entity path did not raise the refusal: #{err.inspect}"
|
|
838
|
+
assert_equal 1, calls, "the refusal must not be retried"
|
|
839
|
+
assert_equal 0, wire.calls.length,
|
|
840
|
+
"a refused op must never yield a request: #{wire.calls.inspect}"
|
|
841
|
+
end
|
|
842
|
+
end
|