@voxgig/sdkgen 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/infisical.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! Infisical - a sekreto plugin. Needs HTTPS.
|
|
5
|
+
|
|
6
|
+
const std = @import("std");
|
|
7
|
+
|
|
8
|
+
const sekreto = @import("sekreto");
|
|
9
|
+
const httpjson = @import("httpjson.zig");
|
|
10
|
+
|
|
11
|
+
const Allocator = std.mem.Allocator;
|
|
12
|
+
const Answer = sekreto.Answer;
|
|
13
|
+
const Found = sekreto.Found;
|
|
14
|
+
const Provider = sekreto.Provider;
|
|
15
|
+
const ProviderSpec = sekreto.ProviderSpec;
|
|
16
|
+
|
|
17
|
+
/// Infisical.
|
|
18
|
+
///
|
|
19
|
+
/// `api.token` reads the secret keyed `API_TOKEN` (Infisical's own
|
|
20
|
+
/// convention is environment-style keys) at a secret path in one environment
|
|
21
|
+
/// of a project. sekreto.Auth is a token, or a universal-auth (machine identity)
|
|
22
|
+
/// login with clientid/clientsecret.
|
|
23
|
+
pub const InfisicalProvider = struct {
|
|
24
|
+
alloc: Allocator,
|
|
25
|
+
config: sekreto.Config,
|
|
26
|
+
addr: []const u8,
|
|
27
|
+
token: []const u8,
|
|
28
|
+
clientid: []const u8,
|
|
29
|
+
clientsecret: []const u8,
|
|
30
|
+
project: []const u8,
|
|
31
|
+
environment: []const u8,
|
|
32
|
+
path: []const u8,
|
|
33
|
+
livetoken: ?[]const u8,
|
|
34
|
+
renewat: i64,
|
|
35
|
+
|
|
36
|
+
fn login(self: *InfisicalProvider, alloc: Allocator, addr: []const u8) Allocator.Error!Answer([]const u8) {
|
|
37
|
+
if (0 != self.token.len) {
|
|
38
|
+
return .{ .ok = self.token };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (0 == self.clientid.len or 0 == self.clientsecret.len) {
|
|
42
|
+
return .{ .err = try sekreto.fail(
|
|
43
|
+
alloc,
|
|
44
|
+
"sekreto: infisical: no token and no client credentials",
|
|
45
|
+
.{},
|
|
46
|
+
) };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const url = try std.fmt.allocPrint(alloc, "{s}/api/v1/auth/universal-auth/login", .{addr});
|
|
50
|
+
|
|
51
|
+
const body = try httpjson.jsonobject(alloc, &.{
|
|
52
|
+
.{ .key = "clientId", .value = self.clientid },
|
|
53
|
+
.{ .key = "clientSecret", .value = self.clientsecret },
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const headers = [_]httpjson.Header{
|
|
57
|
+
.{ .name = "content-type", .value = "application/json" },
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const res = switch (try httpjson.fetchjson(alloc, self.config.io, .POST, url, &headers, body)) {
|
|
61
|
+
.err => |message| return .{ .err = message },
|
|
62
|
+
.ok => |got| got,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const access = httpjson.jstr(httpjson.jget(res.body, "accessToken"));
|
|
66
|
+
|
|
67
|
+
if (200 != res.status or null == access) {
|
|
68
|
+
return .{ .err = try sekreto.fail(
|
|
69
|
+
alloc,
|
|
70
|
+
"sekreto: infisical login failed: {d}",
|
|
71
|
+
.{res.status},
|
|
72
|
+
) };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
self.renewat = httpjson.renewafter(self.config.io, httpjson.jnum(httpjson.jget(res.body, "expiresIn")));
|
|
76
|
+
|
|
77
|
+
return .{ .ok = access.? };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
pub fn lookup(self: *InfisicalProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
|
|
81
|
+
const addr = httpjson.trimslash(if (0 != self.addr.len) self.addr else "https://app.infisical.com");
|
|
82
|
+
|
|
83
|
+
switch (try sekreto.checkaddr(alloc, addr)) {
|
|
84
|
+
.err => |message| return .{ .err = message },
|
|
85
|
+
.ok => {},
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (0 == self.project.len or 0 == self.environment.len) {
|
|
89
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: infisical: no project/environment", .{}) };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (null == self.livetoken or httpjson.nowms(self.config.io) >= self.renewat) {
|
|
93
|
+
const fresh = switch (try self.login(alloc, addr)) {
|
|
94
|
+
.err => |message| return .{ .err = message },
|
|
95
|
+
.ok => |got| got,
|
|
96
|
+
};
|
|
97
|
+
if (self.livetoken) |old| {
|
|
98
|
+
self.alloc.free(old);
|
|
99
|
+
}
|
|
100
|
+
self.livetoken = try self.alloc.dupe(u8, fresh);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const key = switch (try sekreto.envkey(alloc, name, "")) {
|
|
104
|
+
.err => |message| return .{ .err = message },
|
|
105
|
+
.ok => |made| made,
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const url = try std.fmt.allocPrint(
|
|
109
|
+
alloc,
|
|
110
|
+
"{s}/api/v3/secrets/raw/{s}?workspaceId={s}&environment={s}&secretPath={s}",
|
|
111
|
+
.{
|
|
112
|
+
addr,
|
|
113
|
+
key,
|
|
114
|
+
try httpjson.escape(alloc, self.project),
|
|
115
|
+
try httpjson.escape(alloc, self.environment),
|
|
116
|
+
try httpjson.escape(alloc, if (0 != self.path.len) self.path else "/"),
|
|
117
|
+
},
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
const bearer = try std.fmt.allocPrint(alloc, "Bearer {s}", .{self.livetoken.?});
|
|
121
|
+
const headers = [_]httpjson.Header{.{ .name = "authorization", .value = bearer }};
|
|
122
|
+
|
|
123
|
+
const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
|
|
124
|
+
.err => |message| return .{ .err = message },
|
|
125
|
+
.ok => |got| got,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
if (404 == res.status) {
|
|
129
|
+
return .{ .ok = null };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (200 != res.status) {
|
|
133
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: infisical error: {d}", .{res.status}) };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return .{ .ok = httpjson.jstr(httpjson.jget(httpjson.jget(res.body, "secret"), "secretValue")) };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
pub fn describe(self: *InfisicalProvider, alloc: Allocator) Allocator.Error![]const u8 {
|
|
140
|
+
return std.fmt.allocPrint(alloc, "infisical:{s}/{s}", .{ self.project, self.environment });
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
pub fn deinit(self: *InfisicalProvider, alloc: Allocator) void {
|
|
144
|
+
if (self.livetoken) |token| {
|
|
145
|
+
alloc.free(token);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
|
|
151
|
+
return .{ .ok = try sekreto.provide(alloc, InfisicalProvider, .{
|
|
152
|
+
.alloc = alloc,
|
|
153
|
+
.config = config,
|
|
154
|
+
.addr = spec.addr,
|
|
155
|
+
.token = spec.token,
|
|
156
|
+
.clientid = spec.clientid,
|
|
157
|
+
.clientsecret = spec.clientsecret,
|
|
158
|
+
.project = spec.project,
|
|
159
|
+
.environment = spec.environment,
|
|
160
|
+
.path = spec.path,
|
|
161
|
+
.livetoken = null,
|
|
162
|
+
.renewat = httpjson.NEVER,
|
|
163
|
+
}) };
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/// The `infisical` kind.
|
|
167
|
+
pub const infisical: sekreto.Definition = sekreto.providerplugin("infisical", make);
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/onepassword.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! 1Password, through a Connect server - a sekreto plugin. Needs HTTPS.
|
|
5
|
+
|
|
6
|
+
const std = @import("std");
|
|
7
|
+
|
|
8
|
+
const sekreto = @import("sekreto");
|
|
9
|
+
const httpjson = @import("httpjson.zig");
|
|
10
|
+
|
|
11
|
+
const Allocator = std.mem.Allocator;
|
|
12
|
+
const Answer = sekreto.Answer;
|
|
13
|
+
const Found = sekreto.Found;
|
|
14
|
+
const Provider = sekreto.Provider;
|
|
15
|
+
const ProviderSpec = sekreto.ProviderSpec;
|
|
16
|
+
|
|
17
|
+
/// 1Password, through a Connect server.
|
|
18
|
+
///
|
|
19
|
+
/// The item titled `api.token` (titles keep their dots), in the named vault.
|
|
20
|
+
/// The value is the field with purpose PASSWORD, or the field labelled
|
|
21
|
+
/// `value`. A vault that cannot be found is an error - config names it, so
|
|
22
|
+
/// its absence is a broken store, not a missing secret.
|
|
23
|
+
pub const OnePasswordProvider = struct {
|
|
24
|
+
alloc: Allocator,
|
|
25
|
+
config: sekreto.Config,
|
|
26
|
+
addr: []const u8,
|
|
27
|
+
token: []const u8,
|
|
28
|
+
vault: []const u8,
|
|
29
|
+
vaultid: ?[]const u8,
|
|
30
|
+
|
|
31
|
+
fn authheader(self: *OnePasswordProvider, alloc: Allocator) Allocator.Error![]const u8 {
|
|
32
|
+
return std.fmt.allocPrint(alloc, "Bearer {s}", .{self.token});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
fn resolvevault(self: *OnePasswordProvider, alloc: Allocator, addr: []const u8) Allocator.Error!Answer([]const u8) {
|
|
36
|
+
if (0 == self.vault.len) {
|
|
37
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: onepassword: no vault", .{}) };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const url = try std.fmt.allocPrint(alloc, "{s}/v1/vaults", .{addr});
|
|
41
|
+
const headers = [_]httpjson.Header{
|
|
42
|
+
.{ .name = "authorization", .value = try self.authheader(alloc) },
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
|
|
46
|
+
.err => |message| return .{ .err = message },
|
|
47
|
+
.ok => |got| got,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const list = res.body orelse std.json.Value{ .null = {} };
|
|
51
|
+
|
|
52
|
+
if (200 != res.status or .array != list) {
|
|
53
|
+
return .{ .err = try sekreto.fail(
|
|
54
|
+
alloc,
|
|
55
|
+
"sekreto: onepassword error: {d}: listing vaults",
|
|
56
|
+
.{res.status},
|
|
57
|
+
) };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (list.array.items) |entry| {
|
|
61
|
+
const id = httpjson.jstr(httpjson.jget(entry, "id"));
|
|
62
|
+
const named = httpjson.jstr(httpjson.jget(entry, "name"));
|
|
63
|
+
|
|
64
|
+
const hit = (null != id and std.mem.eql(u8, self.vault, id.?)) or
|
|
65
|
+
(null != named and std.mem.eql(u8, self.vault, named.?));
|
|
66
|
+
|
|
67
|
+
if (hit and null != id) {
|
|
68
|
+
return .{ .ok = id.? };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return .{ .err = try sekreto.fail(
|
|
73
|
+
alloc,
|
|
74
|
+
"sekreto: onepassword: no vault named {s}",
|
|
75
|
+
.{self.vault},
|
|
76
|
+
) };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
pub fn lookup(self: *OnePasswordProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
|
|
80
|
+
switch (try sekreto.checkname(alloc, name)) {
|
|
81
|
+
.err => |message| return .{ .err = message },
|
|
82
|
+
.ok => {},
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const addr = httpjson.trimslash(self.addr);
|
|
86
|
+
if (0 == addr.len) {
|
|
87
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: onepassword: no addr", .{}) };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
switch (try sekreto.checkaddr(alloc, addr)) {
|
|
91
|
+
.err => |message| return .{ .err = message },
|
|
92
|
+
.ok => {},
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (null == self.vaultid) {
|
|
96
|
+
const found = switch (try self.resolvevault(alloc, addr)) {
|
|
97
|
+
.err => |message| return .{ .err = message },
|
|
98
|
+
.ok => |got| got,
|
|
99
|
+
};
|
|
100
|
+
self.vaultid = try self.alloc.dupe(u8, found);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const filter = try httpjson.escape(alloc, try std.fmt.allocPrint(alloc, "title eq \"{s}\"", .{name}));
|
|
104
|
+
|
|
105
|
+
const findurl = try std.fmt.allocPrint(
|
|
106
|
+
alloc,
|
|
107
|
+
"{s}/v1/vaults/{s}/items?filter={s}",
|
|
108
|
+
.{ addr, self.vaultid.?, filter },
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
const headers = [_]httpjson.Header{
|
|
112
|
+
.{ .name = "authorization", .value = try self.authheader(alloc) },
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const found = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, findurl, &headers, null)) {
|
|
116
|
+
.err => |message| return .{ .err = message },
|
|
117
|
+
.ok => |got| got,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const list = found.body orelse std.json.Value{ .null = {} };
|
|
121
|
+
|
|
122
|
+
if (200 != found.status or .array != list) {
|
|
123
|
+
return .{ .err = try sekreto.fail(
|
|
124
|
+
alloc,
|
|
125
|
+
"sekreto: onepassword error: {d}: finding {s}",
|
|
126
|
+
.{ found.status, name },
|
|
127
|
+
) };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (0 == list.array.items.len) {
|
|
131
|
+
return .{ .ok = null };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const itemid = httpjson.jstr(httpjson.jget(list.array.items[0], "id")) orelse "";
|
|
135
|
+
|
|
136
|
+
const itemurl = try std.fmt.allocPrint(
|
|
137
|
+
alloc,
|
|
138
|
+
"{s}/v1/vaults/{s}/items/{s}",
|
|
139
|
+
.{ addr, self.vaultid.?, itemid },
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
const item = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, itemurl, &headers, null)) {
|
|
143
|
+
.err => |message| return .{ .err = message },
|
|
144
|
+
.ok => |got| got,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
if (200 != item.status) {
|
|
148
|
+
return .{ .err = try sekreto.fail(
|
|
149
|
+
alloc,
|
|
150
|
+
"sekreto: onepassword error: {d}: reading {s}",
|
|
151
|
+
.{ item.status, name },
|
|
152
|
+
) };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const fields = httpjson.jget(item.body, "fields") orelse return .{ .ok = null };
|
|
156
|
+
if (.array != fields) {
|
|
157
|
+
return .{ .ok = null };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
for (fields.array.items) |field| {
|
|
161
|
+
if (httpjson.jstr(httpjson.jget(field, "purpose"))) |purpose| {
|
|
162
|
+
if (std.mem.eql(u8, "PASSWORD", purpose)) {
|
|
163
|
+
return .{ .ok = httpjson.jstr(httpjson.jget(field, "value")) };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
for (fields.array.items) |field| {
|
|
169
|
+
if (httpjson.jstr(httpjson.jget(field, "label"))) |label| {
|
|
170
|
+
if (std.mem.eql(u8, "value", label)) {
|
|
171
|
+
return .{ .ok = httpjson.jstr(httpjson.jget(field, "value")) };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return .{ .ok = null };
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
pub fn describe(self: *OnePasswordProvider, alloc: Allocator) Allocator.Error![]const u8 {
|
|
180
|
+
return std.fmt.allocPrint(alloc, "onepassword:{s}", .{self.vault});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
pub fn deinit(self: *OnePasswordProvider, alloc: Allocator) void {
|
|
184
|
+
if (self.vaultid) |id| {
|
|
185
|
+
alloc.free(id);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
|
|
191
|
+
return .{ .ok = try sekreto.provide(alloc, OnePasswordProvider, .{
|
|
192
|
+
.alloc = alloc,
|
|
193
|
+
.config = config,
|
|
194
|
+
.addr = spec.addr,
|
|
195
|
+
.token = spec.token,
|
|
196
|
+
.vault = spec.vault,
|
|
197
|
+
.vaultid = null,
|
|
198
|
+
}) };
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/// The `onepassword` kind.
|
|
202
|
+
pub const onepassword: sekreto.Definition = sekreto.providerplugin("onepassword", make);
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/secretspec.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! SecretSpec (https://secretspec.dev) - a sekreto plugin.
|
|
5
|
+
//!
|
|
6
|
+
//! Spawns the secretspec CLI, which is why it is a plugin.
|
|
7
|
+
|
|
8
|
+
const std = @import("std");
|
|
9
|
+
|
|
10
|
+
const sekreto = @import("sekreto");
|
|
11
|
+
const httpjson = @import("httpjson.zig");
|
|
12
|
+
|
|
13
|
+
const Allocator = std.mem.Allocator;
|
|
14
|
+
const Answer = sekreto.Answer;
|
|
15
|
+
const Found = sekreto.Found;
|
|
16
|
+
const Provider = sekreto.Provider;
|
|
17
|
+
const ProviderSpec = sekreto.ProviderSpec;
|
|
18
|
+
|
|
19
|
+
/// SecretSpec (https://secretspec.dev).
|
|
20
|
+
///
|
|
21
|
+
/// SecretSpec is a declaration - a `secretspec.toml` naming the secrets a
|
|
22
|
+
/// project needs - plus a chain of its own backends to satisfy them from.
|
|
23
|
+
/// That makes it the same shape as sekreto one level down, and the reason
|
|
24
|
+
/// to support it is the same reason sekreto exists: a project that has
|
|
25
|
+
/// already declared its secrets there should not have to declare them
|
|
26
|
+
/// again here.
|
|
27
|
+
///
|
|
28
|
+
/// Read through its CLI, as boru is, because that is the interface it
|
|
29
|
+
/// offers a program in another language: `secretspec get API_TOKEN` prints
|
|
30
|
+
/// the value on stdout and nothing else. A sekreto name maps to a
|
|
31
|
+
/// SecretSpec key exactly as it maps to an environment variable -
|
|
32
|
+
/// `api.token` is `API_TOKEN` - which is the convention SecretSpec's own
|
|
33
|
+
/// examples use.
|
|
34
|
+
///
|
|
35
|
+
/// `backend` selects one of SecretSpec's backends (`--provider`, e.g.
|
|
36
|
+
/// `keyring` or `dotenv://.env`) and is called `backend` here only because
|
|
37
|
+
/// `provider` already means something else in this library.
|
|
38
|
+
///
|
|
39
|
+
/// A reason is required, not optional: SecretSpec records every read in an
|
|
40
|
+
/// audit log and refuses to read at all without one. sekreto sends
|
|
41
|
+
/// `sekreto` unless told otherwise, so the audit trail says which tool
|
|
42
|
+
/// asked.
|
|
43
|
+
pub const SecretspecProvider = struct {
|
|
44
|
+
config: sekreto.Config,
|
|
45
|
+
command: []const u8,
|
|
46
|
+
file: []const u8,
|
|
47
|
+
profile: []const u8,
|
|
48
|
+
backend: []const u8,
|
|
49
|
+
reason: []const u8,
|
|
50
|
+
prefix: []const u8,
|
|
51
|
+
|
|
52
|
+
pub fn lookup(self: *SecretspecProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
|
|
53
|
+
const key = switch (try sekreto.envkey(alloc, name, self.prefix)) {
|
|
54
|
+
.err => |message| return .{ .err = message },
|
|
55
|
+
.ok => |made| made,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var argv: std.ArrayList([]const u8) = .empty;
|
|
59
|
+
try argv.append(alloc, self.command);
|
|
60
|
+
|
|
61
|
+
if (0 != self.file.len) {
|
|
62
|
+
try argv.append(alloc, "--file");
|
|
63
|
+
try argv.append(alloc, self.file);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
try argv.append(alloc, "get");
|
|
67
|
+
try argv.append(alloc, key);
|
|
68
|
+
|
|
69
|
+
if (0 != self.backend.len) {
|
|
70
|
+
try argv.append(alloc, "--provider");
|
|
71
|
+
try argv.append(alloc, self.backend);
|
|
72
|
+
}
|
|
73
|
+
if (0 != self.profile.len) {
|
|
74
|
+
try argv.append(alloc, "--profile");
|
|
75
|
+
try argv.append(alloc, self.profile);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
try argv.append(alloc, "--reason");
|
|
79
|
+
try argv.append(alloc, if (0 != self.reason.len) self.reason else "sekreto");
|
|
80
|
+
|
|
81
|
+
const run = std.process.run(alloc, self.config.io, .{
|
|
82
|
+
.argv = argv.items,
|
|
83
|
+
.environ_map = self.config.env,
|
|
84
|
+
}) catch |err| {
|
|
85
|
+
return .{ .err = try sekreto.fail(
|
|
86
|
+
alloc,
|
|
87
|
+
"sekreto: cannot run {s}: {s}",
|
|
88
|
+
.{ self.command, @errorName(err) },
|
|
89
|
+
) };
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const exited = switch (run.term) {
|
|
93
|
+
.exited => |code| code,
|
|
94
|
+
else => 1,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
if (0 == exited) {
|
|
98
|
+
// The value and one newline, and nothing else.
|
|
99
|
+
var value: []const u8 = run.stdout;
|
|
100
|
+
if (0 != value.len and '\n' == value[value.len - 1]) {
|
|
101
|
+
value = value[0 .. value.len - 1];
|
|
102
|
+
}
|
|
103
|
+
return .{ .ok = value };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const why = std.mem.trim(u8, run.stderr, " \t\r\n");
|
|
107
|
+
|
|
108
|
+
if (try secretspecmiss(alloc, why, key)) {
|
|
109
|
+
return .{ .ok = null };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (0 != why.len) {
|
|
113
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: secretspec error: {s}", .{why}) };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return .{ .err = try sekreto.fail(alloc, "sekreto: secretspec error: exit {d}", .{exited}) };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
pub fn describe(self: *SecretspecProvider, alloc: Allocator) Allocator.Error![]const u8 {
|
|
120
|
+
if (0 == self.backend.len) {
|
|
121
|
+
return alloc.dupe(u8, "secretspec");
|
|
122
|
+
}
|
|
123
|
+
return std.fmt.allocPrint(alloc, "secretspec:{s}", .{self.backend});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
pub fn deinit(_: *SecretspecProvider, _: Allocator) void {}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/// Does this SecretSpec failure mean "no such secret" rather than "I could
|
|
130
|
+
/// not answer"?
|
|
131
|
+
///
|
|
132
|
+
/// SecretSpec says `Secret 'API_TOKEN' not found` for both a name it does
|
|
133
|
+
/// not declare and one declared with no value, and both are misses: this
|
|
134
|
+
/// store does not hold it, so the chain carries on.
|
|
135
|
+
///
|
|
136
|
+
/// MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
|
|
137
|
+
/// `Provider backend 'keyring' not found`, which is a store that could not
|
|
138
|
+
/// answer at all - and reading that as a miss is the worst failure this
|
|
139
|
+
/// library has, because the chain then falls through to a weaker store
|
|
140
|
+
/// without saying so. The key is required to appear, so the two cannot be
|
|
141
|
+
/// confused.
|
|
142
|
+
fn secretspecmiss(alloc: Allocator, why: []const u8, key: []const u8) Allocator.Error!bool {
|
|
143
|
+
const phrase = try std.fmt.allocPrint(alloc, "Secret '{s}' not found", .{key});
|
|
144
|
+
return null != std.mem.indexOf(u8, why, phrase);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
|
|
148
|
+
return .{ .ok = try sekreto.provide(alloc, SecretspecProvider, .{
|
|
149
|
+
.config = config,
|
|
150
|
+
.command = if (0 != spec.command.len) spec.command else "secretspec",
|
|
151
|
+
.file = spec.file,
|
|
152
|
+
.profile = spec.profile,
|
|
153
|
+
.backend = spec.backend,
|
|
154
|
+
.reason = spec.reason,
|
|
155
|
+
.prefix = spec.prefix,
|
|
156
|
+
}) };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// The `secretspec` kind.
|
|
160
|
+
pub const secretspec: sekreto.Definition = sekreto.providerplugin("secretspec", make);
|