@voxgig/sdkgen 4.19.1 → 4.21.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 (1034) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/applicability.js +11 -6
  3. package/dist/helpers/applicability.js.map +1 -1
  4. package/dist/helpers/collectDeps.js +31 -6
  5. package/dist/helpers/collectDeps.js.map +1 -1
  6. package/dist/helpers/naming.js +2 -2
  7. package/dist/helpers/naming.js.map +1 -1
  8. package/dist/sdkgen.d.ts +2 -2
  9. package/dist/sdkgen.js +6 -3
  10. package/dist/sdkgen.js.map +1 -1
  11. package/dist/tsconfig.tsbuildinfo +1 -1
  12. package/dist/utility.d.ts +4 -1
  13. package/dist/utility.js +60 -0
  14. package/dist/utility.js.map +1 -1
  15. package/model/sdkgen.aon +59 -3
  16. package/package.json +1 -1
  17. package/project/.sdk/model/feature/secrets.aon +128 -0
  18. package/project/.sdk/model/feature/validate.aon +3 -2
  19. package/project/.sdk/model/target/c.aon +1 -1
  20. package/project/.sdk/model/target/clojure.aon +1 -1
  21. package/project/.sdk/model/target/cpp.aon +1 -1
  22. package/project/.sdk/model/target/csharp.aon +1 -1
  23. package/project/.sdk/model/target/elixir.aon +1 -1
  24. package/project/.sdk/model/target/go.aon +1 -1
  25. package/project/.sdk/model/target/java.aon +1 -1
  26. package/project/.sdk/model/target/kotlin.aon +1 -1
  27. package/project/.sdk/model/target/lua.aon +1 -1
  28. package/project/.sdk/model/target/ocaml.aon +1 -1
  29. package/project/.sdk/model/target/perl.aon +1 -1
  30. package/project/.sdk/model/target/php.aon +1 -1
  31. package/project/.sdk/model/target/py.aon +1 -1
  32. package/project/.sdk/model/target/rb.aon +1 -1
  33. package/project/.sdk/model/target/rust.aon +1 -1
  34. package/project/.sdk/model/target/scala.aon +1 -1
  35. package/project/.sdk/model/target/swift.aon +1 -1
  36. package/project/.sdk/model/target/zig.aon +1 -1
  37. package/project/.sdk/src/cmp/c/Config_c.ts +15 -0
  38. package/project/.sdk/src/cmp/c/Main_c.ts +18 -0
  39. package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +371 -0
  40. package/project/.sdk/src/cmp/c/Schema_c.ts +106 -0
  41. package/project/.sdk/src/cmp/clojure/Config_clojure.ts +47 -1
  42. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +13 -1
  43. package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +374 -0
  44. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +1 -0
  45. package/project/.sdk/src/cmp/clojure/Schema_clojure.ts +73 -0
  46. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +40 -0
  47. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +20 -0
  48. package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +441 -0
  49. package/project/.sdk/src/cmp/cpp/Schema_cpp.ts +105 -0
  50. package/project/.sdk/src/cmp/csharp/Config_csharp.ts +42 -1
  51. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +21 -0
  52. package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +392 -0
  53. package/project/.sdk/src/cmp/csharp/Schema_csharp.ts +85 -0
  54. package/project/.sdk/src/cmp/elixir/Config_elixir.ts +36 -1
  55. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +17 -0
  56. package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +418 -0
  57. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +1 -0
  58. package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +88 -0
  59. package/project/.sdk/src/cmp/go/Config_go.ts +12 -1
  60. package/project/.sdk/src/cmp/go/Main_go.ts +16 -0
  61. package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +322 -0
  62. package/project/.sdk/src/cmp/go/Schema_go.ts +93 -0
  63. package/project/.sdk/src/cmp/java/Config_java.ts +20 -1
  64. package/project/.sdk/src/cmp/java/Main_java.ts +16 -0
  65. package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +298 -0
  66. package/project/.sdk/src/cmp/java/Schema_java.ts +125 -0
  67. package/project/.sdk/src/cmp/js/Config_js.ts +12 -1
  68. package/project/.sdk/src/cmp/js/Main_js.ts +6 -0
  69. package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +244 -0
  70. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +23 -1
  71. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +22 -0
  72. package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +440 -0
  73. package/project/.sdk/src/cmp/kotlin/Schema_kotlin.ts +111 -0
  74. package/project/.sdk/src/cmp/lua/Config_lua.ts +15 -1
  75. package/project/.sdk/src/cmp/lua/Main_lua.ts +57 -9
  76. package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -0
  77. package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +364 -0
  78. package/project/.sdk/src/cmp/lua/ReadmeExplanation_lua.ts +1 -0
  79. package/project/.sdk/src/cmp/lua/Schema_lua.ts +72 -0
  80. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +55 -2
  81. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +53 -13
  82. package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +454 -0
  83. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +1 -0
  84. package/project/.sdk/src/cmp/ocaml/Schema_ocaml.ts +99 -0
  85. package/project/.sdk/src/cmp/perl/Config_perl.ts +30 -0
  86. package/project/.sdk/src/cmp/perl/Main_perl.ts +16 -0
  87. package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +387 -0
  88. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +1 -0
  89. package/project/.sdk/src/cmp/perl/Schema_perl.ts +107 -0
  90. package/project/.sdk/src/cmp/php/Config_php.ts +12 -1
  91. package/project/.sdk/src/cmp/php/Main_php.ts +9 -0
  92. package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
  93. package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +325 -0
  94. package/project/.sdk/src/cmp/php/ReadmeExplanation_php.ts +1 -0
  95. package/project/.sdk/src/cmp/php/Schema_php.ts +129 -0
  96. package/project/.sdk/src/cmp/py/Config_py.ts +12 -1
  97. package/project/.sdk/src/cmp/py/Main_py.ts +14 -0
  98. package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +389 -0
  99. package/project/.sdk/src/cmp/py/ReadmeExplanation_py.ts +1 -0
  100. package/project/.sdk/src/cmp/py/Schema_py.ts +72 -0
  101. package/project/.sdk/src/cmp/rb/Config_rb.ts +18 -1
  102. package/project/.sdk/src/cmp/rb/Main_rb.ts +12 -0
  103. package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +305 -0
  104. package/project/.sdk/src/cmp/rb/ReadmeExplanation_rb.ts +1 -0
  105. package/project/.sdk/src/cmp/rb/Schema_rb.ts +70 -0
  106. package/project/.sdk/src/cmp/rust/Config_rust.ts +41 -1
  107. package/project/.sdk/src/cmp/rust/Main_rust.ts +19 -0
  108. package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +410 -0
  109. package/project/.sdk/src/cmp/rust/Schema_rust.ts +107 -0
  110. package/project/.sdk/src/cmp/scala/Config_scala.ts +21 -1
  111. package/project/.sdk/src/cmp/scala/Main_scala.ts +17 -0
  112. package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +415 -0
  113. package/project/.sdk/src/cmp/scala/Schema_scala.ts +108 -0
  114. package/project/.sdk/src/cmp/swift/Config_swift.ts +37 -1
  115. package/project/.sdk/src/cmp/swift/Main_swift.ts +13 -0
  116. package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +439 -0
  117. package/project/.sdk/src/cmp/swift/Schema_swift.ts +92 -0
  118. package/project/.sdk/src/cmp/ts/Config_ts.ts +12 -1
  119. package/project/.sdk/src/cmp/ts/Main_ts.ts +5 -0
  120. package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +237 -0
  121. package/project/.sdk/src/cmp/zig/Config_zig.ts +33 -1
  122. package/project/.sdk/src/cmp/zig/Main_zig.ts +19 -0
  123. package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +545 -0
  124. package/project/.sdk/src/cmp/zig/Schema_zig.ts +114 -0
  125. package/project/.sdk/tm/c/core/context.c +3 -0
  126. package/project/.sdk/tm/c/core/sdk.h +14 -0
  127. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +2 -2
  128. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +2 -2
  129. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +2 -2
  130. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +2 -2
  131. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +2 -2
  132. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +2 -2
  133. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +2 -2
  134. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +2 -2
  135. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +2 -2
  136. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +2 -2
  137. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +3 -3
  138. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +2 -2
  139. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +2 -2
  140. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +2 -2
  141. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +25 -2
  142. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +3 -2
  143. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +2 -2
  144. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +2 -2
  145. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +2 -2
  146. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +2 -2
  147. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +2 -2
  148. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +2 -2
  149. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +2 -2
  150. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +2 -2
  151. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +2 -2
  152. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +2 -2
  153. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +2 -2
  154. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +2 -2
  155. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +2 -2
  156. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +2 -2
  157. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +2 -2
  158. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +2 -2
  159. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +2 -2
  160. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +2 -2
  161. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +2 -2
  162. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +2 -2
  163. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +2 -2
  164. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +2 -2
  165. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +2 -2
  166. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +2 -2
  167. package/project/.sdk/tm/c/feature/secrets/plugins/minivault.c +2072 -0
  168. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +2 -2
  169. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +2 -2
  170. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +2 -2
  171. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +151 -10
  172. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +16 -10
  173. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +2 -2
  174. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +12 -8
  175. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +2 -2
  176. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +17 -2
  177. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +5 -5
  178. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +37 -9
  179. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +2 -2
  180. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +17 -2
  181. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +16 -2
  182. package/project/.sdk/tm/c/feature/validate.c +364 -0
  183. package/project/.sdk/tm/c/feature/validate.h +29 -0
  184. package/project/.sdk/tm/c/src/feature/validate/.gitkeep +0 -0
  185. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  186. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  187. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  188. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  189. package/project/.sdk/tm/c/utility/make_options.c +12 -24
  190. package/project/.sdk/tm/c/utility/make_spec.c +8 -0
  191. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +2 -2
  192. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +2 -2
  193. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +2 -2
  194. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +2 -2
  195. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +2 -2
  196. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +3 -3
  197. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +2 -2
  198. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +17 -2
  199. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +2 -2
  200. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +2 -2
  201. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +2 -2
  202. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +2 -2
  203. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +2 -2
  204. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +2 -2
  205. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +2 -2
  206. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +2 -2
  207. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +2 -2
  208. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +2 -2
  209. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +2 -2
  210. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +2 -2
  211. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +2 -2
  212. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +2 -2
  213. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +2 -2
  214. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +2 -2
  215. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +2 -2
  216. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +2 -2
  217. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +2 -2
  218. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +2 -2
  219. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/minivault.clj +837 -0
  220. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +2 -2
  221. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +2 -2
  222. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +2 -2
  223. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +2 -2
  224. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +2 -2
  225. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +6 -4
  226. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +2 -2
  227. package/project/.sdk/tm/clojure/src/feature/validate/.gitkeep +0 -0
  228. package/project/.sdk/tm/clojure/src/sdk/core.clj +52 -51
  229. package/project/.sdk/tm/clojure/src/sdk/features.clj +202 -0
  230. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  231. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  232. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  233. package/project/.sdk/tm/cpp/core/types.hpp +4 -0
  234. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +2 -2
  235. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +2 -2
  236. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +2 -2
  237. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +2 -2
  238. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +2 -2
  239. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +2 -2
  240. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +2 -2
  241. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +2 -2
  242. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +2 -2
  243. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +2 -2
  244. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +3 -3
  245. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +2 -2
  246. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +2 -2
  247. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +2 -2
  248. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +21 -2
  249. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +3 -2
  250. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +2 -2
  251. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +2 -2
  252. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +2 -2
  253. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +2 -2
  254. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +2 -2
  255. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +2 -2
  256. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +2 -2
  257. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +2 -2
  258. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +2 -2
  259. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +2 -2
  260. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +2 -2
  261. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +2 -2
  262. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +2 -2
  263. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +2 -2
  264. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +2 -2
  265. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +2 -2
  266. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +2 -2
  267. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +2 -2
  268. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +2 -2
  269. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +2 -2
  270. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +2 -2
  271. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +9 -7
  272. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +2 -2
  273. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +2 -2
  274. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +2 -2
  275. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +2 -2
  276. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +2 -2
  277. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +2 -2
  278. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +2 -2
  279. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +2 -2
  280. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +2 -2
  281. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +2 -2
  282. package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.cpp +1345 -0
  283. package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.hpp +219 -0
  284. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +2 -2
  285. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +2 -2
  286. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +2 -2
  287. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +2 -2
  288. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +2 -2
  289. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +2 -2
  290. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +2 -2
  291. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +2 -2
  292. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +2 -2
  293. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +2 -2
  294. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +2 -2
  295. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +2 -2
  296. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +22 -2
  297. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +12 -2
  298. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +3 -3
  299. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +2 -2
  300. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +2 -2
  301. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +2 -2
  302. package/project/.sdk/tm/cpp/feature/validate.hpp +301 -0
  303. package/project/.sdk/tm/cpp/src/feature/validate/.gitkeep +0 -0
  304. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  305. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  306. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  307. package/project/.sdk/tm/cpp/utility/pipeline.hpp +42 -63
  308. package/project/.sdk/tm/csharp/feature/ValidateFeature.cs +343 -0
  309. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +2 -2
  310. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +2 -2
  311. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +2 -2
  312. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +2 -2
  313. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +2 -2
  314. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +2 -2
  315. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +2 -2
  316. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +3 -3
  317. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +2 -2
  318. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +9 -2
  319. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +21 -2
  320. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +2 -2
  321. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +2 -2
  322. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +2 -2
  323. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +2 -2
  324. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +2 -2
  325. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +2 -2
  326. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +2 -2
  327. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +2 -2
  328. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +2 -2
  329. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +2 -2
  330. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +2 -2
  331. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +2 -2
  332. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +2 -2
  333. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +2 -2
  334. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +2 -2
  335. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +2 -2
  336. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +2 -2
  337. package/project/.sdk/tm/csharp/feature/secrets/plugins/MiniVault.cs +1572 -0
  338. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +2 -2
  339. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +2 -2
  340. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +2 -2
  341. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +2 -2
  342. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +3 -2
  343. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +2 -2
  344. package/project/.sdk/tm/csharp/src/feature/validate/.gitkeep +0 -0
  345. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  346. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  347. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +12 -74
  348. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +24 -3
  349. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +2 -2
  350. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +2 -2
  351. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +2 -2
  352. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +2 -2
  353. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +2 -2
  354. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +2 -2
  355. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +7 -4
  356. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +2 -2
  357. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +13 -2
  358. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +15 -2
  359. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +2 -2
  360. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +2 -2
  361. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +2 -2
  362. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +2 -2
  363. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +2 -2
  364. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +2 -2
  365. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +2 -2
  366. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +2 -2
  367. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +2 -2
  368. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +2 -2
  369. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +2 -2
  370. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +2 -2
  371. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +2 -2
  372. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +2 -2
  373. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +2 -2
  374. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +3 -3
  375. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +3 -3
  376. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +2 -2
  377. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/minivault.ex +1033 -0
  378. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +2 -2
  379. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +2 -2
  380. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +2 -2
  381. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +2 -2
  382. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +2 -2
  383. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +17 -5
  384. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +2 -2
  385. package/project/.sdk/tm/elixir/lib/projectname/feature/validate.ex +320 -0
  386. package/project/.sdk/tm/elixir/lib/projectname/utility.ex +17 -66
  387. package/project/.sdk/tm/elixir/src/feature/validate/.gitkeep +0 -0
  388. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  389. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  390. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  391. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  392. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  393. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  394. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  395. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  396. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +2 -2
  397. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  398. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +25 -1
  399. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  400. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  401. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  402. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  403. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  404. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  405. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  406. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +2 -2
  407. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  408. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  409. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  410. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  411. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  412. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +2 -2
  413. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
  414. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
  415. package/project/.sdk/tm/go/feature/secrets/plugins/minivault/format.go +493 -0
  416. package/project/.sdk/tm/go/feature/secrets/plugins/minivault/minivault.go +1131 -0
  417. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  418. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  419. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  420. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +14 -2
  421. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
  422. package/project/.sdk/tm/go/feature/validate_feature.go +346 -0
  423. package/project/.sdk/tm/go/src/feature/validate/.gitkeep +0 -0
  424. package/project/.sdk/tm/go/test/omni/omni.go +2 -2
  425. package/project/.sdk/tm/go/test/omni/util.go +2 -2
  426. package/project/.sdk/tm/go/utility/make_options.go +13 -54
  427. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +24 -8
  428. package/project/.sdk/tm/java/feature/ValidateFeature.java +330 -0
  429. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +2 -2
  430. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +2 -2
  431. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +2 -2
  432. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +2 -2
  433. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +2 -2
  434. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +2 -2
  435. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +2 -2
  436. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +3 -3
  437. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +2 -2
  438. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +3 -3
  439. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +21 -2
  440. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +2 -2
  441. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +2 -2
  442. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +2 -2
  443. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +2 -2
  444. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +2 -2
  445. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +2 -2
  446. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +2 -2
  447. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +2 -2
  448. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +2 -2
  449. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +2 -2
  450. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +4 -3
  451. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +2 -2
  452. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +2 -2
  453. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +2 -2
  454. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +2 -2
  455. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +2 -2
  456. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +2 -2
  457. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +2 -2
  458. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +2 -2
  459. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +2 -2
  460. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +2 -2
  461. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +2 -2
  462. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +2 -2
  463. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Minivault.java +1448 -0
  464. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +2 -2
  465. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +2 -2
  466. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +2 -2
  467. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +2 -2
  468. package/project/.sdk/tm/java/src/feature/validate/.gitkeep +0 -0
  469. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  470. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  471. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  472. package/project/.sdk/tm/java/utility/MakeOptions.java +13 -33
  473. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  474. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +2 -2
  475. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +2 -2
  476. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +2 -2
  477. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +2 -2
  478. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +2 -2
  479. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +3 -3
  480. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +2 -2
  481. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +17 -2
  482. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +2 -2
  483. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +2 -2
  484. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +2 -2
  485. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +2 -2
  486. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +2 -2
  487. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +2 -2
  488. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +2 -2
  489. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +2 -2
  490. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +2 -2
  491. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +2 -2
  492. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +2 -2
  493. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +2 -2
  494. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +2 -2
  495. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +2 -2
  496. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +2 -2
  497. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +2 -2
  498. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +2 -2
  499. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/minivault.js +866 -0
  500. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +2 -2
  501. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +2 -2
  502. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +2 -2
  503. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +2 -2
  504. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +3 -2
  505. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +2 -2
  506. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +2 -2
  507. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +2 -2
  508. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +2 -2
  509. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +2 -2
  510. package/project/.sdk/tm/js/src/utility/StructUtility.js +1 -1
  511. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  512. package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
  513. package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
  514. package/project/.sdk/tm/kotlin/feature/ValidateFeature.kt +297 -0
  515. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +2 -2
  516. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +2 -2
  517. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +2 -2
  518. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +2 -2
  519. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +2 -2
  520. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +3 -3
  521. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +2 -2
  522. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +21 -2
  523. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +2 -2
  524. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +2 -2
  525. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +2 -2
  526. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +2 -2
  527. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +2 -2
  528. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +2 -2
  529. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +2 -2
  530. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +2 -2
  531. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +2 -2
  532. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +2 -2
  533. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +3 -2
  534. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +2 -2
  535. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +14 -2
  536. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +10 -2
  537. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +2 -2
  538. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +2 -2
  539. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +2 -2
  540. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +2 -2
  541. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +2 -2
  542. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +2 -2
  543. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +2 -2
  544. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +2 -2
  545. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Minivault.kt +1095 -0
  546. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +2 -2
  547. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +2 -2
  548. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +2 -2
  549. package/project/.sdk/tm/kotlin/src/feature/validate/.gitkeep +0 -0
  550. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  551. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  552. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  553. package/project/.sdk/tm/kotlin/utility/MakeOptions.kt +13 -22
  554. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -0
  555. package/project/.sdk/tm/kotlin/utility/Prepare.kt +13 -46
  556. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  557. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +2 -2
  558. package/project/.sdk/tm/lua/feature/secrets/native/sekretovault.c +240 -0
  559. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +2 -2
  560. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +2 -2
  561. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +2 -2
  562. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +2 -2
  563. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +2 -2
  564. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +12 -3
  565. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +2 -2
  566. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +18 -2
  567. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +2 -2
  568. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +2 -2
  569. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +2 -2
  570. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +2 -2
  571. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +2 -2
  572. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +2 -2
  573. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +2 -2
  574. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +2 -2
  575. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +2 -2
  576. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +2 -2
  577. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +2 -2
  578. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +2 -2
  579. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +2 -2
  580. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +2 -2
  581. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +2 -2
  582. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +2 -2
  583. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +2 -2
  584. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +2 -2
  585. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +2 -2
  586. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +2 -2
  587. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +2 -2
  588. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/minivault.lua +1227 -0
  589. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +2 -2
  590. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +2 -2
  591. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +2 -2
  592. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +2 -2
  593. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +2 -2
  594. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +3 -2
  595. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +2 -2
  596. package/project/.sdk/tm/lua/feature/validate_feature.lua +333 -0
  597. package/project/.sdk/tm/lua/src/feature/validate/.gitkeep +0 -0
  598. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  599. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  600. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  601. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  602. package/project/.sdk/tm/lua/utility/make_options.lua +74 -55
  603. package/project/.sdk/tm/lua/utility/make_spec.lua +8 -1
  604. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  605. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  606. package/project/.sdk/tm/ocaml/Makefile +16 -1
  607. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +2 -2
  608. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +2 -2
  609. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +2 -2
  610. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +2 -2
  611. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +2 -2
  612. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +2 -2
  613. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +5 -3
  614. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +2 -2
  615. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +18 -2
  616. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +2 -2
  617. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +2 -2
  618. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +2 -2
  619. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +2 -2
  620. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +2 -2
  621. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +2 -2
  622. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +2 -2
  623. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +2 -2
  624. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +2 -2
  625. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +2 -2
  626. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +2 -2
  627. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +2 -2
  628. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +2 -2
  629. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +2 -2
  630. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +2 -2
  631. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +2 -2
  632. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +2 -2
  633. package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault.ml +1086 -0
  634. package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault_stubs.c +222 -0
  635. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +2 -2
  636. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +2 -2
  637. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +2 -2
  638. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +2 -2
  639. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +2 -2
  640. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +2 -2
  641. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +2 -2
  642. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +33 -3
  643. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +2 -2
  644. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +4 -3
  645. package/project/.sdk/tm/ocaml/sdk_features.ml +174 -0
  646. package/project/.sdk/tm/ocaml/sdk_helpers.ml +15 -0
  647. package/project/.sdk/tm/ocaml/sdk_runtime.ml +30 -49
  648. package/project/.sdk/tm/ocaml/src/feature/validate/.gitkeep +0 -0
  649. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +125 -12
  650. package/project/.sdk/tm/ocaml/test/t_pipeline.ml +64 -6
  651. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  652. package/project/.sdk/tm/perl/core/helpers.pm +64 -16
  653. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +2 -2
  654. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +2 -2
  655. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +2 -2
  656. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +2 -2
  657. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +2 -2
  658. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +3 -3
  659. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +2 -2
  660. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +19 -2
  661. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +2 -2
  662. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +2 -2
  663. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +2 -2
  664. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +2 -2
  665. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +2 -2
  666. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +2 -2
  667. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +2 -2
  668. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +2 -2
  669. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +2 -2
  670. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +2 -2
  671. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +2 -2
  672. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +2 -2
  673. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +2 -2
  674. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +2 -2
  675. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +2 -2
  676. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Minivault.pm +1380 -0
  677. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +2 -2
  678. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +2 -2
  679. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +2 -2
  680. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +2 -2
  681. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +2 -2
  682. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +4 -3
  683. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +2 -2
  684. package/project/.sdk/tm/perl/feature/validate_feature.pm +319 -0
  685. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  686. package/project/.sdk/tm/perl/src/feature/validate/.gitkeep +0 -0
  687. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  688. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  689. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  690. package/project/.sdk/tm/perl/utility/make_options.pm +25 -34
  691. package/project/.sdk/tm/php/feature/ValidateFeature.php +361 -0
  692. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +2 -2
  693. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +2 -2
  694. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +2 -2
  695. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +2 -2
  696. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +2 -2
  697. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +3 -3
  698. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +2 -2
  699. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +26 -2
  700. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +2 -2
  701. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +2 -2
  702. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +2 -2
  703. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +2 -2
  704. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +2 -2
  705. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +2 -2
  706. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +2 -2
  707. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +2 -2
  708. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +2 -2
  709. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +2 -2
  710. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +2 -2
  711. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +2 -2
  712. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +2 -2
  713. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +2 -2
  714. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +2 -2
  715. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/minivault.php +1250 -0
  716. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +2 -2
  717. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +2 -2
  718. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +2 -2
  719. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +2 -2
  720. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +2 -2
  721. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +5 -3
  722. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +2 -2
  723. package/project/.sdk/tm/php/src/feature/validate/.gitkeep +0 -0
  724. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  725. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  726. package/project/.sdk/tm/php/utility/MakeOptions.php +15 -24
  727. package/project/.sdk/tm/php/utility/struct/Struct.php +56 -7
  728. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  729. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  730. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  731. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  732. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  733. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  734. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +2 -2
  735. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  736. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +17 -1
  737. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  738. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  739. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  740. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  741. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  742. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  743. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +1 -1
  744. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  745. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
  746. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  747. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  748. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  749. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  750. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
  751. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  752. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
  753. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/minivault.py +1202 -0
  754. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  755. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  756. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  757. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +2 -1
  758. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
  759. package/project/.sdk/tm/py/pkg/feature/validate_feature.py +273 -0
  760. package/project/.sdk/tm/py/pkg/utility/make_options.py +14 -53
  761. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  762. package/project/.sdk/tm/py/src/feature/validate/.gitkeep +0 -0
  763. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  764. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
  765. package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
  766. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +2 -2
  767. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +2 -2
  768. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +2 -2
  769. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +2 -2
  770. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +2 -2
  771. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +3 -3
  772. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +2 -2
  773. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +16 -2
  774. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +2 -2
  775. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +2 -2
  776. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +2 -2
  777. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +2 -2
  778. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +2 -2
  779. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +2 -2
  780. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +2 -2
  781. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +2 -2
  782. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +2 -2
  783. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +2 -2
  784. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +2 -2
  785. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +2 -2
  786. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +2 -2
  787. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +2 -2
  788. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +2 -2
  789. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +2 -2
  790. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/minivault.rb +979 -0
  791. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +2 -2
  792. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +2 -2
  793. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +2 -2
  794. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +6 -5
  795. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +2 -2
  796. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +2 -2
  797. package/project/.sdk/tm/rb/feature/validate_feature.rb +265 -0
  798. package/project/.sdk/tm/rb/src/feature/validate/.gitkeep +0 -0
  799. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  800. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  801. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  802. package/project/.sdk/tm/rb/utility/make_options.rb +15 -32
  803. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +24 -1
  804. package/project/.sdk/tm/rust/core/mod.rs +3 -2
  805. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +2 -2
  806. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +2 -2
  807. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +2 -2
  808. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +2 -2
  809. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +2 -2
  810. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +3 -3
  811. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +2 -2
  812. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +24 -2
  813. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +2 -2
  814. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +2 -2
  815. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +2 -2
  816. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +2 -2
  817. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +2 -2
  818. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +2 -2
  819. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +2 -2
  820. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +2 -2
  821. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +2 -2
  822. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +2 -2
  823. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +2 -2
  824. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +2 -2
  825. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +2 -2
  826. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +2 -2
  827. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +2 -2
  828. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +2 -2
  829. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +2 -2
  830. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +2 -2
  831. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +2 -2
  832. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +2 -2
  833. package/project/.sdk/tm/rust/feature/secrets/plugins/minivault/format.rs +425 -0
  834. package/project/.sdk/tm/rust/feature/secrets/plugins/minivault.rs +1076 -0
  835. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +2 -2
  836. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +2 -2
  837. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +2 -2
  838. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +2 -2
  839. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +30 -4
  840. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +2 -2
  841. package/project/.sdk/tm/rust/feature/validate.rs +387 -0
  842. package/project/.sdk/tm/rust/src/feature/validate/.gitkeep +0 -0
  843. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  844. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  845. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  846. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  847. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  848. package/project/.sdk/tm/rust/utility/make_options.rs +12 -51
  849. package/project/.sdk/tm/rust/utility/make_spec.rs +10 -3
  850. package/project/.sdk/tm/scala/feature/ValidateFeature.scala +286 -0
  851. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +2 -2
  852. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +2 -2
  853. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +2 -2
  854. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +2 -2
  855. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +3 -3
  856. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +2 -2
  857. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +19 -2
  858. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +2 -2
  859. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +2 -2
  860. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +2 -2
  861. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +2 -2
  862. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +2 -2
  863. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +2 -2
  864. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +2 -2
  865. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +2 -2
  866. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +2 -2
  867. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +2 -2
  868. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +2 -2
  869. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +3 -2
  870. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +2 -2
  871. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +13 -2
  872. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +11 -2
  873. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +2 -2
  874. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +2 -2
  875. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +2 -2
  876. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +2 -2
  877. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +2 -2
  878. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +2 -2
  879. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +2 -2
  880. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +2 -2
  881. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Minivault.scala +979 -0
  882. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +2 -2
  883. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +2 -2
  884. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +2 -2
  885. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  886. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  887. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  888. package/project/.sdk/tm/scala/src/feature/validate/.gitkeep +0 -0
  889. package/project/.sdk/tm/scala/utility/Make.scala +12 -28
  890. package/project/.sdk/tm/scala/utility/MakeSpec.scala +8 -1
  891. package/project/.sdk/tm/scala/utility/Prepare.scala +16 -40
  892. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ValidateFeature.swift +273 -0
  893. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +2 -2
  894. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +2 -2
  895. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +2 -2
  896. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +2 -2
  897. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +2 -2
  898. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +3 -3
  899. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +2 -2
  900. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +17 -2
  901. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +2 -2
  902. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +2 -2
  903. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +2 -2
  904. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +2 -2
  905. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +2 -2
  906. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +2 -2
  907. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +2 -2
  908. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +2 -2
  909. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +2 -2
  910. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +2 -2
  911. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +2 -2
  912. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +2 -2
  913. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +2 -2
  914. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +2 -2
  915. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +2 -2
  916. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +2 -2
  917. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +2 -2
  918. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +2 -2
  919. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +2 -2
  920. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +2 -2
  921. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +2 -2
  922. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +2 -2
  923. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +2 -2
  924. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +2 -2
  925. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +2 -2
  926. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +2 -2
  927. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Make.swift +9 -3
  928. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +12 -60
  929. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +21 -39
  930. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +3 -3
  931. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  932. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  933. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  934. package/project/.sdk/tm/swift/src/feature/validate/.gitkeep +0 -0
  935. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  936. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  937. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  938. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  939. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  940. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +13 -2
  941. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  942. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  943. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +27 -1
  944. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  945. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  946. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  947. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  948. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  949. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  950. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  951. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  952. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  953. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  954. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  955. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  956. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  957. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  958. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  959. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  960. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  961. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/minivault.ts +1034 -0
  962. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  963. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  964. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  965. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  966. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +2 -1
  967. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  968. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  969. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  970. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  971. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +11 -1
  972. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +1 -1
  973. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  974. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  975. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  976. package/project/.sdk/tm/zig/core/utility.zig +45 -77
  977. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +2 -2
  978. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +2 -2
  979. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +2 -2
  980. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +2 -2
  981. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +2 -2
  982. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +3 -3
  983. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +2 -2
  984. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +18 -2
  985. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +2 -2
  986. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +2 -2
  987. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +2 -2
  988. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +2 -2
  989. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +2 -2
  990. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +2 -2
  991. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +2 -2
  992. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +2 -2
  993. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +2 -2
  994. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +2 -2
  995. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +2 -2
  996. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +2 -2
  997. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +2 -2
  998. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +2 -2
  999. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +2 -2
  1000. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +2 -2
  1001. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +2 -2
  1002. package/project/.sdk/tm/zig/feature/secrets/plugins/minivault.zig +1930 -0
  1003. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +2 -2
  1004. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +2 -2
  1005. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +2 -2
  1006. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +2 -2
  1007. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +3 -2
  1008. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +19 -2
  1009. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +2 -2
  1010. package/project/.sdk/tm/zig/feature/validate.zig +293 -0
  1011. package/project/.sdk/tm/zig/src/feature/validate/.gitkeep +0 -0
  1012. package/project/.sdk/tm/zig/test/pipeline_test.zig +34 -0
  1013. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +2 -2
  1014. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
  1015. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
  1016. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
  1017. package/project/sdkgen-package.json +1 -1
  1018. package/src/helpers/applicability.ts +11 -6
  1019. package/src/helpers/collectDeps.ts +30 -5
  1020. package/src/helpers/naming.ts +2 -2
  1021. package/src/sdkgen.ts +4 -1
  1022. package/src/utility.ts +75 -0
  1023. package/project/.sdk/tm/c/utility/prepare_auth.c +0 -65
  1024. package/project/.sdk/tm/csharp/utility/PrepareAuth.cs +0 -54
  1025. package/project/.sdk/tm/go/utility/prepare_auth.go +0 -59
  1026. package/project/.sdk/tm/java/utility/PrepareAuth.java +0 -66
  1027. package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +0 -49
  1028. package/project/.sdk/tm/lua/utility/prepare_auth.lua +0 -52
  1029. package/project/.sdk/tm/perl/utility/prepare_auth.pm +0 -56
  1030. package/project/.sdk/tm/php/utility/PrepareAuth.php +0 -45
  1031. package/project/.sdk/tm/py/pkg/utility/prepare_auth.py +0 -46
  1032. package/project/.sdk/tm/rb/utility/prepare_auth.rb +0 -35
  1033. package/project/.sdk/tm/rust/utility/prepare_auth.rs +0 -65
  1034. package/project/.sdk/tm/ts/src/utility/PrepareAuthUtility.ts +0 -78
