@voxgig/sdkgen 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
(* VENDORED: @voxgig/plugin sdk-20260908-1556-0 (ocaml/src/value.ml) *)
|
|
2
|
+
(* Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0] *)
|
|
3
|
+
(* License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream. *)
|
|
4
|
+
(* The dynamic value, and the JSON reader that fills it (§16).
|
|
5
|
+
|
|
6
|
+
NO DEPENDENCIES, not even a JSON library: §16 permits exactly one
|
|
7
|
+
runtime dependency (voxgig/struct) and OCaml has no port of it, so
|
|
8
|
+
the corpus JSON is parsed here. A package graph is also a supply
|
|
9
|
+
chain. This port builds with `ocamlfind` absent and links only
|
|
10
|
+
`str.cmxa`, which ships with the compiler.
|
|
11
|
+
|
|
12
|
+
A MUTABLE VALUE, WHICH IS NOT THE OBVIOUS CHOICE IN ML. The corpus
|
|
13
|
+
pins behaviour that depends on aliasing: §9.4's `refill` empties an
|
|
14
|
+
options map and refills it *in place* precisely so a definition's
|
|
15
|
+
callbacks, which closed over that map at `define`, read the new
|
|
16
|
+
values. An immutable map would make `refill` a rebinding the
|
|
17
|
+
callbacks never see, and `apply/idempotent` would fail. So maps and
|
|
18
|
+
lists are mutable, and the persistence ML would prefer is spent
|
|
19
|
+
where it belongs: in `clone`.
|
|
20
|
+
|
|
21
|
+
A MAP PRESERVES INSERTION ORDER AND SORTS ON DEMAND. §4 rule 4 makes
|
|
22
|
+
order observable in several places (`keys` is sorted, `pos` is the
|
|
23
|
+
sorted-ref index), so both orders have to be available and the code
|
|
24
|
+
has to say which it means at each use. *)
|
|
25
|
+
|
|
26
|
+
type t =
|
|
27
|
+
| Null
|
|
28
|
+
| Bool of bool
|
|
29
|
+
| Num of float
|
|
30
|
+
| Str of string
|
|
31
|
+
| List of t list ref
|
|
32
|
+
| Map of (string * t) list ref
|
|
33
|
+
|
|
34
|
+
(* NONE means "nothing"; SOME NULL means "JSON null". They are
|
|
35
|
+
different answers and several places need both: a `bail` binding
|
|
36
|
+
declining is not one answering null, and a missing export is not an
|
|
37
|
+
export of null. *)
|
|
38
|
+
type opt = t option
|
|
39
|
+
|
|
40
|
+
let vnull = Null
|
|
41
|
+
let vbool b = Bool b
|
|
42
|
+
let vnum n = Num n
|
|
43
|
+
let vstr s = Str s
|
|
44
|
+
let vlist () = List (ref [])
|
|
45
|
+
let vmap () = Map (ref [])
|
|
46
|
+
|
|
47
|
+
let oflist items = List (ref items)
|
|
48
|
+
|
|
49
|
+
let is_null = function Null -> true | _ -> false
|
|
50
|
+
let is_bool = function Bool _ -> true | _ -> false
|
|
51
|
+
let is_num = function Num _ -> true | _ -> false
|
|
52
|
+
let is_str = function Str _ -> true | _ -> false
|
|
53
|
+
let is_list = function List _ -> true | _ -> false
|
|
54
|
+
let is_map = function Map _ -> true | _ -> false
|
|
55
|
+
|
|
56
|
+
(* `get` answers Null for a missing key AND for a key holding JSON
|
|
57
|
+
null; `has` distinguishes them, which is what §9.1's "an authored
|
|
58
|
+
null is not an absent key" needs. *)
|
|
59
|
+
let get v key =
|
|
60
|
+
match v with
|
|
61
|
+
| Map m -> (try List.assoc key !m with Not_found -> Null)
|
|
62
|
+
| _ -> Null
|
|
63
|
+
|
|
64
|
+
let has v key =
|
|
65
|
+
match v with Map m -> List.mem_assoc key !m | _ -> false
|
|
66
|
+
|
|
67
|
+
let set v key value =
|
|
68
|
+
match v with
|
|
69
|
+
| Map m ->
|
|
70
|
+
if List.mem_assoc key !m then
|
|
71
|
+
m := List.map (fun (k, old) -> if k = key then (k, value) else (k, old)) !m
|
|
72
|
+
else m := !m @ [ (key, value) ]
|
|
73
|
+
| _ -> ()
|
|
74
|
+
|
|
75
|
+
let del v key =
|
|
76
|
+
match v with Map m -> m := List.remove_assoc key !m | _ -> ()
|
|
77
|
+
|
|
78
|
+
let at v i =
|
|
79
|
+
match v with
|
|
80
|
+
| List l -> (try List.nth !l i with _ -> Null)
|
|
81
|
+
| _ -> Null
|
|
82
|
+
|
|
83
|
+
let push v item = match v with List l -> l := !l @ [ item ] | _ -> ()
|
|
84
|
+
|
|
85
|
+
let len = function
|
|
86
|
+
| List l -> List.length !l
|
|
87
|
+
| Map m -> List.length !m
|
|
88
|
+
| _ -> 0
|
|
89
|
+
|
|
90
|
+
let items = function List l -> !l | _ -> []
|
|
91
|
+
|
|
92
|
+
let as_str = function Str s -> s | _ -> ""
|
|
93
|
+
let as_num = function Num n -> n | _ -> 0.0
|
|
94
|
+
let as_bool = function Bool b -> b | _ -> false
|
|
95
|
+
|
|
96
|
+
(* Keys in INSERTION order. *)
|
|
97
|
+
let keys = function Map m -> List.map fst !m | _ -> []
|
|
98
|
+
|
|
99
|
+
(* Keys SORTED by byte order — §4 rule 4's deterministic walk.
|
|
100
|
+
`String.compare` is byte-wise, not locale-aware, which is what every
|
|
101
|
+
other port's sort does. *)
|
|
102
|
+
let sortedkeys v = List.sort compare (keys v)
|
|
103
|
+
|
|
104
|
+
(* §4 rule 4: truthiness is JSON's. *)
|
|
105
|
+
let truthy = function
|
|
106
|
+
| Null -> false
|
|
107
|
+
| Bool b -> b
|
|
108
|
+
| Num n -> 0.0 <> n
|
|
109
|
+
| Str s -> "" <> s
|
|
110
|
+
| _ -> true
|
|
111
|
+
|
|
112
|
+
(* Deep equality INCLUDING JSON type, which is the half that matters:
|
|
113
|
+
half the ports are written in languages whose `==` says `true == 1`,
|
|
114
|
+
and `capability/match` exists to catch exactly that. OCaml's
|
|
115
|
+
structural `=` would answer this correctly for these constructors,
|
|
116
|
+
but it is written out because it must not silently start comparing
|
|
117
|
+
the `ref` cells by identity if the representation changes. *)
|
|
118
|
+
let rec same a b =
|
|
119
|
+
match (a, b) with
|
|
120
|
+
| Null, Null -> true
|
|
121
|
+
| Bool x, Bool y -> x = y
|
|
122
|
+
| Num x, Num y -> x = y
|
|
123
|
+
| Str x, Str y -> x = y
|
|
124
|
+
| List x, List y ->
|
|
125
|
+
List.length !x = List.length !y && List.for_all2 same !x !y
|
|
126
|
+
| Map x, Map y ->
|
|
127
|
+
List.length !x = List.length !y
|
|
128
|
+
&& List.for_all
|
|
129
|
+
(fun (k, v) -> List.mem_assoc k !y && same v (List.assoc k !y))
|
|
130
|
+
!x
|
|
131
|
+
| _ -> false
|
|
132
|
+
|
|
133
|
+
let rec clone = function
|
|
134
|
+
| List l -> List (ref (List.map clone !l))
|
|
135
|
+
| Map m -> Map (ref (List.map (fun (k, v) -> (k, clone v)) !m))
|
|
136
|
+
| v -> v
|
|
137
|
+
|
|
138
|
+
(* --- json ----------------------------------------------------------- *)
|
|
139
|
+
|
|
140
|
+
(* An integral float renders as an integer: the corpus's expected values
|
|
141
|
+
are written `1`, not `1.0`, and a port that emits the latter fails
|
|
142
|
+
every comparison for a reason that has nothing to do with the
|
|
143
|
+
behaviour under test. *)
|
|
144
|
+
let numstr n =
|
|
145
|
+
if Float.is_integer n && Float.abs n < 1e18 then
|
|
146
|
+
Printf.sprintf "%.0f" n
|
|
147
|
+
else
|
|
148
|
+
let s = Printf.sprintf "%.17g" n in
|
|
149
|
+
s
|
|
150
|
+
|
|
151
|
+
let escape buf s =
|
|
152
|
+
Buffer.add_char buf '"';
|
|
153
|
+
String.iter
|
|
154
|
+
(fun c ->
|
|
155
|
+
match c with
|
|
156
|
+
| '"' -> Buffer.add_string buf "\\\""
|
|
157
|
+
| '\\' -> Buffer.add_string buf "\\\\"
|
|
158
|
+
| '\n' -> Buffer.add_string buf "\\n"
|
|
159
|
+
| '\r' -> Buffer.add_string buf "\\r"
|
|
160
|
+
| '\t' -> Buffer.add_string buf "\\t"
|
|
161
|
+
| '\b' -> Buffer.add_string buf "\\b"
|
|
162
|
+
| '\012' -> Buffer.add_string buf "\\f"
|
|
163
|
+
| c when Char.code c < 0x20 ->
|
|
164
|
+
Buffer.add_string buf (Printf.sprintf "\\u%04x" (Char.code c))
|
|
165
|
+
| c -> Buffer.add_char buf c)
|
|
166
|
+
s;
|
|
167
|
+
Buffer.add_char buf '"'
|
|
168
|
+
|
|
169
|
+
let rec render buf = function
|
|
170
|
+
| Null -> Buffer.add_string buf "null"
|
|
171
|
+
| Bool true -> Buffer.add_string buf "true"
|
|
172
|
+
| Bool false -> Buffer.add_string buf "false"
|
|
173
|
+
| Num n -> Buffer.add_string buf (numstr n)
|
|
174
|
+
| Str s -> escape buf s
|
|
175
|
+
| List l ->
|
|
176
|
+
Buffer.add_char buf '[';
|
|
177
|
+
List.iteri
|
|
178
|
+
(fun i v ->
|
|
179
|
+
if 0 < i then Buffer.add_char buf ',';
|
|
180
|
+
render buf v)
|
|
181
|
+
!l;
|
|
182
|
+
Buffer.add_char buf ']'
|
|
183
|
+
| Map _ as m ->
|
|
184
|
+
(* SORTED, so two values that are `same` render identically. *)
|
|
185
|
+
Buffer.add_char buf '{';
|
|
186
|
+
List.iteri
|
|
187
|
+
(fun i k ->
|
|
188
|
+
if 0 < i then Buffer.add_char buf ',';
|
|
189
|
+
escape buf k;
|
|
190
|
+
Buffer.add_char buf ':';
|
|
191
|
+
render buf (get m k))
|
|
192
|
+
(sortedkeys m);
|
|
193
|
+
Buffer.add_char buf '}'
|
|
194
|
+
|
|
195
|
+
let json v =
|
|
196
|
+
let buf = Buffer.create 256 in
|
|
197
|
+
render buf v;
|
|
198
|
+
Buffer.contents buf
|
|
199
|
+
|
|
200
|
+
exception Parse_error of string
|
|
201
|
+
|
|
202
|
+
let parse text =
|
|
203
|
+
let n = String.length text in
|
|
204
|
+
let i = ref 0 in
|
|
205
|
+
let fail msg = raise (Parse_error msg) in
|
|
206
|
+
let peek () = if !i < n then Some text.[!i] else None in
|
|
207
|
+
let skip () =
|
|
208
|
+
while
|
|
209
|
+
!i < n
|
|
210
|
+
&& (' ' = text.[!i] || '\t' = text.[!i] || '\n' = text.[!i]
|
|
211
|
+
|| '\r' = text.[!i])
|
|
212
|
+
do
|
|
213
|
+
incr i
|
|
214
|
+
done
|
|
215
|
+
in
|
|
216
|
+
let lit word =
|
|
217
|
+
let l = String.length word in
|
|
218
|
+
if !i + l <= n && String.sub text !i l = word then (i := !i + l; true)
|
|
219
|
+
else false
|
|
220
|
+
in
|
|
221
|
+
let utf8 buf cp =
|
|
222
|
+
if cp < 0x80 then Buffer.add_char buf (Char.chr cp)
|
|
223
|
+
else if cp < 0x800 then begin
|
|
224
|
+
Buffer.add_char buf (Char.chr (0xC0 lor (cp lsr 6)));
|
|
225
|
+
Buffer.add_char buf (Char.chr (0x80 lor (cp land 0x3F)))
|
|
226
|
+
end
|
|
227
|
+
else if cp < 0x10000 then begin
|
|
228
|
+
Buffer.add_char buf (Char.chr (0xE0 lor (cp lsr 12)));
|
|
229
|
+
Buffer.add_char buf (Char.chr (0x80 lor ((cp lsr 6) land 0x3F)));
|
|
230
|
+
Buffer.add_char buf (Char.chr (0x80 lor (cp land 0x3F)))
|
|
231
|
+
end
|
|
232
|
+
else begin
|
|
233
|
+
Buffer.add_char buf (Char.chr (0xF0 lor (cp lsr 18)));
|
|
234
|
+
Buffer.add_char buf (Char.chr (0x80 lor ((cp lsr 12) land 0x3F)));
|
|
235
|
+
Buffer.add_char buf (Char.chr (0x80 lor ((cp lsr 6) land 0x3F)));
|
|
236
|
+
Buffer.add_char buf (Char.chr (0x80 lor (cp land 0x3F)))
|
|
237
|
+
end
|
|
238
|
+
in
|
|
239
|
+
let hex4 () =
|
|
240
|
+
if !i + 4 > n then fail "bad \\u escape";
|
|
241
|
+
let acc = ref 0 in
|
|
242
|
+
for _ = 1 to 4 do
|
|
243
|
+
let c = text.[!i] in
|
|
244
|
+
let d =
|
|
245
|
+
if '0' <= c && c <= '9' then Char.code c - Char.code '0'
|
|
246
|
+
else if 'a' <= c && c <= 'f' then Char.code c - Char.code 'a' + 10
|
|
247
|
+
else if 'A' <= c && c <= 'F' then Char.code c - Char.code 'A' + 10
|
|
248
|
+
else fail "bad \\u escape"
|
|
249
|
+
in
|
|
250
|
+
acc := (!acc * 16) + d;
|
|
251
|
+
incr i
|
|
252
|
+
done;
|
|
253
|
+
!acc
|
|
254
|
+
in
|
|
255
|
+
let pstring () =
|
|
256
|
+
if !i >= n || '"' <> text.[!i] then fail "expected a string";
|
|
257
|
+
incr i;
|
|
258
|
+
let buf = Buffer.create 16 in
|
|
259
|
+
let fin = ref false in
|
|
260
|
+
while not !fin do
|
|
261
|
+
if !i >= n then fail "unterminated string";
|
|
262
|
+
let c = text.[!i] in
|
|
263
|
+
if '"' = c then (incr i; fin := true)
|
|
264
|
+
else if '\\' <> c then (Buffer.add_char buf c; incr i)
|
|
265
|
+
else begin
|
|
266
|
+
incr i;
|
|
267
|
+
if !i >= n then fail "unterminated escape";
|
|
268
|
+
let e = text.[!i] in
|
|
269
|
+
incr i;
|
|
270
|
+
match e with
|
|
271
|
+
| '"' -> Buffer.add_char buf '"'
|
|
272
|
+
| '\\' -> Buffer.add_char buf '\\'
|
|
273
|
+
| '/' -> Buffer.add_char buf '/'
|
|
274
|
+
| 'n' -> Buffer.add_char buf '\n'
|
|
275
|
+
| 'r' -> Buffer.add_char buf '\r'
|
|
276
|
+
| 't' -> Buffer.add_char buf '\t'
|
|
277
|
+
| 'b' -> Buffer.add_char buf '\b'
|
|
278
|
+
| 'f' -> Buffer.add_char buf '\012'
|
|
279
|
+
| 'u' ->
|
|
280
|
+
let hi = hex4 () in
|
|
281
|
+
let cp =
|
|
282
|
+
if 0xD800 <= hi && hi <= 0xDBFF && !i + 1 < n && '\\' = text.[!i]
|
|
283
|
+
&& 'u' = text.[!i + 1]
|
|
284
|
+
then begin
|
|
285
|
+
i := !i + 2;
|
|
286
|
+
let lo = hex4 () in
|
|
287
|
+
0x10000 + ((hi - 0xD800) lsl 10) + (lo - 0xDC00)
|
|
288
|
+
end
|
|
289
|
+
else hi
|
|
290
|
+
in
|
|
291
|
+
utf8 buf cp
|
|
292
|
+
| _ -> fail "bad escape"
|
|
293
|
+
end
|
|
294
|
+
done;
|
|
295
|
+
Buffer.contents buf
|
|
296
|
+
in
|
|
297
|
+
let rec value () =
|
|
298
|
+
skip ();
|
|
299
|
+
match peek () with
|
|
300
|
+
| None -> fail "unexpected end of input"
|
|
301
|
+
| Some 'n' -> if lit "null" then Null else fail "bad literal"
|
|
302
|
+
| Some 't' -> if lit "true" then Bool true else fail "bad literal"
|
|
303
|
+
| Some 'f' -> if lit "false" then Bool false else fail "bad literal"
|
|
304
|
+
| Some '"' -> Str (pstring ())
|
|
305
|
+
| Some '[' ->
|
|
306
|
+
incr i;
|
|
307
|
+
let out = vlist () in
|
|
308
|
+
skip ();
|
|
309
|
+
if Some ']' = peek () then (incr i; out)
|
|
310
|
+
else begin
|
|
311
|
+
let fin = ref false in
|
|
312
|
+
while not !fin do
|
|
313
|
+
push out (value ());
|
|
314
|
+
skip ();
|
|
315
|
+
match peek () with
|
|
316
|
+
| Some ',' -> incr i
|
|
317
|
+
| Some ']' -> incr i; fin := true
|
|
318
|
+
| _ -> fail "expected , or ] in array"
|
|
319
|
+
done;
|
|
320
|
+
out
|
|
321
|
+
end
|
|
322
|
+
| Some '{' ->
|
|
323
|
+
incr i;
|
|
324
|
+
let out = vmap () in
|
|
325
|
+
skip ();
|
|
326
|
+
if Some '}' = peek () then (incr i; out)
|
|
327
|
+
else begin
|
|
328
|
+
let fin = ref false in
|
|
329
|
+
while not !fin do
|
|
330
|
+
skip ();
|
|
331
|
+
let key = pstring () in
|
|
332
|
+
skip ();
|
|
333
|
+
if Some ':' <> peek () then fail "expected : in object";
|
|
334
|
+
incr i;
|
|
335
|
+
set out key (value ());
|
|
336
|
+
skip ();
|
|
337
|
+
match peek () with
|
|
338
|
+
| Some ',' -> incr i
|
|
339
|
+
| Some '}' -> incr i; fin := true
|
|
340
|
+
| _ -> fail "expected , or } in object"
|
|
341
|
+
done;
|
|
342
|
+
out
|
|
343
|
+
end
|
|
344
|
+
| Some _ ->
|
|
345
|
+
(* JSON's number grammar is STRICT, and 9.5 makes that observable:
|
|
346
|
+
env values parse as JSON falling back to string, so anything
|
|
347
|
+
this reader accepts loosely silently becomes a number where the
|
|
348
|
+
canonical keeps the authored string. [1e], [1.], [01], [.5] and
|
|
349
|
+
a bare [-] are all errors to JSON.parse; only [-0] and [1e5]
|
|
350
|
+
are not.
|
|
351
|
+
|
|
352
|
+
number = [ '-' ] int [ frac ] [ exp ]
|
|
353
|
+
int = '0' | digit1-9 *digit
|
|
354
|
+
frac = '.' 1*digit
|
|
355
|
+
exp = ('e'|'E') [ '+' | '-' ] 1*digit *)
|
|
356
|
+
let start = !i in
|
|
357
|
+
let digit () = !i < n && '0' <= text.[!i] && text.[!i] <= '9' in
|
|
358
|
+
if Some '-' = peek () then incr i;
|
|
359
|
+
if not (digit ()) then fail "bad number";
|
|
360
|
+
if '0' = text.[!i] then incr i
|
|
361
|
+
else while digit () do incr i done;
|
|
362
|
+
if !i < n && '.' = text.[!i] then begin
|
|
363
|
+
incr i;
|
|
364
|
+
if not (digit ()) then fail "bad number";
|
|
365
|
+
while digit () do incr i done
|
|
366
|
+
end;
|
|
367
|
+
if !i < n && ('e' = text.[!i] || 'E' = text.[!i]) then begin
|
|
368
|
+
incr i;
|
|
369
|
+
if !i < n && ('+' = text.[!i] || '-' = text.[!i]) then incr i;
|
|
370
|
+
if not (digit ()) then fail "bad number";
|
|
371
|
+
while digit () do incr i done
|
|
372
|
+
end;
|
|
373
|
+
if start = !i then fail "unexpected character";
|
|
374
|
+
(* `float_of_string_opt`, not `float_of_string`: a bare `-` or a
|
|
375
|
+
truncated `1e` reaches here from `env`'s parse-or-string
|
|
376
|
+
fallback, and a JSON reader that RAISES on a bad number rather
|
|
377
|
+
than reporting one turns "this env value is a string" into a
|
|
378
|
+
crash. §9.5 says values parse as JSON falling back to string,
|
|
379
|
+
and the fallback can only catch a Parse_error. *)
|
|
380
|
+
match float_of_string_opt (String.sub text start (!i - start)) with
|
|
381
|
+
| Some f -> Num f
|
|
382
|
+
| None -> fail "bad number"
|
|
383
|
+
in
|
|
384
|
+
let out = value () in
|
|
385
|
+
skip ();
|
|
386
|
+
if !i <> n then fail "trailing content";
|
|
387
|
+
out
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
(* VENDORED: @voxgig/plugin sdk-20260908-1556-0 (ocaml/src/version.ml) *)
|
|
2
|
+
(* Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0] *)
|
|
3
|
+
(* License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream. *)
|
|
4
|
+
(* Versions and ranges (§11.2).
|
|
5
|
+
|
|
6
|
+
TWO FIELDS AND ONE PREDICATE. A capability declares `version`, a
|
|
7
|
+
concrete version. A requirement declares `range`. A requirement is
|
|
8
|
+
satisfied when the names match, the `match` passes, and the
|
|
9
|
+
provider's `version` falls inside the requirement's `range`. That is
|
|
10
|
+
the whole rule — there is no third field and no second comparison. *)
|
|
11
|
+
|
|
12
|
+
module V = Value
|
|
13
|
+
|
|
14
|
+
(* A COMPONENT IS BOUNDED, like a ref is (§4's 1024).
|
|
15
|
+
|
|
16
|
+
The grammar admits an unbounded digit sequence, and every language
|
|
17
|
+
then disagrees about what happens past its integer range: JavaScript
|
|
18
|
+
silently loses precision, Go's Atoi errors (and a port ignoring that
|
|
19
|
+
gets 0), C overflows, Python is exact. `satisfies("0",
|
|
20
|
+
"9223372036854775808")` was false in the canonical and true in go,
|
|
21
|
+
from the same corpus.
|
|
22
|
+
|
|
23
|
+
2^31-1 because every port has a signed 32-bit integer, and no real
|
|
24
|
+
version has ever needed more. Found by review of the go port. *)
|
|
25
|
+
let component_max = 2147483647
|
|
26
|
+
|
|
27
|
+
(* `^(\d+)(?:\.(\d+))?(?:\.(\d+))?$`, by hand: three components, digits
|
|
28
|
+
only, no leading sign, no empty component. Written out rather than
|
|
29
|
+
handed to `Str` because the bound above has to be checked per
|
|
30
|
+
component anyway, and a regex that matched then needed re-scanning
|
|
31
|
+
would be the worse of both. Answers None for "not a version", and
|
|
32
|
+
Some (parts, overflow). *)
|
|
33
|
+
let parse3 s =
|
|
34
|
+
let n = String.length s in
|
|
35
|
+
if 0 = n then None
|
|
36
|
+
else begin
|
|
37
|
+
let out = [| 0; 0; 0 |] in
|
|
38
|
+
let overflow = ref false in
|
|
39
|
+
let i = ref 0 in
|
|
40
|
+
let bad = ref false in
|
|
41
|
+
let stopped = ref false in
|
|
42
|
+
let part = ref 0 in
|
|
43
|
+
while (not !bad) && (not !stopped) && !part < 3 do
|
|
44
|
+
if !i >= n then (if 0 < !part then stopped := true else bad := true)
|
|
45
|
+
else begin
|
|
46
|
+
if 0 < !part then
|
|
47
|
+
if '.' <> s.[!i] then bad := true else incr i;
|
|
48
|
+
if not !bad then begin
|
|
49
|
+
let start = !i in
|
|
50
|
+
let acc = ref 0 in
|
|
51
|
+
while !i < n && '0' <= s.[!i] && s.[!i] <= '9' do
|
|
52
|
+
if not !overflow then begin
|
|
53
|
+
acc := (!acc * 10) + (Char.code s.[!i] - Char.code '0');
|
|
54
|
+
if component_max < !acc then overflow := true
|
|
55
|
+
end;
|
|
56
|
+
incr i
|
|
57
|
+
done;
|
|
58
|
+
(* An empty component is not a number. *)
|
|
59
|
+
if start = !i then bad := true else out.(!part) <- !acc;
|
|
60
|
+
incr part
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
done;
|
|
64
|
+
if !bad then None
|
|
65
|
+
else if (not !stopped) && !i <> n then None
|
|
66
|
+
else Some (out, !overflow)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
let triple n =
|
|
70
|
+
V.oflist [ V.vnum (float_of_int n.(0)); V.vnum (float_of_int n.(1));
|
|
71
|
+
V.vnum (float_of_int n.(2)) ]
|
|
72
|
+
|
|
73
|
+
let parserange range =
|
|
74
|
+
if (not (V.is_str range)) || "" = V.as_str range then
|
|
75
|
+
Types.fail "plugin_bad_range"
|
|
76
|
+
("invalid range: " ^ if V.is_str range then V.as_str range else "")
|
|
77
|
+
~details:
|
|
78
|
+
(Types.details1 "range" (if V.is_null range then V.vnull else range));
|
|
79
|
+
let s = V.as_str range in
|
|
80
|
+
(* Two forms and no more (§11.2):
|
|
81
|
+
'2.1' >= 2.1.0 and < 3.0.0
|
|
82
|
+
'~2.1' >= 2.1.0 and < 2.2.0 *)
|
|
83
|
+
let tilde = '~' = s.[0] in
|
|
84
|
+
let body = if tilde then String.sub s 1 (String.length s - 1) else s in
|
|
85
|
+
match parse3 body with
|
|
86
|
+
| None -> Types.fail "plugin_bad_range" ("invalid range: " ^ s)
|
|
87
|
+
~details:(Types.details1 "range" range)
|
|
88
|
+
| Some (_, true) ->
|
|
89
|
+
Types.fail "plugin_bad_range"
|
|
90
|
+
("version component out of range in " ^ s)
|
|
91
|
+
~details:(Types.details1 "range" range)
|
|
92
|
+
| Some (n, false) ->
|
|
93
|
+
let lo = [| n.(0); n.(1); n.(2) |] in
|
|
94
|
+
let hi =
|
|
95
|
+
if tilde then [| n.(0); n.(1) + 1; 0 |] else [| n.(0) + 1; 0; 0 |]
|
|
96
|
+
in
|
|
97
|
+
let out = V.vmap () in
|
|
98
|
+
V.set out "lo" (triple lo);
|
|
99
|
+
V.set out "hi" (triple hi);
|
|
100
|
+
out
|
|
101
|
+
|
|
102
|
+
let parseversion version =
|
|
103
|
+
if not (V.is_str version) then
|
|
104
|
+
Types.fail "plugin_bad_range" "invalid version"
|
|
105
|
+
~details:
|
|
106
|
+
(Types.details1 "version"
|
|
107
|
+
(if V.is_null version then V.vnull else version));
|
|
108
|
+
let s = V.as_str version in
|
|
109
|
+
match parse3 s with
|
|
110
|
+
(* `plugin_bad_range` either way — the same code the rest of the
|
|
111
|
+
grammar's failures use, because "this is not a version I can
|
|
112
|
+
compare" is one fact however it went wrong. *)
|
|
113
|
+
| None -> Types.fail "plugin_bad_range" ("invalid version: " ^ s)
|
|
114
|
+
~details:(Types.details1 "version" version)
|
|
115
|
+
| Some (_, true) ->
|
|
116
|
+
Types.fail "plugin_bad_range"
|
|
117
|
+
("version component out of range in " ^ s)
|
|
118
|
+
~details:(Types.details1 "version" version)
|
|
119
|
+
| Some (n, false) -> triple n
|
|
120
|
+
|
|
121
|
+
let vercmp a b =
|
|
122
|
+
let rec go i =
|
|
123
|
+
if 3 <= i then 0
|
|
124
|
+
else
|
|
125
|
+
let x = V.as_num (V.at a i) and y = V.as_num (V.at b i) in
|
|
126
|
+
if x <> y then if x < y then -1 else 1 else go (i + 1)
|
|
127
|
+
in
|
|
128
|
+
go 0
|
|
129
|
+
|
|
130
|
+
let satisfies version range =
|
|
131
|
+
let v = parseversion version in
|
|
132
|
+
let r = parserange range in
|
|
133
|
+
0 <= vercmp v (V.get r "lo") && 0 > vercmp v (V.get r "hi")
|
|
134
|
+
|
|
135
|
+
(* `satisfies` for the internal callers that treat an unparseable
|
|
136
|
+
version or range as "does not satisfy" — Capability and Graph, both
|
|
137
|
+
of which run over data the corpus has already admitted. *)
|
|
138
|
+
let satisfiesq version range =
|
|
139
|
+
try satisfies version range with Types.Plugin_error _ -> false
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
(* VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (ocaml/plugins/aws.ml) *)
|
|
2
|
+
(* Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0] *)
|
|
3
|
+
(* License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream. *)
|
|
4
|
+
(* The `awssecrets` and `awsparams` provider kinds, as voxgig/plugin
|
|
5
|
+
definitions - and the SigV4 request signing they share.
|
|
6
|
+
|
|
7
|
+
THE CORE OF NO PORT IMPORTS A HASH FUNCTION, which is why `Sigv4` and
|
|
8
|
+
the SHA-256 under it are reached only from here. Two kinds in one
|
|
9
|
+
module because they are one credential story and one signer; the
|
|
10
|
+
catalog still sees two definitions with two names.
|
|
11
|
+
|
|
12
|
+
A port of typescript/plugins/aws.ts, which is canonical. *)
|
|
13
|
+
|
|
14
|
+
open Secret
|
|
15
|
+
open Provider
|
|
16
|
+
open Httpjson
|
|
17
|
+
|
|
18
|
+
(* The `YYYYMMDDTHHMMSSZ` timestamp SigV4 wants, for now. The only place in
|
|
19
|
+
this library that samples the clock for a signature; `Sigv4.sigv4` itself
|
|
20
|
+
never does. *)
|
|
21
|
+
let awsnow () : string =
|
|
22
|
+
let t = Unix.gmtime (Unix.gettimeofday ()) in
|
|
23
|
+
Printf.sprintf "%04d%02d%02dT%02d%02d%02dZ" (t.Unix.tm_year + 1900) (t.Unix.tm_mon + 1)
|
|
24
|
+
t.Unix.tm_mday t.Unix.tm_hour t.Unix.tm_min t.Unix.tm_sec
|
|
25
|
+
|
|
26
|
+
type awsauth = { aregion : string; akeyid : string; asecret : string; asession : string }
|
|
27
|
+
|
|
28
|
+
(* Region and credentials, from config first and the standard AWS_*
|
|
29
|
+
environment variables second - those are AWS's own convention, and a pod
|
|
30
|
+
or CI job that has them set should just work. Missing either is an error:
|
|
31
|
+
an AWS store with no credentials could not answer. *)
|
|
32
|
+
let awsauthof (region : string) (keyid : string) (secret : string) (session : string) : awsauth =
|
|
33
|
+
let useregion = firstof [ region; getenv "AWS_REGION"; getenv "AWS_DEFAULT_REGION" ] in
|
|
34
|
+
let usekeyid = firstof [ keyid; getenv "AWS_ACCESS_KEY_ID" ] in
|
|
35
|
+
let usesecret = firstof [ secret; getenv "AWS_SECRET_ACCESS_KEY" ] in
|
|
36
|
+
let usesession = firstof [ session; getenv "AWS_SESSION_TOKEN" ] in
|
|
37
|
+
|
|
38
|
+
if "" = useregion then fail "sekreto: aws: no region (set region or AWS_REGION)";
|
|
39
|
+
|
|
40
|
+
if "" = usekeyid || "" = usesecret then
|
|
41
|
+
fail "sekreto: aws: no credentials (set keyid/secret or AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)";
|
|
42
|
+
|
|
43
|
+
{ aregion = useregion; akeyid = usekeyid; asecret = usesecret; asession = usesession }
|
|
44
|
+
|
|
45
|
+
(* One signed call to an AWS JSON-1.1 API. *)
|
|
46
|
+
let awscall (region : string) (keyid : string) (secret : string) (session : string)
|
|
47
|
+
(addr : string) (service : string) (target : string) (payload : string) : answer =
|
|
48
|
+
let auth = awsauthof region keyid secret session in
|
|
49
|
+
|
|
50
|
+
(* The China partition lives under its own suffix; every other commercial
|
|
51
|
+
region is plain amazonaws.com. *)
|
|
52
|
+
let suffix =
|
|
53
|
+
if String.starts_with ~prefix:"cn-" auth.aregion then ".amazonaws.com.cn" else ".amazonaws.com"
|
|
54
|
+
in
|
|
55
|
+
let useaddr = firstof [ addr; "https://" ^ service ^ "." ^ auth.aregion ^ suffix ] in
|
|
56
|
+
checkaddr useaddr;
|
|
57
|
+
|
|
58
|
+
let url = trimslash useaddr ^ "/" in
|
|
59
|
+
|
|
60
|
+
let extras =
|
|
61
|
+
[ ("content-type", "application/x-amz-json-1.1"); ("x-amz-target", target) ]
|
|
62
|
+
in
|
|
63
|
+
|
|
64
|
+
let signed =
|
|
65
|
+
Sigv4.sigv4
|
|
66
|
+
{
|
|
67
|
+
Sigv4.smethod = "POST";
|
|
68
|
+
url;
|
|
69
|
+
service;
|
|
70
|
+
region = auth.aregion;
|
|
71
|
+
keyid = auth.akeyid;
|
|
72
|
+
secret = auth.asecret;
|
|
73
|
+
datetime = awsnow ();
|
|
74
|
+
headers = extras;
|
|
75
|
+
body = payload;
|
|
76
|
+
session = auth.asession;
|
|
77
|
+
}
|
|
78
|
+
in
|
|
79
|
+
|
|
80
|
+
fetchjson ~headers:(extras @ signed) ~body:payload "POST" url
|
|
81
|
+
|
|
82
|
+
(* Does this AWS error body name one of the not-found types? Those are a
|
|
83
|
+
miss; every other failure is a store that could not answer. AWS sends
|
|
84
|
+
`com.amazonaws...#ResourceNotFoundException`, so this contains rather
|
|
85
|
+
than equals. *)
|
|
86
|
+
let awsmiss (body : Json.t option) (types : string list) : bool =
|
|
87
|
+
match digstr body [ "__type" ] with
|
|
88
|
+
| Some errtype -> List.exists (fun want -> None <> findsub errtype want) types
|
|
89
|
+
| None -> false
|
|
90
|
+
|
|
91
|
+
(* AWS Secrets Manager.
|
|
92
|
+
|
|
93
|
+
`api.token` reads the secret named `api` (the vaultref path, so
|
|
94
|
+
`db.pass.main` reads `db/pass`) and takes the `token` field of its JSON
|
|
95
|
+
SecretString - the AWS idiom of one JSON map per secret. A SecretString
|
|
96
|
+
that is not JSON is the value itself, under the conventional field
|
|
97
|
+
`value`. *)
|
|
98
|
+
let awssecrets_provider (region : string) (keyid : string) (secret : string) (session : string)
|
|
99
|
+
(addr : string) : provider =
|
|
100
|
+
{
|
|
101
|
+
lookup =
|
|
102
|
+
(fun name ->
|
|
103
|
+
let ref_ = vaultref name in
|
|
104
|
+
|
|
105
|
+
let res =
|
|
106
|
+
awscall region keyid secret session addr "secretsmanager"
|
|
107
|
+
"secretsmanager.GetSecretValue"
|
|
108
|
+
(Json.stringify (Json.obj [ ("SecretId", Json.str ref_.path) ]))
|
|
109
|
+
in
|
|
110
|
+
|
|
111
|
+
if 400 = res.status && awsmiss res.jbody [ "ResourceNotFoundException" ] then None
|
|
112
|
+
else if 200 <> res.status then
|
|
113
|
+
fail ("sekreto: aws secretsmanager error: " ^ string_of_int res.status)
|
|
114
|
+
else
|
|
115
|
+
match digstr res.jbody [ "SecretString" ] with
|
|
116
|
+
| None -> (
|
|
117
|
+
(* A binary secret has no fields to address; only the
|
|
118
|
+
conventional `value` field can mean "the bytes themselves". *)
|
|
119
|
+
match digstr res.jbody [ "SecretBinary" ] with
|
|
120
|
+
| Some raw when "value" = ref_.field -> (
|
|
121
|
+
match Http.unbase64 raw with
|
|
122
|
+
| Some bytes -> Some bytes
|
|
123
|
+
| None -> fail "sekreto: aws secretsmanager: undecodable secret")
|
|
124
|
+
| _ -> None)
|
|
125
|
+
| Some text -> (
|
|
126
|
+
match Json.parse text with
|
|
127
|
+
| Some (Json.Obj fields) -> (
|
|
128
|
+
match List.assoc_opt ref_.field fields with
|
|
129
|
+
| Some value -> Json.text value
|
|
130
|
+
| None -> None)
|
|
131
|
+
(* A plain-string secret is the whole value; it has no named
|
|
132
|
+
fields. *)
|
|
133
|
+
| _ -> if "value" = ref_.field then Some text else None));
|
|
134
|
+
(* Config only, never the environment: `describe` feeds the spec's
|
|
135
|
+
sources group, which must answer the same everywhere. *)
|
|
136
|
+
describe = (fun () -> "awssecrets:" ^ region);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
(* AWS SSM Parameter Store.
|
|
140
|
+
|
|
141
|
+
`db.pass.main` reads the parameter `/db/pass/main` (under an optional
|
|
142
|
+
prefix path), decrypted. Parameter Store carries flat strings, so there
|
|
143
|
+
is no field indirection. *)
|
|
144
|
+
let awsparams_provider (region : string) (keyid : string) (secret : string) (session : string)
|
|
145
|
+
(addr : string) (prefix : string) : provider =
|
|
146
|
+
{
|
|
147
|
+
lookup =
|
|
148
|
+
(fun name ->
|
|
149
|
+
let payload =
|
|
150
|
+
Json.obj
|
|
151
|
+
[ ("Name", Json.str (awsparam ~prefix name)); ("WithDecryption", Json.bool true) ]
|
|
152
|
+
in
|
|
153
|
+
|
|
154
|
+
let res =
|
|
155
|
+
awscall region keyid secret session addr "ssm" "AmazonSSM.GetParameter"
|
|
156
|
+
(Json.stringify payload)
|
|
157
|
+
in
|
|
158
|
+
|
|
159
|
+
if 400 = res.status && awsmiss res.jbody [ "ParameterNotFound" ] then None
|
|
160
|
+
else if 200 <> res.status then fail ("sekreto: aws ssm error: " ^ string_of_int res.status)
|
|
161
|
+
else digtext res.jbody [ "Parameter"; "Value" ]);
|
|
162
|
+
describe = (fun () -> "awsparams:" ^ region ^ prefix);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
let secretsplugin () : Defs.definition =
|
|
166
|
+
providerplugin "awssecrets" (fun spec ->
|
|
167
|
+
awssecrets_provider spec.region spec.keyid spec.secret spec.session spec.addr)
|
|
168
|
+
|
|
169
|
+
let paramsplugin () : Defs.definition =
|
|
170
|
+
providerplugin "awsparams" (fun spec ->
|
|
171
|
+
awsparams_provider spec.region spec.keyid spec.secret spec.session spec.addr spec.prefix)
|