@voxgig/sdkgen 4.10.0 → 4.12.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 (880) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/resolve.js +75 -1
  3. package/dist/action/resolve.js.map +1 -1
  4. package/dist/tsconfig.tsbuildinfo +1 -1
  5. package/dist/utility.js +17 -0
  6. package/dist/utility.js.map +1 -1
  7. package/package.json +4 -3
  8. package/project/.sdk/model/feature/secrets.aon +330 -0
  9. package/project/.sdk/model/target/c.aon +15 -2
  10. package/project/.sdk/model/target/cpp.aon +18 -0
  11. package/project/.sdk/model/target/lua.aon +17 -0
  12. package/project/.sdk/model/target/ocaml.aon +48 -5
  13. package/project/.sdk/model/target/zig.aon +30 -4
  14. package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
  15. package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
  16. package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
  17. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
  18. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
  19. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
  20. package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
  21. package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
  22. package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
  23. package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
  24. package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
  25. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
  26. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
  27. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
  28. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
  29. package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
  30. package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
  31. package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
  32. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
  33. package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
  34. package/project/.sdk/tm/c/Makefile +58 -9
  35. package/project/.sdk/tm/c/core/sdk.h +10 -0
  36. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
  37. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
  38. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
  39. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
  40. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
  41. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
  42. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
  43. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
  44. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
  45. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
  46. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
  47. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
  48. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
  49. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
  50. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
  51. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
  52. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
  53. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
  54. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
  55. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
  56. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
  57. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
  58. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
  59. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
  60. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
  61. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
  62. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
  63. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
  64. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
  65. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
  66. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
  67. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
  68. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
  69. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
  70. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
  71. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
  72. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
  73. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
  74. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
  75. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
  76. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
  77. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
  78. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
  79. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
  80. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
  81. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
  82. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
  83. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
  84. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
  85. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
  86. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
  87. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
  88. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
  89. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
  90. package/project/.sdk/tm/c/feature/secrets.c +797 -0
  91. package/project/.sdk/tm/c/feature/secrets.h +46 -0
  92. package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
  93. package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
  94. package/project/.sdk/tm/c/tests/vendor/omni/json.c +1 -1
  95. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +1 -1
  96. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +1 -1
  97. package/project/.sdk/tm/c/tests/vendor/omni/util.c +1 -1
  98. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
  99. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +1 -1
  100. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +1 -1
  101. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +1 -1
  102. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +1 -1
  103. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +1 -1
  104. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +1 -1
  105. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +1 -1
  106. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1 -1
  107. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +1 -1
  108. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +1 -1
  109. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +1 -1
  110. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +1 -1
  111. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +1 -1
  112. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +1 -1
  113. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +1 -1
  114. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +1 -1
  115. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +1 -1
  116. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +1 -1
  117. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +1 -1
  118. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +1 -1
  119. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +1 -1
  120. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +1 -1
  121. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +1 -1
  122. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +1 -1
  123. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +1 -1
  124. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +1 -1
  125. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +1 -1
  126. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +1 -1
  127. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +1 -1
  128. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +1 -1
  129. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +1 -1
  130. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +1 -1
  131. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +1 -1
  132. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +1 -1
  133. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +1 -1
  134. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
  135. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +1 -1
  136. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +1 -1
  137. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +1 -1
  138. package/project/.sdk/tm/cpp/Makefile +48 -4
  139. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
  140. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
  141. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
  142. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
  143. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
  144. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
  145. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
  146. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
  147. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
  148. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
  149. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
  150. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
  151. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
  152. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
  153. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
  154. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
  155. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
  156. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
  157. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
  158. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
  159. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
  160. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
  161. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
  162. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
  163. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
  164. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
  165. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
  166. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
  167. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
  168. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
  169. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
  170. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
  171. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
  172. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
  173. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
  174. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
  175. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
  176. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
  177. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
  178. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
  179. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
  180. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
  181. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
  182. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
  183. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
  184. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
  185. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
  186. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
  187. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
  188. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
  189. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
  190. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
  191. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
  192. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
  193. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
  194. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
  195. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
  196. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
  197. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
  198. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
  199. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
  200. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
  201. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
  202. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
  203. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
  204. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
  205. package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
  206. package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
  207. package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
  208. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +1 -1
  209. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +1 -1
  210. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +1 -1
  211. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
  212. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +1 -1
  213. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +1 -1
  214. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +1 -1
  215. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +1 -1
  216. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +1 -1
  217. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +1 -1
  218. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +1 -1
  219. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +1 -1
  220. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +1 -1
  221. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1 -1
  222. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +1 -1
  223. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +1 -1
  224. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +1 -1
  225. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +1 -1
  226. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +1 -1
  227. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +1 -1
  228. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +1 -1
  229. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +1 -1
  230. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +1 -1
  231. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +1 -1
  232. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +1 -1
  233. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +1 -1
  234. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +1 -1
  235. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +1 -1
  236. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +1 -1
  237. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +1 -1
  238. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +1 -1
  239. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +1 -1
  240. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +1 -1
  241. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +1 -1
  242. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +1 -1
  243. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +1 -1
  244. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +1 -1
  245. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +1 -1
  246. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
  247. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +1 -1
  248. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +1 -1
  249. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  250. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +1 -1
  251. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +1 -1
  252. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +1 -1
  253. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +1 -1
  254. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +1 -1
  255. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +1 -1
  256. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +1 -1
  257. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +1 -1
  258. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1 -1
  259. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +1 -1
  260. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +1 -1
  261. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +1 -1
  262. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +1 -1
  263. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +1 -1
  264. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +1 -1
  265. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +1 -1
  266. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +1 -1
  267. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +1 -1
  268. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +1 -1
  269. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +1 -1
  270. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +1 -1
  271. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +1 -1
  272. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +1 -1
  273. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +1 -1
  274. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +1 -1
  275. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +1 -1
  276. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +1 -1
  277. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +1 -1
  278. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +1 -1
  279. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +1 -1
  280. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +1 -1
  281. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +1 -1
  282. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +1 -1
  283. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +1 -1
  284. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +1 -1
  285. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
  286. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
  287. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +1 -1
  288. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +1 -1
  289. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +1 -1
  290. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  291. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  292. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  293. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  294. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  295. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  296. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  297. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  298. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  299. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  300. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  301. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  302. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  303. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  304. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  305. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +1 -1
  306. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +1 -1
  307. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +1 -1
  308. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +1 -1
  309. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +1 -1
  310. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +1 -1
  311. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +1 -1
  312. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +1 -1
  313. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +1 -1
  314. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +1 -1
  315. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +1 -1
  316. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +1 -1
  317. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +1 -1
  318. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +1 -1
  319. package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
  320. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
  321. package/project/.sdk/tm/go/test/omni/omni.go +1 -1
  322. package/project/.sdk/tm/go/test/omni/util.go +1 -1
  323. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  324. package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
  325. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +1 -1
  326. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +1 -1
  327. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +1 -1
  328. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +1 -1
  329. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +1 -1
  330. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +1 -1
  331. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +1 -1
  332. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +1 -1
  333. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +1 -1
  334. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1 -1
  335. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +1 -1
  336. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +1 -1
  337. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +1 -1
  338. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +1 -1
  339. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +1 -1
  340. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +1 -1
  341. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +1 -1
  342. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +1 -1
  343. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +1 -1
  344. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +1 -1
  345. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +1 -1
  346. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +1 -1
  347. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +1 -1
  348. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +1 -1
  349. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +1 -1
  350. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +1 -1
  351. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +1 -1
  352. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +1 -1
  353. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +1 -1
  354. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +1 -1
  355. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +1 -1
  356. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +1 -1
  357. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +1 -1
  358. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +1 -1
  359. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +1 -1
  360. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +1 -1
  361. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +1 -1
  362. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +1 -1
  363. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
  364. package/project/.sdk/tm/java/test/vendor/omni/Json.java +1 -1
  365. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +1 -1
  366. package/project/.sdk/tm/java/test/vendor/omni/Util.java +1 -1
  367. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  368. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
  369. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +1 -1
  370. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +1 -1
  371. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +1 -1
  372. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +1 -1
  373. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +1 -1
  374. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +1 -1
  375. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +1 -1
  376. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +1 -1
  377. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +1 -1
  378. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +1 -1
  379. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +1 -1
  380. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +1 -1
  381. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +1 -1
  382. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +1 -1
  383. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +1 -1
  384. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +1 -1
  385. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +1 -1
  386. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +1 -1
  387. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +1 -1
  388. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +1 -1
  389. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +1 -1
  390. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +1 -1
  391. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +1 -1
  392. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +1 -1
  393. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +1 -1
  394. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +1 -1
  395. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +1 -1
  396. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +1 -1
  397. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +1 -1
  398. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +1 -1
  399. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +1 -1
  400. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +1 -1
  401. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +1 -1
  402. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +1 -1
  403. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +1 -1
  404. package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
  405. package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +49 -1
  406. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
  407. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  408. package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
  409. package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
  410. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
  411. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +1 -1
  412. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +1 -1
  413. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +1 -1
  414. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +1 -1
  415. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +1 -1
  416. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +1 -1
  417. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +1 -1
  418. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1 -1
  419. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +1 -1
  420. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +1 -1
  421. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +1 -1
  422. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +1 -1
  423. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +1 -1
  424. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +1 -1
  425. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +1 -1
  426. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +1 -1
  427. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +1 -1
  428. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +1 -1
  429. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +1 -1
  430. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +1 -1
  431. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +1 -1
  432. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +1 -1
  433. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +1 -1
  434. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +1 -1
  435. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +1 -1
  436. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +1 -1
  437. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +1 -1
  438. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +1 -1
  439. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +1 -1
  440. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +1 -1
  441. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +1 -1
  442. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +1 -1
  443. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +1 -1
  444. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
  445. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +1 -1
  446. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +1 -1
  447. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +1 -1
  448. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  449. package/project/.sdk/tm/lua/Makefile +15 -4
  450. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
  451. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
  452. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
  453. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
  454. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
  455. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
  456. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
  457. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
  458. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
  459. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
  460. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
  461. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
  462. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
  463. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
  464. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
  465. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
  466. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
  467. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
  468. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
  469. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
  470. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
  471. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
  472. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
  473. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
  474. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
  475. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
  476. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
  477. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
  478. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
  479. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
  480. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
  481. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
  482. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
  483. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
  484. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
  485. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
  486. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
  487. package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
  488. package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
  489. package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
  490. package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
  491. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +1 -1
  492. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +1 -1
  493. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +1 -1
  494. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +1 -1
  495. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  496. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  497. package/project/.sdk/tm/ocaml/Makefile +52 -8
  498. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
  499. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
  500. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
  501. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
  502. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
  503. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
  504. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
  505. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
  506. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
  507. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
  508. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
  509. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
  510. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
  511. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
  512. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
  513. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
  514. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
  515. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
  516. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
  517. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
  518. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
  519. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
  520. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
  521. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
  522. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
  523. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
  524. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
  525. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
  526. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
  527. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
  528. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
  529. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
  530. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
  531. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
  532. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
  533. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
  534. package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
  535. package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
  536. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
  537. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1 -1
  538. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +1 -1
  539. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +1 -1
  540. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +1 -1
  541. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +1 -1
  542. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +1 -1
  543. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +1 -1
  544. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +1 -1
  545. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1 -1
  546. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +1 -1
  547. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +1 -1
  548. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +1 -1
  549. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +1 -1
  550. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +25 -1
  551. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +1 -1
  552. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +1 -1
  553. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +1 -1
  554. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +1 -1
  555. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +1 -1
  556. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +1 -1
  557. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +1 -1
  558. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +1 -1
  559. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +1 -1
  560. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +1 -1
  561. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +1 -1
  562. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +1 -1
  563. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +1 -1
  564. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +1 -1
  565. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +1 -1
  566. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +1 -1
  567. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +1 -1
  568. package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
  569. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  570. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
  571. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  572. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  573. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  574. package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
  575. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +1 -1
  576. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +1 -1
  577. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +1 -1
  578. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +1 -1
  579. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +1 -1
  580. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +1 -1
  581. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +1 -1
  582. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1 -1
  583. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +1 -1
  584. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +1 -1
  585. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +1 -1
  586. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +1 -1
  587. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +1 -1
  588. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +1 -1
  589. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +1 -1
  590. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +1 -1
  591. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +1 -1
  592. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +1 -1
  593. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +1 -1
  594. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +1 -1
  595. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +1 -1
  596. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +1 -1
  597. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +1 -1
  598. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +1 -1
  599. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +1 -1
  600. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +1 -1
  601. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +1 -1
  602. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +1 -1
  603. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +1 -1
  604. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +1 -1
  605. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
  606. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +1 -1
  607. package/project/.sdk/tm/php/test/vendor/omni/Util.php +1 -1
  608. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  609. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  610. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  611. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  612. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  613. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  614. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  615. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  616. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  617. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  618. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  619. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  620. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  621. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  622. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  623. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +1 -1
  624. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  625. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
  626. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  627. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  628. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  629. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  630. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
  631. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  632. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
  633. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  634. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  635. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  636. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  637. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
  638. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
  639. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  640. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
  641. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  642. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
  643. package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
  644. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +1 -1
  645. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +1 -1
  646. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +1 -1
  647. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +1 -1
  648. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +1 -1
  649. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +1 -1
  650. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +1 -1
  651. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1 -1
  652. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +1 -1
  653. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +1 -1
  654. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +1 -1
  655. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +1 -1
  656. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +1 -1
  657. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +1 -1
  658. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +1 -1
  659. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +1 -1
  660. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +1 -1
  661. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +1 -1
  662. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +1 -1
  663. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +1 -1
  664. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +1 -1
  665. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +1 -1
  666. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +1 -1
  667. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +1 -1
  668. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +1 -1
  669. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +1 -1
  670. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +1 -1
  671. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +1 -1
  672. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +1 -1
  673. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +1 -1
  674. package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
  675. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
  676. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +1 -1
  677. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +1 -1
  678. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +1 -1
  679. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +1 -1
  680. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +1 -1
  681. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +1 -1
  682. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +1 -1
  683. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +1 -1
  684. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +1 -1
  685. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +1 -1
  686. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1 -1
  687. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +1 -1
  688. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +1 -1
  689. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +1 -1
  690. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +1 -1
  691. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +1 -1
  692. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +1 -1
  693. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +1 -1
  694. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +1 -1
  695. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +1 -1
  696. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +1 -1
  697. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +1 -1
  698. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +1 -1
  699. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +1 -1
  700. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +1 -1
  701. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +1 -1
  702. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +1 -1
  703. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +1 -1
  704. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +1 -1
  705. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +1 -1
  706. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +1 -1
  707. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +1 -1
  708. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +1 -1
  709. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +1 -1
  710. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +1 -1
  711. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +1 -1
  712. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +1 -1
  713. package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
  714. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
  715. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +1 -1
  716. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +1 -1
  717. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +1 -1
  718. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1 -1
  719. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +1 -1
  720. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
  721. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +1 -1
  722. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +1 -1
  723. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +1 -1
  724. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +1 -1
  725. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +1 -1
  726. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +1 -1
  727. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1 -1
  728. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +1 -1
  729. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +1 -1
  730. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +1 -1
  731. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +1 -1
  732. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +1 -1
  733. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +1 -1
  734. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +1 -1
  735. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +1 -1
  736. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +1 -1
  737. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +1 -1
  738. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +1 -1
  739. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +1 -1
  740. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +1 -1
  741. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +1 -1
  742. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +1 -1
  743. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +1 -1
  744. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +1 -1
  745. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +1 -1
  746. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +1 -1
  747. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +1 -1
  748. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +1 -1
  749. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +1 -1
  750. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +1 -1
  751. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +1 -1
  752. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +1 -1
  753. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +1 -1
  754. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
  755. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +1 -1
  756. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +1 -1
  757. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +1 -1
  758. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +1 -1
  759. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +1 -1
  760. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +1 -1
  761. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +1 -1
  762. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +1 -1
  763. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +1 -1
  764. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +1 -1
  765. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1 -1
  766. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +1 -1
  767. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +1 -1
  768. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +1 -1
  769. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +1 -1
  770. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +1 -1
  771. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +1 -1
  772. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +1 -1
  773. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +1 -1
  774. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +1 -1
  775. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +1 -1
  776. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +1 -1
  777. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +1 -1
  778. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +1 -1
  779. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +1 -1
  780. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +1 -1
  781. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +1 -1
  782. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +1 -1
  783. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +1 -1
  784. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +1 -1
  785. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +1 -1
  786. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +1 -1
  787. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +1 -1
  788. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +1 -1
  789. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +1 -1
  790. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +1 -1
  791. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +1 -1
  792. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +1 -1
  793. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +1 -1
  794. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +1 -1
  795. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
  796. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  797. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  798. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  799. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  800. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  801. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  802. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  803. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  804. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  805. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  806. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  807. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  808. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  809. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  810. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  811. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  812. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  813. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  814. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  815. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  816. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  817. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  818. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  819. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  820. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  821. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  822. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  823. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  824. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  825. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  826. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  827. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  828. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  829. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  830. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  831. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  832. package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +107 -1
  833. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
  834. package/project/.sdk/tm/ts/src/utility/TransformRequestUtility.ts +49 -1
  835. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
  836. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  837. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  838. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  839. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
  840. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
  841. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
  842. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
  843. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
  844. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
  845. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
  846. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
  847. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
  848. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
  849. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
  850. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
  851. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
  852. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
  853. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
  854. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
  855. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
  856. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
  857. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
  858. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
  859. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
  860. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
  861. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
  862. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
  863. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
  864. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
  865. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
  866. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
  867. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
  868. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
  869. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
  870. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
  871. package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
  872. package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
  873. package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
  874. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1 -1
  875. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +1 -1
  876. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +1 -1
  877. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
  878. package/project/sdkgen-package.json +1 -1
  879. package/src/action/resolve.ts +85 -1
  880. package/src/utility.ts +17 -0