@@ -0,0 +1,1448 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260917-1242-0 (java/plugins/com/voxgig/sekreto/plugins/Minivault.java)
2
+ // Source: https://github.com/voxgig/sekreto @ 108c4a914bee7b6534c30d1c68c25cd1b9377696 [tag: sdk-20260917-1242-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The mini vault, as a voxgig/plugin definition.
5
+ //
6
+ // A port of typescript/plugins/minivault.ts, which is canonical.
7
+ //
8
+ // A PLUGIN, NOT PART OF THE CORE: it needs crypto, which is the line the
9
+ // four built-ins stay behind. See docs/design/plugin-providers.md.
10
+ //
11
+ // THE KEY DECIDES WHAT THE VAULT HOLDS. A master key reads and writes
12
+ // every name and mints restricted keys. A restricted key reads the names
13
+ // it was granted and CANNOT DERIVE ANY OTHER - the restriction is the
14
+ // cryptography rather than a check this code performs. What that does and
15
+ // does not protect is set out in DOCS.md under "What the mini vault
16
+ // protects".
17
+ //
18
+ // `javax.crypto` carries all four primitives, so nothing here is
19
+ // hand-rolled (AGENTS.md rule 3).
20
+
21
+ package JAVAPACKAGE.feature.secrets.sekreto.plugins;
22
+
23
+ import JAVAPACKAGE.feature.secrets.sekreto.Json;
24
+ import JAVAPACKAGE.feature.secrets.sekreto.Provider;
25
+ import JAVAPACKAGE.feature.secrets.sekreto.Sekreto;
26
+ import JAVAPACKAGE.feature.secrets.sekreto.Sekreto.SekretoError;
27
+ import JAVAPACKAGE.feature.secrets.sekreto.Support;
28
+ import java.io.IOException;
29
+ import java.nio.ByteBuffer;
30
+ import java.nio.charset.StandardCharsets;
31
+ import java.nio.file.FileAlreadyExistsException;
32
+ import java.nio.file.Files;
33
+ import java.nio.file.NoSuchFileException;
34
+ import java.nio.file.Path;
35
+ import java.nio.file.StandardCopyOption;
36
+ import java.security.GeneralSecurityException;
37
+ import java.security.SecureRandom;
38
+ import java.util.ArrayList;
39
+ import java.util.Arrays;
40
+ import java.util.Base64;
41
+ import java.util.Comparator;
42
+ import java.util.LinkedHashMap;
43
+ import java.util.List;
44
+ import java.util.Map;
45
+ import java.util.TreeMap;
46
+ import javax.crypto.Cipher;
47
+ import javax.crypto.Mac;
48
+ import javax.crypto.SecretKeyFactory;
49
+ import javax.crypto.spec.GCMParameterSpec;
50
+ import javax.crypto.spec.PBEKeySpec;
51
+ import javax.crypto.spec.SecretKeySpec;
52
+ import JAVAPACKAGE.feature.secrets.plugin.Definition;
53
+ import JAVAPACKAGE.feature.secrets.plugin.PluginException;
54
+
55
+ /**
56
+ * A mini vault: every secret a project owns, encrypted, in ONE FILE.
57
+ *
58
+ * <p>The format:
59
+ *
60
+ * <pre>
61
+ * magic 4 'SKMV'
62
+ * version 1 FORMAT
63
+ * kdf 1 1 = PBKDF2-HMAC-SHA256
64
+ * cipher 1 1 = AES-256-GCM
65
+ * reserved 1 0
66
+ * keycount 4 uint32
67
+ * per key:
68
+ * id 1 + bytes the key id, PLAINTEXT
69
+ * salt 1 + bytes
70
+ * iters 4 PBKDF2 rounds for this key
71
+ * ring 1 + iv, 4 + bytes sealed under the passphrase
72
+ * meta 1 + iv, 4 + bytes sealed under the vault's meta key
73
+ * entrycount 4 uint32
74
+ * per entry:
75
+ * id 1 + bytes the blinded lookup id
76
+ * name 1 + iv, 4 + bytes sealed under the vault's name key
77
+ * value 1 + iv, 4 + bytes sealed under that secret's own key
78
+ * </pre>
79
+ *
80
+ * <p>Integers are big-endian, and every length precedes its bytes. A file one port writes is read
81
+ * by every other; `test/fixture` pins that with a committed vault rather than with agreement.
82
+ */
83
+ public final class Minivault {
84
+
85
+ private Minivault() {}
86
+
87
+ static final String MAGIC = "SKMV";
88
+ static final int FORMAT = 1;
89
+ static final int KDF_PBKDF2 = 1;
90
+ static final int CIPHER_AESGCM = 1;
91
+
92
+ /** AES-256-GCM: 32-byte keys, 12-byte nonces, 16-byte tags. */
93
+ static final int KEYLEN = 32;
94
+
95
+ static final int IVLEN = 12;
96
+ static final int TAGLEN = 16;
97
+ static final int SALTLEN = 16;
98
+
99
+ /** PBKDF2-HMAC-SHA256 rounds when a caller names none. */
100
+ public static final int ITERATIONS = 210000;
101
+
102
+ /** The key id a vault gets when a caller names none. */
103
+ public static final String MASTERKEY = "master";
104
+
105
+ // Additional authenticated data. Every blob is bound to its PLACE in the
106
+ // file, so no ciphertext can be moved.
107
+ static final String AAD_RING = "skmv1:ring:";
108
+ static final String AAD_META = "skmv1:meta:";
109
+ static final String AAD_NAME = "skmv1:name";
110
+ static final String AAD_SECRET = "skmv1:secret:";
111
+
112
+ // Everything a master can reach is derived from the root key, so a
113
+ // rotation is one new random value rather than a re-wrap of each part.
114
+ static final String LABEL_NAMES = "skmv1:names";
115
+ static final String LABEL_META = "skmv1:meta";
116
+ static final String LABEL_ID = "skmv1:id";
117
+
118
+ /**
119
+ * The largest key id the format can record.
120
+ *
121
+ * <p>`small` writes a length in ONE byte. A longer id wrapped that byte and the writer then
122
+ * appended the whole thing, so every field after it shifted. Checked where an id is ACCEPTED, so
123
+ * the refusal names the id rather than the file.
124
+ */
125
+ static final int IDMAX = 255;
126
+
127
+ /** The export key the vault API is published under, beside `provider`. */
128
+ public static final String VAULT_EXPORT = "vault";
129
+
130
+ private static final SecureRandom RANDOM = new SecureRandom();
131
+
132
+ static SekretoError fail(String text) {
133
+ return new SekretoError("sekreto: minivault: " + text);
134
+ }
135
+
136
+ static String checkid(Object id, String what) {
137
+ if (!(id instanceof String) || ((String) id).isEmpty()) {
138
+ throw fail(what);
139
+ }
140
+ String text = (String) id;
141
+ if (utf8(text).length > IDMAX) {
142
+ throw fail(
143
+ "key id is longer than "
144
+ + IDMAX
145
+ + " bytes: "
146
+ + text.substring(0, Math.min(32, text.length()))
147
+ + "...");
148
+ }
149
+ return text;
150
+ }
151
+
152
+ static byte[] utf8(String text) {
153
+ return text.getBytes(StandardCharsets.UTF_8);
154
+ }
155
+
156
+ // --- keys ------------------------------------------------------------
157
+
158
+ static byte[] hmac(byte[] key, String text) {
159
+ try {
160
+ Mac mac = Mac.getInstance("HmacSHA256");
161
+ mac.init(new SecretKeySpec(key, "HmacSHA256"));
162
+ return mac.doFinal(utf8(text));
163
+ } catch (GeneralSecurityException err) {
164
+ throw fail("hmac: " + err.getMessage());
165
+ }
166
+ }
167
+
168
+ /** The key-encryption key a passphrase unwraps a ring with. */
169
+ static byte[] kek(String passphrase, byte[] salt, int iters) {
170
+ try {
171
+ SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
172
+ return factory
173
+ .generateSecret(new PBEKeySpec(passphrase.toCharArray(), salt, iters, KEYLEN * 8))
174
+ .getEncoded();
175
+ } catch (GeneralSecurityException err) {
176
+ throw fail("pbkdf2: " + err.getMessage());
177
+ }
178
+ }
179
+
180
+ /**
181
+ * The key one named secret's value is encrypted with.
182
+ *
183
+ * <p>DERIVED, never stored, for a master: it holds the root key and so reaches every name,
184
+ * including ones written after it was made. A restricted key holds the derived keys it was
185
+ * granted and nothing that produces another.
186
+ */
187
+ static byte[] secretkey(byte[] root, String name) {
188
+ return hmac(root, AAD_SECRET + name);
189
+ }
190
+
191
+ /**
192
+ * Where a secret lives in the file, derived from its own key so that finding it needs no
193
+ * plaintext name.
194
+ */
195
+ static byte[] entryid(byte[] key) {
196
+ return hmac(key, LABEL_ID);
197
+ }
198
+
199
+ static byte[] random(int len) {
200
+ byte[] out = new byte[len];
201
+ RANDOM.nextBytes(out);
202
+ return out;
203
+ }
204
+
205
+ // --- sealing ---------------------------------------------------------
206
+
207
+ /** A nonce and the ciphertext with its tag appended. */
208
+ static final class Sealed {
209
+ final byte[] iv;
210
+ final byte[] blob;
211
+
212
+ Sealed(byte[] iv, byte[] blob) {
213
+ this.iv = iv;
214
+ this.blob = blob;
215
+ }
216
+ }
217
+
218
+ static Sealed seal(byte[] key, byte[] plain, String aad) {
219
+ try {
220
+ byte[] iv = random(IVLEN);
221
+ Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
222
+ cipher.init(
223
+ Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new GCMParameterSpec(TAGLEN * 8, iv));
224
+ cipher.updateAAD(utf8(aad));
225
+ return new Sealed(iv, cipher.doFinal(plain));
226
+ } catch (GeneralSecurityException err) {
227
+ throw fail("cannot seal: " + err.getMessage());
228
+ }
229
+ }
230
+
231
+ /**
232
+ * The plaintext, or a refusal. A GCM tag that fails to verify is the only evidence there is, and
233
+ * it cannot tell a wrong passphrase from a damaged file, so `what` names the attempt and the
234
+ * message admits both.
235
+ */
236
+ static byte[] unseal(byte[] key, Sealed sealed, String aad, String what) {
237
+ if (sealed.blob.length < TAGLEN || IVLEN != sealed.iv.length) {
238
+ throw fail(what + ": truncated");
239
+ }
240
+
241
+ // The WHOLE round-trip is guarded, not only the final block: a nonce
242
+ // of the wrong length makes `init` itself raise, and a damaged file
243
+ // reaching a caller as a raw GeneralSecurityException is a refusal
244
+ // nobody can act on.
245
+ try {
246
+ Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
247
+ cipher.init(
248
+ Cipher.DECRYPT_MODE,
249
+ new SecretKeySpec(key, "AES"),
250
+ new GCMParameterSpec(TAGLEN * 8, sealed.iv));
251
+ cipher.updateAAD(utf8(aad));
252
+ return cipher.doFinal(sealed.blob);
253
+ } catch (GeneralSecurityException | RuntimeException err) {
254
+ throw fail(what);
255
+ }
256
+ }
257
+
258
+ @SuppressWarnings("unchecked")
259
+ static Map<String, Object> jsonof(byte[] plain, String what) {
260
+ Object parsed;
261
+ try {
262
+ parsed = Json.parse(new String(plain, StandardCharsets.UTF_8));
263
+ } catch (RuntimeException err) {
264
+ throw fail("unreadable " + what);
265
+ }
266
+ if (!(parsed instanceof Map)) {
267
+ throw fail("unreadable " + what);
268
+ }
269
+ return (Map<String, Object>) parsed;
270
+ }
271
+
272
+ static String b64(byte[] bytes) {
273
+ return Base64.getEncoder().encodeToString(bytes);
274
+ }
275
+
276
+ static byte[] unb64(Object text, String what) {
277
+ if (!(text instanceof String)) {
278
+ throw fail("missing " + what);
279
+ }
280
+ try {
281
+ return Base64.getDecoder().decode((String) text);
282
+ } catch (IllegalArgumentException err) {
283
+ throw fail("missing " + what);
284
+ }
285
+ }
286
+
287
+ // --- the file --------------------------------------------------------
288
+
289
+ static final class KeyRecord {
290
+ String id;
291
+ byte[] salt;
292
+ int iters;
293
+ Sealed ring;
294
+ Sealed meta;
295
+ }
296
+
297
+ static final class EntryRecord {
298
+ byte[] id;
299
+ Sealed name;
300
+ Sealed value;
301
+ }
302
+
303
+ static final class VaultFile {
304
+ final List<KeyRecord> keys = new ArrayList<>();
305
+ final List<EntryRecord> entries = new ArrayList<>();
306
+ }
307
+
308
+ /**
309
+ * A cursor, so that every length check is in one place: a truncated vault is refused rather than
310
+ * read as a short one.
311
+ */
312
+ static final class Reader {
313
+ private final byte[] bytes;
314
+ private int at;
315
+
316
+ Reader(byte[] bytes) {
317
+ this.bytes = bytes;
318
+ }
319
+
320
+ byte[] take(int len) {
321
+ if (len < 0 || bytes.length < at + len) {
322
+ throw fail("the vault file is truncated");
323
+ }
324
+ byte[] out = Arrays.copyOfRange(bytes, at, at + len);
325
+ at += len;
326
+ return out;
327
+ }
328
+
329
+ int u8() {
330
+ return take(1)[0] & 0xff;
331
+ }
332
+
333
+ int u32() {
334
+ // A length over Integer.MAX_VALUE cannot address a byte array, and
335
+ // reading it as a negative int is what turned a damaged file into a
336
+ // crash instead of a refusal.
337
+ long value = ByteBuffer.wrap(take(4)).getInt() & 0xffffffffL;
338
+ if (value > Integer.MAX_VALUE) {
339
+ throw fail("the vault file is truncated");
340
+ }
341
+ return (int) value;
342
+ }
343
+
344
+ byte[] small() {
345
+ return take(u8());
346
+ }
347
+
348
+ byte[] large() {
349
+ return take(u32());
350
+ }
351
+
352
+ String magic() {
353
+ return new String(take(4), StandardCharsets.ISO_8859_1);
354
+ }
355
+
356
+ Sealed sealed() {
357
+ return new Sealed(small(), large());
358
+ }
359
+
360
+ boolean done() {
361
+ return at == bytes.length;
362
+ }
363
+ }
364
+
365
+ static VaultFile readfile(byte[] bytes) {
366
+ Reader read = new Reader(bytes);
367
+
368
+ if (!MAGIC.equals(read.magic())) {
369
+ throw fail("not a vault file");
370
+ }
371
+
372
+ int version = read.u8();
373
+ if (FORMAT != version) {
374
+ throw fail("unsupported format version: " + version);
375
+ }
376
+
377
+ int kdf = read.u8();
378
+ int cipher = read.u8();
379
+ if (KDF_PBKDF2 != kdf || CIPHER_AESGCM != cipher) {
380
+ throw fail("unsupported kdf or cipher: " + kdf + "/" + cipher);
381
+ }
382
+ read.u8();
383
+
384
+ VaultFile vault = new VaultFile();
385
+
386
+ int keycount = read.u32();
387
+ for (int index = 0; index < keycount; index++) {
388
+ KeyRecord record = new KeyRecord();
389
+ record.id = new String(read.small(), StandardCharsets.UTF_8);
390
+ record.salt = read.small();
391
+ record.iters = read.u32();
392
+ record.ring = read.sealed();
393
+ record.meta = read.sealed();
394
+ vault.keys.add(record);
395
+ }
396
+
397
+ int entrycount = read.u32();
398
+ for (int index = 0; index < entrycount; index++) {
399
+ EntryRecord entry = new EntryRecord();
400
+ entry.id = read.small();
401
+ entry.name = read.sealed();
402
+ entry.value = read.sealed();
403
+ vault.entries.add(entry);
404
+ }
405
+
406
+ if (!read.done()) {
407
+ throw fail("the vault file has trailing bytes");
408
+ }
409
+
410
+ return vault;
411
+ }
412
+
413
+ static byte[] writefile(VaultFile vault) {
414
+ Writer out = new Writer();
415
+
416
+ out.raw(MAGIC.getBytes(StandardCharsets.ISO_8859_1));
417
+ out.u8(FORMAT);
418
+ out.u8(KDF_PBKDF2);
419
+ out.u8(CIPHER_AESGCM);
420
+ out.u8(0);
421
+
422
+ out.u32(vault.keys.size());
423
+ for (KeyRecord key : vault.keys) {
424
+ out.small(utf8(key.id));
425
+ out.small(key.salt);
426
+ out.u32(key.iters);
427
+ out.sealed(key.ring);
428
+ out.sealed(key.meta);
429
+ }
430
+
431
+ // SORTED BY ID, which is a blinded value: the file therefore records
432
+ // nothing about the order secrets were written in.
433
+ List<EntryRecord> entries = new ArrayList<>(vault.entries);
434
+ entries.sort(Comparator.comparing(entry -> entry.id, Arrays::compareUnsigned));
435
+
436
+ out.u32(entries.size());
437
+ for (EntryRecord entry : entries) {
438
+ out.small(entry.id);
439
+ out.sealed(entry.name);
440
+ out.sealed(entry.value);
441
+ }
442
+
443
+ return out.bytes();
444
+ }
445
+
446
+ private static final class Writer {
447
+ private byte[] buffer = new byte[256];
448
+ private int at;
449
+
450
+ void raw(byte[] bytes) {
451
+ if (buffer.length < at + bytes.length) {
452
+ buffer = Arrays.copyOf(buffer, Math.max(buffer.length * 2, at + bytes.length));
453
+ }
454
+ System.arraycopy(bytes, 0, buffer, at, bytes.length);
455
+ at += bytes.length;
456
+ }
457
+
458
+ void u8(int value) {
459
+ raw(new byte[] {(byte) value});
460
+ }
461
+
462
+ void u32(int value) {
463
+ raw(ByteBuffer.allocate(4).putInt(value).array());
464
+ }
465
+
466
+ void small(byte[] bytes) {
467
+ u8(bytes.length);
468
+ raw(bytes);
469
+ }
470
+
471
+ void large(byte[] bytes) {
472
+ u32(bytes.length);
473
+ raw(bytes);
474
+ }
475
+
476
+ void sealed(Sealed value) {
477
+ small(value.iv);
478
+ large(value.blob);
479
+ }
480
+
481
+ byte[] bytes() {
482
+ return Arrays.copyOf(buffer, at);
483
+ }
484
+ }
485
+
486
+ // --- what a key is ---------------------------------------------------
487
+
488
+ /** What a key may do. `grants` is empty for a master key. */
489
+ public static final class KeyInfo {
490
+ public final String key;
491
+ public final boolean master;
492
+ public final boolean write;
493
+ public final List<String> grants;
494
+
495
+ KeyInfo(String key, boolean master, boolean write, List<String> grants) {
496
+ this.key = key;
497
+ this.master = master;
498
+ this.write = write;
499
+ this.grants = List.copyOf(grants);
500
+ }
501
+
502
+ @Override
503
+ public boolean equals(Object other) {
504
+ if (!(other instanceof KeyInfo)) {
505
+ return false;
506
+ }
507
+ KeyInfo that = (KeyInfo) other;
508
+ return key.equals(that.key)
509
+ && master == that.master
510
+ && write == that.write
511
+ && grants.equals(that.grants);
512
+ }
513
+
514
+ @Override
515
+ public int hashCode() {
516
+ return key.hashCode();
517
+ }
518
+
519
+ @Override
520
+ public String toString() {
521
+ return "{key=" + key + ", master=" + master + ", write=" + write + ", grants=" + grants + "}";
522
+ }
523
+ }
524
+
525
+ /** What a caller asks for when minting a restricted key. */
526
+ public static final class Grant {
527
+ String key;
528
+ String passphrase;
529
+ List<String> names = List.of();
530
+ boolean write;
531
+ Integer iterations;
532
+
533
+ public Grant key(String value) {
534
+ this.key = value;
535
+ return this;
536
+ }
537
+
538
+ public Grant passphrase(String value) {
539
+ this.passphrase = value;
540
+ return this;
541
+ }
542
+
543
+ public Grant names(List<String> value) {
544
+ this.names = value;
545
+ return this;
546
+ }
547
+
548
+ public Grant write(boolean value) {
549
+ this.write = value;
550
+ return this;
551
+ }
552
+
553
+ public Grant iterations(int value) {
554
+ this.iterations = value;
555
+ return this;
556
+ }
557
+ }
558
+
559
+ /**
560
+ * The key a caller asked for, or {@code master}: an EMPTY key is no key.
561
+ * The canonical's {@code opts.key || MASTERKEY} answers for both null
562
+ * and empty, and a CLI reaches this with SEKRETO_VAULT_KEY set and
563
+ * empty, which is what an unset shell variable expands to.
564
+ */
565
+ private static String wantkey(String value) {
566
+ return null == value || value.isEmpty() ? MASTERKEY : value;
567
+ }
568
+
569
+ /** How a vault handle is configured. */
570
+ public static final class Options {
571
+ String file;
572
+ String key = MASTERKEY;
573
+ String passphrase;
574
+ int iterations = ITERATIONS;
575
+ boolean create;
576
+
577
+ public Options file(String value) {
578
+ this.file = value;
579
+ return this;
580
+ }
581
+
582
+ public Options key(String value) {
583
+ this.key = wantkey(value);
584
+ return this;
585
+ }
586
+
587
+ public Options passphrase(String value) {
588
+ this.passphrase = value;
589
+ return this;
590
+ }
591
+
592
+ public Options iterations(int value) {
593
+ this.iterations = value;
594
+ return this;
595
+ }
596
+
597
+ public Options create(boolean value) {
598
+ this.create = value;
599
+ return this;
600
+ }
601
+ }
602
+
603
+ static final class Opened {
604
+ KeyInfo info;
605
+ byte[] root;
606
+ Map<String, byte[]> grants = new LinkedHashMap<>();
607
+ Sealed ring;
608
+ }
609
+
610
+ static boolean sameseal(Sealed left, Sealed right) {
611
+ return Arrays.equals(left.iv, right.iv) && Arrays.equals(left.blob, right.blob);
612
+ }
613
+
614
+ // --- creating --------------------------------------------------------
615
+
616
+ static VaultFile newvault(String keyid, String passphrase, int iterations) {
617
+ byte[] root = random(KEYLEN);
618
+ byte[] salt = random(SALTLEN);
619
+
620
+ Map<String, Object> ring = new LinkedHashMap<>();
621
+ ring.put("v", FORMAT);
622
+ ring.put("write", true);
623
+ ring.put("root", b64(root));
624
+
625
+ Map<String, Object> meta = new LinkedHashMap<>();
626
+ meta.put("v", FORMAT);
627
+ meta.put("master", true);
628
+ meta.put("write", true);
629
+ meta.put("grants", List.of());
630
+
631
+ KeyRecord record = new KeyRecord();
632
+ record.id = keyid;
633
+ record.salt = salt;
634
+ record.iters = iterations;
635
+ record.ring =
636
+ seal(kek(passphrase, salt, iterations), utf8(Json.stringify(ring)), AAD_RING + keyid);
637
+ record.meta = seal(hmac(root, LABEL_META), utf8(Json.stringify(meta)), AAD_META + keyid);
638
+
639
+ VaultFile vault = new VaultFile();
640
+ vault.keys.add(record);
641
+ return vault;
642
+ }
643
+
644
+ /**
645
+ * Write a vault file that is not there yet, and REFUSE one that is.
646
+ *
647
+ * <p>Straight to the target with CREATE_NEW rather than through a temporary and a rename.
648
+ * `rename` REPLACES its destination, so two processes creating the same vault both succeeded and
649
+ * the second discarded the first one's secrets.
650
+ */
651
+ static void putnew(String file, VaultFile vault) {
652
+ Path path = Path.of(file);
653
+ try {
654
+ spill(path, writefile(vault));
655
+ } catch (FileAlreadyExistsException err) {
656
+ throw fail("vault file already exists: " + file);
657
+ } catch (IOException err) {
658
+ throw fail("cannot write " + file + ": " + err.getMessage());
659
+ }
660
+ }
661
+
662
+ /**
663
+ * The lock every handle on one file shares.
664
+ *
665
+ * <p>Each {@code Vault} is its own object, so two handles on one path did not coordinate: both
666
+ * could finish {@code load()} before either saved, and the second {@code Files.move} then
667
+ * discarded the first one's change while reporting success. Keyed by the ABSOLUTE path, so two
668
+ * handles spelled differently still meet.
669
+ *
670
+ * <p>This is a guarantee WITHIN one process, which is what DOCS.md promises and what the go port
671
+ * arranges the same way. Two processes still race, and the format's answer to that is the
672
+ * exclusive create and the atomic rename: a reader sees one whole vault or the other, never half
673
+ * of one.
674
+ */
675
+ private static final java.util.concurrent.ConcurrentHashMap<String, Object> LOCKS =
676
+ new java.util.concurrent.ConcurrentHashMap<>();
677
+
678
+ private static Object lockfor(String file) {
679
+ String key;
680
+ try {
681
+ key = Path.of(file).toAbsolutePath().normalize().toString();
682
+ } catch (RuntimeException err) {
683
+ key = file;
684
+ }
685
+
686
+ return LOCKS.computeIfAbsent(key, ignored -> new Object());
687
+ }
688
+
689
+ /**
690
+ * Create {@code path} and write {@code raw} to it, owner-only, refusing a path that is already
691
+ * there.
692
+ *
693
+ * <p>THE MODE IS ASKED FOR AT CREATION, not set afterwards. {@code Files.write(CREATE_NEW)}
694
+ * followed by {@code setPosixFilePermissions} leaves the file at the provider default - 0666
695
+ * &amp; ~umask on a POSIX filesystem - for as long as it takes to write every byte, and another
696
+ * local user watching a shared directory can open it for writing in that window and keep the
697
+ * descriptor after the permissions narrow. A {@code FileAttribute} passed to the create is what
698
+ * closes it.
699
+ *
700
+ * <p>On a filesystem with no POSIX permissions the attribute is refused, and the fallback is the
701
+ * old shape: create, write, then narrow if the filesystem will have it. That is not a weaker
702
+ * guarantee than before, and it is the only one such a filesystem offers.
703
+ */
704
+ private static void spill(Path path, byte[] raw) throws IOException {
705
+ java.nio.file.attribute.FileAttribute<?> mode = null;
706
+ try {
707
+ mode =
708
+ java.nio.file.attribute.PosixFilePermissions.asFileAttribute(
709
+ java.nio.file.attribute.PosixFilePermissions.fromString("rw-------"));
710
+ } catch (UnsupportedOperationException err) {
711
+ mode = null;
712
+ }
713
+
714
+ if (null != mode) {
715
+ try (java.io.OutputStream out =
716
+ Files.newOutputStream(
717
+ Files.createFile(path, mode), java.nio.file.StandardOpenOption.WRITE)) {
718
+ out.write(raw);
719
+ return;
720
+ } catch (UnsupportedOperationException err) {
721
+ // Fall through: this filesystem has no POSIX permissions.
722
+ }
723
+ }
724
+
725
+ Files.write(
726
+ path,
727
+ raw,
728
+ java.nio.file.StandardOpenOption.CREATE_NEW,
729
+ java.nio.file.StandardOpenOption.WRITE);
730
+ owneronly(path);
731
+ }
732
+
733
+ private static void owneronly(Path path) {
734
+ try {
735
+ Files.setPosixFilePermissions(
736
+ path, java.nio.file.attribute.PosixFilePermissions.fromString("rw-------"));
737
+ } catch (IOException | UnsupportedOperationException err) {
738
+ // A filesystem with no POSIX permissions is not a reason to refuse a
739
+ // write that otherwise succeeded.
740
+ }
741
+ }
742
+
743
+ /**
744
+ * A handle on one vault file, opened as ONE key.
745
+ *
746
+ * <p>Every method answers as that key: `list` shows the names it may read, `get` answers for
747
+ * those and misses on the rest, and the master-only methods refuse for any other key. Nothing is
748
+ * read or derived until the first call that needs the file.
749
+ */
750
+ public static final class Vault {
751
+ private final String file;
752
+ private final String keyid;
753
+ private final String passphrase;
754
+ private final int iterations;
755
+ private final boolean create;
756
+
757
+ private Opened opened;
758
+
759
+ Vault(Options options) {
760
+ Options opts = null == options ? new Options() : options;
761
+
762
+ if (null == opts.file || opts.file.isEmpty()) {
763
+ throw fail("a vault needs a file");
764
+ }
765
+ if (null == opts.passphrase || opts.passphrase.isEmpty()) {
766
+ throw fail("a vault needs a passphrase");
767
+ }
768
+
769
+ this.file = opts.file;
770
+ this.passphrase = opts.passphrase;
771
+ this.keyid = checkid(wantkey(opts.key), "a vault needs a key id");
772
+ this.iterations = opts.iterations;
773
+ this.create = opts.create;
774
+ }
775
+
776
+ /** The file this handle reads. */
777
+ public String file() {
778
+ return file;
779
+ }
780
+
781
+ /** The key id this handle opens with. */
782
+ public String key() {
783
+ return keyid;
784
+ }
785
+
786
+ /**
787
+ * Derive the key and read the file NOW rather than at first use.
788
+ *
789
+ * <p>KeyInfo is immutable, so what a caller is handed cannot become what this vault believes:
790
+ * `vault.open().write = true` does not compile, and the list is a copy.
791
+ */
792
+ public KeyInfo open() {
793
+ return load().opened.info;
794
+ }
795
+
796
+ /** Forget the derived keys. The next call opens again. */
797
+ public void close() {
798
+ opened = null;
799
+ }
800
+
801
+ /** The names this key can read, sorted. */
802
+ public List<String> list() {
803
+ Loaded state = load();
804
+
805
+ if (null != state.opened.root) {
806
+ byte[] namekey = hmac(state.opened.root, LABEL_NAMES);
807
+ List<String> out = new ArrayList<>();
808
+ for (EntryRecord entry : state.vault.entries) {
809
+ out.add(
810
+ new String(
811
+ unseal(namekey, entry.name, AAD_NAME, "a secret name is damaged"),
812
+ StandardCharsets.UTF_8));
813
+ }
814
+ out.sort(null);
815
+ return out;
816
+ }
817
+
818
+ // A restricted key has no name key, so it reports the grants it can
819
+ // actually find: the vault never tells it what else is in there.
820
+ List<String> out = new ArrayList<>();
821
+ for (String name : state.opened.info.grants) {
822
+ if (null != findentry(state.vault, state.opened.grants.get(name))) {
823
+ out.add(name);
824
+ }
825
+ }
826
+ out.sort(null);
827
+ return out;
828
+ }
829
+
830
+ public boolean has(String name) {
831
+ return null != get(name);
832
+ }
833
+
834
+ /**
835
+ * The value, or null when the vault does not hold that name or this key was not granted it.
836
+ */
837
+ public String get(String name) {
838
+ Sekreto.checkname(name);
839
+ Loaded state = load();
840
+
841
+ byte[] key = keyfor(state.opened, name);
842
+ if (null == key) {
843
+ // OUTSIDE THE GRANT IS A MISS, deliberately. The vault answers as
844
+ // the key that opened it, so a name this key cannot read is a name
845
+ // this store does not hold for this caller.
846
+ return null;
847
+ }
848
+
849
+ EntryRecord entry = findentry(state.vault, key);
850
+ if (null == entry) {
851
+ return null;
852
+ }
853
+
854
+ return new String(
855
+ unseal(key, entry.value, AAD_SECRET + name, "the value of " + name + " is damaged"),
856
+ StandardCharsets.UTF_8);
857
+ }
858
+
859
+ /**
860
+ * Write a value. A master writes any name; a restricted key holding `write` overwrites the
861
+ * names it was granted, and creates none.
862
+ */
863
+ public void set(String name, String value) {
864
+ // Every write on this file, from any handle in this process,
865
+ // serializes here; see lockfor.
866
+ synchronized (lockfor(file)) {
867
+ Sekreto.checkname(name);
868
+ if (null == value) {
869
+ throw fail("a secret value must be text: " + name);
870
+ }
871
+
872
+ Loaded state = load();
873
+
874
+ if (!state.opened.info.write) {
875
+ throw fail("key " + state.opened.info.key + " is read-only");
876
+ }
877
+
878
+ byte[] key = keyfor(state.opened, name);
879
+ if (null == key) {
880
+ throw fail("key " + state.opened.info.key + " was not granted " + name);
881
+ }
882
+
883
+ Sealed sealedvalue = seal(key, utf8(value), AAD_SECRET + name);
884
+ byte[] id = entryid(key);
885
+
886
+ EntryRecord found = findentry(state.vault, key);
887
+ if (null != found) {
888
+ found.value = sealedvalue;
889
+ } else {
890
+ // A NEW NAME NEEDS THE NAME KEY, which only a master holds. So a
891
+ // restricted key with `write` updates what it was granted and
892
+ // cannot grow the vault.
893
+ byte[] root = rootof(state.opened, "creating the secret " + name);
894
+ EntryRecord entry = new EntryRecord();
895
+ entry.id = id;
896
+ entry.name = seal(hmac(root, LABEL_NAMES), utf8(name), AAD_NAME);
897
+ entry.value = sealedvalue;
898
+ state.vault.entries.add(entry);
899
+ }
900
+
901
+ save(state.vault);
902
+ }
903
+ }
904
+
905
+ /** Drop a name. Master only. */
906
+ public void remove(String name) {
907
+ // Every write on this file, from any handle in this process,
908
+ // serializes here; see lockfor.
909
+ synchronized (lockfor(file)) {
910
+ Sekreto.checkname(name);
911
+ Loaded state = load();
912
+ byte[] root = rootof(state.opened, "removing a secret");
913
+
914
+ byte[] wanted = entryid(secretkey(root, name));
915
+ EntryRecord found = null;
916
+ for (EntryRecord entry : state.vault.entries) {
917
+ if (Arrays.equals(entry.id, wanted)) {
918
+ found = entry;
919
+ break;
920
+ }
921
+ }
922
+ if (null == found) {
923
+ throw fail("no such secret: " + name);
924
+ }
925
+
926
+ state.vault.entries.remove(found);
927
+ save(state.vault);
928
+ }
929
+ }
930
+
931
+ /** Every key in the file, with what it may do. Master only. */
932
+ public List<KeyInfo> keys() {
933
+ Loaded state = load();
934
+ rootof(state.opened, "listing the keys");
935
+
936
+ List<KeyInfo> out = new ArrayList<>();
937
+ for (KeyRecord record : state.vault.keys) {
938
+ Map<String, Object> meta = metaof(state.opened, record);
939
+ if (null == meta) {
940
+ out.add(new KeyInfo(record.id, false, false, List.of()));
941
+ continue;
942
+ }
943
+ List<String> grants = new ArrayList<>();
944
+ Object raw = meta.get("grants");
945
+ if (raw instanceof List) {
946
+ for (Object name : (List<?>) raw) {
947
+ grants.add(String.valueOf(name));
948
+ }
949
+ }
950
+ grants.sort(null);
951
+ out.add(
952
+ new KeyInfo(
953
+ record.id,
954
+ Boolean.TRUE.equals(meta.get("master")),
955
+ Boolean.TRUE.equals(meta.get("write")),
956
+ grants));
957
+ }
958
+ return out;
959
+ }
960
+
961
+ /** Mint a restricted key. Master only. */
962
+ public void grant(Grant spec) {
963
+ // Every write on this file, from any handle in this process,
964
+ // serializes here; see lockfor.
965
+ synchronized (lockfor(file)) {
966
+ Loaded state = load();
967
+ byte[] root = rootof(state.opened, "granting a key");
968
+
969
+ Grant want = null == spec ? new Grant() : spec;
970
+ String id = checkid(want.key, "a grant needs a key id");
971
+ if (null == want.passphrase || want.passphrase.isEmpty()) {
972
+ throw fail("a grant needs a passphrase");
973
+ }
974
+ for (KeyRecord record : state.vault.keys) {
975
+ if (record.id.equals(id)) {
976
+ throw fail("key already exists: " + id);
977
+ }
978
+ }
979
+
980
+ List<String> names = new ArrayList<>(want.names);
981
+ names.sort(null);
982
+
983
+ // A TreeMap, for a ring whose JSON is the same text on every run.
984
+ // It is NOT an interop requirement - the ring is sealed under a
985
+ // fresh nonce, so its ciphertext differs per write whatever the key
986
+ // order is, and a reader parses it back into a map. It is so that
987
+ // two runs of this port over the same grant produce the same
988
+ // plaintext, which is the property a reader of this code expects.
989
+ Map<String, Object> grants = new TreeMap<>();
990
+ for (String name : names) {
991
+ Sekreto.checkname(name);
992
+ grants.put(name, b64(secretkey(root, name)));
993
+ }
994
+
995
+ Map<String, Object> ring = new LinkedHashMap<>();
996
+ ring.put("v", FORMAT);
997
+ ring.put("write", want.write);
998
+ ring.put("grants", grants);
999
+
1000
+ Map<String, Object> meta = new LinkedHashMap<>();
1001
+ meta.put("v", FORMAT);
1002
+ meta.put("master", false);
1003
+ meta.put("write", want.write);
1004
+ meta.put("grants", names);
1005
+
1006
+ state.vault.keys.add(
1007
+ sealkey(
1008
+ root,
1009
+ id,
1010
+ want.passphrase,
1011
+ null == want.iterations ? iterations : want.iterations,
1012
+ ring,
1013
+ meta));
1014
+
1015
+ save(state.vault);
1016
+ }
1017
+ }
1018
+
1019
+ /**
1020
+ * Drop a key. Master only.
1021
+ *
1022
+ * <p>Anyone who already copied the file keeps whatever that key could read, so revoking bars
1023
+ * future reads of the LIVE file and `rotate` is what takes a secret back.
1024
+ */
1025
+ public void revoke(String key) {
1026
+ // Every write on this file, from any handle in this process,
1027
+ // serializes here; see lockfor.
1028
+ synchronized (lockfor(file)) {
1029
+ Loaded state = load();
1030
+ rootof(state.opened, "revoking a key");
1031
+
1032
+ if (key.equals(state.opened.info.key)) {
1033
+ throw fail("a key cannot revoke itself: " + key);
1034
+ }
1035
+
1036
+ KeyRecord found = null;
1037
+ for (KeyRecord record : state.vault.keys) {
1038
+ if (record.id.equals(key)) {
1039
+ found = record;
1040
+ break;
1041
+ }
1042
+ }
1043
+ if (null == found) {
1044
+ throw fail("no such key: " + key);
1045
+ }
1046
+
1047
+ state.vault.keys.remove(found);
1048
+ save(state.vault);
1049
+ }
1050
+ }
1051
+
1052
+ /**
1053
+ * A new root key, every value re-encrypted under it, and EVERY OTHER KEY DROPPED. Master only.
1054
+ *
1055
+ * <p>The other keys go because they must: their rings are sealed under passphrases this process
1056
+ * does not have. Re-grant afterwards.
1057
+ */
1058
+ public void rotate() {
1059
+ // Every write on this file, from any handle in this process,
1060
+ // serializes here; see lockfor.
1061
+ synchronized (lockfor(file)) {
1062
+ Loaded state = load();
1063
+ rootof(state.opened, "rotating the vault");
1064
+
1065
+ // Read everything out under the old root before anything changes:
1066
+ // once the root is replaced the old derived keys are unreachable.
1067
+ Map<String, String> plain = new LinkedHashMap<>();
1068
+ for (String name : list()) {
1069
+ plain.put(name, get(name));
1070
+ }
1071
+
1072
+ byte[] root = random(KEYLEN);
1073
+ byte[] namekey = hmac(root, LABEL_NAMES);
1074
+
1075
+ VaultFile fresh = new VaultFile();
1076
+ for (Map.Entry<String, String> secret : plain.entrySet()) {
1077
+ byte[] key = secretkey(root, secret.getKey());
1078
+ EntryRecord entry = new EntryRecord();
1079
+ entry.id = entryid(key);
1080
+ entry.name = seal(namekey, utf8(secret.getKey()), AAD_NAME);
1081
+ entry.value = seal(key, utf8(secret.getValue()), AAD_SECRET + secret.getKey());
1082
+ fresh.entries.add(entry);
1083
+ }
1084
+
1085
+ int iters = iterations;
1086
+ for (KeyRecord record : state.vault.keys) {
1087
+ if (record.id.equals(keyid)) {
1088
+ iters = record.iters;
1089
+ }
1090
+ }
1091
+
1092
+ Map<String, Object> ring = new LinkedHashMap<>();
1093
+ ring.put("v", FORMAT);
1094
+ ring.put("write", true);
1095
+ ring.put("root", b64(root));
1096
+
1097
+ Map<String, Object> meta = new LinkedHashMap<>();
1098
+ meta.put("v", FORMAT);
1099
+ meta.put("master", true);
1100
+ meta.put("write", true);
1101
+ meta.put("grants", List.of());
1102
+
1103
+ KeyRecord record = sealkey(root, keyid, passphrase, iters, ring, meta);
1104
+ fresh.keys.add(record);
1105
+
1106
+ // SAVE FIRST, adopt second. A handle holding the new root over a file
1107
+ // that still holds the old one reads nothing and says the vault is
1108
+ // damaged.
1109
+ save(fresh);
1110
+
1111
+ Opened next = new Opened();
1112
+ next.info = new KeyInfo(keyid, true, true, List.of());
1113
+ next.root = root;
1114
+ next.ring = record.ring;
1115
+ opened = next;
1116
+ }
1117
+ }
1118
+
1119
+ // --- the inside ----------------------------------------------------
1120
+
1121
+ private static final class Loaded {
1122
+ VaultFile vault;
1123
+ Opened opened;
1124
+ }
1125
+
1126
+ private byte[] bytes() {
1127
+ Path path = Path.of(file);
1128
+ try {
1129
+ return Files.readAllBytes(path);
1130
+ } catch (NoSuchFileException err) {
1131
+ // A vault is configured deliberately, with a key. Its absence is a
1132
+ // broken deployment and never "no secrets here": answering a miss
1133
+ // would send the chain on to a weaker store.
1134
+ if (!create) {
1135
+ throw fail("no vault file: " + file);
1136
+ }
1137
+ putnew(file, newvault(keyid, passphrase, iterations));
1138
+ try {
1139
+ return Files.readAllBytes(path);
1140
+ } catch (IOException again) {
1141
+ throw fail("cannot read " + file + ": " + again.getMessage());
1142
+ }
1143
+ } catch (IOException err) {
1144
+ throw fail("cannot read " + file + ": " + err.getMessage());
1145
+ }
1146
+ }
1147
+
1148
+ private Loaded load() {
1149
+ VaultFile vault = readfile(bytes());
1150
+
1151
+ KeyRecord record = null;
1152
+ for (KeyRecord key : vault.keys) {
1153
+ if (key.id.equals(keyid)) {
1154
+ record = key;
1155
+ break;
1156
+ }
1157
+ }
1158
+ if (null == record) {
1159
+ // REVOKED, or never there. Either way this handle is finished, and
1160
+ // dropping what it derived is what stops the next call answering
1161
+ // from memory.
1162
+ opened = null;
1163
+ throw fail("no such key: " + keyid);
1164
+ }
1165
+
1166
+ Loaded state = new Loaded();
1167
+ state.vault = vault;
1168
+
1169
+ // The file still holds this key, and holds the SAME ring: a key
1170
+ // revoked and re-granted under another passphrase is a different key
1171
+ // wearing the id, and re-deriving is what refuses it.
1172
+ if (null != opened && sameseal(opened.ring, record.ring)) {
1173
+ state.opened = opened;
1174
+ return state;
1175
+ }
1176
+ opened = null;
1177
+
1178
+ byte[] plain =
1179
+ unseal(
1180
+ kek(passphrase, record.salt, record.iters),
1181
+ record.ring,
1182
+ AAD_RING + keyid,
1183
+ "wrong passphrase for key " + keyid + ", or a damaged vault");
1184
+
1185
+ Map<String, Object> ring = jsonof(plain, "key ring for " + keyid);
1186
+
1187
+ Map<String, byte[]> grants = new LinkedHashMap<>();
1188
+ Object raw = ring.get("grants");
1189
+ if (raw instanceof Map) {
1190
+ for (Map.Entry<?, ?> pair : ((Map<?, ?>) raw).entrySet()) {
1191
+ grants.put(String.valueOf(pair.getKey()), unb64(pair.getValue(), "a granted key"));
1192
+ }
1193
+ }
1194
+
1195
+ List<String> names = new ArrayList<>(grants.keySet());
1196
+ names.sort(null);
1197
+
1198
+ Object root = ring.get("root");
1199
+
1200
+ Opened next = new Opened();
1201
+ next.info =
1202
+ new KeyInfo(
1203
+ keyid,
1204
+ null != root,
1205
+ null != root || Boolean.TRUE.equals(ring.get("write")),
1206
+ names);
1207
+ next.root = null == root ? null : unb64(root, "the root key");
1208
+ next.grants = grants;
1209
+ next.ring = record.ring;
1210
+ opened = next;
1211
+
1212
+ state.opened = next;
1213
+ return state;
1214
+ }
1215
+
1216
+ private byte[] rootof(Opened open, String what) {
1217
+ if (null == open.root) {
1218
+ throw fail(what + " needs a master key, and " + open.info.key + " is restricted");
1219
+ }
1220
+ return open.root;
1221
+ }
1222
+
1223
+ /** The key for one name, or null when this key cannot reach it. */
1224
+ private byte[] keyfor(Opened open, String name) {
1225
+ if (null != open.root) {
1226
+ return secretkey(open.root, name);
1227
+ }
1228
+ return open.grants.get(name);
1229
+ }
1230
+
1231
+ private EntryRecord findentry(VaultFile vault, byte[] key) {
1232
+ if (null == key) {
1233
+ return null;
1234
+ }
1235
+ byte[] id = entryid(key);
1236
+ for (EntryRecord entry : vault.entries) {
1237
+ if (Arrays.equals(entry.id, id)) {
1238
+ return entry;
1239
+ }
1240
+ }
1241
+ return null;
1242
+ }
1243
+
1244
+ private Map<String, Object> metaof(Opened open, KeyRecord record) {
1245
+ byte[] root = rootof(open, "reading key metadata");
1246
+ String what = "metadata for key " + record.id;
1247
+ try {
1248
+ return jsonof(
1249
+ unseal(hmac(root, LABEL_META), record.meta, AAD_META + record.id, what), what);
1250
+ } catch (SekretoError err) {
1251
+ // A record written under a root key this one has replaced. The key
1252
+ // is still in the file and still opens with its own passphrase, so
1253
+ // it is reported rather than hidden - with what it can do unknown.
1254
+ return null;
1255
+ }
1256
+ }
1257
+
1258
+ private KeyRecord sealkey(
1259
+ byte[] root,
1260
+ String id,
1261
+ String phrase,
1262
+ int iters,
1263
+ Map<String, Object> ring,
1264
+ Map<String, Object> meta) {
1265
+ byte[] salt = random(SALTLEN);
1266
+ KeyRecord record = new KeyRecord();
1267
+ record.id = id;
1268
+ record.salt = salt;
1269
+ record.iters = iters;
1270
+ record.ring = seal(kek(phrase, salt, iters), utf8(Json.stringify(ring)), AAD_RING + id);
1271
+ record.meta = seal(hmac(root, LABEL_META), utf8(Json.stringify(meta)), AAD_META + id);
1272
+ return record;
1273
+ }
1274
+
1275
+ /**
1276
+ * Read, change, and REPLACE - never edit in place.
1277
+ *
1278
+ * <p>THE TEMPORARY IS RANDOM AND EXCLUSIVE. `<vault>.<pid>.tmp` is a name anyone can predict,
1279
+ * so anyone who can write the vault's directory could put a symlink there and have the next
1280
+ * save truncate whatever it pointed at.
1281
+ */
1282
+ private void save(VaultFile vault) {
1283
+ StringBuilder suffix = new StringBuilder();
1284
+ for (byte one : random(8)) {
1285
+ suffix.append(String.format("%02x", one & 0xff));
1286
+ }
1287
+ Path temp = Path.of(file + "." + suffix + ".tmp");
1288
+
1289
+ try {
1290
+ spill(temp, writefile(vault));
1291
+ Files.move(temp, Path.of(file), StandardCopyOption.REPLACE_EXISTING);
1292
+ } catch (IOException err) {
1293
+ try {
1294
+ Files.deleteIfExists(temp);
1295
+ } catch (IOException ignored) {
1296
+ // The vault is unchanged either way, and the write error is what
1297
+ // the caller needs to be told about.
1298
+ }
1299
+ throw fail("cannot write " + file + ": " + err.getMessage());
1300
+ }
1301
+ }
1302
+ }
1303
+
1304
+ /**
1305
+ * Open a vault file as one key.
1306
+ *
1307
+ * <p>The handle is lazy. Nothing is read, and no passphrase is stretched, until a method needs
1308
+ * the file.
1309
+ */
1310
+ public static Vault openvault(Options options) {
1311
+ return new Vault(options);
1312
+ }
1313
+
1314
+ /**
1315
+ * Make a vault file and return a handle on its master key.
1316
+ *
1317
+ * <p>Refuses a file that is already there: a vault is created once, and overwriting one discards
1318
+ * every secret in it.
1319
+ */
1320
+ public static Vault createvault(Options options) {
1321
+ Options opts = null == options ? new Options() : options;
1322
+
1323
+ if (null == opts.file || opts.file.isEmpty()) {
1324
+ throw fail("a vault needs a file");
1325
+ }
1326
+ if (null == opts.passphrase || opts.passphrase.isEmpty()) {
1327
+ throw fail("a vault needs a passphrase");
1328
+ }
1329
+ String keyid = checkid(wantkey(opts.key), "a vault needs a key id");
1330
+
1331
+ // No existence check first: the check and the write would be two steps,
1332
+ // and `putnew` refuses an existing file in ONE.
1333
+ putnew(opts.file, newvault(keyid, opts.passphrase, opts.iterations));
1334
+
1335
+ return new Vault(opts);
1336
+ }
1337
+
1338
+ // --- the provider ----------------------------------------------------
1339
+
1340
+ /**
1341
+ * Read a vault as one store in a chain.
1342
+ *
1343
+ * <p>The provider is the READ half and nothing more: a chain resolves secrets, and writing one is
1344
+ * a deliberate act with an API of its own.
1345
+ */
1346
+ public static Provider providerof(Vault vault) {
1347
+ return new Provider() {
1348
+ @Override
1349
+ public String lookup(String name) {
1350
+ return vault.get(name);
1351
+ }
1352
+
1353
+ @Override
1354
+ public String describe() {
1355
+ return "minivault:" + vault.file();
1356
+ }
1357
+ };
1358
+ }
1359
+
1360
+ /** A vault provider from options, for a chain built by hand. */
1361
+ public static Provider minivaultprovider(Options options) {
1362
+ return providerof(openvault(options));
1363
+ }
1364
+
1365
+ /** The vault options a provider spec describes. */
1366
+ static Options vaultoptions(Map<String, Object> spec) {
1367
+ Options out = new Options();
1368
+ out.file(Support.textor(spec.get("file"), ""));
1369
+ out.key(Support.text(spec.get("vaultkey")));
1370
+ out.passphrase(Support.textor(spec.get("passphrase"), ""));
1371
+ out.create(Boolean.TRUE.equals(spec.get("create")));
1372
+
1373
+ Object iterations = spec.get("iterations");
1374
+ if (iterations instanceof Number) {
1375
+ out.iterations(((Number) iterations).intValue());
1376
+ }
1377
+ return out;
1378
+ }
1379
+
1380
+ /**
1381
+ * The `minivault` provider kind, as a voxgig/plugin definition.
1382
+ *
1383
+ * <p>Written out rather than built by `Support.providerplugin`, because this definition publishes
1384
+ * TWO exports: `provider`, the read half every kind publishes, and `vault`, the programmatic API.
1385
+ */
1386
+ public static final Definition PLUGIN = minivaultplugin();
1387
+
1388
+ private static Definition minivaultplugin() {
1389
+ Definition definition = new Definition("minivault");
1390
+
1391
+ definition.define =
1392
+ inst -> {
1393
+ Map<String, Object> spec = Support.map(inst.options());
1394
+ Options options = vaultoptions(null == spec ? new LinkedHashMap<>() : spec);
1395
+
1396
+ Vault vault;
1397
+ try {
1398
+ // `openvault` refuses bad configuration HERE, so a mistyped
1399
+ // chain fails at construction. Reaching the FILE is not
1400
+ // configuration: the handle is lazy.
1401
+ vault = openvault(options);
1402
+ } catch (SekretoError err) {
1403
+ Map<String, Object> details = new LinkedHashMap<>();
1404
+ details.put("ref", inst.ref);
1405
+ details.put("cause", err.getMessage());
1406
+ throw new PluginException(Support.ERROR_CODE, err.getMessage(), details);
1407
+ }
1408
+
1409
+ inst.export(Support.PROVIDER_EXPORT, providerof(vault));
1410
+ inst.export(VAULT_EXPORT, vault);
1411
+ };
1412
+
1413
+ return definition;
1414
+ }
1415
+
1416
+ /**
1417
+ * The vault behind a store in a chain, as its programmatic API.
1418
+ *
1419
+ * <p>With no store named, the unqualified alias answers: one vault in the chain resolves whatever
1420
+ * it is called, and two raise rather than picking one.
1421
+ */
1422
+ public static Vault vaultof(Sekreto secrets) {
1423
+ Object found = secrets.host().exports("minivault/" + VAULT_EXPORT);
1424
+ if (null == found) {
1425
+ throw fail("no minivault store in this chain");
1426
+ }
1427
+ return (Vault) found;
1428
+ }
1429
+
1430
+ /** The vault behind one NAMED store in a chain. */
1431
+ public static Vault vaultof(Sekreto secrets, String store) {
1432
+ if (null == store) {
1433
+ return vaultof(secrets);
1434
+ }
1435
+
1436
+ // A NAMED STORE MUST EXIST, and the alias must not stand in for it.
1437
+ // `host.exports` falls back to the alias when the exact ref misses, so
1438
+ // asking for `minivault` in a chain whose only vault is named `app`
1439
+ // used to hand back the `app` vault - and then write to it.
1440
+ String ref = "minivault".equals(store) ? "minivault" : "minivault$" + store;
1441
+
1442
+ if (null == secrets.host().instance(ref)) {
1443
+ throw fail("no minivault store named " + store + " in this chain");
1444
+ }
1445
+
1446
+ return (Vault) secrets.host().exports(ref + "/" + VAULT_EXPORT);
1447
+ }
1448
+ }