@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,124 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/boru.lua)
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 boru plugin: a boru vault, through its own CLI or its own wire
5
+ -- protocol. Needs a child process, and HTTPS for the wire path.
6
+ --
7
+ -- A port of typescript/plugins/boru.ts, which is canonical.
8
+
9
+ local err = require('feature.secrets.sekreto.err')
10
+ local name = require('feature.secrets.sekreto.name')
11
+ local addr = require('feature.secrets.sekreto.addr')
12
+ local providers = require('feature.secrets.sekreto.providers')
13
+ local json = require('feature.secrets.sekreto.plugins.json')
14
+ local httpjson = require('feature.secrets.sekreto.plugins.httpjson')
15
+ local support = require('feature.secrets.sekreto.plugins.support')
16
+ local net = require('feature.secrets.sekreto.plugins.net')
17
+
18
+ local fail = err.fail
19
+ local nonempty = providers.nonempty
20
+ local trimslash = providers.trimslash
21
+ local providerplugin = providers.providerplugin
22
+ local stripnewline = support.stripnewline
23
+ local fetchjson = httpjson.fetchjson
24
+ local runcmd = net.runcmd
25
+
26
+ local M = {}
27
+
28
+ --- Does this boru failure mean "no such secret" rather than "I could not
29
+ --- answer"? Matched on boru's own wording for a missing alias.
30
+ function M.borumiss(why)
31
+ return nil ~= why:find('no alias named', 1, true)
32
+ end
33
+
34
+ --- A boru vault (https://github.com/boru-lang/boru).
35
+ ---
36
+ --- Two ways in, both boru's own. With no `addr`, the CLI:
37
+ --- `boru vault get --reveal <alias>` prints the secret on stdout and
38
+ --- nothing else. The passphrase is read by boru itself from
39
+ --- BORU_VAULT_PASSPHRASE; sekreto never accepts it as config and never
40
+ --- puts it on a command line, where the process table would publish it.
41
+ ---
42
+ --- With an `addr`, boru's wire protocol: a read-only, HashiCorp-shaped
43
+ --- provision API. A sekreto name is already a valid boru alias, and boru
44
+ --- aliases keep their dots, so `api.token` is the single path segment
45
+ --- `api.token` - not the `api`/`token` split a HashiCorp KV gets.
46
+ local function boru(command, namespace, home, useaddr, token, mount)
47
+ local usecommand = nonempty(command) and command or 'boru'
48
+ local address = (nil == useaddr) and '' or trimslash(useaddr)
49
+ local usetoken = token or ''
50
+ local usemount = nonempty(mount) and mount or 'secret'
51
+
52
+ local function wirelookup(secret)
53
+ addr.checkaddr(address)
54
+
55
+ local alias = nonempty(namespace) and (namespace .. '/' .. secret) or secret
56
+ local url = address .. '/v1/' .. usemount .. '/data/' .. alias
57
+
58
+ local res = fetchjson('GET', url, { { 'X-Vault-Token', usetoken } })
59
+
60
+ if 404 == res.status then
61
+ return nil
62
+ end
63
+
64
+ if 200 ~= res.status then
65
+ fail('sekreto: boru serve error: ' .. res.status .. ': ' .. url)
66
+ end
67
+
68
+ return json.text(json.dig(res.body, 'data', 'data', 'value'))
69
+ end
70
+
71
+ return {
72
+ lookup = function(secret)
73
+ name.checkname(secret)
74
+
75
+ if '' ~= address then
76
+ return wirelookup(secret)
77
+ end
78
+
79
+ local alias = nonempty(namespace) and (namespace .. ':' .. secret) or secret
80
+
81
+ -- BORU_HOME is the only variable sekreto sets for the child; the
82
+ -- passphrase is boru's own to read from BORU_VAULT_PASSPHRASE, and
83
+ -- is never config here and never on a command line.
84
+ local overrides = nil
85
+ if nonempty(home) then
86
+ overrides = { 'BORU_HOME=' .. home }
87
+ end
88
+
89
+ local out, why, status = runcmd(
90
+ { usecommand, 'vault', 'get', '--reveal', alias }, overrides, usecommand
91
+ )
92
+
93
+ if 0 == status then
94
+ -- boru prints the value and one newline, and nothing else.
95
+ return stripnewline(out)
96
+ end
97
+
98
+ -- "no alias named" is boru saying it does not hold this secret,
99
+ -- which is a miss. A locked vault or a wrong passphrase is not -
100
+ -- treating it as one would fall through to a weaker store without
101
+ -- saying so.
102
+ if M.borumiss(why) then
103
+ return nil
104
+ end
105
+
106
+ fail('sekreto: boru vault error: ' ..
107
+ (('' == why) and ('exit ' .. status) or why))
108
+ end,
109
+ describe = function()
110
+ if '' ~= address then
111
+ return 'boru:' .. address
112
+ end
113
+ return 'boru' .. (nonempty(namespace) and (':' .. namespace) or '')
114
+ end,
115
+ }
116
+ end
117
+
118
+ --- The kind, as a voxgig/plugin definition.
119
+ M.boru = providerplugin('boru', function(spec)
120
+ return boru(spec.command, spec.namespace, spec.home, spec.addr,
121
+ spec.token, spec.mount)
122
+ end)
123
+
124
+ return M
@@ -0,0 +1,212 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/crypto.lua)
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
+ -- SHA-256, HMAC-SHA256, hex and strict base64 - all hand-rolled.
5
+ --
6
+ -- Lua has no crypto at all. The port links OpenSSL for TLS (see
7
+ -- native/sekretonet.c), and it would be one line to call that library's
8
+ -- EVP_Digest here instead - but the dependency rule covers cryptographic
9
+ -- TRANSPORT and nothing else, so the digests sekreto signs with are its
10
+ -- own. Rust took the same decision with `ring` already in rustls's
11
+ -- closure.
12
+ --
13
+ -- Correctness is not argued from the code: SigV4 is a chain of these
14
+ -- primitives, so the five known-answer vectors in spec/sekreto.json fail
15
+ -- on one wrong bit anywhere below.
16
+ --
17
+ -- Lua 5.4 has 64-bit integers and native bitwise operators, so the
18
+ -- rotations are direct - every addition is masked back to 32 bits.
19
+
20
+ local M = {}
21
+
22
+ local MASK = 0xffffffff
23
+
24
+ local K = {
25
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
26
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
27
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
28
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
29
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
30
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
31
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
32
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
34
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
35
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
36
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
38
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
39
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
40
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
41
+ }
42
+
43
+ local function ror(value, count)
44
+ return ((value >> count) | (value << (32 - count))) & MASK
45
+ end
46
+
47
+ --- SHA-256 of a byte string, as 32 raw bytes.
48
+ function M.sha256(message)
49
+ local h0, h1, h2, h3 = 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a
50
+ local h4, h5, h6, h7 = 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
51
+
52
+ -- 0x80, then zeros until the length lands 8 bytes short of a block,
53
+ -- then the BIT length, big-endian.
54
+ local bitlen = #message * 8
55
+ local padded = message .. '\128'
56
+ local rem = (#padded % 64)
57
+ local fill = (56 - rem) % 64
58
+ padded = padded .. string.rep('\0', fill) .. string.pack('>I8', bitlen)
59
+
60
+ local w = {}
61
+
62
+ for block = 1, #padded, 64 do
63
+ for index = 0, 15 do
64
+ w[index + 1] = string.unpack('>I4', padded, block + index * 4)
65
+ end
66
+
67
+ for index = 17, 64 do
68
+ local a = w[index - 15]
69
+ local b = w[index - 2]
70
+ local s0 = ror(a, 7) ~ ror(a, 18) ~ (a >> 3)
71
+ local s1 = ror(b, 17) ~ ror(b, 19) ~ (b >> 10)
72
+ w[index] = (w[index - 16] + s0 + w[index - 7] + s1) & MASK
73
+ end
74
+
75
+ local a, b, c, d = h0, h1, h2, h3
76
+ local e, f, g, h = h4, h5, h6, h7
77
+
78
+ for index = 1, 64 do
79
+ local S1 = ror(e, 6) ~ ror(e, 11) ~ ror(e, 25)
80
+ local ch = (e & f) ~ ((~e & MASK) & g)
81
+ local temp1 = (h + S1 + ch + K[index] + w[index]) & MASK
82
+ local S0 = ror(a, 2) ~ ror(a, 13) ~ ror(a, 22)
83
+ local maj = (a & b) ~ (a & c) ~ (b & c)
84
+ local temp2 = (S0 + maj) & MASK
85
+
86
+ h = g
87
+ g = f
88
+ f = e
89
+ e = (d + temp1) & MASK
90
+ d = c
91
+ c = b
92
+ b = a
93
+ a = (temp1 + temp2) & MASK
94
+ end
95
+
96
+ h0 = (h0 + a) & MASK
97
+ h1 = (h1 + b) & MASK
98
+ h2 = (h2 + c) & MASK
99
+ h3 = (h3 + d) & MASK
100
+ h4 = (h4 + e) & MASK
101
+ h5 = (h5 + f) & MASK
102
+ h6 = (h6 + g) & MASK
103
+ h7 = (h7 + h) & MASK
104
+ end
105
+
106
+ return string.pack('>I4I4I4I4I4I4I4I4', h0, h1, h2, h3, h4, h5, h6, h7)
107
+ end
108
+
109
+ --- Lowercase hex, two digits per byte.
110
+ function M.hex(bytes)
111
+ local out = {}
112
+ for index = 1, #bytes do
113
+ out[index] = string.format('%02x', bytes:byte(index))
114
+ end
115
+ return table.concat(out)
116
+ end
117
+
118
+ function M.sha256hex(message)
119
+ return M.hex(M.sha256(message))
120
+ end
121
+
122
+ local BLOCK = 64
123
+
124
+ --- HMAC-SHA256, RFC 2104. The argument order is (key, data) in every
125
+ --- port; several standard libraries take (data, key), and that is fixed
126
+ --- at the wrapper rather than at the call sites.
127
+ function M.hmac(key, data)
128
+ local usekey = key
129
+
130
+ if #usekey > BLOCK then
131
+ usekey = M.sha256(usekey)
132
+ end
133
+ if #usekey < BLOCK then
134
+ usekey = usekey .. string.rep('\0', BLOCK - #usekey)
135
+ end
136
+
137
+ local ipad = {}
138
+ local opad = {}
139
+
140
+ for index = 1, BLOCK do
141
+ local byte = usekey:byte(index)
142
+ ipad[index] = string.char(byte ~ 0x36)
143
+ opad[index] = string.char(byte ~ 0x5c)
144
+ end
145
+
146
+ local inner = M.sha256(table.concat(ipad) .. data)
147
+ return M.sha256(table.concat(opad) .. inner)
148
+ end
149
+
150
+ -- ---- base64 ----------------------------------------------------------
151
+
152
+ local ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
153
+
154
+ local VALUES = {}
155
+ for index = 1, #ALPHABET do
156
+ VALUES[ALPHABET:sub(index, index)] = index - 1
157
+ end
158
+
159
+ --- Decode standard base64, STRICTLY: returns nil for anything that is not
160
+ --- a well-formed payload.
161
+ ---
162
+ --- Strictness is the point. A lenient decoder skips bytes outside the
163
+ --- alphabet and hands back plausible-looking bytes for a corrupted
164
+ --- payload - which are then returned to the caller AS THE SECRET. A
165
+ --- rejection here becomes an error, never a miss.
166
+ function M.unbase64(text)
167
+ if 'string' ~= type(text) then
168
+ return nil
169
+ end
170
+
171
+ local clean = text:gsub('[ \t\r\n]', '')
172
+
173
+ if 0 ~= #clean % 4 then
174
+ return nil
175
+ end
176
+
177
+ local body = clean
178
+ local pad = 0
179
+
180
+ while 0 < #body and '=' == body:sub(-1) do
181
+ pad = pad + 1
182
+ body = body:sub(1, #body - 1)
183
+ end
184
+
185
+ if 2 < pad then
186
+ return nil
187
+ end
188
+
189
+ for index = 1, #body do
190
+ if nil == VALUES[body:sub(index, index)] then
191
+ return nil
192
+ end
193
+ end
194
+
195
+ local out = {}
196
+ local acc = 0
197
+ local bits = 0
198
+
199
+ for index = 1, #body do
200
+ acc = (acc << 6) | VALUES[body:sub(index, index)]
201
+ bits = bits + 6
202
+
203
+ if 8 <= bits then
204
+ bits = bits - 8
205
+ out[#out + 1] = string.char((acc >> bits) & 0xff)
206
+ end
207
+ end
208
+
209
+ return table.concat(out)
210
+ end
211
+
212
+ return M
@@ -0,0 +1,89 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/doppler.lua)
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 doppler plugin: a whole Doppler config downloaded once, over
5
+ -- HTTPS, and answered from memory like a remote .env.
6
+ --
7
+ -- A port of typescript/plugins/doppler.ts, which is canonical.
8
+
9
+ local err = require('feature.secrets.sekreto.err')
10
+ local name = require('feature.secrets.sekreto.name')
11
+ local addr = require('feature.secrets.sekreto.addr')
12
+ local providers = require('feature.secrets.sekreto.providers')
13
+ local json = require('feature.secrets.sekreto.plugins.json')
14
+ local httpjson = require('feature.secrets.sekreto.plugins.httpjson')
15
+ local support = require('feature.secrets.sekreto.plugins.support')
16
+
17
+ local fail = err.fail
18
+ local nonempty = providers.nonempty
19
+ local trimslash = providers.trimslash
20
+ local providerplugin = providers.providerplugin
21
+ local first = support.first
22
+ local fetchjson = httpjson.fetchjson
23
+ local uriescape = support.uriescape
24
+
25
+ local M = {}
26
+
27
+ --- Doppler.
28
+ ---
29
+ --- The whole config is downloaded once - Doppler's own bulk endpoint -
30
+ --- and answered from memory, like a remote .env: `api.token` is the
31
+ --- `API_TOKEN` entry. A failed load caches nothing, so it retries.
32
+ local function doppler(token, project, config, useaddr)
33
+ local values = nil
34
+
35
+ local function load()
36
+ if nil ~= values then
37
+ return values
38
+ end
39
+
40
+ local address = trimslash(first(useaddr, 'https://api.doppler.com'))
41
+ addr.checkaddr(address)
42
+
43
+ local url = address .. '/v3/configs/config/secrets/download?format=json'
44
+ if nonempty(project) then
45
+ url = url .. '&project=' .. uriescape(project)
46
+ end
47
+ if nonempty(config) then
48
+ url = url .. '&config=' .. uriescape(config)
49
+ end
50
+
51
+ local res = fetchjson(
52
+ 'GET', url, { { 'authorization', 'Bearer ' .. (token or '') } }
53
+ )
54
+
55
+ local body = json.asobj(res.body)
56
+ if 200 ~= res.status or nil == body then
57
+ fail('sekreto: doppler error: ' .. res.status)
58
+ end
59
+
60
+ local loaded = {}
61
+ for _, key in ipairs(body.keys) do
62
+ local text = json.text(body.vals[key])
63
+ if nil ~= text then
64
+ loaded[key] = text
65
+ end
66
+ end
67
+
68
+ values = loaded
69
+ return loaded
70
+ end
71
+
72
+ return {
73
+ -- The `prefix` option is deliberately not consulted by this kind.
74
+ lookup = function(secret)
75
+ return load()[name.envkey(secret)]
76
+ end,
77
+ describe = function()
78
+ return 'doppler' ..
79
+ (nonempty(project) and (':' .. project .. '/' .. (config or '')) or '')
80
+ end,
81
+ }
82
+ end
83
+
84
+ --- The kind, as a voxgig/plugin definition.
85
+ M.doppler = providerplugin('doppler', function(spec)
86
+ return doppler(spec.token, spec.project, spec.config, spec.addr)
87
+ end)
88
+
89
+ return M
@@ -0,0 +1,129 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/gcpsecrets.lua)
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 gcpsecrets plugin: GCP Secret Manager, over HTTPS, with the GCE
5
+ -- metadata server as a credential source.
6
+ --
7
+ -- A port of typescript/plugins/gcpsecrets.ts, which is canonical.
8
+
9
+ local err = require('feature.secrets.sekreto.err')
10
+ local name = require('feature.secrets.sekreto.name')
11
+ local addr = require('feature.secrets.sekreto.addr')
12
+ local providers = require('feature.secrets.sekreto.providers')
13
+ local json = require('feature.secrets.sekreto.plugins.json')
14
+ local httpjson = require('feature.secrets.sekreto.plugins.httpjson')
15
+ local support = require('feature.secrets.sekreto.plugins.support')
16
+ local crypto = require('feature.secrets.sekreto.plugins.crypto')
17
+
18
+ local fail = err.fail
19
+ local nonempty = providers.nonempty
20
+ local trimslash = providers.trimslash
21
+ local providerplugin = providers.providerplugin
22
+ local first = support.first
23
+ local nowms = support.nowms
24
+ local renewtime = support.renewtime
25
+ local NEVER = support.NEVER
26
+ local fetchjson = httpjson.fetchjson
27
+
28
+ local M = {}
29
+
30
+ --- GCP Secret Manager.
31
+ ---
32
+ --- `api.token` reads secret `api_token` (dots flattened to `_`; Secret
33
+ --- Manager ids have no hierarchy and reject dots), latest version. The
34
+ --- token comes from config, then GOOGLE_OAUTH_ACCESS_TOKEN, then the
35
+ --- GCE/GKE metadata server - so on Google's own platform no credential
36
+ --- configuration is needed at all.
37
+ ---
38
+ --- The metadata call itself is plain http to a link-local host by
39
+ --- platform design and carries no credential, so `checkaddr` guards the
40
+ --- Secret Manager address instead.
41
+ local function gcpsecrets(project, token, useaddr, metadataaddr)
42
+ local livetoken = nil
43
+ local renewat = NEVER
44
+
45
+ local function usemetadataaddr()
46
+ if nonempty(metadataaddr) then
47
+ return metadataaddr
48
+ end
49
+
50
+ local host = os.getenv('GCE_METADATA_HOST')
51
+ if nonempty(host) then
52
+ return 'http://' .. host
53
+ end
54
+
55
+ return 'http://metadata.google.internal'
56
+ end
57
+
58
+ local function login()
59
+ local configured = first(token, os.getenv('GOOGLE_OAUTH_ACCESS_TOKEN'))
60
+ if '' ~= configured then
61
+ return configured
62
+ end
63
+
64
+ local url = trimslash(usemetadataaddr()) ..
65
+ '/computeMetadata/v1/instance/service-accounts/default/token'
66
+
67
+ local res = fetchjson('GET', url, { { 'Metadata-Flavor', 'Google' } })
68
+ local got = json.text(json.dig(res.body, 'access_token'))
69
+
70
+ if 200 ~= res.status or nil == got or '' == got then
71
+ fail('sekreto: gcp: no token and metadata server did not answer')
72
+ end
73
+
74
+ renewat = renewtime(json.dig(res.body, 'expires_in'))
75
+
76
+ return got
77
+ end
78
+
79
+ return {
80
+ lookup = function(secret)
81
+ local useproject = project or ''
82
+ if '' == useproject then
83
+ fail('sekreto: gcp: no project')
84
+ end
85
+
86
+ local address = first(useaddr, 'https://secretmanager.googleapis.com')
87
+ addr.checkaddr(address)
88
+
89
+ if nil == livetoken or nowms() >= renewat then
90
+ livetoken = login()
91
+ end
92
+
93
+ local url = trimslash(address) .. '/v1/projects/' .. useproject ..
94
+ '/secrets/' .. name.flatname(secret, '_') .. '/versions/latest:access'
95
+
96
+ local res = fetchjson('GET', url, { { 'authorization', 'Bearer ' .. livetoken } })
97
+
98
+ if 404 == res.status then
99
+ return nil
100
+ end
101
+
102
+ if 200 ~= res.status then
103
+ fail('sekreto: gcp error: ' .. res.status .. ': ' .. url)
104
+ end
105
+
106
+ local data = json.asstr(json.dig(res.body, 'payload', 'data'))
107
+ if nil == data then
108
+ return nil
109
+ end
110
+
111
+ local decoded = crypto.unbase64(data)
112
+ if nil == decoded then
113
+ fail('sekreto: gcp: undecodable secret')
114
+ end
115
+
116
+ return decoded
117
+ end,
118
+ describe = function()
119
+ return 'gcpsecrets:' .. (project or '')
120
+ end,
121
+ }
122
+ end
123
+
124
+ --- The kind, as a voxgig/plugin definition.
125
+ M.gcpsecrets = providerplugin('gcpsecrets', function(spec)
126
+ return gcpsecrets(spec.project, spec.token, spec.addr, spec.metadataaddr)
127
+ end)
128
+
129
+ return M