@voxgig/sdkgen 4.8.2 → 4.9.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/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +50 -2
- package/dist/action/doctor.js.map +1 -1
- package/dist/helpers/naming.js +4 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/sdkgen.aon +21 -0
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +120 -18
- package/project/.sdk/model/target/c.aon +10 -0
- package/project/.sdk/model/target/clojure.aon +13 -0
- package/project/.sdk/model/target/cpp.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +9 -0
- package/project/.sdk/model/target/dart.aon +10 -0
- package/project/.sdk/model/target/elixir.aon +9 -0
- package/project/.sdk/model/target/go.aon +13 -0
- package/project/.sdk/model/target/java.aon +9 -0
- package/project/.sdk/model/target/js.aon +7 -0
- package/project/.sdk/model/target/kotlin.aon +9 -0
- package/project/.sdk/model/target/lean.aon +17 -0
- package/project/.sdk/model/target/lua.aon +8 -0
- package/project/.sdk/model/target/ocaml.aon +9 -0
- package/project/.sdk/model/target/perl.aon +8 -0
- package/project/.sdk/model/target/php.aon +8 -0
- package/project/.sdk/model/target/py.aon +13 -0
- package/project/.sdk/model/target/rb.aon +8 -0
- package/project/.sdk/model/target/rust.aon +10 -0
- package/project/.sdk/model/target/scala.aon +21 -2
- package/project/.sdk/model/target/swift.aon +18 -0
- package/project/.sdk/model/target/ts.aon +13 -0
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
- package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
- package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
- package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
- package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
- package/project/.sdk/tm/c/Makefile +38 -3
- package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
- package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
- package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
- package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
- package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
- package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
- package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
- package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
- package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
- package/project/.sdk/tm/cpp/Makefile +5 -1
- package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
- package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
- package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
- package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
- package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
- package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
- package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
- package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
- package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
- package/project/.sdk/tm/dart/test/omni.dart +520 -0
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
- package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
- package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
- package/project/.sdk/tm/elixir/Makefile +11 -3
- package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
- package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
- package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
- package/project/.sdk/tm/go/core/context.go +32 -16
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
- package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
- package/project/.sdk/tm/go/test/omni/omni.go +902 -0
- package/project/.sdk/tm/go/test/omni/util.go +381 -0
- package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
- package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
- package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
- package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
- package/project/.sdk/tm/go/utility/make_options.go +8 -1
- package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
- package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
- package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
- package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
- package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
- package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
- package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
- package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
- package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
- package/project/.sdk/tm/js/test/omni.js +251 -0
- package/project/.sdk/tm/js/test/omni.test.js +105 -0
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
- package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
- package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
- package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
- package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
- package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
- package/project/.sdk/tm/lean/Makefile +12 -5
- package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
- package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
- package/project/.sdk/tm/lua/test/omni.lua +456 -0
- package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
- package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
- package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
- package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
- package/project/.sdk/tm/ocaml/Makefile +37 -12
- package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
- package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
- package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
- package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
- package/project/.sdk/tm/perl/t/omni.pm +647 -0
- package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
- package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
- package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
- package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
- package/project/.sdk/tm/php/test/Omni.php +691 -0
- package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
- package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
- package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
- package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
- package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
- package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
- package/project/.sdk/tm/py/test/omni.py +415 -0
- package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
- package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
- package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
- package/project/.sdk/tm/rb/test/omni.rb +505 -0
- package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
- package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
- package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
- package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
- package/project/.sdk/tm/scala/Makefile +16 -6
- package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
- package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
- package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
- package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +104 -32
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
- package/project/.sdk/tm/zig/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- package/project/sdkgen-package.json +1 -1
- package/src/action/doctor.ts +66 -2
- package/src/helpers/naming.ts +4 -2
- package/project/.sdk/tm/c/tests/runner.h +0 -274
- package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
- package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
- package/project/.sdk/tm/dart/test/runner.dart +0 -406
- package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
- package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
- package/project/.sdk/tm/go/test/runner_test.go +0 -629
- package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
- package/project/.sdk/tm/java/test/StructRunner.java +0 -281
- package/project/.sdk/tm/js/test/runner.js +0 -387
- package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
- package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
- package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
- package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
- package/project/.sdk/tm/php/test/StructRunner.php +0 -275
- package/project/.sdk/tm/py/test/struct_runner.py +0 -411
- package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
- package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
- package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/boru/boru.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The boru plugin: a boru vault through its CLI, or over `boru vault
|
|
5
|
+
// serve`. Needs a child process, or HTTPS in wire mode. A port of
|
|
6
|
+
// typescript/plugins/boru.ts.
|
|
7
|
+
package boru
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"bytes"
|
|
11
|
+
"errors"
|
|
12
|
+
"net/http"
|
|
13
|
+
"os"
|
|
14
|
+
"os/exec"
|
|
15
|
+
"strconv"
|
|
16
|
+
"strings"
|
|
17
|
+
|
|
18
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
19
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
// Provider reads a boru vault (https://github.com/boru-lang/boru).
|
|
23
|
+
//
|
|
24
|
+
// Two ways in, both boru's own.
|
|
25
|
+
//
|
|
26
|
+
// With no Addr, the CLI: `boru vault get --reveal <alias>` prints the
|
|
27
|
+
// secret on stdout, and nothing else. The passphrase is read by boru itself
|
|
28
|
+
// from BORU_VAULT_PASSPHRASE; sekreto never accepts it as config and never
|
|
29
|
+
// puts it on a command line, where it would show up in the process table.
|
|
30
|
+
//
|
|
31
|
+
// With an Addr, boru's wire protocol: `boru vault serve` publishes a
|
|
32
|
+
// read-only, HashiCorp-shaped provision API (boru's
|
|
33
|
+
// design/VAULT-WIRE-PROTOCOL.0.md), authenticated by a capability token
|
|
34
|
+
// from `boru vault grant`. A sekreto name is already a valid boru alias,
|
|
35
|
+
// and boru aliases keep their dots, so api.token is the single path segment
|
|
36
|
+
// api.token - not the api/token split a HashiCorp KV gets. The value is the
|
|
37
|
+
// `value` field. A 404 is a miss; anything else the server refuses (a
|
|
38
|
+
// revoked capability, a sealed vault) is an error.
|
|
39
|
+
//
|
|
40
|
+
// boru's `vault proxy` and `vault mcp` remain out of bounds: they are a
|
|
41
|
+
// credential *broker*, built precisely so the caller never receives the
|
|
42
|
+
// credential. `vault serve` is the provision endpoint, built to hand the
|
|
43
|
+
// value back - that is the one sekreto uses.
|
|
44
|
+
type Provider struct {
|
|
45
|
+
Command string
|
|
46
|
+
Namespace string
|
|
47
|
+
Home string
|
|
48
|
+
Addr string
|
|
49
|
+
Token string
|
|
50
|
+
Mount string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
func (provider *Provider) command() string {
|
|
54
|
+
if "" == provider.Command {
|
|
55
|
+
return "boru"
|
|
56
|
+
}
|
|
57
|
+
return provider.Command
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
func (provider *Provider) wireaddr() string {
|
|
61
|
+
return strings.TrimSuffix(provider.Addr, "/")
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
func (provider *Provider) wiremount() string {
|
|
65
|
+
if "" == provider.Mount {
|
|
66
|
+
return "secret"
|
|
67
|
+
}
|
|
68
|
+
return provider.Mount
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func (provider *Provider) wirelookup(name string) (string, bool, error) {
|
|
72
|
+
addr := provider.wireaddr()
|
|
73
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
74
|
+
return "", false, err
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// The dotted name stays one segment: boru aliases keep their dots.
|
|
78
|
+
alias := name
|
|
79
|
+
if "" != provider.Namespace {
|
|
80
|
+
alias = provider.Namespace + "/" + name
|
|
81
|
+
}
|
|
82
|
+
target := addr + "/v1/" + provider.wiremount() + "/data/" + alias
|
|
83
|
+
|
|
84
|
+
status, body, err := httpjson.Get(target, map[string]string{"X-Vault-Token": provider.Token})
|
|
85
|
+
if nil != err {
|
|
86
|
+
return "", false, err
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if http.StatusNotFound == status {
|
|
90
|
+
return "", false, nil
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if http.StatusOK != status {
|
|
94
|
+
return "", false, sekreto.Fail("sekreto: boru serve error: " + strconv.Itoa(status) + ": " + target)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
value := httpjson.Dig(body, "data", "data", "value")
|
|
98
|
+
if nil == value {
|
|
99
|
+
return "", false, nil
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return httpjson.ToString(value), true, nil
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
106
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
107
|
+
return "", false, err
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if "" != provider.Addr {
|
|
111
|
+
return provider.wirelookup(name)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
alias := name
|
|
115
|
+
if "" != provider.Namespace {
|
|
116
|
+
alias = provider.Namespace + ":" + name
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
run := exec.Command(provider.command(), "vault", "get", "--reveal", alias)
|
|
120
|
+
|
|
121
|
+
if "" != provider.Home {
|
|
122
|
+
run.Env = append(os.Environ(), "BORU_HOME="+provider.Home)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var out, errout bytes.Buffer
|
|
126
|
+
run.Stdout = &out
|
|
127
|
+
run.Stderr = &errout
|
|
128
|
+
|
|
129
|
+
err := run.Run()
|
|
130
|
+
|
|
131
|
+
if nil == err {
|
|
132
|
+
// boru prints the value and one newline, and nothing else.
|
|
133
|
+
return strings.TrimSuffix(out.String(), "\n"), true, nil
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
var exiterr *exec.ExitError
|
|
137
|
+
if !errors.As(err, &exiterr) {
|
|
138
|
+
return "", false, sekreto.Fail("sekreto: cannot run " + provider.command() + ": " + err.Error())
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
why := strings.TrimSpace(errout.String())
|
|
142
|
+
|
|
143
|
+
// "no alias named" is boru saying it does not hold this secret, which is a
|
|
144
|
+
// miss: the chain carries on to the next provider. A locked vault or a
|
|
145
|
+
// wrong passphrase is not a miss - treating it as one would fall through
|
|
146
|
+
// to a weaker store without saying so.
|
|
147
|
+
if borumiss(why) {
|
|
148
|
+
return "", false, nil
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if "" == why {
|
|
152
|
+
why = "exit " + strconv.Itoa(exiterr.ExitCode())
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return "", false, sekreto.Fail("sekreto: boru vault error: " + why)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
func (provider *Provider) Describe() string {
|
|
159
|
+
if "" != provider.Addr {
|
|
160
|
+
return "boru:" + provider.wireaddr()
|
|
161
|
+
}
|
|
162
|
+
if "" != provider.Namespace {
|
|
163
|
+
return "boru:" + provider.Namespace
|
|
164
|
+
}
|
|
165
|
+
return "boru"
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// borumiss reports whether a boru failure means "no such secret" rather than
|
|
169
|
+
// "I could not answer". Matched on boru's own wording for a missing alias.
|
|
170
|
+
func borumiss(why string) bool {
|
|
171
|
+
return strings.Contains(why, "no alias named")
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Plugin is the `boru` provider kind, as a voxgig/plugin definition.
|
|
175
|
+
var Plugin = sekreto.ProviderPlugin("boru", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
176
|
+
return &Provider{
|
|
177
|
+
Command: spec.Command,
|
|
178
|
+
Namespace: spec.Namespace,
|
|
179
|
+
Home: spec.Home,
|
|
180
|
+
Addr: spec.Addr,
|
|
181
|
+
Token: spec.Token,
|
|
182
|
+
Mount: spec.Mount,
|
|
183
|
+
}, nil
|
|
184
|
+
})
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/doppler/doppler.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The doppler plugin: Doppler, one bulk download per config. Needs
|
|
5
|
+
// HTTPS. A port of typescript/plugins/doppler.ts.
|
|
6
|
+
package doppler
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"net/http"
|
|
10
|
+
"strconv"
|
|
11
|
+
"strings"
|
|
12
|
+
"sync"
|
|
13
|
+
|
|
14
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
15
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
// Provider reads Doppler.
|
|
19
|
+
//
|
|
20
|
+
// The whole config is downloaded once - Doppler's own bulk endpoint - and
|
|
21
|
+
// answered from memory, like a remote .env: api.token is the API_TOKEN
|
|
22
|
+
// entry. A service token is config-scoped, so project and config are only
|
|
23
|
+
// needed with broader tokens.
|
|
24
|
+
type Provider struct {
|
|
25
|
+
Token string
|
|
26
|
+
Project string
|
|
27
|
+
Config string
|
|
28
|
+
Addr string
|
|
29
|
+
// Guards the memoised state below: a Sekreto may resolve from several
|
|
30
|
+
// goroutines, and a racy map read is either a crash or a zero value - a
|
|
31
|
+
// MISS where the store does hold the secret, which falls through to a
|
|
32
|
+
// weaker store.
|
|
33
|
+
mu sync.Mutex
|
|
34
|
+
values map[string]string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
func (provider *Provider) load() (map[string]string, error) {
|
|
38
|
+
provider.mu.Lock()
|
|
39
|
+
defer provider.mu.Unlock()
|
|
40
|
+
|
|
41
|
+
if nil != provider.values {
|
|
42
|
+
return provider.values, nil
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
addr := provider.Addr
|
|
46
|
+
if "" == addr {
|
|
47
|
+
addr = "https://api.doppler.com"
|
|
48
|
+
}
|
|
49
|
+
addr = strings.TrimSuffix(addr, "/")
|
|
50
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
51
|
+
return nil, err
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
target := addr + "/v3/configs/config/secrets/download?format=json"
|
|
55
|
+
if "" != provider.Project {
|
|
56
|
+
target += "&project=" + httpjson.Escape(provider.Project)
|
|
57
|
+
}
|
|
58
|
+
if "" != provider.Config {
|
|
59
|
+
target += "&config=" + httpjson.Escape(provider.Config)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
status, body, err := httpjson.Get(target,
|
|
63
|
+
map[string]string{"authorization": "Bearer " + provider.Token})
|
|
64
|
+
if nil != err {
|
|
65
|
+
return nil, err
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
object, is := body.(map[string]any)
|
|
69
|
+
if http.StatusOK != status || !is {
|
|
70
|
+
return nil, sekreto.Fail("sekreto: doppler error: " + strconv.Itoa(status))
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
values := map[string]string{}
|
|
74
|
+
for key, value := range object {
|
|
75
|
+
if nil != value {
|
|
76
|
+
values[key] = httpjson.ToString(value)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
provider.values = values
|
|
80
|
+
|
|
81
|
+
return values, nil
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
85
|
+
key, err := sekreto.EnvKey(name, "")
|
|
86
|
+
if nil != err {
|
|
87
|
+
return "", false, err
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
values, err := provider.load()
|
|
91
|
+
if nil != err {
|
|
92
|
+
return "", false, err
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
value, has := values[key]
|
|
96
|
+
return value, has, nil
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
func (provider *Provider) Describe() string {
|
|
100
|
+
if "" != provider.Project {
|
|
101
|
+
return "doppler:" + provider.Project + "/" + provider.Config
|
|
102
|
+
}
|
|
103
|
+
return "doppler"
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Plugin is the `doppler` provider kind, as a voxgig/plugin definition.
|
|
107
|
+
var Plugin = sekreto.ProviderPlugin("doppler", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
108
|
+
return &Provider{
|
|
109
|
+
Token: spec.Token,
|
|
110
|
+
Project: spec.Project,
|
|
111
|
+
Config: spec.Config,
|
|
112
|
+
Addr: spec.Addr,
|
|
113
|
+
}, nil
|
|
114
|
+
})
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/gcpsecrets/gcpsecrets.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The gcpsecrets plugin: GCP Secret Manager. Needs HTTPS. A port of
|
|
5
|
+
// typescript/plugins/gcpsecrets.ts.
|
|
6
|
+
package gcpsecrets
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"encoding/base64"
|
|
10
|
+
"net/http"
|
|
11
|
+
"os"
|
|
12
|
+
"strconv"
|
|
13
|
+
"strings"
|
|
14
|
+
"sync"
|
|
15
|
+
"time"
|
|
16
|
+
|
|
17
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
18
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
// Provider reads GCP Secret Manager.
|
|
22
|
+
//
|
|
23
|
+
// api.token reads secret api_token (dots flattened to `_`; Secret Manager
|
|
24
|
+
// ids have no hierarchy and reject dots), latest version. The token comes
|
|
25
|
+
// from config, then GOOGLE_OAUTH_ACCESS_TOKEN, then the GCE/GKE metadata
|
|
26
|
+
// server - so on Google's own platform no credential configuration is
|
|
27
|
+
// needed at all.
|
|
28
|
+
//
|
|
29
|
+
// The metadata call itself is plain http to a link-local host by platform
|
|
30
|
+
// design; no credential rides on it, so checkaddr guards the Secret
|
|
31
|
+
// Manager address instead.
|
|
32
|
+
type Provider struct {
|
|
33
|
+
Project string
|
|
34
|
+
Token string
|
|
35
|
+
Addr string
|
|
36
|
+
MetadataAddr string
|
|
37
|
+
// A configured token is kept forever; a metadata-server token carries
|
|
38
|
+
// expires_in and is renewed shortly before it runs out.
|
|
39
|
+
livetoken string
|
|
40
|
+
havetoken bool
|
|
41
|
+
renewat time.Time
|
|
42
|
+
mu sync.Mutex
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
func (provider *Provider) metadataaddr() string {
|
|
46
|
+
if "" != provider.MetadataAddr {
|
|
47
|
+
return provider.MetadataAddr
|
|
48
|
+
}
|
|
49
|
+
if host := os.Getenv("GCE_METADATA_HOST"); "" != host {
|
|
50
|
+
return "http://" + host
|
|
51
|
+
}
|
|
52
|
+
return "http://metadata.google.internal"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
func (provider *Provider) login() (string, error) {
|
|
56
|
+
configured := provider.Token
|
|
57
|
+
if "" == configured {
|
|
58
|
+
configured = os.Getenv("GOOGLE_OAUTH_ACCESS_TOKEN")
|
|
59
|
+
}
|
|
60
|
+
if "" != configured {
|
|
61
|
+
return configured, nil
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
target := strings.TrimSuffix(provider.metadataaddr(), "/") +
|
|
65
|
+
"/computeMetadata/v1/instance/service-accounts/default/token"
|
|
66
|
+
|
|
67
|
+
status, body, err := httpjson.Get(target, map[string]string{"Metadata-Flavor": "Google"})
|
|
68
|
+
if nil != err {
|
|
69
|
+
return "", err
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
got := httpjson.DigText(body, "access_token")
|
|
73
|
+
if http.StatusOK != status || "" == got {
|
|
74
|
+
return "", sekreto.Fail("sekreto: gcp: no token and metadata server did not answer")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
|
|
78
|
+
|
|
79
|
+
return got, nil
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
83
|
+
// Serialize per-provider access: Lookup reads and refreshes the cached
|
|
84
|
+
// login token, and a secrets client may resolve from several goroutines.
|
|
85
|
+
provider.mu.Lock()
|
|
86
|
+
defer provider.mu.Unlock()
|
|
87
|
+
|
|
88
|
+
if "" == provider.Project {
|
|
89
|
+
return "", false, sekreto.Fail("sekreto: gcp: no project")
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
addr := provider.Addr
|
|
93
|
+
if "" == addr {
|
|
94
|
+
addr = "https://secretmanager.googleapis.com"
|
|
95
|
+
}
|
|
96
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
97
|
+
return "", false, err
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if !provider.havetoken || httpjson.Due(provider.renewat) {
|
|
101
|
+
token, err := provider.login()
|
|
102
|
+
if nil != err {
|
|
103
|
+
return "", false, err
|
|
104
|
+
}
|
|
105
|
+
provider.livetoken = token
|
|
106
|
+
provider.havetoken = true
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
flat, err := sekreto.FlatName(name, "_")
|
|
110
|
+
if nil != err {
|
|
111
|
+
return "", false, err
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
target := strings.TrimSuffix(addr, "/") + "/v1/projects/" + provider.Project +
|
|
115
|
+
"/secrets/" + flat + "/versions/latest:access"
|
|
116
|
+
|
|
117
|
+
status, body, err := httpjson.Get(target,
|
|
118
|
+
map[string]string{"authorization": "Bearer " + provider.livetoken})
|
|
119
|
+
if nil != err {
|
|
120
|
+
return "", false, err
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if http.StatusNotFound == status {
|
|
124
|
+
return "", false, nil
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if http.StatusOK != status {
|
|
128
|
+
return "", false, sekreto.Fail("sekreto: gcp error: " + strconv.Itoa(status) + ": " + target)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
data, is := httpjson.Dig(body, "payload", "data").(string)
|
|
132
|
+
if !is {
|
|
133
|
+
return "", false, nil
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// See the aws provider: an undecodable payload is an error, not a miss.
|
|
137
|
+
decoded, err := base64.StdEncoding.DecodeString(data)
|
|
138
|
+
if nil != err {
|
|
139
|
+
return "", false, sekreto.Fail("sekreto: gcp: undecodable secret")
|
|
140
|
+
}
|
|
141
|
+
return string(decoded), true, nil
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
func (provider *Provider) Describe() string {
|
|
145
|
+
return "gcpsecrets:" + provider.Project
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Plugin is the `gcpsecrets` provider kind, as a voxgig/plugin definition.
|
|
149
|
+
var Plugin = sekreto.ProviderPlugin("gcpsecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
150
|
+
return &Provider{
|
|
151
|
+
Project: spec.Project,
|
|
152
|
+
Token: spec.Token,
|
|
153
|
+
Addr: spec.Addr,
|
|
154
|
+
MetadataAddr: spec.MetadataAddr,
|
|
155
|
+
}, nil
|
|
156
|
+
})
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/hashicorp/hashicorp.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The hashicorp plugin: HashiCorp Vault, and OpenBao. Needs HTTPS, and
|
|
5
|
+
// the filesystem for a kubernetes service-account JWT. A port of
|
|
6
|
+
// typescript/plugins/hashicorp.ts.
|
|
7
|
+
package hashicorp
|
|
8
|
+
|
|
9
|
+
import (
|
|
10
|
+
"net/http"
|
|
11
|
+
"os"
|
|
12
|
+
"strconv"
|
|
13
|
+
"strings"
|
|
14
|
+
"sync"
|
|
15
|
+
"time"
|
|
16
|
+
|
|
17
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
18
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
// Provider reads HashiCorp Vault.
|
|
22
|
+
//
|
|
23
|
+
// KV v2 (the default): api.token reads {addr}/v1/{mount}/data/api and takes
|
|
24
|
+
// the `token` field of data.data. KV v1 (KV: 1) reads {addr}/v1/{mount}/api
|
|
25
|
+
// and takes the field of data. A 404 means "not here", which is a miss
|
|
26
|
+
// rather than an error, so a vault can sit in a chain with fallbacks.
|
|
27
|
+
//
|
|
28
|
+
// A Vault Enterprise namespace rides the X-Vault-Namespace header, on
|
|
29
|
+
// logins as well as reads.
|
|
30
|
+
//
|
|
31
|
+
// Instead of being handed a token, the provider can log in: Kubernetes
|
|
32
|
+
// auth (the pod's service-account JWT, from its conventional path) or
|
|
33
|
+
// AppRole. A failed login is an error, never a miss - it means this store
|
|
34
|
+
// could not answer at all.
|
|
35
|
+
type Provider struct {
|
|
36
|
+
Addr string
|
|
37
|
+
Token string
|
|
38
|
+
Mount string
|
|
39
|
+
KV int
|
|
40
|
+
VaultNamespace string
|
|
41
|
+
Auth *sekreto.AuthSpec
|
|
42
|
+
// The working token: a configured token is kept forever, a logged-in
|
|
43
|
+
// token is renewed shortly before its lease runs out - a long-running
|
|
44
|
+
// process must not keep presenting a token the vault already expired.
|
|
45
|
+
livetoken string
|
|
46
|
+
havetoken bool
|
|
47
|
+
renewat time.Time
|
|
48
|
+
mu sync.Mutex
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
func (provider *Provider) mount() string {
|
|
52
|
+
if "" == provider.Mount {
|
|
53
|
+
return "secret"
|
|
54
|
+
}
|
|
55
|
+
return provider.Mount
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
func (provider *Provider) baseheaders() map[string]string {
|
|
59
|
+
headers := map[string]string{}
|
|
60
|
+
if "" != provider.VaultNamespace {
|
|
61
|
+
headers["X-Vault-Namespace"] = provider.VaultNamespace
|
|
62
|
+
}
|
|
63
|
+
return headers
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
func (provider *Provider) login() (string, error) {
|
|
67
|
+
auth := provider.Auth
|
|
68
|
+
if nil == auth {
|
|
69
|
+
return "", sekreto.Fail("sekreto: hashicorp: no token and no auth method")
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
mount := auth.Mount
|
|
73
|
+
if "" == mount {
|
|
74
|
+
mount = auth.Method
|
|
75
|
+
}
|
|
76
|
+
target := strings.TrimSuffix(provider.Addr, "/") + "/v1/auth/" + mount + "/login"
|
|
77
|
+
|
|
78
|
+
var payload []byte
|
|
79
|
+
switch auth.Method {
|
|
80
|
+
case "kubernetes":
|
|
81
|
+
jwt := auth.Jwt
|
|
82
|
+
if "" == jwt {
|
|
83
|
+
file := auth.JwtFile
|
|
84
|
+
if "" == file {
|
|
85
|
+
file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
|
|
86
|
+
}
|
|
87
|
+
raw, err := os.ReadFile(file)
|
|
88
|
+
if nil != err {
|
|
89
|
+
return "", sekreto.Fail("sekreto: hashicorp: cannot read jwt file " + file)
|
|
90
|
+
}
|
|
91
|
+
jwt = strings.TrimSpace(string(raw))
|
|
92
|
+
}
|
|
93
|
+
payload, _ = sekreto.WriteJSON(struct {
|
|
94
|
+
Role string `json:"role"`
|
|
95
|
+
Jwt string `json:"jwt"`
|
|
96
|
+
}{Role: auth.Role, Jwt: jwt})
|
|
97
|
+
case "approle":
|
|
98
|
+
payload, _ = sekreto.WriteJSON(struct {
|
|
99
|
+
RoleID string `json:"role_id"`
|
|
100
|
+
SecretID string `json:"secret_id"`
|
|
101
|
+
}{RoleID: auth.RoleID, SecretID: auth.SecretID})
|
|
102
|
+
default:
|
|
103
|
+
return "", sekreto.Fail("sekreto: hashicorp: unknown auth method: " + auth.Method)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
status, body, err := httpjson.Call(http.MethodPost, target, provider.baseheaders(), string(payload))
|
|
107
|
+
if nil != err {
|
|
108
|
+
return "", err
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
got := httpjson.DigText(body, "auth", "client_token")
|
|
112
|
+
if http.StatusOK != status || "" == got {
|
|
113
|
+
return "", sekreto.Fail("sekreto: hashicorp login failed: " + strconv.Itoa(status) + ": " + target)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
provider.renewat = httpjson.Expiry(httpjson.Dig(body, "auth", "lease_duration"))
|
|
117
|
+
|
|
118
|
+
return got, nil
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
122
|
+
// Serialize per-provider access: Lookup reads and refreshes the cached
|
|
123
|
+
// login token, and a secrets client may resolve from several goroutines.
|
|
124
|
+
provider.mu.Lock()
|
|
125
|
+
defer provider.mu.Unlock()
|
|
126
|
+
|
|
127
|
+
if err := sekreto.CheckAddr(provider.Addr); nil != err {
|
|
128
|
+
return "", false, err
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if !provider.havetoken || httpjson.Due(provider.renewat) {
|
|
132
|
+
if "" != provider.Token {
|
|
133
|
+
provider.livetoken = provider.Token
|
|
134
|
+
} else {
|
|
135
|
+
token, err := provider.login()
|
|
136
|
+
if nil != err {
|
|
137
|
+
return "", false, err
|
|
138
|
+
}
|
|
139
|
+
provider.livetoken = token
|
|
140
|
+
}
|
|
141
|
+
provider.havetoken = true
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
ref, err := sekreto.NameVaultRef(name)
|
|
145
|
+
if nil != err {
|
|
146
|
+
return "", false, err
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
base := strings.TrimSuffix(provider.Addr, "/") + "/v1/" + provider.mount()
|
|
150
|
+
target := base + "/data/" + ref.Path
|
|
151
|
+
if 1 == provider.KV {
|
|
152
|
+
target = base + "/" + ref.Path
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
headers := provider.baseheaders()
|
|
156
|
+
headers["X-Vault-Token"] = provider.livetoken
|
|
157
|
+
|
|
158
|
+
status, body, err := httpjson.Get(target, headers)
|
|
159
|
+
if nil != err {
|
|
160
|
+
return "", false, err
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if http.StatusNotFound == status {
|
|
164
|
+
return "", false, nil
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if http.StatusOK != status {
|
|
168
|
+
return "", false, sekreto.Fail("sekreto: hashicorp error: " + strconv.Itoa(status) + ": " + target)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var value any
|
|
172
|
+
if 1 == provider.KV {
|
|
173
|
+
value = httpjson.Dig(body, "data", ref.Field)
|
|
174
|
+
} else {
|
|
175
|
+
value = httpjson.Dig(body, "data", "data", ref.Field)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if nil == value {
|
|
179
|
+
return "", false, nil
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return httpjson.ToString(value), true, nil
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
func (provider *Provider) Describe() string {
|
|
186
|
+
return "hashicorp:" + provider.Addr + "/" + provider.mount()
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Plugin is the `hashicorp` provider kind, as a voxgig/plugin definition.
|
|
190
|
+
var Plugin = sekreto.ProviderPlugin("hashicorp", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
191
|
+
kv := spec.KV
|
|
192
|
+
if 0 == kv {
|
|
193
|
+
kv = 2
|
|
194
|
+
}
|
|
195
|
+
// A version typo like kv: 3 must not quietly behave as v2 and turn
|
|
196
|
+
// its 404s into misses; there is nothing safe to assume it meant.
|
|
197
|
+
if 1 != kv && 2 != kv {
|
|
198
|
+
return nil, sekreto.Fail("sekreto: hashicorp: unsupported kv version: " + strconv.Itoa(kv))
|
|
199
|
+
}
|
|
200
|
+
return &Provider{
|
|
201
|
+
Addr: spec.Addr,
|
|
202
|
+
Token: spec.Token,
|
|
203
|
+
Mount: spec.Mount,
|
|
204
|
+
KV: spec.KV,
|
|
205
|
+
VaultNamespace: spec.VaultNamespace,
|
|
206
|
+
Auth: spec.Auth,
|
|
207
|
+
}, nil
|
|
208
|
+
})
|