@@ -0,0 +1,891 @@
1
+ // Behavioural tests for the secrets feature (vendored @voxgig/sekreto) -
2
+ // the zig port of tm/ts/test/feature/secrets/Secrets.test.ts, following the
3
+ // go suite's shape (tm/go/test/feature/secrets/secrets_feature_test.go).
4
+ //
5
+ // The contract under test: the `apikey` OPTION keeps its exact old meaning
6
+ // and always wins, because the feature places it FIRST in the provider
7
+ // chain (a `memory` store named `options`) - explicit-beats-lookup falls
8
+ // out of sekreto's first-hit rule rather than from special-case logic. With
9
+ // the feature inactive nothing changes at all. With it active and the
10
+ // option unset, the chain supplies the credential instead.
11
+ //
12
+ // EVERY CLIENT HERE IS LIVE, and the thing counted is `system.fetch` - the
13
+ // real transport the whole fetcher chain ends at. That is deliberate, and
14
+ // it is the mistake this file exists to avoid: under `test_sdk` the test
15
+ // feature REPLACES the transport with its own in-memory mock, so a counter
16
+ // hung off `system.fetch` is never reached, and "no request was sent" would
17
+ // hold for a healthy SDK carrying no secrets feature at all. An assertion
18
+ // that cannot fail pins no rule. So each fail-closed case proves its own
19
+ // counter FIRST, with the same construction and a WORKING provider: one
20
+ // request must reach `system.fetch` carrying the resolved credential. Only
21
+ // then does a zero from the broken provider mean REFUSED rather than
22
+ // UNWIRED. And the refusal is matched on the PROVIDER'S OWN message, so an
23
+ // unrelated failure cannot stand in for fail-closed.
24
+ //
25
+ // BOTH WIRE PATHS. The entity pipeline is driven through a REAL generated
26
+ // entity op, found by comptime reflection over the client's accessors (the
27
+ // zig spelling of go's reflect-based driver), and the raw paths -
28
+ // `direct()` and `graphql()`, which run NO feature hooks - are driven too:
29
+ // for them the transport gate is the only place resolution can happen.
30
+ //
31
+ // NO ENVIRONMENT VARIABLES ARE SET. A zig test cannot set one for its own
32
+ // process without libc, so the `env` provider is exercised through the
33
+ // feature's `set_environ` seam with a map the test builds - the same seam a
34
+ // zig 0.16 application uses to hand in `init.environ_map` - and every other
35
+ // chain is a `memory` store or a scripted callable provider.
36
+ //
37
+ // This file lives in the test `feature/` container on purpose: build.zig
38
+ // names it only when the model activates `secrets`, alongside the feature
39
+ // source and the vendored library.
40
+ //
41
+ // ONE MODULE. A zig test module reaches only its own directory subtree, so
42
+ // this file cannot `@import("../../fh.zig")`; the small harness it needs is
43
+ // here, and the SDK is reached by module name.
44
+
45
+ const std = @import("std");
46
+ const sdk = @import("sdk");
47
+ const h = sdk.h;
48
+ const Value = sdk.Value;
49
+ const testing = std.testing;
50
+
51
+ const BASE = "http://secrets.test/api";
52
+
53
+ fn vnull() Value {
54
+ return Value{ .null = {} };
55
+ }
56
+
57
+ // Every block runs only when the feature is in THIS SDK - build.zig lists
58
+ // this file only then, so this is belt and braces rather than a gate.
59
+ fn present() bool {
60
+ const cfg = sdk.make_config();
61
+ return h.getp(h.getp(cfg, "feature"), "secrets") == .object;
62
+ }
63
+
64
+ // ---- the counted transport ---------------------------------------------
65
+
66
+ /// One recorded request, SNAPSHOT at the moment it was handed to the
67
+ /// transport. A snapshot, not the fetchdef itself: the fetchdef's headers
68
+ /// map is rewritten IN PLACE by the exchange retry, so a recorder that kept
69
+ /// the live map would report every earlier call as carrying the LAST token.
70
+ const Call = struct {
71
+ url: []const u8,
72
+ auth: ?[]const u8,
73
+ body: ?[]const u8,
74
+ };
75
+
76
+ /// A `system.fetch` that records every call it is handed, so "sent" is a
77
+ /// fact about the wire rather than about a mock somewhere up the chain. It
78
+ /// also plays the token endpoint for the exchange cases.
79
+ const Wire = struct {
80
+ calls: std.ArrayList(Call) = .empty,
81
+ /// One status per API call, the last repeating - so a case can say
82
+ /// "401 then 200" without counting calls itself.
83
+ apistatus: []const i64 = &.{200},
84
+ /// The access tokens the token endpoint issues, in order.
85
+ tokens: []const []const u8 = &.{ "ACCESS01", "ACCESS02", "ACCESS03" },
86
+ tokenpath: []const u8 = "auth/token",
87
+ tokenfield: []const u8 = "access_token",
88
+ tokenstatus: []const i64 = &.{200},
89
+ issued: usize = 0,
90
+ apicalls: usize = 0,
91
+
92
+ fn new() *Wire {
93
+ const w = h.A().create(Wire) catch unreachable;
94
+ w.* = .{};
95
+ return w;
96
+ }
97
+
98
+ fn call(p: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
99
+ const self: *Wire = @ptrCast(@alignCast(p));
100
+ const url: []const u8 = if (arg == .array and 1 <= arg.array.data.items.len and arg.array.data.items[0] == .string)
101
+ arg.array.data.items[0].string
102
+ else
103
+ "";
104
+ const fetchdef: Value = if (arg == .array and 2 <= arg.array.data.items.len) arg.array.data.items[1] else vnull();
105
+ const headers = h.getp(fetchdef, "headers");
106
+ const auth: ?[]const u8 = if (h.get_str(headers, "authorization")) |a| (h.A().dupe(u8, a) catch a) else null;
107
+ const body: ?[]const u8 = if (h.get_str(fetchdef, "body")) |b| (h.A().dupe(u8, b) catch b) else null;
108
+ self.calls.append(h.A(), .{ .url = h.A().dupe(u8, url) catch url, .auth = auth, .body = body }) catch {};
109
+
110
+ const suffix = std.fmt.allocPrint(h.A(), "/{s}", .{self.tokenpath}) catch "/auth/token";
111
+ if (std.mem.endsWith(u8, url, suffix)) {
112
+ const token = self.tokens[@min(self.issued, self.tokens.len - 1)];
113
+ const status = self.tokenstatus[@min(self.issued, self.tokenstatus.len - 1)];
114
+ self.issued += 1;
115
+ return response(status, h.jo(&.{.{ self.tokenfield, h.vstr(token) }}));
116
+ }
117
+
118
+ const status = self.apistatus[@min(self.apicalls, self.apistatus.len - 1)];
119
+ self.apicalls += 1;
120
+ return response(status, h.jo(&.{ .{ "ok", h.vbool(status < 400) }, .{ "id", h.vstr("s01") } }));
121
+ }
122
+
123
+ fn fetch_fn(self: *Wire) Value {
124
+ return h.callable(@ptrCast(self), call);
125
+ }
126
+
127
+ /// The API calls (everything that was not the token endpoint).
128
+ fn api(self: *Wire) []Call {
129
+ var out: std.ArrayList(Call) = .empty;
130
+ const suffix = std.fmt.allocPrint(h.A(), "/{s}", .{self.tokenpath}) catch "/auth/token";
131
+ for (self.calls.items) |c| {
132
+ if (!std.mem.endsWith(u8, c.url, suffix)) out.append(h.A(), c) catch {};
133
+ }
134
+ return out.items;
135
+ }
136
+
137
+ fn token_calls(self: *Wire) usize {
138
+ return self.calls.items.len - self.api().len;
139
+ }
140
+ };
141
+
142
+ fn response(status: i64, data: Value) Value {
143
+ return h.jo(&.{
144
+ .{ "status", h.vnum(status) },
145
+ .{ "statusText", h.vstr(if (status >= 400) "ERR" else "OK") },
146
+ .{ "headers", h.omap() },
147
+ .{ "json", h.json_thunk(data) },
148
+ .{ "body", h.vstr("x") },
149
+ });
150
+ }
151
+
152
+ // ---- a scripted provider ------------------------------------------------
153
+
154
+ /// A provider given as a callable (the feature's Value-shaped custom
155
+ /// provider seam): a string is a HIT, null a MISS, `{__err__}` an ERROR.
156
+ /// Scriptable per call, and it records every name it was asked.
157
+ const Scripted = struct {
158
+ value: ?[]const u8 = null,
159
+ err: ?[]const u8 = null,
160
+ asked: usize = 0,
161
+ names: std.ArrayList([]const u8) = .empty,
162
+
163
+ fn new(value: ?[]const u8, err: ?[]const u8) *Scripted {
164
+ const s = h.A().create(Scripted) catch unreachable;
165
+ s.* = .{ .value = value, .err = err };
166
+ return s;
167
+ }
168
+
169
+ fn call(p: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
170
+ const self: *Scripted = @ptrCast(@alignCast(p));
171
+ self.asked += 1;
172
+ if (arg == .string) self.names.append(h.A(), arg.string) catch {};
173
+ if (self.err) |m| return h.jo(&.{.{ "__err__", h.vstr(m) }});
174
+ if (self.value) |v| return h.vstr(v);
175
+ return vnull();
176
+ }
177
+
178
+ fn fn_val(self: *Scripted) Value {
179
+ return h.callable(@ptrCast(self), call);
180
+ }
181
+ };
182
+
183
+ // ---- clients --------------------------------------------------------------
184
+
185
+ /// Feature options: `{ active: true, providers: [...], ...extra }`.
186
+ fn secrets_opts(providers: Value, extra: Value) Value {
187
+ const fo = h.jo(&.{
188
+ .{ "active", h.vbool(true) },
189
+ .{ "providers", providers },
190
+ });
191
+ if (extra == .object) {
192
+ var it = extra.object.iterator();
193
+ while (it.next()) |kv| h.setp(fo, kv.key_ptr.*, kv.value_ptr.*);
194
+ }
195
+ return fo;
196
+ }
197
+
198
+ /// A LIVE client whose `system.fetch` is the wire, with the secrets feature
199
+ /// handed in through the `extend` seam - installed exactly once whether or
200
+ /// not the generated Config already registered it, so these tests hold in
201
+ /// any generated tree.
202
+ fn live_client(w: *Wire, sdkopts: Value) *sdk.SDK {
203
+ const opts: Value = if (sdkopts == .object) sdkopts else h.omap();
204
+ h.setp(opts, "base", h.vstr(BASE));
205
+ h.setp(opts, "system", h.jo(&.{.{ "fetch", w.fetch_fn() }}));
206
+ return sdk.SDK.new_with(opts, &.{sdk.SecretsFeature.make()});
207
+ }
208
+
209
+ fn secrets_client(w: *Wire, sdkopts: Value, feature_opts: Value) *sdk.SDK {
210
+ const opts: Value = if (sdkopts == .object) sdkopts else h.omap();
211
+ h.setp(opts, "feature", h.jo(&.{.{ "secrets", feature_opts }}));
212
+ return live_client(w, opts);
213
+ }
214
+
215
+ fn secrets_of(client: *sdk.SDK) ?*sdk.SecretsFeature {
216
+ for (client.features.items) |f| {
217
+ if (std.mem.eql(u8, f.name(), "secrets")) return @ptrCast(@alignCast(f.ptr));
218
+ }
219
+ return null;
220
+ }
221
+
222
+ fn count_named(client: *sdk.SDK, name: []const u8) usize {
223
+ var n: usize = 0;
224
+ for (client.features.items) |f| {
225
+ if (std.mem.eql(u8, f.name(), name)) n += 1;
226
+ }
227
+ return n;
228
+ }
229
+
230
+ // The Authorization header carries the SPEC's credential prefix, which a
231
+ // TEMPLATE cannot know: an OpenAPI bearer scheme gives `Bearer <token>`, an
232
+ // apiKey scheme the raw token. So assert on the CREDENTIAL and let the
233
+ // prefix be whatever this SDK's API declares.
234
+ fn credential_is(auth: ?[]const u8, token: []const u8) !void {
235
+ const got = auth orelse "";
236
+ const suffix = std.fmt.allocPrint(h.A(), " {s}", .{token}) catch token;
237
+ if (!(std.mem.eql(u8, got, token) or std.mem.endsWith(u8, got, suffix))) {
238
+ std.debug.print("expected the authorization header to carry {s}, got: {s}\n", .{ token, got });
239
+ return error.TestUnexpectedResult;
240
+ }
241
+ }
242
+
243
+ fn contains(text: []const u8, needle: []const u8) bool {
244
+ return std.mem.indexOf(u8, text, needle) != null;
245
+ }
246
+
247
+ // ---- the entity driver ----------------------------------------------------
248
+
249
+ const Drive = struct {
250
+ ran: bool,
251
+ ok: bool,
252
+ msg: []const u8,
253
+ };
254
+
255
+ /// Drive one REAL generated entity op through the pipeline. The client's
256
+ /// entity accessors are `pub fn <name>(self: *SDK, entopts: Value) *Ent`;
257
+ /// found by comptime reflection (the zig spelling of go's reflect-based
258
+ /// driver), and the first entity whose model op map declares `load` or
259
+ /// `list` is driven. `ran == false` means this SDK has no such entity.
260
+ fn drive_entity(client: *sdk.SDK) Drive {
261
+ const cfg = sdk.make_config();
262
+ const info = @typeInfo(sdk.SDK).@"struct";
263
+
264
+ inline for (info.decls) |d| {
265
+ const F = @TypeOf(@field(sdk.SDK, d.name));
266
+ const fi = @typeInfo(F);
267
+ if (fi == .@"fn") {
268
+ const params = fi.@"fn".params;
269
+ if (params.len == 2 and params[0].type == *sdk.SDK and params[1].type == Value) {
270
+ if (fi.@"fn".return_type) |R| {
271
+ if (@typeInfo(R) == .pointer and @typeInfo(@typeInfo(R).pointer.child) == .@"struct" and
272
+ @hasDecl(@typeInfo(R).pointer.child, "load"))
273
+ {
274
+ const ent = @field(sdk.SDK, d.name)(client, vnull());
275
+ const ops = h.getpath(&.{ "entity", ent.name, "op" }, cfg);
276
+ if (h.getp(ops, "load") == .object) {
277
+ const res = ent.load(h.jo(&.{.{ "id", h.vstr("s01") }}), vnull());
278
+ return switch (res) {
279
+ .err => |e| .{ .ran = true, .ok = false, .msg = e.msg },
280
+ .ok => .{ .ran = true, .ok = true, .msg = "" },
281
+ };
282
+ } else if (h.getp(ops, "list") == .object) {
283
+ const res = ent.list(h.omap(), vnull());
284
+ return switch (res) {
285
+ .err => |e| .{ .ran = true, .ok = false, .msg = e.msg },
286
+ .ok => .{ .ran = true, .ok = true, .msg = "" },
287
+ };
288
+ }
289
+ }
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ return .{ .ran = false, .ok = false, .msg = "" };
296
+ }
297
+
298
+ fn direct_probe(client: *sdk.SDK) Value {
299
+ return client.direct(h.jo(&.{.{ "path", h.vstr("/probe") }}));
300
+ }
301
+
302
+ // ---- inactive --------------------------------------------------------------
303
+
304
+ test "secrets inactive: apikey option behaves exactly as before" {
305
+ if (!present()) return error.SkipZigTest;
306
+ const w = Wire.new();
307
+ const client = live_client(w, h.jo(&.{.{ "apikey", h.vstr("OPTKEY01") }}));
308
+ // No feature options, no install: `extend` hands the feature in, but an
309
+ // inactive feature installs nothing on the transport.
310
+ const res = direct_probe(client);
311
+ try testing.expect(h.get_bool(res, "ok") orelse false);
312
+ try testing.expect(w.api().len == 1);
313
+ try credential_is(w.api()[0].auth, "OPTKEY01");
314
+ }
315
+
316
+ test "secrets inactive: no apikey means no authorization header" {
317
+ if (!present()) return error.SkipZigTest;
318
+ const w = Wire.new();
319
+ const client = live_client(w, h.omap());
320
+ _ = direct_probe(client);
321
+ try testing.expect(w.api().len == 1);
322
+ try testing.expect(w.api()[0].auth == null);
323
+ }
324
+
325
+ // ---- the chain ---------------------------------------------------------------
326
+
327
+ test "secrets active: apikey option still wins over the chain" {
328
+ if (!present()) return error.SkipZigTest;
329
+ const w = Wire.new();
330
+ const chain = Scripted.new("CHAINKEY01", null);
331
+ const client = secrets_client(w, h.jo(&.{.{ "apikey", h.vstr("OPTKEY01") }}), secrets_opts(h.ja(&.{chain.fn_val()}), vnull()));
332
+
333
+ const drove = drive_entity(client);
334
+ if (!drove.ran) return error.SkipZigTest;
335
+ try testing.expect(drove.ok);
336
+ try testing.expect(w.api().len == 1);
337
+ try credential_is(w.api()[0].auth, "OPTKEY01");
338
+
339
+ // The explicit option is a real store, not a special case: a directed
340
+ // read names it like any other.
341
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
342
+ switch (sf.getfrom("options", "apikey")) {
343
+ .ok => |v| try testing.expectEqualStrings("OPTKEY01", v),
344
+ .err => |m| {
345
+ std.debug.print("directed read failed: {s}\n", .{m});
346
+ return error.TestUnexpectedResult;
347
+ },
348
+ }
349
+ }
350
+
351
+ test "secrets active: an omitted apikey defers to the chain at the transport seam" {
352
+ if (!present()) return error.SkipZigTest;
353
+ const w = Wire.new();
354
+ const chain = Scripted.new("CHAINKEY02", null);
355
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{chain.fn_val()}), vnull()));
356
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
357
+
358
+ // Before any op, nothing has been resolved: resolution happens AT THE
359
+ // TRANSPORT, not at construction.
360
+ try testing.expectEqualStrings("", sf.credential());
361
+ try testing.expect(chain.asked == 0);
362
+
363
+ const drove = drive_entity(client);
364
+ if (!drove.ran) return error.SkipZigTest;
365
+ try testing.expect(drove.ok);
366
+ try credential_is(w.api()[0].auth, "CHAINKEY02");
367
+ try testing.expectEqualStrings("CHAINKEY02", sf.credential());
368
+
369
+ // The options map is never written: the credential lives in feature
370
+ // state and is injected on the wire.
371
+ try testing.expectEqualStrings("", h.get_str(client.options_map(), "apikey") orelse "");
372
+ }
373
+
374
+ test "secrets active: the env provider reads the environment handed in" {
375
+ if (!present()) return error.SkipZigTest;
376
+ var env = std.process.Environ.Map.init(h.A());
377
+ try env.put("PROJECTENV_TEST_SECRETS_APIKEY", "ENVKEY01");
378
+ sdk.SecretsFeature.set_environ(&env);
379
+ defer sdk.SecretsFeature.set_environ(null);
380
+
381
+ const w = Wire.new();
382
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{
383
+ h.jo(&.{ .{ "kind", h.vstr("env") }, .{ "prefix", h.vstr("PROJECTENV_TEST_SECRETS_") } }),
384
+ }), vnull()));
385
+ _ = direct_probe(client);
386
+ try testing.expect(w.api().len == 1);
387
+ try credential_is(w.api()[0].auth, "ENVKEY01");
388
+ }
389
+
390
+ test "secrets active: a memory spec map is decoded through sekreto's own specof" {
391
+ if (!present()) return error.SkipZigTest;
392
+ const w = Wire.new();
393
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{
394
+ h.jo(&.{
395
+ .{ "kind", h.vstr("memory") },
396
+ .{ "name", h.vstr("literal") },
397
+ .{ "values", h.jo(&.{.{ "APIKEY", h.vstr("MEMKEY01") }}) },
398
+ }),
399
+ }), vnull()));
400
+ _ = direct_probe(client);
401
+ try credential_is(w.api()[0].auth, "MEMKEY01");
402
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
403
+ switch (sf.getfrom("literal", "apikey")) {
404
+ .ok => |v| try testing.expectEqualStrings("MEMKEY01", v),
405
+ .err => return error.TestUnexpectedResult,
406
+ }
407
+ }
408
+
409
+ test "secrets active: a miss everywhere leaves the header off" {
410
+ if (!present()) return error.SkipZigTest;
411
+ const w = Wire.new();
412
+ const chain = Scripted.new(null, null);
413
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{chain.fn_val()}), vnull()));
414
+ const drove = drive_entity(client);
415
+ if (!drove.ran) return error.SkipZigTest;
416
+ try testing.expect(drove.ok);
417
+ try testing.expect(chain.asked == 1);
418
+ // A MISS falls through: the request still goes out, unauthenticated.
419
+ try testing.expect(w.api().len == 1);
420
+ try testing.expect(w.api()[0].auth == null);
421
+ }
422
+
423
+ test "secrets active: a provider ERROR fails the entity op and nothing reaches the wire" {
424
+ if (!present()) return error.SkipZigTest;
425
+
426
+ // CONTROL FIRST, so the zero below is known to be observable at all.
427
+ const control = Wire.new();
428
+ const good = secrets_client(control, h.omap(), secrets_opts(h.ja(&.{Scripted.new("GOODKEY01", null).fn_val()}), vnull()));
429
+ const cdrove = drive_entity(good);
430
+ if (!cdrove.ran) return error.SkipZigTest;
431
+ try testing.expect(cdrove.ok);
432
+ try testing.expect(control.api().len == 1);
433
+ try credential_is(control.api()[0].auth, "GOODKEY01");
434
+
435
+ // THE RULE.
436
+ const w = Wire.new();
437
+ const broken = Scripted.new(null, "vault unreachable");
438
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{broken.fn_val()}), vnull()));
439
+ const drove = drive_entity(client);
440
+ try testing.expect(drove.ran);
441
+ try testing.expect(!drove.ok);
442
+ try testing.expect(broken.asked == 1);
443
+ // The PROVIDER'S OWN message, and ZERO requests on the wire.
444
+ try testing.expect(contains(drove.msg, "vault unreachable"));
445
+ try testing.expect(w.api().len == 0);
446
+ }
447
+
448
+ test "secrets active: a provider ERROR fails direct() rather than sending" {
449
+ if (!present()) return error.SkipZigTest;
450
+
451
+ const control = Wire.new();
452
+ const good = secrets_client(control, h.omap(), secrets_opts(h.ja(&.{Scripted.new("GOODKEY02", null).fn_val()}), vnull()));
453
+ const cres = direct_probe(good);
454
+ try testing.expect(h.get_bool(cres, "ok") orelse false);
455
+ try testing.expect(control.api().len == 1);
456
+ try credential_is(control.api()[0].auth, "GOODKEY02");
457
+
458
+ const w = Wire.new();
459
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{Scripted.new(null, "vault unreachable").fn_val()}), vnull()));
460
+ const res = direct_probe(client);
461
+ try testing.expect(res == .object);
462
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
463
+ try testing.expect(contains(h.get_str(res, "err") orelse "", "vault unreachable"));
464
+ try testing.expect(w.api().len == 0);
465
+ }
466
+
467
+ test "secrets active: a provider ERROR fails graphql() rather than sending" {
468
+ if (!present()) return error.SkipZigTest;
469
+
470
+ const control = Wire.new();
471
+ const good = secrets_client(control, h.omap(), secrets_opts(h.ja(&.{Scripted.new("GOODKEY03", null).fn_val()}), vnull()));
472
+ const cres = good.graphql("{ ok }", vnull(), vnull());
473
+ try testing.expect(h.get_bool(cres, "ok") orelse false);
474
+ try testing.expect(control.api().len == 1);
475
+ try credential_is(control.api()[0].auth, "GOODKEY03");
476
+
477
+ const w = Wire.new();
478
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{Scripted.new(null, "vault unreachable").fn_val()}), vnull()));
479
+ const res = client.graphql("{ ok }", vnull(), vnull());
480
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
481
+ try testing.expect(contains(h.get_str(res, "err") orelse "", "vault unreachable"));
482
+ try testing.expect(w.api().len == 0);
483
+ }
484
+
485
+ // FAIL CLOSED ON A CONSTRUCTION FAILURE. The chain a project configures can
486
+ // be wrong before a single lookup happens, and init cannot fail the client
487
+ // construction - so it HOLDS the error and the transport gate refuses to
488
+ // send. The entry pinned here is a bare kind name where a spec belongs: a
489
+ // switch without a fail-closed arm silently DROPS it, the chain gets SHORTER
490
+ // rather than broken, and every request goes out unauthenticated.
491
+ test "secrets active: a malformed providers entry fails closed, never dropped" {
492
+ if (!present()) return error.SkipZigTest;
493
+ const notaprovider = "not a provider or a provider spec";
494
+
495
+ // CONTROL FIRST.
496
+ const control = Wire.new();
497
+ const good = secrets_client(control, h.omap(), secrets_opts(h.ja(&.{Scripted.new("INITKEY01", null).fn_val()}), vnull()));
498
+ const cres = direct_probe(good);
499
+ try testing.expect(h.get_bool(cres, "ok") orelse false);
500
+ try testing.expect(control.api().len == 1);
501
+ try credential_is(control.api()[0].auth, "INITKEY01");
502
+
503
+ // THE RULE: a kind NAME where a provider or spec belongs.
504
+ const w = Wire.new();
505
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{h.vstr("hashicorp")}), vnull()));
506
+
507
+ // The feature must still be INSTALLED: a construction failure that
508
+ // silently uninstalled it would be the same fail-open by another route.
509
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
510
+ try testing.expect(contains(sf.init_error() orelse "", notaprovider));
511
+
512
+ // direct runs no feature hook at all, so the ONLY thing that can refuse
513
+ // it is the transport gate - with sekreto's own message.
514
+ const res = direct_probe(client);
515
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
516
+ try testing.expect(contains(h.get_str(res, "err") orelse "", notaprovider));
517
+ try testing.expect(w.api().len == 0);
518
+
519
+ // And the entity pipeline.
520
+ const drove = drive_entity(client);
521
+ if (drove.ran) {
522
+ try testing.expect(!drove.ok);
523
+ try testing.expect(contains(drove.msg, notaprovider));
524
+ }
525
+ try testing.expect(w.api().len == 0);
526
+ }
527
+
528
+ test "secrets active: an unknown provider kind is refused by name, fail-closed" {
529
+ if (!present()) return error.SkipZigTest;
530
+ const w = Wire.new();
531
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{
532
+ h.jo(&.{.{ "kind", h.vstr("nosuchkind") }}),
533
+ }), vnull()));
534
+ const res = direct_probe(client);
535
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
536
+ try testing.expect(contains(h.get_str(res, "err") orelse "", "sekreto: unknown provider kind: nosuchkind"));
537
+ try testing.expect(w.api().len == 0);
538
+ }
539
+
540
+ // A provider failure closes the gate; a later resolution that SUCCEEDS
541
+ // reopens it and the operation goes out with the FRESH credential - a failed
542
+ // resolution is never cached.
543
+ test "secrets active: the gate recovers after a transient provider failure" {
544
+ if (!present()) return error.SkipZigTest;
545
+ const w = Wire.new();
546
+ const flaky = Scripted.new(null, "vault unreachable");
547
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{flaky.fn_val()}), vnull()));
548
+
549
+ const first = direct_probe(client);
550
+ try testing.expect(!(h.get_bool(first, "ok") orelse true));
551
+ try testing.expect(w.api().len == 0);
552
+
553
+ flaky.err = null;
554
+ flaky.value = "FRESH01";
555
+
556
+ const second = direct_probe(client);
557
+ try testing.expect(h.get_bool(second, "ok") orelse false);
558
+ try testing.expect(w.api().len == 1);
559
+ try credential_is(w.api()[0].auth, "FRESH01");
560
+ }
561
+
562
+ test "secrets active: an uncached miss retracts a resolved credential" {
563
+ if (!present()) return error.SkipZigTest;
564
+ const w = Wire.new();
565
+ const revocable = Scripted.new("REVOCABLE01", null);
566
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{revocable.fn_val()}), h.jo(&.{.{ "cache", h.vbool(false) }})));
567
+
568
+ _ = direct_probe(client);
569
+ try credential_is(w.api()[0].auth, "REVOCABLE01");
570
+
571
+ revocable.value = null;
572
+ _ = direct_probe(client);
573
+ try testing.expect(w.api().len == 2);
574
+ // After the chain reports a miss, the retracted credential must not go
575
+ // out.
576
+ try testing.expect(w.api()[1].auth == null);
577
+ }
578
+
579
+ test "secrets active: cache true asks the chain once, cache false every request" {
580
+ if (!present()) return error.SkipZigTest;
581
+ const cached = Scripted.new("K", null);
582
+ const cw = Wire.new();
583
+ const cclient = secrets_client(cw, h.omap(), secrets_opts(h.ja(&.{cached.fn_val()}), vnull()));
584
+ _ = direct_probe(cclient);
585
+ _ = direct_probe(cclient);
586
+ try testing.expect(cw.api().len == 2);
587
+ try testing.expect(cached.asked == 1);
588
+
589
+ const fresh = Scripted.new("K", null);
590
+ const fw = Wire.new();
591
+ const fclient = secrets_client(fw, h.omap(), secrets_opts(h.ja(&.{fresh.fn_val()}), h.jo(&.{.{ "cache", h.vbool(false) }})));
592
+ _ = direct_probe(fclient);
593
+ _ = direct_probe(fclient);
594
+ try testing.expect(fw.api().len == 2);
595
+ try testing.expect(fresh.asked == 2);
596
+ }
597
+
598
+ // `auth: null` - the documented way to disable auth outright, which
599
+ // prepare_auth honours before it ever reads the apikey. Pinned with an
600
+ // explicit apikey AND a resolving chain: nothing may reach the wire.
601
+ test "secrets active: auth null suppresses the credential, chain or no chain" {
602
+ if (!present()) return error.SkipZigTest;
603
+ const w = Wire.new();
604
+ const chain = Scripted.new("CHAINKEY03", null);
605
+ const client = secrets_client(w, h.jo(&.{
606
+ .{ "apikey", h.vstr("OPTKEY01") },
607
+ .{ "auth", h.vnull() },
608
+ }), secrets_opts(h.ja(&.{chain.fn_val()}), vnull()));
609
+
610
+ const res = direct_probe(client);
611
+ try testing.expect(h.get_bool(res, "ok") orelse false);
612
+ try testing.expect(w.api().len == 1);
613
+ try testing.expect(w.api()[0].auth == null);
614
+
615
+ // And options.auth survives validate as a PRESENT null, not a default.
616
+ const opts = client.options_map();
617
+ try testing.expect(opts == .object);
618
+ const raw = opts.object.get("auth") orelse return error.TestUnexpectedResult;
619
+ try testing.expect(raw == .null);
620
+ }
621
+
622
+ test "secrets active: the secret name is configurable" {
623
+ if (!present()) return error.SkipZigTest;
624
+ const w = Wire.new();
625
+ const chain = Scripted.new("TOKEN01", null);
626
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{chain.fn_val()}), h.jo(&.{.{ "name", h.vstr("api.token") }})));
627
+ _ = direct_probe(client);
628
+ try credential_is(w.api()[0].auth, "TOKEN01");
629
+ try testing.expect(chain.names.items.len == 1);
630
+ try testing.expectEqualStrings("api.token", chain.names.items[0]);
631
+ }
632
+
633
+ test "secrets active: sekreto is live for arbitrary secrets and redaction" {
634
+ if (!present()) return error.SkipZigTest;
635
+ const w = Wire.new();
636
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{
637
+ h.jo(&.{
638
+ .{ "kind", h.vstr("memory") },
639
+ .{ "values", h.jo(&.{ .{ "APIKEY", h.vstr("MEMKEY02") }, .{ "DB_PASS", h.vstr("hunter22") } }) },
640
+ }),
641
+ }), vnull()));
642
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
643
+
644
+ switch (sf.get("db.pass")) {
645
+ .ok => |v| try testing.expectEqualStrings("hunter22", v),
646
+ .err => return error.TestUnexpectedResult,
647
+ }
648
+ switch (sf.get("nope")) {
649
+ .ok => return error.TestUnexpectedResult,
650
+ .err => |m| try testing.expect(contains(m, "sekreto: unknown secret: nope")),
651
+ }
652
+ // Every value ever resolved is redactable.
653
+ const redacted = sf.redact("pass=hunter22 key=MEMKEY02");
654
+ try testing.expect(!contains(redacted, "hunter22"));
655
+ try testing.expect(contains(redacted, "[redacted]"));
656
+ }
657
+
658
+ // The plugin VOCABULARY: a kind the model selected (Config_zig FeaturePlugins
659
+ // -> feature/secrets/plugins.zig) builds; one it did not is refused by name
660
+ // with sekreto's own "pass it in the plugins option" message. This test
661
+ // selects `hashicorp` (the `vault` group) against a closed loopback port: a
662
+ // selected kind fails CLOSED with a reach error, an unselected one fails
663
+ // closed at construction. Either way nothing reaches the wire.
664
+ test "secrets active: a selected plugin kind is in the SDK vocabulary" {
665
+ if (!present()) return error.SkipZigTest;
666
+ const w = Wire.new();
667
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{
668
+ h.jo(&.{
669
+ .{ "kind", h.vstr("hashicorp") },
670
+ .{ "addr", h.vstr("http://127.0.0.1:9") },
671
+ .{ "token", h.vstr("t") },
672
+ }),
673
+ }), vnull()));
674
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
675
+
676
+ if (sf.init_error()) |message| {
677
+ // The vault group was not generated into this SDK: the kind is
678
+ // refused BY NAME, and the suite says so rather than passing.
679
+ try testing.expect(contains(message, "sekreto: unknown provider kind: hashicorp"));
680
+ try testing.expect(contains(message, "pass it in the plugins option"));
681
+ return error.SkipZigTest;
682
+ }
683
+
684
+ const res = direct_probe(client);
685
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
686
+ try testing.expect(contains(h.get_str(res, "err") orelse "", "sekreto: cannot reach http://127.0.0.1:9/"));
687
+ try testing.expect(w.api().len == 0);
688
+ }
689
+
690
+ test "secrets: the extend seam installs a directly constructed feature exactly once" {
691
+ if (!present()) return error.SkipZigTest;
692
+ const w = Wire.new();
693
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{Scripted.new("K", null).fn_val()}), vnull()));
694
+ try testing.expect(count_named(client, "secrets") == 1);
695
+ // Whether Config registered it or extend supplied it, one wrapper: one
696
+ // request reaches the wire per operation.
697
+ _ = direct_probe(client);
698
+ try testing.expect(w.api().len == 1);
699
+ }
700
+
701
+ // ---- the exchange ----------------------------------------------------------
702
+
703
+ fn exchange_opts(providers: Value, extra: Value) Value {
704
+ const xo = h.jo(&.{.{ "active", h.vbool(true) }});
705
+ if (extra == .object) {
706
+ var it = extra.object.iterator();
707
+ while (it.next()) |kv| h.setp(xo, kv.key_ptr.*, kv.value_ptr.*);
708
+ }
709
+ return secrets_opts(providers, h.jo(&.{
710
+ .{ "name", h.vstr("refresh_token") },
711
+ .{ "exchange", xo },
712
+ }));
713
+ }
714
+
715
+ test "secrets exchange: the refresh token buys an access token, and the request carries it" {
716
+ if (!present()) return error.SkipZigTest;
717
+ const w = Wire.new();
718
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
719
+ const res = direct_probe(client);
720
+ try testing.expect(h.get_bool(res, "ok") orelse false);
721
+
722
+ try testing.expect(w.token_calls() == 1);
723
+ try testing.expect(contains(w.calls.items[0].body orelse "", "\"refresh_token\":\"REFRESH01\""));
724
+ try testing.expect(std.mem.endsWith(u8, w.calls.items[0].url, "/api/auth/token"));
725
+ try testing.expect(w.api().len == 1);
726
+ try credential_is(w.api()[0].auth, "ACCESS01");
727
+ }
728
+
729
+ test "secrets exchange: one purchase serves many requests" {
730
+ if (!present()) return error.SkipZigTest;
731
+ const w = Wire.new();
732
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
733
+ _ = direct_probe(client);
734
+ _ = direct_probe(client);
735
+ _ = direct_probe(client);
736
+ try testing.expect(w.token_calls() == 1);
737
+ try testing.expect(w.api().len == 3);
738
+ try credential_is(w.api()[2].auth, "ACCESS01");
739
+ }
740
+
741
+ test "secrets exchange: a 401 buys another token and retries the SAME request" {
742
+ if (!present()) return error.SkipZigTest;
743
+ const w = Wire.new();
744
+ w.apistatus = &.{ 401, 200 };
745
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
746
+ const res = direct_probe(client);
747
+ try testing.expect(h.get_bool(res, "ok") orelse false);
748
+ try testing.expect(w.token_calls() == 2);
749
+ try testing.expect(w.api().len == 2);
750
+ try credential_is(w.api()[0].auth, "ACCESS01");
751
+ try credential_is(w.api()[1].auth, "ACCESS02");
752
+ try testing.expectEqualStrings(w.api()[0].url, w.api()[1].url);
753
+ }
754
+
755
+ test "secrets exchange: the retry happens once, not in a loop" {
756
+ if (!present()) return error.SkipZigTest;
757
+ const w = Wire.new();
758
+ w.apistatus = &.{401};
759
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
760
+ const res = direct_probe(client);
761
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
762
+ try testing.expect(h.to_int(h.getp(res, "status")) == 401);
763
+ try testing.expect(w.api().len == 2);
764
+ try testing.expect(w.token_calls() == 2);
765
+ }
766
+
767
+ test "secrets exchange: a status outside exchange.statuses is not an expiry" {
768
+ if (!present()) return error.SkipZigTest;
769
+ const w = Wire.new();
770
+ w.apistatus = &.{500};
771
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
772
+ _ = direct_probe(client);
773
+ try testing.expect(w.api().len == 1);
774
+ try testing.expect(w.token_calls() == 1);
775
+ }
776
+
777
+ test "secrets exchange: statuses and field names are configurable" {
778
+ if (!present()) return error.SkipZigTest;
779
+ const w = Wire.new();
780
+ w.apistatus = &.{ 403, 200 };
781
+ w.tokenpath = "oauth/refresh";
782
+ w.tokenfield = "token";
783
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), h.jo(&.{
784
+ .{ "statuses", h.ja(&.{h.vnum(403)}) },
785
+ .{ "path", h.vstr("oauth/refresh") },
786
+ .{ "request", h.vstr("grant") },
787
+ .{ "response", h.vstr("token") },
788
+ })));
789
+ const res = direct_probe(client);
790
+ try testing.expect(h.get_bool(res, "ok") orelse false);
791
+ try testing.expect(w.token_calls() == 2);
792
+ try testing.expect(contains(w.calls.items[0].body orelse "", "\"grant\":\"REFRESH01\""));
793
+ try credential_is(w.api()[1].auth, "ACCESS02");
794
+ }
795
+
796
+ test "secrets exchange: an explicit apikey is spent before anything is bought" {
797
+ if (!present()) return error.SkipZigTest;
798
+ const w = Wire.new();
799
+ w.apistatus = &.{ 401, 200 };
800
+ const client = secrets_client(w, h.jo(&.{.{ "apikey", h.vstr("HELD01") }}), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
801
+ const res = direct_probe(client);
802
+ try testing.expect(h.get_bool(res, "ok") orelse false);
803
+ // The held token went out first, with NO purchase; its expiry bought one.
804
+ try credential_is(w.api()[0].auth, "HELD01");
805
+ try credential_is(w.api()[1].auth, "ACCESS01");
806
+ try testing.expect(w.token_calls() == 1);
807
+ }
808
+
809
+ test "secrets exchange: an explicit exchange.refresh wins over the chain" {
810
+ if (!present()) return error.SkipZigTest;
811
+ const w = Wire.new();
812
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("CHAINREFRESH", null).fn_val()}), h.jo(&.{.{ "refresh", h.vstr("GIVENREFRESH") }})));
813
+ _ = direct_probe(client);
814
+ try testing.expect(contains(w.calls.items[0].body orelse "", "GIVENREFRESH"));
815
+ }
816
+
817
+ test "secrets exchange: no refresh token anywhere is an error, not an unauthenticated call" {
818
+ if (!present()) return error.SkipZigTest;
819
+ const w = Wire.new();
820
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new(null, null).fn_val()}), vnull()));
821
+ const res = direct_probe(client);
822
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
823
+ try testing.expect(contains(h.get_str(res, "err") orelse "", "secrets: no refresh token"));
824
+ try testing.expect(w.calls.items.len == 0);
825
+ }
826
+
827
+ test "secrets exchange: a failing token endpoint surfaces the API refusal, not a spin" {
828
+ if (!present()) return error.SkipZigTest;
829
+ const w = Wire.new();
830
+ w.apistatus = &.{401};
831
+ w.tokenstatus = &.{ 200, 500 };
832
+ const client = secrets_client(w, h.omap(), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
833
+ const res = direct_probe(client);
834
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
835
+ try testing.expect(h.to_int(h.getp(res, "status")) == 401);
836
+ try testing.expect(h.get_str(res, "err") == null);
837
+ try testing.expect(w.api().len == 1);
838
+ try testing.expect(w.token_calls() == 2);
839
+ }
840
+
841
+ test "secrets exchange: auth null suppresses the credential, refusal or not" {
842
+ if (!present()) return error.SkipZigTest;
843
+ const w = Wire.new();
844
+ w.apistatus = &.{401};
845
+ const client = secrets_client(w, h.jo(&.{.{ "auth", h.vnull() }}), exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()));
846
+ _ = direct_probe(client);
847
+ try testing.expect(w.api().len == 1);
848
+ try testing.expect(w.api()[0].auth == null);
849
+ }
850
+
851
+ test "secrets exchange: exchange off leaves the feature exactly as it was" {
852
+ if (!present()) return error.SkipZigTest;
853
+ const w = Wire.new();
854
+ const client = secrets_client(w, h.omap(), secrets_opts(h.ja(&.{Scripted.new("PLAINKEY01", null).fn_val()}), h.jo(&.{
855
+ .{ "exchange", h.jo(&.{.{ "active", h.vbool(false) }}) },
856
+ })));
857
+ _ = direct_probe(client);
858
+ try testing.expect(w.token_calls() == 0);
859
+ try credential_is(w.api()[0].auth, "PLAINKEY01");
860
+ }
861
+
862
+ test "secrets exchange: test mode buys nothing and needs no token endpoint" {
863
+ if (!present()) return error.SkipZigTest;
864
+ const w = Wire.new();
865
+ const opts = h.jo(&.{
866
+ .{ "system", h.jo(&.{.{ "fetch", w.fetch_fn() }}) },
867
+ .{ "feature", h.jo(&.{.{ "secrets", exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()) }}) },
868
+ });
869
+ const client = sdk.test_sdk(vnull(), opts);
870
+ const sf = secrets_of(client) orelse return error.TestUnexpectedResult;
871
+ _ = direct_probe(client);
872
+ try testing.expectEqualStrings("test-access_token", sf.credential());
873
+ try testing.expect(w.calls.items.len == 0);
874
+ }
875
+
876
+ // THE BUNDLED TRANSPORT OF LAST RESORT. With no `system.fetch`, the exchange
877
+ // uses the vendored sekreto plugins' own HTTP client. A closed loopback port
878
+ // answers with sekreto's own reach error, which proves the path is wired
879
+ // and that its failure is fail-closed - no request reaches the API.
880
+ test "secrets exchange: without system.fetch the bundled HTTP transport buys the token" {
881
+ if (!present()) return error.SkipZigTest;
882
+ const opts = h.jo(&.{
883
+ .{ "base", h.vstr("http://127.0.0.1:9/api") },
884
+ .{ "feature", h.jo(&.{.{ "secrets", exchange_opts(h.ja(&.{Scripted.new("REFRESH01", null).fn_val()}), vnull()) }}) },
885
+ });
886
+ const client = sdk.SDK.new_with(opts, &.{sdk.SecretsFeature.make()});
887
+ const res = direct_probe(client);
888
+ try testing.expect(!(h.get_bool(res, "ok") orelse true));
889
+ const msg = h.get_str(res, "err") orelse "";
890
+ try testing.expect(contains(msg, "sekreto: cannot reach http://127.0.0.1:9/api/auth/token"));
891
+ }