@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,1227 @@
|
|
|
1
|
+
-- VENDORED: @voxgig/sekreto sdk-20260917-1242-0 (lua/src/sekreto/plugins/minivault.lua)
|
|
2
|
+
-- Source: https://github.com/voxgig/sekreto @ 108c4a914bee7b6534c30d1c68c25cd1b9377696 [tag: sdk-20260917-1242-0]
|
|
3
|
+
-- License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
-- A mini vault: every secret a project owns, encrypted, in ONE FILE.
|
|
5
|
+
--
|
|
6
|
+
-- The store to reach for before there is a vault server. There is
|
|
7
|
+
-- nothing to run and nothing to reach over a socket - the whole store is
|
|
8
|
+
-- a single binary file - and the same chain that reads it in development
|
|
9
|
+
-- reads HashiCorp or AWS in production by changing config, which is the
|
|
10
|
+
-- reason sekreto exists.
|
|
11
|
+
--
|
|
12
|
+
-- A PLUGIN, not a built-in: this kind needs crypto, which is the line the
|
|
13
|
+
-- four built-in kinds stay behind. Lua 5.4's standard library has no
|
|
14
|
+
-- cryptography at all and the no-new-package rule stands, so the four
|
|
15
|
+
-- primitives come from the OpenSSL this port already links, through
|
|
16
|
+
-- `native/sekretovault.c` - a LOADABLE MODULE rather than a child
|
|
17
|
+
-- process, for the reason its header gives: a vault `list` over a hundred
|
|
18
|
+
-- secrets is a hundred AEAD opens, and a hundred spawns is not a store
|
|
19
|
+
-- anybody would use.
|
|
20
|
+
--
|
|
21
|
+
-- THE KEY DECIDES WHAT THE VAULT HOLDS. A master key reads and writes
|
|
22
|
+
-- every name and mints restricted keys. A restricted key reads the names
|
|
23
|
+
-- it was granted and CANNOT DERIVE ANY OTHER - the restriction is the
|
|
24
|
+
-- cryptography rather than a check this code performs, so a copy of the
|
|
25
|
+
-- file plus a restricted passphrase yields exactly what was granted and
|
|
26
|
+
-- nothing else. What that does and does not protect is set out in DOCS.md
|
|
27
|
+
-- under "What the mini vault protects".
|
|
28
|
+
--
|
|
29
|
+
-- THE FILE FORMAT, which is the contract between the ports:
|
|
30
|
+
--
|
|
31
|
+
-- magic 4 'SKMV'
|
|
32
|
+
-- version 1 FORMAT
|
|
33
|
+
-- kdf 1 1 = PBKDF2-HMAC-SHA256
|
|
34
|
+
-- cipher 1 1 = AES-256-GCM
|
|
35
|
+
-- reserved 1 0
|
|
36
|
+
-- keycount 4 uint32
|
|
37
|
+
-- per key:
|
|
38
|
+
-- id 1 + bytes the key id, PLAINTEXT
|
|
39
|
+
-- salt 1 + bytes
|
|
40
|
+
-- iters 4 PBKDF2 rounds for this key
|
|
41
|
+
-- ring 1 + iv, 4 + bytes sealed under the passphrase
|
|
42
|
+
-- meta 1 + iv, 4 + bytes sealed under the vault's meta key
|
|
43
|
+
-- entrycount 4 uint32
|
|
44
|
+
-- per entry:
|
|
45
|
+
-- id 1 + bytes the blinded lookup id
|
|
46
|
+
-- name 1 + iv, 4 + bytes sealed under the vault's name key
|
|
47
|
+
-- value 1 + iv, 4 + bytes sealed under that secret's own key
|
|
48
|
+
--
|
|
49
|
+
-- Integers are big-endian and every length precedes its bytes, so the
|
|
50
|
+
-- file is written with the same two primitives it is read with.
|
|
51
|
+
--
|
|
52
|
+
-- NOTHING OUTSIDE A KEY RECORD IS PLAINTEXT. Secret names are sealed, and
|
|
53
|
+
-- an entry is addressed by a blinded id derived from its own key, so a
|
|
54
|
+
-- restricted key finds what it was granted without the file ever naming
|
|
55
|
+
-- the rest. What the file does show anyone is the key ids and how many
|
|
56
|
+
-- secrets there are.
|
|
57
|
+
--
|
|
58
|
+
-- A port of typescript/plugins/minivault.ts, which is canonical. The
|
|
59
|
+
-- bytes are pinned by the vaults in test/fixture rather than left to
|
|
60
|
+
-- agreement between implementations.
|
|
61
|
+
|
|
62
|
+
local err = require('feature.secrets.sekreto.err')
|
|
63
|
+
local name = require('feature.secrets.sekreto.name')
|
|
64
|
+
local providers = require('feature.secrets.sekreto.providers')
|
|
65
|
+
local json = require('feature.secrets.sekreto.plugins.json')
|
|
66
|
+
|
|
67
|
+
local fail = err.fail
|
|
68
|
+
local checkname = name.checkname
|
|
69
|
+
|
|
70
|
+
local M = {}
|
|
71
|
+
|
|
72
|
+
-- ------------------------------------------------------- the primitives
|
|
73
|
+
|
|
74
|
+
--- Where the crypto module is, worked out from THIS FILE'S OWN PATH
|
|
75
|
+
--- rather than from the working directory or `package.cpath`: the CLI is
|
|
76
|
+
--- run from an empty directory with the environment wiped, exactly as
|
|
77
|
+
--- `net.lua` finds the transport helper.
|
|
78
|
+
local function vaultlib()
|
|
79
|
+
local source = debug.getinfo(1, 'S').source
|
|
80
|
+
|
|
81
|
+
if '@' == source:sub(1, 1) then
|
|
82
|
+
local dir = source:sub(2):match('^(.*)/feature/secrets/sekreto/plugins/minivault%.lua$')
|
|
83
|
+
if nil ~= dir then
|
|
84
|
+
return dir .. '/feature/secrets/native/sekretovault.so'
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
return 'feature/secrets/native/sekretovault.so'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
M.VAULTLIB = vaultlib()
|
|
92
|
+
|
|
93
|
+
--- Loaded on first use, not at require time: a consumer that requires
|
|
94
|
+
--- this module and never builds a chain must not be stopped by a missing
|
|
95
|
+
--- `.so`, and the refusal when there IS one names what to build.
|
|
96
|
+
local loaded = nil
|
|
97
|
+
|
|
98
|
+
local function native()
|
|
99
|
+
if nil ~= loaded then
|
|
100
|
+
return loaded
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
local open = package.loadlib(M.VAULTLIB, 'luaopen_sekretovault')
|
|
104
|
+
if nil == open then
|
|
105
|
+
fail('sekreto: minivault: the vault crypto module is missing (is '
|
|
106
|
+
.. M.VAULTLIB .. ' built?)')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
loaded = open()
|
|
110
|
+
|
|
111
|
+
return loaded
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
-- ------------------------------------------------------------ the format
|
|
115
|
+
|
|
116
|
+
local MAGIC = 'SKMV'
|
|
117
|
+
local FORMAT = 1
|
|
118
|
+
local KDF_PBKDF2 = 1
|
|
119
|
+
local CIPHER_AESGCM = 1
|
|
120
|
+
|
|
121
|
+
--- AES-256-GCM: 32-byte keys, 12-byte nonces, 16-byte tags.
|
|
122
|
+
local KEYLEN = 32
|
|
123
|
+
local IVLEN = 12
|
|
124
|
+
local TAGLEN = 16
|
|
125
|
+
local SALTLEN = 16
|
|
126
|
+
|
|
127
|
+
--- The PBKDF2-HMAC-SHA256 round count when a caller names none.
|
|
128
|
+
M.ITERATIONS = 210000
|
|
129
|
+
|
|
130
|
+
--- The key id a vault gets when a caller names none.
|
|
131
|
+
M.MASTERKEY = 'master'
|
|
132
|
+
|
|
133
|
+
--- The export key the vault API is published under, beside the `provider`
|
|
134
|
+
--- key every kind publishes.
|
|
135
|
+
M.VAULT_EXPORT = 'vault'
|
|
136
|
+
|
|
137
|
+
-- Additional authenticated data. Every blob is bound to its PLACE in the
|
|
138
|
+
-- file, so no ciphertext can be moved: a restricted key's ring cannot be
|
|
139
|
+
-- relabelled as the master's, and one secret's value cannot be served
|
|
140
|
+
-- under a name it was never written for.
|
|
141
|
+
local AAD_RING = 'skmv1:ring:'
|
|
142
|
+
local AAD_META = 'skmv1:meta:'
|
|
143
|
+
local AAD_NAME = 'skmv1:name'
|
|
144
|
+
local AAD_SECRET = 'skmv1:secret:'
|
|
145
|
+
|
|
146
|
+
-- Everything a master reaches is derived from the root key, so rotating
|
|
147
|
+
-- is one new random value rather than a re-wrap of each part.
|
|
148
|
+
local LABEL_NAMES = 'skmv1:names'
|
|
149
|
+
local LABEL_META = 'skmv1:meta'
|
|
150
|
+
local LABEL_ID = 'skmv1:id'
|
|
151
|
+
|
|
152
|
+
--- The largest key id the format can record.
|
|
153
|
+
---
|
|
154
|
+
--- A length is written in ONE byte. A longer id wrapped that byte and the
|
|
155
|
+
--- writer then appended the whole thing, so every field after it shifted:
|
|
156
|
+
--- a grant with a 300-character id replaced a working vault with an
|
|
157
|
+
--- unreadable one, and said nothing. Checked where an id is ACCEPTED, so
|
|
158
|
+
--- the refusal names the id rather than the file.
|
|
159
|
+
local IDMAX = 255
|
|
160
|
+
|
|
161
|
+
local function mvfail(why)
|
|
162
|
+
fail('sekreto: minivault: ' .. why)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
local function checkid(id, what)
|
|
166
|
+
if nil == id or '' == id then
|
|
167
|
+
mvfail(what)
|
|
168
|
+
end
|
|
169
|
+
if IDMAX < #id then
|
|
170
|
+
mvfail('key id is longer than ' .. IDMAX .. ' bytes: ' .. id:sub(1, 32) .. '...')
|
|
171
|
+
end
|
|
172
|
+
return id
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
-- ---------------------------------------------------------------- keys
|
|
176
|
+
|
|
177
|
+
local function mac(key, text)
|
|
178
|
+
return native().hmac(key, text)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
--- The key-encryption key a passphrase unwraps a ring with.
|
|
182
|
+
---
|
|
183
|
+
--- A round count below one is refused in the module, which is what a
|
|
184
|
+
--- damaged or hostile file records to make the derivation free.
|
|
185
|
+
local function kek(passphrase, salt, iters)
|
|
186
|
+
local ok, got = pcall(function() return native().pbkdf2(passphrase, salt, iters) end)
|
|
187
|
+
if not ok then
|
|
188
|
+
mvfail('unusable round count: ' .. tostring(iters))
|
|
189
|
+
end
|
|
190
|
+
return got
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
--- The key one named secret's value is encrypted with.
|
|
194
|
+
---
|
|
195
|
+
--- DERIVED, never stored, for a master: it holds the root key and so
|
|
196
|
+
--- reaches every name, including ones written after it was made. A
|
|
197
|
+
--- restricted key holds the derived keys it was granted and nothing that
|
|
198
|
+
--- produces another, so every other name is ciphertext to it in exactly
|
|
199
|
+
--- the way it is to a stranger.
|
|
200
|
+
local function secretkey(root, secret)
|
|
201
|
+
return mac(root, AAD_SECRET .. secret)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
--- Where a secret lives in the file, derived from its own key so that
|
|
205
|
+
--- finding it needs no plaintext name. One-way: an id yields nothing
|
|
206
|
+
--- about the key that produced it.
|
|
207
|
+
local function entryid(key)
|
|
208
|
+
return mac(key, LABEL_ID)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
local function random(len)
|
|
212
|
+
local ok, got = pcall(function() return native().random(len) end)
|
|
213
|
+
if not ok then
|
|
214
|
+
mvfail('no randomness available')
|
|
215
|
+
end
|
|
216
|
+
return got
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
-- -------------------------------------------------------------- sealing
|
|
220
|
+
|
|
221
|
+
--- The tag rides at the END of the blob, which is where every other
|
|
222
|
+
--- port's AEAD leaves it and therefore what the format records.
|
|
223
|
+
local function seal(key, plain, aad)
|
|
224
|
+
if KEYLEN ~= #key then
|
|
225
|
+
mvfail('bad key')
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
local iv = random(IVLEN)
|
|
229
|
+
local ok, blob = pcall(function() return native().seal(key, iv, plain, aad) end)
|
|
230
|
+
|
|
231
|
+
if not ok then
|
|
232
|
+
mvfail('cannot seal')
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
return { iv = iv, blob = blob }
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
--- The plaintext, or a refusal. A GCM tag that fails to verify is the
|
|
239
|
+
--- only evidence there is, and it cannot tell a wrong passphrase from a
|
|
240
|
+
--- damaged file, so `what` names the attempt and the message admits both.
|
|
241
|
+
local function unseal(key, box, aad, what)
|
|
242
|
+
if TAGLEN > #box.blob or IVLEN ~= #box.iv then
|
|
243
|
+
mvfail(what .. ': truncated')
|
|
244
|
+
end
|
|
245
|
+
if KEYLEN ~= #key then
|
|
246
|
+
mvfail('bad key')
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
local ok, plain = pcall(function() return native().unseal(key, box.iv, box.blob, aad) end)
|
|
250
|
+
|
|
251
|
+
if not ok or nil == plain then
|
|
252
|
+
mvfail(what)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
return plain
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
local function sameseal(left, right)
|
|
259
|
+
return left.iv == right.iv and left.blob == right.blob
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
-- --------------------------------------------------------------- base64
|
|
263
|
+
|
|
264
|
+
-- Here rather than in `support.lua`, which the HTTP stores share:
|
|
265
|
+
-- requiring that module would load the transport and the TLS binding
|
|
266
|
+
-- behind it into a program whose only store opens nothing, which is the
|
|
267
|
+
-- cost the core/plugin split exists to remove.
|
|
268
|
+
local B64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
269
|
+
|
|
270
|
+
local function b64(raw)
|
|
271
|
+
local out = {}
|
|
272
|
+
|
|
273
|
+
for at = 1, #raw, 3 do
|
|
274
|
+
local left = #raw - at + 1
|
|
275
|
+
local a = raw:byte(at)
|
|
276
|
+
local b = 1 < left and raw:byte(at + 1) or 0
|
|
277
|
+
local c = 2 < left and raw:byte(at + 2) or 0
|
|
278
|
+
local triple = a * 65536 + b * 256 + c
|
|
279
|
+
|
|
280
|
+
out[#out + 1] = B64:sub((triple >> 18 & 0x3f) + 1, (triple >> 18 & 0x3f) + 1)
|
|
281
|
+
out[#out + 1] = B64:sub((triple >> 12 & 0x3f) + 1, (triple >> 12 & 0x3f) + 1)
|
|
282
|
+
out[#out + 1] = 1 < left and B64:sub((triple >> 6 & 0x3f) + 1, (triple >> 6 & 0x3f) + 1) or '='
|
|
283
|
+
out[#out + 1] = 2 < left and B64:sub((triple & 0x3f) + 1, (triple & 0x3f) + 1) or '='
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
return table.concat(out)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
--- STRICT. A lenient decoder hands back plausible bytes for a corrupted
|
|
290
|
+
--- payload, and those bytes are then used AS A KEY.
|
|
291
|
+
local function unb64(text, what)
|
|
292
|
+
if 'string' ~= type(text) or '' == text or 0 ~= #text % 4 then
|
|
293
|
+
mvfail('missing ' .. what)
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
local body, pad = text:match('^([^=]*)(=*)$')
|
|
297
|
+
if nil == body or 2 < #pad then
|
|
298
|
+
mvfail('missing ' .. what)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
local out = {}
|
|
302
|
+
local held = 0
|
|
303
|
+
local bits = 0
|
|
304
|
+
|
|
305
|
+
for at = 1, #body do
|
|
306
|
+
local sextet = B64:find(body:sub(at, at), 1, true)
|
|
307
|
+
if nil == sextet then
|
|
308
|
+
mvfail('missing ' .. what)
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
held = (held << 6) | (sextet - 1)
|
|
312
|
+
bits = bits + 6
|
|
313
|
+
|
|
314
|
+
if 8 <= bits then
|
|
315
|
+
bits = bits - 8
|
|
316
|
+
out[#out + 1] = string.char(held >> bits & 0xff)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
return table.concat(out)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
-- ------------------------------------------------------------- the file
|
|
324
|
+
|
|
325
|
+
--- A cursor, so that every length check is in one place: a truncated
|
|
326
|
+
--- vault is refused rather than read as a short one.
|
|
327
|
+
local Reader = {}
|
|
328
|
+
Reader.__index = Reader
|
|
329
|
+
|
|
330
|
+
local function reader(raw)
|
|
331
|
+
return setmetatable({ raw = raw, at = 1 }, Reader)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
--- Reads `len` bytes, or refuses.
|
|
335
|
+
---
|
|
336
|
+
--- The bound is checked AGAINST WHAT IS LEFT, never by adding the length
|
|
337
|
+
--- to the cursor. Lua's integers are 64-bit so the sum cannot wrap here,
|
|
338
|
+
--- but the check reads the same in every port and is the one that is
|
|
339
|
+
--- right everywhere.
|
|
340
|
+
function Reader:take(len)
|
|
341
|
+
if 0 > len or #self.raw - self.at + 1 < len then
|
|
342
|
+
mvfail('the vault file is truncated')
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
local out = self.raw:sub(self.at, self.at + len - 1)
|
|
346
|
+
self.at = self.at + len
|
|
347
|
+
|
|
348
|
+
return out
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
function Reader:u8()
|
|
352
|
+
return self:take(1):byte(1)
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
function Reader:u32()
|
|
356
|
+
local four = self:take(4)
|
|
357
|
+
return four:byte(1) * 16777216 + four:byte(2) * 65536 + four:byte(3) * 256 + four:byte(4)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
function Reader:small()
|
|
361
|
+
return self:take(self:u8())
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
function Reader:large()
|
|
365
|
+
return self:take(self:u32())
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
function Reader:sealed()
|
|
369
|
+
-- The iv is read before the blob, and the two statements keep that
|
|
370
|
+
-- order; a table constructor would not, because Lua leaves the order
|
|
371
|
+
-- its fields are evaluated in unspecified.
|
|
372
|
+
local iv = self:small()
|
|
373
|
+
return { iv = iv, blob = self:large() }
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
function Reader:left()
|
|
377
|
+
return #self.raw - self.at + 1
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
local function readfile(raw)
|
|
381
|
+
local read = reader(raw)
|
|
382
|
+
|
|
383
|
+
if MAGIC ~= read:take(4) then
|
|
384
|
+
mvfail('not a vault file')
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
local version = read:u8()
|
|
388
|
+
if FORMAT ~= version then
|
|
389
|
+
mvfail('unsupported format version: ' .. version)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
local kdf = read:u8()
|
|
393
|
+
local cipher = read:u8()
|
|
394
|
+
if KDF_PBKDF2 ~= kdf or CIPHER_AESGCM ~= cipher then
|
|
395
|
+
mvfail('unsupported kdf or cipher: ' .. kdf .. '/' .. cipher)
|
|
396
|
+
end
|
|
397
|
+
read:u8()
|
|
398
|
+
|
|
399
|
+
local file = { keys = {}, entries = {} }
|
|
400
|
+
|
|
401
|
+
-- A COUNT IS BOUNDED BY WHAT IS LEFT. Each record carries at least a
|
|
402
|
+
-- few bytes, so a file claiming four billion of them is damaged; the
|
|
403
|
+
-- loop would find that out one truncation at a time.
|
|
404
|
+
local keycount = read:u32()
|
|
405
|
+
if read:left() < keycount then
|
|
406
|
+
mvfail('the vault file is truncated')
|
|
407
|
+
end
|
|
408
|
+
for _ = 1, keycount do
|
|
409
|
+
local id = read:small()
|
|
410
|
+
local salt = read:small()
|
|
411
|
+
local iters = read:u32()
|
|
412
|
+
local ring = read:sealed()
|
|
413
|
+
file.keys[#file.keys + 1] =
|
|
414
|
+
{ id = id, salt = salt, iters = iters, ring = ring, meta = read:sealed() }
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
local entrycount = read:u32()
|
|
418
|
+
if read:left() < entrycount then
|
|
419
|
+
mvfail('the vault file is truncated')
|
|
420
|
+
end
|
|
421
|
+
for _ = 1, entrycount do
|
|
422
|
+
local id = read:small()
|
|
423
|
+
local secretname = read:sealed()
|
|
424
|
+
file.entries[#file.entries + 1] =
|
|
425
|
+
{ id = id, name = secretname, value = read:sealed() }
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
if read.at ~= #raw + 1 then
|
|
429
|
+
mvfail('the vault file has trailing bytes')
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
return file
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
local function keyof(file, id)
|
|
436
|
+
for _, record in ipairs(file.keys) do
|
|
437
|
+
if id == record.id then
|
|
438
|
+
return record
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
return nil
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
local function entryof(file, id)
|
|
445
|
+
for _, record in ipairs(file.entries) do
|
|
446
|
+
if id == record.id then
|
|
447
|
+
return record
|
|
448
|
+
end
|
|
449
|
+
end
|
|
450
|
+
return nil
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
local function putu32(value)
|
|
454
|
+
return string.char(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff)
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
local function putsmall(value)
|
|
458
|
+
return string.char(#value & 0xff) .. value
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
local function putlarge(value)
|
|
462
|
+
return putu32(#value) .. value
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
local function putsealed(box)
|
|
466
|
+
return putsmall(box.iv) .. putlarge(box.blob)
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
local function writefile(file)
|
|
470
|
+
local out = { MAGIC, string.char(FORMAT, KDF_PBKDF2, CIPHER_AESGCM, 0) }
|
|
471
|
+
|
|
472
|
+
out[#out + 1] = putu32(#file.keys)
|
|
473
|
+
for _, record in ipairs(file.keys) do
|
|
474
|
+
out[#out + 1] = putsmall(record.id)
|
|
475
|
+
out[#out + 1] = putsmall(record.salt)
|
|
476
|
+
out[#out + 1] = putu32(record.iters)
|
|
477
|
+
out[#out + 1] = putsealed(record.ring)
|
|
478
|
+
out[#out + 1] = putsealed(record.meta)
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
-- SORTED BY ID, which is a blinded value: the file therefore records
|
|
482
|
+
-- nothing about the order secrets were written in.
|
|
483
|
+
local entries = {}
|
|
484
|
+
for at, record in ipairs(file.entries) do
|
|
485
|
+
entries[at] = record
|
|
486
|
+
end
|
|
487
|
+
table.sort(entries, function(left, right) return left.id < right.id end)
|
|
488
|
+
|
|
489
|
+
out[#out + 1] = putu32(#entries)
|
|
490
|
+
for _, record in ipairs(entries) do
|
|
491
|
+
out[#out + 1] = putsmall(record.id)
|
|
492
|
+
out[#out + 1] = putsealed(record.name)
|
|
493
|
+
out[#out + 1] = putsealed(record.value)
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
return table.concat(out)
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
-- ----------------------------------------------------- the file on disk
|
|
500
|
+
|
|
501
|
+
--- Read as BINARY, byte for byte: a vault is full of NULs and of bytes no
|
|
502
|
+
--- encoding claims.
|
|
503
|
+
local function slurp(path)
|
|
504
|
+
local handle = io.open(path, 'rb')
|
|
505
|
+
if nil == handle then
|
|
506
|
+
return nil
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
local raw = handle:read('a')
|
|
510
|
+
handle:close()
|
|
511
|
+
|
|
512
|
+
return raw
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
--- Owner-only, because a vault file is the whole store.
|
|
516
|
+
---
|
|
517
|
+
--- LUA CANNOT ASK FOR AN EXCLUSIVE CREATE, and it cannot chmod: `io.open`
|
|
518
|
+
--- has `w` and nothing else, and the mode is the process umask's to
|
|
519
|
+
--- decide. So the two guarantees the other ports get from `O_EXCL | 0600`
|
|
520
|
+
--- are arranged differently here: `putnew` looks first and refuses a file
|
|
521
|
+
--- that is there - a check-then-write that two processes could both pass,
|
|
522
|
+
--- which is stated rather than hidden - and the file is created under the
|
|
523
|
+
--- umask a service normally runs with. A deployment that needs 0600 on a
|
|
524
|
+
--- shared host sets its umask, and the port says so rather than implying
|
|
525
|
+
--- a protection it cannot give.
|
|
526
|
+
local function spill(path, raw)
|
|
527
|
+
local handle = io.open(path, 'wb')
|
|
528
|
+
if nil == handle then
|
|
529
|
+
mvfail('cannot write ' .. path)
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
local ok = handle:write(raw)
|
|
533
|
+
handle:close()
|
|
534
|
+
|
|
535
|
+
if not ok then
|
|
536
|
+
os.remove(path)
|
|
537
|
+
mvfail('cannot write ' .. path)
|
|
538
|
+
end
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
local function hex(raw)
|
|
542
|
+
local out = {}
|
|
543
|
+
for at = 1, #raw do
|
|
544
|
+
out[at] = string.format('%02x', raw:byte(at))
|
|
545
|
+
end
|
|
546
|
+
return table.concat(out)
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
-- ------------------------------------------------------------ the vault
|
|
550
|
+
|
|
551
|
+
-- A MASTER'S ring holds the root and no grants; a RESTRICTED key's holds
|
|
552
|
+
-- grants and no root, even when it was granted nothing. That asymmetry is
|
|
553
|
+
-- the format rather than a saving: a ring with a root reaches every name
|
|
554
|
+
-- there will ever be, so a grant list beside it would be a second answer
|
|
555
|
+
-- to the same question.
|
|
556
|
+
local function masterring(root)
|
|
557
|
+
return json.stringify(json.obj({
|
|
558
|
+
{ 'v', FORMAT },
|
|
559
|
+
{ 'write', true },
|
|
560
|
+
{ 'root', b64(root) },
|
|
561
|
+
}))
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
local function grantring(write, grants)
|
|
565
|
+
local held = {}
|
|
566
|
+
for _, pair in ipairs(grants) do
|
|
567
|
+
held[#held + 1] = { pair[1], b64(pair[2]) }
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
return json.stringify(json.obj({
|
|
571
|
+
{ 'v', FORMAT },
|
|
572
|
+
{ 'write', write },
|
|
573
|
+
{ 'grants', json.obj(held) },
|
|
574
|
+
}))
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
local function metaof(master, write, names)
|
|
578
|
+
return json.stringify(json.obj({
|
|
579
|
+
{ 'v', FORMAT },
|
|
580
|
+
{ 'master', master },
|
|
581
|
+
{ 'write', write },
|
|
582
|
+
-- An ARRAY here and an OBJECT in the ring, which is the format and
|
|
583
|
+
-- not an accident: the ring holds a key per name, and the record
|
|
584
|
+
-- holds only the names.
|
|
585
|
+
{ 'grants', json.arr(names) },
|
|
586
|
+
}))
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
local function sealkey(root, id, passphrase, iters, ring, meta)
|
|
590
|
+
local salt = random(SALTLEN)
|
|
591
|
+
|
|
592
|
+
return {
|
|
593
|
+
id = id,
|
|
594
|
+
salt = salt,
|
|
595
|
+
iters = iters,
|
|
596
|
+
ring = seal(kek(passphrase, salt, iters), ring, AAD_RING .. id),
|
|
597
|
+
meta = seal(mac(root, LABEL_META), meta, AAD_META .. id),
|
|
598
|
+
}
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
--- The one key record a new or rotated vault starts with: a master
|
|
602
|
+
--- holding the root, granted nothing because it needs nothing.
|
|
603
|
+
local function masterrecord(root, id, passphrase, iters)
|
|
604
|
+
return sealkey(root, id, passphrase, iters, masterring(root), metaof(true, true, {}))
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
local function newvault(id, passphrase, iters)
|
|
608
|
+
return { keys = { masterrecord(random(KEYLEN), id, passphrase, iters) }, entries = {} }
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
--- Writes a vault file that is not there yet, and REFUSES one that is.
|
|
612
|
+
---
|
|
613
|
+
--- A LOOK AND THEN A WRITE, which is two steps: see `spill` for why this
|
|
614
|
+
--- port cannot make it one. Two processes racing to create the same vault
|
|
615
|
+
--- can therefore both pass the look, and the second overwrites the first;
|
|
616
|
+
--- every other port refuses that in one syscall.
|
|
617
|
+
local function putnew(path, made)
|
|
618
|
+
if nil ~= slurp(path) then
|
|
619
|
+
mvfail('vault file already exists: ' .. path)
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
spill(path, writefile(made))
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
--- A handle on one vault file, opened as ONE key.
|
|
626
|
+
---
|
|
627
|
+
--- Every method answers as that key: `list` shows the names it may read,
|
|
628
|
+
--- `get` answers for those and misses on the rest, and the master-only
|
|
629
|
+
--- methods refuse for any other key. Nothing is read or derived until the
|
|
630
|
+
--- first call that needs the file, so putting a vault in a chain costs no
|
|
631
|
+
--- key derivation until a secret is actually wanted.
|
|
632
|
+
local Vault = {}
|
|
633
|
+
Vault.__index = Vault
|
|
634
|
+
|
|
635
|
+
function Vault:file()
|
|
636
|
+
return self.path
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
function Vault:key()
|
|
640
|
+
return self.keyid
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
--- Forget the derived keys. The next call opens again.
|
|
644
|
+
function Vault:close()
|
|
645
|
+
self.opened = nil
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
--- Replaces the file rather than editing it in place. The rename is what
|
|
649
|
+
--- makes a concurrent reader see either the old file or the new one, so a
|
|
650
|
+
--- write interrupted halfway leaves a vault rather than wreckage.
|
|
651
|
+
---
|
|
652
|
+
--- THE TEMPORARY IS RANDOM, though it cannot be exclusive here: see
|
|
653
|
+
--- `spill`. `<vault>.<pid>.tmp` is a name anyone can predict, and the
|
|
654
|
+
--- random suffix is what stops that and what stops two writers colliding.
|
|
655
|
+
function Vault:save(made)
|
|
656
|
+
local temp = self.path .. '.' .. hex(random(8)) .. '.tmp'
|
|
657
|
+
|
|
658
|
+
spill(temp, writefile(made))
|
|
659
|
+
|
|
660
|
+
local ok = os.rename(temp, self.path)
|
|
661
|
+
if not ok then
|
|
662
|
+
-- The vault is unchanged either way, and the write error is what the
|
|
663
|
+
-- caller needs to be told about.
|
|
664
|
+
os.remove(temp)
|
|
665
|
+
mvfail('cannot write ' .. self.path)
|
|
666
|
+
end
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
function Vault:bytes()
|
|
670
|
+
local raw = slurp(self.path)
|
|
671
|
+
if nil ~= raw then
|
|
672
|
+
return raw
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
-- A vault is configured deliberately, with a key. Its absence is a
|
|
676
|
+
-- broken deployment and never "no secrets here": answering a miss would
|
|
677
|
+
-- send the chain on to a weaker store, which is the failure mode this
|
|
678
|
+
-- library most has to avoid. `create` is the caller saying the
|
|
679
|
+
-- opposite, in writing.
|
|
680
|
+
if not self.create then
|
|
681
|
+
mvfail('no vault file: ' .. self.path)
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
putnew(self.path, newvault(self.keyid, self.passphrase, self.iterations))
|
|
685
|
+
|
|
686
|
+
raw = slurp(self.path)
|
|
687
|
+
if nil == raw then
|
|
688
|
+
mvfail('cannot read ' .. self.path)
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
return raw
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
local function jsontrue(held, key)
|
|
695
|
+
return true == json.dig(held, key)
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
--- The file as this key sees it: parsed every call - it is different
|
|
699
|
+
--- bytes every time - while the unwrapped ring is kept, because
|
|
700
|
+
--- stretching a passphrase once per lookup is the cost that caching
|
|
701
|
+
--- exists to avoid.
|
|
702
|
+
function Vault:load()
|
|
703
|
+
local file = readfile(self:bytes())
|
|
704
|
+
local record = keyof(file, self.keyid)
|
|
705
|
+
|
|
706
|
+
if nil == record then
|
|
707
|
+
-- REVOKED, or never there. Either way this handle is finished, and
|
|
708
|
+
-- dropping what it derived is what stops the next call answering from
|
|
709
|
+
-- memory.
|
|
710
|
+
self:close()
|
|
711
|
+
mvfail('no such key: ' .. self.keyid)
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
-- The file still holds this key, and holds the SAME ring: a key revoked
|
|
715
|
+
-- and re-granted under another passphrase is a different key wearing
|
|
716
|
+
-- the id, and re-deriving is what refuses it.
|
|
717
|
+
if nil ~= self.opened and sameseal(self.opened.ring, record.ring) then
|
|
718
|
+
return file
|
|
719
|
+
end
|
|
720
|
+
self:close()
|
|
721
|
+
|
|
722
|
+
local plain = unseal(
|
|
723
|
+
kek(self.passphrase, record.salt, record.iters),
|
|
724
|
+
record.ring,
|
|
725
|
+
AAD_RING .. self.keyid,
|
|
726
|
+
'wrong passphrase for key ' .. self.keyid .. ', or a damaged vault')
|
|
727
|
+
|
|
728
|
+
local held = json.parse(plain)
|
|
729
|
+
if not json.isobj(held) then
|
|
730
|
+
mvfail('unreadable key ring for ' .. self.keyid)
|
|
731
|
+
end
|
|
732
|
+
|
|
733
|
+
local grants = {}
|
|
734
|
+
local names = {}
|
|
735
|
+
|
|
736
|
+
local listed = json.dig(held, 'grants')
|
|
737
|
+
if json.isobj(listed) then
|
|
738
|
+
for _, key in ipairs(listed.keys) do
|
|
739
|
+
local text = json.asstr(listed.vals[key])
|
|
740
|
+
if nil == text then
|
|
741
|
+
mvfail('missing a granted key')
|
|
742
|
+
end
|
|
743
|
+
grants[key] = unb64(text, 'a granted key')
|
|
744
|
+
names[#names + 1] = key
|
|
745
|
+
end
|
|
746
|
+
end
|
|
747
|
+
table.sort(names)
|
|
748
|
+
|
|
749
|
+
local root = json.asstr(json.dig(held, 'root'))
|
|
750
|
+
if nil ~= root then
|
|
751
|
+
root = unb64(root, 'the root key')
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
self.opened = {
|
|
755
|
+
root = root,
|
|
756
|
+
grants = grants,
|
|
757
|
+
names = names,
|
|
758
|
+
write = nil ~= root or jsontrue(held, 'write'),
|
|
759
|
+
ring = record.ring,
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
return file
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
--- The root key, or a refusal naming what needed it.
|
|
766
|
+
function Vault:rootof(what)
|
|
767
|
+
if nil == self.opened.root then
|
|
768
|
+
mvfail(what .. ' needs a master key, and ' .. self.keyid .. ' is restricted')
|
|
769
|
+
end
|
|
770
|
+
return self.opened.root
|
|
771
|
+
end
|
|
772
|
+
|
|
773
|
+
--- The key for one name, or nil when this key cannot reach it.
|
|
774
|
+
function Vault:keyfor(secret)
|
|
775
|
+
if nil ~= self.opened.root then
|
|
776
|
+
return secretkey(self.opened.root, secret)
|
|
777
|
+
end
|
|
778
|
+
return self.opened.grants[secret]
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
--- Derive the key and read the file NOW rather than at first use.
|
|
782
|
+
---
|
|
783
|
+
--- A COPY, built fresh. `set` asks this whether the key may write, and
|
|
784
|
+
--- handing back the table that answer lives in let a caller flip its own
|
|
785
|
+
--- permission: `local info = v:open(); info.write = true` turned a
|
|
786
|
+
--- read-only key into a writing one. Authorization state does not leave
|
|
787
|
+
--- this object.
|
|
788
|
+
function Vault:open()
|
|
789
|
+
self:load()
|
|
790
|
+
|
|
791
|
+
local grants = {}
|
|
792
|
+
for at, held in ipairs(self.opened.names) do
|
|
793
|
+
grants[at] = held
|
|
794
|
+
end
|
|
795
|
+
|
|
796
|
+
return {
|
|
797
|
+
key = self.keyid,
|
|
798
|
+
master = nil ~= self.opened.root,
|
|
799
|
+
write = self.opened.write,
|
|
800
|
+
grants = grants,
|
|
801
|
+
}
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
--- The names this key can read, sorted.
|
|
805
|
+
function Vault:list()
|
|
806
|
+
local file = self:load()
|
|
807
|
+
local names = {}
|
|
808
|
+
|
|
809
|
+
if nil ~= self.opened.root then
|
|
810
|
+
local namekey = mac(self.opened.root, LABEL_NAMES)
|
|
811
|
+
for _, entry in ipairs(file.entries) do
|
|
812
|
+
names[#names + 1] = unseal(namekey, entry.name, AAD_NAME, 'a secret name is damaged')
|
|
813
|
+
end
|
|
814
|
+
else
|
|
815
|
+
-- A restricted key has no name key, so it reports the grants it can
|
|
816
|
+
-- actually find: the vault never tells it what else is there.
|
|
817
|
+
for _, held in ipairs(self.opened.names) do
|
|
818
|
+
if nil ~= entryof(file, entryid(self.opened.grants[held])) then
|
|
819
|
+
names[#names + 1] = held
|
|
820
|
+
end
|
|
821
|
+
end
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
table.sort(names)
|
|
825
|
+
|
|
826
|
+
return names
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
--- The value, or nil for a MISS. A name the vault does not hold and a
|
|
830
|
+
--- name this key was not granted are both a miss.
|
|
831
|
+
function Vault:get(secret)
|
|
832
|
+
checkname(secret)
|
|
833
|
+
|
|
834
|
+
local file = self:load()
|
|
835
|
+
|
|
836
|
+
-- OUTSIDE THE GRANT IS A MISS, deliberately. The vault answers as the
|
|
837
|
+
-- key that opened it, so a name this key cannot read is a name this
|
|
838
|
+
-- store does not hold for this caller - the same answer a stranger's
|
|
839
|
+
-- vault gives, and the one that makes a restricted key in front of a
|
|
840
|
+
-- broader store a workable chain.
|
|
841
|
+
local key = self:keyfor(secret)
|
|
842
|
+
if nil == key then
|
|
843
|
+
return nil
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
local entry = entryof(file, entryid(key))
|
|
847
|
+
if nil == entry then
|
|
848
|
+
return nil
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
return unseal(key, entry.value, AAD_SECRET .. secret,
|
|
852
|
+
'the value of ' .. secret .. ' is damaged')
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
function Vault:has(secret)
|
|
856
|
+
return nil ~= self:get(secret)
|
|
857
|
+
end
|
|
858
|
+
|
|
859
|
+
--- Write a value. A master writes any name; a restricted key holding
|
|
860
|
+
--- `write` overwrites the names it was granted, and creates none.
|
|
861
|
+
function Vault:set(secret, value)
|
|
862
|
+
checkname(secret)
|
|
863
|
+
|
|
864
|
+
local file = self:load()
|
|
865
|
+
|
|
866
|
+
if not self.opened.write then
|
|
867
|
+
mvfail('key ' .. self.keyid .. ' is read-only')
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
local key = self:keyfor(secret)
|
|
871
|
+
if nil == key then
|
|
872
|
+
mvfail('key ' .. self.keyid .. ' was not granted ' .. secret)
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
local box = seal(key, value, AAD_SECRET .. secret)
|
|
876
|
+
local id = entryid(key)
|
|
877
|
+
local entry = entryof(file, id)
|
|
878
|
+
|
|
879
|
+
if nil ~= entry then
|
|
880
|
+
entry.value = box
|
|
881
|
+
else
|
|
882
|
+
-- A NEW NAME NEEDS THE NAME KEY, which only a master holds. So a
|
|
883
|
+
-- restricted key with `write` updates what it was granted and cannot
|
|
884
|
+
-- grow the vault, which is what "restricted" has to mean for the
|
|
885
|
+
-- grant list to stay the whole story.
|
|
886
|
+
local root = self:rootof('creating the secret ' .. secret)
|
|
887
|
+
file.entries[#file.entries + 1] = {
|
|
888
|
+
id = id,
|
|
889
|
+
name = seal(mac(root, LABEL_NAMES), secret, AAD_NAME),
|
|
890
|
+
value = box,
|
|
891
|
+
}
|
|
892
|
+
end
|
|
893
|
+
|
|
894
|
+
self:save(file)
|
|
895
|
+
end
|
|
896
|
+
|
|
897
|
+
--- Drop a name. Master only.
|
|
898
|
+
function Vault:remove(secret)
|
|
899
|
+
checkname(secret)
|
|
900
|
+
|
|
901
|
+
local file = self:load()
|
|
902
|
+
local root = self:rootof('removing a secret')
|
|
903
|
+
local want = entryid(secretkey(root, secret))
|
|
904
|
+
|
|
905
|
+
local kept = {}
|
|
906
|
+
local found = false
|
|
907
|
+
|
|
908
|
+
for _, entry in ipairs(file.entries) do
|
|
909
|
+
if not found and want == entry.id then
|
|
910
|
+
found = true
|
|
911
|
+
else
|
|
912
|
+
kept[#kept + 1] = entry
|
|
913
|
+
end
|
|
914
|
+
end
|
|
915
|
+
|
|
916
|
+
if not found then
|
|
917
|
+
mvfail('no such secret: ' .. secret)
|
|
918
|
+
end
|
|
919
|
+
|
|
920
|
+
file.entries = kept
|
|
921
|
+
|
|
922
|
+
self:save(file)
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
--- Every key in the file, with what it may do. Master only.
|
|
926
|
+
function Vault:keys()
|
|
927
|
+
local file = self:load()
|
|
928
|
+
local metakey = mac(self:rootof('listing the keys'), LABEL_META)
|
|
929
|
+
local out = {}
|
|
930
|
+
|
|
931
|
+
for _, record in ipairs(file.keys) do
|
|
932
|
+
local info = { key = record.id, master = false, write = false, grants = {} }
|
|
933
|
+
|
|
934
|
+
-- A record written under a root key this one has replaced is still in
|
|
935
|
+
-- the file and still opens with its own passphrase, so it is reported
|
|
936
|
+
-- rather than hidden - with what it can do unknown.
|
|
937
|
+
local ok, plain = pcall(function()
|
|
938
|
+
return unseal(metakey, record.meta, AAD_META .. record.id, 'metadata')
|
|
939
|
+
end)
|
|
940
|
+
|
|
941
|
+
if ok then
|
|
942
|
+
local noted = json.parse(plain)
|
|
943
|
+
if not json.isobj(noted) then
|
|
944
|
+
mvfail('unreadable metadata for key ' .. record.id)
|
|
945
|
+
end
|
|
946
|
+
|
|
947
|
+
info.master = jsontrue(noted, 'master')
|
|
948
|
+
info.write = jsontrue(noted, 'write')
|
|
949
|
+
|
|
950
|
+
local listed = json.dig(noted, 'grants')
|
|
951
|
+
if json.isarr(listed) then
|
|
952
|
+
for _, held in ipairs(listed.items) do
|
|
953
|
+
if 'string' == type(held) then
|
|
954
|
+
info.grants[#info.grants + 1] = held
|
|
955
|
+
end
|
|
956
|
+
end
|
|
957
|
+
end
|
|
958
|
+
table.sort(info.grants)
|
|
959
|
+
end
|
|
960
|
+
|
|
961
|
+
out[#out + 1] = info
|
|
962
|
+
end
|
|
963
|
+
|
|
964
|
+
return out
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
--- Mint a restricted key. Master only.
|
|
968
|
+
function Vault:grant(spec)
|
|
969
|
+
local file = self:load()
|
|
970
|
+
local root = self:rootof('granting a key')
|
|
971
|
+
local want = spec or {}
|
|
972
|
+
|
|
973
|
+
checkid(want.key, 'a grant needs a key id')
|
|
974
|
+
if nil == want.passphrase or '' == want.passphrase then
|
|
975
|
+
mvfail('a grant needs a passphrase')
|
|
976
|
+
end
|
|
977
|
+
if nil ~= keyof(file, want.key) then
|
|
978
|
+
mvfail('key already exists: ' .. want.key)
|
|
979
|
+
end
|
|
980
|
+
|
|
981
|
+
local names = {}
|
|
982
|
+
for at, held in ipairs(want.names or {}) do
|
|
983
|
+
names[at] = held
|
|
984
|
+
end
|
|
985
|
+
table.sort(names)
|
|
986
|
+
|
|
987
|
+
local grants = {}
|
|
988
|
+
for at, held in ipairs(names) do
|
|
989
|
+
checkname(held)
|
|
990
|
+
grants[at] = { held, secretkey(root, held) }
|
|
991
|
+
end
|
|
992
|
+
|
|
993
|
+
local record = sealkey(root, want.key, want.passphrase,
|
|
994
|
+
(nil ~= want.iterations and 0 < want.iterations) and want.iterations or self.iterations,
|
|
995
|
+
grantring(true == want.write, grants),
|
|
996
|
+
metaof(false, true == want.write, names))
|
|
997
|
+
|
|
998
|
+
file.keys[#file.keys + 1] = record
|
|
999
|
+
|
|
1000
|
+
self:save(file)
|
|
1001
|
+
end
|
|
1002
|
+
|
|
1003
|
+
--- Drop a key. Master only.
|
|
1004
|
+
---
|
|
1005
|
+
--- Anyone who already copied the file keeps whatever that key could read,
|
|
1006
|
+
--- so revoking bars future reads of the LIVE file and `rotate` is what
|
|
1007
|
+
--- takes a secret back.
|
|
1008
|
+
function Vault:revoke(id)
|
|
1009
|
+
local file = self:load()
|
|
1010
|
+
self:rootof('revoking a key')
|
|
1011
|
+
|
|
1012
|
+
if id == self.keyid then
|
|
1013
|
+
mvfail('a key cannot revoke itself: ' .. id)
|
|
1014
|
+
end
|
|
1015
|
+
if nil == keyof(file, id) then
|
|
1016
|
+
mvfail('no such key: ' .. tostring(id))
|
|
1017
|
+
end
|
|
1018
|
+
|
|
1019
|
+
local kept = {}
|
|
1020
|
+
for _, record in ipairs(file.keys) do
|
|
1021
|
+
if id ~= record.id then
|
|
1022
|
+
kept[#kept + 1] = record
|
|
1023
|
+
end
|
|
1024
|
+
end
|
|
1025
|
+
file.keys = kept
|
|
1026
|
+
|
|
1027
|
+
self:save(file)
|
|
1028
|
+
end
|
|
1029
|
+
|
|
1030
|
+
--- Take a new root key, re-encrypt every value under it, and DROP EVERY
|
|
1031
|
+
--- OTHER KEY. Master only.
|
|
1032
|
+
---
|
|
1033
|
+
--- The other keys go because they must: their rings are sealed under
|
|
1034
|
+
--- passphrases this process does not have, so there is no way to hand
|
|
1035
|
+
--- them keys they can unwrap. Re-grant afterwards.
|
|
1036
|
+
function Vault:rotate()
|
|
1037
|
+
local file = self:load()
|
|
1038
|
+
local oldroot = self:rootof('rotating the vault')
|
|
1039
|
+
local iters = keyof(file, self.keyid).iters
|
|
1040
|
+
|
|
1041
|
+
-- Read everything out under the old root before anything changes: once
|
|
1042
|
+
-- the root is replaced the old derived keys are unreachable.
|
|
1043
|
+
local oldnamekey = mac(oldroot, LABEL_NAMES)
|
|
1044
|
+
local held = {}
|
|
1045
|
+
|
|
1046
|
+
for _, entry in ipairs(file.entries) do
|
|
1047
|
+
local secret = unseal(oldnamekey, entry.name, AAD_NAME, 'a secret name is damaged')
|
|
1048
|
+
held[#held + 1] = {
|
|
1049
|
+
secret,
|
|
1050
|
+
unseal(secretkey(oldroot, secret), entry.value, AAD_SECRET .. secret,
|
|
1051
|
+
'the value of ' .. secret .. ' is damaged'),
|
|
1052
|
+
}
|
|
1053
|
+
end
|
|
1054
|
+
|
|
1055
|
+
local root = random(KEYLEN)
|
|
1056
|
+
local namekey = mac(root, LABEL_NAMES)
|
|
1057
|
+
local entries = {}
|
|
1058
|
+
|
|
1059
|
+
for at, pair in ipairs(held) do
|
|
1060
|
+
local key = secretkey(root, pair[1])
|
|
1061
|
+
entries[at] = {
|
|
1062
|
+
id = entryid(key),
|
|
1063
|
+
name = seal(namekey, pair[1], AAD_NAME),
|
|
1064
|
+
value = seal(key, pair[2], AAD_SECRET .. pair[1]),
|
|
1065
|
+
}
|
|
1066
|
+
end
|
|
1067
|
+
|
|
1068
|
+
-- SAVE FIRST, adopt second. A handle holding the new root over a file
|
|
1069
|
+
-- that still holds the old one reads nothing and says the vault is
|
|
1070
|
+
-- damaged, which is the wrong story about a failed write.
|
|
1071
|
+
self:save({
|
|
1072
|
+
keys = { masterrecord(root, self.keyid, self.passphrase, iters) },
|
|
1073
|
+
entries = entries,
|
|
1074
|
+
})
|
|
1075
|
+
|
|
1076
|
+
-- Dropped rather than replaced: the next call re-derives from the file
|
|
1077
|
+
-- this one just wrote, which is the same rule every other change
|
|
1078
|
+
-- follows.
|
|
1079
|
+
self:close()
|
|
1080
|
+
end
|
|
1081
|
+
|
|
1082
|
+
-- --------------------------------------------------- opening and creating
|
|
1083
|
+
|
|
1084
|
+
--- Open a vault file as one key.
|
|
1085
|
+
---
|
|
1086
|
+
--- The handle is LAZY. Nothing is read, and no passphrase is stretched,
|
|
1087
|
+
--- until a call needs the file - so a chain of ten providers costs ten
|
|
1088
|
+
--- tables rather than ten PBKDF2 runs.
|
|
1089
|
+
function M.openvault(options)
|
|
1090
|
+
local want = options or {}
|
|
1091
|
+
|
|
1092
|
+
if nil == want.file or '' == want.file then
|
|
1093
|
+
mvfail('a vault needs a file')
|
|
1094
|
+
end
|
|
1095
|
+
if nil == want.passphrase or '' == want.passphrase then
|
|
1096
|
+
mvfail('a vault needs a passphrase')
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
local keyid = checkid(
|
|
1100
|
+
(nil ~= want.key and '' ~= want.key) and want.key or M.MASTERKEY,
|
|
1101
|
+
'a vault needs a key id')
|
|
1102
|
+
|
|
1103
|
+
return setmetatable({
|
|
1104
|
+
path = want.file,
|
|
1105
|
+
keyid = keyid,
|
|
1106
|
+
passphrase = want.passphrase,
|
|
1107
|
+
iterations = (nil ~= want.iterations and 0 < want.iterations)
|
|
1108
|
+
and want.iterations or M.ITERATIONS,
|
|
1109
|
+
create = true == want.create,
|
|
1110
|
+
opened = nil,
|
|
1111
|
+
}, Vault)
|
|
1112
|
+
end
|
|
1113
|
+
|
|
1114
|
+
--- Make a vault file and answer a handle on its master key.
|
|
1115
|
+
---
|
|
1116
|
+
--- Refuses a file that is already there: a vault is created once, and
|
|
1117
|
+
--- overwriting one discards every secret in it along with every key that
|
|
1118
|
+
--- could read them.
|
|
1119
|
+
function M.createvault(options)
|
|
1120
|
+
local vault = M.openvault(options)
|
|
1121
|
+
|
|
1122
|
+
putnew(vault.path, newvault(vault.keyid, vault.passphrase, vault.iterations))
|
|
1123
|
+
|
|
1124
|
+
return vault
|
|
1125
|
+
end
|
|
1126
|
+
|
|
1127
|
+
-- ------------------------------------------------------------ the provider
|
|
1128
|
+
|
|
1129
|
+
--- Reads a vault as one store in a chain.
|
|
1130
|
+
---
|
|
1131
|
+
--- The provider is the READ half and nothing more: a chain resolves
|
|
1132
|
+
--- secrets, and writing one is a deliberate act with an API of its own.
|
|
1133
|
+
--- That API is the same handle, reached with `vaultof` off a chain or
|
|
1134
|
+
--- built directly with `openvault`.
|
|
1135
|
+
local function minivaultprovider(vault)
|
|
1136
|
+
return {
|
|
1137
|
+
lookup = function(secret) return vault:get(secret) end,
|
|
1138
|
+
describe = function() return 'minivault:' .. vault:file() end,
|
|
1139
|
+
}
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
--- The `minivault` provider kind, as a voxgig/plugin definition.
|
|
1143
|
+
---
|
|
1144
|
+
--- Written out rather than built by `providerplugin`, because this
|
|
1145
|
+
--- definition publishes TWO exports: `provider`, the read half every kind
|
|
1146
|
+
--- publishes, and `vault`, the programmatic API. voxgig/plugin's exports
|
|
1147
|
+
--- are how a definition offers an application more than the host's own
|
|
1148
|
+
--- vocabulary, and a store that can only be read is half a vault.
|
|
1149
|
+
---
|
|
1150
|
+
--- The `sekreto_error` wrapping is what `providerplugin` would have done:
|
|
1151
|
+
--- plugin wraps a code-less error raised in `define` as
|
|
1152
|
+
--- `plugin_define_failed` and keeps one that already carries a code, so a
|
|
1153
|
+
--- refusal of this provider's own configuration travels under
|
|
1154
|
+
--- `sekreto_error` and comes back out of the host as itself.
|
|
1155
|
+
M.minivault = {
|
|
1156
|
+
name = 'minivault',
|
|
1157
|
+
define = function(inst)
|
|
1158
|
+
local spec = inst:options() or {}
|
|
1159
|
+
|
|
1160
|
+
-- Configuration is refused HERE, so a mistyped chain fails at
|
|
1161
|
+
-- construction. Reaching the file is not configuration: the handle is
|
|
1162
|
+
-- lazy, and nothing is read or stretched until a lookup.
|
|
1163
|
+
local ok, built = pcall(M.openvault, {
|
|
1164
|
+
file = spec.file,
|
|
1165
|
+
key = spec.vaultkey,
|
|
1166
|
+
passphrase = spec.passphrase,
|
|
1167
|
+
iterations = spec.iterations,
|
|
1168
|
+
create = spec.create,
|
|
1169
|
+
})
|
|
1170
|
+
|
|
1171
|
+
if not ok then
|
|
1172
|
+
if err.issekretoerror(built) then
|
|
1173
|
+
local message = err.message(built)
|
|
1174
|
+
local plugin = require('plugin')
|
|
1175
|
+
plugin.types.fail(providers.ERROR_CODE, message,
|
|
1176
|
+
plugin.types.map({ ref = inst.ref, cause = message }))
|
|
1177
|
+
end
|
|
1178
|
+
error(built, 0)
|
|
1179
|
+
end
|
|
1180
|
+
|
|
1181
|
+
inst:export(providers.PROVIDER_EXPORT, minivaultprovider(built))
|
|
1182
|
+
inst:export(M.VAULT_EXPORT, built)
|
|
1183
|
+
end,
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
--- The vault behind a store in a chain, as its programmatic API.
|
|
1187
|
+
---
|
|
1188
|
+
--- `secrets.host` is the voxgig/plugin host the chain is made of, and a
|
|
1189
|
+
--- definition's exports are readable off it by ref. This is the one call
|
|
1190
|
+
--- that turns a store into an API, and it lives here rather than on
|
|
1191
|
+
--- `Sekreto` because the core knows no plugin.
|
|
1192
|
+
---
|
|
1193
|
+
--- With no store named, the unqualified alias answers: one vault in the
|
|
1194
|
+
--- chain resolves whatever it is called, and two refuse rather than
|
|
1195
|
+
--- picking one.
|
|
1196
|
+
function M.vaultof(secrets, store)
|
|
1197
|
+
if nil == store or '' == store then
|
|
1198
|
+
local found = secrets.host:exports('minivault/' .. M.VAULT_EXPORT)
|
|
1199
|
+
if nil == found then
|
|
1200
|
+
mvfail('no minivault store in this chain')
|
|
1201
|
+
end
|
|
1202
|
+
return found
|
|
1203
|
+
end
|
|
1204
|
+
|
|
1205
|
+
-- A NAMED STORE MUST EXIST, and the alias must not stand in for it.
|
|
1206
|
+
-- `host:exports` falls back to the alias when the exact ref misses, so
|
|
1207
|
+
-- asking for `minivault` in a chain whose only vault is named `app`
|
|
1208
|
+
-- used to hand back the `app` vault - and then write to it. Naming a
|
|
1209
|
+
-- store that is not there refuses, which is the rule the whole library
|
|
1210
|
+
-- follows: `try` already means "may not have it", so it cannot also
|
|
1211
|
+
-- mean "may not exist".
|
|
1212
|
+
local missing = 'no minivault store named ' .. store .. ' in this chain'
|
|
1213
|
+
local ref = ('minivault' == store) and 'minivault' or ('minivault$' .. store)
|
|
1214
|
+
|
|
1215
|
+
if nil == secrets.host:instance(ref) then
|
|
1216
|
+
mvfail(missing)
|
|
1217
|
+
end
|
|
1218
|
+
|
|
1219
|
+
local found = secrets.host:exports(ref .. '/' .. M.VAULT_EXPORT)
|
|
1220
|
+
if nil == found then
|
|
1221
|
+
mvfail(missing)
|
|
1222
|
+
end
|
|
1223
|
+
|
|
1224
|
+
return found
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1227
|
+
return M
|