@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,449 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/json.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
+ -- sekreto's own JSON, because Lua has none.
5
+ --
6
+ -- Lua 5.4's whole standard library is basic, coroutine, package, string,
7
+ -- utf8, table, math, io, os and debug - so a JSON parser is written here
8
+ -- rather than depended on. Two properties the vendor payloads need and a
9
+ -- naive table would not give: object keys keep their INSERTION ORDER (an
10
+ -- AWS payload's field order is signed, so it cannot be re-ordered by a
11
+ -- hash table), and a parse FAILURE is distinguishable from the literal
12
+ -- `null` (fetchjson must tell "this text is not JSON" from "this text is
13
+ -- the JSON null", and Lua's `nil` cannot say both).
14
+ --
15
+ -- A port of typescript's JSON handling, which is canonical.
16
+
17
+ local M = {}
18
+
19
+ -- The JSON null. A Lua nil cannot live in a table and cannot be returned
20
+ -- distinguishably, so null is a sentinel of its own.
21
+ M.NULL = setmetatable({}, { __tostring = function() return 'null' end })
22
+
23
+ local ARRMT = { __sekretojson = 'arr' }
24
+ local OBJMT = { __sekretojson = 'obj' }
25
+
26
+ -- The recursion bound. A response body arrives before any trust check has
27
+ -- been made, so `[[[[[...` must fail rather than take the process down.
28
+ local MAXDEPTH = 128
29
+
30
+ --- A JSON array, from a Lua sequence.
31
+ function M.arr(items)
32
+ return setmetatable({ items = items or {} }, ARRMT)
33
+ end
34
+
35
+ --- A JSON object, from a list of {key, value} pairs, in that order.
36
+ function M.obj(pairlist)
37
+ local keys = {}
38
+ local vals = {}
39
+
40
+ for _, pair in ipairs(pairlist or {}) do
41
+ if nil == vals[pair[1]] then
42
+ keys[#keys + 1] = pair[1]
43
+ end
44
+ vals[pair[1]] = pair[2]
45
+ end
46
+
47
+ return setmetatable({ keys = keys, vals = vals }, OBJMT)
48
+ end
49
+
50
+ function M.isarr(val)
51
+ return 'table' == type(val) and ARRMT == getmetatable(val)
52
+ end
53
+
54
+ function M.isobj(val)
55
+ return 'table' == type(val) and OBJMT == getmetatable(val)
56
+ end
57
+
58
+ function M.isnull(val)
59
+ return M.NULL == val
60
+ end
61
+
62
+ --- Set one key on an object, keeping insertion order.
63
+ function M.set(object, key, value)
64
+ if nil == object.vals[key] then
65
+ object.keys[#object.keys + 1] = key
66
+ end
67
+ object.vals[key] = value
68
+ return object
69
+ end
70
+
71
+ --- Walk nested objects, stopping at the first missing step. Returns nil.
72
+ function M.dig(val, ...)
73
+ local at = val
74
+
75
+ for _, key in ipairs({ ... }) do
76
+ if not M.isobj(at) then
77
+ return nil
78
+ end
79
+ at = at.vals[key]
80
+ if nil == at then
81
+ return nil
82
+ end
83
+ end
84
+
85
+ return at
86
+ end
87
+
88
+ --- The value as a string, or nil for anything else.
89
+ function M.asstr(val)
90
+ return 'string' == type(val) and val or nil
91
+ end
92
+
93
+ --- The value as a number, or nil for anything else.
94
+ function M.asnum(val)
95
+ return 'number' == type(val) and val or nil
96
+ end
97
+
98
+ --- The value as an array's item list, or nil.
99
+ function M.asarr(val)
100
+ return M.isarr(val) and val.items or nil
101
+ end
102
+
103
+ --- The value as an object, or nil.
104
+ function M.asobj(val)
105
+ return M.isobj(val) and val or nil
106
+ end
107
+
108
+ --- Render a number the same way in every port: 5.0 prints as 5.
109
+ function M.numstr(val)
110
+ if val ~= val or math.huge == val or -math.huge == val then
111
+ return 'null'
112
+ end
113
+
114
+ if math.type(val) == 'integer' then
115
+ return string.format('%d', val)
116
+ end
117
+
118
+ if val == math.floor(val) and math.abs(val) < 9007199254740992.0 then
119
+ return string.format('%d', math.tointeger(val) or val)
120
+ end
121
+
122
+ return (string.format('%.17g', val))
123
+ end
124
+
125
+ --- Printable text, or nil. A JSON null yields nil, so a null field is a
126
+ --- miss rather than the string "null".
127
+ function M.text(val)
128
+ if nil == val or M.NULL == val then
129
+ return nil
130
+ end
131
+ if 'string' == type(val) then
132
+ return val
133
+ end
134
+ if 'number' == type(val) then
135
+ return M.numstr(val)
136
+ end
137
+ if 'boolean' == type(val) then
138
+ return val and 'true' or 'false'
139
+ end
140
+ return nil
141
+ end
142
+
143
+ --- Render a string as a JSON string literal.
144
+ function M.quote(text)
145
+ local out = { '"' }
146
+
147
+ for index = 1, #text do
148
+ local ch = text:sub(index, index)
149
+ local byte = ch:byte()
150
+
151
+ if '"' == ch then
152
+ out[#out + 1] = '\\"'
153
+ elseif '\\' == ch then
154
+ out[#out + 1] = '\\\\'
155
+ elseif '\n' == ch then
156
+ out[#out + 1] = '\\n'
157
+ elseif '\r' == ch then
158
+ out[#out + 1] = '\\r'
159
+ elseif '\t' == ch then
160
+ out[#out + 1] = '\\t'
161
+ elseif 0x20 > byte then
162
+ out[#out + 1] = string.format('\\u%04x', byte)
163
+ else
164
+ out[#out + 1] = ch
165
+ end
166
+ end
167
+
168
+ out[#out + 1] = '"'
169
+ return table.concat(out)
170
+ end
171
+
172
+ --- Compact JSON text: no spaces, no newlines, keys in insertion order.
173
+ function M.stringify(val)
174
+ if nil == val or M.NULL == val then
175
+ return 'null'
176
+ end
177
+
178
+ local kind = type(val)
179
+
180
+ if 'boolean' == kind then
181
+ return val and 'true' or 'false'
182
+ end
183
+
184
+ if 'number' == kind then
185
+ return M.numstr(val)
186
+ end
187
+
188
+ if 'string' == kind then
189
+ return M.quote(val)
190
+ end
191
+
192
+ if M.isarr(val) then
193
+ local parts = {}
194
+ for index, item in ipairs(val.items) do
195
+ parts[index] = M.stringify(item)
196
+ end
197
+ return '[' .. table.concat(parts, ',') .. ']'
198
+ end
199
+
200
+ if M.isobj(val) then
201
+ local parts = {}
202
+ for index, key in ipairs(val.keys) do
203
+ parts[index] = M.quote(key) .. ':' .. M.stringify(val.vals[key])
204
+ end
205
+ return '{' .. table.concat(parts, ',') .. '}'
206
+ end
207
+
208
+ return 'null'
209
+ end
210
+
211
+ -- ---- the parser ------------------------------------------------------
212
+ --
213
+ -- Every failure below raises inside a pcall that `parse` owns, so no error
214
+ -- ever escapes it: a malformed body is answered with nil, and the caller
215
+ -- decides whether that is a miss or a failure.
216
+
217
+ local parsevalue
218
+
219
+ local WS = { [' '] = true, ['\t'] = true, ['\n'] = true, ['\r'] = true }
220
+
221
+ local function skipws(text, pos)
222
+ local at = pos
223
+ while at <= #text and WS[text:sub(at, at)] do
224
+ at = at + 1
225
+ end
226
+ return at
227
+ end
228
+
229
+ local function bad(why)
230
+ error({ json = true, why = why }, 0)
231
+ end
232
+
233
+ local function parseword(text, pos, word, value)
234
+ if word ~= text:sub(pos, pos + #word - 1) then
235
+ bad('literal')
236
+ end
237
+ return value, pos + #word
238
+ end
239
+
240
+ local HEX = '0123456789abcdefABCDEF'
241
+
242
+ local function parsestring(text, pos)
243
+ if '"' ~= text:sub(pos, pos) then
244
+ bad('string')
245
+ end
246
+
247
+ local at = pos + 1
248
+ local out = {}
249
+
250
+ while at <= #text do
251
+ local ch = text:sub(at, at)
252
+
253
+ if '"' == ch then
254
+ return table.concat(out), at + 1
255
+ end
256
+
257
+ if '\\' ~= ch then
258
+ out[#out + 1] = ch
259
+ at = at + 1
260
+ else
261
+ local escape = text:sub(at + 1, at + 1)
262
+ at = at + 2
263
+
264
+ if '"' == escape then
265
+ out[#out + 1] = '"'
266
+ elseif '\\' == escape then
267
+ out[#out + 1] = '\\'
268
+ elseif '/' == escape then
269
+ out[#out + 1] = '/'
270
+ elseif 'b' == escape then
271
+ out[#out + 1] = '\b'
272
+ elseif 'f' == escape then
273
+ out[#out + 1] = '\f'
274
+ elseif 'n' == escape then
275
+ out[#out + 1] = '\n'
276
+ elseif 'r' == escape then
277
+ out[#out + 1] = '\r'
278
+ elseif 't' == escape then
279
+ out[#out + 1] = '\t'
280
+ elseif 'u' == escape then
281
+ local digits = text:sub(at, at + 3)
282
+ if 4 ~= #digits then
283
+ bad('escape')
284
+ end
285
+ for index = 1, 4 do
286
+ if nil == HEX:find(digits:sub(index, index), 1, true) then
287
+ bad('escape')
288
+ end
289
+ end
290
+ -- One UTF-16 code unit, appended as UTF-8. No surrogate-pair
291
+ -- recombination, in this port or any other.
292
+ out[#out + 1] = utf8.char(tonumber(digits, 16))
293
+ at = at + 4
294
+ else
295
+ bad('escape')
296
+ end
297
+ end
298
+ end
299
+
300
+ bad('string')
301
+ end
302
+
303
+ local function parseobj(text, pos, depth)
304
+ local at = skipws(text, pos + 1)
305
+ local object = M.obj({})
306
+
307
+ if '}' == text:sub(at, at) then
308
+ return object, at + 1
309
+ end
310
+
311
+ while true do
312
+ at = skipws(text, at)
313
+
314
+ local key
315
+ key, at = parsestring(text, at)
316
+
317
+ at = skipws(text, at)
318
+ if ':' ~= text:sub(at, at) then
319
+ bad('object')
320
+ end
321
+
322
+ local value
323
+ value, at = parsevalue(text, at + 1, depth + 1)
324
+
325
+ M.set(object, key, value)
326
+
327
+ at = skipws(text, at)
328
+ local ch = text:sub(at, at)
329
+
330
+ if '}' == ch then
331
+ return object, at + 1
332
+ end
333
+
334
+ if ',' ~= ch then
335
+ bad('object')
336
+ end
337
+
338
+ at = at + 1
339
+ end
340
+ end
341
+
342
+ local function parsearr(text, pos, depth)
343
+ local at = skipws(text, pos + 1)
344
+ local items = {}
345
+
346
+ if ']' == text:sub(at, at) then
347
+ return M.arr(items), at + 1
348
+ end
349
+
350
+ while true do
351
+ local value
352
+ value, at = parsevalue(text, at, depth + 1)
353
+ items[#items + 1] = value
354
+
355
+ at = skipws(text, at)
356
+ local ch = text:sub(at, at)
357
+
358
+ if ']' == ch then
359
+ return M.arr(items), at + 1
360
+ end
361
+
362
+ if ',' ~= ch then
363
+ bad('array')
364
+ end
365
+
366
+ at = at + 1
367
+ end
368
+ end
369
+
370
+ local NUMCHARS = '0123456789+-.eE'
371
+
372
+ local function parsenumber(text, pos)
373
+ local at = pos
374
+
375
+ while at <= #text and nil ~= NUMCHARS:find(text:sub(at, at), 1, true) do
376
+ at = at + 1
377
+ end
378
+
379
+ local value = tonumber(text:sub(pos, at - 1))
380
+
381
+ -- 1e999 parses to infinity, which JSON has no literal for and which
382
+ -- would later blow up a token-expiry computation.
383
+ if nil == value or value ~= value or math.huge == value or -math.huge == value then
384
+ bad('number')
385
+ end
386
+
387
+ return value, at
388
+ end
389
+
390
+ parsevalue = function(text, pos, depth)
391
+ if MAXDEPTH < depth then
392
+ bad('depth')
393
+ end
394
+
395
+ local at = skipws(text, pos)
396
+ local ch = text:sub(at, at)
397
+
398
+ if '' == ch then
399
+ bad('eof')
400
+ end
401
+
402
+ if '{' == ch then
403
+ return parseobj(text, at, depth)
404
+ end
405
+
406
+ if '[' == ch then
407
+ return parsearr(text, at, depth)
408
+ end
409
+
410
+ if '"' == ch then
411
+ return parsestring(text, at)
412
+ end
413
+
414
+ if 't' == ch then
415
+ return parseword(text, at, 'true', true)
416
+ end
417
+
418
+ if 'f' == ch then
419
+ return parseword(text, at, 'false', false)
420
+ end
421
+
422
+ if 'n' == ch then
423
+ return parseword(text, at, 'null', M.NULL)
424
+ end
425
+
426
+ return parsenumber(text, at)
427
+ end
428
+
429
+ --- Parse JSON text. Returns the value, or nil when the text is not JSON.
430
+ --- The literal `null` parses to M.NULL, which is NOT nil - that is the
431
+ --- whole reason the sentinel exists.
432
+ function M.parse(text)
433
+ if 'string' ~= type(text) or '' == text then
434
+ return nil
435
+ end
436
+
437
+ local ok, value, at = pcall(parsevalue, text, 1, 1)
438
+ if not ok then
439
+ return nil
440
+ end
441
+
442
+ if #text >= skipws(text, at) then
443
+ return nil
444
+ end
445
+
446
+ return value
447
+ end
448
+
449
+ return M
@@ -0,0 +1,198 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/net.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 bridge to the transport helper - a PLUGIN module, never the core.
5
+ --
6
+ -- Everything that opens a socket or starts a child process goes through
7
+ -- this file, so a chain of built-in kinds never requires it and never
8
+ -- needs native/sekretonet.c to have been built at all.
9
+ --
10
+ -- Lua cannot open a socket, and `io.popen` is unidirectional - so a
11
+ -- request cannot be written to a child and its answer read back through
12
+ -- the same handle. The request is therefore handed over in a file and the
13
+ -- answer comes back on the child's stdout.
14
+ --
15
+ -- The file, not the command line, because a vault token rides in the
16
+ -- request headers and the process table is world readable. It is created
17
+ -- by `os.tmpname`, which uses `mkstemp` and so is already 0600, and
18
+ -- native/sekretonet.c unlinks it before reading a byte of it.
19
+ --
20
+ -- Nothing about HTTP is known here. This module moves bytes, exactly as
21
+ -- the helper does - and it runs children, which is the other half of what
22
+ -- the helper is for.
23
+
24
+ local err = require('feature.secrets.sekreto.err')
25
+ local name = require('feature.secrets.sekreto.name')
26
+
27
+ local M = {}
28
+
29
+ --- Where the helper binary is, worked out from this file's own path
30
+ --- rather than from the working directory: test/checks.sh runs the CLI
31
+ --- from an EMPTY directory with the environment wiped, so nothing in the
32
+ --- process's surroundings can be relied on to find it.
33
+ local function helperpath()
34
+ local source = debug.getinfo(1, 'S').source
35
+
36
+ if '@' == source:sub(1, 1) then
37
+ local dir = source:sub(2):match('^(.*)/feature/secrets/sekreto/plugins/net%.lua$')
38
+ if nil ~= dir then
39
+ return dir .. '/feature/secrets/native/sekreto-net'
40
+ end
41
+ end
42
+
43
+ return 'feature/secrets/native/sekreto-net'
44
+ end
45
+
46
+ M.HELPER = helperpath()
47
+
48
+ --- A shell-safe single-quoted word. `io.popen` goes through `/bin/sh`,
49
+ --- and the only two words this module ever passes it are paths it made
50
+ --- itself - but a path is checked rather than assumed.
51
+ local function quotepath(path)
52
+ if nil ~= path:find("'", 1, true) or nil ~= path:find('\n', 1, true) then
53
+ err.fail('sekreto: transport helper path is not usable: ' .. path)
54
+ end
55
+ return "'" .. path .. "'"
56
+ end
57
+
58
+ --- One length-prefixed field.
59
+ local function field(name, value)
60
+ return name .. ' ' .. #value .. '\n' .. value .. '\n'
61
+ end
62
+
63
+ --- Run the helper over one request. Returns the answer verb and payload.
64
+ local function call(fields)
65
+ local path = os.tmpname()
66
+
67
+ local handle = io.open(path, 'wb')
68
+ if nil == handle then
69
+ os.remove(path)
70
+ err.fail('sekreto: cannot write a transport request')
71
+ end
72
+
73
+ handle:write(table.concat(fields))
74
+ handle:close()
75
+
76
+ local pipe = io.popen(quotepath(M.HELPER) .. ' ' .. quotepath(path) .. ' 2>/dev/null', 'r')
77
+ if nil == pipe then
78
+ os.remove(path)
79
+ return 'ERR', 'cannot start the transport helper'
80
+ end
81
+
82
+ local answer = pipe:read('a') or ''
83
+ pipe:close()
84
+
85
+ -- The helper unlinks it; this is the backstop for the case where the
86
+ -- helper never ran at all.
87
+ os.remove(path)
88
+
89
+ local stop = answer:find('\n', 1, true)
90
+ if nil == stop then
91
+ return 'ERR',
92
+ 'the transport helper did not answer (is ' .. M.HELPER .. ' built?)'
93
+ end
94
+
95
+ local head = answer:sub(1, stop - 1)
96
+ local rest = answer:sub(stop + 1)
97
+
98
+ local verb = head:match('^(%u+)')
99
+
100
+ if 'ERR' == verb then
101
+ return 'ERR', rest
102
+ end
103
+
104
+ if 'OK' == verb then
105
+ return 'OK', rest
106
+ end
107
+
108
+ if 'EXEC' == verb then
109
+ local code, outlen, errlen = head:match('^EXEC (%-?%d+) (%d+) (%d+)$')
110
+ if nil == code then
111
+ return 'ERR', 'the transport helper answered incoherently'
112
+ end
113
+ outlen = tonumber(outlen)
114
+ errlen = tonumber(errlen)
115
+ return 'EXEC', {
116
+ status = tonumber(code),
117
+ out = rest:sub(1, outlen),
118
+ why = rest:sub(outlen + 1, outlen + errlen),
119
+ }
120
+ end
121
+
122
+ return 'ERR', 'the transport helper answered incoherently'
123
+ end
124
+
125
+ --- Connect, send `payload`, read the answer to end of stream.
126
+ ---
127
+ --- Returns the response bytes, or nil plus a reason. A reason is always a
128
+ --- failure - never a miss.
129
+ function M.fetch(host, port, usetls, payload, timeoutms, maxbody)
130
+ local verb, got = call({
131
+ field('mode', 'fetch'),
132
+ field('host', host),
133
+ field('port', tostring(port)),
134
+ field('tls', usetls and '1' or '0'),
135
+ field('timeout', tostring(timeoutms)),
136
+ field('maxbody', tostring(maxbody)),
137
+ field('data', payload),
138
+ })
139
+
140
+ if 'OK' ~= verb then
141
+ return nil, ('table' == type(got)) and 'transport failure' or got
142
+ end
143
+
144
+ return got
145
+ end
146
+
147
+ --- Run a child to completion and collect both its streams separately.
148
+ ---
149
+ --- `argv` is an array and never a shell string. `overrides` is a list of
150
+ --- `NAME=value` entries applied ON TOP of the inherited environment: Lua
151
+ --- cannot enumerate its own environment (`os.getenv` reads one name), so
152
+ --- building a complete one here would silently drop every variable this
153
+ --- port did not think to name, and boru reads several of its own.
154
+ ---
155
+ --- Returns {status, out, why}, or nil plus a reason when the child could
156
+ --- not be started at all.
157
+ function M.exec(argv, overrides)
158
+ local fields = { field('mode', 'exec') }
159
+
160
+ for _, arg in ipairs(argv) do
161
+ fields[#fields + 1] = field('arg', arg)
162
+ end
163
+ for _, entry in ipairs(overrides or {}) do
164
+ fields[#fields + 1] = field('setenv', entry)
165
+ end
166
+
167
+ local verb, got = call(fields)
168
+
169
+ if 'EXEC' ~= verb then
170
+ -- The helper reports a failed exec through a close-on-exec status
171
+ -- pipe, so "could not be started" is never guessed from an exit code
172
+ -- a real child is equally free to produce. It becomes
173
+ -- `sekreto: cannot run <command>: <err>`, which is a failure and
174
+ -- never a miss.
175
+ local reason = ('table' == type(got)) and 'transport failure' or got
176
+ return nil, (reason:match('^EXECFAIL (.*)$') or reason)
177
+ end
178
+
179
+ return got
180
+ end
181
+
182
+ --- What a finished child process left behind, with a failure to start it
183
+ --- raised rather than returned.
184
+ ---
185
+ --- Both streams are drained concurrently and stdin is closed; see
186
+ --- native/sekretonet.c, which does the draining. Argv is an array and
187
+ --- never a shell string, and no secret is ever put on a command line.
188
+ function M.runcmd(argv, overrides, command)
189
+ local ran, why = M.exec(argv, overrides)
190
+
191
+ if nil == ran then
192
+ err.fail('sekreto: cannot run ' .. command .. ': ' .. why)
193
+ end
194
+
195
+ return ran.out, name.trim(ran.why), ran.status
196
+ end
197
+
198
+ return M