@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.
Files changed (304) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/package.json +1 -1
  3. package/project/.sdk/model/feature/secrets.aon +330 -0
  4. package/project/.sdk/model/target/c.aon +15 -2
  5. package/project/.sdk/model/target/cpp.aon +18 -0
  6. package/project/.sdk/model/target/lua.aon +17 -0
  7. package/project/.sdk/model/target/ocaml.aon +48 -5
  8. package/project/.sdk/model/target/zig.aon +30 -4
  9. package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
  10. package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
  11. package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
  12. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
  13. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
  14. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
  15. package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
  16. package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
  17. package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
  18. package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
  19. package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
  20. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
  21. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
  22. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
  23. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
  24. package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
  25. package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
  26. package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
  27. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
  28. package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
  29. package/project/.sdk/tm/c/Makefile +58 -9
  30. package/project/.sdk/tm/c/core/sdk.h +10 -0
  31. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
  32. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
  33. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
  34. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
  35. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
  36. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
  37. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
  38. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
  39. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
  40. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
  41. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
  42. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
  43. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
  44. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
  45. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
  46. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
  47. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
  48. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
  49. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
  50. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
  51. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
  52. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
  53. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
  54. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
  55. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
  56. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
  57. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
  58. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
  59. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
  60. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
  61. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
  62. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
  63. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
  64. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
  65. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
  66. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
  67. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
  68. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
  69. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
  70. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
  71. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
  72. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
  73. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
  74. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
  75. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
  76. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
  77. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
  78. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
  79. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
  80. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
  81. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
  82. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
  83. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
  84. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
  85. package/project/.sdk/tm/c/feature/secrets.c +797 -0
  86. package/project/.sdk/tm/c/feature/secrets.h +46 -0
  87. package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
  88. package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
  90. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
  91. package/project/.sdk/tm/cpp/Makefile +48 -4
  92. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
  93. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
  94. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
  95. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
  96. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
  97. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
  98. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
  99. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
  100. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
  101. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
  102. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
  103. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
  104. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
  105. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
  106. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
  107. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
  108. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
  109. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
  110. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
  111. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
  112. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
  113. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
  114. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
  115. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
  116. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
  117. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
  118. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
  119. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
  120. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
  121. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
  122. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
  123. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
  124. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
  125. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
  126. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
  127. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
  128. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
  129. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
  130. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
  131. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
  132. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
  133. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
  134. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
  135. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
  136. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
  137. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
  138. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
  139. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
  140. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
  141. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
  142. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
  143. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
  144. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
  145. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
  146. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
  147. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
  148. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
  149. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
  150. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
  151. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
  152. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
  153. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
  154. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
  155. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
  156. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
  157. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
  158. package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
  159. package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
  160. package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
  161. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
  162. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
  163. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
  164. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
  165. package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
  166. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
  167. package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
  168. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
  169. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
  170. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
  171. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
  172. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
  173. package/project/.sdk/tm/lua/Makefile +15 -4
  174. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
  175. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
  176. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
  177. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
  178. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
  179. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
  180. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
  181. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
  182. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
  183. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
  184. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
  185. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
  186. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
  187. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
  188. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
  189. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
  190. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
  191. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
  192. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
  193. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
  194. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
  195. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
  196. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
  197. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
  198. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
  199. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
  200. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
  201. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
  202. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
  203. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
  204. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
  205. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
  206. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
  207. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
  208. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
  209. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
  210. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
  211. package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
  212. package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
  213. package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
  214. package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
  215. package/project/.sdk/tm/ocaml/Makefile +52 -8
  216. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
  217. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
  218. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
  219. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
  220. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
  221. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
  222. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
  223. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
  224. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
  225. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
  226. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
  227. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
  228. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
  229. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
  230. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
  231. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
  232. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
  233. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
  234. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
  235. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
  236. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
  237. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
  238. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
  239. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
  240. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
  241. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
  242. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
  243. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
  244. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
  245. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
  246. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
  247. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
  248. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
  249. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
  250. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
  251. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
  252. package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
  253. package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
  254. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
  255. package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
  256. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
  257. package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
  258. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
  259. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
  260. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
  261. package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
  262. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
  263. package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
  264. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
  265. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
  266. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
  267. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
  268. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
  269. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
  270. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
  271. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
  272. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
  273. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
  274. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
  275. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
  276. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
  277. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
  278. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
  279. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
  280. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
  281. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
  282. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
  283. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
  284. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
  285. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
  286. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
  287. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
  288. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
  289. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
  290. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
  291. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
  292. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
  293. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
  294. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
  295. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
  296. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
  297. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
  298. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
  299. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
  300. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
  301. package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
  302. package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
  303. package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
  304. package/project/sdkgen-package.json +1 -1
