@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,1086 @@
|
|
|
1
|
+
(* VENDORED: @voxgig/sekreto sdk-20260917-1242-0 (ocaml/plugins/minivault.ml) *)
|
|
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 nothing
|
|
7
|
+
to run and nothing to reach over a socket - the whole store is a single
|
|
8
|
+
binary file - and the same chain that reads it in development reads
|
|
9
|
+
HashiCorp or AWS in production by changing config, which is the reason
|
|
10
|
+
sekreto exists.
|
|
11
|
+
|
|
12
|
+
A PLUGIN, not a built-in: this kind needs crypto, which is the line the
|
|
13
|
+
four built-in kinds stay behind. The four primitives come from the
|
|
14
|
+
OpenSSL this port already links, through `plugins/minivault_stubs.c` -
|
|
15
|
+
OCaml's distribution has no cipher at all, and the rule against new
|
|
16
|
+
packages stands. That file's header says why the dependency exception
|
|
17
|
+
now reaches this far.
|
|
18
|
+
|
|
19
|
+
THE KEY DECIDES WHAT THE VAULT HOLDS. A master key reads and writes
|
|
20
|
+
every name and mints restricted keys. A restricted key reads the names
|
|
21
|
+
it was granted and CANNOT DERIVE ANY OTHER - the restriction is the
|
|
22
|
+
cryptography rather than a check this code performs, so a copy of the
|
|
23
|
+
file plus a restricted passphrase yields exactly what was granted and
|
|
24
|
+
nothing else. What that does and does not protect is set out in DOCS.md
|
|
25
|
+
under "What the mini vault protects".
|
|
26
|
+
|
|
27
|
+
THE FILE FORMAT, which is the contract between the ports:
|
|
28
|
+
|
|
29
|
+
magic 4 'SKMV'
|
|
30
|
+
version 1 format
|
|
31
|
+
kdf 1 1 = PBKDF2-HMAC-SHA256
|
|
32
|
+
cipher 1 1 = AES-256-GCM
|
|
33
|
+
reserved 1 0
|
|
34
|
+
keycount 4 uint32
|
|
35
|
+
per key:
|
|
36
|
+
id 1 + bytes the key id, PLAINTEXT
|
|
37
|
+
salt 1 + bytes
|
|
38
|
+
iters 4 PBKDF2 rounds for this key
|
|
39
|
+
ring 1 + iv, 4 + bytes sealed under the passphrase
|
|
40
|
+
meta 1 + iv, 4 + bytes sealed under the vault's meta key
|
|
41
|
+
entrycount 4 uint32
|
|
42
|
+
per entry:
|
|
43
|
+
id 1 + bytes the blinded lookup id
|
|
44
|
+
name 1 + iv, 4 + bytes sealed under the vault's name key
|
|
45
|
+
value 1 + iv, 4 + bytes sealed under that secret's own key
|
|
46
|
+
|
|
47
|
+
Integers are big-endian and every length precedes its bytes, so the
|
|
48
|
+
file is written with the same two primitives it is read with.
|
|
49
|
+
|
|
50
|
+
NOTHING OUTSIDE A KEY RECORD IS PLAINTEXT. Secret names are sealed, and
|
|
51
|
+
an entry is addressed by a blinded id derived from its own key, so a
|
|
52
|
+
restricted key finds what it was granted without the file ever naming
|
|
53
|
+
the rest. What the file does show anyone is the key ids and how many
|
|
54
|
+
secrets there are.
|
|
55
|
+
|
|
56
|
+
A port of typescript/plugins/minivault.ts, which is canonical. The
|
|
57
|
+
bytes are pinned by the vaults in test/fixture rather than left to
|
|
58
|
+
agreement between implementations. *)
|
|
59
|
+
|
|
60
|
+
open Secret
|
|
61
|
+
open Provider
|
|
62
|
+
|
|
63
|
+
(* ---- the primitives ---------------------------------------------------- *)
|
|
64
|
+
|
|
65
|
+
external random : int -> string = "sekreto_mv_random"
|
|
66
|
+
external hmac : string -> string -> string = "sekreto_mv_hmac"
|
|
67
|
+
external pbkdf2 : string -> string -> int -> int -> string = "sekreto_mv_pbkdf2"
|
|
68
|
+
external gcmseal : string -> string -> string -> string -> string = "sekreto_mv_seal"
|
|
69
|
+
external gcmunseal : string -> string -> string -> string -> string = "sekreto_mv_unseal"
|
|
70
|
+
|
|
71
|
+
(* ---- the format -------------------------------------------------------- *)
|
|
72
|
+
|
|
73
|
+
let magic = "SKMV"
|
|
74
|
+
let format = 1
|
|
75
|
+
let kdf_pbkdf2 = 1
|
|
76
|
+
let cipher_aesgcm = 1
|
|
77
|
+
|
|
78
|
+
(* AES-256-GCM: 32-byte keys, 12-byte nonces, 16-byte tags. *)
|
|
79
|
+
let keylen = 32
|
|
80
|
+
let ivlen = 12
|
|
81
|
+
let taglen = 16
|
|
82
|
+
let saltlen = 16
|
|
83
|
+
|
|
84
|
+
(* The PBKDF2-HMAC-SHA256 round count when a caller names none. *)
|
|
85
|
+
let iterations = 210000
|
|
86
|
+
|
|
87
|
+
(* The key id a vault gets when a caller names none. *)
|
|
88
|
+
let masterkey = "master"
|
|
89
|
+
|
|
90
|
+
(* The export key the vault API is published under, beside the `provider`
|
|
91
|
+
key every kind publishes. *)
|
|
92
|
+
let vault_export = "vault"
|
|
93
|
+
|
|
94
|
+
(* Additional authenticated data. Every blob is bound to its PLACE in the
|
|
95
|
+
file, so no ciphertext can be moved: a restricted key's ring cannot be
|
|
96
|
+
relabelled as the master's, and one secret's value cannot be served
|
|
97
|
+
under a name it was never written for. *)
|
|
98
|
+
let aad_ring = "skmv1:ring:"
|
|
99
|
+
let aad_meta = "skmv1:meta:"
|
|
100
|
+
let aad_name = "skmv1:name"
|
|
101
|
+
let aad_secret = "skmv1:secret:"
|
|
102
|
+
|
|
103
|
+
(* Everything a master reaches is derived from the root key, so rotating
|
|
104
|
+
is one new random value rather than a re-wrap of each part. *)
|
|
105
|
+
let label_names = "skmv1:names"
|
|
106
|
+
let label_meta = "skmv1:meta"
|
|
107
|
+
let label_id = "skmv1:id"
|
|
108
|
+
|
|
109
|
+
(* The largest key id the format can record.
|
|
110
|
+
|
|
111
|
+
A length is written in ONE byte. A longer id wrapped that byte and the
|
|
112
|
+
writer then appended the whole thing, so every field after it shifted:
|
|
113
|
+
a grant with a 300-character id replaced a working vault with an
|
|
114
|
+
unreadable one, and said nothing. Checked where an id is ACCEPTED, so
|
|
115
|
+
the refusal names the id rather than the file. *)
|
|
116
|
+
let idmax = 255
|
|
117
|
+
|
|
118
|
+
let mvfail (why : string) = fail ("sekreto: minivault: " ^ why)
|
|
119
|
+
|
|
120
|
+
let checkid (id : string) (what : string) : string =
|
|
121
|
+
if "" = id then mvfail what
|
|
122
|
+
else if idmax < String.length id then
|
|
123
|
+
mvfail
|
|
124
|
+
(Printf.sprintf "key id is longer than %d bytes: %s..." idmax
|
|
125
|
+
(String.sub id 0 (min 32 (String.length id))))
|
|
126
|
+
else id
|
|
127
|
+
|
|
128
|
+
(* Every call into the stubs raises `Failure` on a refusal, which is the
|
|
129
|
+
C side's only way to say so; this turns it into the library's own. *)
|
|
130
|
+
let guarded (what : string) (body : unit -> 'a) : 'a =
|
|
131
|
+
try body () with Failure _ -> mvfail what
|
|
132
|
+
|
|
133
|
+
(* ---- keys -------------------------------------------------------------- *)
|
|
134
|
+
|
|
135
|
+
(* The key-encryption key a passphrase unwraps a ring with.
|
|
136
|
+
|
|
137
|
+
A round count below one is refused in the stub, which is what a damaged
|
|
138
|
+
or hostile file records to make the derivation free. *)
|
|
139
|
+
let kek (passphrase : string) (salt : string) (iters : int) : string =
|
|
140
|
+
guarded (Printf.sprintf "unusable round count: %d" iters) (fun () ->
|
|
141
|
+
pbkdf2 passphrase salt iters keylen)
|
|
142
|
+
|
|
143
|
+
(* The key one named secret's value is encrypted with.
|
|
144
|
+
|
|
145
|
+
DERIVED, never stored, for a master: it holds the root key and so
|
|
146
|
+
reaches every name, including ones written after it was made. A
|
|
147
|
+
restricted key holds the derived keys it was granted and nothing that
|
|
148
|
+
produces another, so every other name is ciphertext to it in exactly
|
|
149
|
+
the way it is to a stranger. *)
|
|
150
|
+
let secretkey (root : string) (name : string) : string = hmac root (aad_secret ^ name)
|
|
151
|
+
|
|
152
|
+
(* Where a secret lives in the file, derived from its own key so that
|
|
153
|
+
finding it needs no plaintext name. One-way: an id yields nothing about
|
|
154
|
+
the key that produced it. *)
|
|
155
|
+
let entryid (key : string) : string = hmac key label_id
|
|
156
|
+
|
|
157
|
+
let randombytes (len : int) : string =
|
|
158
|
+
guarded "no randomness available" (fun () -> random len)
|
|
159
|
+
|
|
160
|
+
(* ---- sealing ----------------------------------------------------------- *)
|
|
161
|
+
|
|
162
|
+
type sealed = { iv : string; blob : string }
|
|
163
|
+
|
|
164
|
+
let sameseal (left : sealed) (right : sealed) : bool =
|
|
165
|
+
left.iv = right.iv && left.blob = right.blob
|
|
166
|
+
|
|
167
|
+
(* The tag rides at the END of the blob, which is where every other port's
|
|
168
|
+
AEAD leaves it and therefore what the format records. *)
|
|
169
|
+
let seal (key : string) (plain : string) (aad : string) : sealed =
|
|
170
|
+
let iv = randombytes ivlen in
|
|
171
|
+
{ iv; blob = guarded "cannot seal" (fun () -> gcmseal key iv plain aad) }
|
|
172
|
+
|
|
173
|
+
(* The plaintext, or a refusal. A GCM tag that fails to verify is the only
|
|
174
|
+
evidence there is, and it cannot tell a wrong passphrase from a damaged
|
|
175
|
+
file, so `what` names the attempt and the message admits both. *)
|
|
176
|
+
let unseal (key : string) (box : sealed) (aad : string) (what : string) : string =
|
|
177
|
+
if taglen > String.length box.blob || ivlen <> String.length box.iv then
|
|
178
|
+
mvfail (what ^ ": truncated")
|
|
179
|
+
else guarded what (fun () -> gcmunseal key box.iv box.blob aad)
|
|
180
|
+
|
|
181
|
+
(* ---- base64 ------------------------------------------------------------ *)
|
|
182
|
+
|
|
183
|
+
(* Here rather than `Http.unbase64`: naming that module would link the
|
|
184
|
+
HTTP client and the TLS binding beneath it into a binary whose only
|
|
185
|
+
store opens nothing, which is the cost the core/plugin split exists to
|
|
186
|
+
remove. *)
|
|
187
|
+
let b64alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
188
|
+
|
|
189
|
+
let b64 (raw : string) : string =
|
|
190
|
+
let out = Buffer.create ((String.length raw + 2) / 3 * 4) in
|
|
191
|
+
let len = String.length raw in
|
|
192
|
+
let at = ref 0 in
|
|
193
|
+
|
|
194
|
+
while !at < len do
|
|
195
|
+
let left = len - !at in
|
|
196
|
+
let byte index = Char.code raw.[!at + index] in
|
|
197
|
+
let triple =
|
|
198
|
+
(byte 0 lsl 16) lor (if 1 < left then byte 1 lsl 8 else 0) lor if 2 < left then byte 2 else 0
|
|
199
|
+
in
|
|
200
|
+
Buffer.add_char out b64alphabet.[(triple lsr 18) land 0x3f];
|
|
201
|
+
Buffer.add_char out b64alphabet.[(triple lsr 12) land 0x3f];
|
|
202
|
+
Buffer.add_char out (if 1 < left then b64alphabet.[(triple lsr 6) land 0x3f] else '=');
|
|
203
|
+
Buffer.add_char out (if 2 < left then b64alphabet.[triple land 0x3f] else '=');
|
|
204
|
+
at := !at + 3
|
|
205
|
+
done;
|
|
206
|
+
|
|
207
|
+
Buffer.contents out
|
|
208
|
+
|
|
209
|
+
(* STRICT. A lenient decoder hands back plausible bytes for a corrupted
|
|
210
|
+
payload, and those bytes are then used AS A KEY. *)
|
|
211
|
+
let unb64 (text : string) (what : string) : string =
|
|
212
|
+
let len = String.length text in
|
|
213
|
+
if 0 = len || 0 <> len mod 4 then mvfail ("missing " ^ what)
|
|
214
|
+
else begin
|
|
215
|
+
let out = Buffer.create (len / 4 * 3) in
|
|
216
|
+
let held = ref 0 in
|
|
217
|
+
let bits = ref 0 in
|
|
218
|
+
let pad = ref 0 in
|
|
219
|
+
|
|
220
|
+
String.iteri
|
|
221
|
+
(fun index ch ->
|
|
222
|
+
if '=' = ch then begin
|
|
223
|
+
incr pad;
|
|
224
|
+
if 2 < !pad || len - 2 > index + !pad then mvfail ("missing " ^ what)
|
|
225
|
+
end
|
|
226
|
+
else begin
|
|
227
|
+
if 0 <> !pad then mvfail ("missing " ^ what);
|
|
228
|
+
match String.index_opt b64alphabet ch with
|
|
229
|
+
| None -> mvfail ("missing " ^ what)
|
|
230
|
+
| Some value ->
|
|
231
|
+
held := (!held lsl 6) lor value;
|
|
232
|
+
bits := !bits + 6;
|
|
233
|
+
if 8 <= !bits then begin
|
|
234
|
+
bits := !bits - 8;
|
|
235
|
+
Buffer.add_char out (Char.chr ((!held lsr !bits) land 0xff))
|
|
236
|
+
end
|
|
237
|
+
end)
|
|
238
|
+
text;
|
|
239
|
+
|
|
240
|
+
Buffer.contents out
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
(* ---- the file ---------------------------------------------------------- *)
|
|
244
|
+
|
|
245
|
+
type keyrecord = { kid : string; salt : string; iters : int; ring : sealed; meta : sealed }
|
|
246
|
+
type entryrecord = { eid : string; ename : sealed; evalue : sealed }
|
|
247
|
+
type vaultfile = { keys : keyrecord list; entries : entryrecord list }
|
|
248
|
+
|
|
249
|
+
let keyof (file : vaultfile) (id : string) : keyrecord option =
|
|
250
|
+
List.find_opt (fun record -> id = record.kid) file.keys
|
|
251
|
+
|
|
252
|
+
let entryof (file : vaultfile) (id : string) : entryrecord option =
|
|
253
|
+
List.find_opt (fun record -> id = record.eid) file.entries
|
|
254
|
+
|
|
255
|
+
(* A cursor, so that every length check is in one place: a truncated vault
|
|
256
|
+
is refused rather than read as a short one. *)
|
|
257
|
+
type reader = { raw : string; mutable at : int }
|
|
258
|
+
|
|
259
|
+
(* Reads `length` bytes, or refuses.
|
|
260
|
+
|
|
261
|
+
The bound is checked AGAINST WHAT IS LEFT, never by adding the length
|
|
262
|
+
to the cursor. OCaml's int is 63 bits so the sum cannot wrap here, but
|
|
263
|
+
the check reads the same in every port and is the one that is right
|
|
264
|
+
everywhere. *)
|
|
265
|
+
let take (r : reader) (length : int) : string =
|
|
266
|
+
if 0 > length || String.length r.raw - r.at < length then
|
|
267
|
+
mvfail "the vault file is truncated"
|
|
268
|
+
else begin
|
|
269
|
+
let out = String.sub r.raw r.at length in
|
|
270
|
+
r.at <- r.at + length;
|
|
271
|
+
out
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
let u8 (r : reader) : int = Char.code (take r 1).[0]
|
|
275
|
+
|
|
276
|
+
let u32 (r : reader) : int =
|
|
277
|
+
let four = take r 4 in
|
|
278
|
+
let byte index = Char.code four.[index] in
|
|
279
|
+
(byte 0 lsl 24) lor (byte 1 lsl 16) lor (byte 2 lsl 8) lor byte 3
|
|
280
|
+
|
|
281
|
+
let small (r : reader) : string = take r (u8 r)
|
|
282
|
+
let large (r : reader) : string = take r (u32 r)
|
|
283
|
+
|
|
284
|
+
let readsealed (r : reader) : sealed =
|
|
285
|
+
(* The iv is read before the blob, and `let` sequences the two reads; a
|
|
286
|
+
record literal would not, because OCaml leaves the order its fields
|
|
287
|
+
are evaluated in unspecified. *)
|
|
288
|
+
let iv = small r in
|
|
289
|
+
{ iv; blob = large r }
|
|
290
|
+
|
|
291
|
+
let readfile (raw : string) : vaultfile =
|
|
292
|
+
let r = { raw; at = 0 } in
|
|
293
|
+
|
|
294
|
+
if magic <> take r 4 then mvfail "not a vault file";
|
|
295
|
+
|
|
296
|
+
let version = u8 r in
|
|
297
|
+
if format <> version then mvfail (Printf.sprintf "unsupported format version: %d" version);
|
|
298
|
+
|
|
299
|
+
let usedkdf = u8 r in
|
|
300
|
+
let usedcipher = u8 r in
|
|
301
|
+
if kdf_pbkdf2 <> usedkdf || cipher_aesgcm <> usedcipher then
|
|
302
|
+
mvfail (Printf.sprintf "unsupported kdf or cipher: %d/%d" usedkdf usedcipher);
|
|
303
|
+
ignore (u8 r);
|
|
304
|
+
|
|
305
|
+
(* A COUNT IS BOUNDED BY WHAT IS LEFT. Each record carries at least a few
|
|
306
|
+
bytes, so a file claiming four billion of them is damaged, and the
|
|
307
|
+
loop would find that out one truncation at a time. *)
|
|
308
|
+
let bounded count =
|
|
309
|
+
if String.length raw - r.at < count then mvfail "the vault file is truncated" else count
|
|
310
|
+
in
|
|
311
|
+
|
|
312
|
+
let keycount = bounded (u32 r) in
|
|
313
|
+
let keys =
|
|
314
|
+
List.init keycount (fun _ ->
|
|
315
|
+
let kid = small r in
|
|
316
|
+
let salt = small r in
|
|
317
|
+
let iters = u32 r in
|
|
318
|
+
let ring = readsealed r in
|
|
319
|
+
{ kid; salt; iters; ring; meta = readsealed r })
|
|
320
|
+
in
|
|
321
|
+
|
|
322
|
+
let entrycount = bounded (u32 r) in
|
|
323
|
+
let entries =
|
|
324
|
+
List.init entrycount (fun _ ->
|
|
325
|
+
let eid = small r in
|
|
326
|
+
let ename = readsealed r in
|
|
327
|
+
{ eid; ename; evalue = readsealed r })
|
|
328
|
+
in
|
|
329
|
+
|
|
330
|
+
if r.at <> String.length raw then mvfail "the vault file has trailing bytes";
|
|
331
|
+
|
|
332
|
+
{ keys; entries }
|
|
333
|
+
|
|
334
|
+
let writeu32 (out : Buffer.t) (value : int) : unit =
|
|
335
|
+
Buffer.add_char out (Char.chr ((value lsr 24) land 0xff));
|
|
336
|
+
Buffer.add_char out (Char.chr ((value lsr 16) land 0xff));
|
|
337
|
+
Buffer.add_char out (Char.chr ((value lsr 8) land 0xff));
|
|
338
|
+
Buffer.add_char out (Char.chr (value land 0xff))
|
|
339
|
+
|
|
340
|
+
let writesmall (out : Buffer.t) (value : string) : unit =
|
|
341
|
+
Buffer.add_char out (Char.chr (String.length value land 0xff));
|
|
342
|
+
Buffer.add_string out value
|
|
343
|
+
|
|
344
|
+
let writelarge (out : Buffer.t) (value : string) : unit =
|
|
345
|
+
writeu32 out (String.length value);
|
|
346
|
+
Buffer.add_string out value
|
|
347
|
+
|
|
348
|
+
let writesealed (out : Buffer.t) (box : sealed) : unit =
|
|
349
|
+
writesmall out box.iv;
|
|
350
|
+
writelarge out box.blob
|
|
351
|
+
|
|
352
|
+
let writefile (file : vaultfile) : string =
|
|
353
|
+
let out = Buffer.create 1024 in
|
|
354
|
+
|
|
355
|
+
Buffer.add_string out magic;
|
|
356
|
+
Buffer.add_char out (Char.chr format);
|
|
357
|
+
Buffer.add_char out (Char.chr kdf_pbkdf2);
|
|
358
|
+
Buffer.add_char out (Char.chr cipher_aesgcm);
|
|
359
|
+
Buffer.add_char out '\000';
|
|
360
|
+
|
|
361
|
+
writeu32 out (List.length file.keys);
|
|
362
|
+
List.iter
|
|
363
|
+
(fun record ->
|
|
364
|
+
writesmall out record.kid;
|
|
365
|
+
writesmall out record.salt;
|
|
366
|
+
writeu32 out record.iters;
|
|
367
|
+
writesealed out record.ring;
|
|
368
|
+
writesealed out record.meta)
|
|
369
|
+
file.keys;
|
|
370
|
+
|
|
371
|
+
(* SORTED BY ID, which is a blinded value: the file therefore records
|
|
372
|
+
nothing about the order secrets were written in. *)
|
|
373
|
+
let entries = List.sort (fun a b -> compare a.eid b.eid) file.entries in
|
|
374
|
+
|
|
375
|
+
writeu32 out (List.length entries);
|
|
376
|
+
List.iter
|
|
377
|
+
(fun record ->
|
|
378
|
+
writesmall out record.eid;
|
|
379
|
+
writesealed out record.ename;
|
|
380
|
+
writesealed out record.evalue)
|
|
381
|
+
entries;
|
|
382
|
+
|
|
383
|
+
Buffer.contents out
|
|
384
|
+
|
|
385
|
+
(* ---- the file on disk --------------------------------------------------- *)
|
|
386
|
+
|
|
387
|
+
(* Read as BINARY, byte for byte: a vault is full of NULs and of bytes no
|
|
388
|
+
encoding claims. `open_in_bin` rather than `open_in` for the same
|
|
389
|
+
reason, although on a POSIX host the two agree. *)
|
|
390
|
+
let slurp (path : string) : string option =
|
|
391
|
+
match open_in_bin path with
|
|
392
|
+
| exception _ -> None
|
|
393
|
+
| handle ->
|
|
394
|
+
let len = in_channel_length handle in
|
|
395
|
+
let raw = really_input_string handle len in
|
|
396
|
+
close_in handle;
|
|
397
|
+
Some raw
|
|
398
|
+
|
|
399
|
+
(* Owner-only, because a vault file is the whole store, and EXCLUSIVE when
|
|
400
|
+
asked: an exclusive create refuses an existing path and will not follow
|
|
401
|
+
a symlink to make one, which is what makes the temporary below safe to
|
|
402
|
+
name in a directory somebody else can write.
|
|
403
|
+
|
|
404
|
+
`Unix.openfile` rather than `open_out_bin`, because the standard
|
|
405
|
+
library has no way to ask for either. *)
|
|
406
|
+
let spill (path : string) (raw : string) ~(exclusive : bool) : unit =
|
|
407
|
+
let flags =
|
|
408
|
+
[ Unix.O_WRONLY; Unix.O_CREAT ] @ if exclusive then [ Unix.O_EXCL ] else [ Unix.O_TRUNC ]
|
|
409
|
+
in
|
|
410
|
+
let fd = Unix.openfile path flags 0o600 in
|
|
411
|
+
let bytes = Bytes.of_string raw in
|
|
412
|
+
let len = Bytes.length bytes in
|
|
413
|
+
let at = ref 0 in
|
|
414
|
+
|
|
415
|
+
(try
|
|
416
|
+
while !at < len do
|
|
417
|
+
at := !at + Unix.write fd bytes !at (len - !at)
|
|
418
|
+
done;
|
|
419
|
+
Unix.close fd
|
|
420
|
+
with err ->
|
|
421
|
+
(try Unix.close fd with _ -> ());
|
|
422
|
+
(try Unix.unlink path with _ -> ());
|
|
423
|
+
raise err)
|
|
424
|
+
|
|
425
|
+
let hex (raw : string) : string =
|
|
426
|
+
String.concat "" (List.map (fun ch -> Printf.sprintf "%02x" (Char.code ch))
|
|
427
|
+
(List.init (String.length raw) (String.get raw)))
|
|
428
|
+
|
|
429
|
+
(* ---- the vault --------------------------------------------------------- *)
|
|
430
|
+
|
|
431
|
+
(* What a key may do. `grants` is empty for a master key, which reads and
|
|
432
|
+
writes every name there is.
|
|
433
|
+
|
|
434
|
+
An IMMUTABLE record over an immutable list, so the defect the review
|
|
435
|
+
round found in the canonical - a caller flipping its own `write` bit on
|
|
436
|
+
the record it was handed - cannot be written at all. *)
|
|
437
|
+
type keyinfo = { key : string; master : bool; write : bool; grants : string list }
|
|
438
|
+
|
|
439
|
+
(* How a vault file is opened as one key. *)
|
|
440
|
+
type options = {
|
|
441
|
+
ofile : string;
|
|
442
|
+
okey : string;
|
|
443
|
+
opassphrase : string;
|
|
444
|
+
oiterations : int;
|
|
445
|
+
(* Make the file, with this key as its master, if it is not there.
|
|
446
|
+
|
|
447
|
+
Off by default. A missing vault is far more often a broken deployment
|
|
448
|
+
than a new one, and a store that invents itself where a real vault
|
|
449
|
+
was meant to be answers every read with a miss. *)
|
|
450
|
+
ocreate : bool;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
let nooptions =
|
|
454
|
+
{ ofile = ""; okey = ""; opassphrase = ""; oiterations = 0; ocreate = false }
|
|
455
|
+
|
|
456
|
+
(* What mints a restricted key. *)
|
|
457
|
+
type grantspec = {
|
|
458
|
+
(* The id the new key answers to. *)
|
|
459
|
+
gkey : string;
|
|
460
|
+
(* What unwraps it. Nothing else does, and no master can recover it - a
|
|
461
|
+
lost restricted passphrase is re-granted, never read back. *)
|
|
462
|
+
gpassphrase : string;
|
|
463
|
+
(* The names the key may read. A name that does not exist yet is allowed
|
|
464
|
+
and means what it says: the key reads it once a master writes it. *)
|
|
465
|
+
gnames : string list;
|
|
466
|
+
(* Whether it may overwrite the values it can read. *)
|
|
467
|
+
gwrite : bool;
|
|
468
|
+
(* PBKDF2 rounds for this key, defaulting to the opening handle's. *)
|
|
469
|
+
giterations : int;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
let nogrant = { gkey = ""; gpassphrase = ""; gnames = []; gwrite = false; giterations = 0 }
|
|
473
|
+
|
|
474
|
+
(* A handle on one vault file, opened as ONE key.
|
|
475
|
+
|
|
476
|
+
Every method answers as that key: `list` shows the names it may read,
|
|
477
|
+
`get` answers for those and misses on the rest, and the master-only
|
|
478
|
+
ones refuse for any other key. Nothing is read or derived until the
|
|
479
|
+
first call that needs the file, so putting a vault in a chain costs no
|
|
480
|
+
key derivation until a secret is actually wanted.
|
|
481
|
+
|
|
482
|
+
The derived state is mutable and the rest is not: what a handle
|
|
483
|
+
REMEMBERS changes, and what it IS does not. *)
|
|
484
|
+
type vault = {
|
|
485
|
+
vfile : string;
|
|
486
|
+
vkey : string;
|
|
487
|
+
vpassphrase : string;
|
|
488
|
+
viterations : int;
|
|
489
|
+
vcreate : bool;
|
|
490
|
+
mutable vopened : bool;
|
|
491
|
+
mutable vroot : string option;
|
|
492
|
+
mutable vgrants : (string * string) list;
|
|
493
|
+
mutable vwrite : bool;
|
|
494
|
+
(* THE SEALED RING THIS WAS DERIVED FROM, kept so that every later call
|
|
495
|
+
can check the file still says the same thing. A handle that cached
|
|
496
|
+
its keys and never looked again kept reading a vault after its key
|
|
497
|
+
was revoked, which is the one thing `revoke` promises. *)
|
|
498
|
+
mutable vring : sealed option;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
let file (v : vault) : string = v.vfile
|
|
502
|
+
let key (v : vault) : string = v.vkey
|
|
503
|
+
|
|
504
|
+
(* Forget the derived keys. The next call opens again. *)
|
|
505
|
+
let close (v : vault) : unit =
|
|
506
|
+
v.vopened <- false;
|
|
507
|
+
v.vroot <- None;
|
|
508
|
+
v.vgrants <- [];
|
|
509
|
+
v.vwrite <- false;
|
|
510
|
+
v.vring <- None
|
|
511
|
+
|
|
512
|
+
(* A MASTER'S ring holds the root and no grants; a RESTRICTED key's holds
|
|
513
|
+
grants and no root, even when it was granted nothing. That asymmetry is
|
|
514
|
+
the format rather than a saving: a ring with a root reaches every name
|
|
515
|
+
there will ever be, so a grant list beside it would be a second answer
|
|
516
|
+
to the same question. The canonical omits each absent key outright, and
|
|
517
|
+
these bytes are what the other ports read. *)
|
|
518
|
+
let masterring (root : string) : string =
|
|
519
|
+
Json.stringify
|
|
520
|
+
(Json.Obj
|
|
521
|
+
[
|
|
522
|
+
("v", Json.Num (float_of_int format));
|
|
523
|
+
("write", Json.Bool true);
|
|
524
|
+
("root", Json.Str (b64 root));
|
|
525
|
+
])
|
|
526
|
+
|
|
527
|
+
let grantring (write : bool) (grants : (string * string) list) : string =
|
|
528
|
+
Json.stringify
|
|
529
|
+
(Json.Obj
|
|
530
|
+
[
|
|
531
|
+
("v", Json.Num (float_of_int format));
|
|
532
|
+
("write", Json.Bool write);
|
|
533
|
+
("grants", Json.Obj (List.map (fun (name, k) -> (name, Json.Str (b64 k))) grants));
|
|
534
|
+
])
|
|
535
|
+
|
|
536
|
+
let metaof (master : bool) (write : bool) (names : string list) : string =
|
|
537
|
+
Json.stringify
|
|
538
|
+
(Json.Obj
|
|
539
|
+
[
|
|
540
|
+
("v", Json.Num (float_of_int format));
|
|
541
|
+
("master", Json.Bool master);
|
|
542
|
+
("write", Json.Bool write);
|
|
543
|
+
(* An ARRAY here and an OBJECT in the ring, which is the format
|
|
544
|
+
and not an accident: the ring holds a key per name, and the
|
|
545
|
+
record holds only the names. *)
|
|
546
|
+
("grants", Json.Arr (List.map (fun name -> Json.Str name) names));
|
|
547
|
+
])
|
|
548
|
+
|
|
549
|
+
let sealkey (root : string) (id : string) (passphrase : string) (iters : int) (ring : string)
|
|
550
|
+
(meta : string) : keyrecord =
|
|
551
|
+
let salt = randombytes saltlen in
|
|
552
|
+
{
|
|
553
|
+
kid = id;
|
|
554
|
+
salt;
|
|
555
|
+
iters;
|
|
556
|
+
ring = seal (kek passphrase salt iters) ring (aad_ring ^ id);
|
|
557
|
+
meta = seal (hmac root label_meta) meta (aad_meta ^ id);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
(* The one key record a new or rotated vault starts with: a master holding
|
|
561
|
+
the root, granted nothing because it needs nothing. *)
|
|
562
|
+
let masterrecord (root : string) (id : string) (passphrase : string) (iters : int) : keyrecord =
|
|
563
|
+
sealkey root id passphrase iters (masterring root) (metaof true true [])
|
|
564
|
+
|
|
565
|
+
let newvault (id : string) (passphrase : string) (iters : int) : vaultfile =
|
|
566
|
+
{ keys = [ masterrecord (randombytes keylen) id passphrase iters ]; entries = [] }
|
|
567
|
+
|
|
568
|
+
(* Writes a vault file that is not there yet, and REFUSES one that is.
|
|
569
|
+
|
|
570
|
+
Straight to the target under an exclusive create rather than through a
|
|
571
|
+
temporary and a rename. A rename REPLACES its destination, so two
|
|
572
|
+
processes creating the same vault both succeeded and the second
|
|
573
|
+
discarded the first one's secrets; a stat beforehand only narrows that
|
|
574
|
+
window. There is nothing to lose by writing the target directly here,
|
|
575
|
+
because there is no file to damage: either this call creates it or it
|
|
576
|
+
fails. *)
|
|
577
|
+
let putnew (path : string) (made : vaultfile) : unit =
|
|
578
|
+
match spill path (writefile made) ~exclusive:true with
|
|
579
|
+
| () -> ()
|
|
580
|
+
| exception Unix.Unix_error (Unix.EEXIST, _, _) ->
|
|
581
|
+
mvfail ("vault file already exists: " ^ path)
|
|
582
|
+
| exception _ -> mvfail ("cannot write " ^ path)
|
|
583
|
+
|
|
584
|
+
(* Replaces the file rather than editing it in place. The rename is what
|
|
585
|
+
makes a concurrent reader see either the old file or the new one, so a
|
|
586
|
+
write interrupted halfway leaves a vault rather than wreckage.
|
|
587
|
+
|
|
588
|
+
THE TEMPORARY IS RANDOM AND EXCLUSIVE. `<vault>.<pid>.tmp` is a name
|
|
589
|
+
anyone can predict, and an ordinary create FOLLOWS a symlink, so anyone
|
|
590
|
+
who could write the vault's directory could point that name at another
|
|
591
|
+
file and have the next save truncate it. *)
|
|
592
|
+
let save (v : vault) (made : vaultfile) : unit =
|
|
593
|
+
let temp = v.vfile ^ "." ^ hex (randombytes 8) ^ ".tmp" in
|
|
594
|
+
|
|
595
|
+
(match spill temp (writefile made) ~exclusive:true with
|
|
596
|
+
| () -> ()
|
|
597
|
+
| exception _ -> mvfail ("cannot write " ^ v.vfile));
|
|
598
|
+
|
|
599
|
+
match Sys.rename temp v.vfile with
|
|
600
|
+
| () -> ()
|
|
601
|
+
| exception _ ->
|
|
602
|
+
(* The vault is unchanged either way, and the write error is what the
|
|
603
|
+
caller needs to be told about. *)
|
|
604
|
+
(try Sys.remove temp with _ -> ());
|
|
605
|
+
mvfail ("cannot write " ^ v.vfile)
|
|
606
|
+
|
|
607
|
+
let bytesof (v : vault) : string =
|
|
608
|
+
match slurp v.vfile with
|
|
609
|
+
| Some raw -> raw
|
|
610
|
+
| None ->
|
|
611
|
+
(* A vault is configured deliberately, with a key. Its absence is a
|
|
612
|
+
broken deployment and never "no secrets here": answering a miss
|
|
613
|
+
would send the chain on to a weaker store, which is the failure
|
|
614
|
+
mode this library most has to avoid. `create` is the caller saying
|
|
615
|
+
the opposite, in writing. *)
|
|
616
|
+
if not v.vcreate then mvfail ("no vault file: " ^ v.vfile)
|
|
617
|
+
else begin
|
|
618
|
+
putnew v.vfile (newvault v.vkey v.vpassphrase v.viterations);
|
|
619
|
+
match slurp v.vfile with
|
|
620
|
+
| Some raw -> raw
|
|
621
|
+
| None -> mvfail ("cannot read " ^ v.vfile)
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
let jsontrue (held : Json.t) (key : string) : bool =
|
|
625
|
+
match Json.dig held [ key ] with Some (Json.Bool value) -> value | _ -> false
|
|
626
|
+
|
|
627
|
+
(* The file as this key sees it: parsed every call - it is different bytes
|
|
628
|
+
every time - while the unwrapped ring is kept, because stretching a
|
|
629
|
+
passphrase once per lookup is the cost that caching exists to avoid. *)
|
|
630
|
+
let load (v : vault) : vaultfile =
|
|
631
|
+
let made = readfile (bytesof v) in
|
|
632
|
+
|
|
633
|
+
match keyof made v.vkey with
|
|
634
|
+
| None ->
|
|
635
|
+
(* REVOKED, or never there. Either way this handle is finished, and
|
|
636
|
+
dropping what it derived is what stops the next call answering from
|
|
637
|
+
memory. *)
|
|
638
|
+
close v;
|
|
639
|
+
mvfail ("no such key: " ^ v.vkey)
|
|
640
|
+
| Some record ->
|
|
641
|
+
(* The file still holds this key, and holds the SAME ring: a key
|
|
642
|
+
revoked and re-granted under another passphrase is a different key
|
|
643
|
+
wearing the id, and re-deriving is what refuses it. *)
|
|
644
|
+
if v.vopened && (match v.vring with Some was -> sameseal was record.ring | None -> false)
|
|
645
|
+
then made
|
|
646
|
+
else begin
|
|
647
|
+
close v;
|
|
648
|
+
|
|
649
|
+
let plain =
|
|
650
|
+
unseal
|
|
651
|
+
(kek v.vpassphrase record.salt record.iters)
|
|
652
|
+
record.ring (aad_ring ^ v.vkey)
|
|
653
|
+
("wrong passphrase for key " ^ v.vkey ^ ", or a damaged vault")
|
|
654
|
+
in
|
|
655
|
+
|
|
656
|
+
let held =
|
|
657
|
+
match Json.parse plain with
|
|
658
|
+
| Some (Json.Obj _ as value) -> value
|
|
659
|
+
| _ -> mvfail ("unreadable key ring for " ^ v.vkey)
|
|
660
|
+
in
|
|
661
|
+
|
|
662
|
+
let grants =
|
|
663
|
+
match Json.dig held [ "grants" ] with
|
|
664
|
+
| Some (Json.Obj entries) ->
|
|
665
|
+
List.map
|
|
666
|
+
(fun (name, value) ->
|
|
667
|
+
match value with
|
|
668
|
+
| Json.Str text -> (name, unb64 text "a granted key")
|
|
669
|
+
| _ -> mvfail "missing a granted key")
|
|
670
|
+
entries
|
|
671
|
+
| _ -> []
|
|
672
|
+
in
|
|
673
|
+
|
|
674
|
+
let root =
|
|
675
|
+
match Json.dig held [ "root" ] with
|
|
676
|
+
| Some (Json.Str text) -> Some (unb64 text "the root key")
|
|
677
|
+
| _ -> None
|
|
678
|
+
in
|
|
679
|
+
|
|
680
|
+
v.vroot <- root;
|
|
681
|
+
v.vgrants <- grants;
|
|
682
|
+
v.vwrite <- (None <> root) || jsontrue held "write";
|
|
683
|
+
v.vring <- Some record.ring;
|
|
684
|
+
v.vopened <- true;
|
|
685
|
+
|
|
686
|
+
made
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
(* The root key, or a refusal naming what needed it. *)
|
|
690
|
+
let rootof (v : vault) (what : string) : string =
|
|
691
|
+
match v.vroot with
|
|
692
|
+
| Some root -> root
|
|
693
|
+
| None -> mvfail (what ^ " needs a master key, and " ^ v.vkey ^ " is restricted")
|
|
694
|
+
|
|
695
|
+
(* The key for one name, or nothing when this key cannot reach it. *)
|
|
696
|
+
let keyfor (v : vault) (name : string) : string option =
|
|
697
|
+
match v.vroot with
|
|
698
|
+
| Some root -> Some (secretkey root name)
|
|
699
|
+
| None -> List.assoc_opt name v.vgrants
|
|
700
|
+
|
|
701
|
+
(* Derive the key and read the file NOW rather than at first use. *)
|
|
702
|
+
let opened (v : vault) : keyinfo =
|
|
703
|
+
ignore (load v);
|
|
704
|
+
{
|
|
705
|
+
key = v.vkey;
|
|
706
|
+
master = None <> v.vroot;
|
|
707
|
+
write = v.vwrite;
|
|
708
|
+
grants = List.sort compare (List.map fst v.vgrants);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
(* The names this key can read, sorted. *)
|
|
712
|
+
let list (v : vault) : string list =
|
|
713
|
+
let made = load v in
|
|
714
|
+
|
|
715
|
+
let names =
|
|
716
|
+
match v.vroot with
|
|
717
|
+
| Some root ->
|
|
718
|
+
let namekey = hmac root label_names in
|
|
719
|
+
List.map
|
|
720
|
+
(fun entry -> unseal namekey entry.ename aad_name "a secret name is damaged")
|
|
721
|
+
made.entries
|
|
722
|
+
| None ->
|
|
723
|
+
(* A restricted key has no name key, so it reports the grants it can
|
|
724
|
+
actually find: the vault never tells it what else is there. *)
|
|
725
|
+
List.filter_map
|
|
726
|
+
(fun (name, k) -> if None = entryof made (entryid k) then None else Some name)
|
|
727
|
+
v.vgrants
|
|
728
|
+
in
|
|
729
|
+
|
|
730
|
+
List.sort compare names
|
|
731
|
+
|
|
732
|
+
(* The value, or a MISS. A name the vault does not hold and a name this
|
|
733
|
+
key was not granted are both a miss. *)
|
|
734
|
+
let get (v : vault) (name : string) : string option =
|
|
735
|
+
ignore (checkname name);
|
|
736
|
+
let made = load v in
|
|
737
|
+
|
|
738
|
+
(* OUTSIDE THE GRANT IS A MISS, deliberately. The vault answers as the
|
|
739
|
+
key that opened it, so a name this key cannot read is a name this
|
|
740
|
+
store does not hold for this caller - the same answer a stranger's
|
|
741
|
+
vault gives, and the one that makes a restricted key in front of a
|
|
742
|
+
broader store a workable chain. *)
|
|
743
|
+
match keyfor v name with
|
|
744
|
+
| None -> None
|
|
745
|
+
| Some k -> (
|
|
746
|
+
match entryof made (entryid k) with
|
|
747
|
+
| None -> None
|
|
748
|
+
| Some entry ->
|
|
749
|
+
Some
|
|
750
|
+
(unseal k entry.evalue (aad_secret ^ name) ("the value of " ^ name ^ " is damaged")))
|
|
751
|
+
|
|
752
|
+
let has (v : vault) (name : string) : bool = None <> get v name
|
|
753
|
+
|
|
754
|
+
(* Write a value. A master writes any name; a restricted key holding
|
|
755
|
+
`write` overwrites the names it was granted, and creates none. *)
|
|
756
|
+
let set (v : vault) (name : string) (value : string) : unit =
|
|
757
|
+
ignore (checkname name);
|
|
758
|
+
let made = load v in
|
|
759
|
+
|
|
760
|
+
if not v.vwrite then mvfail ("key " ^ v.vkey ^ " is read-only");
|
|
761
|
+
|
|
762
|
+
match keyfor v name with
|
|
763
|
+
| None -> mvfail ("key " ^ v.vkey ^ " was not granted " ^ name)
|
|
764
|
+
| Some k ->
|
|
765
|
+
let box = seal k value (aad_secret ^ name) in
|
|
766
|
+
let id = entryid k in
|
|
767
|
+
|
|
768
|
+
let entries =
|
|
769
|
+
if None <> entryof made id then
|
|
770
|
+
List.map
|
|
771
|
+
(fun entry -> if id = entry.eid then { entry with evalue = box } else entry)
|
|
772
|
+
made.entries
|
|
773
|
+
else begin
|
|
774
|
+
(* A NEW NAME NEEDS THE NAME KEY, which only a master holds. So a
|
|
775
|
+
restricted key with `write` updates what it was granted and
|
|
776
|
+
cannot grow the vault, which is what "restricted" has to mean
|
|
777
|
+
for the grant list to stay the whole story. *)
|
|
778
|
+
let root = rootof v ("creating the secret " ^ name) in
|
|
779
|
+
made.entries
|
|
780
|
+
@ [
|
|
781
|
+
{
|
|
782
|
+
eid = id;
|
|
783
|
+
ename = seal (hmac root label_names) name aad_name;
|
|
784
|
+
evalue = box;
|
|
785
|
+
};
|
|
786
|
+
]
|
|
787
|
+
end
|
|
788
|
+
in
|
|
789
|
+
|
|
790
|
+
save v { made with entries }
|
|
791
|
+
|
|
792
|
+
(* Drop a name. Master only. *)
|
|
793
|
+
let remove (v : vault) (name : string) : unit =
|
|
794
|
+
ignore (checkname name);
|
|
795
|
+
let made = load v in
|
|
796
|
+
let root = rootof v "removing a secret" in
|
|
797
|
+
let want = entryid (secretkey root name) in
|
|
798
|
+
|
|
799
|
+
if None = entryof made want then mvfail ("no such secret: " ^ name)
|
|
800
|
+
else save v { made with entries = List.filter (fun entry -> want <> entry.eid) made.entries }
|
|
801
|
+
|
|
802
|
+
(* Every key in the file, with what it may do. Master only. *)
|
|
803
|
+
let keys (v : vault) : keyinfo list =
|
|
804
|
+
let made = load v in
|
|
805
|
+
let metakey = hmac (rootof v "listing the keys") label_meta in
|
|
806
|
+
|
|
807
|
+
List.map
|
|
808
|
+
(fun record ->
|
|
809
|
+
(* A record written under a root key this one has replaced is still
|
|
810
|
+
in the file and still opens with its own passphrase, so it is
|
|
811
|
+
reported rather than hidden - with what it can do unknown. *)
|
|
812
|
+
match unseal metakey record.meta (aad_meta ^ record.kid) "metadata" with
|
|
813
|
+
| exception Sekreto_error _ ->
|
|
814
|
+
{ key = record.kid; master = false; write = false; grants = [] }
|
|
815
|
+
| plain -> (
|
|
816
|
+
match Json.parse plain with
|
|
817
|
+
| Some (Json.Obj _ as noted) ->
|
|
818
|
+
{
|
|
819
|
+
key = record.kid;
|
|
820
|
+
master = jsontrue noted "master";
|
|
821
|
+
write = jsontrue noted "write";
|
|
822
|
+
grants =
|
|
823
|
+
(match Json.dig noted [ "grants" ] with
|
|
824
|
+
| Some (Json.Arr entries) ->
|
|
825
|
+
List.sort compare
|
|
826
|
+
(List.filter_map
|
|
827
|
+
(function Json.Str name -> Some name | _ -> None)
|
|
828
|
+
entries)
|
|
829
|
+
| _ -> []);
|
|
830
|
+
}
|
|
831
|
+
| _ -> mvfail ("unreadable metadata for key " ^ record.kid)))
|
|
832
|
+
made.keys
|
|
833
|
+
|
|
834
|
+
(* Mint a restricted key. Master only. *)
|
|
835
|
+
let grant (v : vault) (spec : grantspec) : unit =
|
|
836
|
+
let made = load v in
|
|
837
|
+
let root = rootof v "granting a key" in
|
|
838
|
+
|
|
839
|
+
ignore (checkid spec.gkey "a grant needs a key id");
|
|
840
|
+
if "" = spec.gpassphrase then mvfail "a grant needs a passphrase";
|
|
841
|
+
if None <> keyof made spec.gkey then mvfail ("key already exists: " ^ spec.gkey);
|
|
842
|
+
|
|
843
|
+
let names = List.sort compare spec.gnames in
|
|
844
|
+
List.iter (fun name -> ignore (checkname name)) names;
|
|
845
|
+
|
|
846
|
+
let record =
|
|
847
|
+
sealkey root spec.gkey spec.gpassphrase
|
|
848
|
+
(if 0 < spec.giterations then spec.giterations else v.viterations)
|
|
849
|
+
(grantring spec.gwrite (List.map (fun name -> (name, secretkey root name)) names))
|
|
850
|
+
(metaof false spec.gwrite names)
|
|
851
|
+
in
|
|
852
|
+
|
|
853
|
+
save v { made with keys = made.keys @ [ record ] }
|
|
854
|
+
|
|
855
|
+
(* Drop a key. Master only.
|
|
856
|
+
|
|
857
|
+
Anyone who already copied the file keeps whatever that key could read,
|
|
858
|
+
so revoking bars future reads of the LIVE file and `rotate` is what
|
|
859
|
+
takes a secret back. *)
|
|
860
|
+
let revoke (v : vault) (id : string) : unit =
|
|
861
|
+
let made = load v in
|
|
862
|
+
ignore (rootof v "revoking a key");
|
|
863
|
+
|
|
864
|
+
if id = v.vkey then mvfail ("a key cannot revoke itself: " ^ id);
|
|
865
|
+
if None = keyof made id then mvfail ("no such key: " ^ id);
|
|
866
|
+
|
|
867
|
+
save v { made with keys = List.filter (fun record -> id <> record.kid) made.keys }
|
|
868
|
+
|
|
869
|
+
(* Take a new root key, re-encrypt every value under it, and DROP EVERY
|
|
870
|
+
OTHER KEY. Master only.
|
|
871
|
+
|
|
872
|
+
The other keys go because they must: their rings are sealed under
|
|
873
|
+
passphrases this process does not have, so there is no way to hand them
|
|
874
|
+
keys they can unwrap. Re-grant afterwards. *)
|
|
875
|
+
let rotate (v : vault) : unit =
|
|
876
|
+
let made = load v in
|
|
877
|
+
let oldroot = rootof v "rotating the vault" in
|
|
878
|
+
let iters = match keyof made v.vkey with Some record -> record.iters | None -> v.viterations in
|
|
879
|
+
|
|
880
|
+
(* Read everything out under the old root before anything changes: once
|
|
881
|
+
the root is replaced the old derived keys are unreachable. *)
|
|
882
|
+
let oldnamekey = hmac oldroot label_names in
|
|
883
|
+
let held =
|
|
884
|
+
List.map
|
|
885
|
+
(fun entry ->
|
|
886
|
+
let name = unseal oldnamekey entry.ename aad_name "a secret name is damaged" in
|
|
887
|
+
( name,
|
|
888
|
+
unseal (secretkey oldroot name) entry.evalue (aad_secret ^ name)
|
|
889
|
+
("the value of " ^ name ^ " is damaged") ))
|
|
890
|
+
made.entries
|
|
891
|
+
in
|
|
892
|
+
|
|
893
|
+
let root = randombytes keylen in
|
|
894
|
+
let namekey = hmac root label_names in
|
|
895
|
+
|
|
896
|
+
let entries =
|
|
897
|
+
List.map
|
|
898
|
+
(fun (name, value) ->
|
|
899
|
+
let k = secretkey root name in
|
|
900
|
+
{
|
|
901
|
+
eid = entryid k;
|
|
902
|
+
ename = seal namekey name aad_name;
|
|
903
|
+
evalue = seal k value (aad_secret ^ name);
|
|
904
|
+
})
|
|
905
|
+
held
|
|
906
|
+
in
|
|
907
|
+
|
|
908
|
+
(* SAVE FIRST, adopt second. A handle holding the new root over a file
|
|
909
|
+
that still holds the old one reads nothing and says the vault is
|
|
910
|
+
damaged, which is the wrong story about a failed write. *)
|
|
911
|
+
save v { keys = [ masterrecord root v.vkey v.vpassphrase iters ]; entries };
|
|
912
|
+
|
|
913
|
+
(* Dropped rather than replaced: the next call re-derives from the file
|
|
914
|
+
this one just wrote, which is the same rule every other change
|
|
915
|
+
follows. *)
|
|
916
|
+
close v
|
|
917
|
+
|
|
918
|
+
(* ---- opening and creating ----------------------------------------------- *)
|
|
919
|
+
|
|
920
|
+
(* Open a vault file as one key.
|
|
921
|
+
|
|
922
|
+
The handle is LAZY. Nothing is read, and no passphrase is stretched,
|
|
923
|
+
until a call needs the file - so a chain of ten providers costs ten
|
|
924
|
+
records rather than ten PBKDF2 runs. *)
|
|
925
|
+
let openvault (options : options) : vault =
|
|
926
|
+
if "" = options.ofile then mvfail "a vault needs a file";
|
|
927
|
+
if "" = options.opassphrase then mvfail "a vault needs a passphrase";
|
|
928
|
+
|
|
929
|
+
let id = if "" = options.okey then masterkey else options.okey in
|
|
930
|
+
ignore (checkid id "a vault needs a key id");
|
|
931
|
+
|
|
932
|
+
{
|
|
933
|
+
vfile = options.ofile;
|
|
934
|
+
vkey = id;
|
|
935
|
+
vpassphrase = options.opassphrase;
|
|
936
|
+
viterations = (if 0 < options.oiterations then options.oiterations else iterations);
|
|
937
|
+
vcreate = options.ocreate;
|
|
938
|
+
vopened = false;
|
|
939
|
+
vroot = None;
|
|
940
|
+
vgrants = [];
|
|
941
|
+
vwrite = false;
|
|
942
|
+
vring = None;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
(* Make a vault file and answer a handle on its master key.
|
|
946
|
+
|
|
947
|
+
Refuses a file that is already there: a vault is created once, and
|
|
948
|
+
overwriting one discards every secret in it along with every key that
|
|
949
|
+
could read them. *)
|
|
950
|
+
let createvault (options : options) : vault =
|
|
951
|
+
let v = openvault options in
|
|
952
|
+
|
|
953
|
+
(* No stat first: the check and the write would be two steps, and
|
|
954
|
+
`putnew` refuses an existing file in ONE, which is what makes two
|
|
955
|
+
processes racing to create a vault leave one vault. *)
|
|
956
|
+
putnew v.vfile (newvault v.vkey v.vpassphrase v.viterations);
|
|
957
|
+
|
|
958
|
+
v
|
|
959
|
+
|
|
960
|
+
(* ---- the provider -------------------------------------------------------- *)
|
|
961
|
+
|
|
962
|
+
(* The vaults this module has built.
|
|
963
|
+
|
|
964
|
+
voxgig/plugin's values are numbers and strings, not handles, so a
|
|
965
|
+
definition exports the HANDLE of what it made and `vaultof` looks it
|
|
966
|
+
up - exactly as `providerplugin` exports one for the provider.
|
|
967
|
+
|
|
968
|
+
The definition's `close` drops the entry, so a chain that was torn down
|
|
969
|
+
and a chain whose construction was refused both hand their vaults back
|
|
970
|
+
and nothing accumulates. `stashedvaults` reads the table, which is what
|
|
971
|
+
makes that checkable rather than merely intended. *)
|
|
972
|
+
let vaults : (int, vault) Hashtbl.t = Hashtbl.create 8
|
|
973
|
+
let lastvault = ref 0
|
|
974
|
+
|
|
975
|
+
let stashvault (v : vault) : int =
|
|
976
|
+
incr lastvault;
|
|
977
|
+
Hashtbl.replace vaults !lastvault v;
|
|
978
|
+
!lastvault
|
|
979
|
+
|
|
980
|
+
let unstashvault (handle : int) : unit = Hashtbl.remove vaults handle
|
|
981
|
+
let stashedvaults () : int = Hashtbl.length vaults
|
|
982
|
+
|
|
983
|
+
(* Reads a vault as one store in a chain.
|
|
984
|
+
|
|
985
|
+
The provider is the READ half and nothing more: a chain resolves
|
|
986
|
+
secrets, and writing one is a deliberate act with an API of its own.
|
|
987
|
+
That API is the same handle, reached with `vaultof` off a chain or
|
|
988
|
+
built directly with `openvault`. *)
|
|
989
|
+
let minivault_provider (v : vault) : provider =
|
|
990
|
+
{ lookup = (fun name -> get v name); describe = (fun () -> "minivault:" ^ file v) }
|
|
991
|
+
|
|
992
|
+
(* The `minivault` provider kind, as a voxgig/plugin definition.
|
|
993
|
+
|
|
994
|
+
Written out rather than built by `providerplugin`, because this
|
|
995
|
+
definition publishes TWO exports: `provider`, the read half every kind
|
|
996
|
+
publishes, and `vault`, the programmatic API. voxgig/plugin's exports
|
|
997
|
+
are how a definition offers an application more than the host's own
|
|
998
|
+
vocabulary, and a store that can only be read is half a vault.
|
|
999
|
+
|
|
1000
|
+
The `sekreto_error` wrapping is what `providerplugin` would have done:
|
|
1001
|
+
plugin wraps a code-less error raised in `define` as
|
|
1002
|
+
`plugin_define_failed` and keeps one that already carries a code, so a
|
|
1003
|
+
refusal of this provider's own configuration travels under
|
|
1004
|
+
`sekreto_error` and comes back out of the host as itself. *)
|
|
1005
|
+
let plugin () : Defs.definition =
|
|
1006
|
+
{
|
|
1007
|
+
Defs.dname = "minivault";
|
|
1008
|
+
shape = V.vnull;
|
|
1009
|
+
define =
|
|
1010
|
+
Some
|
|
1011
|
+
(fun inst ->
|
|
1012
|
+
let spec = specof inst.Defs.options in
|
|
1013
|
+
let made =
|
|
1014
|
+
(* Configuration is refused HERE, so a mistyped chain fails at
|
|
1015
|
+
construction. Reaching the file is not configuration: the
|
|
1016
|
+
handle is lazy, and nothing is read or stretched until a
|
|
1017
|
+
lookup. *)
|
|
1018
|
+
match
|
|
1019
|
+
openvault
|
|
1020
|
+
{
|
|
1021
|
+
ofile = spec.file;
|
|
1022
|
+
okey = spec.vaultkey;
|
|
1023
|
+
opassphrase = spec.passphrase;
|
|
1024
|
+
oiterations = spec.iterations;
|
|
1025
|
+
ocreate = spec.create;
|
|
1026
|
+
}
|
|
1027
|
+
with
|
|
1028
|
+
| made -> made
|
|
1029
|
+
| exception Sekreto_error message ->
|
|
1030
|
+
let details = V.vmap () in
|
|
1031
|
+
V.set details "ref" (V.vstr inst.Defs.iref);
|
|
1032
|
+
V.set details "cause" (V.vstr message);
|
|
1033
|
+
Types.fail error_code message ~details
|
|
1034
|
+
in
|
|
1035
|
+
Host.exportvalue inst provider_export
|
|
1036
|
+
(V.vnum (float_of_int (stash (minivault_provider made))));
|
|
1037
|
+
Host.exportvalue inst vault_export (V.vnum (float_of_int (stashvault made))));
|
|
1038
|
+
activate = None;
|
|
1039
|
+
deactivate = None;
|
|
1040
|
+
(* THE LIFECYCLE OWNS THE RELEASE, as it does for the provider handle
|
|
1041
|
+
beside it: `unload` runs this for a loaded instance and for a
|
|
1042
|
+
failed one alike. *)
|
|
1043
|
+
close =
|
|
1044
|
+
Some
|
|
1045
|
+
(fun inst ->
|
|
1046
|
+
let held = V.get inst.Defs.exports provider_export in
|
|
1047
|
+
if V.is_num held then unstash (int_of_float (V.as_num held));
|
|
1048
|
+
let heldvault = V.get inst.Defs.exports vault_export in
|
|
1049
|
+
if V.is_num heldvault then unstashvault (int_of_float (V.as_num heldvault)));
|
|
1050
|
+
reconfigure = None;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
(* The vault behind a store in a chain, as its programmatic API.
|
|
1054
|
+
|
|
1055
|
+
`Sekreto.host` is the voxgig/plugin host the chain is made of, and a
|
|
1056
|
+
definition's exports are readable off it by ref. This is the one call
|
|
1057
|
+
that turns a store into an API, and it lives here rather than in the
|
|
1058
|
+
core because the core knows no plugin.
|
|
1059
|
+
|
|
1060
|
+
With no store named, the unqualified alias answers: one vault in the
|
|
1061
|
+
chain resolves whatever it is called, and two refuse rather than
|
|
1062
|
+
picking one. *)
|
|
1063
|
+
let vaultof ?(store = "") (host : Defs.host) : vault =
|
|
1064
|
+
let held ref missing =
|
|
1065
|
+
match Host.exports host (ref ^ "/" ^ vault_export) with
|
|
1066
|
+
| exception _ -> mvfail missing
|
|
1067
|
+
| Some value when V.is_num value -> (
|
|
1068
|
+
match Hashtbl.find_opt vaults (int_of_float (V.as_num value)) with
|
|
1069
|
+
| Some v -> v
|
|
1070
|
+
| None -> mvfail missing)
|
|
1071
|
+
| _ -> mvfail missing
|
|
1072
|
+
in
|
|
1073
|
+
|
|
1074
|
+
if "" = store then held "minivault" "no minivault store in this chain"
|
|
1075
|
+
else begin
|
|
1076
|
+
(* A NAMED STORE MUST EXIST, and the alias must not stand in for it.
|
|
1077
|
+
`Host.exports` falls back to the alias when the exact ref misses,
|
|
1078
|
+
so asking for `minivault` in a chain whose only vault is named
|
|
1079
|
+
`app` used to hand back the `app` vault - and then write to it.
|
|
1080
|
+
Naming a store that is not there refuses, which is the rule the
|
|
1081
|
+
whole library follows: `tryget` already means "may not have it", so
|
|
1082
|
+
it cannot also mean "may not exist". *)
|
|
1083
|
+
let missing = "no minivault store named " ^ store ^ " in this chain" in
|
|
1084
|
+
let iref = if "minivault" = store then "minivault" else "minivault$" ^ store in
|
|
1085
|
+
if None = Host.instance host iref then mvfail missing else held iref missing
|
|
1086
|
+
end
|