@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,292 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/aws/aws.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 aws plugin: Secrets Manager and SSM Parameter Store, with requests
|
|
5
|
+
// SigV4-signed in-tree (sigv4.go, beside this file). Needs HTTPS and
|
|
6
|
+
// HMAC-SHA256 - the one cryptographic dependency in the library, which is
|
|
7
|
+
// why this is a plugin and why the core never imports crypto. A port of
|
|
8
|
+
// typescript/plugins/aws.ts.
|
|
9
|
+
package aws
|
|
10
|
+
|
|
11
|
+
import (
|
|
12
|
+
"encoding/base64"
|
|
13
|
+
"encoding/json"
|
|
14
|
+
"net/http"
|
|
15
|
+
"os"
|
|
16
|
+
"strconv"
|
|
17
|
+
"strings"
|
|
18
|
+
"time"
|
|
19
|
+
|
|
20
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
21
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
// awsnow is the YYYYMMDDTHHMMSSZ timestamp SigV4 wants, for now.
|
|
25
|
+
func awsnow() string {
|
|
26
|
+
return time.Now().UTC().Format("20060102T150405Z")
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// awscreds is a resolved set of AWS credentials.
|
|
30
|
+
type awscreds struct {
|
|
31
|
+
region string
|
|
32
|
+
keyid string
|
|
33
|
+
secret string
|
|
34
|
+
session string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// awsauth resolves region and credentials, from config first and the
|
|
38
|
+
// standard AWS_* environment variables second - those are AWS's own
|
|
39
|
+
// convention, and a pod or CI job that has them set should just work.
|
|
40
|
+
// Missing either is an error: an AWS store with no credentials could not
|
|
41
|
+
// answer.
|
|
42
|
+
func awsauth(region string, keyid string, secret string, session string) (*awscreds, error) {
|
|
43
|
+
if "" == region {
|
|
44
|
+
region = os.Getenv("AWS_REGION")
|
|
45
|
+
}
|
|
46
|
+
if "" == region {
|
|
47
|
+
region = os.Getenv("AWS_DEFAULT_REGION")
|
|
48
|
+
}
|
|
49
|
+
if "" == keyid {
|
|
50
|
+
keyid = os.Getenv("AWS_ACCESS_KEY_ID")
|
|
51
|
+
}
|
|
52
|
+
if "" == secret {
|
|
53
|
+
secret = os.Getenv("AWS_SECRET_ACCESS_KEY")
|
|
54
|
+
}
|
|
55
|
+
if "" == session {
|
|
56
|
+
session = os.Getenv("AWS_SESSION_TOKEN")
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if "" == region {
|
|
60
|
+
return nil, sekreto.Fail("sekreto: aws: no region (set region or AWS_REGION)")
|
|
61
|
+
}
|
|
62
|
+
if "" == keyid || "" == secret {
|
|
63
|
+
return nil, sekreto.Fail("sekreto: aws: no credentials (set keyid/secret or " +
|
|
64
|
+
"AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)")
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return &awscreds{region: region, keyid: keyid, secret: secret, session: session}, nil
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// awscall makes one signed call to an AWS JSON-1.1 API.
|
|
71
|
+
func awscall(
|
|
72
|
+
region string, keyid string, secret string, session string, addr string,
|
|
73
|
+
service string, target string, payload string,
|
|
74
|
+
) (int, any, error) {
|
|
75
|
+
auth, err := awsauth(region, keyid, secret, session)
|
|
76
|
+
if nil != err {
|
|
77
|
+
return 0, nil, err
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if "" == addr {
|
|
81
|
+
// The China partition lives under its own suffix; every other
|
|
82
|
+
// commercial region is plain amazonaws.com.
|
|
83
|
+
suffix := ".amazonaws.com"
|
|
84
|
+
if strings.HasPrefix(auth.region, "cn-") {
|
|
85
|
+
suffix = ".amazonaws.com.cn"
|
|
86
|
+
}
|
|
87
|
+
addr = "https://" + service + "." + auth.region + suffix
|
|
88
|
+
}
|
|
89
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
90
|
+
return 0, nil, err
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
requrl := strings.TrimSuffix(addr, "/") + "/"
|
|
94
|
+
headers := map[string]string{
|
|
95
|
+
"content-type": "application/x-amz-json-1.1",
|
|
96
|
+
"x-amz-target": target,
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
signed, err := SigV4(&Sigv4Input{
|
|
100
|
+
Method: http.MethodPost,
|
|
101
|
+
URL: requrl,
|
|
102
|
+
Headers: headers,
|
|
103
|
+
Body: payload,
|
|
104
|
+
Service: service,
|
|
105
|
+
Region: auth.region,
|
|
106
|
+
KeyID: auth.keyid,
|
|
107
|
+
Secret: auth.secret,
|
|
108
|
+
Session: auth.session,
|
|
109
|
+
Datetime: awsnow(),
|
|
110
|
+
})
|
|
111
|
+
if nil != err {
|
|
112
|
+
return 0, nil, err
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
for key, value := range signed {
|
|
116
|
+
headers[key] = value
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return httpjson.Call(http.MethodPost, requrl, headers, payload)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// awsmiss reports whether this AWS error body names one of the not-found
|
|
123
|
+
// types. Those are a miss; every other failure is a store that could not
|
|
124
|
+
// answer.
|
|
125
|
+
func awsmiss(body any, types []string) bool {
|
|
126
|
+
errtype, _ := httpjson.Dig(body, "__type").(string)
|
|
127
|
+
|
|
128
|
+
for _, name := range types {
|
|
129
|
+
if strings.Contains(errtype, name) {
|
|
130
|
+
return true
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return false
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// SecretsProvider reads AWS Secrets Manager.
|
|
138
|
+
//
|
|
139
|
+
// api.token reads the secret named `api` (the vaultref path, so
|
|
140
|
+
// db.pass.main reads db/pass) and takes the `token` field of its JSON
|
|
141
|
+
// SecretString - the AWS idiom of one JSON map per secret. A SecretString
|
|
142
|
+
// that is not JSON is the value itself, under the conventional field
|
|
143
|
+
// `value`. Requests are SigV4-signed in-tree; see sigv4.go.
|
|
144
|
+
type SecretsProvider struct {
|
|
145
|
+
Region string
|
|
146
|
+
KeyID string
|
|
147
|
+
Secret string
|
|
148
|
+
Session string
|
|
149
|
+
Addr string
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
func (provider *SecretsProvider) Lookup(name string) (string, bool, error) {
|
|
153
|
+
ref, err := sekreto.NameVaultRef(name)
|
|
154
|
+
if nil != err {
|
|
155
|
+
return "", false, err
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
payload, _ := sekreto.WriteJSON(struct {
|
|
159
|
+
SecretID string `json:"SecretId"`
|
|
160
|
+
}{SecretID: ref.Path})
|
|
161
|
+
|
|
162
|
+
status, body, err := awscall(
|
|
163
|
+
provider.Region, provider.KeyID, provider.Secret, provider.Session, provider.Addr,
|
|
164
|
+
"secretsmanager", "secretsmanager.GetSecretValue", string(payload))
|
|
165
|
+
if nil != err {
|
|
166
|
+
return "", false, err
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if http.StatusBadRequest == status && awsmiss(body, []string{"ResourceNotFoundException"}) {
|
|
170
|
+
return "", false, nil
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if http.StatusOK != status {
|
|
174
|
+
return "", false, sekreto.Fail("sekreto: aws secretsmanager error: " + strconv.Itoa(status))
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
text, is := httpjson.Dig(body, "SecretString").(string)
|
|
178
|
+
|
|
179
|
+
if !is {
|
|
180
|
+
// A binary secret has no fields to address; only the conventional
|
|
181
|
+
// `value` field can mean "the bytes themselves".
|
|
182
|
+
bin, is := httpjson.Dig(body, "SecretBinary").(string)
|
|
183
|
+
if is && "value" == ref.Field {
|
|
184
|
+
// The error was discarded, so a corrupted payload decoded to
|
|
185
|
+
// whatever came before the bad byte and was returned as the
|
|
186
|
+
// secret. A store that answered incoherently is an error.
|
|
187
|
+
decoded, err := base64.StdEncoding.DecodeString(bin)
|
|
188
|
+
if nil != err {
|
|
189
|
+
return "", false, sekreto.Fail("sekreto: aws secretsmanager: undecodable secret")
|
|
190
|
+
}
|
|
191
|
+
return string(decoded), true, nil
|
|
192
|
+
}
|
|
193
|
+
return "", false, nil
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
var parsed map[string]any
|
|
197
|
+
if err := json.Unmarshal([]byte(text), &parsed); nil == err && nil != parsed {
|
|
198
|
+
value, has := parsed[ref.Field]
|
|
199
|
+
if !has || nil == value {
|
|
200
|
+
return "", false, nil
|
|
201
|
+
}
|
|
202
|
+
return httpjson.ToString(value), true, nil
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// A plain-string secret is the whole value; it has no named fields.
|
|
206
|
+
if "value" == ref.Field {
|
|
207
|
+
return text, true, nil
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return "", false, nil
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Config only, never the environment: Describe feeds the spec's sources
|
|
214
|
+
// group, which must answer the same everywhere.
|
|
215
|
+
func (provider *SecretsProvider) Describe() string {
|
|
216
|
+
return "awssecrets:" + provider.Region
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ParamsProvider reads AWS SSM Parameter Store.
|
|
220
|
+
//
|
|
221
|
+
// db.pass.main reads the parameter /db/pass/main (under an optional prefix
|
|
222
|
+
// path), decrypted. Parameter Store carries flat strings, so there is no
|
|
223
|
+
// field indirection.
|
|
224
|
+
type ParamsProvider struct {
|
|
225
|
+
Region string
|
|
226
|
+
KeyID string
|
|
227
|
+
Secret string
|
|
228
|
+
Session string
|
|
229
|
+
Addr string
|
|
230
|
+
Prefix string
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
func (provider *ParamsProvider) Lookup(name string) (string, bool, error) {
|
|
234
|
+
param, err := sekreto.AwsParam(name, provider.Prefix)
|
|
235
|
+
if nil != err {
|
|
236
|
+
return "", false, err
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
payload, _ := sekreto.WriteJSON(struct {
|
|
240
|
+
Name string `json:"Name"`
|
|
241
|
+
WithDecryption bool `json:"WithDecryption"`
|
|
242
|
+
}{Name: param, WithDecryption: true})
|
|
243
|
+
|
|
244
|
+
status, body, err := awscall(
|
|
245
|
+
provider.Region, provider.KeyID, provider.Secret, provider.Session, provider.Addr,
|
|
246
|
+
"ssm", "AmazonSSM.GetParameter", string(payload))
|
|
247
|
+
if nil != err {
|
|
248
|
+
return "", false, err
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if http.StatusBadRequest == status && awsmiss(body, []string{"ParameterNotFound"}) {
|
|
252
|
+
return "", false, nil
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if http.StatusOK != status {
|
|
256
|
+
return "", false, sekreto.Fail("sekreto: aws ssm error: " + strconv.Itoa(status))
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
value := httpjson.Dig(body, "Parameter", "Value")
|
|
260
|
+
if nil == value {
|
|
261
|
+
return "", false, nil
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return httpjson.ToString(value), true, nil
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
func (provider *ParamsProvider) Describe() string {
|
|
268
|
+
return "awsparams:" + provider.Region + provider.Prefix
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Secrets is the `awssecrets` provider kind, as a voxgig/plugin definition.
|
|
272
|
+
var Secrets = sekreto.ProviderPlugin("awssecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
273
|
+
return &SecretsProvider{
|
|
274
|
+
Region: spec.Region,
|
|
275
|
+
KeyID: spec.KeyID,
|
|
276
|
+
Secret: spec.Secret,
|
|
277
|
+
Session: spec.Session,
|
|
278
|
+
Addr: spec.Addr,
|
|
279
|
+
}, nil
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
// Params is the `awsparams` provider kind, as a voxgig/plugin definition.
|
|
283
|
+
var Params = sekreto.ProviderPlugin("awsparams", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
284
|
+
return &ParamsProvider{
|
|
285
|
+
Region: spec.Region,
|
|
286
|
+
KeyID: spec.KeyID,
|
|
287
|
+
Secret: spec.Secret,
|
|
288
|
+
Session: spec.Session,
|
|
289
|
+
Addr: spec.Addr,
|
|
290
|
+
Prefix: spec.Prefix,
|
|
291
|
+
}, nil
|
|
292
|
+
})
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/aws/sigv4.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
|
+
// AWS Signature Version 4, hand-rolled.
|
|
5
|
+
//
|
|
6
|
+
// The AWS providers need exactly one thing from the AWS SDK - request
|
|
7
|
+
// signing - and taking the SDK for it would break the no-dependency rule
|
|
8
|
+
// that keeps ten ports honest. SigV4 is a stable, published algorithm
|
|
9
|
+
// built from HMAC-SHA256, which the standard library already has.
|
|
10
|
+
//
|
|
11
|
+
// SigV4 is pure: the caller passes the timestamp, so the same input yields
|
|
12
|
+
// the same signature everywhere. That is what lets the shared spec carry
|
|
13
|
+
// known-answer cases that all ten ports must reproduce bit-for-bit, and
|
|
14
|
+
// lets the integration mock recompute the signature server-side.
|
|
15
|
+
//
|
|
16
|
+
// A port of typescript/plugins/sigv4.ts, which is canonical. It lives
|
|
17
|
+
// with the aws plugin because it is the one place the library needs
|
|
18
|
+
// HMAC-SHA256, and a built-in must not.
|
|
19
|
+
|
|
20
|
+
package aws
|
|
21
|
+
|
|
22
|
+
import (
|
|
23
|
+
"crypto/hmac"
|
|
24
|
+
"crypto/sha256"
|
|
25
|
+
"encoding/hex"
|
|
26
|
+
"net/url"
|
|
27
|
+
"regexp"
|
|
28
|
+
"sort"
|
|
29
|
+
"strings"
|
|
30
|
+
|
|
31
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
32
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
// Sigv4Input is one request to sign. The JSON tags match the shared
|
|
36
|
+
// spec's sigv4 group, so a spec case decodes straight into it.
|
|
37
|
+
type Sigv4Input struct {
|
|
38
|
+
Method string `json:"method"`
|
|
39
|
+
// URL is the full request URL; the host, path and query are signed.
|
|
40
|
+
URL string `json:"url"`
|
|
41
|
+
// Headers are extra headers to sign, e.g. content-type and
|
|
42
|
+
// x-amz-target.
|
|
43
|
+
Headers map[string]string `json:"headers"`
|
|
44
|
+
Body string `json:"body"`
|
|
45
|
+
Service string `json:"service"`
|
|
46
|
+
Region string `json:"region"`
|
|
47
|
+
KeyID string `json:"keyid"`
|
|
48
|
+
Secret string `json:"secret"`
|
|
49
|
+
// Session is the STS session token; signed as x-amz-security-token
|
|
50
|
+
// when present.
|
|
51
|
+
Session string `json:"session"`
|
|
52
|
+
// Datetime is the signing moment, YYYYMMDDTHHMMSSZ. Passed in, never
|
|
53
|
+
// sampled, so the function stays pure.
|
|
54
|
+
Datetime string `json:"datetime"`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// whitespace is one run of whitespace, collapsed to a single space in
|
|
58
|
+
// canonical header values.
|
|
59
|
+
var whitespace = regexp.MustCompile(`\s+`)
|
|
60
|
+
|
|
61
|
+
func sha256hex(text string) string {
|
|
62
|
+
sum := sha256.Sum256([]byte(text))
|
|
63
|
+
return hex.EncodeToString(sum[:])
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
func hmacsha256(key []byte, text string) []byte {
|
|
67
|
+
mac := hmac.New(sha256.New, key)
|
|
68
|
+
mac.Write([]byte(text))
|
|
69
|
+
return mac.Sum(nil)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// percentdecode undoes percent-encoding without treating `+` as a space,
|
|
73
|
+
// the way the canonical port's decodeURIComponent does. A malformed
|
|
74
|
+
// escape is left as it came - there is nothing better to sign.
|
|
75
|
+
func percentdecode(text string) string {
|
|
76
|
+
decoded, err := url.PathUnescape(text)
|
|
77
|
+
if nil != err {
|
|
78
|
+
return text
|
|
79
|
+
}
|
|
80
|
+
return decoded
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// canonicalquery is the canonical query string: each pair RFC 3986-escaped,
|
|
84
|
+
// sorted by escaped key then escaped value.
|
|
85
|
+
func canonicalquery(query string) string {
|
|
86
|
+
if "" == query {
|
|
87
|
+
return ""
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
pairs := [][2]string{}
|
|
91
|
+
for _, pair := range strings.Split(query, "&") {
|
|
92
|
+
key := pair
|
|
93
|
+
value := ""
|
|
94
|
+
if eq := strings.Index(pair, "="); -1 != eq {
|
|
95
|
+
key = pair[:eq]
|
|
96
|
+
value = pair[eq+1:]
|
|
97
|
+
}
|
|
98
|
+
pairs = append(pairs, [2]string{
|
|
99
|
+
httpjson.Escape(percentdecode(key)),
|
|
100
|
+
httpjson.Escape(percentdecode(value)),
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
sort.Slice(pairs, func(left, right int) bool {
|
|
105
|
+
if pairs[left][0] != pairs[right][0] {
|
|
106
|
+
return pairs[left][0] < pairs[right][0]
|
|
107
|
+
}
|
|
108
|
+
return pairs[left][1] < pairs[right][1]
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
parts := []string{}
|
|
112
|
+
for _, pair := range pairs {
|
|
113
|
+
parts = append(parts, pair[0]+"="+pair[1])
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return strings.Join(parts, "&")
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// SigV4 signs one request. It returns the headers to attach: authorization,
|
|
120
|
+
// x-amz-date, and x-amz-security-token when a session token was given.
|
|
121
|
+
func SigV4(input *Sigv4Input) (map[string]string, error) {
|
|
122
|
+
parsed, err := url.Parse(input.URL)
|
|
123
|
+
if nil != err {
|
|
124
|
+
return nil, sekreto.Fail("sekreto: sigv4: bad url: " + input.URL)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
date := input.Datetime
|
|
128
|
+
if 8 < len(date) {
|
|
129
|
+
date = date[:8]
|
|
130
|
+
}
|
|
131
|
+
body := input.Body
|
|
132
|
+
|
|
133
|
+
// Every header that will be signed: the caller's extras, plus host and
|
|
134
|
+
// x-amz-date (and the session token when present), lower-cased and
|
|
135
|
+
// trimmed the way the canonical form requires.
|
|
136
|
+
// Canonical header values are trimmed AND internally collapsed -
|
|
137
|
+
// AWS folds sequential whitespace to one space before signing, so a
|
|
138
|
+
// header like "a b" must sign as "a b" or the service refuses it.
|
|
139
|
+
headers := map[string]string{}
|
|
140
|
+
for key, value := range input.Headers {
|
|
141
|
+
headers[strings.ToLower(key)] = whitespace.ReplaceAllString(strings.TrimSpace(value), " ")
|
|
142
|
+
}
|
|
143
|
+
headers["host"] = parsed.Host
|
|
144
|
+
headers["x-amz-date"] = input.Datetime
|
|
145
|
+
if "" != input.Session {
|
|
146
|
+
headers["x-amz-security-token"] = input.Session
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
names := []string{}
|
|
150
|
+
for name := range headers {
|
|
151
|
+
names = append(names, name)
|
|
152
|
+
}
|
|
153
|
+
sort.Strings(names)
|
|
154
|
+
|
|
155
|
+
var canonicalheaders strings.Builder
|
|
156
|
+
for _, name := range names {
|
|
157
|
+
canonicalheaders.WriteString(name + ":" + headers[name] + "\n")
|
|
158
|
+
}
|
|
159
|
+
signedheaders := strings.Join(names, ";")
|
|
160
|
+
|
|
161
|
+
path := parsed.EscapedPath()
|
|
162
|
+
if "" == path {
|
|
163
|
+
path = "/"
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
canonicalrequest := strings.Join([]string{
|
|
167
|
+
strings.ToUpper(input.Method),
|
|
168
|
+
path,
|
|
169
|
+
canonicalquery(parsed.RawQuery),
|
|
170
|
+
canonicalheaders.String(),
|
|
171
|
+
signedheaders,
|
|
172
|
+
sha256hex(body),
|
|
173
|
+
}, "\n")
|
|
174
|
+
|
|
175
|
+
scope := date + "/" + input.Region + "/" + input.Service + "/aws4_request"
|
|
176
|
+
|
|
177
|
+
stringtosign := strings.Join([]string{
|
|
178
|
+
"AWS4-HMAC-SHA256",
|
|
179
|
+
input.Datetime,
|
|
180
|
+
scope,
|
|
181
|
+
sha256hex(canonicalrequest),
|
|
182
|
+
}, "\n")
|
|
183
|
+
|
|
184
|
+
kdate := hmacsha256([]byte("AWS4"+input.Secret), date)
|
|
185
|
+
kregion := hmacsha256(kdate, input.Region)
|
|
186
|
+
kservice := hmacsha256(kregion, input.Service)
|
|
187
|
+
ksigning := hmacsha256(kservice, "aws4_request")
|
|
188
|
+
signature := hex.EncodeToString(hmacsha256(ksigning, stringtosign))
|
|
189
|
+
|
|
190
|
+
out := map[string]string{
|
|
191
|
+
"authorization": "AWS4-HMAC-SHA256 Credential=" + input.KeyID + "/" + scope +
|
|
192
|
+
", SignedHeaders=" + signedheaders + ", Signature=" + signature,
|
|
193
|
+
"x-amz-date": input.Datetime,
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if "" != input.Session {
|
|
197
|
+
out["x-amz-security-token"] = input.Session
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return out, nil
|
|
201
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/azuresecrets/azuresecrets.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 azuresecrets plugin: Azure Key Vault. Needs HTTPS. A port of
|
|
5
|
+
// typescript/plugins/azuresecrets.ts.
|
|
6
|
+
package azuresecrets
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"net/http"
|
|
10
|
+
"strconv"
|
|
11
|
+
"strings"
|
|
12
|
+
"sync"
|
|
13
|
+
"time"
|
|
14
|
+
|
|
15
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
16
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
// azureresource is the audience Azure Key Vault tokens are scoped to.
|
|
20
|
+
const azureresource = "https://vault.azure.net"
|
|
21
|
+
|
|
22
|
+
// Provider reads Azure Key Vault.
|
|
23
|
+
//
|
|
24
|
+
// api.token reads secret api-token (dots flattened to `-`; Key Vault names
|
|
25
|
+
// allow nothing else), current version. The token comes from config, then
|
|
26
|
+
// a client-credentials login when tenant/clientid/clientsecret are given,
|
|
27
|
+
// then the IMDS managed-identity endpoint - so on Azure's own platform no
|
|
28
|
+
// credential configuration is needed.
|
|
29
|
+
//
|
|
30
|
+
// As with GCP, the IMDS call is plain http to a link-local host by
|
|
31
|
+
// platform design and carries no credential; the login and vault addresses
|
|
32
|
+
// are checkaddr-guarded.
|
|
33
|
+
type Provider struct {
|
|
34
|
+
Vault string
|
|
35
|
+
Token string
|
|
36
|
+
Tenant string
|
|
37
|
+
ClientID string
|
|
38
|
+
ClientSecret string
|
|
39
|
+
LoginAddr string
|
|
40
|
+
ImdsAddr string
|
|
41
|
+
ApiVersion string
|
|
42
|
+
// A configured token is kept forever; logged-in and IMDS tokens carry
|
|
43
|
+
// expires_in and are renewed shortly before they run out.
|
|
44
|
+
livetoken string
|
|
45
|
+
havetoken bool
|
|
46
|
+
renewat time.Time
|
|
47
|
+
mu sync.Mutex
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
func (provider *Provider) login() (string, error) {
|
|
51
|
+
if "" != provider.Token {
|
|
52
|
+
return provider.Token, nil
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if "" != provider.Tenant && "" != provider.ClientID && "" != provider.ClientSecret {
|
|
56
|
+
loginaddr := provider.LoginAddr
|
|
57
|
+
if "" == loginaddr {
|
|
58
|
+
loginaddr = "https://login.microsoftonline.com"
|
|
59
|
+
}
|
|
60
|
+
if err := sekreto.CheckAddr(loginaddr); nil != err {
|
|
61
|
+
return "", err
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
target := strings.TrimSuffix(loginaddr, "/") + "/" + provider.Tenant +
|
|
65
|
+
"/oauth2/v2.0/token"
|
|
66
|
+
form := "grant_type=client_credentials&client_id=" + httpjson.Escape(provider.ClientID) +
|
|
67
|
+
"&client_secret=" + httpjson.Escape(provider.ClientSecret) +
|
|
68
|
+
"&scope=" + httpjson.Escape(azureresource+"/.default")
|
|
69
|
+
|
|
70
|
+
status, body, err := httpjson.Call(http.MethodPost, target,
|
|
71
|
+
map[string]string{"content-type": "application/x-www-form-urlencoded"}, form)
|
|
72
|
+
if nil != err {
|
|
73
|
+
return "", err
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
got := httpjson.DigText(body, "access_token")
|
|
77
|
+
if http.StatusOK != status || "" == got {
|
|
78
|
+
return "", sekreto.Fail("sekreto: azure login failed: " + strconv.Itoa(status))
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
|
|
82
|
+
return got, nil
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
imdsaddr := provider.ImdsAddr
|
|
86
|
+
if "" == imdsaddr {
|
|
87
|
+
imdsaddr = "http://169.254.169.254"
|
|
88
|
+
}
|
|
89
|
+
imds := strings.TrimSuffix(imdsaddr, "/") +
|
|
90
|
+
"/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" +
|
|
91
|
+
httpjson.Escape(azureresource)
|
|
92
|
+
|
|
93
|
+
status, body, err := httpjson.Get(imds, map[string]string{"Metadata": "true"})
|
|
94
|
+
if nil != err {
|
|
95
|
+
return "", err
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
got := httpjson.DigText(body, "access_token")
|
|
99
|
+
if http.StatusOK != status || "" == got {
|
|
100
|
+
return "", sekreto.Fail("sekreto: azure: no token, no client credentials, and IMDS did not answer")
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
|
|
104
|
+
return got, nil
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
108
|
+
// Serialize per-provider access: Lookup reads and refreshes the cached
|
|
109
|
+
// login token, and a secrets client may resolve from several goroutines.
|
|
110
|
+
provider.mu.Lock()
|
|
111
|
+
defer provider.mu.Unlock()
|
|
112
|
+
|
|
113
|
+
if "" == provider.Vault {
|
|
114
|
+
return "", false, sekreto.Fail("sekreto: azure: no vault")
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Only an explicit scheme is a URL; a vault NAMED httpvault must
|
|
118
|
+
// still become https://httpvault.vault.azure.net.
|
|
119
|
+
vaulturl := provider.Vault
|
|
120
|
+
if !strings.HasPrefix(vaulturl, "http://") && !strings.HasPrefix(vaulturl, "https://") {
|
|
121
|
+
vaulturl = "https://" + vaulturl + ".vault.azure.net"
|
|
122
|
+
}
|
|
123
|
+
if err := sekreto.CheckAddr(vaulturl); nil != err {
|
|
124
|
+
return "", false, err
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if !provider.havetoken || httpjson.Due(provider.renewat) {
|
|
128
|
+
token, err := provider.login()
|
|
129
|
+
if nil != err {
|
|
130
|
+
return "", false, err
|
|
131
|
+
}
|
|
132
|
+
provider.livetoken = token
|
|
133
|
+
provider.havetoken = true
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
flat, err := sekreto.FlatName(name, "-")
|
|
137
|
+
if nil != err {
|
|
138
|
+
return "", false, err
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
apiversion := provider.ApiVersion
|
|
142
|
+
if "" == apiversion {
|
|
143
|
+
apiversion = "7.4"
|
|
144
|
+
}
|
|
145
|
+
target := strings.TrimSuffix(vaulturl, "/") + "/secrets/" + flat +
|
|
146
|
+
"?api-version=" + apiversion
|
|
147
|
+
|
|
148
|
+
status, body, err := httpjson.Get(target,
|
|
149
|
+
map[string]string{"authorization": "Bearer " + provider.livetoken})
|
|
150
|
+
if nil != err {
|
|
151
|
+
return "", false, err
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if http.StatusNotFound == status {
|
|
155
|
+
return "", false, nil
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if http.StatusOK != status {
|
|
159
|
+
return "", false, sekreto.Fail("sekreto: azure error: " + strconv.Itoa(status) + ": " +
|
|
160
|
+
httpjson.SafeURL(target))
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
value := httpjson.Dig(body, "value")
|
|
164
|
+
if nil == value {
|
|
165
|
+
return "", false, nil
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return httpjson.ToString(value), true, nil
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
func (provider *Provider) Describe() string {
|
|
172
|
+
return "azuresecrets:" + provider.Vault
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Plugin is the `azuresecrets` provider kind, as a voxgig/plugin definition.
|
|
176
|
+
var Plugin = sekreto.ProviderPlugin("azuresecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
177
|
+
return &Provider{
|
|
178
|
+
Vault: spec.Vault,
|
|
179
|
+
Token: spec.Token,
|
|
180
|
+
Tenant: spec.Tenant,
|
|
181
|
+
ClientID: spec.ClientID,
|
|
182
|
+
ClientSecret: spec.ClientSecret,
|
|
183
|
+
LoginAddr: spec.LoginAddr,
|
|
184
|
+
ImdsAddr: spec.ImdsAddr,
|
|
185
|
+
ApiVersion: spec.ApiVersion,
|
|
186
|
+
}, nil
|
|
187
|
+
})
|