@@ -0,0 +1,144 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/encode.c)
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 two encoders every HTTP store needs: strict base64 decoding and
5
+ * RFC 3986 percent-encoding.
6
+ *
7
+ * WITH THE TRANSPORT, NOT WITH THE SIGNER, and that placement is the
8
+ * whole reason this file exists. Percent-encoding builds the URLs of
9
+ * four stores that hash nothing - azure, onepassword, doppler,
10
+ * infisical - and base64 decodes an AWS binary secret and a GCP payload.
11
+ * Leaving either beside the SigV4 code would put SHA-256 in the link of
12
+ * every one of them, because a static archive is pulled in an object at a
13
+ * time. SigV4 depends on this file; this file depends on nothing but the
14
+ * core.
15
+ */
16
+
17
+ #define _POSIX_C_SOURCE 200809L
18
+
19
+ #include <string.h>
20
+
21
+ #include "support.h"
22
+
23
+ /* ---- base64, decode only ------------------------------------------- */
24
+
25
+ static int unb64digit(char ch) {
26
+ if ('A' <= ch && 'Z' >= ch) {
27
+ return ch - 'A';
28
+ }
29
+ if ('a' <= ch && 'z' >= ch) {
30
+ return ch - 'a' + 26;
31
+ }
32
+ if ('0' <= ch && '9' >= ch) {
33
+ return ch - '0' + 52;
34
+ }
35
+ if ('+' == ch) {
36
+ return 62;
37
+ }
38
+ if ('/' == ch) {
39
+ return 63;
40
+ }
41
+ return -1;
42
+ }
43
+
44
+ /* Strict, and that is the point. A lenient decoder skips bytes outside
45
+ * the alphabet and hands back plausible bytes for a corrupted payload -
46
+ * and this library then returns those bytes AS THE SECRET. Anything
47
+ * rejected here is an error at its call site, never a miss. */
48
+ unsigned char *sek_unbase64(sek_pool *pool, const char *text, size_t *outlen) {
49
+ sek_buf packed;
50
+ size_t index;
51
+ size_t pad = 0;
52
+ unsigned char *out;
53
+ size_t at = 0;
54
+
55
+ if (NULL == text) {
56
+ return NULL;
57
+ }
58
+
59
+ /* Whitespace is stripped first: the canonical function accepts embedded
60
+ * newlines, which a strict decoder would otherwise reject. */
61
+ sek_buf_init(&packed, pool);
62
+ for (index = 0; '\0' != text[index]; index++) {
63
+ char ch = text[index];
64
+ if (' ' == ch || '\t' == ch || '\n' == ch || '\r' == ch || '\v' == ch || '\f' == ch) {
65
+ continue;
66
+ }
67
+ sek_buf_addch(&packed, ch);
68
+ }
69
+
70
+ if (0 != packed.len % 4) {
71
+ return NULL;
72
+ }
73
+
74
+ while (2 > pad && pad < packed.len && '=' == packed.data[packed.len - 1 - pad]) {
75
+ pad++;
76
+ }
77
+
78
+ for (index = 0; index + pad < packed.len; index++) {
79
+ if (0 > unb64digit(packed.data[index])) {
80
+ return NULL;
81
+ }
82
+ }
83
+
84
+ out = (unsigned char *)sek_alloc(pool, packed.len / 4 * 3 + 4);
85
+
86
+ for (index = 0; index + 3 < packed.len; index += 4) {
87
+ int a = unb64digit(packed.data[index]);
88
+ int b = unb64digit(packed.data[index + 1]);
89
+ int c = unb64digit(packed.data[index + 2]);
90
+ int d = unb64digit(packed.data[index + 3]);
91
+ unsigned int acc;
92
+
93
+ if (0 > a || 0 > b) {
94
+ return NULL;
95
+ }
96
+
97
+ acc = (unsigned int)(a << 18) | (unsigned int)(b << 12);
98
+ out[at++] = (unsigned char)((acc >> 16) & 0xff);
99
+
100
+ if (0 <= c) {
101
+ acc |= (unsigned int)(c << 6);
102
+ out[at++] = (unsigned char)((acc >> 8) & 0xff);
103
+ }
104
+ if (0 <= d) {
105
+ acc |= (unsigned int)d;
106
+ out[at++] = (unsigned char)(acc & 0xff);
107
+ }
108
+ }
109
+
110
+ out[at] = '\0';
111
+ *outlen = at;
112
+
113
+ return out;
114
+ }
115
+
116
+ /* ---- percent-encoding ---------------------------------------------- */
117
+
118
+ /* RFC 3986 escaping, stricter than any stdlib encoder: the unreserved set
119
+ * is exactly A-Za-z0-9-_.~ and everything else, byte by byte over UTF-8,
120
+ * becomes %XX with UPPERCASE hex. `!'()*` are escaped, which is the gap
121
+ * against the usual encodeURIComponent. */
122
+ char *sek_uriescape(sek_pool *pool, const char *text) {
123
+ static const char digits[] = "0123456789ABCDEF";
124
+ sek_buf out;
125
+ size_t index;
126
+
127
+ sek_buf_init(&out, pool);
128
+
129
+ for (index = 0; NULL != text && '\0' != text[index]; index++) {
130
+ unsigned char ch = (unsigned char)text[index];
131
+
132
+ if (('A' <= ch && 'Z' >= ch) || ('a' <= ch && 'z' >= ch) || ('0' <= ch && '9' >= ch) ||
133
+ '-' == ch || '_' == ch || '.' == ch || '~' == ch) {
134
+ sek_buf_addch(&out, (char)ch);
135
+ } else {
136
+ sek_buf_addch(&out, '%');
137
+ sek_buf_addch(&out, digits[(ch >> 4) & 0x0f]);
138
+ sek_buf_addch(&out, digits[ch & 0x0f]);
139
+ }
140
+ }
141
+
142
+ return out.data;
143
+ }
144
+
@@ -0,0 +1,177 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/gcpsecrets.c)
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
+ /* Google Secret Manager, with metadata-server login.
5
+ *
6
+ * A plugin because it opens a socket. The base64 it decodes a payload
7
+ * with lives in `encode.c` with the transport, not with the signer, so
8
+ * this kind links no SHA-256.
9
+ *
10
+ * A port of typescript/plugins/gcpsecrets.ts, which is canonical.
11
+ */
12
+
13
+ #define _POSIX_C_SOURCE 200809L
14
+
15
+ #include <stdlib.h>
16
+ #include <string.h>
17
+
18
+ #include "support.h"
19
+
20
+ typedef struct {
21
+ sek_pool *pool;
22
+ const char *project;
23
+ const char *token;
24
+ const char *addr;
25
+ const char *metadataaddr;
26
+ char *livetoken;
27
+ long long renewat;
28
+ char *described;
29
+ } gcpdata;
30
+
31
+ static sek_err gcp_login(gcpdata *data, char **out) {
32
+ sek_pool *pool = data->pool;
33
+ const char *configured = sek_first(data->token, getenv("GOOGLE_OAUTH_ACCESS_TOKEN"));
34
+ const char *base;
35
+ char *url;
36
+ sek_map *headers;
37
+ sek_answer res;
38
+ sek_err err;
39
+ const char *got;
40
+
41
+ if (!sek_empty(configured)) {
42
+ *out = sek_strdup(pool, configured);
43
+ return NULL;
44
+ }
45
+
46
+ if (!sek_empty(data->metadataaddr)) {
47
+ base = data->metadataaddr;
48
+ } else {
49
+ const char *host = getenv("GCE_METADATA_HOST");
50
+ base = sek_empty(host) ? "http://metadata.google.internal" : sek_fmt(pool, "http://%s", host);
51
+ }
52
+
53
+ url = sek_fmt(pool, "%s/computeMetadata/v1/instance/service-accounts/default/token",
54
+ sek_trimslash(pool, base));
55
+
56
+ headers = sek_map_new(pool);
57
+ sek_map_set(headers, "Metadata-Flavor", "Google");
58
+
59
+ /* The metadata call is plain http to a link-local host by platform
60
+ * design and carries no credential, so it is deliberately NOT
61
+ * checkaddr-guarded; the Secret Manager address is. */
62
+ err = sek_fetchjson(pool, "GET", url, headers, NULL, &res);
63
+ if (NULL != err) {
64
+ return err;
65
+ }
66
+
67
+ got = sek_json_text(pool, sek_json_dig(res.body, "access_token", NULL));
68
+ if (200 != res.status || sek_empty(got)) {
69
+ return sek_strdup(pool, "sekreto: gcp: no token and metadata server did not answer");
70
+ }
71
+
72
+ data->renewat = sek_renewtime(sek_json_dig(res.body, "expires_in", NULL));
73
+ *out = sek_strdup(pool, got);
74
+
75
+ return NULL;
76
+ }
77
+
78
+ static sek_err gcp_lookup(sek_provider *self, const char *name, char **out) {
79
+ gcpdata *data = (gcpdata *)self->data;
80
+ sek_pool *pool = data->pool;
81
+ const char *addr;
82
+ char *flat = NULL;
83
+ char *url;
84
+ sek_map *headers;
85
+ sek_answer res;
86
+ sek_err err;
87
+ const char *encoded;
88
+
89
+ *out = NULL;
90
+
91
+ if (sek_empty(data->project)) {
92
+ return sek_strdup(pool, "sekreto: gcp: no project");
93
+ }
94
+
95
+ addr = sek_first(data->addr, "https://secretmanager.googleapis.com");
96
+ err = sek_checkaddr(pool, addr);
97
+ if (NULL != err) {
98
+ return err;
99
+ }
100
+
101
+ if (NULL == data->livetoken || sek_nowms() >= data->renewat) {
102
+ err = gcp_login(data, &data->livetoken);
103
+ if (NULL != err) {
104
+ return err;
105
+ }
106
+ }
107
+
108
+ /* Dots flatten to `_`: Secret Manager ids have no hierarchy and reject
109
+ * dots. */
110
+ err = sek_flatname(pool, name, "_", &flat);
111
+ if (NULL != err) {
112
+ return err;
113
+ }
114
+
115
+ url = sek_fmt(pool, "%s/v1/projects/%s/secrets/%s/versions/latest:access",
116
+ sek_trimslash(pool, addr), data->project, flat);
117
+
118
+ headers = sek_map_new(pool);
119
+ sek_map_set(headers, "authorization", sek_fmt(pool, "Bearer %s", sek_orempty(data->livetoken)));
120
+
121
+ err = sek_fetchjson(pool, "GET", url, headers, NULL, &res);
122
+ if (NULL != err) {
123
+ return err;
124
+ }
125
+
126
+ if (404 == res.status) {
127
+ return NULL;
128
+ }
129
+
130
+ if (200 != res.status) {
131
+ return sek_fmt(pool, "sekreto: gcp error: %d: %s", res.status, url);
132
+ }
133
+
134
+ encoded = sek_json_asstr(sek_json_dig(res.body, "payload", "data", NULL));
135
+ if (NULL == encoded) {
136
+ return NULL;
137
+ }
138
+
139
+ {
140
+ size_t len = 0;
141
+ unsigned char *raw = sek_unbase64(pool, encoded, &len);
142
+
143
+ if (NULL == raw) {
144
+ return sek_strdup(pool, "sekreto: gcp: undecodable secret");
145
+ }
146
+
147
+ *out = sek_strndup(pool, (const char *)raw, len);
148
+ }
149
+
150
+ return NULL;
151
+ }
152
+
153
+ static const char *gcp_describe(sek_provider *self) {
154
+ return ((gcpdata *)self->data)->described;
155
+ }
156
+
157
+ /* ---- the definition ------------------------------------------------ */
158
+
159
+ static sek_err gcpsecrets_make(sek_pool *pool, const sek_spec *spec, sek_provider **out) {
160
+ gcpdata *data = (gcpdata *)sek_alloc(pool, sizeof(gcpdata));
161
+ data->pool = pool;
162
+ data->project = sek_own(pool, spec->project);
163
+ data->token = sek_own(pool, spec->token);
164
+ data->addr = sek_own(pool, spec->addr);
165
+ data->metadataaddr = sek_own(pool, spec->metadataaddr);
166
+ data->livetoken = NULL;
167
+ data->renewat = SEK_NEVER;
168
+ data->described = sek_fmt(pool, "gcpsecrets:%s", sek_orempty(spec->project));
169
+ *out = sek_provider_new(pool, gcp_lookup, gcp_describe, data);
170
+ return NULL;
171
+ }
172
+
173
+ static sek_providerkind GCPSECRETS_KIND;
174
+
175
+ Definition *sek_plugin_gcpsecrets(void) {
176
+ return sek_providerplugin(&GCPSECRETS_KIND, "gcpsecrets", gcpsecrets_make);
177
+ }
@@ -0,0 +1,239 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (c/plugins/hashicorp.c)
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
+ /* HashiCorp Vault, over its HTTP API.
5
+ *
6
+ * KV v1 and v2, a configured token or a login (kubernetes, approle, jwt),
7
+ * and Vault Enterprise namespaces. A plugin because it opens a socket:
8
+ * `sekreto: unknown provider kind: hashicorp` is what a chain naming it
9
+ * gets when the consumer did not pass this definition in.
10
+ *
11
+ * A port of typescript/plugins/hashicorp.ts, which is canonical.
12
+ */
13
+
14
+ #define _POSIX_C_SOURCE 200809L
15
+
16
+ #include <errno.h>
17
+ #include <stdlib.h>
18
+ #include <string.h>
19
+
20
+ #include "support.h"
21
+
22
+ typedef struct {
23
+ sek_pool *pool;
24
+ const char *addr;
25
+ const char *mount;
26
+ int kv;
27
+ const char *vaultnamespace;
28
+ sek_authspec *auth;
29
+ char *livetoken;
30
+ long long renewat;
31
+ char *described;
32
+ } hashicorpdata;
33
+
34
+ static sek_map *vaultheaders(hashicorpdata *data) {
35
+ sek_map *out = sek_map_new(data->pool);
36
+
37
+ /* A Vault Enterprise namespace rides the header on LOGINS as well as
38
+ * reads: a login to the wrong namespace fails in a way that reads like
39
+ * a bad credential. */
40
+ if (!sek_empty(data->vaultnamespace)) {
41
+ sek_map_set(out, "X-Vault-Namespace", data->vaultnamespace);
42
+ }
43
+
44
+ return out;
45
+ }
46
+
47
+ static sek_err hashicorp_login(hashicorpdata *data, char **out) {
48
+ sek_pool *pool = data->pool;
49
+ sek_authspec *use = data->auth;
50
+ char *url;
51
+ sek_json *payload;
52
+ sek_answer res;
53
+ sek_err err;
54
+ const char *got;
55
+
56
+ if (NULL == use) {
57
+ return sek_strdup(pool, "sekreto: hashicorp: no token and no auth method");
58
+ }
59
+
60
+ url = sek_fmt(pool, "%s/v1/auth/%s/login", sek_trimslash(pool, data->addr),
61
+ sek_first(use->mount, use->method));
62
+
63
+ if (NULL != use->method && 0 == strcmp(use->method, "kubernetes")) {
64
+ const char *jwt = use->jwt;
65
+
66
+ if (sek_empty(jwt)) {
67
+ const char *path = sek_empty(use->jwtfile)
68
+ ? "/var/run/secrets/kubernetes.io/serviceaccount/token"
69
+ : use->jwtfile;
70
+ int why = 0;
71
+ char *text = sek_readfile(pool, path, &why);
72
+
73
+ if (NULL == text) {
74
+ /* No underlying error text: the path is what a reader needs, and
75
+ * the strerror string follows the machine's locale. */
76
+ return sek_fmt(pool, "sekreto: hashicorp: cannot read jwt file %s", path);
77
+ }
78
+
79
+ {
80
+ size_t start = 0;
81
+ size_t end = strlen(text);
82
+ while (start < end && (' ' == text[start] || '\n' == text[start] || '\r' == text[start] ||
83
+ '\t' == text[start])) {
84
+ start++;
85
+ }
86
+ while (end > start && (' ' == text[end - 1] || '\n' == text[end - 1] ||
87
+ '\r' == text[end - 1] || '\t' == text[end - 1])) {
88
+ end--;
89
+ }
90
+ jwt = sek_strndup(pool, text + start, end - start);
91
+ }
92
+ }
93
+
94
+ payload = sek_json_obj(pool);
95
+ sek_json_set(pool, payload, "role", sek_json_str(pool, sek_orempty(use->role)));
96
+ sek_json_set(pool, payload, "jwt", sek_json_str(pool, jwt));
97
+ } else if (NULL != use->method && 0 == strcmp(use->method, "approle")) {
98
+ payload = sek_json_obj(pool);
99
+ sek_json_set(pool, payload, "role_id", sek_json_str(pool, sek_orempty(use->roleid)));
100
+ sek_json_set(pool, payload, "secret_id", sek_json_str(pool, sek_orempty(use->secretid)));
101
+ } else {
102
+ return sek_fmt(pool, "sekreto: hashicorp: unknown auth method: %s", sek_orempty(use->method));
103
+ }
104
+
105
+ err = sek_fetchjson(pool, "POST", url, vaultheaders(data), sek_json_stringify(pool, payload),
106
+ &res);
107
+ if (NULL != err) {
108
+ return err;
109
+ }
110
+
111
+ got = sek_json_text(pool, sek_json_dig(res.body, "auth", "client_token", NULL));
112
+
113
+ /* A failed login is an ERROR, never a miss: it means this store could
114
+ * not answer at all. */
115
+ if (200 != res.status || sek_empty(got)) {
116
+ return sek_fmt(pool, "sekreto: hashicorp login failed: %d: %s", res.status, url);
117
+ }
118
+
119
+ data->renewat = sek_renewtime(sek_json_dig(res.body, "auth", "lease_duration", NULL));
120
+ *out = sek_strdup(pool, got);
121
+
122
+ return NULL;
123
+ }
124
+
125
+ static sek_err hashicorp_lookup(sek_provider *self, const char *name, char **out) {
126
+ hashicorpdata *data = (hashicorpdata *)self->data;
127
+ sek_pool *pool = data->pool;
128
+ sek_vaultref ref;
129
+ sek_map *headers;
130
+ sek_answer res;
131
+ sek_err err;
132
+ char *url;
133
+ sek_json *found;
134
+
135
+ *out = NULL;
136
+
137
+ err = sek_checkaddr(pool, data->addr);
138
+ if (NULL != err) {
139
+ return err;
140
+ }
141
+
142
+ if (NULL == data->livetoken || sek_nowms() >= data->renewat) {
143
+ err = hashicorp_login(data, &data->livetoken);
144
+ if (NULL != err) {
145
+ return err;
146
+ }
147
+ }
148
+
149
+ err = sek_vaultref_of(pool, name, &ref);
150
+ if (NULL != err) {
151
+ return err;
152
+ }
153
+
154
+ if (1 == data->kv) {
155
+ url = sek_fmt(pool, "%s/v1/%s/%s", sek_trimslash(pool, data->addr), data->mount, ref.path);
156
+ } else {
157
+ url = sek_fmt(pool, "%s/v1/%s/data/%s", sek_trimslash(pool, data->addr), data->mount, ref.path);
158
+ }
159
+
160
+ headers = vaultheaders(data);
161
+ sek_map_set(headers, "X-Vault-Token", sek_orempty(data->livetoken));
162
+
163
+ err = sek_fetchjson(pool, "GET", url, headers, NULL, &res);
164
+ if (NULL != err) {
165
+ return err;
166
+ }
167
+
168
+ /* A 404 means "not here" - a miss - so a vault can sit in a chain with
169
+ * fallbacks behind it. */
170
+ if (404 == res.status) {
171
+ return NULL;
172
+ }
173
+
174
+ if (200 != res.status) {
175
+ return sek_fmt(pool, "sekreto: hashicorp error: %d: %s", res.status, url);
176
+ }
177
+
178
+ if (1 == data->kv) {
179
+ found = sek_json_dig(res.body, "data", ref.field, NULL);
180
+ } else {
181
+ found = sek_json_dig(res.body, "data", "data", ref.field, NULL);
182
+ }
183
+
184
+ {
185
+ const char *text = sek_json_text(pool, found);
186
+ if (NULL != text) {
187
+ *out = sek_strdup(pool, text);
188
+ }
189
+ }
190
+
191
+ return NULL;
192
+ }
193
+
194
+ static const char *hashicorp_describe(sek_provider *self) {
195
+ return ((hashicorpdata *)self->data)->described;
196
+ }
197
+
198
+ /* ---- the definition ------------------------------------------------ */
199
+
200
+ static sek_err hashicorp_make(sek_pool *pool, const sek_spec *spec, sek_provider **out) {
201
+ hashicorpdata *data = (hashicorpdata *)sek_alloc(pool, sizeof(hashicorpdata));
202
+ data->pool = pool;
203
+ data->addr = sek_own(pool, sek_orempty(spec->addr));
204
+ data->mount = sek_own(pool, sek_empty(spec->mount) ? "secret" : spec->mount);
205
+ data->kv = spec->haskv ? spec->kv : 2;
206
+ data->vaultnamespace = sek_own(pool, spec->vaultnamespace);
207
+ data->livetoken = sek_empty(spec->token) ? NULL : sek_strdup(pool, spec->token);
208
+ data->renewat = SEK_NEVER;
209
+ data->described = sek_fmt(pool, "hashicorp:%s/%s", data->addr, data->mount);
210
+
211
+ if (NULL != spec->auth) {
212
+ data->auth = (sek_authspec *)sek_alloc(pool, sizeof(sek_authspec));
213
+ data->auth->method = sek_own(pool, spec->auth->method);
214
+ data->auth->mount = sek_own(pool, spec->auth->mount);
215
+ data->auth->role = sek_own(pool, spec->auth->role);
216
+ data->auth->jwt = sek_own(pool, spec->auth->jwt);
217
+ data->auth->jwtfile = sek_own(pool, spec->auth->jwtfile);
218
+ data->auth->roleid = sek_own(pool, spec->auth->roleid);
219
+ data->auth->secretid = sek_own(pool, spec->auth->secretid);
220
+ } else {
221
+ data->auth = NULL;
222
+ }
223
+
224
+ /* A version typo like `kv: 3` must not quietly behave as v2 and turn
225
+ * its 404s into misses; there is nothing safe to assume it meant. So
226
+ * it is refused at CONSTRUCTION, before an address is even looked at. */
227
+ if (1 != data->kv && 2 != data->kv) {
228
+ return sek_fmt(pool, "sekreto: hashicorp: unsupported kv version: %d", data->kv);
229
+ }
230
+
231
+ *out = sek_provider_new(pool, hashicorp_lookup, hashicorp_describe, data);
232
+ return NULL;
233
+ }
234
+
235
+ static sek_providerkind HASHICORP_KIND;
236
+
237
+ Definition *sek_plugin_hashicorp(void) {
238
+ return sek_providerplugin(&HASHICORP_KIND, "hashicorp", hashicorp_make);
239
+ }