@voxgig/sdkgen 4.8.1 → 4.8.3
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 +2 -2
- 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/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/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 +209 -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 +151 -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 +439 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -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 +897 -0
- package/project/.sdk/tm/go/test/omni/util.go +360 -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 +613 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -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 +74 -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 +152 -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 +92 -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 +455 -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 +566 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -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/test/primary_utility_test.zig +1 -1
- package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
- 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
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/httpjson/httpjson.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The HTTP half of every plugin that speaks to a store over the wire, in
|
|
5
|
+
// one place and OUTSIDE the core: a chain of built-ins never links this
|
|
6
|
+
// package, which is what keeps `net/http` out of a binary whose secrets
|
|
7
|
+
// come from the environment and a .env file.
|
|
8
|
+
//
|
|
9
|
+
// One JSON round-trip, bounded in time and in size, refusing redirects and
|
|
10
|
+
// ignoring proxies; and the small helpers every store client needs to read
|
|
11
|
+
// a decoded body. A port of typescript/plugins/httpjson.ts.
|
|
12
|
+
package httpjson
|
|
13
|
+
|
|
14
|
+
import (
|
|
15
|
+
"encoding/json"
|
|
16
|
+
"io"
|
|
17
|
+
"net/http"
|
|
18
|
+
"strconv"
|
|
19
|
+
"strings"
|
|
20
|
+
"time"
|
|
21
|
+
|
|
22
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
// A vault API never legitimately redirects, and a followed redirect would
|
|
26
|
+
// carry X-Vault-Token to the redirect's host (and could downgrade https to
|
|
27
|
+
// http) - checkaddr only validates the configured address, so it cannot
|
|
28
|
+
// see the target. Refuse to follow one.
|
|
29
|
+
var client = &http.Client{
|
|
30
|
+
Timeout: 10 * time.Second,
|
|
31
|
+
CheckRedirect: func(_ *http.Request, _ []*http.Request) error {
|
|
32
|
+
return http.ErrUseLastResponse
|
|
33
|
+
},
|
|
34
|
+
// A secrets client dials the address it was configured with and nowhere
|
|
35
|
+
// else. http.DefaultTransport reads HTTP_PROXY; its resolver exempts
|
|
36
|
+
// loopback, so the local dev vault was never exposed - but the GCP and
|
|
37
|
+
// Azure metadata endpoints are not loopback, and the access tokens they
|
|
38
|
+
// return would have gone through whatever the variable named, which can
|
|
39
|
+
// read them and substitute its own.
|
|
40
|
+
Transport: &http.Transport{Proxy: nil},
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// maxbody is how much of a response body will be read before the store is
|
|
44
|
+
// treated as having answered incoherently. Ports carry the same bound.
|
|
45
|
+
//
|
|
46
|
+
// Far above anything real - the largest legitimate payload this library
|
|
47
|
+
// fetches is Doppler's whole-config download, measured in kilobytes. A bound
|
|
48
|
+
// is needed because the TIMEOUT is not one: ten seconds on a loopback or
|
|
49
|
+
// datacentre link is gigabytes, and the body is accumulated in memory before
|
|
50
|
+
// it is parsed. This runs on an application's startup path, so the failure is
|
|
51
|
+
// the application never starting.
|
|
52
|
+
const maxbody = 8 * 1024 * 1024
|
|
53
|
+
|
|
54
|
+
// SafeURL is a url with its query string removed, for messages.
|
|
55
|
+
//
|
|
56
|
+
// A query here carries the vault path, the secret name or a filter -
|
|
57
|
+
// `secretPath=/prod/payments/stripe` - which does not belong in a log or a
|
|
58
|
+
// stack trace. Every message in this file goes through it.
|
|
59
|
+
//
|
|
60
|
+
// It exists because the obvious spelling was silently defeated: the messages
|
|
61
|
+
// used to strip the query themselves and then append err.Error(), and a
|
|
62
|
+
// *url.Error prints as `Get "<full url>": <reason>` - putting the query
|
|
63
|
+
// straight back. Stripping in one place, and using it on the wrapped error
|
|
64
|
+
// too, is what makes the intent hold.
|
|
65
|
+
func SafeURL(target string) string {
|
|
66
|
+
return strings.SplitN(target, "?", 2)[0]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Call makes one JSON round-trip, returning the status and decoded
|
|
70
|
+
// body. Network failure is always an error - an unreachable store is a
|
|
71
|
+
// store that could not answer.
|
|
72
|
+
func Call(method string, target string, headers map[string]string, payload string) (int, any, error) {
|
|
73
|
+
var reader io.Reader
|
|
74
|
+
if "" != payload {
|
|
75
|
+
reader = strings.NewReader(payload)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
request, err := http.NewRequest(method, target, reader)
|
|
79
|
+
if nil != err {
|
|
80
|
+
return 0, nil, sekreto.Fail("sekreto: bad url: " + SafeURL(target))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
for key, value := range headers {
|
|
84
|
+
request.Header.Set(key, value)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
response, err := client.Do(request)
|
|
88
|
+
if nil != err {
|
|
89
|
+
// The error is scrubbed too, not just the prefix: *url.Error prints
|
|
90
|
+
// as `Get "<full url>": <reason>`, so appending it verbatim undid
|
|
91
|
+
// the stripping on the line above.
|
|
92
|
+
return 0, nil, sekreto.Fail("sekreto: cannot reach " + SafeURL(target) + ": " +
|
|
93
|
+
strings.ReplaceAll(err.Error(), target, SafeURL(target)))
|
|
94
|
+
}
|
|
95
|
+
defer response.Body.Close()
|
|
96
|
+
|
|
97
|
+
// LimitReader, not ReadAll: an endless body would otherwise be
|
|
98
|
+
// accumulated in memory until the deadline, which on a loopback or
|
|
99
|
+
// datacentre link is gigabytes. One byte over the bound is enough to
|
|
100
|
+
// know it was exceeded.
|
|
101
|
+
text, err := io.ReadAll(io.LimitReader(response.Body, maxbody+1))
|
|
102
|
+
if nil != err {
|
|
103
|
+
return response.StatusCode, nil, sekreto.Fail("sekreto: cannot read " + SafeURL(target))
|
|
104
|
+
}
|
|
105
|
+
if maxbody < int64(len(text)) {
|
|
106
|
+
return response.StatusCode, nil, sekreto.Fail("sekreto: oversized response from " + SafeURL(target))
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var body any
|
|
110
|
+
if err := json.Unmarshal(text, &body); nil != err {
|
|
111
|
+
// A success status promised JSON; a body that does not parse means
|
|
112
|
+
// the store could not answer coherently, and treating it as a miss
|
|
113
|
+
// would fall through to a weaker store. Error statuses may carry
|
|
114
|
+
// any body - they are decided on status alone.
|
|
115
|
+
if http.StatusOK == response.StatusCode {
|
|
116
|
+
return response.StatusCode, nil, sekreto.Fail("sekreto: malformed response from " +
|
|
117
|
+
SafeURL(target))
|
|
118
|
+
}
|
|
119
|
+
body = nil
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return response.StatusCode, body, nil
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Get GETs a URL, returning the status and decoded body. A 404 is a
|
|
126
|
+
// normal answer here, not a failure: it means the vault has no such secret.
|
|
127
|
+
func Get(target string, headers map[string]string) (int, any, error) {
|
|
128
|
+
return Call(http.MethodGet, target, headers, "")
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Dig walks a decoded JSON body by key, answering nil as soon as a step is
|
|
132
|
+
// not an object or the key is absent.
|
|
133
|
+
func Dig(body any, keys ...string) any {
|
|
134
|
+
node := body
|
|
135
|
+
|
|
136
|
+
for _, key := range keys {
|
|
137
|
+
object, is := node.(map[string]any)
|
|
138
|
+
if !is {
|
|
139
|
+
return nil
|
|
140
|
+
}
|
|
141
|
+
node = object[key]
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return node
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// DigText is Dig rendered as text, with nil (and so any missing step)
|
|
148
|
+
// answering the empty string.
|
|
149
|
+
func DigText(body any, keys ...string) string {
|
|
150
|
+
value := Dig(body, keys...)
|
|
151
|
+
if nil == value {
|
|
152
|
+
return ""
|
|
153
|
+
}
|
|
154
|
+
return ToString(value)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ToNumber reads a decoded JSON value as a number the way the canonical
|
|
158
|
+
// port's Number() does: numbers pass through, numeric strings parse
|
|
159
|
+
// (Azure's IMDS hands expires_in back as a string), and anything else -
|
|
160
|
+
// missing, malformed - is zero.
|
|
161
|
+
func ToNumber(value any) float64 {
|
|
162
|
+
switch typed := value.(type) {
|
|
163
|
+
case float64:
|
|
164
|
+
return typed
|
|
165
|
+
case string:
|
|
166
|
+
number, err := strconv.ParseFloat(typed, 64)
|
|
167
|
+
if nil != err {
|
|
168
|
+
return 0
|
|
169
|
+
}
|
|
170
|
+
return number
|
|
171
|
+
default:
|
|
172
|
+
return 0
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Expiry is the moment a login token should be renewed: shortly before
|
|
177
|
+
// its lifetime (in seconds, from the login response) runs out. A missing
|
|
178
|
+
// or zero lifetime answers the zero time, which means never renew.
|
|
179
|
+
func Expiry(lifetime any) time.Time {
|
|
180
|
+
seconds := ToNumber(lifetime)
|
|
181
|
+
if 0 >= seconds {
|
|
182
|
+
return time.Time{}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
wait := seconds - 60
|
|
186
|
+
if 1 > wait {
|
|
187
|
+
wait = 1
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return time.Now().Add(time.Duration(wait * float64(time.Second)))
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Due reports whether a renewal moment has arrived; the zero time never
|
|
194
|
+
// arrives.
|
|
195
|
+
func Due(renewat time.Time) bool {
|
|
196
|
+
return !renewat.IsZero() && !time.Now().Before(renewat)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ToString renders a decoded JSON scalar the way the canonical port's
|
|
200
|
+
// String() does.
|
|
201
|
+
func ToString(value any) string {
|
|
202
|
+
switch typed := value.(type) {
|
|
203
|
+
case string:
|
|
204
|
+
return typed
|
|
205
|
+
case bool:
|
|
206
|
+
return strconv.FormatBool(typed)
|
|
207
|
+
case float64:
|
|
208
|
+
return strconv.FormatFloat(typed, 'f', -1, 64)
|
|
209
|
+
default:
|
|
210
|
+
text, err := json.Marshal(typed)
|
|
211
|
+
if nil != err {
|
|
212
|
+
return ""
|
|
213
|
+
}
|
|
214
|
+
return string(text)
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Escape is RFC 3986 escaping, which is stricter than most standard
|
|
219
|
+
// escapers: everything but the unreserved characters is escaped, with
|
|
220
|
+
// uppercase hex - `!`, `'`, `(`, `)` and `*` included. It is what AWS
|
|
221
|
+
// signing wants, and what the canonical port's encodeURIComponent-built
|
|
222
|
+
// query strings decode identically from.
|
|
223
|
+
func Escape(text string) string {
|
|
224
|
+
const hexdigit = "0123456789ABCDEF"
|
|
225
|
+
|
|
226
|
+
var out strings.Builder
|
|
227
|
+
|
|
228
|
+
for _, char := range []byte(text) {
|
|
229
|
+
if 'A' <= char && 'Z' >= char || 'a' <= char && 'z' >= char ||
|
|
230
|
+
'0' <= char && '9' >= char ||
|
|
231
|
+
'-' == char || '_' == char || '.' == char || '~' == char {
|
|
232
|
+
out.WriteByte(char)
|
|
233
|
+
} else {
|
|
234
|
+
out.WriteByte('%')
|
|
235
|
+
out.WriteByte(hexdigit[char>>4])
|
|
236
|
+
out.WriteByte(hexdigit[char&0xf])
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return out.String()
|
|
241
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/infisical/infisical.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The infisical plugin: Infisical. Needs HTTPS. A port of
|
|
5
|
+
// typescript/plugins/infisical.ts.
|
|
6
|
+
package infisical
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"encoding/json"
|
|
10
|
+
"net/http"
|
|
11
|
+
"strconv"
|
|
12
|
+
"strings"
|
|
13
|
+
"sync"
|
|
14
|
+
"time"
|
|
15
|
+
|
|
16
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
17
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
// Provider reads Infisical.
|
|
21
|
+
//
|
|
22
|
+
// api.token reads the secret keyed API_TOKEN (Infisical's own convention
|
|
23
|
+
// is environment-style keys) at a secret path in one environment of a
|
|
24
|
+
// project. Auth is a token, or a universal-auth (machine identity) login
|
|
25
|
+
// with clientid/clientsecret.
|
|
26
|
+
type Provider struct {
|
|
27
|
+
Addr string
|
|
28
|
+
Token string
|
|
29
|
+
ClientID string
|
|
30
|
+
ClientSecret string
|
|
31
|
+
Project string
|
|
32
|
+
Environment string
|
|
33
|
+
Path string
|
|
34
|
+
// A configured token is kept forever; a universal-auth token carries
|
|
35
|
+
// expiresIn and is renewed shortly before it runs out.
|
|
36
|
+
livetoken string
|
|
37
|
+
havetoken bool
|
|
38
|
+
renewat time.Time
|
|
39
|
+
mu sync.Mutex
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
func (provider *Provider) login(addr string) (string, error) {
|
|
43
|
+
if "" != provider.Token {
|
|
44
|
+
return provider.Token, nil
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if "" == provider.ClientID || "" == provider.ClientSecret {
|
|
48
|
+
return "", sekreto.Fail("sekreto: infisical: no token and no client credentials")
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
payload, _ := json.Marshal(struct {
|
|
52
|
+
ClientID string `json:"clientId"`
|
|
53
|
+
ClientSecret string `json:"clientSecret"`
|
|
54
|
+
}{ClientID: provider.ClientID, ClientSecret: provider.ClientSecret})
|
|
55
|
+
|
|
56
|
+
status, body, err := httpjson.Call(http.MethodPost, addr+"/api/v1/auth/universal-auth/login",
|
|
57
|
+
map[string]string{"content-type": "application/json"}, string(payload))
|
|
58
|
+
if nil != err {
|
|
59
|
+
return "", err
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
got := httpjson.DigText(body, "accessToken")
|
|
63
|
+
if http.StatusOK != status || "" == got {
|
|
64
|
+
return "", sekreto.Fail("sekreto: infisical login failed: " + strconv.Itoa(status))
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expiresIn"))
|
|
68
|
+
|
|
69
|
+
return got, nil
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
73
|
+
// Serialize per-provider access: Lookup reads and refreshes the cached
|
|
74
|
+
// login token, and a secrets client may resolve from several goroutines.
|
|
75
|
+
provider.mu.Lock()
|
|
76
|
+
defer provider.mu.Unlock()
|
|
77
|
+
|
|
78
|
+
addr := provider.Addr
|
|
79
|
+
if "" == addr {
|
|
80
|
+
addr = "https://app.infisical.com"
|
|
81
|
+
}
|
|
82
|
+
addr = strings.TrimSuffix(addr, "/")
|
|
83
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
84
|
+
return "", false, err
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if "" == provider.Project || "" == provider.Environment {
|
|
88
|
+
return "", false, sekreto.Fail("sekreto: infisical: no project/environment")
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if !provider.havetoken || httpjson.Due(provider.renewat) {
|
|
92
|
+
token, err := provider.login(addr)
|
|
93
|
+
if nil != err {
|
|
94
|
+
return "", false, err
|
|
95
|
+
}
|
|
96
|
+
provider.livetoken = token
|
|
97
|
+
provider.havetoken = true
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
key, err := sekreto.EnvKey(name, "")
|
|
101
|
+
if nil != err {
|
|
102
|
+
return "", false, err
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
path := provider.Path
|
|
106
|
+
if "" == path {
|
|
107
|
+
path = "/"
|
|
108
|
+
}
|
|
109
|
+
target := addr + "/api/v3/secrets/raw/" + key +
|
|
110
|
+
"?workspaceId=" + httpjson.Escape(provider.Project) +
|
|
111
|
+
"&environment=" + httpjson.Escape(provider.Environment) +
|
|
112
|
+
"&secretPath=" + httpjson.Escape(path)
|
|
113
|
+
|
|
114
|
+
status, body, err := httpjson.Get(target,
|
|
115
|
+
map[string]string{"authorization": "Bearer " + provider.livetoken})
|
|
116
|
+
if nil != err {
|
|
117
|
+
return "", false, err
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if http.StatusNotFound == status {
|
|
121
|
+
return "", false, nil
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if http.StatusOK != status {
|
|
125
|
+
return "", false, sekreto.Fail("sekreto: infisical error: " + strconv.Itoa(status))
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
value := httpjson.Dig(body, "secret", "secretValue")
|
|
129
|
+
if nil == value {
|
|
130
|
+
return "", false, nil
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return httpjson.ToString(value), true, nil
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func (provider *Provider) Describe() string {
|
|
137
|
+
return "infisical:" + provider.Project + "/" + provider.Environment
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Plugin is the `infisical` provider kind, as a voxgig/plugin definition.
|
|
141
|
+
var Plugin = sekreto.ProviderPlugin("infisical", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
142
|
+
return &Provider{
|
|
143
|
+
Addr: spec.Addr,
|
|
144
|
+
Token: spec.Token,
|
|
145
|
+
ClientID: spec.ClientID,
|
|
146
|
+
ClientSecret: spec.ClientSecret,
|
|
147
|
+
Project: spec.Project,
|
|
148
|
+
Environment: spec.Environment,
|
|
149
|
+
Path: spec.Path,
|
|
150
|
+
}, nil
|
|
151
|
+
})
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/onepassword/onepassword.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// The onepassword plugin: 1Password, through a Connect server. Needs
|
|
5
|
+
// HTTPS. A port of typescript/plugins/onepassword.ts.
|
|
6
|
+
package onepassword
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"net/http"
|
|
10
|
+
"strconv"
|
|
11
|
+
"strings"
|
|
12
|
+
"sync"
|
|
13
|
+
|
|
14
|
+
"GOMODULE/feature/secrets/plugins/httpjson"
|
|
15
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
// Provider reads 1Password, through a Connect server.
|
|
19
|
+
//
|
|
20
|
+
// The item titled api.token (titles keep their dots), in the named vault.
|
|
21
|
+
// The value is the field with purpose PASSWORD, or the field labelled
|
|
22
|
+
// `value`. A vault that cannot be found is an error - config names it, so
|
|
23
|
+
// its absence is a broken store, not a missing secret.
|
|
24
|
+
type Provider struct {
|
|
25
|
+
Addr string
|
|
26
|
+
Token string
|
|
27
|
+
Vault string
|
|
28
|
+
// Guards the memoised state below: a Sekreto may resolve from several
|
|
29
|
+
// goroutines, and a racy map read is either a crash or a zero value - a
|
|
30
|
+
// MISS where the store does hold the secret, which falls through to a
|
|
31
|
+
// weaker store.
|
|
32
|
+
mu sync.Mutex
|
|
33
|
+
vaultid string
|
|
34
|
+
havevault bool
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
func (provider *Provider) auth() map[string]string {
|
|
38
|
+
return map[string]string{"authorization": "Bearer " + provider.Token}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
func (provider *Provider) resolvevault(addr string) (string, error) {
|
|
42
|
+
want := provider.Vault
|
|
43
|
+
if "" == want {
|
|
44
|
+
return "", sekreto.Fail("sekreto: onepassword: no vault")
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
status, body, err := httpjson.Get(addr+"/v1/vaults", provider.auth())
|
|
48
|
+
if nil != err {
|
|
49
|
+
return "", err
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
list, is := body.([]any)
|
|
53
|
+
if http.StatusOK != status || !is {
|
|
54
|
+
return "", sekreto.Fail("sekreto: onepassword error: " + strconv.Itoa(status) + ": listing vaults")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
for _, entry := range list {
|
|
58
|
+
if want == httpjson.DigText(entry, "id") || want == httpjson.DigText(entry, "name") {
|
|
59
|
+
return httpjson.DigText(entry, "id"), nil
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return "", sekreto.Fail("sekreto: onepassword: no vault named " + want)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
67
|
+
if err := sekreto.CheckName(name); nil != err {
|
|
68
|
+
return "", false, err
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
addr := strings.TrimSuffix(provider.Addr, "/")
|
|
72
|
+
if "" == addr {
|
|
73
|
+
return "", false, sekreto.Fail("sekreto: onepassword: no addr")
|
|
74
|
+
}
|
|
75
|
+
if err := sekreto.CheckAddr(addr); nil != err {
|
|
76
|
+
return "", false, err
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
provider.mu.Lock()
|
|
80
|
+
if !provider.havevault {
|
|
81
|
+
vaultid, err := provider.resolvevault(addr)
|
|
82
|
+
if nil != err {
|
|
83
|
+
provider.mu.Unlock()
|
|
84
|
+
return "", false, err
|
|
85
|
+
}
|
|
86
|
+
provider.vaultid = vaultid
|
|
87
|
+
provider.havevault = true
|
|
88
|
+
}
|
|
89
|
+
vaultid := provider.vaultid
|
|
90
|
+
provider.mu.Unlock()
|
|
91
|
+
|
|
92
|
+
filter := httpjson.Escape(`title eq "` + name + `"`)
|
|
93
|
+
status, body, err := httpjson.Get(
|
|
94
|
+
addr+"/v1/vaults/"+vaultid+"/items?filter="+filter, provider.auth())
|
|
95
|
+
if nil != err {
|
|
96
|
+
return "", false, err
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
found, is := body.([]any)
|
|
100
|
+
if http.StatusOK != status || !is {
|
|
101
|
+
return "", false, sekreto.Fail("sekreto: onepassword error: " + strconv.Itoa(status) +
|
|
102
|
+
": finding " + name)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if 0 == len(found) {
|
|
106
|
+
return "", false, nil
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
itemid := httpjson.DigText(found[0], "id")
|
|
110
|
+
status, body, err = httpjson.Get(
|
|
111
|
+
addr+"/v1/vaults/"+vaultid+"/items/"+itemid, provider.auth())
|
|
112
|
+
if nil != err {
|
|
113
|
+
return "", false, err
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if http.StatusOK != status {
|
|
117
|
+
return "", false, sekreto.Fail("sekreto: onepassword error: " + strconv.Itoa(status) +
|
|
118
|
+
": reading " + name)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fields, _ := httpjson.Dig(body, "fields").([]any)
|
|
122
|
+
|
|
123
|
+
for _, field := range fields {
|
|
124
|
+
if "PASSWORD" == httpjson.DigText(field, "purpose") {
|
|
125
|
+
value := httpjson.Dig(field, "value")
|
|
126
|
+
if nil == value {
|
|
127
|
+
return "", false, nil
|
|
128
|
+
}
|
|
129
|
+
return httpjson.ToString(value), true, nil
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for _, field := range fields {
|
|
133
|
+
if "value" == httpjson.DigText(field, "label") {
|
|
134
|
+
value := httpjson.Dig(field, "value")
|
|
135
|
+
if nil == value {
|
|
136
|
+
return "", false, nil
|
|
137
|
+
}
|
|
138
|
+
return httpjson.ToString(value), true, nil
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return "", false, nil
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func (provider *Provider) Describe() string {
|
|
146
|
+
return "onepassword:" + provider.Vault
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Plugin is the `onepassword` provider kind, as a voxgig/plugin definition.
|
|
150
|
+
var Plugin = sekreto.ProviderPlugin("onepassword", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
151
|
+
return &Provider{Addr: spec.Addr, Token: spec.Token, Vault: spec.Vault}, nil
|
|
152
|
+
})
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/secretspec/secretspec.go)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-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
|
+
package secretspec
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"bytes"
|
|
10
|
+
"errors"
|
|
11
|
+
"os/exec"
|
|
12
|
+
"strconv"
|
|
13
|
+
"strings"
|
|
14
|
+
|
|
15
|
+
"GOMODULE/feature/secrets/sekreto"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
// Provider reads SecretSpec (https://secretspec.dev).
|
|
19
|
+
//
|
|
20
|
+
// SecretSpec is a declaration - a secretspec.toml naming the secrets a
|
|
21
|
+
// project needs - plus a chain of its own backends to satisfy them from.
|
|
22
|
+
// That makes it the same shape as sekreto one level down, and the reason to
|
|
23
|
+
// support it is the same reason sekreto exists: a project that has already
|
|
24
|
+
// declared its secrets there should not have to declare them again here.
|
|
25
|
+
//
|
|
26
|
+
// Read through its CLI, as boru is, because that is the interface it offers
|
|
27
|
+
// a program in another language: `secretspec get API_TOKEN` prints the value
|
|
28
|
+
// on stdout and nothing else. A sekreto name maps to a SecretSpec key
|
|
29
|
+
// exactly as it maps to an environment variable - api.token is API_TOKEN -
|
|
30
|
+
// which is the convention SecretSpec's own examples use.
|
|
31
|
+
//
|
|
32
|
+
// Backend selects one of SecretSpec's backends (--provider, e.g. `keyring`
|
|
33
|
+
// or `dotenv://.env`) and is called Backend here only because Provider
|
|
34
|
+
// already means something else in this library.
|
|
35
|
+
//
|
|
36
|
+
// A reason is required, not optional: SecretSpec records every read in an
|
|
37
|
+
// audit log and refuses to read at all without one. sekreto sends `sekreto`
|
|
38
|
+
// unless told otherwise, so the audit trail says which tool asked.
|
|
39
|
+
type Provider struct {
|
|
40
|
+
Command string
|
|
41
|
+
File string
|
|
42
|
+
Profile string
|
|
43
|
+
Backend string
|
|
44
|
+
Reason string
|
|
45
|
+
Prefix string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
func (provider *Provider) command() string {
|
|
49
|
+
if "" == provider.Command {
|
|
50
|
+
return "secretspec"
|
|
51
|
+
}
|
|
52
|
+
return provider.Command
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
func (provider *Provider) Lookup(name string) (string, bool, error) {
|
|
56
|
+
key, err := sekreto.EnvKey(name, provider.Prefix)
|
|
57
|
+
if nil != err {
|
|
58
|
+
return "", false, err
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
args := []string{}
|
|
62
|
+
if "" != provider.File {
|
|
63
|
+
args = append(args, "--file", provider.File)
|
|
64
|
+
}
|
|
65
|
+
args = append(args, "get", key)
|
|
66
|
+
if "" != provider.Backend {
|
|
67
|
+
args = append(args, "--provider", provider.Backend)
|
|
68
|
+
}
|
|
69
|
+
if "" != provider.Profile {
|
|
70
|
+
args = append(args, "--profile", provider.Profile)
|
|
71
|
+
}
|
|
72
|
+
reason := provider.Reason
|
|
73
|
+
if "" == reason {
|
|
74
|
+
reason = "sekreto"
|
|
75
|
+
}
|
|
76
|
+
args = append(args, "--reason", reason)
|
|
77
|
+
|
|
78
|
+
run := exec.Command(provider.command(), args...)
|
|
79
|
+
|
|
80
|
+
var out, errout bytes.Buffer
|
|
81
|
+
run.Stdout = &out
|
|
82
|
+
run.Stderr = &errout
|
|
83
|
+
|
|
84
|
+
runerr := run.Run()
|
|
85
|
+
|
|
86
|
+
if nil == runerr {
|
|
87
|
+
// The value and one newline, and nothing else.
|
|
88
|
+
return strings.TrimSuffix(out.String(), "\n"), true, nil
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var exiterr *exec.ExitError
|
|
92
|
+
if !errors.As(runerr, &exiterr) {
|
|
93
|
+
return "", false, sekreto.Fail("sekreto: cannot run " + provider.command() + ": " + runerr.Error())
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
why := strings.TrimSpace(errout.String())
|
|
97
|
+
|
|
98
|
+
if secretspecmiss(why, key) {
|
|
99
|
+
return "", false, nil
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if "" == why {
|
|
103
|
+
why = "exit " + strconv.Itoa(exiterr.ExitCode())
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return "", false, sekreto.Fail("sekreto: secretspec error: " + why)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
func (provider *Provider) Describe() string {
|
|
110
|
+
if "" != provider.Backend {
|
|
111
|
+
return "secretspec:" + provider.Backend
|
|
112
|
+
}
|
|
113
|
+
return "secretspec"
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// secretspecmiss reports whether a SecretSpec failure means "no such secret"
|
|
117
|
+
// rather than "I could not answer".
|
|
118
|
+
//
|
|
119
|
+
// SecretSpec says `Secret 'API_TOKEN' not found` for both a name it does not
|
|
120
|
+
// declare and one declared with no value, and both are misses: this store
|
|
121
|
+
// does not hold it, so the chain carries on.
|
|
122
|
+
//
|
|
123
|
+
// MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
|
|
124
|
+
// `Provider backend 'keyring' not found`, which is a store that could not
|
|
125
|
+
// answer at all - and reading that as a miss is the worst failure this
|
|
126
|
+
// library has, because the chain then falls through to a weaker store
|
|
127
|
+
// without saying so. The key is required to appear, so the two cannot be
|
|
128
|
+
// confused.
|
|
129
|
+
func secretspecmiss(why string, key string) bool {
|
|
130
|
+
return strings.Contains(why, "Secret '"+key+"' not found")
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Plugin is the `secretspec` provider kind, as a voxgig/plugin definition.
|
|
134
|
+
var Plugin = sekreto.ProviderPlugin("secretspec", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
|
|
135
|
+
return &Provider{
|
|
136
|
+
Command: spec.Command,
|
|
137
|
+
File: spec.File,
|
|
138
|
+
Profile: spec.Profile,
|
|
139
|
+
Backend: spec.Backend,
|
|
140
|
+
Reason: spec.Reason,
|
|
141
|
+
Prefix: spec.Prefix,
|
|
142
|
+
}, nil
|
|
143
|
+
})
|