@voxgig/sdkgen 4.19.1 → 4.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/helpers/applicability.js +11 -6
- package/dist/helpers/applicability.js.map +1 -1
- package/dist/helpers/collectDeps.js +31 -6
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/naming.js +2 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/sdkgen.d.ts +2 -2
- package/dist/sdkgen.js +6 -3
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.d.ts +4 -1
- package/dist/utility.js +60 -0
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aon +59 -3
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +128 -0
- package/project/.sdk/model/feature/validate.aon +3 -2
- package/project/.sdk/model/target/c.aon +1 -1
- package/project/.sdk/model/target/clojure.aon +1 -1
- package/project/.sdk/model/target/cpp.aon +1 -1
- package/project/.sdk/model/target/csharp.aon +1 -1
- package/project/.sdk/model/target/elixir.aon +1 -1
- package/project/.sdk/model/target/go.aon +1 -1
- package/project/.sdk/model/target/java.aon +1 -1
- package/project/.sdk/model/target/kotlin.aon +1 -1
- package/project/.sdk/model/target/lua.aon +1 -1
- package/project/.sdk/model/target/ocaml.aon +1 -1
- package/project/.sdk/model/target/perl.aon +1 -1
- package/project/.sdk/model/target/php.aon +1 -1
- package/project/.sdk/model/target/py.aon +1 -1
- package/project/.sdk/model/target/rb.aon +1 -1
- package/project/.sdk/model/target/rust.aon +1 -1
- package/project/.sdk/model/target/scala.aon +1 -1
- package/project/.sdk/model/target/swift.aon +1 -1
- package/project/.sdk/model/target/zig.aon +1 -1
- package/project/.sdk/src/cmp/c/Config_c.ts +15 -0
- package/project/.sdk/src/cmp/c/Main_c.ts +18 -0
- package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +371 -0
- package/project/.sdk/src/cmp/c/Schema_c.ts +106 -0
- package/project/.sdk/src/cmp/clojure/Config_clojure.ts +47 -1
- package/project/.sdk/src/cmp/clojure/Main_clojure.ts +13 -1
- package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +374 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +1 -0
- package/project/.sdk/src/cmp/clojure/Schema_clojure.ts +73 -0
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +40 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +20 -0
- package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +441 -0
- package/project/.sdk/src/cmp/cpp/Schema_cpp.ts +105 -0
- package/project/.sdk/src/cmp/csharp/Config_csharp.ts +42 -1
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +21 -0
- package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +392 -0
- package/project/.sdk/src/cmp/csharp/Schema_csharp.ts +85 -0
- package/project/.sdk/src/cmp/elixir/Config_elixir.ts +36 -1
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +17 -0
- package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +418 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +1 -0
- package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +88 -0
- package/project/.sdk/src/cmp/go/Config_go.ts +12 -1
- package/project/.sdk/src/cmp/go/Main_go.ts +16 -0
- package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +322 -0
- package/project/.sdk/src/cmp/go/Schema_go.ts +93 -0
- package/project/.sdk/src/cmp/java/Config_java.ts +20 -1
- package/project/.sdk/src/cmp/java/Main_java.ts +16 -0
- package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +298 -0
- package/project/.sdk/src/cmp/java/Schema_java.ts +125 -0
- package/project/.sdk/src/cmp/js/Config_js.ts +12 -1
- package/project/.sdk/src/cmp/js/Main_js.ts +6 -0
- package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +244 -0
- package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +23 -1
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +22 -0
- package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +440 -0
- package/project/.sdk/src/cmp/kotlin/Schema_kotlin.ts +111 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +15 -1
- package/project/.sdk/src/cmp/lua/Main_lua.ts +57 -9
- package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -0
- package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +364 -0
- package/project/.sdk/src/cmp/lua/ReadmeExplanation_lua.ts +1 -0
- package/project/.sdk/src/cmp/lua/Schema_lua.ts +72 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +55 -2
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +53 -13
- package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +454 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Schema_ocaml.ts +99 -0
- package/project/.sdk/src/cmp/perl/Config_perl.ts +30 -0
- package/project/.sdk/src/cmp/perl/Main_perl.ts +16 -0
- package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +387 -0
- package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +1 -0
- package/project/.sdk/src/cmp/perl/Schema_perl.ts +107 -0
- package/project/.sdk/src/cmp/php/Config_php.ts +12 -1
- package/project/.sdk/src/cmp/php/Main_php.ts +9 -0
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +325 -0
- package/project/.sdk/src/cmp/php/ReadmeExplanation_php.ts +1 -0
- package/project/.sdk/src/cmp/php/Schema_php.ts +129 -0
- package/project/.sdk/src/cmp/py/Config_py.ts +12 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +14 -0
- package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +389 -0
- package/project/.sdk/src/cmp/py/ReadmeExplanation_py.ts +1 -0
- package/project/.sdk/src/cmp/py/Schema_py.ts +72 -0
- package/project/.sdk/src/cmp/rb/Config_rb.ts +18 -1
- package/project/.sdk/src/cmp/rb/Main_rb.ts +12 -0
- package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +305 -0
- package/project/.sdk/src/cmp/rb/ReadmeExplanation_rb.ts +1 -0
- package/project/.sdk/src/cmp/rb/Schema_rb.ts +70 -0
- package/project/.sdk/src/cmp/rust/Config_rust.ts +41 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +19 -0
- package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +410 -0
- package/project/.sdk/src/cmp/rust/Schema_rust.ts +107 -0
- package/project/.sdk/src/cmp/scala/Config_scala.ts +21 -1
- package/project/.sdk/src/cmp/scala/Main_scala.ts +17 -0
- package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +415 -0
- package/project/.sdk/src/cmp/scala/Schema_scala.ts +108 -0
- package/project/.sdk/src/cmp/swift/Config_swift.ts +37 -1
- package/project/.sdk/src/cmp/swift/Main_swift.ts +13 -0
- package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +439 -0
- package/project/.sdk/src/cmp/swift/Schema_swift.ts +92 -0
- package/project/.sdk/src/cmp/ts/Config_ts.ts +12 -1
- package/project/.sdk/src/cmp/ts/Main_ts.ts +5 -0
- package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +237 -0
- package/project/.sdk/src/cmp/zig/Config_zig.ts +33 -1
- package/project/.sdk/src/cmp/zig/Main_zig.ts +19 -0
- package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +545 -0
- package/project/.sdk/src/cmp/zig/Schema_zig.ts +114 -0
- package/project/.sdk/tm/c/core/context.c +3 -0
- package/project/.sdk/tm/c/core/sdk.h +14 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +3 -3
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +25 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +3 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/minivault.c +2072 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +151 -10
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +16 -10
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +12 -8
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +17 -2
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +5 -5
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +37 -9
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +2 -2
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +17 -2
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +16 -2
- package/project/.sdk/tm/c/feature/validate.c +364 -0
- package/project/.sdk/tm/c/feature/validate.h +29 -0
- package/project/.sdk/tm/c/src/feature/validate/.gitkeep +0 -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/c/utility/make_options.c +12 -24
- package/project/.sdk/tm/c/utility/make_spec.c +8 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +3 -3
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +17 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/minivault.clj +837 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +2 -2
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +6 -4
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +2 -2
- package/project/.sdk/tm/clojure/src/feature/validate/.gitkeep +0 -0
- package/project/.sdk/tm/clojure/src/sdk/core.clj +52 -51
- package/project/.sdk/tm/clojure/src/sdk/features.clj +202 -0
- 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/core/types.hpp +4 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +3 -3
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +21 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +3 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +9 -7
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.cpp +1345 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.hpp +219 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +22 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +12 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +3 -3
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +2 -2
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +2 -2
- package/project/.sdk/tm/cpp/feature/validate.hpp +301 -0
- package/project/.sdk/tm/cpp/src/feature/validate/.gitkeep +0 -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/cpp/utility/pipeline.hpp +42 -63
- package/project/.sdk/tm/csharp/feature/ValidateFeature.cs +343 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +3 -3
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +9 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +21 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/MiniVault.cs +1572 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +2 -2
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +3 -2
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +2 -2
- package/project/.sdk/tm/csharp/src/feature/validate/.gitkeep +0 -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 +12 -74
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +24 -3
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +7 -4
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +13 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +15 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +3 -3
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +3 -3
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/minivault.ex +1033 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +17 -5
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/validate.ex +320 -0
- package/project/.sdk/tm/elixir/lib/projectname/utility.ex +17 -66
- package/project/.sdk/tm/elixir/src/feature/validate/.gitkeep +0 -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 +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +25 -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/minivault/format.go +493 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/minivault/minivault.go +1131 -0
- 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 +14 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
- package/project/.sdk/tm/go/feature/validate_feature.go +346 -0
- package/project/.sdk/tm/go/src/feature/validate/.gitkeep +0 -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/make_options.go +13 -54
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +24 -8
- package/project/.sdk/tm/java/feature/ValidateFeature.java +330 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +3 -3
- package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +3 -3
- package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +21 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +4 -3
- package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Minivault.java +1448 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +2 -2
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +2 -2
- package/project/.sdk/tm/java/src/feature/validate/.gitkeep +0 -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 +13 -33
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +3 -3
- package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +17 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/minivault.js +866 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +3 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +2 -2
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +2 -2
- package/project/.sdk/tm/js/src/utility/StructUtility.js +1 -1
- 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/ValidateFeature.kt +297 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +3 -3
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +21 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +3 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +14 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +10 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Minivault.kt +1095 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +2 -2
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +2 -2
- package/project/.sdk/tm/kotlin/src/feature/validate/.gitkeep +0 -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/MakeOptions.kt +13 -22
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -0
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +13 -46
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +2 -2
- package/project/.sdk/tm/lua/feature/secrets/native/sekretovault.c +240 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +12 -3
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +18 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/minivault.lua +1227 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +2 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +3 -2
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +2 -2
- package/project/.sdk/tm/lua/feature/validate_feature.lua +333 -0
- package/project/.sdk/tm/lua/src/feature/validate/.gitkeep +0 -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/make_options.lua +74 -55
- package/project/.sdk/tm/lua/utility/make_spec.lua +8 -1
- 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 +16 -1
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +5 -3
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +18 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault.ml +1086 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault_stubs.c +222 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +33 -3
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +2 -2
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +4 -3
- package/project/.sdk/tm/ocaml/sdk_features.ml +174 -0
- package/project/.sdk/tm/ocaml/sdk_helpers.ml +15 -0
- package/project/.sdk/tm/ocaml/sdk_runtime.ml +30 -49
- package/project/.sdk/tm/ocaml/src/feature/validate/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +125 -12
- package/project/.sdk/tm/ocaml/test/t_pipeline.ml +64 -6
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
- package/project/.sdk/tm/perl/core/helpers.pm +64 -16
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +3 -3
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +19 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Minivault.pm +1380 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +2 -2
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +4 -3
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +2 -2
- package/project/.sdk/tm/perl/feature/validate_feature.pm +319 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/src/feature/validate/.gitkeep +0 -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/perl/utility/make_options.pm +25 -34
- package/project/.sdk/tm/php/feature/ValidateFeature.php +361 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +3 -3
- package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +26 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/minivault.php +1250 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +2 -2
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +5 -3
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +2 -2
- package/project/.sdk/tm/php/src/feature/validate/.gitkeep +0 -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/php/utility/MakeOptions.php +15 -24
- package/project/.sdk/tm/php/utility/struct/Struct.php +56 -7
- 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 +2 -2
- 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 +17 -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 +1 -1
- 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/minivault.py +1202 -0
- 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 +2 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/validate_feature.py +273 -0
- package/project/.sdk/tm/py/pkg/utility/make_options.py +14 -53
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/src/feature/validate/.gitkeep +0 -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/feature/secrets/voxgig_plugin/capability.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +3 -3
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +16 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/minivault.rb +979 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +6 -5
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +2 -2
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +2 -2
- package/project/.sdk/tm/rb/feature/validate_feature.rb +265 -0
- package/project/.sdk/tm/rb/src/feature/validate/.gitkeep +0 -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/rb/utility/make_options.rb +15 -32
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +24 -1
- package/project/.sdk/tm/rust/core/mod.rs +3 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +3 -3
- package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +24 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/minivault/format.rs +425 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/minivault.rs +1076 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +2 -2
- package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +30 -4
- package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +2 -2
- package/project/.sdk/tm/rust/feature/validate.rs +387 -0
- package/project/.sdk/tm/rust/src/feature/validate/.gitkeep +0 -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/rust/utility/make_options.rs +12 -51
- package/project/.sdk/tm/rust/utility/make_spec.rs +10 -3
- package/project/.sdk/tm/scala/feature/ValidateFeature.scala +286 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +3 -3
- package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +19 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +3 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +13 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +11 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Minivault.scala +979 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +2 -2
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +2 -2
- 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/src/feature/validate/.gitkeep +0 -0
- package/project/.sdk/tm/scala/utility/Make.scala +12 -28
- package/project/.sdk/tm/scala/utility/MakeSpec.scala +8 -1
- package/project/.sdk/tm/scala/utility/Prepare.scala +16 -40
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ValidateFeature.swift +273 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +3 -3
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +17 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +2 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Make.swift +9 -3
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +12 -60
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +21 -39
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +3 -3
- 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/swift/src/feature/validate/.gitkeep +0 -0
- 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 +13 -2
- 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 +27 -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/minivault.ts +1034 -0
- 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 +2 -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 +11 -1
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +1 -1
- 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/core/utility.zig +45 -77
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +3 -3
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +18 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/minivault.zig +1930 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +2 -2
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +3 -2
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +19 -2
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +2 -2
- package/project/.sdk/tm/zig/feature/validate.zig +293 -0
- package/project/.sdk/tm/zig/src/feature/validate/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +34 -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 -1
- package/src/helpers/applicability.ts +11 -6
- package/src/helpers/collectDeps.ts +30 -5
- package/src/helpers/naming.ts +2 -2
- package/src/sdkgen.ts +4 -1
- package/src/utility.ts +75 -0
- package/project/.sdk/tm/c/utility/prepare_auth.c +0 -65
- package/project/.sdk/tm/csharp/utility/PrepareAuth.cs +0 -54
- package/project/.sdk/tm/go/utility/prepare_auth.go +0 -59
- package/project/.sdk/tm/java/utility/PrepareAuth.java +0 -66
- package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +0 -49
- package/project/.sdk/tm/lua/utility/prepare_auth.lua +0 -52
- package/project/.sdk/tm/perl/utility/prepare_auth.pm +0 -56
- package/project/.sdk/tm/php/utility/PrepareAuth.php +0 -45
- package/project/.sdk/tm/py/pkg/utility/prepare_auth.py +0 -46
- package/project/.sdk/tm/rb/utility/prepare_auth.rb +0 -35
- package/project/.sdk/tm/rust/utility/prepare_auth.rs +0 -65
- package/project/.sdk/tm/ts/src/utility/PrepareAuthUtility.ts +0 -78
|
@@ -0,0 +1,1131 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260917-1242-0 (go/plugins/minivault/minivault.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 108c4a914bee7b6534c30d1c68c25cd1b9377696 [tag: sdk-20260917-1242-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// A mini vault: every secret a project owns, encrypted, in ONE FILE.
|
|
5
|
+
//
|
|
6
|
+
// The store to reach for before there is a vault server. There is
|
|
7
|
+
// nothing to run and nothing to reach over a socket - the whole store is
|
|
8
|
+
// a single binary file - and the same chain that reads it in development
|
|
9
|
+
// reads HashiCorp or AWS in production by changing config, which is the
|
|
10
|
+
// reason sekreto exists.
|
|
11
|
+
//
|
|
12
|
+
// It is a plugin rather than a built-in kind because it needs crypto,
|
|
13
|
+
// which is the line the four built-ins stay behind.
|
|
14
|
+
//
|
|
15
|
+
// THE KEY DECIDES WHAT THE VAULT HOLDS. A master key reads and writes
|
|
16
|
+
// every name and mints restricted keys. A restricted key reads the names
|
|
17
|
+
// it was granted and CANNOT DERIVE ANY OTHER - the restriction is the
|
|
18
|
+
// cryptography rather than a check this code performs, so a copy of the
|
|
19
|
+
// file plus a restricted passphrase yields exactly what was granted and
|
|
20
|
+
// nothing else. What that does and does not protect is set out in
|
|
21
|
+
// DOCS.md under "What the mini vault protects".
|
|
22
|
+
//
|
|
23
|
+
// A port of typescript/plugins/minivault.ts, which is canonical.
|
|
24
|
+
package minivault
|
|
25
|
+
|
|
26
|
+
import (
|
|
27
|
+
"bytes"
|
|
28
|
+
"encoding/base64"
|
|
29
|
+
"encoding/hex"
|
|
30
|
+
"encoding/json"
|
|
31
|
+
"os"
|
|
32
|
+
"path/filepath"
|
|
33
|
+
"sort"
|
|
34
|
+
"sync"
|
|
35
|
+
|
|
36
|
+
plugin "GOMODULE/feature/secrets/plugin"
|
|
37
|
+
|
|
38
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
// THE WRITE LOCK IS PER FILE, NOT PER HANDLE.
|
|
42
|
+
//
|
|
43
|
+
// Each Vault has its own mutex, and two handles on the same file have
|
|
44
|
+
// two of them, so they did not coordinate: both read a snapshot, both
|
|
45
|
+
// wrote, and the second rename discarded the first one's change while
|
|
46
|
+
// reporting success. Keyed by the absolute path, so two handles spelled
|
|
47
|
+
// differently still meet.
|
|
48
|
+
//
|
|
49
|
+
// This is a guarantee WITHIN one process. Two processes still race, and
|
|
50
|
+
// the format's answer to that is the exclusive create and the atomic
|
|
51
|
+
// rename: a reader sees one whole vault or the other, never half of one.
|
|
52
|
+
var (
|
|
53
|
+
locksmu sync.Mutex
|
|
54
|
+
locks = map[string]*sync.Mutex{}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
func lockfor(file string) *sync.Mutex {
|
|
58
|
+
key, err := filepath.Abs(file)
|
|
59
|
+
if nil != err {
|
|
60
|
+
key = file
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
locksmu.Lock()
|
|
64
|
+
defer locksmu.Unlock()
|
|
65
|
+
|
|
66
|
+
lock, has := locks[key]
|
|
67
|
+
if !has {
|
|
68
|
+
lock = &sync.Mutex{}
|
|
69
|
+
locks[key] = lock
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return lock
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// KeyInfo is what a key may do. Grants is empty for a master key, which
|
|
76
|
+
// reads and writes every name there is.
|
|
77
|
+
type KeyInfo struct {
|
|
78
|
+
Key string `json:"key"`
|
|
79
|
+
Master bool `json:"master"`
|
|
80
|
+
Write bool `json:"write"`
|
|
81
|
+
Grants []string `json:"grants"`
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// GrantSpec mints a restricted key.
|
|
85
|
+
type GrantSpec struct {
|
|
86
|
+
// Key is the id the new key answers to.
|
|
87
|
+
Key string
|
|
88
|
+
// Passphrase is what unwraps it. Nothing else does, and no master can
|
|
89
|
+
// recover it - a lost restricted passphrase is re-granted, never read
|
|
90
|
+
// back.
|
|
91
|
+
Passphrase string
|
|
92
|
+
// Names the key may read. A name that does not exist yet is allowed
|
|
93
|
+
// and means what it says: the key reads it once a master writes it.
|
|
94
|
+
Names []string
|
|
95
|
+
// Write says whether it may overwrite the values it can read.
|
|
96
|
+
Write bool
|
|
97
|
+
// Iterations for this key's PBKDF2, defaulting to the opening
|
|
98
|
+
// handle's.
|
|
99
|
+
Iterations int
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Options open one vault file as one key.
|
|
103
|
+
type Options struct {
|
|
104
|
+
// File is the vault file.
|
|
105
|
+
File string
|
|
106
|
+
// Key is which key to open with. Default MasterKey.
|
|
107
|
+
Key string
|
|
108
|
+
// Passphrase unwraps that key.
|
|
109
|
+
Passphrase string
|
|
110
|
+
// Iterations is the PBKDF2 round count used when this handle CREATES
|
|
111
|
+
// a key. Reading uses what the file records for the key being opened.
|
|
112
|
+
Iterations int
|
|
113
|
+
// Create makes the file, with this key as its master, if it is not
|
|
114
|
+
// there.
|
|
115
|
+
//
|
|
116
|
+
// Off by default. A missing vault is far more often a broken
|
|
117
|
+
// deployment than a new one, and a store that invents itself where a
|
|
118
|
+
// real vault was meant to be answers every read with a miss.
|
|
119
|
+
Create bool
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ring is what a key holds, as it is stored: EITHER a root key (master)
|
|
123
|
+
// OR a fixed set of derived per-secret keys (restricted).
|
|
124
|
+
//
|
|
125
|
+
// GRANTS IS A POINTER, AND THAT IS THE WHOLE OF A FORMAT BUG THIS ONCE
|
|
126
|
+
// HAD. The asymmetry is the format: a master's ring carries `root` and no
|
|
127
|
+
// `grants`, and a restricted key's carries `grants` - POSSIBLY EMPTY - and
|
|
128
|
+
// no `root`. A plain map with `omitempty` gets the first half right and
|
|
129
|
+
// the second half wrong, because `omitempty` drops an empty map as
|
|
130
|
+
// readily as a nil one: a key granted nothing wrote
|
|
131
|
+
// `{"v":1,"write":false}` where the canonical writes
|
|
132
|
+
// `{"v":1,"write":false,"grants":{}}`, a vault 12 bytes shorter than
|
|
133
|
+
// every other port's for the same input.
|
|
134
|
+
//
|
|
135
|
+
// It read back identically everywhere, because an absent `grants` parses
|
|
136
|
+
// as empty - which is why no round trip saw it and why the fixtures could
|
|
137
|
+
// not: none of them has a key granted nothing. The bytes are the
|
|
138
|
+
// contract, so the pointer makes the empty map survive while nil omits.
|
|
139
|
+
type ring struct {
|
|
140
|
+
V int `json:"v"`
|
|
141
|
+
Write bool `json:"write"`
|
|
142
|
+
Root string `json:"root,omitempty"`
|
|
143
|
+
Grants *map[string]string `json:"grants,omitempty"`
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// orempty is the read side of that pointer: an absent `grants` and an
|
|
147
|
+
// empty one mean the same thing to a reader, and only the writer has to
|
|
148
|
+
// tell them apart.
|
|
149
|
+
func orempty(held *map[string]string) *map[string]string {
|
|
150
|
+
if nil != held {
|
|
151
|
+
return held
|
|
152
|
+
}
|
|
153
|
+
empty := map[string]string{}
|
|
154
|
+
return &empty
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// meta is what a master recorded about a key when it minted it, sealed
|
|
158
|
+
// under the vault's meta key so that Keys can answer without holding any
|
|
159
|
+
// other key's passphrase.
|
|
160
|
+
type meta struct {
|
|
161
|
+
V int `json:"v"`
|
|
162
|
+
Master bool `json:"master"`
|
|
163
|
+
Write bool `json:"write"`
|
|
164
|
+
Grants []string `json:"grants"`
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Vault is a handle on one vault file, opened as ONE key.
|
|
168
|
+
//
|
|
169
|
+
// Every method answers as that key: List shows the names it may read,
|
|
170
|
+
// Get answers for those and misses on the rest, and the master-only
|
|
171
|
+
// methods refuse for any other key. Nothing is read or derived until the
|
|
172
|
+
// first call that needs the file, so putting a vault in a chain costs no
|
|
173
|
+
// key derivation until a secret is actually wanted.
|
|
174
|
+
type Vault struct {
|
|
175
|
+
file string
|
|
176
|
+
key string
|
|
177
|
+
passphrase string
|
|
178
|
+
iterations int
|
|
179
|
+
create bool
|
|
180
|
+
|
|
181
|
+
// Guards the derived state below. A Sekreto may resolve from several
|
|
182
|
+
// goroutines, and two of them deriving the same ring concurrently is
|
|
183
|
+
// wasted work at best and a torn map at worst.
|
|
184
|
+
mu sync.Mutex
|
|
185
|
+
info *KeyInfo
|
|
186
|
+
root []byte
|
|
187
|
+
grants map[string][]byte
|
|
188
|
+
// THE SEALED RING THIS WAS DERIVED FROM, kept so that every later
|
|
189
|
+
// call can check the file still says the same thing. A handle that
|
|
190
|
+
// cached its keys and never looked again kept reading a vault after
|
|
191
|
+
// its key was revoked, which is the one thing Revoke promises.
|
|
192
|
+
ring *sealed
|
|
193
|
+
|
|
194
|
+
// write serializes this handle's writes with every other handle on
|
|
195
|
+
// the same file in this process.
|
|
196
|
+
write *sync.Mutex
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// copyinfo is a detached copy, so that what a caller is handed cannot
|
|
200
|
+
// become what this vault believes.
|
|
201
|
+
func copyinfo(info *KeyInfo) *KeyInfo {
|
|
202
|
+
return &KeyInfo{
|
|
203
|
+
Key: info.Key,
|
|
204
|
+
Master: info.Master,
|
|
205
|
+
Write: info.Write,
|
|
206
|
+
Grants: append([]string{}, info.Grants...),
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
func sameseal(left *sealed, right *sealed) bool {
|
|
211
|
+
return bytes.Equal(left.IV, right.IV) && bytes.Equal(left.Blob, right.Blob)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Open a vault file as one key.
|
|
215
|
+
//
|
|
216
|
+
// The handle is lazy. Nothing is read, and no passphrase is stretched,
|
|
217
|
+
// until a method needs the file - so a chain of ten providers costs ten
|
|
218
|
+
// objects rather than ten PBKDF2 runs.
|
|
219
|
+
func Open(options *Options) (*Vault, error) {
|
|
220
|
+
if nil == options || "" == options.File {
|
|
221
|
+
return nil, fail("a vault needs a file")
|
|
222
|
+
}
|
|
223
|
+
if "" == options.Passphrase {
|
|
224
|
+
return nil, fail("a vault needs a passphrase")
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
key := options.Key
|
|
228
|
+
if "" == key {
|
|
229
|
+
key = MasterKey
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
iterations := options.Iterations
|
|
233
|
+
if 0 >= iterations {
|
|
234
|
+
iterations = Iterations
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if err := checkid(key, "a vault needs a key id"); nil != err {
|
|
238
|
+
return nil, err
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return &Vault{
|
|
242
|
+
file: options.File,
|
|
243
|
+
key: key,
|
|
244
|
+
passphrase: options.Passphrase,
|
|
245
|
+
iterations: iterations,
|
|
246
|
+
create: options.Create,
|
|
247
|
+
write: lockfor(options.File),
|
|
248
|
+
}, nil
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Create makes a vault file and returns a handle on its master key.
|
|
252
|
+
//
|
|
253
|
+
// Refuses a file that is already there: a vault is created once, and
|
|
254
|
+
// overwriting one discards every secret in it along with every key that
|
|
255
|
+
// could read them.
|
|
256
|
+
func Create(options *Options) (*Vault, error) {
|
|
257
|
+
vault, err := Open(options)
|
|
258
|
+
if nil != err {
|
|
259
|
+
return nil, err
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// No os.Stat first: the check and the write would be two steps, and
|
|
263
|
+
// putnew refuses an existing file in ONE, which is what makes two
|
|
264
|
+
// processes racing to create a vault leave one vault.
|
|
265
|
+
fresh, err := newvault(vault.key, vault.passphrase, vault.iterations)
|
|
266
|
+
if nil != err {
|
|
267
|
+
return nil, err
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if err := putnew(vault.file, fresh); nil != err {
|
|
271
|
+
return nil, err
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return vault, nil
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// File is the vault file this handle reads.
|
|
278
|
+
func (vault *Vault) File() string { return vault.file }
|
|
279
|
+
|
|
280
|
+
// Key is the key id this handle opens with.
|
|
281
|
+
func (vault *Vault) Key() string { return vault.key }
|
|
282
|
+
|
|
283
|
+
// Info derives the key and reads the file NOW rather than at first use.
|
|
284
|
+
//
|
|
285
|
+
// A COPY. Set asks Info.Write whether this key may write, so handing the
|
|
286
|
+
// caller the value that answer lives in let it flip its own permission:
|
|
287
|
+
// `info, _ := v.Info(); info.Write = true` turned a read-only key into a
|
|
288
|
+
// writing one. Authorization state does not leave this struct.
|
|
289
|
+
func (vault *Vault) Info() (*KeyInfo, error) {
|
|
290
|
+
vault.mu.Lock()
|
|
291
|
+
defer vault.mu.Unlock()
|
|
292
|
+
|
|
293
|
+
_, info, err := vault.load()
|
|
294
|
+
if nil != err {
|
|
295
|
+
return nil, err
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return copyinfo(info), nil
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Close forgets the derived keys. The next call opens again.
|
|
302
|
+
func (vault *Vault) Close() {
|
|
303
|
+
vault.mu.Lock()
|
|
304
|
+
defer vault.mu.Unlock()
|
|
305
|
+
|
|
306
|
+
vault.info = nil
|
|
307
|
+
vault.root = nil
|
|
308
|
+
vault.grants = nil
|
|
309
|
+
vault.ring = nil
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// --- reading the file ------------------------------------------------
|
|
313
|
+
|
|
314
|
+
func (vault *Vault) bytes() ([]byte, error) {
|
|
315
|
+
raw, err := os.ReadFile(vault.file)
|
|
316
|
+
if nil == err {
|
|
317
|
+
return raw, nil
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// A vault is configured deliberately, with a key. Its absence is a
|
|
321
|
+
// broken deployment and never "no secrets here": answering a miss
|
|
322
|
+
// would send the chain on to a weaker store, which is the failure
|
|
323
|
+
// mode this library most has to avoid. Create is the caller saying
|
|
324
|
+
// the opposite, in writing.
|
|
325
|
+
if os.IsNotExist(err) {
|
|
326
|
+
if !vault.create {
|
|
327
|
+
return nil, fail("no vault file: " + vault.file)
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
fresh, err := newvault(vault.key, vault.passphrase, vault.iterations)
|
|
331
|
+
if nil != err {
|
|
332
|
+
return nil, err
|
|
333
|
+
}
|
|
334
|
+
if err := putnew(vault.file, fresh); nil != err {
|
|
335
|
+
return nil, err
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return os.ReadFile(vault.file)
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return nil, fail("cannot read " + vault.file + ": " + err.Error())
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// load reads the file and, the first time, unwraps this key's ring.
|
|
345
|
+
// Callers hold vault.mu.
|
|
346
|
+
func (vault *Vault) load() (*vaultFile, *KeyInfo, error) {
|
|
347
|
+
raw, err := vault.bytes()
|
|
348
|
+
if nil != err {
|
|
349
|
+
return nil, nil, err
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
file, err := readfile(raw)
|
|
353
|
+
if nil != err {
|
|
354
|
+
return nil, nil, err
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
record := file.key(vault.key)
|
|
358
|
+
if nil == record {
|
|
359
|
+
// REVOKED, or never there. Either way this handle is finished,
|
|
360
|
+
// and dropping what it derived is what stops the next call
|
|
361
|
+
// answering from memory.
|
|
362
|
+
vault.info, vault.root, vault.grants, vault.ring = nil, nil, nil, nil
|
|
363
|
+
return nil, nil, fail("no such key: " + vault.key)
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// The file still holds this key, and holds the SAME ring: a key
|
|
367
|
+
// revoked and re-granted under another passphrase is a different key
|
|
368
|
+
// wearing the id, and re-deriving is what refuses it.
|
|
369
|
+
if nil != vault.info && nil != vault.ring && sameseal(vault.ring, record.Ring) {
|
|
370
|
+
return file, vault.info, nil
|
|
371
|
+
}
|
|
372
|
+
vault.info, vault.root, vault.grants, vault.ring = nil, nil, nil, nil
|
|
373
|
+
|
|
374
|
+
plain, err := unseal(kek(vault.passphrase, record.Salt, record.Iters), record.Ring,
|
|
375
|
+
aadRing+vault.key, "wrong passphrase for key "+vault.key+", or a damaged vault")
|
|
376
|
+
if nil != err {
|
|
377
|
+
return nil, nil, err
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
held := &ring{}
|
|
381
|
+
if err := jsonof(plain, held, "key ring for "+vault.key); nil != err {
|
|
382
|
+
return nil, nil, err
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
grants := map[string][]byte{}
|
|
386
|
+
names := []string{}
|
|
387
|
+
held.Grants = orempty(held.Grants)
|
|
388
|
+
for name, key := range *held.Grants {
|
|
389
|
+
raw, err := unb64(key, "a granted key")
|
|
390
|
+
if nil != err {
|
|
391
|
+
return nil, nil, err
|
|
392
|
+
}
|
|
393
|
+
grants[name] = raw
|
|
394
|
+
names = append(names, name)
|
|
395
|
+
}
|
|
396
|
+
sort.Strings(names)
|
|
397
|
+
|
|
398
|
+
root := []byte(nil)
|
|
399
|
+
if "" != held.Root {
|
|
400
|
+
if root, err = unb64(held.Root, "the root key"); nil != err {
|
|
401
|
+
return nil, nil, err
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
vault.root = root
|
|
406
|
+
vault.grants = grants
|
|
407
|
+
vault.ring = record.Ring
|
|
408
|
+
vault.info = &KeyInfo{
|
|
409
|
+
Key: vault.key,
|
|
410
|
+
Master: nil != root,
|
|
411
|
+
Write: nil != root || held.Write,
|
|
412
|
+
Grants: names,
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
return file, vault.info, nil
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// rootof is the root key, or a refusal naming what needed it.
|
|
419
|
+
func (vault *Vault) rootof(what string) ([]byte, error) {
|
|
420
|
+
if nil == vault.root {
|
|
421
|
+
return nil, fail(what + " needs a master key, and " + vault.key + " is restricted")
|
|
422
|
+
}
|
|
423
|
+
return vault.root, nil
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// keyfor is the key for one name, or nil when this key cannot reach it.
|
|
427
|
+
func (vault *Vault) keyfor(name string) []byte {
|
|
428
|
+
if nil != vault.root {
|
|
429
|
+
return secretkey(vault.root, name)
|
|
430
|
+
}
|
|
431
|
+
return vault.grants[name]
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// save replaces the file rather than editing it in place. The rename is
|
|
435
|
+
// what makes a concurrent reader see either the old file or the new one,
|
|
436
|
+
// so a write interrupted halfway leaves a vault rather than wreckage.
|
|
437
|
+
//
|
|
438
|
+
// THE TEMPORARY IS RANDOM AND EXCLUSIVE. `<vault>.<pid>.tmp` is a name
|
|
439
|
+
// anyone can predict, and os.WriteFile FOLLOWS a symlink, so anyone who
|
|
440
|
+
// could write the vault's directory could point that name at another
|
|
441
|
+
// file and have the next save truncate it. O_EXCL refuses an existing
|
|
442
|
+
// path and will not follow a symlink to create one, and the random
|
|
443
|
+
// suffix stops two writers colliding on the name.
|
|
444
|
+
func (vault *Vault) save(file *vaultFile) error {
|
|
445
|
+
suffix, err := random(8)
|
|
446
|
+
if nil != err {
|
|
447
|
+
return err
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
temp := vault.file + "." + hex.EncodeToString(suffix) + ".tmp"
|
|
451
|
+
|
|
452
|
+
handle, err := os.OpenFile(temp, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600)
|
|
453
|
+
if nil != err {
|
|
454
|
+
return fail("cannot write " + vault.file + ": " + err.Error())
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if _, err := handle.Write(writefile(file)); nil != err {
|
|
458
|
+
handle.Close()
|
|
459
|
+
os.Remove(temp)
|
|
460
|
+
return fail("cannot write " + vault.file + ": " + err.Error())
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
if err := handle.Close(); nil != err {
|
|
464
|
+
os.Remove(temp)
|
|
465
|
+
return fail("cannot write " + vault.file + ": " + err.Error())
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if err := os.Rename(temp, vault.file); nil != err {
|
|
469
|
+
// The vault is unchanged either way, and the write error is what
|
|
470
|
+
// the caller needs to be told about.
|
|
471
|
+
os.Remove(temp)
|
|
472
|
+
return fail("cannot write " + vault.file + ": " + err.Error())
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return nil
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// --- reading secrets -------------------------------------------------
|
|
479
|
+
|
|
480
|
+
// List is the names this key can read, sorted.
|
|
481
|
+
func (vault *Vault) List() ([]string, error) {
|
|
482
|
+
vault.mu.Lock()
|
|
483
|
+
defer vault.mu.Unlock()
|
|
484
|
+
|
|
485
|
+
file, info, err := vault.load()
|
|
486
|
+
if nil != err {
|
|
487
|
+
return nil, err
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
names := []string{}
|
|
491
|
+
|
|
492
|
+
if nil != vault.root {
|
|
493
|
+
namekey := mac(vault.root, labelNames)
|
|
494
|
+
for _, entry := range file.Entries {
|
|
495
|
+
plain, err := unseal(namekey, entry.Name, aadName, "a secret name is damaged")
|
|
496
|
+
if nil != err {
|
|
497
|
+
return nil, err
|
|
498
|
+
}
|
|
499
|
+
names = append(names, string(plain))
|
|
500
|
+
}
|
|
501
|
+
} else {
|
|
502
|
+
// A restricted key has no name key, so it reports the grants it
|
|
503
|
+
// can actually find: the vault never tells it what else is there.
|
|
504
|
+
for _, name := range info.Grants {
|
|
505
|
+
if nil != file.entry(entryid(vault.grants[name])) {
|
|
506
|
+
names = append(names, name)
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
sort.Strings(names)
|
|
512
|
+
|
|
513
|
+
return names, nil
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// Get is the value, and whether this key could read it. A name the vault
|
|
517
|
+
// does not hold and a name this key was not granted are both a miss.
|
|
518
|
+
func (vault *Vault) Get(name string) (string, bool, error) {
|
|
519
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
520
|
+
return "", false, err
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
vault.mu.Lock()
|
|
524
|
+
defer vault.mu.Unlock()
|
|
525
|
+
|
|
526
|
+
file, _, err := vault.load()
|
|
527
|
+
if nil != err {
|
|
528
|
+
return "", false, err
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
key := vault.keyfor(name)
|
|
532
|
+
if nil == key {
|
|
533
|
+
// OUTSIDE THE GRANT IS A MISS, deliberately. The vault answers as
|
|
534
|
+
// the key that opened it, so a name this key cannot read is a
|
|
535
|
+
// name this store does not hold for this caller - the same answer
|
|
536
|
+
// a stranger's vault gives, and the one that makes a restricted
|
|
537
|
+
// key in front of a broader store a workable chain.
|
|
538
|
+
return "", false, nil
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
entry := file.entry(entryid(key))
|
|
542
|
+
if nil == entry {
|
|
543
|
+
return "", false, nil
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
plain, err := unseal(key, entry.Value, aadSecret+name, "the value of "+name+" is damaged")
|
|
547
|
+
if nil != err {
|
|
548
|
+
return "", false, err
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
return string(plain), true, nil
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// Has says whether this key can read that name.
|
|
555
|
+
func (vault *Vault) Has(name string) (bool, error) {
|
|
556
|
+
_, has, err := vault.Get(name)
|
|
557
|
+
return has, err
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// --- writing ---------------------------------------------------------
|
|
561
|
+
|
|
562
|
+
// Set writes a value. A master writes any name; a restricted key holding
|
|
563
|
+
// Write overwrites the names it was granted, and creates none.
|
|
564
|
+
func (vault *Vault) Set(name string, value string) error {
|
|
565
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
566
|
+
return err
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
// Every write on this file, from any handle in this process,
|
|
570
|
+
// serializes here; see lockfor.
|
|
571
|
+
vault.write.Lock()
|
|
572
|
+
defer vault.write.Unlock()
|
|
573
|
+
|
|
574
|
+
vault.mu.Lock()
|
|
575
|
+
defer vault.mu.Unlock()
|
|
576
|
+
|
|
577
|
+
file, info, err := vault.load()
|
|
578
|
+
if nil != err {
|
|
579
|
+
return err
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
if !info.Write {
|
|
583
|
+
return fail("key " + info.Key + " is read-only")
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
key := vault.keyfor(name)
|
|
587
|
+
if nil == key {
|
|
588
|
+
return fail("key " + info.Key + " was not granted " + name)
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
box, err := seal(key, []byte(value), aadSecret+name)
|
|
592
|
+
if nil != err {
|
|
593
|
+
return err
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if entry := file.entry(entryid(key)); nil != entry {
|
|
597
|
+
entry.Value = box
|
|
598
|
+
} else {
|
|
599
|
+
// A NEW NAME NEEDS THE NAME KEY, which only a master holds. So a
|
|
600
|
+
// restricted key with Write updates what it was granted and
|
|
601
|
+
// cannot grow the vault, which is what "restricted" has to mean
|
|
602
|
+
// for the grant list to stay the whole story.
|
|
603
|
+
root, err := vault.rootof("creating the secret " + name)
|
|
604
|
+
if nil != err {
|
|
605
|
+
return err
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
sealedname, err := seal(mac(root, labelNames), []byte(name), aadName)
|
|
609
|
+
if nil != err {
|
|
610
|
+
return err
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
file.Entries = append(file.Entries,
|
|
614
|
+
&entryRecord{ID: entryid(key), Name: sealedname, Value: box})
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
return vault.save(file)
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// Remove drops a name. Master only.
|
|
621
|
+
func (vault *Vault) Remove(name string) error {
|
|
622
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
623
|
+
return err
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// Every write on this file, from any handle in this process,
|
|
627
|
+
// serializes here; see lockfor.
|
|
628
|
+
vault.write.Lock()
|
|
629
|
+
defer vault.write.Unlock()
|
|
630
|
+
|
|
631
|
+
vault.mu.Lock()
|
|
632
|
+
defer vault.mu.Unlock()
|
|
633
|
+
|
|
634
|
+
file, _, err := vault.load()
|
|
635
|
+
if nil != err {
|
|
636
|
+
return err
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
root, err := vault.rootof("removing a secret")
|
|
640
|
+
if nil != err {
|
|
641
|
+
return err
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
want := entryid(secretkey(root, name))
|
|
645
|
+
kept := []*entryRecord{}
|
|
646
|
+
found := false
|
|
647
|
+
|
|
648
|
+
for _, entry := range file.Entries {
|
|
649
|
+
if !found && bytes.Equal(entry.ID, want) {
|
|
650
|
+
found = true
|
|
651
|
+
continue
|
|
652
|
+
}
|
|
653
|
+
kept = append(kept, entry)
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
if !found {
|
|
657
|
+
return fail("no such secret: " + name)
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
file.Entries = kept
|
|
661
|
+
|
|
662
|
+
return vault.save(file)
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// --- keys ------------------------------------------------------------
|
|
666
|
+
|
|
667
|
+
// Keys is every key in the file, with what it may do. Master only.
|
|
668
|
+
func (vault *Vault) Keys() ([]*KeyInfo, error) {
|
|
669
|
+
vault.mu.Lock()
|
|
670
|
+
defer vault.mu.Unlock()
|
|
671
|
+
|
|
672
|
+
file, _, err := vault.load()
|
|
673
|
+
if nil != err {
|
|
674
|
+
return nil, err
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
root, err := vault.rootof("listing the keys")
|
|
678
|
+
if nil != err {
|
|
679
|
+
return nil, err
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
metakey := mac(root, labelMeta)
|
|
683
|
+
out := []*KeyInfo{}
|
|
684
|
+
|
|
685
|
+
for _, record := range file.Keys {
|
|
686
|
+
info := &KeyInfo{Key: record.ID, Grants: []string{}}
|
|
687
|
+
|
|
688
|
+
plain, err := unseal(metakey, record.Meta, aadMeta+record.ID, "metadata")
|
|
689
|
+
if nil == err {
|
|
690
|
+
noted := &meta{}
|
|
691
|
+
if err := jsonof(plain, noted, "metadata for key "+record.ID); nil != err {
|
|
692
|
+
return nil, err
|
|
693
|
+
}
|
|
694
|
+
info.Master = noted.Master
|
|
695
|
+
info.Write = noted.Write
|
|
696
|
+
info.Grants = append([]string{}, noted.Grants...)
|
|
697
|
+
sort.Strings(info.Grants)
|
|
698
|
+
}
|
|
699
|
+
// A record written under a root key this one has replaced. The
|
|
700
|
+
// key is still in the file and still opens with its own
|
|
701
|
+
// passphrase, so it is reported rather than hidden - with what it
|
|
702
|
+
// can do unknown.
|
|
703
|
+
|
|
704
|
+
out = append(out, info)
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
return out, nil
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Grant mints a restricted key. Master only.
|
|
711
|
+
func (vault *Vault) Grant(spec *GrantSpec) error {
|
|
712
|
+
// Every write on this file, from any handle in this process,
|
|
713
|
+
// serializes here; see lockfor.
|
|
714
|
+
vault.write.Lock()
|
|
715
|
+
defer vault.write.Unlock()
|
|
716
|
+
|
|
717
|
+
vault.mu.Lock()
|
|
718
|
+
defer vault.mu.Unlock()
|
|
719
|
+
|
|
720
|
+
file, _, err := vault.load()
|
|
721
|
+
if nil != err {
|
|
722
|
+
return err
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
root, err := vault.rootof("granting a key")
|
|
726
|
+
if nil != err {
|
|
727
|
+
return err
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
if nil == spec {
|
|
731
|
+
return fail("a grant needs a key id")
|
|
732
|
+
}
|
|
733
|
+
if err := checkid(spec.Key, "a grant needs a key id"); nil != err {
|
|
734
|
+
return err
|
|
735
|
+
}
|
|
736
|
+
if "" == spec.Passphrase {
|
|
737
|
+
return fail("a grant needs a passphrase")
|
|
738
|
+
}
|
|
739
|
+
if nil != file.key(spec.Key) {
|
|
740
|
+
return fail("key already exists: " + spec.Key)
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
names := append([]string{}, spec.Names...)
|
|
744
|
+
sort.Strings(names)
|
|
745
|
+
|
|
746
|
+
grants := map[string]string{}
|
|
747
|
+
for _, name := range names {
|
|
748
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
749
|
+
return err
|
|
750
|
+
}
|
|
751
|
+
grants[name] = b64(secretkey(root, name))
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
iterations := spec.Iterations
|
|
755
|
+
if 0 >= iterations {
|
|
756
|
+
iterations = vault.iterations
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
record, err := sealkey(root, spec.Key, spec.Passphrase, iterations,
|
|
760
|
+
&ring{V: format, Write: spec.Write, Grants: &grants},
|
|
761
|
+
&meta{V: format, Master: false, Write: spec.Write, Grants: names})
|
|
762
|
+
if nil != err {
|
|
763
|
+
return err
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
file.Keys = append(file.Keys, record)
|
|
767
|
+
|
|
768
|
+
return vault.save(file)
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// Revoke drops a key. Master only.
|
|
772
|
+
//
|
|
773
|
+
// Anyone who already copied the file keeps whatever that key could read,
|
|
774
|
+
// so revoking bars future reads of the LIVE file and Rotate is what
|
|
775
|
+
// takes a secret back.
|
|
776
|
+
func (vault *Vault) Revoke(key string) error {
|
|
777
|
+
// Every write on this file, from any handle in this process,
|
|
778
|
+
// serializes here; see lockfor.
|
|
779
|
+
vault.write.Lock()
|
|
780
|
+
defer vault.write.Unlock()
|
|
781
|
+
|
|
782
|
+
vault.mu.Lock()
|
|
783
|
+
defer vault.mu.Unlock()
|
|
784
|
+
|
|
785
|
+
file, info, err := vault.load()
|
|
786
|
+
if nil != err {
|
|
787
|
+
return err
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
if _, err := vault.rootof("revoking a key"); nil != err {
|
|
791
|
+
return err
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
if key == info.Key {
|
|
795
|
+
return fail("a key cannot revoke itself: " + key)
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
if nil == file.key(key) {
|
|
799
|
+
return fail("no such key: " + key)
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
kept := []*keyRecord{}
|
|
803
|
+
for _, record := range file.Keys {
|
|
804
|
+
if key != record.ID {
|
|
805
|
+
kept = append(kept, record)
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
file.Keys = kept
|
|
809
|
+
|
|
810
|
+
return vault.save(file)
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
// Rotate takes a new root key, re-encrypts every value under it, and
|
|
814
|
+
// DROPS EVERY OTHER KEY. Master only.
|
|
815
|
+
//
|
|
816
|
+
// The other keys go because they must: their rings are sealed under
|
|
817
|
+
// passphrases this process does not have, so there is no way to hand
|
|
818
|
+
// them keys they can unwrap. Re-grant afterwards.
|
|
819
|
+
func (vault *Vault) Rotate() error {
|
|
820
|
+
// Every write on this file, from any handle in this process,
|
|
821
|
+
// serializes here; see lockfor.
|
|
822
|
+
vault.write.Lock()
|
|
823
|
+
defer vault.write.Unlock()
|
|
824
|
+
|
|
825
|
+
vault.mu.Lock()
|
|
826
|
+
defer vault.mu.Unlock()
|
|
827
|
+
|
|
828
|
+
file, _, err := vault.load()
|
|
829
|
+
if nil != err {
|
|
830
|
+
return err
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
oldroot, err := vault.rootof("rotating the vault")
|
|
834
|
+
if nil != err {
|
|
835
|
+
return err
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
iters := file.key(vault.key).Iters
|
|
839
|
+
|
|
840
|
+
// Read everything out under the old root before anything changes:
|
|
841
|
+
// once the root is replaced the old derived keys are unreachable.
|
|
842
|
+
oldnamekey := mac(oldroot, labelNames)
|
|
843
|
+
held := [][2]string{}
|
|
844
|
+
|
|
845
|
+
for _, entry := range file.Entries {
|
|
846
|
+
plain, err := unseal(oldnamekey, entry.Name, aadName, "a secret name is damaged")
|
|
847
|
+
if nil != err {
|
|
848
|
+
return err
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
name := string(plain)
|
|
852
|
+
key := secretkey(oldroot, name)
|
|
853
|
+
|
|
854
|
+
value, err := unseal(key, entry.Value, aadSecret+name, "the value of "+name+" is damaged")
|
|
855
|
+
if nil != err {
|
|
856
|
+
return err
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
held = append(held, [2]string{name, string(value)})
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
root, err := random(keyLen)
|
|
863
|
+
if nil != err {
|
|
864
|
+
return err
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
namekey := mac(root, labelNames)
|
|
868
|
+
entries := []*entryRecord{}
|
|
869
|
+
|
|
870
|
+
for _, secret := range held {
|
|
871
|
+
key := secretkey(root, secret[0])
|
|
872
|
+
|
|
873
|
+
sealedname, err := seal(namekey, []byte(secret[0]), aadName)
|
|
874
|
+
if nil != err {
|
|
875
|
+
return err
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
box, err := seal(key, []byte(secret[1]), aadSecret+secret[0])
|
|
879
|
+
if nil != err {
|
|
880
|
+
return err
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
entries = append(entries, &entryRecord{ID: entryid(key), Name: sealedname, Value: box})
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
fresh, err := sealkey(root, vault.key, vault.passphrase, iters,
|
|
887
|
+
&ring{V: format, Write: true, Root: b64(root)},
|
|
888
|
+
&meta{V: format, Master: true, Write: true, Grants: []string{}})
|
|
889
|
+
if nil != err {
|
|
890
|
+
return err
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
// SAVE FIRST, adopt second. A handle holding the new root over a file
|
|
894
|
+
// that still holds the old one reads nothing and says the vault is
|
|
895
|
+
// damaged, which is the wrong story about a failed write.
|
|
896
|
+
if err := vault.save(&vaultFile{Keys: []*keyRecord{fresh}, Entries: entries}); nil != err {
|
|
897
|
+
return err
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
vault.root = root
|
|
901
|
+
vault.grants = map[string][]byte{}
|
|
902
|
+
vault.info = &KeyInfo{Key: vault.key, Master: true, Write: true, Grants: []string{}}
|
|
903
|
+
|
|
904
|
+
return nil
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
// --- making one ------------------------------------------------------
|
|
908
|
+
|
|
909
|
+
func sealkey(
|
|
910
|
+
root []byte, id string, passphrase string, iters int, held *ring, noted *meta,
|
|
911
|
+
) (*keyRecord, error) {
|
|
912
|
+
salt, err := random(saltLen)
|
|
913
|
+
if nil != err {
|
|
914
|
+
return nil, err
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
sealedring, err := seal(kek(passphrase, salt, iters), tojson(held), aadRing+id)
|
|
918
|
+
if nil != err {
|
|
919
|
+
return nil, err
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
sealedmeta, err := seal(mac(root, labelMeta), tojson(noted), aadMeta+id)
|
|
923
|
+
if nil != err {
|
|
924
|
+
return nil, err
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
return &keyRecord{ID: id, Salt: salt, Iters: iters, Ring: sealedring, Meta: sealedmeta}, nil
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
// newvault is a new vault: one master key, no secrets.
|
|
931
|
+
func newvault(keyid string, passphrase string, iterations int) (*vaultFile, error) {
|
|
932
|
+
root, err := random(keyLen)
|
|
933
|
+
if nil != err {
|
|
934
|
+
return nil, err
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
record, err := sealkey(root, keyid, passphrase, iterations,
|
|
938
|
+
&ring{V: format, Write: true, Root: b64(root)},
|
|
939
|
+
&meta{V: format, Master: true, Write: true, Grants: []string{}})
|
|
940
|
+
if nil != err {
|
|
941
|
+
return nil, err
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
return &vaultFile{Keys: []*keyRecord{record}, Entries: []*entryRecord{}}, nil
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
// putnew writes a vault file that is not there yet, and REFUSES one that
|
|
948
|
+
// is.
|
|
949
|
+
//
|
|
950
|
+
// Straight to the target under O_EXCL rather than through a temporary
|
|
951
|
+
// and a rename. Rename REPLACES its destination, so two processes
|
|
952
|
+
// creating the same vault both succeeded and the second discarded the
|
|
953
|
+
// first one's secrets; an os.Stat beforehand only narrows that window.
|
|
954
|
+
// There is nothing to lose by writing the target directly here, because
|
|
955
|
+
// there is no file to damage: either this call creates it or it fails.
|
|
956
|
+
func putnew(file string, vault *vaultFile) error {
|
|
957
|
+
handle, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600)
|
|
958
|
+
if nil != err {
|
|
959
|
+
if os.IsExist(err) {
|
|
960
|
+
return fail("vault file already exists: " + file)
|
|
961
|
+
}
|
|
962
|
+
return fail("cannot write " + file + ": " + err.Error())
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
if _, err := handle.Write(writefile(vault)); nil != err {
|
|
966
|
+
handle.Close()
|
|
967
|
+
os.Remove(file)
|
|
968
|
+
return fail("cannot write " + file + ": " + err.Error())
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
if err := handle.Close(); nil != err {
|
|
972
|
+
return fail("cannot write " + file + ": " + err.Error())
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
return nil
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
// --- base64 and json -------------------------------------------------
|
|
979
|
+
|
|
980
|
+
func b64(raw []byte) string {
|
|
981
|
+
return base64.StdEncoding.EncodeToString(raw)
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
func unb64(text string, what string) ([]byte, error) {
|
|
985
|
+
raw, err := base64.StdEncoding.DecodeString(text)
|
|
986
|
+
if nil != err {
|
|
987
|
+
return nil, fail("missing " + what)
|
|
988
|
+
}
|
|
989
|
+
return raw, nil
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
// tojson is json.Marshal, and deliberately not WriteJSON: these bytes
|
|
993
|
+
// are sealed and then parsed again inside this process, so the HTML
|
|
994
|
+
// escaping WriteJSON turns off is unobservable here. WriteJSON is for
|
|
995
|
+
// what LEAVES the process.
|
|
996
|
+
func tojson(value any) []byte {
|
|
997
|
+
raw, err := json.Marshal(value)
|
|
998
|
+
if nil != err {
|
|
999
|
+
return []byte("{}")
|
|
1000
|
+
}
|
|
1001
|
+
return raw
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
// --- the provider ----------------------------------------------------
|
|
1005
|
+
|
|
1006
|
+
// Provider reads a vault as one store in a chain.
|
|
1007
|
+
//
|
|
1008
|
+
// The provider is the READ half and nothing more: a chain resolves
|
|
1009
|
+
// secrets, and writing one is a deliberate act with an API of its own.
|
|
1010
|
+
// That API is the same handle, reached with VaultOf off a chain or built
|
|
1011
|
+
// directly with Open.
|
|
1012
|
+
type Provider struct {
|
|
1013
|
+
Vault *Vault
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
1017
|
+
return provider.Vault.Get(name)
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
func (provider *Provider) Describe() string {
|
|
1021
|
+
return "minivault:" + provider.Vault.File()
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
// VaultExport is the export key the vault API is published under, beside
|
|
1025
|
+
// the `provider` key every kind publishes.
|
|
1026
|
+
const VaultExport = "vault"
|
|
1027
|
+
|
|
1028
|
+
// Plugin is the `minivault` provider kind, as a voxgig/plugin definition.
|
|
1029
|
+
//
|
|
1030
|
+
// Written out rather than built by sekreto.ProviderPlugin, because this
|
|
1031
|
+
// definition publishes TWO exports: `provider`, the read half every kind
|
|
1032
|
+
// publishes, and `vault`, the programmatic API. voxgig/plugin's exports
|
|
1033
|
+
// are how a definition offers an application more than the host's own
|
|
1034
|
+
// vocabulary, and a store that can only be read is half a vault.
|
|
1035
|
+
//
|
|
1036
|
+
// The SekretoError wrapping is what ProviderPlugin would have done:
|
|
1037
|
+
// plugin wraps a code-less error returned from Define as
|
|
1038
|
+
// `plugin_define_failed`, and keeps one that already carries a code, so a
|
|
1039
|
+
// refusal of this provider's own configuration travels under
|
|
1040
|
+
// `sekreto_error` and comes back out of the host as itself.
|
|
1041
|
+
var Plugin = plugin.Definition{
|
|
1042
|
+
Name: "minivault",
|
|
1043
|
+
Define: func(inst *plugin.Inst) error {
|
|
1044
|
+
spec, err := sekreto.SpecOf(inst.Options())
|
|
1045
|
+
if nil != err {
|
|
1046
|
+
return err
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
// Configuration is refused HERE, so a mistyped chain fails at
|
|
1050
|
+
// construction. Reaching the file is not configuration: the
|
|
1051
|
+
// handle is lazy, and nothing is read or stretched until a
|
|
1052
|
+
// lookup.
|
|
1053
|
+
vault, err := Open(&Options{
|
|
1054
|
+
File: spec.File,
|
|
1055
|
+
Key: spec.VaultKey,
|
|
1056
|
+
Passphrase: spec.Passphrase,
|
|
1057
|
+
Iterations: spec.Iterations,
|
|
1058
|
+
Create: spec.Create,
|
|
1059
|
+
})
|
|
1060
|
+
if nil != err {
|
|
1061
|
+
return wrap(inst, err)
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
inst.Export(sekreto.ProviderExport, &Provider{Vault: vault})
|
|
1065
|
+
inst.Export(VaultExport, vault)
|
|
1066
|
+
|
|
1067
|
+
return nil
|
|
1068
|
+
},
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
func wrap(inst *plugin.Inst, err error) error {
|
|
1072
|
+
serr, is := err.(*sekreto.SekretoError)
|
|
1073
|
+
if !is {
|
|
1074
|
+
return err
|
|
1075
|
+
}
|
|
1076
|
+
return plugin.Fail(sekreto.ErrorCode, serr.Message,
|
|
1077
|
+
map[string]any{"ref": inst.Ref(), "cause": serr.Message})
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
// VaultOf is the vault behind a store in a chain, as its programmatic
|
|
1081
|
+
// API.
|
|
1082
|
+
//
|
|
1083
|
+
// Host() is the voxgig/plugin host the chain is made of, and a
|
|
1084
|
+
// definition's exports are readable off it by ref. This is the one call
|
|
1085
|
+
// that turns a store into an API, and it lives here rather than on
|
|
1086
|
+
// Sekreto because the core knows no plugin.
|
|
1087
|
+
//
|
|
1088
|
+
// With no store named, the unqualified alias answers: one vault in the
|
|
1089
|
+
// chain resolves whatever it is called, and two raise rather than
|
|
1090
|
+
// picking one.
|
|
1091
|
+
func VaultOf(sek *sekreto.Sekreto, store string) (*Vault, error) {
|
|
1092
|
+
if "" == store {
|
|
1093
|
+
found, err := sek.Host().Exports("minivault/" + VaultExport)
|
|
1094
|
+
if nil != err {
|
|
1095
|
+
return nil, err
|
|
1096
|
+
}
|
|
1097
|
+
vault, is := found.(*Vault)
|
|
1098
|
+
if !is {
|
|
1099
|
+
return nil, fail("no minivault store in this chain")
|
|
1100
|
+
}
|
|
1101
|
+
return vault, nil
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// A NAMED STORE MUST EXIST, and the alias must not stand in for it.
|
|
1105
|
+
// Host().Exports falls back to the alias when the exact ref misses,
|
|
1106
|
+
// so asking for `minivault` in a chain whose only vault is named
|
|
1107
|
+
// `app` used to hand back the `app` vault - and then write to it.
|
|
1108
|
+
// Naming a store that is not there raises, which is the rule the
|
|
1109
|
+
// whole library follows: Try already means "may not have it", so it
|
|
1110
|
+
// cannot also mean "may not exist".
|
|
1111
|
+
ref := "minivault"
|
|
1112
|
+
if "minivault" != store {
|
|
1113
|
+
ref = "minivault$" + store
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if live, err := sek.Host().Instance(ref); nil != err || nil == live {
|
|
1117
|
+
return nil, fail("no minivault store named " + store + " in this chain")
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
found, err := sek.Host().Exports(ref + "/" + VaultExport)
|
|
1121
|
+
if nil != err {
|
|
1122
|
+
return nil, err
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
vault, is := found.(*Vault)
|
|
1126
|
+
if !is {
|
|
1127
|
+
return nil, fail("no minivault store named " + store + " in this chain")
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
return vault, nil
|
|
1131
|
+
}
|