@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,167 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/infisical.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
+ //! Infisical - 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
+ /// Infisical.
18
+ ///
19
+ /// `api.token` reads the secret keyed `API_TOKEN` (Infisical's own
20
+ /// convention is environment-style keys) at a secret path in one environment
21
+ /// of a project. sekreto.Auth is a token, or a universal-auth (machine identity)
22
+ /// login with clientid/clientsecret.
23
+ pub const InfisicalProvider = struct {
24
+ alloc: Allocator,
25
+ config: sekreto.Config,
26
+ addr: []const u8,
27
+ token: []const u8,
28
+ clientid: []const u8,
29
+ clientsecret: []const u8,
30
+ project: []const u8,
31
+ environment: []const u8,
32
+ path: []const u8,
33
+ livetoken: ?[]const u8,
34
+ renewat: i64,
35
+
36
+ fn login(self: *InfisicalProvider, alloc: Allocator, addr: []const u8) Allocator.Error!Answer([]const u8) {
37
+ if (0 != self.token.len) {
38
+ return .{ .ok = self.token };
39
+ }
40
+
41
+ if (0 == self.clientid.len or 0 == self.clientsecret.len) {
42
+ return .{ .err = try sekreto.fail(
43
+ alloc,
44
+ "sekreto: infisical: no token and no client credentials",
45
+ .{},
46
+ ) };
47
+ }
48
+
49
+ const url = try std.fmt.allocPrint(alloc, "{s}/api/v1/auth/universal-auth/login", .{addr});
50
+
51
+ const body = try httpjson.jsonobject(alloc, &.{
52
+ .{ .key = "clientId", .value = self.clientid },
53
+ .{ .key = "clientSecret", .value = self.clientsecret },
54
+ });
55
+
56
+ const headers = [_]httpjson.Header{
57
+ .{ .name = "content-type", .value = "application/json" },
58
+ };
59
+
60
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .POST, url, &headers, body)) {
61
+ .err => |message| return .{ .err = message },
62
+ .ok => |got| got,
63
+ };
64
+
65
+ const access = httpjson.jstr(httpjson.jget(res.body, "accessToken"));
66
+
67
+ if (200 != res.status or null == access) {
68
+ return .{ .err = try sekreto.fail(
69
+ alloc,
70
+ "sekreto: infisical login failed: {d}",
71
+ .{res.status},
72
+ ) };
73
+ }
74
+
75
+ self.renewat = httpjson.renewafter(self.config.io, httpjson.jnum(httpjson.jget(res.body, "expiresIn")));
76
+
77
+ return .{ .ok = access.? };
78
+ }
79
+
80
+ pub fn lookup(self: *InfisicalProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
81
+ const addr = httpjson.trimslash(if (0 != self.addr.len) self.addr else "https://app.infisical.com");
82
+
83
+ switch (try sekreto.checkaddr(alloc, addr)) {
84
+ .err => |message| return .{ .err = message },
85
+ .ok => {},
86
+ }
87
+
88
+ if (0 == self.project.len or 0 == self.environment.len) {
89
+ return .{ .err = try sekreto.fail(alloc, "sekreto: infisical: no project/environment", .{}) };
90
+ }
91
+
92
+ if (null == self.livetoken or httpjson.nowms(self.config.io) >= self.renewat) {
93
+ const fresh = switch (try self.login(alloc, addr)) {
94
+ .err => |message| return .{ .err = message },
95
+ .ok => |got| got,
96
+ };
97
+ if (self.livetoken) |old| {
98
+ self.alloc.free(old);
99
+ }
100
+ self.livetoken = try self.alloc.dupe(u8, fresh);
101
+ }
102
+
103
+ const key = switch (try sekreto.envkey(alloc, name, "")) {
104
+ .err => |message| return .{ .err = message },
105
+ .ok => |made| made,
106
+ };
107
+
108
+ const url = try std.fmt.allocPrint(
109
+ alloc,
110
+ "{s}/api/v3/secrets/raw/{s}?workspaceId={s}&environment={s}&secretPath={s}",
111
+ .{
112
+ addr,
113
+ key,
114
+ try httpjson.escape(alloc, self.project),
115
+ try httpjson.escape(alloc, self.environment),
116
+ try httpjson.escape(alloc, if (0 != self.path.len) self.path else "/"),
117
+ },
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: infisical error: {d}", .{res.status}) };
134
+ }
135
+
136
+ return .{ .ok = httpjson.jstr(httpjson.jget(httpjson.jget(res.body, "secret"), "secretValue")) };
137
+ }
138
+
139
+ pub fn describe(self: *InfisicalProvider, alloc: Allocator) Allocator.Error![]const u8 {
140
+ return std.fmt.allocPrint(alloc, "infisical:{s}/{s}", .{ self.project, self.environment });
141
+ }
142
+
143
+ pub fn deinit(self: *InfisicalProvider, alloc: Allocator) void {
144
+ if (self.livetoken) |token| {
145
+ alloc.free(token);
146
+ }
147
+ }
148
+ };
149
+
150
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
151
+ return .{ .ok = try sekreto.provide(alloc, InfisicalProvider, .{
152
+ .alloc = alloc,
153
+ .config = config,
154
+ .addr = spec.addr,
155
+ .token = spec.token,
156
+ .clientid = spec.clientid,
157
+ .clientsecret = spec.clientsecret,
158
+ .project = spec.project,
159
+ .environment = spec.environment,
160
+ .path = spec.path,
161
+ .livetoken = null,
162
+ .renewat = httpjson.NEVER,
163
+ }) };
164
+ }
165
+
166
+ /// The `infisical` kind.
167
+ pub const infisical: sekreto.Definition = sekreto.providerplugin("infisical", make);
@@ -0,0 +1,202 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/onepassword.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
+ //! 1Password, through a Connect server - 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
+ /// 1Password, through a Connect server.
18
+ ///
19
+ /// The item titled `api.token` (titles keep their dots), in the named vault.
20
+ /// The value is the field with purpose PASSWORD, or the field labelled
21
+ /// `value`. A vault that cannot be found is an error - config names it, so
22
+ /// its absence is a broken store, not a missing secret.
23
+ pub const OnePasswordProvider = struct {
24
+ alloc: Allocator,
25
+ config: sekreto.Config,
26
+ addr: []const u8,
27
+ token: []const u8,
28
+ vault: []const u8,
29
+ vaultid: ?[]const u8,
30
+
31
+ fn authheader(self: *OnePasswordProvider, alloc: Allocator) Allocator.Error![]const u8 {
32
+ return std.fmt.allocPrint(alloc, "Bearer {s}", .{self.token});
33
+ }
34
+
35
+ fn resolvevault(self: *OnePasswordProvider, alloc: Allocator, addr: []const u8) Allocator.Error!Answer([]const u8) {
36
+ if (0 == self.vault.len) {
37
+ return .{ .err = try sekreto.fail(alloc, "sekreto: onepassword: no vault", .{}) };
38
+ }
39
+
40
+ const url = try std.fmt.allocPrint(alloc, "{s}/v1/vaults", .{addr});
41
+ const headers = [_]httpjson.Header{
42
+ .{ .name = "authorization", .value = try self.authheader(alloc) },
43
+ };
44
+
45
+ const res = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, url, &headers, null)) {
46
+ .err => |message| return .{ .err = message },
47
+ .ok => |got| got,
48
+ };
49
+
50
+ const list = res.body orelse std.json.Value{ .null = {} };
51
+
52
+ if (200 != res.status or .array != list) {
53
+ return .{ .err = try sekreto.fail(
54
+ alloc,
55
+ "sekreto: onepassword error: {d}: listing vaults",
56
+ .{res.status},
57
+ ) };
58
+ }
59
+
60
+ for (list.array.items) |entry| {
61
+ const id = httpjson.jstr(httpjson.jget(entry, "id"));
62
+ const named = httpjson.jstr(httpjson.jget(entry, "name"));
63
+
64
+ const hit = (null != id and std.mem.eql(u8, self.vault, id.?)) or
65
+ (null != named and std.mem.eql(u8, self.vault, named.?));
66
+
67
+ if (hit and null != id) {
68
+ return .{ .ok = id.? };
69
+ }
70
+ }
71
+
72
+ return .{ .err = try sekreto.fail(
73
+ alloc,
74
+ "sekreto: onepassword: no vault named {s}",
75
+ .{self.vault},
76
+ ) };
77
+ }
78
+
79
+ pub fn lookup(self: *OnePasswordProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
80
+ switch (try sekreto.checkname(alloc, name)) {
81
+ .err => |message| return .{ .err = message },
82
+ .ok => {},
83
+ }
84
+
85
+ const addr = httpjson.trimslash(self.addr);
86
+ if (0 == addr.len) {
87
+ return .{ .err = try sekreto.fail(alloc, "sekreto: onepassword: no addr", .{}) };
88
+ }
89
+
90
+ switch (try sekreto.checkaddr(alloc, addr)) {
91
+ .err => |message| return .{ .err = message },
92
+ .ok => {},
93
+ }
94
+
95
+ if (null == self.vaultid) {
96
+ const found = switch (try self.resolvevault(alloc, addr)) {
97
+ .err => |message| return .{ .err = message },
98
+ .ok => |got| got,
99
+ };
100
+ self.vaultid = try self.alloc.dupe(u8, found);
101
+ }
102
+
103
+ const filter = try httpjson.escape(alloc, try std.fmt.allocPrint(alloc, "title eq \"{s}\"", .{name}));
104
+
105
+ const findurl = try std.fmt.allocPrint(
106
+ alloc,
107
+ "{s}/v1/vaults/{s}/items?filter={s}",
108
+ .{ addr, self.vaultid.?, filter },
109
+ );
110
+
111
+ const headers = [_]httpjson.Header{
112
+ .{ .name = "authorization", .value = try self.authheader(alloc) },
113
+ };
114
+
115
+ const found = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, findurl, &headers, null)) {
116
+ .err => |message| return .{ .err = message },
117
+ .ok => |got| got,
118
+ };
119
+
120
+ const list = found.body orelse std.json.Value{ .null = {} };
121
+
122
+ if (200 != found.status or .array != list) {
123
+ return .{ .err = try sekreto.fail(
124
+ alloc,
125
+ "sekreto: onepassword error: {d}: finding {s}",
126
+ .{ found.status, name },
127
+ ) };
128
+ }
129
+
130
+ if (0 == list.array.items.len) {
131
+ return .{ .ok = null };
132
+ }
133
+
134
+ const itemid = httpjson.jstr(httpjson.jget(list.array.items[0], "id")) orelse "";
135
+
136
+ const itemurl = try std.fmt.allocPrint(
137
+ alloc,
138
+ "{s}/v1/vaults/{s}/items/{s}",
139
+ .{ addr, self.vaultid.?, itemid },
140
+ );
141
+
142
+ const item = switch (try httpjson.fetchjson(alloc, self.config.io, .GET, itemurl, &headers, null)) {
143
+ .err => |message| return .{ .err = message },
144
+ .ok => |got| got,
145
+ };
146
+
147
+ if (200 != item.status) {
148
+ return .{ .err = try sekreto.fail(
149
+ alloc,
150
+ "sekreto: onepassword error: {d}: reading {s}",
151
+ .{ item.status, name },
152
+ ) };
153
+ }
154
+
155
+ const fields = httpjson.jget(item.body, "fields") orelse return .{ .ok = null };
156
+ if (.array != fields) {
157
+ return .{ .ok = null };
158
+ }
159
+
160
+ for (fields.array.items) |field| {
161
+ if (httpjson.jstr(httpjson.jget(field, "purpose"))) |purpose| {
162
+ if (std.mem.eql(u8, "PASSWORD", purpose)) {
163
+ return .{ .ok = httpjson.jstr(httpjson.jget(field, "value")) };
164
+ }
165
+ }
166
+ }
167
+
168
+ for (fields.array.items) |field| {
169
+ if (httpjson.jstr(httpjson.jget(field, "label"))) |label| {
170
+ if (std.mem.eql(u8, "value", label)) {
171
+ return .{ .ok = httpjson.jstr(httpjson.jget(field, "value")) };
172
+ }
173
+ }
174
+ }
175
+
176
+ return .{ .ok = null };
177
+ }
178
+
179
+ pub fn describe(self: *OnePasswordProvider, alloc: Allocator) Allocator.Error![]const u8 {
180
+ return std.fmt.allocPrint(alloc, "onepassword:{s}", .{self.vault});
181
+ }
182
+
183
+ pub fn deinit(self: *OnePasswordProvider, alloc: Allocator) void {
184
+ if (self.vaultid) |id| {
185
+ alloc.free(id);
186
+ }
187
+ }
188
+ };
189
+
190
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
191
+ return .{ .ok = try sekreto.provide(alloc, OnePasswordProvider, .{
192
+ .alloc = alloc,
193
+ .config = config,
194
+ .addr = spec.addr,
195
+ .token = spec.token,
196
+ .vault = spec.vault,
197
+ .vaultid = null,
198
+ }) };
199
+ }
200
+
201
+ /// The `onepassword` kind.
202
+ pub const onepassword: sekreto.Definition = sekreto.providerplugin("onepassword", make);
@@ -0,0 +1,160 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (zig/plugins/secretspec.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
+ //! SecretSpec (https://secretspec.dev) - a sekreto plugin.
5
+ //!
6
+ //! Spawns the secretspec CLI, which is why it is a plugin.
7
+
8
+ const std = @import("std");
9
+
10
+ const sekreto = @import("sekreto");
11
+ const httpjson = @import("httpjson.zig");
12
+
13
+ const Allocator = std.mem.Allocator;
14
+ const Answer = sekreto.Answer;
15
+ const Found = sekreto.Found;
16
+ const Provider = sekreto.Provider;
17
+ const ProviderSpec = sekreto.ProviderSpec;
18
+
19
+ /// SecretSpec (https://secretspec.dev).
20
+ ///
21
+ /// SecretSpec is a declaration - a `secretspec.toml` naming the secrets a
22
+ /// project needs - plus a chain of its own backends to satisfy them from.
23
+ /// That makes it the same shape as sekreto one level down, and the reason
24
+ /// to support it is the same reason sekreto exists: a project that has
25
+ /// already declared its secrets there should not have to declare them
26
+ /// again here.
27
+ ///
28
+ /// Read through its CLI, as boru is, because that is the interface it
29
+ /// offers a program in another language: `secretspec get API_TOKEN` prints
30
+ /// the value on stdout and nothing else. A sekreto name maps to a
31
+ /// SecretSpec key exactly as it maps to an environment variable -
32
+ /// `api.token` is `API_TOKEN` - which is the convention SecretSpec's own
33
+ /// examples use.
34
+ ///
35
+ /// `backend` selects one of SecretSpec's backends (`--provider`, e.g.
36
+ /// `keyring` or `dotenv://.env`) and is called `backend` here only because
37
+ /// `provider` already means something else in this library.
38
+ ///
39
+ /// A reason is required, not optional: SecretSpec records every read in an
40
+ /// audit log and refuses to read at all without one. sekreto sends
41
+ /// `sekreto` unless told otherwise, so the audit trail says which tool
42
+ /// asked.
43
+ pub const SecretspecProvider = struct {
44
+ config: sekreto.Config,
45
+ command: []const u8,
46
+ file: []const u8,
47
+ profile: []const u8,
48
+ backend: []const u8,
49
+ reason: []const u8,
50
+ prefix: []const u8,
51
+
52
+ pub fn lookup(self: *SecretspecProvider, alloc: Allocator, name: []const u8) Allocator.Error!Found {
53
+ const key = switch (try sekreto.envkey(alloc, name, self.prefix)) {
54
+ .err => |message| return .{ .err = message },
55
+ .ok => |made| made,
56
+ };
57
+
58
+ var argv: std.ArrayList([]const u8) = .empty;
59
+ try argv.append(alloc, self.command);
60
+
61
+ if (0 != self.file.len) {
62
+ try argv.append(alloc, "--file");
63
+ try argv.append(alloc, self.file);
64
+ }
65
+
66
+ try argv.append(alloc, "get");
67
+ try argv.append(alloc, key);
68
+
69
+ if (0 != self.backend.len) {
70
+ try argv.append(alloc, "--provider");
71
+ try argv.append(alloc, self.backend);
72
+ }
73
+ if (0 != self.profile.len) {
74
+ try argv.append(alloc, "--profile");
75
+ try argv.append(alloc, self.profile);
76
+ }
77
+
78
+ try argv.append(alloc, "--reason");
79
+ try argv.append(alloc, if (0 != self.reason.len) self.reason else "sekreto");
80
+
81
+ const run = std.process.run(alloc, self.config.io, .{
82
+ .argv = argv.items,
83
+ .environ_map = self.config.env,
84
+ }) catch |err| {
85
+ return .{ .err = try sekreto.fail(
86
+ alloc,
87
+ "sekreto: cannot run {s}: {s}",
88
+ .{ self.command, @errorName(err) },
89
+ ) };
90
+ };
91
+
92
+ const exited = switch (run.term) {
93
+ .exited => |code| code,
94
+ else => 1,
95
+ };
96
+
97
+ if (0 == exited) {
98
+ // The value and one newline, and nothing else.
99
+ var value: []const u8 = run.stdout;
100
+ if (0 != value.len and '\n' == value[value.len - 1]) {
101
+ value = value[0 .. value.len - 1];
102
+ }
103
+ return .{ .ok = value };
104
+ }
105
+
106
+ const why = std.mem.trim(u8, run.stderr, " \t\r\n");
107
+
108
+ if (try secretspecmiss(alloc, why, key)) {
109
+ return .{ .ok = null };
110
+ }
111
+
112
+ if (0 != why.len) {
113
+ return .{ .err = try sekreto.fail(alloc, "sekreto: secretspec error: {s}", .{why}) };
114
+ }
115
+
116
+ return .{ .err = try sekreto.fail(alloc, "sekreto: secretspec error: exit {d}", .{exited}) };
117
+ }
118
+
119
+ pub fn describe(self: *SecretspecProvider, alloc: Allocator) Allocator.Error![]const u8 {
120
+ if (0 == self.backend.len) {
121
+ return alloc.dupe(u8, "secretspec");
122
+ }
123
+ return std.fmt.allocPrint(alloc, "secretspec:{s}", .{self.backend});
124
+ }
125
+
126
+ pub fn deinit(_: *SecretspecProvider, _: Allocator) void {}
127
+ };
128
+
129
+ /// Does this SecretSpec failure mean "no such secret" rather than "I could
130
+ /// not answer"?
131
+ ///
132
+ /// SecretSpec says `Secret 'API_TOKEN' not found` for both a name it does
133
+ /// not declare and one declared with no value, and both are misses: this
134
+ /// store does not hold it, so the chain carries on.
135
+ ///
136
+ /// MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
137
+ /// `Provider backend 'keyring' not found`, which is a store that could not
138
+ /// answer at all - and reading that as a miss is the worst failure this
139
+ /// library has, because the chain then falls through to a weaker store
140
+ /// without saying so. The key is required to appear, so the two cannot be
141
+ /// confused.
142
+ fn secretspecmiss(alloc: Allocator, why: []const u8, key: []const u8) Allocator.Error!bool {
143
+ const phrase = try std.fmt.allocPrint(alloc, "Secret '{s}' not found", .{key});
144
+ return null != std.mem.indexOf(u8, why, phrase);
145
+ }
146
+
147
+ fn make(alloc: Allocator, config: sekreto.Config, spec: ProviderSpec) Allocator.Error!Answer(Provider) {
148
+ return .{ .ok = try sekreto.provide(alloc, SecretspecProvider, .{
149
+ .config = config,
150
+ .command = if (0 != spec.command.len) spec.command else "secretspec",
151
+ .file = spec.file,
152
+ .profile = spec.profile,
153
+ .backend = spec.backend,
154
+ .reason = spec.reason,
155
+ .prefix = spec.prefix,
156
+ }) };
157
+ }
158
+
159
+ /// The `secretspec` kind.
160
+ pub const secretspec: sekreto.Definition = sekreto.providerplugin("secretspec", make);