@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,188 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/boru.zig)
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
+ //! A boru vault (https://github.com/boru-lang/boru) - a sekreto plugin.
5
+ //!
6
+ //! Spawns the boru CLI, or speaks its wire protocol over HTTPS; either
7
+ //! way it reaches outside the process, which is why it is a plugin.
8
+
9
+ const std = @import("std");
10
+
11
+ const sekreto = @import("sekreto");
12
+ const httpjson = @import("httpjson.zig");
13
+
14
+ const Allocator = std.mem.Allocator;
15
+ const Answer = sekreto.Answer;
16
+ const Found = sekreto.Found;
17
+ const Provider = sekreto.Provider;
18
+ const ProviderSpec = sekreto.ProviderSpec;
19
+
20
+ /// A boru vault (https://github.com/boru-lang/boru).
21
+ ///
22
+ /// Two ways in, both boru's own.
23
+ ///
24
+ /// With no `addr`, the CLI: `boru vault get --reveal <alias>` prints the
25
+ /// secret on stdout and nothing else. The passphrase is read by boru itself
26
+ /// from `BORU_VAULT_PASSPHRASE`; sekreto never accepts it as config and
27
+ /// never puts it on a command line, where it would show up in the process
28
+ /// table.
29
+ ///
30
+ /// With an `addr`, boru's wire protocol: `boru vault serve` publishes a
31
+ /// read-only, HashiCorp-shaped provision API, authenticated by a capability
32
+ /// token from `boru vault grant`. A sekreto name is already a valid boru
33
+ /// alias, and boru aliases keep their dots, so `api.token` is the single
34
+ /// path segment `api.token` - not the `api`/`token` split a HashiCorp KV
35
+ /// gets. The value is the `value` field. A 404 is a miss; anything else the
36
+ /// server refuses (a revoked capability, a sealed vault) is an error.
37
+ ///
38
+ /// boru's `vault proxy` and `vault mcp` remain out of bounds: they are a
39
+ /// credential *broker*, built precisely so the caller never receives the
40
+ /// credential. `vault serve` is the provision endpoint, built to hand the
41
+ /// value back - that is the one sekreto uses.
42
+ pub const BoruProvider = struct {
43
+ alloc: Allocator,
44
+ config: sekreto.Config,
45
+ command: []const u8,
46
+ namespace: []const u8,
47
+ home: []const u8,
48
+ addr: []const u8,
49
+ token: []const u8,
50
+ mount: []const u8,
51
+
52
+ pub fn lookup(self: *BoruProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
53
+ switch (try sekreto.checkname(alloc, name)) {
54
+ .err => |message| return .{ .err = message },
55
+ .ok => {},
56
+ }
57
+
58
+ if (0 != self.addr.len) {
59
+ return self.lookupwire(alloc, name);
60
+ }
61
+
62
+ return self.lookupcli(alloc, name);
63
+ }
64
+
65
+ fn lookupwire(self: *BoruProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
66
+ const addr = httpjson.trimslash(self.addr);
67
+
68
+ switch (try sekreto.checkaddr(alloc, addr)) {
69
+ .err => |message| return .{ .err = message },
70
+ .ok => {},
71
+ }
72
+
73
+ const alias = if (0 != self.namespace.len)
74
+ try std.fmt.allocPrint(alloc, "{s}/{s}", .{ self.namespace, name })
75
+ else
76
+ name;
77
+
78
+ const url = try std.fmt.allocPrint(alloc, "{s}/v1/{s}/data/{s}", .{ addr, self.mount, alias });
79
+
80
+ const headers = [_]httpjson.Header{.{ .name = "X-Vault-Token", .value = self.token }};
81
+
82
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
83
+ .err => |message| return .{ .err = message },
84
+ .ok => |got| got,
85
+ };
86
+
87
+ if (404 == res.status) {
88
+ return .{ .ok = null };
89
+ }
90
+
91
+ if (200 != res.status) {
92
+ return .{ .err = try sekreto.fail(
93
+ alloc,
94
+ "sekreto: boru serve error: {d}: {s}",
95
+ .{ res.status, url },
96
+ ) };
97
+ }
98
+
99
+ const data = httpjson.jget(httpjson.jget(res.body, "data"), "data");
100
+ return .{ .ok = httpjson.jstr(httpjson.jget(data, "value")) };
101
+ }
102
+
103
+ fn lookupcli(self: *BoruProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
104
+ const alias = if (0 != self.namespace.len)
105
+ try std.fmt.allocPrint(alloc, "{s}:{s}", .{ self.namespace, name })
106
+ else
107
+ name;
108
+
109
+ // BORU_HOME is added to a copy of the environment, never to the
110
+ // command line: the passphrase boru reads from the environment must
111
+ // not end up in the process table beside it.
112
+ var environ = try self.config.env.clone(alloc);
113
+ defer environ.deinit();
114
+
115
+ if (0 != self.home.len) {
116
+ try environ.put("BORU_HOME", self.home);
117
+ }
118
+
119
+ const run = std.process.run(alloc, self.config.io, .{
120
+ .argv = &.{ self.command, "vault", "get", "--reveal", alias },
121
+ .environ_map = &environ,
122
+ }) catch |err| {
123
+ return .{ .err = try sekreto.fail(
124
+ alloc,
125
+ "sekreto: cannot run {s}: {s}",
126
+ .{ self.command, @errorName(err) },
127
+ ) };
128
+ };
129
+
130
+ const exited = switch (run.term) {
131
+ .exited => |code| code,
132
+ else => 1,
133
+ };
134
+
135
+ if (0 == exited) {
136
+ // boru prints the value and one newline, and nothing else.
137
+ var value: []const u8 = run.stdout;
138
+ if (0 != value.len and '\n' == value[value.len - 1]) {
139
+ value = value[0 .. value.len - 1];
140
+ }
141
+ return .{ .ok = value };
142
+ }
143
+
144
+ const why = std.mem.trim(u8, run.stderr, " \t\r\n");
145
+
146
+ // "no alias named" is boru saying it does not hold this secret,
147
+ // which is a miss: the chain carries on to the next provider. A
148
+ // locked vault or a wrong passphrase is not a miss - treating it as
149
+ // one would fall through to a weaker store without saying so.
150
+ if (null != std.mem.indexOf(u8, why, "no alias named")) {
151
+ return .{ .ok = null };
152
+ }
153
+
154
+ if (0 != why.len) {
155
+ return .{ .err = try sekreto.fail(alloc, "sekreto: boru vault error: {s}", .{why}) };
156
+ }
157
+
158
+ return .{ .err = try sekreto.fail(alloc, "sekreto: boru vault error: exit {d}", .{exited}) };
159
+ }
160
+
161
+ pub fn describe(self: *BoruProvider, alloc: Allocator) Allocator.Error![]const u8 {
162
+ if (0 != self.addr.len) {
163
+ return std.fmt.allocPrint(alloc, "boru:{s}", .{httpjson.trimslash(self.addr)});
164
+ }
165
+ if (0 != self.namespace.len) {
166
+ return std.fmt.allocPrint(alloc, "boru:{s}", .{self.namespace});
167
+ }
168
+ return alloc.dupe(u8, "boru");
169
+ }
170
+
171
+ pub fn deinit(_: *BoruProvider, _: Allocator) void {}
172
+ };
173
+
174
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
175
+ return .{ .ok = try sekreto.provide(alloc, BoruProvider, .{
176
+ .alloc = alloc,
177
+ .config = config,
178
+ .command = if (0 != spec.command.len) spec.command else "boru",
179
+ .namespace = spec.namespace,
180
+ .home = spec.home,
181
+ .addr = spec.addr,
182
+ .token = spec.token,
183
+ .mount = if (0 != spec.mount.len) spec.mount else "secret",
184
+ }) };
185
+ }
186
+
187
+ /// The `boru` kind.
188
+ pub const boru: sekreto.Definition = sekreto.providerplugin("boru", make);
@@ -0,0 +1,135 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/doppler.zig)
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
+ //! Doppler - a sekreto plugin. Needs HTTPS.
5
+
6
+ const std = @import("std");
7
+
8
+ const sekreto = @import("sekreto");
9
+ const httpjson = @import("httpjson.zig");
10
+
11
+ const Allocator = std.mem.Allocator;
12
+ const Answer = sekreto.Answer;
13
+ const Found = sekreto.Found;
14
+ const Provider = sekreto.Provider;
15
+ const ProviderSpec = sekreto.ProviderSpec;
16
+
17
+ /// Doppler.
18
+ ///
19
+ /// The whole config is downloaded once - Doppler's own bulk endpoint - and
20
+ /// answered from memory, like a remote .env: `api.token` is the `API_TOKEN`
21
+ /// entry. A service token is config-scoped, so project and config are only
22
+ /// needed with broader tokens.
23
+ pub const DopplerProvider = struct {
24
+ alloc: Allocator,
25
+ config: sekreto.Config,
26
+ token: []const u8,
27
+ project: []const u8,
28
+ dopplerconfig: []const u8,
29
+ addr: []const u8,
30
+ state: std.heap.ArenaAllocator,
31
+ values: ?[]const sekreto.KeyValue,
32
+
33
+ fn load(self: *DopplerProvider, alloc: Allocator) Allocator.Error!Answer([]const sekreto.KeyValue) {
34
+ if (self.values) |values| {
35
+ return .{ .ok = values };
36
+ }
37
+
38
+ const addr = httpjson.trimslash(if (0 != self.addr.len) self.addr else "https://api.doppler.com");
39
+
40
+ switch (try sekreto.checkaddr(alloc, addr)) {
41
+ .err => |message| return .{ .err = message },
42
+ .ok => {},
43
+ }
44
+
45
+ var url: std.ArrayList(u8) = .empty;
46
+ try url.appendSlice(alloc, addr);
47
+ try url.appendSlice(alloc, "/v3/configs/config/secrets/download?format=json");
48
+
49
+ if (0 != self.project.len) {
50
+ try url.appendSlice(alloc, "&project=");
51
+ try url.appendSlice(alloc, try httpjson.escape(alloc, self.project));
52
+ }
53
+ if (0 != self.dopplerconfig.len) {
54
+ try url.appendSlice(alloc, "&config=");
55
+ try url.appendSlice(alloc, try httpjson.escape(alloc, self.dopplerconfig));
56
+ }
57
+
58
+ const bearer = try std.fmt.allocPrint(alloc, "Bearer {s}", .{self.token});
59
+ const headers = [_]httpjson.Header{.{ .name = "authorization", .value = bearer }};
60
+
61
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url.items, &headers, null)) {
62
+ .err => |message| return .{ .err = message },
63
+ .ok => |got| got,
64
+ };
65
+
66
+ const body = res.body orelse std.json.Value{ .null = {} };
67
+
68
+ if (200 != res.status or .object != body) {
69
+ return .{ .err = try sekreto.fail(alloc, "sekreto: doppler error: {d}", .{res.status}) };
70
+ }
71
+
72
+ // Loaded once, so it outlives the lookup's scratch arena.
73
+ const keep = self.state.allocator();
74
+ var values: std.ArrayList(sekreto.KeyValue) = .empty;
75
+
76
+ var it = body.object.iterator();
77
+ while (it.next()) |field| {
78
+ const value = httpjson.jstr(field.value_ptr.*) orelse continue;
79
+ try values.append(keep, .{
80
+ .key = try keep.dupe(u8, field.key_ptr.*),
81
+ .value = try keep.dupe(u8, value),
82
+ });
83
+ }
84
+
85
+ self.values = values.items;
86
+ return .{ .ok = values.items };
87
+ }
88
+
89
+ pub fn lookup(self: *DopplerProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
90
+ const key = switch (try sekreto.envkey(alloc, name, "")) {
91
+ .err => |message| return .{ .err = message },
92
+ .ok => |made| made,
93
+ };
94
+
95
+ const values = switch (try self.load(alloc)) {
96
+ .err => |message| return .{ .err = message },
97
+ .ok => |loaded| loaded,
98
+ };
99
+
100
+ for (values) |entry| {
101
+ if (std.mem.eql(u8, entry.key, key)) {
102
+ return .{ .ok = entry.value };
103
+ }
104
+ }
105
+
106
+ return .{ .ok = null };
107
+ }
108
+
109
+ pub fn describe(self: *DopplerProvider, alloc: Allocator) Allocator.Error![]const u8 {
110
+ if (0 == self.project.len) {
111
+ return alloc.dupe(u8, "doppler");
112
+ }
113
+ return std.fmt.allocPrint(alloc, "doppler:{s}/{s}", .{ self.project, self.dopplerconfig });
114
+ }
115
+
116
+ pub fn deinit(self: *DopplerProvider, _: Allocator) void {
117
+ self.state.deinit();
118
+ }
119
+ };
120
+
121
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
122
+ return .{ .ok = try sekreto.provide(alloc, DopplerProvider, .{
123
+ .alloc = alloc,
124
+ .config = config,
125
+ .token = spec.token,
126
+ .project = spec.project,
127
+ .dopplerconfig = spec.config,
128
+ .addr = spec.addr,
129
+ .state = std.heap.ArenaAllocator.init(alloc),
130
+ .values = null,
131
+ }) };
132
+ }
133
+
134
+ /// The `doppler` kind.
135
+ pub const doppler: sekreto.Definition = sekreto.providerplugin("doppler", make);
@@ -0,0 +1,170 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/gcpsecrets.zig)
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
+ //! GCP Secret Manager - a sekreto plugin. Needs HTTPS.
5
+
6
+ const std = @import("std");
7
+
8
+ const sekreto = @import("sekreto");
9
+ const httpjson = @import("httpjson.zig");
10
+
11
+ const Allocator = std.mem.Allocator;
12
+ const Answer = sekreto.Answer;
13
+ const Found = sekreto.Found;
14
+ const Provider = sekreto.Provider;
15
+ const ProviderSpec = sekreto.ProviderSpec;
16
+
17
+ /// GCP Secret Manager.
18
+ ///
19
+ /// `api.token` reads secret `api_token` (dots flattened to `_`; Secret
20
+ /// Manager ids have no hierarchy and reject dots), latest version. The token
21
+ /// comes from config, then `GOOGLE_OAUTH_ACCESS_TOKEN`, then the GCE/GKE
22
+ /// metadata server - so on Google's own platform no credential
23
+ /// configuration is needed at all.
24
+ ///
25
+ /// The metadata call itself is plain http to a link-local host by platform
26
+ /// design; no credential rides on it, so `checkaddr` guards the Secret
27
+ /// Manager address instead.
28
+ pub const GcpSecretsProvider = struct {
29
+ alloc: Allocator,
30
+ config: sekreto.Config,
31
+ project: []const u8,
32
+ token: []const u8,
33
+ addr: []const u8,
34
+ metadataaddr: []const u8,
35
+ livetoken: ?[]const u8,
36
+ renewat: i64,
37
+
38
+ fn metadata(self: *GcpSecretsProvider, alloc: Allocator) Allocator.Error![]const u8 {
39
+ if (0 != self.metadataaddr.len) {
40
+ return self.metadataaddr;
41
+ }
42
+
43
+ if (self.config.env.get("GCE_METADATA_HOST")) |host| {
44
+ if (0 != host.len) {
45
+ return std.fmt.allocPrint(alloc, "http://{s}", .{host});
46
+ }
47
+ }
48
+
49
+ return "http://metadata.google.internal";
50
+ }
51
+
52
+ fn login(self: *GcpSecretsProvider, alloc: Allocator) Allocator.Error!Answer([]const u8) {
53
+ const configured = httpjson.firstof(self.config, self.token, &.{"GOOGLE_OAUTH_ACCESS_TOKEN"});
54
+ if (0 != configured.len) {
55
+ return .{ .ok = configured };
56
+ }
57
+
58
+ const url = try std.fmt.allocPrint(
59
+ alloc,
60
+ "{s}/computeMetadata/v1/instance/service-accounts/default/token",
61
+ .{httpjson.trimslash(try self.metadata(alloc))},
62
+ );
63
+
64
+ const headers = [_]httpjson.Header{.{ .name = "Metadata-Flavor", .value = "Google" }};
65
+
66
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
67
+ .err => |message| return .{ .err = message },
68
+ .ok => |got| got,
69
+ };
70
+
71
+ const access = httpjson.jstr(httpjson.jget(res.body, "access_token"));
72
+
73
+ if (200 != res.status or null == access) {
74
+ return .{ .err = try sekreto.fail(
75
+ alloc,
76
+ "sekreto: gcp: no token and metadata server did not answer",
77
+ .{},
78
+ ) };
79
+ }
80
+
81
+ self.renewat = httpjson.renewafter(self.config.io, httpjson.jnum(httpjson.jget(res.body, "expires_in")));
82
+
83
+ return .{ .ok = access.? };
84
+ }
85
+
86
+ pub fn lookup(self: *GcpSecretsProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
87
+ if (0 == self.project.len) {
88
+ return .{ .err = try sekreto.fail(alloc, "sekreto: gcp: no project", .{}) };
89
+ }
90
+
91
+ const addr = if (0 != self.addr.len) self.addr else "https://secretmanager.googleapis.com";
92
+
93
+ switch (try sekreto.checkaddr(alloc, addr)) {
94
+ .err => |message| return .{ .err = message },
95
+ .ok => {},
96
+ }
97
+
98
+ if (null == self.livetoken or httpjson.nowms(self.config.io) >= self.renewat) {
99
+ const fresh = switch (try self.login(alloc)) {
100
+ .err => |message| return .{ .err = message },
101
+ .ok => |got| got,
102
+ };
103
+ if (self.livetoken) |old| {
104
+ self.alloc.free(old);
105
+ }
106
+ self.livetoken = try self.alloc.dupe(u8, fresh);
107
+ }
108
+
109
+ const flat = switch (try sekreto.flatname(alloc, name, "_")) {
110
+ .err => |message| return .{ .err = message },
111
+ .ok => |got| got,
112
+ };
113
+
114
+ const url = try std.fmt.allocPrint(
115
+ alloc,
116
+ "{s}/v1/projects/{s}/secrets/{s}/versions/latest:access",
117
+ .{ httpjson.trimslash(addr), self.project, flat },
118
+ );
119
+
120
+ const bearer = try std.fmt.allocPrint(alloc, "Bearer {s}", .{self.livetoken.?});
121
+ const headers = [_]httpjson.Header{.{ .name = "authorization", .value = bearer }};
122
+
123
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
124
+ .err => |message| return .{ .err = message },
125
+ .ok => |got| got,
126
+ };
127
+
128
+ if (404 == res.status) {
129
+ return .{ .ok = null };
130
+ }
131
+
132
+ if (200 != res.status) {
133
+ return .{ .err = try sekreto.fail(alloc, "sekreto: gcp error: {d}: {s}", .{ res.status, url }) };
134
+ }
135
+
136
+ const data = httpjson.jstr(httpjson.jget(httpjson.jget(res.body, "payload"), "data")) orelse
137
+ return .{ .ok = null };
138
+
139
+ // See the aws provider: an undecodable payload is an error, not a
140
+ // miss.
141
+ return .{ .ok = try sekreto.unbase64(alloc, data) orelse
142
+ return .{ .err = try sekreto.fail(alloc, "sekreto: gcp: undecodable secret", .{}) } };
143
+ }
144
+
145
+ pub fn describe(self: *GcpSecretsProvider, alloc: Allocator) Allocator.Error![]const u8 {
146
+ return std.fmt.allocPrint(alloc, "gcpsecrets:{s}", .{self.project});
147
+ }
148
+
149
+ pub fn deinit(self: *GcpSecretsProvider, alloc: Allocator) void {
150
+ if (self.livetoken) |token| {
151
+ alloc.free(token);
152
+ }
153
+ }
154
+ };
155
+
156
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
157
+ return .{ .ok = try sekreto.provide(alloc, GcpSecretsProvider, .{
158
+ .alloc = alloc,
159
+ .config = config,
160
+ .project = spec.project,
161
+ .token = spec.token,
162
+ .addr = spec.addr,
163
+ .metadataaddr = spec.metadataaddr,
164
+ .livetoken = null,
165
+ .renewat = httpjson.NEVER,
166
+ }) };
167
+ }
168
+
169
+ /// The `gcpsecrets` kind.
170
+ pub const gcpsecrets: sekreto.Definition = sekreto.providerplugin("gcpsecrets", make);