@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,119 @@
|
|
|
1
|
+
# VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/secretspec.py)
|
|
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 secretspec plugin: SecretSpec, through its CLI. Needs a child
|
|
5
|
+
# process. A port of typescript/plugins/secretspec.ts.
|
|
6
|
+
import subprocess
|
|
7
|
+
|
|
8
|
+
from ..sekreto import SekretoError, envkey
|
|
9
|
+
from ..providers import Provider, providerplugin
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SecretspecProvider(Provider):
|
|
13
|
+
"""SecretSpec (https://secretspec.dev).
|
|
14
|
+
|
|
15
|
+
SecretSpec is a declaration - a `secretspec.toml` naming the secrets a
|
|
16
|
+
project needs - plus a chain of its own backends to satisfy them from.
|
|
17
|
+
That makes it the same shape as sekreto one level down, and the reason
|
|
18
|
+
to support it is the same reason sekreto exists: a project that has
|
|
19
|
+
already declared its secrets there should not have to declare them
|
|
20
|
+
again here.
|
|
21
|
+
|
|
22
|
+
Read through its CLI, as boru is, because that is the interface it
|
|
23
|
+
offers a program in another language: `secretspec get API_TOKEN`
|
|
24
|
+
prints the value on stdout and nothing else. A sekreto name maps to a
|
|
25
|
+
SecretSpec key exactly as it maps to an environment variable -
|
|
26
|
+
`api.token` is `API_TOKEN` - which is the convention SecretSpec's own
|
|
27
|
+
examples use.
|
|
28
|
+
|
|
29
|
+
`backend` selects one of SecretSpec's backends (`--provider`, e.g.
|
|
30
|
+
`keyring` or `dotenv://.env`) and is called `backend` here only
|
|
31
|
+
because `provider` already means something else in this library.
|
|
32
|
+
|
|
33
|
+
A reason is required, not optional: SecretSpec records every read in
|
|
34
|
+
an audit log and refuses to read at all without one. sekreto sends
|
|
35
|
+
`sekreto` unless told otherwise, so the audit trail says which tool
|
|
36
|
+
asked.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, command=None, file=None, profile=None,
|
|
40
|
+
backend=None, reason=None, prefix=None):
|
|
41
|
+
self.command = command or 'secretspec'
|
|
42
|
+
self.file = file
|
|
43
|
+
self.profile = profile
|
|
44
|
+
self.backend = backend
|
|
45
|
+
self.reason = reason
|
|
46
|
+
self.prefix = prefix
|
|
47
|
+
|
|
48
|
+
def lookup(self, name):
|
|
49
|
+
key = envkey(name, self.prefix)
|
|
50
|
+
|
|
51
|
+
args = [self.command]
|
|
52
|
+
if self.file:
|
|
53
|
+
args += ['--file', self.file]
|
|
54
|
+
args += ['get', key]
|
|
55
|
+
if self.backend:
|
|
56
|
+
args += ['--provider', self.backend]
|
|
57
|
+
if self.profile:
|
|
58
|
+
args += ['--profile', self.profile]
|
|
59
|
+
args += ['--reason', self.reason or 'sekreto']
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
run = subprocess.run(
|
|
63
|
+
args,
|
|
64
|
+
capture_output=True,
|
|
65
|
+
text=True,
|
|
66
|
+
# See the boru provider: an inherited stdin lets a CLI that
|
|
67
|
+
# prompts block forever.
|
|
68
|
+
stdin=subprocess.DEVNULL,
|
|
69
|
+
)
|
|
70
|
+
except OSError as err:
|
|
71
|
+
raise SekretoError('sekreto: cannot run ' + self.command + ': ' + str(err))
|
|
72
|
+
|
|
73
|
+
if 0 == run.returncode:
|
|
74
|
+
# The value and one newline, and nothing else.
|
|
75
|
+
return run.stdout[:-1] if run.stdout.endswith('\n') else run.stdout
|
|
76
|
+
|
|
77
|
+
why = (run.stderr or '').strip()
|
|
78
|
+
|
|
79
|
+
if secretspecmiss(why, key):
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
raise SekretoError(
|
|
83
|
+
'sekreto: secretspec error: ' + (why or 'exit ' + str(run.returncode))
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def describe(self):
|
|
87
|
+
return 'secretspec' + (':' + self.backend if self.backend else '')
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def secretspecmiss(why, key):
|
|
91
|
+
"""Does this SecretSpec failure mean "no such secret" rather than "I
|
|
92
|
+
could not answer"?
|
|
93
|
+
|
|
94
|
+
SecretSpec says `Secret 'API_TOKEN' not found` for both a name it does
|
|
95
|
+
not declare and one declared with no value, and both are misses: this
|
|
96
|
+
store does not hold it, so the chain carries on.
|
|
97
|
+
|
|
98
|
+
MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
|
|
99
|
+
`Provider backend 'keyring' not found`, which is a store that could
|
|
100
|
+
not answer at all - and reading that as a miss is the worst failure
|
|
101
|
+
this library has, because the chain then falls through to a weaker
|
|
102
|
+
store without saying so. The key is required to appear, so the two
|
|
103
|
+
cannot be confused."""
|
|
104
|
+
return ("Secret '" + key + "' not found") in why
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _make(spec):
|
|
108
|
+
return SecretspecProvider(
|
|
109
|
+
spec.get('command'),
|
|
110
|
+
spec.get('file'),
|
|
111
|
+
spec.get('profile'),
|
|
112
|
+
spec.get('backend'),
|
|
113
|
+
spec.get('reason'),
|
|
114
|
+
spec.get('prefix'),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# The plugin: the `secretspec` provider kind, as a voxgig/plugin definition.
|
|
119
|
+
secretspec = providerplugin('secretspec', _make)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/sigv4.py)
|
|
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
|
|
12
|
+
# yields the same signature everywhere. That is what lets the shared spec
|
|
13
|
+
# carry known-answer cases that all ten ports must reproduce bit-for-bit,
|
|
14
|
+
# and lets the integration mock recompute the signature server-side.
|
|
15
|
+
#
|
|
16
|
+
# A port of typescript/plugins/sigv4.ts, which is canonical. It lives with
|
|
17
|
+
# the aws plugin because it is the one place the library needs
|
|
18
|
+
# HMAC-SHA256, and a built-in must not.
|
|
19
|
+
|
|
20
|
+
import hashlib
|
|
21
|
+
import hmac as hmaclib
|
|
22
|
+
import re
|
|
23
|
+
import urllib.parse
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _sha256hex(text):
|
|
27
|
+
return hashlib.sha256(text.encode('utf8')).hexdigest()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _hmac(key, text):
|
|
31
|
+
return hmaclib.new(key, text.encode('utf8'), hashlib.sha256).digest()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _uriescape(text):
|
|
35
|
+
"""RFC 3986 escaping, which is stricter than encodeURIComponent: AWS
|
|
36
|
+
wants `!`, `'`, `(`, `)` and `*` escaped too. Only the unreserved
|
|
37
|
+
characters survive, and the hex is uppercase."""
|
|
38
|
+
return urllib.parse.quote(text, safe='-_.~')
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _canonicalquery(query):
|
|
42
|
+
"""The canonical query string: each pair RFC 3986-escaped, sorted by
|
|
43
|
+
escaped key then escaped value."""
|
|
44
|
+
if '' == query:
|
|
45
|
+
return ''
|
|
46
|
+
|
|
47
|
+
pairs = []
|
|
48
|
+
for pair in query.split('&'):
|
|
49
|
+
eq = pair.find('=')
|
|
50
|
+
key = pair if -1 == eq else pair[:eq]
|
|
51
|
+
value = '' if -1 == eq else pair[eq + 1:]
|
|
52
|
+
pairs.append((
|
|
53
|
+
_uriescape(urllib.parse.unquote(key)),
|
|
54
|
+
_uriescape(urllib.parse.unquote(value)),
|
|
55
|
+
))
|
|
56
|
+
|
|
57
|
+
pairs.sort()
|
|
58
|
+
|
|
59
|
+
return '&'.join(key + '=' + value for key, value in pairs)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def sigv4(input):
|
|
63
|
+
"""Sign one request. Returns the headers to attach: authorization,
|
|
64
|
+
x-amz-date, and x-amz-security-token when a session token was given."""
|
|
65
|
+
url = urllib.parse.urlsplit(input['url'])
|
|
66
|
+
|
|
67
|
+
datetime = input['datetime']
|
|
68
|
+
date = datetime[:8]
|
|
69
|
+
body = input.get('body') or ''
|
|
70
|
+
session = input.get('session')
|
|
71
|
+
|
|
72
|
+
# Every header that will be signed: the caller's extras, plus host and
|
|
73
|
+
# x-amz-date (and the session token when present), lower-cased and
|
|
74
|
+
# trimmed the way the canonical form requires.
|
|
75
|
+
# Canonical header values are trimmed AND internally collapsed -
|
|
76
|
+
# AWS folds sequential whitespace to one space before signing, so a
|
|
77
|
+
# header like "a b" must sign as "a b" or the service refuses it.
|
|
78
|
+
headers = {}
|
|
79
|
+
for key, value in (input.get('headers') or {}).items():
|
|
80
|
+
headers[key.lower()] = re.sub(r'\s+', ' ', str(value).strip())
|
|
81
|
+
headers['host'] = url.netloc
|
|
82
|
+
headers['x-amz-date'] = datetime
|
|
83
|
+
if session:
|
|
84
|
+
headers['x-amz-security-token'] = session
|
|
85
|
+
|
|
86
|
+
names = sorted(headers.keys())
|
|
87
|
+
canonicalheaders = ''.join(name + ':' + headers[name] + '\n' for name in names)
|
|
88
|
+
signedheaders = ';'.join(names)
|
|
89
|
+
|
|
90
|
+
canonicalrequest = '\n'.join([
|
|
91
|
+
input['method'].upper(),
|
|
92
|
+
url.path or '/',
|
|
93
|
+
_canonicalquery(url.query),
|
|
94
|
+
canonicalheaders,
|
|
95
|
+
signedheaders,
|
|
96
|
+
_sha256hex(body),
|
|
97
|
+
])
|
|
98
|
+
|
|
99
|
+
scope = date + '/' + input['region'] + '/' + input['service'] + '/aws4_request'
|
|
100
|
+
|
|
101
|
+
stringtosign = '\n'.join([
|
|
102
|
+
'AWS4-HMAC-SHA256',
|
|
103
|
+
datetime,
|
|
104
|
+
scope,
|
|
105
|
+
_sha256hex(canonicalrequest),
|
|
106
|
+
])
|
|
107
|
+
|
|
108
|
+
kdate = _hmac(('AWS4' + input['secret']).encode('utf8'), date)
|
|
109
|
+
kregion = _hmac(kdate, input['region'])
|
|
110
|
+
kservice = _hmac(kregion, input['service'])
|
|
111
|
+
ksigning = _hmac(kservice, 'aws4_request')
|
|
112
|
+
signature = hmaclib.new(
|
|
113
|
+
ksigning, stringtosign.encode('utf8'), hashlib.sha256
|
|
114
|
+
).hexdigest()
|
|
115
|
+
|
|
116
|
+
out = {
|
|
117
|
+
'authorization': 'AWS4-HMAC-SHA256 Credential=' + input['keyid'] + '/' + scope
|
|
118
|
+
+ ', SignedHeaders=' + signedheaders + ', Signature=' + signature,
|
|
119
|
+
'x-amz-date': datetime,
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if session:
|
|
123
|
+
out['x-amz-security-token'] = session
|
|
124
|
+
|
|
125
|
+
return out
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/providers.py)
|
|
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
|
+
# What a provider is, how a provider kind becomes a voxgig/plugin
|
|
5
|
+
# definition - and the four BUILT-IN kinds.
|
|
6
|
+
#
|
|
7
|
+
# A provider answers one question: "do you have this secret?" It returns
|
|
8
|
+
# the value, or None to mean "ask the next one". Nothing else about a
|
|
9
|
+
# provider is visible to the caller - which is the point: an app reads
|
|
10
|
+
# `api.token` and never learns whether it came from the environment, a
|
|
11
|
+
# .env file, HashiCorp Vault or a boru vault.
|
|
12
|
+
#
|
|
13
|
+
# Two failure shapes, and they are never interchangeable. A store that
|
|
14
|
+
# does not hold the secret is a MISS (None) - the chain carries on. A
|
|
15
|
+
# store that could not answer - bad credentials, unreachable host,
|
|
16
|
+
# missing configuration - is an ERROR: falling through there would
|
|
17
|
+
# quietly reach for a weaker store.
|
|
18
|
+
#
|
|
19
|
+
# THIS MODULE IMPORTS NO urllib, NO hashlib AND NO subprocess. What makes
|
|
20
|
+
# a kind built in is that it needs nothing of the platform beyond reading
|
|
21
|
+
# a local file; every kind that opens a socket, signs a request or spawns
|
|
22
|
+
# a process is a plugin under plugins/, its own module, imported only by
|
|
23
|
+
# a program that names it (docs/design/plugin-providers.md).
|
|
24
|
+
#
|
|
25
|
+
# A port of typescript/src/provider/support.ts and
|
|
26
|
+
# typescript/src/provider/builtin.ts, which are canonical.
|
|
27
|
+
|
|
28
|
+
import os
|
|
29
|
+
|
|
30
|
+
from ..voxgig_plugin import PluginError
|
|
31
|
+
|
|
32
|
+
from .sekreto import SekretoError, envkey, parsedotenv
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Provider:
|
|
36
|
+
"""A source of secrets. `lookup` returns the value or None."""
|
|
37
|
+
|
|
38
|
+
def lookup(self, name):
|
|
39
|
+
raise NotImplementedError
|
|
40
|
+
|
|
41
|
+
def describe(self):
|
|
42
|
+
raise NotImplementedError
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class EnvProvider(Provider):
|
|
46
|
+
"""Environment variables: `api.token` from `API_TOKEN`."""
|
|
47
|
+
|
|
48
|
+
def __init__(self, prefix=None, source=None):
|
|
49
|
+
self.prefix = prefix
|
|
50
|
+
self.source = source if source is not None else os.environ
|
|
51
|
+
|
|
52
|
+
def lookup(self, name):
|
|
53
|
+
value = self.source.get(envkey(name, self.prefix))
|
|
54
|
+
return None if value is None else str(value)
|
|
55
|
+
|
|
56
|
+
def describe(self):
|
|
57
|
+
return 'env' + (':' + self.prefix if self.prefix else '')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class DotenvProvider(Provider):
|
|
61
|
+
"""A `.env` file, read once, keyed exactly like the environment."""
|
|
62
|
+
|
|
63
|
+
def __init__(self, file, prefix=None):
|
|
64
|
+
self.file = file
|
|
65
|
+
self.prefix = prefix
|
|
66
|
+
self.values = None
|
|
67
|
+
|
|
68
|
+
def load(self):
|
|
69
|
+
if self.values is None:
|
|
70
|
+
try:
|
|
71
|
+
with open(self.file, 'r', encoding='utf8') as handle:
|
|
72
|
+
self.values = parsedotenv(handle.read())
|
|
73
|
+
except (FileNotFoundError, NotADirectoryError):
|
|
74
|
+
# An absent file - or an absent directory - means "no
|
|
75
|
+
# secrets here", exactly like FileProvider. Anything else
|
|
76
|
+
# (permission denied, an unreadable mount) is a store that
|
|
77
|
+
# could not answer, and swallowing it would fall through to
|
|
78
|
+
# a weaker store.
|
|
79
|
+
self.values = {}
|
|
80
|
+
except OSError as err:
|
|
81
|
+
raise SekretoError(
|
|
82
|
+
'sekreto: dotenv provider cannot read ' + self.file + ': ' + str(err)
|
|
83
|
+
)
|
|
84
|
+
return self.values
|
|
85
|
+
|
|
86
|
+
def lookup(self, name):
|
|
87
|
+
return self.load().get(envkey(name, self.prefix))
|
|
88
|
+
|
|
89
|
+
def describe(self):
|
|
90
|
+
return 'dotenv:' + self.file
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class MemoryProvider(Provider):
|
|
94
|
+
"""Literal values, keyed like environment variables. The spec uses this
|
|
95
|
+
to test chain behaviour without touching the outside world."""
|
|
96
|
+
|
|
97
|
+
def __init__(self, values, prefix=None):
|
|
98
|
+
self.values = values or {}
|
|
99
|
+
self.prefix = prefix
|
|
100
|
+
|
|
101
|
+
def lookup(self, name):
|
|
102
|
+
return self.values.get(envkey(name, self.prefix))
|
|
103
|
+
|
|
104
|
+
def describe(self):
|
|
105
|
+
return 'memory' + (':' + self.prefix if self.prefix else '')
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class FileProvider(Provider):
|
|
109
|
+
"""A directory of one-secret-per-file entries, keyed like the
|
|
110
|
+
environment: `api.token` reads `<dir>/API_TOKEN`.
|
|
111
|
+
|
|
112
|
+
This is the shape of a mounted Kubernetes Secret, a Docker or Swarm
|
|
113
|
+
secret, and a systemd credentials directory, so those all work with no
|
|
114
|
+
further configuration. One trailing newline is stripped - tools that
|
|
115
|
+
write these files disagree about it, and a newline is never part of a
|
|
116
|
+
secret on purpose.
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
def __init__(self, dir, prefix=None):
|
|
120
|
+
self.dir = dir
|
|
121
|
+
self.prefix = prefix
|
|
122
|
+
|
|
123
|
+
def lookup(self, name):
|
|
124
|
+
file = os.path.join(self.dir, envkey(name, self.prefix))
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
with open(file, 'r', encoding='utf8') as handle:
|
|
128
|
+
text = handle.read()
|
|
129
|
+
except (FileNotFoundError, NotADirectoryError):
|
|
130
|
+
# An absent file - or an absent directory - means "no secrets
|
|
131
|
+
# here", exactly like a missing .env. Anything else (permission
|
|
132
|
+
# denied, an unreadable mount) is a store that could not answer.
|
|
133
|
+
return None
|
|
134
|
+
except OSError as err:
|
|
135
|
+
raise SekretoError(
|
|
136
|
+
'sekreto: file provider cannot read ' + file + ': ' + str(err)
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
if text.endswith('\r\n'):
|
|
140
|
+
return text[:-2]
|
|
141
|
+
if text.endswith('\n'):
|
|
142
|
+
return text[:-1]
|
|
143
|
+
return text
|
|
144
|
+
|
|
145
|
+
def describe(self):
|
|
146
|
+
return 'file:' + self.dir
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
# --- providers as voxgig/plugin definitions -------------------------------
|
|
150
|
+
|
|
151
|
+
# The export key under which a provider definition publishes the provider
|
|
152
|
+
# it built. `Sekreto` reads `<ref>/provider` off the host.
|
|
153
|
+
PROVIDER_EXPORT = 'provider'
|
|
154
|
+
|
|
155
|
+
# The voxgig/plugin error code a SekretoError travels under when it is
|
|
156
|
+
# raised inside a definition's `define`.
|
|
157
|
+
#
|
|
158
|
+
# plugin wraps a code-less error raised by a callback as
|
|
159
|
+
# `plugin_define_failed`, and keeps an error that already carries a code.
|
|
160
|
+
# A provider that refuses its own configuration - `kv: 3`, a missing
|
|
161
|
+
# project - raises a SekretoError, and that message is pinned by the spec
|
|
162
|
+
# byte for byte, so it must come back out of the host exactly as it went
|
|
163
|
+
# in. `providerplugin` gives it this code on the way in; `Sekreto` turns
|
|
164
|
+
# it back into a SekretoError on the way out.
|
|
165
|
+
ERROR_CODE = 'sekreto_error'
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def providerplugin(kind, make):
|
|
169
|
+
"""A provider kind, as a voxgig/plugin definition.
|
|
170
|
+
|
|
171
|
+
This is the whole bridge between the two libraries. The definition's
|
|
172
|
+
`name` is the `kind` a spec names; its `define` reads the spec as
|
|
173
|
+
`inst.options`, builds the provider with `make`, and exports it.
|
|
174
|
+
Nothing runs at `activate`: a provider opens nothing until its first
|
|
175
|
+
lookup, so there is nothing to capture - a provider that does hold a
|
|
176
|
+
resource acquires it there and lets the instance scope unwind it.
|
|
177
|
+
|
|
178
|
+
Every built-in and every plugin is made this way, so a custom
|
|
179
|
+
provider kind is one call:
|
|
180
|
+
|
|
181
|
+
providerplugin('mystore', lambda spec: MyStore(spec.get('addr')))
|
|
182
|
+
"""
|
|
183
|
+
def define(inst):
|
|
184
|
+
try:
|
|
185
|
+
provider = make(inst.options)
|
|
186
|
+
except SekretoError as err:
|
|
187
|
+
raise PluginError(ERROR_CODE, str(err), {'ref': inst.ref, 'cause': str(err)})
|
|
188
|
+
inst.export(PROVIDER_EXPORT, provider)
|
|
189
|
+
|
|
190
|
+
return {'name': kind, 'define': define}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# The four built-in provider kinds - the same four in every port. What
|
|
194
|
+
# makes a kind built in is that it needs nothing of the platform beyond
|
|
195
|
+
# reading a local file: no socket, no TLS, no crypto, no child process.
|
|
196
|
+
BUILTINS = [
|
|
197
|
+
providerplugin('env', lambda spec: EnvProvider(spec.get('prefix'))),
|
|
198
|
+
providerplugin('memory', lambda spec: MemoryProvider(spec.get('values') or {}, spec.get('prefix'))),
|
|
199
|
+
providerplugin('dotenv', lambda spec: DotenvProvider(spec.get('file') or '.env', spec.get('prefix'))),
|
|
200
|
+
providerplugin('file', lambda spec: FileProvider(spec.get('dir') or '', spec.get('prefix'))),
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
# Every kind this library ships, built in or as a plugin, so that an
|
|
204
|
+
# unknown kind can be told from a plugin that was not loaded.
|
|
205
|
+
KINDS = {
|
|
206
|
+
'builtin': ['env', 'memory', 'dotenv', 'file'],
|
|
207
|
+
'plugin': [
|
|
208
|
+
'hashicorp', 'boru', 'awssecrets', 'awsparams', 'gcpsecrets',
|
|
209
|
+
'azuresecrets', 'onepassword', 'doppler', 'infisical', 'secretspec',
|
|
210
|
+
],
|
|
211
|
+
}
|