@voxgig/sdkgen 4.9.0 → 4.11.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 +1001 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/clojure.aon +10 -0
- package/project/.sdk/model/target/cpp.aon +18 -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/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- 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 +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- 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/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -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/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- 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/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- 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 +530 -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 +581 -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/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- 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 +915 -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 +1787 -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 +839 -0
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1113 -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 +2 -2
- 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 +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
- 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 +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
- package/project/.sdk/tm/go/feature/secrets_feature.go +48 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +239 -0
- package/project/.sdk/tm/go/test/omni/omni.go +2 -2
- package/project/.sdk/tm/go/test/omni/util.go +2 -2
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/feature/SecretsFeature.java +791 -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 +1050 -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 +454 -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 +1 -1
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +1019 -0
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +684 -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 +1217 -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/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- 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/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- 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 +696 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +1004 -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 +694 -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 +1165 -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 +2 -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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
- 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 +583 -0
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +935 -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 +984 -0
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1605 -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 +578 -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 +1042 -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/SecretsFeature.ts +35 -12
- 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 +1 -1
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- 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/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +2 -2
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
- 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/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/{dart/src/feature/audit → c/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/base → clojure/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cache → cpp/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/clienttrack → csharp/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cost → elixir/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/debug → java/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/idempotency → kotlin/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/log → lua/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/metrics → ocaml/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/netsim → perl/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/paging → php/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/proxy → rb/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/ratelimit → rust/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/rbac → scala/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/retry → swift/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/streaming → zig/src/feature/secrets}/.gitkeep +0 -0
|
@@ -0,0 +1,1050 @@
|
|
|
1
|
+
// Behavioural tests for the secrets feature (vendored @voxgig/sekreto) -
|
|
2
|
+
// the java port of tm/ts/test/feature/secrets/Secrets.test.ts and
|
|
3
|
+
// tm/go/test/feature/secrets/secrets_feature_test.go.
|
|
4
|
+
//
|
|
5
|
+
// The contract under test: the `apikey` OPTION keeps its exact old meaning
|
|
6
|
+
// and always wins, because SecretsFeature places it FIRST in the provider
|
|
7
|
+
// chain (a `memory` store named `options`) - explicit-beats-lookup falls
|
|
8
|
+
// out of sekreto's first-hit rule rather than from special-case logic.
|
|
9
|
+
// With the feature inactive nothing changes at all. With it active and the
|
|
10
|
+
// option unset, the chain (memory, env, dotenv, a custom provider, a
|
|
11
|
+
// vault) supplies the credential instead.
|
|
12
|
+
//
|
|
13
|
+
// This file lives in the test `feature/` container on purpose: `target
|
|
14
|
+
// add` trims it, along with the feature source and the vendored library,
|
|
15
|
+
// for a project whose model does not select `secrets`.
|
|
16
|
+
//
|
|
17
|
+
// WHY A LIVE CLIENT, NEVER FeatureHarness. FeatureHarness builds its
|
|
18
|
+
// utility from client.getUtility(), which is Utility.copy() - a SNAPSHOT
|
|
19
|
+
// of the function fields. A harness-based suite would therefore wrap a
|
|
20
|
+
// fetcher the real client never consults, and every "nothing reached the
|
|
21
|
+
// wire" assertion would hold vacuously, on a healthy SDK carrying no
|
|
22
|
+
// secrets feature at all. An assertion that cannot fail pins no rule. So
|
|
23
|
+
// every case here builds a LIVE client with a recording `system.fetch` and
|
|
24
|
+
// counts what actually crossed the transport, and every fail-closed case
|
|
25
|
+
// carries a CONTROL leg - the same construction with a WORKING provider,
|
|
26
|
+
// which must reach that same transport exactly once - so that a zero means
|
|
27
|
+
// REFUSED rather than UNWIRED.
|
|
28
|
+
//
|
|
29
|
+
// The chain is driven from `memory` stores rather than `env`, because java
|
|
30
|
+
// cannot portably mutate its own environment: a memory store answers the
|
|
31
|
+
// same way through the same first-hit rule, and the store this suite has
|
|
32
|
+
// to tell apart from the options seat is named, not typed.
|
|
33
|
+
|
|
34
|
+
package JAVAPACKAGE.sdktest.feature.secrets;
|
|
35
|
+
|
|
36
|
+
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
37
|
+
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
38
|
+
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
39
|
+
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
40
|
+
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
41
|
+
import static org.junit.jupiter.api.Assertions.fail;
|
|
42
|
+
|
|
43
|
+
import java.lang.reflect.Method;
|
|
44
|
+
import java.util.ArrayList;
|
|
45
|
+
import java.util.Collections;
|
|
46
|
+
import java.util.LinkedHashMap;
|
|
47
|
+
import java.util.List;
|
|
48
|
+
import java.util.Map;
|
|
49
|
+
import java.util.function.BiFunction;
|
|
50
|
+
import java.util.function.BooleanSupplier;
|
|
51
|
+
import java.util.function.Supplier;
|
|
52
|
+
|
|
53
|
+
import org.junit.jupiter.api.Test;
|
|
54
|
+
|
|
55
|
+
import JAVAPACKAGE.core.Config;
|
|
56
|
+
import JAVAPACKAGE.core.Feature;
|
|
57
|
+
import JAVAPACKAGE.core.ProjectNameSDK;
|
|
58
|
+
import JAVAPACKAGE.core.SdkEntity;
|
|
59
|
+
import JAVAPACKAGE.feature.SecretsFeature;
|
|
60
|
+
import JAVAPACKAGE.feature.secrets.plugin.Definition;
|
|
61
|
+
import JAVAPACKAGE.feature.secrets.sekreto.Provider;
|
|
62
|
+
|
|
63
|
+
@SuppressWarnings({"unchecked"})
|
|
64
|
+
public class SecretsFeatureTest {
|
|
65
|
+
|
|
66
|
+
static final String BASE = "http://secrets.test/api";
|
|
67
|
+
|
|
68
|
+
// ------------------------------------------------------------------
|
|
69
|
+
// The recording transport: system.fetch for a LIVE client, scripting one
|
|
70
|
+
// status per API call (the last repeating) and a token endpoint for the
|
|
71
|
+
// exchange cases.
|
|
72
|
+
|
|
73
|
+
static final class Call {
|
|
74
|
+
final String url;
|
|
75
|
+
final String auth;
|
|
76
|
+
final boolean has;
|
|
77
|
+
final String body;
|
|
78
|
+
|
|
79
|
+
Call(String url, String auth, boolean has, String body) {
|
|
80
|
+
this.url = url;
|
|
81
|
+
this.auth = auth;
|
|
82
|
+
this.has = has;
|
|
83
|
+
this.body = body;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static final class Wire implements BiFunction<String, Map<String, Object>, Object> {
|
|
88
|
+
final List<Call> calls = Collections.synchronizedList(new ArrayList<>());
|
|
89
|
+
List<Integer> apistatus = new ArrayList<>(List.of(200));
|
|
90
|
+
List<String> tokens = new ArrayList<>(List.of("ACCESS01", "ACCESS02", "ACCESS03"));
|
|
91
|
+
String tokenpath = "auth/token";
|
|
92
|
+
String respfield = "access_token";
|
|
93
|
+
int issued = 0;
|
|
94
|
+
int apicalls = 0;
|
|
95
|
+
|
|
96
|
+
@Override
|
|
97
|
+
public synchronized Object apply(String url, Map<String, Object> fetchdef) {
|
|
98
|
+
String auth = "";
|
|
99
|
+
boolean has = false;
|
|
100
|
+
Object headers = fetchdef == null ? null : fetchdef.get("headers");
|
|
101
|
+
if (headers instanceof Map) {
|
|
102
|
+
Map<String, Object> hm = (Map<String, Object>) headers;
|
|
103
|
+
if (hm.containsKey("authorization")) {
|
|
104
|
+
has = true;
|
|
105
|
+
Object v = hm.get("authorization");
|
|
106
|
+
auth = v instanceof String ? (String) v : "";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
Object bodyRaw = fetchdef == null ? null : fetchdef.get("body");
|
|
110
|
+
calls.add(new Call(url, auth, has, bodyRaw instanceof String ? (String) bodyRaw : ""));
|
|
111
|
+
|
|
112
|
+
if (url.endsWith("/" + tokenpath)) {
|
|
113
|
+
String token = tokens.get(Math.min(issued, tokens.size() - 1));
|
|
114
|
+
issued++;
|
|
115
|
+
Map<String, Object> payload = new LinkedHashMap<>();
|
|
116
|
+
payload.put(respfield, token);
|
|
117
|
+
return response(200, payload);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
int status = apistatus.get(Math.min(apicalls, apistatus.size() - 1));
|
|
121
|
+
apicalls++;
|
|
122
|
+
Map<String, Object> payload = new LinkedHashMap<>();
|
|
123
|
+
payload.put("ok", status < 400);
|
|
124
|
+
return response(status, payload);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
static Map<String, Object> response(int status, Map<String, Object> payload) {
|
|
128
|
+
final Object body = payload;
|
|
129
|
+
Map<String, Object> out = new LinkedHashMap<>();
|
|
130
|
+
out.put("status", status);
|
|
131
|
+
out.put("statusText", "OK");
|
|
132
|
+
out.put("headers", new LinkedHashMap<String, Object>());
|
|
133
|
+
out.put("json", (Supplier<Object>) () -> body);
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// The calls that did NOT go to the token endpoint.
|
|
138
|
+
List<Call> api() {
|
|
139
|
+
List<Call> out = new ArrayList<>();
|
|
140
|
+
synchronized (calls) {
|
|
141
|
+
for (Call c : calls) {
|
|
142
|
+
if (!c.url.endsWith("/" + tokenpath)) {
|
|
143
|
+
out.add(c);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
List<Call> token() {
|
|
151
|
+
List<Call> out = new ArrayList<>();
|
|
152
|
+
synchronized (calls) {
|
|
153
|
+
for (Call c : calls) {
|
|
154
|
+
if (c.url.endsWith("/" + tokenpath)) {
|
|
155
|
+
out.add(c);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// What went out, for a failure message that names the leak rather than
|
|
163
|
+
// just its count.
|
|
164
|
+
String leak() {
|
|
165
|
+
List<String> out = new ArrayList<>();
|
|
166
|
+
for (Call c : api()) {
|
|
167
|
+
out.add(c.url + " auth=" + (c.has ? "\"" + c.auth + "\"" : "<absent>"));
|
|
168
|
+
}
|
|
169
|
+
return String.join(", ", out);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// ------------------------------------------------------------------
|
|
174
|
+
// Support.
|
|
175
|
+
|
|
176
|
+
// The Authorization header carries the SPEC's credential prefix, which a
|
|
177
|
+
// TEMPLATE cannot know: an OpenAPI `http`/`bearer` scheme gives
|
|
178
|
+
// `Bearer <token>`, an apiKey scheme the raw token. So assert on the
|
|
179
|
+
// CREDENTIAL and let the prefix be whatever this SDK's API declares -
|
|
180
|
+
// pinning the whole header value passes only for a prefix-less API, and
|
|
181
|
+
// this file ships to every project that selects the feature.
|
|
182
|
+
static void credentialIs(String header, String token) {
|
|
183
|
+
String got = header == null ? "" : header;
|
|
184
|
+
assertTrue(got.equals(token) || got.endsWith(" " + token),
|
|
185
|
+
"expected the authorization header to carry " + token + ", got: \"" + got + "\"");
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static Map<String, Object> map(Object... kv) {
|
|
189
|
+
Map<String, Object> out = new LinkedHashMap<>();
|
|
190
|
+
for (int i = 0; i + 1 < kv.length; i += 2) {
|
|
191
|
+
out.put((String) kv[i], kv[i + 1]);
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// A LIVE client wired to the recording transport, with raw access
|
|
197
|
+
// allowed. `allow.op` is named explicitly: a project that narrows the
|
|
198
|
+
// default set would otherwise turn the raw cases into a false RED (the
|
|
199
|
+
// control leg refused before it reached the transport), and the rule
|
|
200
|
+
// under test lives at the transport, downstream of the allow gate either
|
|
201
|
+
// way.
|
|
202
|
+
static ProjectNameSDK liveClient(Wire wire, Map<String, Object> extra) {
|
|
203
|
+
Map<String, Object> opts = map(
|
|
204
|
+
"base", BASE,
|
|
205
|
+
"allow", map("op", "direct,graphql,load,list"),
|
|
206
|
+
"system", map("fetch", wire));
|
|
207
|
+
if (extra != null) {
|
|
208
|
+
opts.putAll(extra);
|
|
209
|
+
}
|
|
210
|
+
return withSecrets(opts, ProjectNameSDK::new);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Construct the client, and ADOPT the feature through the `extend` seam
|
|
214
|
+
// ONLY when the generated config did not already install it.
|
|
215
|
+
//
|
|
216
|
+
// When this SDK was generated with `secrets` model-ACTIVE the ordinary
|
|
217
|
+
// factory path builds the instance, and adding a second through extend
|
|
218
|
+
// would DOUBLE the feature: two transport wraps, two resolutions, and a
|
|
219
|
+
// token purchase the assertions cannot account for. When the model
|
|
220
|
+
// declares the feature but leaves it off, Config.makeFeature has no case
|
|
221
|
+
// for it and extend is the only way in - which is what keeps this suite
|
|
222
|
+
// meaningful in a tree that carries the source without switching it on.
|
|
223
|
+
// (The go donor's withSecrets, same guard, same reason.)
|
|
224
|
+
static ProjectNameSDK withSecrets(Map<String, Object> opts,
|
|
225
|
+
java.util.function.Function<Map<String, Object>, ProjectNameSDK> build) {
|
|
226
|
+
ProjectNameSDK client = build.apply(opts);
|
|
227
|
+
if (featureOf(client) != null) {
|
|
228
|
+
return client;
|
|
229
|
+
}
|
|
230
|
+
Map<String, Object> adopted = new LinkedHashMap<>(opts);
|
|
231
|
+
adopted.put("extend", List.of(new SecretsFeature()));
|
|
232
|
+
return build.apply(adopted);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// The secrets feature options: active, with the given provider chain.
|
|
236
|
+
static Map<String, Object> secretsOpts(List<Object> providers, Object... extra) {
|
|
237
|
+
Map<String, Object> fopts = map("active", true, "providers", providers);
|
|
238
|
+
for (int i = 0; i + 1 < extra.length; i += 2) {
|
|
239
|
+
fopts.put((String) extra[i], extra[i + 1]);
|
|
240
|
+
}
|
|
241
|
+
return map("feature", map("secrets", fopts));
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// The live feature, dug back out of the client for assertions against
|
|
245
|
+
// its Sekreto instance and its resolved credential.
|
|
246
|
+
//
|
|
247
|
+
// A null here is a real failure to REPORT, never a reason to skip - a
|
|
248
|
+
// skipped fail-closed test is exactly the hole this suite exists to
|
|
249
|
+
// close. withSecrets below has already tried both ways in.
|
|
250
|
+
static SecretsFeature featureOf(ProjectNameSDK client) {
|
|
251
|
+
for (Feature f : client.features) {
|
|
252
|
+
if (f instanceof SecretsFeature) {
|
|
253
|
+
return (SecretsFeature) f;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static SecretsFeature requireFeature(ProjectNameSDK client) {
|
|
260
|
+
SecretsFeature f = featureOf(client);
|
|
261
|
+
assertNotNull(f, "the secrets feature is not installed on this client:"
|
|
262
|
+
+ " neither the generated config nor the `extend` seam produced one"
|
|
263
|
+
+ " (options.extend is dropped when the optspec does not declare it)");
|
|
264
|
+
return f;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// driveEntityOpUntil performs real entity operations - the path that
|
|
268
|
+
// runs the whole pipeline - until `stop` reports the observable state a
|
|
269
|
+
// test is waiting for. Each op's own outcome is irrelevant (no seeded
|
|
270
|
+
// data, a scripted response); an op the API does not define fails BEFORE
|
|
271
|
+
// the transport, which is why several may need driving. Entity
|
|
272
|
+
// accessors are found by SHAPE rather than by name, because this file is
|
|
273
|
+
// a TEMPLATE and no project's entity names are known here.
|
|
274
|
+
static void driveEntityOpUntil(ProjectNameSDK client, String what, BooleanSupplier stop) {
|
|
275
|
+
for (Method m : client.getClass().getMethods()) {
|
|
276
|
+
if (!SdkEntity.class.isAssignableFrom(m.getReturnType())) {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
if (1 != m.getParameterCount() || !Map.class.isAssignableFrom(m.getParameterTypes()[0])) {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
SdkEntity ent;
|
|
284
|
+
try {
|
|
285
|
+
ent = (SdkEntity) m.invoke(client, (Object) null);
|
|
286
|
+
}
|
|
287
|
+
catch (ReflectiveOperationException e) {
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (ent == null) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
for (int op = 0; op < 2; op++) {
|
|
295
|
+
try {
|
|
296
|
+
if (0 == op) {
|
|
297
|
+
ent.list(null, null);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
ent.load(map("id", "x"), null);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (RuntimeException err) {
|
|
304
|
+
lasterr.set(err);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (stop.getAsBoolean()) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
fail("no entity operation " + what + " - nothing to assert on");
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// The last error an entity op raised, for the fail-closed cases that
|
|
317
|
+
// assert on the PROVIDER'S OWN message.
|
|
318
|
+
static final ThreadLocal<RuntimeException> lasterr = new ThreadLocal<>();
|
|
319
|
+
|
|
320
|
+
static void driveEntityOp(ProjectNameSDK client, Wire wire) {
|
|
321
|
+
int before = wire.api().size();
|
|
322
|
+
driveEntityOpUntil(client, "reached the transport", () -> before < wire.api().size());
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// A sekreto Provider built in code: the interface is two methods, and a
|
|
326
|
+
// null lookup is a MISS.
|
|
327
|
+
static final class TestProvider implements Provider {
|
|
328
|
+
final java.util.function.Function<String, String> fn;
|
|
329
|
+
final List<String> asked = Collections.synchronizedList(new ArrayList<>());
|
|
330
|
+
|
|
331
|
+
TestProvider(java.util.function.Function<String, String> fn) {
|
|
332
|
+
this.fn = fn;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
@Override
|
|
336
|
+
public String lookup(String name) {
|
|
337
|
+
asked.add(name);
|
|
338
|
+
return fn.apply(name);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
@Override
|
|
342
|
+
public String describe() {
|
|
343
|
+
return "custom:test";
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
static final String BROKENMSG = "vault unreachable";
|
|
348
|
+
|
|
349
|
+
static Provider brokenProvider() {
|
|
350
|
+
return new TestProvider((name) -> {
|
|
351
|
+
throw new IllegalStateException(BROKENMSG);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
static Provider workingProvider(String value) {
|
|
356
|
+
return new TestProvider((name) -> "apikey".equals(name) ? value : null);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
static Map<String, Object> memoryStore(String name, String key, String value) {
|
|
360
|
+
return map("kind", "memory", "name", name, "values", map(key, value));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// ------------------------------------------------------------------
|
|
364
|
+
// The feature-inactive baseline: bit-identical behaviour.
|
|
365
|
+
|
|
366
|
+
@Test
|
|
367
|
+
public void inactive_apikeyOptionBehavesExactlyAsBefore() {
|
|
368
|
+
ProjectNameSDK client = ProjectNameSDK.testSDK(null, map(
|
|
369
|
+
"apikey", "OPTKEY01",
|
|
370
|
+
"feature", map("secrets", map("active", false))));
|
|
371
|
+
|
|
372
|
+
Map<String, Object> fetchdef = client.prepare(map("path", "/"));
|
|
373
|
+
Map<String, Object> headers = (Map<String, Object>) fetchdef.get("headers");
|
|
374
|
+
credentialIs((String) headers.get("authorization"), "OPTKEY01");
|
|
375
|
+
|
|
376
|
+
assertNull(featureOf(client),
|
|
377
|
+
"the feature is switched off: it must not be installed");
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
@Test
|
|
381
|
+
public void inactive_noApikeyMeansNoAuthorizationHeader() {
|
|
382
|
+
ProjectNameSDK client = ProjectNameSDK.testSDK(null, map(
|
|
383
|
+
"feature", map("secrets", map("active", false))));
|
|
384
|
+
|
|
385
|
+
Map<String, Object> fetchdef = client.prepare(map("path", "/"));
|
|
386
|
+
Map<String, Object> headers = (Map<String, Object>) fetchdef.get("headers");
|
|
387
|
+
assertFalse(headers.containsKey("authorization"),
|
|
388
|
+
"unexpected authorization header: " + headers.get("authorization"));
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ------------------------------------------------------------------
|
|
392
|
+
// Active: the provider chain, driven through real entity operations.
|
|
393
|
+
|
|
394
|
+
@Test
|
|
395
|
+
public void active_apikeyOptionStillWinsOverTheChain() {
|
|
396
|
+
Wire wire = new Wire();
|
|
397
|
+
Map<String, Object> opts = secretsOpts(
|
|
398
|
+
List.of(memoryStore("envlike", "APIKEY", "CHAINKEY01")));
|
|
399
|
+
opts.put("apikey", "OPTKEY01");
|
|
400
|
+
ProjectNameSDK client = liveClient(wire, opts);
|
|
401
|
+
|
|
402
|
+
driveEntityOp(client, wire);
|
|
403
|
+
credentialIs(wire.api().get(0).auth, "OPTKEY01");
|
|
404
|
+
|
|
405
|
+
// The explicit option is a real store, not a special case: a directed
|
|
406
|
+
// read names it like any other.
|
|
407
|
+
assertEquals("OPTKEY01",
|
|
408
|
+
requireFeature(client).sekreto().getfrom("options", "apikey"),
|
|
409
|
+
"the explicit apikey must be a real `options` store in the chain");
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
@Test
|
|
413
|
+
public void active_omittedApikeyDefersToTheChainAtTheTransportSeam() {
|
|
414
|
+
Wire wire = new Wire();
|
|
415
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
416
|
+
List.of(memoryStore("envlike", "APIKEY", "CHAINKEY02"))));
|
|
417
|
+
|
|
418
|
+
// Before any op, nothing has been resolved.
|
|
419
|
+
assertEquals("", client.optionsMap().get("apikey"),
|
|
420
|
+
"the apikey resolved before any operation");
|
|
421
|
+
|
|
422
|
+
driveEntityOp(client, wire);
|
|
423
|
+
|
|
424
|
+
// Resolution happens AT THE TRANSPORT - the one seam every wire path
|
|
425
|
+
// crosses - so the credential is ON THE WIRE, not merely resolved.
|
|
426
|
+
// java holds it in FEATURE STATE and injects it there; the shared
|
|
427
|
+
// options map is never mutated (it stays raced-read-safe for every
|
|
428
|
+
// concurrent operation), so the state assertion reads the feature.
|
|
429
|
+
credentialIs(wire.api().get(0).auth, "CHAINKEY02");
|
|
430
|
+
assertEquals("CHAINKEY02", requireFeature(client).credential());
|
|
431
|
+
assertEquals("", client.optionsMap().get("apikey"),
|
|
432
|
+
"the shared options map must stay unwritten");
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
@Test
|
|
436
|
+
public void active_customProviderObjectsAreAcceptedVerbatim() {
|
|
437
|
+
Wire wire = new Wire();
|
|
438
|
+
TestProvider provider = new TestProvider(
|
|
439
|
+
(name) -> "apikey".equals(name) ? "CUSTOM01" : null);
|
|
440
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(List.of(provider)));
|
|
441
|
+
|
|
442
|
+
driveEntityOp(client, wire);
|
|
443
|
+
credentialIs(wire.api().get(0).auth, "CUSTOM01");
|
|
444
|
+
assertTrue(0 < provider.asked.size() && "apikey".equals(provider.asked.get(0)),
|
|
445
|
+
"the custom provider was asked " + provider.asked + ", want [apikey ...]");
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
@Test
|
|
449
|
+
public void active_aMissEverywhereLeavesTheHeaderOff() {
|
|
450
|
+
Wire wire = new Wire();
|
|
451
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
452
|
+
List.of(memoryStore("envlike", "SOMETHINGELSE", "x"))));
|
|
453
|
+
|
|
454
|
+
driveEntityOp(client, wire);
|
|
455
|
+
Call call = wire.api().get(0);
|
|
456
|
+
assertFalse(call.has,
|
|
457
|
+
"a chain MISS must fall through to an unauthenticated request,"
|
|
458
|
+
+ " got header \"" + call.auth + "\"");
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// ------------------------------------------------------------------
|
|
462
|
+
// FAIL CLOSED. sekreto's miss-vs-error invariant: a MISS falls through
|
|
463
|
+
// to the next provider, an ERROR does not. A broken vault must never
|
|
464
|
+
// degrade into an unauthenticated request.
|
|
465
|
+
//
|
|
466
|
+
// Each case proves its own counter FIRST, with the same construction and
|
|
467
|
+
// a WORKING provider: one request must reach the recording transport
|
|
468
|
+
// carrying the resolved credential. Only then does a zero from the
|
|
469
|
+
// broken provider mean REFUSED rather than UNWIRED. And the failure is
|
|
470
|
+
// matched on the PROVIDER'S OWN message, so an unrelated failure (a
|
|
471
|
+
// missing route, a blocked op) cannot stand in for fail-closed.
|
|
472
|
+
|
|
473
|
+
@Test
|
|
474
|
+
public void active_aProviderErrorFailsTheEntityOpAndNothingReachesTheWire() {
|
|
475
|
+
// CONTROL FIRST, so the zero below is known to be observable at all.
|
|
476
|
+
Wire control = new Wire();
|
|
477
|
+
ProjectNameSDK ok = liveClient(control,
|
|
478
|
+
secretsOpts(List.of(workingProvider("RAWKEY01"))));
|
|
479
|
+
driveEntityOp(ok, control);
|
|
480
|
+
assertEquals(1, control.api().size(),
|
|
481
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
482
|
+
+ " observe a request going out at all");
|
|
483
|
+
credentialIs(control.api().get(0).auth, "RAWKEY01");
|
|
484
|
+
|
|
485
|
+
// THE RULE.
|
|
486
|
+
Wire wire = new Wire();
|
|
487
|
+
TestProvider broken = (TestProvider) brokenProvider();
|
|
488
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(List.of(broken)));
|
|
489
|
+
|
|
490
|
+
lasterr.set(null);
|
|
491
|
+
driveEntityOpUntil(client, "consulted the chain", () -> 0 < broken.asked.size());
|
|
492
|
+
|
|
493
|
+
assertEquals(0, wire.api().size(),
|
|
494
|
+
"a request must not go out unauthenticated because a provider broke,"
|
|
495
|
+
+ " but one reached the transport: " + wire.leak());
|
|
496
|
+
|
|
497
|
+
RuntimeException err = lasterr.get();
|
|
498
|
+
assertNotNull(err, "the entity op must fail when the chain breaks");
|
|
499
|
+
assertTrue(String.valueOf(err.getMessage()).contains(BROKENMSG),
|
|
500
|
+
"the failure must carry the provider's own message (" + BROKENMSG
|
|
501
|
+
+ "), got: " + err.getMessage());
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
@Test
|
|
505
|
+
public void active_aProviderErrorFailsDirectRatherThanSending() {
|
|
506
|
+
// CONTROL FIRST.
|
|
507
|
+
Wire control = new Wire();
|
|
508
|
+
Map<String, Object> res = liveClient(control,
|
|
509
|
+
secretsOpts(List.of(workingProvider("RAWKEY01"))))
|
|
510
|
+
.direct(map("path", "/thing"));
|
|
511
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
512
|
+
"the control request failed: " + res.get("err"));
|
|
513
|
+
assertEquals(1, control.api().size(),
|
|
514
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
515
|
+
+ " observe a request going out at all");
|
|
516
|
+
credentialIs(control.api().get(0).auth, "RAWKEY01");
|
|
517
|
+
|
|
518
|
+
// THE RULE. direct() runs NO feature hook at all: if resolution lived
|
|
519
|
+
// only in a PreSpec hook this would send an unauthenticated request
|
|
520
|
+
// and never notice.
|
|
521
|
+
Wire wire = new Wire();
|
|
522
|
+
Map<String, Object> out = liveClient(wire, secretsOpts(List.of(brokenProvider())))
|
|
523
|
+
.direct(map("path", "/thing"));
|
|
524
|
+
|
|
525
|
+
assertEquals(0, wire.api().size(),
|
|
526
|
+
"a request must not go out unauthenticated because a provider broke,"
|
|
527
|
+
+ " but one reached the transport: " + wire.leak());
|
|
528
|
+
assertFalse(Boolean.TRUE.equals(out.get("ok")),
|
|
529
|
+
"a broken chain must refuse the raw path fail-closed");
|
|
530
|
+
assertTrue(String.valueOf(errMessage(out)).contains(BROKENMSG),
|
|
531
|
+
"the refusal must carry the provider's own message (" + BROKENMSG
|
|
532
|
+
+ "), got: " + errMessage(out));
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
@Test
|
|
536
|
+
public void active_aProviderErrorFailsGraphqlRatherThanSending() {
|
|
537
|
+
// CONTROL FIRST.
|
|
538
|
+
Wire control = new Wire();
|
|
539
|
+
Map<String, Object> res = liveClient(control,
|
|
540
|
+
secretsOpts(List.of(workingProvider("RAWKEY01"))))
|
|
541
|
+
.graphql("{ thing }", null, null);
|
|
542
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
543
|
+
"the control request failed: " + res.get("err"));
|
|
544
|
+
assertEquals(1, control.api().size(),
|
|
545
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
546
|
+
+ " observe a request going out at all");
|
|
547
|
+
credentialIs(control.api().get(0).auth, "RAWKEY01");
|
|
548
|
+
|
|
549
|
+
// THE RULE.
|
|
550
|
+
Wire wire = new Wire();
|
|
551
|
+
Map<String, Object> out = liveClient(wire, secretsOpts(List.of(brokenProvider())))
|
|
552
|
+
.graphql("{ thing }", null, null);
|
|
553
|
+
|
|
554
|
+
assertEquals(0, wire.api().size(),
|
|
555
|
+
"a graphql request must not go out unauthenticated,"
|
|
556
|
+
+ " but one reached the transport: " + wire.leak());
|
|
557
|
+
assertFalse(Boolean.TRUE.equals(out.get("ok")),
|
|
558
|
+
"a broken chain must refuse graphql fail-closed");
|
|
559
|
+
assertTrue(String.valueOf(errMessage(out)).contains(BROKENMSG),
|
|
560
|
+
"the refusal must carry the provider's own message (" + BROKENMSG
|
|
561
|
+
+ "), got: " + errMessage(out));
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// ------------------------------------------------------------------
|
|
565
|
+
// FAIL CLOSED ON A CONSTRUCTION FAILURE. The chain a project configures
|
|
566
|
+
// can be wrong before a single lookup happens: a provider kind that does
|
|
567
|
+
// not exist, or one whose plugin group the model did not select, and
|
|
568
|
+
// sekreto's constructor refuses it. java's init() cannot fail the client
|
|
569
|
+
// construction the way ts's throwing init does, so it HOLDS that error
|
|
570
|
+
// and the transport gate refuses to send.
|
|
571
|
+
//
|
|
572
|
+
// That gate is worth exactly as much as the seam it lives behind: an
|
|
573
|
+
// init() that returns early on the construction failure never installs
|
|
574
|
+
// the wrapper, and a misconfigured chain then sends ordinary
|
|
575
|
+
// UNAUTHENTICATED requests while the held error is read by nothing. The
|
|
576
|
+
// three cases below are the three wire paths - the entity pipeline,
|
|
577
|
+
// direct() and graphql() - each with its own CONTROL leg, so a zero
|
|
578
|
+
// means REFUSED and not UNWIRED.
|
|
579
|
+
|
|
580
|
+
// A provider kind sekreto has never heard of: its constructor throws
|
|
581
|
+
// before this feature has a Sekreto at all.
|
|
582
|
+
static final String UNKNOWNKIND = "unknown provider kind: nosuchkind";
|
|
583
|
+
|
|
584
|
+
static List<Object> misconfiguredChain() {
|
|
585
|
+
return List.of(map("kind", "nosuchkind", "name", "broken"));
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
static boolean saysUnknownKind(Object err) {
|
|
589
|
+
String msg = err instanceof Throwable
|
|
590
|
+
? String.valueOf(((Throwable) err).getMessage()) : String.valueOf(err);
|
|
591
|
+
return msg.contains(UNKNOWNKIND);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
@Test
|
|
595
|
+
public void active_aConstructionFailureFailsTheEntityOpAndNothingReachesTheWire() {
|
|
596
|
+
// CONTROL FIRST, so the zero below is known to be observable at all.
|
|
597
|
+
Wire control = new Wire();
|
|
598
|
+
ProjectNameSDK ok = liveClient(control,
|
|
599
|
+
secretsOpts(List.of(workingProvider("INITKEY01"))));
|
|
600
|
+
driveEntityOp(ok, control);
|
|
601
|
+
assertEquals(1, control.api().size(),
|
|
602
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
603
|
+
+ " observe a request going out at all");
|
|
604
|
+
credentialIs(control.api().get(0).auth, "INITKEY01");
|
|
605
|
+
|
|
606
|
+
// THE RULE.
|
|
607
|
+
Wire wire = new Wire();
|
|
608
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(misconfiguredChain()));
|
|
609
|
+
|
|
610
|
+
// The feature must still be INSTALLED: a construction failure that
|
|
611
|
+
// silently uninstalls the feature is the same fail-open by another
|
|
612
|
+
// route, and nothing downstream would be gating anything.
|
|
613
|
+
requireFeature(client);
|
|
614
|
+
|
|
615
|
+
lasterr.set(null);
|
|
616
|
+
// Stop on EITHER outcome - the refusal we want, or a request going out,
|
|
617
|
+
// which is the failure this test exists to catch. Stopping only on the
|
|
618
|
+
// refusal would report "nothing to assert on" for the leak.
|
|
619
|
+
driveEntityOpUntil(client, "refused the operation or sent one",
|
|
620
|
+
() -> 0 < wire.api().size() || saysUnknownKind(lasterr.get()));
|
|
621
|
+
|
|
622
|
+
assertEquals(0, wire.api().size(),
|
|
623
|
+
"a misconfigured chain sent an UNAUTHENTICATED request: " + wire.leak());
|
|
624
|
+
|
|
625
|
+
RuntimeException err = lasterr.get();
|
|
626
|
+
assertNotNull(err, "the entity op must fail when the chain cannot be built");
|
|
627
|
+
assertTrue(saysUnknownKind(err),
|
|
628
|
+
"the refusal must carry sekreto's own message (" + UNKNOWNKIND
|
|
629
|
+
+ "), got: " + err.getMessage());
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
@Test
|
|
633
|
+
public void active_aConstructionFailureFailsDirectRatherThanSending() {
|
|
634
|
+
// CONTROL FIRST.
|
|
635
|
+
Wire control = new Wire();
|
|
636
|
+
Map<String, Object> res = liveClient(control,
|
|
637
|
+
secretsOpts(List.of(workingProvider("INITKEY01"))))
|
|
638
|
+
.direct(map("path", "/thing"));
|
|
639
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
640
|
+
"the control request failed: " + res.get("err"));
|
|
641
|
+
assertEquals(1, control.api().size(),
|
|
642
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
643
|
+
+ " observe a request going out at all");
|
|
644
|
+
credentialIs(control.api().get(0).auth, "INITKEY01");
|
|
645
|
+
|
|
646
|
+
// THE RULE. direct() runs no feature hook at all, so the ONLY thing
|
|
647
|
+
// that can refuse it is the transport wrapper - the one init() skips
|
|
648
|
+
// when it returns early on the construction failure.
|
|
649
|
+
Wire wire = new Wire();
|
|
650
|
+
Map<String, Object> out = liveClient(wire, secretsOpts(misconfiguredChain()))
|
|
651
|
+
.direct(map("path", "/thing"));
|
|
652
|
+
|
|
653
|
+
assertEquals(0, wire.api().size(),
|
|
654
|
+
"a misconfigured chain sent an UNAUTHENTICATED direct request: " + wire.leak());
|
|
655
|
+
assertFalse(Boolean.TRUE.equals(out.get("ok")),
|
|
656
|
+
"a chain that could not be built must refuse the raw path fail-closed");
|
|
657
|
+
assertTrue(saysUnknownKind(out.get("err")),
|
|
658
|
+
"the refusal must carry sekreto's own message (" + UNKNOWNKIND
|
|
659
|
+
+ "), got: " + errMessage(out));
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
@Test
|
|
663
|
+
public void active_aConstructionFailureFailsGraphqlRatherThanSending() {
|
|
664
|
+
// CONTROL FIRST.
|
|
665
|
+
Wire control = new Wire();
|
|
666
|
+
Map<String, Object> res = liveClient(control,
|
|
667
|
+
secretsOpts(List.of(workingProvider("INITKEY01"))))
|
|
668
|
+
.graphql("{ thing }", null, null);
|
|
669
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
670
|
+
"the control request failed: " + res.get("err"));
|
|
671
|
+
assertEquals(1, control.api().size(),
|
|
672
|
+
"the control request never reached system.fetch, so this test cannot"
|
|
673
|
+
+ " observe a request going out at all");
|
|
674
|
+
credentialIs(control.api().get(0).auth, "INITKEY01");
|
|
675
|
+
|
|
676
|
+
// THE RULE.
|
|
677
|
+
Wire wire = new Wire();
|
|
678
|
+
Map<String, Object> out = liveClient(wire, secretsOpts(misconfiguredChain()))
|
|
679
|
+
.graphql("{ thing }", null, null);
|
|
680
|
+
|
|
681
|
+
assertEquals(0, wire.api().size(),
|
|
682
|
+
"a misconfigured chain sent an UNAUTHENTICATED graphql request: " + wire.leak());
|
|
683
|
+
assertFalse(Boolean.TRUE.equals(out.get("ok")),
|
|
684
|
+
"a chain that could not be built must refuse graphql fail-closed");
|
|
685
|
+
assertTrue(saysUnknownKind(out.get("err")),
|
|
686
|
+
"the refusal must carry sekreto's own message (" + UNKNOWNKIND
|
|
687
|
+
+ "), got: " + errMessage(out));
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
static String errMessage(Map<String, Object> res) {
|
|
691
|
+
Object err = res.get("err");
|
|
692
|
+
if (err instanceof Throwable) {
|
|
693
|
+
return String.valueOf(((Throwable) err).getMessage());
|
|
694
|
+
}
|
|
695
|
+
return String.valueOf(err);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// A failed resolution is never cached: holding it would mean a transient
|
|
699
|
+
// vault outage poisoned the client permanently, every later operation
|
|
700
|
+
// failing with the original error long after the vault recovered.
|
|
701
|
+
@Test
|
|
702
|
+
public void active_aProviderRecoversAfterATransientFailure() {
|
|
703
|
+
final int[] calls = {0};
|
|
704
|
+
Wire wire = new Wire();
|
|
705
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
706
|
+
List.of(new TestProvider((name) -> {
|
|
707
|
+
calls[0]++;
|
|
708
|
+
if (1 == calls[0]) {
|
|
709
|
+
throw new IllegalStateException(BROKENMSG);
|
|
710
|
+
}
|
|
711
|
+
return "RECOVERED01";
|
|
712
|
+
}))));
|
|
713
|
+
|
|
714
|
+
driveEntityOpUntil(client, "consulted the chain", () -> 0 < calls[0]);
|
|
715
|
+
assertEquals(0, wire.api().size(), "the first op must not reach the wire");
|
|
716
|
+
|
|
717
|
+
driveEntityOp(client, wire);
|
|
718
|
+
credentialIs(wire.api().get(0).auth, "RECOVERED01");
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// `cache: false` is documented as "every resolve asks the chain again".
|
|
722
|
+
@Test
|
|
723
|
+
public void active_cacheFalseAsksTheChainOnEveryRequest() {
|
|
724
|
+
final int[] calls = {0};
|
|
725
|
+
Wire wire = new Wire();
|
|
726
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
727
|
+
List.of(new TestProvider((name) -> {
|
|
728
|
+
calls[0]++;
|
|
729
|
+
return "KEY" + calls[0];
|
|
730
|
+
})),
|
|
731
|
+
"cache", false));
|
|
732
|
+
|
|
733
|
+
client.direct(map("path", "/one"));
|
|
734
|
+
client.direct(map("path", "/two"));
|
|
735
|
+
|
|
736
|
+
assertTrue(1 < calls[0],
|
|
737
|
+
"the chain was asked once and cached, despite cache: false");
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// With `cache: false`, a provider that answered once and then reports a
|
|
741
|
+
// MISS (a revoked secret) must RETRACT the credential: the wire must
|
|
742
|
+
// stop carrying it.
|
|
743
|
+
@Test
|
|
744
|
+
public void active_anUncachedMissRetractsTheCredential() {
|
|
745
|
+
final boolean[] have = {true};
|
|
746
|
+
Wire wire = new Wire();
|
|
747
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
748
|
+
List.of(new TestProvider((name) -> have[0] ? "REVOCABLE01" : null)),
|
|
749
|
+
"cache", false));
|
|
750
|
+
|
|
751
|
+
client.direct(map("path", "/one"));
|
|
752
|
+
credentialIs(wire.api().get(0).auth, "REVOCABLE01");
|
|
753
|
+
|
|
754
|
+
have[0] = false;
|
|
755
|
+
client.direct(map("path", "/two"));
|
|
756
|
+
|
|
757
|
+
Call last = wire.api().get(wire.api().size() - 1);
|
|
758
|
+
assertFalse(last.has && !"".equals(last.auth),
|
|
759
|
+
"after the chain reports a miss the retracted credential must not go out;"
|
|
760
|
+
+ " the wire saw \"" + last.auth + "\"");
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
// A MISS IS NOT A CACHEABLE ANSWER - sekreto's own rule, which this
|
|
764
|
+
// feature used to override from the layer above.
|
|
765
|
+
//
|
|
766
|
+
// DEFAULT caching here, which is the whole point: `cache: true` is about
|
|
767
|
+
// holding a HIT, and keeping the settled resolution after a miss meant
|
|
768
|
+
// the chain was never asked again for the life of the client. A secret
|
|
769
|
+
// provisioned after startup (a mounted file, a vault policy granted a
|
|
770
|
+
// minute late) was invisible forever, and the only workaround was giving
|
|
771
|
+
// up hit caching entirely.
|
|
772
|
+
@Test
|
|
773
|
+
public void active_aCachedMissIsReasked() {
|
|
774
|
+
final boolean[] present = {false};
|
|
775
|
+
final int[] calls = {0};
|
|
776
|
+
Wire wire = new Wire();
|
|
777
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
778
|
+
List.of(new TestProvider((name) -> {
|
|
779
|
+
calls[0]++;
|
|
780
|
+
return present[0] ? "LATEKEY01" : null;
|
|
781
|
+
}))));
|
|
782
|
+
|
|
783
|
+
client.direct(map("path", "/one"));
|
|
784
|
+
Call first = wire.api().get(0);
|
|
785
|
+
assertFalse(first.has && !"".equals(first.auth),
|
|
786
|
+
"the chain has nothing yet, so no credential should go out");
|
|
787
|
+
|
|
788
|
+
int asked = calls[0];
|
|
789
|
+
assertTrue(0 < asked);
|
|
790
|
+
|
|
791
|
+
// The secret is provisioned while the client is live.
|
|
792
|
+
present[0] = true;
|
|
793
|
+
client.direct(map("path", "/two"));
|
|
794
|
+
|
|
795
|
+
credentialIs(wire.api().get(wire.api().size() - 1).auth, "LATEKEY01");
|
|
796
|
+
assertTrue(asked < calls[0],
|
|
797
|
+
"the MISS was cached: a secret that appears later can never be picked up");
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// The other half of the same rule: a HIT is still cached by default, so
|
|
801
|
+
// the fix above must not turn every request into a chain walk.
|
|
802
|
+
@Test
|
|
803
|
+
public void active_aCachedHitIsKept() {
|
|
804
|
+
final int[] calls = {0};
|
|
805
|
+
Wire wire = new Wire();
|
|
806
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
807
|
+
List.of(new TestProvider((name) -> {
|
|
808
|
+
calls[0]++;
|
|
809
|
+
return "STABLEKEY01";
|
|
810
|
+
}))));
|
|
811
|
+
|
|
812
|
+
client.direct(map("path", "/one"));
|
|
813
|
+
client.direct(map("path", "/two"));
|
|
814
|
+
|
|
815
|
+
assertEquals(1, calls[0],
|
|
816
|
+
"a hit must be cached under the default cache: true");
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
// `auth: null` - the documented way to disable auth outright, which
|
|
820
|
+
// prepareAuth honours before it ever reads the apikey.
|
|
821
|
+
//
|
|
822
|
+
// This needs an explicit guard because struct nearly removed it in
|
|
823
|
+
// silence: with a stored null read as "no value", the optspec default
|
|
824
|
+
// fires and the suppression becomes "use default auth" - transmitting a
|
|
825
|
+
// credential the caller explicitly asked not to send. makeOptions
|
|
826
|
+
// captures suppliedness BEFORE validate and restores the null after it.
|
|
827
|
+
@Test
|
|
828
|
+
public void active_authNullSuppressesTheCredentialChainOrNoChain() {
|
|
829
|
+
Wire wire = new Wire();
|
|
830
|
+
Map<String, Object> opts = secretsOpts(
|
|
831
|
+
List.of(memoryStore("envlike", "APIKEY", "CHAINKEY03")));
|
|
832
|
+
opts.put("apikey", "OPTKEY01");
|
|
833
|
+
opts.put("auth", null);
|
|
834
|
+
ProjectNameSDK client = liveClient(wire, opts);
|
|
835
|
+
|
|
836
|
+
client.direct(map("path", "/thing"));
|
|
837
|
+
|
|
838
|
+
Call call = wire.api().get(0);
|
|
839
|
+
assertFalse(call.has,
|
|
840
|
+
"auth null must suppress the credential, got header \"" + call.auth + "\"");
|
|
841
|
+
|
|
842
|
+
// The suppression survives option validation rather than being
|
|
843
|
+
// replaced by the optspec's default auth map.
|
|
844
|
+
Map<String, Object> optsmap = client.optionsMap();
|
|
845
|
+
assertTrue(optsmap.containsKey("auth"), "options.auth must stay PRESENT");
|
|
846
|
+
assertNull(optsmap.get("auth"), "options.auth must stay a present NULL");
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
@Test
|
|
850
|
+
public void active_secretNameIsConfigurable() {
|
|
851
|
+
Wire wire = new Wire();
|
|
852
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
853
|
+
List.of(memoryStore("envlike", "API_TOKEN", "TOKKEY01")),
|
|
854
|
+
"name", "api.token"));
|
|
855
|
+
|
|
856
|
+
client.direct(map("path", "/thing"));
|
|
857
|
+
credentialIs(wire.api().get(0).auth, "TOKKEY01");
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
@Test
|
|
861
|
+
public void active_sekretoIsLiveForArbitrarySecretsAndRedaction() {
|
|
862
|
+
Wire wire = new Wire();
|
|
863
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
864
|
+
List.of(map("kind", "memory", "values", map("DB_PASSWORD", "dbpass01")))));
|
|
865
|
+
|
|
866
|
+
SecretsFeature f = requireFeature(client);
|
|
867
|
+
assertEquals("dbpass01", f.sekreto().get("db.password"));
|
|
868
|
+
assertEquals("the password is [redacted], keep it safe",
|
|
869
|
+
f.sekreto().redact("the password is dbpass01, keep it safe"));
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
// THE PROVIDER VOCABULARY IS NON-EMPTY.
|
|
873
|
+
//
|
|
874
|
+
// Upstream sekreto retired its self-registration registry: a kind not
|
|
875
|
+
// passed in the `plugins` option is UNKNOWN to that Sekreto. So the
|
|
876
|
+
// model's choice of plugin groups IS this SDK's provider vocabulary, and
|
|
877
|
+
// the wiring that carries it - Config.featurePlugins, emitted from the
|
|
878
|
+
// model's per-target `def` map - has exactly one observable failure:
|
|
879
|
+
// every kind refused at runtime while every test that uses only built-in
|
|
880
|
+
// kinds stays green.
|
|
881
|
+
//
|
|
882
|
+
// Conditional on the group being SELECTED, because this file ships to
|
|
883
|
+
// projects that take the feature without the `vault` group. The probe is
|
|
884
|
+
// Config's own declaration list rather than the class file's presence:
|
|
885
|
+
// for a flat-container target the plugin sources are copied whether or
|
|
886
|
+
// not a group is on, so a file on disk is not evidence that the model
|
|
887
|
+
// asked for its kind.
|
|
888
|
+
//
|
|
889
|
+
// Not circular. featurePlugins saying `hashicorp` is DECLARED is the
|
|
890
|
+
// precondition; what is asserted is that a chain NAMING that kind
|
|
891
|
+
// actually builds - which is the failure this exists for: the
|
|
892
|
+
// definitions generated but never threaded into Sekreto's `plugins`
|
|
893
|
+
// option, so the SDK carries every plugin its model selected and refuses
|
|
894
|
+
// every one of their kinds at runtime, while every test using only
|
|
895
|
+
// built-in kinds stays green.
|
|
896
|
+
@Test
|
|
897
|
+
public void active_aSelectedPluginKindIsInTheSdkVocabulary() {
|
|
898
|
+
boolean declared = false;
|
|
899
|
+
for (Object d : Config.featurePlugins("secrets")) {
|
|
900
|
+
if (d instanceof Definition && "hashicorp".equals(((Definition) d).name)) {
|
|
901
|
+
declared = true;
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
if (!declared) {
|
|
905
|
+
// No vault group in this project's model: nothing to assert.
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
// Construction is where an unknown kind is REFUSED, so the Sekreto
|
|
910
|
+
// being built at all IS the regression check. The memory store comes
|
|
911
|
+
// FIRST so sekreto's first-hit rule answers from it and the vault is
|
|
912
|
+
// never contacted - the kind has to be declarable, not reachable.
|
|
913
|
+
Wire wire = new Wire();
|
|
914
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(List.of(
|
|
915
|
+
map("kind", "memory", "values", map("APIKEY", "VOCAB01")),
|
|
916
|
+
map("kind", "hashicorp", "addr", "https://vault.test", "token", "x"))));
|
|
917
|
+
|
|
918
|
+
Map<String, Object> res = client.direct(map("path", "/thing"));
|
|
919
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
920
|
+
"the chain naming a selected plugin kind must build: " + res.get("err"));
|
|
921
|
+
credentialIs(wire.api().get(0).auth, "VOCAB01");
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
// ------------------------------------------------------------------
|
|
925
|
+
// ACCESS-TOKEN EXCHANGE.
|
|
926
|
+
//
|
|
927
|
+
// What the chain resolves is a REFRESH token, which is POSTed to a token
|
|
928
|
+
// endpoint for a short-lived ACCESS token; the access token is what the
|
|
929
|
+
// Authorization header carries; and when the API answers 401 the client
|
|
930
|
+
// buys another and tries the same request again, once.
|
|
931
|
+
|
|
932
|
+
static Map<String, Object> exchangeOpts(Object... extra) {
|
|
933
|
+
Map<String, Object> x = map("active", true);
|
|
934
|
+
for (int i = 0; i + 1 < extra.length; i += 2) {
|
|
935
|
+
x.put((String) extra[i], extra[i + 1]);
|
|
936
|
+
}
|
|
937
|
+
return secretsOpts(
|
|
938
|
+
List.of(memoryStore("envlike", "REFRESH_TOKEN", "REFRESH01")),
|
|
939
|
+
"name", "refresh_token",
|
|
940
|
+
"exchange", x);
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
@Test
|
|
944
|
+
public void exchange_refreshBuysAnAccessTokenAndASpentOneIsReboughtOnce() {
|
|
945
|
+
Wire wire = new Wire();
|
|
946
|
+
// First API call is refused, the retry succeeds.
|
|
947
|
+
wire.apistatus = new ArrayList<>(List.of(401, 200));
|
|
948
|
+
ProjectNameSDK client = liveClient(wire, exchangeOpts());
|
|
949
|
+
|
|
950
|
+
Map<String, Object> res = client.direct(map("path", "/thing"));
|
|
951
|
+
|
|
952
|
+
assertEquals(2, wire.token().size(),
|
|
953
|
+
"expected the initial purchase plus exactly one rebuy");
|
|
954
|
+
assertTrue(wire.token().get(0).body.contains("REFRESH01"),
|
|
955
|
+
"the refresh token is sent in the request body, got: " + wire.token().get(0).body);
|
|
956
|
+
assertTrue(wire.token().get(0).body.startsWith("{"),
|
|
957
|
+
"the token request body must be JSON, got: " + wire.token().get(0).body);
|
|
958
|
+
|
|
959
|
+
assertEquals(2, wire.api().size(), "expected the request to be retried exactly once");
|
|
960
|
+
credentialIs(wire.api().get(0).auth, "ACCESS01");
|
|
961
|
+
// The retry must carry the NEW token, not the spent one.
|
|
962
|
+
credentialIs(wire.api().get(1).auth, "ACCESS02");
|
|
963
|
+
|
|
964
|
+
assertTrue(Boolean.TRUE.equals(res.get("ok")),
|
|
965
|
+
"the caller sees the successful retry: " + res.get("err"));
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
@Test
|
|
969
|
+
public void exchange_reachesTheRawPathsAndOnePurchaseServesMany() {
|
|
970
|
+
Wire wire = new Wire();
|
|
971
|
+
ProjectNameSDK client = liveClient(wire, exchangeOpts());
|
|
972
|
+
|
|
973
|
+
client.direct(map("path", "/one"));
|
|
974
|
+
client.graphql("{ two }", null, null);
|
|
975
|
+
|
|
976
|
+
assertEquals(1, wire.token().size(), "a token still working must not be re-bought");
|
|
977
|
+
assertEquals(2, wire.api().size());
|
|
978
|
+
credentialIs(wire.api().get(0).auth, "ACCESS01");
|
|
979
|
+
credentialIs(wire.api().get(1).auth, "ACCESS01");
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
@Test
|
|
983
|
+
public void exchange_anExplicitRefreshWinsOverTheChain() {
|
|
984
|
+
Wire wire = new Wire();
|
|
985
|
+
ProjectNameSDK client = liveClient(wire, exchangeOpts("refresh", "EXPLICIT01"));
|
|
986
|
+
|
|
987
|
+
client.direct(map("path", "/thing"));
|
|
988
|
+
|
|
989
|
+
assertTrue(wire.token().get(0).body.contains("EXPLICIT01"),
|
|
990
|
+
"the explicit refresh must win: " + wire.token().get(0).body);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
// The chain is empty AND no explicit refresh: an error, never an
|
|
994
|
+
// unauthenticated call.
|
|
995
|
+
@Test
|
|
996
|
+
public void exchange_noRefreshAnywhereIsAnErrorNotAnUnauthenticatedCall() {
|
|
997
|
+
Wire wire = new Wire();
|
|
998
|
+
ProjectNameSDK client = liveClient(wire, secretsOpts(
|
|
999
|
+
List.of(memoryStore("envlike", "NOTHING", "x")),
|
|
1000
|
+
"name", "refresh_token",
|
|
1001
|
+
"exchange", map("active", true)));
|
|
1002
|
+
|
|
1003
|
+
Map<String, Object> res = client.direct(map("path", "/thing"));
|
|
1004
|
+
|
|
1005
|
+
assertFalse(Boolean.TRUE.equals(res.get("ok")), "expected a failure");
|
|
1006
|
+
assertEquals(0, wire.api().size(),
|
|
1007
|
+
"a request must not go out unauthenticated because the chain was empty:"
|
|
1008
|
+
+ " " + wire.leak());
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
@Test
|
|
1012
|
+
public void exchange_authNullSuppressesTheCredentialRefusalOrNot() {
|
|
1013
|
+
Wire wire = new Wire();
|
|
1014
|
+
wire.apistatus = new ArrayList<>(List.of(401));
|
|
1015
|
+
Map<String, Object> opts = exchangeOpts();
|
|
1016
|
+
opts.put("auth", null);
|
|
1017
|
+
ProjectNameSDK client = liveClient(wire, opts);
|
|
1018
|
+
|
|
1019
|
+
client.direct(map("path", "/thing"));
|
|
1020
|
+
|
|
1021
|
+
assertEquals(1, wire.api().size(), "a suppressed request must not be retried");
|
|
1022
|
+
assertFalse(wire.api().get(0).has,
|
|
1023
|
+
"no credential may be sent when auth is suppressed, got \""
|
|
1024
|
+
+ wire.api().get(0).auth + "\"");
|
|
1025
|
+
|
|
1026
|
+
// AND NO PURCHASE. resolve() runs before withrefresh's suppression
|
|
1027
|
+
// check, so the refresh token used to go to the token endpoint in a
|
|
1028
|
+
// request body even here. Stopping the retry does not unsend it, and
|
|
1029
|
+
// only the token endpoint can see this.
|
|
1030
|
+
assertEquals(0, wire.token().size(),
|
|
1031
|
+
"auth null suppressed the credential but the refresh token was still"
|
|
1032
|
+
+ " POSTed to the exchange endpoint");
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
@Test
|
|
1036
|
+
public void exchange_testModeBuysNothingAndNeedsNoTokenEndpoint() {
|
|
1037
|
+
Wire wire = new Wire();
|
|
1038
|
+
Map<String, Object> opts = exchangeOpts();
|
|
1039
|
+
opts.put("base", BASE);
|
|
1040
|
+
opts.put("system", map("fetch", wire));
|
|
1041
|
+
ProjectNameSDK client = withSecrets(opts, (o) -> ProjectNameSDK.testSDK(null, o));
|
|
1042
|
+
|
|
1043
|
+
driveEntityOpUntil(client, "resolved the fake token",
|
|
1044
|
+
() -> !"".equals(requireFeature(client).credential()));
|
|
1045
|
+
|
|
1046
|
+
assertEquals(0, wire.calls.size(), "test mode must not do IO");
|
|
1047
|
+
// A deterministic placeholder, so offline suites need no configuration.
|
|
1048
|
+
assertEquals("test-access_token", requireFeature(client).credential());
|
|
1049
|
+
}
|
|
1050
|
+
}
|